AppDevToolsZ-Blog应用中心开发者工具http://www.z18zs.com/支持后台管理官方应用中心的订单及应用下载orders.phpinclude.php1捷闪站长网2693558149@qq.comhttp://www.z18zs.com/1519351.02018-09-082018-09-0805.2 AppDevTools/query/vendor/bin/AppDevTools/query/vendor/composer/AppDevTools/query/vendor/guzzlehttp/guzzle/src/Cookie/AppDevTools/query/vendor/guzzlehttp/guzzle/src/Exception/AppDevTools/query/vendor/guzzlehttp/guzzle/src/Handler/AppDevTools/query/vendor/guzzlehttp/guzzle/src/AppDevTools/query/vendor/guzzlehttp/guzzle/AppDevTools/query/vendor/guzzlehttp/promises/src/AppDevTools/query/vendor/guzzlehttp/promises/AppDevTools/query/vendor/guzzlehttp/psr7/src/AppDevTools/query/vendor/guzzlehttp/psr7/AppDevTools/query/vendor/guzzlehttp/AppDevTools/query/vendor/jaeger/g-http/src/AppDevTools/query/vendor/jaeger/g-http/AppDevTools/query/vendor/jaeger/phpquery-single/AppDevTools/query/vendor/jaeger/querylist/src/Contracts/AppDevTools/query/vendor/jaeger/querylist/src/Dom/AppDevTools/query/vendor/jaeger/querylist/src/Exceptions/AppDevTools/query/vendor/jaeger/querylist/src/Providers/AppDevTools/query/vendor/jaeger/querylist/src/Services/AppDevTools/query/vendor/jaeger/querylist/src/AppDevTools/query/vendor/jaeger/querylist/AppDevTools/query/vendor/jaeger/AppDevTools/query/vendor/psr/http-message/src/AppDevTools/query/vendor/psr/http-message/AppDevTools/query/vendor/psr/AppDevTools/query/vendor/symfony/polyfill-mbstring/Resources/unidata/AppDevTools/query/vendor/symfony/polyfill-mbstring/Resources/AppDevTools/query/vendor/symfony/polyfill-mbstring/AppDevTools/query/vendor/symfony/polyfill-php72/AppDevTools/query/vendor/symfony/var-dumper/Caster/AppDevTools/query/vendor/symfony/var-dumper/Cloner/AppDevTools/query/vendor/symfony/var-dumper/Command/Descriptor/AppDevTools/query/vendor/symfony/var-dumper/Command/AppDevTools/query/vendor/symfony/var-dumper/Dumper/ContextProvider/AppDevTools/query/vendor/symfony/var-dumper/Dumper/AppDevTools/query/vendor/symfony/var-dumper/Exception/AppDevTools/query/vendor/symfony/var-dumper/Resources/bin/AppDevTools/query/vendor/symfony/var-dumper/Resources/css/AppDevTools/query/vendor/symfony/var-dumper/Resources/functions/AppDevTools/query/vendor/symfony/var-dumper/Resources/js/AppDevTools/query/vendor/symfony/var-dumper/Resources/AppDevTools/query/vendor/symfony/var-dumper/Server/AppDevTools/query/vendor/symfony/var-dumper/Test/AppDevTools/query/vendor/symfony/var-dumper/Tests/Caster/AppDevTools/query/vendor/symfony/var-dumper/Tests/Cloner/AppDevTools/query/vendor/symfony/var-dumper/Tests/Dumper/AppDevTools/query/vendor/symfony/var-dumper/Tests/Fixtures/AppDevTools/query/vendor/symfony/var-dumper/Tests/Server/AppDevTools/query/vendor/symfony/var-dumper/Tests/Test/AppDevTools/query/vendor/symfony/var-dumper/Tests/AppDevTools/query/vendor/symfony/var-dumper/AppDevTools/query/vendor/symfony/AppDevTools/query/vendor/tightenco/collect/src/Collect/Contracts/Support/AppDevTools/query/vendor/tightenco/collect/src/Collect/Contracts/AppDevTools/query/vendor/tightenco/collect/src/Collect/Support/Debug/AppDevTools/query/vendor/tightenco/collect/src/Collect/Support/Traits/AppDevTools/query/vendor/tightenco/collect/src/Collect/Support/AppDevTools/query/vendor/tightenco/collect/src/Collect/AppDevTools/query/vendor/tightenco/collect/src/AppDevTools/query/vendor/tightenco/collect/stubs/src/Collect/Support/AppDevTools/query/vendor/tightenco/collect/stubs/src/Collect/AppDevTools/query/vendor/tightenco/collect/stubs/src/AppDevTools/query/vendor/tightenco/collect/stubs/tests/AppDevTools/query/vendor/tightenco/collect/stubs/AppDevTools/query/vendor/tightenco/collect/tests/Support/AppDevTools/query/vendor/tightenco/collect/tests/AppDevTools/query/vendor/tightenco/collect/AppDevTools/query/vendor/tightenco/AppDevTools/query/vendor/AppDevTools/query/AppDevTools/app.phpPD9waHANCnJlcXVpcmUgJy4uLy4uLy4uL3piX3N5c3RlbS9mdW5jdGlvbi9jX3N5c3RlbV9iYXNlLnBocCc7DQpyZXF1aXJlICcuLi8uLi8uLi96Yl9zeXN0ZW0vZnVuY3Rpb24vY19zeXN0ZW1fYWRtaW4ucGhwJzsNCiR6YnAtPkxvYWQoKTsNCiRhY3Rpb249J3Jvb3QnOw0KaWYgKCEkemJwLT5DaGVja1JpZ2h0cygkYWN0aW9uKSkgeyR6YnAtPlNob3dFcnJvcig2KTtkaWUoKTt9DQppZiAoISR6YnAtPkNoZWNrUGx1Z2luKCdBcHBEZXZUb29scycpKSB7JHpicC0+U2hvd0Vycm9yKDQ4KTtkaWUoKTt9DQoNCiRibG9ndGl0bGU9J1otQmxvZ+W6lOeUqOS4reW/g+W8gOWPkeiAheW3peWFtyc7DQpyZXF1aXJlICRibG9ncGF0aCAuICd6Yl9zeXN0ZW0vYWRtaW4vYWRtaW5faGVhZGVyLnBocCc7DQpyZXF1aXJlICRibG9ncGF0aCAuICd6Yl9zeXN0ZW0vYWRtaW4vYWRtaW5fdG9wLnBocCc7DQpyZXF1aXJlICdmdW5jdGlvbi5waHAnOw0KDQokZGF0YSA9IEdldF9BcHBfQ29udGVudHMoKTsNCj8+DQo8ZGl2IGlkPSJkaXZNYWluIj4NCiAgPGRpdiBjbGFzcz0iZGl2SGVhZGVyIj48P3BocCBlY2hvICRibG9ndGl0bGU7Pz48L2Rpdj4NCiAgPGRpdiBjbGFzcz0iU3ViTWVudSI+DQogIAk8YSBocmVmPSJvcmRlcnMucGhwIj48c3BhbiBjbGFzcz0ibS1sZWZ0Ij7orqLljZXnrqHnkIY8L3NwYW4+PC9hPg0KICAJPGEgaHJlZj0iYXBwLnBocCI+PHNwYW4gY2xhc3M9Im0tbm93IG0tbGVmdCI+5bqU55So566h55CGPC9zcGFuPjwvYT4NCiAgPC9kaXY+DQogIDxkaXYgaWQ9ImRpdk1haW4yIj4NCiAgICA8dGFibGUgYm9yZGVyPSIxIiBjbGFzcz0idGFibGVGdWxsIHRhYmxlQm9yZGVyIHRhYmxlQm9yZGVyLXRoY2VudGVyIHRhYmxlX3N0cmlwZWQgdGFibGVfaG92ZXIiPg0KICAgICAgICA8P3BocCBlY2hvICRkYXRhWzBdWyd0YWJsZSddID8+DQogICAgPC90YWJsZT4NCiAgICA8cCBjbGFzcz0icGFnZWJhciI+DQoJCTw/cGhwIGVjaG8gJGRhdGFbMF1bJ3BhZ2ViYXInXSA/Pg0KICAgIDwvcD4NCiAgPC9kaXY+DQo8L2Rpdj4NCiAgICAgICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KICAgICAgICAkKGZ1bmN0aW9uKCl7DQogICAgICAgICAgJCgiI2RpYWxvZy1tZXNzYWdlIikuZGlhbG9nKHsNCiAgICAgICAgICAgIGF1dG9PcGVuOmZhbHNlLA0KICAgICAgICAgICAgbW9kYWw6dHJ1ZSwNCiAgICAgICAgICAgIGJ1dHRvbnM6ew0KICAgICAgICAgICAgICBPazpmdW5jdGlvbigpew0KICAgICAgICAgICAgICAgICQodGhpcykuZGlhbG9nKCJjbG9zZSIpOw0KICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgIH0pOw0KICAgICAgICB9KTsNCiAgICAgICAgPC9zY3JpcHQ+DQogICAgICAgIDxkaXYgaWQ9ImRpYWxvZy1tZXNzYWdlIiB0aXRsZT0i5LiL6L295bqU55SoIj4NCiAgICAgICAgICA8cD7mraPlnKjkuIvovb3lupTnlKjkuK3vvIzor7fnqI3lgJkuLi48L3A+DQogICAgICAgIDwvZGl2Pg0KICAgICAgICA8c2NyaXB0Pg0KICAgICAgICBmdW5jdGlvbiBpbnN0YWxsYXBwX2RldihpZCl7DQogICAgICAgICAgJCgiI2RpYWxvZy1tZXNzYWdlIikuZGlhbG9nKCJvcGVuIik7DQogICAgICAgICAgJCgiLnVpLWRpYWxvZyIpLmZpbmQoImJ1dHRvbiIpLmhpZGUoKTsNCiAgICAgICAgICAkLnBvc3QoemJwLm9wdGlvbnMuYmxvZ2hvc3QrInpiX3VzZXJzL3BsdWdpbi9BcHBEZXZUb29scy9hcHBfZG93bmxvYWQucGhwP2NzcmZUb2tlbj08P3BocCBlY2hvICR6YnAtPkdldENTUkZUb2tlbigpID8+JmlkPSIraWQsDQogICAgICAgICAgIiIsDQogICAgICAgICAgZnVuY3Rpb24oZGF0YSl7DQogICAgICAgICAgICBzd2l0Y2goZGF0YS51aWQpew0KICAgICAgICAgICAgY2FzZSAnMCc6DQogICAgICAgICAgICAgICQoIi51aS1kaWFsb2ciKS5maW5kKCJidXR0b24iKS5zaG93KCk7DQogICAgICAgICAgICAgICQoIi51aS1kaWFsb2ciKS5maW5kKCJwIikuaHRtbCgi5bqU55So5bey5LiL6L295Y+K5pu05paw5bey5a6M5oiQIik7ICANCiAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgICAkKCIudWktZGlhbG9nIikuZmluZCgiYnV0dG9uIikuc2hvdygpOw0KICAgICAgICAgICAgICAkKCIudWktZGlhbG9nIikuZmluZCgicCIpLmh0bWwoIuW6lOeUqOS4i+i9veWksei0pS4iKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9LCAianNvbiIpOw0KICAgICAgICB9DQogICAgICAgIDwvc2NyaXB0Pg0KPHNjcmlwdD4NCiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7DQogICQoIi50ZDIwIikuZWFjaChmdW5jdGlvbigpew0KICAgICAgdmFyIHBpZD0kKHRoaXMpLnBhcmVudCgpLmNoaWxkcmVuKCkuZmlyc3QoKS5odG1sKCk7DQogICAgICBpZihwaWQ9PXVuZGVmaW5lZCkgcGlkID0gJCh0aGlzKS5maW5kKCJzdHJvbmciKS5odG1sKCk7DQogICAgICB2YXIgcz0iIjsNCiAgICAgIHM9cysiPGEgY2xhc3M9XCJidXR0b25cIiBocmVmPSdqYXZhc2NyaXB0OjsnIG9uY2xpY2s9XCJpbnN0YWxsYXBwX2RldignIitwaWQrIicpXCIgdGFyZ2V0PSdfYmxhbmsnIHRpdGxlPSfkuIvovb0nPjxpbWcgaGVpZ2h0PScxNicgd2lkdGg9JzE2JyBzcmM9JyIrYmxvZ2hvc3QrInpiX3N5c3RlbS9pbWFnZS9hZG1pbi9kb3dubG9hZC5wbmcnLz48L2E+Jm5ic3A7Jm5ic3A7IjsNCiAgICAgICQodGhpcykucGFyZW50KCkuY2hpbGRyZW4oKS5sYXN0KCkucHJlcGVuZChzKTsNCiAgfSk7DQp9KTsNCjwvc2NyaXB0PjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij5BY3RpdmVUb3BNZW51KCJ0b3BtZW51X2FwcGRldnRvb2xzIik7PC9zY3JpcHQ+DQoNCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij5BZGRIZWFkZXJJY29uKCI8P3BocCBlY2hvICRibG9naG9zdCAuICd6Yl91c2Vycy9wbHVnaW4vQXBwRGV2VG9vbHMvbG9nby5wbmcnOz8+Iik7PC9zY3JpcHQ+DQo8P3BocA0KcmVxdWlyZSAkYmxvZ3BhdGggLiAnemJfc3lzdGVtL2FkbWluL2FkbWluX2Zvb3Rlci5waHAnOw0KUnVuVGltZSgpOw0KPz4=AppDevTools/app_download.phpPD9waHANCnJlcXVpcmUgJy4uLy4uLy4uL3piX3N5c3RlbS9mdW5jdGlvbi9jX3N5c3RlbV9iYXNlLnBocCc7DQpyZXF1aXJlICcuLi8uLi8uLi96Yl9zeXN0ZW0vZnVuY3Rpb24vY19zeXN0ZW1fYWRtaW4ucGhwJzsNCiR6YnAtPkxvYWQoKTsNCiRhY3Rpb249J3Jvb3QnOw0KaWYgKCEkemJwLT5DaGVja1JpZ2h0cygkYWN0aW9uKSkgeyR6YnAtPlNob3dFcnJvcig2KTtkaWUoKTt9DQppZiAoISR6YnAtPkNoZWNrUGx1Z2luKCdBcHBEZXZUb29scycpKSB7JHpicC0+U2hvd0Vycm9yKDQ4KTtkaWUoKTt9DQoNCnJlcXVpcmUgJ2Z1bmN0aW9uLnBocCc7DQpTZXJ2ZXJfT3BlbignZG93bicpOw0KPz4=AppDevTools/function.phpPD9waHANCg0KZGVmaW5lKCdBUFBERVZUT09MU19BUFBDRU5UUkVfT1JJR0lOX1VSTCcsICdodHRwczovL2FwcC56YmxvZ2NuLmNvbS8nKTsNCmRlZmluZSgnQVBQREVWVE9PTFNfQVBQQ0VOVFJFX1VSTCcsICdodHRwczovL2FwcC56YmxvZ2NuLmNvbS9jbGllbnQvJyk7DQoNCmlmKCEkemJwLT5Db25maWcoJ0FwcENlbnRyZScpLT51c2VybmFtZSkgUmVkaXJlY3QoJGJsb2dob3N0IC4gJ3piX3VzZXJzL3BsdWdpbi9BcHBDZW50cmUvY2xpZW50LnBocCcpOw0KDQpyZXF1aXJlICcuL3F1ZXJ5L3ZlbmRvci9hdXRvbG9hZC5waHAnOw0KDQp1c2UgUUxcUXVlcnlMaXN0Ow0KDQpmdW5jdGlvbiBTZXJ2ZXJfT3BlbigkbWV0aG9kLCAkcGFnZSA9IDEsICRkYXRhID0gYXJyYXkoKSkgew0KCWdsb2JhbCAkemJwLCAkYmxvZ3ZlcnNpb247DQoNCglzd2l0Y2ggKCRtZXRob2QpIHsNCgkJY2FzZSAnb3JkZXJzJzoNCgkJCXJldHVybiBTZXJ2ZXJfU2VuZFJlcXVlc3QoQVBQREVWVE9PTFNfQVBQQ0VOVFJFX09SSUdJTl9VUkwgLiAnemJfdXNlcnMvcGx1Z2luL0FwcEJ1eS9zaG9wL21haW4ucGhwP3BhZ2U9Jy4kcGFnZSwgJGRhdGEpOw0KCQkJYnJlYWs7DQoJCWNhc2UgJ2FwcCc6DQoJCQlyZXR1cm4gU2VydmVyX1NlbmRSZXF1ZXN0KEFQUERFVlRPT0xTX0FQUENFTlRSRV9PUklHSU5fVVJMIC4gJ3piX3N5c3RlbS9hZG1pbi9pbmRleC5waHA/YWN0PUFydGljbGVNbmcmcGFnZT0nLiRwYWdlKTsNCgkJCWJyZWFrOw0KCQljYXNlICdkb3duJzoNCgkJCUNoZWNrSXNSZWZlcmVyVmFsaWQoKTsNCgkJCQ0KCQkJQWRkX0ZpbHRlcl9QbHVnaW4oJ0ZpbHRlcl9QbHVnaW5fWmJwX1Nob3dFcnJvcicsICdTY3JpcHRFcnJvcicsIFBMVUdJTl9FWElUU0lHTkFMX1JFVFVSTik7DQoJCQloZWFkZXIoJ0NvbnRlbnQtdHlwZTogYXBwbGljYXRpb24veC1qYXZhc2NyaXB0OyBDaGFyc2V0PXV0Zi04Jyk7DQoJCQlvYl9jbGVhbigpOw0KDQoJCQlpZih2ZXJzaW9uX2NvbXBhcmUoUEhQX1ZFUlNJT04sICc1LjMuMCcpIDwgMCApew0KCQkJCWRlZmluZSgnQVBQQ0VOVFJFX0NBTl9OT1RfSFRUUFMnLCB0cnVlKTsNCgkJCX0NCg0KCQkJJHMgPSBTZXJ2ZXJfU2VuZFJlcXVlc3QoQVBQREVWVE9PTFNfQVBQQ0VOVFJFX09SSUdJTl9VUkwgLiAnemJfdXNlcnMvdGhlbWUvYXBwY2VudHJlX3NlcnZlci9hcHAvZG93bmxvYWQucGhwP2lkPScgLiBHZXRWYXJzKCdpZCcsICdHRVQnKSk7DQoNCgkJCXRyeSB7DQoJCQkJJHhtbCA9ICRzOw0KCQkJCSRjaGFyc2V0ID0gYXJyYXkoKTsNCgkJCQkkY2hhcnNldFsxXSA9IHN1YnN0cigkeG1sLCAwLCAxKTsNCgkJCQkkY2hhcnNldFsyXSA9IHN1YnN0cigkeG1sLCAxLCAxKTsNCgkJCQlpZiAob3JkKCRjaGFyc2V0WzFdKSA9PSAzMSAmJiBvcmQoJGNoYXJzZXRbMl0pID09IDEzOSkgew0KCQkJCQkkeG1sID0gZ3pkZWNvZGUoJHhtbCk7DQoJCQkJfQ0KDQoJCQkJJHhtbCA9IHNpbXBsZXhtbF9sb2FkX3N0cmluZygkeG1sKTsNCgkJCQlpZiAoJHhtbCA9PT0gZmFsc2UpIHsNCgkJCQkJdGhyb3cgbmV3IEV4Y2VwdGlvbignWE1MIEVycm9yJyk7DQoJCQkJfQ0KCQkJfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7DQoJCQkJJHpicC0+U2V0SGludCgnYmFkJywgJ0FwcOS4i+i9veWksei0pe+8gScpOw0KCQkJCXRocm93ICRlOw0KCQkJfQ0KDQoJCQkkaWQgPSAkeG1sLT5pZDsNCg0KCQkJaWYgKCEkemJwLT5DaGVja0FwcCgkaWQpKSB7DQoJCQkJQXBwQ2VudHJlX0NoZWNrSW5TZWN1cml0eU1vZGUoKTsNCgkJCX0NCg0KCQkJaWYgKEFwcDo6VW5QYWNrKCRzKSkgew0KCQkJCQ0KCQkJCSR0eXBlID0gJHhtbFsndHlwZSddOw0KCQkJCQ0KCQkJCSRkaXIgPSAkemJwLT5wYXRoIC4gJ3piX3VzZXJzLycgLiAkdHlwZSAuICcvJyAuICRpZCAuICcvJzsNCg0KCQkJCWlmKCBpc19yZWFkYWJsZSgkZGlyIC4gJHR5cGUgLiAnLnhtbCcpICl7DQoJCQkJCSRjID0gZmlsZV9nZXRfY29udGVudHMoJGRpciAuICR0eXBlIC4gJy54bWwnKTsNCgkJCQkJaWYoIHN0cmlwb3MoJGMsJzxwdWJkYXRlPicuJHhtbC0+cHViZGF0ZS4nPC9wdWJkYXRlPicpIT09ZmFsc2UgKXsNCgkJCQkJCSR6YnAtPlNldEhpbnQoJ2dvb2QnLCAn5LiL6L29QVBQ5bm26Kej5Y6L5a6J6KOF5oiQ5YqfIScpOw0KCQkJCQkJZGllKCd7InVpZCI6IjAifScpOw0KCQkJCQl9DQoJCQkJfQ0KCQkJCSR6YnAtPlNldEhpbnQoJ2JhZCcsICfmnKzlnLDlhpnlhaXmnYPpmZDkuI3otrMsQXBw6Kej5Y6L5Yiw5a6J6KOF55uu5b2V5aSx6LSlIScpOw0KCQkJfQ0KCQkJZGllKCd7InVpZCI6Ii0xIn0nKTsNCgkJCWJyZWFrOw0KCX0NCg0KfQ0KDQpmdW5jdGlvbiBHZXRfT3JkZXJzX0NvbnRlbnRzKCkgew0KCWdsb2JhbCAkemJwOw0KCWlmKEdldFZhcnMoJ3NlYXJjaCcsICdQT1NUJykpIHsNCgkJJGh0bWwgPSBTZXJ2ZXJfT3Blbignb3JkZXJzJywgR2V0VmFycygncGFnZScsICdHRVQnKSwgYXJyYXkoJ3NlYXJjaCcgPT4gR2V0VmFycygnc2VhcmNoJywgJ1BPU1QnKSkpOw0KCX0gZWxzZSB7DQoJCSRodG1sID0gU2VydmVyX09wZW4oJ29yZGVycycsIEdldFZhcnMoJ3BhZ2UnLCAnR0VUJykpOw0KCX0NCgkkZGF0YSA9IFF1ZXJ5TGlzdDo6aHRtbCgkaHRtbCktPnJ1bGVzKFsNCgkgICAgJ3RhYmxlJyA9PiBbJ3RhYmxlLnRhYmxlRnVsbCcsICdodG1sJ10sDQoJICAgICdwYWdlYmFyJyA9PiBbJ3AucGFnZWJhcicsICdodG1sJywgJycsIGZ1bmN0aW9uICgkY29udGVudCkgew0KCSAgICAJZ2xvYmFsICR6YnA7DQoJICAgIAkkY29udGVudCA9IHN0cl9yZXBsYWNlKCdodHRwczovL2FwcC56YmxvZ2NuLmNvbS96Yl91c2Vycy9wbHVnaW4vQXBwQnV5L21haW4ucGhwJywgJHpicC0+aG9zdCAuICd6Yl91c2Vycy9wbHVnaW4vQXBwRGV2VG9vbHMvb3JkZXJzLnBocCcsICRjb250ZW50KTsNCgkJCXJldHVybiAkY29udGVudDsNCgkgICAgfV0sDQoJXSktPnF1ZXJ5KCktPmdldERhdGEoKS0+YWxsKCk7DQoNCgkkZGF0YVswXVsndGFibGUnXSA9IHN0cl9yZXBsYWNlKCc8dGQ+PC90ZD4nLCAnJywgJGRhdGFbMF1bJ3RhYmxlJ10pOw0KCSRkYXRhWzBdWyd0YWJsZSddID0gc3RyX3JlcGxhY2UoJzx0aCBjbGFzcz0idGQ1IHRkQ2VudGVyIj7mk43kvZw8L3RoPicsICcnLCAkZGF0YVswXVsndGFibGUnXSk7DQoJJGRhdGFbMF1bJ3RhYmxlJ10gPSBzdHJfcmVwbGFjZSgnLy9hcHAuemJsb2djbi5jb20vemJfc3lzdGVtL2ltYWdlL2FkbWluL2xpbmsucG5nJywgJHpicC0+aG9zdCAuICd6Yl9zeXN0ZW0vaW1hZ2UvYWRtaW4vbGluay5wbmcnLCAkZGF0YVswXVsndGFibGUnXSk7DQoJcmV0dXJuICRkYXRhOw0KfQ0KDQoNCmZ1bmN0aW9uIEdldF9BcHBfQ29udGVudHMoKSB7DQoJZ2xvYmFsICR6YnA7DQoJJGh0bWwgPSBTZXJ2ZXJfT3BlbignYXBwJywgR2V0VmFycygncGFnZScsICdHRVQnKSk7DQoJJGRhdGEgPSBRdWVyeUxpc3Q6Omh0bWwoJGh0bWwpLT5ydWxlcyhbDQoJICAgICd0YWJsZScgPT4gWyd0YWJsZS50YWJsZUZ1bGwnLCAnaHRtbCddLA0KCSAgICAncGFnZWJhcicgPT4gWydwLnBhZ2ViYXInLCAnaHRtbCcsICcnLCBmdW5jdGlvbiAoJGNvbnRlbnQpIHsNCgkgICAgCWdsb2JhbCAkemJwOw0KCSAgICAJJGNvbnRlbnQgPSBzdHJfcmVwbGFjZSgnaHR0cHM6Ly9hcHAuemJsb2djbi5jb20vemJfc3lzdGVtL2FkbWluL2luZGV4LnBocCcsICR6YnAtPmhvc3QgLiAnemJfdXNlcnMvcGx1Z2luL0FwcERldlRvb2xzL2FwcC5waHAnLCAkY29udGVudCk7DQoJICAgIAkkY29udGVudCA9IHN0cl9yZXBsYWNlKCdodHRwczovL2FwcC56YmxvZ2NuLmNvbS96Yl9zeXN0ZW0vY21kLnBocD9hY3Q9QXJ0aWNsZU1uZycsICR6YnAtPmhvc3QgLiAnemJfdXNlcnMvcGx1Z2luL0FwcERldlRvb2xzL2FwcC5waHAnLCAkY29udGVudCk7DQoJCQlyZXR1cm4gJGNvbnRlbnQ7DQoJICAgIH1dLA0KCV0pLT5xdWVyeSgpLT5nZXREYXRhKCktPmFsbCgpOw0KDQoJJGRhdGFbMF1bJ3RhYmxlJ10gPSBzdHJfcmVwbGFjZSgnLi4vaW1hZ2UvYWRtaW4vbGluay5wbmcnLCAkemJwLT5ob3N0IC4gJ3piX3N5c3RlbS9pbWFnZS9hZG1pbi9saW5rLnBuZycsICRkYXRhWzBdWyd0YWJsZSddKTsNCgkkZGF0YVswXVsndGFibGUnXSA9IHN0cl9yZXBsYWNlKCcuLi9pbWFnZS9hZG1pbi9wYWdlX2VkaXQucG5nJywgJHpicC0+aG9zdCAuICd6Yl9zeXN0ZW0vaW1hZ2UvYWRtaW4vcGFnZV9lZGl0LnBuZycsICRkYXRhWzBdWyd0YWJsZSddKTsNCgkkZGF0YVswXVsndGFibGUnXSA9IHN0cl9yZXBsYWNlKCcuLi9pbWFnZS9hZG1pbi9kZWxldGUucG5nJywgJHpicC0+aG9zdCAuICd6Yl9zeXN0ZW0vaW1hZ2UvYWRtaW4vZGVsZXRlLnBuZycsICRkYXRhWzBdWyd0YWJsZSddKTsNCgkkZGF0YVswXVsndGFibGUnXSA9IHN0cl9yZXBsYWNlKCcuLi9jbWQucGhwP2FjdD1BcnRpY2xlRWR0JywgICdodHRwczovL2FwcC56YmxvZ2NuLmNvbS96Yl9zeXN0ZW0vY21kLnBocD9hY3Q9QXJ0aWNsZUVkdCcsICRkYXRhWzBdWyd0YWJsZSddKTsNCglyZXR1cm4gJGRhdGE7DQp9DQoNCmZ1bmN0aW9uIFNlcnZlcl9TZW5kUmVxdWVzdCgkdXJsLCAkZGF0YSA9IGFycmF5KCksICR1ID0gJycsICRjID0gJycpIHsNCglnbG9iYWwgJHpicDsNCg0KCSRjID0gQXBwQ2VudHJlX0dldF9Db29raWVzKCk7DQoJJHUgPSBBcHBDZW50cmVfR2V0X1VzZXJBZ2VudCgpOw0KDQoJaWYgKGNsYXNzX2V4aXN0cygnTmV0d29yaycpKSB7DQoJCXJldHVybiBTZXJ2ZXJfU2VuZFJlcXVlc3RfTmV0d29yaygkdXJsLCAkZGF0YSwgJHUsICRjKTsNCgl9DQoNCglpZiAoZnVuY3Rpb25fZXhpc3RzKCJjdXJsX2luaXQiKSAmJiBmdW5jdGlvbl9leGlzdHMoJ2N1cmxfZXhlYycpKSB7DQoJCXJldHVybiBTZXJ2ZXJfU2VuZFJlcXVlc3RfQ1VybCgkdXJsLCAkZGF0YSwgJHUsICRjKTsNCgl9DQoNCglpZiAoIWluaV9nZXQoImFsbG93X3VybF9mb3BlbiIpKSB7DQoJCXJldHVybiAiIjsNCgl9DQoJcmV0dXJuICIiOw0KfQ0KDQpmdW5jdGlvbiBTZXJ2ZXJfU2VuZFJlcXVlc3RfQ1VybCgkdXJsLCAkZGF0YSA9IGFycmF5KCksICR1LCAkYykgew0KCWdsb2JhbCAkemJwOw0KDQoJJGNoID0gY3VybF9pbml0KCR1cmwpOw0KCWlmIChleHRlbnNpb25fbG9hZGVkKCd6bGliJykpIHsNCgkJY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0VOQ09ESU5HLCAnZ3ppcCcpOw0KCX0NCgljdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsIDEpOw0KCWN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9USU1FT1VULCAxMjApOw0KCWlmKGlzc2V0KCRfU0VSVkVSWydIVFRQX0FDQ0VQVCddKSl7DQoJCWN1cmxfc2V0b3B0KCRjaCxDVVJMT1BUX0hUVFBIRUFERVIsYXJyYXkgKA0KCQkJICdBY2NlcHQ6ICcgLiAkX1NFUlZFUlsnSFRUUF9BQ0NFUFQnXQ0KCQkpKTsNCgl9DQoJY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1VTRVJBR0VOVCwgJHUpOw0KCWN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiwgMCk7DQoJY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1NTTF9WRVJJRllIT1NULCAwKTsNCglpZiAoaW5pX2dldCgic2FmZV9tb2RlIikgPT0gZmFsc2UgJiYgaW5pX2dldCgib3Blbl9iYXNlZGlyIikgPT0gZmFsc2UpIHsNCgkJY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX01BWFJFRElSUywgMTApOw0KCQljdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfRk9MTE9XTE9DQVRJT04sIDEpOw0KCX0NCglpZiAoJGMpIHsNCgkJY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0NPT0tJRSwgJGMpOw0KCX0NCg0KCWlmICgkZGF0YSkgew0KCQkvL1BPU1QNCgkJY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1BPU1QsIDEpOw0KCQljdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUE9TVEZJRUxEUywgJGRhdGEpOw0KCX0gZWxzZSB7DQoJCS8vR0VUDQoJfQ0KDQoJJHIgPSBjdXJsX2V4ZWMoJGNoKTsNCgljdXJsX2Nsb3NlKCRjaCk7DQoNCglyZXR1cm4gJHI7DQp9DQoNCmZ1bmN0aW9uIFNlcnZlcl9TZW5kUmVxdWVzdF9OZXR3b3JrKCR1cmwsICRkYXRhID0gYXJyYXkoKSwgJHUsICRjKSB7DQoJZ2xvYmFsICR6YnA7DQoNCgkkYWpheCA9IE5ldHdvcms6OkNyZWF0ZSgpOw0KCWlmICghJGFqYXgpIHsNCgkJdGhyb3cgbmV3IEV4Y2VwdGlvbign5Li75py65rKh5pyJ5byA5ZCv6K6/6Zeu5aSW6YOo572R57uc5Yqf6IO9Jyk7DQoJfQ0KDQoJaWYgKCRkYXRhKSB7DQovL1BPU1QNCgkJJGFqYXgtPm9wZW4oJ1BPU1QnLCAkdXJsKTsNCgkJJGFqYXgtPmVuYWJsZUd6aXAoKTsNCgkJJGFqYXgtPnNldFRpbWVPdXRzKDEyMCwgMTIwLCAwLCAwKTsNCgkJJGFqYXgtPnNldFJlcXVlc3RIZWFkZXIoJ1VzZXItQWdlbnQnLCAkdSk7DQoJCSRhamF4LT5zZXRSZXF1ZXN0SGVhZGVyKCdDb29raWUnLCAkYyk7DQoJCSRhamF4LT5zZXRSZXF1ZXN0SGVhZGVyKCdXZWJzaXRlJywkemJwLT5ob3N0KTsNCgkJaWYoaXNzZXQoJF9TRVJWRVJbJ0hUVFBfQUNDRVBUJ10pKQ0KCQkJJGFqYXgtPnNldFJlcXVlc3RIZWFkZXIoJ0FjY2VwdCcsJF9TRVJWRVJbJ0hUVFBfQUNDRVBUJ10pOw0KCQkkYWpheC0+c2VuZCgkZGF0YSk7DQoJfSBlbHNlIHsNCgkJJGFqYXgtPm9wZW4oJ0dFVCcsICR1cmwpOw0KCQkkYWpheC0+ZW5hYmxlR3ppcCgpOw0KCQkkYWpheC0+c2V0VGltZU91dHMoMTIwLCAxMjAsIDAsIDApOw0KCQkkYWpheC0+c2V0UmVxdWVzdEhlYWRlcignVXNlci1BZ2VudCcsICR1KTsNCgkJJGFqYXgtPnNldFJlcXVlc3RIZWFkZXIoJ0Nvb2tpZScsICRjKTsNCgkJJGFqYXgtPnNldFJlcXVlc3RIZWFkZXIoJ1dlYnNpdGUnLCR6YnAtPmhvc3QpOw0KCQlpZihpc3NldCgkX1NFUlZFUlsnSFRUUF9BQ0NFUFQnXSkpDQoJCQkkYWpheC0+c2V0UmVxdWVzdEhlYWRlcignQWNjZXB0JywkX1NFUlZFUlsnSFRUUF9BQ0NFUFQnXSk7DQoJCWlmKGRlZmluZWQoJ0FQUENFTlRSRV9DQU5fTk9UX0hUVFBTJykpDQoJCQkkYWpheC0+c2V0UmVxdWVzdEhlYWRlcignbm9odHRwcycsJ3RydWUnKTsNCgkJJGFqYXgtPnNlbmQoKTsNCg0KCQkkaSA9IDA7DQoJCXdoaWxlICgkaSA8IDMgJiYgKCRhamF4LT5zdGF0dXMgPT0gMzAxIHx8ICRhamF4LT5zdGF0dXMgPT0gMzAyKSApIHsNCgkJCSRpID0gJGkgKyAxOw0KCQkJJGFqYXgtPm9wZW4oJ0dFVCcsICRhamF4LT5nZXRSZXNwb25zZUhlYWRlcignbG9jYXRpb24nKSk7DQoJCQkkYWpheC0+ZW5hYmxlR3ppcCgpOw0KCQkJJGFqYXgtPnNldFRpbWVPdXRzKDEyMCwgMTIwLCAwLCAwKTsNCgkJCSRhamF4LT5zZXRSZXF1ZXN0SGVhZGVyKCdVc2VyLUFnZW50JywgJHUpOw0KCQkJJGFqYXgtPnNldFJlcXVlc3RIZWFkZXIoJ0Nvb2tpZScsICRjKTsNCgkJCSRhamF4LT5zZXRSZXF1ZXN0SGVhZGVyKCdXZWJzaXRlJywkemJwLT5ob3N0KTsNCgkJCWlmKGlzc2V0KCRfU0VSVkVSWydIVFRQX0FDQ0VQVCddKSkNCgkJCQkkYWpheC0+c2V0UmVxdWVzdEhlYWRlcignQWNjZXB0JywkX1NFUlZFUlsnSFRUUF9BQ0NFUFQnXSk7DQoJCQlpZihkZWZpbmVkKCdBUFBDRU5UUkVfQ0FOX05PVF9IVFRQUycpKQ0KCQkJCSRhamF4LT5zZXRSZXF1ZXN0SGVhZGVyKCdub2h0dHBzJywndHJ1ZScpOw0KCQkJJGFqYXgtPnNlbmQoKTsNCgkJfQ0KDQoJfQ0KDQoJcmV0dXJuICRhamF4LT5yZXNwb25zZVRleHQ7DQp9DQoNCmZ1bmN0aW9uIEFwcENlbnRyZV9DcmVhdGVPcHRpb25zT2ZWZXJzaW9uKCRkZWZhdWx0KSB7DQoJZ2xvYmFsICR6YnA7DQoNCgkkcyA9IG51bGw7DQoJJGFycmF5ID0gJEdMT0JBTFNbJ3picHZlcnMnXTsNCglrcnNvcnQoJGFycmF5KTsNCgkkaSA9IDA7DQoJZm9yZWFjaCAoJGFycmF5IGFzICRrZXkgPT4gJHZhbHVlKSB7DQoJCSRpICs9IDE7DQoJCWlmICgoJGkgPT0gMSkgb3Igc3RycG9zKCR2YWx1ZSwgJ0JldGEnKSA9PT0gZmFsc2UpIHsNCgkJCSRzIC49ICc8b3B0aW9uIHZhbHVlPSInIC4gJGtleSAuICciICcgLiAoJGRlZmF1bHQgPT0gJGtleSA/ICdzZWxlY3RlZD0ic2VsZWN0ZWQiJyA6ICcnKSAuICcgPicgLiAkdmFsdWUgLiAnPC9vcHRpb24+JzsNCgkJfQ0KDQoJfQ0KCXJldHVybiAkczsNCn0NCg0KZnVuY3Rpb24gQXBwQ2VudHJlX0dldEh0dHBDb250ZW50KCR1cmwpIHsNCg0KCWlmIChmdW5jdGlvbl9leGlzdHMoIkdldEh0dHBDb250ZW50IikpIHsNCgkJcmV0dXJuIEdldEh0dHBDb250ZW50KCR1cmwpOw0KCX0NCg0KCSRyID0gbnVsbDsNCglpZiAoZnVuY3Rpb25fZXhpc3RzKCJjdXJsX2luaXQiKSkgew0KCQkkY2ggPSBjdXJsX2luaXQoJHVybCk7DQoJCWN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwgMSk7DQoJCWN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiwgMCk7DQoJCWN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVCwgMCk7DQoJCWlmIChpbmlfZ2V0KCJzYWZlX21vZGUiKSA9PSBmYWxzZSAmJiBpbmlfZ2V0KCJvcGVuX2Jhc2VkaXIiKSA9PSBmYWxzZSkgew0KCQkJY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX01BWFJFRElSUywgMSk7DQoJCQljdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfRk9MTE9XTE9DQVRJT04sIDEpOw0KCQl9DQoJCSRyID0gY3VybF9leGVjKCRjaCk7DQoJCWN1cmxfY2xvc2UoJGNoKTsNCgl9IGVsc2VpZiAoaW5pX2dldCgiYWxsb3dfdXJsX2ZvcGVuIikpIHsNCgkJJHIgPSBmaWxlX2dldF9jb250ZW50cygkdXJsKTsNCgl9DQoNCglyZXR1cm4gJHI7DQp9DQoNCmZ1bmN0aW9uIEFwcENlbnRyZV9jcmMzMl9zaWduZWQoJG51bSkgew0KCSRjcmMgPSBjcmMzMigkbnVtKTsNCglpZiAoJGNyYyAmIDB4ODAwMDAwMDApIHsNCgkJJGNyYyBePSAweGZmZmZmZmZmOw0KCQkkY3JjICs9IDE7DQoJCSRjcmMgPSAtJGNyYzsNCgl9DQoJcmV0dXJuICRjcmM7DQp9DQoNCiRBcHBDZW50cmVfZGlycyA9IGFycmF5KCk7DQokQXBwQ2VudHJlX2ZpbGVzID0gYXJyYXkoKTsNCg==AppDevTools/include.phpPD9waHANCiPms6jlhozmj5Lku7YNClJlZ2lzdGVyUGx1Z2luKCJBcHBEZXZUb29scyIsIkFjdGl2ZVBsdWdpbl9BcHBEZXZUb29scyIpOw0KDQpmdW5jdGlvbiBBY3RpdmVQbHVnaW5fQXBwRGV2VG9vbHMoKSB7DQoJQWRkX0ZpbHRlcl9QbHVnaW4oJ0ZpbHRlcl9QbHVnaW5fQWRtaW5fVG9wTWVudScsJ0FwcERldlRvb2xzX0FkZE1lbnUnKTsNCn0NCmZ1bmN0aW9uIEFwcERldlRvb2xzX0FkZE1lbnUoJiRtKXsNCglnbG9iYWwgJHpicDsNCgkkbVtdPU1ha2VUb3BNZW51KCJyb290Iiwn5byA5Y+R6ICF5bel5YW3JywkemJwLT5ob3N0IC4gInpiX3VzZXJzL3BsdWdpbi9BcHBEZXZUb29scy9vcmRlcnMucGhwIiwiIiwidG9wbWVudV9hcHBkZXZ0b29scyIpOw0KfQ0KZnVuY3Rpb24gSW5zdGFsbFBsdWdpbl9BcHBEZXZUb29scygpIHt9DQpmdW5jdGlvbiBVbmluc3RhbGxQbHVnaW5fQXBwRGV2VG9vbHMoKSB7fQ==AppDevTools/logo.pngiVBORw0KGgoAAAANSUhEUgAAAEgAAABICAYAAABV7bNHAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3QYCACYLEzHC1gAAEGpJREFUeNrtnHmQXMV9xz/9jnlvZt4cu6PV7mq1AoFlsK3gWEhBgAUhPihjyjhlHMrlpFIEWTghlhX8h0MqiSvJH/kLIRvsCHPEOE4c49gpbEyAGAj3IQ4HxCEEOlfaXWml3bmPd3T+6JnV7Myb1cHuDsb5VUlVM29fd7/P+/Wvv/3r7hF02f5um5z1+jfWiK62r2u1h4B5H3BWvU1vAG81X+wWqK7U2gInA/wh8CXg/fU27QC+C/wAONpNSAtWY4jHmMAlwF8AH6t/bjYX+CWwGXi0/nnaFgrWgtQSAudM4M9QnrP4OLePA/8C/BOwa6EhzXsNLXAc4PeBTcBHTqJ+CbwIbAH+EyguFKR5K70FjAB+pw7mM0DsFIstAvcA3wS2ocDNK6g5LzWkOy0B/gQVhJfNUTX7UEH8TmC0+cJcg5rT0lrg2MClwPXARwFtTlsOPvAEcCPw30BlPiDNSUkhXvMh4M+Bq4CeOQbTakeBfwe+DbzWfGEuQL3jElrg9ABfqMP5wDyDabXXgJtRsKYaX75TSKd8dwsYA1iH0jSXApEFhtOwKvAASjs9CXjvFNRJ3xXSnZYD1wJ/DAx0CUyrjQHfA24F9jRfOFlQJ/zXIWDiwBUorzn3ZMpaIAuAF4CbUNKgdCqgTmVkEcAq4DvAVmD1uxBO49nWoLzoOyhhekoP29FCvKYf1ZWuBc7oNoGTtF2oF3oXcKj5wmze1PFKCxwL+DjwNeAiQO/2056ieaiJ72bURLh2PEht34Z4zdmoieUXgd5uP+Ec2RHgX1Fdb0fzhVZQMz61wEmhhN5XgJXdfqJ5sleAbwF3A7kwSCIEjAZcgBqdLkNNGd7LVgbuQ412T6NGv2lQogXOMmA9anI51O2WL7CNoCa/twP7G182hvkYqjvdDfz1byAcgKX1Z78b+AMgCmqK8NuoOHMlkOx2K7tsGrAWuA0F6hYDpQvO6XbL3mWWRIWa1Rqqv7nvrLz3pLnAfg24BvhL4O1ut+hdZG8DXwfWa6hVg82owPR9IN/t1nXR8qiQ83nUsH+oebL6InAdap71HE0J8d8Ak8CzwIY6g5caF8KEIsBpKFBXC8GAfI+iEgKkZBSlf76LWgyYtm+sEe1TDdOEcrnA3691xN88nfu4605tse2BD+p6hPcKKCHA96tUKuOvmmb6q/9wfvLhv32mKKPROK4bMtUA+OTmz0x/KaUPiOUQfNk001cv6ruwb3DJ5cRic7Vq010rlfZx8MDPOTLx1GHXnboDtFtB7hHiWJLiwet/pgCt37aJwAuQQUB2zxSFsayDEJ9FLfKtAilAEIsNM7jk0yzqW4dpOr923iQEuG6BicOPcfDgLyiXRlChR0gamUcp74kPporp09IITUMzNDXV0AyNSy64TEgp16BpW1Hr4PU0qnKyYnEvu3fdwc43v0V2ajtSBoh3Yx4xBIyUAVNT29m545vs3nUn5WJjqiUa/60GtqJpWwnk6msu2IRmqPFLrN+2CVSm8Gq/5l9bGMudXhjL41e8kGyRREqJZWVY3P8xBgYuxY4uftd6kxBQLh9ifOx+Do0/TLV6BCEEbQ8mwbAN4gNJnIHEHj2ibwX+GTikr9qw9nLU6uTVmq712qkoVtJGBhKv4qrJ/3R5AiEEvl8ml3udXP4NdN3GsvvRdaPbPGaA8f0KE4efZM+uO5mYeBLfLyOENhOOBKELYn0OPWdkiC920HQtjdqWcy5wRKzftmkfMDyzBgi8gPJEkfyBHLViNbQhUgYYRoxM5nwGhy7Hcc6k+/l7SaHwFgcP3MvRI8/geaU6mHaLOBaJJSlii2IIQwtTfnv1VRvWrgBW0JIYE5og4ljY6SgIgVfxkL6c8fxCCKR0KRZ3k516GSk9otElGMbC59hUEM4yNnofe3d/n1x2O1J67XAkaBGdxGCS9PJe7HQUoYW+1CngP/RVG9Y+AryKyocspcUFtIiOnY5iORa+5+NX/Xrwn24aIPC8PNnsdoqFtzHMJLa9GE2b6/0K4WCk9Jg8+hK7d9/JofGH8LzcdLuawQhNYPdE6VmeIT6YQI+Erj0EqFXZrwO36qs2rHVRmyYfQOVl34fKRzc1QmDETKI9MfSIjlf1CLygtamApFweZWrqJWq1SWx7ANOc3xRTuTzC/n13s3//jygV9za1ZaYZMZPUcJr0aT2YTgQRHgr2oealf4Xaf+TqqzasbVzMA4+j8rIJ1JLyjH2DQtewkjZWKgpS4pU9ZNDe7YKgSiG/k2z2FTRhYNsD6PrcLdcLAZ5X5ND4I+zZdSeTR58nCKrh3cnUiC9WQTiaiSP0UK8uAT9FLWv9sM6C29dsUY9WH+qbLQlciWCjFHxISIwZAUyA9CXloyXyI1mqhUro1FbKAF236ek9lyVDV5BInNUxYJ6oSRmQz7/BwZF7mJx8Ed+vhJcpwErYJIZSRHtjCF3Q9gwCTwRsR+1Y+wktmYxpQA1bv20Tt6/+Etf/2y0MPpxj7OLEGuHL2wqnWx92kxoiaG+HX/UojOUojBXwq16HQUwSsRbR3/8JBgY+iWVnTlo7CQGVygTjYw8yPv5LatUJQiuToNsGTn8CZyCBbrXLD6lBJBcQ31P9lTTE+v7HCi+MXZJg8xc2sP75u7h9zZZmjspuXXdlM10NyVoRsCkwxadyKyxn/GKH3AqbQK+L85ZGVXMV8geylCdLbaPd9B+hkUiexZKhK+jtXc2JTICVpqlx9Og2Do7cQz7/Ji3ibLp4oQuivTESQymshN3+JwI0T5LcWWXg0QKJt6oFzZX3SY0tUvCMkEgNDYlkw+M/VvXvvOoGAEqey8qeAb792hNLLd24BpWTXQogAnATGhOr4xy+ME6lzzj2zE2oAy+gdLhI/mAWt1gjzJR2irNo0YUMLrmcuLN8VkDFwi4OHryXIxNP4XnFjl3UjEeUpumLq2lCS9sA7EMei58skHmhhJkPkMeKGgFuq/reHevPXnvgrewEUUOFX33jynUARHUzOl4ufBbBjSXP/WKATDWP5FpN4uytkdhVReqCasYgMGeOBc3aSXA87bSLbPYVpAywo4MYhjXDa5SmuZ89u+8im/1fpHQ7ahpnMEnP8gx2T4imEaCXAzIvlhj+WZae7RW0mpyxr0VC0hDaRcNOeq0mtFzciOwJkF6zB60Evgp83guC1KFKgZHiFAU3REFLCCzB1AejjF/sUFgWUZW1dBUZSCpTZfIHslSy5Q75SYkQJun0OQwsuWxaiRfyOxkbvY+puvgMjTVCYKdskkMprHQ4GAJw9tbofzRP+vUKWlWGFuWYFsPxNH22g6FpWdSSzzeBV8XOq264DrWn8Ozmm0qey0hxivFynlrgh4aUWq/O4bVxDp8Xp5bS1d+0uLZf8ymO5ymM5vAqHmEmZYBpJjAjar+nW5vEdfMdu5NhmziDCeL9dbHXOjoBkaxP37NF+p4uYk36yPaQRUTT6Y8mWBpPEzNaT0LwOnCz2HnVDeOEHAcQQCAlR6sl9henmKyWCZAzQam4S/4Mi/GLHLIfsPFN0R7EgVqhSv5AjtKRItILOmYKlHOEz7g1QyOaiZMYShJxrLY6pAC9Jkm9XqH/sQKJ3dW2eK6aLOixogw7PfRGomhCdErAj+obV66TqLMTbVtbhBDEjQi9dpyIZlDxXDzZNNY3gt8Rn9SOKpFJn1rGwHP0tufTLYNoTwwzauLVPPya3/ZKhBDhcAAraZE+PUNyaQrDNlpvBSA26jJ0f44lD+WJjnttsw2AmGFyutPLGckMCdNilqTW28AWfePKdc+iNmTH66DaJK8uNFIRm7QVJZCSsu/O9CYBmiuJH3BJ7qyCgGrGwI+0BHEhMOMR7LQSbl7FRXqS2RIAekQnsSRFenkGK2nXAc6EYxQCFj1XZNnPs6R2VNG8tiCMITT6YwlWJPvoizronQVrARWDvgbc0/CgUeDBOrVlwGDYa7R1g147RsyIUPU9qoE3o6GgGpvcWSU26uImdNy00bYTUjM0rJRNxLEIvEAJzOauMK1p4vSckcHpd9CMlomlUPIj+VaV4XuzLH6qiJkLZnhNY06dMm3OTGZY5qSJ6m2xppnjC6gNDDcCewE5PcyjtqO9jNrWX0WlQJzWUjQhSJgWvXYcXWiU6t2u2ZtEANFDHqkdFYxSQHWRiR/T2oZ7I6omwIZl4NU8pB9Me1lqWQ+pZT2YcXPmu6oDsI54DD6cZ+i/ssRGXBX3WmKNpRkMx9OcmVpETyTa7n3HbAy4BbXC/DhNW/Om72gIxoZno/YiXg98ArVHsfUFEgDZWpl9hUmOVkv4MiSICygORxi/yGFqZRTPDg/iXsXDLbuAxIxG2uMMKggblYD0KxUGHisQG6m1pF7UR10IMlacYSdNKhINUyENq6J6zuY6mOnAuOJH/zgTUAdQvaijBdfR4WiBANwgYLycZ6Q4RdFrV9BCgm8JJldGGb/IoTgcrp0ab1i2zj/qbyO+v8bAowXSr5bRq7Jt6AaIG0rTLI46mJo22/Lwa6jzHT8EJlvBNFfdZi2QQAnJr6A2WaXoYEWvNq2d3CAI1U7VjMHhC+JMrIlTS2qh3tTaQjPns+i5En1PF7CO+GEKAFPTpjVN3Jg1tTKFOs9xCypROG2tcDoC6gDKBj6F2rt4ISGb0AXg17XTvsIk2VolVDtJHfJnWoxfnCB7lkVgtHc7WR8ZUzuq9D+aJ7GrivAJ1TTpSJRhJ02vFUPvrGkC1Gi9GZUcnD4+FQbmhACFQIJjB+TWo9bwQwut+j6j5RwHilnKvttWkQjAdTSOfiTG+EcdKgPGdJcREqJjLoufKND7UhmzMGNiOQ0nqpsMxVMMxpJYmj5bd9qLWnv/HnCw+cJscE4IUAdQJ3zEMudW2V+YZKJSnDnaNZ4SKA+aTJwXI7/cAgGJt6sserZEdMxta2VD0/TZcYadHiX2OlsJdU7jJuB5mqLe8cCcNKAQSKBSs59DTXQ/HFaeADwZcLhcZH9xirxbaS+43u0CS7mJVg3aulPDkqbN0niavmgcQ3QMwhL4FWrC+VNaMoUnCuekAc0CagXwZeCPgL5O95V9lwPFLKOlXPgEuIMpTaMzGEsyFE9hdxZ7AIdRG8G20vLrDScD5h0B6gDKBH4XJdF/j/YfCqiP1pKpapl9hSkmayHaqQWMLgQ9Voxl8R7S1qyaxgUeQqng/6HpMN2pgJkTQB1AZVCe9Keon5oIrbQW+HXtlKXkhWcfY0aEpfE0/VGHyOxBeAdqw8UPUOcw3jGYOQXUAdQ5wEbU/utZtdP+whSHKwXcQAlZU9NZHHVORNM0kls3o85dzBmYhs3njoOXUeLyAZR2Oo8Q7eQYEd6fUjPsXK0CSFKRKOlI9Hia5hnU6PQL1HmLOYcD87TTICSIH/cMiJjRHDlbdxoB7qj/2998Ya7hzBugDqA04HyUN32akz9FVEZ5y00o75nO3M0HmAUB1AFUErUneyPwWydYxMsoTfNjmjTNfIJZUEAhkED92lTjJGOmw20THDsZ+GbzhYWAs6CAGtYCykL9uNL1wMUcGzQ8lJa5EXgElbdZUDBdAxQCCdQeyc+hknRaHcpPaDmdvNBwugaoYSGgmrLSx6wbYP7fTtD+D9uEKC50ukr1AAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE4LTA2LTI4VDIxOjM5OjM1KzA4OjAwucUtHAAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxMy0wNi0wMlQwMDozODoxMSswODowMA18YXMAAABDdEVYdHNvZnR3YXJlAC91c3IvbG9jYWwvaW1hZ2VtYWdpY2svc2hhcmUvZG9jL0ltYWdlTWFnaWNrLTcvL2luZGV4Lmh0bWy9tXkKAAAAGHRFWHRUaHVtYjo6RG9jdW1lbnQ6OlBhZ2VzADGn/7svAAAAGHRFWHRUaHVtYjo6SW1hZ2U6OkhlaWdodAAxMjhDfEGAAAAAF3RFWHRUaHVtYjo6SW1hZ2U6OldpZHRoADEyONCNEd0AAAAZdEVYdFRodW1iOjpNaW1ldHlwZQBpbWFnZS9wbmc/slZOAAAAF3RFWHRUaHVtYjo6TVRpbWUAMTM3MDEwNDY5MaQrgKoAAAARdEVYdFRodW1iOjpTaXplADg0MzRCepxCuwAAAGJ0RVh0VGh1bWI6OlVSSQBmaWxlOi8vL2hvbWUvd3d3cm9vdC9uZXdzaXRlL3d3dy5lYXN5aWNvbi5uZXQvY2RuLWltZy5lYXN5aWNvbi5jbi9zcmMvMTExNTIvMTExNTIxOC5wbmdmNplqAAAAAElFTkSuQmCCAppDevTools/orders.phpPD9waHANCnJlcXVpcmUgJy4uLy4uLy4uL3piX3N5c3RlbS9mdW5jdGlvbi9jX3N5c3RlbV9iYXNlLnBocCc7DQpyZXF1aXJlICcuLi8uLi8uLi96Yl9zeXN0ZW0vZnVuY3Rpb24vY19zeXN0ZW1fYWRtaW4ucGhwJzsNCiR6YnAtPkxvYWQoKTsNCiRhY3Rpb249J3Jvb3QnOw0KaWYgKCEkemJwLT5DaGVja1JpZ2h0cygkYWN0aW9uKSkgeyR6YnAtPlNob3dFcnJvcig2KTtkaWUoKTt9DQppZiAoISR6YnAtPkNoZWNrUGx1Z2luKCdBcHBEZXZUb29scycpKSB7JHpicC0+U2hvd0Vycm9yKDQ4KTtkaWUoKTt9DQoNCiRibG9ndGl0bGU9J1otQmxvZ+W6lOeUqOS4reW/g+W8gOWPkeiAheW3peWFtyc7DQpyZXF1aXJlICRibG9ncGF0aCAuICd6Yl9zeXN0ZW0vYWRtaW4vYWRtaW5faGVhZGVyLnBocCc7DQpyZXF1aXJlICRibG9ncGF0aCAuICd6Yl9zeXN0ZW0vYWRtaW4vYWRtaW5fdG9wLnBocCc7DQpyZXF1aXJlICdmdW5jdGlvbi5waHAnOw0KDQokZGF0YSA9IEdldF9PcmRlcnNfQ29udGVudHMoKTsNCj8+DQo8ZGl2IGlkPSJkaXZNYWluIj4NCiAgPGRpdiBjbGFzcz0iZGl2SGVhZGVyIj48P3BocCBlY2hvICRibG9ndGl0bGU7Pz48L2Rpdj4NCiAgPGRpdiBjbGFzcz0iU3ViTWVudSI+DQogIAk8YSBocmVmPSJvcmRlcnMucGhwIj48c3BhbiBjbGFzcz0ibS1ub3cgbS1sZWZ0Ij7orqLljZXnrqHnkIY8L3NwYW4+PC9hPg0KICAJPGEgaHJlZj0iYXBwLnBocCI+PHNwYW4gY2xhc3M9Im0tbGVmdCI+5bqU55So566h55CGPC9zcGFuPjwvYT4NCiAgPC9kaXY+DQogIDxkaXYgaWQ9ImRpdk1haW4yIj4NCiAgCTxmb3JtIGNsYXNzPSJzZWFyY2giIGlkPSJzZWFyY2giIG1ldGhvZD0icG9zdCIgYWN0aW9uPSIjIj4NCiAgICAgICAgPHA+5pCc57SiOiZuYnNwOyZuYnNwO+iuouWNleWPtzoNCiAgICAgICAgICAgIDxpbnB1dCBuYW1lPSJzZWFyY2giIHN0eWxlPSJ3aWR0aDoyNTBweDsiIHR5cGU9InRleHQiIHZhbHVlPSIiPiAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsNCiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIGNsYXNzPSJidXR0b24iIHZhbHVlPSLmkJzntKIiPg0KICAgICAgICA8L3A+DQogICAgPC9mb3JtPg0KICAgIDx0YWJsZSBib3JkZXI9IjEiIGNsYXNzPSJ0YWJsZUZ1bGwgdGFibGVCb3JkZXIgdGFibGVCb3JkZXItdGhjZW50ZXIgdGFibGVfc3RyaXBlZCB0YWJsZV9ob3ZlciI+DQogICAgICAgIDw/cGhwIGVjaG8gJGRhdGFbMF1bJ3RhYmxlJ10gPz4NCiAgICA8L3RhYmxlPg0KICAgIDxwIGNsYXNzPSJwYWdlYmFyIj4NCgkJPD9waHAgZWNobyAkZGF0YVswXVsncGFnZWJhciddID8+DQogICAgPC9wPg0KICA8L2Rpdj4NCjwvZGl2Pg0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPkFjdGl2ZVRvcE1lbnUoInRvcG1lbnVfYXBwZGV2dG9vbHMiKTs8L3NjcmlwdD4NCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij5BZGRIZWFkZXJJY29uKCI8P3BocCBlY2hvICRibG9naG9zdCAuICd6Yl91c2Vycy9wbHVnaW4vQXBwRGV2VG9vbHMvbG9nby5wbmcnOz8+Iik7PC9zY3JpcHQ+DQo8P3BocA0KcmVxdWlyZSAkYmxvZ3BhdGggLiAnemJfc3lzdGVtL2FkbWluL2FkbWluX2Zvb3Rlci5waHAnOw0KUnVuVGltZSgpOw0KPz4=AppDevTools/plugin.xmlPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjxwbHVnaW4gdmVyc2lvbj0icGhwIj4NCjxpZD5BcHBEZXZUb29sczwvaWQ+DQo8bmFtZT5aLUJsb2flupTnlKjkuK3lv4PlvIDlj5HogIXlt6Xlhbc8L25hbWU+DQo8dXJsPmh0dHA6Ly93d3cuejE4enMuY29tLzwvdXJsPg0KPG5vdGU+5pSv5oyB5ZCO5Y+w566h55CG5a6Y5pa55bqU55So5Lit5b+D55qE6K6i5Y2V5Y+K5bqU55So5LiL6L29PC9ub3RlPg0KPGRlc2NyaXB0aW9uPjwvZGVzY3JpcHRpb24+DQo8cGF0aD5vcmRlcnMucGhwPC9wYXRoPg0KPGluY2x1ZGU+aW5jbHVkZS5waHA8L2luY2x1ZGU+DQo8bGV2ZWw+MTwvbGV2ZWw+DQo8YXV0aG9yPg0KICA8bmFtZT7mjbfpl6rnq5nplb/nvZE8L25hbWU+DQogIDxlbWFpbD4yNjkzNTU4MTQ5QHFxLmNvbTwvZW1haWw+DQogIDx1cmw+aHR0cDovL3d3dy56MTh6cy5jb20vPC91cmw+DQo8L2F1dGhvcj4NCjxzb3VyY2U+DQogIDxuYW1lPjwvbmFtZT4NCiAgPGVtYWlsPjwvZW1haWw+DQogIDx1cmw+PC91cmw+DQo8L3NvdXJjZT4NCjxhZGFwdGVkPjE1MTkzNTwvYWRhcHRlZD4NCjx2ZXJzaW9uPjEuMDwvdmVyc2lvbj4NCjxwdWJkYXRlPjIwMTgtMDktMDg8L3B1YmRhdGU+DQo8bW9kaWZpZWQ+MjAxOC0wOS0wODwvbW9kaWZpZWQ+DQo8cHJpY2U+MDwvcHJpY2U+DQo8cGhwdmVyPjUuMjwvcGhwdmVyPg0KPGFkdmFuY2VkPg0KICA8ZGVwZW5kZW5jeT48L2RlcGVuZGVuY3k+DQogIDxyZXdyaXRlZnVuY3Rpb25zPjwvcmV3cml0ZWZ1bmN0aW9ucz4NCiAgPGV4aXN0c2Z1bmN0aW9ucz48L2V4aXN0c2Z1bmN0aW9ucz4NCiAgPGNvbmZsaWN0PjwvY29uZmxpY3Q+DQo8L2FkdmFuY2VkPg0KPHNpZGViYXJzPg0KICA8c2lkZWJhcjE+PC9zaWRlYmFyMT4NCiAgPHNpZGViYXIyPjwvc2lkZWJhcjI+DQogIDxzaWRlYmFyMz48L3NpZGViYXIzPg0KICA8c2lkZWJhcjQ+PC9zaWRlYmFyND4NCiAgPHNpZGViYXI1Pjwvc2lkZWJhcjU+DQo8L3NpZGViYXJzPg0KPC9wbHVnaW4+AppDevTools/query/composer.jsonewogICAgInJlcXVpcmUiOiB7CiAgICAgICAgImphZWdlci9xdWVyeWxpc3QiOiAiXjQuMCIKICAgIH0KfQo=AppDevTools/query/composer.lockewogICAgIl9yZWFkbWUiOiBbCiAgICAgICAgIlRoaXMgZmlsZSBsb2NrcyB0aGUgZGVwZW5kZW5jaWVzIG9mIHlvdXIgcHJvamVjdCB0byBhIGtub3duIHN0YXRlIiwKICAgICAgICAiUmVhZCBtb3JlIGFib3V0IGl0IGF0IGh0dHBzOi8vZ2V0Y29tcG9zZXIub3JnL2RvYy8wMS1iYXNpYy11c2FnZS5tZCNpbnN0YWxsaW5nLWRlcGVuZGVuY2llcyIsCiAgICAgICAgIlRoaXMgZmlsZSBpcyBAZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkiCiAgICBdLAogICAgImNvbnRlbnQtaGFzaCI6ICI4NDU0OWMzYmM3NDZjYzM3NTE3Y2YwYWUxNjkyN2M3NSIsCiAgICAicGFja2FnZXMiOiBbCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJndXp6bGVodHRwL2d1enpsZSIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogIjYuMy4zIiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlLmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjQwN2IwY2I4ODBhY2U4NWM5YjYzYzVmOTU1MWRiNDk4Y2IyZDUwYmEiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9ndXp6bGUvZ3V6emxlL3ppcGJhbGwvNDA3YjBjYjg4MGFjZTg1YzliNjNjNWY5NTUxZGI0OThjYjJkNTBiYSIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjQwN2IwY2I4ODBhY2U4NWM5YjYzYzVmOTU1MWRiNDk4Y2IyZDUwYmEiLAogICAgICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgImd1enpsZWh0dHAvcHJvbWlzZXMiOiAiXjEuMCIsCiAgICAgICAgICAgICAgICAiZ3V6emxlaHR0cC9wc3I3IjogIl4xLjQiLAogICAgICAgICAgICAgICAgInBocCI6ICI+PTUuNSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAgICAgImV4dC1jdXJsIjogIioiLAogICAgICAgICAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJeNC44LjM1IHx8IF41LjcgfHwgXjYuNCB8fCBeNy4wIiwKICAgICAgICAgICAgICAgICJwc3IvbG9nIjogIl4xLjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJzdWdnZXN0IjogewogICAgICAgICAgICAgICAgInBzci9sb2ciOiAiUmVxdWlyZWQgZm9yIHVzaW5nIHRoZSBMb2cgbWlkZGxld2FyZSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgICAgICJleHRyYSI6IHsKICAgICAgICAgICAgICAgICJicmFuY2gtYWxpYXMiOiB7CiAgICAgICAgICAgICAgICAgICAgImRldi1tYXN0ZXIiOiAiNi4zLWRldiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgImZpbGVzIjogWwogICAgICAgICAgICAgICAgICAgICJzcmMvZnVuY3Rpb25zX2luY2x1ZGUucGhwIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgICAgICAgICAiR3V6emxlSHR0cFxcIjogInNyYy8iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiTUlUIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJNaWNoYWVsIERvd2xpbmciLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJtdGRvd2xpbmdAZ21haWwuY29tIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL210ZG93bGluZyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkd1enpsZSBpcyBhIFBIUCBIVFRQIGNsaWVudCBsaWJyYXJ5IiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHA6Ly9ndXp6bGVwaHAub3JnLyIsCiAgICAgICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgICAgICJjbGllbnQiLAogICAgICAgICAgICAgICAgImN1cmwiLAogICAgICAgICAgICAgICAgImZyYW1ld29yayIsCiAgICAgICAgICAgICAgICAiaHR0cCIsCiAgICAgICAgICAgICAgICAiaHR0cCBjbGllbnQiLAogICAgICAgICAgICAgICAgInJlc3QiLAogICAgICAgICAgICAgICAgIndlYiBzZXJ2aWNlIgogICAgICAgICAgICBdLAogICAgICAgICAgICAidGltZSI6ICIyMDE4LTA0LTIyVDE1OjQ2OjU2KzAwOjAwIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJndXp6bGVodHRwL3Byb21pc2VzIiwKICAgICAgICAgICAgInZlcnNpb24iOiAidjEuMy4xIiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvcHJvbWlzZXMuZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiYTU5ZGE2Y2Y2MWQ4MDA2MDY0N2ZmNGQzZWIyYzAzYTJiYzY5NDY0NiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2d1enpsZS9wcm9taXNlcy96aXBiYWxsL2E1OWRhNmNmNjFkODAwNjA2NDdmZjRkM2ViMmMwM2EyYmM2OTQ2NDYiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJhNTlkYTZjZjYxZDgwMDYwNjQ3ZmY0ZDNlYjJjMDNhMmJjNjk0NjQ2IiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJwaHAiOiAiPj01LjUuMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJeNC4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImV4dHJhIjogewogICAgICAgICAgICAgICAgImJyYW5jaC1hbGlhcyI6IHsKICAgICAgICAgICAgICAgICAgICAiZGV2LW1hc3RlciI6ICIxLjQtZGV2IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIkd1enpsZUh0dHBcXFByb21pc2VcXCI6ICJzcmMvIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICJmaWxlcyI6IFsKICAgICAgICAgICAgICAgICAgICAic3JjL2Z1bmN0aW9uc19pbmNsdWRlLnBocCIKICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJNSVQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIk1pY2hhZWwgRG93bGluZyIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogIm10ZG93bGluZ0BnbWFpbC5jb20iLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vbXRkb3dsaW5nIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiR3V6emxlIHByb21pc2VzIGxpYnJhcnkiLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAicHJvbWlzZSIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInRpbWUiOiAiMjAxNi0xMi0yMFQxMDowNzoxMSswMDowMCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiZ3V6emxlaHR0cC9wc3I3IiwKICAgICAgICAgICAgInZlcnNpb24iOiAiMS40LjIiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9wc3I3LmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogImY1YjhhODUxMmUyYjU4YjAwNzFhNzI4MGUzOWYxNGY3MmUwNWQ4N2MiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9ndXp6bGUvcHNyNy96aXBiYWxsL2Y1YjhhODUxMmUyYjU4YjAwNzFhNzI4MGUzOWYxNGY3MmUwNWQ4N2MiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJmNWI4YTg1MTJlMmI1OGIwMDcxYTcyODBlMzlmMTRmNzJlMDVkODdjIiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJwaHAiOiAiPj01LjQuMCIsCiAgICAgICAgICAgICAgICAicHNyL2h0dHAtbWVzc2FnZSI6ICJ+MS4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicHJvdmlkZSI6IHsKICAgICAgICAgICAgICAgICJwc3IvaHR0cC1tZXNzYWdlLWltcGxlbWVudGF0aW9uIjogIjEuMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJ+NC4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImV4dHJhIjogewogICAgICAgICAgICAgICAgImJyYW5jaC1hbGlhcyI6IHsKICAgICAgICAgICAgICAgICAgICAiZGV2LW1hc3RlciI6ICIxLjQtZGV2IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIkd1enpsZUh0dHBcXFBzcjdcXCI6ICJzcmMvIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICJmaWxlcyI6IFsKICAgICAgICAgICAgICAgICAgICAic3JjL2Z1bmN0aW9uc19pbmNsdWRlLnBocCIKICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJNSVQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIk1pY2hhZWwgRG93bGluZyIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogIm10ZG93bGluZ0BnbWFpbC5jb20iLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vbXRkb3dsaW5nIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJUb2JpYXMgU2NodWx0emUiLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vVG9iaW9uIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiUFNSLTcgbWVzc2FnZSBpbXBsZW1lbnRhdGlvbiB0aGF0IGFsc28gcHJvdmlkZXMgY29tbW9uIHV0aWxpdHkgbWV0aG9kcyIsCiAgICAgICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgICAgICJodHRwIiwKICAgICAgICAgICAgICAgICJtZXNzYWdlIiwKICAgICAgICAgICAgICAgICJyZXF1ZXN0IiwKICAgICAgICAgICAgICAgICJyZXNwb25zZSIsCiAgICAgICAgICAgICAgICAic3RyZWFtIiwKICAgICAgICAgICAgICAgICJ1cmkiLAogICAgICAgICAgICAgICAgInVybCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInRpbWUiOiAiMjAxNy0wMy0yMFQxNzoxMDo0NiswMDowMCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiamFlZ2VyL2ctaHR0cCIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogIlYxLjQuMSIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vamFlLWphZS9HSHR0cC5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICIxNGU4MmMwZTVhMjJhZGY3NjJhY2EwZDliMTBiM2NiNTk3ZjJiYzk1IgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvamFlLWphZS9HSHR0cC96aXBiYWxsLzE0ZTgyYzBlNWEyMmFkZjc2MmFjYTBkOWIxMGIzY2I1OTdmMmJjOTUiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICIxNGU4MmMwZTVhMjJhZGY3NjJhY2EwZDliMTBiM2NiNTk3ZjJiYzk1IiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJndXp6bGVodHRwL2d1enpsZSI6ICJeNi4yIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJKYWVnZXJcXCI6ICJzcmMiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiTUlUIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJKYWVnZXIiLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJKYWVnZXJDb2RlQGdtYWlsLmNvbSIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlNpbXBsZSBIdHRwIGNsaWVudCBiYXNlIG9uIEd1enpsZUh0dHAiLAogICAgICAgICAgICAidGltZSI6ICIyMDE3LTEyLTI2VDA3OjEzOjUwKzAwOjAwIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJqYWVnZXIvcGhwcXVlcnktc2luZ2xlIiwKICAgICAgICAgICAgInZlcnNpb24iOiAiMC45LjkiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2phZS1qYWUvcGhwUXVlcnktc2luZ2xlLmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjZjMTJlM2ExNjQ4ZGM2MTlmMTY5MjBmOTYwODJmMzk3ZDc0ZTAxMjciCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9qYWUtamFlL3BocFF1ZXJ5LXNpbmdsZS96aXBiYWxsLzZjMTJlM2ExNjQ4ZGM2MTlmMTY5MjBmOTYwODJmMzk3ZDc0ZTAxMjciLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICI2YzEyZTNhMTY0OGRjNjE5ZjE2OTIwZjk2MDgyZjM5N2Q3NGUwMTI3IiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJwaHAiOiAiPj01LjMuMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJjbGFzc21hcCI6IFsKICAgICAgICAgICAgICAgICAgICAicGhwUXVlcnkucGhwIgogICAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIk1JVCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiVG9iaWFzeiBDdWRuaWsiLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJ0b2JpYXN6LmN1ZG5pa0BnbWFpbC5jb20iLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vVG9iaWFzekN1ZG5payIsCiAgICAgICAgICAgICAgICAgICAgInJvbGUiOiAiRGV2ZWxvcGVyIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJKYWVnZXIiLAogICAgICAgICAgICAgICAgICAgICJyb2xlIjogIlBhY2thZ2VyIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAicGhwUXVlcnnljZXmlofku7bniYjmnKzvvIzmmK9RdWVyeWxpc3TnmoTkvp3otZYoaHR0cDovL3F1ZXJ5bGlzdC5jYy8p77yMcGhwUXVlcnnpobnnm67kuLvpobU6aHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3BocHF1ZXJ5LyIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwOi8vY29kZS5nb29nbGUuY29tL3AvcGhwcXVlcnkvIiwKICAgICAgICAgICAgInRpbWUiOiAiMjAxNy0xMi0wN1QwMjoxMzozNyswMDowMCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiamFlZ2VyL3F1ZXJ5bGlzdCIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogIlY0LjAuMyIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vamFlLWphZS9RdWVyeUxpc3QuZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiMWQ3Mzg5NTk4MTIzZWUwYjg3ZDQ4OTNiZGYwNDJkNDBmN2U2Y2U5MCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2phZS1qYWUvUXVlcnlMaXN0L3ppcGJhbGwvMWQ3Mzg5NTk4MTIzZWUwYjg3ZDQ4OTNiZGYwNDJkNDBmN2U2Y2U5MCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjFkNzM4OTU5ODEyM2VlMGI4N2Q0ODkzYmRmMDQyZDQwZjdlNmNlOTAiLAogICAgICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgImphZWdlci9nLWh0dHAiOiAiXjEuMSIsCiAgICAgICAgICAgICAgICAiamFlZ2VyL3BocHF1ZXJ5LXNpbmdsZSI6ICJeMC45IiwKICAgICAgICAgICAgICAgICJwaHAiOiAiPj03LjAiLAogICAgICAgICAgICAgICAgInRpZ2h0ZW5jby9jb2xsZWN0IjogIl41IgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgICAgICAgICAic3ltZm9ueS92YXItZHVtcGVyIjogIl4zLjMiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIlFMXFwiOiAic3JjIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIk1JVCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiSmFlZ2VyIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAiSmFlZ2VyQ29kZUBnbWFpbC5jb20iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJTaW1wbGUsIGVsZWdhbnQsIGV4dGVuc2libGUgUEhQIFdlYiBTY3JhcGVyIChjcmF3bGVyL3NwaWRlciksVXNlIHRoZSBjc3MzIGRvbSBzZWxlY3RvcixCYXNlZCBvbiBwaHBRdWVyeSEg566A5rSB44CB5LyY6ZuF44CB5Y+v5omp5bGV55qEUEhQ6YeH6ZuG5bel5YW3KOeIrOiZqynvvIzln7rkuo5waHBRdWVyeeOAgiIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwOi8vcXVlcnlsaXN0LmNjIiwKICAgICAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAgICAgIlF1ZXJ5TGlzdCIsCiAgICAgICAgICAgICAgICAicGhwUXVlcnkiLAogICAgICAgICAgICAgICAgInNwaWRlciIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInRpbWUiOiAiMjAxNy0xMi0xNVQwMzowNTozMiswMDowMCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAicHNyL2h0dHAtbWVzc2FnZSIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMC4xIiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9waHAtZmlnL2h0dHAtbWVzc2FnZS5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJmNjU2MWJmMjhkNTIwMTU0ZTRiMGVjNzJiZTk1NDE4YWJlNmQ5MzYzIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvcGhwLWZpZy9odHRwLW1lc3NhZ2UvemlwYmFsbC9mNjU2MWJmMjhkNTIwMTU0ZTRiMGVjNzJiZTk1NDE4YWJlNmQ5MzYzIiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiZjY1NjFiZjI4ZDUyMDE1NGU0YjBlYzcyYmU5NTQxOGFiZTZkOTM2MyIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAicGhwIjogIj49NS4zLjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjEuMC54LWRldiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJQc3JcXEh0dHBcXE1lc3NhZ2VcXCI6ICJzcmMvIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIk1JVCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiUEhQLUZJRyIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHA6Ly93d3cucGhwLWZpZy5vcmcvIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQ29tbW9uIGludGVyZmFjZSBmb3IgSFRUUCBtZXNzYWdlcyIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vcGhwLWZpZy9odHRwLW1lc3NhZ2UiLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAiaHR0cCIsCiAgICAgICAgICAgICAgICAiaHR0cC1tZXNzYWdlIiwKICAgICAgICAgICAgICAgICJwc3IiLAogICAgICAgICAgICAgICAgInBzci03IiwKICAgICAgICAgICAgICAgICJyZXF1ZXN0IiwKICAgICAgICAgICAgICAgICJyZXNwb25zZSIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInRpbWUiOiAiMjAxNi0wOC0wNlQxNDozOTo1MSswMDowMCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAic3ltZm9ueS9wb2x5ZmlsbC1tYnN0cmluZyIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogInYxLjguMCIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3ltZm9ueS9wb2x5ZmlsbC1tYnN0cmluZy5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICIzMjk2YWRmNmE2NDU0YTA1MDY3OWNkZTkwZjk1MzUwYWQ2MDRiMTcxIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3Mvc3ltZm9ueS9wb2x5ZmlsbC1tYnN0cmluZy96aXBiYWxsLzMyOTZhZGY2YTY0NTRhMDUwNjc5Y2RlOTBmOTUzNTBhZDYwNGIxNzEiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICIzMjk2YWRmNmE2NDU0YTA1MDY3OWNkZTkwZjk1MzUwYWQ2MDRiMTcxIiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJwaHAiOiAiPj01LjMuMyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInN1Z2dlc3QiOiB7CiAgICAgICAgICAgICAgICAiZXh0LW1ic3RyaW5nIjogIkZvciBiZXN0IHBlcmZvcm1hbmNlIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImV4dHJhIjogewogICAgICAgICAgICAgICAgImJyYW5jaC1hbGlhcyI6IHsKICAgICAgICAgICAgICAgICAgICAiZGV2LW1hc3RlciI6ICIxLjgtZGV2IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIlN5bWZvbnlcXFBvbHlmaWxsXFxNYnN0cmluZ1xcIjogIiIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAiZmlsZXMiOiBbCiAgICAgICAgICAgICAgICAgICAgImJvb3RzdHJhcC5waHAiCiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiTUlUIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJOaWNvbGFzIEdyZWthcyIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogInBAdGNod29yay5jb20iCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlN5bWZvbnkgQ29tbXVuaXR5IiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9zeW1mb255LmNvbS9jb250cmlidXRvcnMiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJTeW1mb255IHBvbHlmaWxsIGZvciB0aGUgTWJzdHJpbmcgZXh0ZW5zaW9uIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vc3ltZm9ueS5jb20iLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAiY29tcGF0aWJpbGl0eSIsCiAgICAgICAgICAgICAgICAibWJzdHJpbmciLAogICAgICAgICAgICAgICAgInBvbHlmaWxsIiwKICAgICAgICAgICAgICAgICJwb3J0YWJsZSIsCiAgICAgICAgICAgICAgICAic2hpbSIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInRpbWUiOiAiMjAxOC0wNC0yNlQxMDowNjoyOCswMDowMCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAic3ltZm9ueS9wb2x5ZmlsbC1waHA3MiIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogInYxLjguMCIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3ltZm9ueS9wb2x5ZmlsbC1waHA3Mi5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJhNDU3NmUyODJkNzgyYWQ4MjM5N2YzZTRlYzFkZjhlMGYwY2FmYjQ2IgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3Mvc3ltZm9ueS9wb2x5ZmlsbC1waHA3Mi96aXBiYWxsL2E0NTc2ZTI4MmQ3ODJhZDgyMzk3ZjNlNGVjMWRmOGUwZjBjYWZiNDYiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJhNDU3NmUyODJkNzgyYWQ4MjM5N2YzZTRlYzFkZjhlMGYwY2FmYjQ2IiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJwaHAiOiAiPj01LjMuMyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgICAgICJleHRyYSI6IHsKICAgICAgICAgICAgICAgICJicmFuY2gtYWxpYXMiOiB7CiAgICAgICAgICAgICAgICAgICAgImRldi1tYXN0ZXIiOiAiMS44LWRldiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJTeW1mb255XFxQb2x5ZmlsbFxcUGhwNzJcXCI6ICIiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgImZpbGVzIjogWwogICAgICAgICAgICAgICAgICAgICJib290c3RyYXAucGhwIgogICAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIk1JVCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiTmljb2xhcyBHcmVrYXMiLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJwQHRjaHdvcmsuY29tIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJTeW1mb255IENvbW11bml0eSIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vc3ltZm9ueS5jb20vY29udHJpYnV0b3JzIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiU3ltZm9ueSBwb2x5ZmlsbCBiYWNrcG9ydGluZyBzb21lIFBIUCA3LjIrIGZlYXR1cmVzIHRvIGxvd2VyIFBIUCB2ZXJzaW9ucyIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL3N5bWZvbnkuY29tIiwKICAgICAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAgICAgImNvbXBhdGliaWxpdHkiLAogICAgICAgICAgICAgICAgInBvbHlmaWxsIiwKICAgICAgICAgICAgICAgICJwb3J0YWJsZSIsCiAgICAgICAgICAgICAgICAic2hpbSIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInRpbWUiOiAiMjAxOC0wNC0yNlQxMDowNjoyOCswMDowMCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAic3ltZm9ueS92YXItZHVtcGVyIiwKICAgICAgICAgICAgInZlcnNpb24iOiAidjQuMS4xIiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zeW1mb255L3Zhci1kdW1wZXIuZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiYjJlZWJhZWMwODVkMWYyY2FmYmFkNzY0NDczM2Q0OTRhM2JiYmM5YiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL3N5bWZvbnkvdmFyLWR1bXBlci96aXBiYWxsL2IyZWViYWVjMDg1ZDFmMmNhZmJhZDc2NDQ3MzNkNDk0YTNiYmJjOWIiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJiMmVlYmFlYzA4NWQxZjJjYWZiYWQ3NjQ0NzMzZDQ5NGEzYmJiYzliIiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJwaHAiOiAiXjcuMS4zIiwKICAgICAgICAgICAgICAgICJzeW1mb255L3BvbHlmaWxsLW1ic3RyaW5nIjogIn4xLjAiLAogICAgICAgICAgICAgICAgInN5bWZvbnkvcG9seWZpbGwtcGhwNzIiOiAifjEuNSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImNvbmZsaWN0IjogewogICAgICAgICAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICI8NC44LjM1fDw1LjQuMyw+PTUuMCIsCiAgICAgICAgICAgICAgICAic3ltZm9ueS9jb25zb2xlIjogIjwzLjQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAgICAgICAgICJleHQtaWNvbnYiOiAiKiIsCiAgICAgICAgICAgICAgICAic3ltZm9ueS9wcm9jZXNzIjogIn4zLjR8fjQuMCIsCiAgICAgICAgICAgICAgICAidHdpZy90d2lnIjogIn4xLjM0fH4yLjQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJzdWdnZXN0IjogewogICAgICAgICAgICAgICAgImV4dC1pY29udiI6ICJUbyBjb252ZXJ0IG5vbi1VVEYtOCBzdHJpbmdzIHRvIFVURi04IChvciBzeW1mb255L3BvbHlmaWxsLWljb252IGluIGNhc2UgZXh0LWljb252IGNhbm5vdCBiZSB1c2VkKS4iLAogICAgICAgICAgICAgICAgImV4dC1pbnRsIjogIlRvIHNob3cgcmVnaW9uIG5hbWUgaW4gdGltZSB6b25lIGR1bXAiLAogICAgICAgICAgICAgICAgInN5bWZvbnkvY29uc29sZSI6ICJUbyB1c2UgdGhlIFNlcnZlckR1bXBDb21tYW5kIGFuZC9vciB0aGUgYmluL3Zhci1kdW1wLXNlcnZlciBzY3JpcHQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJiaW4iOiBbCiAgICAgICAgICAgICAgICAiUmVzb3VyY2VzL2Jpbi92YXItZHVtcC1zZXJ2ZXIiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjQuMS1kZXYiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJmaWxlcyI6IFsKICAgICAgICAgICAgICAgICAgICAiUmVzb3VyY2VzL2Z1bmN0aW9ucy9kdW1wLnBocCIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIlN5bWZvbnlcXENvbXBvbmVudFxcVmFyRHVtcGVyXFwiOiAiIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICJleGNsdWRlLWZyb20tY2xhc3NtYXAiOiBbCiAgICAgICAgICAgICAgICAgICAgIi9UZXN0cy8iCiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiTUlUIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJOaWNvbGFzIEdyZWthcyIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogInBAdGNod29yay5jb20iCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlN5bWZvbnkgQ29tbXVuaXR5IiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9zeW1mb255LmNvbS9jb250cmlidXRvcnMiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJTeW1mb255IG1lY2hhbmlzbSBmb3IgZXhwbG9yaW5nIGFuZCBkdW1waW5nIFBIUCB2YXJpYWJsZXMiLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9zeW1mb255LmNvbSIsCiAgICAgICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgICAgICJkZWJ1ZyIsCiAgICAgICAgICAgICAgICAiZHVtcCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInRpbWUiOiAiMjAxOC0wNi0yM1QxMjoyMzo1NiswMDowMCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAidGlnaHRlbmNvL2NvbGxlY3QiLAogICAgICAgICAgICAidmVyc2lvbiI6ICJ2NS42LjI3IiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS90aWdodGVuY28vY29sbGVjdC5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJmODBiZGJmN2U1MTQ2MTQ2N2MwMTAzODExY2E5ZGYyZWMwYTU2MWQ1IgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvdGlnaHRlbmNvL2NvbGxlY3QvemlwYmFsbC9mODBiZGJmN2U1MTQ2MTQ2N2MwMTAzODExY2E5ZGYyZWMwYTU2MWQ1IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiZjgwYmRiZjdlNTE0NjE0NjdjMDEwMzgxMWNhOWRmMmVjMGE1NjFkNSIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAicGhwIjogIj49Ny4xLjMiLAogICAgICAgICAgICAgICAgInN5bWZvbnkvdmFyLWR1bXBlciI6ICI+PTMuMS4xMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAgICAgIm1vY2tlcnkvbW9ja2VyeSI6ICJ+MS4wIiwKICAgICAgICAgICAgICAgICJuZXNib3QvY2FyYm9uIjogIn4xLjIwIiwKICAgICAgICAgICAgICAgICJwaHB1bml0L3BocHVuaXQiOiAifjcuMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJmaWxlcyI6IFsKICAgICAgICAgICAgICAgICAgICAic3JjL0NvbGxlY3QvU3VwcG9ydC9oZWxwZXJzLnBocCIsCiAgICAgICAgICAgICAgICAgICAgInNyYy9Db2xsZWN0L1N1cHBvcnQvYWxpYXMucGhwIgogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgICAgICAgICAiVGlnaHRlbmNvXFxDb2xsZWN0XFwiOiAic3JjL0NvbGxlY3QiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiTUlUIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJUYXlsb3IgT3R3ZWxsIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAidGF5bG9yb3R3ZWxsQGdtYWlsLmNvbSIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkNvbGxlY3QgLSBJbGx1bWluYXRlIENvbGxlY3Rpb25zIGFzIGEgc2VwYXJhdGUgcGFja2FnZS4iLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAiY29sbGVjdGlvbiIsCiAgICAgICAgICAgICAgICAibGFyYXZlbCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInRpbWUiOiAiMjAxOC0wNy0xMVQxMzozMTowOCswMDowMCIKICAgICAgICB9CiAgICBdLAogICAgInBhY2thZ2VzLWRldiI6IFtdLAogICAgImFsaWFzZXMiOiBbXSwKICAgICJtaW5pbXVtLXN0YWJpbGl0eSI6ICJzdGFibGUiLAogICAgInN0YWJpbGl0eS1mbGFncyI6IFtdLAogICAgInByZWZlci1zdGFibGUiOiBmYWxzZSwKICAgICJwcmVmZXItbG93ZXN0IjogZmFsc2UsCiAgICAicGxhdGZvcm0iOiBbXSwKICAgICJwbGF0Zm9ybS1kZXYiOiBbXQp9Cg==AppDevTools/query/vendor/autoload.phpPD9waHAKCi8vIGF1dG9sb2FkLnBocCBAZ2VuZXJhdGVkIGJ5IENvbXBvc2VyCgpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvY29tcG9zZXIvYXV0b2xvYWRfcmVhbC5waHAnOwoKcmV0dXJuIENvbXBvc2VyQXV0b2xvYWRlckluaXQ3N2FlYTQ0MjFiN2IzNGMyNDc1OTMyYWZiOTlkNDFhYjo6Z2V0TG9hZGVyKCk7Cg==AppDevTools/query/vendor/bin/var-dump-serverIyEvdXNyL2Jpbi9lbnYgc2gKCmRpcj0kKGNkICIkezAlWy9cXF0qfSIgPiAvZGV2L251bGw7IGNkICIuLi9zeW1mb255L3Zhci1kdW1wZXIvUmVzb3VyY2VzL2JpbiIgJiYgcHdkKQoKaWYgWyAtZCAvcHJvYy9jeWdkcml2ZSBdICYmIFtbICQod2hpY2ggcGhwKSA9PSAkKHJlYWRsaW5rIC1uIC9wcm9jL2N5Z2RyaXZlKS8qIF1dOyB0aGVuCiAgICMgV2UgYXJlIGluIENneXdpbiB1c2luZyBXaW5kb3dzIHBocCwgc28gdGhlIHBhdGggbXVzdCBiZSB0cmFuc2xhdGVkCiAgIGRpcj0kKGN5Z3BhdGggLW0gIiRkaXIiKTsKZmkKCiIke2Rpcn0vdmFyLWR1bXAtc2VydmVyIiAiJEAiCg==AppDevTools/query/vendor/bin/var-dump-server.batQEVDSE8gT0ZGDQpzZXRsb2NhbCBESVNBQkxFREVMQVlFREVYUEFOU0lPTg0KU0VUIEJJTl9UQVJHRVQ9JX5kcDAvLi4vc3ltZm9ueS92YXItZHVtcGVyL1Jlc291cmNlcy9iaW4vdmFyLWR1bXAtc2VydmVyDQpwaHAgIiVCSU5fVEFSR0VUJSIgJSoNCg==AppDevTools/query/vendor/composer/ClassLoader.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIENvbXBvc2VyLgogKgogKiAoYykgTmlscyBBZGVybWFubiA8bmFkZXJtYW5AbmFkZXJtYW4uZGU+CiAqICAgICBKb3JkaSBCb2dnaWFubyA8ai5ib2dnaWFub0BzZWxkLmJlPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgQ29tcG9zZXJcQXV0b2xvYWQ7CgovKioKICogQ2xhc3NMb2FkZXIgaW1wbGVtZW50cyBhIFBTUi0wLCBQU1ItNCBhbmQgY2xhc3NtYXAgY2xhc3MgbG9hZGVyLgogKgogKiAgICAgJGxvYWRlciA9IG5ldyBcQ29tcG9zZXJcQXV0b2xvYWRcQ2xhc3NMb2FkZXIoKTsKICoKICogICAgIC8vIHJlZ2lzdGVyIGNsYXNzZXMgd2l0aCBuYW1lc3BhY2VzCiAqICAgICAkbG9hZGVyLT5hZGQoJ1N5bWZvbnlcQ29tcG9uZW50JywgX19ESVJfXy4nL2NvbXBvbmVudCcpOwogKiAgICAgJGxvYWRlci0+YWRkKCdTeW1mb255JywgICAgICAgICAgIF9fRElSX18uJy9mcmFtZXdvcmsnKTsKICoKICogICAgIC8vIGFjdGl2YXRlIHRoZSBhdXRvbG9hZGVyCiAqICAgICAkbG9hZGVyLT5yZWdpc3RlcigpOwogKgogKiAgICAgLy8gdG8gZW5hYmxlIHNlYXJjaGluZyB0aGUgaW5jbHVkZSBwYXRoIChlZy4gZm9yIFBFQVIgcGFja2FnZXMpCiAqICAgICAkbG9hZGVyLT5zZXRVc2VJbmNsdWRlUGF0aCh0cnVlKTsKICoKICogSW4gdGhpcyBleGFtcGxlLCBpZiB5b3UgdHJ5IHRvIHVzZSBhIGNsYXNzIGluIHRoZSBTeW1mb255XENvbXBvbmVudAogKiBuYW1lc3BhY2Ugb3Igb25lIG9mIGl0cyBjaGlsZHJlbiAoU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZSBmb3IgaW5zdGFuY2UpLAogKiB0aGUgYXV0b2xvYWRlciB3aWxsIGZpcnN0IGxvb2sgZm9yIHRoZSBjbGFzcyB1bmRlciB0aGUgY29tcG9uZW50LwogKiBkaXJlY3RvcnksIGFuZCBpdCB3aWxsIHRoZW4gZmFsbGJhY2sgdG8gdGhlIGZyYW1ld29yay8gZGlyZWN0b3J5IGlmIG5vdAogKiBmb3VuZCBiZWZvcmUgZ2l2aW5nIHVwLgogKgogKiBUaGlzIGNsYXNzIGlzIGxvb3NlbHkgYmFzZWQgb24gdGhlIFN5bWZvbnkgVW5pdmVyc2FsQ2xhc3NMb2FkZXIuCiAqCiAqIEBhdXRob3IgRmFiaWVuIFBvdGVuY2llciA8ZmFiaWVuQHN5bWZvbnkuY29tPgogKiBAYXV0aG9yIEpvcmRpIEJvZ2dpYW5vIDxqLmJvZ2dpYW5vQHNlbGQuYmU+CiAqIEBzZWUgICAgaHR0cDovL3d3dy5waHAtZmlnLm9yZy9wc3IvcHNyLTAvCiAqIEBzZWUgICAgaHR0cDovL3d3dy5waHAtZmlnLm9yZy9wc3IvcHNyLTQvCiAqLwpjbGFzcyBDbGFzc0xvYWRlcgp7CiAgICAvLyBQU1ItNAogICAgcHJpdmF0ZSAkcHJlZml4TGVuZ3Roc1BzcjQgPSBhcnJheSgpOwogICAgcHJpdmF0ZSAkcHJlZml4RGlyc1BzcjQgPSBhcnJheSgpOwogICAgcHJpdmF0ZSAkZmFsbGJhY2tEaXJzUHNyNCA9IGFycmF5KCk7CgogICAgLy8gUFNSLTAKICAgIHByaXZhdGUgJHByZWZpeGVzUHNyMCA9IGFycmF5KCk7CiAgICBwcml2YXRlICRmYWxsYmFja0RpcnNQc3IwID0gYXJyYXkoKTsKCiAgICBwcml2YXRlICR1c2VJbmNsdWRlUGF0aCA9IGZhbHNlOwogICAgcHJpdmF0ZSAkY2xhc3NNYXAgPSBhcnJheSgpOwogICAgcHJpdmF0ZSAkY2xhc3NNYXBBdXRob3JpdGF0aXZlID0gZmFsc2U7CiAgICBwcml2YXRlICRtaXNzaW5nQ2xhc3NlcyA9IGFycmF5KCk7CiAgICBwcml2YXRlICRhcGN1UHJlZml4OwoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQcmVmaXhlcygpCiAgICB7CiAgICAgICAgaWYgKCFlbXB0eSgkdGhpcy0+cHJlZml4ZXNQc3IwKSkgewogICAgICAgICAgICByZXR1cm4gY2FsbF91c2VyX2Z1bmNfYXJyYXkoJ2FycmF5X21lcmdlJywgJHRoaXMtPnByZWZpeGVzUHNyMCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gYXJyYXkoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UHJlZml4ZXNQc3I0KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnByZWZpeERpcnNQc3I0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRGYWxsYmFja0RpcnMoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZmFsbGJhY2tEaXJzUHNyMDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RmFsbGJhY2tEaXJzUHNyNCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5mYWxsYmFja0RpcnNQc3I0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDbGFzc01hcCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5jbGFzc01hcDsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBhcnJheSAkY2xhc3NNYXAgQ2xhc3MgdG8gZmlsZW5hbWUgbWFwCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGRDbGFzc01hcChhcnJheSAkY2xhc3NNYXApCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5jbGFzc01hcCkgewogICAgICAgICAgICAkdGhpcy0+Y2xhc3NNYXAgPSBhcnJheV9tZXJnZSgkdGhpcy0+Y2xhc3NNYXAsICRjbGFzc01hcCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHRoaXMtPmNsYXNzTWFwID0gJGNsYXNzTWFwOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFJlZ2lzdGVycyBhIHNldCBvZiBQU1ItMCBkaXJlY3RvcmllcyBmb3IgYSBnaXZlbiBwcmVmaXgsIGVpdGhlcgogICAgICogYXBwZW5kaW5nIG9yIHByZXBlbmRpbmcgdG8gdGhlIG9uZXMgcHJldmlvdXNseSBzZXQgZm9yIHRoaXMgcHJlZml4LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAgJHByZWZpeCAgVGhlIHByZWZpeAogICAgICogQHBhcmFtIGFycmF5fHN0cmluZyAkcGF0aHMgICBUaGUgUFNSLTAgcm9vdCBkaXJlY3RvcmllcwogICAgICogQHBhcmFtIGJvb2wgICAgICAgICAkcHJlcGVuZCBXaGV0aGVyIHRvIHByZXBlbmQgdGhlIGRpcmVjdG9yaWVzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGQoJHByZWZpeCwgJHBhdGhzLCAkcHJlcGVuZCA9IGZhbHNlKQogICAgewogICAgICAgIGlmICghJHByZWZpeCkgewogICAgICAgICAgICBpZiAoJHByZXBlbmQpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5mYWxsYmFja0RpcnNQc3IwID0gYXJyYXlfbWVyZ2UoCiAgICAgICAgICAgICAgICAgICAgKGFycmF5KSAkcGF0aHMsCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmZhbGxiYWNrRGlyc1BzcjAKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+ZmFsbGJhY2tEaXJzUHNyMCA9IGFycmF5X21lcmdlKAogICAgICAgICAgICAgICAgICAgICR0aGlzLT5mYWxsYmFja0RpcnNQc3IwLAogICAgICAgICAgICAgICAgICAgIChhcnJheSkgJHBhdGhzCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAkZmlyc3QgPSAkcHJlZml4WzBdOwogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPnByZWZpeGVzUHNyMFskZmlyc3RdWyRwcmVmaXhdKSkgewogICAgICAgICAgICAkdGhpcy0+cHJlZml4ZXNQc3IwWyRmaXJzdF1bJHByZWZpeF0gPSAoYXJyYXkpICRwYXRoczsKCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKCRwcmVwZW5kKSB7CiAgICAgICAgICAgICR0aGlzLT5wcmVmaXhlc1BzcjBbJGZpcnN0XVskcHJlZml4XSA9IGFycmF5X21lcmdlKAogICAgICAgICAgICAgICAgKGFycmF5KSAkcGF0aHMsCiAgICAgICAgICAgICAgICAkdGhpcy0+cHJlZml4ZXNQc3IwWyRmaXJzdF1bJHByZWZpeF0KICAgICAgICAgICAgKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkdGhpcy0+cHJlZml4ZXNQc3IwWyRmaXJzdF1bJHByZWZpeF0gPSBhcnJheV9tZXJnZSgKICAgICAgICAgICAgICAgICR0aGlzLT5wcmVmaXhlc1BzcjBbJGZpcnN0XVskcHJlZml4XSwKICAgICAgICAgICAgICAgIChhcnJheSkgJHBhdGhzCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogUmVnaXN0ZXJzIGEgc2V0IG9mIFBTUi00IGRpcmVjdG9yaWVzIGZvciBhIGdpdmVuIG5hbWVzcGFjZSwgZWl0aGVyCiAgICAgKiBhcHBlbmRpbmcgb3IgcHJlcGVuZGluZyB0byB0aGUgb25lcyBwcmV2aW91c2x5IHNldCBmb3IgdGhpcyBuYW1lc3BhY2UuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAkcHJlZml4ICBUaGUgcHJlZml4L25hbWVzcGFjZSwgd2l0aCB0cmFpbGluZyAnXFwnCiAgICAgKiBAcGFyYW0gYXJyYXl8c3RyaW5nICRwYXRocyAgIFRoZSBQU1ItNCBiYXNlIGRpcmVjdG9yaWVzCiAgICAgKiBAcGFyYW0gYm9vbCAgICAgICAgICRwcmVwZW5kIFdoZXRoZXIgdG8gcHJlcGVuZCB0aGUgZGlyZWN0b3JpZXMKICAgICAqCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkZFBzcjQoJHByZWZpeCwgJHBhdGhzLCAkcHJlcGVuZCA9IGZhbHNlKQogICAgewogICAgICAgIGlmICghJHByZWZpeCkgewogICAgICAgICAgICAvLyBSZWdpc3RlciBkaXJlY3RvcmllcyBmb3IgdGhlIHJvb3QgbmFtZXNwYWNlLgogICAgICAgICAgICBpZiAoJHByZXBlbmQpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5mYWxsYmFja0RpcnNQc3I0ID0gYXJyYXlfbWVyZ2UoCiAgICAgICAgICAgICAgICAgICAgKGFycmF5KSAkcGF0aHMsCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmZhbGxiYWNrRGlyc1BzcjQKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+ZmFsbGJhY2tEaXJzUHNyNCA9IGFycmF5X21lcmdlKAogICAgICAgICAgICAgICAgICAgICR0aGlzLT5mYWxsYmFja0RpcnNQc3I0LAogICAgICAgICAgICAgICAgICAgIChhcnJheSkgJHBhdGhzCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlaWYgKCFpc3NldCgkdGhpcy0+cHJlZml4RGlyc1BzcjRbJHByZWZpeF0pKSB7CiAgICAgICAgICAgIC8vIFJlZ2lzdGVyIGRpcmVjdG9yaWVzIGZvciBhIG5ldyBuYW1lc3BhY2UuCiAgICAgICAgICAgICRsZW5ndGggPSBzdHJsZW4oJHByZWZpeCk7CiAgICAgICAgICAgIGlmICgnXFwnICE9PSAkcHJlZml4WyRsZW5ndGggLSAxXSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oIkEgbm9uLWVtcHR5IFBTUi00IHByZWZpeCBtdXN0IGVuZCB3aXRoIGEgbmFtZXNwYWNlIHNlcGFyYXRvci4iKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkdGhpcy0+cHJlZml4TGVuZ3Roc1BzcjRbJHByZWZpeFswXV1bJHByZWZpeF0gPSAkbGVuZ3RoOwogICAgICAgICAgICAkdGhpcy0+cHJlZml4RGlyc1BzcjRbJHByZWZpeF0gPSAoYXJyYXkpICRwYXRoczsKICAgICAgICB9IGVsc2VpZiAoJHByZXBlbmQpIHsKICAgICAgICAgICAgLy8gUHJlcGVuZCBkaXJlY3RvcmllcyBmb3IgYW4gYWxyZWFkeSByZWdpc3RlcmVkIG5hbWVzcGFjZS4KICAgICAgICAgICAgJHRoaXMtPnByZWZpeERpcnNQc3I0WyRwcmVmaXhdID0gYXJyYXlfbWVyZ2UoCiAgICAgICAgICAgICAgICAoYXJyYXkpICRwYXRocywKICAgICAgICAgICAgICAgICR0aGlzLT5wcmVmaXhEaXJzUHNyNFskcHJlZml4XQogICAgICAgICAgICApOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIEFwcGVuZCBkaXJlY3RvcmllcyBmb3IgYW4gYWxyZWFkeSByZWdpc3RlcmVkIG5hbWVzcGFjZS4KICAgICAgICAgICAgJHRoaXMtPnByZWZpeERpcnNQc3I0WyRwcmVmaXhdID0gYXJyYXlfbWVyZ2UoCiAgICAgICAgICAgICAgICAkdGhpcy0+cHJlZml4RGlyc1BzcjRbJHByZWZpeF0sCiAgICAgICAgICAgICAgICAoYXJyYXkpICRwYXRocwogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFJlZ2lzdGVycyBhIHNldCBvZiBQU1ItMCBkaXJlY3RvcmllcyBmb3IgYSBnaXZlbiBwcmVmaXgsCiAgICAgKiByZXBsYWNpbmcgYW55IG90aGVycyBwcmV2aW91c2x5IHNldCBmb3IgdGhpcyBwcmVmaXguCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAkcHJlZml4IFRoZSBwcmVmaXgKICAgICAqIEBwYXJhbSBhcnJheXxzdHJpbmcgJHBhdGhzICBUaGUgUFNSLTAgYmFzZSBkaXJlY3RvcmllcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0KCRwcmVmaXgsICRwYXRocykKICAgIHsKICAgICAgICBpZiAoISRwcmVmaXgpIHsKICAgICAgICAgICAgJHRoaXMtPmZhbGxiYWNrRGlyc1BzcjAgPSAoYXJyYXkpICRwYXRoczsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkdGhpcy0+cHJlZml4ZXNQc3IwWyRwcmVmaXhbMF1dWyRwcmVmaXhdID0gKGFycmF5KSAkcGF0aHM7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogUmVnaXN0ZXJzIGEgc2V0IG9mIFBTUi00IGRpcmVjdG9yaWVzIGZvciBhIGdpdmVuIG5hbWVzcGFjZSwKICAgICAqIHJlcGxhY2luZyBhbnkgb3RoZXJzIHByZXZpb3VzbHkgc2V0IGZvciB0aGlzIG5hbWVzcGFjZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgICRwcmVmaXggVGhlIHByZWZpeC9uYW1lc3BhY2UsIHdpdGggdHJhaWxpbmcgJ1xcJwogICAgICogQHBhcmFtIGFycmF5fHN0cmluZyAkcGF0aHMgIFRoZSBQU1ItNCBiYXNlIGRpcmVjdG9yaWVzCiAgICAgKgogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRQc3I0KCRwcmVmaXgsICRwYXRocykKICAgIHsKICAgICAgICBpZiAoISRwcmVmaXgpIHsKICAgICAgICAgICAgJHRoaXMtPmZhbGxiYWNrRGlyc1BzcjQgPSAoYXJyYXkpICRwYXRoczsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkbGVuZ3RoID0gc3RybGVuKCRwcmVmaXgpOwogICAgICAgICAgICBpZiAoJ1xcJyAhPT0gJHByZWZpeFskbGVuZ3RoIC0gMV0pIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCJBIG5vbi1lbXB0eSBQU1ItNCBwcmVmaXggbXVzdCBlbmQgd2l0aCBhIG5hbWVzcGFjZSBzZXBhcmF0b3IuIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHRoaXMtPnByZWZpeExlbmd0aHNQc3I0WyRwcmVmaXhbMF1dWyRwcmVmaXhdID0gJGxlbmd0aDsKICAgICAgICAgICAgJHRoaXMtPnByZWZpeERpcnNQc3I0WyRwcmVmaXhdID0gKGFycmF5KSAkcGF0aHM7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogVHVybnMgb24gc2VhcmNoaW5nIHRoZSBpbmNsdWRlIHBhdGggZm9yIGNsYXNzIGZpbGVzLgogICAgICoKICAgICAqIEBwYXJhbSBib29sICR1c2VJbmNsdWRlUGF0aAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0VXNlSW5jbHVkZVBhdGgoJHVzZUluY2x1ZGVQYXRoKQogICAgewogICAgICAgICR0aGlzLT51c2VJbmNsdWRlUGF0aCA9ICR1c2VJbmNsdWRlUGF0aDsKICAgIH0KCiAgICAvKioKICAgICAqIENhbiBiZSB1c2VkIHRvIGNoZWNrIGlmIHRoZSBhdXRvbG9hZGVyIHVzZXMgdGhlIGluY2x1ZGUgcGF0aCB0byBjaGVjawogICAgICogZm9yIGNsYXNzZXMuCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRVc2VJbmNsdWRlUGF0aCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT51c2VJbmNsdWRlUGF0aDsKICAgIH0KCiAgICAvKioKICAgICAqIFR1cm5zIG9mZiBzZWFyY2hpbmcgdGhlIHByZWZpeCBhbmQgZmFsbGJhY2sgZGlyZWN0b3JpZXMgZm9yIGNsYXNzZXMKICAgICAqIHRoYXQgaGF2ZSBub3QgYmVlbiByZWdpc3RlcmVkIHdpdGggdGhlIGNsYXNzIG1hcC4KICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbCAkY2xhc3NNYXBBdXRob3JpdGF0aXZlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRDbGFzc01hcEF1dGhvcml0YXRpdmUoJGNsYXNzTWFwQXV0aG9yaXRhdGl2ZSkKICAgIHsKICAgICAgICAkdGhpcy0+Y2xhc3NNYXBBdXRob3JpdGF0aXZlID0gJGNsYXNzTWFwQXV0aG9yaXRhdGl2ZTsKICAgIH0KCiAgICAvKioKICAgICAqIFNob3VsZCBjbGFzcyBsb29rdXAgZmFpbCBpZiBub3QgZm91bmQgaW4gdGhlIGN1cnJlbnQgY2xhc3MgbWFwPwogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNDbGFzc01hcEF1dGhvcml0YXRpdmUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y2xhc3NNYXBBdXRob3JpdGF0aXZlOwogICAgfQoKICAgIC8qKgogICAgICogQVBDdSBwcmVmaXggdG8gdXNlIHRvIGNhY2hlIGZvdW5kL25vdC1mb3VuZCBjbGFzc2VzLCBpZiB0aGUgZXh0ZW5zaW9uIGlzIGVuYWJsZWQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRhcGN1UHJlZml4CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRBcGN1UHJlZml4KCRhcGN1UHJlZml4KQogICAgewogICAgICAgICR0aGlzLT5hcGN1UHJlZml4ID0gZnVuY3Rpb25fZXhpc3RzKCdhcGN1X2ZldGNoJykgJiYgaW5pX2dldCgnYXBjLmVuYWJsZWQnKSA/ICRhcGN1UHJlZml4IDogbnVsbDsKICAgIH0KCiAgICAvKioKICAgICAqIFRoZSBBUEN1IHByZWZpeCBpbiB1c2UsIG9yIG51bGwgaWYgQVBDdSBjYWNoaW5nIGlzIG5vdCBlbmFibGVkLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEFwY3VQcmVmaXgoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+YXBjdVByZWZpeDsKICAgIH0KCiAgICAvKioKICAgICAqIFJlZ2lzdGVycyB0aGlzIGluc3RhbmNlIGFzIGFuIGF1dG9sb2FkZXIuCiAgICAgKgogICAgICogQHBhcmFtIGJvb2wgJHByZXBlbmQgV2hldGhlciB0byBwcmVwZW5kIHRoZSBhdXRvbG9hZGVyIG9yIG5vdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVnaXN0ZXIoJHByZXBlbmQgPSBmYWxzZSkKICAgIHsKICAgICAgICBzcGxfYXV0b2xvYWRfcmVnaXN0ZXIoYXJyYXkoJHRoaXMsICdsb2FkQ2xhc3MnKSwgdHJ1ZSwgJHByZXBlbmQpOwogICAgfQoKICAgIC8qKgogICAgICogVW5yZWdpc3RlcnMgdGhpcyBpbnN0YW5jZSBhcyBhbiBhdXRvbG9hZGVyLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdW5yZWdpc3RlcigpCiAgICB7CiAgICAgICAgc3BsX2F1dG9sb2FkX3VucmVnaXN0ZXIoYXJyYXkoJHRoaXMsICdsb2FkQ2xhc3MnKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBMb2FkcyB0aGUgZ2l2ZW4gY2xhc3Mgb3IgaW50ZXJmYWNlLgogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nICAgICRjbGFzcyBUaGUgbmFtZSBvZiB0aGUgY2xhc3MKICAgICAqIEByZXR1cm4gYm9vbHxudWxsIFRydWUgaWYgbG9hZGVkLCBudWxsIG90aGVyd2lzZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbG9hZENsYXNzKCRjbGFzcykKICAgIHsKICAgICAgICBpZiAoJGZpbGUgPSAkdGhpcy0+ZmluZEZpbGUoJGNsYXNzKSkgewogICAgICAgICAgICBpbmNsdWRlRmlsZSgkZmlsZSk7CgogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBGaW5kcyB0aGUgcGF0aCB0byB0aGUgZmlsZSB3aGVyZSB0aGUgY2xhc3MgaXMgZGVmaW5lZC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjbGFzcyBUaGUgbmFtZSBvZiB0aGUgY2xhc3MKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBUaGUgcGF0aCBpZiBmb3VuZCwgZmFsc2Ugb3RoZXJ3aXNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmaW5kRmlsZSgkY2xhc3MpCiAgICB7CiAgICAgICAgLy8gY2xhc3MgbWFwIGxvb2t1cAogICAgICAgIGlmIChpc3NldCgkdGhpcy0+Y2xhc3NNYXBbJGNsYXNzXSkpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5jbGFzc01hcFskY2xhc3NdOwogICAgICAgIH0KICAgICAgICBpZiAoJHRoaXMtPmNsYXNzTWFwQXV0aG9yaXRhdGl2ZSB8fCBpc3NldCgkdGhpcy0+bWlzc2luZ0NsYXNzZXNbJGNsYXNzXSkpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBpZiAobnVsbCAhPT0gJHRoaXMtPmFwY3VQcmVmaXgpIHsKICAgICAgICAgICAgJGZpbGUgPSBhcGN1X2ZldGNoKCR0aGlzLT5hcGN1UHJlZml4LiRjbGFzcywgJGhpdCk7CiAgICAgICAgICAgIGlmICgkaGl0KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJGZpbGU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRmaWxlID0gJHRoaXMtPmZpbmRGaWxlV2l0aEV4dGVuc2lvbigkY2xhc3MsICcucGhwJyk7CgogICAgICAgIC8vIFNlYXJjaCBmb3IgSGFjayBmaWxlcyBpZiB3ZSBhcmUgcnVubmluZyBvbiBISFZNCiAgICAgICAgaWYgKGZhbHNlID09PSAkZmlsZSAmJiBkZWZpbmVkKCdISFZNX1ZFUlNJT04nKSkgewogICAgICAgICAgICAkZmlsZSA9ICR0aGlzLT5maW5kRmlsZVdpdGhFeHRlbnNpb24oJGNsYXNzLCAnLmhoJyk7CiAgICAgICAgfQoKICAgICAgICBpZiAobnVsbCAhPT0gJHRoaXMtPmFwY3VQcmVmaXgpIHsKICAgICAgICAgICAgYXBjdV9hZGQoJHRoaXMtPmFwY3VQcmVmaXguJGNsYXNzLCAkZmlsZSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoZmFsc2UgPT09ICRmaWxlKSB7CiAgICAgICAgICAgIC8vIFJlbWVtYmVyIHRoYXQgdGhpcyBjbGFzcyBkb2VzIG5vdCBleGlzdC4KICAgICAgICAgICAgJHRoaXMtPm1pc3NpbmdDbGFzc2VzWyRjbGFzc10gPSB0cnVlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRmaWxlOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gZmluZEZpbGVXaXRoRXh0ZW5zaW9uKCRjbGFzcywgJGV4dCkKICAgIHsKICAgICAgICAvLyBQU1ItNCBsb29rdXAKICAgICAgICAkbG9naWNhbFBhdGhQc3I0ID0gc3RydHIoJGNsYXNzLCAnXFwnLCBESVJFQ1RPUllfU0VQQVJBVE9SKSAuICRleHQ7CgogICAgICAgICRmaXJzdCA9ICRjbGFzc1swXTsKICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPnByZWZpeExlbmd0aHNQc3I0WyRmaXJzdF0pKSB7CiAgICAgICAgICAgICRzdWJQYXRoID0gJGNsYXNzOwogICAgICAgICAgICB3aGlsZSAoZmFsc2UgIT09ICRsYXN0UG9zID0gc3RycnBvcygkc3ViUGF0aCwgJ1xcJykpIHsKICAgICAgICAgICAgICAgICRzdWJQYXRoID0gc3Vic3RyKCRzdWJQYXRoLCAwLCAkbGFzdFBvcyk7CiAgICAgICAgICAgICAgICAkc2VhcmNoID0gJHN1YlBhdGggLiAnXFwnOwogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5wcmVmaXhEaXJzUHNyNFskc2VhcmNoXSkpIHsKICAgICAgICAgICAgICAgICAgICAkcGF0aEVuZCA9IERJUkVDVE9SWV9TRVBBUkFUT1IgLiBzdWJzdHIoJGxvZ2ljYWxQYXRoUHNyNCwgJGxhc3RQb3MgKyAxKTsKICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkdGhpcy0+cHJlZml4RGlyc1BzcjRbJHNlYXJjaF0gYXMgJGRpcikgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZV9leGlzdHMoJGZpbGUgPSAkZGlyIC4gJHBhdGhFbmQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJGZpbGU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIFBTUi00IGZhbGxiYWNrIGRpcnMKICAgICAgICBmb3JlYWNoICgkdGhpcy0+ZmFsbGJhY2tEaXJzUHNyNCBhcyAkZGlyKSB7CiAgICAgICAgICAgIGlmIChmaWxlX2V4aXN0cygkZmlsZSA9ICRkaXIgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJGxvZ2ljYWxQYXRoUHNyNCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiAkZmlsZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gUFNSLTAgbG9va3VwCiAgICAgICAgaWYgKGZhbHNlICE9PSAkcG9zID0gc3RycnBvcygkY2xhc3MsICdcXCcpKSB7CiAgICAgICAgICAgIC8vIG5hbWVzcGFjZWQgY2xhc3MgbmFtZQogICAgICAgICAgICAkbG9naWNhbFBhdGhQc3IwID0gc3Vic3RyKCRsb2dpY2FsUGF0aFBzcjQsIDAsICRwb3MgKyAxKQogICAgICAgICAgICAgICAgLiBzdHJ0cihzdWJzdHIoJGxvZ2ljYWxQYXRoUHNyNCwgJHBvcyArIDEpLCAnXycsIERJUkVDVE9SWV9TRVBBUkFUT1IpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIFBFQVItbGlrZSBjbGFzcyBuYW1lCiAgICAgICAgICAgICRsb2dpY2FsUGF0aFBzcjAgPSBzdHJ0cigkY2xhc3MsICdfJywgRElSRUNUT1JZX1NFUEFSQVRPUikgLiAkZXh0OwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5wcmVmaXhlc1BzcjBbJGZpcnN0XSkpIHsKICAgICAgICAgICAgZm9yZWFjaCAoJHRoaXMtPnByZWZpeGVzUHNyMFskZmlyc3RdIGFzICRwcmVmaXggPT4gJGRpcnMpIHsKICAgICAgICAgICAgICAgIGlmICgwID09PSBzdHJwb3MoJGNsYXNzLCAkcHJlZml4KSkgewogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRkaXJzIGFzICRkaXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpbGVfZXhpc3RzKCRmaWxlID0gJGRpciAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkbG9naWNhbFBhdGhQc3IwKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRmaWxlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBQU1ItMCBmYWxsYmFjayBkaXJzCiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmZhbGxiYWNrRGlyc1BzcjAgYXMgJGRpcikgewogICAgICAgICAgICBpZiAoZmlsZV9leGlzdHMoJGZpbGUgPSAkZGlyIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICRsb2dpY2FsUGF0aFBzcjApKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJGZpbGU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIFBTUi0wIGluY2x1ZGUgcGF0aHMuCiAgICAgICAgaWYgKCR0aGlzLT51c2VJbmNsdWRlUGF0aCAmJiAkZmlsZSA9IHN0cmVhbV9yZXNvbHZlX2luY2x1ZGVfcGF0aCgkbG9naWNhbFBhdGhQc3IwKSkgewogICAgICAgICAgICByZXR1cm4gJGZpbGU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9Cn0KCi8qKgogKiBTY29wZSBpc29sYXRlZCBpbmNsdWRlLgogKgogKiBQcmV2ZW50cyBhY2Nlc3MgdG8gJHRoaXMvc2VsZiBmcm9tIGluY2x1ZGVkIGZpbGVzLgogKi8KZnVuY3Rpb24gaW5jbHVkZUZpbGUoJGZpbGUpCnsKICAgIGluY2x1ZGUgJGZpbGU7Cn0KAppDevTools/query/vendor/composer/LICENSECkNvcHlyaWdodCAoYykgTmlscyBBZGVybWFubiwgSm9yZGkgQm9nZ2lhbm8KClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwp0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQKdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsCmNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgpJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgpUSEUgU09GVFdBUkUuCgo=AppDevTools/query/vendor/composer/autoload_classmap.phpPD9waHAKCi8vIGF1dG9sb2FkX2NsYXNzbWFwLnBocCBAZ2VuZXJhdGVkIGJ5IENvbXBvc2VyCgokdmVuZG9yRGlyID0gZGlybmFtZShkaXJuYW1lKF9fRklMRV9fKSk7CiRiYXNlRGlyID0gZGlybmFtZSgkdmVuZG9yRGlyKTsKCnJldHVybiBhcnJheSgKICAgICdDYWxsYmFjaycgPT4gJHZlbmRvckRpciAuICcvamFlZ2VyL3BocHF1ZXJ5LXNpbmdsZS9waHBRdWVyeS5waHAnLAogICAgJ0NhbGxiYWNrQm9keScgPT4gJHZlbmRvckRpciAuICcvamFlZ2VyL3BocHF1ZXJ5LXNpbmdsZS9waHBRdWVyeS5waHAnLAogICAgJ0NhbGxiYWNrUGFyYW0nID0+ICR2ZW5kb3JEaXIgLiAnL2phZWdlci9waHBxdWVyeS1zaW5nbGUvcGhwUXVlcnkucGhwJywKICAgICdDYWxsYmFja1BhcmFtZXRlclRvUmVmZXJlbmNlJyA9PiAkdmVuZG9yRGlyIC4gJy9qYWVnZXIvcGhwcXVlcnktc2luZ2xlL3BocFF1ZXJ5LnBocCcsCiAgICAnQ2FsbGJhY2tSZXR1cm5SZWZlcmVuY2UnID0+ICR2ZW5kb3JEaXIgLiAnL2phZWdlci9waHBxdWVyeS1zaW5nbGUvcGhwUXVlcnkucGhwJywKICAgICdDYWxsYmFja1JldHVyblZhbHVlJyA9PiAkdmVuZG9yRGlyIC4gJy9qYWVnZXIvcGhwcXVlcnktc2luZ2xlL3BocFF1ZXJ5LnBocCcsCiAgICAnRE9NRG9jdW1lbnRXcmFwcGVyJyA9PiAkdmVuZG9yRGlyIC4gJy9qYWVnZXIvcGhwcXVlcnktc2luZ2xlL3BocFF1ZXJ5LnBocCcsCiAgICAnRE9NRXZlbnQnID0+ICR2ZW5kb3JEaXIgLiAnL2phZWdlci9waHBxdWVyeS1zaW5nbGUvcGhwUXVlcnkucGhwJywKICAgICdJQ2FsbGJhY2tOYW1lZCcgPT4gJHZlbmRvckRpciAuICcvamFlZ2VyL3BocHF1ZXJ5LXNpbmdsZS9waHBRdWVyeS5waHAnLAogICAgJ3BocFF1ZXJ5JyA9PiAkdmVuZG9yRGlyIC4gJy9qYWVnZXIvcGhwcXVlcnktc2luZ2xlL3BocFF1ZXJ5LnBocCcsCiAgICAncGhwUXVlcnlFdmVudHMnID0+ICR2ZW5kb3JEaXIgLiAnL2phZWdlci9waHBxdWVyeS1zaW5nbGUvcGhwUXVlcnkucGhwJywKICAgICdwaHBRdWVyeU9iamVjdCcgPT4gJHZlbmRvckRpciAuICcvamFlZ2VyL3BocHF1ZXJ5LXNpbmdsZS9waHBRdWVyeS5waHAnLAogICAgJ3BocFF1ZXJ5UGx1Z2lucycgPT4gJHZlbmRvckRpciAuICcvamFlZ2VyL3BocHF1ZXJ5LXNpbmdsZS9waHBRdWVyeS5waHAnLAopOwo=AppDevTools/query/vendor/composer/autoload_files.phpPD9waHAKCi8vIGF1dG9sb2FkX2ZpbGVzLnBocCBAZ2VuZXJhdGVkIGJ5IENvbXBvc2VyCgokdmVuZG9yRGlyID0gZGlybmFtZShkaXJuYW1lKF9fRklMRV9fKSk7CiRiYXNlRGlyID0gZGlybmFtZSgkdmVuZG9yRGlyKTsKCnJldHVybiBhcnJheSgKICAgICcwZTZkN2JmNGE1ODExYmZhNWNmNDBjNWNjZDZmYWU2YScgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9wb2x5ZmlsbC1tYnN0cmluZy9ib290c3RyYXAucGhwJywKICAgICcyNTA3MmRkNmUyNDcwMDg5ZGU2NWFlN2JmMTFkMzEwOScgPT4gJHZlbmRvckRpciAuICcvc3ltZm9ueS9wb2x5ZmlsbC1waHA3Mi9ib290c3RyYXAucGhwJywKICAgICdjOTY0ZWUwZWRlZGYyOGM5NmViZDlkYjUwOTllZjkxMCcgPT4gJHZlbmRvckRpciAuICcvZ3V6emxlaHR0cC9wcm9taXNlcy9zcmMvZnVuY3Rpb25zX2luY2x1ZGUucGhwJywKICAgICdhMGVkYzgzMDljYzVlMWQ2MGUzMDQ3YjVkZjZiNzA1MicgPT4gJHZlbmRvckRpciAuICcvZ3V6emxlaHR0cC9wc3I3L3NyYy9mdW5jdGlvbnNfaW5jbHVkZS5waHAnLAogICAgJzY2N2FlZGE3MjQ3NzE4OWQwNDk0ZmVjZDMyN2MzNjQxJyA9PiAkdmVuZG9yRGlyIC4gJy9zeW1mb255L3Zhci1kdW1wZXIvUmVzb3VyY2VzL2Z1bmN0aW9ucy9kdW1wLnBocCcsCiAgICAnMzdhM2RjNTExMWZlOGY3MDdhYjRjMTMyZWYxZGJjNjInID0+ICR2ZW5kb3JEaXIgLiAnL2d1enpsZWh0dHAvZ3V6emxlL3NyYy9mdW5jdGlvbnNfaW5jbHVkZS5waHAnLAogICAgJ2ZlNjJiYTdlMTA1ODBkOTAzY2M0NmQ4MDhiNTk2MWE0JyA9PiAkdmVuZG9yRGlyIC4gJy90aWdodGVuY28vY29sbGVjdC9zcmMvQ29sbGVjdC9TdXBwb3J0L2hlbHBlcnMucGhwJywKICAgICdjYWYzMWNjNmVjN2NmMjI0MWNiNmYxMmMyMjZjMzg0NicgPT4gJHZlbmRvckRpciAuICcvdGlnaHRlbmNvL2NvbGxlY3Qvc3JjL0NvbGxlY3QvU3VwcG9ydC9hbGlhcy5waHAnLAopOwo=AppDevTools/query/vendor/composer/autoload_namespaces.phpPD9waHAKCi8vIGF1dG9sb2FkX25hbWVzcGFjZXMucGhwIEBnZW5lcmF0ZWQgYnkgQ29tcG9zZXIKCiR2ZW5kb3JEaXIgPSBkaXJuYW1lKGRpcm5hbWUoX19GSUxFX18pKTsKJGJhc2VEaXIgPSBkaXJuYW1lKCR2ZW5kb3JEaXIpOwoKcmV0dXJuIGFycmF5KAopOwo=AppDevTools/query/vendor/composer/autoload_psr4.phpPD9waHAKCi8vIGF1dG9sb2FkX3BzcjQucGhwIEBnZW5lcmF0ZWQgYnkgQ29tcG9zZXIKCiR2ZW5kb3JEaXIgPSBkaXJuYW1lKGRpcm5hbWUoX19GSUxFX18pKTsKJGJhc2VEaXIgPSBkaXJuYW1lKCR2ZW5kb3JEaXIpOwoKcmV0dXJuIGFycmF5KAogICAgJ1RpZ2h0ZW5jb1xcQ29sbGVjdFxcJyA9PiBhcnJheSgkdmVuZG9yRGlyIC4gJy90aWdodGVuY28vY29sbGVjdC9zcmMvQ29sbGVjdCcpLAogICAgJ1N5bWZvbnlcXFBvbHlmaWxsXFxQaHA3MlxcJyA9PiBhcnJheSgkdmVuZG9yRGlyIC4gJy9zeW1mb255L3BvbHlmaWxsLXBocDcyJyksCiAgICAnU3ltZm9ueVxcUG9seWZpbGxcXE1ic3RyaW5nXFwnID0+IGFycmF5KCR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvcG9seWZpbGwtbWJzdHJpbmcnKSwKICAgICdTeW1mb255XFxDb21wb25lbnRcXFZhckR1bXBlclxcJyA9PiBhcnJheSgkdmVuZG9yRGlyIC4gJy9zeW1mb255L3Zhci1kdW1wZXInKSwKICAgICdRTFxcJyA9PiBhcnJheSgkdmVuZG9yRGlyIC4gJy9qYWVnZXIvcXVlcnlsaXN0L3NyYycpLAogICAgJ1BzclxcSHR0cFxcTWVzc2FnZVxcJyA9PiBhcnJheSgkdmVuZG9yRGlyIC4gJy9wc3IvaHR0cC1tZXNzYWdlL3NyYycpLAogICAgJ0phZWdlclxcJyA9PiBhcnJheSgkdmVuZG9yRGlyIC4gJy9qYWVnZXIvZy1odHRwL3NyYycpLAogICAgJ0d1enpsZUh0dHBcXFBzcjdcXCcgPT4gYXJyYXkoJHZlbmRvckRpciAuICcvZ3V6emxlaHR0cC9wc3I3L3NyYycpLAogICAgJ0d1enpsZUh0dHBcXFByb21pc2VcXCcgPT4gYXJyYXkoJHZlbmRvckRpciAuICcvZ3V6emxlaHR0cC9wcm9taXNlcy9zcmMnKSwKICAgICdHdXp6bGVIdHRwXFwnID0+IGFycmF5KCR2ZW5kb3JEaXIgLiAnL2d1enpsZWh0dHAvZ3V6emxlL3NyYycpLAopOwo=AppDevTools/query/vendor/composer/autoload_real.phpPD9waHAKCi8vIGF1dG9sb2FkX3JlYWwucGhwIEBnZW5lcmF0ZWQgYnkgQ29tcG9zZXIKCmNsYXNzIENvbXBvc2VyQXV0b2xvYWRlckluaXQ3N2FlYTQ0MjFiN2IzNGMyNDc1OTMyYWZiOTlkNDFhYgp7CiAgICBwcml2YXRlIHN0YXRpYyAkbG9hZGVyOwoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbG9hZENsYXNzTG9hZGVyKCRjbGFzcykKICAgIHsKICAgICAgICBpZiAoJ0NvbXBvc2VyXEF1dG9sb2FkXENsYXNzTG9hZGVyJyA9PT0gJGNsYXNzKSB7CiAgICAgICAgICAgIHJlcXVpcmUgX19ESVJfXyAuICcvQ2xhc3NMb2FkZXIucGhwJzsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRMb2FkZXIoKQogICAgewogICAgICAgIGlmIChudWxsICE9PSBzZWxmOjokbG9hZGVyKSB7CiAgICAgICAgICAgIHJldHVybiBzZWxmOjokbG9hZGVyOwogICAgICAgIH0KCiAgICAgICAgc3BsX2F1dG9sb2FkX3JlZ2lzdGVyKGFycmF5KCdDb21wb3NlckF1dG9sb2FkZXJJbml0NzdhZWE0NDIxYjdiMzRjMjQ3NTkzMmFmYjk5ZDQxYWInLCAnbG9hZENsYXNzTG9hZGVyJyksIHRydWUsIHRydWUpOwogICAgICAgIHNlbGY6OiRsb2FkZXIgPSAkbG9hZGVyID0gbmV3IFxDb21wb3NlclxBdXRvbG9hZFxDbGFzc0xvYWRlcigpOwogICAgICAgIHNwbF9hdXRvbG9hZF91bnJlZ2lzdGVyKGFycmF5KCdDb21wb3NlckF1dG9sb2FkZXJJbml0NzdhZWE0NDIxYjdiMzRjMjQ3NTkzMmFmYjk5ZDQxYWInLCAnbG9hZENsYXNzTG9hZGVyJykpOwoKICAgICAgICAkdXNlU3RhdGljTG9hZGVyID0gUEhQX1ZFUlNJT05fSUQgPj0gNTA2MDAgJiYgIWRlZmluZWQoJ0hIVk1fVkVSU0lPTicpICYmICghZnVuY3Rpb25fZXhpc3RzKCd6ZW5kX2xvYWRlcl9maWxlX2VuY29kZWQnKSB8fCAhemVuZF9sb2FkZXJfZmlsZV9lbmNvZGVkKCkpOwogICAgICAgIGlmICgkdXNlU3RhdGljTG9hZGVyKSB7CiAgICAgICAgICAgIHJlcXVpcmVfb25jZSBfX0RJUl9fIC4gJy9hdXRvbG9hZF9zdGF0aWMucGhwJzsKCiAgICAgICAgICAgIGNhbGxfdXNlcl9mdW5jKFxDb21wb3NlclxBdXRvbG9hZFxDb21wb3NlclN0YXRpY0luaXQ3N2FlYTQ0MjFiN2IzNGMyNDc1OTMyYWZiOTlkNDFhYjo6Z2V0SW5pdGlhbGl6ZXIoJGxvYWRlcikpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRtYXAgPSByZXF1aXJlIF9fRElSX18gLiAnL2F1dG9sb2FkX25hbWVzcGFjZXMucGhwJzsKICAgICAgICAgICAgZm9yZWFjaCAoJG1hcCBhcyAkbmFtZXNwYWNlID0+ICRwYXRoKSB7CiAgICAgICAgICAgICAgICAkbG9hZGVyLT5zZXQoJG5hbWVzcGFjZSwgJHBhdGgpOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkbWFwID0gcmVxdWlyZSBfX0RJUl9fIC4gJy9hdXRvbG9hZF9wc3I0LnBocCc7CiAgICAgICAgICAgIGZvcmVhY2ggKCRtYXAgYXMgJG5hbWVzcGFjZSA9PiAkcGF0aCkgewogICAgICAgICAgICAgICAgJGxvYWRlci0+c2V0UHNyNCgkbmFtZXNwYWNlLCAkcGF0aCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRjbGFzc01hcCA9IHJlcXVpcmUgX19ESVJfXyAuICcvYXV0b2xvYWRfY2xhc3NtYXAucGhwJzsKICAgICAgICAgICAgaWYgKCRjbGFzc01hcCkgewogICAgICAgICAgICAgICAgJGxvYWRlci0+YWRkQ2xhc3NNYXAoJGNsYXNzTWFwKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJGxvYWRlci0+cmVnaXN0ZXIodHJ1ZSk7CgogICAgICAgIGlmICgkdXNlU3RhdGljTG9hZGVyKSB7CiAgICAgICAgICAgICRpbmNsdWRlRmlsZXMgPSBDb21wb3NlclxBdXRvbG9hZFxDb21wb3NlclN0YXRpY0luaXQ3N2FlYTQ0MjFiN2IzNGMyNDc1OTMyYWZiOTlkNDFhYjo6JGZpbGVzOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRpbmNsdWRlRmlsZXMgPSByZXF1aXJlIF9fRElSX18gLiAnL2F1dG9sb2FkX2ZpbGVzLnBocCc7CiAgICAgICAgfQogICAgICAgIGZvcmVhY2ggKCRpbmNsdWRlRmlsZXMgYXMgJGZpbGVJZGVudGlmaWVyID0+ICRmaWxlKSB7CiAgICAgICAgICAgIGNvbXBvc2VyUmVxdWlyZTc3YWVhNDQyMWI3YjM0YzI0NzU5MzJhZmI5OWQ0MWFiKCRmaWxlSWRlbnRpZmllciwgJGZpbGUpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRsb2FkZXI7CiAgICB9Cn0KCmZ1bmN0aW9uIGNvbXBvc2VyUmVxdWlyZTc3YWVhNDQyMWI3YjM0YzI0NzU5MzJhZmI5OWQ0MWFiKCRmaWxlSWRlbnRpZmllciwgJGZpbGUpCnsKICAgIGlmIChlbXB0eSgkR0xPQkFMU1snX19jb21wb3Nlcl9hdXRvbG9hZF9maWxlcyddWyRmaWxlSWRlbnRpZmllcl0pKSB7CiAgICAgICAgcmVxdWlyZSAkZmlsZTsKCiAgICAgICAgJEdMT0JBTFNbJ19fY29tcG9zZXJfYXV0b2xvYWRfZmlsZXMnXVskZmlsZUlkZW50aWZpZXJdID0gdHJ1ZTsKICAgIH0KfQo=AppDevTools/query/vendor/composer/autoload_static.phpPD9waHAKCi8vIGF1dG9sb2FkX3N0YXRpYy5waHAgQGdlbmVyYXRlZCBieSBDb21wb3NlcgoKbmFtZXNwYWNlIENvbXBvc2VyXEF1dG9sb2FkOwoKY2xhc3MgQ29tcG9zZXJTdGF0aWNJbml0NzdhZWE0NDIxYjdiMzRjMjQ3NTkzMmFmYjk5ZDQxYWIKewogICAgcHVibGljIHN0YXRpYyAkZmlsZXMgPSBhcnJheSAoCiAgICAgICAgJzBlNmQ3YmY0YTU4MTFiZmE1Y2Y0MGM1Y2NkNmZhZTZhJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvcG9seWZpbGwtbWJzdHJpbmcvYm9vdHN0cmFwLnBocCcsCiAgICAgICAgJzI1MDcyZGQ2ZTI0NzAwODlkZTY1YWU3YmYxMWQzMTA5JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvcG9seWZpbGwtcGhwNzIvYm9vdHN0cmFwLnBocCcsCiAgICAgICAgJ2M5NjRlZTBlZGVkZjI4Yzk2ZWJkOWRiNTA5OWVmOTEwJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2d1enpsZWh0dHAvcHJvbWlzZXMvc3JjL2Z1bmN0aW9uc19pbmNsdWRlLnBocCcsCiAgICAgICAgJ2EwZWRjODMwOWNjNWUxZDYwZTMwNDdiNWRmNmI3MDUyJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2d1enpsZWh0dHAvcHNyNy9zcmMvZnVuY3Rpb25zX2luY2x1ZGUucGhwJywKICAgICAgICAnNjY3YWVkYTcyNDc3MTg5ZDA0OTRmZWNkMzI3YzM2NDEnID0+IF9fRElSX18gLiAnLy4uJyAuICcvc3ltZm9ueS92YXItZHVtcGVyL1Jlc291cmNlcy9mdW5jdGlvbnMvZHVtcC5waHAnLAogICAgICAgICczN2EzZGM1MTExZmU4ZjcwN2FiNGMxMzJlZjFkYmM2MicgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ndXp6bGVodHRwL2d1enpsZS9zcmMvZnVuY3Rpb25zX2luY2x1ZGUucGhwJywKICAgICAgICAnZmU2MmJhN2UxMDU4MGQ5MDNjYzQ2ZDgwOGI1OTYxYTQnID0+IF9fRElSX18gLiAnLy4uJyAuICcvdGlnaHRlbmNvL2NvbGxlY3Qvc3JjL0NvbGxlY3QvU3VwcG9ydC9oZWxwZXJzLnBocCcsCiAgICAgICAgJ2NhZjMxY2M2ZWM3Y2YyMjQxY2I2ZjEyYzIyNmMzODQ2JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3RpZ2h0ZW5jby9jb2xsZWN0L3NyYy9Db2xsZWN0L1N1cHBvcnQvYWxpYXMucGhwJywKICAgICk7CgogICAgcHVibGljIHN0YXRpYyAkcHJlZml4TGVuZ3Roc1BzcjQgPSBhcnJheSAoCiAgICAgICAgJ1QnID0+IAogICAgICAgIGFycmF5ICgKICAgICAgICAgICAgJ1RpZ2h0ZW5jb1xcQ29sbGVjdFxcJyA9PiAxOCwKICAgICAgICApLAogICAgICAgICdTJyA9PiAKICAgICAgICBhcnJheSAoCiAgICAgICAgICAgICdTeW1mb255XFxQb2x5ZmlsbFxcUGhwNzJcXCcgPT4gMjMsCiAgICAgICAgICAgICdTeW1mb255XFxQb2x5ZmlsbFxcTWJzdHJpbmdcXCcgPT4gMjYsCiAgICAgICAgICAgICdTeW1mb255XFxDb21wb25lbnRcXFZhckR1bXBlclxcJyA9PiAyOCwKICAgICAgICApLAogICAgICAgICdRJyA9PiAKICAgICAgICBhcnJheSAoCiAgICAgICAgICAgICdRTFxcJyA9PiAzLAogICAgICAgICksCiAgICAgICAgJ1AnID0+IAogICAgICAgIGFycmF5ICgKICAgICAgICAgICAgJ1BzclxcSHR0cFxcTWVzc2FnZVxcJyA9PiAxNywKICAgICAgICApLAogICAgICAgICdKJyA9PiAKICAgICAgICBhcnJheSAoCiAgICAgICAgICAgICdKYWVnZXJcXCcgPT4gNywKICAgICAgICApLAogICAgICAgICdHJyA9PiAKICAgICAgICBhcnJheSAoCiAgICAgICAgICAgICdHdXp6bGVIdHRwXFxQc3I3XFwnID0+IDE2LAogICAgICAgICAgICAnR3V6emxlSHR0cFxcUHJvbWlzZVxcJyA9PiAxOSwKICAgICAgICAgICAgJ0d1enpsZUh0dHBcXCcgPT4gMTEsCiAgICAgICAgKSwKICAgICk7CgogICAgcHVibGljIHN0YXRpYyAkcHJlZml4RGlyc1BzcjQgPSBhcnJheSAoCiAgICAgICAgJ1RpZ2h0ZW5jb1xcQ29sbGVjdFxcJyA9PiAKICAgICAgICBhcnJheSAoCiAgICAgICAgICAgIDAgPT4gX19ESVJfXyAuICcvLi4nIC4gJy90aWdodGVuY28vY29sbGVjdC9zcmMvQ29sbGVjdCcsCiAgICAgICAgKSwKICAgICAgICAnU3ltZm9ueVxcUG9seWZpbGxcXFBocDcyXFwnID0+IAogICAgICAgIGFycmF5ICgKICAgICAgICAgICAgMCA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL3N5bWZvbnkvcG9seWZpbGwtcGhwNzInLAogICAgICAgICksCiAgICAgICAgJ1N5bWZvbnlcXFBvbHlmaWxsXFxNYnN0cmluZ1xcJyA9PiAKICAgICAgICBhcnJheSAoCiAgICAgICAgICAgIDAgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L3BvbHlmaWxsLW1ic3RyaW5nJywKICAgICAgICApLAogICAgICAgICdTeW1mb255XFxDb21wb25lbnRcXFZhckR1bXBlclxcJyA9PiAKICAgICAgICBhcnJheSAoCiAgICAgICAgICAgIDAgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9zeW1mb255L3Zhci1kdW1wZXInLAogICAgICAgICksCiAgICAgICAgJ1FMXFwnID0+IAogICAgICAgIGFycmF5ICgKICAgICAgICAgICAgMCA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2phZWdlci9xdWVyeWxpc3Qvc3JjJywKICAgICAgICApLAogICAgICAgICdQc3JcXEh0dHBcXE1lc3NhZ2VcXCcgPT4gCiAgICAgICAgYXJyYXkgKAogICAgICAgICAgICAwID0+IF9fRElSX18gLiAnLy4uJyAuICcvcHNyL2h0dHAtbWVzc2FnZS9zcmMnLAogICAgICAgICksCiAgICAgICAgJ0phZWdlclxcJyA9PiAKICAgICAgICBhcnJheSAoCiAgICAgICAgICAgIDAgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9qYWVnZXIvZy1odHRwL3NyYycsCiAgICAgICAgKSwKICAgICAgICAnR3V6emxlSHR0cFxcUHNyN1xcJyA9PiAKICAgICAgICBhcnJheSAoCiAgICAgICAgICAgIDAgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9ndXp6bGVodHRwL3Bzcjcvc3JjJywKICAgICAgICApLAogICAgICAgICdHdXp6bGVIdHRwXFxQcm9taXNlXFwnID0+IAogICAgICAgIGFycmF5ICgKICAgICAgICAgICAgMCA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2d1enpsZWh0dHAvcHJvbWlzZXMvc3JjJywKICAgICAgICApLAogICAgICAgICdHdXp6bGVIdHRwXFwnID0+IAogICAgICAgIGFycmF5ICgKICAgICAgICAgICAgMCA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2d1enpsZWh0dHAvZ3V6emxlL3NyYycsCiAgICAgICAgKSwKICAgICk7CgogICAgcHVibGljIHN0YXRpYyAkY2xhc3NNYXAgPSBhcnJheSAoCiAgICAgICAgJ0NhbGxiYWNrJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2phZWdlci9waHBxdWVyeS1zaW5nbGUvcGhwUXVlcnkucGhwJywKICAgICAgICAnQ2FsbGJhY2tCb2R5JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2phZWdlci9waHBxdWVyeS1zaW5nbGUvcGhwUXVlcnkucGhwJywKICAgICAgICAnQ2FsbGJhY2tQYXJhbScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9qYWVnZXIvcGhwcXVlcnktc2luZ2xlL3BocFF1ZXJ5LnBocCcsCiAgICAgICAgJ0NhbGxiYWNrUGFyYW1ldGVyVG9SZWZlcmVuY2UnID0+IF9fRElSX18gLiAnLy4uJyAuICcvamFlZ2VyL3BocHF1ZXJ5LXNpbmdsZS9waHBRdWVyeS5waHAnLAogICAgICAgICdDYWxsYmFja1JldHVyblJlZmVyZW5jZScgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9qYWVnZXIvcGhwcXVlcnktc2luZ2xlL3BocFF1ZXJ5LnBocCcsCiAgICAgICAgJ0NhbGxiYWNrUmV0dXJuVmFsdWUnID0+IF9fRElSX18gLiAnLy4uJyAuICcvamFlZ2VyL3BocHF1ZXJ5LXNpbmdsZS9waHBRdWVyeS5waHAnLAogICAgICAgICdET01Eb2N1bWVudFdyYXBwZXInID0+IF9fRElSX18gLiAnLy4uJyAuICcvamFlZ2VyL3BocHF1ZXJ5LXNpbmdsZS9waHBRdWVyeS5waHAnLAogICAgICAgICdET01FdmVudCcgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9qYWVnZXIvcGhwcXVlcnktc2luZ2xlL3BocFF1ZXJ5LnBocCcsCiAgICAgICAgJ0lDYWxsYmFja05hbWVkJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2phZWdlci9waHBxdWVyeS1zaW5nbGUvcGhwUXVlcnkucGhwJywKICAgICAgICAncGhwUXVlcnknID0+IF9fRElSX18gLiAnLy4uJyAuICcvamFlZ2VyL3BocHF1ZXJ5LXNpbmdsZS9waHBRdWVyeS5waHAnLAogICAgICAgICdwaHBRdWVyeUV2ZW50cycgPT4gX19ESVJfXyAuICcvLi4nIC4gJy9qYWVnZXIvcGhwcXVlcnktc2luZ2xlL3BocFF1ZXJ5LnBocCcsCiAgICAgICAgJ3BocFF1ZXJ5T2JqZWN0JyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2phZWdlci9waHBxdWVyeS1zaW5nbGUvcGhwUXVlcnkucGhwJywKICAgICAgICAncGhwUXVlcnlQbHVnaW5zJyA9PiBfX0RJUl9fIC4gJy8uLicgLiAnL2phZWdlci9waHBxdWVyeS1zaW5nbGUvcGhwUXVlcnkucGhwJywKICAgICk7CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRJbml0aWFsaXplcihDbGFzc0xvYWRlciAkbG9hZGVyKQogICAgewogICAgICAgIHJldHVybiBcQ2xvc3VyZTo6YmluZChmdW5jdGlvbiAoKSB1c2UgKCRsb2FkZXIpIHsKICAgICAgICAgICAgJGxvYWRlci0+cHJlZml4TGVuZ3Roc1BzcjQgPSBDb21wb3NlclN0YXRpY0luaXQ3N2FlYTQ0MjFiN2IzNGMyNDc1OTMyYWZiOTlkNDFhYjo6JHByZWZpeExlbmd0aHNQc3I0OwogICAgICAgICAgICAkbG9hZGVyLT5wcmVmaXhEaXJzUHNyNCA9IENvbXBvc2VyU3RhdGljSW5pdDc3YWVhNDQyMWI3YjM0YzI0NzU5MzJhZmI5OWQ0MWFiOjokcHJlZml4RGlyc1BzcjQ7CiAgICAgICAgICAgICRsb2FkZXItPmNsYXNzTWFwID0gQ29tcG9zZXJTdGF0aWNJbml0NzdhZWE0NDIxYjdiMzRjMjQ3NTkzMmFmYjk5ZDQxYWI6OiRjbGFzc01hcDsKCiAgICAgICAgfSwgbnVsbCwgQ2xhc3NMb2FkZXI6OmNsYXNzKTsKICAgIH0KfQo=AppDevTools/query/vendor/composer/installed.jsonWwogICAgewogICAgICAgICJuYW1lIjogImd1enpsZWh0dHAvZ3V6emxlIiwKICAgICAgICAidmVyc2lvbiI6ICI2LjMuMyIsCiAgICAgICAgInZlcnNpb25fbm9ybWFsaXplZCI6ICI2LjMuMy4wIiwKICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlLmdpdCIsCiAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiNDA3YjBjYjg4MGFjZTg1YzliNjNjNWY5NTUxZGI0OThjYjJkNTBiYSIKICAgICAgICB9LAogICAgICAgICJkaXN0IjogewogICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvZ3V6emxlL2d1enpsZS96aXBiYWxsLzQwN2IwY2I4ODBhY2U4NWM5YjYzYzVmOTU1MWRiNDk4Y2IyZDUwYmEiLAogICAgICAgICAgICAicmVmZXJlbmNlIjogIjQwN2IwY2I4ODBhY2U4NWM5YjYzYzVmOTU1MWRiNDk4Y2IyZDUwYmEiLAogICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICB9LAogICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAiZ3V6emxlaHR0cC9wcm9taXNlcyI6ICJeMS4wIiwKICAgICAgICAgICAgImd1enpsZWh0dHAvcHNyNyI6ICJeMS40IiwKICAgICAgICAgICAgInBocCI6ICI+PTUuNSIKICAgICAgICB9LAogICAgICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAgICAgImV4dC1jdXJsIjogIioiLAogICAgICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIl40LjguMzUgfHwgXjUuNyB8fCBeNi40IHx8IF43LjAiLAogICAgICAgICAgICAicHNyL2xvZyI6ICJeMS4wIgogICAgICAgIH0sCiAgICAgICAgInN1Z2dlc3QiOiB7CiAgICAgICAgICAgICJwc3IvbG9nIjogIlJlcXVpcmVkIGZvciB1c2luZyB0aGUgTG9nIG1pZGRsZXdhcmUiCiAgICAgICAgfSwKICAgICAgICAidGltZSI6ICIyMDE4LTA0LTIyVDE1OjQ2OjU2KzAwOjAwIiwKICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICJicmFuY2gtYWxpYXMiOiB7CiAgICAgICAgICAgICAgICAiZGV2LW1hc3RlciI6ICI2LjMtZGV2IgogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiaW5zdGFsbGF0aW9uLXNvdXJjZSI6ICJkaXN0IiwKICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICJmaWxlcyI6IFsKICAgICAgICAgICAgICAgICJzcmMvZnVuY3Rpb25zX2luY2x1ZGUucGhwIgogICAgICAgICAgICBdLAogICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAiR3V6emxlSHR0cFxcIjogInNyYy8iCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgIk1JVCIKICAgICAgICBdLAogICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJNaWNoYWVsIERvd2xpbmciLAogICAgICAgICAgICAgICAgImVtYWlsIjogIm10ZG93bGluZ0BnbWFpbC5jb20iLAogICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9tdGRvd2xpbmciCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJkZXNjcmlwdGlvbiI6ICJHdXp6bGUgaXMgYSBQSFAgSFRUUCBjbGllbnQgbGlicmFyeSIsCiAgICAgICAgImhvbWVwYWdlIjogImh0dHA6Ly9ndXp6bGVwaHAub3JnLyIsCiAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAiY2xpZW50IiwKICAgICAgICAgICAgImN1cmwiLAogICAgICAgICAgICAiZnJhbWV3b3JrIiwKICAgICAgICAgICAgImh0dHAiLAogICAgICAgICAgICAiaHR0cCBjbGllbnQiLAogICAgICAgICAgICAicmVzdCIsCiAgICAgICAgICAgICJ3ZWIgc2VydmljZSIKICAgICAgICBdCiAgICB9LAogICAgewogICAgICAgICJuYW1lIjogImd1enpsZWh0dHAvcHJvbWlzZXMiLAogICAgICAgICJ2ZXJzaW9uIjogInYxLjMuMSIsCiAgICAgICAgInZlcnNpb25fbm9ybWFsaXplZCI6ICIxLjMuMS4wIiwKICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvcHJvbWlzZXMuZ2l0IiwKICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJhNTlkYTZjZjYxZDgwMDYwNjQ3ZmY0ZDNlYjJjMDNhMmJjNjk0NjQ2IgogICAgICAgIH0sCiAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9ndXp6bGUvcHJvbWlzZXMvemlwYmFsbC9hNTlkYTZjZjYxZDgwMDYwNjQ3ZmY0ZDNlYjJjMDNhMmJjNjk0NjQ2IiwKICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJhNTlkYTZjZjYxZDgwMDYwNjQ3ZmY0ZDNlYjJjMDNhMmJjNjk0NjQ2IiwKICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgfSwKICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgInBocCI6ICI+PTUuNS4wIgogICAgICAgIH0sCiAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIl40LjAiCiAgICAgICAgfSwKICAgICAgICAidGltZSI6ICIyMDE2LTEyLTIwVDEwOjA3OjExKzAwOjAwIiwKICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICJicmFuY2gtYWxpYXMiOiB7CiAgICAgICAgICAgICAgICAiZGV2LW1hc3RlciI6ICIxLjQtZGV2IgogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiaW5zdGFsbGF0aW9uLXNvdXJjZSI6ICJkaXN0IiwKICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgICAgICJHdXp6bGVIdHRwXFxQcm9taXNlXFwiOiAic3JjLyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImZpbGVzIjogWwogICAgICAgICAgICAgICAgInNyYy9mdW5jdGlvbnNfaW5jbHVkZS5waHAiCiAgICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgIk1JVCIKICAgICAgICBdLAogICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJNaWNoYWVsIERvd2xpbmciLAogICAgICAgICAgICAgICAgImVtYWlsIjogIm10ZG93bGluZ0BnbWFpbC5jb20iLAogICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9tdGRvd2xpbmciCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJkZXNjcmlwdGlvbiI6ICJHdXp6bGUgcHJvbWlzZXMgbGlicmFyeSIsCiAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAicHJvbWlzZSIKICAgICAgICBdCiAgICB9LAogICAgewogICAgICAgICJuYW1lIjogImd1enpsZWh0dHAvcHNyNyIsCiAgICAgICAgInZlcnNpb24iOiAiMS40LjIiLAogICAgICAgICJ2ZXJzaW9uX25vcm1hbGl6ZWQiOiAiMS40LjIuMCIsCiAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL3BzcjcuZ2l0IiwKICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJmNWI4YTg1MTJlMmI1OGIwMDcxYTcyODBlMzlmMTRmNzJlMDVkODdjIgogICAgICAgIH0sCiAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9ndXp6bGUvcHNyNy96aXBiYWxsL2Y1YjhhODUxMmUyYjU4YjAwNzFhNzI4MGUzOWYxNGY3MmUwNWQ4N2MiLAogICAgICAgICAgICAicmVmZXJlbmNlIjogImY1YjhhODUxMmUyYjU4YjAwNzFhNzI4MGUzOWYxNGY3MmUwNWQ4N2MiLAogICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICB9LAogICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAicGhwIjogIj49NS40LjAiLAogICAgICAgICAgICAicHNyL2h0dHAtbWVzc2FnZSI6ICJ+MS4wIgogICAgICAgIH0sCiAgICAgICAgInByb3ZpZGUiOiB7CiAgICAgICAgICAgICJwc3IvaHR0cC1tZXNzYWdlLWltcGxlbWVudGF0aW9uIjogIjEuMCIKICAgICAgICB9LAogICAgICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJ+NC4wIgogICAgICAgIH0sCiAgICAgICAgInRpbWUiOiAiMjAxNy0wMy0yMFQxNzoxMDo0NiswMDowMCIsCiAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgImV4dHJhIjogewogICAgICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAgICAgImRldi1tYXN0ZXIiOiAiMS40LWRldiIKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImluc3RhbGxhdGlvbi1zb3VyY2UiOiAiZGlzdCIsCiAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAiR3V6emxlSHR0cFxcUHNyN1xcIjogInNyYy8iCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJmaWxlcyI6IFsKICAgICAgICAgICAgICAgICJzcmMvZnVuY3Rpb25zX2luY2x1ZGUucGhwIgogICAgICAgICAgICBdCiAgICAgICAgfSwKICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICJNSVQiCiAgICAgICAgXSwKICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm5hbWUiOiAiTWljaGFlbCBEb3dsaW5nIiwKICAgICAgICAgICAgICAgICJlbWFpbCI6ICJtdGRvd2xpbmdAZ21haWwuY29tIiwKICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vbXRkb3dsaW5nIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJUb2JpYXMgU2NodWx0emUiLAogICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9Ub2Jpb24iCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJkZXNjcmlwdGlvbiI6ICJQU1ItNyBtZXNzYWdlIGltcGxlbWVudGF0aW9uIHRoYXQgYWxzbyBwcm92aWRlcyBjb21tb24gdXRpbGl0eSBtZXRob2RzIiwKICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICJodHRwIiwKICAgICAgICAgICAgIm1lc3NhZ2UiLAogICAgICAgICAgICAicmVxdWVzdCIsCiAgICAgICAgICAgICJyZXNwb25zZSIsCiAgICAgICAgICAgICJzdHJlYW0iLAogICAgICAgICAgICAidXJpIiwKICAgICAgICAgICAgInVybCIKICAgICAgICBdCiAgICB9LAogICAgewogICAgICAgICJuYW1lIjogImphZWdlci9nLWh0dHAiLAogICAgICAgICJ2ZXJzaW9uIjogIlYxLjQuMSIsCiAgICAgICAgInZlcnNpb25fbm9ybWFsaXplZCI6ICIxLjQuMS4wIiwKICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9qYWUtamFlL0dIdHRwLmdpdCIsCiAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiMTRlODJjMGU1YTIyYWRmNzYyYWNhMGQ5YjEwYjNjYjU5N2YyYmM5NSIKICAgICAgICB9LAogICAgICAgICJkaXN0IjogewogICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvamFlLWphZS9HSHR0cC96aXBiYWxsLzE0ZTgyYzBlNWEyMmFkZjc2MmFjYTBkOWIxMGIzY2I1OTdmMmJjOTUiLAogICAgICAgICAgICAicmVmZXJlbmNlIjogIjE0ZTgyYzBlNWEyMmFkZjc2MmFjYTBkOWIxMGIzY2I1OTdmMmJjOTUiLAogICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICB9LAogICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAiZ3V6emxlaHR0cC9ndXp6bGUiOiAiXjYuMiIKICAgICAgICB9LAogICAgICAgICJ0aW1lIjogIjIwMTctMTItMjZUMDc6MTM6NTArMDA6MDAiLAogICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICJpbnN0YWxsYXRpb24tc291cmNlIjogImRpc3QiLAogICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgIkphZWdlclxcIjogInNyYyIKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAiTUlUIgogICAgICAgIF0sCiAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJuYW1lIjogIkphZWdlciIsCiAgICAgICAgICAgICAgICAiZW1haWwiOiAiSmFlZ2VyQ29kZUBnbWFpbC5jb20iCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJkZXNjcmlwdGlvbiI6ICJTaW1wbGUgSHR0cCBjbGllbnQgYmFzZSBvbiBHdXp6bGVIdHRwIgogICAgfSwKICAgIHsKICAgICAgICAibmFtZSI6ICJqYWVnZXIvcGhwcXVlcnktc2luZ2xlIiwKICAgICAgICAidmVyc2lvbiI6ICIwLjkuOSIsCiAgICAgICAgInZlcnNpb25fbm9ybWFsaXplZCI6ICIwLjkuOS4wIiwKICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9qYWUtamFlL3BocFF1ZXJ5LXNpbmdsZS5naXQiLAogICAgICAgICAgICAicmVmZXJlbmNlIjogIjZjMTJlM2ExNjQ4ZGM2MTlmMTY5MjBmOTYwODJmMzk3ZDc0ZTAxMjciCiAgICAgICAgfSwKICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2phZS1qYWUvcGhwUXVlcnktc2luZ2xlL3ppcGJhbGwvNmMxMmUzYTE2NDhkYzYxOWYxNjkyMGY5NjA4MmYzOTdkNzRlMDEyNyIsCiAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiNmMxMmUzYTE2NDhkYzYxOWYxNjkyMGY5NjA4MmYzOTdkNzRlMDEyNyIsCiAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgIH0sCiAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICJwaHAiOiAiPj01LjMuMCIKICAgICAgICB9LAogICAgICAgICJ0aW1lIjogIjIwMTctMTItMDdUMDI6MTM6MzcrMDA6MDAiLAogICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICJpbnN0YWxsYXRpb24tc291cmNlIjogImRpc3QiLAogICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgImNsYXNzbWFwIjogWwogICAgICAgICAgICAgICAgInBocFF1ZXJ5LnBocCIKICAgICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAiTUlUIgogICAgICAgIF0sCiAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJuYW1lIjogIlRvYmlhc3ogQ3VkbmlrIiwKICAgICAgICAgICAgICAgICJlbWFpbCI6ICJ0b2JpYXN6LmN1ZG5pa0BnbWFpbC5jb20iLAogICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9Ub2JpYXN6Q3VkbmlrIiwKICAgICAgICAgICAgICAgICJyb2xlIjogIkRldmVsb3BlciIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm5hbWUiOiAiSmFlZ2VyIiwKICAgICAgICAgICAgICAgICJyb2xlIjogIlBhY2thZ2VyIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiZGVzY3JpcHRpb24iOiAicGhwUXVlcnnljZXmlofku7bniYjmnKzvvIzmmK9RdWVyeWxpc3TnmoTkvp3otZYoaHR0cDovL3F1ZXJ5bGlzdC5jYy8p77yMcGhwUXVlcnnpobnnm67kuLvpobU6aHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3BocHF1ZXJ5LyIsCiAgICAgICAgImhvbWVwYWdlIjogImh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9waHBxdWVyeS8iCiAgICB9LAogICAgewogICAgICAgICJuYW1lIjogImphZWdlci9xdWVyeWxpc3QiLAogICAgICAgICJ2ZXJzaW9uIjogIlY0LjAuMyIsCiAgICAgICAgInZlcnNpb25fbm9ybWFsaXplZCI6ICI0LjAuMy4wIiwKICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9qYWUtamFlL1F1ZXJ5TGlzdC5naXQiLAogICAgICAgICAgICAicmVmZXJlbmNlIjogIjFkNzM4OTU5ODEyM2VlMGI4N2Q0ODkzYmRmMDQyZDQwZjdlNmNlOTAiCiAgICAgICAgfSwKICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2phZS1qYWUvUXVlcnlMaXN0L3ppcGJhbGwvMWQ3Mzg5NTk4MTIzZWUwYjg3ZDQ4OTNiZGYwNDJkNDBmN2U2Y2U5MCIsCiAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiMWQ3Mzg5NTk4MTIzZWUwYjg3ZDQ4OTNiZGYwNDJkNDBmN2U2Y2U5MCIsCiAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgIH0sCiAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICJqYWVnZXIvZy1odHRwIjogIl4xLjEiLAogICAgICAgICAgICAiamFlZ2VyL3BocHF1ZXJ5LXNpbmdsZSI6ICJeMC45IiwKICAgICAgICAgICAgInBocCI6ICI+PTcuMCIsCiAgICAgICAgICAgICJ0aWdodGVuY28vY29sbGVjdCI6ICJeNSIKICAgICAgICB9LAogICAgICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAgICAgInN5bWZvbnkvdmFyLWR1bXBlciI6ICJeMy4zIgogICAgICAgIH0sCiAgICAgICAgInRpbWUiOiAiMjAxNy0xMi0xNVQwMzowNTozMiswMDowMCIsCiAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgImluc3RhbGxhdGlvbi1zb3VyY2UiOiAiZGlzdCIsCiAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAiUUxcXCI6ICJzcmMiCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgIk1JVCIKICAgICAgICBdLAogICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJKYWVnZXIiLAogICAgICAgICAgICAgICAgImVtYWlsIjogIkphZWdlckNvZGVAZ21haWwuY29tIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiZGVzY3JpcHRpb24iOiAiU2ltcGxlLCBlbGVnYW50LCBleHRlbnNpYmxlIFBIUCBXZWIgU2NyYXBlciAoY3Jhd2xlci9zcGlkZXIpLFVzZSB0aGUgY3NzMyBkb20gc2VsZWN0b3IsQmFzZWQgb24gcGhwUXVlcnkhIOeugOa0geOAgeS8mOmbheOAgeWPr+aJqeWxleeahFBIUOmHh+mbhuW3peWFtyjniKzomasp77yM5Z+65LqOcGhwUXVlcnnjgIIiLAogICAgICAgICJob21lcGFnZSI6ICJodHRwOi8vcXVlcnlsaXN0LmNjIiwKICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICJRdWVyeUxpc3QiLAogICAgICAgICAgICAicGhwUXVlcnkiLAogICAgICAgICAgICAic3BpZGVyIgogICAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICAgIm5hbWUiOiAicHNyL2h0dHAtbWVzc2FnZSIsCiAgICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAogICAgICAgICJ2ZXJzaW9uX25vcm1hbGl6ZWQiOiAiMS4wLjEuMCIsCiAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vcGhwLWZpZy9odHRwLW1lc3NhZ2UuZ2l0IiwKICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJmNjU2MWJmMjhkNTIwMTU0ZTRiMGVjNzJiZTk1NDE4YWJlNmQ5MzYzIgogICAgICAgIH0sCiAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9waHAtZmlnL2h0dHAtbWVzc2FnZS96aXBiYWxsL2Y2NTYxYmYyOGQ1MjAxNTRlNGIwZWM3MmJlOTU0MThhYmU2ZDkzNjMiLAogICAgICAgICAgICAicmVmZXJlbmNlIjogImY2NTYxYmYyOGQ1MjAxNTRlNGIwZWM3MmJlOTU0MThhYmU2ZDkzNjMiLAogICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICB9LAogICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAicGhwIjogIj49NS4zLjAiCiAgICAgICAgfSwKICAgICAgICAidGltZSI6ICIyMDE2LTA4LTA2VDE0OjM5OjUxKzAwOjAwIiwKICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICJicmFuY2gtYWxpYXMiOiB7CiAgICAgICAgICAgICAgICAiZGV2LW1hc3RlciI6ICIxLjAueC1kZXYiCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJpbnN0YWxsYXRpb24tc291cmNlIjogImRpc3QiLAogICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgIlBzclxcSHR0cFxcTWVzc2FnZVxcIjogInNyYy8iCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgIk1JVCIKICAgICAgICBdLAogICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJQSFAtRklHIiwKICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwOi8vd3d3LnBocC1maWcub3JnLyIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgImRlc2NyaXB0aW9uIjogIkNvbW1vbiBpbnRlcmZhY2UgZm9yIEhUVFAgbWVzc2FnZXMiLAogICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vcGhwLWZpZy9odHRwLW1lc3NhZ2UiLAogICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgImh0dHAiLAogICAgICAgICAgICAiaHR0cC1tZXNzYWdlIiwKICAgICAgICAgICAgInBzciIsCiAgICAgICAgICAgICJwc3ItNyIsCiAgICAgICAgICAgICJyZXF1ZXN0IiwKICAgICAgICAgICAgInJlc3BvbnNlIgogICAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICAgIm5hbWUiOiAic3ltZm9ueS9wb2x5ZmlsbC1tYnN0cmluZyIsCiAgICAgICAgInZlcnNpb24iOiAidjEuOC4wIiwKICAgICAgICAidmVyc2lvbl9ub3JtYWxpemVkIjogIjEuOC4wLjAiLAogICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3N5bWZvbnkvcG9seWZpbGwtbWJzdHJpbmcuZ2l0IiwKICAgICAgICAgICAgInJlZmVyZW5jZSI6ICIzMjk2YWRmNmE2NDU0YTA1MDY3OWNkZTkwZjk1MzUwYWQ2MDRiMTcxIgogICAgICAgIH0sCiAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9zeW1mb255L3BvbHlmaWxsLW1ic3RyaW5nL3ppcGJhbGwvMzI5NmFkZjZhNjQ1NGEwNTA2NzljZGU5MGY5NTM1MGFkNjA0YjE3MSIsCiAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiMzI5NmFkZjZhNjQ1NGEwNTA2NzljZGU5MGY5NTM1MGFkNjA0YjE3MSIsCiAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgIH0sCiAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICJwaHAiOiAiPj01LjMuMyIKICAgICAgICB9LAogICAgICAgICJzdWdnZXN0IjogewogICAgICAgICAgICAiZXh0LW1ic3RyaW5nIjogIkZvciBiZXN0IHBlcmZvcm1hbmNlIgogICAgICAgIH0sCiAgICAgICAgInRpbWUiOiAiMjAxOC0wNC0yNlQxMDowNjoyOCswMDowMCIsCiAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgImV4dHJhIjogewogICAgICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAgICAgImRldi1tYXN0ZXIiOiAiMS44LWRldiIKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImluc3RhbGxhdGlvbi1zb3VyY2UiOiAiZGlzdCIsCiAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAiU3ltZm9ueVxcUG9seWZpbGxcXE1ic3RyaW5nXFwiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZmlsZXMiOiBbCiAgICAgICAgICAgICAgICAiYm9vdHN0cmFwLnBocCIKICAgICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAiTUlUIgogICAgICAgIF0sCiAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJuYW1lIjogIk5pY29sYXMgR3Jla2FzIiwKICAgICAgICAgICAgICAgICJlbWFpbCI6ICJwQHRjaHdvcmsuY29tIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJTeW1mb255IENvbW11bml0eSIsCiAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9zeW1mb255LmNvbS9jb250cmlidXRvcnMiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJkZXNjcmlwdGlvbiI6ICJTeW1mb255IHBvbHlmaWxsIGZvciB0aGUgTWJzdHJpbmcgZXh0ZW5zaW9uIiwKICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9zeW1mb255LmNvbSIsCiAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAiY29tcGF0aWJpbGl0eSIsCiAgICAgICAgICAgICJtYnN0cmluZyIsCiAgICAgICAgICAgICJwb2x5ZmlsbCIsCiAgICAgICAgICAgICJwb3J0YWJsZSIsCiAgICAgICAgICAgICJzaGltIgogICAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICAgIm5hbWUiOiAic3ltZm9ueS9wb2x5ZmlsbC1waHA3MiIsCiAgICAgICAgInZlcnNpb24iOiAidjEuOC4wIiwKICAgICAgICAidmVyc2lvbl9ub3JtYWxpemVkIjogIjEuOC4wLjAiLAogICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3N5bWZvbnkvcG9seWZpbGwtcGhwNzIuZ2l0IiwKICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJhNDU3NmUyODJkNzgyYWQ4MjM5N2YzZTRlYzFkZjhlMGYwY2FmYjQ2IgogICAgICAgIH0sCiAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9zeW1mb255L3BvbHlmaWxsLXBocDcyL3ppcGJhbGwvYTQ1NzZlMjgyZDc4MmFkODIzOTdmM2U0ZWMxZGY4ZTBmMGNhZmI0NiIsCiAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiYTQ1NzZlMjgyZDc4MmFkODIzOTdmM2U0ZWMxZGY4ZTBmMGNhZmI0NiIsCiAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgIH0sCiAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICJwaHAiOiAiPj01LjMuMyIKICAgICAgICB9LAogICAgICAgICJ0aW1lIjogIjIwMTgtMDQtMjZUMTA6MDY6MjgrMDA6MDAiLAogICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICJleHRyYSI6IHsKICAgICAgICAgICAgImJyYW5jaC1hbGlhcyI6IHsKICAgICAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjEuOC1kZXYiCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJpbnN0YWxsYXRpb24tc291cmNlIjogImRpc3QiLAogICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgIlN5bWZvbnlcXFBvbHlmaWxsXFxQaHA3MlxcIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImZpbGVzIjogWwogICAgICAgICAgICAgICAgImJvb3RzdHJhcC5waHAiCiAgICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgIk1JVCIKICAgICAgICBdLAogICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJOaWNvbGFzIEdyZWthcyIsCiAgICAgICAgICAgICAgICAiZW1haWwiOiAicEB0Y2h3b3JrLmNvbSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm5hbWUiOiAiU3ltZm9ueSBDb21tdW5pdHkiLAogICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vc3ltZm9ueS5jb20vY29udHJpYnV0b3JzIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiZGVzY3JpcHRpb24iOiAiU3ltZm9ueSBwb2x5ZmlsbCBiYWNrcG9ydGluZyBzb21lIFBIUCA3LjIrIGZlYXR1cmVzIHRvIGxvd2VyIFBIUCB2ZXJzaW9ucyIsCiAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vc3ltZm9ueS5jb20iLAogICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgImNvbXBhdGliaWxpdHkiLAogICAgICAgICAgICAicG9seWZpbGwiLAogICAgICAgICAgICAicG9ydGFibGUiLAogICAgICAgICAgICAic2hpbSIKICAgICAgICBdCiAgICB9LAogICAgewogICAgICAgICJuYW1lIjogInN5bWZvbnkvdmFyLWR1bXBlciIsCiAgICAgICAgInZlcnNpb24iOiAidjQuMS4xIiwKICAgICAgICAidmVyc2lvbl9ub3JtYWxpemVkIjogIjQuMS4xLjAiLAogICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3N5bWZvbnkvdmFyLWR1bXBlci5naXQiLAogICAgICAgICAgICAicmVmZXJlbmNlIjogImIyZWViYWVjMDg1ZDFmMmNhZmJhZDc2NDQ3MzNkNDk0YTNiYmJjOWIiCiAgICAgICAgfSwKICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL3N5bWZvbnkvdmFyLWR1bXBlci96aXBiYWxsL2IyZWViYWVjMDg1ZDFmMmNhZmJhZDc2NDQ3MzNkNDk0YTNiYmJjOWIiLAogICAgICAgICAgICAicmVmZXJlbmNlIjogImIyZWViYWVjMDg1ZDFmMmNhZmJhZDc2NDQ3MzNkNDk0YTNiYmJjOWIiLAogICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICB9LAogICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAicGhwIjogIl43LjEuMyIsCiAgICAgICAgICAgICJzeW1mb255L3BvbHlmaWxsLW1ic3RyaW5nIjogIn4xLjAiLAogICAgICAgICAgICAic3ltZm9ueS9wb2x5ZmlsbC1waHA3MiI6ICJ+MS41IgogICAgICAgIH0sCiAgICAgICAgImNvbmZsaWN0IjogewogICAgICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIjw0LjguMzV8PDUuNC4zLD49NS4wIiwKICAgICAgICAgICAgInN5bWZvbnkvY29uc29sZSI6ICI8My40IgogICAgICAgIH0sCiAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAiZXh0LWljb252IjogIioiLAogICAgICAgICAgICAic3ltZm9ueS9wcm9jZXNzIjogIn4zLjR8fjQuMCIsCiAgICAgICAgICAgICJ0d2lnL3R3aWciOiAifjEuMzR8fjIuNCIKICAgICAgICB9LAogICAgICAgICJzdWdnZXN0IjogewogICAgICAgICAgICAiZXh0LWljb252IjogIlRvIGNvbnZlcnQgbm9uLVVURi04IHN0cmluZ3MgdG8gVVRGLTggKG9yIHN5bWZvbnkvcG9seWZpbGwtaWNvbnYgaW4gY2FzZSBleHQtaWNvbnYgY2Fubm90IGJlIHVzZWQpLiIsCiAgICAgICAgICAgICJleHQtaW50bCI6ICJUbyBzaG93IHJlZ2lvbiBuYW1lIGluIHRpbWUgem9uZSBkdW1wIiwKICAgICAgICAgICAgInN5bWZvbnkvY29uc29sZSI6ICJUbyB1c2UgdGhlIFNlcnZlckR1bXBDb21tYW5kIGFuZC9vciB0aGUgYmluL3Zhci1kdW1wLXNlcnZlciBzY3JpcHQiCiAgICAgICAgfSwKICAgICAgICAidGltZSI6ICIyMDE4LTA2LTIzVDEyOjIzOjU2KzAwOjAwIiwKICAgICAgICAiYmluIjogWwogICAgICAgICAgICAiUmVzb3VyY2VzL2Jpbi92YXItZHVtcC1zZXJ2ZXIiCiAgICAgICAgXSwKICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICJicmFuY2gtYWxpYXMiOiB7CiAgICAgICAgICAgICAgICAiZGV2LW1hc3RlciI6ICI0LjEtZGV2IgogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiaW5zdGFsbGF0aW9uLXNvdXJjZSI6ICJkaXN0IiwKICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICJmaWxlcyI6IFsKICAgICAgICAgICAgICAgICJSZXNvdXJjZXMvZnVuY3Rpb25zL2R1bXAucGhwIgogICAgICAgICAgICBdLAogICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAiU3ltZm9ueVxcQ29tcG9uZW50XFxWYXJEdW1wZXJcXCI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJleGNsdWRlLWZyb20tY2xhc3NtYXAiOiBbCiAgICAgICAgICAgICAgICAiL1Rlc3RzLyIKICAgICAgICAgICAgXQogICAgICAgIH0sCiAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAiTUlUIgogICAgICAgIF0sCiAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICJuYW1lIjogIk5pY29sYXMgR3Jla2FzIiwKICAgICAgICAgICAgICAgICJlbWFpbCI6ICJwQHRjaHdvcmsuY29tIgogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJTeW1mb255IENvbW11bml0eSIsCiAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9zeW1mb255LmNvbS9jb250cmlidXRvcnMiCiAgICAgICAgICAgIH0KICAgICAgICBdLAogICAgICAgICJkZXNjcmlwdGlvbiI6ICJTeW1mb255IG1lY2hhbmlzbSBmb3IgZXhwbG9yaW5nIGFuZCBkdW1waW5nIFBIUCB2YXJpYWJsZXMiLAogICAgICAgICJob21lcGFnZSI6ICJodHRwczovL3N5bWZvbnkuY29tIiwKICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICJkZWJ1ZyIsCiAgICAgICAgICAgICJkdW1wIgogICAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICAgIm5hbWUiOiAidGlnaHRlbmNvL2NvbGxlY3QiLAogICAgICAgICJ2ZXJzaW9uIjogInY1LjYuMjciLAogICAgICAgICJ2ZXJzaW9uX25vcm1hbGl6ZWQiOiAiNS42LjI3LjAiLAogICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3RpZ2h0ZW5jby9jb2xsZWN0LmdpdCIsCiAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiZjgwYmRiZjdlNTE0NjE0NjdjMDEwMzgxMWNhOWRmMmVjMGE1NjFkNSIKICAgICAgICB9LAogICAgICAgICJkaXN0IjogewogICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvdGlnaHRlbmNvL2NvbGxlY3QvemlwYmFsbC9mODBiZGJmN2U1MTQ2MTQ2N2MwMTAzODExY2E5ZGYyZWMwYTU2MWQ1IiwKICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJmODBiZGJmN2U1MTQ2MTQ2N2MwMTAzODExY2E5ZGYyZWMwYTU2MWQ1IiwKICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgfSwKICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgInBocCI6ICI+PTcuMS4zIiwKICAgICAgICAgICAgInN5bWZvbnkvdmFyLWR1bXBlciI6ICI+PTMuMS4xMCIKICAgICAgICB9LAogICAgICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAgICAgIm1vY2tlcnkvbW9ja2VyeSI6ICJ+MS4wIiwKICAgICAgICAgICAgIm5lc2JvdC9jYXJib24iOiAifjEuMjAiLAogICAgICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIn43LjAiCiAgICAgICAgfSwKICAgICAgICAidGltZSI6ICIyMDE4LTA3LTExVDEzOjMxOjA4KzAwOjAwIiwKICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAiaW5zdGFsbGF0aW9uLXNvdXJjZSI6ICJkaXN0IiwKICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICJmaWxlcyI6IFsKICAgICAgICAgICAgICAgICJzcmMvQ29sbGVjdC9TdXBwb3J0L2hlbHBlcnMucGhwIiwKICAgICAgICAgICAgICAgICJzcmMvQ29sbGVjdC9TdXBwb3J0L2FsaWFzLnBocCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgIlRpZ2h0ZW5jb1xcQ29sbGVjdFxcIjogInNyYy9Db2xsZWN0IgogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICJNSVQiCiAgICAgICAgXSwKICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm5hbWUiOiAiVGF5bG9yIE90d2VsbCIsCiAgICAgICAgICAgICAgICAiZW1haWwiOiAidGF5bG9yb3R3ZWxsQGdtYWlsLmNvbSIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgImRlc2NyaXB0aW9uIjogIkNvbGxlY3QgLSBJbGx1bWluYXRlIENvbGxlY3Rpb25zIGFzIGEgc2VwYXJhdGUgcGFja2FnZS4iLAogICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgImNvbGxlY3Rpb24iLAogICAgICAgICAgICAibGFyYXZlbCIKICAgICAgICBdCiAgICB9Cl0KAppDevTools/query/vendor/guzzlehttp/guzzle/CHANGELOG.mdIyBDaGFuZ2UgTG9nCgojIyA2LjMuMyAtIDIwMTgtMDQtMjIKCiogRml4OiBEZWZhdWx0IGhlYWRlcnMgd2hlbiBkZWNvZGVfY29udGVudCBpcyBzcGVjaWZpZWQKCgojIyA2LjMuMiAtIDIwMTgtMDMtMjYKCiogRml4OiBSZWxlYXNlIHByb2Nlc3MKCgojIyA2LjMuMSAtIDIwMTgtMDMtMjYKCiogQnVnIGZpeDogUGFyc2luZyAwIGVwb2NoIGV4cGlyeSB0aW1lcyBpbiBjb29raWVzIFsjMjAxNF0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8yMDE0KQoqIEltcHJvdmVtZW50OiBCZXR0ZXIgQ29ubmVjdEV4Y2VwdGlvbiBkZXRlY3Rpb24gWyMyMDEyXShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzIwMTIpCiogQnVnIGZpeDogTWFsZm9ybWVkIGRvbWFpbiB0aGF0IGNvbnRhaW5zIGEgIi8iIFsjMTk5OV0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xOTk5KQoqIEJ1ZyBmaXg6IFVuZGVmaW5lZCBvZmZzZXQgd2hlbiBhIGNvb2tpZSBoYXMgbm8gZmlyc3Qga2V5LXZhbHVlIHBhaXIgWyMxOTk4XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzE5OTgpCiogSW1wcm92ZW1lbnQ6IFN1cHBvcnQgUEhQVW5pdCA2IFsjMTk1M10oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xOTUzKQoqIEJ1ZyBmaXg6IFN1cHBvcnQgZW1wdHkgaGVhZGVycyBbIzE5MTVdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTkxNSkKKiBCdWcgZml4OiBJZ25vcmUgY2FzZSBkdXJpbmcgaGVhZGVyIG1vZGlmaWNhdGlvbnMgWyMxOTE2XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzE5MTYpCgorIE1pbm9yIGNvZGUgY2xlYW51cHMsIGRvY3VtZW50YXRpb24gZml4ZXMgYW5kIGNsYXJpZmljYXRpb25zLgoKCiMjIDYuMy4wIC0gMjAxNy0wNi0yMgoKKiBGZWF0dXJlOiBmb3JjZSBJUCByZXNvbHV0aW9uIChpcHY0IG9yIGlwdjYpIFsjMTYwOF0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xNjA4KSwgWyMxNjU5XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzE2NTkpCiogSW1wcm92ZW1lbnQ6IERvbid0IGluY2x1ZGUgc3VtbWFyeSBpbiBleGNlcHRpb24gbWVzc2FnZSB3aGVuIGJvZHkgaXMgZW1wdHkgWyMxNjIxXShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzE2MjEpCiogSW1wcm92ZW1lbnQ6IEhhbmRsZSBgb25faGVhZGVyc2Agb3B0aW9uIGluIE1vY2tIYW5kbGVyIFsjMTU4MF0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xNTgwKQoqIEltcHJvdmVtZW50OiBBZGRlZCBTVVNFIExpbnV4IENBIHBhdGggWyMxNjA5XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9pc3N1ZXMvMTYwOSkKKiBJbXByb3ZlbWVudDogVXNlIGNsYXNzIHJlZmVyZW5jZSBmb3IgZ2V0dGluZyB0aGUgbmFtZSBvZiB0aGUgY2xhc3MgaW5zdGVhZCBvZiB1c2luZyBoYXJkY29kZWQgc3RyaW5ncyBbIzE2NDFdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTY0MSkKKiBGZWF0dXJlOiBBZGRlZCBgcmVhZF90aW1lb3V0YCBvcHRpb24gWyMxNjExXShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzE2MTEpCiogQnVnIGZpeDogUEhQIDcueCBmaXhlcyBbIzE2ODVdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTY4NSksIFsjMTY4Nl0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xNjg2KSwgWyMxODExXShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzE4MTEpCiogRGVwcmVjYXRpb246IEJhZFJlc3BvbnNlRXhjZXB0aW9uIGluc3RhbnRpYXRpb24gd2l0aG91dCBhIHJlc3BvbnNlIFsjMTY0Ml0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xNjQyKQoqIEZlYXR1cmU6IEFkZGVkIE5UTE0gYXV0aCBbIzE1NjldKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTU2OSkKKiBGZWF0dXJlOiBUcmFjayByZWRpcmVjdCBIVFRQIHN0YXR1cyBjb2RlcyBbIzE3MTFdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTcxMSkKKiBJbXByb3ZlbWVudDogQ2hlY2sgaGFuZGxlciB0eXBlIGR1cmluZyBjb25zdHJ1Y3Rpb24gWyMxNzQ1XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzE3NDUpCiogSW1wcm92ZW1lbnQ6IEFsd2F5cyBpbmNsdWRlIHRoZSBDb250ZW50LUxlbmd0aCBpZiB0aGVyZSdzIGEgYm9keSBbIzE3MjFdKGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTcyMSkKKiBGZWF0dXJlOiBBZGRlZCBjb252ZW5pZW5jZSBtZXRob2QgdG8gYWNjZXNzIGEgY29va2llIGJ5IG5hbWUgWyMxMzE4XShodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzEzMTgpCiogQnVnIGZpeDogRmlsbCBgQ1VSTE9QVF9DQVBBVEhgIGFuZCBgQ1VSTE9QVF9DQUlORk9gIHByb3Blcmx5IFsjMTY4NF0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xNjg0KQoqIEltcHJvdmVtZW50OiAgCVVzZSBgXEd1enpsZUh0dHBcUHJvbWlzZVxyZWplY3Rpb25fZm9yYCBmdW5jdGlvbiBpbnN0ZWFkIG9mIG9iamVjdCBpbml0IFsjMTgyN10oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xODI3KQoKCisgTWlub3IgY29kZSBjbGVhbnVwcywgZG9jdW1lbnRhdGlvbiBmaXhlcyBhbmQgY2xhcmlmaWNhdGlvbnMuCgojIyA2LjIuMyAtIDIwMTctMDItMjgKCiogRml4IGRlcHJlY2F0aW9ucyB3aXRoIGd1enpsZS9wc3I3IHZlcnNpb24gMS40CgojIyA2LjIuMiAtIDIwMTYtMTAtMDgKCiogQWxsb3cgdG8gcGFzcyBudWxsYWJsZSBSZXNwb25zZSB0byBkZWxheSBjYWxsYWJsZQoqIE9ubHkgYWRkIHNjaGVtZSB3aGVuIGhvc3QgaXMgcHJlc2VudAoqIEZpeCBkcmFpbiBjYXNlIHdoZXJlIGNvbnRlbnQtbGVuZ3RoIGlzIHRoZSBsaXRlcmFsIHN0cmluZyB6ZXJvCiogT2JmdXNjYXRlIGluLVVSTCBjcmVkZW50aWFscyBpbiBleGNlcHRpb25zCgojIyA2LjIuMSAtIDIwMTYtMDctMTgKCiogQWRkcmVzcyBIVFRQX1BST1hZIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdHksIENWRS0yMDE2LTUzODU6CiAgaHR0cHM6Ly9odHRwb3h5Lm9yZy8KKiBGaXhpbmcgdGltZW91dCBidWcgd2l0aCBTdHJlYW1IYW5kbGVyOgogIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTQ4OAoqIE9ubHkgcmVhZCB1cCB0byBgQ29udGVudC1MZW5ndGhgIGluIFBIUCBTdHJlYW1IYW5kbGVyIHRvIGF2b2lkIHRpbWVvdXRzIHdoZW4KICBhIHNlcnZlciBkb2VzIG5vdCBob25vciBgQ29ubmVjdGlvbjogY2xvc2VgLgoqIElnbm9yZSBVUkkgZnJhZ21lbnQgd2hlbiBzZW5kaW5nIHJlcXVlc3RzLgoKIyMgNi4yLjAgLSAyMDE2LTAzLTIxCgoqIEZlYXR1cmU6IGFkZGVkIGBHdXp6bGVIdHRwXGpzb25fZW5jb2RlYCBhbmQgYEd1enpsZUh0dHBcanNvbl9kZWNvZGVgLgogIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTM4OQoqIEJ1ZyBmaXg6IEZpeCBzbGVlcCBjYWxjdWxhdGlvbiB3aGVuIHdhaXRpbmcgZm9yIGRlbGF5ZWQgcmVxdWVzdHMuCiAgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xMzI0CiogRmVhdHVyZTogTW9yZSBmbGV4aWJsZSBoaXN0b3J5IGNvbnRhaW5lcnMuCiAgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xMzczCiogQnVnIGZpeDogZGVmZXIgc2luayBzdHJlYW0gb3BlbmluZyBpbiBTdHJlYW1IYW5kbGVyLgogIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTM3NwoqIEJ1ZyBmaXg6IGRvIG5vdCBhdHRlbXB0IHRvIGVzY2FwZSBjb29raWUgdmFsdWVzLgogIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTQwNgoqIEZlYXR1cmU6IHJlcG9ydCBvcmlnaW5hbCBjb250ZW50IGVuY29kaW5nIGFuZCBsZW5ndGggb24gZGVjb2RlZCByZXNwb25zZXMuCiAgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xNDA5CiogQnVnIGZpeDogcmV3aW5kIHNlZWthYmxlIHJlcXVlc3QgYm9kaWVzIGJlZm9yZSBkaXNwYXRjaGluZyB0byBjVVJMLgogIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTQyMgoqIEJ1ZyBmaXg6IHByb3ZpZGUgYW4gZW1wdHkgc3RyaW5nIHRvIGBodHRwX2J1aWxkX3F1ZXJ5YCBmb3IgSEhWTSB3b3JrYXJvdW5kLgogIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTM2NwoKIyMgNi4xLjEgLSAyMDE1LTExLTIyCgoqIEJ1ZyBmaXg6IFByb3h5Ojp3cmFwU3luYygpIG5vdyBjb3JyZWN0bHkgcHJveGllcyB0byB0aGUgYXBwcm9wcmlhdGUgaGFuZGxlcgogIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL2NvbW1pdC85MTFiY2JjOGI0MzRhZGNlNjRlMjIzYTZkMWQxNGU5YThmNjNlNGU0CiogRmVhdHVyZTogSGFuZGxlclN0YWNrIGlzIG5vdyBtb3JlIGdlbmVyaWMuCiAgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvY29tbWl0L2YyMTAyOTQxMzMxY2RhNTQ0NzQ1ZWVkZDk3ZmM4ZmQ0NmUxZWUzM2UKKiBCdWcgZml4OiBzZXR0aW5nIHZlcmlmeSB0byBmYWxzZSBpbiB0aGUgU3RyZWFtSGFuZGxlciBub3cgZGlzYWJsZXMgcGVlcgogIHZlcmlmaWNhdGlvbi4gaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvaXNzdWVzLzEyNTYKKiBGZWF0dXJlOiBNaWRkbGV3YXJlIG5vdyB1c2VzIGFuIGV4Y2VwdGlvbiBmYWN0b3J5LCBpbmNsdWRpbmcgbW9yZSBlcnJvcgogIGNvbnRleHQuIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTI4MgoqIEZlYXR1cmU6IGJldHRlciBzdXBwb3J0IGZvciBkaXNhYmxlZCBmdW5jdGlvbnMuCiAgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xMjg3CiogQnVnIGZpeDogZml4ZWQgcmVncmVzc2lvbiB3aGVyZSBNb2NrSGFuZGxlciB3YXMgbm90IHVzaW5nIGBzaW5rYC4KICBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzEyOTIKCiMjIDYuMS4wIC0gMjAxNS0wOS0wOAoKKiBGZWF0dXJlOiBBZGRlZCB0aGUgYG9uX3N0YXRzYCByZXF1ZXN0IG9wdGlvbiB0byBwcm92aWRlIGFjY2VzcyB0byB0cmFuc2ZlcgogIHN0YXRpc3RpY3MgZm9yIHJlcXVlc3RzLiBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzEyMDIKKiBGZWF0dXJlOiBBZGRlZCB0aGUgYWJpbGl0eSB0byBwZXJzaXN0IHNlc3Npb24gY29va2llcyBpbiBDb29raWVKYXJzLgogIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTE5NQoqIEZlYXR1cmU6IFNvbWUgY29tcGF0aWJpbGl0eSB1cGRhdGVzIGZvciBHb29nbGUgQVBQIEVuZ2luZQogIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTIxNgoqIEZlYXR1cmU6IEFkZGVkIHN1cHBvcnQgZm9yIE5PX1BST1hZIHRvIHByZXZlbnQgdGhlIHVzZSBvZiBhIHByb3h5IGJhc2VkIG9uCiAgYSBzaW1wbGUgc2V0IG9mIHJ1bGVzLiBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzExOTcKKiBGZWF0dXJlOiBDb29raWVzIGNhbiBub3cgY29udGFpbiBzcXVhcmUgYnJhY2tldHMuCiAgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xMjM3CiogQnVnIGZpeDogTm93IGNvcnJlY3RseSBwYXJzaW5nIGA9YCBpbnNpZGUgb2YgcXVvdGVzIGluIENvb2tpZXMuCiAgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xMjMyCiogQnVnIGZpeDogQ3Vzb3RtIGNVUkwgb3B0aW9ucyBub3cgY29ycmVjdGx5IG92ZXJyaWRlIGN1cmwgb3B0aW9ucyBvZiB0aGUKICBzYW1lIG5hbWUuIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTIyMQoqIEJ1ZyBmaXg6IENvbnRlbnQtVHlwZSBoZWFkZXIgaXMgbm93IGFkZGVkIHdoZW4gdXNpbmcgYW4gZXhwbGljaXRseSBwcm92aWRlZAogIG11bHRpcGFydCBib2R5LiBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzEyMTgKKiBCdWcgZml4OiBOb3cgaWdub3JpbmcgU2V0LUNvb2tpZSBoZWFkZXJzIHRoYXQgaGF2ZSBubyBuYW1lLgoqIEJ1ZyBmaXg6IFJlYXNvbiBwaHJhc2UgaXMgbm8gbG9uZ2VyIGNhc3QgdG8gYW4gaW50IGluIHNvbWUgY2FzZXMgaW4gdGhlCiAgY1VSTCBoYW5kbGVyLiBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzExODcKKiBCdWcgZml4OiBSZW1vdmUgdGhlIEF1dGhvcml6YXRpb24gaGVhZGVyIHdoZW4gcmVkaXJlY3RpbmcgaWYgdGhlIEhvc3QKICBoZWFkZXIgY2hhbmdlcy4gaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC8xMjA3CiogQnVnIGZpeDogQ29va2llIHBhdGggbWF0Y2hpbmcgZml4ZXMKICBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9pc3N1ZXMvMTEyOQoqIEJ1ZyBmaXg6IEZpeGluZyB0aGUgY1VSTCBgYm9keV9hc19zdHJpbmdgIHNldHRpbmcKICBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzEyMDEKKiBCdWcgZml4OiBxdW90ZXMgYXJlIG5vIGxvbmdlciBzdHJpcHBlZCB3aGVuIHBhcnNpbmcgY29va2llcy4KICBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9pc3N1ZXMvMTE3MgoqIEJ1ZyBmaXg6IGBmb3JtX3BhcmFtc2AgYW5kIGBxdWVyeWAgbm93IGFsd2F5cyB1c2VzIHRoZSBgJmAgc2VwYXJhdG9yLgogIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTE2MwoqIEJ1ZyBmaXg6IEFkZGluZyBhIENvbnRlbnQtTGVuZ3RoIHRvIFBIUCBzdHJlYW0gd3JhcHBlciByZXF1ZXN0cyBpZiBub3Qgc2V0LgogIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMTE4OQoKIyMgNi4wLjIgLSAyMDE1LTA3LTA0CgoqIEZpeGVkIGEgbWVtb3J5IGxlYWsgaW4gdGhlIGN1cmwgaGFuZGxlcnMgaW4gd2hpY2ggcmVmZXJlbmNlcyB0byBjYWxsYmFja3MKICB3ZXJlIG5vdCBiZWluZyByZW1vdmVkIGJ5IGBjdXJsX3Jlc2V0YC4KKiBDb29raWVzIGFyZSBub3cgZXh0cmFjdGVkIHByb3Blcmx5IGJlZm9yZSByZWRpcmVjdHMuCiogQ29va2llcyBub3cgYWxsb3cgbW9yZSBjaGFyYWN0ZXIgcmFuZ2VzLgoqIERlY29kZWQgQ29udGVudC1FbmNvZGluZyByZXNwb25zZXMgYXJlIG5vdyBtb2RpZmllZCB0byBjb3JyZWN0bHkgcmVmbGVjdAogIHRoZWlyIHN0YXRlIGlmIHRoZSBlbmNvZGluZyB3YXMgYXV0b21hdGljYWxseSByZW1vdmVkIGJ5IGEgaGFuZGxlci4gVGhpcwogIG1lYW5zIHRoYXQgdGhlIGBDb250ZW50LUVuY29kaW5nYCBoZWFkZXIgbWF5IGJlIHJlbW92ZWQgYW4gdGhlCiAgYENvbnRlbnQtTGVuZ3RoYCBtb2RpZmllZCB0byByZWZsZWN0IHRoZSBtZXNzYWdlIHNpemUgYWZ0ZXIgcmVtb3ZpbmcgdGhlCiAgZW5jb2RpbmcuCiogQWRkZWQgYSBtb3JlIGV4cGxpY2l0IGVycm9yIG1lc3NhZ2Ugd2hlbiB0cnlpbmcgdG8gdXNlIGBmb3JtX3BhcmFtc2AgYW5kCiAgYG11bHRpcGFydGAgaW4gdGhlIHNhbWUgcmVxdWVzdC4KKiBTZXZlcmFsIGZpeGVzIGZvciBISFZNIHN1cHBvcnQuCiogRnVuY3Rpb25zIGFyZSBub3cgY29uZGl0aW9uYWxseSByZXF1aXJlZCB1c2luZyBhbiBhZGRpdGlvbmFsIGxldmVsIG9mCiAgaW5kaXJlY3Rpb24gdG8gaGVscCB3aXRoIGdsb2JhbCBDb21wb3NlciBpbnN0YWxsYXRpb25zLgoKIyMgNi4wLjEgLSAyMDE1LTA1LTI3CgoqIEZpeGVkIGEgYnVnIHdpdGggc2VyaWFsaXppbmcgdGhlIGBxdWVyeWAgcmVxdWVzdCBvcHRpb24gd2hlcmUgdGhlIGAmYAogIHNlcGFyYXRvciB3YXMgbWlzc2luZy4KKiBBZGRlZCBhIGJldHRlciBlcnJvciBtZXNzYWdlIGZvciB3aGVuIGBib2R5YCBpcyBwcm92aWRlZCBhcyBhbiBhcnJheS4gUGxlYXNlCiAgdXNlIGBmb3JtX3BhcmFtc2Agb3IgYG11bHRpcGFydGAgaW5zdGVhZC4KKiBWYXJpb3VzIGRvYyBmaXhlcy4KCiMjIDYuMC4wIC0gMjAxNS0wNS0yNgoKKiBTZWUgdGhlIFVQR1JBRElORy5tZCBkb2N1bWVudCBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKiBBZGRlZCBgbXVsdGlwYXJ0YCBhbmQgYGZvcm1fcGFyYW1zYCByZXF1ZXN0IG9wdGlvbnMuCiogQWRkZWQgYHN5bmNocm9ub3VzYCByZXF1ZXN0IG9wdGlvbi4KKiBBZGRlZCB0aGUgYG9uX2hlYWRlcnNgIHJlcXVlc3Qgb3B0aW9uLgoqIEZpeGVkIGBleHBlY3RgIGhhbmRsaW5nLgoqIE5vIGxvbmdlciBhZGRpbmcgZGVmYXVsdCBtaWRkbGV3YXJlcyBpbiB0aGUgY2xpZW50IGN0b3IuIFRoZXNlIG5lZWQgdG8gYmUKICBwcmVzZW50IG9uIHRoZSBwcm92aWRlZCBoYW5kbGVyIGluIG9yZGVyIHRvIHdvcmsuCiogUmVxdWVzdHMgYXJlIG5vIGxvbmdlciBpbml0aWF0ZWQgd2hlbiBzZW5kaW5nIGFzeW5jIHJlcXVlc3RzIHdpdGggdGhlCiAgQ3VybE11bHRpSGFuZGxlci4gVGhpcyBwcmV2ZW50cyB1bmV4cGVjdGVkIHJlY3Vyc2lvbiBmcm9tIHJlcXVlc3RzIGNvbXBsZXRpbmcKICB3aGlsZSB0aWNraW5nIHRoZSBjVVJMIGxvb3AuCiogUmVtb3ZlZCB0aGUgc2VtYW50aWNzIG9mIHNldHRpbmcgYGRlZmF1bHRgIHRvIGB0cnVlYC4gVGhpcyBpcyBubyBsb25nZXIKICByZXF1aXJlZCBub3cgdGhhdCB0aGUgY1VSTCBsb29wIGlzIG5vdCB0aWNrZWQgZm9yIGFzeW5jIHJlcXVlc3RzLgoqIEFkZGVkIHJlcXVlc3QgYW5kIHJlc3BvbnNlIGxvZ2dpbmcgbWlkZGxld2FyZS4KKiBObyBsb25nZXIgYWxsb3dpbmcgc2VsZiBzaWduZWQgY2VydGlmaWNhdGVzIHdoZW4gdXNpbmcgdGhlIFN0cmVhbUhhbmRsZXIuCiogRW5zdXJpbmcgdGhhdCBgc2lua2AgaXMgdmFsaWQgaWYgc2F2aW5nIHRvIGEgZmlsZS4KKiBSZXF1ZXN0IGV4Y2VwdGlvbnMgbm93IGluY2x1ZGUgYSAiaGFuZGxlciBjb250ZXh0IiB3aGljaCBwcm92aWRlcyBoYW5kbGVyCiAgc3BlY2lmaWMgY29udGV4dHVhbCBpbmZvcm1hdGlvbi4KKiBBZGRlZCBgR3V6emxlSHR0cFxSZXF1ZXN0T3B0aW9uc2AgdG8gYWxsb3cgcmVxdWVzdCBvcHRpb25zIHRvIGJlIGFwcGxpZWQKICB1c2luZyBjb25zdGFudHMuCiogYCRtYXhIYW5kbGVzYCBoYXMgYmVlbiByZW1vdmVkIGZyb20gQ3VybE11bHRpSGFuZGxlci4KKiBgTXVsdGlwYXJ0UG9zdEJvZHlgIGlzIG5vdyBwYXJ0IG9mIHRoZSBgZ3V6emxlaHR0cC9wc3I3YCBwYWNrYWdlLgoKIyMgNS4zLjAgLSAyMDE1LTA1LTE5CgoqIE1vY2sgbm93IHN1cHBvcnRzIGBzYXZlX3RvYAoqIE1hcmtlZCBgQWJzdHJhY3RSZXF1ZXN0RXZlbnQ6OmdldFRyYW5zYWN0aW9uKClgIGFzIHB1YmxpYy4KKiBGaXhlZCBhIGJ1ZyBpbiB3aGljaCBtdWx0aXBsZSBoZWFkZXJzIHVzaW5nIGRpZmZlcmVudCBjYXNpbmcgd291bGQgb3ZlcndyaXRlCiAgcHJldmlvdXMgaGVhZGVycyBpbiB0aGUgYXNzb2NpYXRpdmUgYXJyYXkuCiogQWRkZWQgYFV0aWxzOjpnZXREZWZhdWx0SGFuZGxlcigpYAoqIE1hcmtlZCBgR3V6emxlSHR0cFxDbGllbnQ6OmdldERlZmF1bHRVc2VyQWdlbnRgIGFzIGRlcHJlY2F0ZWQuCiogVVJMIHNjaGVtZSBpcyBub3cgYWx3YXlzIGxvd2VyY2FzZWQuCgojIyA2LjAuMC1iZXRhLjEKCiogUmVxdWlyZXMgUEhQID49IDUuNQoqIFVwZGF0ZWQgdG8gdXNlIFBTUi03CiAgKiBSZXF1aXJlcyBpbW11dGFibGUgbWVzc2FnZXMsIHdoaWNoIGJhc2ljYWxseSBtZWFucyBhbiBldmVudCBiYXNlZCBzeXN0ZW0KICAgIG93bmVkIGJ5IGEgcmVxdWVzdCBpbnN0YW5jZSBpcyBubyBsb25nZXIgcG9zc2libGUuCiAgKiBVdGlsaXppbmcgdGhlIFtHdXp6bGUgUFNSLTcgcGFja2FnZV0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9wc3I3KS4KICAqIFJlbW92ZWQgdGhlIGRlcGVuZGVuY3kgb24gYGd1enpsZWh0dHAvc3RyZWFtc2AuIFRoZXNlIHN0cmVhbSBhYnN0cmFjdGlvbnMKICAgIGFyZSBhdmFpbGFibGUgaW4gdGhlIGBndXp6bGVodHRwL3BzcjdgIHBhY2thZ2UgdW5kZXIgdGhlIGBHdXp6bGVIdHRwXFBzcjdgCiAgICBuYW1lc3BhY2UuCiogQWRkZWQgbWlkZGxld2FyZSBhbmQgaGFuZGxlciBzeXN0ZW0KICAqIFJlcGxhY2VkIHRoZSBHdXp6bGUgZXZlbnQgYW5kIHN1YnNjcmliZXIgc3lzdGVtIHdpdGggYSBtaWRkbGV3YXJlIHN5c3RlbS4KICAqIE5vIGxvbmdlciBkZXBlbmRzIG9uIFJpbmdQSFAsIGJ1dCByYXRoZXIgcGxhY2VzIHRoZSBIVFRQIGhhbmRsZXJzIGRpcmVjdGx5CiAgICBpbiBHdXp6bGUsIG9wZXJhdGluZyBvbiBQU1ItNyBtZXNzYWdlcy4KICAqIFJldHJ5IGxvZ2ljIGlzIG5vdyBlbmNhcHN1bGF0ZWQgaW4gYEd1enpsZUh0dHBcTWlkZGxld2FyZTo6cmV0cnlgLCB3aGljaAogICAgbWVhbnMgdGhlIGBndXp6bGVodHRwL3JldHJ5LXN1YnNjcmliZXJgIGlzIG5vdyBvYnNvbGV0ZS4KICAqIE1vY2tpbmcgcmVzcG9uc2VzIGlzIG5vdyBoYW5kbGVkIHVzaW5nIGBHdXp6bGVIdHRwXEhhbmRsZXJcTW9ja0hhbmRsZXJgLgoqIEFzeW5jaHJvbm91cyByZXNwb25zZXMKICAqIE5vIGxvbmdlciBzdXBwb3J0cyB0aGUgYGZ1dHVyZWAgcmVxdWVzdCBvcHRpb24gdG8gc2VuZCBhbiBhc3luYyByZXF1ZXN0LgogICAgSW5zdGVhZCwgdXNlIG9uZSBvZiB0aGUgYCpBc3luY2AgbWV0aG9kcyBvZiBhIGNsaWVudCAoZS5nLiwgYHJlcXVlc3RBc3luY2AsCiAgICBgZ2V0QXN5bmNgLCBldGMuKS4KICAqIFV0aWxpemluZyBgR3V6emxlSHR0cFxQcm9taXNlYCBpbnN0ZWFkIG9mIFJlYWN0J3MgcHJvbWlzZSBsaWJyYXJ5IHRvIGF2b2lkCiAgICByZWN1cnNpb24gcmVxdWlyZWQgYnkgY2hhaW5pbmcgYW5kIGZvcndhcmRpbmcgcmVhY3QgcHJvbWlzZXMuIFNlZQogICAgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9wcm9taXNlcwogICogQWRkZWQgYHJlcXVlc3RBc3luY2AgYW5kIGBzZW5kQXN5bmNgIHRvIHNlbmQgcmVxdWVzdCBhc3luY2hyb25vdXNseS4KICAqIEFkZGVkIG1hZ2ljIG1ldGhvZHMgZm9yIGBnZXRBc3luYygpYCwgYHBvc3RBc3luYygpYCwgZXRjLiB0byBzZW5kIHJlcXVlc3RzCiAgICBhc3luY2hyb25vdXNseS4KKiBSZXF1ZXN0IG9wdGlvbnMKICAqIFBPU1QgYW5kIGZvcm0gdXBkYXRlcwogICAgKiBBZGRlZCB0aGUgYGZvcm1fZmllbGRzYCBhbmQgYGZvcm1fZmlsZXNgIHJlcXVlc3Qgb3B0aW9ucy4KICAgICogUmVtb3ZlZCB0aGUgYEd1enpsZUh0dHBcUG9zdGAgbmFtZXNwYWNlLgogICAgKiBUaGUgYGJvZHlgIHJlcXVlc3Qgb3B0aW9uIG5vIGxvbmdlciBhY2NlcHRzIGFuIGFycmF5IGZvciBQT1NUIHJlcXVlc3RzLgogICogVGhlIGBleGNlcHRpb25zYCByZXF1ZXN0IG9wdGlvbiBoYXMgYmVlbiBkZXByZWNhdGVkIGluIGZhdm9yIG9mIHRoZQogICAgYGh0dHBfZXJyb3JzYCByZXF1ZXN0IG9wdGlvbnMuCiAgKiBUaGUgYHNhdmVfdG9gIHJlcXVlc3Qgb3B0aW9uIGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgYHNpbmtgIHJlcXVlc3QKICAgIG9wdGlvbi4KKiBDbGllbnRzIG5vIGxvbmdlciBhY2NlcHQgYW4gYXJyYXkgb2YgVVJJIHRlbXBsYXRlIHN0cmluZyBhbmQgdmFyaWFibGVzIGZvcgogIFVSSSB2YXJpYWJsZXMuIFlvdSB3aWxsIG5lZWQgdG8gZXhwYW5kIFVSSSB0ZW1wbGF0ZXMgYmVmb3JlIHBhc3NpbmcgdGhlbQogIGludG8gYSBjbGllbnQgY29uc3RydWN0b3Igb3IgcmVxdWVzdCBtZXRob2QuCiogQ2xpZW50IG1ldGhvZHMgYGdldCgpYCwgYHBvc3QoKWAsIGBwdXQoKWAsIGBwYXRjaCgpYCwgYG9wdGlvbnMoKWAsIGV0Yy4gYXJlCiAgbm93IG1hZ2ljIG1ldGhvZHMgdGhhdCB3aWxsIHNlbmQgc3luY2hyb25vdXMgcmVxdWVzdHMuCiogUmVwbGFjZWQgYFV0aWxzLnBocGAgd2l0aCBwbGFpbiBmdW5jdGlvbnMgaW4gYGZ1bmN0aW9ucy5waHBgLgoqIFJlbW92ZWQgYEd1enpsZUh0dHBcQ29sbGVjdGlvbmAuCiogUmVtb3ZlZCBgR3V6emxlSHR0cFxCYXRjaFJlc3VsdHNgLiBCYXRjaGVkIHBvb2wgcmVzdWx0cyBhcmUgbm93IHJldHVybmVkIGFzCiAgYW4gYXJyYXkuCiogUmVtb3ZlZCBgR3V6emxlSHR0cFxRdWVyeWAuIFF1ZXJ5IHN0cmluZyBoYW5kbGluZyBpcyBub3cgaGFuZGxlZCB1c2luZyBhbgogIGFzc29jaWF0aXZlIGFycmF5IHBhc3NlZCBpbnRvIHRoZSBgcXVlcnlgIHJlcXVlc3Qgb3B0aW9uLiBUaGUgcXVlcnkgc3RyaW5nCiAgaXMgc2VyaWFsaXplZCB1c2luZyBQSFAncyBgaHR0cF9idWlsZF9xdWVyeWAuIElmIHlvdSBuZWVkIG1vcmUgY29udHJvbCwgeW91CiAgY2FuIHBhc3MgdGhlIHF1ZXJ5IHN0cmluZyBpbiBhcyBhIHN0cmluZy4KKiBgR3V6emxlSHR0cFxRdWVyeVBhcnNlcmAgaGFzIGJlZW4gcmVwbGFjZWQgd2l0aCB0aGUKICBgR3V6emxlSHR0cFxQc3I3XHBhcnNlX3F1ZXJ5YC4KCiMjIDUuMi4wIC0gMjAxNS0wMS0yNwoKKiBBZGRlZCBgQXBwbGllc0hlYWRlcnNJbnRlcmZhY2VgIHRvIG1ha2UgYXBwbHlpbmcgaGVhZGVycyB0byBhIHJlcXVlc3QgYmFzZWQKICBvbiB0aGUgYm9keSBtb3JlIGdlbmVyaWMgYW5kIG5vdCBzcGVjaWZpYyB0byBgUG9zdEJvZHlJbnRlcmZhY2VgLgoqIFJlZHVjZWQgdGhlIG51bWJlciBvZiBzdGFjayBmcmFtZXMgbmVlZGVkIHRvIHNlbmQgcmVxdWVzdHMuCiogTmVzdGVkIGZ1dHVyZXMgYXJlIG5vdyByZXNvbHZlZCBpbiB0aGUgY2xpZW50IHJhdGhlciB0aGFuIHRoZSBSZXF1ZXN0RnNtCiogRmluaXNoaW5nIHN0YXRlIHRyYW5zaXRpb25zIGlzIG5vdyBoYW5kbGVkIGluIHRoZSBSZXF1ZXN0RnNtIHJhdGhlciB0aGFuIHRoZQogIFJpbmdCcmlkZ2UuCiogQWRkZWQgYSBndWFyZCBpbiB0aGUgUG9vbCBjbGFzcyB0byBub3QgdXNlIHJlY3Vyc2lvbiBmb3IgcmVxdWVzdCByZXRyaWVzLgoKIyMgNS4xLjAgLSAyMDE0LTEyLTE5CgoqIFBvb2wgY2xhc3Mgbm8gbG9uZ2VyIHVzZXMgcmVjdXJzaW9uIHdoZW4gYSByZXF1ZXN0IGlzIGludGVyY2VwdGVkLgoqIFRoZSBzaXplIG9mIGEgUG9vbCBjYW4gbm93IGJlIGR5bmFtaWNhbGx5IGFkanVzdGVkIHVzaW5nIGEgY2FsbGJhY2suCiAgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvOTQzLgoqIFNldHRpbmcgYSByZXF1ZXN0IG9wdGlvbiB0byBgbnVsbGAgd2hlbiBjcmVhdGluZyBhIHJlcXVlc3Qgd2l0aCBhIGNsaWVudCB3aWxsCiAgZW5zdXJlIHRoYXQgdGhlIG9wdGlvbiBpcyBub3Qgc2V0LiBUaGlzIGFsbG93cyB5b3UgdG8gb3ZlcndyaXRlIGRlZmF1bHQKICByZXF1ZXN0IG9wdGlvbnMgb24gYSBwZXItcmVxdWVzdCBiYXNpcy4KICBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC85MzcuCiogQWRkZWQgdGhlIGFiaWxpdHkgdG8gbGltaXQgd2hpY2ggcHJvdG9jb2xzIGFyZSBhbGxvd2VkIGZvciByZWRpcmVjdHMgYnkKICBzcGVjaWZ5aW5nIGEgYHByb3RvY29sc2AgYXJyYXkgaW4gdGhlIGBhbGxvd19yZWRpcmVjdHNgIHJlcXVlc3Qgb3B0aW9uLgoqIE5lc3RlZCBmdXR1cmVzIGR1ZSB0byByZXRyaWVzIGFyZSBub3cgcmVzb2x2ZWQgd2hlbiB3YWl0aW5nIGZvciBzeW5jaHJvbm91cwogIHJlc3BvbnNlcy4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvOTQ3LgoqIGAiMCJgIGlzIG5vdyBhbiBhbGxvd2VkIFVSSSBwYXRoLiBTZWUKICBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzkzNS4KKiBgUXVlcnlgIG5vIGxvbmdlciB0eXBlaGludHMgb24gdGhlIGAkcXVlcnlgIGFyZ3VtZW50IGluIHRoZSBjb25zdHJ1Y3RvciwKICBhbGxvd2luZyBmb3Igc3RyaW5ncyBhbmQgYXJyYXlzLgoqIEV4Y2VwdGlvbnMgdGhyb3duIGluIHRoZSBgZW5kYCBldmVudCBhcmUgbm93IGNvcnJlY3RseSB3cmFwcGVkIHdpdGggR3V6emxlCiAgc3BlY2lmaWMgZXhjZXB0aW9ucyBpZiBuZWNlc3NhcnkuCgojIyA1LjAuMyAtIDIwMTQtMTEtMDMKClRoaXMgY2hhbmdlIHVwZGF0ZXMgcXVlcnkgc3RyaW5ncyBzbyB0aGF0IHRoZXkgYXJlIHRyZWF0ZWQgYXMgdW4tZW5jb2RlZCB2YWx1ZXMKYnkgZGVmYXVsdCB3aGVyZSB0aGUgdmFsdWUgcmVwcmVzZW50cyBhbiB1bi1lbmNvZGVkIHZhbHVlIHRvIHNlbmQgb3ZlciB0aGUKd2lyZS4gQSBRdWVyeSBvYmplY3QgdGhlbiBlbmNvZGVzIHRoZSB2YWx1ZSBiZWZvcmUgc2VuZGluZyBvdmVyIHRoZSB3aXJlLiBUaGlzCm1lYW5zIHRoYXQgZXZlbiB2YWx1ZSBxdWVyeSBzdHJpbmcgdmFsdWVzIChlLmcuLCAiOiIpIGFyZSB1cmwgZW5jb2RlZC4gVGhpcwptYWtlcyB0aGUgUXVlcnkgY2xhc3MgbWF0Y2ggUEhQJ3MgaHR0cF9idWlsZF9xdWVyeSBmdW5jdGlvbi4gSG93ZXZlciwgaWYgeW91CndhbnQgdG8gc2VuZCByZXF1ZXN0cyBvdmVyIHRoZSB3aXJlIHVzaW5nIHZhbGlkIHF1ZXJ5IHN0cmluZyBjaGFyYWN0ZXJzIHRoYXQgZG8Kbm90IG5lZWQgdG8gYmUgZW5jb2RlZCwgdGhlbiB5b3UgY2FuIHByb3ZpZGUgYSBzdHJpbmcgdG8gVXJsOjpzZXRRdWVyeSgpIGFuZApwYXNzIHRydWUgYXMgdGhlIHNlY29uZCBhcmd1bWVudCB0byBzcGVjaWZ5IHRoYXQgdGhlIHF1ZXJ5IHN0cmluZyBpcyBhIHJhdwpzdHJpbmcgdGhhdCBzaG91bGQgbm90IGJlIHBhcnNlZCBvciBlbmNvZGVkICh1bmxlc3MgYSBjYWxsIHRvIGdldFF1ZXJ5KCkgaXMKc3Vic2VxdWVudGx5IG1hZGUsIGZvcmNpbmcgdGhlIHF1ZXJ5LXN0cmluZyB0byBiZSBjb252ZXJ0ZWQgaW50byBhIFF1ZXJ5Cm9iamVjdCkuCgojIyA1LjAuMiAtIDIwMTQtMTAtMzAKCiogQWRkZWQgYSB0cmFpbGluZyBgXHJcbmAgdG8gbXVsdGlwYXJ0L2Zvcm0tZGF0YSBwYXlsb2Fkcy4gU2VlCiAgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcHVsbC84NzEKKiBBZGRlZCBhIGBHdXp6bGVIdHRwXFBvb2w6OnNlbmQoKWAgY29udmVuaWVuY2UgbWV0aG9kIHRvIG1hdGNoIHRoZSBkb2NzLgoqIFN0YXR1cyBjb2RlcyBhcmUgbm93IHJldHVybmVkIGFzIGludGVnZXJzLiBTZWUKICBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9pc3N1ZXMvODgxCiogTm8gbG9uZ2VyIG92ZXJ3cml0aW5nIGFuIGV4aXN0aW5nIGBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRgIGhlYWRlcgogIHdoZW4gc2VuZGluZyBQT1NUIHJlcXVlc3RzLCBhbGxvd2luZyBmb3IgY3VzdG9taXplZCBoZWFkZXJzLiBTZWUKICBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9pc3N1ZXMvODc3CiogSW1wcm92ZWQgcGF0aCBVUkwgc2VyaWFsaXphdGlvbi4KCiAgKiBObyBsb25nZXIgZG91YmxlIHBlcmNlbnQtZW5jb2RpbmcgY2hhcmFjdGVycyBpbiB0aGUgcGF0aCBvciBxdWVyeSBzdHJpbmcgaWYKICAgIHRoZXkgYXJlIGFscmVhZHkgZW5jb2RlZC4KICAqIE5vdyBwcm9wZXJseSBlbmNvZGluZyB0aGUgc3VwcGxpZWQgcGF0aCB0byBhIFVSTCBvYmplY3QsIGluc3RlYWQgb2Ygb25seQogICAgZW5jb2RpbmcgJyAnIGFuZCAnPycuCiAgKiBOb3RlOiBUaGlzIGhhcyBiZWVuIGNoYW5nZWQgaW4gNS4wLjMgdG8gbm93IGVuY29kZSBxdWVyeSBzdHJpbmcgdmFsdWVzIGJ5CiAgICBkZWZhdWx0IHVubGVzcyB0aGUgYHJhd1N0cmluZ2AgYXJndW1lbnQgaXMgcHJvdmlkZWQgd2hlbiBzZXR0aW5nIHRoZSBxdWVyeQogICAgc3RyaW5nIG9uIGEgVVJMOiBOb3cgYWxsb3dpbmcgbWFueSBtb3JlIGNoYXJhY3RlcnMgdG8gYmUgcHJlc2VudCBpbiB0aGUKICAgIHF1ZXJ5IHN0cmluZyB3aXRob3V0IGJlaW5nIHBlcmNlbnQgZW5jb2RlZC4gU2VlIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjYXBwZW5kaXgtQQoKIyMgNS4wLjEgLSAyMDE0LTEwLTE2CgpCdWdmaXggcmVsZWFzZS4KCiogRml4ZWQgYW4gaXNzdWUgd2hlcmUgY29ubmVjdGlvbiBlcnJvcnMgc3RpbGwgcmV0dXJuZWQgcmVzcG9uc2Ugb2JqZWN0IGluCiAgZXJyb3IgYW5kIGVuZCBldmVudHMgZXZlbnQgdGhvdWdoIHRoZSByZXNwb25zZSBpcyB1bnVzYWJsZS4gVGhpcyBoYXMgYmVlbgogIGNvcnJlY3RlZCBzbyB0aGF0IGEgcmVzcG9uc2UgaXMgbm90IHJldHVybmVkIGluIHRoZSBgZ2V0UmVzcG9uc2VgIG1ldGhvZCBvZgogIHRoZXNlIGV2ZW50cyBpZiB0aGUgcmVzcG9uc2UgZGlkIG5vdCBjb21wbGV0ZS4gaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvaXNzdWVzLzg2NwoqIEZpeGVkIGFuIGlzc3VlIHdoZXJlIHRyYW5zZmVyIHN0YXRpc3RpY3Mgd2VyZSBub3QgYmVpbmcgcG9wdWxhdGVkIGluIHRoZQogIFJpbmdCcmlkZ2UuIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL2lzc3Vlcy84NjYKCiMjIDUuMC4wIC0gMjAxNC0xMC0xMgoKQWRkaW5nIHN1cHBvcnQgZm9yIG5vbi1ibG9ja2luZyByZXNwb25zZXMgYW5kIHNvbWUgbWlub3IgQVBJIGNsZWFudXAuCgojIyMgTmV3IEZlYXR1cmVzCgoqIEFkZGVkIHN1cHBvcnQgZm9yIG5vbi1ibG9ja2luZyByZXNwb25zZXMgYmFzZWQgb24gYGd1enpsZWh0dHAvZ3V6emxlLXJpbmdgLgoqIEFkZGVkIGEgcHVibGljIEFQSSBmb3IgY3JlYXRpbmcgYSBkZWZhdWx0IEhUVFAgYWRhcHRlci4KKiBVcGRhdGVkIHRoZSByZWRpcmVjdCBwbHVnaW4gdG8gYmUgbm9uLWJsb2NraW5nIHNvIHRoYXQgcmVkaXJlY3RzIGFyZSBzZW50CiAgY29uY3VycmVudGx5LiBPdGhlciBwbHVnaW5zIGxpa2UgdGhpcyBjYW4gbm93IGJlIHVwZGF0ZWQgdG8gYmUgbm9uLWJsb2NraW5nLgoqIEFkZGVkIGEgInByb2dyZXNzIiBldmVudCBzbyB0aGF0IHlvdSBjYW4gZ2V0IHVwbG9hZCBhbmQgZG93bmxvYWQgcHJvZ3Jlc3MKICBldmVudHMuCiogQWRkZWQgYEd1enpsZUh0dHBcUG9vbGAgd2hpY2ggaW1wbGVtZW50cyBGdXR1cmVJbnRlcmZhY2UgYW5kIHRyYW5zZmVycwogIHJlcXVlc3RzIGNvbmN1cnJlbnRseSB1c2luZyBhIGNhcHBlZCBwb29sIHNpemUgYXMgZWZmaWNpZW50bHkgYXMgcG9zc2libGUuCiogQWRkZWQgYGhhc0xpc3RlbmVycygpYCB0byBFbWl0dGVySW50ZXJmYWNlLgoqIFJlbW92ZWQgYEd1enpsZUh0dHBcQ2xpZW50SW50ZXJmYWNlOjpzZW5kQWxsYCBhbmQgbWFya2VkCiAgYEd1enpsZUh0dHBcQ2xpZW50OjpzZW5kQWxsYCBhcyBkZXByZWNhdGVkIChpdCdzIHN0aWxsIHRoZXJlLCBqdXN0IG5vdCB0aGUKICByZWNvbW1lbmRlZCB3YXkpLgoKIyMjIEJyZWFraW5nIGNoYW5nZXMKClRoZSBicmVha2luZyBjaGFuZ2VzIGluIHRoaXMgcmVsZWFzZSBhcmUgcmVsYXRpdmVseSBtaW5vci4gVGhlIGJpZ2dlc3QgdGhpbmcgdG8KbG9vayBvdXQgZm9yIGlzIHRoYXQgcmVxdWVzdCBhbmQgcmVzcG9uc2Ugb2JqZWN0cyBubyBsb25nZXIgaW1wbGVtZW50IGZsdWVudAppbnRlcmZhY2VzLgoKKiBSZW1vdmVkIHRoZSBmbHVlbnQgaW50ZXJmYWNlcyAoaS5lLiwgYHJldHVybiAkdGhpc2ApIGZyb20gcmVxdWVzdHMsCiAgcmVzcG9uc2VzLCBgR3V6emxlSHR0cFxDb2xsZWN0aW9uYCwgYEd1enpsZUh0dHBcVXJsYCwKICBgR3V6emxlSHR0cFxRdWVyeWAsIGBHdXp6bGVIdHRwXFBvc3RcUG9zdEJvZHlgLCBhbmQKICBgR3V6emxlSHR0cFxDb29raWVcU2V0Q29va2llYC4gVGhpcyBibG9nIHBvc3QgcHJvdmlkZXMgYSBnb29kIG91dGxpbmUgb2YKICB3aHkgSSBkaWQgdGhpczogaHR0cDovL29jcmFtaXVzLmdpdGh1Yi5pby9ibG9nL2ZsdWVudC1pbnRlcmZhY2VzLWFyZS1ldmlsLy4KICBUaGlzIGFsc28gbWFrZXMgdGhlIEd1enpsZSBtZXNzYWdlIGludGVyZmFjZXMgY29tcGF0aWJsZSB3aXRoIHRoZSBjdXJyZW50CiAgUFNSLTcgbWVzc2FnZSBwcm9wb3NhbC4KKiBSZW1vdmVkICJmdW5jdGlvbnMucGhwIiwgc28gdGhhdCBHdXp6bGUgaXMgdHJ1bHkgUFNSLTQgY29tcGxpYW50LiBFeGNlcHQKICBmb3IgdGhlIEhUVFAgcmVxdWVzdCBmdW5jdGlvbnMgZnJvbSBmdW5jdGlvbi5waHAsIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbm93CiAgaW1wbGVtZW50ZWQgaW4gYEd1enpsZUh0dHBcVXRpbHNgIHVzaW5nIGNhbWVsQ2FzZS4gYEd1enpsZUh0dHBcanNvbl9kZWNvZGVgCiAgbW92ZWQgdG8gYEd1enpsZUh0dHBcVXRpbHM6Ompzb25EZWNvZGVgLiBgR3V6emxlSHR0cFxnZXRfcGF0aGAgbW92ZWQgdG8KICBgR3V6emxlSHR0cFxVdGlsczo6Z2V0UGF0aGAuIGBHdXp6bGVIdHRwXHNldF9wYXRoYCBtb3ZlZCB0bwogIGBHdXp6bGVIdHRwXFV0aWxzOjpzZXRQYXRoYC4gYEd1enpsZUh0dHBcYmF0Y2hgIHNob3VsZCBub3cgYmUKICBgR3V6emxlSHR0cFxQb29sOjpiYXRjaGAsIHdoaWNoIHJldHVybnMgYW4gYG9iamVjdFN0b3JhZ2VgLiBVc2luZyBmdW5jdGlvbnMucGhwCiAgY2F1c2VkIHByb2JsZW1zIGZvciBtYW55IHVzZXJzOiB0aGV5IGFyZW4ndCBQU1ItNCBjb21wbGlhbnQsIHJlcXVpcmUgYW4KICBleHBsaWNpdCBpbmNsdWRlLCBhbmQgbmVlZGVkIGFuIGlmLWd1YXJkIHRvIGVuc3VyZSB0aGF0IHRoZSBmdW5jdGlvbnMgYXJlIG5vdAogIGRlY2xhcmVkIG11bHRpcGxlIHRpbWVzLgoqIFJld3JvdGUgYWRhcHRlciBsYXllci4KICAgICogUmVtb3ZpbmcgYWxsIGNsYXNzZXMgZnJvbSBgR3V6emxlSHR0cFxBZGFwdGVyYCwgdGhlc2UgYXJlIG5vdwogICAgICBpbXBsZW1lbnRlZCBhcyBjYWxsYWJsZXMgdGhhdCBhcmUgc3RvcmVkIGluIGBHdXp6bGVIdHRwXFJpbmdcQ2xpZW50YC4KICAgICogUmVtb3ZlZCB0aGUgY29uY2VwdCBvZiAicGFyYWxsZWwgYWRhcHRlcnMiLiBTZW5kaW5nIHJlcXVlc3RzIHNlcmlhbGx5IG9yCiAgICAgIGNvbmN1cnJlbnRseSBpcyBub3cgaGFuZGxlZCB1c2luZyBhIHNpbmdsZSBhZGFwdGVyLgogICAgKiBNb3ZlZCBgR3V6emxlSHR0cFxBZGFwdGVyXFRyYW5zYWN0aW9uYCB0byBgR3V6emxlSHR0cFxUcmFuc2FjdGlvbmAuIFRoZQogICAgICBUcmFuc2FjdGlvbiBvYmplY3Qgbm93IGV4cG9zZXMgdGhlIHJlcXVlc3QsIHJlc3BvbnNlLCBhbmQgY2xpZW50IGFzIHB1YmxpYwogICAgICBwcm9wZXJ0aWVzLiBUaGUgZ2V0dGVycyBhbmQgc2V0dGVycyBoYXZlIGJlZW4gcmVtb3ZlZC4KKiBSZW1vdmVkIHRoZSAiaGVhZGVycyIgZXZlbnQuIFRoaXMgZXZlbnQgd2FzIG9ubHkgdXNlZnVsIGZvciBjaGFuZ2luZyB0aGUKICBib2R5IGEgcmVzcG9uc2Ugb25jZSB0aGUgaGVhZGVycyBvZiB0aGUgcmVzcG9uc2Ugd2VyZSBrbm93bi4gWW91IGNhbiBpbXBsZW1lbnQKICBhIHNpbWlsYXIgYmVoYXZpb3IgaW4gYSBudW1iZXIgb2Ygd2F5cy4gT25lIGV4YW1wbGUgbWlnaHQgYmUgdG8gdXNlIGEKICBGblN0cmVhbSB0aGF0IGhhcyBhY2Nlc3MgdG8gdGhlIHRyYW5zYWN0aW9uIGJlaW5nIHNlbnQuIEZvciBleGFtcGxlLCB3aGVuIHRoZQogIGZpcnN0IGJ5dGUgaXMgd3JpdHRlbiwgeW91IGNvdWxkIGNoZWNrIGlmIHRoZSByZXNwb25zZSBoZWFkZXJzIG1hdGNoIHlvdXIKICBleHBlY3RhdGlvbnMsIGFuZCBpZiBzbywgY2hhbmdlIHRoZSBhY3R1YWwgc3RyZWFtIGJvZHkgdGhhdCBpcyBiZWluZwogIHdyaXR0ZW4gdG8uCiogUmVtb3ZlZCB0aGUgYGFzQXJyYXlgIHBhcmFtZXRlciBmcm9tCiAgYEd1enpsZUh0dHBcTWVzc2FnZVxNZXNzYWdlSW50ZXJmYWNlOjpnZXRIZWFkZXJgLiBJZiB5b3Ugd2FudCB0byBnZXQgYSBoZWFkZXIKICB2YWx1ZSBhcyBhbiBhcnJheSwgdGhlbiB1c2UgdGhlIG5ld2x5IGFkZGVkIGBnZXRIZWFkZXJBc0FycmF5KClgIG1ldGhvZCBvZgogIGBNZXNzYWdlSW50ZXJmYWNlYC4gVGhpcyBjaGFuZ2UgbWFrZXMgdGhlIEd1enpsZSBpbnRlcmZhY2VzIGNvbXBhdGlibGUgd2l0aAogIHRoZSBQU1ItNyBpbnRlcmZhY2VzLgoqIGBHdXp6bGVIdHRwXE1lc3NhZ2VcTWVzc2FnZUZhY3RvcnlgIG5vIGxvbmdlciBhbGxvd3Mgc3ViY2xhc3NlcyB0byBhZGQKICBjdXN0b20gcmVxdWVzdCBvcHRpb25zIHVzaW5nIGRvdWJsZS1kaXNwYXRjaCAodGhpcyB3YXMgYW4gaW1wbGVtZW50YXRpb24KICBkZXRhaWwpLiBJbnN0ZWFkLCB5b3Ugc2hvdWxkIG5vdyBwcm92aWRlIGFuIGFzc29jaWF0aXZlIGFycmF5IHRvIHRoZQogIGNvbnN0cnVjdG9yIHdoaWNoIGlzIGEgbWFwcGluZyBvZiB0aGUgcmVxdWVzdCBvcHRpb24gbmFtZSBtYXBwaW5nIHRvIGEKICBmdW5jdGlvbiB0aGF0IGFwcGxpZXMgdGhlIG9wdGlvbiB2YWx1ZSB0byBhIHJlcXVlc3QuCiogUmVtb3ZlZCB0aGUgY29uY2VwdCBvZiAidGhyb3dJbW1lZGlhdGVseSIgZnJvbSBleGNlcHRpb25zIGFuZCBlcnJvciBldmVudHMuCiAgVGhpcyBjb250cm9sIG1lY2hhbmlzbSB3YXMgdXNlZCB0byBzdG9wIGEgdHJhbnNmZXIgb2YgY29uY3VycmVudCByZXF1ZXN0cwogIGZyb20gY29tcGxldGluZy4gVGhpcyBjYW4gbm93IGJlIGhhbmRsZWQgYnkgdGhyb3dpbmcgdGhlIGV4Y2VwdGlvbiBvciBieQogIGNhbmNlbGxpbmcgYSBwb29sIG9mIHJlcXVlc3RzIG9yIGVhY2ggb3V0c3RhbmRpbmcgZnV0dXJlIHJlcXVlc3QgaW5kaXZpZHVhbGx5LgoqIFVwZGF0ZWQgdG8gIkd1enpsZUh0dHBcU3RyZWFtcyIgMy4wLgogICAgKiBgR3V6emxlSHR0cFxTdHJlYW1cU3RyZWFtSW50ZXJmYWNlOjpnZXRDb250ZW50cygpYCBubyBsb25nZXIgYWNjZXB0cyBhCiAgICAgIGBtYXhMZW5gIHBhcmFtZXRlci4gVGhpcyB1cGRhdGUgbWFrZXMgdGhlIEd1enpsZSBzdHJlYW1zIHByb2plY3QKICAgICAgY29tcGF0aWJsZSB3aXRoIHRoZSBjdXJyZW50IFBTUi03IHByb3Bvc2FsLgogICAgKiBgR3V6emxlSHR0cFxTdHJlYW1cU3RyZWFtOjpfX2NvbnN0cnVjdGAsCiAgICAgIGBHdXp6bGVIdHRwXFN0cmVhbVxTdHJlYW06OmZhY3RvcnlgLCBhbmQKICAgICAgYEd1enpsZUh0dHBcU3RyZWFtXFV0aWxzOjpjcmVhdGVgIG5vIGxvbmdlciBhY2NlcHQgYSBzaXplIGluIHRoZSBzZWNvbmQKICAgICAgYXJndW1lbnQuIFRoZXkgbm93IGFjY2VwdCBhbiBhc3NvY2lhdGl2ZSBhcnJheSBvZiBvcHRpb25zLCBpbmNsdWRpbmcgdGhlCiAgICAgICJzaXplIiBrZXkgYW5kICJtZXRhZGF0YSIga2V5IHdoaWNoIGNhbiBiZSB1c2VkIHRvIHByb3ZpZGUgY3VzdG9tIG1ldGFkYXRhLgoKIyMgNC4yLjIgLSAyMDE0LTA5LTA4CgoqIEZpeGVkIGEgbWVtb3J5IGxlYWsgaW4gdGhlIEN1cmxBZGFwdGVyIHdoZW4gcmV1c2luZyBjVVJMIGhhbmRsZXMuCiogTm8gbG9uZ2VyIHVzaW5nIGByZXF1ZXN0X2Z1bGx1cmlgIGluIHN0cmVhbSBhZGFwdGVyIHByb3hpZXMuCiogUmVsYXRpdmUgcmVkaXJlY3RzIGFyZSBub3cgYmFzZWQgb24gdGhlIGxhc3QgcmVzcG9uc2UsIG5vdCB0aGUgZmlyc3QgcmVzcG9uc2UuCgojIyA0LjIuMSAtIDIwMTQtMDgtMTkKCiogRW5zdXJpbmcgdGhhdCB0aGUgU3RyZWFtQWRhcHRlciBkb2VzIG5vdCBhbHdheXMgYWRkIGEgQ29udGVudC1UeXBlIGhlYWRlcgoqIEFkZGluZyBhdXRvbWF0ZWQgZ2l0aHViIHJlbGVhc2VzIHdpdGggYSBwaGFyIGFuZCB6aXAKCiMjIDQuMi4wIC0gMjAxNC0wOC0xNwoKKiBOb3cgbWVyZ2luZyBpbiBkZWZhdWx0IG9wdGlvbnMgdXNpbmcgYSBjYXNlLWluc2Vuc2l0aXZlIGNvbXBhcmlzb24uCiAgQ2xvc2VzIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL2lzc3Vlcy83NjcKKiBBZGRlZCB0aGUgYWJpbGl0eSB0byBhdXRvbWF0aWNhbGx5IGRlY29kZSBgQ29udGVudC1FbmNvZGluZ2AgcmVzcG9uc2UgYm9kaWVzCiAgdXNpbmcgdGhlIGBkZWNvZGVfY29udGVudGAgcmVxdWVzdCBvcHRpb24uIFRoaXMgaXMgc2V0IHRvIGB0cnVlYCBieSBkZWZhdWx0CiAgdG8gZGVjb2RlIHRoZSByZXNwb25zZSBib2R5IGlmIGl0IGNvbWVzIG92ZXIgdGhlIHdpcmUgd2l0aCBhCiAgYENvbnRlbnQtRW5jb2RpbmdgLiBTZXQgdGhpcyB2YWx1ZSB0byBgZmFsc2VgIHRvIGRpc2FibGUgZGVjb2RpbmcgdGhlCiAgcmVzcG9uc2UgY29udGVudCwgYW5kIHBhc3MgYSBzdHJpbmcgdG8gcHJvdmlkZSBhIHJlcXVlc3QgYEFjY2VwdC1FbmNvZGluZ2AKICBoZWFkZXIgYW5kIHR1cm4gb24gYXV0b21hdGljIHJlc3BvbnNlIGRlY29kaW5nLiBUaGlzIGZlYXR1cmUgbm93IGFsbG93cyB5b3UKICB0byBwYXNzIGFuIGBBY2NlcHQtRW5jb2RpbmdgIGhlYWRlciBpbiB0aGUgaGVhZGVycyBvZiBhIHJlcXVlc3QgYnV0IHN0aWxsCiAgZGlzYWJsZSBhdXRvbWF0aWMgcmVzcG9uc2UgZGVjb2RpbmcuCiAgQ2xvc2VzIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL2lzc3Vlcy83NjQKKiBBZGRlZCB0aGUgYWJpbGl0eSB0byB0aHJvdyBhbiBleGNlcHRpb24gaW1tZWRpYXRlbHkgd2hlbiB0cmFuc2ZlcnJpbmcKICByZXF1ZXN0cyBpbiBwYXJhbGxlbC4gQ2xvc2VzIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL2lzc3Vlcy83NjAKKiBVcGRhdGluZyBndXp6bGVodHRwL3N0cmVhbXMgZGVwZW5kZW5jeSB0byB+Mi4xCiogTm8gbG9uZ2VyIHV0aWxpemluZyB0aGUgbm93IGRlcHJlY2F0ZWQgbmFtZXNwYWNlZCBtZXRob2RzIGZyb20gdGhlIHN0cmVhbQogIHBhY2thZ2UuCgojIyA0LjEuOCAtIDIwMTQtMDgtMTQKCiogRml4ZWQgYW4gaXNzdWUgaW4gdGhlIEN1cmxGYWN0b3J5IHRoYXQgY2F1c2VkIHNldHRpbmcgdGhlIGBzdHJlYW09ZmFsc2VgCiAgcmVxdWVzdCBvcHRpb24gdG8gdGhyb3cgYW4gZXhjZXB0aW9uLgogIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvaXNzdWVzLzc2OQoqIFRyYW5zYWN0aW9uSXRlcmF0b3Igbm93IGNhbGxzIHJld2luZCBvbiB0aGUgaW5uZXIgaXRlcmF0b3IuCiAgU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9wdWxsLzc2NQoqIFlvdSBjYW4gbm93IHNldCB0aGUgYENvbnRlbnQtVHlwZWAgaGVhZGVyIHRvIGBtdWx0aXBhcnQvZm9ybS1kYXRhYAogIHdoZW4gY3JlYXRpbmcgUE9TVCByZXF1ZXN0cyB0byBmb3JjZSBtdWx0aXBhcnQgYm9kaWVzLgogIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9pc3N1ZXMvNzY4CgojIyA0LjEuNyAtIDIwMTQtMDgtMDcKCiogRml4ZWQgYW4gZXJyb3IgaW4gdGhlIEhpc3RvcnlQbHVnaW4gdGhhdCBjYXVzZWQgdGhlIHNhbWUgcmVxdWVzdCBhbmQgcmVzcG9uc2UKICB0byBiZSBsb2dnZWQgbXVsdGlwbGUgdGltZXMgd2hlbiBhbiBIVFRQIHByb3RvY29sIGVycm9yIG9jY3Vycy4KKiBFbnN1cmluZyB0aGF0IGNVUkwgZG9lcyBub3QgYWRkIGEgZGVmYXVsdCBDb250ZW50LVR5cGUgd2hlbiBubyBDb250ZW50LVR5cGUKICBoYXMgYmVlbiBzdXBwbGllZCBieSB0aGUgdXNlci4gVGhpcyBwcmV2ZW50cyB0aGUgYWRhcHRlciBsYXllciBmcm9tIG1vZGlmeWluZwogIHRoZSByZXF1ZXN0IHRoYXQgaXMgc2VudCBvdmVyIHRoZSB3aXJlIGFmdGVyIGFueSBsaXN0ZW5lcnMgbWF5IGhhdmUgYWxyZWFkeQogIHB1dCB0aGUgcmVxdWVzdCBpbiBhIGRlc2lyZWQgc3RhdGUgKGUuZy4sIHNpZ25lZCB0aGUgcmVxdWVzdCkuCiogVGhyb3dpbmcgYW4gZXhjZXB0aW9uIHdoZW4geW91IGF0dGVtcHQgdG8gc2VuZCByZXF1ZXN0cyB0aGF0IGhhdmUgdGhlCiAgInN0cmVhbSIgc2V0IHRvIHRydWUgaW4gcGFyYWxsZWwgdXNpbmcgdGhlIE11bHRpQWRhcHRlci4KKiBPbmx5IGNhbGxpbmcgY3VybF9tdWx0aV9zZWxlY3Qgd2hlbiB0aGVyZSBhcmUgYWN0aXZlIGNVUkwgaGFuZGxlcy4gVGhpcyB3YXMKICBwcmV2aW91c2x5IGNoYW5nZWQgYW5kIGNhdXNlZCBwZXJmb3JtYW5jZSBwcm9ibGVtcyBvbiBzb21lIHN5c3RlbXMgZHVlIHRvIFBIUAogIGFsd2F5cyBzZWxlY3RpbmcgdW50aWwgdGhlIG1heGltdW0gc2VsZWN0IHRpbWVvdXQuCiogRml4ZWQgYSBidWcgd2hlcmUgbXVsdGlwYXJ0L2Zvcm0tZGF0YSBQT1NUIGZpZWxkcyB3ZXJlIG5vdCBjb3JyZWN0bHkKICBhZ2dyZWdhdGVkIChlLmcuLCB2YWx1ZXMgd2l0aCAiJiIpLgoKIyMgNC4xLjYgLSAyMDE0LTA4LTAzCgoqIEFkZGVkIGhlbHBlciBtZXRob2RzIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHJlcHJlc2VudCBtZXNzYWdlcyBhcyBzdHJpbmdzLAogIGluY2x1ZGluZyBnZXR0aW5nIHRoZSBzdGFydCBsaW5lIGFuZCBnZXR0aW5nIGhlYWRlcnMgYXMgYSBzdHJpbmcuCgojIyA0LjEuNSAtIDIwMTQtMDgtMDIKCiogQXV0b21hdGljYWxseSByZXRyeWluZyBjVVJMICJDb25uZWN0aW9uIGRpZWQsIHJldHJ5aW5nIGEgZnJlc2ggY29ubmVjdCIKICBlcnJvcnMgd2hlbiBwb3NzaWJsZS4KKiBjVVJMIGltcGxlbWVudGF0aW9uIGNsZWFudXAKKiBBbGxvd2luZyBtdWx0aXBsZSBldmVudCBzdWJzY3JpYmVyIGxpc3RlbmVycyB0byBiZSByZWdpc3RlcmVkIHBlciBldmVudCBieQogIHBhc3NpbmcgYW4gYXJyYXkgb2YgYXJyYXlzIG9mIGxpc3RlbmVyIGNvbmZpZ3VyYXRpb24uCgojIyA0LjEuNCAtIDIwMTQtMDctMjIKCiogRml4ZWQgYSBidWcgdGhhdCBjYXVzZWQgbXVsdGktcGFydCBQT1NUIHJlcXVlc3RzIHdpdGggbW9yZSB0aGFuIG9uZSBmaWVsZCB0bwogIHNlcmlhbGl6ZSBpbmNvcnJlY3RseS4KKiBQYXRocyBjYW4gbm93IGJlIHNldCB0byAiMCIKKiBgUmVzcG9uc2VJbnRlcmZhY2U6OnhtbGAgbm93IGFjY2VwdHMgYSBgbGlieG1sX29wdGlvbnNgIG9wdGlvbiBhbmQgYWRkZWQgYQogIG1pc3NpbmcgZGVmYXVsdCBhcmd1bWVudCB0aGF0IHdhcyByZXF1aXJlZCB3aGVuIHBhcnNpbmcgWE1MIHJlc3BvbnNlIGJvZGllcy4KKiBBIGBzYXZlX3RvYCBzdHJlYW0gaXMgbm93IGNyZWF0ZWQgbGF6aWx5LCB3aGljaCBtZWFucyB0aGF0IGZpbGVzIGFyZSBub3QKICBjcmVhdGVkIG9uIGRpc2sgdW5sZXNzIGEgcmVxdWVzdCBzdWNjZWVkcy4KCiMjIDQuMS4zIC0gMjAxNC0wNy0xNQoKKiBWYXJpb3VzIGZpeGVzIHRvIG11bHRpcGFydC9mb3JtLWRhdGEgUE9TVCB1cGxvYWRzCiogV3JhcHBpbmcgZnVuY3Rpb24ucGhwIGluIGFuIGlmLXN0YXRlbWVudCB0byBlbnN1cmUgR3V6emxlIGNhbiBiZSB1c2VkCiAgZ2xvYmFsbHkgYW5kIGluIGEgQ29tcG9zZXIgaW5zdGFsbAoqIEZpeGVkIGFuIGlzc3VlIHdpdGggZ2VuZXJhdGluZyBhbmQgbWVyZ2luZyBpbiBldmVudHMgdG8gYW4gZXZlbnQgYXJyYXkKKiBQT1NUIGhlYWRlcnMgYXJlIG9ubHkgYXBwbGllZCBiZWZvcmUgc2VuZGluZyBhIHJlcXVlc3QgdG8gYWxsb3cgeW91IHRvIGNoYW5nZQogIHRoZSBxdWVyeSBhZ2dyZWdhdG9yIHVzZWQgYmVmb3JlIHVwbG9hZGluZwoqIEFkZGVkIG11Y2ggbW9yZSByb2J1c3QgcXVlcnkgc3RyaW5nIHBhcnNpbmcKKiBGaXhlZCB2YXJpb3VzIHBhcnNpbmcgYW5kIG5vcm1hbGl6YXRpb24gaXNzdWVzIHdpdGggVVJMcwoqIEZpeGluZyBhbiBpc3N1ZSB3aGVyZSBtdWx0aS12YWx1ZWQgaGVhZGVycyB3ZXJlIG5vdCBiZWluZyB1dGlsaXplZCBjb3JyZWN0bHkKICBpbiB0aGUgU3RyZWFtQWRhcHRlcgoKIyMgNC4xLjIgLSAyMDE0LTA2LTE4CgoqIEFkZGVkIHN1cHBvcnQgZm9yIHNlbmRpbmcgcGF5bG9hZHMgd2l0aCBHRVQgcmVxdWVzdHMKCiMjIDQuMS4xIC0gMjAxNC0wNi0wOAoKKiBGaXhlZCBhbiBpc3N1ZSByZWxhdGVkIHRvIHVzaW5nIGN1c3RvbSBtZXNzYWdlIGZhY3Rvcnkgb3B0aW9ucyBpbiBzdWJjbGFzc2VzCiogRml4ZWQgYW4gaXNzdWUgd2l0aCBuZXN0ZWQgZm9ybSBmaWVsZHMgaW4gYSBtdWx0aS1wYXJ0IFBPU1QKKiBGaXhlZCBhbiBpc3N1ZSB3aXRoIHVzaW5nIHRoZSBganNvbmAgcmVxdWVzdCBvcHRpb24gZm9yIFBPU1QgcmVxdWVzdHMKKiBBZGRlZCBgVG9BcnJheUludGVyZmFjZWAgdG8gYEd1enpsZUh0dHBcQ29va2llXENvb2tpZUphcmAKCiMjIDQuMS4wIC0gMjAxNC0wNS0yNwoKKiBBZGRlZCBhIGBqc29uYCByZXF1ZXN0IG9wdGlvbiB0byBlYXNpbHkgc2VyaWFsaXplIEpTT04gcGF5bG9hZHMuCiogQWRkZWQgYSBgR3V6emxlSHR0cFxqc29uX2RlY29kZSgpYCB3cmFwcGVyIHRvIHNhZmVseSBwYXJzZSBKU09OLgoqIEFkZGVkIGBzZXRQb3J0KClgIGFuZCBgZ2V0UG9ydCgpYCB0byBgR3V6emxlSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2VgLgoqIEFkZGVkIHRoZSBhYmlsaXR5IHRvIHByb3ZpZGUgYW4gZW1pdHRlciB0byBhIGNsaWVudCBpbiB0aGUgY2xpZW50IGNvbnN0cnVjdG9yLgoqIEFkZGVkIHRoZSBhYmlsaXR5IHRvIHBlcnNpc3QgYSBjb29raWUgc2Vzc2lvbiB1c2luZyAkX1NFU1NJT04uCiogQWRkZWQgYSB0cmFpdCB0aGF0IGNhbiBiZSB1c2VkIHRvIGFkZCBldmVudCBsaXN0ZW5lcnMgdG8gYW4gaXRlcmF0b3IuCiogUmVtb3ZlZCByZXF1ZXN0IG1ldGhvZCBjb25zdGFudHMgZnJvbSBSZXF1ZXN0SW50ZXJmYWNlLgoqIEZpeGVkIHdhcm5pbmcgd2hlbiBpbnZhbGlkIHJlcXVlc3Qgc3RhcnQtbGluZXMgYXJlIHJlY2VpdmVkLgoqIFVwZGF0ZWQgTWVzc2FnZUZhY3RvcnkgdG8gd29yayB3aXRoIGN1c3RvbSByZXF1ZXN0IG9wdGlvbiBtZXRob2RzLgoqIFVwZGF0ZWQgY2FjZXJ0IGJ1bmRsZSB0byBsYXRlc3QgYnVpbGQuCgo0LjAuMiAoMjAxNC0wNC0xNikKLS0tLS0tLS0tLS0tLS0tLS0tCgoqIFByb3h5IHJlcXVlc3RzIHVzaW5nIHRoZSBTdHJlYW1BZGFwdGVyIG5vdyBwcm9wZXJseSB1c2UgcmVxdWVzdF9mdWxsdXJpICgjNjMyKQoqIEFkZGVkIHRoZSBhYmlsaXR5IHRvIHNldCBzY2FsYXJzIGFzIFBPU1QgZmllbGRzICgjNjI4KQoKIyMgNC4wLjEgLSAyMDE0LTA0LTA0CgoqIFRoZSBIVFRQIHN0YXR1cyBjb2RlIG9mIGEgcmVzcG9uc2UgaXMgbm93IHNldCBhcyB0aGUgZXhjZXB0aW9uIGNvZGUgb2YKICBSZXF1ZXN0RXhjZXB0aW9uIG9iamVjdHMuCiogMzAzIHJlZGlyZWN0cyB3aWxsIG5vdyBjb3JyZWN0bHkgc3dpdGNoIGZyb20gUE9TVCB0byBHRVQgcmVxdWVzdHMuCiogVGhlIGRlZmF1bHQgcGFyYWxsZWwgYWRhcHRlciBvZiBhIGNsaWVudCBub3cgY29ycmVjdGx5IHVzZXMgdGhlIE11bHRpQWRhcHRlci4KKiBIYXNEYXRhVHJhaXQgbm93IGluaXRpYWxpemVzIHRoZSBpbnRlcm5hbCBkYXRhIGFycmF5IGFzIGFuIGVtcHR5IGFycmF5IHNvCiAgdGhhdCB0aGUgdG9BcnJheSgpIG1ldGhvZCBhbHdheXMgcmV0dXJucyBhbiBhcnJheS4KCiMjIDQuMC4wIC0gMjAxNC0wMy0yOQoKKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgNC4wIHRyYW5zaXRpb24sIHNlZToKICBodHRwOi8vbXRkb3dsaW5nLmNvbS9ibG9nLzIwMTQvMDMvMTUvZ3V6emxlLTQtcmMvCiogRm9yIGluZm9ybWF0aW9uIG9uIGNoYW5nZXMgYW5kIHVwZ3JhZGluZywgc2VlOgogIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL2Jsb2IvbWFzdGVyL1VQR1JBRElORy5tZCMzeC10by00MAoqIEFkZGVkIGBHdXp6bGVIdHRwXGJhdGNoKClgIGFzIGEgY29udmVuaWVuY2UgZnVuY3Rpb24gZm9yIHNlbmRpbmcgcmVxdWVzdHMgaW4KICBwYXJhbGxlbCB3aXRob3V0IG5lZWRpbmcgdG8gd3JpdGUgYXN5bmNocm9ub3VzIGNvZGUuCiogUmVzdHJ1Y3R1cmVkIGhvdyBldmVudHMgYXJlIGFkZGVkIHRvIGBHdXp6bGVIdHRwXENsaWVudEludGVyZmFjZTo6c2VuZEFsbCgpYC4KICBZb3UgY2FuIG5vdyBwYXNzIGEgY2FsbGFibGUgb3IgYW4gYXJyYXkgb2YgYXNzb2NpYXRpdmUgYXJyYXlzIHdoZXJlIGVhY2gKICBhc3NvY2lhdGl2ZSBhcnJheSBjb250YWlucyB0aGUgImZuIiwgInByaW9yaXR5IiwgYW5kICJvbmNlIiBrZXlzLgoKIyMgNC4wLjAucmMtMiAtIDIwMTQtMDMtMjUKCiogUmVtb3ZlZCBgZ2V0Q29uZmlnKClgIGFuZCBgc2V0Q29uZmlnKClgIGZyb20gY2xpZW50cyB0byBhdm9pZCBjb25mdXNpb24KICBhcm91bmQgd2hldGhlciB0aGluZ3MgbGlrZSBiYXNlX3VybCwgbWVzc2FnZV9mYWN0b3J5LCBldGMuIHNob3VsZCBiZSBhYmxlIHRvCiAgYmUgcmV0cmlldmVkIG9yIG1vZGlmaWVkLgoqIEFkZGVkIGBnZXREZWZhdWx0T3B0aW9uKClgIGFuZCBgc2V0RGVmYXVsdE9wdGlvbigpYCB0byBDbGllbnRJbnRlcmZhY2UKKiBmdW5jdGlvbnMucGhwIGZ1bmN0aW9ucyB3ZXJlIHJlbmFtZWQgdXNpbmcgc25ha2VfY2FzZSB0byBtYXRjaCBQSFAgaWRpb21zCiogQWRkZWQgc3VwcG9ydCBmb3IgYEhUVFBfUFJPWFlgLCBgSFRUUFNfUFJPWFlgLCBhbmQKICBgR1VaWkxFX0NVUkxfU0VMRUNUX1RJTUVPVVRgIGVudmlyb25tZW50IHZhcmlhYmxlcwoqIEFkZGVkIHRoZSBhYmlsaXR5IHRvIHNwZWNpZnkgY3VzdG9tIGBzZW5kQWxsKClgIGV2ZW50IHByaW9yaXRpZXMKKiBBZGRlZCB0aGUgYWJpbGl0eSB0byBzcGVjaWZ5IGN1c3RvbSBzdHJlYW0gY29udGV4dCBvcHRpb25zIHRvIHRoZSBzdHJlYW0KICBhZGFwdGVyLgoqIEFkZGVkIGEgZnVuY3Rpb25zLnBocCBmdW5jdGlvbiBmb3IgYGdldF9wYXRoKClgIGFuZCBgc2V0X3BhdGgoKWAKKiBDdXJsQWRhcHRlciBhbmQgTXVsdGlBZGFwdGVyIG5vdyB1c2UgYSBjYWxsYWJsZSB0byBnZW5lcmF0ZSBjdXJsIHJlc291cmNlcwoqIE1vY2tBZGFwdGVyIG5vdyBwcm9wZXJseSByZWFkcyBhIGJvZHkgYW5kIGVtaXRzIGEgYGhlYWRlcnNgIGV2ZW50CiogVXBkYXRlZCBVcmwgY2xhc3MgdG8gY2hlY2sgaWYgYSBzY2hlbWUgYW5kIGhvc3QgYXJlIHNldCBiZWZvcmUgYWRkaW5nICI6IgogIGFuZCAiLy8iLiBUaGlzIGFsbG93cyBlbXB0eSBVcmwgKGUuZy4sICIiKSB0byBiZSBzZXJpYWxpemVkIGFzICIiLgoqIFBhcnNpbmcgaW52YWxpZCBYTUwgbm8gbG9uZ2VyIGVtaXRzIHdhcm5pbmdzCiogQ3VybCBjbGFzc2VzIG5vdyBwcm9wZXJseSB0aHJvdyBBZGFwdGVyRXhjZXB0aW9ucwoqIFZhcmlvdXMgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9ucwoqIFN0cmVhbXMgYXJlIGNyZWF0ZWQgd2l0aCB0aGUgZmFzdGVyIGBTdHJlYW1cY3JlYXRlKClgIGZ1bmN0aW9uCiogTWFya2VkIGRlcHJlY2F0aW9uX3Byb3h5KCkgYXMgaW50ZXJuYWwKKiBUZXN0IHNlcnZlciBpcyBub3cgYSBjb2xsZWN0aW9uIG9mIHN0YXRpYyBtZXRob2RzIG9uIGEgY2xhc3MKCiMjIDQuMC4wLXJjLjEgLSAyMDE0LTAzLTE1CgoqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS9ibG9iL21hc3Rlci9VUEdSQURJTkcubWQjM3gtdG8tNDAKCiMjIDMuOC4xIC0gMjAxNC0wMS0yOAoKKiBCdWc6IEFsd2F5cyB1c2luZyBHRVQgcmVxdWVzdHMgd2hlbiByZWRpcmVjdGluZyBmcm9tIGEgMzAzIHJlc3BvbnNlCiogQnVnOiBDVVJMT1BUX1NTTF9WRVJJRllIT1NUIGlzIG5vdyBjb3JyZWN0bHkgc2V0IHRvIGZhbHNlIHdoZW4gc2V0dGluZyBgJGNlcnRpZmljYXRlQXV0aG9yaXR5YCB0byBmYWxzZSBpbgogIGBHdXp6bGVcSHR0cFxDbGllbnRJbnRlcmZhY2U6OnNldFNzbFZlcmlmaWNhdGlvbigpYAoqIEJ1ZzogUmVkaXJlY3RQbHVnaW4gbm93IHVzZXMgc3RyaWN0IFJGQyAzOTg2IGNvbXBsaWFuY2Ugd2hlbiBjb21iaW5pbmcgYSBiYXNlIFVSTCB3aXRoIGEgcmVsYXRpdmUgVVJMCiogQnVnOiBUaGUgYm9keSBvZiBhIHJlcXVlc3QgY2FuIG5vdyBiZSBzZXQgdG8gYCIwImAKKiBTZW5kaW5nIFBIUCBzdHJlYW0gcmVxdWVzdHMgbm8gbG9uZ2VyIGZvcmNlcyBgSFRUUC8xLjBgCiogQWRkaW5nIG1vcmUgaW5mb3JtYXRpb24gdG8gRXhjZXB0aW9uQ29sbGVjdGlvbiBleGNlcHRpb25zIHNvIHRoYXQgdXNlcnMgaGF2ZSBtb3JlIGNvbnRleHQsIGluY2x1ZGluZyBhIHN0YWNrIHRyYWNlIG9mCiAgZWFjaCBzdWItZXhjZXB0aW9uCiogVXBkYXRlZCB0aGUgYCRyZWZgIGF0dHJpYnV0ZSBpbiBzZXJ2aWNlIGRlc2NyaXB0aW9ucyB0byBtZXJnZSBvdmVyIGFueSBleGlzdGluZyBwYXJhbWV0ZXJzIG9mIGEgc2NoZW1hIChyYXRoZXIgdGhhbgogIGNsb2JiZXJpbmcgZXZlcnl0aGluZykuCiogTWVyZ2luZyBVUkxzIHdpbGwgbm93IHVzZSB0aGUgcXVlcnkgc3RyaW5nIG9iamVjdCBmcm9tIHRoZSByZWxhdGl2ZSBVUkwgKHRodXMgYWxsb3dpbmcgY3VzdG9tIHF1ZXJ5IGFnZ3JlZ2F0b3JzKQoqIFF1ZXJ5IHN0cmluZ3MgYXJlIG5vdyBwYXJzZWQgaW4gYSB3YXkgdGhhdCB0aGV5IGRvIG5vIGNvbnZlcnQgZW1wdHkga2V5cyB3aXRoIG5vIHZhbHVlIHRvIGhhdmUgYSBkYW5nbGluZyBgPWAuCiAgRm9yIGV4YW1wbGUgYGZvbyZiYXI9YmF6YCBpcyBub3cgY29ycmVjdGx5IHBhcnNlZCBhbmQgcmVjb2duaXplZCBhcyBgZm9vJmJhcj1iYXpgIHJhdGhlciB0aGFuIGBmb289JmJhcj1iYXpgLgoqIE5vdyBwcm9wZXJseSBlc2NhcGluZyB0aGUgcmVndWxhciBleHByZXNzaW9uIGRlbGltaXRlciB3aGVuIG1hdGNoaW5nIENvb2tpZSBkb21haW5zLgoqIE5ldHdvcmsgYWNjZXNzIGlzIG5vdyBkaXNhYmxlZCB3aGVuIGxvYWRpbmcgWE1MIGRvY3VtZW50cwoKIyMgMy44LjAgLSAyMDEzLTEyLTA1CgoqIEFkZGVkIHRoZSBhYmlsaXR5IHRvIGRlZmluZSBhIFBPU1QgbmFtZSBmb3IgYSBmaWxlCiogSlNPTiByZXNwb25zZSBwYXJzaW5nIG5vdyBwcm9wZXJseSB3YWxrcyBhZGRpdGlvbmFsUHJvcGVydGllcwoqIGNVUkwgZXJyb3IgY29kZSAxOCBpcyBub3cgcmV0cmllZCBhdXRvbWF0aWNhbGx5IGluIHRoZSBCYWNrb2ZmUGx1Z2luCiogRml4ZWQgYSBjVVJMIGVycm9yIHdoZW4gVVJMcyBjb250YWluIGZyYWdtZW50cwoqIEZpeGVkIGFuIGlzc3VlIGluIHRoZSBCYWNrb2ZmUGx1Z2luIHJldHJ5IGV2ZW50IHdoZXJlIGl0IHdhcyB0cnlpbmcgdG8gYWNjZXNzIGFsbCBleGNlcHRpb25zIGFzIGlmIHRoZXkgd2VyZQogIEN1cmxFeGNlcHRpb25zCiogQ1VSTE9QVF9QUk9HUkVTUyBmdW5jdGlvbiBmaXggZm9yIFBIUCA1LjUgKDY5ZmNjMWUpCiogQWRkZWQgdGhlIGFiaWxpdHkgZm9yIEd1enpsZSB0byB3b3JrIHdpdGggb2xkZXIgdmVyc2lvbnMgb2YgY1VSTCB0aGF0IGRvIG5vdCBzdXBwb3J0IGBDVVJMT1BUX1RJTUVPVVRfTVNgCiogRml4ZWQgYSBidWcgdGhhdCB3YXMgZW5jb3VudGVyZWQgd2hlbiBwYXJzaW5nIGVtcHR5IGhlYWRlciBwYXJhbWV0ZXJzCiogVXJpVGVtcGxhdGUgbm93IGhhcyBhIGBzZXRSZWdleCgpYCBtZXRob2QgdG8gbWF0Y2ggdGhlIGRvY3MKKiBUaGUgYGRlYnVnYCByZXF1ZXN0IHBhcmFtZXRlciBub3cgY2hlY2tzIGlmIGl0IGlzIHRydXRoeSByYXRoZXIgdGhhbiBpZiBpdCBleGlzdHMKKiBTZXR0aW5nIHRoZSBgZGVidWdgIHJlcXVlc3QgcGFyYW1ldGVyIHRvIHRydWUgc2hvd3MgdmVyYm9zZSBjVVJMIG91dHB1dCBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBMb2dQbHVnaW4KKiBBZGRlZCB0aGUgYWJpbGl0eSB0byBjb21iaW5lIFVSTHMgdXNpbmcgc3RyaWN0IFJGQyAzOTg2IGNvbXBsaWFuY2UKKiBDb21tYW5kIG9iamVjdHMgY2FuIG5vdyByZXR1cm4gdGhlIHZhbGlkYXRpb24gZXJyb3JzIGVuY291bnRlcmVkIGJ5IHRoZSBjb21tYW5kCiogVmFyaW91cyBmaXhlcyB0byBjYWNoZSByZXZhbGlkYXRpb24gKCM0MzcgYW5kIDI5Nzk3ZTUpCiogVmFyaW91cyBmaXhlcyB0byB0aGUgQXN5bmNQbHVnaW4KKiBDbGVhbmVkIHVwIGJ1aWxkIHNjcmlwdHMKCiMjIDMuNy40IC0gMjAxMy0xMC0wMgoKKiBCdWcgZml4OiAwIGlzIG5vdyBhbiBhbGxvd2VkIHZhbHVlIGluIGEgZGVzY3JpcHRpb24gcGFyYW1ldGVyIHRoYXQgaGFzIGEgZGVmYXVsdCB2YWx1ZSAoIzQzMCkKKiBCdWcgZml4OiBTY2hlbWFGb3JtYXR0ZXIgbm93IHJldHVybnMgYW4gaW50ZWdlciB3aGVuIGZvcm1hdHRpbmcgdG8gYSBVbml4IHRpbWVzdGFtcAogIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3Mtc2RrLXBocC9pc3N1ZXMvMTQ3KQoqIEJ1ZyBmaXg6IENsZWFuZWQgdXAgYW5kIGZpeGVkIFVSTCBkb3Qgc2VnbWVudCByZW1vdmFsIHRvIHByb3Blcmx5IHJlc29sdmUgaW50ZXJuYWwgZG90cwoqIE1pbmltdW0gUEhQIHZlcnNpb24gaXMgbm93IHByb3Blcmx5IHNwZWNpZmllZCBhcyA1LjMuMyAodXAgZnJvbSA1LjMuMikgKCM0MjApCiogVXBkYXRlZCB0aGUgYnVuZGxlZCBjYWNlcnQucGVtICgjNDE5KQoqIE9hdXRoUGx1Z2luIG5vdyBzdXBwb3J0cyBhZGRpbmcgYXV0aGVudGljYXRpb24gdG8gaGVhZGVycyBvciBxdWVyeSBzdHJpbmcgKCM0MjUpCgojIyAzLjcuMyAtIDIwMTMtMDktMDgKCiogQWRkZWQgdGhlIGFiaWxpdHkgdG8gZ2V0IHRoZSBleGNlcHRpb24gYXNzb2NpYXRlZCB3aXRoIGEgcmVxdWVzdC9jb21tYW5kIHdoZW4gdXNpbmcgYE11bHRpVHJhbnNmZXJFeGNlcHRpb25gIGFuZAogIGBDb21tYW5kVHJhbnNmZXJFeGNlcHRpb25gLgoqIFNldHRpbmcgYGFkZGl0aW9uYWxQYXJhbWV0ZXJzYCBvZiBhIHJlc3BvbnNlIHRvIGZhbHNlIGlzIG5vdyBob25vcmVkIHdoZW4gcGFyc2luZyByZXNwb25zZXMgd2l0aCBhIHNlcnZpY2UgZGVzY3JpcHRpb24KKiBTY2hlbWFzIGFyZSBvbmx5IGluamVjdGVkIGludG8gcmVzcG9uc2UgbW9kZWxzIHdoZW4gZXhwbGljaXRseSBjb25maWd1cmVkLgoqIE5vIGxvbmdlciBndWVzc2luZyBDb250ZW50LVR5cGUgYmFzZWQgb24gdGhlIHBhdGggb2YgYSByZXF1ZXN0LiBDb250ZW50LVR5cGUgaXMgbm93IG9ubHkgZ3Vlc3NlZCBiYXNlZCBvbiB0aGUgcGF0aCBvZgogIGFuIEVudGl0eUJvZHkuCiogQnVnIGZpeDogQ2h1bmtlZEl0ZXJhdG9yIGNhbiBub3cgcHJvcGVybHkgY2h1bmsgYSBcVHJhdmVyc2FibGUgYXMgd2VsbCBhcyBhbiBcSXRlcmF0b3IuCiogQnVnIGZpeDogRmlsdGVySXRlcmF0b3Igbm93IHJlbGllcyBvbiBgXEl0ZXJhdG9yYCBpbnN0ZWFkIG9mIGBcVHJhdmVyc2FibGVgLgoqIEJ1ZyBmaXg6IEdyYWNlZnVsbHkgaGFuZGxpbmcgbWFsZm9ybWVkIHJlc3BvbnNlcyBpbiBSZXF1ZXN0TWVkaWF0b3I6OndyaXRlUmVzcG9uc2VCb2R5KCkKKiBCdWcgZml4OiBSZXBsYWNlZCBjYWxsIHRvIGNhbkNhY2hlIHdpdGggY2FuQ2FjaGVSZXF1ZXN0IGluIHRoZSBDYWxsYmFja0NhbkNhY2hlU3RyYXRlZ3kgb2YgdGhlIENhY2hlUGx1Z2luCiogQnVnIGZpeDogVmlzaXRpbmcgWE1MIGF0dHJpYnV0ZXMgZmlyc3QgYmVmb3JlIHZpc2l0aW5nIFhNTCBjaGlsZHJlbiB3aGVuIHNlcmlhbGl6aW5nIHJlcXVlc3RzCiogQnVnIGZpeDogUHJvcGVybHkgcGFyc2luZyBoZWFkZXJzIHRoYXQgY29udGFpbiBjb21tYXMgY29udGFpbmVkIGluIHF1b3RlcwoqIEJ1ZyBmaXg6IG1pbWV0eXBlIGd1ZXNzaW5nIGJhc2VkIG9uIGEgZmlsZW5hbWUgaXMgbm93IGNhc2UtaW5zZW5zaXRpdmUKCiMjIDMuNy4yIC0gMjAxMy0wOC0wMgoKKiBCdWcgZml4OiBQcm9wZXJseSBVUkwgZW5jb2RpbmcgcGF0aHMgd2hlbiB1c2luZyB0aGUgUEhQLW9ubHkgdmVyc2lvbiBvZiB0aGUgVXJpVGVtcGxhdGUgZXhwYW5kZXIKICBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvaXNzdWVzLzM3MQoqIEJ1ZyBmaXg6IENvb2tpZSBkb21haW5zIGFyZSBub3cgbWF0Y2hlZCBjb3JyZWN0bHkgYWNjb3JkaW5nIHRvIFJGQyA2MjY1CiAgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL2lzc3Vlcy8zNzcKKiBCdWcgZml4OiBHRVQgcGFyYW1ldGVycyBhcmUgbm93IHVzZWQgd2hlbiBjYWxjdWxhdGluZyBhbiBPQXV0aCBzaWduYXR1cmUKKiBCdWcgZml4OiBGaXhlZCBhbiBpc3N1ZSB3aXRoIGNhY2hlIHJldmFsaWRhdGlvbiB3aGVyZSB0aGUgSWYtTm9uZS1NYXRjaCBoZWFkZXIgd2FzIGJlaW5nIGRvdWJsZSBxdW90ZWQKKiBgR3V6emxlXENvbW1vblxBYnN0cmFjdEhhc0Rpc3BhdGNoZXI6OmRpc3BhdGNoKClgIG5vdyByZXR1cm5zIHRoZSBldmVudCB0aGF0IHdhcyBkaXNwYXRjaGVkCiogYEd1enpsZVxIdHRwXFF1ZXJ5U3RyaW5nOjpmYWN0b3J5KClgIG5vdyBndWVzc2VzIHRoZSBtb3N0IGFwcHJvcHJpYXRlIHF1ZXJ5IGFnZ3JlZ2F0b3IgdG8gdXNlZCBiYXNlZCBvbiB0aGUgaW5wdXQuCiAgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL2lzc3Vlcy8zNzkKKiBBZGRlZCBhIHdheSB0byBhZGQgY3VzdG9tIGRvbWFpbiBvYmplY3RzIHRvIHNlcnZpY2UgZGVzY3JpcHRpb24gcGFyc2luZyB1c2luZyB0aGUgYG9wZXJhdGlvbi5wYXJzZV9jbGFzc2AgZXZlbnQuIFNlZQogIGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3B1bGwvMzgwCiogY1VSTCBtdWx0aSBjbGVhbnVwIGFuZCBvcHRpbWl6YXRpb25zCgojIyAzLjcuMSAtIDIwMTMtMDctMDUKCiogQnVnIGZpeDogU2V0dGluZyBkZWZhdWx0IG9wdGlvbnMgb24gYSBjbGllbnQgbm93IHdvcmtzCiogQnVnIGZpeDogU2V0dGluZyBvcHRpb25zIG9uIEhFQUQgcmVxdWVzdHMgbm93IHdvcmtzLiBTZWUgIzM1MgoqIEJ1ZyBmaXg6IE1vdmluZyBzdHJlYW0gZmFjdG9yeSBiZWZvcmUgc2VuZCBldmVudCB0byBiZWZvcmUgYnVpbGRpbmcgdGhlIHN0cmVhbS4gU2VlICMzNTMKKiBCdWcgZml4OiBDb29raWVzIG5vIGxvbmdlciBtYXRjaCBvbiBJUCBhZGRyZXNzZXMgcGVyIFJGQyA2MjY1CiogQnVnIGZpeDogQ29ycmVjdGx5IHBhcnNpbmcgaGVhZGVyIHBhcmFtZXRlcnMgdGhhdCBhcmUgaW4gYDw+YCBhbmQgcXVvdGVzCiogQWRkZWQgYGNlcnRgIGFuZCBgc3NsX2tleWAgYXMgcmVxdWVzdCBvcHRpb25zCiogYEhvc3RgIGhlYWRlciBjYW4gbm93IGRpdmVyZ2UgZnJvbSB0aGUgaG9zdCBwYXJ0IG9mIGEgVVJMIGlmIHRoZSBoZWFkZXIgaXMgc2V0IG1hbnVhbGx5CiogYEd1enpsZVxTZXJ2aWNlXENvbW1hbmRcTG9jYXRpb25WaXNpdG9yXFJlcXVlc3RcWG1sVmlzaXRvcmAgd2FzIHJld3JpdHRlbiB0byBjaGFuZ2UgZnJvbSB1c2luZyBTaW1wbGVYTUwgdG8gWE1MV3JpdGVyCiogT0F1dGggcGFyYW1ldGVycyBhcmUgb25seSBhZGRlZCB2aWEgdGhlIHBsdWdpbiBpZiB0aGV5IGFyZW4ndCBhbHJlYWR5IHNldAoqIEV4Y2VwdGlvbnMgYXJlIG5vdyB0aHJvd24gd2hlbiBhIFVSTCBjYW5ub3QgYmUgcGFyc2VkCiogUmV0dXJuaW5nIGBmYWxzZWAgaWYgYEd1enpsZVxIdHRwXEVudGl0eUJvZHk6OmdldENvbnRlbnRNZDUoKWAgZmFpbHMKKiBOb3Qgc2V0dGluZyBhIGBDb250ZW50LU1ENWAgb24gYSBjb21tYW5kIGlmIGNhbGN1bGF0aW5nIHRoZSBDb250ZW50LU1ENSBmYWlscyB2aWEgdGhlIENvbW1hbmRDb250ZW50TWQ1UGx1Z2luCgojIyAzLjcuMCAtIDIwMTMtMDYtMTAKCiogU2VlIFVQR1JBRElORy5tZCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gdXBncmFkZS4KKiBSZXF1ZXN0cyBub3cgc3VwcG9ydCB0aGUgYWJpbGl0eSB0byBzcGVjaWZ5IGFuIGFycmF5IG9mICRvcHRpb25zIHdoZW4gY3JlYXRpbmcgYSByZXF1ZXN0IHRvIG1vcmUgZWFzaWx5IG1vZGlmeSBhCiAgcmVxdWVzdC4gWW91IGNhbiBwYXNzIGEgJ3JlcXVlc3Qub3B0aW9ucycgY29uZmlndXJhdGlvbiBzZXR0aW5nIHRvIGEgY2xpZW50IHRvIGFwcGx5IGRlZmF1bHQgcmVxdWVzdCBvcHRpb25zIHRvCiAgZXZlcnkgcmVxdWVzdCBjcmVhdGVkIGJ5IGEgY2xpZW50IChlLmcuIGRlZmF1bHQgcXVlcnkgc3RyaW5nIHZhcmlhYmxlcywgaGVhZGVycywgY3VybCBvcHRpb25zLCBldGMuKS4KKiBBZGRlZCBhIHN0YXRpYyBmYWNhZGUgY2xhc3MgdGhhdCBhbGxvd3MgeW91IHRvIHVzZSBHdXp6bGUgd2l0aCBzdGF0aWMgbWV0aG9kcyBhbmQgbW91bnQgdGhlIGNsYXNzIHRvIGBcR3V6emxlYC4KICBTZWUgYEd1enpsZVxIdHRwXFN0YXRpY0NsaWVudDo6bW91bnRgLgoqIEFkZGVkIGBjb21tYW5kLnJlcXVlc3Rfb3B0aW9uc2AgdG8gYEd1enpsZVxTZXJ2aWNlXENvbW1hbmRcQWJzdHJhY3RDb21tYW5kYCB0byBwYXNzIHJlcXVlc3Qgb3B0aW9ucyB0byByZXF1ZXN0cwogICAgICBjcmVhdGVkIGJ5IGEgY29tbWFuZCAoZS5nLiBjdXN0b20gaGVhZGVycywgcXVlcnkgc3RyaW5nIHZhcmlhYmxlcywgdGltZW91dCBzZXR0aW5ncywgZXRjLikuCiogU3RyZWFtIHNpemUgaW4gYEd1enpsZVxTdHJlYW1cUGhwU3RyZWFtUmVxdWVzdEZhY3RvcnlgIHdpbGwgbm93IGJlIHNldCBpZiBDb250ZW50LUxlbmd0aCBpcyByZXR1cm5lZCBpbiB0aGUKICBoZWFkZXJzIG9mIGEgcmVzcG9uc2UKKiBBZGRlZCBgR3V6emxlXENvbW1vblxDb2xsZWN0aW9uOjpzZXRQYXRoKCRwYXRoLCAkdmFsdWUpYCB0byBzZXQgYSB2YWx1ZSBpbnRvIGFuIGFycmF5IHVzaW5nIGEgbmVzdGVkIGtleQogIChlLmcuIGAkY29sbGVjdGlvbi0+c2V0UGF0aCgnZm9vL2Jhei9iYXInLCAndGVzdCcpOyBlY2hvICRjb2xsZWN0aW9uWydmb28nXVsnYmFyJ11bJ2JhciddO2ApCiogU2VydmljZUJ1aWxkZXJzIG5vdyBzdXBwb3J0IHN0b3JpbmcgYW5kIHJldHJpZXZpbmcgYXJiaXRyYXJ5IGRhdGEKKiBDYWNoZVBsdWdpbiBjYW4gbm93IHB1cmdlIGFsbCByZXNvdXJjZXMgZm9yIGEgZ2l2ZW4gVVJJCiogQ2FjaGVQbHVnaW4gY2FuIGF1dG9tYXRpY2FsbHkgcHVyZ2UgbWF0Y2hpbmcgY2FjaGVkIGl0ZW1zIHdoZW4gYSBub24taWRlbXBvdGVudCByZXF1ZXN0IGlzIHNlbnQgdG8gYSByZXNvdXJjZQoqIENhY2hlUGx1Z2luIG5vdyB1c2VzIHRoZSBWYXJ5IGhlYWRlciB0byBkZXRlcm1pbmUgaWYgYSByZXNvdXJjZSBpcyBhIGNhY2hlIGhpdAoqIGBHdXp6bGVcSHR0cFxNZXNzYWdlXFJlc3BvbnNlYCBub3cgaW1wbGVtZW50cyBgXFNlcmlhbGl6YWJsZWAKKiBBZGRlZCBgR3V6emxlXENhY2hlXENhY2hlQWRhcHRlckZhY3Rvcnk6OmZyb21DYWNoZSgpYCB0byBtb3JlIGVhc2lseSBjcmVhdGUgY2FjaGUgYWRhcHRlcnMKKiBgR3V6emxlXFNlcnZpY2VcQ2xpZW50SW50ZXJmYWNlOjpleGVjdXRlKClgIG5vdyBhY2NlcHRzIGFuIGFycmF5LCBzaW5nbGUgY29tbWFuZCwgb3IgVHJhdmVyc2FibGUKKiBGaXhlZCBhIGJ1ZyBpbiBgR3V6emxlXEh0dHBcTWVzc2FnZVxIZWFkZXJcTGluazo6YWRkTGluaygpYAoqIEJldHRlciBoYW5kbGluZyBvZiBjYWxjdWxhdGluZyB0aGUgc2l6ZSBvZiBhIHN0cmVhbSBpbiBgR3V6emxlXFN0cmVhbVxTdHJlYW1gIHVzaW5nIGZzdGF0KCkgYW5kIGNhY2hpbmcgdGhlIHNpemUKKiBgR3V6emxlXENvbW1vblxFeGNlcHRpb25cRXhjZXB0aW9uQ29sbGVjdGlvbmAgbm93IGNyZWF0ZXMgYSBtb3JlIHJlYWRhYmxlIGV4Y2VwdGlvbiBtZXNzYWdlCiogRml4aW5nIEJDIGJyZWFrOiBBZGRlZCBiYWNrIHRoZSBNb25vbG9nTG9nQWRhcHRlciBpbXBsZW1lbnRhdGlvbiByYXRoZXIgdGhhbiBleHRlbmRpbmcgZnJvbSBQc3JMb2cgc28gdGhhdCBvbGRlcgogIFN5bWZvbnkgdXNlcnMgY2FuIHN0aWxsIHVzZSB0aGUgb2xkIHZlcnNpb24gb2YgTW9ub2xvZy4KKiBGaXhpbmcgQkMgYnJlYWs6IEFkZGVkIHRoZSBpbXBsZW1lbnRhdGlvbiBiYWNrIGluIGZvciBgR3V6emxlXEh0dHBcTWVzc2FnZVxBYnN0cmFjdE1lc3NhZ2U6OmdldFRva2VuaXplZEhlYWRlcigpYC4KICBOb3cgdHJpZ2dlcmluZyBhbiBFX1VTRVJfREVQUkVDQVRFRCB3YXJuaW5nIHdoZW4gdXNlZC4gVXNlIGAkbWVzc2FnZS0+Z2V0SGVhZGVyKCktPnBhcnNlUGFyYW1zKClgLgoqIFNldmVyYWwgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzIHRvIGBHdXp6bGVcQ29tbW9uXENvbGxlY3Rpb25gCiogQWRkZWQgYW4gYCRvcHRpb25zYCBhcmd1bWVudCB0byB0aGUgZW5kIG9mIHRoZSBmb2xsb3dpbmcgbWV0aG9kcyBvZiBgR3V6emxlXEh0dHBcQ2xpZW50SW50ZXJmYWNlYDoKICBjcmVhdGVSZXF1ZXN0LCBoZWFkLCBkZWxldGUsIHB1dCwgcGF0Y2gsIHBvc3QsIG9wdGlvbnMsIHByZXBhcmVSZXF1ZXN0CiogQWRkZWQgYW4gYCRvcHRpb25zYCBhcmd1bWVudCB0byB0aGUgZW5kIG9mIGBHdXp6bGVcSHR0cFxNZXNzYWdlXFJlcXVlc3RcUmVxdWVzdEZhY3RvcnlJbnRlcmZhY2U6OmNyZWF0ZVJlcXVlc3QoKWAKKiBBZGRlZCBhbiBgYXBwbHlPcHRpb25zKClgIG1ldGhvZCB0byBgR3V6emxlXEh0dHBcTWVzc2FnZVxSZXF1ZXN0XFJlcXVlc3RGYWN0b3J5SW50ZXJmYWNlYAoqIENoYW5nZWQgYEd1enpsZVxIdHRwXENsaWVudEludGVyZmFjZTo6Z2V0KCR1cmkgPSBudWxsLCAkaGVhZGVycyA9IG51bGwsICRib2R5ID0gbnVsbClgIHRvCiAgYEd1enpsZVxIdHRwXENsaWVudEludGVyZmFjZTo6Z2V0KCR1cmkgPSBudWxsLCAkaGVhZGVycyA9IG51bGwsICRvcHRpb25zID0gYXJyYXkoKSlgLiBZb3UgY2FuIHN0aWxsIHBhc3MgaW4gYQogIHJlc291cmNlLCBzdHJpbmcsIG9yIEVudGl0eUJvZHkgaW50byB0aGUgJG9wdGlvbnMgcGFyYW1ldGVyIHRvIHNwZWNpZnkgdGhlIGRvd25sb2FkIGxvY2F0aW9uIG9mIHRoZSByZXNwb25zZS4KKiBDaGFuZ2VkIGBHdXp6bGVcQ29tbW9uXENvbGxlY3Rpb246Ol9fY29uc3RydWN0KCRkYXRhKWAgdG8gbm8gbG9uZ2VyIGFjY2VwdHMgYSBudWxsIHZhbHVlIGZvciBgJGRhdGFgIGJ1dCBhCiAgZGVmYXVsdCBgYXJyYXkoKWAKKiBBZGRlZCBgR3V6emxlXFN0cmVhbVxTdHJlYW1JbnRlcmZhY2U6OmlzUmVwZWF0YWJsZWAKKiBSZW1vdmVkIGBHdXp6bGVcSHR0cFxDbGllbnRJbnRlcmZhY2U6OnNldERlZmF1bHRIZWFkZXJzKCkuIFVzZQogICRjbGllbnQtPmdldENvbmZpZygpLT5zZXRQYXRoKCdyZXF1ZXN0Lm9wdGlvbnMvaGVhZGVycy97aGVhZGVyX25hbWV9JywgJ3ZhbHVlJylgLiBvcgogICRjbGllbnQtPmdldENvbmZpZygpLT5zZXRQYXRoKCdyZXF1ZXN0Lm9wdGlvbnMvaGVhZGVycycsIGFycmF5KCdoZWFkZXJfbmFtZScgPT4gJ3ZhbHVlJykpYC4KKiBSZW1vdmVkIGBHdXp6bGVcSHR0cFxDbGllbnRJbnRlcmZhY2U6OmdldERlZmF1bHRIZWFkZXJzKCkuIFVzZSAkY2xpZW50LT5nZXRDb25maWcoKS0+Z2V0UGF0aCgncmVxdWVzdC5vcHRpb25zL2hlYWRlcnMnKWAuCiogUmVtb3ZlZCBgR3V6emxlXEh0dHBcQ2xpZW50SW50ZXJmYWNlOjpleHBhbmRUZW1wbGF0ZSgpYAoqIFJlbW92ZWQgYEd1enpsZVxIdHRwXENsaWVudEludGVyZmFjZTo6c2V0UmVxdWVzdEZhY3RvcnkoKWAKKiBSZW1vdmVkIGBHdXp6bGVcSHR0cFxDbGllbnRJbnRlcmZhY2U6OmdldEN1cmxNdWx0aSgpYAoqIFJlbW92ZWQgYEd1enpsZVxIdHRwXE1lc3NhZ2VcUmVxdWVzdEludGVyZmFjZTo6Y2FuQ2FjaGVgCiogUmVtb3ZlZCBgR3V6emxlXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlOjpzZXRJc1JlZGlyZWN0YAoqIFJlbW92ZWQgYEd1enpsZVxIdHRwXE1lc3NhZ2VcUmVxdWVzdEludGVyZmFjZTo6aXNSZWRpcmVjdGAKKiBNYWRlIGBHdXp6bGVcSHR0cFxDbGllbnQ6OmV4cGFuZFRlbXBsYXRlYCBhbmQgYGdldFVyaVRlbXBsYXRlYCBwcm90ZWN0ZWQgbWV0aG9kcy4KKiBZb3UgY2FuIG5vdyBlbmFibGUgRV9VU0VSX0RFUFJFQ0FURUQgd2FybmluZ3MgdG8gc2VlIGlmIHlvdSBhcmUgdXNpbmcgYSBkZXByZWNhdGVkIG1ldGhvZCBieSBzZXR0aW5nCiAgYEd1enpsZVxDb21tb25cVmVyc2lvbjo6JGVtaXRXYXJuaW5nc2AgdG8gdHJ1ZS4KKiBNYXJrZWQgYEd1enpsZVxIdHRwXE1lc3NhZ2VcUmVxdWVzdDo6aXNSZXNwb25zZUJvZHlSZXBlYXRhYmxlKClgIGFzIGRlcHJlY2F0ZWQuIFVzZQogICAgICBgJHJlcXVlc3QtPmdldFJlc3BvbnNlQm9keSgpLT5pc1JlcGVhdGFibGUoKWAgaW5zdGVhZC4KKiBNYXJrZWQgYEd1enpsZVxIdHRwXE1lc3NhZ2VcUmVxdWVzdDo6Y2FuQ2FjaGUoKWAgYXMgZGVwcmVjYXRlZC4gVXNlCiAgYEd1enpsZVxQbHVnaW5cQ2FjaGVcRGVmYXVsdENhbkNhY2hlU3RyYXRlZ3ktPmNhbkNhY2hlUmVxdWVzdCgpYCBpbnN0ZWFkLgoqIE1hcmtlZCBgR3V6emxlXEh0dHBcTWVzc2FnZVxSZXF1ZXN0OjpjYW5DYWNoZSgpYCBhcyBkZXByZWNhdGVkLiBVc2UKICBgR3V6emxlXFBsdWdpblxDYWNoZVxEZWZhdWx0Q2FuQ2FjaGVTdHJhdGVneS0+Y2FuQ2FjaGVSZXF1ZXN0KClgIGluc3RlYWQuCiogTWFya2VkIGBHdXp6bGVcSHR0cFxNZXNzYWdlXFJlcXVlc3Q6OnNldElzUmVkaXJlY3QoKWAgYXMgZGVwcmVjYXRlZC4gVXNlIHRoZSBIaXN0b3J5UGx1Z2luIGluc3RlYWQuCiogTWFya2VkIGBHdXp6bGVcSHR0cFxNZXNzYWdlXFJlcXVlc3Q6OmlzUmVkaXJlY3QoKWAgYXMgZGVwcmVjYXRlZC4gVXNlIHRoZSBIaXN0b3J5UGx1Z2luIGluc3RlYWQuCiogTWFya2VkIGBHdXp6bGVcQ2FjaGVcQ2FjaGVBZGFwdGVyRmFjdG9yeTo6ZmFjdG9yeSgpYCBhcyBkZXByZWNhdGVkCiogTWFya2VkICdjb21tYW5kLmhlYWRlcnMnLCAnY29tbWFuZC5yZXNwb25zZV9ib2R5JyBhbmQgJ2NvbW1hbmQub25fY29tcGxldGUnIGFzIGRlcHJlY2F0ZWQgZm9yIEFic3RyYWN0Q29tbWFuZC4KICBUaGVzZSB3aWxsIHdvcmsgdGhyb3VnaCBHdXp6bGUgNC4wCiogTWFya2VkICdyZXF1ZXN0LnBhcmFtcycgZm9yIGBHdXp6bGVcSHR0cFxDbGllbnRgIGFzIGRlcHJlY2F0ZWQuIFVzZSBbcmVxdWVzdC5vcHRpb25zXVtwYXJhbXNdLgoqIE1hcmtlZCBgR3V6emxlXFNlcnZpY2VcQ2xpZW50OjplbmFibGVNYWdpY01ldGhvZHMoKWAgYXMgZGVwcmVjYXRlZC4gTWFnaWMgbWV0aG9kcyBjYW4gbm8gbG9uZ2VyIGJlIGRpc2FibGVkIG9uIGEgR3V6emxlXFNlcnZpY2VcQ2xpZW50LgoqIE1hcmtlZCBgR3V6emxlXFNlcnZpY2VcQ2xpZW50OjpnZXREZWZhdWx0SGVhZGVycygpYCBhcyBkZXByZWNhdGVkLiBVc2UgJGNsaWVudC0+Z2V0Q29uZmlnKCktPmdldFBhdGgoJ3JlcXVlc3Qub3B0aW9ucy9oZWFkZXJzJylgLgoqIE1hcmtlZCBgR3V6emxlXFNlcnZpY2VcQ2xpZW50OjpzZXREZWZhdWx0SGVhZGVycygpYCBhcyBkZXByZWNhdGVkLiBVc2UgJGNsaWVudC0+Z2V0Q29uZmlnKCktPnNldFBhdGgoJ3JlcXVlc3Qub3B0aW9ucy9oZWFkZXJzL3toZWFkZXJfbmFtZX0nLCAndmFsdWUnKWAuCiogTWFya2VkIGBHdXp6bGVcUGFyc2VyXFVybFxVcmxQYXJzZXJgIGFzIGRlcHJlY2F0ZWQuIEp1c3QgdXNlIFBIUCdzIGBwYXJzZV91cmwoKWAgYW5kIHBlcmNlbnQgZW5jb2RlIHlvdXIgVVRGLTguCiogTWFya2VkIGBHdXp6bGVcQ29tbW9uXENvbGxlY3Rpb246OmluamVjdCgpYCBhcyBkZXByZWNhdGVkLgoqIE1hcmtlZCBgR3V6emxlXFBsdWdpblxDdXJsQXV0aFxDdXJsQXV0aFBsdWdpbmAgYXMgZGVwcmVjYXRlZC4gVXNlIGAkY2xpZW50LT5nZXRDb25maWcoKS0+c2V0UGF0aCgncmVxdWVzdC5vcHRpb25zL2F1dGgnLCBhcnJheSgndXNlcicsICdwYXNzJywgJ0Jhc2ljfERpZ2VzdCcpO2AKKiBDYWNoZUtleVByb3ZpZGVySW50ZXJmYWNlIGFuZCBEZWZhdWx0Q2FjaGVLZXlQcm92aWRlciBhcmUgbm8gbG9uZ2VyIHVzZWQuIEFsbCBvZiB0aGlzIGxvZ2ljIGlzIGhhbmRsZWQgaW4gYQogIENhY2hlU3RvcmFnZUludGVyZmFjZS4gVGhlc2UgdHdvIG9iamVjdHMgYW5kIGludGVyZmFjZSB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbi4KKiBBbHdheXMgc2V0dGluZyBYLWNhY2hlIGhlYWRlcnMgb24gY2FjaGVkIHJlc3BvbnNlcwoqIERlZmF1bHQgY2FjaGUgVFRMcyBhcmUgbm93IGhhbmRsZWQgYnkgdGhlIENhY2hlU3RvcmFnZUludGVyZmFjZSBvZiBhIENhY2hlUGx1Z2luCiogYENhY2hlU3RvcmFnZUludGVyZmFjZTo6Y2FjaGUoJGtleSwgUmVzcG9uc2UgJHJlc3BvbnNlLCAkdHRsID0gbnVsbClgIGhhcyBjaGFuZ2VkIHRvIGBjYWNoZShSZXF1ZXN0SW50ZXJmYWNlCiAgJHJlcXVlc3QsIFJlc3BvbnNlICRyZXNwb25zZSk7YAoqIGBDYWNoZVN0b3JhZ2VJbnRlcmZhY2U6OmZldGNoKCRrZXkpYCBoYXMgY2hhbmdlZCB0byBgZmV0Y2goUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCk7YAoqIGBDYWNoZVN0b3JhZ2VJbnRlcmZhY2U6OmRlbGV0ZSgka2V5KWAgaGFzIGNoYW5nZWQgdG8gYGRlbGV0ZShSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0KTtgCiogQWRkZWQgYENhY2hlU3RvcmFnZUludGVyZmFjZTo6cHVyZ2UoJHVybClgCiogYERlZmF1bHRSZXZhbGlkYXRpb246Ol9fY29uc3RydWN0KENhY2hlS2V5UHJvdmlkZXJJbnRlcmZhY2UgJGNhY2hlS2V5LCBDYWNoZVN0b3JhZ2VJbnRlcmZhY2UgJGNhY2hlLCBDYWNoZVBsdWdpbgogICRwbHVnaW4pYCBoYXMgY2hhbmdlZCB0byBgRGVmYXVsdFJldmFsaWRhdGlvbjo6X19jb25zdHJ1Y3QoQ2FjaGVTdG9yYWdlSW50ZXJmYWNlICRjYWNoZSwKICBDYW5DYWNoZVN0cmF0ZWd5SW50ZXJmYWNlICRjYW5DYWNoZSA9IG51bGwpYAoqIEFkZGVkIGBSZXZhbGlkYXRpb25JbnRlcmZhY2U6OnNob3VsZFJldmFsaWRhdGUoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgUmVzcG9uc2UgJHJlc3BvbnNlKWAKCiMjIDMuNi4wIC0gMjAxMy0wNS0yOQoKKiBTZXJ2aWNlRGVzY3JpcHRpb24gbm93IGltcGxlbWVudHMgVG9BcnJheUludGVyZmFjZQoqIEFkZGVkIGNvbW1hbmQuaGlkZGVuX3BhcmFtcyB0byBibGFja2xpc3QgY2VydGFpbiBoZWFkZXJzIGZyb20gYmVpbmcgdHJlYXRlZCBhcyBhZGRpdGlvbmFsUGFyYW1ldGVycwoqIEd1enpsZSBjYW4gbm93IGNvcnJlY3RseSBwYXJzZSBpbmNvbXBsZXRlIFVSTHMKKiBNaXhlZCBjYXNpbmcgb2YgaGVhZGVycyBhcmUgbm93IGZvcmNlZCB0byBiZSBhIHNpbmdsZSBjb25zaXN0ZW50IGNhc2luZyBhY3Jvc3MgYWxsIHZhbHVlcyBmb3IgdGhhdCBoZWFkZXIuCiogTWVzc2FnZXMgaW50ZXJuYWxseSB1c2UgYSBIZWFkZXJDb2xsZWN0aW9uIG9iamVjdCB0byBkZWxlZ2F0ZSBoYW5kbGluZyBjYXNlLWluc2Vuc2l0aXZlIGhlYWRlciByZXNvbHV0aW9uCiogUmVtb3ZlZCB0aGUgd2hvbGUgY2hhbmdlZEhlYWRlcigpIGZ1bmN0aW9uIHN5c3RlbSBvZiBtZXNzYWdlcyBiZWNhdXNlIGFsbCBoZWFkZXIgY2hhbmdlcyBub3cgZ28gdGhyb3VnaCBhZGRIZWFkZXIoKS4KKiBTcGVjaWZpYyBoZWFkZXIgaW1wbGVtZW50YXRpb25zIGNhbiBiZSBjcmVhdGVkIGZvciBjb21wbGV4IGhlYWRlcnMuIFdoZW4gYSBtZXNzYWdlIGNyZWF0ZXMgYSBoZWFkZXIsIGl0IHVzZXMgYQogIEhlYWRlckZhY3Rvcnkgd2hpY2ggY2FuIG1hcCBzcGVjaWZpYyBoZWFkZXJzIHRvIHNwZWNpZmljIGhlYWRlciBjbGFzc2VzLiBUaGVyZSBpcyBub3cgYSBMaW5rIGhlYWRlciBhbmQKICBDYWNoZUNvbnRyb2wgaGVhZGVyIGltcGxlbWVudGF0aW9uLgoqIFJlbW92ZWQgZnJvbSBpbnRlcmZhY2U6IEd1enpsZVxIdHRwXENsaWVudEludGVyZmFjZTo6c2V0VXJpVGVtcGxhdGUKKiBSZW1vdmVkIGZyb20gaW50ZXJmYWNlOiBHdXp6bGVcSHR0cFxDbGllbnRJbnRlcmZhY2U6OnNldEN1cmxNdWx0aSgpCiogUmVtb3ZlZCBHdXp6bGVcSHR0cFxNZXNzYWdlXFJlcXVlc3Q6OnJlY2VpdmVkUmVxdWVzdEhlYWRlcigpIGFuZCBpbXBsZW1lbnRlZCB0aGlzIGZ1bmN0aW9uYWxpdHkgaW4KICBHdXp6bGVcSHR0cFxDdXJsXFJlcXVlc3RNZWRpYXRvcgoqIFJlbW92ZWQgdGhlIG9wdGlvbmFsICRhc1N0cmluZyBwYXJhbWV0ZXIgZnJvbSBNZXNzYWdlSW50ZXJmYWNlOjpnZXRIZWFkZXIoKS4gSnVzdCBjYXN0IHRoZSBoZWFkZXIgdG8gYSBzdHJpbmcuCiogUmVtb3ZlZCB0aGUgb3B0aW9uYWwgJHRyeUNodW5rZWRUcmFuc2ZlciBvcHRpb24gZnJvbSBHdXp6bGVcSHR0cFxNZXNzYWdlXEVudGl0eUVuY2xvc2luZ1JlcXVlc3RJbnRlcmZhY2UKKiBSZW1vdmVkIHRoZSAkYXNPYmplY3RzIGFyZ3VtZW50IGZyb20gR3V6emxlXEh0dHBcTWVzc2FnZVxNZXNzYWdlSW50ZXJmYWNlOjpnZXRIZWFkZXJzKCkKKiBSZW1vdmVkIEd1enpsZVxQYXJzZXJcUGFyc2VyUmVnaXN0ZXI6OmdldCgpLiBVc2UgZ2V0UGFyc2VyKCkKKiBSZW1vdmVkIEd1enpsZVxQYXJzZXJcUGFyc2VyUmVnaXN0ZXI6OnNldCgpLiBVc2UgcmVnaXN0ZXJQYXJzZXIoKS4KKiBBbGwgcmVzcG9uc2UgaGVhZGVyIGhlbHBlciBmdW5jdGlvbnMgcmV0dXJuIGEgc3RyaW5nIHJhdGhlciB0aGFuIG1peGluZyBIZWFkZXIgb2JqZWN0cyBhbmQgc3RyaW5ncyBpbmNvbnNpc3RlbnRseQoqIFJlbW92ZWQgY1VSTCBibGFja2xpc3Qgc3VwcG9ydC4gVGhpcyBpcyBubyBsb25nZXIgbmVjZXNzYXJ5IG5vdyB0aGF0IEV4cGVjdCwgQWNjZXB0LCBldGMuIGFyZSBtYW5hZ2VkIGJ5IEd1enpsZQogIGRpcmVjdGx5IHZpYSBpbnRlcmZhY2VzCiogUmVtb3ZlZCB0aGUgaW5qZWN0aW5nIG9mIGEgcmVxdWVzdCBvYmplY3Qgb250byBhIHJlc3BvbnNlIG9iamVjdC4gVGhlIG1ldGhvZHMgdG8gZ2V0IGFuZCBzZXQgYSByZXF1ZXN0IHN0aWxsIGV4aXN0CiAgYnV0IGFyZSBhIG5vLW9wIHVudGlsIHJlbW92ZWQuCiogTW9zdCBjbGFzc2VzIHRoYXQgdXNlZCB0byByZXF1aXJlIGEgYEd1enpsZVxTZXJ2aWNlXENvbW1hbmRcQ29tbWFuZEludGVyZmFjZWAgdHlwZWhpbnQgbm93IHJlcXVlc3QgYQogIGBHdXp6bGVcU2VydmljZVxDb21tYW5kXEFycmF5Q29tbWFuZEludGVyZmFjZWAuCiogQWRkZWQgYEd1enpsZVxIdHRwXE1lc3NhZ2VcUmVxdWVzdEludGVyZmFjZTo6c3RhcnRSZXNwb25zZSgpYCB0byB0aGUgUmVxdWVzdEludGVyZmFjZSB0byBoYW5kbGUgaW5qZWN0aW5nIGEgcmVzcG9uc2UKICBvbiBhIHJlcXVlc3Qgd2hpbGUgdGhlIHJlcXVlc3QgaXMgc3RpbGwgYmVpbmcgdHJhbnNmZXJyZWQKKiBUaGUgYWJpbGl0eSB0byBjYXNlLWluc2Vuc2l0aXZlbHkgc2VhcmNoIGZvciBoZWFkZXIgdmFsdWVzCiogR3V6emxlXEh0dHBcTWVzc2FnZVxIZWFkZXI6Omhhc0V4YWN0SGVhZGVyCiogR3V6emxlXEh0dHBcTWVzc2FnZVxIZWFkZXI6OnJhdy4gVXNlIGdldEFsbCgpCiogRGVwcmVjYXRlZCBjYWNoZSBjb250cm9sIHNwZWNpZmljIG1ldGhvZHMgb24gR3V6emxlXEh0dHBcTWVzc2FnZVxBYnN0cmFjdE1lc3NhZ2UuIFVzZSB0aGUgQ2FjaGVDb250cm9sIGhlYWRlciBvYmplY3QKICBpbnN0ZWFkLgoqIGBHdXp6bGVcU2VydmljZVxDb21tYW5kXENvbW1hbmRJbnRlcmZhY2VgIG5vdyBleHRlbmRzIGZyb20gVG9BcnJheUludGVyZmFjZSBhbmQgQXJyYXlBY2Nlc3MKKiBBZGRlZCB0aGUgYWJpbGl0eSB0byBjYXN0IE1vZGVsIG9iamVjdHMgdG8gYSBzdHJpbmcgdG8gdmlldyBkZWJ1ZyBpbmZvcm1hdGlvbi4KCiMjIDMuNS4wIC0gMjAxMy0wNS0xMwoKKiBCdWc6IEZpeGVkIGEgcmVncmVzc2lvbiBzbyB0aGF0IHJlcXVlc3QgcmVzcG9uc2VzIGFyZSBwYXJzZWQgb25seSBvbmNlIHBlciBvbmNvbXBsZXRlIGV2ZW50IHJhdGhlciB0aGFuIG11bHRpcGxlIHRpbWVzCiogQnVnOiBCZXR0ZXIgY2xlYW51cCBvZiBvbmUtdGltZSBldmVudHMgYWNyb3NzIHRoZSBib2FyZCAod2hlbiBhbiBldmVudCBpcyBtZWFudCB0byBmaXJlIG9uY2UsIGl0IHdpbGwgbm93IHJlbW92ZQogIGl0c2VsZiBmcm9tIHRoZSBFdmVudERpc3BhdGNoZXIpCiogQnVnOiBgR3V6emxlXExvZ1xNZXNzYWdlRm9ybWF0dGVyYCBub3cgcHJvcGVybHkgd3JpdGVzICJ0b3RhbF90aW1lIiBhbmQgImNvbm5lY3RfdGltZSIgdmFsdWVzCiogQnVnOiBDbG9uaW5nIGFuIEVudGl0eUVuY2xvc2luZ1JlcXVlc3Qgbm93IGNsb25lcyB0aGUgRW50aXR5Qm9keSB0b28KKiBCdWc6IEZpeGVkIGFuIHVuZGVmaW5lZCBpbmRleCBlcnJvciB3aGVuIHBhcnNpbmcgbmVzdGVkIEpTT04gcmVzcG9uc2VzIHdpdGggYSBzZW50QXMgcGFyYW1ldGVyIHRoYXQgcmVmZXJlbmNlIGEKICBub24tZXhpc3RlbnQga2V5CiogQnVnOiBBbGwgX19jYWxsKCkgbWV0aG9kIGFyZ3VtZW50cyBhcmUgbm93IHJlcXVpcmVkIChoZWxwcyB3aXRoIG1vY2tpbmcgZnJhbWV3b3JrcykKKiBEZXByZWNhdGluZyBSZXNwb25zZTo6Z2V0UmVxdWVzdCgpIGFuZCBub3cgdXNpbmcgYSBzaGFsbG93IGNsb25lIG9mIGEgcmVxdWVzdCBvYmplY3QgdG8gcmVtb3ZlIGEgY2lyY3VsYXIgcmVmZXJlbmNlCiAgdG8gaGVscCB3aXRoIHJlZmNvdW50IGJhc2VkIGdhcmJhZ2UgY29sbGVjdGlvbiBvZiByZXNvdXJjZXMgY3JlYXRlZCBieSBzZW5kaW5nIGEgcmVxdWVzdAoqIERlcHJlY2F0aW5nIFpGMSBjYWNoZSBhbmQgbG9nIGFkYXB0ZXJzLiBUaGVzZSB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbi4KKiBEZXByZWNhdGluZyBgUmVzcG9uc2U6OmdldFByZXZpb3VzUmVzcG9uc2UoKWAgKG1ldGhvZCBzaWduYXR1cmUgc3RpbGwgZXhpc3RzLCBidXQgaXQncyBkZXByZWNhdGVkKS4gVXNlIHRoZQogIEhpc3RvcnlQbHVnaW4gZm9yIGEgaGlzdG9yeS4KKiBBZGRlZCBhIGByZXNwb25zZUJvZHlgIGFsaWFzIGZvciB0aGUgYHJlc3BvbnNlX2JvZHlgIGxvY2F0aW9uCiogUmVmYWN0b3JlZCBpbnRlcm5hbHMgdG8gbm8gbG9uZ2VyIHJlbHkgb24gUmVzcG9uc2U6OmdldFJlcXVlc3QoKQoqIEhpc3RvcnlQbHVnaW4gY2FuIG5vdyBiZSBjYXN0IHRvIGEgc3RyaW5nCiogSGlzdG9yeVBsdWdpbiBub3cgbG9ncyB0cmFuc2FjdGlvbnMgcmF0aGVyIHRoYW4gcmVxdWVzdHMgYW5kIHJlc3BvbnNlcyB0byBtb3JlIGFjY3VyYXRlbHkga2VlcCB0cmFjayBvZiB0aGUgcmVxdWVzdHMKICBhbmQgcmVzcG9uc2VzIHRoYXQgYXJlIHNlbnQgb3ZlciB0aGUgd2lyZQoqIEFkZGVkIGBnZXRFZmZlY3RpdmVVcmwoKWAgYW5kIGBnZXRSZWRpcmVjdENvdW50KClgIHRvIFJlc3BvbnNlIG9iamVjdHMKCiMjIDMuNC4zIC0gMjAxMy0wNC0zMAoKKiBCdWcgZml4OiBGaXhpbmcgYnVnIGludHJvZHVjZWQgaW4gMy40LjIgd2hlcmUgcmVkaXJlY3QgcmVzcG9uc2VzIGFyZSBkdXBsaWNhdGVkIG9uIHRoZSBmaW5hbCByZWRpcmVjdGVkIHJlc3BvbnNlCiogQWRkZWQgYSBjaGVjayB0byByZS1leHRyYWN0IHRoZSB0ZW1wIGNhY2VydCBidW5kbGUgZnJvbSB0aGUgcGhhciBiZWZvcmUgc2VuZGluZyBlYWNoIHJlcXVlc3QKCiMjIDMuNC4yIC0gMjAxMy0wNC0yOQoKKiBCdWcgZml4OiBTdHJlYW0gb2JqZWN0cyBub3cgd29yayBjb3JyZWN0bHkgd2l0aCAiYSIgYW5kICJhKyIgbW9kZXMKKiBCdWcgZml4OiBSZW1vdmluZyBgVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWRgIGhlYWRlciB3aGVuIGEgQ29udGVudC1MZW5ndGggaXMgcHJlc2VudAoqIEJ1ZyBmaXg6IEFzeW5jUGx1Z2luIG5vIGxvbmdlciBmb3JjZXMgSEVBRCByZXF1ZXN0cwoqIEJ1ZyBmaXg6IERhdGVUaW1lIHRpbWV6b25lcyBhcmUgbm93IHByb3Blcmx5IGhhbmRsZWQgd2hlbiB1c2luZyB0aGUgc2VydmljZSBkZXNjcmlwdGlvbiBzY2hlbWEgZm9ybWF0dGVyCiogQnVnIGZpeDogQ2FjaGVQbHVnaW4gbm93IHByb3Blcmx5IGhhbmRsZXMgc3RhbGUtaWYtZXJyb3IgZGlyZWN0aXZlcyB3aGVuIGEgcmVxdWVzdCB0byB0aGUgb3JpZ2luIHNlcnZlciBmYWlscwoqIFNldHRpbmcgYSByZXNwb25zZSBvbiBhIHJlcXVlc3Qgd2lsbCB3cml0ZSB0byB0aGUgY3VzdG9tIHJlcXVlc3QgYm9keSBmcm9tIHRoZSByZXNwb25zZSBib2R5IGlmIG9uZSBpcyBzcGVjaWZpZWQKKiBMb2dQbHVnaW4gbm93IHdyaXRlcyB0byBwaHA6Ly9vdXRwdXQgd2hlbiBTVERFUlIgaXMgdW5kZWZpbmVkCiogQWRkZWQgdGhlIGFiaWxpdHkgdG8gc2V0IG11bHRpcGxlIFBPU1QgZmlsZXMgZm9yIHRoZSBzYW1lIGtleSBpbiBhIHNpbmdsZSBjYWxsCiogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIFBPU1RzIG5vdyB1c2UgdGhlIHV0Zi04IGNoYXJzZXQgYnkgZGVmYXVsdAoqIEFkZGVkIHRoZSBhYmlsaXR5IHRvIHF1ZXVlIEN1cmxFeGNlcHRpb25zIHRvIHRoZSBNb2NrUGx1Z2luCiogQ2xlYW5lZCB1cCBob3cgbWFudWFsIHJlc3BvbnNlcyBhcmUgcXVldWVkIG9uIHJlcXVlc3RzIChyZW1vdmVkICJxdWV1ZWRfcmVzcG9uc2UiIGFuZCBub3cgdXNpbmcgcmVxdWVzdC5iZWZvcmVfc2VuZCkKKiBDb25maWd1cmF0aW9uIGxvYWRpbmcgbm93IGFsbG93cyByZW1vdGUgZmlsZXMKCiMjIDMuNC4xIC0gMjAxMy0wNC0xNgoKKiBMYXJnZSByZWZhY3RvcmluZyB0byBob3cgQ3VybE11bHRpIGhhbmRsZXMgd29yay4gVGhlcmUgaXMgbm93IGEgcHJveHkgdGhhdCBzaXRzIGluIGZyb250IG9mIGEgcG9vbCBvZiBDdXJsTXVsdGkKICBoYW5kbGVzLiBUaGlzIGdyZWF0bHkgc2ltcGxpZmllcyB0aGUgaW1wbGVtZW50YXRpb24sIGZpeGVzIGEgY291cGxlIGJ1Z3MsIGFuZCBwcm92aWRlcyBhIHNtYWxsIHBlcmZvcm1hbmNlIGJvb3N0LgoqIEV4Y2VwdGlvbnMgYXJlIG5vdyBwcm9wZXJseSBncm91cGVkIHdoZW4gc2VuZGluZyByZXF1ZXN0cyBpbiBwYXJhbGxlbAoqIFJlZGlyZWN0cyBhcmUgbm93IHByb3Blcmx5IGFnZ3JlZ2F0ZWQgd2hlbiBhIG11bHRpIHRyYW5zYWN0aW9uIGZhaWxzCiogUmVkaXJlY3RzIG5vdyBzZXQgdGhlIHJlc3BvbnNlIG9uIHRoZSBvcmlnaW5hbCBvYmplY3QgZXZlbiBpbiB0aGUgZXZlbnQgb2YgYSBmYWlsdXJlCiogQnVnIGZpeDogTW9kZWwgbmFtZXMgYXJlIG5vdyBwcm9wZXJseSBzZXQgZXZlbiB3aGVuIHVzaW5nICRyZWZzCiogQWRkZWQgc3VwcG9ydCBmb3IgUEhQIDUuNSdzIEN1cmxGaWxlIHRvIHByZXZlbnQgd2FybmluZ3Mgd2l0aCB0aGUgZGVwcmVjYXRlZCBAIHN5bnRheAoqIEFkZGVkIHN1cHBvcnQgZm9yIG9hdXRoX2NhbGxiYWNrIGluIE9BdXRoIHNpZ25hdHVyZXMKKiBBZGRlZCBzdXBwb3J0IGZvciBvYXV0aF92ZXJpZmllciBpbiBPQXV0aCBzaWduYXR1cmVzCiogQWRkZWQgc3VwcG9ydCB0byBhdHRlbXB0IHRvIHJldHJpZXZlIGEgY29tbWFuZCBmaXJzdCBsaXRlcmFsbHksIHRoZW4gdWNmaXJzdCwgdGhlIHdpdGggaW5mbGVjdGlvbgoKIyMgMy40LjAgLSAyMDEzLTA0LTExCgoqIEJ1ZyBmaXg6IFVSTHMgYXJlIG5vdyByZXNvbHZlZCBjb3JyZWN0bHkgYmFzZWQgb24gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTUuMi4gIzI4OQoqIEJ1ZyBmaXg6IEFic29sdXRlIFVSTHMgd2l0aCBhIHBhdGggaW4gYSBzZXJ2aWNlIGRlc2NyaXB0aW9uIHdpbGwgbm93IHByb3Blcmx5IG92ZXJyaWRlIHRoZSBiYXNlIFVSTC4gIzI4OQoqIEJ1ZyBmaXg6IFBhcnNpbmcgYSBxdWVyeSBzdHJpbmcgd2l0aCBhIHNpbmdsZSBQSFAgYXJyYXkgdmFsdWUgd2lsbCBub3cgcmVzdWx0IGluIGFuIGFycmF5LiAjMjYzCiogQnVnIGZpeDogQmV0dGVyIG5vcm1hbGl6YXRpb24gb2YgdGhlIFVzZXItQWdlbnQgaGVhZGVyIHRvIHByZXZlbnQgZHVwbGljYXRlIGhlYWRlcnMuICMyNjQuCiogQnVnIGZpeDogQWRkZWQgYG51bWJlcmAgdHlwZSB0byBzZXJ2aWNlIGRlc2NyaXB0aW9ucy4KKiBCdWcgZml4OiBlbXB0eSBwYXJhbWV0ZXJzIGFyZSByZW1vdmVkIGZyb20gYW4gT0F1dGggc2lnbmF0dXJlCiogQnVnIGZpeDogUmV2YWxpZGF0aW5nIGEgY2FjaGUgZW50cnkgcHJlZmVycyB0aGUgTGFzdC1Nb2RpZmllZCBvdmVyIHRoZSBEYXRlIGhlYWRlcgoqIEJ1ZyBmaXg6IEZpeGVkICJhcnJheSB0byBzdHJpbmciIGVycm9yIHdoZW4gdmFsaWRhdGluZyBhIHVuaW9uIG9mIHR5cGVzIGluIGEgc2VydmljZSBkZXNjcmlwdGlvbgoqIEJ1ZyBmaXg6IFJlbW92ZWQgY29kZSB0aGF0IGF0dGVtcHRlZCB0byBkZXRlcm1pbmUgdGhlIHNpemUgb2YgYSBzdHJlYW0gd2hlbiBkYXRhIGlzIHdyaXR0ZW4gdG8gdGhlIHN0cmVhbQoqIEJ1ZyBmaXg6IE5vdCBpbmNsdWRpbmcgYW4gYG9hdXRoX3Rva2VuYCBpZiB0aGUgdmFsdWUgaXMgbnVsbCBpbiB0aGUgT2F1dGhQbHVnaW4uCiogQnVnIGZpeDogTm93IGNvcnJlY3RseSBhZ2dyZWdhdGluZyBzdWNjZXNzZnVsIHJlcXVlc3RzIGFuZCBmYWlsZWQgcmVxdWVzdHMgaW4gQ3VybE11bHRpIHdoZW4gYSByZWRpcmVjdCBvY2N1cnMuCiogVGhlIG5ldyBkZWZhdWx0IENVUkxPUFRfVElNRU9VVCBzZXR0aW5nIGhhcyBiZWVuIGluY3JlYXNlZCB0byAxNTAgc2Vjb25kcyBzbyB0aGF0IEd1enpsZSB3b3JrcyBvbiBwb29yIGNvbm5lY3Rpb25zLgoqIEFkZGVkIGEgZmVhdHVyZSB0byBFbnRpdHlFbmNsb3NpbmdSZXF1ZXN0OjpzZXRCb2R5KCkgdGhhdCB3aWxsIGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBDb250ZW50LVR5cGUgb2YgdGhlIHJlcXVlc3QgaWYKICB0aGUgQ29udGVudC1UeXBlIGNhbiBiZSBkZXRlcm1pbmVkIGJhc2VkIG9uIHRoZSBlbnRpdHkgYm9keSBvciB0aGUgcGF0aCBvZiB0aGUgcmVxdWVzdC4KKiBBZGRlZCB0aGUgYWJpbGl0eSB0byBvdmVyd3JpdGUgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBpbiBhIGNsaWVudCB3aGVuIGdyYWJiaW5nIGEgdGhyb3dhd2F5IGNsaWVudCBmcm9tIGEgYnVpbGRlci4KKiBBZGRlZCBzdXBwb3J0IGZvciBhIFBTUi0zIExvZ0FkYXB0ZXIuCiogQWRkZWQgYSBgY29tbWFuZC5hZnRlcl9wcmVwYXJlYCBldmVudAoqIEFkZGVkIGBvYXV0aF9jYWxsYmFja2AgcGFyYW1ldGVyIHRvIHRoZSBPYXV0aFBsdWdpbgoqIEFkZGVkIHRoZSBhYmlsaXR5IHRvIGNyZWF0ZSBhIGN1c3RvbSBzdHJlYW0gY2xhc3Mgd2hlbiB1c2luZyBhIHN0cmVhbSBmYWN0b3J5CiogQWRkZWQgYSBDYWNoaW5nRW50aXR5Qm9keSBkZWNvcmF0b3IKKiBBZGRlZCBzdXBwb3J0IGZvciBgYWRkaXRpb25hbFBhcmFtZXRlcnNgIGluIHNlcnZpY2UgZGVzY3JpcHRpb25zIHRvIGRlZmluZSBob3cgY3VzdG9tIHBhcmFtZXRlcnMgYXJlIHNlcmlhbGl6ZWQuCiogVGhlIGJ1bmRsZWQgU1NMIGNlcnRpZmljYXRlIGlzIG5vdyBwcm92aWRlZCBpbiB0aGUgcGhhciBmaWxlIGFuZCBleHRyYWN0ZWQgd2hlbiBydW5uaW5nIEd1enpsZSBmcm9tIGEgcGhhci4KKiBZb3UgY2FuIG5vdyBzZW5kIGFueSBFbnRpdHlFbmNsb3NpbmdSZXF1ZXN0IHdpdGggUE9TVCBmaWVsZHMgb3IgUE9TVCBmaWxlcyBhbmQgY1VSTCB3aWxsIGhhbmRsZSBjcmVhdGluZyBib2RpZXMKKiBQT1NUIHJlcXVlc3RzIHVzaW5nIGEgY3VzdG9tIGVudGl0eSBib2R5IGFyZSBub3cgdHJlYXRlZCBleGFjdGx5IGxpa2UgUFVUIHJlcXVlc3RzIGJ1dCB3aXRoIGEgY3VzdG9tIGNVUkwgbWV0aG9kLiBUaGlzCiAgbWVhbnMgdGhhdCB0aGUgcmVkaXJlY3QgYmVoYXZpb3Igb2YgUE9TVCByZXF1ZXN0cyB3aXRoIGN1c3RvbSBib2RpZXMgd2lsbCBub3QgYmUgdGhlIHNhbWUgYXMgUE9TVCByZXF1ZXN0cyB0aGF0IHVzZQogIFBPU1QgZmllbGRzIG9yIGZpbGVzICh0aGUgbGF0dGVyIGlzIG9ubHkgdXNlZCB3aGVuIGVtdWxhdGluZyBhIGZvcm0gUE9TVCBpbiB0aGUgYnJvd3NlcikuCiogTG90cyBvZiBjbGVhbnVwIHRvIEN1cmxIYW5kbGU6OmZhY3RvcnkgYW5kIFJlcXVlc3RGYWN0b3J5OjpjcmVhdGVSZXF1ZXN0CgojIyAzLjMuMSAtIDIwMTMtMDMtMTAKCiogQWRkZWQgdGhlIGFiaWxpdHkgdG8gY3JlYXRlIFBIUCBzdHJlYW1pbmcgcmVzcG9uc2VzIGZyb20gSFRUUCByZXF1ZXN0cwoqIEJ1ZyBmaXg6IFJ1bm5pbmcgYW55IGZpbHRlcnMgd2hlbiBwYXJzaW5nIHJlc3BvbnNlIGhlYWRlcnMgd2l0aCBzZXJ2aWNlIGRlc2NyaXB0aW9ucwoqIEJ1ZyBmaXg6IE9hdXRoUGx1Z2luIGZpeGVzIHRvIGFsbG93IGZvciBtdWx0aS1kaW1lbnNpb25hbCBhcnJheSBzaWduaW5nLCBhbmQgc29ydGluZyBwYXJhbWV0ZXJzIGJlZm9yZSBzaWduaW5nCiogQnVnIGZpeDogUmVtb3ZlZCB0aGUgYWRkaW5nIG9mIGRlZmF1bHQgZW1wdHkgYXJyYXlzIGFuZCBmYWxzZSBCb29sZWFucyB0byByZXNwb25zZXMgaW4gb3JkZXIgdG8gYmUgY29uc2lzdGVudCBhY3Jvc3MKICByZXNwb25zZSBsb2NhdGlvbiB2aXNpdG9ycy4KKiBCdWcgZml4OiBSZW1vdmVkIHRoZSBwb3NzaWJpbGl0eSBvZiBjcmVhdGluZyBjb25maWd1cmF0aW9uIGZpbGVzIHdpdGggY2lyY3VsYXIgZGVwZW5kZW5jaWVzCiogUmVxdWVzdEZhY3Rvcnk6OmNyZWF0ZSgpIG5vdyB1c2VzIHRoZSBrZXkgb2YgYSBQT1NUIGZpbGUgd2hlbiBzZXR0aW5nIHRoZSBQT1NUIGZpbGUgbmFtZQoqIEFkZGVkIHhtbEFsbG93RW1wdHkgdG8gc2VyaWFsaXplIGFuIFhNTCBib2R5IGV2ZW4gaWYgbm8gWE1MIHNwZWNpZmljIHBhcmFtZXRlcnMgYXJlIHNldAoKIyMgMy4zLjAgLSAyMDEzLTAzLTAzCgoqIEEgbGFyZ2UgbnVtYmVyIG9mIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMgaGF2ZSBiZWVuIG1hZGUKKiBCdWcgZml4OiBBZGRlZCAnd2InIGFzIGEgdmFsaWQgd3JpdGUgbW9kZSBmb3Igc3RyZWFtcwoqIEJ1ZyBmaXg6IGBHdXp6bGVcSHR0cFxNZXNzYWdlXFJlc3BvbnNlOjpqc29uKClgIG5vdyBhbGxvd3Mgc2NhbGFyIHZhbHVlcyB0byBiZSByZXR1cm5lZAoqIEJ1ZyBmaXg6IEZpeGVkIGJ1ZyBpbiBgR3V6emxlXEh0dHBcTWVzc2FnZVxSZXNwb25zZWAgd2hlcmUgd3JhcHBpbmcgcXVvdGVzIHdlcmUgc3RyaXBwZWQgZnJvbSBgZ2V0RXRhZygpYAoqIEJDOiBSZW1vdmVkIGBHdXp6bGVcSHR0cFxVdGlsc2AgY2xhc3MKKiBCQzogU2V0dGluZyBhIHNlcnZpY2UgZGVzY3JpcHRpb24gb24gYSBjbGllbnQgd2lsbCBubyBsb25nZXIgbW9kaWZ5IHRoZSBjbGllbnQncyBjb21tYW5kIGZhY3Rvcmllcy4KKiBCQzogRW1pdHRpbmcgSU8gZXZlbnRzIGZyb20gYSBSZXF1ZXN0TWVkaWF0b3IgaXMgbm93IGEgcGFyYW1ldGVyIHRoYXQgbXVzdCBiZSBzZXQgaW4gYSByZXF1ZXN0J3MgY3VybCBvcHRpb25zIHVzaW5nCiAgdGhlICdlbWl0X2lvJyBrZXkuIFRoaXMgd2FzIHByZXZpb3VzbHkgc2V0IHVuZGVyIGEgcmVxdWVzdCdzIHBhcmFtZXRlcnMgdXNpbmcgJ2N1cmwuZW1pdF9pbycKKiBCQzogYEd1enpsZVxTdHJlYW1cU3RyZWFtOjpnZXRXcmFwcGVyKClgIGFuZCBgR3V6emxlXFN0cmVhbVxTdHJlYW06OmdldFN0ZWFtVHlwZSgpYCBhcmUgbm8gbG9uZ2VyIGNvbnZlcnRlZCB0bwogIGxvd2VyY2FzZQoqIE9wZXJhdGlvbiBwYXJhbWV0ZXIgb2JqZWN0cyBhcmUgbm93IGxhenkgbG9hZGVkIGludGVybmFsbHkKKiBBZGRlZCBFcnJvclJlc3BvbnNlUGx1Z2luIHRoYXQgY2FuIHRocm93IGVycm9ycyBmb3IgcmVzcG9uc2VzIGRlZmluZWQgaW4gc2VydmljZSBkZXNjcmlwdGlvbiBvcGVyYXRpb25zJyBlcnJvclJlc3BvbnNlcwoqIEFkZGVkIHN1cHBvcnQgZm9yIGluc3RhbnRpYXRpbmcgcmVzcG9uc2VUeXBlPWNsYXNzIHJlc3BvbnNlQ2xhc3MgY2xhc3Nlcy4gQ2xhc3NlcyBtdXN0IGltcGxlbWVudAogIGBHdXp6bGVcU2VydmljZVxDb21tYW5kXFJlc3BvbnNlQ2xhc3NJbnRlcmZhY2VgCiogQWRkZWQgc3VwcG9ydCBmb3IgYWRkaXRpb25hbFByb3BlcnRpZXMgZm9yIHRvcC1sZXZlbCBwYXJhbWV0ZXJzIGluIHJlc3BvbnNlVHlwZT1tb2RlbCByZXNwb25zZUNsYXNzZXMuIFRoZXNlCiAgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIGFsc28gc3VwcG9ydCBsb2NhdGlvbnMgYW5kIGNhbiBiZSB1c2VkIHRvIHBhcnNlIEpTT04gcmVzcG9uc2VzIHdoZXJlIHRoZSBvdXRlcm1vc3QgcGFydCBvZiB0aGUKICBKU09OIGlzIGFuIGFycmF5CiogQWRkZWQgc3VwcG9ydCBmb3IgbmVzdGVkIHJlbmFtaW5nIG9mIEpTT04gbW9kZWxzIChyZW5hbWUgc2VudEFzIHRvIG5hbWUpCiogQ2FjaGVQbHVnaW4KICAgICogQWRkZWQgc3VwcG9ydCBmb3Igc3RhbGUtaWYtZXJyb3Igc28gdGhhdCB0aGUgQ2FjaGVQbHVnaW4gY2FuIG5vdyBzZXJ2ZSBzdGFsZSBjb250ZW50IGZyb20gdGhlIGNhY2hlIG9uIGVycm9yCiAgICAqIERlYnVnIGhlYWRlcnMgY2FuIG5vdyBhZGRlZCB0byBjYWNoZWQgcmVzcG9uc2UgaW4gdGhlIENhY2hlUGx1Z2luCgojIyAzLjIuMCAtIDIwMTMtMDItMTQKCiogQ3VybE11bHRpIGlzIG5vIGxvbmdlciByZXVzZWQgZ2xvYmFsbHkuIEEgbmV3IG11bHRpIG9iamVjdCBpcyBjcmVhdGVkIHBlci1jbGllbnQuIFRoaXMgaGVscHMgdG8gaXNvbGF0ZSBjbGllbnRzLgoqIFVSTHMgd2l0aCBubyBwYXRoIG5vIGxvbmdlciBjb250YWluIGEgIi8iIGJ5IGRlZmF1bHQKKiBHdXp6bGVcSHR0cFxRdWVyeVN0cmluZyBkb2VzIG5vIGxvbmdlciBtYW5hZ2VzIHRoZSBsZWFkaW5nICI/Ii4gVGhpcyBpcyBub3cgaGFuZGxlZCBpbiBHdXp6bGVcSHR0cFxVcmwuCiogQmFkUmVzcG9uc2VFeGNlcHRpb24gbm8gbG9uZ2VyIGluY2x1ZGVzIHRoZSBmdWxsIHJlcXVlc3QgYW5kIHJlc3BvbnNlIG1lc3NhZ2UKKiBBZGRpbmcgc2V0RGF0YSgpIHRvIEd1enpsZVxTZXJ2aWNlXERlc2NyaXB0aW9uXFNlcnZpY2VEZXNjcmlwdGlvbkludGVyZmFjZQoqIEFkZGluZyBnZXRSZXNwb25zZUJvZHkoKSB0byBHdXp6bGVcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2UKKiBWYXJpb3VzIHVwZGF0ZXMgdG8gY2xhc3NlcyB0byB1c2UgU2VydmljZURlc2NyaXB0aW9uSW50ZXJmYWNlIHR5cGUgaGludHMgcmF0aGVyIHRoYW4gU2VydmljZURlc2NyaXB0aW9uCiogSGVhZGVyIHZhbHVlcyBjYW4gbm93IGJlIG5vcm1hbGl6ZWQgaW50byBkaXN0aW5jdCB2YWx1ZXMgd2hlbiBtdWx0aXBsZSBoZWFkZXJzIGFyZSBjb21iaW5lZCB3aXRoIGEgY29tbWEgc2VwYXJhdGVkIGxpc3QKKiB4bWxFbmNvZGluZyBjYW4gbm93IGJlIGN1c3RvbWl6ZWQgZm9yIHRoZSBYTUwgZGVjbGFyYXRpb24gb2YgYSBYTUwgc2VydmljZSBkZXNjcmlwdGlvbiBvcGVyYXRpb24KKiBHdXp6bGVcSHR0cFxRdWVyeVN0cmluZyBub3cgdXNlcyBHdXp6bGVcSHR0cFxRdWVyeUFnZ3JlZ2F0b3JcUXVlcnlBZ2dyZWdhdG9ySW50ZXJmYWNlIG9iamVjdHMgdG8gYWRkIGN1c3RvbSB2YWx1ZQogIGFnZ3JlZ2F0aW9uIGFuZCBubyBsb25nZXIgdXNlcyBjYWxsYmFja3MKKiBUaGUgVVJMIGVuY29kaW5nIGltcGxlbWVudGF0aW9uIG9mIEd1enpsZVxIdHRwXFF1ZXJ5U3RyaW5nIGNhbiBub3cgYmUgY3VzdG9taXplZAoqIEJ1ZyBmaXg6IEZpbHRlcnMgd2VyZSBub3QgYWx3YXlzIGludm9rZWQgZm9yIGFycmF5IHNlcnZpY2UgZGVzY3JpcHRpb24gcGFyYW1ldGVycwoqIEJ1ZyBmaXg6IFJlZGlyZWN0cyBub3cgdXNlIGEgdGFyZ2V0IHJlc3BvbnNlIGJvZHkgcmF0aGVyIHRoYW4gYSB0ZW1wb3JhcnkgcmVzcG9uc2UgYm9keQoqIEJ1ZyBmaXg6IFRoZSBkZWZhdWx0IGV4cG9uZW50aWFsIGJhY2tvZmYgQmFja29mZlBsdWdpbiB3YXMgbm90IGdpdmluZyB3aGVuIHRoZSByZXF1ZXN0IHRocmVzaG9sZCB3YXMgZXhjZWVkZWQKKiBCdWcgZml4OiBHdXp6bGUgbm93IHRha2VzIHRoZSBmaXJzdCBmb3VuZCB2YWx1ZSB3aGVuIGdyYWJiaW5nIENhY2hlLUNvbnRyb2wgZGlyZWN0aXZlcwoKIyMgMy4xLjIgLSAyMDEzLTAxLTI3CgoqIFJlZmFjdG9yZWQgaG93IG9wZXJhdGlvbiByZXNwb25zZXMgYXJlIHBhcnNlZC4gVmlzaXRvcnMgbm93IGluY2x1ZGUgYSBiZWZvcmUoKSBtZXRob2QgcmVzcG9uc2libGUgZm9yIHBhcnNpbmcgdGhlCiAgcmVzcG9uc2UgYm9keS4gRm9yIGV4YW1wbGUsIHRoZSBYbWxWaXNpdG9yIG5vdyBwYXJzZXMgdGhlIFhNTCByZXNwb25zZSBpbnRvIGFuIGFycmF5IGluIHRoZSBiZWZvcmUoKSBtZXRob2QuCiogRml4ZWQgYW4gaXNzdWUgd2hlcmUgY1VSTCB3b3VsZCBub3QgYXV0b21hdGljYWxseSBkZWNvbXByZXNzIHJlc3BvbnNlcyB3aGVuIHRoZSBBY2NlcHQtRW5jb2RpbmcgaGVhZGVyIHdhcyBzZW50CiogQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVCBpcyBuZXZlciBzZXQgdG8gMSBiZWNhdXNlIGl0IGlzIGRlcHJlY2F0ZWQgKHNlZSA1ZTBmZjJlZjIwZjgzOWUxOWQxZWViMjk4ZjkwYmEzNTk4Nzg0NDQ0KQoqIEZpeGVkIGEgYnVnIHdoZXJlIHJlZGlyZWN0IHJlc3BvbnNlcyB3ZXJlIG5vdCBjaGFpbmVkIGNvcnJlY3RseSB1c2luZyBnZXRQcmV2aW91c1Jlc3BvbnNlKCkKKiBTZXR0aW5nIGRlZmF1bHQgaGVhZGVycyBvbiBhIGNsaWVudCBhZnRlciBzZXR0aW5nIHRoZSB1c2VyLWFnZW50IHdpbGwgbm90IGVyYXNlIHRoZSB1c2VyLWFnZW50IHNldHRpbmcKCiMjIDMuMS4xIC0gMjAxMy0wMS0yMAoKKiBBZGRpbmcgd2lsZGNhcmQgc3VwcG9ydCB0byBHdXp6bGVcQ29tbW9uXENvbGxlY3Rpb246OmdldFBhdGgoKQoqIEFkZGluZyBhbGlhcyBzdXBwb3J0IHRvIFNlcnZpY2VCdWlsZGVyIGNvbmZpZ3MKKiBBZGRpbmcgR3V6emxlXFNlcnZpY2VcUmVzb3VyY2VcQ29tcG9zaXRlUmVzb3VyY2VJdGVyYXRvckZhY3RvcnkgYW5kIGNsZWFuaW5nIHVwIGZhY3RvcnkgaW50ZXJmYWNlCgojIyAzLjEuMCAtIDIwMTMtMDEtMTIKCiogQkM6IEN1cmxFeGNlcHRpb24gbm93IGV4dGVuZHMgZnJvbSBSZXF1ZXN0RXhjZXB0aW9uIHJhdGhlciB0aGFuIEJhZFJlc3BvbnNlRXhjZXB0aW9uCiogQkM6IFJlbmFtZWQgR3V6emxlXFBsdWdpblxDYWNoZVxDYW5DYWNoZVN0cmF0ZWd5SW50ZXJmYWNlOjpjYW5DYWNoZSgpIHRvIGNhbkNhY2hlUmVxdWVzdCgpIGFuZCBhZGRlZCBDYW5DYWNoZVJlc3BvbnNlKCkKKiBBZGRlZCBnZXREYXRhIHRvIFNlcnZpY2VEZXNjcmlwdGlvbkludGVyZmFjZQoqIEFkZGVkIGNvbnRleHQgYXJyYXkgdG8gUmVxdWVzdEludGVyZmFjZTo6c2V0U3RhdGUoKQoqIEJ1ZzogUmVtb3ZpbmcgaGFyZCBkZXBlbmRlbmN5IG9uIHRoZSBCYWNrb2ZmUGx1Z2luIGZyb20gR3V6emxlXEh0dHAKKiBCdWc6IEFkZGluZyByZXF1aXJlZCBjb250ZW50LXR5cGUgd2hlbiBKU09OIHJlcXVlc3QgdmlzaXRvciBhZGRzIEpTT04gdG8gYSBjb21tYW5kCiogQnVnOiBGaXhpbmcgdGhlIHNlcmlhbGl6YXRpb24gb2YgYSBzZXJ2aWNlIGRlc2NyaXB0aW9uIHdpdGggY3VzdG9tIGRhdGEKKiBNYWRlIGl0IGVhc2llciB0byBkZWFsIHdpdGggZXhjZXB0aW9ucyB0aHJvd24gd2hlbiB0cmFuc2ZlcnJpbmcgY29tbWFuZHMgb3IgcmVxdWVzdHMgaW4gcGFyYWxsZWwgYnkgcHJvdmlkaW5nCiAgYW4gYXJyYXkgb2Ygc3VjY2Vzc2Z1bCBhbmQgZmFpbGVkIHJlc3BvbnNlcwoqIE1vdmVkIGdldFBhdGggZnJvbSBHdXp6bGVcU2VydmljZVxSZXNvdXJjZVxNb2RlbCB0byBHdXp6bGVcQ29tbW9uXENvbGxlY3Rpb24KKiBBZGRlZCBHdXp6bGVcSHR0cFxJb0VtaXR0aW5nRW50aXR5Qm9keQoqIE1vdmVkIGNvbW1hbmQgZmlsdHJhdGlvbiBmcm9tIHZhbGlkYXRvcnMgdG8gbG9jYXRpb24gdmlzaXRvcnMKKiBBZGRlZCBgZXh0ZW5kc2AgYXR0cmlidXRlcyB0byBzZXJ2aWNlIGRlc2NyaXB0aW9uIHBhcmFtZXRlcnMKKiBBZGRlZCBnZXRNb2RlbHMgdG8gU2VydmljZURlc2NyaXB0aW9uSW50ZXJmYWNlCgojIyAzLjAuNyAtIDIwMTItMTItMTkKCiogRml4aW5nIHBoYXIgZGV0ZWN0aW9uIHdoZW4gZm9yY2luZyBhIGNhY2VydCB0byBzeXN0ZW0gaWYgbnVsbCBvciB0cnVlCiogQWxsb3dpbmcgZmlsZW5hbWUgdG8gYmUgcGFzc2VkIHRvIGBHdXp6bGVcSHR0cFxNZXNzYWdlXFJlcXVlc3Q6OnNldFJlc3BvbnNlQm9keSgpYAoqIENsZWFuaW5nIHVwIGBHdXp6bGVcQ29tbW9uXENvbGxlY3Rpb246OmluamVjdGAgbWV0aG9kCiogQWRkaW5nIGEgcmVzcG9uc2VfYm9keSBsb2NhdGlvbiB0byBzZXJ2aWNlIGRlc2NyaXB0aW9ucwoKIyMgMy4wLjYgLSAyMDEyLTEyLTA5CgoqIEN1cmxNdWx0aSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMKKiBBZGRpbmcgc2V0RXJyb3JSZXNwb25zZXMoKSB0byBPcGVyYXRpb24KKiBjb21wb3Nlci5qc29uIHR3ZWFrcwoKIyMgMy4wLjUgLSAyMDEyLTExLTE4CgoqIEJ1ZzogRml4aW5nIGFuIGluZmluaXRlIHJlY3Vyc2lvbiBidWcgY2F1c2VkIGZyb20gcmV2YWxpZGF0aW5nIHdpdGggdGhlIENhY2hlUGx1Z2luCiogQnVnOiBSZXNwb25zZSBib2R5IGNhbiBub3cgYmUgYSBzdHJpbmcgY29udGFpbmluZyAiMCIKKiBCdWc6IFVzaW5nIEd1enpsZSBpbnNpZGUgb2YgYSBwaGFyIHVzZXMgc3lzdGVtIGJ5IGRlZmF1bHQgYnV0IG5vdyBhbGxvd3MgZm9yIGEgY3VzdG9tIGNhY2VydAoqIEJ1ZzogUXVlcnlTdHJpbmc6OmZyb21TdHJpbmcgbm93IHByb3Blcmx5IHBhcnNlcyBxdWVyeSBzdHJpbmcgcGFyYW1ldGVycyB0aGF0IGNvbnRhaW4gZXF1YWwgc2lnbnMKKiBBZGRlZCBzdXBwb3J0IGZvciBYTUwgYXR0cmlidXRlcyBpbiBzZXJ2aWNlIGRlc2NyaXB0aW9uIHJlc3BvbnNlcwoqIERlZmF1bHRSZXF1ZXN0U2VyaWFsaXplciBub3cgc3VwcG9ydHMgYXJyYXkgVVJJIHBhcmFtZXRlciB2YWx1ZXMgZm9yIFVSSSB0ZW1wbGF0ZSBleHBhbnNpb24KKiBBZGRlZCBiZXR0ZXIgbWltZXR5cGUgZ3Vlc3NpbmcgdG8gcmVxdWVzdHMgYW5kIHBvc3QgZmlsZXMKCiMjIDMuMC40IC0gMjAxMi0xMS0xMQoKKiBCdWc6IEZpeGVkIGEgYnVnIHdoZW4gYWRkaW5nIG11bHRpcGxlIGNvb2tpZXMgdG8gYSByZXF1ZXN0IHRvIHVzZSB0aGUgY29ycmVjdCBnbHVlIHZhbHVlCiogQnVnOiBDb29raWVzIGNhbiBub3cgYmUgYWRkZWQgdGhhdCBoYXZlIGEgbmFtZSwgZG9tYWluLCBvciB2YWx1ZSBzZXQgdG8gIjAiCiogQnVnOiBVc2luZyB0aGUgc3lzdGVtIGNhY2VydCBidW5kbGUgd2hlbiB1c2luZyB0aGUgUGhhcgoqIEFkZGVkIGpzb24gYW5kIHhtbCBtZXRob2RzIHRvIFJlc3BvbnNlIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHBhcnNlIEpTT04gYW5kIFhNTCByZXNwb25zZSBkYXRhIGludG8gZGF0YSBzdHJ1Y3R1cmVzCiogRW5oYW5jZWQgY29va2llIGphciBkZS1kdXBsaWNhdGlvbgoqIEFkZGVkIHRoZSBhYmlsaXR5IHRvIGVuYWJsZSBzdHJpY3QgY29va2llIGphcnMgdGhhdCB0aHJvdyBleGNlcHRpb25zIHdoZW4gaW52YWxpZCBjb29raWVzIGFyZSBhZGRlZAoqIEFkZGVkIHNldFN0cmVhbSB0byBTdHJlYW1JbnRlcmZhY2UgdG8gYWN0dWFsbHkgbWFrZSBpdCBwb3NzaWJsZSB0byBpbXBsZW1lbnQgY3VzdG9tIHJld2luZCBiZWhhdmlvciBmb3IgZW50aXR5IGJvZGllcwoqIEFkZGVkIHRoZSBhYmlsaXR5IHRvIGNyZWF0ZSBhbnkgc29ydCBvZiBoYXNoIGZvciBhIHN0cmVhbSByYXRoZXIgdGhhbiBqdXN0IGFuIE1ENSBoYXNoCgojIyAzLjAuMyAtIDIwMTItMTEtMDQKCiogSW1wbGVtZW50aW5nIHJlZGlyZWN0cyBpbiBQSFAgcmF0aGVyIHRoYW4gY1VSTAoqIEFkZGVkIFBFQ0wgVVJJIHRlbXBsYXRlIGV4dGVuc2lvbiBhbmQgdXNpbmcgYXMgZGVmYXVsdCBwYXJzZXIgaWYgYXZhaWxhYmxlCiogQnVnOiBGaXhlZCBDb250ZW50LUxlbmd0aCBwYXJzaW5nIG9mIFJlc3BvbnNlIGZhY3RvcnkKKiBBZGRpbmcgcmV3aW5kKCkgbWV0aG9kIHRvIGVudGl0eSBib2RpZXMgYW5kIHN0cmVhbXMuIEFsbG93cyBmb3IgY3VzdG9tIHJld2luZGluZyBvZiBub24tcmVwZWF0YWJsZSBzdHJlYW1zLgoqIEFkZGluZyBUb0FycmF5SW50ZXJmYWNlIHRocm91Z2hvdXQgbGlicmFyeQoqIEZpeGluZyBPYXV0aFBsdWdpbiB0byBjcmVhdGUgdW5pcXVlIG5vbmNlIHZhbHVlcyBwZXIgcmVxdWVzdAoKIyMgMy4wLjIgLSAyMDEyLTEwLTI1CgoqIE1hZ2ljIG1ldGhvZHMgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdCBvbiBjbGllbnRzCiogTWFnaWMgbWV0aG9kcyByZXR1cm4gdGhlIHJlc3VsdCBvZiBhIGNvbW1hbmQKKiBTZXJ2aWNlIGNsaWVudHMgbm8gbG9uZ2VyIHJlcXVpcmUgYSBiYXNlX3VybCBvcHRpb24gaW4gdGhlIGZhY3RvcnkKKiBCdWc6IEZpeGVkIGFuIGlzc3VlIHdpdGggVVJJIHRlbXBsYXRlcyB3aGVyZSBudWxsIHRlbXBsYXRlIHZhcmlhYmxlcyB3ZXJlIGJlaW5nIGV4cGFuZGVkCgojIyAzLjAuMSAtIDIwMTItMTAtMjIKCiogTW9kZWxzIGNhbiBub3cgYmUgdXNlZCBsaWtlIHJlZ3VsYXIgY29sbGVjdGlvbiBvYmplY3RzIGJ5IGNhbGxpbmcgZmlsdGVyLCBtYXAsIGV0Yy4KKiBNb2RlbHMgbm8gbG9uZ2VyIHJlcXVpcmUgYSBQYXJhbWV0ZXIgc3RydWN0dXJlIG9yIGluaXRpYWwgZGF0YSBpbiB0aGUgY29uc3RydWN0b3IKKiBBZGRlZCBhIGN1c3RvbSBBcHBlbmRJdGVyYXRvciB0byBnZXQgYXJvdW5kIGEgUEhQIGJ1ZyB3aXRoIHRoZSBgXEFwcGVuZEl0ZXJhdG9yYAoKIyMgMy4wLjAgLSAyMDEyLTEwLTE1CgoqIFJld3JvdGUgc2VydmljZSBkZXNjcmlwdGlvbiBmb3JtYXQgdG8gYmUgYmFzZWQgb24gU3dhZ2dlcgogICAgKiBOb3cgYmFzZWQgb24gSlNPTiBzY2hlbWEKICAgICogQWRkZWQgbmVzdGVkIGlucHV0IHN0cnVjdHVyZXMgYW5kIG5lc3RlZCByZXNwb25zZSBtb2RlbHMKICAgICogU3VwcG9ydCBmb3IgSlNPTiBhbmQgWE1MIGlucHV0IGFuZCBvdXRwdXQgbW9kZWxzCiAgICAqIFJlbmFtZWQgYGNvbW1hbmRzYCB0byBgb3BlcmF0aW9uc2AKICAgICogUmVtb3ZlZCBkb3QgY2xhc3Mgbm90YXRpb24KICAgICogUmVtb3ZlZCBjdXN0b20gdHlwZXMKKiBCcm9rZSB0aGUgcHJvamVjdCBpbnRvIHNtYWxsZXIgdG9wLWxldmVsIG5hbWVzcGFjZXMgdG8gYmUgbW9yZSBjb21wb25lbnQgZnJpZW5kbHkKKiBSZW1vdmVkIHN1cHBvcnQgZm9yIFhNTCBjb25maWdzIGFuZCBkZXNjcmlwdGlvbnMuIFVzZSBhcnJheXMgb3IgSlNPTiBmaWxlcy4KKiBSZW1vdmVkIHRoZSBWYWxpZGF0aW9uIGNvbXBvbmVudCBhbmQgSW5zcGVjdG9yCiogTW92ZWQgYWxsIGNvb2tpZSBjb2RlIHRvIEd1enpsZVxQbHVnaW5cQ29va2llCiogTWFnaWMgbWV0aG9kcyBvbiBhIEd1enpsZVxTZXJ2aWNlXENsaWVudCBub3cgcmV0dXJuIHRoZSBjb21tYW5kIHVuLWV4ZWN1dGVkLgoqIENhbGxpbmcgZ2V0UmVzdWx0KCkgb3IgZ2V0UmVzcG9uc2UoKSBvbiBhIGNvbW1hbmQgd2lsbCBsYXppbHkgZXhlY3V0ZSB0aGUgY29tbWFuZCBpZiBuZWVkZWQuCiogTm93IHNoaXBwaW5nIHdpdGggY1VSTCdzIENBIGNlcnRzIGFuZCB1c2luZyBpdCBieSBkZWZhdWx0CiogQWRkZWQgcHJldmlvdXNSZXNwb25zZSgpIG1ldGhvZCB0byByZXNwb25zZSBvYmplY3RzCiogTm8gbG9uZ2VyIHNlbmRpbmcgQWNjZXB0IGFuZCBBY2NlcHQtRW5jb2RpbmcgaGVhZGVycyBvbiBldmVyeSByZXF1ZXN0CiogT25seSBzZW5kaW5nIGFuIEV4cGVjdCBoZWFkZXIgYnkgZGVmYXVsdCB3aGVuIGEgcGF5bG9hZCBpcyBncmVhdGVyIHRoYW4gMU1CCiogQWRkZWQvbW92ZWQgY2xpZW50IG9wdGlvbnM6CiAgICAqIGN1cmwuYmxhY2tsaXN0IHRvIGN1cmwub3B0aW9uLmJsYWNrbGlzdAogICAgKiBBZGRlZCBzc2wuY2VydGlmaWNhdGVfYXV0aG9yaXR5CiogQWRkZWQgYSBHdXp6bGVcSXRlcmF0b3IgY29tcG9uZW50CiogTW92ZWQgcGx1Z2lucyBmcm9tIEd1enpsZVxIdHRwXFBsdWdpbiB0byBHdXp6bGVcUGx1Z2luCiogQWRkZWQgYSBtb3JlIHJvYnVzdCBiYWNrb2ZmIHJldHJ5IHN0cmF0ZWd5IChyZXBsYWNlZCB0aGUgRXhwb25lbnRpYWxCYWNrb2ZmUGx1Z2luKQoqIEFkZGVkIGEgbW9yZSByb2J1c3QgY2FjaGluZyBwbHVnaW4KKiBBZGRlZCBzZXRCb2R5IHRvIHJlc3BvbnNlIG9iamVjdHMKKiBVcGRhdGluZyBMb2dQbHVnaW4gdG8gdXNlIGEgbW9yZSBmbGV4aWJsZSBNZXNzYWdlRm9ybWF0dGVyCiogQWRkZWQgYSBjb21wbGV0ZWx5IHJldmFtcGVkIGJ1aWxkIHByb2Nlc3MKKiBDbGVhbmluZyB1cCBDb2xsZWN0aW9uIGNsYXNzIGFuZCByZW1vdmluZyBkZWZhdWx0IHZhbHVlcyBmcm9tIHRoZSBnZXQgbWV0aG9kCiogRml4ZWQgWkYyIGNhY2hlIGFkYXB0ZXJzCgojIyAyLjguOCAtIDIwMTItMTAtMTUKCiogQnVnOiBGaXhlZCBhIGNvb2tpZSBpc3N1ZSB0aGF0IGNhdXNlZCBkb3QgcHJlZml4ZWQgZG9tYWlucyB0byBub3QgbWF0Y2ggd2hlcmUgcG9wdWxhciBicm93c2VycyBkaWQKCiMjIDIuOC43IC0gMjAxMi0wOS0zMAoKKiBCdWc6IEZpeGVkIGNvbmZpZyBmaWxlIGFsaWFzZXMgZm9yIEpTT04gaW5jbHVkZXMKKiBCdWc6IEZpeGVkIGNvb2tpZSBidWcgb24gYSByZXF1ZXN0IG9iamVjdCBieSB1c2luZyBDb29raWVQYXJzZXIgdG8gcGFyc2UgY29va2llcyBvbiByZXF1ZXN0cwoqIEJ1ZzogUmVtb3ZpbmcgdGhlIHBhdGggdG8gYSBmaWxlIHdoZW4gc2VuZGluZyBhIENvbnRlbnQtRGlzcG9zaXRpb24gaGVhZGVyIG9uIGEgUE9TVCB1cGxvYWQKKiBCdWc6IEhhcmRlbmluZyByZXF1ZXN0IGFuZCByZXNwb25zZSBwYXJzaW5nIHRvIGFjY291bnQgZm9yIG1pc3NpbmcgcGFydHMKKiBCdWc6IEZpeGVkIFBFQVIgcGFja2FnaW5nCiogQnVnOiBGaXhlZCBSZXF1ZXN0OjpnZXRJbmZvCiogQnVnOiBGaXhlZCBjYXNlcyB3aGVyZSBDVVJMTV9DQUxMX01VTFRJX1BFUkZPUk0gcmV0dXJuIGNvZGVzIHdlcmUgY2F1c2luZyBjdXJsIHRyYW5zYWN0aW9ucyB0byBmYWlsCiogQWRkaW5nIHRoZSBhYmlsaXR5IGZvciB0aGUgbmFtZXNwYWNlIEl0ZXJhdG9yIGZhY3RvcnkgdG8gbG9vayBpbiBtdWx0aXBsZSBkaXJlY3RvcmllcwoqIEFkZGVkIG1vcmUgZ2V0dGVycy9zZXR0ZXJzL3JlbW92ZXJzIGZyb20gc2VydmljZSBkZXNjcmlwdGlvbnMKKiBBZGRlZCB0aGUgYWJpbGl0eSB0byByZW1vdmUgUE9TVCBmaWVsZHMgZnJvbSBPQXV0aCBzaWduYXR1cmVzCiogT0F1dGggcGx1Z2luIG5vdyBzdXBwb3J0cyAyLWxlZ2dlZCBPQXV0aAoKIyMgMi44LjYgLSAyMDEyLTA5LTA1CgoqIEFkZGVkIHRoZSBhYmlsaXR5IHRvIG1vZGlmeSBhbmQgYnVpbGQgc2VydmljZSBkZXNjcmlwdGlvbnMKKiBBZGRlZCB0aGUgdXNlIG9mIHZpc2l0b3JzIHRvIGFwcGx5IHBhcmFtZXRlcnMgdG8gbG9jYXRpb25zIGluIHNlcnZpY2UgZGVzY3JpcHRpb25zIHVzaW5nIHRoZSBkeW5hbWljIGNvbW1hbmQKKiBBZGRlZCBhIGBqc29uYCBwYXJhbWV0ZXIgbG9jYXRpb24KKiBOb3cgYWxsb3dpbmcgZG90IG5vdGF0aW9uIGZvciBjbGFzc2VzIGluIHRoZSBDYWNoZUFkYXB0ZXJGYWN0b3J5CiogVXNpbmcgdGhlIHVuaW9uIG9mIHR3byBhcnJheXMgcmF0aGVyIHRoYW4gYW4gYXJyYXlfbWVyZ2Ugd2hlbiBleHRlbmRpbmcgc2VydmljZSBidWlsZGVyIHNlcnZpY2VzIGFuZCBzZXJ2aWNlIHBhcmFtcwoqIEVuc3VyaW5nIHRoYXQgYSBzZXJ2aWNlIGlzIGEgc3RyaW5nIGJlZm9yZSBkb2luZyBzdHJwb3MoKSBjaGVja3Mgb24gaXQgd2hlbiBzdWJzdGl0dXRpbmcgc2VydmljZXMgZm9yIHJlZmVyZW5jZXMKICBpbiBzZXJ2aWNlIGJ1aWxkZXIgY29uZmlnIGZpbGVzLgoqIFNlcnZpY2VzIGRlZmluZWQgaW4gdHdvIGRpZmZlcmVudCBjb25maWcgZmlsZXMgdGhhdCBpbmNsdWRlIG9uZSBhbm90aGVyIHdpbGwgYnkgZGVmYXVsdCByZXBsYWNlIHRoZSBwcmV2aW91c2x5CiAgZGVmaW5lZCBzZXJ2aWNlLCBidXQgeW91IGNhbiBub3cgY3JlYXRlIHNlcnZpY2VzIHRoYXQgZXh0ZW5kIHRoZW1zZWx2ZXMgYW5kIG1lcmdlIHRoZWlyIHNldHRpbmdzIG92ZXIgdGhlIHByZXZpb3VzCiogVGhlIEpzb25Mb2FkZXIgbm93IHN1cHBvcnRzIGFsaWFzaW5nIGZpbGVuYW1lcyB3aXRoIGRpZmZlcmVudCBmaWxlbmFtZXMuIFRoaXMgYWxsb3dzIHlvdSB0byBhbGlhcyBzb21ldGhpbmcgbGlrZQogICdfZGVmYXVsdCcgd2l0aCBhIGRlZmF1bHQgSlNPTiBjb25maWd1cmF0aW9uIGZpbGUuCgojIyAyLjguNSAtIDIwMTItMDgtMjkKCiogQnVnOiBTdXBwcmVzc2VkIGVtcHR5IGFycmF5cyBmcm9tIFVSSSB0ZW1wbGF0ZXMKKiBCdWc6IEFkZGVkIHRoZSBtaXNzaW5nICRvcHRpb25zIGFyZ3VtZW50IGZyb20gU2VydmljZURlc2NyaXB0aW9uOjpmYWN0b3J5IHRvIGVuYWJsZSBjYWNoaW5nCiogQWRkZWQgc3VwcG9ydCBmb3IgSFRUUCByZXNwb25zZXMgdGhhdCBkbyBub3QgY29udGFpbiBhIHJlYXNvbiBwaHJhc2UgaW4gdGhlIHN0YXJ0LWxpbmUKKiBBYnN0cmFjdENvbW1hbmQgY29tbWFuZHMgYXJlIG5vdyBpbnZva2FibGUKKiBBZGRlZCBhIHdheSB0byBnZXQgdGhlIGRhdGEgdXNlZCB3aGVuIHNpZ25pbmcgYW4gT2F1dGggcmVxdWVzdCBiZWZvcmUgYSByZXF1ZXN0IGlzIHNlbnQKCiMjIDIuOC40IC0gMjAxMi0wOC0xNQoKKiBCdWc6IEN1c3RvbSBkZWxheSB0aW1lIGNhbGN1bGF0aW9ucyBhcmUgbm8gbG9uZ2VyIGlnbm9yZWQgaW4gdGhlIEV4cG9uZW50aWFsQmFja29mZlBsdWdpbgoqIEFkZGVkIHRoZSBhYmlsaXR5IHRvIHRyYW5zZmVyIGVudGl0eSBib2RpZXMgYXMgYSBzdHJpbmcgcmF0aGVyIHRoYW4gc3RyZWFtZWQuIFRoaXMgZ2V0cyBhcm91bmQgY3VybCBlcnJvciA2NS4gU2V0IGBib2R5X2FzX3N0cmluZ2AgaW4gYSByZXF1ZXN0J3MgY3VybCBvcHRpb25zIHRvIGVuYWJsZS4KKiBBZGRlZCBhIFN0cmVhbUludGVyZmFjZSwgRW50aXR5Qm9keUludGVyZmFjZSwgYW5kIGFkZGVkIGZ0ZWxsKCkgdG8gR3V6emxlXENvbW1vblxTdHJlYW0KKiBBZGRlZCBhbiBBYnN0cmFjdEVudGl0eUJvZHlEZWNvcmF0b3IgYW5kIGEgUmVhZExpbWl0RW50aXR5Qm9keSBkZWNvcmF0b3IgdG8gdHJhbnNmZXIgb25seSBhIHN1YnNldCBvZiBhIGRlY29yYXRlZCBzdHJlYW0KKiBTdHJlYW0gYW5kIEVudGl0eUJvZHkgb2JqZWN0cyB3aWxsIG5vdyByZXR1cm4gdGhlIGZpbGUgcG9zaXRpb24gdG8gdGhlIHByZXZpb3VzIHBvc2l0aW9uIGFmdGVyIGEgcmVhZCByZXF1aXJlZCBvcGVyYXRpb24gKGUuZy4gZ2V0Q29udGVudE1kNSgpKQoqIEFkZGVkIGFkZGl0aW9uYWwgcmVzcG9uc2Ugc3RhdHVzIGNvZGVzCiogUmVtb3ZlZCBTU0wgaW5mb3JtYXRpb24gZnJvbSB0aGUgZGVmYXVsdCBVc2VyLUFnZW50IGhlYWRlcgoqIERFTEVURSByZXF1ZXN0cyBjYW4gbm93IHNlbmQgYW4gZW50aXR5IGJvZHkKKiBBZGRlZCBhbiBFdmVudERpc3BhdGNoZXIgdG8gdGhlIEV4cG9uZW50aWFsQmFja29mZlBsdWdpbiBhbmQgYWRkZWQgYW4gRXhwb25lbnRpYWxCYWNrb2ZmTG9nZ2VyIHRvIGxvZyBiYWNrb2ZmIHJldHJpZXMKKiBBZGRlZCB0aGUgYWJpbGl0eSBvZiB0aGUgTW9ja1BsdWdpbiB0byBjb25zdW1lIG1vY2tlZCByZXF1ZXN0IGJvZGllcwoqIExvZ1BsdWdpbiBub3cgZXhwb3NlcyByZXF1ZXN0IGFuZCByZXNwb25zZSBvYmplY3RzIGluIHRoZSBleHRyYXMgYXJyYXkKCiMjIDIuOC4zIC0gMjAxMi0wNy0zMAoKKiBCdWc6IEZpeGVkIGEgY2FzZSB3aGVyZSBlbXB0eSBQT1NUIHJlcXVlc3RzIHdlcmUgc2VudCBhcyBHRVQgcmVxdWVzdHMKKiBCdWc6IEZpeGVkIGEgYnVnIGluIEV4cG9uZW50aWFsQmFja29mZlBsdWdpbiB0aGF0IGNhdXNlZCBmYXRhbCBlcnJvcnMgd2hlbiByZXRyeWluZyBhbiBFbnRpdHlFbmNsb3NpbmdSZXF1ZXN0IHRoYXQgZG9lcyBub3QgaGF2ZSBhIGJvZHkKKiBCdWc6IFNldHRpbmcgdGhlIHJlc3BvbnNlIGJvZHkgb2YgYSByZXF1ZXN0IHRvIG51bGwgYWZ0ZXIgY29tcGxldGluZyBhIHJlcXVlc3QsIG5vdCB3aGVuIHNldHRpbmcgdGhlIHN0YXRlIG9mIGEgcmVxdWVzdCB0byBuZXcKKiBBZGRlZCBtdWx0aXBsZSBpbmhlcml0YW5jZSB0byBzZXJ2aWNlIGRlc2NyaXB0aW9uIGNvbW1hbmRzCiogQWRkZWQgYW4gQXBpQ29tbWFuZEludGVyZmFjZSBhbmQgYWRkZWQgYGdldFBhcmFtTmFtZXMoKWAgYW5kIGBoYXNQYXJhbSgpYAoqIFJlbW92ZWQgdGhlIGRlZmF1bHQgMm1iIHNpemUgY3V0b2ZmIGZyb20gdGhlIE1kNVZhbGlkYXRvclBsdWdpbiBzbyB0aGF0IGl0IG5vdyBkZWZhdWx0cyB0byB2YWxpZGF0aW5nIGV2ZXJ5dGhpbmcKKiBDaGFuZ2VkIEN1cmxNdWx0aTo6cGVyZm9ybSB0byBwYXNzIGEgc21hbGxlciB0aW1lb3V0IHRvIEN1cmxNdWx0aTo6ZXhlY3V0ZUhhbmRsZXMKCiMjIDIuOC4yIC0gMjAxMi0wNy0yNAoKKiBCdWc6IFF1ZXJ5IHN0cmluZyB2YWx1ZXMgc2V0IHRvIDAgYXJlIG5vIGxvbmdlciBkcm9wcGVkIGZyb20gdGhlIHF1ZXJ5IHN0cmluZwoqIEJ1ZzogQSBDb2xsZWN0aW9uIG9iamVjdCBpcyBubyBsb25nZXIgY3JlYXRlZCBlYWNoIHRpbWUgYSBjYWxsIGlzIG1hZGUgdG8gYEd1enpsZVxTZXJ2aWNlXENvbW1hbmRcQWJzdHJhY3RDb21tYW5kOjpnZXRSZXF1ZXN0SGVhZGVycygpYAoqIEJ1ZzogYCtgIGlzIG5vdyB0cmVhdGVkIGFzIGFuIGVuY29kZWQgc3BhY2Ugd2hlbiBwYXJzaW5nIHF1ZXJ5IHN0cmluZ3MKKiBRdWVyeVN0cmluZyBhbmQgQ29sbGVjdGlvbiBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMKKiBBbGxvd2luZyBkb3Qgbm90YXRpb24gZm9yIGNsYXNzIHBhdGhzIGluIGZpbHRlcnMgYXR0cmlidXRlIG9mIGEgc2VydmljZSBkZXNjcmlwdGlvbnMKCiMjIDIuOC4xIC0gMjAxMi0wNy0xNgoKKiBMb29zZW5pbmcgRXZlbnQgRGlzcGF0Y2hlciBkZXBlbmRlbmN5CiogUE9TVCByZWRpcmVjdHMgY2FuIG5vdyBiZSBjdXN0b21pemVkIHVzaW5nIENVUkxPUFRfUE9TVFJFRElSCgojIyAyLjguMCAtIDIwMTItMDctMTUKCiogQkM6IEd1enpsZVxIdHRwXFF1ZXJ5CiAgICAqIFF1ZXJ5IHN0cmluZ3Mgd2l0aCBlbXB0eSB2YXJpYWJsZXMgd2lsbCBhbHdheXMgc2hvdyBhbiBlcXVhbCBzaWduIHVubGVzcyB0aGUgdmFyaWFibGUgaXMgc2V0IHRvIFF1ZXJ5U3RyaW5nOjpCTEFOSyAoZS5nLiA/YWNsPSB2cyA/YWNsKQogICAgKiBDaGFuZ2VkIGlzRW5jb2RpbmdWYWx1ZXMoKSBhbmQgaXNFbmNvZGluZ0ZpZWxkcygpIHRvIGlzVXJsRW5jb2RpbmcoKQogICAgKiBDaGFuZ2VkIHNldEVuY29kZVZhbHVlcyhib29sKSBhbmQgc2V0RW5jb2RlRmllbGRzKGJvb2wpIHRvIHVzZVVybEVuY29kaW5nKGJvb2wpCiAgICAqIENoYW5nZWQgdGhlIGFnZ3JlZ2F0aW9uIGZ1bmN0aW9ucyBvZiBRdWVyeVN0cmluZyB0byBiZSBzdGF0aWMgbWV0aG9kcwogICAgKiBDYW4gbm93IHVzZSBmcm9tU3RyaW5nKCkgd2l0aCBxdWVyeXN0cmluZ3MgdGhhdCBoYXZlIGEgbGVhZGluZyA/CiogY1VSTCBjb25maWd1cmF0aW9uIHZhbHVlcyBjYW4gYmUgc3BlY2lmaWVkIGluIHNlcnZpY2UgZGVzY3JpcHRpb25zIHVzaW5nIGBjdXJsLmAgcHJlZml4ZWQgcGFyYW1ldGVycwoqIENvbnRlbnQtTGVuZ3RoIGlzIHNldCB0byAwIGJlZm9yZSBlbWl0dGluZyB0aGUgcmVxdWVzdC5iZWZvcmVfc2VuZCBldmVudCB3aGVuIHNlbmRpbmcgYW4gZW1wdHkgcmVxdWVzdCBib2R5CiogQ29va2llcyBhcmUgbm8gbG9uZ2VyIFVSTCBkZWNvZGVkIGJ5IGRlZmF1bHQKKiBCdWc6IFVSSSB0ZW1wbGF0ZSB2YXJpYWJsZXMgc2V0IHRvIG51bGwgYXJlIG5vIGxvbmdlciBleHBhbmRlZAoKIyMgMi43LjIgLSAyMDEyLTA3LTAyCgoqIEJDOiBNb3ZpbmcgdGhpbmdzIHRvIGdldCByZWFkeSBmb3Igc3VidHJlZSBzcGxpdHMuIE1vdmluZyBJbmZsZWN0aW9uIGludG8gQ29tbW9uLiBNb3ZpbmcgR3V6emxlXEh0dHBcUGFyc2VyIHRvIEd1enpsZVxQYXJzZXIuCiogQkM6IFJlbW92aW5nIEd1enpsZVxDb21tb25cQmF0Y2hcQmF0Y2g6OmNvdW50KCkgYW5kIHJlcGxhY2luZyBpdCB3aXRoIGlzRW1wdHkoKQoqIENhY2hlUGx1Z2luIG5vdyBhbGxvd3MgZm9yIGEgY3VzdG9tIHJlcXVlc3QgcGFyYW1ldGVyIGZ1bmN0aW9uIHRvIGNoZWNrIGlmIGEgcmVxdWVzdCBjYW4gYmUgY2FjaGVkCiogQnVnIGZpeDogQ2FjaGVQbHVnaW4gbm93IG9ubHkgY2FjaGVzIEdFVCBhbmQgSEVBRCByZXF1ZXN0cyBieSBkZWZhdWx0CiogQnVnIGZpeDogVXNpbmcgaGVhZGVyIGdsdWUgd2hlbiB0cmFuc2ZlcnJpbmcgaGVhZGVycyBvdmVyIHRoZSB3aXJlCiogQWxsb3dpbmcgZGVlcGx5IG5lc3RlZCBhcnJheXMgZm9yIGNvbXBvc2l0ZSB2YXJpYWJsZXMgaW4gVVJJIHRlbXBsYXRlcwoqIEJhdGNoIGRpdmlzb3JzIGNhbiBub3cgcmV0dXJuIGl0ZXJhdG9ycyBvciBhcnJheXMKCiMjIDIuNy4xIC0gMjAxMi0wNi0yNgoKKiBNaW5vciBwYXRjaCB0byB1cGRhdGUgdmVyc2lvbiBudW1iZXIgaW4gVUEgc3RyaW5nCiogVXBkYXRpbmcgYnVpbGQgcHJvY2VzcwoKIyMgMi43LjAgLSAyMDEyLTA2LTI1CgoqIEJDOiBJbmZsZWN0aW9uIGNsYXNzZXMgbW92ZWQgdG8gR3V6emxlXEluZmxlY3Rpb24uIE5vIGxvbmdlciBzdGF0aWMgbWV0aG9kcy4gQ2FuIG5vdyBpbmplY3QgY3VzdG9tIGluZmxlY3RvcnMgaW50byBjbGFzc2VzLgoqIEJDOiBSZW1vdmVkIG1hZ2ljIHNldFggbWV0aG9kcyBmcm9tIGNvbW1hbmRzCiogQkM6IE1hZ2ljIG1ldGhvZHMgbWFwcGVkIHRvIHNlcnZpY2UgZGVzY3JpcHRpb24gY29tbWFuZHMgYXJlIG5vdyBpbmZsZWN0ZWQgaW4gdGhlIGNvbW1hbmQgZmFjdG9yeSByYXRoZXIgdGhhbiB0aGUgY2xpZW50IF9fY2FsbCgpIG1ldGhvZAoqIFZlcmJvc2UgY1VSTCBvcHRpb25zIGFyZSBubyBsb25nZXIgZW5hYmxlZCBieSBkZWZhdWx0LiBTZXQgY3VybC5kZWJ1ZyB0byB0cnVlIG9uIGEgY2xpZW50IHRvIGVuYWJsZS4KKiBCdWc6IE5vdyBhbGxvd2luZyBjb2xvbnMgaW4gYSByZXNwb25zZSBzdGFydC1saW5lIChlLmcuIEhUVFAvMS4xIDUwMyBTZXJ2aWNlIFVuYXZhaWxhYmxlOiBCYWNrLWVuZCBzZXJ2ZXIgaXMgYXQgY2FwYWNpdHkpCiogR3V6emxlXFNlcnZpY2VcUmVzb3VyY2VcUmVzb3VyY2VJdGVyYXRvckFwcGx5QmF0Y2hlZCBub3cgaW50ZXJuYWxseSB1c2VzIHRoZSBHdXp6bGVcQ29tbW9uXEJhdGNoIG5hbWVzcGFjZQoqIEFkZGVkIEd1enpsZVxTZXJ2aWNlXFBsdWdpbiBuYW1lc3BhY2UgYW5kIGEgUGx1Z2luQ29sbGVjdGlvblBsdWdpbgoqIEFkZGVkIHRoZSBhYmlsaXR5IHRvIHNldCBQT1NUIGZpZWxkcyBhbmQgZmlsZXMgaW4gYSBzZXJ2aWNlIGRlc2NyaXB0aW9uCiogR3V6emxlXEh0dHBcRW50aXR5Qm9keTo6ZmFjdG9yeSgpIG5vdyBhY2NlcHRzIG9iamVjdHMgd2l0aCBhIF9fdG9TdHJpbmcoKSBtZXRob2QKKiBBZGRpbmcgYSBjb21tYW5kLmJlZm9yZV9wcmVwYXJlIGV2ZW50IHRvIGNsaWVudHMKKiBBZGRlZCBCYXRjaENsb3N1cmVUcmFuc2ZlciBhbmQgQmF0Y2hDbG9zdXJlRGl2aXNvcgoqIEJhdGNoVHJhbnNmZXJFeGNlcHRpb24gbm93IGluY2x1ZGVzIHJlZmVyZW5jZXMgdG8gdGhlIGJhdGNoIGRpdmlzb3IgYW5kIHRyYW5zZmVyIHN0cmF0ZWdpZXMKKiBGaXhlZCBzb21lIHRlc3RzIHNvIHRoYXQgdGhleSBwYXNzIG1vcmUgcmVsaWFibHkKKiBBZGRlZCBHdXp6bGVcQ29tbW9uXExvZ1xBcnJheUxvZ0FkYXB0ZXIKCiMjIDIuNi42IC0gMjAxMi0wNi0xMAoKKiBCQzogUmVtb3ZpbmcgR3V6emxlXEh0dHBcUGx1Z2luXEJhdGNoUXVldWVQbHVnaW4KKiBCQzogUmVtb3ZpbmcgR3V6emxlXFNlcnZpY2VcQ29tbWFuZFxDb21tYW5kU2V0CiogQWRkaW5nIGdlbmVyaWMgYmF0Y2hpbmcgc3lzdGVtIChyZXBsYWNlcyB0aGUgYmF0Y2ggcXVldWUgcGx1Z2luIGFuZCBjb21tYW5kIHNldCkKKiBVcGRhdGluZyBaRiBjYWNoZSBhbmQgbG9nIGFkYXB0ZXJzIGFuZCBub3cgdXNpbmcgWkYncyBjb21wb3NlciByZXBvc2l0b3J5CiogQnVnOiBTZXR0aW5nIHRoZSBuYW1lIG9mIGVhY2ggQXBpUGFyYW0gd2hlbiBjcmVhdGluZyB0aHJvdWdoIGFuIEFwaUNvbW1hbmQKKiBBZGRpbmcgcmVzdWx0X3R5cGUsIHJlc3VsdF9kb2MsIGRlcHJlY2F0ZWQsIGFuZCBkb2NfdXJsIHRvIHNlcnZpY2UgZGVzY3JpcHRpb25zCiogQnVnOiBDaGFuZ2VkIHRoZSBkZWZhdWx0IGNvb2tpZSBoZWFkZXIgY2FzaW5nIGJhY2sgdG8gJ0Nvb2tpZScKCiMjIDIuNi41IC0gMjAxMi0wNi0wMwoKKiBCQzogUmVuYW1pbmcgR3V6emxlXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlOjpnZXRSZXNvdXJjZVVyaSgpIHRvIGdldFJlc291cmNlKCkKKiBCQzogUmVtb3ZpbmcgdW51c2VkIEFVVEhfQkFTSUMgYW5kIEFVVEhfRElHRVNUIGNvbnN0YW50cyBmcm9tCiogQkM6IEd1enpsZVxIdHRwXENvb2tpZSBpcyBub3cgdXNlZCB0byBtYW5hZ2UgU2V0LUNvb2tpZSBkYXRhLCBub3QgQ29va2llIGRhdGEKKiBCQzogUmVuYW1pbmcgbWV0aG9kcyBpbiB0aGUgQ29va2llSmFySW50ZXJmYWNlCiogTW92aW5nIGFsbW9zdCBhbGwgY29va2llIGxvZ2ljIG91dCBvZiB0aGUgQ29va2llUGx1Z2luIGFuZCBpbnRvIHRoZSBDb29raWUgb3IgQ29va2llSmFyIGltcGxlbWVudGF0aW9ucwoqIE1ha2luZyB0aGUgZGVmYXVsdCBnbHVlIGZvciBIVFRQIGhlYWRlcnMgJzsnIGluc3RlYWQgb2YgJywnCiogQWRkaW5nIGEgcmVtb3ZlVmFsdWUgdG8gR3V6emxlXEh0dHBcTWVzc2FnZVxIZWFkZXIKKiBBZGRpbmcgZ2V0Q29va2llcygpIHRvIHJlcXVlc3QgaW50ZXJmYWNlLgoqIE1ha2luZyBpdCBlYXNpZXIgdG8gYWRkIGV2ZW50IHN1YnNjcmliZXJzIHRvIEhhc0Rpc3BhdGNoZXJJbnRlcmZhY2UgY2xhc3Nlcy4gQ2FuIG5vdyBkaXJlY3RseSBjYWxsIGFkZFN1YnNjcmliZXIoKQoKIyMgMi42LjQgLSAyMDEyLTA1LTMwCgoqIEJDOiBDbGVhbmluZyB1cCBob3cgUE9TVCBmaWxlcyBhcmUgc3RvcmVkIGluIEVudGl0eUVuY2xvc2luZ1JlcXVlc3Qgb2JqZWN0cy4gQWRkaW5nIFBvc3RGaWxlIGNsYXNzLgoqIEJDOiBNb3ZpbmcgQXBpQ29tbWFuZCBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5IGZyb20gdGhlIEluc3BlY3RvciBhbmQgb24gdG8gdGhlIEFwaUNvbW1hbmQKKiBCdWc6IEZpeGluZyBtYWdpYyBtZXRob2QgY29tbWFuZCBjYWxscyBvbiBjbGllbnRzCiogQnVnOiBFbWFpbCBjb25zdHJhaW50IG9ubHkgdmFsaWRhdGVzIHN0cmluZ3MKKiBCdWc6IEFnZ3JlZ2F0ZSBQT1NUIGZpZWxkcyB3aGVuIFBPU1QgZmlsZXMgYXJlIHByZXNlbnQgaW4gY3VybCBoYW5kbGUKKiBCdWc6IEZpeGluZyBkZWZhdWx0IFVzZXItQWdlbnQgaGVhZGVyCiogQnVnOiBPbmx5IGFwcGVuZGluZyBvciBwcmVwZW5kaW5nIHBhcmFtZXRlcnMgaW4gY29tbWFuZHMgaWYgdGhleSBhcmUgc3BlY2lmaWVkCiogQnVnOiBOb3QgcmVxdWlyaW5nIHJlc3BvbnNlIHJlYXNvbiBwaHJhc2VzIG9yIHN0YXR1cyBjb2RlcyB0byBtYXRjaCBhIHByZWRlZmluZWQgbGlzdCBvZiBjb2RlcwoqIEFsbG93aW5nIHRoZSB1c2Ugb2YgZG90IG5vdGF0aW9uIGZvciBjbGFzcyBuYW1lc3BhY2VzIHdoZW4gdXNpbmcgaW5zdGFuY2Vfb2YgY29uc3RyYWludAoqIEFkZGVkIGFueV9tYXRjaCB2YWxpZGF0aW9uIGNvbnN0cmFpbnQKKiBBZGRlZCBhbiBBc3luY1BsdWdpbgoqIFBhc3NpbmcgcmVxdWVzdCBvYmplY3QgdG8gdGhlIGNhbGN1bGF0ZVdhaXQgbWV0aG9kIG9mIHRoZSBFeHBvbmVudGlhbEJhY2tvZmZQbHVnaW4KKiBBbGxvd2luZyB0aGUgcmVzdWx0IG9mIGEgY29tbWFuZCBvYmplY3QgdG8gYmUgY2hhbmdlZAoqIFBhcnNpbmcgbG9jYXRpb24gYW5kIHR5cGUgc3ViIHZhbHVlcyB3aGVuIGluc3RhbnRpYXRpbmcgYSBzZXJ2aWNlIGRlc2NyaXB0aW9uIHJhdGhlciB0aGFuIG92ZXIgYW5kIG92ZXIgYXQgcnVudGltZQoKIyMgMi42LjMgLSAyMDEyLTA1LTIzCgoqIFtCQ10gR3V6emxlXENvbW1vblxGcm9tQ29uZmlnSW50ZXJmYWNlIG5vIGxvbmdlciByZXF1aXJlcyBhbnkgY29uZmlnIG9wdGlvbnMuCiogW0JDXSBSZWZhY3RvcmluZyBob3cgUE9TVCBmaWxlcyBhcmUgc3RvcmVkIG9uIGFuIEVudGl0eUVuY2xvc2luZ1JlcXVlc3QuIFRoZXkgYXJlIG5vdyBzZXBhcmF0ZSBmcm9tIFBPU1QgZmllbGRzLgoqIFlvdSBjYW4gbm93IHVzZSBhbiBhcnJheSBvZiBkYXRhIHdoZW4gY3JlYXRpbmcgUFVUIHJlcXVlc3QgYm9kaWVzIGluIHRoZSByZXF1ZXN0IGZhY3RvcnkuCiogUmVtb3ZpbmcgdGhlIHJlcXVpcmVtZW50IHRoYXQgSFRUUFMgcmVxdWVzdHMgbmVlZGVkIGEgQ2FjaGUtQ29udHJvbDogcHVibGljIGRpcmVjdGl2ZSB0byBiZSBjYWNoZWFibGUuCiogW0h0dHBdIEFkZGluZyBzdXBwb3J0IGZvciBDb250ZW50LVR5cGUgaW4gbXVsdGlwYXJ0IFBPU1QgdXBsb2FkcyBwZXIgdXBsb2FkCiogW0h0dHBdIEFkZGVkIHN1cHBvcnQgZm9yIHVwbG9hZGluZyBtdWx0aXBsZSBmaWxlcyB1c2luZyB0aGUgc2FtZSBuYW1lIChmb29bMF0sIGZvb1sxXSkKKiBBZGRpbmcgbW9yZSBQT1NUIGRhdGEgb3BlcmF0aW9ucyBmb3IgZWFzaWVyIG1hbmlwdWxhdGlvbiBvZiBQT1NUIGRhdGEuCiogWW91IGNhbiBub3cgc2V0IGVtcHR5IFBPU1QgZmllbGRzLgoqIFRoZSBib2R5IG9mIGEgcmVxdWVzdCBpcyBvbmx5IHNob3duIG9uIEVudGl0eUVuY2xvc2luZ1JlcXVlc3Qgb2JqZWN0cyB0aGF0IGRvIG5vdCB1c2UgUE9TVCBmaWxlcy4KKiBTcGxpdCB0aGUgR3V6emxlXFNlcnZpY2VcSW5zcGVjdG9yOjp2YWxpZGF0ZUNvbmZpZyBtZXRob2QgaW50byB0d28gbWV0aG9kcy4gT25lIHRvIGluaXRpYWxpemUgd2hlbiBhIGNvbW1hbmQgaXMgY3JlYXRlZCwgYW5kIG9uZSB0byB2YWxpZGF0ZS4KKiBDUyB1cGRhdGVzCgojIyAyLjYuMiAtIDIwMTItMDUtMTkKCiogW0h0dHBdIEJldHRlciBoYW5kbGluZyBvZiBuZXN0ZWQgc2NvcGUgcmVxdWVzdHMgaW4gQ3VybE11bHRpLiAgUmVxdWVzdHMgYXJlIG5vdyBhbHdheXMgcHJlcGFyZXMgaW4gdGhlIHNlbmQoKSBtZXRob2QgcmF0aGVyIHRoYW4gdGhlIGFkZFJlcXVlc3QoKSBtZXRob2QuCgojIyAyLjYuMSAtIDIwMTItMDUtMTkKCiogW0JDXSBSZW1vdmluZyAncGF0aCcgc3VwcG9ydCBpbiBzZXJ2aWNlIGRlc2NyaXB0aW9ucy4gIFVzZSAndXJpJy4KKiBbQkNdIEd1enpsZVxTZXJ2aWNlXEluc3BlY3Rvcjo6cGFyc2VEb2NCbG9jayBpcyBub3cgcHJvdGVjdGVkLiBBZGRpbmcgZ2V0QXBpUGFyYW1zRm9yQ2xhc3MoKSB3aXRoIGNhY2hlLgoqIFtCQ10gUmVtb3ZpbmcgR3V6emxlXENvbW1vblxOdWxsT2JqZWN0LiAgVXNlIGh0dHBzOi8vZ2l0aHViLmNvbS9tdGRvd2xpbmcvTnVsbE9iamVjdCBpZiB5b3UgbmVlZCBpdC4KKiBbQkNdIFJlbW92aW5nIEd1enpsZVxDb21tb25cWG1sRWxlbWVudC4KKiBBbGwgY29tbWFuZHMsIGJvdGggZHluYW1pYyBhbmQgY29uY3JldGUsIGhhdmUgQXBpQ29tbWFuZCBvYmplY3RzLgoqIEFkZGluZyBhIGZpeCBmb3IgQ3VybE11bHRpIHNvIHRoYXQgaWYgYWxsIG9mIHRoZSBjb25uZWN0aW9ucyBlbmNvdW50ZXIgc29tZSBzb3J0IG9mIGN1cmwgZXJyb3IsIHRoZW4gdGhlIGxvb3AgZXhpdHMuCiogQWRkaW5nIGNoZWNrcyB0byBFbnRpdHlFbmNsb3NpbmdSZXF1ZXN0IHNvIHRoYXQgZW1wdHkgUE9TVCBmaWxlcyBhbmQgZmllbGRzIGFyZSBpZ25vcmVkLgoqIE1ha2luZyB0aGUgbWV0aG9kIHNpZ25hdHVyZSBvZiBHdXp6bGVcU2VydmljZVxCdWlsZGVyXFNlcnZpY2VCdWlsZGVyOjpmYWN0b3J5IG1vcmUgZmxleGlibGUuCgojIyAyLjYuMCAtIDIwMTItMDUtMTUKCiogW0JDXSBNb3ZpbmcgR3V6emxlXFNlcnZpY2VcQnVpbGRlciB0byBHdXp6bGVcU2VydmljZVxCdWlsZGVyXFNlcnZpY2VCdWlsZGVyCiogW0JDXSBFeGVjdXRpbmcgYSBDb21tYW5kIHJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgY29tbWFuZCByYXRoZXIgdGhhbiB0aGUgY29tbWFuZAoqIFtCQ10gTW92aW5nIGFsbCBIVFRQIHBhcnNpbmcgbG9naWMgdG8gR3V6emxlXEh0dHBcUGFyc2Vycy4gQWxsb3dzIGZvciBmYXN0ZXIgQyBpbXBsZW1lbnRhdGlvbnMgaWYgbmVlZGVkLgoqIFtCQ10gQ2hhbmdpbmcgdGhlIEd1enpsZVxIdHRwXE1lc3NhZ2VcUmVzcG9uc2U6OnNldFByb3RvY29sKCkgbWV0aG9kIHRvIGFjY2VwdCBhIHByb3RvY29sIGFuZCB2ZXJzaW9uIGluIHNlcGFyYXRlIGFyZ3MuCiogW0JDXSBNb3ZpbmcgUmVzb3VyY2VJdGVyYXRvciogdG8gR3V6emxlXFNlcnZpY2VcUmVzb3VyY2UKKiBbQkNdIENvbXBsZXRlbHkgcmVmYWN0b3JlZCBSZXNvdXJjZUl0ZXJhdG9ycyB0byBpdGVyYXRlIG92ZXIgYSBjbG9uZWQgY29tbWFuZCBvYmplY3QKKiBbQkNdIE1vdmVkIEd1enpsZVxIdHRwXFVyaVRlbXBsYXRlIHRvIEd1enpsZVxIdHRwXFBhcnNlclxVcmlUZW1wbGF0ZVxVcmlUZW1wbGF0ZQoqIFtCQ10gR3V6emxlXEd1enpsZSBpcyBub3cgZGVwcmVjYXRlZAoqIE1vdmluZyBHdXp6bGVcQ29tbW9uXEd1enpsZTo6aW5qZWN0IHRvIEd1enpsZVxDb21tb25cQ29sbGVjdGlvbjo6aW5qZWN0CiogQWRkaW5nIEd1enpsZVxWZXJzaW9uIGNsYXNzIHRvIGdpdmUgdmVyc2lvbiBpbmZvcm1hdGlvbiBhYm91dCBHdXp6bGUKKiBBZGRpbmcgR3V6emxlXEh0dHBcVXRpbHMgY2xhc3MgdG8gcHJvdmlkZSBnZXREZWZhdWx0VXNlckFnZW50KCkgYW5kIGdldEh0dHBEYXRlKCkKKiBBZGRpbmcgR3V6emxlXEN1cmxcQ3VybFZlcnNpb24gdG8gbWFuYWdlIGNhY2hpbmcgY3VybF92ZXJzaW9uKCkgZGF0YQoqIFNlcnZpY2VEZXNjcmlwdGlvbiBhbmQgU2VydmljZUJ1aWxkZXIgYXJlIG5vdyBjYWNoZWFibGUgdXNpbmcgc2ltaWxhciBjb25maWdzCiogQ2hhbmdpbmcgdGhlIGZvcm1hdCBvZiBYTUwgYW5kIEpTT04gc2VydmljZSBidWlsZGVyIGNvbmZpZ3MuICBCYWNrd2FyZHMgY29tcGF0aWJsZS4KKiBDbGVhbmVkIHVwIENvb2tpZSBwYXJzaW5nCiogVHJpbW1pbmcgdGhlIGRlZmF1bHQgR3V6emxlIFVzZXItQWdlbnQgaGVhZGVyCiogQWRkaW5nIGEgc2V0T25Db21wbGV0ZSgpIG1ldGhvZCB0byBDb21tYW5kcyB0aGF0IGlzIGNhbGxlZCB3aGVuIGEgY29tbWFuZCBjb21wbGV0ZXMKKiBLZWVwaW5nIHRyYWNrIG9mIHJlcXVlc3RzIHRoYXQgd2VyZSBtb2NrZWQgaW4gdGhlIE1vY2tQbHVnaW4KKiBGaXhlZCBhIGNhY2hpbmcgYnVnIGluIHRoZSBDYWNoZUFkYXB0ZXJGYWN0b3J5CiogSW5zcGVjdG9yIG9iamVjdHMgY2FuIGJlIGluamVjdGVkIGludG8gYSBDb21tYW5kIG9iamVjdAoqIFJlZmFjdG9yaW5nIGEgbG90IG9mIGNvZGUgYW5kIHRlc3RzIHRvIGJlIGNhc2UgaW5zZW5zaXRpdmUgd2hlbiBkZWFsaW5nIHdpdGggaGVhZGVycwoqIEFkZGluZyBHdXp6bGVcSHR0cFxNZXNzYWdlXEhlYWRlckNvbXBhcmlzb24gZm9yIGVhc3kgY29tcGFyaXNvbiBvZiBIVFRQIGhlYWRlcnMgdXNpbmcgYSBEU0wKKiBBZGRpbmcgdGhlIGFiaWxpdHkgdG8gc2V0IGdsb2JhbCBvcHRpb24gb3ZlcnJpZGVzIHRvIHNlcnZpY2UgYnVpbGRlciBjb25maWdzCiogQWRkaW5nIHRoZSBhYmlsaXR5IHRvIGluY2x1ZGUgb3RoZXIgc2VydmljZSBidWlsZGVyIGNvbmZpZyBmaWxlcyBmcm9tIHdpdGhpbiBYTUwgYW5kIEpTT04gZmlsZXMKKiBNb3ZpbmcgdGhlIHBhcnNlUXVlcnkgbWV0aG9kIG91dCBvZiBVcmwgYW5kIG9uIHRvIFF1ZXJ5U3RyaW5nOjpmcm9tU3RyaW5nKCkgYXMgYSBzdGF0aWMgZmFjdG9yeSBtZXRob2QuCgojIyAyLjUuMCAtIDIwMTItMDUtMDgKCiogTWFqb3IgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzCiogW0JDXSBTaW1wbGlmeWluZyBHdXp6bGVcQ29tbW9uXENvbGxlY3Rpb24uICBQbGVhc2UgY2hlY2sgdG8gc2VlIGlmIHlvdSBhcmUgdXNpbmcgZmVhdHVyZXMgdGhhdCBhcmUgbm93IGRlcHJlY2F0ZWQuCiogW0JDXSBVc2luZyBhIGN1c3RvbSB2YWxpZGF0aW9uIHN5c3RlbSB0aGF0IGFsbG93cyBhIGZseXdlaWdodCBpbXBsZW1lbnRhdGlvbiBmb3IgbXVjaCBmYXN0ZXIgdmFsaWRhdGlvbi4gTm8gbG9uZ2VyIHVzaW5nIFN5bWZvbnkyIFZhbGlkYXRpb24gY29tcG9uZW50LgoqIFtCQ10gTm8gbG9uZ2VyIHN1cHBvcnRpbmcgInt7IH19IiBmb3IgaW5qZWN0aW5nIGludG8gY29tbWFuZCBvciBVcmlUZW1wbGF0ZXMuICBVc2UgInt9IgoqIEFkZGVkIHRoZSBhYmlsaXR5IHRvIHBhc3NlZCBwYXJhbWV0ZXJzIHRvIGFsbCByZXF1ZXN0cyBjcmVhdGVkIGJ5IGEgY2xpZW50CiogQWRkZWQgY2FsbGJhY2sgZnVuY3Rpb25hbGl0eSB0byB0aGUgRXhwb25lbnRpYWxCYWNrb2ZmUGx1Z2luCiogVXNpbmcgbWljcm90aW1lIGluIEV4cG9uZW50aWFsQmFja29mZlBsdWdpbiB0byBhbGxvdyBtb3JlIGdyYW51bGFyIGJhY2tvZmYgc3RyYXRlZ2llcy4KKiBSZXdpbmRpbmcgcmVxdWVzdCBzdHJlYW0gYm9kaWVzIHdoZW4gcmV0cnlpbmcgcmVxdWVzdHMKKiBFeGNlcHRpb24gaXMgdGhyb3duIHdoZW4gSlNPTiByZXNwb25zZSBib2R5IGNhbm5vdCBiZSBkZWNvZGVkCiogQWRkZWQgY29uZmlndXJhYmxlIG1hZ2ljIG1ldGhvZCBjYWxscyB0byBjbGllbnRzIGFuZCBjb21tYW5kcy4gIFRoaXMgaXMgb2ZmIGJ5IGRlZmF1bHQuCiogRml4ZWQgYSBkZWZlY3QgdGhhdCBhZGRlZCBhIGhhc2ggdG8gZXZlcnkgcGFyc2VkIFVSTCBwYXJ0CiogRml4ZWQgZHVwbGljYXRlIG5vbmUgZ2VuZXJhdGlvbiBmb3IgT2F1dGhQbHVnaW4uCiogRW1pdHRpbmcgYW4gZXZlbnQgZWFjaCB0aW1lIGEgY2xpZW50IGlzIGdlbmVyYXRlZCBieSBhIFNlcnZpY2VCdWlsZGVyCiogVXNpbmcgYW4gQXBpUGFyYW1zIG9iamVjdCBpbnN0ZWFkIG9mIGEgQ29sbGVjdGlvbiBmb3IgcGFyYW1ldGVycyBvZiBhbiBBcGlDb21tYW5kCiogY2FjaGUuKiByZXF1ZXN0IHBhcmFtZXRlcnMgc2hvdWxkIGJlIHJlbmFtZWQgdG8gcGFyYW1zLmNhY2hlLioKKiBBZGRlZCB0aGUgYWJpbGl0eSB0byBzZXQgYXJiaXRyYXJ5IGN1cmwgb3B0aW9ucyBvbiByZXF1ZXN0cyAoZGlzYWJsZV93aXJlLCBwcm9ncmVzcywgZXRjLikuIFNlZSBDdXJsSGFuZGxlLgoqIEFkZGVkIHRoZSBhYmlsaXR5IHRvIGRpc2FibGUgdHlwZSB2YWxpZGF0aW9uIG9mIHNlcnZpY2UgZGVzY3JpcHRpb25zCiogU2VydmljZURlc2NyaXB0aW9ucyBhbmQgU2VydmljZUJ1aWxkZXJzIGFyZSBub3cgU2VyaWFsaXphYmxlCg==AppDevTools/query/vendor/guzzlehttp/guzzle/LICENSEQ29weXJpZ2h0IChjKSAyMDExLTIwMTggTWljaGFlbCBEb3dsaW5nLCBodHRwczovL2dpdGh1Yi5jb20vbXRkb3dsaW5nIDxtdGRvd2xpbmdAZ21haWwuY29tPgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgphbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOClRIRSBTT0ZUV0FSRS4KAppDevTools/query/vendor/guzzlehttp/guzzle/README.mdR3V6emxlLCBQSFAgSFRUUCBjbGllbnQKPT09PT09PT09PT09PT09PT09PT09PT0KClshW0xhdGVzdCBWZXJzaW9uXShodHRwczovL2ltZy5zaGllbGRzLmlvL2dpdGh1Yi9yZWxlYXNlL2d1enpsZS9ndXp6bGUuc3ZnP3N0eWxlPWZsYXQtc3F1YXJlKV0oaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvcmVsZWFzZXMpClshW0J1aWxkIFN0YXR1c10oaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby90cmF2aXMvZ3V6emxlL2d1enpsZS5zdmc/c3R5bGU9ZmxhdC1zcXVhcmUpXShodHRwczovL3RyYXZpcy1jaS5vcmcvZ3V6emxlL2d1enpsZSkKWyFbVG90YWwgRG93bmxvYWRzXShodHRwczovL2ltZy5zaGllbGRzLmlvL3BhY2thZ2lzdC9kdC9ndXp6bGVodHRwL2d1enpsZS5zdmc/c3R5bGU9ZmxhdC1zcXVhcmUpXShodHRwczovL3BhY2thZ2lzdC5vcmcvcGFja2FnZXMvZ3V6emxlaHR0cC9ndXp6bGUpCgpHdXp6bGUgaXMgYSBQSFAgSFRUUCBjbGllbnQgdGhhdCBtYWtlcyBpdCBlYXN5IHRvIHNlbmQgSFRUUCByZXF1ZXN0cyBhbmQKdHJpdmlhbCB0byBpbnRlZ3JhdGUgd2l0aCB3ZWIgc2VydmljZXMuCgotIFNpbXBsZSBpbnRlcmZhY2UgZm9yIGJ1aWxkaW5nIHF1ZXJ5IHN0cmluZ3MsIFBPU1QgcmVxdWVzdHMsIHN0cmVhbWluZyBsYXJnZQogIHVwbG9hZHMsIHN0cmVhbWluZyBsYXJnZSBkb3dubG9hZHMsIHVzaW5nIEhUVFAgY29va2llcywgdXBsb2FkaW5nIEpTT04gZGF0YSwKICBldGMuLi4KLSBDYW4gc2VuZCBib3RoIHN5bmNocm9ub3VzIGFuZCBhc3luY2hyb25vdXMgcmVxdWVzdHMgdXNpbmcgdGhlIHNhbWUgaW50ZXJmYWNlLgotIFVzZXMgUFNSLTcgaW50ZXJmYWNlcyBmb3IgcmVxdWVzdHMsIHJlc3BvbnNlcywgYW5kIHN0cmVhbXMuIFRoaXMgYWxsb3dzIHlvdQogIHRvIHV0aWxpemUgb3RoZXIgUFNSLTcgY29tcGF0aWJsZSBsaWJyYXJpZXMgd2l0aCBHdXp6bGUuCi0gQWJzdHJhY3RzIGF3YXkgdGhlIHVuZGVybHlpbmcgSFRUUCB0cmFuc3BvcnQsIGFsbG93aW5nIHlvdSB0byB3cml0ZQogIGVudmlyb25tZW50IGFuZCB0cmFuc3BvcnQgYWdub3N0aWMgY29kZTsgaS5lLiwgbm8gaGFyZCBkZXBlbmRlbmN5IG9uIGNVUkwsCiAgUEhQIHN0cmVhbXMsIHNvY2tldHMsIG9yIG5vbi1ibG9ja2luZyBldmVudCBsb29wcy4KLSBNaWRkbGV3YXJlIHN5c3RlbSBhbGxvd3MgeW91IHRvIGF1Z21lbnQgYW5kIGNvbXBvc2UgY2xpZW50IGJlaGF2aW9yLgoKYGBgcGhwCiRjbGllbnQgPSBuZXcgXEd1enpsZUh0dHBcQ2xpZW50KCk7CiRyZXMgPSAkY2xpZW50LT5yZXF1ZXN0KCdHRVQnLCAnaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9ndXp6bGUvZ3V6emxlJyk7CmVjaG8gJHJlcy0+Z2V0U3RhdHVzQ29kZSgpOwovLyAyMDAKZWNobyAkcmVzLT5nZXRIZWFkZXJMaW5lKCdjb250ZW50LXR5cGUnKTsKLy8gJ2FwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmOCcKZWNobyAkcmVzLT5nZXRCb2R5KCk7Ci8vICd7ImlkIjogMTQyMDA1MywgIm5hbWUiOiAiZ3V6emxlIiwgLi4ufScKCi8vIFNlbmQgYW4gYXN5bmNocm9ub3VzIHJlcXVlc3QuCiRyZXF1ZXN0ID0gbmV3IFxHdXp6bGVIdHRwXFBzcjdcUmVxdWVzdCgnR0VUJywgJ2h0dHA6Ly9odHRwYmluLm9yZycpOwokcHJvbWlzZSA9ICRjbGllbnQtPnNlbmRBc3luYygkcmVxdWVzdCktPnRoZW4oZnVuY3Rpb24gKCRyZXNwb25zZSkgewogICAgZWNobyAnSSBjb21wbGV0ZWQhICcgLiAkcmVzcG9uc2UtPmdldEJvZHkoKTsKfSk7CiRwcm9taXNlLT53YWl0KCk7CmBgYAoKIyMgSGVscCBhbmQgZG9jcwoKLSBbRG9jdW1lbnRhdGlvbl0oaHR0cDovL2d1enpsZXBocC5vcmcvKQotIFtTdGFjayBPdmVyZmxvd10oaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy90YWdnZWQvZ3V6emxlKQotIFtHaXR0ZXJdKGh0dHBzOi8vZ2l0dGVyLmltL2d1enpsZS9ndXp6bGUpCgoKIyMgSW5zdGFsbGluZyBHdXp6bGUKClRoZSByZWNvbW1lbmRlZCB3YXkgdG8gaW5zdGFsbCBHdXp6bGUgaXMgdGhyb3VnaApbQ29tcG9zZXJdKGh0dHA6Ly9nZXRjb21wb3Nlci5vcmcpLgoKYGBgYmFzaAojIEluc3RhbGwgQ29tcG9zZXIKY3VybCAtc1MgaHR0cHM6Ly9nZXRjb21wb3Nlci5vcmcvaW5zdGFsbGVyIHwgcGhwCmBgYAoKTmV4dCwgcnVuIHRoZSBDb21wb3NlciBjb21tYW5kIHRvIGluc3RhbGwgdGhlIGxhdGVzdCBzdGFibGUgdmVyc2lvbiBvZiBHdXp6bGU6CgpgYGBiYXNoCnBocCBjb21wb3Nlci5waGFyIHJlcXVpcmUgZ3V6emxlaHR0cC9ndXp6bGUKYGBgCgpBZnRlciBpbnN0YWxsaW5nLCB5b3UgbmVlZCB0byByZXF1aXJlIENvbXBvc2VyJ3MgYXV0b2xvYWRlcjoKCmBgYHBocApyZXF1aXJlICd2ZW5kb3IvYXV0b2xvYWQucGhwJzsKYGBgCgpZb3UgY2FuIHRoZW4gbGF0ZXIgdXBkYXRlIEd1enpsZSB1c2luZyBjb21wb3NlcjoKCiBgYGBiYXNoCmNvbXBvc2VyLnBoYXIgdXBkYXRlCiBgYGAKCgojIyBWZXJzaW9uIEd1aWRhbmNlCgp8IFZlcnNpb24gfCBTdGF0dXMgICAgIHwgUGFja2FnaXN0ICAgICAgICAgICB8IE5hbWVzcGFjZSAgICB8IFJlcG8gICAgICAgICAgICAgICAgfCBEb2NzICAgICAgICAgICAgICAgIHwgUFNSLTcgfCBQSFAgVmVyc2lvbiB8CnwtLS0tLS0tLS18LS0tLS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS18LS0tLS0tLS0tLS0tLXwKfCAzLnggICAgIHwgRU9MICAgICAgICB8IGBndXp6bGUvZ3V6emxlYCAgICAgfCBgR3V6emxlYCAgICAgfCBbdjNdW2d1enpsZS0zLXJlcG9dIHwgW3YzXVtndXp6bGUtMy1kb2NzXSB8IE5vICAgIHwgPj0gNS4zLjMgICAgfAp8IDQueCAgICAgfCBFT0wgICAgICAgIHwgYGd1enpsZWh0dHAvZ3V6emxlYCB8IGBHdXp6bGVIdHRwYCB8IFt2NF1bZ3V6emxlLTQtcmVwb10gfCBOL0EgICAgICAgICAgICAgICAgIHwgTm8gICAgfCA+PSA1LjQgICAgICB8CnwgNS54ICAgICB8IE1haW50YWluZWQgfCBgZ3V6emxlaHR0cC9ndXp6bGVgIHwgYEd1enpsZUh0dHBgIHwgW3Y1XVtndXp6bGUtNS1yZXBvXSB8IFt2NV1bZ3V6emxlLTUtZG9jc10gfCBObyAgICB8ID49IDUuNCAgICAgIHwKfCA2LnggICAgIHwgTGF0ZXN0ICAgICB8IGBndXp6bGVodHRwL2d1enpsZWAgfCBgR3V6emxlSHR0cGAgfCBbdjZdW2d1enpsZS02LXJlcG9dIHwgW3Y2XVtndXp6bGUtNi1kb2NzXSB8IFllcyAgIHwgPj0gNS41ICAgICAgfAoKW2d1enpsZS0zLXJlcG9dOiBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZTMKW2d1enpsZS00LXJlcG9dOiBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS90cmVlLzQueApbZ3V6emxlLTUtcmVwb106IGh0dHBzOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlL3RyZWUvNS4zCltndXp6bGUtNi1yZXBvXTogaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUKW2d1enpsZS0zLWRvY3NdOiBodHRwOi8vZ3V6emxlMy5yZWFkdGhlZG9jcy5vcmcvZW4vbGF0ZXN0LwpbZ3V6emxlLTUtZG9jc106IGh0dHA6Ly9ndXp6bGUucmVhZHRoZWRvY3Mub3JnL2VuLzUuMy8KW2d1enpsZS02LWRvY3NdOiBodHRwOi8vZ3V6emxlLnJlYWR0aGVkb2NzLm9yZy9lbi9sYXRlc3QvCg==AppDevTools/query/vendor/guzzlehttp/guzzle/UPGRADING.mdR3V6emxlIFVwZ3JhZGUgR3VpZGUKPT09PT09PT09PT09PT09PT09PT0KCjUuMCB0byA2LjAKLS0tLS0tLS0tLQoKR3V6emxlIG5vdyB1c2VzIFtQU1ItN10oaHR0cDovL3d3dy5waHAtZmlnLm9yZy9wc3IvcHNyLTcvKSBmb3IgSFRUUCBtZXNzYWdlcy4KRHVlIHRvIHRoZSBmYWN0IHRoYXQgdGhlc2UgbWVzc2FnZXMgYXJlIGltbXV0YWJsZSwgdGhpcyBwcm9tcHRlZCBhIHJlZmFjdG9yaW5nCm9mIEd1enpsZSB0byB1c2UgYSBtaWRkbGV3YXJlIGJhc2VkIHN5c3RlbSByYXRoZXIgdGhhbiBhbiBldmVudCBzeXN0ZW0uIEFueQpIVFRQIG1lc3NhZ2UgaW50ZXJhY3Rpb24gKGUuZy4sIGBHdXp6bGVIdHRwXE1lc3NhZ2VcUmVxdWVzdGApIG5lZWQgdG8gYmUKdXBkYXRlZCB0byB3b3JrIHdpdGggdGhlIG5ldyBpbW11dGFibGUgUFNSLTcgcmVxdWVzdCBhbmQgcmVzcG9uc2Ugb2JqZWN0cy4gQW55CmV2ZW50IGxpc3RlbmVycyBvciBzdWJzY3JpYmVycyBuZWVkIHRvIGJlIHVwZGF0ZWQgdG8gYmVjb21lIG1pZGRsZXdhcmUKZnVuY3Rpb25zIHRoYXQgd3JhcCBoYW5kbGVycyAob3IgYXJlIGluamVjdGVkIGludG8gYQpgR3V6emxlSHR0cFxIYW5kbGVyU3RhY2tgKS4KCi0gUmVtb3ZlZCBgR3V6emxlSHR0cFxCYXRjaFJlc3VsdHNgCi0gUmVtb3ZlZCBgR3V6emxlSHR0cFxDb2xsZWN0aW9uYAotIFJlbW92ZWQgYEd1enpsZUh0dHBcSGFzRGF0YVRyYWl0YAotIFJlbW92ZWQgYEd1enpsZUh0dHBcVG9BcnJheUludGVyZmFjZWAKLSBUaGUgYGd1enpsZWh0dHAvc3RyZWFtc2AgZGVwZW5kZW5jeSBoYXMgYmVlbiByZW1vdmVkLiBTdHJlYW0gZnVuY3Rpb25hbGl0eQogIGlzIG5vdyBwcmVzZW50IGluIHRoZSBgR3V6emxlSHR0cFxQc3I3YCBuYW1lc3BhY2UgcHJvdmlkZWQgYnkgdGhlCiAgYGd1enpsZWh0dHAvcHNyN2AgcGFja2FnZS4KLSBHdXp6bGUgbm8gbG9uZ2VyIHVzZXMgUmVhY3RQSFAgcHJvbWlzZXMgYW5kIG5vdyB1c2VzIHRoZQogIGBndXp6bGVodHRwL3Byb21pc2VzYCBsaWJyYXJ5LiBXZSB1c2UgYSBjdXN0b20gcHJvbWlzZSBsaWJyYXJ5IGZvciB0aHJlZQogIHNpZ25pZmljYW50IHJlYXNvbnM6CiAgMS4gUmVhY3QgcHJvbWlzZXMgKGF0IHRoZSB0aW1lIG9mIHdyaXRpbmcgdGhpcykgYXJlIHJlY3Vyc2l2ZS4gUHJvbWlzZQogICAgIGNoYWluaW5nIGFuZCBwcm9taXNlIHJlc29sdXRpb24gd2lsbCBldmVudHVhbGx5IGJsb3cgdGhlIHN0YWNrLiBHdXp6bGUKICAgICBwcm9taXNlcyBhcmUgbm90IHJlY3Vyc2l2ZSBhcyB0aGV5IHVzZSBhIHNvcnQgb2YgdHJhbXBvbGluaW5nIHRlY2huaXF1ZS4KICAgICBOb3RlOiB0aGVyZSBoYXMgYmVlbiBtb3ZlbWVudCBpbiB0aGUgUmVhY3QgcHJvamVjdCB0byBtb2RpZnkgcHJvbWlzZXMgdG8KICAgICBubyBsb25nZXIgdXRpbGl6ZSByZWN1cnNpb24uCiAgMi4gR3V6emxlIG5lZWRzIHRvIGhhdmUgdGhlIGFiaWxpdHkgdG8gc3luY2hyb25vdXNseSBibG9jayBvbiBhIHByb21pc2UgdG8KICAgICB3YWl0IGZvciBhIHJlc3VsdC4gR3V6emxlIHByb21pc2VzIGFsbG93cyB0aGlzIGZ1bmN0aW9uYWxpdHkgKGFuZCBkb2VzCiAgICAgbm90IHJlcXVpcmUgdGhlIHVzZSBvZiByZWN1cnNpb24pLgogIDMuIEJlY2F1c2Ugd2UgbmVlZCB0byBiZSBhYmxlIHRvIHdhaXQgb24gYSByZXN1bHQsIGRvaW5nIHNvIHVzaW5nIFJlYWN0CiAgICAgcHJvbWlzZXMgcmVxdWlyZXMgd3JhcHBpbmcgcmVhY3QgcHJvbWlzZXMgd2l0aCBSaW5nUEhQIGZ1dHVyZXMuIFRoaXMKICAgICBvdmVyaGVhZCBpcyBubyBsb25nZXIgbmVlZGVkLCByZWR1Y2luZyBzdGFjayBzaXplcywgcmVkdWNpbmcgY29tcGxleGl0eSwKICAgICBhbmQgaW1wcm92aW5nIHBlcmZvcm1hbmNlLgotIGBHdXp6bGVIdHRwXE1pbWV0eXBlc2AgaGFzIGJlZW4gbW92ZWQgdG8gYSBmdW5jdGlvbiBpbgogIGBHdXp6bGVIdHRwXFBzcjdcbWltZXR5cGVfZnJvbV9leHRlbnNpb25gIGFuZAogIGBHdXp6bGVIdHRwXFBzcjdcbWltZXR5cGVfZnJvbV9maWxlbmFtZWAuCi0gYEd1enpsZUh0dHBcUXVlcnlgIGFuZCBgR3V6emxlSHR0cFxRdWVyeVBhcnNlcmAgaGF2ZSBiZWVuIHJlbW92ZWQuIFF1ZXJ5CiAgc3RyaW5ncyBtdXN0IG5vdyBiZSBwYXNzZWQgaW50byByZXF1ZXN0IG9iamVjdHMgYXMgc3RyaW5ncywgb3IgcHJvdmlkZWQgdG8KICB0aGUgYHF1ZXJ5YCByZXF1ZXN0IG9wdGlvbiB3aGVuIGNyZWF0aW5nIHJlcXVlc3RzIHdpdGggY2xpZW50cy4gVGhlIGBxdWVyeWAKICBvcHRpb24gdXNlcyBQSFAncyBgaHR0cF9idWlsZF9xdWVyeWAgdG8gY29udmVydCBhbiBhcnJheSB0byBhIHN0cmluZy4gSWYgeW91CiAgbmVlZCBhIGRpZmZlcmVudCBzZXJpYWxpemF0aW9uIHRlY2huaXF1ZSwgeW91IHdpbGwgbmVlZCB0byBwYXNzIHRoZSBxdWVyeQogIHN0cmluZyBpbiBhcyBhIHN0cmluZy4gVGhlcmUgYXJlIGEgY291cGxlIGhlbHBlciBmdW5jdGlvbnMgdGhhdCB3aWxsIG1ha2UKICB3b3JraW5nIHdpdGggcXVlcnkgc3RyaW5ncyBlYXNpZXI6IGBHdXp6bGVIdHRwXFBzcjdccGFyc2VfcXVlcnlgIGFuZAogIGBHdXp6bGVIdHRwXFBzcjdcYnVpbGRfcXVlcnlgLgotIEd1enpsZSBubyBsb25nZXIgaGFzIGEgZGVwZW5kZW5jeSBvbiBSaW5nUEhQLiBEdWUgdG8gdGhlIHVzZSBvZiBhIG1pZGRsZXdhcmUKICBzeXN0ZW0gYmFzZWQgb24gUFNSLTcsIHVzaW5nIFJpbmdQSFAgYW5kIGl0J3MgbWlkZGxld2FyZSBzeXN0ZW0gYXMgd2VsbCBhZGRzCiAgbW9yZSBjb21wbGV4aXR5IHRoYW4gdGhlIGJlbmVmaXRzIGl0IHByb3ZpZGVzLiBBbGwgSFRUUCBoYW5kbGVycyB0aGF0IHdlcmUKICBwcmVzZW50IGluIFJpbmdQSFAgaGF2ZSBiZWVuIG1vZGlmaWVkIHRvIHdvcmsgZGlyZWN0bHkgd2l0aCBQU1ItNyBtZXNzYWdlcwogIGFuZCBwbGFjZWQgaW4gdGhlIGBHdXp6bGVIdHRwXEhhbmRsZXJgIG5hbWVzcGFjZS4gVGhpcyBzaWduaWZpY2FudGx5IHJlZHVjZXMKICBjb21wbGV4aXR5IGluIEd1enpsZSwgcmVtb3ZlcyBhIGRlcGVuZGVuY3ksIGFuZCBpbXByb3ZlcyBwZXJmb3JtYW5jZS4gUmluZ1BIUAogIHdpbGwgYmUgbWFpbnRhaW5lZCBmb3IgR3V6emxlIDUgc3VwcG9ydCwgYnV0IHdpbGwgbm8gbG9uZ2VyIGJlIGEgcGFydCBvZgogIEd1enpsZSA2LgotIEFzIEd1enpsZSBub3cgdXNlcyBhIG1pZGRsZXdhcmUgYmFzZWQgc3lzdGVtcyB0aGUgZXZlbnQgc3lzdGVtIGFuZCBSaW5nUEhQCiAgaW50ZWdyYXRpb24gaGFzIGJlZW4gcmVtb3ZlZC4gTm90ZTogd2hpbGUgdGhlIGV2ZW50IHN5c3RlbSBoYXMgYmVlbiByZW1vdmVkLAogIGl0IGlzIHBvc3NpYmxlIHRvIGFkZCB5b3VyIG93biB0eXBlIG9mIGV2ZW50IHN5c3RlbSB0aGF0IGlzIHBvd2VyZWQgYnkgdGhlCiAgbWlkZGxld2FyZSBzeXN0ZW0uCiAgLSBSZW1vdmVkIHRoZSBgRXZlbnRgIG5hbWVzcGFjZS4KICAtIFJlbW92ZWQgdGhlIGBTdWJzY3JpYmVyYCBuYW1lc3BhY2UuCiAgLSBSZW1vdmVkIGBUcmFuc2FjdGlvbmAgY2xhc3MKICAtIFJlbW92ZWQgYFJlcXVlc3RGc21gCiAgLSBSZW1vdmVkIGBSaW5nQnJpZGdlYAogIC0gYEd1enpsZUh0dHBcU3Vic2NyaWJlclxDb29raWVgIGlzIG5vdyBwcm92aWRlZCBieQogICAgYEd1enpsZUh0dHBcTWlkZGxld2FyZTo6Y29va2llc2AKICAtIGBHdXp6bGVIdHRwXFN1YnNjcmliZXJcSHR0cEVycm9yYCBpcyBub3cgcHJvdmlkZWQgYnkKICAgIGBHdXp6bGVIdHRwXE1pZGRsZXdhcmU6Omh0dHBFcnJvcmAKICAtIGBHdXp6bGVIdHRwXFN1YnNjcmliZXJcSGlzdG9yeWAgaXMgbm93IHByb3ZpZGVkIGJ5CiAgICBgR3V6emxlSHR0cFxNaWRkbGV3YXJlOjpoaXN0b3J5YAogIC0gYEd1enpsZUh0dHBcU3Vic2NyaWJlclxNb2NrYCBpcyBub3cgcHJvdmlkZWQgYnkKICAgIGBHdXp6bGVIdHRwXEhhbmRsZXJcTW9ja0hhbmRsZXJgCiAgLSBgR3V6emxlSHR0cFxTdWJzY3JpYmVyXFByZXBhcmVgIGlzIG5vdyBwcm92aWRlZCBieQogICAgYEd1enpsZUh0dHBcUHJlcGFyZUJvZHlNaWRkbGV3YXJlYAogIC0gYEd1enpsZUh0dHBcU3Vic2NyaWJlclxSZWRpcmVjdGAgaXMgbm93IHByb3ZpZGVkIGJ5CiAgICBgR3V6emxlSHR0cFxSZWRpcmVjdE1pZGRsZXdhcmVgCi0gR3V6emxlIG5vdyB1c2VzIGBQc3JcSHR0cFxNZXNzYWdlXFVyaUludGVyZmFjZWAgKGltcGxlbWVudHMgaW4KICBgR3V6emxlSHR0cFxQc3I3XFVyaWApIGZvciBVUkkgc3VwcG9ydC4gYEd1enpsZUh0dHBcVXJsYCBpcyBub3cgZ29uZS4KLSBTdGF0aWMgZnVuY3Rpb25zIGluIGBHdXp6bGVIdHRwXFV0aWxzYCBoYXZlIGJlZW4gbW92ZWQgdG8gbmFtZXNwYWNlZAogIGZ1bmN0aW9ucyB1bmRlciB0aGUgYEd1enpsZUh0dHBgIG5hbWVzcGFjZS4gVGhpcyByZXF1aXJlcyBlaXRoZXIgYSBDb21wb3NlcgogIGJhc2VkIGF1dG9sb2FkZXIgb3IgeW91IHRvIGluY2x1ZGUgZnVuY3Rpb25zLnBocC4KLSBgR3V6emxlSHR0cFxDbGllbnRJbnRlcmZhY2U6OmdldERlZmF1bHRPcHRpb25gIGhhcyBiZWVuIHJlbmFtZWQgdG8KICBgR3V6emxlSHR0cFxDbGllbnRJbnRlcmZhY2U6OmdldENvbmZpZ2AuCi0gYEd1enpsZUh0dHBcQ2xpZW50SW50ZXJmYWNlOjpzZXREZWZhdWx0T3B0aW9uYCBoYXMgYmVlbiByZW1vdmVkLgotIFRoZSBganNvbmAgYW5kIGB4bWxgIG1ldGhvZHMgb2YgcmVzcG9uc2Ugb2JqZWN0cyBoYXMgYmVlbiByZW1vdmVkLiBXaXRoIHRoZQogIG1pZ3JhdGlvbiB0byBzdHJpY3RseSBhZGhlcmluZyB0byBQU1ItNyBhcyB0aGUgaW50ZXJmYWNlIGZvciBHdXp6bGUgbWVzc2FnZXMsCiAgYWRkaW5nIG1ldGhvZHMgdG8gbWVzc2FnZSBpbnRlcmZhY2VzIHdvdWxkIGFjdHVhbGx5IHJlcXVpcmUgR3V6emxlIG1lc3NhZ2VzCiAgdG8gZXh0ZW5kIGZyb20gUFNSLTcgbWVzc2FnZXMgcmF0aGVyIHRoZW4gd29yayB3aXRoIHRoZW0gZGlyZWN0bHkuCgojIyBNaWdyYXRpbmcgdG8gbWlkZGxld2FyZQoKVGhlIGNoYW5nZSB0byBQU1ItNyB1bmZvcnR1bmF0ZWx5IHJlcXVpcmVkIHNpZ25pZmljYW50IHJlZmFjdG9yaW5nIHRvIEd1enpsZQpkdWUgdG8gdGhlIGZhY3QgdGhhdCBQU1ItNyBtZXNzYWdlcyBhcmUgaW1tdXRhYmxlLiBHdXp6bGUgNSByZWxpZWQgb24gYW4gZXZlbnQKc3lzdGVtIGZyb20gcGx1Z2lucy4gVGhlIGV2ZW50IHN5c3RlbSByZWxpZWQgb24gbXV0YWJpbGl0eSBvZiBIVFRQIG1lc3NhZ2VzIGFuZApzaWRlIGVmZmVjdHMgaW4gb3JkZXIgdG8gd29yay4gV2l0aCBpbW11dGFibGUgbWVzc2FnZXMsIHlvdSBoYXZlIHRvIGNoYW5nZSB5b3VyCndvcmtmbG93IHRvIGJlY29tZSBtb3JlIGFib3V0IGVpdGhlciByZXR1cm5pbmcgYSB2YWx1ZSAoZS5nLiwgZnVuY3Rpb25hbAptaWRkbGV3YXJlcykgb3Igc2V0dGluZyBhIHZhbHVlIG9uIGFuIG9iamVjdC4gR3V6emxlIHY2IGhhcyBjaG9zZW4gdGhlCmZ1bmN0aW9uYWwgbWlkZGxld2FyZSBhcHByb2FjaC4KCkluc3RlYWQgb2YgdXNpbmcgdGhlIGV2ZW50IHN5c3RlbSB0byBsaXN0ZW4gZm9yIHRoaW5ncyBsaWtlIHRoZSBgYmVmb3JlYCBldmVudCwKeW91IG5vdyBjcmVhdGUgYSBzdGFjayBiYXNlZCBtaWRkbGV3YXJlIGZ1bmN0aW9uIHRoYXQgaW50ZXJjZXB0cyBhIHJlcXVlc3Qgb24KdGhlIHdheSBpbiBhbmQgdGhlIHByb21pc2Ugb2YgdGhlIHJlc3BvbnNlIG9uIHRoZSB3YXkgb3V0LiBUaGlzIGlzIGEgbXVjaApzaW1wbGVyIGFuZCBtb3JlIHByZWRpY3RhYmxlIGFwcHJvYWNoIHRoYW4gdGhlIGV2ZW50IHN5c3RlbSBhbmQgd29ya3MgbmljZWx5CndpdGggUFNSLTcgbWlkZGxld2FyZS4gRHVlIHRvIHRoZSB1c2Ugb2YgcHJvbWlzZXMsIHRoZSBtaWRkbGV3YXJlIHN5c3RlbSBpcwphbHNvIGFzeW5jaHJvbm91cy4KCnY1OgoKYGBgcGhwCnVzZSBHdXp6bGVIdHRwXEV2ZW50XEJlZm9yZUV2ZW50OwokY2xpZW50ID0gbmV3IEd1enpsZUh0dHBcQ2xpZW50KCk7Ci8vIEdldCB0aGUgZW1pdHRlciBhbmQgbGlzdGVuIHRvIHRoZSBiZWZvcmUgZXZlbnQuCiRjbGllbnQtPmdldEVtaXR0ZXIoKS0+b24oJ2JlZm9yZScsIGZ1bmN0aW9uIChCZWZvcmVFdmVudCAkZSkgewogICAgLy8gR3V6emxlIHY1IGV2ZW50cyByZWxpZWQgb24gbXV0YXRpb24KICAgICRlLT5nZXRSZXF1ZXN0KCktPnNldEhlYWRlcignWC1Gb28nLCAnQmFyJyk7Cn0pOwpgYGAKCnY2OgoKSW4gdjYsIHlvdSBjYW4gbW9kaWZ5IHRoZSByZXF1ZXN0IGJlZm9yZSBpdCBpcyBzZW50IHVzaW5nIHRoZSBgbWFwUmVxdWVzdGAKbWlkZGxld2FyZS4gVGhlIGlkaW9tYXRpYyB3YXkgaW4gdjYgdG8gbW9kaWZ5IHRoZSByZXF1ZXN0L3Jlc3BvbnNlIGxpZmVjeWNsZSBpcwp0byBzZXR1cCBhIGhhbmRsZXIgbWlkZGxld2FyZSBzdGFjayB1cCBmcm9udCBhbmQgaW5qZWN0IHRoZSBoYW5kbGVyIGludG8gYQpjbGllbnQuCgpgYGBwaHAKdXNlIEd1enpsZUh0dHBcTWlkZGxld2FyZTsKLy8gQ3JlYXRlIGEgaGFuZGxlciBzdGFjayB0aGF0IGhhcyBhbGwgb2YgdGhlIGRlZmF1bHQgbWlkZGxld2FyZXMgYXR0YWNoZWQKJGhhbmRsZXIgPSBHdXp6bGVIdHRwXEhhbmRsZXJTdGFjazo6Y3JlYXRlKCk7Ci8vIFB1c2ggdGhlIGhhbmRsZXIgb250byB0aGUgaGFuZGxlciBzdGFjawokaGFuZGxlci0+cHVzaChNaWRkbGV3YXJlOjptYXBSZXF1ZXN0KGZ1bmN0aW9uIChSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0KSB7CiAgICAvLyBOb3RpY2UgdGhhdCB3ZSBoYXZlIHRvIHJldHVybiBhIHJlcXVlc3Qgb2JqZWN0CiAgICByZXR1cm4gJHJlcXVlc3QtPndpdGhIZWFkZXIoJ1gtRm9vJywgJ0JhcicpOwp9KSk7Ci8vIEluamVjdCB0aGUgaGFuZGxlciBpbnRvIHRoZSBjbGllbnQKJGNsaWVudCA9IG5ldyBHdXp6bGVIdHRwXENsaWVudChbJ2hhbmRsZXInID0+ICRoYW5kbGVyXSk7CmBgYAoKIyMgUE9TVCBSZXF1ZXN0cwoKVGhpcyB2ZXJzaW9uIGFkZGVkIHRoZSBbYGZvcm1fcGFyYW1zYF0oaHR0cDovL2d1enpsZS5yZWFkdGhlZG9jcy5vcmcvZW4vbGF0ZXN0L3JlcXVlc3Qtb3B0aW9ucy5odG1sI2Zvcm1fcGFyYW1zKQphbmQgYG11bHRpcGFydGAgcmVxdWVzdCBvcHRpb25zLiBgZm9ybV9wYXJhbXNgIGlzIGFuIGFzc29jaWF0aXZlIGFycmF5IG9mCnN0cmluZ3Mgb3IgYXJyYXkgb2Ygc3RyaW5ncyBhbmQgaXMgdXNlZCB0byBzZXJpYWxpemUgYW4KYGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZGAgUE9TVCByZXF1ZXN0LiBUaGUKW2BtdWx0aXBhcnRgXShodHRwOi8vZ3V6emxlLnJlYWR0aGVkb2NzLm9yZy9lbi9sYXRlc3QvcmVxdWVzdC1vcHRpb25zLmh0bWwjbXVsdGlwYXJ0KQpvcHRpb24gaXMgbm93IHVzZWQgdG8gc2VuZCBhIG11bHRpcGFydC9mb3JtLWRhdGEgUE9TVCByZXF1ZXN0LgoKYEd1enpsZUh0dHBcUG9zdFxQb3N0RmlsZWAgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBgbXVsdGlwYXJ0YCBvcHRpb24gdG8gYWRkClBPU1QgZmlsZXMgdG8gYSBtdWx0aXBhcnQvZm9ybS1kYXRhIHJlcXVlc3QuCgpUaGUgYGJvZHlgIG9wdGlvbiBubyBsb25nZXIgYWNjZXB0cyBhbiBhcnJheSB0byBzZW5kIFBPU1QgcmVxdWVzdHMuIFBsZWFzZSB1c2UKYG11bHRpcGFydGAgb3IgYGZvcm1fcGFyYW1zYCBpbnN0ZWFkLgoKVGhlIGBiYXNlX3VybGAgb3B0aW9uIGhhcyBiZWVuIHJlbmFtZWQgdG8gYGJhc2VfdXJpYC4KCjQueCB0byA1LjAKLS0tLS0tLS0tLQoKIyMgUmV3cml0dGVuIEFkYXB0ZXIgTGF5ZXIKCkd1enpsZSBub3cgdXNlcyBbUmluZ1BIUF0oaHR0cDovL3JpbmdwaHAucmVhZHRoZWRvY3Mub3JnL2VuL2xhdGVzdCkgdG8gc2VuZApIVFRQIHJlcXVlc3RzLiBUaGUgYGFkYXB0ZXJgIG9wdGlvbiBpbiBhIGBHdXp6bGVIdHRwXENsaWVudGAgY29uc3RydWN0b3IKaXMgc3RpbGwgc3VwcG9ydGVkLCBidXQgaXQgaGFzIG5vdyBiZWVuIHJlbmFtZWQgdG8gYGhhbmRsZXJgLiBJbnN0ZWFkIG9mCnBhc3NpbmcgYSBgR3V6emxlSHR0cFxBZGFwdGVyXEFkYXB0ZXJJbnRlcmZhY2VgLCB5b3UgbXVzdCBub3cgcGFzcyBhIFBIUApgY2FsbGFibGVgIHRoYXQgZm9sbG93cyB0aGUgUmluZ1BIUCBzcGVjaWZpY2F0aW9uLgoKIyMgUmVtb3ZlZCBGbHVlbnQgSW50ZXJmYWNlcwoKW0ZsdWVudCBpbnRlcmZhY2VzIHdlcmUgcmVtb3ZlZF0oaHR0cDovL29jcmFtaXVzLmdpdGh1Yi5pby9ibG9nL2ZsdWVudC1pbnRlcmZhY2VzLWFyZS1ldmlsKQpmcm9tIHRoZSBmb2xsb3dpbmcgY2xhc3NlczoKCi0gYEd1enpsZUh0dHBcQ29sbGVjdGlvbmAKLSBgR3V6emxlSHR0cFxVcmxgCi0gYEd1enpsZUh0dHBcUXVlcnlgCi0gYEd1enpsZUh0dHBcUG9zdFxQb3N0Qm9keWAKLSBgR3V6emxlSHR0cFxDb29raWVcU2V0Q29va2llYAoKIyMgUmVtb3ZlZCBmdW5jdGlvbnMucGhwCgpSZW1vdmVkICJmdW5jdGlvbnMucGhwIiwgc28gdGhhdCBHdXp6bGUgaXMgdHJ1bHkgUFNSLTQgY29tcGxpYW50LiBUaGUgZm9sbG93aW5nCmZ1bmN0aW9ucyBjYW4gYmUgdXNlZCBhcyByZXBsYWNlbWVudHMuCgotIGBHdXp6bGVIdHRwXGpzb25fZGVjb2RlYCAtPiBgR3V6emxlSHR0cFxVdGlsczo6anNvbkRlY29kZWAKLSBgR3V6emxlSHR0cFxnZXRfcGF0aGAgLT4gYEd1enpsZUh0dHBcVXRpbHM6OmdldFBhdGhgCi0gYEd1enpsZUh0dHBcVXRpbHM6OnNldFBhdGhgIC0+IGBHdXp6bGVIdHRwXHNldF9wYXRoYAotIGBHdXp6bGVIdHRwXFBvb2w6OmJhdGNoYCAtPiBgR3V6emxlSHR0cFxiYXRjaGAuIFRoaXMgZnVuY3Rpb24gaXMsIGhvd2V2ZXIsCiAgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiB1c2luZyBgR3V6emxlSHR0cFxQb29sOjpiYXRjaCgpYC4KClRoZSAicHJvY2VkdXJhbCIgZ2xvYmFsIGNsaWVudCBoYXMgYmVlbiByZW1vdmVkIHdpdGggbm8gcmVwbGFjZW1lbnQgKGUuZy4sCmBHdXp6bGVIdHRwXGdldCgpYCwgYEd1enpsZUh0dHBccG9zdCgpYCwgZXRjLikuIFVzZSBhIGBHdXp6bGVIdHRwXENsaWVudGAKb2JqZWN0IGFzIGEgcmVwbGFjZW1lbnQuCgojIyBgdGhyb3dJbW1lZGlhdGVseWAgaGFzIGJlZW4gcmVtb3ZlZAoKVGhlIGNvbmNlcHQgb2YgInRocm93SW1tZWRpYXRlbHkiIGhhcyBiZWVuIHJlbW92ZWQgZnJvbSBleGNlcHRpb25zIGFuZCBlcnJvcgpldmVudHMuIFRoaXMgY29udHJvbCBtZWNoYW5pc20gd2FzIHVzZWQgdG8gc3RvcCBhIHRyYW5zZmVyIG9mIGNvbmN1cnJlbnQKcmVxdWVzdHMgZnJvbSBjb21wbGV0aW5nLiBUaGlzIGNhbiBub3cgYmUgaGFuZGxlZCBieSB0aHJvd2luZyB0aGUgZXhjZXB0aW9uIG9yCmJ5IGNhbmNlbGxpbmcgYSBwb29sIG9mIHJlcXVlc3RzIG9yIGVhY2ggb3V0c3RhbmRpbmcgZnV0dXJlIHJlcXVlc3QKaW5kaXZpZHVhbGx5LgoKIyMgaGVhZGVycyBldmVudCBoYXMgYmVlbiByZW1vdmVkCgpSZW1vdmVkIHRoZSAiaGVhZGVycyIgZXZlbnQuIFRoaXMgZXZlbnQgd2FzIG9ubHkgdXNlZnVsIGZvciBjaGFuZ2luZyB0aGUKYm9keSBhIHJlc3BvbnNlIG9uY2UgdGhlIGhlYWRlcnMgb2YgdGhlIHJlc3BvbnNlIHdlcmUga25vd24uIFlvdSBjYW4gaW1wbGVtZW50CmEgc2ltaWxhciBiZWhhdmlvciBpbiBhIG51bWJlciBvZiB3YXlzLiBPbmUgZXhhbXBsZSBtaWdodCBiZSB0byB1c2UgYQpGblN0cmVhbSB0aGF0IGhhcyBhY2Nlc3MgdG8gdGhlIHRyYW5zYWN0aW9uIGJlaW5nIHNlbnQuIEZvciBleGFtcGxlLCB3aGVuIHRoZQpmaXJzdCBieXRlIGlzIHdyaXR0ZW4sIHlvdSBjb3VsZCBjaGVjayBpZiB0aGUgcmVzcG9uc2UgaGVhZGVycyBtYXRjaCB5b3VyCmV4cGVjdGF0aW9ucywgYW5kIGlmIHNvLCBjaGFuZ2UgdGhlIGFjdHVhbCBzdHJlYW0gYm9keSB0aGF0IGlzIGJlaW5nCndyaXR0ZW4gdG8uCgojIyBVcGRhdGVzIHRvIEhUVFAgTWVzc2FnZXMKClJlbW92ZWQgdGhlIGBhc0FycmF5YCBwYXJhbWV0ZXIgZnJvbQpgR3V6emxlSHR0cFxNZXNzYWdlXE1lc3NhZ2VJbnRlcmZhY2U6OmdldEhlYWRlcmAuIElmIHlvdSB3YW50IHRvIGdldCBhIGhlYWRlcgp2YWx1ZSBhcyBhbiBhcnJheSwgdGhlbiB1c2UgdGhlIG5ld2x5IGFkZGVkIGBnZXRIZWFkZXJBc0FycmF5KClgIG1ldGhvZCBvZgpgTWVzc2FnZUludGVyZmFjZWAuIFRoaXMgY2hhbmdlIG1ha2VzIHRoZSBHdXp6bGUgaW50ZXJmYWNlcyBjb21wYXRpYmxlIHdpdGgKdGhlIFBTUi03IGludGVyZmFjZXMuCgozLnggdG8gNC4wCi0tLS0tLS0tLS0KCiMjIE92ZXJhcmNoaW5nIGNoYW5nZXM6CgotIE5vdyByZXF1aXJlcyBQSFAgNS40IG9yIGdyZWF0ZXIuCi0gTm8gbG9uZ2VyIHJlcXVpcmVzIGNVUkwgdG8gc2VuZCByZXF1ZXN0cy4KLSBHdXp6bGUgbm8gbG9uZ2VyIHdyYXBzIGV2ZXJ5IGV4Y2VwdGlvbiBpdCB0aHJvd3MuIE9ubHkgZXhjZXB0aW9ucyB0aGF0IGFyZQogIHJlY292ZXJhYmxlIGFyZSBub3cgd3JhcHBlZCBieSBHdXp6bGUuCi0gVmFyaW91cyBuYW1lc3BhY2VzIGhhdmUgYmVlbiByZW1vdmVkIG9yIHJlbmFtZWQuCi0gTm8gbG9uZ2VyIHJlcXVpcmluZyB0aGUgU3ltZm9ueSBFdmVudERpc3BhdGNoZXIuIEEgY3VzdG9tIGV2ZW50IGRpc3BhdGNoZXIKICBiYXNlZCBvbiB0aGUgU3ltZm9ueSBFdmVudERpc3BhdGNoZXIgaXMKICBub3cgdXRpbGl6ZWQgaW4gYEd1enpsZUh0dHBcRXZlbnRcRW1pdHRlckludGVyZmFjZWAgKHJlc3VsdGluZyBpbiBzaWduaWZpY2FudAogIHNwZWVkIGFuZCBmdW5jdGlvbmFsaXR5IGltcHJvdmVtZW50cykuCgpDaGFuZ2VzIHBlciBHdXp6bGUgMy54IG5hbWVzcGFjZSBhcmUgZGVzY3JpYmVkIGJlbG93LgoKIyMgQmF0Y2gKClRoZSBgR3V6emxlXEJhdGNoYCBuYW1lc3BhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gVGhpcyBpcyBiZXN0IGxlZnQgdG8KdGhpcmQtcGFydGllcyB0byBpbXBsZW1lbnQgb24gdG9wIG9mIEd1enpsZSdzIGNvcmUgSFRUUCBsaWJyYXJ5LgoKIyMgQ2FjaGUKClRoZSBgR3V6emxlXENhY2hlYCBuYW1lc3BhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gKFRvZG86IE5vIHN1aXRhYmxlIHJlcGxhY2VtZW50CmhhcyBiZWVuIGltcGxlbWVudGVkIHlldCwgYnV0IGhvcGluZyB0byB1dGlsaXplIGEgUFNSIGNhY2hlIGludGVyZmFjZSkuCgojIyBDb21tb24KCi0gUmVtb3ZlZCBhbGwgb2YgdGhlIHdyYXBwZWQgZXhjZXB0aW9ucy4gSXQncyBiZXR0ZXIgdG8gdXNlIHRoZSBzdGFuZGFyZCBQSFAKICBsaWJyYXJ5IGZvciB1bnJlY292ZXJhYmxlIGV4Y2VwdGlvbnMuCi0gYEZyb21Db25maWdJbnRlcmZhY2VgIGhhcyBiZWVuIHJlbW92ZWQuCi0gYEd1enpsZVxDb21tb25cVmVyc2lvbmAgaGFzIGJlZW4gcmVtb3ZlZC4gVGhlIFZFUlNJT04gY29uc3RhbnQgY2FuIGJlIGZvdW5kCiAgYXQgYEd1enpsZUh0dHBcQ2xpZW50SW50ZXJmYWNlOjpWRVJTSU9OYC4KCiMjIyBDb2xsZWN0aW9uCgotIGBnZXRBbGxgIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBgdG9BcnJheWAgdG8gY29udmVydCBhIGNvbGxlY3Rpb24gdG8gYW4gYXJyYXkuCi0gYGluamVjdGAgaGFzIGJlZW4gcmVtb3ZlZC4KLSBga2V5U2VhcmNoYCBoYXMgYmVlbiByZW1vdmVkLgotIGBnZXRQYXRoYCBubyBsb25nZXIgc3VwcG9ydHMgd2lsZGNhcmQgZXhwcmVzc2lvbnMuIFVzZSBzb21ldGhpbmcgYmV0dGVyIGxpa2UKICBKTUVTUGF0aCBmb3IgdGhpcy4KLSBgc2V0UGF0aGAgbm93IHN1cHBvcnRzIGFwcGVuZGluZyB0byBhbiBleGlzdGluZyBhcnJheSB2aWEgdGhlIGBbXWAgbm90YXRpb24uCgojIyMgRXZlbnRzCgpHdXp6bGUgbm8gbG9uZ2VyIHJlcXVpcmVzIFN5bWZvbnkncyBFdmVudERpc3BhdGNoZXIgY29tcG9uZW50LiBHdXp6bGUgbm93IHVzZXMKYEd1enpsZUh0dHBcRXZlbnRcRW1pdHRlcmAuCgotIGBTeW1mb255XENvbXBvbmVudFxFdmVudERpc3BhdGNoZXJcRXZlbnREaXNwYXRjaGVySW50ZXJmYWNlYCBpcyByZXBsYWNlZCBieQogIGBHdXp6bGVIdHRwXEV2ZW50XEVtaXR0ZXJJbnRlcmZhY2VgLgotIGBTeW1mb255XENvbXBvbmVudFxFdmVudERpc3BhdGNoZXJcRXZlbnREaXNwYXRjaGVyYCBpcyByZXBsYWNlZCBieQogIGBHdXp6bGVIdHRwXEV2ZW50XEVtaXR0ZXJgLgotIGBTeW1mb255XENvbXBvbmVudFxFdmVudERpc3BhdGNoZXJcRXZlbnRgIGlzIHJlcGxhY2VkIGJ5CiAgYEd1enpsZUh0dHBcRXZlbnRcRXZlbnRgLCBhbmQgR3V6emxlIG5vdyBoYXMgYW4gRXZlbnRJbnRlcmZhY2UgaW4KICBgR3V6emxlSHR0cFxFdmVudFxFdmVudEludGVyZmFjZWAuCi0gYEFic3RyYWN0SGFzRGlzcGF0Y2hlcmAgaGFzIG1vdmVkIHRvIGEgdHJhaXQsIGBIYXNFbWl0dGVyVHJhaXRgLCBhbmQKICBgSGFzRGlzcGF0Y2hlckludGVyZmFjZWAgaGFzIG1vdmVkIHRvIGBIYXNFbWl0dGVySW50ZXJmYWNlYC4gUmV0cmlldmluZyB0aGUKICBldmVudCBlbWl0dGVyIG9mIGEgcmVxdWVzdCwgY2xpZW50LCBldGMuIG5vdyB1c2VzIHRoZSBgZ2V0RW1pdHRlcmAgbWV0aG9kCiAgcmF0aGVyIHRoYW4gdGhlIGBnZXREaXNwYXRjaGVyYCBtZXRob2QuCgojIyMjIEVtaXR0ZXIKCi0gVXNlIHRoZSBgb25jZSgpYCBtZXRob2QgdG8gYWRkIGEgbGlzdGVuZXIgdGhhdCBhdXRvbWF0aWNhbGx5IHJlbW92ZXMgaXRzZWxmCiAgdGhlIGZpcnN0IHRpbWUgaXQgaXMgaW52b2tlZC4KLSBVc2UgdGhlIGBsaXN0ZW5lcnMoKWAgbWV0aG9kIHRvIHJldHJpZXZlIGEgbGlzdCBvZiBldmVudCBsaXN0ZW5lcnMgcmF0aGVyIHRoYW4KICB0aGUgYGdldExpc3RlbmVycygpYCBtZXRob2QuCi0gVXNlIGBlbWl0KClgIGluc3RlYWQgb2YgYGRpc3BhdGNoKClgIHRvIGVtaXQgYW4gZXZlbnQgZnJvbSBhbiBlbWl0dGVyLgotIFVzZSBgYXR0YWNoKClgIGluc3RlYWQgb2YgYGFkZFN1YnNjcmliZXIoKWAgYW5kIGBkZXRhY2goKWAgaW5zdGVhZCBvZgogIGByZW1vdmVTdWJzY3JpYmVyKClgLgoKYGBgcGhwCiRtb2NrID0gbmV3IE1vY2soKTsKLy8gMy54CiRyZXF1ZXN0LT5nZXRFdmVudERpc3BhdGNoZXIoKS0+YWRkU3Vic2NyaWJlcigkbW9jayk7CiRyZXF1ZXN0LT5nZXRFdmVudERpc3BhdGNoZXIoKS0+cmVtb3ZlU3Vic2NyaWJlcigkbW9jayk7Ci8vIDQueAokcmVxdWVzdC0+Z2V0RW1pdHRlcigpLT5hdHRhY2goJG1vY2spOwokcmVxdWVzdC0+Z2V0RW1pdHRlcigpLT5kZXRhY2goJG1vY2spOwpgYGAKClVzZSB0aGUgYG9uKClgIG1ldGhvZCB0byBhZGQgYSBsaXN0ZW5lciByYXRoZXIgdGhhbiB0aGUgYGFkZExpc3RlbmVyKClgIG1ldGhvZC4KCmBgYHBocAovLyAzLngKJHJlcXVlc3QtPmdldEV2ZW50RGlzcGF0Y2hlcigpLT5hZGRMaXN0ZW5lcignZm9vJywgZnVuY3Rpb24gKEV2ZW50ICRldmVudCkgeyAvKiAuLi4gKi8gfSApOwovLyA0LngKJHJlcXVlc3QtPmdldEVtaXR0ZXIoKS0+b24oJ2ZvbycsIGZ1bmN0aW9uIChFdmVudCAkZXZlbnQsICRuYW1lKSB7IC8qIC4uLiAqLyB9ICk7CmBgYAoKIyMgSHR0cAoKIyMjIEdlbmVyYWwgY2hhbmdlcwoKLSBUaGUgY2FjZXJ0LnBlbSBjZXJ0aWZpY2F0ZSBoYXMgYmVlbiBtb3ZlZCB0byBgc3JjL2NhY2VydC5wZW1gLgotIEFkZGVkIHRoZSBjb25jZXB0IG9mIGFkYXB0ZXJzIHRoYXQgYXJlIHVzZWQgdG8gdHJhbnNmZXIgcmVxdWVzdHMgb3ZlciB0aGUKICB3aXJlLgotIFNpbXBsaWZpZWQgdGhlIGV2ZW50IHN5c3RlbS4KLSBTZW5kaW5nIHJlcXVlc3RzIGluIHBhcmFsbGVsIGlzIHN0aWxsIHBvc3NpYmxlLCBidXQgYmF0Y2hpbmcgaXMgbm8gbG9uZ2VyIGEKICBjb25jZXB0IG9mIHRoZSBIVFRQIGxheWVyLiBJbnN0ZWFkLCB5b3UgbXVzdCB1c2UgdGhlIGBjb21wbGV0ZWAgYW5kIGBlcnJvcmAKICBldmVudHMgdG8gYXN5bmNocm9ub3VzbHkgbWFuYWdlIHBhcmFsbGVsIHJlcXVlc3QgdHJhbnNmZXJzLgotIGBHdXp6bGVcSHR0cFxVcmxgIGhhcyBtb3ZlZCB0byBgR3V6emxlSHR0cFxVcmxgLgotIGBHdXp6bGVcSHR0cFxRdWVyeVN0cmluZ2AgaGFzIG1vdmVkIHRvIGBHdXp6bGVIdHRwXFF1ZXJ5YC4KLSBRdWVyeUFnZ3JlZ2F0b3JzIGhhdmUgYmVlbiByZXdyaXR0ZW4gc28gdGhhdCB0aGV5IGFyZSBzaW1wbHkgY2FsbGFibGUKICBmdW5jdGlvbnMuCi0gYEd1enpsZUh0dHBcU3RhdGljQ2xpZW50YCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgdGhlIGZ1bmN0aW9ucyBwcm92aWRlZCBpbgogIGBmdW5jdGlvbnMucGhwYCBmb3IgYW4gZWFzeSB0byB1c2Ugc3RhdGljIGNsaWVudCBpbnN0YW5jZS4KLSBFeGNlcHRpb25zIGluIGBHdXp6bGVIdHRwXEV4Y2VwdGlvbmAgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gYWxsIGV4dGVuZCBmcm9tCiAgYEd1enpsZUh0dHBcRXhjZXB0aW9uXFRyYW5zZmVyRXhjZXB0aW9uYC4KCiMjIyBDbGllbnQKCkNhbGxpbmcgbWV0aG9kcyBsaWtlIGBnZXQoKWAsIGBwb3N0KClgLCBgaGVhZCgpYCwgZXRjLiBubyBsb25nZXIgY3JlYXRlIGFuZApyZXR1cm4gYSByZXF1ZXN0LCBidXQgcmF0aGVyIGNyZWF0ZXMgYSByZXF1ZXN0LCBzZW5kcyB0aGUgcmVxdWVzdCwgYW5kIHJldHVybnMKdGhlIHJlc3BvbnNlLgoKYGBgcGhwCi8vIDMuMAokcmVxdWVzdCA9ICRjbGllbnQtPmdldCgnLycpOwokcmVzcG9uc2UgPSAkcmVxdWVzdC0+c2VuZCgpOwoKLy8gNC4wCiRyZXNwb25zZSA9ICRjbGllbnQtPmdldCgnLycpOwoKLy8gb3IsIHRvIG1pcnJvciB0aGUgcHJldmlvdXMgYmVoYXZpb3IKJHJlcXVlc3QgPSAkY2xpZW50LT5jcmVhdGVSZXF1ZXN0KCdHRVQnLCAnLycpOwokcmVzcG9uc2UgPSAkY2xpZW50LT5zZW5kKCRyZXF1ZXN0KTsKYGBgCgpgR3V6emxlSHR0cFxDbGllbnRJbnRlcmZhY2VgIGhhcyBjaGFuZ2VkLgoKLSBUaGUgYHNlbmRgIG1ldGhvZCBubyBsb25nZXIgYWNjZXB0cyBtb3JlIHRoYW4gb25lIHJlcXVlc3QuIFVzZSBgc2VuZEFsbGAgdG8KICBzZW5kIG11bHRpcGxlIHJlcXVlc3RzIGluIHBhcmFsbGVsLgotIGBzZXRVc2VyQWdlbnQoKWAgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGEgZGVmYXVsdCByZXF1ZXN0IG9wdGlvbiBpbnN0ZWFkLiBZb3UKICBjb3VsZCwgZm9yIGV4YW1wbGUsIGRvIHNvbWV0aGluZyBsaWtlOgogIGAkY2xpZW50LT5zZXRDb25maWcoJ2RlZmF1bHRzL2hlYWRlcnMvVXNlci1BZ2VudCcsICdGb28vQmFyICcgLiAkY2xpZW50OjpnZXREZWZhdWx0VXNlckFnZW50KCkpYC4KLSBgc2V0U3NsVmVyaWZpY2F0aW9uKClgIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBkZWZhdWx0IHJlcXVlc3Qgb3B0aW9ucyBpbnN0ZWFkLAogIGxpa2UgYCRjbGllbnQtPnNldENvbmZpZygnZGVmYXVsdHMvdmVyaWZ5JywgdHJ1ZSlgLgoKYEd1enpsZUh0dHBcQ2xpZW50YCBoYXMgY2hhbmdlZC4KCi0gVGhlIGNvbnN0cnVjdG9yIG5vdyBhY2NlcHRzIG9ubHkgYW4gYXNzb2NpYXRpdmUgYXJyYXkuIFlvdSBjYW4gaW5jbHVkZSBhCiAgYGJhc2VfdXJsYCBzdHJpbmcgb3IgYXJyYXkgdG8gdXNlIGEgVVJJIHRlbXBsYXRlIGFzIHRoZSBiYXNlIFVSTCBvZiBhIGNsaWVudC4KICBZb3UgY2FuIGFsc28gc3BlY2lmeSBhIGBkZWZhdWx0c2Aga2V5IHRoYXQgaXMgYW4gYXNzb2NpYXRpdmUgYXJyYXkgb2YgZGVmYXVsdAogIHJlcXVlc3Qgb3B0aW9ucy4gWW91IGNhbiBwYXNzIGFuIGBhZGFwdGVyYCB0byB1c2UgYSBjdXN0b20gYWRhcHRlciwKICBgYmF0Y2hfYWRhcHRlcmAgdG8gdXNlIGEgY3VzdG9tIGFkYXB0ZXIgZm9yIHNlbmRpbmcgcmVxdWVzdHMgaW4gcGFyYWxsZWwsIG9yCiAgYSBgbWVzc2FnZV9mYWN0b3J5YCB0byBjaGFuZ2UgdGhlIGZhY3RvcnkgdXNlZCB0byBjcmVhdGUgSFRUUCByZXF1ZXN0cyBhbmQKICByZXNwb25zZXMuCi0gVGhlIGNsaWVudCBubyBsb25nZXIgZW1pdHMgYSBgY2xpZW50LmNyZWF0ZV9yZXF1ZXN0YCBldmVudC4KLSBDcmVhdGluZyByZXF1ZXN0cyB3aXRoIGEgY2xpZW50IG5vIGxvbmdlciBhdXRvbWF0aWNhbGx5IHV0aWxpemUgYSBVUkkKICB0ZW1wbGF0ZS4gWW91IG11c3QgcGFzcyBhbiBhcnJheSBpbnRvIGEgY3JlYXRpb25hbCBtZXRob2QgKGUuZy4sCiAgYGNyZWF0ZVJlcXVlc3RgLCBgZ2V0YCwgYHB1dGAsIGV0Yy4pIGluIG9yZGVyIHRvIGV4cGFuZCBhIFVSSSB0ZW1wbGF0ZS4KCiMjIyBNZXNzYWdlcwoKTWVzc2FnZXMgbm8gbG9uZ2VyIGhhdmUgcmVmZXJlbmNlcyB0byB0aGVpciBjb3VudGVycGFydHMgKGkuZS4sIGEgcmVxdWVzdCBubwpsb25nZXIgaGFzIGEgcmVmZXJlbmNlIHRvIGl0J3MgcmVzcG9uc2UsIGFuZCBhIHJlc3BvbnNlIG5vIGxvZ2VyIGhhcyBhCnJlZmVyZW5jZSB0byBpdHMgcmVxdWVzdCkuIFRoaXMgYXNzb2NpYXRpb24gaXMgbm93IG1hbmFnZWQgdGhyb3VnaCBhCmBHdXp6bGVIdHRwXEFkYXB0ZXJcVHJhbnNhY3Rpb25JbnRlcmZhY2VgIG9iamVjdC4gWW91IGNhbiBnZXQgcmVmZXJlbmNlcyB0bwp0aGVzZSB0cmFuc2FjdGlvbiBvYmplY3RzIHVzaW5nIHJlcXVlc3QgZXZlbnRzIHRoYXQgYXJlIGVtaXR0ZWQgb3ZlciB0aGUKbGlmZWN5Y2xlIG9mIGEgcmVxdWVzdC4KCiMjIyMgUmVxdWVzdHMgd2l0aCBhIGJvZHkKCi0gYEd1enpsZUh0dHBcTWVzc2FnZVxFbnRpdHlFbmNsb3NpbmdSZXF1ZXN0YCBhbmQKICBgR3V6emxlSHR0cFxNZXNzYWdlXEVudGl0eUVuY2xvc2luZ1JlcXVlc3RJbnRlcmZhY2VgIGhhdmUgYmVlbiByZW1vdmVkLiBUaGUKICBzZXBhcmF0aW9uIGJldHdlZW4gcmVxdWVzdHMgdGhhdCBjb250YWluIGEgYm9keSBhbmQgcmVxdWVzdHMgdGhhdCBkbyBub3QKICBjb250YWluIGEgYm9keSBoYXMgYmVlbiByZW1vdmVkLCBhbmQgbm93IGBHdXp6bGVIdHRwXE1lc3NhZ2VcUmVxdWVzdEludGVyZmFjZWAKICBoYW5kbGVzIGJvdGggdXNlIGNhc2VzLgotIEFueSBtZXRob2QgdGhhdCBwcmV2aW91c2x5IGFjY2VwdHMgYSBgR3V6emxlSHR0cFxSZXNwb25zZWAgb2JqZWN0IG5vdyBhY2NlcHQgYQogIGBHdXp6bGVIdHRwXE1lc3NhZ2VcUmVzcG9uc2VJbnRlcmZhY2VgLgotIGBHdXp6bGVIdHRwXE1lc3NhZ2VcUmVxdWVzdEZhY3RvcnlJbnRlcmZhY2VgIGhhcyBiZWVuIHJlbmFtZWQgdG8KICBgR3V6emxlSHR0cFxNZXNzYWdlXE1lc3NhZ2VGYWN0b3J5SW50ZXJmYWNlYC4gVGhpcyBpbnRlcmZhY2UgaXMgdXNlZCB0byBjcmVhdGUKICBib3RoIHJlcXVlc3RzIGFuZCByZXNwb25zZXMgYW5kIGlzIGltcGxlbWVudGVkIGluCiAgYEd1enpsZUh0dHBcTWVzc2FnZVxNZXNzYWdlRmFjdG9yeWAuCi0gUE9TVCBmaWVsZCBhbmQgZmlsZSBtZXRob2RzIGhhdmUgYmVlbiByZW1vdmVkIGZyb20gdGhlIHJlcXVlc3Qgb2JqZWN0LiBZb3UKICBtdXN0IG5vdyB1c2UgdGhlIG1ldGhvZHMgbWFkZSBhdmFpbGFibGUgdG8gYEd1enpsZUh0dHBcUG9zdFxQb3N0Qm9keUludGVyZmFjZWAKICB0byBjb250cm9sIHRoZSBmb3JtYXQgb2YgYSBQT1NUIGJvZHkuIFJlcXVlc3RzIHRoYXQgYXJlIGNyZWF0ZWQgdXNpbmcgYQogIHN0YW5kYXJkIGBHdXp6bGVIdHRwXE1lc3NhZ2VcTWVzc2FnZUZhY3RvcnlJbnRlcmZhY2VgIHdpbGwgYXV0b21hdGljYWxseSB1c2UKICBhIGBHdXp6bGVIdHRwXFBvc3RcUG9zdEJvZHlgIGJvZHkgaWYgdGhlIGJvZHkgd2FzIHBhc3NlZCBhcyBhbiBhcnJheSBvciBpZgogIHRoZSBtZXRob2QgaXMgUE9TVCBhbmQgbm8gYm9keSBpcyBwcm92aWRlZC4KCmBgYHBocAokcmVxdWVzdCA9ICRjbGllbnQtPmNyZWF0ZVJlcXVlc3QoJ1BPU1QnLCAnLycpOwokcmVxdWVzdC0+Z2V0Qm9keSgpLT5zZXRGaWVsZCgnZm9vJywgJ2JhcicpOwokcmVxdWVzdC0+Z2V0Qm9keSgpLT5hZGRGaWxlKG5ldyBQb3N0RmlsZSgnZmlsZV9rZXknLCBmb3BlbignL3BhdGgvdG8vY29udGVudCcsICdyJykpKTsKYGBgCgojIyMjIEhlYWRlcnMKCi0gYEd1enpsZUh0dHBcTWVzc2FnZVxIZWFkZXJgIGhhcyBiZWVuIHJlbW92ZWQuIEhlYWRlciB2YWx1ZXMgYXJlIG5vdyBzaW1wbHkKICByZXByZXNlbnRlZCBieSBhbiBhcnJheSBvZiB2YWx1ZXMgb3IgYXMgYSBzdHJpbmcuIEhlYWRlciB2YWx1ZXMgYXJlIHJldHVybmVkCiAgYXMgYSBzdHJpbmcgYnkgZGVmYXVsdCB3aGVuIHJldHJpZXZpbmcgYSBoZWFkZXIgdmFsdWUgZnJvbSBhIG1lc3NhZ2UuIFlvdSBjYW4KICBwYXNzIGFuIG9wdGlvbmFsIGFyZ3VtZW50IG9mIGB0cnVlYCB0byByZXRyaWV2ZSBhIGhlYWRlciB2YWx1ZSBhcyBhbiBhcnJheQogIG9mIHN0cmluZ3MgaW5zdGVhZCBvZiBhIHNpbmdsZSBjb25jYXRlbmF0ZWQgc3RyaW5nLgotIGBHdXp6bGVIdHRwXFBvc3RGaWxlYCBhbmQgYEd1enpsZUh0dHBcUG9zdEZpbGVJbnRlcmZhY2VgIGhhdmUgYmVlbiBtb3ZlZCB0bwogIGBHdXp6bGVIdHRwXFBvc3RgLiBUaGlzIGludGVyZmFjZSBoYXMgYmVlbiBzaW1wbGlmaWVkIGFuZCBub3cgYWxsb3dzIHRoZQogIGFkZGl0aW9uIG9mIGFyYml0cmFyeSBoZWFkZXJzLgotIEN1c3RvbSBoZWFkZXJzIGxpa2UgYEd1enpsZUh0dHBcTWVzc2FnZVxIZWFkZXJcTGlua2AgaGF2ZSBiZWVuIHJlbW92ZWQuIE1vc3QKICBvZiB0aGUgY3VzdG9tIGhlYWRlcnMgYXJlIG5vdyBoYW5kbGVkIHNlcGFyYXRlbHkgaW4gc3BlY2lmaWMKICBzdWJzY3JpYmVycy9wbHVnaW5zLCBhbmQgYEd1enpsZUh0dHBcTWVzc2FnZVxIZWFkZXJWYWx1ZXM6OnBhcnNlUGFyYW1zKClgIGhhcwogIGJlZW4gdXBkYXRlZCB0byBwcm9wZXJseSBoYW5kbGUgaGVhZGVycyB0aGF0IGNvbnRhaW4gcGFyYW1ldGVycyAobGlrZSB0aGUKICBgTGlua2AgaGVhZGVyKS4KCiMjIyMgUmVzcG9uc2VzCgotIGBHdXp6bGVIdHRwXE1lc3NhZ2VcUmVzcG9uc2U6OmdldEluZm8oKWAgYW5kCiAgYEd1enpsZUh0dHBcTWVzc2FnZVxSZXNwb25zZTo6c2V0SW5mbygpYCBoYXZlIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBldmVudAogIHN5c3RlbSB0byByZXRyaWV2ZSB0aGlzIHR5cGUgb2YgaW5mb3JtYXRpb24uCi0gYEd1enpsZUh0dHBcTWVzc2FnZVxSZXNwb25zZTo6Z2V0UmF3SGVhZGVycygpYCBoYXMgYmVlbiByZW1vdmVkLgotIGBHdXp6bGVIdHRwXE1lc3NhZ2VcUmVzcG9uc2U6OmdldE1lc3NhZ2UoKWAgaGFzIGJlZW4gcmVtb3ZlZC4KLSBgR3V6emxlSHR0cFxNZXNzYWdlXFJlc3BvbnNlOjpjYWxjdWxhdGVBZ2UoKWAgYW5kIG90aGVyIGNhY2hlIHNwZWNpZmljCiAgbWV0aG9kcyBoYXZlIG1vdmVkIHRvIHRoZSBDYWNoZVN1YnNjcmliZXIuCi0gSGVhZGVyIHNwZWNpZmljIGhlbHBlciBmdW5jdGlvbnMgbGlrZSBgZ2V0Q29udGVudE1kNSgpYCBoYXZlIGJlZW4gcmVtb3ZlZC4KICBKdXN0IHVzZSBgZ2V0SGVhZGVyKCdDb250ZW50LU1ENScpYCBpbnN0ZWFkLgotIGBHdXp6bGVIdHRwXE1lc3NhZ2VcUmVzcG9uc2U6OnNldFJlcXVlc3QoKWAgYW5kCiAgYEd1enpsZUh0dHBcTWVzc2FnZVxSZXNwb25zZTo6Z2V0UmVxdWVzdCgpYCBoYXZlIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZSBldmVudAogIHN5c3RlbSB0byB3b3JrIHdpdGggcmVxdWVzdCBhbmQgcmVzcG9uc2Ugb2JqZWN0cyBhcyBhIHRyYW5zYWN0aW9uLgotIGBHdXp6bGVIdHRwXE1lc3NhZ2VcUmVzcG9uc2U6OmdldFJlZGlyZWN0Q291bnQoKWAgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIHRoZQogIFJlZGlyZWN0IHN1YnNjcmliZXIgaW5zdGVhZC4KLSBgR3V6emxlSHR0cFxNZXNzYWdlXFJlc3BvbnNlOjppc1N1Y2Nlc3NmdWwoKWAgYW5kIG90aGVyIHJlbGF0ZWQgbWV0aG9kcyBoYXZlCiAgYmVlbiByZW1vdmVkLiBVc2UgYGdldFN0YXR1c0NvZGUoKWAgaW5zdGVhZC4KCiMjIyMgU3RyZWFtaW5nIHJlc3BvbnNlcwoKU3RyZWFtaW5nIHJlcXVlc3RzIGNhbiBub3cgYmUgY3JlYXRlZCBieSBhIGNsaWVudCBkaXJlY3RseSwgcmV0dXJuaW5nIGEKYEd1enpsZUh0dHBcTWVzc2FnZVxSZXNwb25zZUludGVyZmFjZWAgb2JqZWN0IHRoYXQgY29udGFpbnMgYSBib2R5IHN0cmVhbQpyZWZlcmVuY2luZyBhbiBvcGVuIFBIUCBIVFRQIHN0cmVhbS4KCmBgYHBocAovLyAzLjAKdXNlIEd1enpsZVxTdHJlYW1cUGhwU3RyZWFtUmVxdWVzdEZhY3Rvcnk7CiRyZXF1ZXN0ID0gJGNsaWVudC0+Z2V0KCcvJyk7CiRmYWN0b3J5ID0gbmV3IFBocFN0cmVhbVJlcXVlc3RGYWN0b3J5KCk7CiRzdHJlYW0gPSAkZmFjdG9yeS0+ZnJvbVJlcXVlc3QoJHJlcXVlc3QpOwokZGF0YSA9ICRzdHJlYW0tPnJlYWQoMTAyNCk7CgovLyA0LjAKJHJlc3BvbnNlID0gJGNsaWVudC0+Z2V0KCcvJywgWydzdHJlYW0nID0+IHRydWVdKTsKLy8gUmVhZCBzb21lIGRhdGEgb2ZmIG9mIHRoZSBzdHJlYW0gaW4gdGhlIHJlc3BvbnNlIGJvZHkKJGRhdGEgPSAkcmVzcG9uc2UtPmdldEJvZHkoKS0+cmVhZCgxMDI0KTsKYGBgCgojIyMjIFJlZGlyZWN0cwoKVGhlIGBjb25maWd1cmVSZWRpcmVjdHMoKWAgbWV0aG9kIGhhcyBiZWVuIHJlbW92ZWQgaW4gZmF2b3Igb2YgYQpgYWxsb3dfcmVkaXJlY3RzYCByZXF1ZXN0IG9wdGlvbi4KCmBgYHBocAovLyBTdGFuZGFyZCByZWRpcmVjdHMgd2l0aCBhIGRlZmF1bHQgb2YgYSBtYXggb2YgNSByZWRpcmVjdHMKJHJlcXVlc3QgPSAkY2xpZW50LT5jcmVhdGVSZXF1ZXN0KCdHRVQnLCAnLycsIFsnYWxsb3dfcmVkaXJlY3RzJyA9PiB0cnVlXSk7CgovLyBTdHJpY3QgcmVkaXJlY3RzIHdpdGggYSBjdXN0b20gbnVtYmVyIG9mIHJlZGlyZWN0cwokcmVxdWVzdCA9ICRjbGllbnQtPmNyZWF0ZVJlcXVlc3QoJ0dFVCcsICcvJywgWwogICAgJ2FsbG93X3JlZGlyZWN0cycgPT4gWydtYXgnID0+IDUsICdzdHJpY3QnID0+IHRydWVdCl0pOwpgYGAKCiMjIyMgRW50aXR5Qm9keQoKRW50aXR5Qm9keSBpbnRlcmZhY2VzIGFuZCBjbGFzc2VzIGhhdmUgYmVlbiByZW1vdmVkIG9yIG1vdmVkIHRvCmBHdXp6bGVIdHRwXFN0cmVhbWAuIEFsbCBjbGFzc2VzIGFuZCBpbnRlcmZhY2VzIHRoYXQgb25jZSByZXF1aXJlZApgR3V6emxlSHR0cFxFbnRpdHlCb2R5SW50ZXJmYWNlYCBub3cgcmVxdWlyZQpgR3V6emxlSHR0cFxTdHJlYW1cU3RyZWFtSW50ZXJmYWNlYC4gQ3JlYXRpbmcgYSBuZXcgYm9keSBmb3IgYSByZXF1ZXN0IG5vCmxvbmdlciB1c2VzIGBHdXp6bGVIdHRwXEVudGl0eUJvZHk6OmZhY3RvcnlgIGJ1dCBub3cgdXNlcwpgR3V6emxlSHR0cFxTdHJlYW1cU3RyZWFtOjpmYWN0b3J5YCBvciBldmVuIGJldHRlcjoKYEd1enpsZUh0dHBcU3RyZWFtXGNyZWF0ZSgpYC4KCi0gYEd1enpsZVxIdHRwXEVudGl0eUJvZHlJbnRlcmZhY2VgIGlzIG5vdyBgR3V6emxlSHR0cFxTdHJlYW1cU3RyZWFtSW50ZXJmYWNlYAotIGBHdXp6bGVcSHR0cFxFbnRpdHlCb2R5YCBpcyBub3cgYEd1enpsZUh0dHBcU3RyZWFtXFN0cmVhbWAKLSBgR3V6emxlXEh0dHBcQ2FjaGluZ0VudGl0eUJvZHlgIGlzIG5vdyBgR3V6emxlSHR0cFxTdHJlYW1cQ2FjaGluZ1N0cmVhbWAKLSBgR3V6emxlXEh0dHBcUmVhZExpbWl0RW50aXR5Qm9keWAgaXMgbm93IGBHdXp6bGVIdHRwXFN0cmVhbVxMaW1pdFN0cmVhbWAKLSBgR3V6emxlXEh0dHBcSW9FbWl0dHlpbkVudGl0eUJvZHlgIGhhcyBiZWVuIHJlbW92ZWQuCgojIyMjIFJlcXVlc3QgbGlmZWN5Y2xlIGV2ZW50cwoKUmVxdWVzdHMgcHJldmlvdXNseSBzdWJtaXR0ZWQgYSBsYXJnZSBudW1iZXIgb2YgcmVxdWVzdHMuIFRoZSBudW1iZXIgb2YgZXZlbnRzCmVtaXR0ZWQgb3ZlciB0aGUgbGlmZWN5Y2xlIG9mIGEgcmVxdWVzdCBoYXMgYmVlbiBzaWduaWZpY2FudGx5IHJlZHVjZWQgdG8gbWFrZQppdCBlYXNpZXIgdG8gdW5kZXJzdGFuZCBob3cgdG8gZXh0ZW5kIHRoZSBiZWhhdmlvciBvZiBhIHJlcXVlc3QuIEFsbCBldmVudHMKZW1pdHRlZCBkdXJpbmcgdGhlIGxpZmVjeWNsZSBvZiBhIHJlcXVlc3Qgbm93IGVtaXQgYSBjdXN0b20KYEd1enpsZUh0dHBcRXZlbnRcRXZlbnRJbnRlcmZhY2VgIG9iamVjdCB0aGF0IGNvbnRhaW5zIGNvbnRleHQgcHJvdmlkaW5nCm1ldGhvZHMgYW5kIGEgd2F5IGluIHdoaWNoIHRvIG1vZGlmeSB0aGUgdHJhbnNhY3Rpb24gYXQgdGhhdCBzcGVjaWZpYyBwb2ludCBpbgp0aW1lIChlLmcuLCBpbnRlcmNlcHQgdGhlIHJlcXVlc3QgYW5kIHNldCBhIHJlc3BvbnNlIG9uIHRoZSB0cmFuc2FjdGlvbikuCgotIGByZXF1ZXN0LmJlZm9yZV9zZW5kYCBoYXMgYmVlbiByZW5hbWVkIHRvIGBiZWZvcmVgIGFuZCBub3cgZW1pdHMgYQogIGBHdXp6bGVIdHRwXEV2ZW50XEJlZm9yZUV2ZW50YAotIGByZXF1ZXN0LmNvbXBsZXRlYCBoYXMgYmVlbiByZW5hbWVkIHRvIGBjb21wbGV0ZWAgYW5kIG5vdyBlbWl0cyBhCiAgYEd1enpsZUh0dHBcRXZlbnRcQ29tcGxldGVFdmVudGAuCi0gYHJlcXVlc3Quc2VudGAgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGBjb21wbGV0ZWAuCi0gYHJlcXVlc3Quc3VjY2Vzc2AgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGBjb21wbGV0ZWAuCi0gYGVycm9yYCBpcyBub3cgYW4gZXZlbnQgdGhhdCBlbWl0cyBhIGBHdXp6bGVIdHRwXEV2ZW50XEVycm9yRXZlbnRgLgotIGByZXF1ZXN0LmV4Y2VwdGlvbmAgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGBlcnJvcmAuCi0gYHJlcXVlc3QucmVjZWl2ZS5zdGF0dXNfbGluZWAgaGFzIGJlZW4gcmVtb3ZlZC4KLSBgY3VybC5jYWxsYmFjay5wcm9ncmVzc2AgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGEgY3VzdG9tIGBTdHJlYW1JbnRlcmZhY2VgIHRvCiAgbWFpbnRhaW4gYSBzdGF0dXMgdXBkYXRlLgotIGBjdXJsLmNhbGxiYWNrLndyaXRlYCBoYXMgYmVlbiByZW1vdmVkLiBVc2UgYSBjdXN0b20gYFN0cmVhbUludGVyZmFjZWAgdG8KICBpbnRlcmNlcHQgd3JpdGVzLgotIGBjdXJsLmNhbGxiYWNrLnJlYWRgIGhhcyBiZWVuIHJlbW92ZWQuIFVzZSBhIGN1c3RvbSBgU3RyZWFtSW50ZXJmYWNlYCB0bwogIGludGVyY2VwdCByZWFkcy4KCmBoZWFkZXJzYCBpcyBhIG5ldyBldmVudCB0aGF0IGlzIGVtaXR0ZWQgYWZ0ZXIgdGhlIHJlc3BvbnNlIGhlYWRlcnMgb2YgYQpyZXF1ZXN0IGhhdmUgYmVlbiByZWNlaXZlZCBiZWZvcmUgdGhlIGJvZHkgb2YgdGhlIHJlc3BvbnNlIGlzIGRvd25sb2FkZWQuIFRoaXMKZXZlbnQgZW1pdHMgYSBgR3V6emxlSHR0cFxFdmVudFxIZWFkZXJzRXZlbnRgLgoKWW91IGNhbiBpbnRlcmNlcHQgYSByZXF1ZXN0IGFuZCBpbmplY3QgYSByZXNwb25zZSB1c2luZyB0aGUgYGludGVyY2VwdCgpYCBldmVudApvZiBhIGBHdXp6bGVIdHRwXEV2ZW50XEJlZm9yZUV2ZW50YCwgYEd1enpsZUh0dHBcRXZlbnRcQ29tcGxldGVFdmVudGAsIGFuZApgR3V6emxlSHR0cFxFdmVudFxFcnJvckV2ZW50YCBldmVudC4KClNlZTogaHR0cDovL2RvY3MuZ3V6emxlcGhwLm9yZy9lbi9sYXRlc3QvZXZlbnRzLmh0bWwKCiMjIEluZmxlY3Rpb24KClRoZSBgR3V6emxlXEluZmxlY3Rpb25gIG5hbWVzcGFjZSBoYXMgYmVlbiByZW1vdmVkLiBUaGlzIGlzIG5vdCBhIGNvcmUgY29uY2VybgpvZiBHdXp6bGUuCgojIyBJdGVyYXRvcgoKVGhlIGBHdXp6bGVcSXRlcmF0b3JgIG5hbWVzcGFjZSBoYXMgYmVlbiByZW1vdmVkLgoKLSBgR3V6emxlXEl0ZXJhdG9yXEFwcGVuZEl0ZXJhdG9yYCwgYEd1enpsZVxJdGVyYXRvclxDaHVua2VkSXRlcmF0b3JgLCBhbmQKICBgR3V6emxlXEl0ZXJhdG9yXE1ldGhvZFByb3h5SXRlcmF0b3JgIGFyZSBuaWNlLCBidXQgbm90IGEgY29yZSByZXF1aXJlbWVudCBvZgogIEd1enpsZSBpdHNlbGYuCi0gYEd1enpsZVxJdGVyYXRvclxGaWx0ZXJJdGVyYXRvcmAgaXMgbm8gbG9uZ2VyIG5lZWRlZCBiZWNhdXNlIGFuIGVxdWl2YWxlbnQKICBjbGFzcyBpcyBzaGlwcGVkIHdpdGggUEhQIDUuNC4KLSBgR3V6emxlXEl0ZXJhdG9yXE1hcEl0ZXJhdG9yYCBpcyBub3QgcmVhbGx5IG5lZWRlZCB3aGVuIHVzaW5nIFBIUCA1LjUgYmVjYXVzZQogIGl0J3MgZWFzaWVyIHRvIGp1c3Qgd3JhcCBhbiBpdGVyYXRvciBpbiBhIGdlbmVyYXRvciB0aGF0IG1hcHMgdmFsdWVzLgoKRm9yIGEgcmVwbGFjZW1lbnQgb2YgdGhlc2UgaXRlcmF0b3JzLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL25pa2ljL2l0ZXIKCiMjIExvZwoKVGhlIExvZ1BsdWdpbiBoYXMgbW92ZWQgdG8gaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9sb2ctc3Vic2NyaWJlci4gVGhlCmBHdXp6bGVcTG9nYCBuYW1lc3BhY2UgaGFzIGJlZW4gcmVtb3ZlZC4gR3V6emxlIG5vdyByZWxpZXMgb24KYFBzclxMb2dcTG9nZ2VySW50ZXJmYWNlYCBmb3IgYWxsIGxvZ2dpbmcuIFRoZSBNZXNzYWdlRm9ybWF0dGVyIGNsYXNzIGhhcyBiZWVuCm1vdmVkIHRvIGBHdXp6bGVIdHRwXFN1YnNjcmliZXJcTG9nXEZvcm1hdHRlcmAuCgojIyBQYXJzZXIKClRoZSBgR3V6emxlXFBhcnNlcmAgbmFtZXNwYWNlIGhhcyBiZWVuIHJlbW92ZWQuIFRoaXMgd2FzIHByZXZpb3VzbHkgdXNlZCB0bwptYWtlIGl0IHBvc3NpYmxlIHRvIHBsdWcgaW4gY3VzdG9tIHBhcnNlcnMgZm9yIGNvb2tpZXMsIG1lc3NhZ2VzLCBVUkkKdGVtcGxhdGVzLCBhbmQgVVJMczsgaG93ZXZlciwgdGhpcyBsZXZlbCBvZiBjb21wbGV4aXR5IGlzIG5vdCBuZWVkZWQgaW4gR3V6emxlCnNvIGl0IGhhcyBiZWVuIHJlbW92ZWQuCgotIENvb2tpZTogQ29va2llIHBhcnNpbmcgbG9naWMgaGFzIGJlZW4gbW92ZWQgdG8KICBgR3V6emxlSHR0cFxDb29raWVcU2V0Q29va2llOjpmcm9tU3RyaW5nYC4KLSBNZXNzYWdlOiBNZXNzYWdlIHBhcnNpbmcgbG9naWMgZm9yIGJvdGggcmVxdWVzdHMgYW5kIHJlc3BvbnNlcyBoYXMgYmVlbiBtb3ZlZAogIHRvIGBHdXp6bGVIdHRwXE1lc3NhZ2VcTWVzc2FnZUZhY3Rvcnk6OmZyb21NZXNzYWdlYC4gTWVzc2FnZSBwYXJzaW5nIGlzIG9ubHkKICB1c2VkIGluIGRlYnVnZ2luZyBvciBkZXNlcmlhbGl6aW5nIG1lc3NhZ2VzLCBzbyBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgZm9yCiAgR3V6emxlIGFzIGEgbGlicmFyeSB0byBhZGQgdGhpcyBsZXZlbCBvZiBjb21wbGV4aXR5IHRvIHBhcnNpbmcgbWVzc2FnZXMuCi0gVXJpVGVtcGxhdGU6IFVSSSB0ZW1wbGF0ZSBwYXJzaW5nIGhhcyBiZWVuIG1vdmVkIHRvCiAgYEd1enpsZUh0dHBcVXJpVGVtcGxhdGVgLiBUaGUgR3V6emxlIGxpYnJhcnkgd2lsbCBhdXRvbWF0aWNhbGx5IHVzZSB0aGUgUEVDTAogIFVSSSB0ZW1wbGF0ZSBsaWJyYXJ5IGlmIGl0IGlzIGluc3RhbGxlZC4KLSBVcmw6IFVSTCBwYXJzaW5nIGlzIG5vdyBwZXJmb3JtZWQgaW4gYEd1enpsZUh0dHBcVXJsOjpmcm9tU3RyaW5nYCAocHJldmlvdXNseQogIGl0IHdhcyBgR3V6emxlXEh0dHBcVXJsOjpmYWN0b3J5KClgKS4gSWYgY3VzdG9tIFVSTCBwYXJzaW5nIGlzIG5lY2Vzc2FyeSwKICB0aGVuIGRldmVsb3BlcnMgYXJlIGZyZWUgdG8gc3ViY2xhc3MgYEd1enpsZUh0dHBcVXJsYC4KCiMjIFBsdWdpbgoKVGhlIGBHdXp6bGVcUGx1Z2luYCBuYW1lc3BhY2UgaGFzIGJlZW4gcmVuYW1lZCB0byBgR3V6emxlSHR0cFxTdWJzY3JpYmVyYC4KU2V2ZXJhbCBwbHVnaW5zIGFyZSBzaGlwcGluZyB3aXRoIHRoZSBjb3JlIEd1enpsZSBsaWJyYXJ5IHVuZGVyIHRoaXMgbmFtZXNwYWNlLgoKLSBgR3V6emxlSHR0cFxTdWJzY3JpYmVyXENvb2tpZWA6IFJlcGxhY2VzIHRoZSBvbGQgQ29va2llUGx1Z2luLiBDb29raWUgamFyCiAgY29kZSBoYXMgbW92ZWQgdG8gYEd1enpsZUh0dHBcQ29va2llYC4KLSBgR3V6emxlSHR0cFxTdWJzY3JpYmVyXEhpc3RvcnlgOiBSZXBsYWNlcyB0aGUgb2xkIEhpc3RvcnlQbHVnaW4uCi0gYEd1enpsZUh0dHBcU3Vic2NyaWJlclxIdHRwRXJyb3JgOiBUaHJvd3MgZXJyb3JzIHdoZW4gYSBiYWQgSFRUUCByZXNwb25zZSBpcwogIHJlY2VpdmVkLgotIGBHdXp6bGVIdHRwXFN1YnNjcmliZXJcTW9ja2A6IFJlcGxhY2VzIHRoZSBvbGQgTW9ja1BsdWdpbi4KLSBgR3V6emxlSHR0cFxTdWJzY3JpYmVyXFByZXBhcmVgOiBQcmVwYXJlcyB0aGUgYm9keSBvZiBhIHJlcXVlc3QganVzdCBiZWZvcmUKICBzZW5kaW5nLiBUaGlzIHN1YnNjcmliZXIgaXMgYXR0YWNoZWQgdG8gYWxsIHJlcXVlc3RzIGJ5IGRlZmF1bHQuCi0gYEd1enpsZUh0dHBcU3Vic2NyaWJlclxSZWRpcmVjdGA6IFJlcGxhY2VzIHRoZSBSZWRpcmVjdFBsdWdpbi4KClRoZSBmb2xsb3dpbmcgcGx1Z2lucyBoYXZlIGJlZW4gcmVtb3ZlZCAodGhpcmQtcGFydGllcyBhcmUgZnJlZSB0byByZS1pbXBsZW1lbnQKdGhlc2UgaWYgbmVlZGVkKToKCi0gYEd1enpsZUh0dHBcUGx1Z2luXEFzeW5jYCBoYXMgYmVlbiByZW1vdmVkLgotIGBHdXp6bGVIdHRwXFBsdWdpblxDdXJsQXV0aGAgaGFzIGJlZW4gcmVtb3ZlZC4KLSBgR3V6emxlSHR0cFxQbHVnaW5cRXJyb3JSZXNwb25zZVxFcnJvclJlc3BvbnNlUGx1Z2luYCBoYXMgYmVlbiByZW1vdmVkLiBUaGlzCiAgZnVuY3Rpb25hbGl0eSBzaG91bGQgaW5zdGVhZCBiZSBpbXBsZW1lbnRlZCB3aXRoIGV2ZW50IGxpc3RlbmVycyB0aGF0IG9jY3VyCiAgYWZ0ZXIgbm9ybWFsIHJlc3BvbnNlIHBhcnNpbmcgb2NjdXJzIGluIHRoZSBndXp6bGUvY29tbWFuZCBwYWNrYWdlLgoKVGhlIGZvbGxvd2luZyBwbHVnaW5zIGFyZSBub3QgcGFydCBvZiB0aGUgY29yZSBHdXp6bGUgcGFja2FnZSwgYnV0IGFyZSBwcm92aWRlZAppbiBzZXBhcmF0ZSByZXBvc2l0b3JpZXM6CgotIGBHdXp6bGVcSHR0cFxQbHVnaW5cQmFja29mZlBsdWdpbmAgaGFzIGJlZW4gcmV3cml0dGVuIHRvIGJlIG11Y2ggc2ltcGxlcgogIHRvIGJ1aWxkIGN1c3RvbSByZXRyeSBwb2xpY2llcyB1c2luZyBzaW1wbGUgZnVuY3Rpb25zIHJhdGhlciB0aGFuIHZhcmlvdXMKICBjaGFpbmVkIGNsYXNzZXMuIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9yZXRyeS1zdWJzY3JpYmVyCi0gYEd1enpsZVxIdHRwXFBsdWdpblxDYWNoZVxDYWNoZVBsdWdpbmAgaGFzIG1vdmVkIHRvCiAgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9jYWNoZS1zdWJzY3JpYmVyCi0gYEd1enpsZVxIdHRwXFBsdWdpblxMb2dcTG9nUGx1Z2luYCBoYXMgbW92ZWQgdG8KICBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2xvZy1zdWJzY3JpYmVyCi0gYEd1enpsZVxIdHRwXFBsdWdpblxNZDVcTWQ1UGx1Z2luYCBoYXMgbW92ZWQgdG8KICBodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL21lc3NhZ2UtaW50ZWdyaXR5LXN1YnNjcmliZXIKLSBgR3V6emxlXEh0dHBcUGx1Z2luXE1vY2tcTW9ja1BsdWdpbmAgaGFzIG1vdmVkIHRvCiAgYEd1enpsZUh0dHBcU3Vic2NyaWJlclxNb2NrU3Vic2NyaWJlcmAuCi0gYEd1enpsZVxIdHRwXFBsdWdpblxPYXV0aFxPYXV0aFBsdWdpbmAgaGFzIG1vdmVkIHRvCiAgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9vYXV0aC1zdWJzY3JpYmVyCgojIyBTZXJ2aWNlCgpUaGUgc2VydmljZSBkZXNjcmlwdGlvbiBsYXllciBvZiBHdXp6bGUgaGFzIG1vdmVkIGludG8gdHdvIHNlcGFyYXRlIHBhY2thZ2VzOgoKLSBodHRwOi8vZ2l0aHViLmNvbS9ndXp6bGUvY29tbWFuZCBQcm92aWRlcyBhIGhpZ2ggbGV2ZWwgYWJzdHJhY3Rpb24gb3ZlciB3ZWIKICBzZXJ2aWNlcyBieSByZXByZXNlbnRpbmcgd2ViIHNlcnZpY2Ugb3BlcmF0aW9ucyB1c2luZyBjb21tYW5kcy4KLSBodHRwOi8vZ2l0aHViLmNvbS9ndXp6bGUvZ3V6emxlLXNlcnZpY2VzIFByb3ZpZGVzIGFuIGltcGxlbWVudGF0aW9uIG9mCiAgZ3V6emxlL2NvbW1hbmQgdGhhdCBwcm92aWRlcyByZXF1ZXN0IHNlcmlhbGl6YXRpb24gYW5kIHJlc3BvbnNlIHBhcnNpbmcgdXNpbmcKICBHdXp6bGUgc2VydmljZSBkZXNjcmlwdGlvbnMuCgojIyBTdHJlYW0KClN0cmVhbSBoYXZlIG1vdmVkIHRvIGEgc2VwYXJhdGUgcGFja2FnZSBhdmFpbGFibGUgYXQKaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9zdHJlYW1zLgoKYEd1enpsZVxTdHJlYW1cU3RyZWFtSW50ZXJmYWNlYCBoYXMgYmVlbiBnaXZlbiBhIGxhcmdlIHVwZGF0ZSB0byBjbGVhbmx5IHRha2UKb24gdGhlIHJlc3BvbnNpYmlsaXRpZXMgb2YgYEd1enpsZVxIdHRwXEVudGl0eUJvZHlgIGFuZApgR3V6emxlXEh0dHBcRW50aXR5Qm9keUludGVyZmFjZWAgbm93IHRoYXQgdGhleSBoYXZlIGJlZW4gcmVtb3ZlZC4gVGhlIG51bWJlcgpvZiBtZXRob2RzIGltcGxlbWVudGVkIGJ5IHRoZSBgU3RyZWFtSW50ZXJmYWNlYCBoYXMgYmVlbiBkcmFzdGljYWxseSByZWR1Y2VkIHRvCmFsbG93IGRldmVsb3BlcnMgdG8gbW9yZSBlYXNpbHkgZXh0ZW5kIGFuZCBkZWNvcmF0ZSBzdHJlYW0gYmVoYXZpb3IuCgojIyBSZW1vdmVkIG1ldGhvZHMgZnJvbSBTdHJlYW1JbnRlcmZhY2UKCi0gYGdldFN0cmVhbWAgYW5kIGBzZXRTdHJlYW1gIGhhdmUgYmVlbiByZW1vdmVkIHRvIGJldHRlciBlbmNhcHN1bGF0ZSBzdHJlYW1zLgotIGBnZXRNZXRhZGF0YWAgYW5kIGBzZXRNZXRhZGF0YWAgaGF2ZSBiZWVuIHJlbW92ZWQgaW4gZmF2b3Igb2YKICBgR3V6emxlSHR0cFxTdHJlYW1cTWV0YWRhdGFTdHJlYW1JbnRlcmZhY2VgLgotIGBnZXRXcmFwcGVyYCwgYGdldFdyYXBwZXJEYXRhYCwgYGdldFN0cmVhbVR5cGVgLCBhbmQgYGdldFVyaWAgaGF2ZSBhbGwgYmVlbgogIHJlbW92ZWQuIFRoaXMgZGF0YSBpcyBhY2Nlc3NpYmxlIHdoZW4KICB1c2luZyBzdHJlYW1zIHRoYXQgaW1wbGVtZW50IGBHdXp6bGVIdHRwXFN0cmVhbVxNZXRhZGF0YVN0cmVhbUludGVyZmFjZWAuCi0gYHJld2luZGAgaGFzIGJlZW4gcmVtb3ZlZC4gVXNlIGBzZWVrKDApYCBmb3IgYSBzaW1pbGFyIGJlaGF2aW9yLgoKIyMgUmVuYW1lZCBtZXRob2RzCgotIGBkZXRhY2hTdHJlYW1gIGhhcyBiZWVuIHJlbmFtZWQgdG8gYGRldGFjaGAuCi0gYGZlb2ZgIGhhcyBiZWVuIHJlbmFtZWQgdG8gYGVvZmAuCi0gYGZ0ZWxsYCBoYXMgYmVlbiByZW5hbWVkIHRvIGB0ZWxsYC4KLSBgcmVhZExpbmVgIGhhcyBtb3ZlZCBmcm9tIGFuIGluc3RhbmNlIG1ldGhvZCB0byBhIHN0YXRpYyBjbGFzcyBtZXRob2Qgb2YKICBgR3V6emxlSHR0cFxTdHJlYW1cU3RyZWFtYC4KCiMjIE1ldGFkYXRhIHN0cmVhbXMKCmBHdXp6bGVIdHRwXFN0cmVhbVxNZXRhZGF0YVN0cmVhbUludGVyZmFjZWAgaGFzIGJlZW4gYWRkZWQgdG8gZGVub3RlIHN0cmVhbXMKdGhhdCBjb250YWluIGFkZGl0aW9uYWwgbWV0YWRhdGEgYWNjZXNzaWJsZSB2aWEgYGdldE1ldGFkYXRhKClgLgpgR3V6emxlSHR0cFxTdHJlYW1cU3RyZWFtSW50ZXJmYWNlOjpnZXRNZXRhZGF0YWAgYW5kCmBHdXp6bGVIdHRwXFN0cmVhbVxTdHJlYW1JbnRlcmZhY2U6OnNldE1ldGFkYXRhYCBoYXZlIGJlZW4gcmVtb3ZlZC4KCiMjIFN0cmVhbVJlcXVlc3RGYWN0b3J5CgpUaGUgZW50aXJlIGNvbmNlcHQgb2YgdGhlIFN0cmVhbVJlcXVlc3RGYWN0b3J5IGhhcyBiZWVuIHJlbW92ZWQuIFRoZSB3YXkgdGhpcwp3YXMgdXNlZCBpbiBHdXp6bGUgMyBicm9rZSB0aGUgYWN0dWFsIGludGVyZmFjZSBvZiBzZW5kaW5nIHN0cmVhbWluZyByZXF1ZXN0cwooaW5zdGVhZCBvZiBnZXR0aW5nIGJhY2sgYSBSZXNwb25zZSwgeW91IGdvdCBhIFN0cmVhbUludGVyZmFjZSkuIFN0cmVhbWluZwpQSFAgcmVxdWVzdHMgYXJlIG5vdyBpbXBsZW1lbnRlZCB0aHJvdWdoIHRoZSBgR3V6emxlSHR0cFxBZGFwdGVyXFN0cmVhbUFkYXB0ZXJgLgoKMy42IHRvIDMuNwotLS0tLS0tLS0tCgojIyMgRGVwcmVjYXRpb25zCgotIFlvdSBjYW4gbm93IGVuYWJsZSBFX1VTRVJfREVQUkVDQVRFRCB3YXJuaW5ncyB0byBzZWUgaWYgeW91IGFyZSB1c2luZyBhbnkgZGVwcmVjYXRlZCBtZXRob2RzLjoKCmBgYHBocApcR3V6emxlXENvbW1vblxWZXJzaW9uOjokZW1pdFdhcm5pbmdzID0gdHJ1ZTsKYGBgCgpUaGUgZm9sbG93aW5nIEFQSXMgYW5kIG9wdGlvbnMgaGF2ZSBiZWVuIG1hcmtlZCBhcyBkZXByZWNhdGVkOgoKLSBNYXJrZWQgYEd1enpsZVxIdHRwXE1lc3NhZ2VcUmVxdWVzdDo6aXNSZXNwb25zZUJvZHlSZXBlYXRhYmxlKClgIGFzIGRlcHJlY2F0ZWQuIFVzZSBgJHJlcXVlc3QtPmdldFJlc3BvbnNlQm9keSgpLT5pc1JlcGVhdGFibGUoKWAgaW5zdGVhZC4KLSBNYXJrZWQgYEd1enpsZVxIdHRwXE1lc3NhZ2VcUmVxdWVzdDo6Y2FuQ2FjaGUoKWAgYXMgZGVwcmVjYXRlZC4gVXNlIGBHdXp6bGVcUGx1Z2luXENhY2hlXERlZmF1bHRDYW5DYWNoZVN0cmF0ZWd5LT5jYW5DYWNoZVJlcXVlc3QoKWAgaW5zdGVhZC4KLSBNYXJrZWQgYEd1enpsZVxIdHRwXE1lc3NhZ2VcUmVxdWVzdDo6Y2FuQ2FjaGUoKWAgYXMgZGVwcmVjYXRlZC4gVXNlIGBHdXp6bGVcUGx1Z2luXENhY2hlXERlZmF1bHRDYW5DYWNoZVN0cmF0ZWd5LT5jYW5DYWNoZVJlcXVlc3QoKWAgaW5zdGVhZC4KLSBNYXJrZWQgYEd1enpsZVxIdHRwXE1lc3NhZ2VcUmVxdWVzdDo6c2V0SXNSZWRpcmVjdCgpYCBhcyBkZXByZWNhdGVkLiBVc2UgdGhlIEhpc3RvcnlQbHVnaW4gaW5zdGVhZC4KLSBNYXJrZWQgYEd1enpsZVxIdHRwXE1lc3NhZ2VcUmVxdWVzdDo6aXNSZWRpcmVjdCgpYCBhcyBkZXByZWNhdGVkLiBVc2UgdGhlIEhpc3RvcnlQbHVnaW4gaW5zdGVhZC4KLSBNYXJrZWQgYEd1enpsZVxDYWNoZVxDYWNoZUFkYXB0ZXJGYWN0b3J5OjpmYWN0b3J5KClgIGFzIGRlcHJlY2F0ZWQKLSBNYXJrZWQgYEd1enpsZVxTZXJ2aWNlXENsaWVudDo6ZW5hYmxlTWFnaWNNZXRob2RzKClgIGFzIGRlcHJlY2F0ZWQuIE1hZ2ljIG1ldGhvZHMgY2FuIG5vIGxvbmdlciBiZSBkaXNhYmxlZCBvbiBhIEd1enpsZVxTZXJ2aWNlXENsaWVudC4KLSBNYXJrZWQgYEd1enpsZVxQYXJzZXJcVXJsXFVybFBhcnNlcmAgYXMgZGVwcmVjYXRlZC4gSnVzdCB1c2UgUEhQJ3MgYHBhcnNlX3VybCgpYCBhbmQgcGVyY2VudCBlbmNvZGUgeW91ciBVVEYtOC4KLSBNYXJrZWQgYEd1enpsZVxDb21tb25cQ29sbGVjdGlvbjo6aW5qZWN0KClgIGFzIGRlcHJlY2F0ZWQuCi0gTWFya2VkIGBHdXp6bGVcUGx1Z2luXEN1cmxBdXRoXEN1cmxBdXRoUGx1Z2luYCBhcyBkZXByZWNhdGVkLiBVc2UKICBgJGNsaWVudC0+Z2V0Q29uZmlnKCktPnNldFBhdGgoJ3JlcXVlc3Qub3B0aW9ucy9hdXRoJywgYXJyYXkoJ3VzZXInLCAncGFzcycsICdCYXNpY3xEaWdlc3R8TlRMTXxBbnknKSk7YCBvcgogIGAkY2xpZW50LT5zZXREZWZhdWx0T3B0aW9uKCdhdXRoJywgYXJyYXkoJ3VzZXInLCAncGFzcycsICdCYXNpY3xEaWdlc3R8TlRMTXxBbnknKSk7YAoKMy43IGludHJvZHVjZXMgYHJlcXVlc3Qub3B0aW9uc2AgYXMgYSBwYXJhbWV0ZXIgZm9yIGEgY2xpZW50IGNvbmZpZ3VyYXRpb24gYW5kIGFzIGFuIG9wdGlvbmFsIGFyZ3VtZW50IHRvIGFsbCBjcmVhdGlvbmFsCnJlcXVlc3QgbWV0aG9kcy4gV2hlbiBwYWlyZWQgd2l0aCBhIGNsaWVudCdzIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MsIHRoZXNlIG9wdGlvbnMgYWxsb3cgeW91IHRvIHNwZWNpZnkgZGVmYXVsdCBzZXR0aW5ncwpmb3IgdmFyaW91cyBhc3BlY3RzIG9mIGEgcmVxdWVzdC4gQmVjYXVzZSB0aGVzZSBvcHRpb25zIG1ha2Ugb3RoZXIgcHJldmlvdXMgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlZHVuZGFudCwgc2V2ZXJhbApjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIG1ldGhvZHMgb2YgYSBjbGllbnQgYW5kIEFic3RyYWN0Q29tbWFuZCBoYXZlIGJlZW4gZGVwcmVjYXRlZC4KCi0gTWFya2VkIGBHdXp6bGVcU2VydmljZVxDbGllbnQ6OmdldERlZmF1bHRIZWFkZXJzKClgIGFzIGRlcHJlY2F0ZWQuIFVzZSBgJGNsaWVudC0+Z2V0RGVmYXVsdE9wdGlvbignaGVhZGVycycpYC4KLSBNYXJrZWQgYEd1enpsZVxTZXJ2aWNlXENsaWVudDo6c2V0RGVmYXVsdEhlYWRlcnMoKWAgYXMgZGVwcmVjYXRlZC4gVXNlIGAkY2xpZW50LT5zZXREZWZhdWx0T3B0aW9uKCdoZWFkZXJzL3toZWFkZXJfbmFtZX0nLCAndmFsdWUnKWAuCi0gTWFya2VkICdyZXF1ZXN0LnBhcmFtcycgZm9yIGBHdXp6bGVcSHR0cFxDbGllbnRgIGFzIGRlcHJlY2F0ZWQuIFVzZSBgJGNsaWVudC0+c2V0RGVmYXVsdE9wdGlvbigncGFyYW1zL3twYXJhbV9uYW1lfScsICd2YWx1ZScpYAotIE1hcmtlZCAnY29tbWFuZC5oZWFkZXJzJywgJ2NvbW1hbmQucmVzcG9uc2VfYm9keScgYW5kICdjb21tYW5kLm9uX2NvbXBsZXRlJyBhcyBkZXByZWNhdGVkIGZvciBBYnN0cmFjdENvbW1hbmQuIFRoZXNlIHdpbGwgd29yayB0aHJvdWdoIEd1enpsZSA0LjAKCiAgICAgICAgJGNvbW1hbmQgPSAkY2xpZW50LT5nZXRDb21tYW5kKCdmb28nLCBhcnJheSgKICAgICAgICAgICAgJ2NvbW1hbmQuaGVhZGVycycgPT4gYXJyYXkoJ1Rlc3QnID0+ICcxMjMnKSwKICAgICAgICAgICAgJ2NvbW1hbmQucmVzcG9uc2VfYm9keScgPT4gJy9wYXRoL3RvL2ZpbGUnCiAgICAgICAgKSk7CgogICAgICAgIC8vIFNob3VsZCBiZSBjaGFuZ2VkIHRvOgoKICAgICAgICAkY29tbWFuZCA9ICRjbGllbnQtPmdldENvbW1hbmQoJ2ZvbycsIGFycmF5KAogICAgICAgICAgICAnY29tbWFuZC5yZXF1ZXN0X29wdGlvbnMnID0+IGFycmF5KAogICAgICAgICAgICAgICAgJ2hlYWRlcnMnID0+IGFycmF5KCdUZXN0JyA9PiAnMTIzJyksCiAgICAgICAgICAgICAgICAnc2F2ZV9hcycgPT4gJy9wYXRoL3RvL2ZpbGUnCiAgICAgICAgICAgICkKICAgICAgICApKTsKCiMjIyBJbnRlcmZhY2UgY2hhbmdlcwoKQWRkaXRpb25zIGFuZCBjaGFuZ2VzICh5b3Ugd2lsbCBuZWVkIHRvIHVwZGF0ZSBhbnkgaW1wbGVtZW50YXRpb25zIG9yIHN1YmNsYXNzZXMgeW91IG1heSBoYXZlIGNyZWF0ZWQpOgoKLSBBZGRlZCBhbiBgJG9wdGlvbnNgIGFyZ3VtZW50IHRvIHRoZSBlbmQgb2YgdGhlIGZvbGxvd2luZyBtZXRob2RzIG9mIGBHdXp6bGVcSHR0cFxDbGllbnRJbnRlcmZhY2VgOgogIGNyZWF0ZVJlcXVlc3QsIGhlYWQsIGRlbGV0ZSwgcHV0LCBwYXRjaCwgcG9zdCwgb3B0aW9ucywgcHJlcGFyZVJlcXVlc3QKLSBBZGRlZCBhbiBgJG9wdGlvbnNgIGFyZ3VtZW50IHRvIHRoZSBlbmQgb2YgYEd1enpsZVxIdHRwXE1lc3NhZ2VcUmVxdWVzdFxSZXF1ZXN0RmFjdG9yeUludGVyZmFjZTo6Y3JlYXRlUmVxdWVzdCgpYAotIEFkZGVkIGFuIGBhcHBseU9wdGlvbnMoKWAgbWV0aG9kIHRvIGBHdXp6bGVcSHR0cFxNZXNzYWdlXFJlcXVlc3RcUmVxdWVzdEZhY3RvcnlJbnRlcmZhY2VgCi0gQ2hhbmdlZCBgR3V6emxlXEh0dHBcQ2xpZW50SW50ZXJmYWNlOjpnZXQoJHVyaSA9IG51bGwsICRoZWFkZXJzID0gbnVsbCwgJGJvZHkgPSBudWxsKWAgdG8KICBgR3V6emxlXEh0dHBcQ2xpZW50SW50ZXJmYWNlOjpnZXQoJHVyaSA9IG51bGwsICRoZWFkZXJzID0gbnVsbCwgJG9wdGlvbnMgPSBhcnJheSgpKWAuIFlvdSBjYW4gc3RpbGwgcGFzcyBpbiBhCiAgcmVzb3VyY2UsIHN0cmluZywgb3IgRW50aXR5Qm9keSBpbnRvIHRoZSAkb3B0aW9ucyBwYXJhbWV0ZXIgdG8gc3BlY2lmeSB0aGUgZG93bmxvYWQgbG9jYXRpb24gb2YgdGhlIHJlc3BvbnNlLgotIENoYW5nZWQgYEd1enpsZVxDb21tb25cQ29sbGVjdGlvbjo6X19jb25zdHJ1Y3QoJGRhdGEpYCB0byBubyBsb25nZXIgYWNjZXB0cyBhIG51bGwgdmFsdWUgZm9yIGAkZGF0YWAgYnV0IGEKICBkZWZhdWx0IGBhcnJheSgpYAotIEFkZGVkIGBHdXp6bGVcU3RyZWFtXFN0cmVhbUludGVyZmFjZTo6aXNSZXBlYXRhYmxlYAotIE1hZGUgYEd1enpsZVxIdHRwXENsaWVudDo6ZXhwYW5kVGVtcGxhdGVgIGFuZCBgZ2V0VXJpVGVtcGxhdGVgIHByb3RlY3RlZCBtZXRob2RzLgoKVGhlIGZvbGxvd2luZyBtZXRob2RzIHdlcmUgcmVtb3ZlZCBmcm9tIGludGVyZmFjZXMuIEFsbCBvZiB0aGVzZSBtZXRob2RzIGFyZSBzdGlsbCBhdmFpbGFibGUgaW4gdGhlIGNvbmNyZXRlIGNsYXNzZXMKdGhhdCBpbXBsZW1lbnQgdGhlbSwgYnV0IHlvdSBzaG91bGQgdXBkYXRlIHlvdXIgY29kZSB0byB1c2UgYWx0ZXJuYXRpdmUgbWV0aG9kczoKCi0gUmVtb3ZlZCBgR3V6emxlXEh0dHBcQ2xpZW50SW50ZXJmYWNlOjpzZXREZWZhdWx0SGVhZGVycygpLiBVc2UKICBgJGNsaWVudC0+Z2V0Q29uZmlnKCktPnNldFBhdGgoJ3JlcXVlc3Qub3B0aW9ucy9oZWFkZXJzL3toZWFkZXJfbmFtZX0nLCAndmFsdWUnKWAuIG9yCiAgYCRjbGllbnQtPmdldENvbmZpZygpLT5zZXRQYXRoKCdyZXF1ZXN0Lm9wdGlvbnMvaGVhZGVycycsIGFycmF5KCdoZWFkZXJfbmFtZScgPT4gJ3ZhbHVlJykpYCBvcgogIGAkY2xpZW50LT5zZXREZWZhdWx0T3B0aW9uKCdoZWFkZXJzL3toZWFkZXJfbmFtZX0nLCAndmFsdWUnKWAuIG9yCiAgYCRjbGllbnQtPnNldERlZmF1bHRPcHRpb24oJ2hlYWRlcnMnLCBhcnJheSgnaGVhZGVyX25hbWUnID0+ICd2YWx1ZScpKWAuCi0gUmVtb3ZlZCBgR3V6emxlXEh0dHBcQ2xpZW50SW50ZXJmYWNlOjpnZXREZWZhdWx0SGVhZGVycygpLiBVc2UgYCRjbGllbnQtPmdldENvbmZpZygpLT5nZXRQYXRoKCdyZXF1ZXN0Lm9wdGlvbnMvaGVhZGVycycpYC4KLSBSZW1vdmVkIGBHdXp6bGVcSHR0cFxDbGllbnRJbnRlcmZhY2U6OmV4cGFuZFRlbXBsYXRlKClgLiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbC4KLSBSZW1vdmVkIGBHdXp6bGVcSHR0cFxDbGllbnRJbnRlcmZhY2U6OnNldFJlcXVlc3RGYWN0b3J5KClgLiBUaGlzIGlzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbC4KLSBSZW1vdmVkIGBHdXp6bGVcSHR0cFxDbGllbnRJbnRlcmZhY2U6OmdldEN1cmxNdWx0aSgpYC4gVGhpcyBpcyBhIHZlcnkgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gZGV0YWlsLgotIFJlbW92ZWQgYEd1enpsZVxIdHRwXE1lc3NhZ2VcUmVxdWVzdEludGVyZmFjZTo6Y2FuQ2FjaGVgLiBVc2UgdGhlIENhY2hlUGx1Z2luLgotIFJlbW92ZWQgYEd1enpsZVxIdHRwXE1lc3NhZ2VcUmVxdWVzdEludGVyZmFjZTo6c2V0SXNSZWRpcmVjdGAuIFVzZSB0aGUgSGlzdG9yeVBsdWdpbi4KLSBSZW1vdmVkIGBHdXp6bGVcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U6OmlzUmVkaXJlY3RgLiBVc2UgdGhlIEhpc3RvcnlQbHVnaW4uCgojIyMgQ2FjaGUgcGx1Z2luIGJyZWFraW5nIGNoYW5nZXMKCi0gQ2FjaGVLZXlQcm92aWRlckludGVyZmFjZSBhbmQgRGVmYXVsdENhY2hlS2V5UHJvdmlkZXIgYXJlIG5vIGxvbmdlciB1c2VkLiBBbGwgb2YgdGhpcyBsb2dpYyBpcyBoYW5kbGVkIGluIGEKICBDYWNoZVN0b3JhZ2VJbnRlcmZhY2UuIFRoZXNlIHR3byBvYmplY3RzIGFuZCBpbnRlcmZhY2Ugd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24uCi0gQWx3YXlzIHNldHRpbmcgWC1jYWNoZSBoZWFkZXJzIG9uIGNhY2hlZCByZXNwb25zZXMKLSBEZWZhdWx0IGNhY2hlIFRUTHMgYXJlIG5vdyBoYW5kbGVkIGJ5IHRoZSBDYWNoZVN0b3JhZ2VJbnRlcmZhY2Ugb2YgYSBDYWNoZVBsdWdpbgotIGBDYWNoZVN0b3JhZ2VJbnRlcmZhY2U6OmNhY2hlKCRrZXksIFJlc3BvbnNlICRyZXNwb25zZSwgJHR0bCA9IG51bGwpYCBoYXMgY2hhbmdlZCB0byBgY2FjaGUoUmVxdWVzdEludGVyZmFjZQogICRyZXF1ZXN0LCBSZXNwb25zZSAkcmVzcG9uc2UpO2AKLSBgQ2FjaGVTdG9yYWdlSW50ZXJmYWNlOjpmZXRjaCgka2V5KWAgaGFzIGNoYW5nZWQgdG8gYGZldGNoKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QpO2AKLSBgQ2FjaGVTdG9yYWdlSW50ZXJmYWNlOjpkZWxldGUoJGtleSlgIGhhcyBjaGFuZ2VkIHRvIGBkZWxldGUoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCk7YAotIEFkZGVkIGBDYWNoZVN0b3JhZ2VJbnRlcmZhY2U6OnB1cmdlKCR1cmwpYAotIGBEZWZhdWx0UmV2YWxpZGF0aW9uOjpfX2NvbnN0cnVjdChDYWNoZUtleVByb3ZpZGVySW50ZXJmYWNlICRjYWNoZUtleSwgQ2FjaGVTdG9yYWdlSW50ZXJmYWNlICRjYWNoZSwgQ2FjaGVQbHVnaW4KICAkcGx1Z2luKWAgaGFzIGNoYW5nZWQgdG8gYERlZmF1bHRSZXZhbGlkYXRpb246Ol9fY29uc3RydWN0KENhY2hlU3RvcmFnZUludGVyZmFjZSAkY2FjaGUsCiAgQ2FuQ2FjaGVTdHJhdGVneUludGVyZmFjZSAkY2FuQ2FjaGUgPSBudWxsKWAKLSBBZGRlZCBgUmV2YWxpZGF0aW9uSW50ZXJmYWNlOjpzaG91bGRSZXZhbGlkYXRlKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIFJlc3BvbnNlICRyZXNwb25zZSlgCgozLjUgdG8gMy42Ci0tLS0tLS0tLS0KCiogTWl4ZWQgY2FzaW5nIG9mIGhlYWRlcnMgYXJlIG5vdyBmb3JjZWQgdG8gYmUgYSBzaW5nbGUgY29uc2lzdGVudCBjYXNpbmcgYWNyb3NzIGFsbCB2YWx1ZXMgZm9yIHRoYXQgaGVhZGVyLgoqIE1lc3NhZ2VzIGludGVybmFsbHkgdXNlIGEgSGVhZGVyQ29sbGVjdGlvbiBvYmplY3QgdG8gZGVsZWdhdGUgaGFuZGxpbmcgY2FzZS1pbnNlbnNpdGl2ZSBoZWFkZXIgcmVzb2x1dGlvbgoqIFJlbW92ZWQgdGhlIHdob2xlIGNoYW5nZWRIZWFkZXIoKSBmdW5jdGlvbiBzeXN0ZW0gb2YgbWVzc2FnZXMgYmVjYXVzZSBhbGwgaGVhZGVyIGNoYW5nZXMgbm93IGdvIHRocm91Z2ggYWRkSGVhZGVyKCkuCiAgRm9yIGV4YW1wbGUsIHNldEhlYWRlcigpIGZpcnN0IHJlbW92ZXMgdGhlIGhlYWRlciB1c2luZyB1bnNldCBvbiBhIEhlYWRlckNvbGxlY3Rpb24gYW5kIHRoZW4gY2FsbHMgYWRkSGVhZGVyKCkuCiAgS2VlcGluZyB0aGUgSG9zdCBoZWFkZXIgYW5kIFVSTCBob3N0IGluIHN5bmMgaXMgbm93IGhhbmRsZWQgYnkgb3ZlcnJpZGluZyB0aGUgYWRkSGVhZGVyIG1ldGhvZCBpbiBSZXF1ZXN0LgoqIFNwZWNpZmljIGhlYWRlciBpbXBsZW1lbnRhdGlvbnMgY2FuIGJlIGNyZWF0ZWQgZm9yIGNvbXBsZXggaGVhZGVycy4gV2hlbiBhIG1lc3NhZ2UgY3JlYXRlcyBhIGhlYWRlciwgaXQgdXNlcyBhCiAgSGVhZGVyRmFjdG9yeSB3aGljaCBjYW4gbWFwIHNwZWNpZmljIGhlYWRlcnMgdG8gc3BlY2lmaWMgaGVhZGVyIGNsYXNzZXMuIFRoZXJlIGlzIG5vdyBhIExpbmsgaGVhZGVyIGFuZAogIENhY2hlQ29udHJvbCBoZWFkZXIgaW1wbGVtZW50YXRpb24uCiogTW92ZWQgZ2V0TGlua3MoKSBmcm9tIFJlc3BvbnNlIHRvIGp1c3QgYmUgdXNlZCBvbiBhIExpbmsgaGVhZGVyIG9iamVjdC4KCklmIHlvdSBwcmV2aW91c2x5IHJlbGllZCBvbiBHdXp6bGVcSHR0cFxNZXNzYWdlXEhlYWRlcjo6cmF3KCksIHRoZW4geW91IHdpbGwgbmVlZCB0byB1cGRhdGUgeW91ciBjb2RlIHRvIHVzZSB0aGUKSGVhZGVySW50ZXJmYWNlIChlLmcuIHRvQXJyYXkoKSwgZ2V0QWxsKCksIGV0Yy4pLgoKIyMjIEludGVyZmFjZSBjaGFuZ2VzCgoqIFJlbW92ZWQgZnJvbSBpbnRlcmZhY2U6IEd1enpsZVxIdHRwXENsaWVudEludGVyZmFjZTo6c2V0VXJpVGVtcGxhdGUKKiBSZW1vdmVkIGZyb20gaW50ZXJmYWNlOiBHdXp6bGVcSHR0cFxDbGllbnRJbnRlcmZhY2U6OnNldEN1cmxNdWx0aSgpCiogUmVtb3ZlZCBHdXp6bGVcSHR0cFxNZXNzYWdlXFJlcXVlc3Q6OnJlY2VpdmVkUmVxdWVzdEhlYWRlcigpIGFuZCBpbXBsZW1lbnRlZCB0aGlzIGZ1bmN0aW9uYWxpdHkgaW4KICBHdXp6bGVcSHR0cFxDdXJsXFJlcXVlc3RNZWRpYXRvcgoqIFJlbW92ZWQgdGhlIG9wdGlvbmFsICRhc1N0cmluZyBwYXJhbWV0ZXIgZnJvbSBNZXNzYWdlSW50ZXJmYWNlOjpnZXRIZWFkZXIoKS4gSnVzdCBjYXN0IHRoZSBoZWFkZXIgdG8gYSBzdHJpbmcuCiogUmVtb3ZlZCB0aGUgb3B0aW9uYWwgJHRyeUNodW5rZWRUcmFuc2ZlciBvcHRpb24gZnJvbSBHdXp6bGVcSHR0cFxNZXNzYWdlXEVudGl0eUVuY2xvc2luZ1JlcXVlc3RJbnRlcmZhY2UKKiBSZW1vdmVkIHRoZSAkYXNPYmplY3RzIGFyZ3VtZW50IGZyb20gR3V6emxlXEh0dHBcTWVzc2FnZVxNZXNzYWdlSW50ZXJmYWNlOjpnZXRIZWFkZXJzKCkKCiMjIyBSZW1vdmVkIGRlcHJlY2F0ZWQgZnVuY3Rpb25zCgoqIFJlbW92ZWQgR3V6emxlXFBhcnNlclxQYXJzZXJSZWdpc3Rlcjo6Z2V0KCkuIFVzZSBnZXRQYXJzZXIoKQoqIFJlbW92ZWQgR3V6emxlXFBhcnNlclxQYXJzZXJSZWdpc3Rlcjo6c2V0KCkuIFVzZSByZWdpc3RlclBhcnNlcigpLgoKIyMjIERlcHJlY2F0aW9ucwoKKiBUaGUgYWJpbGl0eSB0byBjYXNlLWluc2Vuc2l0aXZlbHkgc2VhcmNoIGZvciBoZWFkZXIgdmFsdWVzCiogR3V6emxlXEh0dHBcTWVzc2FnZVxIZWFkZXI6Omhhc0V4YWN0SGVhZGVyCiogR3V6emxlXEh0dHBcTWVzc2FnZVxIZWFkZXI6OnJhdy4gVXNlIGdldEFsbCgpCiogRGVwcmVjYXRlZCBjYWNoZSBjb250cm9sIHNwZWNpZmljIG1ldGhvZHMgb24gR3V6emxlXEh0dHBcTWVzc2FnZVxBYnN0cmFjdE1lc3NhZ2UuIFVzZSB0aGUgQ2FjaGVDb250cm9sIGhlYWRlciBvYmplY3QKICBpbnN0ZWFkLgoKIyMjIE90aGVyIGNoYW5nZXMKCiogQWxsIHJlc3BvbnNlIGhlYWRlciBoZWxwZXIgZnVuY3Rpb25zIHJldHVybiBhIHN0cmluZyByYXRoZXIgdGhhbiBtaXhpbmcgSGVhZGVyIG9iamVjdHMgYW5kIHN0cmluZ3MgaW5jb25zaXN0ZW50bHkKKiBSZW1vdmVkIGNVUkwgYmxhY2tsaXN0IHN1cHBvcnQuIFRoaXMgaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeSBub3cgdGhhdCBFeHBlY3QsIEFjY2VwdCwgZXRjLiBhcmUgbWFuYWdlZCBieSBHdXp6bGUKICBkaXJlY3RseSB2aWEgaW50ZXJmYWNlcwoqIFJlbW92ZWQgdGhlIGluamVjdGluZyBvZiBhIHJlcXVlc3Qgb2JqZWN0IG9udG8gYSByZXNwb25zZSBvYmplY3QuIFRoZSBtZXRob2RzIHRvIGdldCBhbmQgc2V0IGEgcmVxdWVzdCBzdGlsbCBleGlzdAogIGJ1dCBhcmUgYSBuby1vcCB1bnRpbCByZW1vdmVkLgoqIE1vc3QgY2xhc3NlcyB0aGF0IHVzZWQgdG8gcmVxdWlyZSBhIGBHdXp6bGVcU2VydmljZVxDb21tYW5kXENvbW1hbmRJbnRlcmZhY2VgIHR5cGVoaW50IG5vdyByZXF1ZXN0IGEKICBgR3V6emxlXFNlcnZpY2VcQ29tbWFuZFxBcnJheUNvbW1hbmRJbnRlcmZhY2VgLgoqIEFkZGVkIGBHdXp6bGVcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U6OnN0YXJ0UmVzcG9uc2UoKWAgdG8gdGhlIFJlcXVlc3RJbnRlcmZhY2UgdG8gaGFuZGxlIGluamVjdGluZyBhIHJlc3BvbnNlCiAgb24gYSByZXF1ZXN0IHdoaWxlIHRoZSByZXF1ZXN0IGlzIHN0aWxsIGJlaW5nIHRyYW5zZmVycmVkCiogYEd1enpsZVxTZXJ2aWNlXENvbW1hbmRcQ29tbWFuZEludGVyZmFjZWAgbm93IGV4dGVuZHMgZnJvbSBUb0FycmF5SW50ZXJmYWNlIGFuZCBBcnJheUFjY2VzcwoKMy4zIHRvIDMuNAotLS0tLS0tLS0tCgpCYXNlIFVSTHMgb2YgYSBjbGllbnQgbm93IGZvbGxvdyB0aGUgcnVsZXMgb2YgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTUuMi4yIHdoZW4gbWVyZ2luZyBVUkxzLgoKMy4yIHRvIDMuMwotLS0tLS0tLS0tCgojIyMgUmVzcG9uc2U6OmdldEV0YWcoKSBxdW90ZSBzdHJpcHBpbmcgcmVtb3ZlZAoKYEd1enpsZVxIdHRwXE1lc3NhZ2VcUmVzcG9uc2U6OmdldEV0YWcoKWAgbm8gbG9uZ2VyIHN0cmlwcyBxdW90ZXMgYXJvdW5kIHRoZSBFVGFnIHJlc3BvbnNlIGhlYWRlcgoKIyMjIFJlbW92ZWQgYEd1enpsZVxIdHRwXFV0aWxzYAoKVGhlIGBHdXp6bGVcSHR0cFxVdGlsc2AgY2xhc3Mgd2FzIHJlbW92ZWQuIFRoaXMgY2xhc3Mgd2FzIG9ubHkgdXNlZCBmb3IgdGVzdGluZy4KCiMjIyBTdHJlYW0gd3JhcHBlciBhbmQgdHlwZQoKYEd1enpsZVxTdHJlYW1cU3RyZWFtOjpnZXRXcmFwcGVyKClgIGFuZCBgR3V6emxlXFN0cmVhbVxTdHJlYW06OmdldFN0cmVhbVR5cGUoKWAgYXJlIG5vIGxvbmdlciBjb252ZXJ0ZWQgdG8gbG93ZXJjYXNlLgoKIyMjIGN1cmwuZW1pdF9pbyBiZWNhbWUgZW1pdF9pbwoKRW1pdHRpbmcgSU8gZXZlbnRzIGZyb20gYSBSZXF1ZXN0TWVkaWF0b3IgaXMgbm93IGEgcGFyYW1ldGVyIHRoYXQgbXVzdCBiZSBzZXQgaW4gYSByZXF1ZXN0J3MgY3VybCBvcHRpb25zIHVzaW5nIHRoZQonZW1pdF9pbycga2V5LiBUaGlzIHdhcyBwcmV2aW91c2x5IHNldCB1bmRlciBhIHJlcXVlc3QncyBwYXJhbWV0ZXJzIHVzaW5nICdjdXJsLmVtaXRfaW8nCgozLjEgdG8gMy4yCi0tLS0tLS0tLS0KCiMjIyBDdXJsTXVsdGkgaXMgbm8gbG9uZ2VyIHJldXNlZCBnbG9iYWxseQoKQmVmb3JlIDMuMiwgdGhlIHNhbWUgQ3VybE11bHRpIG9iamVjdCB3YXMgcmV1c2VkIGdsb2JhbGx5IGZvciBlYWNoIGNsaWVudC4gVGhpcyBjYW4gY2F1c2UgaXNzdWUgd2hlcmUgcGx1Z2lucyBhZGRlZAp0byBhIHNpbmdsZSBjbGllbnQgY2FuIHBvbGx1dGUgcmVxdWVzdHMgZGlzcGF0Y2hlZCBmcm9tIG90aGVyIGNsaWVudHMuCgpJZiB5b3Ugc3RpbGwgd2lzaCB0byByZXVzZSB0aGUgc2FtZSBDdXJsTXVsdGkgb2JqZWN0IHdpdGggZWFjaCBjbGllbnQsIHRoZW4geW91IGNhbiBhZGQgYSBsaXN0ZW5lciB0byB0aGUKU2VydmljZUJ1aWxkZXIncyBgc2VydmljZV9idWlsZGVyLmNyZWF0ZV9jbGllbnRgIGV2ZW50IHRvIGluamVjdCBhIGN1c3RvbSBDdXJsTXVsdGkgb2JqZWN0IGludG8gZWFjaCBjbGllbnQgYXMgaXQgaXMKY3JlYXRlZC4KCmBgYHBocAokbXVsdGkgPSBuZXcgR3V6emxlXEh0dHBcQ3VybFxDdXJsTXVsdGkoKTsKJGJ1aWxkZXIgPSBHdXp6bGVcU2VydmljZVxCdWlsZGVyXFNlcnZpY2VCdWlsZGVyOjpmYWN0b3J5KCcvcGF0aC90by9jb25maWcuanNvbicpOwokYnVpbGRlci0+YWRkTGlzdGVuZXIoJ3NlcnZpY2VfYnVpbGRlci5jcmVhdGVfY2xpZW50JywgZnVuY3Rpb24gKCRldmVudCkgdXNlICgkbXVsdGkpIHsKICAgICRldmVudFsnY2xpZW50J10tPnNldEN1cmxNdWx0aSgkbXVsdGkpOwp9Cn0pOwpgYGAKCiMjIyBObyBkZWZhdWx0IHBhdGgKClVSTHMgbm8gbG9uZ2VyIGhhdmUgYSBkZWZhdWx0IHBhdGggdmFsdWUgb2YgJy8nIGlmIG5vIHBhdGggd2FzIHNwZWNpZmllZC4KCkJlZm9yZToKCmBgYHBocAokcmVxdWVzdCA9ICRjbGllbnQtPmdldCgnaHR0cDovL3d3dy5mb28uY29tJyk7CmVjaG8gJHJlcXVlc3QtPmdldFVybCgpOwovLyA+PiBodHRwOi8vd3d3LmZvby5jb20vCmBgYAoKQWZ0ZXI6CgpgYGBwaHAKJHJlcXVlc3QgPSAkY2xpZW50LT5nZXQoJ2h0dHA6Ly93d3cuZm9vLmNvbScpOwplY2hvICRyZXF1ZXN0LT5nZXRVcmwoKTsKLy8gPj4gaHR0cDovL3d3dy5mb28uY29tCmBgYAoKIyMjIExlc3MgdmVyYm9zZSBCYWRSZXNwb25zZUV4Y2VwdGlvbgoKVGhlIGV4Y2VwdGlvbiBtZXNzYWdlIGZvciBgR3V6emxlXEh0dHBcRXhjZXB0aW9uXEJhZFJlc3BvbnNlRXhjZXB0aW9uYCBubyBsb25nZXIgY29udGFpbnMgdGhlIGZ1bGwgSFRUUCByZXF1ZXN0IGFuZApyZXNwb25zZSBpbmZvcm1hdGlvbi4gWW91IGNhbiwgaG93ZXZlciwgZ2V0IGFjY2VzcyB0byB0aGUgcmVxdWVzdCBhbmQgcmVzcG9uc2Ugb2JqZWN0IGJ5IGNhbGxpbmcgYGdldFJlcXVlc3QoKWAgb3IKYGdldFJlc3BvbnNlKClgIG9uIHRoZSBleGNlcHRpb24gb2JqZWN0LgoKIyMjIFF1ZXJ5IHBhcmFtZXRlciBhZ2dyZWdhdGlvbgoKTXVsdGktdmFsdWVkIHF1ZXJ5IHBhcmFtZXRlcnMgYXJlIG5vIGxvbmdlciBhZ2dyZWdhdGVkIHVzaW5nIGEgY2FsbGJhY2sgZnVuY3Rpb24uIGBHdXp6bGVcSHR0cFxRdWVyeWAgbm93IGhhcyBhCnNldEFnZ3JlZ2F0b3IoKSBtZXRob2QgdGhhdCBhY2NlcHRzIGEgYEd1enpsZVxIdHRwXFF1ZXJ5QWdncmVnYXRvclxRdWVyeUFnZ3JlZ2F0b3JJbnRlcmZhY2VgIG9iamVjdC4gVGhpcyBvYmplY3QgaXMKcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIHRoZSBhZ2dyZWdhdGlvbiBvZiBtdWx0aS12YWx1ZWQgcXVlcnkgc3RyaW5nIHZhcmlhYmxlcyBpbnRvIGEgZmxhdHRlbmVkIGhhc2guCgoyLjggdG8gMy54Ci0tLS0tLS0tLS0KCiMjIyBHdXp6bGVcU2VydmljZVxJbnNwZWN0b3IKCkNoYW5nZSBgXEd1enpsZVxTZXJ2aWNlXEluc3BlY3Rvcjo6ZnJvbUNvbmZpZ2AgdG8gYFxHdXp6bGVcQ29tbW9uXENvbGxlY3Rpb246OmZyb21Db25maWdgCgoqKkJlZm9yZSoqCgpgYGBwaHAKdXNlIEd1enpsZVxTZXJ2aWNlXEluc3BlY3RvcjsKCmNsYXNzIFlvdXJDbGllbnQgZXh0ZW5kcyBcR3V6emxlXFNlcnZpY2VcQ2xpZW50CnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZmFjdG9yeSgkY29uZmlnID0gYXJyYXkoKSkKICAgIHsKICAgICAgICAkZGVmYXVsdCA9IGFycmF5KCk7CiAgICAgICAgJHJlcXVpcmVkID0gYXJyYXkoJ2Jhc2VfdXJsJywgJ3VzZXJuYW1lJywgJ2FwaV9rZXknKTsKICAgICAgICAkY29uZmlnID0gSW5zcGVjdG9yOjpmcm9tQ29uZmlnKCRjb25maWcsICRkZWZhdWx0LCAkcmVxdWlyZWQpOwoKICAgICAgICAkY2xpZW50ID0gbmV3IHNlbGYoCiAgICAgICAgICAgICRjb25maWctPmdldCgnYmFzZV91cmwnKSwKICAgICAgICAgICAgJGNvbmZpZy0+Z2V0KCd1c2VybmFtZScpLAogICAgICAgICAgICAkY29uZmlnLT5nZXQoJ2FwaV9rZXknKQogICAgICAgICk7CiAgICAgICAgJGNsaWVudC0+c2V0Q29uZmlnKCRjb25maWcpOwoKICAgICAgICAkY2xpZW50LT5zZXREZXNjcmlwdGlvbihTZXJ2aWNlRGVzY3JpcHRpb246OmZhY3RvcnkoX19ESVJfXyAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAnY2xpZW50Lmpzb24nKSk7CgogICAgICAgIHJldHVybiAkY2xpZW50OwogICAgfQpgYGAKCioqQWZ0ZXIqKgoKYGBgcGhwCnVzZSBHdXp6bGVcQ29tbW9uXENvbGxlY3Rpb247CgpjbGFzcyBZb3VyQ2xpZW50IGV4dGVuZHMgXEd1enpsZVxTZXJ2aWNlXENsaWVudAp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZhY3RvcnkoJGNvbmZpZyA9IGFycmF5KCkpCiAgICB7CiAgICAgICAgJGRlZmF1bHQgPSBhcnJheSgpOwogICAgICAgICRyZXF1aXJlZCA9IGFycmF5KCdiYXNlX3VybCcsICd1c2VybmFtZScsICdhcGlfa2V5Jyk7CiAgICAgICAgJGNvbmZpZyA9IENvbGxlY3Rpb246OmZyb21Db25maWcoJGNvbmZpZywgJGRlZmF1bHQsICRyZXF1aXJlZCk7CgogICAgICAgICRjbGllbnQgPSBuZXcgc2VsZigKICAgICAgICAgICAgJGNvbmZpZy0+Z2V0KCdiYXNlX3VybCcpLAogICAgICAgICAgICAkY29uZmlnLT5nZXQoJ3VzZXJuYW1lJyksCiAgICAgICAgICAgICRjb25maWctPmdldCgnYXBpX2tleScpCiAgICAgICAgKTsKICAgICAgICAkY2xpZW50LT5zZXRDb25maWcoJGNvbmZpZyk7CgogICAgICAgICRjbGllbnQtPnNldERlc2NyaXB0aW9uKFNlcnZpY2VEZXNjcmlwdGlvbjo6ZmFjdG9yeShfX0RJUl9fIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICdjbGllbnQuanNvbicpKTsKCiAgICAgICAgcmV0dXJuICRjbGllbnQ7CiAgICB9CmBgYAoKIyMjIENvbnZlcnQgWE1MIFNlcnZpY2UgRGVzY3JpcHRpb25zIHRvIEpTT04KCioqQmVmb3JlKioKCmBgYHhtbAo8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/Pgo8Y2xpZW50PgogICAgPGNvbW1hbmRzPgogICAgICAgIDwhLS0gR3JvdXBzIC0tPgogICAgICAgIDxjb21tYW5kIG5hbWU9Imxpc3RfZ3JvdXBzIiBtZXRob2Q9IkdFVCIgdXJpPSJncm91cHMuanNvbiI+CiAgICAgICAgICAgIDxkb2M+R2V0IGEgbGlzdCBvZiBncm91cHM8L2RvYz4KICAgICAgICA8L2NvbW1hbmQ+CiAgICAgICAgPGNvbW1hbmQgbmFtZT0ic2VhcmNoX2dyb3VwcyIgbWV0aG9kPSJHRVQiIHVyaT0nc2VhcmNoLmpzb24/cXVlcnk9Int7cXVlcnl9fSB0eXBlOmdyb3VwIic+CiAgICAgICAgICAgIDxkb2M+VXNlcyBhIHNlYXJjaCBxdWVyeSB0byBnZXQgYSBsaXN0IG9mIGdyb3VwczwvZG9jPgogICAgICAgICAgICA8cGFyYW0gbmFtZT0icXVlcnkiIHR5cGU9InN0cmluZyIgcmVxdWlyZWQ9InRydWUiIC8+CiAgICAgICAgPC9jb21tYW5kPgogICAgICAgIDxjb21tYW5kIG5hbWU9ImNyZWF0ZV9ncm91cCIgbWV0aG9kPSJQT1NUIiB1cmk9Imdyb3Vwcy5qc29uIj4KICAgICAgICAgICAgPGRvYz5DcmVhdGUgYSBncm91cDwvZG9jPgogICAgICAgICAgICA8cGFyYW0gbmFtZT0iZGF0YSIgdHlwZT0iYXJyYXkiIGxvY2F0aW9uPSJib2R5IiBmaWx0ZXJzPSJqc29uX2VuY29kZSIgZG9jPSJHcm91cCBKU09OIi8+CiAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJDb250ZW50LVR5cGUiIGxvY2F0aW9uPSJoZWFkZXIiIHN0YXRpYz0iYXBwbGljYXRpb24vanNvbiIvPgogICAgICAgIDwvY29tbWFuZD4KICAgICAgICA8Y29tbWFuZCBuYW1lPSJkZWxldGVfZ3JvdXAiIG1ldGhvZD0iREVMRVRFIiB1cmk9Imdyb3Vwcy97e2lkfX0uanNvbiI+CiAgICAgICAgICAgIDxkb2M+RGVsZXRlIGEgZ3JvdXAgYnkgSUQ8L2RvYz4KICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImlkIiB0eXBlPSJpbnRlZ2VyIiByZXF1aXJlZD0idHJ1ZSIvPgogICAgICAgIDwvY29tbWFuZD4KICAgICAgICA8Y29tbWFuZCBuYW1lPSJnZXRfZ3JvdXAiIG1ldGhvZD0iR0VUIiB1cmk9Imdyb3Vwcy97e2lkfX0uanNvbiI+CiAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJpZCIgdHlwZT0iaW50ZWdlciIgcmVxdWlyZWQ9InRydWUiLz4KICAgICAgICA8L2NvbW1hbmQ+CiAgICAgICAgPGNvbW1hbmQgbmFtZT0idXBkYXRlX2dyb3VwIiBtZXRob2Q9IlBVVCIgdXJpPSJncm91cHMve3tpZH19Lmpzb24iPgogICAgICAgICAgICA8ZG9jPlVwZGF0ZSBhIGdyb3VwPC9kb2M+CiAgICAgICAgICAgIDxwYXJhbSBuYW1lPSJpZCIgdHlwZT0iaW50ZWdlciIgcmVxdWlyZWQ9InRydWUiLz4KICAgICAgICAgICAgPHBhcmFtIG5hbWU9ImRhdGEiIHR5cGU9ImFycmF5IiBsb2NhdGlvbj0iYm9keSIgZmlsdGVycz0ianNvbl9lbmNvZGUiIGRvYz0iR3JvdXAgSlNPTiIvPgogICAgICAgICAgICA8cGFyYW0gbmFtZT0iQ29udGVudC1UeXBlIiBsb2NhdGlvbj0iaGVhZGVyIiBzdGF0aWM9ImFwcGxpY2F0aW9uL2pzb24iLz4KICAgICAgICA8L2NvbW1hbmQ+CiAgICA8L2NvbW1hbmRzPgo8L2NsaWVudD4KYGBgCgoqKkFmdGVyKioKCmBgYGpzb24KewogICAgIm5hbWUiOiAgICAgICAiWmVuZGVzayBSRVNUIEFQSSB2MiIsCiAgICAiYXBpVmVyc2lvbiI6ICIyMDEyLTEyLTMxIiwKICAgICJkZXNjcmlwdGlvbiI6IlByb3ZpZGVzIGFjY2VzcyB0byBaZW5kZXNrIHZpZXdzLCBncm91cHMsIHRpY2tldHMsIHRpY2tldCBmaWVsZHMsIGFuZCB1c2VycyIsCiAgICAib3BlcmF0aW9ucyI6IHsKICAgICAgICAibGlzdF9ncm91cHMiOiAgewogICAgICAgICAgICAiaHR0cE1ldGhvZCI6IkdFVCIsCiAgICAgICAgICAgICJ1cmkiOiAgICAgICAiZ3JvdXBzLmpzb24iLAogICAgICAgICAgICAic3VtbWFyeSI6ICAgIkdldCBhIGxpc3Qgb2YgZ3JvdXBzIgogICAgICAgIH0sCiAgICAgICAgInNlYXJjaF9ncm91cHMiOnsKICAgICAgICAgICAgImh0dHBNZXRob2QiOiJHRVQiLAogICAgICAgICAgICAidXJpIjogICAgICAgInNlYXJjaC5qc29uP3F1ZXJ5PVwie3F1ZXJ5fSB0eXBlOmdyb3VwXCIiLAogICAgICAgICAgICAic3VtbWFyeSI6ICAgIlVzZXMgYSBzZWFyY2ggcXVlcnkgdG8gZ2V0IGEgbGlzdCBvZiBncm91cHMiLAogICAgICAgICAgICAicGFyYW1ldGVycyI6ewogICAgICAgICAgICAgICAgInF1ZXJ5Ijp7CiAgICAgICAgICAgICAgICAgICAgImxvY2F0aW9uIjogICAidXJpIiwKICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiJaZW5kZXNrIFNlYXJjaCBRdWVyeSIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAgICAgICAic3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAicmVxdWlyZWQiOiAgIHRydWUKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImNyZWF0ZV9ncm91cCI6IHsKICAgICAgICAgICAgImh0dHBNZXRob2QiOiJQT1NUIiwKICAgICAgICAgICAgInVyaSI6ICAgICAgICJncm91cHMuanNvbiIsCiAgICAgICAgICAgICJzdW1tYXJ5IjogICAiQ3JlYXRlIGEgZ3JvdXAiLAogICAgICAgICAgICAicGFyYW1ldGVycyI6ewogICAgICAgICAgICAgICAgImRhdGEiOiAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogICAgICAgImFycmF5IiwKICAgICAgICAgICAgICAgICAgICAibG9jYXRpb24iOiAgICJib2R5IiwKICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiJHcm91cCBKU09OIiwKICAgICAgICAgICAgICAgICAgICAiZmlsdGVycyI6ICAgICJqc29uX2VuY29kZSIsCiAgICAgICAgICAgICAgICAgICAgInJlcXVpcmVkIjogICB0cnVlCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgIkNvbnRlbnQtVHlwZSI6ewogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgImxvY2F0aW9uIjoiaGVhZGVyIiwKICAgICAgICAgICAgICAgICAgICAic3RhdGljIjogICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiZGVsZXRlX2dyb3VwIjogewogICAgICAgICAgICAiaHR0cE1ldGhvZCI6IkRFTEVURSIsCiAgICAgICAgICAgICJ1cmkiOiAgICAgICAiZ3JvdXBzL3tpZH0uanNvbiIsCiAgICAgICAgICAgICJzdW1tYXJ5IjogICAiRGVsZXRlIGEgZ3JvdXAiLAogICAgICAgICAgICAicGFyYW1ldGVycyI6ewogICAgICAgICAgICAgICAgImlkIjp7CiAgICAgICAgICAgICAgICAgICAgImxvY2F0aW9uIjogICAidXJpIiwKICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiJHcm91cCB0byBkZWxldGUgYnkgSUQiLAogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogICAgICAgImludGVnZXIiLAogICAgICAgICAgICAgICAgICAgICJyZXF1aXJlZCI6ICAgdHJ1ZQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiZ2V0X2dyb3VwIjogICAgewogICAgICAgICAgICAiaHR0cE1ldGhvZCI6IkdFVCIsCiAgICAgICAgICAgICJ1cmkiOiAgICAgICAiZ3JvdXBzL3tpZH0uanNvbiIsCiAgICAgICAgICAgICJzdW1tYXJ5IjogICAiR2V0IGEgdGlja2V0IiwKICAgICAgICAgICAgInBhcmFtZXRlcnMiOnsKICAgICAgICAgICAgICAgICJpZCI6ewogICAgICAgICAgICAgICAgICAgICJsb2NhdGlvbiI6ICAgInVyaSIsCiAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjoiR3JvdXAgdG8gZ2V0IGJ5IElEIiwKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICAgICAgICJpbnRlZ2VyIiwKICAgICAgICAgICAgICAgICAgICAicmVxdWlyZWQiOiAgIHRydWUKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgInVwZGF0ZV9ncm91cCI6IHsKICAgICAgICAgICAgImh0dHBNZXRob2QiOiJQVVQiLAogICAgICAgICAgICAidXJpIjogICAgICAgImdyb3Vwcy97aWR9Lmpzb24iLAogICAgICAgICAgICAic3VtbWFyeSI6ICAgIlVwZGF0ZSBhIGdyb3VwIiwKICAgICAgICAgICAgInBhcmFtZXRlcnMiOnsKICAgICAgICAgICAgICAgICJpZCI6ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibG9jYXRpb24iOiAgICJ1cmkiLAogICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6Ikdyb3VwIHRvIHVwZGF0ZSBieSBJRCIsCiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAgICAgICAiaW50ZWdlciIsCiAgICAgICAgICAgICAgICAgICAgInJlcXVpcmVkIjogICB0cnVlCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgImRhdGEiOiAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogICAgICAgImFycmF5IiwKICAgICAgICAgICAgICAgICAgICAibG9jYXRpb24iOiAgICJib2R5IiwKICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiJHcm91cCBKU09OIiwKICAgICAgICAgICAgICAgICAgICAiZmlsdGVycyI6ICAgICJqc29uX2VuY29kZSIsCiAgICAgICAgICAgICAgICAgICAgInJlcXVpcmVkIjogICB0cnVlCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgIkNvbnRlbnQtVHlwZSI6ewogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogICAgInN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgImxvY2F0aW9uIjoiaGVhZGVyIiwKICAgICAgICAgICAgICAgICAgICAic3RhdGljIjogICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQp9CmBgYAoKIyMjIEd1enpsZVxTZXJ2aWNlXERlc2NyaXB0aW9uXFNlcnZpY2VEZXNjcmlwdGlvbgoKQ29tbWFuZHMgYXJlIG5vdyBjYWxsZWQgT3BlcmF0aW9ucwoKKipCZWZvcmUqKgoKYGBgcGhwCnVzZSBHdXp6bGVcU2VydmljZVxEZXNjcmlwdGlvblxTZXJ2aWNlRGVzY3JpcHRpb247Cgokc2QgPSBuZXcgU2VydmljZURlc2NyaXB0aW9uKCk7CiRzZC0+Z2V0Q29tbWFuZHMoKTsgICAgIC8vIEByZXR1cm5zIEFwaUNvbW1hbmRJbnRlcmZhY2VbXQokc2QtPmhhc0NvbW1hbmQoJG5hbWUpOwokc2QtPmdldENvbW1hbmQoJG5hbWUpOyAvLyBAcmV0dXJucyBBcGlDb21tYW5kSW50ZXJmYWNlfG51bGwKJHNkLT5hZGRDb21tYW5kKCRjb21tYW5kKTsgLy8gQHBhcmFtIEFwaUNvbW1hbmRJbnRlcmZhY2UgJGNvbW1hbmQKYGBgCgoqKkFmdGVyKioKCmBgYHBocAp1c2UgR3V6emxlXFNlcnZpY2VcRGVzY3JpcHRpb25cU2VydmljZURlc2NyaXB0aW9uOwoKJHNkID0gbmV3IFNlcnZpY2VEZXNjcmlwdGlvbigpOwokc2QtPmdldE9wZXJhdGlvbnMoKTsgICAgICAgICAgIC8vIEByZXR1cm5zIE9wZXJhdGlvbkludGVyZmFjZVtdCiRzZC0+aGFzT3BlcmF0aW9uKCRuYW1lKTsKJHNkLT5nZXRPcGVyYXRpb24oJG5hbWUpOyAgICAgICAvLyBAcmV0dXJucyBPcGVyYXRpb25JbnRlcmZhY2V8bnVsbAokc2QtPmFkZE9wZXJhdGlvbigkb3BlcmF0aW9uKTsgIC8vIEBwYXJhbSBPcGVyYXRpb25JbnRlcmZhY2UgJG9wZXJhdGlvbgpgYGAKCiMjIyBHdXp6bGVcQ29tbW9uXEluZmxlY3Rpb25cSW5mbGVjdG9yCgpOYW1lc3BhY2UgaXMgbm93IGBHdXp6bGVcSW5mbGVjdGlvblxJbmZsZWN0b3JgCgojIyMgR3V6emxlXEh0dHBcUGx1Z2luCgpOYW1lc3BhY2UgaXMgbm93IGBHdXp6bGVcUGx1Z2luYC4gTWFueSBvdGhlciBjaGFuZ2VzIG9jY3VyIHdpdGhpbiB0aGlzIG5hbWVzcGFjZSBhbmQgYXJlIGRldGFpbGVkIGluIHRoZWlyIG93biBzZWN0aW9ucyBiZWxvdy4KCiMjIyBHdXp6bGVcSHR0cFxQbHVnaW5cTG9nUGx1Z2luIGFuZCBHdXp6bGVcQ29tbW9uXExvZwoKTm93IGBHdXp6bGVcUGx1Z2luXExvZ1xMb2dQbHVnaW5gIGFuZCBgR3V6emxlXExvZ2AgcmVzcGVjdGl2ZWx5LgoKKipCZWZvcmUqKgoKYGBgcGhwCnVzZSBHdXp6bGVcQ29tbW9uXExvZ1xDbG9zdXJlTG9nQWRhcHRlcjsKdXNlIEd1enpsZVxIdHRwXFBsdWdpblxMb2dQbHVnaW47CgovKiogQHZhciBcR3V6emxlXEh0dHBcQ2xpZW50ICovCiRjbGllbnQ7CgovLyAkdmVyYm9zaXR5IGlzIGFuIGludGVnZXIgaW5kaWNhdGluZyBkZXNpcmVkIG1lc3NhZ2UgdmVyYm9zaXR5IGxldmVsCiRjbGllbnQtPmFkZFN1YnNjcmliZXIobmV3IExvZ1BsdWdpbihuZXcgQ2xvc3VyZUxvZ0FkYXB0ZXIoZnVuY3Rpb24oJG0pIHsgZWNobyAkbTsgfSwgJHZlcmJvc2l0eSA9IExvZ1BsdWdpbjo6TE9HX1ZFUkJPU0UpOwpgYGAKCioqQWZ0ZXIqKgoKYGBgcGhwCnVzZSBHdXp6bGVcTG9nXENsb3N1cmVMb2dBZGFwdGVyOwp1c2UgR3V6emxlXExvZ1xNZXNzYWdlRm9ybWF0dGVyOwp1c2UgR3V6emxlXFBsdWdpblxMb2dcTG9nUGx1Z2luOwoKLyoqIEB2YXIgXEd1enpsZVxIdHRwXENsaWVudCAqLwokY2xpZW50OwoKLy8gJGZvcm1hdCBpcyBhIHN0cmluZyBpbmRpY2F0aW5nIGRlc2lyZWQgbWVzc2FnZSBmb3JtYXQgLS0gQHNlZSBNZXNzYWdlRm9ybWF0dGVyCiRjbGllbnQtPmFkZFN1YnNjcmliZXIobmV3IExvZ1BsdWdpbihuZXcgQ2xvc3VyZUxvZ0FkYXB0ZXIoZnVuY3Rpb24oJG0pIHsgZWNobyAkbTsgfSwgJGZvcm1hdCA9IE1lc3NhZ2VGb3JtYXR0ZXI6OkRFQlVHX0ZPUk1BVCk7CmBgYAoKIyMjIEd1enpsZVxIdHRwXFBsdWdpblxDdXJsQXV0aFBsdWdpbgoKTm93IGBHdXp6bGVcUGx1Z2luXEN1cmxBdXRoXEN1cmxBdXRoUGx1Z2luYC4KCiMjIyBHdXp6bGVcSHR0cFxQbHVnaW5cRXhwb25lbnRpYWxCYWNrb2ZmUGx1Z2luCgpOb3cgYEd1enpsZVxQbHVnaW5cQmFja29mZlxCYWNrb2ZmUGx1Z2luYCwgYW5kIG90aGVyIGNoYW5nZXMuCgoqKkJlZm9yZSoqCgpgYGBwaHAKdXNlIEd1enpsZVxIdHRwXFBsdWdpblxFeHBvbmVudGlhbEJhY2tvZmZQbHVnaW47CgokYmFja29mZlBsdWdpbiA9IG5ldyBFeHBvbmVudGlhbEJhY2tvZmZQbHVnaW4oJG1heFJldHJpZXMsIGFycmF5X21lcmdlKAogICAgICAgIEV4cG9uZW50aWFsQmFja29mZlBsdWdpbjo6Z2V0RGVmYXVsdEZhaWx1cmVDb2RlcygpLCBhcnJheSg0MjkpCiAgICApKTsKCiRjbGllbnQtPmFkZFN1YnNjcmliZXIoJGJhY2tvZmZQbHVnaW4pOwpgYGAKCioqQWZ0ZXIqKgoKYGBgcGhwCnVzZSBHdXp6bGVcUGx1Z2luXEJhY2tvZmZcQmFja29mZlBsdWdpbjsKdXNlIEd1enpsZVxQbHVnaW5cQmFja29mZlxIdHRwQmFja29mZlN0cmF0ZWd5OwoKLy8gVXNlIGNvbnZlbmllbnQgZmFjdG9yeSBtZXRob2QgaW5zdGVhZCAtLSBzZWUgaW1wbGVtZW50YXRpb24gZm9yIGlkZWFzIG9mIHdoYXQKLy8geW91IGNhbiBkbyB3aXRoIGNoYWluaW5nIGJhY2tvZmYgc3RyYXRlZ2llcwokYmFja29mZlBsdWdpbiA9IEJhY2tvZmZQbHVnaW46OmdldEV4cG9uZW50aWFsQmFja29mZigkbWF4UmV0cmllcywgYXJyYXlfbWVyZ2UoCiAgICAgICAgSHR0cEJhY2tvZmZTdHJhdGVneTo6Z2V0RGVmYXVsdEZhaWx1cmVDb2RlcygpLCBhcnJheSg0MjkpCiAgICApKTsKJGNsaWVudC0+YWRkU3Vic2NyaWJlcigkYmFja29mZlBsdWdpbik7CmBgYAoKIyMjIEtub3duIElzc3VlcwoKIyMjIyBbQlVHXSBBY2NlcHQtRW5jb2RpbmcgaGVhZGVyIGJlaGF2aW9yIGNoYW5nZWQgdW5pbnRlbnRpb25hbGx5LgoKKFNlZSAjMjE3KSAoRml4ZWQgaW4gMDlkYWViOGM2NjZmYjQ0NDk5YTA2NDZkNjU1YThhZTM2NDU2NTc1ZSkKCkluIHZlcnNpb24gMi44IHNldHRpbmcgdGhlIGBBY2NlcHQtRW5jb2RpbmdgIGhlYWRlciB3b3VsZCBzZXQgdGhlIENVUkxPUFRfRU5DT0RJTkcgb3B0aW9uLCB3aGljaCBwZXJtaXR0ZWQgY1VSTCB0bwpwcm9wZXJseSBoYW5kbGUgZ3ppcC9kZWZsYXRlIGNvbXByZXNzZWQgcmVzcG9uc2VzIGZyb20gdGhlIHNlcnZlci4gSW4gdmVyc2lvbnMgYWZmZWN0ZWQgYnkgdGhpcyBidWcgdGhpcyBkb2VzIG5vdCBoYXBwZW4uClNlZSBpc3N1ZSAjMjE3IGZvciBhIHdvcmthcm91bmQsIG9yIHVzZSBhIHZlcnNpb24gY29udGFpbmluZyB0aGUgZml4Lgo=AppDevTools/query/vendor/guzzlehttp/guzzle/composer.jsonewogICAgIm5hbWUiOiAiZ3V6emxlaHR0cC9ndXp6bGUiLAogICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAiZGVzY3JpcHRpb24iOiAiR3V6emxlIGlzIGEgUEhQIEhUVFAgY2xpZW50IGxpYnJhcnkiLAogICAgImtleXdvcmRzIjogWyJmcmFtZXdvcmsiLCAiaHR0cCIsICJyZXN0IiwgIndlYiBzZXJ2aWNlIiwgImN1cmwiLCAiY2xpZW50IiwgIkhUVFAgY2xpZW50Il0sCiAgICAiaG9tZXBhZ2UiOiAiaHR0cDovL2d1enpsZXBocC5vcmcvIiwKICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAiYXV0aG9ycyI6IFsKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogIk1pY2hhZWwgRG93bGluZyIsCiAgICAgICAgICAgICJlbWFpbCI6ICJtdGRvd2xpbmdAZ21haWwuY29tIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9tdGRvd2xpbmciCiAgICAgICAgfQogICAgXSwKICAgICJyZXF1aXJlIjogewogICAgICAgICJwaHAiOiAiPj01LjUiLAogICAgICAgICJndXp6bGVodHRwL3BzcjciOiAiXjEuNCIsCiAgICAgICAgImd1enpsZWh0dHAvcHJvbWlzZXMiOiAiXjEuMCIKICAgIH0sCiAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgImV4dC1jdXJsIjogIioiLAogICAgICAgICJwaHB1bml0L3BocHVuaXQiOiAiXjQuOC4zNSB8fCBeNS43IHx8IF42LjQgfHwgXjcuMCIsCiAgICAgICAgInBzci9sb2ciOiAiXjEuMCIKICAgIH0sCiAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgImZpbGVzIjogWyJzcmMvZnVuY3Rpb25zX2luY2x1ZGUucGhwIl0sCiAgICAgICAgInBzci00IjogewogICAgICAgICAgICAiR3V6emxlSHR0cFxcIjogInNyYy8iCiAgICAgICAgfQogICAgfSwKICAgICJhdXRvbG9hZC1kZXYiOiB7CiAgICAgICAgInBzci00IjogewogICAgICAgICAgICAiR3V6emxlSHR0cFxcVGVzdHNcXCI6ICJ0ZXN0cy8iCiAgICAgICAgfQogICAgfSwKICAgICJzdWdnZXN0IjogewogICAgICAgICJwc3IvbG9nIjogIlJlcXVpcmVkIGZvciB1c2luZyB0aGUgTG9nIG1pZGRsZXdhcmUiCiAgICB9LAogICAgImV4dHJhIjogewogICAgICAgICJicmFuY2gtYWxpYXMiOiB7CiAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjYuMy1kZXYiCiAgICAgICAgfQogICAgfQp9Cg==AppDevTools/query/vendor/guzzlehttp/guzzle/src/Client.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHA7Cgp1c2UgR3V6emxlSHR0cFxDb29raWVcQ29va2llSmFyOwp1c2UgR3V6emxlSHR0cFxQcm9taXNlOwp1c2UgR3V6emxlSHR0cFxQc3I3Owp1c2UgUHNyXEh0dHBcTWVzc2FnZVxVcmlJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlc3BvbnNlSW50ZXJmYWNlOwoKLyoqCiAqIEBtZXRob2QgUmVzcG9uc2VJbnRlcmZhY2UgZ2V0KHN0cmluZ3xVcmlJbnRlcmZhY2UgJHVyaSwgYXJyYXkgJG9wdGlvbnMgPSBbXSkKICogQG1ldGhvZCBSZXNwb25zZUludGVyZmFjZSBoZWFkKHN0cmluZ3xVcmlJbnRlcmZhY2UgJHVyaSwgYXJyYXkgJG9wdGlvbnMgPSBbXSkKICogQG1ldGhvZCBSZXNwb25zZUludGVyZmFjZSBwdXQoc3RyaW5nfFVyaUludGVyZmFjZSAkdXJpLCBhcnJheSAkb3B0aW9ucyA9IFtdKQogKiBAbWV0aG9kIFJlc3BvbnNlSW50ZXJmYWNlIHBvc3Qoc3RyaW5nfFVyaUludGVyZmFjZSAkdXJpLCBhcnJheSAkb3B0aW9ucyA9IFtdKQogKiBAbWV0aG9kIFJlc3BvbnNlSW50ZXJmYWNlIHBhdGNoKHN0cmluZ3xVcmlJbnRlcmZhY2UgJHVyaSwgYXJyYXkgJG9wdGlvbnMgPSBbXSkKICogQG1ldGhvZCBSZXNwb25zZUludGVyZmFjZSBkZWxldGUoc3RyaW5nfFVyaUludGVyZmFjZSAkdXJpLCBhcnJheSAkb3B0aW9ucyA9IFtdKQogKiBAbWV0aG9kIFByb21pc2VcUHJvbWlzZUludGVyZmFjZSBnZXRBc3luYyhzdHJpbmd8VXJpSW50ZXJmYWNlICR1cmksIGFycmF5ICRvcHRpb25zID0gW10pCiAqIEBtZXRob2QgUHJvbWlzZVxQcm9taXNlSW50ZXJmYWNlIGhlYWRBc3luYyhzdHJpbmd8VXJpSW50ZXJmYWNlICR1cmksIGFycmF5ICRvcHRpb25zID0gW10pCiAqIEBtZXRob2QgUHJvbWlzZVxQcm9taXNlSW50ZXJmYWNlIHB1dEFzeW5jKHN0cmluZ3xVcmlJbnRlcmZhY2UgJHVyaSwgYXJyYXkgJG9wdGlvbnMgPSBbXSkKICogQG1ldGhvZCBQcm9taXNlXFByb21pc2VJbnRlcmZhY2UgcG9zdEFzeW5jKHN0cmluZ3xVcmlJbnRlcmZhY2UgJHVyaSwgYXJyYXkgJG9wdGlvbnMgPSBbXSkKICogQG1ldGhvZCBQcm9taXNlXFByb21pc2VJbnRlcmZhY2UgcGF0Y2hBc3luYyhzdHJpbmd8VXJpSW50ZXJmYWNlICR1cmksIGFycmF5ICRvcHRpb25zID0gW10pCiAqIEBtZXRob2QgUHJvbWlzZVxQcm9taXNlSW50ZXJmYWNlIGRlbGV0ZUFzeW5jKHN0cmluZ3xVcmlJbnRlcmZhY2UgJHVyaSwgYXJyYXkgJG9wdGlvbnMgPSBbXSkKICovCmNsYXNzIENsaWVudCBpbXBsZW1lbnRzIENsaWVudEludGVyZmFjZQp7CiAgICAvKiogQHZhciBhcnJheSBEZWZhdWx0IHJlcXVlc3Qgb3B0aW9ucyAqLwogICAgcHJpdmF0ZSAkY29uZmlnOwoKICAgIC8qKgogICAgICogQ2xpZW50cyBhY2NlcHQgYW4gYXJyYXkgb2YgY29uc3RydWN0b3IgcGFyYW1ldGVycy4KICAgICAqCiAgICAgKiBIZXJlJ3MgYW4gZXhhbXBsZSBvZiBjcmVhdGluZyBhIGNsaWVudCB1c2luZyBhIGJhc2VfdXJpIGFuZCBhbiBhcnJheSBvZgogICAgICogZGVmYXVsdCByZXF1ZXN0IG9wdGlvbnMgdG8gYXBwbHkgdG8gZWFjaCByZXF1ZXN0OgogICAgICoKICAgICAqICAgICAkY2xpZW50ID0gbmV3IENsaWVudChbCiAgICAgKiAgICAgICAgICdiYXNlX3VyaScgICAgICAgID0+ICdodHRwOi8vd3d3LmZvby5jb20vMS4wLycsCiAgICAgKiAgICAgICAgICd0aW1lb3V0JyAgICAgICAgID0+IDAsCiAgICAgKiAgICAgICAgICdhbGxvd19yZWRpcmVjdHMnID0+IGZhbHNlLAogICAgICogICAgICAgICAncHJveHknICAgICAgICAgICA9PiAnMTkyLjE2OC4xNi4xOjEwJwogICAgICogICAgIF0pOwogICAgICoKICAgICAqIENsaWVudCBjb25maWd1cmF0aW9uIHNldHRpbmdzIGluY2x1ZGUgdGhlIGZvbGxvd2luZyBvcHRpb25zOgogICAgICoKICAgICAqIC0gaGFuZGxlcjogKGNhbGxhYmxlKSBGdW5jdGlvbiB0aGF0IHRyYW5zZmVycyBIVFRQIHJlcXVlc3RzIG92ZXIgdGhlCiAgICAgKiAgIHdpcmUuIFRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCBhIFBzcjdcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2UKICAgICAqICAgYW5kIGFycmF5IG9mIHRyYW5zZmVyIG9wdGlvbnMsIGFuZCBtdXN0IHJldHVybiBhCiAgICAgKiAgIEd1enpsZUh0dHBcUHJvbWlzZVxQcm9taXNlSW50ZXJmYWNlIHRoYXQgaXMgZnVsZmlsbGVkIHdpdGggYQogICAgICogICBQc3I3XEh0dHBcTWVzc2FnZVxSZXNwb25zZUludGVyZmFjZSBvbiBzdWNjZXNzLiAiaGFuZGxlciIgaXMgYQogICAgICogICBjb25zdHJ1Y3RvciBvbmx5IG9wdGlvbiB0aGF0IGNhbm5vdCBiZSBvdmVycmlkZGVuIGluIHBlci9yZXF1ZXN0CiAgICAgKiAgIG9wdGlvbnMuIElmIG5vIGhhbmRsZXIgaXMgcHJvdmlkZWQsIGEgZGVmYXVsdCBoYW5kbGVyIHdpbGwgYmUgY3JlYXRlZAogICAgICogICB0aGF0IGVuYWJsZXMgYWxsIG9mIHRoZSByZXF1ZXN0IG9wdGlvbnMgYmVsb3cgYnkgYXR0YWNoaW5nIGFsbCBvZiB0aGUKICAgICAqICAgZGVmYXVsdCBtaWRkbGV3YXJlIHRvIHRoZSBoYW5kbGVyLgogICAgICogLSBiYXNlX3VyaTogKHN0cmluZ3xVcmlJbnRlcmZhY2UpIEJhc2UgVVJJIG9mIHRoZSBjbGllbnQgdGhhdCBpcyBtZXJnZWQKICAgICAqICAgaW50byByZWxhdGl2ZSBVUklzLiBDYW4gYmUgYSBzdHJpbmcgb3IgaW5zdGFuY2Ugb2YgVXJpSW50ZXJmYWNlLgogICAgICogLSAqKjogYW55IHJlcXVlc3Qgb3B0aW9uCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRjb25maWcgQ2xpZW50IGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MuCiAgICAgKgogICAgICogQHNlZSBcR3V6emxlSHR0cFxSZXF1ZXN0T3B0aW9ucyBmb3IgYSBsaXN0IG9mIGF2YWlsYWJsZSByZXF1ZXN0IG9wdGlvbnMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChhcnJheSAkY29uZmlnID0gW10pCiAgICB7CiAgICAgICAgaWYgKCFpc3NldCgkY29uZmlnWydoYW5kbGVyJ10pKSB7CiAgICAgICAgICAgICRjb25maWdbJ2hhbmRsZXInXSA9IEhhbmRsZXJTdGFjazo6Y3JlYXRlKCk7CiAgICAgICAgfSBlbHNlaWYgKCFpc19jYWxsYWJsZSgkY29uZmlnWydoYW5kbGVyJ10pKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdoYW5kbGVyIG11c3QgYmUgYSBjYWxsYWJsZScpOwogICAgICAgIH0KCiAgICAgICAgLy8gQ29udmVydCB0aGUgYmFzZV91cmkgdG8gYSBVcmlJbnRlcmZhY2UKICAgICAgICBpZiAoaXNzZXQoJGNvbmZpZ1snYmFzZV91cmknXSkpIHsKICAgICAgICAgICAgJGNvbmZpZ1snYmFzZV91cmknXSA9IFBzcjdcdXJpX2ZvcigkY29uZmlnWydiYXNlX3VyaSddKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5jb25maWd1cmVEZWZhdWx0cygkY29uZmlnKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jYWxsKCRtZXRob2QsICRhcmdzKQogICAgewogICAgICAgIGlmIChjb3VudCgkYXJncykgPCAxKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdNYWdpYyByZXF1ZXN0IG1ldGhvZHMgcmVxdWlyZSBhIFVSSSBhbmQgb3B0aW9uYWwgb3B0aW9ucyBhcnJheScpOwogICAgICAgIH0KCiAgICAgICAgJHVyaSA9ICRhcmdzWzBdOwogICAgICAgICRvcHRzID0gaXNzZXQoJGFyZ3NbMV0pID8gJGFyZ3NbMV0gOiBbXTsKCiAgICAgICAgcmV0dXJuIHN1YnN0cigkbWV0aG9kLCAtNSkgPT09ICdBc3luYycKICAgICAgICAgICAgPyAkdGhpcy0+cmVxdWVzdEFzeW5jKHN1YnN0cigkbWV0aG9kLCAwLCAtNSksICR1cmksICRvcHRzKQogICAgICAgICAgICA6ICR0aGlzLT5yZXF1ZXN0KCRtZXRob2QsICR1cmksICRvcHRzKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2VuZEFzeW5jKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIGFycmF5ICRvcHRpb25zID0gW10pCiAgICB7CiAgICAgICAgLy8gTWVyZ2UgdGhlIGJhc2UgVVJJIGludG8gdGhlIHJlcXVlc3QgVVJJIGlmIG5lZWRlZC4KICAgICAgICAkb3B0aW9ucyA9ICR0aGlzLT5wcmVwYXJlRGVmYXVsdHMoJG9wdGlvbnMpOwoKICAgICAgICByZXR1cm4gJHRoaXMtPnRyYW5zZmVyKAogICAgICAgICAgICAkcmVxdWVzdC0+d2l0aFVyaSgkdGhpcy0+YnVpbGRVcmkoJHJlcXVlc3QtPmdldFVyaSgpLCAkb3B0aW9ucyksICRyZXF1ZXN0LT5oYXNIZWFkZXIoJ0hvc3QnKSksCiAgICAgICAgICAgICRvcHRpb25zCiAgICAgICAgKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2VuZChSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0LCBhcnJheSAkb3B0aW9ucyA9IFtdKQogICAgewogICAgICAgICRvcHRpb25zW1JlcXVlc3RPcHRpb25zOjpTWU5DSFJPTk9VU10gPSB0cnVlOwogICAgICAgIHJldHVybiAkdGhpcy0+c2VuZEFzeW5jKCRyZXF1ZXN0LCAkb3B0aW9ucyktPndhaXQoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVxdWVzdEFzeW5jKCRtZXRob2QsICR1cmkgPSAnJywgYXJyYXkgJG9wdGlvbnMgPSBbXSkKICAgIHsKICAgICAgICAkb3B0aW9ucyA9ICR0aGlzLT5wcmVwYXJlRGVmYXVsdHMoJG9wdGlvbnMpOwogICAgICAgIC8vIFJlbW92ZSByZXF1ZXN0IG1vZGlmeWluZyBwYXJhbWV0ZXIgYmVjYXVzZSBpdCBjYW4gYmUgZG9uZSB1cC1mcm9udC4KICAgICAgICAkaGVhZGVycyA9IGlzc2V0KCRvcHRpb25zWydoZWFkZXJzJ10pID8gJG9wdGlvbnNbJ2hlYWRlcnMnXSA6IFtdOwogICAgICAgICRib2R5ID0gaXNzZXQoJG9wdGlvbnNbJ2JvZHknXSkgPyAkb3B0aW9uc1snYm9keSddIDogbnVsbDsKICAgICAgICAkdmVyc2lvbiA9IGlzc2V0KCRvcHRpb25zWyd2ZXJzaW9uJ10pID8gJG9wdGlvbnNbJ3ZlcnNpb24nXSA6ICcxLjEnOwogICAgICAgIC8vIE1lcmdlIHRoZSBVUkkgaW50byB0aGUgYmFzZSBVUkkuCiAgICAgICAgJHVyaSA9ICR0aGlzLT5idWlsZFVyaSgkdXJpLCAkb3B0aW9ucyk7CiAgICAgICAgaWYgKGlzX2FycmF5KCRib2R5KSkgewogICAgICAgICAgICAkdGhpcy0+aW52YWxpZEJvZHkoKTsKICAgICAgICB9CiAgICAgICAgJHJlcXVlc3QgPSBuZXcgUHNyN1xSZXF1ZXN0KCRtZXRob2QsICR1cmksICRoZWFkZXJzLCAkYm9keSwgJHZlcnNpb24pOwogICAgICAgIC8vIFJlbW92ZSB0aGUgb3B0aW9uIHNvIHRoYXQgdGhleSBhcmUgbm90IGRvdWJseS1hcHBsaWVkLgogICAgICAgIHVuc2V0KCRvcHRpb25zWydoZWFkZXJzJ10sICRvcHRpb25zWydib2R5J10sICRvcHRpb25zWyd2ZXJzaW9uJ10pOwoKICAgICAgICByZXR1cm4gJHRoaXMtPnRyYW5zZmVyKCRyZXF1ZXN0LCAkb3B0aW9ucyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHJlcXVlc3QoJG1ldGhvZCwgJHVyaSA9ICcnLCBhcnJheSAkb3B0aW9ucyA9IFtdKQogICAgewogICAgICAgICRvcHRpb25zW1JlcXVlc3RPcHRpb25zOjpTWU5DSFJPTk9VU10gPSB0cnVlOwogICAgICAgIHJldHVybiAkdGhpcy0+cmVxdWVzdEFzeW5jKCRtZXRob2QsICR1cmksICRvcHRpb25zKS0+d2FpdCgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb25maWcoJG9wdGlvbiA9IG51bGwpCiAgICB7CiAgICAgICAgcmV0dXJuICRvcHRpb24gPT09IG51bGwKICAgICAgICAgICAgPyAkdGhpcy0+Y29uZmlnCiAgICAgICAgICAgIDogKGlzc2V0KCR0aGlzLT5jb25maWdbJG9wdGlvbl0pID8gJHRoaXMtPmNvbmZpZ1skb3B0aW9uXSA6IG51bGwpOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gYnVpbGRVcmkoJHVyaSwgYXJyYXkgJGNvbmZpZykKICAgIHsKICAgICAgICAvLyBmb3IgQkMgd2UgYWNjZXB0IG51bGwgd2hpY2ggd291bGQgb3RoZXJ3aXNlIGZhaWwgaW4gdXJpX2ZvcgogICAgICAgICR1cmkgPSBQc3I3XHVyaV9mb3IoJHVyaSA9PT0gbnVsbCA/ICcnIDogJHVyaSk7CgogICAgICAgIGlmIChpc3NldCgkY29uZmlnWydiYXNlX3VyaSddKSkgewogICAgICAgICAgICAkdXJpID0gUHNyN1xVcmlSZXNvbHZlcjo6cmVzb2x2ZShQc3I3XHVyaV9mb3IoJGNvbmZpZ1snYmFzZV91cmknXSksICR1cmkpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR1cmktPmdldFNjaGVtZSgpID09PSAnJyAmJiAkdXJpLT5nZXRIb3N0KCkgIT09ICcnID8gJHVyaS0+d2l0aFNjaGVtZSgnaHR0cCcpIDogJHVyaTsKICAgIH0KCiAgICAvKioKICAgICAqIENvbmZpZ3VyZXMgdGhlIGRlZmF1bHQgb3B0aW9ucyBmb3IgYSBjbGllbnQuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRjb25maWcKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBjb25maWd1cmVEZWZhdWx0cyhhcnJheSAkY29uZmlnKQogICAgewogICAgICAgICRkZWZhdWx0cyA9IFsKICAgICAgICAgICAgJ2FsbG93X3JlZGlyZWN0cycgPT4gUmVkaXJlY3RNaWRkbGV3YXJlOjokZGVmYXVsdFNldHRpbmdzLAogICAgICAgICAgICAnaHR0cF9lcnJvcnMnICAgICA9PiB0cnVlLAogICAgICAgICAgICAnZGVjb2RlX2NvbnRlbnQnICA9PiB0cnVlLAogICAgICAgICAgICAndmVyaWZ5JyAgICAgICAgICA9PiB0cnVlLAogICAgICAgICAgICAnY29va2llcycgICAgICAgICA9PiBmYWxzZQogICAgICAgIF07CgogICAgICAgIC8vIFVzZSB0aGUgc3RhbmRhcmQgTGludXggSFRUUF9QUk9YWSBhbmQgSFRUUFNfUFJPWFkgaWYgc2V0LgoKICAgICAgICAvLyBXZSBjYW4gb25seSB0cnVzdCB0aGUgSFRUUF9QUk9YWSBlbnZpcm9ubWVudCB2YXJpYWJsZSBpbiBhIENMSQogICAgICAgIC8vIHByb2Nlc3MgZHVlIHRvIHRoZSBmYWN0IHRoYXQgUEhQIGhhcyBubyByZWxpYWJsZSBtZWNoYW5pc20gdG8KICAgICAgICAvLyBnZXQgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRoYXQgc3RhcnQgd2l0aCAiSFRUUF8iLgogICAgICAgIGlmIChwaHBfc2FwaV9uYW1lKCkgPT0gJ2NsaScgJiYgZ2V0ZW52KCdIVFRQX1BST1hZJykpIHsKICAgICAgICAgICAgJGRlZmF1bHRzWydwcm94eSddWydodHRwJ10gPSBnZXRlbnYoJ0hUVFBfUFJPWFknKTsKICAgICAgICB9CgogICAgICAgIGlmICgkcHJveHkgPSBnZXRlbnYoJ0hUVFBTX1BST1hZJykpIHsKICAgICAgICAgICAgJGRlZmF1bHRzWydwcm94eSddWydodHRwcyddID0gJHByb3h5OwogICAgICAgIH0KCiAgICAgICAgaWYgKCRub1Byb3h5ID0gZ2V0ZW52KCdOT19QUk9YWScpKSB7CiAgICAgICAgICAgICRjbGVhbmVkTm9Qcm94eSA9IHN0cl9yZXBsYWNlKCcgJywgJycsICRub1Byb3h5KTsKICAgICAgICAgICAgJGRlZmF1bHRzWydwcm94eSddWydubyddID0gZXhwbG9kZSgnLCcsICRjbGVhbmVkTm9Qcm94eSk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+Y29uZmlnID0gJGNvbmZpZyArICRkZWZhdWx0czsKCiAgICAgICAgaWYgKCFlbXB0eSgkY29uZmlnWydjb29raWVzJ10pICYmICRjb25maWdbJ2Nvb2tpZXMnXSA9PT0gdHJ1ZSkgewogICAgICAgICAgICAkdGhpcy0+Y29uZmlnWydjb29raWVzJ10gPSBuZXcgQ29va2llSmFyKCk7CiAgICAgICAgfQoKICAgICAgICAvLyBBZGQgdGhlIGRlZmF1bHQgdXNlci1hZ2VudCBoZWFkZXIuCiAgICAgICAgaWYgKCFpc3NldCgkdGhpcy0+Y29uZmlnWydoZWFkZXJzJ10pKSB7CiAgICAgICAgICAgICR0aGlzLT5jb25maWdbJ2hlYWRlcnMnXSA9IFsnVXNlci1BZ2VudCcgPT4gZGVmYXVsdF91c2VyX2FnZW50KCldOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIEFkZCB0aGUgVXNlci1BZ2VudCBoZWFkZXIgaWYgb25lIHdhcyBub3QgYWxyZWFkeSBzZXQuCiAgICAgICAgICAgIGZvcmVhY2ggKGFycmF5X2tleXMoJHRoaXMtPmNvbmZpZ1snaGVhZGVycyddKSBhcyAkbmFtZSkgewogICAgICAgICAgICAgICAgaWYgKHN0cnRvbG93ZXIoJG5hbWUpID09PSAndXNlci1hZ2VudCcpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHRoaXMtPmNvbmZpZ1snaGVhZGVycyddWydVc2VyLUFnZW50J10gPSBkZWZhdWx0X3VzZXJfYWdlbnQoKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBNZXJnZXMgZGVmYXVsdCBvcHRpb25zIGludG8gdGhlIGFycmF5LgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucyBPcHRpb25zIHRvIG1vZGlmeSBieSByZWZlcmVuY2UKICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gcHJlcGFyZURlZmF1bHRzKCRvcHRpb25zKQogICAgewogICAgICAgICRkZWZhdWx0cyA9ICR0aGlzLT5jb25maWc7CgogICAgICAgIGlmICghZW1wdHkoJGRlZmF1bHRzWydoZWFkZXJzJ10pKSB7CiAgICAgICAgICAgIC8vIERlZmF1bHQgaGVhZGVycyBhcmUgb25seSBhZGRlZCBpZiB0aGV5IGFyZSBub3QgcHJlc2VudC4KICAgICAgICAgICAgJGRlZmF1bHRzWydfY29uZGl0aW9uYWwnXSA9ICRkZWZhdWx0c1snaGVhZGVycyddOwogICAgICAgICAgICB1bnNldCgkZGVmYXVsdHNbJ2hlYWRlcnMnXSk7CiAgICAgICAgfQoKICAgICAgICAvLyBTcGVjaWFsIGhhbmRsaW5nIGZvciBoZWFkZXJzIGlzIHJlcXVpcmVkIGFzIHRoZXkgYXJlIGFkZGVkIGFzCiAgICAgICAgLy8gY29uZGl0aW9uYWwgaGVhZGVycyBhbmQgYXMgaGVhZGVycyBwYXNzZWQgdG8gYSByZXF1ZXN0IGN0b3IuCiAgICAgICAgaWYgKGFycmF5X2tleV9leGlzdHMoJ2hlYWRlcnMnLCAkb3B0aW9ucykpIHsKICAgICAgICAgICAgLy8gQWxsb3dzIGRlZmF1bHQgaGVhZGVycyB0byBiZSB1bnNldC4KICAgICAgICAgICAgaWYgKCRvcHRpb25zWydoZWFkZXJzJ10gPT09IG51bGwpIHsKICAgICAgICAgICAgICAgICRkZWZhdWx0c1snX2NvbmRpdGlvbmFsJ10gPSBudWxsOwogICAgICAgICAgICAgICAgdW5zZXQoJG9wdGlvbnNbJ2hlYWRlcnMnXSk7CiAgICAgICAgICAgIH0gZWxzZWlmICghaXNfYXJyYXkoJG9wdGlvbnNbJ2hlYWRlcnMnXSkpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdoZWFkZXJzIG11c3QgYmUgYW4gYXJyYXknKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gU2hhbGxvdyBtZXJnZSBkZWZhdWx0cyB1bmRlcm5lYXRoIG9wdGlvbnMuCiAgICAgICAgJHJlc3VsdCA9ICRvcHRpb25zICsgJGRlZmF1bHRzOwoKICAgICAgICAvLyBSZW1vdmUgbnVsbCB2YWx1ZXMuCiAgICAgICAgZm9yZWFjaCAoJHJlc3VsdCBhcyAkayA9PiAkdikgewogICAgICAgICAgICBpZiAoJHYgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHVuc2V0KCRyZXN1bHRbJGtdKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBUcmFuc2ZlcnMgdGhlIGdpdmVuIHJlcXVlc3QgYW5kIGFwcGxpZXMgcmVxdWVzdCBvcHRpb25zLgogICAgICoKICAgICAqIFRoZSBVUkkgb2YgdGhlIHJlcXVlc3QgaXMgbm90IG1vZGlmaWVkIGFuZCB0aGUgcmVxdWVzdCBvcHRpb25zIGFyZSB1c2VkCiAgICAgKiBhcy1pcyB3aXRob3V0IG1lcmdpbmcgaW4gZGVmYXVsdCBvcHRpb25zLgogICAgICoKICAgICAqIEBwYXJhbSBSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0CiAgICAgKiBAcGFyYW0gYXJyYXkgICAgICAgICAgICAkb3B0aW9ucwogICAgICoKICAgICAqIEByZXR1cm4gUHJvbWlzZVxQcm9taXNlSW50ZXJmYWNlCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gdHJhbnNmZXIoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgYXJyYXkgJG9wdGlvbnMpCiAgICB7CiAgICAgICAgLy8gc2F2ZV90byAtPiBzaW5rCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydzYXZlX3RvJ10pKSB7CiAgICAgICAgICAgICRvcHRpb25zWydzaW5rJ10gPSAkb3B0aW9uc1snc2F2ZV90byddOwogICAgICAgICAgICB1bnNldCgkb3B0aW9uc1snc2F2ZV90byddKTsKICAgICAgICB9CgogICAgICAgIC8vIGV4Y2VwdGlvbnMgLT4gaHR0cF9lcnJvcnMKICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ2V4Y2VwdGlvbnMnXSkpIHsKICAgICAgICAgICAgJG9wdGlvbnNbJ2h0dHBfZXJyb3JzJ10gPSAkb3B0aW9uc1snZXhjZXB0aW9ucyddOwogICAgICAgICAgICB1bnNldCgkb3B0aW9uc1snZXhjZXB0aW9ucyddKTsKICAgICAgICB9CgogICAgICAgICRyZXF1ZXN0ID0gJHRoaXMtPmFwcGx5T3B0aW9ucygkcmVxdWVzdCwgJG9wdGlvbnMpOwogICAgICAgICRoYW5kbGVyID0gJG9wdGlvbnNbJ2hhbmRsZXInXTsKCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgcmV0dXJuIFByb21pc2VccHJvbWlzZV9mb3IoJGhhbmRsZXIoJHJlcXVlc3QsICRvcHRpb25zKSk7CiAgICAgICAgfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICByZXR1cm4gUHJvbWlzZVxyZWplY3Rpb25fZm9yKCRlKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBBcHBsaWVzIHRoZSBhcnJheSBvZiByZXF1ZXN0IG9wdGlvbnMgdG8gYSByZXF1ZXN0LgogICAgICoKICAgICAqIEBwYXJhbSBSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0CiAgICAgKiBAcGFyYW0gYXJyYXkgICAgICAgICAgICAkb3B0aW9ucwogICAgICoKICAgICAqIEByZXR1cm4gUmVxdWVzdEludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGFwcGx5T3B0aW9ucyhSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0LCBhcnJheSAmJG9wdGlvbnMpCiAgICB7CiAgICAgICAgJG1vZGlmeSA9IFsKICAgICAgICAgICAgJ3NldF9oZWFkZXJzJyA9PiBbXSwKICAgICAgICBdOwoKICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ2hlYWRlcnMnXSkpIHsKICAgICAgICAgICAgJG1vZGlmeVsnc2V0X2hlYWRlcnMnXSA9ICRvcHRpb25zWydoZWFkZXJzJ107CiAgICAgICAgICAgIHVuc2V0KCRvcHRpb25zWydoZWFkZXJzJ10pOwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydmb3JtX3BhcmFtcyddKSkgewogICAgICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ211bHRpcGFydCddKSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1lvdSBjYW5ub3QgdXNlICcKICAgICAgICAgICAgICAgICAgICAuICdmb3JtX3BhcmFtcyBhbmQgbXVsdGlwYXJ0IGF0IHRoZSBzYW1lIHRpbWUuIFVzZSB0aGUgJwogICAgICAgICAgICAgICAgICAgIC4gJ2Zvcm1fcGFyYW1zIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBzZW5kIGFwcGxpY2F0aW9uLycKICAgICAgICAgICAgICAgICAgICAuICd4LXd3dy1mb3JtLXVybGVuY29kZWQgcmVxdWVzdHMsIGFuZCB0aGUgbXVsdGlwYXJ0ICcKICAgICAgICAgICAgICAgICAgICAuICdvcHRpb24gdG8gc2VuZCBtdWx0aXBhcnQvZm9ybS1kYXRhIHJlcXVlc3RzLicpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRvcHRpb25zWydib2R5J10gPSBodHRwX2J1aWxkX3F1ZXJ5KCRvcHRpb25zWydmb3JtX3BhcmFtcyddLCAnJywgJyYnKTsKICAgICAgICAgICAgdW5zZXQoJG9wdGlvbnNbJ2Zvcm1fcGFyYW1zJ10pOwogICAgICAgICAgICAvLyBFbnN1cmUgdGhhdCB3ZSBkb24ndCBoYXZlIHRoZSBoZWFkZXIgaW4gZGlmZmVyZW50IGNhc2UgYW5kIHNldCB0aGUgbmV3IHZhbHVlLgogICAgICAgICAgICAkb3B0aW9uc1snX2NvbmRpdGlvbmFsJ10gPSBQc3I3XF9jYXNlbGVzc19yZW1vdmUoWydDb250ZW50LVR5cGUnXSwgJG9wdGlvbnNbJ19jb25kaXRpb25hbCddKTsKICAgICAgICAgICAgJG9wdGlvbnNbJ19jb25kaXRpb25hbCddWydDb250ZW50LVR5cGUnXSA9ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnOwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydtdWx0aXBhcnQnXSkpIHsKICAgICAgICAgICAgJG9wdGlvbnNbJ2JvZHknXSA9IG5ldyBQc3I3XE11bHRpcGFydFN0cmVhbSgkb3B0aW9uc1snbXVsdGlwYXJ0J10pOwogICAgICAgICAgICB1bnNldCgkb3B0aW9uc1snbXVsdGlwYXJ0J10pOwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydqc29uJ10pKSB7CiAgICAgICAgICAgICRvcHRpb25zWydib2R5J10gPSBcR3V6emxlSHR0cFxqc29uX2VuY29kZSgkb3B0aW9uc1snanNvbiddKTsKICAgICAgICAgICAgdW5zZXQoJG9wdGlvbnNbJ2pzb24nXSk7CiAgICAgICAgICAgIC8vIEVuc3VyZSB0aGF0IHdlIGRvbid0IGhhdmUgdGhlIGhlYWRlciBpbiBkaWZmZXJlbnQgY2FzZSBhbmQgc2V0IHRoZSBuZXcgdmFsdWUuCiAgICAgICAgICAgICRvcHRpb25zWydfY29uZGl0aW9uYWwnXSA9IFBzcjdcX2Nhc2VsZXNzX3JlbW92ZShbJ0NvbnRlbnQtVHlwZSddLCAkb3B0aW9uc1snX2NvbmRpdGlvbmFsJ10pOwogICAgICAgICAgICAkb3B0aW9uc1snX2NvbmRpdGlvbmFsJ11bJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL2pzb24nOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFlbXB0eSgkb3B0aW9uc1snZGVjb2RlX2NvbnRlbnQnXSkKICAgICAgICAgICAgJiYgJG9wdGlvbnNbJ2RlY29kZV9jb250ZW50J10gIT09IHRydWUKICAgICAgICApIHsKICAgICAgICAgICAgLy8gRW5zdXJlIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0aGUgaGVhZGVyIGluIGRpZmZlcmVudCBjYXNlIGFuZCBzZXQgdGhlIG5ldyB2YWx1ZS4KICAgICAgICAgICAgJG9wdGlvbnNbJ19jb25kaXRpb25hbCddID0gUHNyN1xfY2FzZWxlc3NfcmVtb3ZlKFsnQWNjZXB0LUVuY29kaW5nJ10sICRvcHRpb25zWydfY29uZGl0aW9uYWwnXSk7CiAgICAgICAgICAgICRtb2RpZnlbJ3NldF9oZWFkZXJzJ11bJ0FjY2VwdC1FbmNvZGluZyddID0gJG9wdGlvbnNbJ2RlY29kZV9jb250ZW50J107CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ2JvZHknXSkpIHsKICAgICAgICAgICAgaWYgKGlzX2FycmF5KCRvcHRpb25zWydib2R5J10pKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+aW52YWxpZEJvZHkoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkbW9kaWZ5Wydib2R5J10gPSBQc3I3XHN0cmVhbV9mb3IoJG9wdGlvbnNbJ2JvZHknXSk7CiAgICAgICAgICAgIHVuc2V0KCRvcHRpb25zWydib2R5J10pOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFlbXB0eSgkb3B0aW9uc1snYXV0aCddKSAmJiBpc19hcnJheSgkb3B0aW9uc1snYXV0aCddKSkgewogICAgICAgICAgICAkdmFsdWUgPSAkb3B0aW9uc1snYXV0aCddOwogICAgICAgICAgICAkdHlwZSA9IGlzc2V0KCR2YWx1ZVsyXSkgPyBzdHJ0b2xvd2VyKCR2YWx1ZVsyXSkgOiAnYmFzaWMnOwogICAgICAgICAgICBzd2l0Y2ggKCR0eXBlKSB7CiAgICAgICAgICAgICAgICBjYXNlICdiYXNpYyc6CiAgICAgICAgICAgICAgICAgICAgLy8gRW5zdXJlIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0aGUgaGVhZGVyIGluIGRpZmZlcmVudCBjYXNlIGFuZCBzZXQgdGhlIG5ldyB2YWx1ZS4KICAgICAgICAgICAgICAgICAgICAkbW9kaWZ5WydzZXRfaGVhZGVycyddID0gUHNyN1xfY2FzZWxlc3NfcmVtb3ZlKFsnQXV0aG9yaXphdGlvbiddLCAkbW9kaWZ5WydzZXRfaGVhZGVycyddKTsKICAgICAgICAgICAgICAgICAgICAkbW9kaWZ5WydzZXRfaGVhZGVycyddWydBdXRob3JpemF0aW9uJ10gPSAnQmFzaWMgJwogICAgICAgICAgICAgICAgICAgICAgICAuIGJhc2U2NF9lbmNvZGUoIiR2YWx1ZVswXTokdmFsdWVbMV0iKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2RpZ2VzdCc6CiAgICAgICAgICAgICAgICAgICAgLy8gQHRvZG86IERvIG5vdCByZWx5IG9uIGN1cmwKICAgICAgICAgICAgICAgICAgICAkb3B0aW9uc1snY3VybCddW0NVUkxPUFRfSFRUUEFVVEhdID0gQ1VSTEFVVEhfRElHRVNUOwogICAgICAgICAgICAgICAgICAgICRvcHRpb25zWydjdXJsJ11bQ1VSTE9QVF9VU0VSUFdEXSA9ICIkdmFsdWVbMF06JHZhbHVlWzFdIjsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ250bG0nOgogICAgICAgICAgICAgICAgICAgICRvcHRpb25zWydjdXJsJ11bQ1VSTE9QVF9IVFRQQVVUSF0gPSBDVVJMQVVUSF9OVExNOwogICAgICAgICAgICAgICAgICAgICRvcHRpb25zWydjdXJsJ11bQ1VSTE9QVF9VU0VSUFdEXSA9ICIkdmFsdWVbMF06JHZhbHVlWzFdIjsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydxdWVyeSddKSkgewogICAgICAgICAgICAkdmFsdWUgPSAkb3B0aW9uc1sncXVlcnknXTsKICAgICAgICAgICAgaWYgKGlzX2FycmF5KCR2YWx1ZSkpIHsKICAgICAgICAgICAgICAgICR2YWx1ZSA9IGh0dHBfYnVpbGRfcXVlcnkoJHZhbHVlLCBudWxsLCAnJicsIFBIUF9RVUVSWV9SRkMzOTg2KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoIWlzX3N0cmluZygkdmFsdWUpKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigncXVlcnkgbXVzdCBiZSBhIHN0cmluZyBvciBhcnJheScpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRtb2RpZnlbJ3F1ZXJ5J10gPSAkdmFsdWU7CiAgICAgICAgICAgIHVuc2V0KCRvcHRpb25zWydxdWVyeSddKTsKICAgICAgICB9CgogICAgICAgIC8vIEVuc3VyZSB0aGF0IHNpbmsgaXMgbm90IGFuIGludmFsaWQgdmFsdWUuCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydzaW5rJ10pKSB7CiAgICAgICAgICAgIC8vIFRPRE86IEFkZCBtb3JlIHNpbmsgdmFsaWRhdGlvbj8KICAgICAgICAgICAgaWYgKGlzX2Jvb2woJG9wdGlvbnNbJ3NpbmsnXSkpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdzaW5rIG11c3Qgbm90IGJlIGEgYm9vbGVhbicpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkcmVxdWVzdCA9IFBzcjdcbW9kaWZ5X3JlcXVlc3QoJHJlcXVlc3QsICRtb2RpZnkpOwogICAgICAgIGlmICgkcmVxdWVzdC0+Z2V0Qm9keSgpIGluc3RhbmNlb2YgUHNyN1xNdWx0aXBhcnRTdHJlYW0pIHsKICAgICAgICAgICAgLy8gVXNlIGEgbXVsdGlwYXJ0L2Zvcm0tZGF0YSBQT1NUIGlmIGEgQ29udGVudC1UeXBlIGlzIG5vdCBzZXQuCiAgICAgICAgICAgIC8vIEVuc3VyZSB0aGF0IHdlIGRvbid0IGhhdmUgdGhlIGhlYWRlciBpbiBkaWZmZXJlbnQgY2FzZSBhbmQgc2V0IHRoZSBuZXcgdmFsdWUuCiAgICAgICAgICAgICRvcHRpb25zWydfY29uZGl0aW9uYWwnXSA9IFBzcjdcX2Nhc2VsZXNzX3JlbW92ZShbJ0NvbnRlbnQtVHlwZSddLCAkb3B0aW9uc1snX2NvbmRpdGlvbmFsJ10pOwogICAgICAgICAgICAkb3B0aW9uc1snX2NvbmRpdGlvbmFsJ11bJ0NvbnRlbnQtVHlwZSddID0gJ211bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PScKICAgICAgICAgICAgICAgIC4gJHJlcXVlc3QtPmdldEJvZHkoKS0+Z2V0Qm91bmRhcnkoKTsKICAgICAgICB9CgogICAgICAgIC8vIE1lcmdlIGluIGNvbmRpdGlvbmFsIGhlYWRlcnMgaWYgdGhleSBhcmUgbm90IHByZXNlbnQuCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydfY29uZGl0aW9uYWwnXSkpIHsKICAgICAgICAgICAgLy8gQnVpbGQgdXAgdGhlIGNoYW5nZXMgc28gaXQncyBpbiBhIHNpbmdsZSBjbG9uZSBvZiB0aGUgbWVzc2FnZS4KICAgICAgICAgICAgJG1vZGlmeSA9IFtdOwogICAgICAgICAgICBmb3JlYWNoICgkb3B0aW9uc1snX2NvbmRpdGlvbmFsJ10gYXMgJGsgPT4gJHYpIHsKICAgICAgICAgICAgICAgIGlmICghJHJlcXVlc3QtPmhhc0hlYWRlcigkaykpIHsKICAgICAgICAgICAgICAgICAgICAkbW9kaWZ5WydzZXRfaGVhZGVycyddWyRrXSA9ICR2OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgICRyZXF1ZXN0ID0gUHNyN1xtb2RpZnlfcmVxdWVzdCgkcmVxdWVzdCwgJG1vZGlmeSk7CiAgICAgICAgICAgIC8vIERvbid0IHBhc3MgdGhpcyBpbnRlcm5hbCB2YWx1ZSBhbG9uZyB0byBtaWRkbGV3YXJlL2hhbmRsZXJzLgogICAgICAgICAgICB1bnNldCgkb3B0aW9uc1snX2NvbmRpdGlvbmFsJ10pOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXF1ZXN0OwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gaW52YWxpZEJvZHkoKQogICAgewogICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdQYXNzaW5nIGluIHRoZSAiYm9keSIgcmVxdWVzdCAnCiAgICAgICAgICAgIC4gJ29wdGlvbiBhcyBhbiBhcnJheSB0byBzZW5kIGEgUE9TVCByZXF1ZXN0IGhhcyBiZWVuIGRlcHJlY2F0ZWQuICcKICAgICAgICAgICAgLiAnUGxlYXNlIHVzZSB0aGUgImZvcm1fcGFyYW1zIiByZXF1ZXN0IG9wdGlvbiB0byBzZW5kIGEgJwogICAgICAgICAgICAuICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQgcmVxdWVzdCwgb3IgdGhlICJtdWx0aXBhcnQiICcKICAgICAgICAgICAgLiAncmVxdWVzdCBvcHRpb24gdG8gc2VuZCBhIG11bHRpcGFydC9mb3JtLWRhdGEgcmVxdWVzdC4nKTsKICAgIH0KfQo=AppDevTools/query/vendor/guzzlehttp/guzzle/src/ClientInterface.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHA7Cgp1c2UgR3V6emxlSHR0cFxQcm9taXNlXFByb21pc2VJbnRlcmZhY2U7CnVzZSBHdXp6bGVIdHRwXEV4Y2VwdGlvblxHdXp6bGVFeGNlcHRpb247CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlc3BvbnNlSW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxVcmlJbnRlcmZhY2U7CgovKioKICogQ2xpZW50IGludGVyZmFjZSBmb3Igc2VuZGluZyBIVFRQIHJlcXVlc3RzLgogKi8KaW50ZXJmYWNlIENsaWVudEludGVyZmFjZQp7CiAgICBjb25zdCBWRVJTSU9OID0gJzYuMy4zJzsKCiAgICAvKioKICAgICAqIFNlbmQgYW4gSFRUUCByZXF1ZXN0LgogICAgICoKICAgICAqIEBwYXJhbSBSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0IFJlcXVlc3QgdG8gc2VuZAogICAgICogQHBhcmFtIGFycmF5ICAgICAgICAgICAgJG9wdGlvbnMgUmVxdWVzdCBvcHRpb25zIHRvIGFwcGx5IHRvIHRoZSBnaXZlbgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCBhbmQgdG8gdGhlIHRyYW5zZmVyLgogICAgICoKICAgICAqIEByZXR1cm4gUmVzcG9uc2VJbnRlcmZhY2UKICAgICAqIEB0aHJvd3MgR3V6emxlRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZW5kKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIGFycmF5ICRvcHRpb25zID0gW10pOwoKICAgIC8qKgogICAgICogQXN5bmNocm9ub3VzbHkgc2VuZCBhbiBIVFRQIHJlcXVlc3QuCiAgICAgKgogICAgICogQHBhcmFtIFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QgUmVxdWVzdCB0byBzZW5kCiAgICAgKiBAcGFyYW0gYXJyYXkgICAgICAgICAgICAkb3B0aW9ucyBSZXF1ZXN0IG9wdGlvbnMgdG8gYXBwbHkgdG8gdGhlIGdpdmVuCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0IGFuZCB0byB0aGUgdHJhbnNmZXIuCiAgICAgKgogICAgICogQHJldHVybiBQcm9taXNlSW50ZXJmYWNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZW5kQXN5bmMoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgYXJyYXkgJG9wdGlvbnMgPSBbXSk7CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYW5kIHNlbmQgYW4gSFRUUCByZXF1ZXN0LgogICAgICoKICAgICAqIFVzZSBhbiBhYnNvbHV0ZSBwYXRoIHRvIG92ZXJyaWRlIHRoZSBiYXNlIHBhdGggb2YgdGhlIGNsaWVudCwgb3IgYQogICAgICogcmVsYXRpdmUgcGF0aCB0byBhcHBlbmQgdG8gdGhlIGJhc2UgcGF0aCBvZiB0aGUgY2xpZW50LiBUaGUgVVJMIGNhbgogICAgICogY29udGFpbiB0aGUgcXVlcnkgc3RyaW5nIGFzIHdlbGwuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAgICAgJG1ldGhvZCAgSFRUUCBtZXRob2QuCiAgICAgKiBAcGFyYW0gc3RyaW5nfFVyaUludGVyZmFjZSAkdXJpICAgICBVUkkgb2JqZWN0IG9yIHN0cmluZy4KICAgICAqIEBwYXJhbSBhcnJheSAgICAgICAgICAgICAgICRvcHRpb25zIFJlcXVlc3Qgb3B0aW9ucyB0byBhcHBseS4KICAgICAqCiAgICAgKiBAcmV0dXJuIFJlc3BvbnNlSW50ZXJmYWNlCiAgICAgKiBAdGhyb3dzIEd1enpsZUV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVxdWVzdCgkbWV0aG9kLCAkdXJpLCBhcnJheSAkb3B0aW9ucyA9IFtdKTsKCiAgICAvKioKICAgICAqIENyZWF0ZSBhbmQgc2VuZCBhbiBhc3luY2hyb25vdXMgSFRUUCByZXF1ZXN0LgogICAgICoKICAgICAqIFVzZSBhbiBhYnNvbHV0ZSBwYXRoIHRvIG92ZXJyaWRlIHRoZSBiYXNlIHBhdGggb2YgdGhlIGNsaWVudCwgb3IgYQogICAgICogcmVsYXRpdmUgcGF0aCB0byBhcHBlbmQgdG8gdGhlIGJhc2UgcGF0aCBvZiB0aGUgY2xpZW50LiBUaGUgVVJMIGNhbgogICAgICogY29udGFpbiB0aGUgcXVlcnkgc3RyaW5nIGFzIHdlbGwuIFVzZSBhbiBhcnJheSB0byBwcm92aWRlIGEgVVJMCiAgICAgKiB0ZW1wbGF0ZSBhbmQgYWRkaXRpb25hbCB2YXJpYWJsZXMgdG8gdXNlIGluIHRoZSBVUkwgdGVtcGxhdGUgZXhwYW5zaW9uLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAgICAgICAgICRtZXRob2QgIEhUVFAgbWV0aG9kCiAgICAgKiBAcGFyYW0gc3RyaW5nfFVyaUludGVyZmFjZSAkdXJpICAgICBVUkkgb2JqZWN0IG9yIHN0cmluZy4KICAgICAqIEBwYXJhbSBhcnJheSAgICAgICAgICAgICAgICRvcHRpb25zIFJlcXVlc3Qgb3B0aW9ucyB0byBhcHBseS4KICAgICAqCiAgICAgKiBAcmV0dXJuIFByb21pc2VJbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlcXVlc3RBc3luYygkbWV0aG9kLCAkdXJpLCBhcnJheSAkb3B0aW9ucyA9IFtdKTsKCiAgICAvKioKICAgICAqIEdldCBhIGNsaWVudCBjb25maWd1cmF0aW9uIG9wdGlvbi4KICAgICAqCiAgICAgKiBUaGVzZSBvcHRpb25zIGluY2x1ZGUgZGVmYXVsdCByZXF1ZXN0IG9wdGlvbnMgb2YgdGhlIGNsaWVudCwgYSAiaGFuZGxlciIKICAgICAqIChpZiB1dGlsaXplZCBieSB0aGUgY29uY3JldGUgY2xpZW50KSwgYW5kIGEgImJhc2VfdXJpIiBpZiB1dGlsaXplZCBieQogICAgICogdGhlIGNvbmNyZXRlIGNsaWVudC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJG9wdGlvbiBUaGUgY29uZmlnIG9wdGlvbiB0byByZXRyaWV2ZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb25maWcoJG9wdGlvbiA9IG51bGwpOwp9Cg==AppDevTools/query/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcQ29va2llOwoKdXNlIFBzclxIdHRwXE1lc3NhZ2VcUmVxdWVzdEludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcUmVzcG9uc2VJbnRlcmZhY2U7CgovKioKICogQ29va2llIGphciB0aGF0IHN0b3JlcyBjb29raWVzIGFzIGFuIGFycmF5CiAqLwpjbGFzcyBDb29raWVKYXIgaW1wbGVtZW50cyBDb29raWVKYXJJbnRlcmZhY2UKewogICAgLyoqIEB2YXIgU2V0Q29va2llW10gTG9hZGVkIGNvb2tpZSBkYXRhICovCiAgICBwcml2YXRlICRjb29raWVzID0gW107CgogICAgLyoqIEB2YXIgYm9vbCAqLwogICAgcHJpdmF0ZSAkc3RyaWN0TW9kZTsKCiAgICAvKioKICAgICAqIEBwYXJhbSBib29sICRzdHJpY3RNb2RlICAgU2V0IHRvIHRydWUgdG8gdGhyb3cgZXhjZXB0aW9ucyB3aGVuIGludmFsaWQKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgY29va2llcyBhcmUgYWRkZWQgdG8gdGhlIGNvb2tpZSBqYXIuCiAgICAgKiBAcGFyYW0gYXJyYXkgJGNvb2tpZUFycmF5IEFycmF5IG9mIFNldENvb2tpZSBvYmplY3RzIG9yIGEgaGFzaCBvZgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheXMgdGhhdCBjYW4gYmUgdXNlZCB3aXRoIHRoZSBTZXRDb29raWUKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3RydWN0b3IKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRzdHJpY3RNb2RlID0gZmFsc2UsICRjb29raWVBcnJheSA9IFtdKQogICAgewogICAgICAgICR0aGlzLT5zdHJpY3RNb2RlID0gJHN0cmljdE1vZGU7CgogICAgICAgIGZvcmVhY2ggKCRjb29raWVBcnJheSBhcyAkY29va2llKSB7CiAgICAgICAgICAgIGlmICghKCRjb29raWUgaW5zdGFuY2VvZiBTZXRDb29raWUpKSB7CiAgICAgICAgICAgICAgICAkY29va2llID0gbmV3IFNldENvb2tpZSgkY29va2llKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkdGhpcy0+c2V0Q29va2llKCRjb29raWUpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZSBhIG5ldyBDb29raWUgamFyIGZyb20gYW4gYXNzb2NpYXRpdmUgYXJyYXkgYW5kIGRvbWFpbi4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgICRjb29raWVzIENvb2tpZXMgdG8gY3JlYXRlIHRoZSBqYXIgZnJvbQogICAgICogQHBhcmFtIHN0cmluZyAkZG9tYWluICBEb21haW4gdG8gc2V0IHRoZSBjb29raWVzIHRvCiAgICAgKgogICAgICogQHJldHVybiBzZWxmCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZnJvbUFycmF5KGFycmF5ICRjb29raWVzLCAkZG9tYWluKQogICAgewogICAgICAgICRjb29raWVKYXIgPSBuZXcgc2VsZigpOwogICAgICAgIGZvcmVhY2ggKCRjb29raWVzIGFzICRuYW1lID0+ICR2YWx1ZSkgewogICAgICAgICAgICAkY29va2llSmFyLT5zZXRDb29raWUobmV3IFNldENvb2tpZShbCiAgICAgICAgICAgICAgICAnRG9tYWluJyAgPT4gJGRvbWFpbiwKICAgICAgICAgICAgICAgICdOYW1lJyAgICA9PiAkbmFtZSwKICAgICAgICAgICAgICAgICdWYWx1ZScgICA9PiAkdmFsdWUsCiAgICAgICAgICAgICAgICAnRGlzY2FyZCcgPT4gdHJ1ZQogICAgICAgICAgICBdKSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGNvb2tpZUphcjsKICAgIH0KCiAgICAvKioKICAgICAqIEBkZXByZWNhdGVkCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0Q29va2llVmFsdWUoJHZhbHVlKQogICAgewogICAgICAgIHJldHVybiAkdmFsdWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBFdmFsdWF0ZSBpZiB0aGlzIGNvb2tpZSBzaG91bGQgYmUgcGVyc2lzdGVkIHRvIHN0b3JhZ2UKICAgICAqIHRoYXQgc3Vydml2ZXMgYmV0d2VlbiByZXF1ZXN0cy4KICAgICAqCiAgICAgKiBAcGFyYW0gU2V0Q29va2llICRjb29raWUgQmVpbmcgZXZhbHVhdGVkLgogICAgICogQHBhcmFtIGJvb2wgJGFsbG93U2Vzc2lvbkNvb2tpZXMgSWYgd2Ugc2hvdWxkIHBlcnNpc3Qgc2Vzc2lvbiBjb29raWVzCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzaG91bGRQZXJzaXN0KAogICAgICAgIFNldENvb2tpZSAkY29va2llLAogICAgICAgICRhbGxvd1Nlc3Npb25Db29raWVzID0gZmFsc2UKICAgICkgewogICAgICAgIGlmICgkY29va2llLT5nZXRFeHBpcmVzKCkgfHwgJGFsbG93U2Vzc2lvbkNvb2tpZXMpIHsKICAgICAgICAgICAgaWYgKCEkY29va2llLT5nZXREaXNjYXJkKCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBGaW5kcyBhbmQgcmV0dXJucyB0aGUgY29va2llIGJhc2VkIG9uIHRoZSBuYW1lCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSBjb29raWUgbmFtZSB0byBzZWFyY2ggZm9yCiAgICAgKiBAcmV0dXJuIFNldENvb2tpZXxudWxsIGNvb2tpZSB0aGF0IHdhcyBmb3VuZCBvciBudWxsIGlmIG5vdCBmb3VuZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29va2llQnlOYW1lKCRuYW1lKQogICAgewogICAgICAgIC8vIGRvbid0IGFsbG93IGEgbnVsbCBuYW1lCiAgICAgICAgaWYgKCRuYW1lID09PSBudWxsKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICBmb3JlYWNoICgkdGhpcy0+Y29va2llcyBhcyAkY29va2llKSB7CiAgICAgICAgICAgIGlmICgkY29va2llLT5nZXROYW1lKCkgIT09IG51bGwgJiYgc3RyY2FzZWNtcCgkY29va2llLT5nZXROYW1lKCksICRuYW1lKSA9PT0gMCkgewogICAgICAgICAgICAgICAgcmV0dXJuICRjb29raWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRvQXJyYXkoKQogICAgewogICAgICAgIHJldHVybiBhcnJheV9tYXAoZnVuY3Rpb24gKFNldENvb2tpZSAkY29va2llKSB7CiAgICAgICAgICAgIHJldHVybiAkY29va2llLT50b0FycmF5KCk7CiAgICAgICAgfSwgJHRoaXMtPmdldEl0ZXJhdG9yKCktPmdldEFycmF5Q29weSgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xlYXIoJGRvbWFpbiA9IG51bGwsICRwYXRoID0gbnVsbCwgJG5hbWUgPSBudWxsKQogICAgewogICAgICAgIGlmICghJGRvbWFpbikgewogICAgICAgICAgICAkdGhpcy0+Y29va2llcyA9IFtdOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfSBlbHNlaWYgKCEkcGF0aCkgewogICAgICAgICAgICAkdGhpcy0+Y29va2llcyA9IGFycmF5X2ZpbHRlcigKICAgICAgICAgICAgICAgICR0aGlzLT5jb29raWVzLAogICAgICAgICAgICAgICAgZnVuY3Rpb24gKFNldENvb2tpZSAkY29va2llKSB1c2UgKCRwYXRoLCAkZG9tYWluKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICEkY29va2llLT5tYXRjaGVzRG9tYWluKCRkb21haW4pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICApOwogICAgICAgIH0gZWxzZWlmICghJG5hbWUpIHsKICAgICAgICAgICAgJHRoaXMtPmNvb2tpZXMgPSBhcnJheV9maWx0ZXIoCiAgICAgICAgICAgICAgICAkdGhpcy0+Y29va2llcywKICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChTZXRDb29raWUgJGNvb2tpZSkgdXNlICgkcGF0aCwgJGRvbWFpbikgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAhKCRjb29raWUtPm1hdGNoZXNQYXRoKCRwYXRoKSAmJgogICAgICAgICAgICAgICAgICAgICAgICAkY29va2llLT5tYXRjaGVzRG9tYWluKCRkb21haW4pKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkdGhpcy0+Y29va2llcyA9IGFycmF5X2ZpbHRlcigKICAgICAgICAgICAgICAgICR0aGlzLT5jb29raWVzLAogICAgICAgICAgICAgICAgZnVuY3Rpb24gKFNldENvb2tpZSAkY29va2llKSB1c2UgKCRwYXRoLCAkZG9tYWluLCAkbmFtZSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAhKCRjb29raWUtPmdldE5hbWUoKSA9PSAkbmFtZSAmJgogICAgICAgICAgICAgICAgICAgICAgICAkY29va2llLT5tYXRjaGVzUGF0aCgkcGF0aCkgJiYKICAgICAgICAgICAgICAgICAgICAgICAgJGNvb2tpZS0+bWF0Y2hlc0RvbWFpbigkZG9tYWluKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjbGVhclNlc3Npb25Db29raWVzKCkKICAgIHsKICAgICAgICAkdGhpcy0+Y29va2llcyA9IGFycmF5X2ZpbHRlcigKICAgICAgICAgICAgJHRoaXMtPmNvb2tpZXMsCiAgICAgICAgICAgIGZ1bmN0aW9uIChTZXRDb29raWUgJGNvb2tpZSkgewogICAgICAgICAgICAgICAgcmV0dXJuICEkY29va2llLT5nZXREaXNjYXJkKCkgJiYgJGNvb2tpZS0+Z2V0RXhwaXJlcygpOwogICAgICAgICAgICB9CiAgICAgICAgKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0Q29va2llKFNldENvb2tpZSAkY29va2llKQogICAgewogICAgICAgIC8vIElmIHRoZSBuYW1lIHN0cmluZyBpcyBlbXB0eSAoYnV0IG5vdCAwKSwgaWdub3JlIHRoZSBzZXQtY29va2llCiAgICAgICAgLy8gc3RyaW5nIGVudGlyZWx5LgogICAgICAgICRuYW1lID0gJGNvb2tpZS0+Z2V0TmFtZSgpOwogICAgICAgIGlmICghJG5hbWUgJiYgJG5hbWUgIT09ICcwJykgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICAvLyBPbmx5IGFsbG93IGNvb2tpZXMgd2l0aCBzZXQgYW5kIHZhbGlkIGRvbWFpbiwgbmFtZSwgdmFsdWUKICAgICAgICAkcmVzdWx0ID0gJGNvb2tpZS0+dmFsaWRhdGUoKTsKICAgICAgICBpZiAoJHJlc3VsdCAhPT0gdHJ1ZSkgewogICAgICAgICAgICBpZiAoJHRoaXMtPnN0cmljdE1vZGUpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignSW52YWxpZCBjb29raWU6ICcgLiAkcmVzdWx0KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICR0aGlzLT5yZW1vdmVDb29raWVJZkVtcHR5KCRjb29raWUpOwogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBSZXNvbHZlIGNvbmZsaWN0cyB3aXRoIHByZXZpb3VzbHkgc2V0IGNvb2tpZXMKICAgICAgICBmb3JlYWNoICgkdGhpcy0+Y29va2llcyBhcyAkaSA9PiAkYykgewoKICAgICAgICAgICAgLy8gVHdvIGNvb2tpZXMgYXJlIGlkZW50aWNhbCwgd2hlbiB0aGVpciBwYXRoLCBhbmQgZG9tYWluIGFyZQogICAgICAgICAgICAvLyBpZGVudGljYWwuCiAgICAgICAgICAgIGlmICgkYy0+Z2V0UGF0aCgpICE9ICRjb29raWUtPmdldFBhdGgoKSB8fAogICAgICAgICAgICAgICAgJGMtPmdldERvbWFpbigpICE9ICRjb29raWUtPmdldERvbWFpbigpIHx8CiAgICAgICAgICAgICAgICAkYy0+Z2V0TmFtZSgpICE9ICRjb29raWUtPmdldE5hbWUoKQogICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBUaGUgcHJldmlvdXNseSBzZXQgY29va2llIGlzIGEgZGlzY2FyZCBjb29raWUgYW5kIHRoaXMgb25lIGlzCiAgICAgICAgICAgIC8vIG5vdCBzbyBhbGxvdyB0aGUgbmV3IGNvb2tpZSB0byBiZSBzZXQKICAgICAgICAgICAgaWYgKCEkY29va2llLT5nZXREaXNjYXJkKCkgJiYgJGMtPmdldERpc2NhcmQoKSkgewogICAgICAgICAgICAgICAgdW5zZXQoJHRoaXMtPmNvb2tpZXNbJGldKTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBJZiB0aGUgbmV3IGNvb2tpZSdzIGV4cGlyYXRpb24gaXMgZnVydGhlciBpbnRvIHRoZSBmdXR1cmUsIHRoZW4KICAgICAgICAgICAgLy8gcmVwbGFjZSB0aGUgb2xkIGNvb2tpZQogICAgICAgICAgICBpZiAoJGNvb2tpZS0+Z2V0RXhwaXJlcygpID4gJGMtPmdldEV4cGlyZXMoKSkgewogICAgICAgICAgICAgICAgdW5zZXQoJHRoaXMtPmNvb2tpZXNbJGldKTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBJZiB0aGUgdmFsdWUgaGFzIGNoYW5nZWQsIHdlIGJldHRlciBjaGFuZ2UgaXQKICAgICAgICAgICAgaWYgKCRjb29raWUtPmdldFZhbHVlKCkgIT09ICRjLT5nZXRWYWx1ZSgpKSB7CiAgICAgICAgICAgICAgICB1bnNldCgkdGhpcy0+Y29va2llc1skaV0pOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIFRoZSBjb29raWUgZXhpc3RzLCBzbyBubyBuZWVkIHRvIGNvbnRpbnVlCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5jb29raWVzW10gPSAkY29va2llOwoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY291bnQoKQogICAgewogICAgICAgIHJldHVybiBjb3VudCgkdGhpcy0+Y29va2llcyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEl0ZXJhdG9yKCkKICAgIHsKICAgICAgICByZXR1cm4gbmV3IFxBcnJheUl0ZXJhdG9yKGFycmF5X3ZhbHVlcygkdGhpcy0+Y29va2llcykpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBleHRyYWN0Q29va2llcygKICAgICAgICBSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0LAogICAgICAgIFJlc3BvbnNlSW50ZXJmYWNlICRyZXNwb25zZQogICAgKSB7CiAgICAgICAgaWYgKCRjb29raWVIZWFkZXIgPSAkcmVzcG9uc2UtPmdldEhlYWRlcignU2V0LUNvb2tpZScpKSB7CiAgICAgICAgICAgIGZvcmVhY2ggKCRjb29raWVIZWFkZXIgYXMgJGNvb2tpZSkgewogICAgICAgICAgICAgICAgJHNjID0gU2V0Q29va2llOjpmcm9tU3RyaW5nKCRjb29raWUpOwogICAgICAgICAgICAgICAgaWYgKCEkc2MtPmdldERvbWFpbigpKSB7CiAgICAgICAgICAgICAgICAgICAgJHNjLT5zZXREb21haW4oJHJlcXVlc3QtPmdldFVyaSgpLT5nZXRIb3N0KCkpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKDAgIT09IHN0cnBvcygkc2MtPmdldFBhdGgoKSwgJy8nKSkgewogICAgICAgICAgICAgICAgICAgICRzYy0+c2V0UGF0aCgkdGhpcy0+Z2V0Q29va2llUGF0aEZyb21SZXF1ZXN0KCRyZXF1ZXN0KSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0Q29va2llKCRzYyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBDb21wdXRlcyBjb29raWUgcGF0aCBmb2xsb3dpbmcgUkZDIDYyNjUgc2VjdGlvbiA1LjEuNAogICAgICoKICAgICAqIEBsaW5rIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2MjY1I3NlY3Rpb24tNS4xLjQKICAgICAqCiAgICAgKiBAcGFyYW0gUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdAogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRDb29raWVQYXRoRnJvbVJlcXVlc3QoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCkKICAgIHsKICAgICAgICAkdXJpUGF0aCA9ICRyZXF1ZXN0LT5nZXRVcmkoKS0+Z2V0UGF0aCgpOwogICAgICAgIGlmICgnJyAgPT09ICR1cmlQYXRoKSB7CiAgICAgICAgICAgIHJldHVybiAnLyc7CiAgICAgICAgfQogICAgICAgIGlmICgwICE9PSBzdHJwb3MoJHVyaVBhdGgsICcvJykpIHsKICAgICAgICAgICAgcmV0dXJuICcvJzsKICAgICAgICB9CiAgICAgICAgaWYgKCcvJyA9PT0gJHVyaVBhdGgpIHsKICAgICAgICAgICAgcmV0dXJuICcvJzsKICAgICAgICB9CiAgICAgICAgaWYgKDAgPT09ICRsYXN0U2xhc2hQb3MgPSBzdHJycG9zKCR1cmlQYXRoLCAnLycpKSB7CiAgICAgICAgICAgIHJldHVybiAnLyc7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gc3Vic3RyKCR1cmlQYXRoLCAwLCAkbGFzdFNsYXNoUG9zKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aENvb2tpZUhlYWRlcihSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0KQogICAgewogICAgICAgICR2YWx1ZXMgPSBbXTsKICAgICAgICAkdXJpID0gJHJlcXVlc3QtPmdldFVyaSgpOwogICAgICAgICRzY2hlbWUgPSAkdXJpLT5nZXRTY2hlbWUoKTsKICAgICAgICAkaG9zdCA9ICR1cmktPmdldEhvc3QoKTsKICAgICAgICAkcGF0aCA9ICR1cmktPmdldFBhdGgoKSA/OiAnLyc7CgogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5jb29raWVzIGFzICRjb29raWUpIHsKICAgICAgICAgICAgaWYgKCRjb29raWUtPm1hdGNoZXNQYXRoKCRwYXRoKSAmJgogICAgICAgICAgICAgICAgJGNvb2tpZS0+bWF0Y2hlc0RvbWFpbigkaG9zdCkgJiYKICAgICAgICAgICAgICAgICEkY29va2llLT5pc0V4cGlyZWQoKSAmJgogICAgICAgICAgICAgICAgKCEkY29va2llLT5nZXRTZWN1cmUoKSB8fCAkc2NoZW1lID09PSAnaHR0cHMnKQogICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICR2YWx1ZXNbXSA9ICRjb29raWUtPmdldE5hbWUoKSAuICc9JwogICAgICAgICAgICAgICAgICAgIC4gJGNvb2tpZS0+Z2V0VmFsdWUoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR2YWx1ZXMKICAgICAgICAgICAgPyAkcmVxdWVzdC0+d2l0aEhlYWRlcignQ29va2llJywgaW1wbG9kZSgnOyAnLCAkdmFsdWVzKSkKICAgICAgICAgICAgOiAkcmVxdWVzdDsKICAgIH0KCiAgICAvKioKICAgICAqIElmIGEgY29va2llIGFscmVhZHkgZXhpc3RzIGFuZCB0aGUgc2VydmVyIGFza3MgdG8gc2V0IGl0IGFnYWluIHdpdGggYQogICAgICogbnVsbCB2YWx1ZSwgdGhlIGNvb2tpZSBtdXN0IGJlIGRlbGV0ZWQuCiAgICAgKgogICAgICogQHBhcmFtIFNldENvb2tpZSAkY29va2llCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gcmVtb3ZlQ29va2llSWZFbXB0eShTZXRDb29raWUgJGNvb2tpZSkKICAgIHsKICAgICAgICAkY29va2llVmFsdWUgPSAkY29va2llLT5nZXRWYWx1ZSgpOwogICAgICAgIGlmICgkY29va2llVmFsdWUgPT09IG51bGwgfHwgJGNvb2tpZVZhbHVlID09PSAnJykgewogICAgICAgICAgICAkdGhpcy0+Y2xlYXIoCiAgICAgICAgICAgICAgICAkY29va2llLT5nZXREb21haW4oKSwKICAgICAgICAgICAgICAgICRjb29raWUtPmdldFBhdGgoKSwKICAgICAgICAgICAgICAgICRjb29raWUtPmdldE5hbWUoKQogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KfQo=AppDevTools/query/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcQ29va2llOwoKdXNlIFBzclxIdHRwXE1lc3NhZ2VcUmVxdWVzdEludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcUmVzcG9uc2VJbnRlcmZhY2U7CgovKioKICogU3RvcmVzIEhUVFAgY29va2llcy4KICoKICogSXQgZXh0cmFjdHMgY29va2llcyBmcm9tIEhUVFAgcmVxdWVzdHMsIGFuZCByZXR1cm5zIHRoZW0gaW4gSFRUUCByZXNwb25zZXMuCiAqIENvb2tpZUphckludGVyZmFjZSBpbnN0YW5jZXMgYXV0b21hdGljYWxseSBleHBpcmUgY29udGFpbmVkIGNvb2tpZXMgd2hlbgogKiBuZWNlc3NhcnkuIFN1YmNsYXNzZXMgYXJlIGFsc28gcmVzcG9uc2libGUgZm9yIHN0b3JpbmcgYW5kIHJldHJpZXZpbmcKICogY29va2llcyBmcm9tIGEgZmlsZSwgZGF0YWJhc2UsIGV0Yy4KICoKICogQGxpbmsgaHR0cDovL2RvY3MucHl0aG9uLm9yZy8yL2xpYnJhcnkvY29va2llbGliLmh0bWwgSW5zcGlyYXRpb24KICovCmludGVyZmFjZSBDb29raWVKYXJJbnRlcmZhY2UgZXh0ZW5kcyBcQ291bnRhYmxlLCBcSXRlcmF0b3JBZ2dyZWdhdGUKewogICAgLyoqCiAgICAgKiBDcmVhdGUgYSByZXF1ZXN0IHdpdGggYWRkZWQgY29va2llIGhlYWRlcnMuCiAgICAgKgogICAgICogSWYgbm8gbWF0Y2hpbmcgY29va2llcyBhcmUgZm91bmQgaW4gdGhlIGNvb2tpZSBqYXIsIHRoZW4gbm8gQ29va2llCiAgICAgKiBoZWFkZXIgaXMgYWRkZWQgdG8gdGhlIHJlcXVlc3QgYW5kIHRoZSBzYW1lIHJlcXVlc3QgaXMgcmV0dXJuZWQuCiAgICAgKgogICAgICogQHBhcmFtIFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QgUmVxdWVzdCBvYmplY3QgdG8gbW9kaWZ5LgogICAgICoKICAgICAqIEByZXR1cm4gUmVxdWVzdEludGVyZmFjZSByZXR1cm5zIHRoZSBtb2RpZmllZCByZXF1ZXN0LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aENvb2tpZUhlYWRlcihSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0KTsKCiAgICAvKioKICAgICAqIEV4dHJhY3QgY29va2llcyBmcm9tIGFuIEhUVFAgcmVzcG9uc2UgYW5kIHN0b3JlIHRoZW0gaW4gdGhlIENvb2tpZUphci4KICAgICAqCiAgICAgKiBAcGFyYW0gUmVxdWVzdEludGVyZmFjZSAgJHJlcXVlc3QgIFJlcXVlc3QgdGhhdCB3YXMgc2VudAogICAgICogQHBhcmFtIFJlc3BvbnNlSW50ZXJmYWNlICRyZXNwb25zZSBSZXNwb25zZSB0aGF0IHdhcyByZWNlaXZlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZXh0cmFjdENvb2tpZXMoCiAgICAgICAgUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwKICAgICAgICBSZXNwb25zZUludGVyZmFjZSAkcmVzcG9uc2UKICAgICk7CgogICAgLyoqCiAgICAgKiBTZXRzIGEgY29va2llIGluIHRoZSBjb29raWUgamFyLgogICAgICoKICAgICAqIEBwYXJhbSBTZXRDb29raWUgJGNvb2tpZSBDb29raWUgdG8gc2V0LgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCBSZXR1cm5zIHRydWUgb24gc3VjY2VzcyBvciBmYWxzZSBvbiBmYWlsdXJlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRDb29raWUoU2V0Q29va2llICRjb29raWUpOwoKICAgIC8qKgogICAgICogUmVtb3ZlIGNvb2tpZXMgY3VycmVudGx5IGhlbGQgaW4gdGhlIGNvb2tpZSBqYXIuCiAgICAgKgogICAgICogSW52b2tpbmcgdGhpcyBtZXRob2Qgd2l0aG91dCBhcmd1bWVudHMgd2lsbCBlbXB0eSB0aGUgd2hvbGUgY29va2llIGphci4KICAgICAqIElmIGdpdmVuIGEgJGRvbWFpbiBhcmd1bWVudCBvbmx5IGNvb2tpZXMgYmVsb25naW5nIHRvIHRoYXQgZG9tYWluIHdpbGwKICAgICAqIGJlIHJlbW92ZWQuIElmIGdpdmVuIGEgJGRvbWFpbiBhbmQgJHBhdGggYXJndW1lbnQsIGNvb2tpZXMgYmVsb25naW5nIHRvCiAgICAgKiB0aGUgc3BlY2lmaWVkIHBhdGggd2l0aGluIHRoYXQgZG9tYWluIGFyZSByZW1vdmVkLiBJZiBnaXZlbiBhbGwgdGhyZWUKICAgICAqIGFyZ3VtZW50cywgdGhlbiB0aGUgY29va2llIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lLCBwYXRoIGFuZCBkb21haW4gaXMKICAgICAqIHJlbW92ZWQuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZG9tYWluIENsZWFycyBjb29raWVzIG1hdGNoaW5nIGEgZG9tYWluCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXRoICAgQ2xlYXJzIGNvb2tpZXMgbWF0Y2hpbmcgYSBkb21haW4gYW5kIHBhdGgKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgICBDbGVhcnMgY29va2llcyBtYXRjaGluZyBhIGRvbWFpbiwgcGF0aCwgYW5kIG5hbWUKICAgICAqCiAgICAgKiBAcmV0dXJuIENvb2tpZUphckludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xlYXIoJGRvbWFpbiA9IG51bGwsICRwYXRoID0gbnVsbCwgJG5hbWUgPSBudWxsKTsKCiAgICAvKioKICAgICAqIERpc2NhcmQgYWxsIHNlc3Npb25zIGNvb2tpZXMuCiAgICAgKgogICAgICogUmVtb3ZlcyBjb29raWVzIHRoYXQgZG9uJ3QgaGF2ZSBhbiBleHBpcmUgZmllbGQgb3IgYSBoYXZlIGEgZGlzY2FyZAogICAgICogZmllbGQgc2V0IHRvIHRydWUuIFRvIGJlIGNhbGxlZCB3aGVuIHRoZSB1c2VyIGFnZW50IHNodXRzIGRvd24gYWNjb3JkaW5nCiAgICAgKiB0byBSRkMgMjk2NS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNsZWFyU2Vzc2lvbkNvb2tpZXMoKTsKCiAgICAvKioKICAgICAqIENvbnZlcnRzIHRoZSBjb29raWUgamFyIHRvIGFuIGFycmF5LgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvQXJyYXkoKTsKfQo=AppDevTools/query/vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcQ29va2llOwoKLyoqCiAqIFBlcnNpc3RzIG5vbi1zZXNzaW9uIGNvb2tpZXMgdXNpbmcgYSBKU09OIGZvcm1hdHRlZCBmaWxlCiAqLwpjbGFzcyBGaWxlQ29va2llSmFyIGV4dGVuZHMgQ29va2llSmFyCnsKICAgIC8qKiBAdmFyIHN0cmluZyBmaWxlbmFtZSAqLwogICAgcHJpdmF0ZSAkZmlsZW5hbWU7CgogICAgLyoqIEB2YXIgYm9vbCBDb250cm9sIHdoZXRoZXIgdG8gcGVyc2lzdCBzZXNzaW9uIGNvb2tpZXMgb3Igbm90LiAqLwogICAgcHJpdmF0ZSAkc3RvcmVTZXNzaW9uQ29va2llczsKCiAgICAvKioKICAgICAqIENyZWF0ZSBhIG5ldyBGaWxlQ29va2llSmFyIG9iamVjdAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNvb2tpZUZpbGUgICAgICAgIEZpbGUgdG8gc3RvcmUgdGhlIGNvb2tpZSBkYXRhCiAgICAgKiBAcGFyYW0gYm9vbCAkc3RvcmVTZXNzaW9uQ29va2llcyBTZXQgdG8gdHJ1ZSB0byBzdG9yZSBzZXNzaW9uIGNvb2tpZXMKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBjb29raWUgamFyLgogICAgICoKICAgICAqIEB0aHJvd3MgXFJ1bnRpbWVFeGNlcHRpb24gaWYgdGhlIGZpbGUgY2Fubm90IGJlIGZvdW5kIG9yIGNyZWF0ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRjb29raWVGaWxlLCAkc3RvcmVTZXNzaW9uQ29va2llcyA9IGZhbHNlKQogICAgewogICAgICAgICR0aGlzLT5maWxlbmFtZSA9ICRjb29raWVGaWxlOwogICAgICAgICR0aGlzLT5zdG9yZVNlc3Npb25Db29raWVzID0gJHN0b3JlU2Vzc2lvbkNvb2tpZXM7CgogICAgICAgIGlmIChmaWxlX2V4aXN0cygkY29va2llRmlsZSkpIHsKICAgICAgICAgICAgJHRoaXMtPmxvYWQoJGNvb2tpZUZpbGUpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFNhdmVzIHRoZSBmaWxlIHdoZW4gc2h1dHRpbmcgZG93bgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19kZXN0cnVjdCgpCiAgICB7CiAgICAgICAgJHRoaXMtPnNhdmUoJHRoaXMtPmZpbGVuYW1lKTsKICAgIH0KCiAgICAvKioKICAgICAqIFNhdmVzIHRoZSBjb29raWVzIHRvIGEgZmlsZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRmaWxlbmFtZSBGaWxlIHRvIHNhdmUKICAgICAqIEB0aHJvd3MgXFJ1bnRpbWVFeGNlcHRpb24gaWYgdGhlIGZpbGUgY2Fubm90IGJlIGZvdW5kIG9yIGNyZWF0ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNhdmUoJGZpbGVuYW1lKQogICAgewogICAgICAgICRqc29uID0gW107CiAgICAgICAgZm9yZWFjaCAoJHRoaXMgYXMgJGNvb2tpZSkgewogICAgICAgICAgICAvKiogQHZhciBTZXRDb29raWUgJGNvb2tpZSAqLwogICAgICAgICAgICBpZiAoQ29va2llSmFyOjpzaG91bGRQZXJzaXN0KCRjb29raWUsICR0aGlzLT5zdG9yZVNlc3Npb25Db29raWVzKSkgewogICAgICAgICAgICAgICAgJGpzb25bXSA9ICRjb29raWUtPnRvQXJyYXkoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJGpzb25TdHIgPSBcR3V6emxlSHR0cFxqc29uX2VuY29kZSgkanNvbik7CiAgICAgICAgaWYgKGZhbHNlID09PSBmaWxlX3B1dF9jb250ZW50cygkZmlsZW5hbWUsICRqc29uU3RyKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oIlVuYWJsZSB0byBzYXZlIGZpbGUgeyRmaWxlbmFtZX0iKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBMb2FkIGNvb2tpZXMgZnJvbSBhIEpTT04gZm9ybWF0dGVkIGZpbGUuCiAgICAgKgogICAgICogT2xkIGNvb2tpZXMgYXJlIGtlcHQgdW5sZXNzIG92ZXJ3cml0dGVuIGJ5IG5ld2x5IGxvYWRlZCBvbmVzLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIENvb2tpZSBmaWxlIHRvIGxvYWQuCiAgICAgKiBAdGhyb3dzIFxSdW50aW1lRXhjZXB0aW9uIGlmIHRoZSBmaWxlIGNhbm5vdCBiZSBsb2FkZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsb2FkKCRmaWxlbmFtZSkKICAgIHsKICAgICAgICAkanNvbiA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlbmFtZSk7CiAgICAgICAgaWYgKGZhbHNlID09PSAkanNvbikgewogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oIlVuYWJsZSB0byBsb2FkIGZpbGUgeyRmaWxlbmFtZX0iKTsKICAgICAgICB9IGVsc2VpZiAoJGpzb24gPT09ICcnKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICRkYXRhID0gXEd1enpsZUh0dHBcanNvbl9kZWNvZGUoJGpzb24sIHRydWUpOwogICAgICAgIGlmIChpc19hcnJheSgkZGF0YSkpIHsKICAgICAgICAgICAgZm9yZWFjaCAoanNvbl9kZWNvZGUoJGpzb24sIHRydWUpIGFzICRjb29raWUpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5zZXRDb29raWUobmV3IFNldENvb2tpZSgkY29va2llKSk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2VpZiAoc3RybGVuKCRkYXRhKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oIkludmFsaWQgY29va2llIGZpbGU6IHskZmlsZW5hbWV9Iik7CiAgICAgICAgfQogICAgfQp9Cg==AppDevTools/query/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcQ29va2llOwoKLyoqCiAqIFBlcnNpc3RzIGNvb2tpZXMgaW4gdGhlIGNsaWVudCBzZXNzaW9uCiAqLwpjbGFzcyBTZXNzaW9uQ29va2llSmFyIGV4dGVuZHMgQ29va2llSmFyCnsKICAgIC8qKiBAdmFyIHN0cmluZyBzZXNzaW9uIGtleSAqLwogICAgcHJpdmF0ZSAkc2Vzc2lvbktleTsKICAgIAogICAgLyoqIEB2YXIgYm9vbCBDb250cm9sIHdoZXRoZXIgdG8gcGVyc2lzdCBzZXNzaW9uIGNvb2tpZXMgb3Igbm90LiAqLwogICAgcHJpdmF0ZSAkc3RvcmVTZXNzaW9uQ29va2llczsKCiAgICAvKioKICAgICAqIENyZWF0ZSBhIG5ldyBTZXNzaW9uQ29va2llSmFyIG9iamVjdAogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHNlc3Npb25LZXkgICAgICAgIFNlc3Npb24ga2V5IG5hbWUgdG8gc3RvcmUgdGhlIGNvb2tpZQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSBpbiBzZXNzaW9uCiAgICAgKiBAcGFyYW0gYm9vbCAkc3RvcmVTZXNzaW9uQ29va2llcyBTZXQgdG8gdHJ1ZSB0byBzdG9yZSBzZXNzaW9uIGNvb2tpZXMKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBjb29raWUgamFyLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHNlc3Npb25LZXksICRzdG9yZVNlc3Npb25Db29raWVzID0gZmFsc2UpCiAgICB7CiAgICAgICAgJHRoaXMtPnNlc3Npb25LZXkgPSAkc2Vzc2lvbktleTsKICAgICAgICAkdGhpcy0+c3RvcmVTZXNzaW9uQ29va2llcyA9ICRzdG9yZVNlc3Npb25Db29raWVzOwogICAgICAgICR0aGlzLT5sb2FkKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBTYXZlcyBjb29raWVzIHRvIHNlc3Npb24gd2hlbiBzaHV0dGluZyBkb3duCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2Rlc3RydWN0KCkKICAgIHsKICAgICAgICAkdGhpcy0+c2F2ZSgpOwogICAgfQoKICAgIC8qKgogICAgICogU2F2ZSBjb29raWVzIHRvIHRoZSBjbGllbnQgc2Vzc2lvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2F2ZSgpCiAgICB7CiAgICAgICAgJGpzb24gPSBbXTsKICAgICAgICBmb3JlYWNoICgkdGhpcyBhcyAkY29va2llKSB7CiAgICAgICAgICAgIC8qKiBAdmFyIFNldENvb2tpZSAkY29va2llICovCiAgICAgICAgICAgIGlmIChDb29raWVKYXI6OnNob3VsZFBlcnNpc3QoJGNvb2tpZSwgJHRoaXMtPnN0b3JlU2Vzc2lvbkNvb2tpZXMpKSB7CiAgICAgICAgICAgICAgICAkanNvbltdID0gJGNvb2tpZS0+dG9BcnJheSgpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkX1NFU1NJT05bJHRoaXMtPnNlc3Npb25LZXldID0ganNvbl9lbmNvZGUoJGpzb24pOwogICAgfQoKICAgIC8qKgogICAgICogTG9hZCB0aGUgY29udGVudHMgb2YgdGhlIGNsaWVudCBzZXNzaW9uIGludG8gdGhlIGRhdGEgYXJyYXkKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGxvYWQoKQogICAgewogICAgICAgIGlmICghaXNzZXQoJF9TRVNTSU9OWyR0aGlzLT5zZXNzaW9uS2V5XSkpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICAkZGF0YSA9IGpzb25fZGVjb2RlKCRfU0VTU0lPTlskdGhpcy0+c2Vzc2lvbktleV0sIHRydWUpOwogICAgICAgIGlmIChpc19hcnJheSgkZGF0YSkpIHsKICAgICAgICAgICAgZm9yZWFjaCAoJGRhdGEgYXMgJGNvb2tpZSkgewogICAgICAgICAgICAgICAgJHRoaXMtPnNldENvb2tpZShuZXcgU2V0Q29va2llKCRjb29raWUpKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZWlmIChzdHJsZW4oJGRhdGEpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigiSW52YWxpZCBjb29raWUgZGF0YSIpOwogICAgICAgIH0KICAgIH0KfQo=AppDevTools/query/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcQ29va2llOwoKLyoqCiAqIFNldC1Db29raWUgb2JqZWN0CiAqLwpjbGFzcyBTZXRDb29raWUKewogICAgLyoqIEB2YXIgYXJyYXkgKi8KICAgIHByaXZhdGUgc3RhdGljICRkZWZhdWx0cyA9IFsKICAgICAgICAnTmFtZScgICAgID0+IG51bGwsCiAgICAgICAgJ1ZhbHVlJyAgICA9PiBudWxsLAogICAgICAgICdEb21haW4nICAgPT4gbnVsbCwKICAgICAgICAnUGF0aCcgICAgID0+ICcvJywKICAgICAgICAnTWF4LUFnZScgID0+IG51bGwsCiAgICAgICAgJ0V4cGlyZXMnICA9PiBudWxsLAogICAgICAgICdTZWN1cmUnICAgPT4gZmFsc2UsCiAgICAgICAgJ0Rpc2NhcmQnICA9PiBmYWxzZSwKICAgICAgICAnSHR0cE9ubHknID0+IGZhbHNlCiAgICBdOwoKICAgIC8qKiBAdmFyIGFycmF5IENvb2tpZSBkYXRhICovCiAgICBwcml2YXRlICRkYXRhOwoKICAgIC8qKgogICAgICogQ3JlYXRlIGEgbmV3IFNldENvb2tpZSBvYmplY3QgZnJvbSBhIHN0cmluZwogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNvb2tpZSBTZXQtQ29va2llIGhlYWRlciBzdHJpbmcKICAgICAqCiAgICAgKiBAcmV0dXJuIHNlbGYKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcm9tU3RyaW5nKCRjb29raWUpCiAgICB7CiAgICAgICAgLy8gQ3JlYXRlIHRoZSBkZWZhdWx0IHJldHVybiBhcnJheQogICAgICAgICRkYXRhID0gc2VsZjo6JGRlZmF1bHRzOwogICAgICAgIC8vIEV4cGxvZGUgdGhlIGNvb2tpZSBzdHJpbmcgdXNpbmcgYSBzZXJpZXMgb2Ygc2VtaWNvbG9ucwogICAgICAgICRwaWVjZXMgPSBhcnJheV9maWx0ZXIoYXJyYXlfbWFwKCd0cmltJywgZXhwbG9kZSgnOycsICRjb29raWUpKSk7CiAgICAgICAgLy8gVGhlIG5hbWUgb2YgdGhlIGNvb2tpZSAoZmlyc3Qga3ZwKSBtdXN0IGV4aXN0IGFuZCBpbmNsdWRlIGFuIGVxdWFsIHNpZ24uCiAgICAgICAgaWYgKGVtcHR5KCRwaWVjZXNbMF0pIHx8ICFzdHJwb3MoJHBpZWNlc1swXSwgJz0nKSkgewogICAgICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGRhdGEpOwogICAgICAgIH0KCiAgICAgICAgLy8gQWRkIHRoZSBjb29raWUgcGllY2VzIGludG8gdGhlIHBhcnNlZCBkYXRhIGFycmF5CiAgICAgICAgZm9yZWFjaCAoJHBpZWNlcyBhcyAkcGFydCkgewogICAgICAgICAgICAkY29va2llUGFydHMgPSBleHBsb2RlKCc9JywgJHBhcnQsIDIpOwogICAgICAgICAgICAka2V5ID0gdHJpbSgkY29va2llUGFydHNbMF0pOwogICAgICAgICAgICAkdmFsdWUgPSBpc3NldCgkY29va2llUGFydHNbMV0pCiAgICAgICAgICAgICAgICA/IHRyaW0oJGNvb2tpZVBhcnRzWzFdLCAiIFxuXHJcdFwwXHgwQiIpCiAgICAgICAgICAgICAgICA6IHRydWU7CgogICAgICAgICAgICAvLyBPbmx5IGNoZWNrIGZvciBub24tY29va2llcyB3aGVuIGNvb2tpZXMgaGF2ZSBiZWVuIGZvdW5kCiAgICAgICAgICAgIGlmIChlbXB0eSgkZGF0YVsnTmFtZSddKSkgewogICAgICAgICAgICAgICAgJGRhdGFbJ05hbWUnXSA9ICRrZXk7CiAgICAgICAgICAgICAgICAkZGF0YVsnVmFsdWUnXSA9ICR2YWx1ZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGZvcmVhY2ggKGFycmF5X2tleXMoc2VsZjo6JGRlZmF1bHRzKSBhcyAkc2VhcmNoKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFzdHJjYXNlY21wKCRzZWFyY2gsICRrZXkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRkYXRhWyRzZWFyY2hdID0gJHZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSAyOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRkYXRhWyRrZXldID0gJHZhbHVlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IHNlbGYoJGRhdGEpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIGFycmF5ICRkYXRhIEFycmF5IG9mIGNvb2tpZSBkYXRhIHByb3ZpZGVkIGJ5IGEgQ29va2llIHBhcnNlcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoYXJyYXkgJGRhdGEgPSBbXSkKICAgIHsKICAgICAgICAkdGhpcy0+ZGF0YSA9IGFycmF5X3JlcGxhY2Uoc2VsZjo6JGRlZmF1bHRzLCAkZGF0YSk7CiAgICAgICAgLy8gRXh0cmFjdCB0aGUgRXhwaXJlcyB2YWx1ZSBhbmQgdHVybiBpdCBpbnRvIGEgVU5JWCB0aW1lc3RhbXAgaWYgbmVlZGVkCiAgICAgICAgaWYgKCEkdGhpcy0+Z2V0RXhwaXJlcygpICYmICR0aGlzLT5nZXRNYXhBZ2UoKSkgewogICAgICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIEV4cGlyZXMgZGF0ZQogICAgICAgICAgICAkdGhpcy0+c2V0RXhwaXJlcyh0aW1lKCkgKyAkdGhpcy0+Z2V0TWF4QWdlKCkpOwogICAgICAgIH0gZWxzZWlmICgkdGhpcy0+Z2V0RXhwaXJlcygpICYmICFpc19udW1lcmljKCR0aGlzLT5nZXRFeHBpcmVzKCkpKSB7CiAgICAgICAgICAgICR0aGlzLT5zZXRFeHBpcmVzKCR0aGlzLT5nZXRFeHBpcmVzKCkpOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpCiAgICB7CiAgICAgICAgJHN0ciA9ICR0aGlzLT5kYXRhWydOYW1lJ10gLiAnPScgLiAkdGhpcy0+ZGF0YVsnVmFsdWUnXSAuICc7ICc7CiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmRhdGEgYXMgJGsgPT4gJHYpIHsKICAgICAgICAgICAgaWYgKCRrICE9PSAnTmFtZScgJiYgJGsgIT09ICdWYWx1ZScgJiYgJHYgIT09IG51bGwgJiYgJHYgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICBpZiAoJGsgPT09ICdFeHBpcmVzJykgewogICAgICAgICAgICAgICAgICAgICRzdHIgLj0gJ0V4cGlyZXM9JyAuIGdtZGF0ZSgnRCwgZCBNIFkgSDppOnMgXEdcTVxUJywgJHYpIC4gJzsgJzsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJHN0ciAuPSAoJHYgPT09IHRydWUgPyAkayA6ICJ7JGt9PXskdn0iKSAuICc7ICc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBydHJpbSgkc3RyLCAnOyAnKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9BcnJheSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5kYXRhOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBjb29raWUgbmFtZQogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROYW1lKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmRhdGFbJ05hbWUnXTsKICAgIH0KCiAgICAvKioKICAgICAqIFNldCB0aGUgY29va2llIG5hbWUKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIENvb2tpZSBuYW1lCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXROYW1lKCRuYW1lKQogICAgewogICAgICAgICR0aGlzLT5kYXRhWydOYW1lJ10gPSAkbmFtZTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgY29va2llIHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFZhbHVlKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmRhdGFbJ1ZhbHVlJ107CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIGNvb2tpZSB2YWx1ZQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlIENvb2tpZSB2YWx1ZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0VmFsdWUoJHZhbHVlKQogICAgewogICAgICAgICR0aGlzLT5kYXRhWydWYWx1ZSddID0gJHZhbHVlOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBkb21haW4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXREb21haW4oKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZGF0YVsnRG9tYWluJ107CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIGRvbWFpbiBvZiB0aGUgY29va2llCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkZG9tYWluCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXREb21haW4oJGRvbWFpbikKICAgIHsKICAgICAgICAkdGhpcy0+ZGF0YVsnRG9tYWluJ10gPSAkZG9tYWluOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBwYXRoCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFBhdGgoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZGF0YVsnUGF0aCddOwogICAgfQoKICAgIC8qKgogICAgICogU2V0IHRoZSBwYXRoIG9mIHRoZSBjb29raWUKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXRoIFBhdGggb2YgdGhlIGNvb2tpZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0UGF0aCgkcGF0aCkKICAgIHsKICAgICAgICAkdGhpcy0+ZGF0YVsnUGF0aCddID0gJHBhdGg7CiAgICB9CgogICAgLyoqCiAgICAgKiBNYXhpbXVtIGxpZmV0aW1lIG9mIHRoZSBjb29raWUgaW4gc2Vjb25kcwogICAgICoKICAgICAqIEByZXR1cm4gaW50fG51bGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldE1heEFnZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5kYXRhWydNYXgtQWdlJ107CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIG1heC1hZ2Ugb2YgdGhlIGNvb2tpZQogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJG1heEFnZSBNYXggYWdlIG9mIHRoZSBjb29raWUgaW4gc2Vjb25kcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0TWF4QWdlKCRtYXhBZ2UpCiAgICB7CiAgICAgICAgJHRoaXMtPmRhdGFbJ01heC1BZ2UnXSA9ICRtYXhBZ2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBUaGUgVU5JWCB0aW1lc3RhbXAgd2hlbiB0aGUgY29va2llIEV4cGlyZXMKICAgICAqCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRFeHBpcmVzKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmRhdGFbJ0V4cGlyZXMnXTsKICAgIH0KCiAgICAvKioKICAgICAqIFNldCB0aGUgdW5peCB0aW1lc3RhbXAgZm9yIHdoaWNoIHRoZSBjb29raWUgd2lsbCBleHBpcmUKICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICR0aW1lc3RhbXAgVW5peCB0aW1lc3RhbXAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEV4cGlyZXMoJHRpbWVzdGFtcCkKICAgIHsKICAgICAgICAkdGhpcy0+ZGF0YVsnRXhwaXJlcyddID0gaXNfbnVtZXJpYygkdGltZXN0YW1wKQogICAgICAgICAgICA/IChpbnQpICR0aW1lc3RhbXAKICAgICAgICAgICAgOiBzdHJ0b3RpbWUoJHRpbWVzdGFtcCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgd2hldGhlciBvciBub3QgdGhpcyBpcyBhIHNlY3VyZSBjb29raWUKICAgICAqCiAgICAgKiBAcmV0dXJuIG51bGx8Ym9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2VjdXJlKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmRhdGFbJ1NlY3VyZSddOwogICAgfQoKICAgIC8qKgogICAgICogU2V0IHdoZXRoZXIgb3Igbm90IHRoZSBjb29raWUgaXMgc2VjdXJlCiAgICAgKgogICAgICogQHBhcmFtIGJvb2wgJHNlY3VyZSBTZXQgdG8gdHJ1ZSBvciBmYWxzZSBpZiBzZWN1cmUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFNlY3VyZSgkc2VjdXJlKQogICAgewogICAgICAgICR0aGlzLT5kYXRhWydTZWN1cmUnXSA9ICRzZWN1cmU7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgd2hldGhlciBvciBub3QgdGhpcyBpcyBhIHNlc3Npb24gY29va2llCiAgICAgKgogICAgICogQHJldHVybiBudWxsfGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldERpc2NhcmQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZGF0YVsnRGlzY2FyZCddOwogICAgfQoKICAgIC8qKgogICAgICogU2V0IHdoZXRoZXIgb3Igbm90IHRoaXMgaXMgYSBzZXNzaW9uIGNvb2tpZQogICAgICoKICAgICAqIEBwYXJhbSBib29sICRkaXNjYXJkIFNldCB0byB0cnVlIG9yIGZhbHNlIGlmIHRoaXMgaXMgYSBzZXNzaW9uIGNvb2tpZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0RGlzY2FyZCgkZGlzY2FyZCkKICAgIHsKICAgICAgICAkdGhpcy0+ZGF0YVsnRGlzY2FyZCddID0gJGRpc2NhcmQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgd2hldGhlciBvciBub3QgdGhpcyBpcyBhbiBIVFRQIG9ubHkgY29va2llCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRIdHRwT25seSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5kYXRhWydIdHRwT25seSddOwogICAgfQoKICAgIC8qKgogICAgICogU2V0IHdoZXRoZXIgb3Igbm90IHRoaXMgaXMgYW4gSFRUUCBvbmx5IGNvb2tpZQogICAgICoKICAgICAqIEBwYXJhbSBib29sICRodHRwT25seSBTZXQgdG8gdHJ1ZSBvciBmYWxzZSBpZiB0aGlzIGlzIEhUVFAgb25seQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0SHR0cE9ubHkoJGh0dHBPbmx5KQogICAgewogICAgICAgICR0aGlzLT5kYXRhWydIdHRwT25seSddID0gJGh0dHBPbmx5OwogICAgfQoKICAgIC8qKgogICAgICogQ2hlY2sgaWYgdGhlIGNvb2tpZSBtYXRjaGVzIGEgcGF0aCB2YWx1ZS4KICAgICAqCiAgICAgKiBBIHJlcXVlc3QtcGF0aCBwYXRoLW1hdGNoZXMgYSBnaXZlbiBjb29raWUtcGF0aCBpZiBhdCBsZWFzdCBvbmUgb2YKICAgICAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBob2xkczoKICAgICAqCiAgICAgKiAtIFRoZSBjb29raWUtcGF0aCBhbmQgdGhlIHJlcXVlc3QtcGF0aCBhcmUgaWRlbnRpY2FsLgogICAgICogLSBUaGUgY29va2llLXBhdGggaXMgYSBwcmVmaXggb2YgdGhlIHJlcXVlc3QtcGF0aCwgYW5kIHRoZSBsYXN0CiAgICAgKiAgIGNoYXJhY3RlciBvZiB0aGUgY29va2llLXBhdGggaXMgJXgyRiAoIi8iKS4KICAgICAqIC0gVGhlIGNvb2tpZS1wYXRoIGlzIGEgcHJlZml4IG9mIHRoZSByZXF1ZXN0LXBhdGgsIGFuZCB0aGUgZmlyc3QKICAgICAqICAgY2hhcmFjdGVyIG9mIHRoZSByZXF1ZXN0LXBhdGggdGhhdCBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGNvb2tpZS0KICAgICAqICAgcGF0aCBpcyBhICV4MkYgKCIvIikgY2hhcmFjdGVyLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHJlcXVlc3RQYXRoIFBhdGggdG8gY2hlY2sgYWdhaW5zdAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbWF0Y2hlc1BhdGgoJHJlcXVlc3RQYXRoKQogICAgewogICAgICAgICRjb29raWVQYXRoID0gJHRoaXMtPmdldFBhdGgoKTsKCiAgICAgICAgLy8gTWF0Y2ggb24gZXhhY3QgbWF0Y2hlcyBvciB3aGVuIHBhdGggaXMgdGhlIGRlZmF1bHQgZW1wdHkgIi8iCiAgICAgICAgaWYgKCRjb29raWVQYXRoID09PSAnLycgfHwgJGNvb2tpZVBhdGggPT0gJHJlcXVlc3RQYXRoKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KCiAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGNvb2tpZS1wYXRoIGlzIGEgcHJlZml4IG9mIHRoZSByZXF1ZXN0IHBhdGguCiAgICAgICAgaWYgKDAgIT09IHN0cnBvcygkcmVxdWVzdFBhdGgsICRjb29raWVQYXRoKSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICAvLyBNYXRjaCBpZiB0aGUgbGFzdCBjaGFyYWN0ZXIgb2YgdGhlIGNvb2tpZS1wYXRoIGlzICIvIgogICAgICAgIGlmIChzdWJzdHIoJGNvb2tpZVBhdGgsIC0xLCAxKSA9PT0gJy8nKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KCiAgICAgICAgLy8gTWF0Y2ggaWYgdGhlIGZpcnN0IGNoYXJhY3RlciBub3QgaW5jbHVkZWQgaW4gY29va2llIHBhdGggaXMgIi8iCiAgICAgICAgcmV0dXJuIHN1YnN0cigkcmVxdWVzdFBhdGgsIHN0cmxlbigkY29va2llUGF0aCksIDEpID09PSAnLyc7CiAgICB9CgogICAgLyoqCiAgICAgKiBDaGVjayBpZiB0aGUgY29va2llIG1hdGNoZXMgYSBkb21haW4gdmFsdWUKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkb21haW4gRG9tYWluIHRvIGNoZWNrIGFnYWluc3QKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG1hdGNoZXNEb21haW4oJGRvbWFpbikKICAgIHsKICAgICAgICAvLyBSZW1vdmUgdGhlIGxlYWRpbmcgJy4nIGFzIHBlciBzcGVjIGluIFJGQyA2MjY1LgogICAgICAgIC8vIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzYyNjUjc2VjdGlvbi01LjIuMwogICAgICAgICRjb29raWVEb21haW4gPSBsdHJpbSgkdGhpcy0+Z2V0RG9tYWluKCksICcuJyk7CgogICAgICAgIC8vIERvbWFpbiBub3Qgc2V0IG9yIGV4YWN0IG1hdGNoLgogICAgICAgIGlmICghJGNvb2tpZURvbWFpbiB8fCAhc3RyY2FzZWNtcCgkZG9tYWluLCAkY29va2llRG9tYWluKSkgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIC8vIE1hdGNoaW5nIHRoZSBzdWJkb21haW4gYWNjb3JkaW5nIHRvIFJGQyA2MjY1LgogICAgICAgIC8vIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzYyNjUjc2VjdGlvbi01LjEuMwogICAgICAgIGlmIChmaWx0ZXJfdmFyKCRkb21haW4sIEZJTFRFUl9WQUxJREFURV9JUCkpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIChib29sKSBwcmVnX21hdGNoKCcvXC4nIC4gcHJlZ19xdW90ZSgkY29va2llRG9tYWluLCAnLycpIC4gJyQvJywgJGRvbWFpbik7CiAgICB9CgogICAgLyoqCiAgICAgKiBDaGVjayBpZiB0aGUgY29va2llIGlzIGV4cGlyZWQKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzRXhwaXJlZCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXRFeHBpcmVzKCkgIT09IG51bGwgJiYgdGltZSgpID4gJHRoaXMtPmdldEV4cGlyZXMoKTsKICAgIH0KCiAgICAvKioKICAgICAqIENoZWNrIGlmIHRoZSBjb29raWUgaXMgdmFsaWQgYWNjb3JkaW5nIHRvIFJGQyA2MjY1CiAgICAgKgogICAgICogQHJldHVybiBib29sfHN0cmluZyBSZXR1cm5zIHRydWUgaWYgdmFsaWQgb3IgYW4gZXJyb3IgbWVzc2FnZSBpZiBpbnZhbGlkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB2YWxpZGF0ZSgpCiAgICB7CiAgICAgICAgLy8gTmFtZXMgbXVzdCBub3QgYmUgZW1wdHksIGJ1dCBjYW4gYmUgMAogICAgICAgICRuYW1lID0gJHRoaXMtPmdldE5hbWUoKTsKICAgICAgICBpZiAoZW1wdHkoJG5hbWUpICYmICFpc19udW1lcmljKCRuYW1lKSkgewogICAgICAgICAgICByZXR1cm4gJ1RoZSBjb29raWUgbmFtZSBtdXN0IG5vdCBiZSBlbXB0eSc7CiAgICAgICAgfQoKICAgICAgICAvLyBDaGVjayBpZiBhbnkgb2YgdGhlIGludmFsaWQgY2hhcmFjdGVycyBhcmUgcHJlc2VudCBpbiB0aGUgY29va2llIG5hbWUKICAgICAgICBpZiAocHJlZ19tYXRjaCgKICAgICAgICAgICAgJy9bXHgwMC1ceDIwXHgyMlx4MjgtXHgyOVx4MmNceDJmXHgzYS1ceDQwXHg1Y1x4N2JceDdkXHg3Zl0vJywKICAgICAgICAgICAgJG5hbWUKICAgICAgICApKSB7CiAgICAgICAgICAgIHJldHVybiAnQ29va2llIG5hbWUgbXVzdCBub3QgY29udGFpbiBpbnZhbGlkIGNoYXJhY3RlcnM6IEFTQ0lJICcKICAgICAgICAgICAgICAgIC4gJ0NvbnRyb2wgY2hhcmFjdGVycyAoMC0zMTsxMjcpLCBzcGFjZSwgdGFiIGFuZCB0aGUgJwogICAgICAgICAgICAgICAgLiAnZm9sbG93aW5nIGNoYXJhY3RlcnM6ICgpPD5ALDs6XCIvPz17fSc7CiAgICAgICAgfQoKICAgICAgICAvLyBWYWx1ZSBtdXN0IG5vdCBiZSBlbXB0eSwgYnV0IGNhbiBiZSAwCiAgICAgICAgJHZhbHVlID0gJHRoaXMtPmdldFZhbHVlKCk7CiAgICAgICAgaWYgKGVtcHR5KCR2YWx1ZSkgJiYgIWlzX251bWVyaWMoJHZhbHVlKSkgewogICAgICAgICAgICByZXR1cm4gJ1RoZSBjb29raWUgdmFsdWUgbXVzdCBub3QgYmUgZW1wdHknOwogICAgICAgIH0KCiAgICAgICAgLy8gRG9tYWlucyBtdXN0IG5vdCBiZSBlbXB0eSwgYnV0IGNhbiBiZSAwCiAgICAgICAgLy8gQSAiMCIgaXMgbm90IGEgdmFsaWQgaW50ZXJuZXQgZG9tYWluLCBidXQgbWF5IGJlIHVzZWQgYXMgc2VydmVyIG5hbWUKICAgICAgICAvLyBpbiBhIHByaXZhdGUgbmV0d29yay4KICAgICAgICAkZG9tYWluID0gJHRoaXMtPmdldERvbWFpbigpOwogICAgICAgIGlmIChlbXB0eSgkZG9tYWluKSAmJiAhaXNfbnVtZXJpYygkZG9tYWluKSkgewogICAgICAgICAgICByZXR1cm4gJ1RoZSBjb29raWUgZG9tYWluIG11c3Qgbm90IGJlIGVtcHR5JzsKICAgICAgICB9CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQp9Cg==AppDevTools/query/vendor/guzzlehttp/guzzle/src/Exception/BadResponseException.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcRXhjZXB0aW9uOwoKdXNlIFBzclxIdHRwXE1lc3NhZ2VcUmVxdWVzdEludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcUmVzcG9uc2VJbnRlcmZhY2U7CgovKioKICogRXhjZXB0aW9uIHdoZW4gYW4gSFRUUCBlcnJvciBvY2N1cnMgKDR4eCBvciA1eHggZXJyb3IpCiAqLwpjbGFzcyBCYWRSZXNwb25zZUV4Y2VwdGlvbiBleHRlbmRzIFJlcXVlc3RFeGNlcHRpb24KewogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KAogICAgICAgICRtZXNzYWdlLAogICAgICAgIFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsCiAgICAgICAgUmVzcG9uc2VJbnRlcmZhY2UgJHJlc3BvbnNlID0gbnVsbCwKICAgICAgICBcRXhjZXB0aW9uICRwcmV2aW91cyA9IG51bGwsCiAgICAgICAgYXJyYXkgJGhhbmRsZXJDb250ZXh0ID0gW10KICAgICkgewogICAgICAgIGlmIChudWxsID09PSAkcmVzcG9uc2UpIHsKICAgICAgICAgICAgQHRyaWdnZXJfZXJyb3IoCiAgICAgICAgICAgICAgICAnSW5zdGFudGlhdGluZyB0aGUgJyAuIF9fQ0xBU1NfXyAuICcgY2xhc3Mgd2l0aG91dCBhIFJlc3BvbnNlIGlzIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA2LjMgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiA3LjAuJywKICAgICAgICAgICAgICAgIEVfVVNFUl9ERVBSRUNBVEVECiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJG1lc3NhZ2UsICRyZXF1ZXN0LCAkcmVzcG9uc2UsICRwcmV2aW91cywgJGhhbmRsZXJDb250ZXh0KTsKICAgIH0KfQo=AppDevTools/query/vendor/guzzlehttp/guzzle/src/Exception/ClientException.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcRXhjZXB0aW9uOwoKLyoqCiAqIEV4Y2VwdGlvbiB3aGVuIGEgY2xpZW50IGVycm9yIGlzIGVuY291bnRlcmVkICg0eHggY29kZXMpCiAqLwpjbGFzcyBDbGllbnRFeGNlcHRpb24gZXh0ZW5kcyBCYWRSZXNwb25zZUV4Y2VwdGlvbiB7fQo=AppDevTools/query/vendor/guzzlehttp/guzzle/src/Exception/ConnectException.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcRXhjZXB0aW9uOwoKdXNlIFBzclxIdHRwXE1lc3NhZ2VcUmVxdWVzdEludGVyZmFjZTsKCi8qKgogKiBFeGNlcHRpb24gdGhyb3duIHdoZW4gYSBjb25uZWN0aW9uIGNhbm5vdCBiZSBlc3RhYmxpc2hlZC4KICoKICogTm90ZSB0aGF0IG5vIHJlc3BvbnNlIGlzIHByZXNlbnQgZm9yIGEgQ29ubmVjdEV4Y2VwdGlvbgogKi8KY2xhc3MgQ29ubmVjdEV4Y2VwdGlvbiBleHRlbmRzIFJlcXVlc3RFeGNlcHRpb24KewogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KAogICAgICAgICRtZXNzYWdlLAogICAgICAgIFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsCiAgICAgICAgXEV4Y2VwdGlvbiAkcHJldmlvdXMgPSBudWxsLAogICAgICAgIGFycmF5ICRoYW5kbGVyQ29udGV4dCA9IFtdCiAgICApIHsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRtZXNzYWdlLCAkcmVxdWVzdCwgbnVsbCwgJHByZXZpb3VzLCAkaGFuZGxlckNvbnRleHQpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRSZXNwb25zZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhhc1Jlc3BvbnNlKCkKICAgIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9Cn0KAppDevTools/query/vendor/guzzlehttp/guzzle/src/Exception/GuzzleException.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcRXhjZXB0aW9uOwoKLyoqCiAqIEBtZXRob2Qgc3RyaW5nIGdldE1lc3NhZ2UoKQogKiBAbWV0aG9kIFxUaHJvd2FibGV8bnVsbCBnZXRQcmV2aW91cygpCiAqIEBtZXRob2QgbWl4ZWQgZ2V0Q29kZSgpCiAqIEBtZXRob2Qgc3RyaW5nIGdldEZpbGUoKQogKiBAbWV0aG9kIGludCBnZXRMaW5lKCkKICogQG1ldGhvZCBhcnJheSBnZXRUcmFjZSgpCiAqIEBtZXRob2Qgc3RyaW5nIGdldFRyYWNlQXNTdHJpbmcoKQogKi8KaW50ZXJmYWNlIEd1enpsZUV4Y2VwdGlvbiB7fQo=AppDevTools/query/vendor/guzzlehttp/guzzle/src/Exception/RequestException.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcRXhjZXB0aW9uOwoKdXNlIFBzclxIdHRwXE1lc3NhZ2VcUmVxdWVzdEludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcUmVzcG9uc2VJbnRlcmZhY2U7CnVzZSBHdXp6bGVIdHRwXFByb21pc2VcUHJvbWlzZUludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcVXJpSW50ZXJmYWNlOwoKLyoqCiAqIEhUVFAgUmVxdWVzdCBleGNlcHRpb24KICovCmNsYXNzIFJlcXVlc3RFeGNlcHRpb24gZXh0ZW5kcyBUcmFuc2ZlckV4Y2VwdGlvbgp7CiAgICAvKiogQHZhciBSZXF1ZXN0SW50ZXJmYWNlICovCiAgICBwcml2YXRlICRyZXF1ZXN0OwoKICAgIC8qKiBAdmFyIFJlc3BvbnNlSW50ZXJmYWNlICovCiAgICBwcml2YXRlICRyZXNwb25zZTsKCiAgICAvKiogQHZhciBhcnJheSAqLwogICAgcHJpdmF0ZSAkaGFuZGxlckNvbnRleHQ7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KAogICAgICAgICRtZXNzYWdlLAogICAgICAgIFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsCiAgICAgICAgUmVzcG9uc2VJbnRlcmZhY2UgJHJlc3BvbnNlID0gbnVsbCwKICAgICAgICBcRXhjZXB0aW9uICRwcmV2aW91cyA9IG51bGwsCiAgICAgICAgYXJyYXkgJGhhbmRsZXJDb250ZXh0ID0gW10KICAgICkgewogICAgICAgIC8vIFNldCB0aGUgY29kZSBvZiB0aGUgZXhjZXB0aW9uIGlmIHRoZSByZXNwb25zZSBpcyBzZXQgYW5kIG5vdCBmdXR1cmUuCiAgICAgICAgJGNvZGUgPSAkcmVzcG9uc2UgJiYgISgkcmVzcG9uc2UgaW5zdGFuY2VvZiBQcm9taXNlSW50ZXJmYWNlKQogICAgICAgICAgICA/ICRyZXNwb25zZS0+Z2V0U3RhdHVzQ29kZSgpCiAgICAgICAgICAgIDogMDsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRtZXNzYWdlLCAkY29kZSwgJHByZXZpb3VzKTsKICAgICAgICAkdGhpcy0+cmVxdWVzdCA9ICRyZXF1ZXN0OwogICAgICAgICR0aGlzLT5yZXNwb25zZSA9ICRyZXNwb25zZTsKICAgICAgICAkdGhpcy0+aGFuZGxlckNvbnRleHQgPSAkaGFuZGxlckNvbnRleHQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBXcmFwIG5vbi1SZXF1ZXN0RXhjZXB0aW9ucyB3aXRoIGEgUmVxdWVzdEV4Y2VwdGlvbgogICAgICoKICAgICAqIEBwYXJhbSBSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0CiAgICAgKiBAcGFyYW0gXEV4Y2VwdGlvbiAgICAgICAkZQogICAgICoKICAgICAqIEByZXR1cm4gUmVxdWVzdEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHdyYXBFeGNlcHRpb24oUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgXEV4Y2VwdGlvbiAkZSkKICAgIHsKICAgICAgICByZXR1cm4gJGUgaW5zdGFuY2VvZiBSZXF1ZXN0RXhjZXB0aW9uCiAgICAgICAgICAgID8gJGUKICAgICAgICAgICAgOiBuZXcgUmVxdWVzdEV4Y2VwdGlvbigkZS0+Z2V0TWVzc2FnZSgpLCAkcmVxdWVzdCwgbnVsbCwgJGUpOwogICAgfQoKICAgIC8qKgogICAgICogRmFjdG9yeSBtZXRob2QgdG8gY3JlYXRlIGEgbmV3IGV4Y2VwdGlvbiB3aXRoIGEgbm9ybWFsaXplZCBlcnJvciBtZXNzYWdlCiAgICAgKgogICAgICogQHBhcmFtIFJlcXVlc3RJbnRlcmZhY2UgICRyZXF1ZXN0ICBSZXF1ZXN0CiAgICAgKiBAcGFyYW0gUmVzcG9uc2VJbnRlcmZhY2UgJHJlc3BvbnNlIFJlc3BvbnNlIHJlY2VpdmVkCiAgICAgKiBAcGFyYW0gXEV4Y2VwdGlvbiAgICAgICAgJHByZXZpb3VzIFByZXZpb3VzIGV4Y2VwdGlvbgogICAgICogQHBhcmFtIGFycmF5ICAgICAgICAgICAgICRjdHggICAgICBPcHRpb25hbCBoYW5kbGVyIGNvbnRleHQuCiAgICAgKgogICAgICogQHJldHVybiBzZWxmCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlKAogICAgICAgIFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsCiAgICAgICAgUmVzcG9uc2VJbnRlcmZhY2UgJHJlc3BvbnNlID0gbnVsbCwKICAgICAgICBcRXhjZXB0aW9uICRwcmV2aW91cyA9IG51bGwsCiAgICAgICAgYXJyYXkgJGN0eCA9IFtdCiAgICApIHsKICAgICAgICBpZiAoISRyZXNwb25zZSkgewogICAgICAgICAgICByZXR1cm4gbmV3IHNlbGYoCiAgICAgICAgICAgICAgICAnRXJyb3IgY29tcGxldGluZyByZXF1ZXN0JywKICAgICAgICAgICAgICAgICRyZXF1ZXN0LAogICAgICAgICAgICAgICAgbnVsbCwKICAgICAgICAgICAgICAgICRwcmV2aW91cywKICAgICAgICAgICAgICAgICRjdHgKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICRsZXZlbCA9IChpbnQpIGZsb29yKCRyZXNwb25zZS0+Z2V0U3RhdHVzQ29kZSgpIC8gMTAwKTsKICAgICAgICBpZiAoJGxldmVsID09PSA0KSB7CiAgICAgICAgICAgICRsYWJlbCA9ICdDbGllbnQgZXJyb3InOwogICAgICAgICAgICAkY2xhc3NOYW1lID0gQ2xpZW50RXhjZXB0aW9uOjpjbGFzczsKICAgICAgICB9IGVsc2VpZiAoJGxldmVsID09PSA1KSB7CiAgICAgICAgICAgICRsYWJlbCA9ICdTZXJ2ZXIgZXJyb3InOwogICAgICAgICAgICAkY2xhc3NOYW1lID0gU2VydmVyRXhjZXB0aW9uOjpjbGFzczsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkbGFiZWwgPSAnVW5zdWNjZXNzZnVsIHJlcXVlc3QnOwogICAgICAgICAgICAkY2xhc3NOYW1lID0gX19DTEFTU19fOwogICAgICAgIH0KCiAgICAgICAgJHVyaSA9ICRyZXF1ZXN0LT5nZXRVcmkoKTsKICAgICAgICAkdXJpID0gc3RhdGljOjpvYmZ1c2NhdGVVcmkoJHVyaSk7CgogICAgICAgIC8vIENsaWVudCBFcnJvcjogYEdFVCAvYCByZXN1bHRlZCBpbiBhIGA0MDQgTm90IEZvdW5kYCByZXNwb25zZToKICAgICAgICAvLyA8aHRtbD4gLi4uICh0cnVuY2F0ZWQpCiAgICAgICAgJG1lc3NhZ2UgPSBzcHJpbnRmKAogICAgICAgICAgICAnJXM6IGAlcyAlc2AgcmVzdWx0ZWQgaW4gYSBgJXMgJXNgIHJlc3BvbnNlJywKICAgICAgICAgICAgJGxhYmVsLAogICAgICAgICAgICAkcmVxdWVzdC0+Z2V0TWV0aG9kKCksCiAgICAgICAgICAgICR1cmksCiAgICAgICAgICAgICRyZXNwb25zZS0+Z2V0U3RhdHVzQ29kZSgpLAogICAgICAgICAgICAkcmVzcG9uc2UtPmdldFJlYXNvblBocmFzZSgpCiAgICAgICAgKTsKCiAgICAgICAgJHN1bW1hcnkgPSBzdGF0aWM6OmdldFJlc3BvbnNlQm9keVN1bW1hcnkoJHJlc3BvbnNlKTsKCiAgICAgICAgaWYgKCRzdW1tYXJ5ICE9PSBudWxsKSB7CiAgICAgICAgICAgICRtZXNzYWdlIC49ICI6XG57JHN1bW1hcnl9XG4iOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyAkY2xhc3NOYW1lKCRtZXNzYWdlLCAkcmVxdWVzdCwgJHJlc3BvbnNlLCAkcHJldmlvdXMsICRjdHgpOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IGEgc2hvcnQgc3VtbWFyeSBvZiB0aGUgcmVzcG9uc2UKICAgICAqCiAgICAgKiBXaWxsIHJldHVybiBgbnVsbGAgaWYgdGhlIHJlc3BvbnNlIGlzIG5vdCBwcmludGFibGUuCiAgICAgKgogICAgICogQHBhcmFtIFJlc3BvbnNlSW50ZXJmYWNlICRyZXNwb25zZQogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRSZXNwb25zZUJvZHlTdW1tYXJ5KFJlc3BvbnNlSW50ZXJmYWNlICRyZXNwb25zZSkKICAgIHsKICAgICAgICAkYm9keSA9ICRyZXNwb25zZS0+Z2V0Qm9keSgpOwoKICAgICAgICBpZiAoISRib2R5LT5pc1NlZWthYmxlKCkpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICAkc2l6ZSA9ICRib2R5LT5nZXRTaXplKCk7CgogICAgICAgIGlmICgkc2l6ZSA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgICRzdW1tYXJ5ID0gJGJvZHktPnJlYWQoMTIwKTsKICAgICAgICAkYm9keS0+cmV3aW5kKCk7CgogICAgICAgIGlmICgkc2l6ZSA+IDEyMCkgewogICAgICAgICAgICAkc3VtbWFyeSAuPSAnICh0cnVuY2F0ZWQuLi4pJzsKICAgICAgICB9CgogICAgICAgIC8vIE1hdGNoZXMgYW55IHByaW50YWJsZSBjaGFyYWN0ZXIsIGluY2x1ZGluZyB1bmljb2RlIGNoYXJhY3RlcnM6CiAgICAgICAgLy8gbGV0dGVycywgbWFya3MsIG51bWJlcnMsIHB1bmN0dWF0aW9uLCBzcGFjaW5nLCBhbmQgc2VwYXJhdG9ycy4KICAgICAgICBpZiAocHJlZ19tYXRjaCgnL1teXHBMXHBNXHBOXHBQXHBTXHBaXG5cclx0XS8nLCAkc3VtbWFyeSkpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHN1bW1hcnk7CiAgICB9CgogICAgLyoqCiAgICAgKiBPYmZ1c2NhdGVzIFVSSSBpZiB0aGVyZSBpcyBhbiB1c2VybmFtZSBhbmQgYSBwYXNzd29yZCBwcmVzZW50CiAgICAgKgogICAgICogQHBhcmFtIFVyaUludGVyZmFjZSAkdXJpCiAgICAgKgogICAgICogQHJldHVybiBVcmlJbnRlcmZhY2UKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gb2JmdXNjYXRlVXJpKCR1cmkpCiAgICB7CiAgICAgICAgJHVzZXJJbmZvID0gJHVyaS0+Z2V0VXNlckluZm8oKTsKCiAgICAgICAgaWYgKGZhbHNlICE9PSAoJHBvcyA9IHN0cnBvcygkdXNlckluZm8sICc6JykpKSB7CiAgICAgICAgICAgIHJldHVybiAkdXJpLT53aXRoVXNlckluZm8oc3Vic3RyKCR1c2VySW5mbywgMCwgJHBvcyksICcqKionKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdXJpOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSByZXF1ZXN0IHRoYXQgY2F1c2VkIHRoZSBleGNlcHRpb24KICAgICAqCiAgICAgKiBAcmV0dXJuIFJlcXVlc3RJbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFJlcXVlc3QoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cmVxdWVzdDsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgYXNzb2NpYXRlZCByZXNwb25zZQogICAgICoKICAgICAqIEByZXR1cm4gUmVzcG9uc2VJbnRlcmZhY2V8bnVsbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVzcG9uc2UoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cmVzcG9uc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBDaGVjayBpZiBhIHJlc3BvbnNlIHdhcyByZWNlaXZlZAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaGFzUmVzcG9uc2UoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cmVzcG9uc2UgIT09IG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgY29udGV4dHVhbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZXJyb3IgZnJvbSB0aGUgdW5kZXJseWluZyBoYW5kbGVyLgogICAgICoKICAgICAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGFycmF5IHdpbGwgdmFyeSBkZXBlbmRpbmcgb24gd2hpY2ggaGFuZGxlciB5b3UgYXJlCiAgICAgKiB1c2luZy4gSXQgbWF5IGFsc28gYmUganVzdCBhbiBlbXB0eSBhcnJheS4gUmVseWluZyBvbiB0aGlzIGRhdGEgd2lsbAogICAgICogY291cGxlIHlvdSB0byBhIHNwZWNpZmljIGhhbmRsZXIsIGJ1dCBjYW4gZ2l2ZSBtb3JlIGRlYnVnIGluZm9ybWF0aW9uCiAgICAgKiB3aGVuIG5lZWRlZC4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRIYW5kbGVyQ29udGV4dCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5oYW5kbGVyQ29udGV4dDsKICAgIH0KfQo=AppDevTools/query/vendor/guzzlehttp/guzzle/src/Exception/SeekException.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcRXhjZXB0aW9uOwoKdXNlIFBzclxIdHRwXE1lc3NhZ2VcU3RyZWFtSW50ZXJmYWNlOwoKLyoqCiAqIEV4Y2VwdGlvbiB0aHJvd24gd2hlbiBhIHNlZWsgZmFpbHMgb24gYSBzdHJlYW0uCiAqLwpjbGFzcyBTZWVrRXhjZXB0aW9uIGV4dGVuZHMgXFJ1bnRpbWVFeGNlcHRpb24gaW1wbGVtZW50cyBHdXp6bGVFeGNlcHRpb24KewogICAgcHJpdmF0ZSAkc3RyZWFtOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChTdHJlYW1JbnRlcmZhY2UgJHN0cmVhbSwgJHBvcyA9IDAsICRtc2cgPSAnJykKICAgIHsKICAgICAgICAkdGhpcy0+c3RyZWFtID0gJHN0cmVhbTsKICAgICAgICAkbXNnID0gJG1zZyA/OiAnQ291bGQgbm90IHNlZWsgdGhlIHN0cmVhbSB0byBwb3NpdGlvbiAnIC4gJHBvczsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRtc2cpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBTdHJlYW1JbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFN0cmVhbSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5zdHJlYW07CiAgICB9Cn0KAppDevTools/query/vendor/guzzlehttp/guzzle/src/Exception/ServerException.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcRXhjZXB0aW9uOwoKLyoqCiAqIEV4Y2VwdGlvbiB3aGVuIGEgc2VydmVyIGVycm9yIGlzIGVuY291bnRlcmVkICg1eHggY29kZXMpCiAqLwpjbGFzcyBTZXJ2ZXJFeGNlcHRpb24gZXh0ZW5kcyBCYWRSZXNwb25zZUV4Y2VwdGlvbiB7fQo=AppDevTools/query/vendor/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcRXhjZXB0aW9uOwoKY2xhc3MgVG9vTWFueVJlZGlyZWN0c0V4Y2VwdGlvbiBleHRlbmRzIFJlcXVlc3RFeGNlcHRpb24ge30KAppDevTools/query/vendor/guzzlehttp/guzzle/src/Exception/TransferException.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcRXhjZXB0aW9uOwoKY2xhc3MgVHJhbnNmZXJFeGNlcHRpb24gZXh0ZW5kcyBcUnVudGltZUV4Y2VwdGlvbiBpbXBsZW1lbnRzIEd1enpsZUV4Y2VwdGlvbiB7fQo=AppDevTools/query/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcSGFuZGxlcjsKCnVzZSBHdXp6bGVIdHRwXEV4Y2VwdGlvblxSZXF1ZXN0RXhjZXB0aW9uOwp1c2UgR3V6emxlSHR0cFxFeGNlcHRpb25cQ29ubmVjdEV4Y2VwdGlvbjsKdXNlIEd1enpsZUh0dHBcUHJvbWlzZVxGdWxmaWxsZWRQcm9taXNlOwp1c2UgR3V6emxlSHR0cFxQc3I3Owp1c2UgR3V6emxlSHR0cFxQc3I3XExhenlPcGVuU3RyZWFtOwp1c2UgR3V6emxlSHR0cFxUcmFuc2ZlclN0YXRzOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlOwoKLyoqCiAqIENyZWF0ZXMgY3VybCByZXNvdXJjZXMgZnJvbSBhIHJlcXVlc3QKICovCmNsYXNzIEN1cmxGYWN0b3J5IGltcGxlbWVudHMgQ3VybEZhY3RvcnlJbnRlcmZhY2UKewogICAgLyoqIEB2YXIgYXJyYXkgKi8KICAgIHByaXZhdGUgJGhhbmRsZXMgPSBbXTsKCiAgICAvKiogQHZhciBpbnQgVG90YWwgbnVtYmVyIG9mIGlkbGUgaGFuZGxlcyB0byBrZWVwIGluIGNhY2hlICovCiAgICBwcml2YXRlICRtYXhIYW5kbGVzOwoKICAgIC8qKgogICAgICogQHBhcmFtIGludCAkbWF4SGFuZGxlcyBNYXhpbXVtIG51bWJlciBvZiBpZGxlIGhhbmRsZXMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbWF4SGFuZGxlcykKICAgIHsKICAgICAgICAkdGhpcy0+bWF4SGFuZGxlcyA9ICRtYXhIYW5kbGVzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjcmVhdGUoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgYXJyYXkgJG9wdGlvbnMpCiAgICB7CiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydjdXJsJ11bJ2JvZHlfYXNfc3RyaW5nJ10pKSB7CiAgICAgICAgICAgICRvcHRpb25zWydfYm9keV9hc19zdHJpbmcnXSA9ICRvcHRpb25zWydjdXJsJ11bJ2JvZHlfYXNfc3RyaW5nJ107CiAgICAgICAgICAgIHVuc2V0KCRvcHRpb25zWydjdXJsJ11bJ2JvZHlfYXNfc3RyaW5nJ10pOwogICAgICAgIH0KCiAgICAgICAgJGVhc3kgPSBuZXcgRWFzeUhhbmRsZTsKICAgICAgICAkZWFzeS0+cmVxdWVzdCA9ICRyZXF1ZXN0OwogICAgICAgICRlYXN5LT5vcHRpb25zID0gJG9wdGlvbnM7CiAgICAgICAgJGNvbmYgPSAkdGhpcy0+Z2V0RGVmYXVsdENvbmYoJGVhc3kpOwogICAgICAgICR0aGlzLT5hcHBseU1ldGhvZCgkZWFzeSwgJGNvbmYpOwogICAgICAgICR0aGlzLT5hcHBseUhhbmRsZXJPcHRpb25zKCRlYXN5LCAkY29uZik7CiAgICAgICAgJHRoaXMtPmFwcGx5SGVhZGVycygkZWFzeSwgJGNvbmYpOwogICAgICAgIHVuc2V0KCRjb25mWydfaGVhZGVycyddKTsKCiAgICAgICAgLy8gQWRkIGhhbmRsZXIgb3B0aW9ucyBmcm9tIHRoZSByZXF1ZXN0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucwogICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1snY3VybCddKSkgewogICAgICAgICAgICAkY29uZiA9IGFycmF5X3JlcGxhY2UoJGNvbmYsICRvcHRpb25zWydjdXJsJ10pOwogICAgICAgIH0KCiAgICAgICAgJGNvbmZbQ1VSTE9QVF9IRUFERVJGVU5DVElPTl0gPSAkdGhpcy0+Y3JlYXRlSGVhZGVyRm4oJGVhc3kpOwogICAgICAgICRlYXN5LT5oYW5kbGUgPSAkdGhpcy0+aGFuZGxlcwogICAgICAgICAgICA/IGFycmF5X3BvcCgkdGhpcy0+aGFuZGxlcykKICAgICAgICAgICAgOiBjdXJsX2luaXQoKTsKICAgICAgICBjdXJsX3NldG9wdF9hcnJheSgkZWFzeS0+aGFuZGxlLCAkY29uZik7CgogICAgICAgIHJldHVybiAkZWFzeTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVsZWFzZShFYXN5SGFuZGxlICRlYXN5KQogICAgewogICAgICAgICRyZXNvdXJjZSA9ICRlYXN5LT5oYW5kbGU7CiAgICAgICAgdW5zZXQoJGVhc3ktPmhhbmRsZSk7CgogICAgICAgIGlmIChjb3VudCgkdGhpcy0+aGFuZGxlcykgPj0gJHRoaXMtPm1heEhhbmRsZXMpIHsKICAgICAgICAgICAgY3VybF9jbG9zZSgkcmVzb3VyY2UpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIFJlbW92ZSBhbGwgY2FsbGJhY2sgZnVuY3Rpb25zIGFzIHRoZXkgY2FuIGhvbGQgb250byByZWZlcmVuY2VzCiAgICAgICAgICAgIC8vIGFuZCBhcmUgbm90IGNsZWFuZWQgdXAgYnkgY3VybF9yZXNldC4gVXNpbmcgY3VybF9zZXRvcHRfYXJyYXkKICAgICAgICAgICAgLy8gZG9lcyBub3Qgd29yayBmb3Igc29tZSByZWFzb24sIHNvIHJlbW92aW5nIGVhY2ggb25lCiAgICAgICAgICAgIC8vIGluZGl2aWR1YWxseS4KICAgICAgICAgICAgY3VybF9zZXRvcHQoJHJlc291cmNlLCBDVVJMT1BUX0hFQURFUkZVTkNUSU9OLCBudWxsKTsKICAgICAgICAgICAgY3VybF9zZXRvcHQoJHJlc291cmNlLCBDVVJMT1BUX1JFQURGVU5DVElPTiwgbnVsbCk7CiAgICAgICAgICAgIGN1cmxfc2V0b3B0KCRyZXNvdXJjZSwgQ1VSTE9QVF9XUklURUZVTkNUSU9OLCBudWxsKTsKICAgICAgICAgICAgY3VybF9zZXRvcHQoJHJlc291cmNlLCBDVVJMT1BUX1BST0dSRVNTRlVOQ1RJT04sIG51bGwpOwogICAgICAgICAgICBjdXJsX3Jlc2V0KCRyZXNvdXJjZSk7CiAgICAgICAgICAgICR0aGlzLT5oYW5kbGVzW10gPSAkcmVzb3VyY2U7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQ29tcGxldGVzIGEgY1VSTCB0cmFuc2FjdGlvbiwgZWl0aGVyIHJldHVybmluZyBhIHJlc3BvbnNlIHByb21pc2Ugb3IgYQogICAgICogcmVqZWN0ZWQgcHJvbWlzZS4KICAgICAqCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgICAgICAgICAgICAgJGhhbmRsZXIKICAgICAqIEBwYXJhbSBFYXN5SGFuZGxlICAgICAgICAgICAkZWFzeQogICAgICogQHBhcmFtIEN1cmxGYWN0b3J5SW50ZXJmYWNlICRmYWN0b3J5IERpY3RhdGVzIGhvdyB0aGUgaGFuZGxlIGlzIHJlbGVhc2VkCiAgICAgKgogICAgICogQHJldHVybiBcR3V6emxlSHR0cFxQcm9taXNlXFByb21pc2VJbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmaW5pc2goCiAgICAgICAgY2FsbGFibGUgJGhhbmRsZXIsCiAgICAgICAgRWFzeUhhbmRsZSAkZWFzeSwKICAgICAgICBDdXJsRmFjdG9yeUludGVyZmFjZSAkZmFjdG9yeQogICAgKSB7CiAgICAgICAgaWYgKGlzc2V0KCRlYXN5LT5vcHRpb25zWydvbl9zdGF0cyddKSkgewogICAgICAgICAgICBzZWxmOjppbnZva2VTdGF0cygkZWFzeSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoISRlYXN5LT5yZXNwb25zZSB8fCAkZWFzeS0+ZXJybm8pIHsKICAgICAgICAgICAgcmV0dXJuIHNlbGY6OmZpbmlzaEVycm9yKCRoYW5kbGVyLCAkZWFzeSwgJGZhY3RvcnkpOwogICAgICAgIH0KCiAgICAgICAgLy8gUmV0dXJuIHRoZSByZXNwb25zZSBpZiBpdCBpcyBwcmVzZW50IGFuZCB0aGVyZSBpcyBubyBlcnJvci4KICAgICAgICAkZmFjdG9yeS0+cmVsZWFzZSgkZWFzeSk7CgogICAgICAgIC8vIFJld2luZCB0aGUgYm9keSBvZiB0aGUgcmVzcG9uc2UgaWYgcG9zc2libGUuCiAgICAgICAgJGJvZHkgPSAkZWFzeS0+cmVzcG9uc2UtPmdldEJvZHkoKTsKICAgICAgICBpZiAoJGJvZHktPmlzU2Vla2FibGUoKSkgewogICAgICAgICAgICAkYm9keS0+cmV3aW5kKCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IEZ1bGZpbGxlZFByb21pc2UoJGVhc3ktPnJlc3BvbnNlKTsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBpbnZva2VTdGF0cyhFYXN5SGFuZGxlICRlYXN5KQogICAgewogICAgICAgICRjdXJsU3RhdHMgPSBjdXJsX2dldGluZm8oJGVhc3ktPmhhbmRsZSk7CiAgICAgICAgJHN0YXRzID0gbmV3IFRyYW5zZmVyU3RhdHMoCiAgICAgICAgICAgICRlYXN5LT5yZXF1ZXN0LAogICAgICAgICAgICAkZWFzeS0+cmVzcG9uc2UsCiAgICAgICAgICAgICRjdXJsU3RhdHNbJ3RvdGFsX3RpbWUnXSwKICAgICAgICAgICAgJGVhc3ktPmVycm5vLAogICAgICAgICAgICAkY3VybFN0YXRzCiAgICAgICAgKTsKICAgICAgICBjYWxsX3VzZXJfZnVuYygkZWFzeS0+b3B0aW9uc1snb25fc3RhdHMnXSwgJHN0YXRzKTsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBmaW5pc2hFcnJvcigKICAgICAgICBjYWxsYWJsZSAkaGFuZGxlciwKICAgICAgICBFYXN5SGFuZGxlICRlYXN5LAogICAgICAgIEN1cmxGYWN0b3J5SW50ZXJmYWNlICRmYWN0b3J5CiAgICApIHsKICAgICAgICAvLyBHZXQgZXJyb3IgaW5mb3JtYXRpb24gYW5kIHJlbGVhc2UgdGhlIGhhbmRsZSB0byB0aGUgZmFjdG9yeS4KICAgICAgICAkY3R4ID0gWwogICAgICAgICAgICAnZXJybm8nID0+ICRlYXN5LT5lcnJubywKICAgICAgICAgICAgJ2Vycm9yJyA9PiBjdXJsX2Vycm9yKCRlYXN5LT5oYW5kbGUpLAogICAgICAgIF0gKyBjdXJsX2dldGluZm8oJGVhc3ktPmhhbmRsZSk7CiAgICAgICAgJGZhY3RvcnktPnJlbGVhc2UoJGVhc3kpOwoKICAgICAgICAvLyBSZXRyeSB3aGVuIG5vdGhpbmcgaXMgcHJlc2VudCBvciB3aGVuIGN1cmwgZmFpbGVkIHRvIHJld2luZC4KICAgICAgICBpZiAoZW1wdHkoJGVhc3ktPm9wdGlvbnNbJ19lcnJfbWVzc2FnZSddKQogICAgICAgICAgICAmJiAoISRlYXN5LT5lcnJubyB8fCAkZWFzeS0+ZXJybm8gPT0gNjUpCiAgICAgICAgKSB7CiAgICAgICAgICAgIHJldHVybiBzZWxmOjpyZXRyeUZhaWxlZFJld2luZCgkaGFuZGxlciwgJGVhc3ksICRjdHgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHNlbGY6OmNyZWF0ZVJlamVjdGlvbigkZWFzeSwgJGN0eCk7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlUmVqZWN0aW9uKEVhc3lIYW5kbGUgJGVhc3ksIGFycmF5ICRjdHgpCiAgICB7CiAgICAgICAgc3RhdGljICRjb25uZWN0aW9uRXJyb3JzID0gWwogICAgICAgICAgICBDVVJMRV9PUEVSQVRJT05fVElNRU9VVEVEICA9PiB0cnVlLAogICAgICAgICAgICBDVVJMRV9DT1VMRE5UX1JFU09MVkVfSE9TVCA9PiB0cnVlLAogICAgICAgICAgICBDVVJMRV9DT1VMRE5UX0NPTk5FQ1QgICAgICA9PiB0cnVlLAogICAgICAgICAgICBDVVJMRV9TU0xfQ09OTkVDVF9FUlJPUiAgICA9PiB0cnVlLAogICAgICAgICAgICBDVVJMRV9HT1RfTk9USElORyAgICAgICAgICA9PiB0cnVlLAogICAgICAgIF07CgogICAgICAgIC8vIElmIGFuIGV4Y2VwdGlvbiB3YXMgZW5jb3VudGVyZWQgZHVyaW5nIHRoZSBvbkhlYWRlcnMgZXZlbnQsIHRoZW4KICAgICAgICAvLyByZXR1cm4gYSByZWplY3RlZCBwcm9taXNlIHRoYXQgd3JhcHMgdGhhdCBleGNlcHRpb24uCiAgICAgICAgaWYgKCRlYXN5LT5vbkhlYWRlcnNFeGNlcHRpb24pIHsKICAgICAgICAgICAgcmV0dXJuIFxHdXp6bGVIdHRwXFByb21pc2VccmVqZWN0aW9uX2ZvcigKICAgICAgICAgICAgICAgIG5ldyBSZXF1ZXN0RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgICAgICdBbiBlcnJvciB3YXMgZW5jb3VudGVyZWQgZHVyaW5nIHRoZSBvbl9oZWFkZXJzIGV2ZW50JywKICAgICAgICAgICAgICAgICAgICAkZWFzeS0+cmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICAkZWFzeS0+cmVzcG9uc2UsCiAgICAgICAgICAgICAgICAgICAgJGVhc3ktPm9uSGVhZGVyc0V4Y2VwdGlvbiwKICAgICAgICAgICAgICAgICAgICAkY3R4CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkbWVzc2FnZSA9IHNwcmludGYoCiAgICAgICAgICAgICdjVVJMIGVycm9yICVzOiAlcyAoJXMpJywKICAgICAgICAgICAgJGN0eFsnZXJybm8nXSwKICAgICAgICAgICAgJGN0eFsnZXJyb3InXSwKICAgICAgICAgICAgJ3NlZSBodHRwOi8vY3VybC5oYXh4LnNlL2xpYmN1cmwvYy9saWJjdXJsLWVycm9ycy5odG1sJwogICAgICAgICk7CgogICAgICAgIC8vIENyZWF0ZSBhIGNvbm5lY3Rpb24gZXhjZXB0aW9uIGlmIGl0IHdhcyBhIHNwZWNpZmljIGVycm9yIGNvZGUuCiAgICAgICAgJGVycm9yID0gaXNzZXQoJGNvbm5lY3Rpb25FcnJvcnNbJGVhc3ktPmVycm5vXSkKICAgICAgICAgICAgPyBuZXcgQ29ubmVjdEV4Y2VwdGlvbigkbWVzc2FnZSwgJGVhc3ktPnJlcXVlc3QsIG51bGwsICRjdHgpCiAgICAgICAgICAgIDogbmV3IFJlcXVlc3RFeGNlcHRpb24oJG1lc3NhZ2UsICRlYXN5LT5yZXF1ZXN0LCAkZWFzeS0+cmVzcG9uc2UsIG51bGwsICRjdHgpOwoKICAgICAgICByZXR1cm4gXEd1enpsZUh0dHBcUHJvbWlzZVxyZWplY3Rpb25fZm9yKCRlcnJvcik7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXREZWZhdWx0Q29uZihFYXN5SGFuZGxlICRlYXN5KQogICAgewogICAgICAgICRjb25mID0gWwogICAgICAgICAgICAnX2hlYWRlcnMnICAgICAgICAgICAgID0+ICRlYXN5LT5yZXF1ZXN0LT5nZXRIZWFkZXJzKCksCiAgICAgICAgICAgIENVUkxPUFRfQ1VTVE9NUkVRVUVTVCAgPT4gJGVhc3ktPnJlcXVlc3QtPmdldE1ldGhvZCgpLAogICAgICAgICAgICBDVVJMT1BUX1VSTCAgICAgICAgICAgID0+IChzdHJpbmcpICRlYXN5LT5yZXF1ZXN0LT5nZXRVcmkoKS0+d2l0aEZyYWdtZW50KCcnKSwKICAgICAgICAgICAgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiA9PiBmYWxzZSwKICAgICAgICAgICAgQ1VSTE9QVF9IRUFERVIgICAgICAgICA9PiBmYWxzZSwKICAgICAgICAgICAgQ1VSTE9QVF9DT05ORUNUVElNRU9VVCA9PiAxNTAsCiAgICAgICAgXTsKCiAgICAgICAgaWYgKGRlZmluZWQoJ0NVUkxPUFRfUFJPVE9DT0xTJykpIHsKICAgICAgICAgICAgJGNvbmZbQ1VSTE9QVF9QUk9UT0NPTFNdID0gQ1VSTFBST1RPX0hUVFAgfCBDVVJMUFJPVE9fSFRUUFM7CiAgICAgICAgfQoKICAgICAgICAkdmVyc2lvbiA9ICRlYXN5LT5yZXF1ZXN0LT5nZXRQcm90b2NvbFZlcnNpb24oKTsKICAgICAgICBpZiAoJHZlcnNpb24gPT0gMS4xKSB7CiAgICAgICAgICAgICRjb25mW0NVUkxPUFRfSFRUUF9WRVJTSU9OXSA9IENVUkxfSFRUUF9WRVJTSU9OXzFfMTsKICAgICAgICB9IGVsc2VpZiAoJHZlcnNpb24gPT0gMi4wKSB7CiAgICAgICAgICAgICRjb25mW0NVUkxPUFRfSFRUUF9WRVJTSU9OXSA9IENVUkxfSFRUUF9WRVJTSU9OXzJfMDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkY29uZltDVVJMT1BUX0hUVFBfVkVSU0lPTl0gPSBDVVJMX0hUVFBfVkVSU0lPTl8xXzA7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGNvbmY7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBhcHBseU1ldGhvZChFYXN5SGFuZGxlICRlYXN5LCBhcnJheSAmJGNvbmYpCiAgICB7CiAgICAgICAgJGJvZHkgPSAkZWFzeS0+cmVxdWVzdC0+Z2V0Qm9keSgpOwogICAgICAgICRzaXplID0gJGJvZHktPmdldFNpemUoKTsKCiAgICAgICAgaWYgKCRzaXplID09PSBudWxsIHx8ICRzaXplID4gMCkgewogICAgICAgICAgICAkdGhpcy0+YXBwbHlCb2R5KCRlYXN5LT5yZXF1ZXN0LCAkZWFzeS0+b3B0aW9ucywgJGNvbmYpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAkbWV0aG9kID0gJGVhc3ktPnJlcXVlc3QtPmdldE1ldGhvZCgpOwogICAgICAgIGlmICgkbWV0aG9kID09PSAnUFVUJyB8fCAkbWV0aG9kID09PSAnUE9TVCcpIHsKICAgICAgICAgICAgLy8gU2VlIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjMuMgogICAgICAgICAgICBpZiAoISRlYXN5LT5yZXF1ZXN0LT5oYXNIZWFkZXIoJ0NvbnRlbnQtTGVuZ3RoJykpIHsKICAgICAgICAgICAgICAgICRjb25mW0NVUkxPUFRfSFRUUEhFQURFUl1bXSA9ICdDb250ZW50LUxlbmd0aDogMCc7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2VpZiAoJG1ldGhvZCA9PT0gJ0hFQUQnKSB7CiAgICAgICAgICAgICRjb25mW0NVUkxPUFRfTk9CT0RZXSA9IHRydWU7CiAgICAgICAgICAgIHVuc2V0KAogICAgICAgICAgICAgICAgJGNvbmZbQ1VSTE9QVF9XUklURUZVTkNUSU9OXSwKICAgICAgICAgICAgICAgICRjb25mW0NVUkxPUFRfUkVBREZVTkNUSU9OXSwKICAgICAgICAgICAgICAgICRjb25mW0NVUkxPUFRfRklMRV0sCiAgICAgICAgICAgICAgICAkY29uZltDVVJMT1BUX0lORklMRV0KICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBhcHBseUJvZHkoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgYXJyYXkgJG9wdGlvbnMsIGFycmF5ICYkY29uZikKICAgIHsKICAgICAgICAkc2l6ZSA9ICRyZXF1ZXN0LT5oYXNIZWFkZXIoJ0NvbnRlbnQtTGVuZ3RoJykKICAgICAgICAgICAgPyAoaW50KSAkcmVxdWVzdC0+Z2V0SGVhZGVyTGluZSgnQ29udGVudC1MZW5ndGgnKQogICAgICAgICAgICA6IG51bGw7CgogICAgICAgIC8vIFNlbmQgdGhlIGJvZHkgYXMgYSBzdHJpbmcgaWYgdGhlIHNpemUgaXMgbGVzcyB0aGFuIDFNQiBPUiBpZiB0aGUKICAgICAgICAvLyBbY3VybF1bYm9keV9hc19zdHJpbmddIHJlcXVlc3QgdmFsdWUgaXMgc2V0LgogICAgICAgIGlmICgoJHNpemUgIT09IG51bGwgJiYgJHNpemUgPCAxMDAwMDAwKSB8fAogICAgICAgICAgICAhZW1wdHkoJG9wdGlvbnNbJ19ib2R5X2FzX3N0cmluZyddKQogICAgICAgICkgewogICAgICAgICAgICAkY29uZltDVVJMT1BUX1BPU1RGSUVMRFNdID0gKHN0cmluZykgJHJlcXVlc3QtPmdldEJvZHkoKTsKICAgICAgICAgICAgLy8gRG9uJ3QgZHVwbGljYXRlIHRoZSBDb250ZW50LUxlbmd0aCBoZWFkZXIKICAgICAgICAgICAgJHRoaXMtPnJlbW92ZUhlYWRlcignQ29udGVudC1MZW5ndGgnLCAkY29uZik7CiAgICAgICAgICAgICR0aGlzLT5yZW1vdmVIZWFkZXIoJ1RyYW5zZmVyLUVuY29kaW5nJywgJGNvbmYpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRjb25mW0NVUkxPUFRfVVBMT0FEXSA9IHRydWU7CiAgICAgICAgICAgIGlmICgkc2l6ZSAhPT0gbnVsbCkgewogICAgICAgICAgICAgICAgJGNvbmZbQ1VSTE9QVF9JTkZJTEVTSVpFXSA9ICRzaXplOwogICAgICAgICAgICAgICAgJHRoaXMtPnJlbW92ZUhlYWRlcignQ29udGVudC1MZW5ndGgnLCAkY29uZik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGJvZHkgPSAkcmVxdWVzdC0+Z2V0Qm9keSgpOwogICAgICAgICAgICBpZiAoJGJvZHktPmlzU2Vla2FibGUoKSkgewogICAgICAgICAgICAgICAgJGJvZHktPnJld2luZCgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRjb25mW0NVUkxPUFRfUkVBREZVTkNUSU9OXSA9IGZ1bmN0aW9uICgkY2gsICRmZCwgJGxlbmd0aCkgdXNlICgkYm9keSkgewogICAgICAgICAgICAgICAgcmV0dXJuICRib2R5LT5yZWFkKCRsZW5ndGgpOwogICAgICAgICAgICB9OwogICAgICAgIH0KCiAgICAgICAgLy8gSWYgdGhlIEV4cGVjdCBoZWFkZXIgaXMgbm90IHByZXNlbnQsIHByZXZlbnQgY3VybCBmcm9tIGFkZGluZyBpdAogICAgICAgIGlmICghJHJlcXVlc3QtPmhhc0hlYWRlcignRXhwZWN0JykpIHsKICAgICAgICAgICAgJGNvbmZbQ1VSTE9QVF9IVFRQSEVBREVSXVtdID0gJ0V4cGVjdDonOwogICAgICAgIH0KCiAgICAgICAgLy8gY1VSTCBzb21ldGltZXMgYWRkcyBhIGNvbnRlbnQtdHlwZSBieSBkZWZhdWx0LiBQcmV2ZW50IHRoaXMuCiAgICAgICAgaWYgKCEkcmVxdWVzdC0+aGFzSGVhZGVyKCdDb250ZW50LVR5cGUnKSkgewogICAgICAgICAgICAkY29uZltDVVJMT1BUX0hUVFBIRUFERVJdW10gPSAnQ29udGVudC1UeXBlOic7CiAgICAgICAgfQogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gYXBwbHlIZWFkZXJzKEVhc3lIYW5kbGUgJGVhc3ksIGFycmF5ICYkY29uZikKICAgIHsKICAgICAgICBmb3JlYWNoICgkY29uZlsnX2hlYWRlcnMnXSBhcyAkbmFtZSA9PiAkdmFsdWVzKSB7CiAgICAgICAgICAgIGZvcmVhY2ggKCR2YWx1ZXMgYXMgJHZhbHVlKSB7CiAgICAgICAgICAgICAgICAkdmFsdWUgPSAoc3RyaW5nKSAkdmFsdWU7CiAgICAgICAgICAgICAgICBpZiAoJHZhbHVlID09PSAnJykgewogICAgICAgICAgICAgICAgICAgIC8vIGNVUkwgcmVxdWlyZXMgYSBzcGVjaWFsIGZvcm1hdCBmb3IgZW1wdHkgaGVhZGVycy4KICAgICAgICAgICAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9ndXp6bGUvaXNzdWVzLzE4ODIgZm9yIG1vcmUgZGV0YWlscy4KICAgICAgICAgICAgICAgICAgICAkY29uZltDVVJMT1BUX0hUVFBIRUFERVJdW10gPSAiJG5hbWU7IjsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJGNvbmZbQ1VSTE9QVF9IVFRQSEVBREVSXVtdID0gIiRuYW1lOiAkdmFsdWUiOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBSZW1vdmUgdGhlIEFjY2VwdCBoZWFkZXIgaWYgb25lIHdhcyBub3Qgc2V0CiAgICAgICAgaWYgKCEkZWFzeS0+cmVxdWVzdC0+aGFzSGVhZGVyKCdBY2NlcHQnKSkgewogICAgICAgICAgICAkY29uZltDVVJMT1BUX0hUVFBIRUFERVJdW10gPSAnQWNjZXB0Oic7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogUmVtb3ZlIGEgaGVhZGVyIGZyb20gdGhlIG9wdGlvbnMgYXJyYXkuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSAgICBDYXNlLWluc2Vuc2l0aXZlIGhlYWRlciB0byByZW1vdmUKICAgICAqIEBwYXJhbSBhcnJheSAgJG9wdGlvbnMgQXJyYXkgb2Ygb3B0aW9ucyB0byBtb2RpZnkKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiByZW1vdmVIZWFkZXIoJG5hbWUsIGFycmF5ICYkb3B0aW9ucykKICAgIHsKICAgICAgICBmb3JlYWNoIChhcnJheV9rZXlzKCRvcHRpb25zWydfaGVhZGVycyddKSBhcyAka2V5KSB7CiAgICAgICAgICAgIGlmICghc3RyY2FzZWNtcCgka2V5LCAkbmFtZSkpIHsKICAgICAgICAgICAgICAgIHVuc2V0KCRvcHRpb25zWydfaGVhZGVycyddWyRrZXldKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGFwcGx5SGFuZGxlck9wdGlvbnMoRWFzeUhhbmRsZSAkZWFzeSwgYXJyYXkgJiRjb25mKQogICAgewogICAgICAgICRvcHRpb25zID0gJGVhc3ktPm9wdGlvbnM7CiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWyd2ZXJpZnknXSkpIHsKICAgICAgICAgICAgaWYgKCRvcHRpb25zWyd2ZXJpZnknXSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgIHVuc2V0KCRjb25mW0NVUkxPUFRfQ0FJTkZPXSk7CiAgICAgICAgICAgICAgICAkY29uZltDVVJMT1BUX1NTTF9WRVJJRllIT1NUXSA9IDA7CiAgICAgICAgICAgICAgICAkY29uZltDVVJMT1BUX1NTTF9WRVJJRllQRUVSXSA9IGZhbHNlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJGNvbmZbQ1VSTE9QVF9TU0xfVkVSSUZZSE9TVF0gPSAyOwogICAgICAgICAgICAgICAgJGNvbmZbQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUl0gPSB0cnVlOwogICAgICAgICAgICAgICAgaWYgKGlzX3N0cmluZygkb3B0aW9uc1sndmVyaWZ5J10pKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gVGhyb3cgYW4gZXJyb3IgaWYgdGhlIGZpbGUvZm9sZGVyL2xpbmsgcGF0aCBpcyBub3QgdmFsaWQgb3IgZG9lc24ndCBleGlzdC4KICAgICAgICAgICAgICAgICAgICBpZiAoIWZpbGVfZXhpc3RzKCRvcHRpb25zWyd2ZXJpZnknXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU1NMIENBIGJ1bmRsZSBub3QgZm91bmQ6IHskb3B0aW9uc1sndmVyaWZ5J119IgogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAvLyBJZiBpdCdzIGEgZGlyZWN0b3J5IG9yIGEgbGluayB0byBhIGRpcmVjdG9yeSB1c2UgQ1VSTE9QVF9DQVBBVEguCiAgICAgICAgICAgICAgICAgICAgLy8gSWYgbm90LCBpdCdzIHByb2JhYmx5IGEgZmlsZSwgb3IgYSBsaW5rIHRvIGEgZmlsZSwgc28gdXNlIENVUkxPUFRfQ0FJTkZPLgogICAgICAgICAgICAgICAgICAgIGlmIChpc19kaXIoJG9wdGlvbnNbJ3ZlcmlmeSddKSB8fAogICAgICAgICAgICAgICAgICAgICAgICAoaXNfbGluaygkb3B0aW9uc1sndmVyaWZ5J10pICYmIGlzX2RpcihyZWFkbGluaygkb3B0aW9uc1sndmVyaWZ5J10pKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGNvbmZbQ1VSTE9QVF9DQVBBVEhdID0gJG9wdGlvbnNbJ3ZlcmlmeSddOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRjb25mW0NVUkxPUFRfQ0FJTkZPXSA9ICRvcHRpb25zWyd2ZXJpZnknXTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICghZW1wdHkoJG9wdGlvbnNbJ2RlY29kZV9jb250ZW50J10pKSB7CiAgICAgICAgICAgICRhY2NlcHQgPSAkZWFzeS0+cmVxdWVzdC0+Z2V0SGVhZGVyTGluZSgnQWNjZXB0LUVuY29kaW5nJyk7CiAgICAgICAgICAgIGlmICgkYWNjZXB0KSB7CiAgICAgICAgICAgICAgICAkY29uZltDVVJMT1BUX0VOQ09ESU5HXSA9ICRhY2NlcHQ7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkY29uZltDVVJMT1BUX0VOQ09ESU5HXSA9ICcnOwogICAgICAgICAgICAgICAgLy8gRG9uJ3QgbGV0IGN1cmwgc2VuZCB0aGUgaGVhZGVyIG92ZXIgdGhlIHdpcmUKICAgICAgICAgICAgICAgICRjb25mW0NVUkxPUFRfSFRUUEhFQURFUl1bXSA9ICdBY2NlcHQtRW5jb2Rpbmc6JzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydzaW5rJ10pKSB7CiAgICAgICAgICAgICRzaW5rID0gJG9wdGlvbnNbJ3NpbmsnXTsKICAgICAgICAgICAgaWYgKCFpc19zdHJpbmcoJHNpbmspKSB7CiAgICAgICAgICAgICAgICAkc2luayA9IFxHdXp6bGVIdHRwXFBzcjdcc3RyZWFtX2Zvcigkc2luayk7CiAgICAgICAgICAgIH0gZWxzZWlmICghaXNfZGlyKGRpcm5hbWUoJHNpbmspKSkgewogICAgICAgICAgICAgICAgLy8gRW5zdXJlIHRoYXQgdGhlIGRpcmVjdG9yeSBleGlzdHMgYmVmb3JlIGZhaWxpbmcgaW4gY3VybC4KICAgICAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbihzcHJpbnRmKAogICAgICAgICAgICAgICAgICAgICdEaXJlY3RvcnkgJXMgZG9lcyBub3QgZXhpc3QgZm9yIHNpbmsgdmFsdWUgb2YgJXMnLAogICAgICAgICAgICAgICAgICAgIGRpcm5hbWUoJHNpbmspLAogICAgICAgICAgICAgICAgICAgICRzaW5rCiAgICAgICAgICAgICAgICApKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRzaW5rID0gbmV3IExhenlPcGVuU3RyZWFtKCRzaW5rLCAndysnKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkZWFzeS0+c2luayA9ICRzaW5rOwogICAgICAgICAgICAkY29uZltDVVJMT1BUX1dSSVRFRlVOQ1RJT05dID0gZnVuY3Rpb24gKCRjaCwgJHdyaXRlKSB1c2UgKCRzaW5rKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJHNpbmstPndyaXRlKCR3cml0ZSk7CiAgICAgICAgICAgIH07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gVXNlIGEgZGVmYXVsdCB0ZW1wIHN0cmVhbSBpZiBubyBzaW5rIHdhcyBzZXQuCiAgICAgICAgICAgICRjb25mW0NVUkxPUFRfRklMRV0gPSBmb3BlbigncGhwOi8vdGVtcCcsICd3KycpOwogICAgICAgICAgICAkZWFzeS0+c2luayA9IFBzcjdcc3RyZWFtX2ZvcigkY29uZltDVVJMT1BUX0ZJTEVdKTsKICAgICAgICB9CiAgICAgICAgJHRpbWVvdXRSZXF1aXJlc05vU2lnbmFsID0gZmFsc2U7CiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWyd0aW1lb3V0J10pKSB7CiAgICAgICAgICAgICR0aW1lb3V0UmVxdWlyZXNOb1NpZ25hbCB8PSAkb3B0aW9uc1sndGltZW91dCddIDwgMTsKICAgICAgICAgICAgJGNvbmZbQ1VSTE9QVF9USU1FT1VUX01TXSA9ICRvcHRpb25zWyd0aW1lb3V0J10gKiAxMDAwOwogICAgICAgIH0KCiAgICAgICAgLy8gQ1VSTCBkZWZhdWx0IHZhbHVlIGlzIENVUkxfSVBSRVNPTFZFX1dIQVRFVkVSCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydmb3JjZV9pcF9yZXNvbHZlJ10pKSB7CiAgICAgICAgICAgIGlmICgndjQnID09PSAkb3B0aW9uc1snZm9yY2VfaXBfcmVzb2x2ZSddKSB7CiAgICAgICAgICAgICAgICAkY29uZltDVVJMT1BUX0lQUkVTT0xWRV0gPSBDVVJMX0lQUkVTT0xWRV9WNDsKICAgICAgICAgICAgfSBlbHNlaWYgKCd2NicgPT09ICRvcHRpb25zWydmb3JjZV9pcF9yZXNvbHZlJ10pIHsKICAgICAgICAgICAgICAgICRjb25mW0NVUkxPUFRfSVBSRVNPTFZFXSA9IENVUkxfSVBSRVNPTFZFX1Y2OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ2Nvbm5lY3RfdGltZW91dCddKSkgewogICAgICAgICAgICAkdGltZW91dFJlcXVpcmVzTm9TaWduYWwgfD0gJG9wdGlvbnNbJ2Nvbm5lY3RfdGltZW91dCddIDwgMTsKICAgICAgICAgICAgJGNvbmZbQ1VSTE9QVF9DT05ORUNUVElNRU9VVF9NU10gPSAkb3B0aW9uc1snY29ubmVjdF90aW1lb3V0J10gKiAxMDAwOwogICAgICAgIH0KCiAgICAgICAgaWYgKCR0aW1lb3V0UmVxdWlyZXNOb1NpZ25hbCAmJiBzdHJ0b3VwcGVyKHN1YnN0cihQSFBfT1MsIDAsIDMpKSAhPT0gJ1dJTicpIHsKICAgICAgICAgICAgJGNvbmZbQ1VSTE9QVF9OT1NJR05BTF0gPSB0cnVlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydwcm94eSddKSkgewogICAgICAgICAgICBpZiAoIWlzX2FycmF5KCRvcHRpb25zWydwcm94eSddKSkgewogICAgICAgICAgICAgICAgJGNvbmZbQ1VSTE9QVF9QUk9YWV0gPSAkb3B0aW9uc1sncHJveHknXTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRzY2hlbWUgPSAkZWFzeS0+cmVxdWVzdC0+Z2V0VXJpKCktPmdldFNjaGVtZSgpOwogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydwcm94eSddWyRzY2hlbWVdKSkgewogICAgICAgICAgICAgICAgICAgICRob3N0ID0gJGVhc3ktPnJlcXVlc3QtPmdldFVyaSgpLT5nZXRIb3N0KCk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCFpc3NldCgkb3B0aW9uc1sncHJveHknXVsnbm8nXSkgfHwKICAgICAgICAgICAgICAgICAgICAgICAgIVxHdXp6bGVIdHRwXGlzX2hvc3RfaW5fbm9wcm94eSgkaG9zdCwgJG9wdGlvbnNbJ3Byb3h5J11bJ25vJ10pCiAgICAgICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRjb25mW0NVUkxPUFRfUFJPWFldID0gJG9wdGlvbnNbJ3Byb3h5J11bJHNjaGVtZV07CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ2NlcnQnXSkpIHsKICAgICAgICAgICAgJGNlcnQgPSAkb3B0aW9uc1snY2VydCddOwogICAgICAgICAgICBpZiAoaXNfYXJyYXkoJGNlcnQpKSB7CiAgICAgICAgICAgICAgICAkY29uZltDVVJMT1BUX1NTTENFUlRQQVNTV0RdID0gJGNlcnRbMV07CiAgICAgICAgICAgICAgICAkY2VydCA9ICRjZXJ0WzBdOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICghZmlsZV9leGlzdHMoJGNlcnQpKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAgICAiU1NMIGNlcnRpZmljYXRlIG5vdCBmb3VuZDogeyRjZXJ0fSIKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGNvbmZbQ1VSTE9QVF9TU0xDRVJUXSA9ICRjZXJ0OwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydzc2xfa2V5J10pKSB7CiAgICAgICAgICAgICRzc2xLZXkgPSAkb3B0aW9uc1snc3NsX2tleSddOwogICAgICAgICAgICBpZiAoaXNfYXJyYXkoJHNzbEtleSkpIHsKICAgICAgICAgICAgICAgICRjb25mW0NVUkxPUFRfU1NMS0VZUEFTU1dEXSA9ICRzc2xLZXlbMV07CiAgICAgICAgICAgICAgICAkc3NsS2V5ID0gJHNzbEtleVswXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoIWZpbGVfZXhpc3RzKCRzc2xLZXkpKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAgICAiU1NMIHByaXZhdGUga2V5IG5vdCBmb3VuZDogeyRzc2xLZXl9IgogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkY29uZltDVVJMT1BUX1NTTEtFWV0gPSAkc3NsS2V5OwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydwcm9ncmVzcyddKSkgewogICAgICAgICAgICAkcHJvZ3Jlc3MgPSAkb3B0aW9uc1sncHJvZ3Jlc3MnXTsKICAgICAgICAgICAgaWYgKCFpc19jYWxsYWJsZSgkcHJvZ3Jlc3MpKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICAgICAncHJvZ3Jlc3MgY2xpZW50IG9wdGlvbiBtdXN0IGJlIGNhbGxhYmxlJwogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkY29uZltDVVJMT1BUX05PUFJPR1JFU1NdID0gZmFsc2U7CiAgICAgICAgICAgICRjb25mW0NVUkxPUFRfUFJPR1JFU1NGVU5DVElPTl0gPSBmdW5jdGlvbiAoKSB1c2UgKCRwcm9ncmVzcykgewogICAgICAgICAgICAgICAgJGFyZ3MgPSBmdW5jX2dldF9hcmdzKCk7CiAgICAgICAgICAgICAgICAvLyBQSFAgNS41IHB1c2hlZCB0aGUgaGFuZGxlIG9udG8gdGhlIHN0YXJ0IG9mIHRoZSBhcmdzCiAgICAgICAgICAgICAgICBpZiAoaXNfcmVzb3VyY2UoJGFyZ3NbMF0pKSB7CiAgICAgICAgICAgICAgICAgICAgYXJyYXlfc2hpZnQoJGFyZ3MpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY2FsbF91c2VyX2Z1bmNfYXJyYXkoJHByb2dyZXNzLCAkYXJncyk7CiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICBpZiAoIWVtcHR5KCRvcHRpb25zWydkZWJ1ZyddKSkgewogICAgICAgICAgICAkY29uZltDVVJMT1BUX1NUREVSUl0gPSBcR3V6emxlSHR0cFxkZWJ1Z19yZXNvdXJjZSgkb3B0aW9uc1snZGVidWcnXSk7CiAgICAgICAgICAgICRjb25mW0NVUkxPUFRfVkVSQk9TRV0gPSB0cnVlOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFRoaXMgZnVuY3Rpb24gZW5zdXJlcyB0aGF0IGEgcmVzcG9uc2Ugd2FzIHNldCBvbiBhIHRyYW5zYWN0aW9uLiBJZiBvbmUKICAgICAqIHdhcyBub3Qgc2V0LCB0aGVuIHRoZSByZXF1ZXN0IGlzIHJldHJpZWQgaWYgcG9zc2libGUuIFRoaXMgZXJyb3IKICAgICAqIHR5cGljYWxseSBtZWFucyB5b3UgYXJlIHNlbmRpbmcgYSBwYXlsb2FkLCBjdXJsIGVuY291bnRlcmVkIGEKICAgICAqICJDb25uZWN0aW9uIGRpZWQsIHJldHJ5aW5nIGEgZnJlc2ggY29ubmVjdCIgZXJyb3IsIHRyaWVkIHRvIHJld2luZCB0aGUKICAgICAqIHN0cmVhbSwgYW5kIHRoZW4gZW5jb3VudGVyZWQgYSAibmVjZXNzYXJ5IGRhdGEgcmV3aW5kIHdhc24ndCBwb3NzaWJsZSIKICAgICAqIGVycm9yLCBjYXVzaW5nIHRoZSByZXF1ZXN0IHRvIGJlIHNlbnQgdGhyb3VnaCBjdXJsX211bHRpX2luZm9fcmVhZCgpCiAgICAgKiB3aXRob3V0IGFuIGVycm9yIHN0YXR1cy4KICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gcmV0cnlGYWlsZWRSZXdpbmQoCiAgICAgICAgY2FsbGFibGUgJGhhbmRsZXIsCiAgICAgICAgRWFzeUhhbmRsZSAkZWFzeSwKICAgICAgICBhcnJheSAkY3R4CiAgICApIHsKICAgICAgICB0cnkgewogICAgICAgICAgICAvLyBPbmx5IHJld2luZCBpZiB0aGUgYm9keSBoYXMgYmVlbiByZWFkIGZyb20uCiAgICAgICAgICAgICRib2R5ID0gJGVhc3ktPnJlcXVlc3QtPmdldEJvZHkoKTsKICAgICAgICAgICAgaWYgKCRib2R5LT50ZWxsKCkgPiAwKSB7CiAgICAgICAgICAgICAgICAkYm9keS0+cmV3aW5kKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChcUnVudGltZUV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAkY3R4WydlcnJvciddID0gJ1RoZSBjb25uZWN0aW9uIHVuZXhwZWN0ZWRseSBmYWlsZWQgd2l0aG91dCAnCiAgICAgICAgICAgICAgICAuICdwcm92aWRpbmcgYW4gZXJyb3IuIFRoZSByZXF1ZXN0IHdvdWxkIGhhdmUgYmVlbiByZXRyaWVkLCAnCiAgICAgICAgICAgICAgICAuICdidXQgYXR0ZW1wdGluZyB0byByZXdpbmQgdGhlIHJlcXVlc3QgYm9keSBmYWlsZWQuICcKICAgICAgICAgICAgICAgIC4gJ0V4Y2VwdGlvbjogJyAuICRlOwogICAgICAgICAgICByZXR1cm4gc2VsZjo6Y3JlYXRlUmVqZWN0aW9uKCRlYXN5LCAkY3R4KTsKICAgICAgICB9CgogICAgICAgIC8vIFJldHJ5IG5vIG1vcmUgdGhhbiAzIHRpbWVzIGJlZm9yZSBnaXZpbmcgdXAuCiAgICAgICAgaWYgKCFpc3NldCgkZWFzeS0+b3B0aW9uc1snX2N1cmxfcmV0cmllcyddKSkgewogICAgICAgICAgICAkZWFzeS0+b3B0aW9uc1snX2N1cmxfcmV0cmllcyddID0gMTsKICAgICAgICB9IGVsc2VpZiAoJGVhc3ktPm9wdGlvbnNbJ19jdXJsX3JldHJpZXMnXSA9PSAyKSB7CiAgICAgICAgICAgICRjdHhbJ2Vycm9yJ10gPSAnVGhlIGNVUkwgcmVxdWVzdCB3YXMgcmV0cmllZCAzIHRpbWVzICcKICAgICAgICAgICAgICAgIC4gJ2FuZCBkaWQgbm90IHN1Y2NlZWQuIFRoZSBtb3N0IGxpa2VseSByZWFzb24gZm9yIHRoZSBmYWlsdXJlICcKICAgICAgICAgICAgICAgIC4gJ2lzIHRoYXQgY1VSTCB3YXMgdW5hYmxlIHRvIHJld2luZCB0aGUgYm9keSBvZiB0aGUgcmVxdWVzdCAnCiAgICAgICAgICAgICAgICAuICdhbmQgc3Vic2VxdWVudCByZXRyaWVzIHJlc3VsdGVkIGluIHRoZSBzYW1lIGVycm9yLiBUdXJuIG9uICcKICAgICAgICAgICAgICAgIC4gJ3RoZSBkZWJ1ZyBvcHRpb24gdG8gc2VlIHdoYXQgd2VudCB3cm9uZy4gU2VlICcKICAgICAgICAgICAgICAgIC4gJ2h0dHBzOi8vYnVncy5waHAubmV0L2J1Zy5waHA/aWQ9NDcyMDQgZm9yIG1vcmUgaW5mb3JtYXRpb24uJzsKICAgICAgICAgICAgcmV0dXJuIHNlbGY6OmNyZWF0ZVJlamVjdGlvbigkZWFzeSwgJGN0eCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGVhc3ktPm9wdGlvbnNbJ19jdXJsX3JldHJpZXMnXSsrOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRoYW5kbGVyKCRlYXN5LT5yZXF1ZXN0LCAkZWFzeS0+b3B0aW9ucyk7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBjcmVhdGVIZWFkZXJGbihFYXN5SGFuZGxlICRlYXN5KQogICAgewogICAgICAgIGlmIChpc3NldCgkZWFzeS0+b3B0aW9uc1snb25faGVhZGVycyddKSkgewogICAgICAgICAgICAkb25IZWFkZXJzID0gJGVhc3ktPm9wdGlvbnNbJ29uX2hlYWRlcnMnXTsKCiAgICAgICAgICAgIGlmICghaXNfY2FsbGFibGUoJG9uSGVhZGVycykpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdvbl9oZWFkZXJzIG11c3QgYmUgY2FsbGFibGUnKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRvbkhlYWRlcnMgPSBudWxsOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgkY2gsICRoKSB1c2UgKAogICAgICAgICAgICAkb25IZWFkZXJzLAogICAgICAgICAgICAkZWFzeSwKICAgICAgICAgICAgJiRzdGFydGluZ1Jlc3BvbnNlCiAgICAgICAgKSB7CiAgICAgICAgICAgICR2YWx1ZSA9IHRyaW0oJGgpOwogICAgICAgICAgICBpZiAoJHZhbHVlID09PSAnJykgewogICAgICAgICAgICAgICAgJHN0YXJ0aW5nUmVzcG9uc2UgPSB0cnVlOwogICAgICAgICAgICAgICAgJGVhc3ktPmNyZWF0ZVJlc3BvbnNlKCk7CiAgICAgICAgICAgICAgICBpZiAoJG9uSGVhZGVycyAhPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRvbkhlYWRlcnMoJGVhc3ktPnJlc3BvbnNlKTsKICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChcRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFzc29jaWF0ZSB0aGUgZXhjZXB0aW9uIHdpdGggdGhlIGhhbmRsZSBhbmQgdHJpZ2dlcgogICAgICAgICAgICAgICAgICAgICAgICAvLyBhIGN1cmwgaGVhZGVyIHdyaXRlIGVycm9yIGJ5IHJldHVybmluZyAwLgogICAgICAgICAgICAgICAgICAgICAgICAkZWFzeS0+b25IZWFkZXJzRXhjZXB0aW9uID0gJGU7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZWlmICgkc3RhcnRpbmdSZXNwb25zZSkgewogICAgICAgICAgICAgICAgJHN0YXJ0aW5nUmVzcG9uc2UgPSBmYWxzZTsKICAgICAgICAgICAgICAgICRlYXN5LT5oZWFkZXJzID0gWyR2YWx1ZV07CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkZWFzeS0+aGVhZGVyc1tdID0gJHZhbHVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBzdHJsZW4oJGgpOwogICAgICAgIH07CiAgICB9Cn0KAppDevTools/query/vendor/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcSGFuZGxlcjsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U7CgppbnRlcmZhY2UgQ3VybEZhY3RvcnlJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgY1VSTCBoYW5kbGUgcmVzb3VyY2UuCiAgICAgKgogICAgICogQHBhcmFtIFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QgUmVxdWVzdAogICAgICogQHBhcmFtIGFycmF5ICAgICAgICAgICAgJG9wdGlvbnMgVHJhbnNmZXIgb3B0aW9ucwogICAgICoKICAgICAqIEByZXR1cm4gRWFzeUhhbmRsZQogICAgICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbiB3aGVuIGFuIG9wdGlvbiBjYW5ub3QgYmUgYXBwbGllZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY3JlYXRlKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIGFycmF5ICRvcHRpb25zKTsKCiAgICAvKioKICAgICAqIFJlbGVhc2UgYW4gZWFzeSBoYW5kbGUsIGFsbG93aW5nIGl0IHRvIGJlIHJldXNlZCBvciBjbG9zZWQuCiAgICAgKgogICAgICogVGhpcyBmdW5jdGlvbiBtdXN0IGNhbGwgdW5zZXQgb24gdGhlIGVhc3kgaGFuZGxlJ3MgImhhbmRsZSIgcHJvcGVydHkuCiAgICAgKgogICAgICogQHBhcmFtIEVhc3lIYW5kbGUgJGVhc3kKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJlbGVhc2UoRWFzeUhhbmRsZSAkZWFzeSk7Cn0KAppDevTools/query/vendor/guzzlehttp/guzzle/src/Handler/CurlHandler.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcSGFuZGxlcjsKCnVzZSBHdXp6bGVIdHRwXFBzcjc7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U7CgovKioKICogSFRUUCBoYW5kbGVyIHRoYXQgdXNlcyBjVVJMIGVhc3kgaGFuZGxlcyBhcyBhIHRyYW5zcG9ydCBsYXllci4KICoKICogV2hlbiB1c2luZyB0aGUgQ3VybEhhbmRsZXIsIGN1c3RvbSBjdXJsIG9wdGlvbnMgY2FuIGJlIHNwZWNpZmllZCBhcyBhbgogKiBhc3NvY2lhdGl2ZSBhcnJheSBvZiBjdXJsIG9wdGlvbiBjb25zdGFudHMgbWFwcGluZyB0byB2YWx1ZXMgaW4gdGhlCiAqICoqY3VybCoqIGtleSBvZiB0aGUgImNsaWVudCIga2V5IG9mIHRoZSByZXF1ZXN0LgogKi8KY2xhc3MgQ3VybEhhbmRsZXIKewogICAgLyoqIEB2YXIgQ3VybEZhY3RvcnlJbnRlcmZhY2UgKi8KICAgIHByaXZhdGUgJGZhY3Rvcnk7CgogICAgLyoqCiAgICAgKiBBY2NlcHRzIGFuIGFzc29jaWF0aXZlIGFycmF5IG9mIG9wdGlvbnM6CiAgICAgKgogICAgICogLSBmYWN0b3J5OiBPcHRpb25hbCBjdXJsIGZhY3RvcnkgdXNlZCB0byBjcmVhdGUgY1VSTCBoYW5kbGVzLgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucyBBcnJheSBvZiBvcHRpb25zIHRvIHVzZSB3aXRoIHRoZSBoYW5kbGVyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChhcnJheSAkb3B0aW9ucyA9IFtdKQogICAgewogICAgICAgICR0aGlzLT5mYWN0b3J5ID0gaXNzZXQoJG9wdGlvbnNbJ2hhbmRsZV9mYWN0b3J5J10pCiAgICAgICAgICAgID8gJG9wdGlvbnNbJ2hhbmRsZV9mYWN0b3J5J10KICAgICAgICAgICAgOiBuZXcgQ3VybEZhY3RvcnkoMyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9faW52b2tlKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIGFycmF5ICRvcHRpb25zKQogICAgewogICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1snZGVsYXknXSkpIHsKICAgICAgICAgICAgdXNsZWVwKCRvcHRpb25zWydkZWxheSddICogMTAwMCk7CiAgICAgICAgfQoKICAgICAgICAkZWFzeSA9ICR0aGlzLT5mYWN0b3J5LT5jcmVhdGUoJHJlcXVlc3QsICRvcHRpb25zKTsKICAgICAgICBjdXJsX2V4ZWMoJGVhc3ktPmhhbmRsZSk7CiAgICAgICAgJGVhc3ktPmVycm5vID0gY3VybF9lcnJubygkZWFzeS0+aGFuZGxlKTsKCiAgICAgICAgcmV0dXJuIEN1cmxGYWN0b3J5OjpmaW5pc2goJHRoaXMsICRlYXN5LCAkdGhpcy0+ZmFjdG9yeSk7CiAgICB9Cn0KAppDevTools/query/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcSGFuZGxlcjsKCnVzZSBHdXp6bGVIdHRwXFByb21pc2UgYXMgUDsKdXNlIEd1enpsZUh0dHBcUHJvbWlzZVxQcm9taXNlOwp1c2UgR3V6emxlSHR0cFxQc3I3Owp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlOwoKLyoqCiAqIFJldHVybnMgYW4gYXN5bmNocm9ub3VzIHJlc3BvbnNlIHVzaW5nIGN1cmxfbXVsdGlfKiBmdW5jdGlvbnMuCiAqCiAqIFdoZW4gdXNpbmcgdGhlIEN1cmxNdWx0aUhhbmRsZXIsIGN1c3RvbSBjdXJsIG9wdGlvbnMgY2FuIGJlIHNwZWNpZmllZCBhcyBhbgogKiBhc3NvY2lhdGl2ZSBhcnJheSBvZiBjdXJsIG9wdGlvbiBjb25zdGFudHMgbWFwcGluZyB0byB2YWx1ZXMgaW4gdGhlCiAqICoqY3VybCoqIGtleSBvZiB0aGUgcHJvdmlkZWQgcmVxdWVzdCBvcHRpb25zLgogKgogKiBAcHJvcGVydHkgcmVzb3VyY2UgJF9taCBJbnRlcm5hbCB1c2Ugb25seS4gTGF6eSBsb2FkZWQgbXVsdGktaGFuZGxlLgogKi8KY2xhc3MgQ3VybE11bHRpSGFuZGxlcgp7CiAgICAvKiogQHZhciBDdXJsRmFjdG9yeUludGVyZmFjZSAqLwogICAgcHJpdmF0ZSAkZmFjdG9yeTsKICAgIHByaXZhdGUgJHNlbGVjdFRpbWVvdXQ7CiAgICBwcml2YXRlICRhY3RpdmU7CiAgICBwcml2YXRlICRoYW5kbGVzID0gW107CiAgICBwcml2YXRlICRkZWxheXMgPSBbXTsKCiAgICAvKioKICAgICAqIFRoaXMgaGFuZGxlciBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgb3B0aW9uczoKICAgICAqCiAgICAgKiAtIGhhbmRsZV9mYWN0b3J5OiBBbiBvcHRpb25hbCBmYWN0b3J5ICB1c2VkIHRvIGNyZWF0ZSBjdXJsIGhhbmRsZXMKICAgICAqIC0gc2VsZWN0X3RpbWVvdXQ6IE9wdGlvbmFsIHRpbWVvdXQgKGluIHNlY29uZHMpIHRvIGJsb2NrIGJlZm9yZSB0aW1pbmcKICAgICAqICAgb3V0IHdoaWxlIHNlbGVjdGluZyBjdXJsIGhhbmRsZXMuIERlZmF1bHRzIHRvIDEgc2Vjb25kLgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoYXJyYXkgJG9wdGlvbnMgPSBbXSkKICAgIHsKICAgICAgICAkdGhpcy0+ZmFjdG9yeSA9IGlzc2V0KCRvcHRpb25zWydoYW5kbGVfZmFjdG9yeSddKQogICAgICAgICAgICA/ICRvcHRpb25zWydoYW5kbGVfZmFjdG9yeSddIDogbmV3IEN1cmxGYWN0b3J5KDUwKTsKICAgICAgICAkdGhpcy0+c2VsZWN0VGltZW91dCA9IGlzc2V0KCRvcHRpb25zWydzZWxlY3RfdGltZW91dCddKQogICAgICAgICAgICA/ICRvcHRpb25zWydzZWxlY3RfdGltZW91dCddIDogMTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX19nZXQoJG5hbWUpCiAgICB7CiAgICAgICAgaWYgKCRuYW1lID09PSAnX21oJykgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPl9taCA9IGN1cmxfbXVsdGlfaW5pdCgpOwogICAgICAgIH0KCiAgICAgICAgdGhyb3cgbmV3IFxCYWRNZXRob2RDYWxsRXhjZXB0aW9uKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fZGVzdHJ1Y3QoKQogICAgewogICAgICAgIGlmIChpc3NldCgkdGhpcy0+X21oKSkgewogICAgICAgICAgICBjdXJsX211bHRpX2Nsb3NlKCR0aGlzLT5fbWgpOwogICAgICAgICAgICB1bnNldCgkdGhpcy0+X21oKTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9faW52b2tlKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIGFycmF5ICRvcHRpb25zKQogICAgewogICAgICAgICRlYXN5ID0gJHRoaXMtPmZhY3RvcnktPmNyZWF0ZSgkcmVxdWVzdCwgJG9wdGlvbnMpOwogICAgICAgICRpZCA9IChpbnQpICRlYXN5LT5oYW5kbGU7CgogICAgICAgICRwcm9taXNlID0gbmV3IFByb21pc2UoCiAgICAgICAgICAgIFskdGhpcywgJ2V4ZWN1dGUnXSwKICAgICAgICAgICAgZnVuY3Rpb24gKCkgdXNlICgkaWQpIHsKICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+Y2FuY2VsKCRpZCk7CiAgICAgICAgICAgIH0KICAgICAgICApOwoKICAgICAgICAkdGhpcy0+YWRkUmVxdWVzdChbJ2Vhc3knID0+ICRlYXN5LCAnZGVmZXJyZWQnID0+ICRwcm9taXNlXSk7CgogICAgICAgIHJldHVybiAkcHJvbWlzZTsKICAgIH0KCiAgICAvKioKICAgICAqIFRpY2tzIHRoZSBjdXJsIGV2ZW50IGxvb3AuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0aWNrKCkKICAgIHsKICAgICAgICAvLyBBZGQgYW55IGRlbGF5ZWQgaGFuZGxlcyBpZiBuZWVkZWQuCiAgICAgICAgaWYgKCR0aGlzLT5kZWxheXMpIHsKICAgICAgICAgICAgJGN1cnJlbnRUaW1lID0gbWljcm90aW1lKHRydWUpOwogICAgICAgICAgICBmb3JlYWNoICgkdGhpcy0+ZGVsYXlzIGFzICRpZCA9PiAkZGVsYXkpIHsKICAgICAgICAgICAgICAgIGlmICgkY3VycmVudFRpbWUgPj0gJGRlbGF5KSB7CiAgICAgICAgICAgICAgICAgICAgdW5zZXQoJHRoaXMtPmRlbGF5c1skaWRdKTsKICAgICAgICAgICAgICAgICAgICBjdXJsX211bHRpX2FkZF9oYW5kbGUoCiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5fbWgsCiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5oYW5kbGVzWyRpZF1bJ2Vhc3knXS0+aGFuZGxlCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gU3RlcCB0aHJvdWdoIHRoZSB0YXNrIHF1ZXVlIHdoaWNoIG1heSBhZGQgYWRkaXRpb25hbCByZXF1ZXN0cy4KICAgICAgICBQXHF1ZXVlKCktPnJ1bigpOwoKICAgICAgICBpZiAoJHRoaXMtPmFjdGl2ZSAmJgogICAgICAgICAgICBjdXJsX211bHRpX3NlbGVjdCgkdGhpcy0+X21oLCAkdGhpcy0+c2VsZWN0VGltZW91dCkgPT09IC0xCiAgICAgICAgKSB7CiAgICAgICAgICAgIC8vIFBlcmZvcm0gYSB1c2xlZXAgaWYgYSBzZWxlY3QgcmV0dXJucyAtMS4KICAgICAgICAgICAgLy8gU2VlOiBodHRwczovL2J1Z3MucGhwLm5ldC9idWcucGhwP2lkPTYxMTQxCiAgICAgICAgICAgIHVzbGVlcCgyNTApOwogICAgICAgIH0KCiAgICAgICAgd2hpbGUgKGN1cmxfbXVsdGlfZXhlYygkdGhpcy0+X21oLCAkdGhpcy0+YWN0aXZlKSA9PT0gQ1VSTE1fQ0FMTF9NVUxUSV9QRVJGT1JNKTsKCiAgICAgICAgJHRoaXMtPnByb2Nlc3NNZXNzYWdlcygpOwogICAgfQoKICAgIC8qKgogICAgICogUnVucyB1bnRpbCBhbGwgb3V0c3RhbmRpbmcgY29ubmVjdGlvbnMgaGF2ZSBjb21wbGV0ZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBleGVjdXRlKCkKICAgIHsKICAgICAgICAkcXVldWUgPSBQXHF1ZXVlKCk7CgogICAgICAgIHdoaWxlICgkdGhpcy0+aGFuZGxlcyB8fCAhJHF1ZXVlLT5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIHRyYW5zZmVycywgdGhlbiBzbGVlcCBmb3IgdGhlIG5leHQgZGVsYXkKICAgICAgICAgICAgaWYgKCEkdGhpcy0+YWN0aXZlICYmICR0aGlzLT5kZWxheXMpIHsKICAgICAgICAgICAgICAgIHVzbGVlcCgkdGhpcy0+dGltZVRvTmV4dCgpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkdGhpcy0+dGljaygpOwogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGFkZFJlcXVlc3QoYXJyYXkgJGVudHJ5KQogICAgewogICAgICAgICRlYXN5ID0gJGVudHJ5WydlYXN5J107CiAgICAgICAgJGlkID0gKGludCkgJGVhc3ktPmhhbmRsZTsKICAgICAgICAkdGhpcy0+aGFuZGxlc1skaWRdID0gJGVudHJ5OwogICAgICAgIGlmIChlbXB0eSgkZWFzeS0+b3B0aW9uc1snZGVsYXknXSkpIHsKICAgICAgICAgICAgY3VybF9tdWx0aV9hZGRfaGFuZGxlKCR0aGlzLT5fbWgsICRlYXN5LT5oYW5kbGUpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR0aGlzLT5kZWxheXNbJGlkXSA9IG1pY3JvdGltZSh0cnVlKSArICgkZWFzeS0+b3B0aW9uc1snZGVsYXknXSAvIDEwMDApOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIENhbmNlbHMgYSBoYW5kbGUgZnJvbSBzZW5kaW5nIGFuZCByZW1vdmVzIHJlZmVyZW5jZXMgdG8gaXQuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkaWQgSGFuZGxlIElEIHRvIGNhbmNlbCBhbmQgcmVtb3ZlLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbCBUcnVlIG9uIHN1Y2Nlc3MsIGZhbHNlIG9uIGZhaWx1cmUuCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gY2FuY2VsKCRpZCkKICAgIHsKICAgICAgICAvLyBDYW5ub3QgY2FuY2VsIGlmIGl0IGhhcyBiZWVuIHByb2Nlc3NlZC4KICAgICAgICBpZiAoIWlzc2V0KCR0aGlzLT5oYW5kbGVzWyRpZF0pKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgICRoYW5kbGUgPSAkdGhpcy0+aGFuZGxlc1skaWRdWydlYXN5J10tPmhhbmRsZTsKICAgICAgICB1bnNldCgkdGhpcy0+ZGVsYXlzWyRpZF0sICR0aGlzLT5oYW5kbGVzWyRpZF0pOwogICAgICAgIGN1cmxfbXVsdGlfcmVtb3ZlX2hhbmRsZSgkdGhpcy0+X21oLCAkaGFuZGxlKTsKICAgICAgICBjdXJsX2Nsb3NlKCRoYW5kbGUpOwoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIHByb2Nlc3NNZXNzYWdlcygpCiAgICB7CiAgICAgICAgd2hpbGUgKCRkb25lID0gY3VybF9tdWx0aV9pbmZvX3JlYWQoJHRoaXMtPl9taCkpIHsKICAgICAgICAgICAgJGlkID0gKGludCkgJGRvbmVbJ2hhbmRsZSddOwogICAgICAgICAgICBjdXJsX211bHRpX3JlbW92ZV9oYW5kbGUoJHRoaXMtPl9taCwgJGRvbmVbJ2hhbmRsZSddKTsKCiAgICAgICAgICAgIGlmICghaXNzZXQoJHRoaXMtPmhhbmRsZXNbJGlkXSkpIHsKICAgICAgICAgICAgICAgIC8vIFByb2JhYmx5IHdhcyBjYW5jZWxsZWQuCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJGVudHJ5ID0gJHRoaXMtPmhhbmRsZXNbJGlkXTsKICAgICAgICAgICAgdW5zZXQoJHRoaXMtPmhhbmRsZXNbJGlkXSwgJHRoaXMtPmRlbGF5c1skaWRdKTsKICAgICAgICAgICAgJGVudHJ5WydlYXN5J10tPmVycm5vID0gJGRvbmVbJ3Jlc3VsdCddOwogICAgICAgICAgICAkZW50cnlbJ2RlZmVycmVkJ10tPnJlc29sdmUoCiAgICAgICAgICAgICAgICBDdXJsRmFjdG9yeTo6ZmluaXNoKAogICAgICAgICAgICAgICAgICAgICR0aGlzLAogICAgICAgICAgICAgICAgICAgICRlbnRyeVsnZWFzeSddLAogICAgICAgICAgICAgICAgICAgICR0aGlzLT5mYWN0b3J5CiAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gdGltZVRvTmV4dCgpCiAgICB7CiAgICAgICAgJGN1cnJlbnRUaW1lID0gbWljcm90aW1lKHRydWUpOwogICAgICAgICRuZXh0VGltZSA9IFBIUF9JTlRfTUFYOwogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5kZWxheXMgYXMgJHRpbWUpIHsKICAgICAgICAgICAgaWYgKCR0aW1lIDwgJG5leHRUaW1lKSB7CiAgICAgICAgICAgICAgICAkbmV4dFRpbWUgPSAkdGltZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG1heCgwLCAkbmV4dFRpbWUgLSAkY3VycmVudFRpbWUpICogMTAwMDAwMDsKICAgIH0KfQo=AppDevTools/query/vendor/guzzlehttp/guzzle/src/Handler/EasyHandle.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcSGFuZGxlcjsKCnVzZSBHdXp6bGVIdHRwXFBzcjdcUmVzcG9uc2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlc3BvbnNlSW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxTdHJlYW1JbnRlcmZhY2U7CgovKioKICogUmVwcmVzZW50cyBhIGNVUkwgZWFzeSBoYW5kbGUgYW5kIHRoZSBkYXRhIGl0IHBvcHVsYXRlcy4KICoKICogQGludGVybmFsCiAqLwpmaW5hbCBjbGFzcyBFYXN5SGFuZGxlCnsKICAgIC8qKiBAdmFyIHJlc291cmNlIGNVUkwgcmVzb3VyY2UgKi8KICAgIHB1YmxpYyAkaGFuZGxlOwoKICAgIC8qKiBAdmFyIFN0cmVhbUludGVyZmFjZSBXaGVyZSBkYXRhIGlzIGJlaW5nIHdyaXR0ZW4gKi8KICAgIHB1YmxpYyAkc2luazsKCiAgICAvKiogQHZhciBhcnJheSBSZWNlaXZlZCBIVFRQIGhlYWRlcnMgc28gZmFyICovCiAgICBwdWJsaWMgJGhlYWRlcnMgPSBbXTsKCiAgICAvKiogQHZhciBSZXNwb25zZUludGVyZmFjZSBSZWNlaXZlZCByZXNwb25zZSAoaWYgYW55KSAqLwogICAgcHVibGljICRyZXNwb25zZTsKCiAgICAvKiogQHZhciBSZXF1ZXN0SW50ZXJmYWNlIFJlcXVlc3QgYmVpbmcgc2VudCAqLwogICAgcHVibGljICRyZXF1ZXN0OwoKICAgIC8qKiBAdmFyIGFycmF5IFJlcXVlc3Qgb3B0aW9ucyAqLwogICAgcHVibGljICRvcHRpb25zID0gW107CgogICAgLyoqIEB2YXIgaW50IGNVUkwgZXJyb3IgbnVtYmVyIChpZiBhbnkpICovCiAgICBwdWJsaWMgJGVycm5vID0gMDsKCiAgICAvKiogQHZhciBcRXhjZXB0aW9uIEV4Y2VwdGlvbiBkdXJpbmcgb25faGVhZGVycyAoaWYgYW55KSAqLwogICAgcHVibGljICRvbkhlYWRlcnNFeGNlcHRpb247CgogICAgLyoqCiAgICAgKiBBdHRhY2ggYSByZXNwb25zZSB0byB0aGUgZWFzeSBoYW5kbGUgYmFzZWQgb24gdGhlIHJlY2VpdmVkIGhlYWRlcnMuCiAgICAgKgogICAgICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbiBpZiBubyBoZWFkZXJzIGhhdmUgYmVlbiByZWNlaXZlZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNyZWF0ZVJlc3BvbnNlKCkKICAgIHsKICAgICAgICBpZiAoZW1wdHkoJHRoaXMtPmhlYWRlcnMpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignTm8gaGVhZGVycyBoYXZlIGJlZW4gcmVjZWl2ZWQnKTsKICAgICAgICB9CgogICAgICAgIC8vIEhUVFAtdmVyc2lvbiBTUCBzdGF0dXMtY29kZSBTUCByZWFzb24tcGhyYXNlCiAgICAgICAgJHN0YXJ0TGluZSA9IGV4cGxvZGUoJyAnLCBhcnJheV9zaGlmdCgkdGhpcy0+aGVhZGVycyksIDMpOwogICAgICAgICRoZWFkZXJzID0gXEd1enpsZUh0dHBcaGVhZGVyc19mcm9tX2xpbmVzKCR0aGlzLT5oZWFkZXJzKTsKICAgICAgICAkbm9ybWFsaXplZEtleXMgPSBcR3V6emxlSHR0cFxub3JtYWxpemVfaGVhZGVyX2tleXMoJGhlYWRlcnMpOwoKICAgICAgICBpZiAoIWVtcHR5KCR0aGlzLT5vcHRpb25zWydkZWNvZGVfY29udGVudCddKQogICAgICAgICAgICAmJiBpc3NldCgkbm9ybWFsaXplZEtleXNbJ2NvbnRlbnQtZW5jb2RpbmcnXSkKICAgICAgICApIHsKICAgICAgICAgICAgJGhlYWRlcnNbJ3gtZW5jb2RlZC1jb250ZW50LWVuY29kaW5nJ10KICAgICAgICAgICAgICAgID0gJGhlYWRlcnNbJG5vcm1hbGl6ZWRLZXlzWydjb250ZW50LWVuY29kaW5nJ11dOwogICAgICAgICAgICB1bnNldCgkaGVhZGVyc1skbm9ybWFsaXplZEtleXNbJ2NvbnRlbnQtZW5jb2RpbmcnXV0pOwogICAgICAgICAgICBpZiAoaXNzZXQoJG5vcm1hbGl6ZWRLZXlzWydjb250ZW50LWxlbmd0aCddKSkgewogICAgICAgICAgICAgICAgJGhlYWRlcnNbJ3gtZW5jb2RlZC1jb250ZW50LWxlbmd0aCddCiAgICAgICAgICAgICAgICAgICAgPSAkaGVhZGVyc1skbm9ybWFsaXplZEtleXNbJ2NvbnRlbnQtbGVuZ3RoJ11dOwoKICAgICAgICAgICAgICAgICRib2R5TGVuZ3RoID0gKGludCkgJHRoaXMtPnNpbmstPmdldFNpemUoKTsKICAgICAgICAgICAgICAgIGlmICgkYm9keUxlbmd0aCkgewogICAgICAgICAgICAgICAgICAgICRoZWFkZXJzWyRub3JtYWxpemVkS2V5c1snY29udGVudC1sZW5ndGgnXV0gPSAkYm9keUxlbmd0aDsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgdW5zZXQoJGhlYWRlcnNbJG5vcm1hbGl6ZWRLZXlzWydjb250ZW50LWxlbmd0aCddXSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIEF0dGFjaCBhIHJlc3BvbnNlIHRvIHRoZSBlYXN5IGhhbmRsZSB3aXRoIHRoZSBwYXJzZWQgaGVhZGVycy4KICAgICAgICAkdGhpcy0+cmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UoCiAgICAgICAgICAgICRzdGFydExpbmVbMV0sCiAgICAgICAgICAgICRoZWFkZXJzLAogICAgICAgICAgICAkdGhpcy0+c2luaywKICAgICAgICAgICAgc3Vic3RyKCRzdGFydExpbmVbMF0sIDUpLAogICAgICAgICAgICBpc3NldCgkc3RhcnRMaW5lWzJdKSA/IChzdHJpbmcpICRzdGFydExpbmVbMl0gOiBudWxsCiAgICAgICAgKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX19nZXQoJG5hbWUpCiAgICB7CiAgICAgICAgJG1zZyA9ICRuYW1lID09PSAnaGFuZGxlJwogICAgICAgICAgICA/ICdUaGUgRWFzeUhhbmRsZSBoYXMgYmVlbiByZWxlYXNlZCcKICAgICAgICAgICAgOiAnSW52YWxpZCBwcm9wZXJ0eTogJyAuICRuYW1lOwogICAgICAgIHRocm93IG5ldyBcQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbigkbXNnKTsKICAgIH0KfQo=AppDevTools/query/vendor/guzzlehttp/guzzle/src/Handler/MockHandler.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcSGFuZGxlcjsKCnVzZSBHdXp6bGVIdHRwXEV4Y2VwdGlvblxSZXF1ZXN0RXhjZXB0aW9uOwp1c2UgR3V6emxlSHR0cFxIYW5kbGVyU3RhY2s7CnVzZSBHdXp6bGVIdHRwXFByb21pc2VcUHJvbWlzZUludGVyZmFjZTsKdXNlIEd1enpsZUh0dHBcUHJvbWlzZVxSZWplY3RlZFByb21pc2U7CnVzZSBHdXp6bGVIdHRwXFRyYW5zZmVyU3RhdHM7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlc3BvbnNlSW50ZXJmYWNlOwoKLyoqCiAqIEhhbmRsZXIgdGhhdCByZXR1cm5zIHJlc3BvbnNlcyBvciB0aHJvdyBleGNlcHRpb25zIGZyb20gYSBxdWV1ZS4KICovCmNsYXNzIE1vY2tIYW5kbGVyIGltcGxlbWVudHMgXENvdW50YWJsZQp7CiAgICBwcml2YXRlICRxdWV1ZSA9IFtdOwogICAgcHJpdmF0ZSAkbGFzdFJlcXVlc3Q7CiAgICBwcml2YXRlICRsYXN0T3B0aW9uczsKICAgIHByaXZhdGUgJG9uRnVsZmlsbGVkOwogICAgcHJpdmF0ZSAkb25SZWplY3RlZDsKCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBuZXcgTW9ja0hhbmRsZXIgdGhhdCB1c2VzIHRoZSBkZWZhdWx0IGhhbmRsZXIgc3RhY2sgbGlzdCBvZgogICAgICogbWlkZGxld2FyZXMuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRxdWV1ZSBBcnJheSBvZiByZXNwb25zZXMsIGNhbGxhYmxlcywgb3IgZXhjZXB0aW9ucy4KICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkb25GdWxmaWxsZWQgQ2FsbGJhY2sgdG8gaW52b2tlIHdoZW4gdGhlIHJldHVybiB2YWx1ZSBpcyBmdWxmaWxsZWQuCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJG9uUmVqZWN0ZWQgIENhbGxiYWNrIHRvIGludm9rZSB3aGVuIHRoZSByZXR1cm4gdmFsdWUgaXMgcmVqZWN0ZWQuCiAgICAgKgogICAgICogQHJldHVybiBIYW5kbGVyU3RhY2sKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVXaXRoTWlkZGxld2FyZSgKICAgICAgICBhcnJheSAkcXVldWUgPSBudWxsLAogICAgICAgIGNhbGxhYmxlICRvbkZ1bGZpbGxlZCA9IG51bGwsCiAgICAgICAgY2FsbGFibGUgJG9uUmVqZWN0ZWQgPSBudWxsCiAgICApIHsKICAgICAgICByZXR1cm4gSGFuZGxlclN0YWNrOjpjcmVhdGUobmV3IHNlbGYoJHF1ZXVlLCAkb25GdWxmaWxsZWQsICRvblJlamVjdGVkKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBUaGUgcGFzc2VkIGluIHZhbHVlIG11c3QgYmUgYW4gYXJyYXkgb2YKICAgICAqIHtAc2VlIFBzcjdcSHR0cFxNZXNzYWdlXFJlc3BvbnNlSW50ZXJmYWNlfSBvYmplY3RzLCBFeGNlcHRpb25zLAogICAgICogY2FsbGFibGVzLCBvciBQcm9taXNlcy4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJHF1ZXVlCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJG9uRnVsZmlsbGVkIENhbGxiYWNrIHRvIGludm9rZSB3aGVuIHRoZSByZXR1cm4gdmFsdWUgaXMgZnVsZmlsbGVkLgogICAgICogQHBhcmFtIGNhbGxhYmxlICRvblJlamVjdGVkICBDYWxsYmFjayB0byBpbnZva2Ugd2hlbiB0aGUgcmV0dXJuIHZhbHVlIGlzIHJlamVjdGVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgYXJyYXkgJHF1ZXVlID0gbnVsbCwKICAgICAgICBjYWxsYWJsZSAkb25GdWxmaWxsZWQgPSBudWxsLAogICAgICAgIGNhbGxhYmxlICRvblJlamVjdGVkID0gbnVsbAogICAgKSB7CiAgICAgICAgJHRoaXMtPm9uRnVsZmlsbGVkID0gJG9uRnVsZmlsbGVkOwogICAgICAgICR0aGlzLT5vblJlamVjdGVkID0gJG9uUmVqZWN0ZWQ7CgogICAgICAgIGlmICgkcXVldWUpIHsKICAgICAgICAgICAgY2FsbF91c2VyX2Z1bmNfYXJyYXkoWyR0aGlzLCAnYXBwZW5kJ10sICRxdWV1ZSk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2ludm9rZShSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0LCBhcnJheSAkb3B0aW9ucykKICAgIHsKICAgICAgICBpZiAoISR0aGlzLT5xdWV1ZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXE91dE9mQm91bmRzRXhjZXB0aW9uKCdNb2NrIHF1ZXVlIGlzIGVtcHR5Jyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ2RlbGF5J10pKSB7CiAgICAgICAgICAgIHVzbGVlcCgkb3B0aW9uc1snZGVsYXknXSAqIDEwMDApOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPmxhc3RSZXF1ZXN0ID0gJHJlcXVlc3Q7CiAgICAgICAgJHRoaXMtPmxhc3RPcHRpb25zID0gJG9wdGlvbnM7CiAgICAgICAgJHJlc3BvbnNlID0gYXJyYXlfc2hpZnQoJHRoaXMtPnF1ZXVlKTsKCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydvbl9oZWFkZXJzJ10pKSB7CiAgICAgICAgICAgIGlmICghaXNfY2FsbGFibGUoJG9wdGlvbnNbJ29uX2hlYWRlcnMnXSkpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdvbl9oZWFkZXJzIG11c3QgYmUgY2FsbGFibGUnKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgJG9wdGlvbnNbJ29uX2hlYWRlcnMnXSgkcmVzcG9uc2UpOwogICAgICAgICAgICB9IGNhdGNoIChcRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgICAgICAkbXNnID0gJ0FuIGVycm9yIHdhcyBlbmNvdW50ZXJlZCBkdXJpbmcgdGhlIG9uX2hlYWRlcnMgZXZlbnQnOwogICAgICAgICAgICAgICAgJHJlc3BvbnNlID0gbmV3IFJlcXVlc3RFeGNlcHRpb24oJG1zZywgJHJlcXVlc3QsICRyZXNwb25zZSwgJGUpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNfY2FsbGFibGUoJHJlc3BvbnNlKSkgewogICAgICAgICAgICAkcmVzcG9uc2UgPSBjYWxsX3VzZXJfZnVuYygkcmVzcG9uc2UsICRyZXF1ZXN0LCAkb3B0aW9ucyk7CiAgICAgICAgfQoKICAgICAgICAkcmVzcG9uc2UgPSAkcmVzcG9uc2UgaW5zdGFuY2VvZiBcRXhjZXB0aW9uCiAgICAgICAgICAgID8gXEd1enpsZUh0dHBcUHJvbWlzZVxyZWplY3Rpb25fZm9yKCRyZXNwb25zZSkKICAgICAgICAgICAgOiBcR3V6emxlSHR0cFxQcm9taXNlXHByb21pc2VfZm9yKCRyZXNwb25zZSk7CgogICAgICAgIHJldHVybiAkcmVzcG9uc2UtPnRoZW4oCiAgICAgICAgICAgIGZ1bmN0aW9uICgkdmFsdWUpIHVzZSAoJHJlcXVlc3QsICRvcHRpb25zKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+aW52b2tlU3RhdHMoJHJlcXVlc3QsICRvcHRpb25zLCAkdmFsdWUpOwogICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5vbkZ1bGZpbGxlZCkgewogICAgICAgICAgICAgICAgICAgIGNhbGxfdXNlcl9mdW5jKCR0aGlzLT5vbkZ1bGZpbGxlZCwgJHZhbHVlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1snc2luayddKSkgewogICAgICAgICAgICAgICAgICAgICRjb250ZW50cyA9IChzdHJpbmcpICR2YWx1ZS0+Z2V0Qm9keSgpOwogICAgICAgICAgICAgICAgICAgICRzaW5rID0gJG9wdGlvbnNbJ3NpbmsnXTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKGlzX3Jlc291cmNlKCRzaW5rKSkgewogICAgICAgICAgICAgICAgICAgICAgICBmd3JpdGUoJHNpbmssICRjb250ZW50cyk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKGlzX3N0cmluZygkc2luaykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZmlsZV9wdXRfY29udGVudHMoJHNpbmssICRjb250ZW50cyk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRzaW5rIGluc3RhbmNlb2YgXFBzclxIdHRwXE1lc3NhZ2VcU3RyZWFtSW50ZXJmYWNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRzaW5rLT53cml0ZSgkY29udGVudHMpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gJHZhbHVlOwogICAgICAgICAgICB9LAogICAgICAgICAgICBmdW5jdGlvbiAoJHJlYXNvbikgdXNlICgkcmVxdWVzdCwgJG9wdGlvbnMpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5pbnZva2VTdGF0cygkcmVxdWVzdCwgJG9wdGlvbnMsIG51bGwsICRyZWFzb24pOwogICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5vblJlamVjdGVkKSB7CiAgICAgICAgICAgICAgICAgICAgY2FsbF91c2VyX2Z1bmMoJHRoaXMtPm9uUmVqZWN0ZWQsICRyZWFzb24pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIFxHdXp6bGVIdHRwXFByb21pc2VccmVqZWN0aW9uX2ZvcigkcmVhc29uKTsKICAgICAgICAgICAgfQogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBBZGRzIG9uZSBvciBtb3JlIHZhcmlhZGljIHJlcXVlc3RzLCBleGNlcHRpb25zLCBjYWxsYWJsZXMsIG9yIHByb21pc2VzCiAgICAgKiB0byB0aGUgcXVldWUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhcHBlbmQoKQogICAgewogICAgICAgIGZvcmVhY2ggKGZ1bmNfZ2V0X2FyZ3MoKSBhcyAkdmFsdWUpIHsKICAgICAgICAgICAgaWYgKCR2YWx1ZSBpbnN0YW5jZW9mIFJlc3BvbnNlSW50ZXJmYWNlCiAgICAgICAgICAgICAgICB8fCAkdmFsdWUgaW5zdGFuY2VvZiBcRXhjZXB0aW9uCiAgICAgICAgICAgICAgICB8fCAkdmFsdWUgaW5zdGFuY2VvZiBQcm9taXNlSW50ZXJmYWNlCiAgICAgICAgICAgICAgICB8fCBpc19jYWxsYWJsZSgkdmFsdWUpCiAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgJHRoaXMtPnF1ZXVlW10gPSAkdmFsdWU7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignRXhwZWN0ZWQgYSByZXNwb25zZSBvciAnCiAgICAgICAgICAgICAgICAgICAgLiAnZXhjZXB0aW9uLiBGb3VuZCAnIC4gXEd1enpsZUh0dHBcZGVzY3JpYmVfdHlwZSgkdmFsdWUpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgbGFzdCByZWNlaXZlZCByZXF1ZXN0LgogICAgICoKICAgICAqIEByZXR1cm4gUmVxdWVzdEludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TGFzdFJlcXVlc3QoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bGFzdFJlcXVlc3Q7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGxhc3QgcmVjZWl2ZWQgcmVxdWVzdCBvcHRpb25zLgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldExhc3RPcHRpb25zKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmxhc3RPcHRpb25zOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlbWFpbmluZyBpdGVtcyBpbiB0aGUgcXVldWUuCiAgICAgKgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvdW50KCkKICAgIHsKICAgICAgICByZXR1cm4gY291bnQoJHRoaXMtPnF1ZXVlKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGludm9rZVN0YXRzKAogICAgICAgIFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsCiAgICAgICAgYXJyYXkgJG9wdGlvbnMsCiAgICAgICAgUmVzcG9uc2VJbnRlcmZhY2UgJHJlc3BvbnNlID0gbnVsbCwKICAgICAgICAkcmVhc29uID0gbnVsbAogICAgKSB7CiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydvbl9zdGF0cyddKSkgewogICAgICAgICAgICAkc3RhdHMgPSBuZXcgVHJhbnNmZXJTdGF0cygkcmVxdWVzdCwgJHJlc3BvbnNlLCAwLCAkcmVhc29uKTsKICAgICAgICAgICAgY2FsbF91c2VyX2Z1bmMoJG9wdGlvbnNbJ29uX3N0YXRzJ10sICRzdGF0cyk7CiAgICAgICAgfQogICAgfQp9Cg==AppDevTools/query/vendor/guzzlehttp/guzzle/src/Handler/Proxy.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcSGFuZGxlcjsKCnVzZSBHdXp6bGVIdHRwXFJlcXVlc3RPcHRpb25zOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlOwoKLyoqCiAqIFByb3ZpZGVzIGJhc2ljIHByb3hpZXMgZm9yIGhhbmRsZXJzLgogKi8KY2xhc3MgUHJveHkKewogICAgLyoqCiAgICAgKiBTZW5kcyBzeW5jaHJvbm91cyByZXF1ZXN0cyB0byBhIHNwZWNpZmljIGhhbmRsZXIgd2hpbGUgc2VuZGluZyBhbGwgb3RoZXIKICAgICAqIHJlcXVlc3RzIHRvIGFub3RoZXIgaGFuZGxlci4KICAgICAqCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGRlZmF1bHQgSGFuZGxlciB1c2VkIGZvciBub3JtYWwgcmVzcG9uc2VzCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJHN5bmMgICAgSGFuZGxlciB1c2VkIGZvciBzeW5jaHJvbm91cyByZXNwb25zZXMuCiAgICAgKgogICAgICogQHJldHVybiBjYWxsYWJsZSBSZXR1cm5zIHRoZSBjb21wb3NlZCBoYW5kbGVyLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHdyYXBTeW5jKAogICAgICAgIGNhbGxhYmxlICRkZWZhdWx0LAogICAgICAgIGNhbGxhYmxlICRzeW5jCiAgICApIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb24gKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIGFycmF5ICRvcHRpb25zKSB1c2UgKCRkZWZhdWx0LCAkc3luYykgewogICAgICAgICAgICByZXR1cm4gZW1wdHkoJG9wdGlvbnNbUmVxdWVzdE9wdGlvbnM6OlNZTkNIUk9OT1VTXSkKICAgICAgICAgICAgICAgID8gJGRlZmF1bHQoJHJlcXVlc3QsICRvcHRpb25zKQogICAgICAgICAgICAgICAgOiAkc3luYygkcmVxdWVzdCwgJG9wdGlvbnMpOwogICAgICAgIH07CiAgICB9CgogICAgLyoqCiAgICAgKiBTZW5kcyBzdHJlYW1pbmcgcmVxdWVzdHMgdG8gYSBzdHJlYW1pbmcgY29tcGF0aWJsZSBoYW5kbGVyIHdoaWxlIHNlbmRpbmcKICAgICAqIGFsbCBvdGhlciByZXF1ZXN0cyB0byBhIGRlZmF1bHQgaGFuZGxlci4KICAgICAqCiAgICAgKiBUaGlzLCBmb3IgZXhhbXBsZSwgY291bGQgYmUgdXNlZnVsIGZvciB0YWtpbmcgYWR2YW50YWdlIG9mIHRoZQogICAgICogcGVyZm9ybWFuY2UgYmVuZWZpdHMgb2YgY3VybCB3aGlsZSBzdGlsbCBzdXBwb3J0aW5nIHRydWUgc3RyZWFtaW5nCiAgICAgKiB0aHJvdWdoIHRoZSBTdHJlYW1IYW5kbGVyLgogICAgICoKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkZGVmYXVsdCAgIEhhbmRsZXIgdXNlZCBmb3Igbm9uLXN0cmVhbWluZyByZXNwb25zZXMKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkc3RyZWFtaW5nIEhhbmRsZXIgdXNlZCBmb3Igc3RyZWFtaW5nIHJlc3BvbnNlcwogICAgICoKICAgICAqIEByZXR1cm4gY2FsbGFibGUgUmV0dXJucyB0aGUgY29tcG9zZWQgaGFuZGxlci4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB3cmFwU3RyZWFtaW5nKAogICAgICAgIGNhbGxhYmxlICRkZWZhdWx0LAogICAgICAgIGNhbGxhYmxlICRzdHJlYW1pbmcKICAgICkgewogICAgICAgIHJldHVybiBmdW5jdGlvbiAoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgYXJyYXkgJG9wdGlvbnMpIHVzZSAoJGRlZmF1bHQsICRzdHJlYW1pbmcpIHsKICAgICAgICAgICAgcmV0dXJuIGVtcHR5KCRvcHRpb25zWydzdHJlYW0nXSkKICAgICAgICAgICAgICAgID8gJGRlZmF1bHQoJHJlcXVlc3QsICRvcHRpb25zKQogICAgICAgICAgICAgICAgOiAkc3RyZWFtaW5nKCRyZXF1ZXN0LCAkb3B0aW9ucyk7CiAgICAgICAgfTsKICAgIH0KfQo=AppDevTools/query/vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcSGFuZGxlcjsKCnVzZSBHdXp6bGVIdHRwXEV4Y2VwdGlvblxSZXF1ZXN0RXhjZXB0aW9uOwp1c2UgR3V6emxlSHR0cFxFeGNlcHRpb25cQ29ubmVjdEV4Y2VwdGlvbjsKdXNlIEd1enpsZUh0dHBcUHJvbWlzZVxGdWxmaWxsZWRQcm9taXNlOwp1c2UgR3V6emxlSHR0cFxQcm9taXNlXFByb21pc2VJbnRlcmZhY2U7CnVzZSBHdXp6bGVIdHRwXFBzcjc7CnVzZSBHdXp6bGVIdHRwXFRyYW5zZmVyU3RhdHM7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlc3BvbnNlSW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxTdHJlYW1JbnRlcmZhY2U7CgovKioKICogSFRUUCBoYW5kbGVyIHRoYXQgdXNlcyBQSFAncyBIVFRQIHN0cmVhbSB3cmFwcGVyLgogKi8KY2xhc3MgU3RyZWFtSGFuZGxlcgp7CiAgICBwcml2YXRlICRsYXN0SGVhZGVycyA9IFtdOwoKICAgIC8qKgogICAgICogU2VuZHMgYW4gSFRUUCByZXF1ZXN0LgogICAgICoKICAgICAqIEBwYXJhbSBSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0IFJlcXVlc3QgdG8gc2VuZC4KICAgICAqIEBwYXJhbSBhcnJheSAgICAgICAgICAgICRvcHRpb25zIFJlcXVlc3QgdHJhbnNmZXIgb3B0aW9ucy4KICAgICAqCiAgICAgKiBAcmV0dXJuIFByb21pc2VJbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9faW52b2tlKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIGFycmF5ICRvcHRpb25zKQogICAgewogICAgICAgIC8vIFNsZWVwIGlmIHRoZXJlIGlzIGEgZGVsYXkgc3BlY2lmaWVkLgogICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1snZGVsYXknXSkpIHsKICAgICAgICAgICAgdXNsZWVwKCRvcHRpb25zWydkZWxheSddICogMTAwMCk7CiAgICAgICAgfQoKICAgICAgICAkc3RhcnRUaW1lID0gaXNzZXQoJG9wdGlvbnNbJ29uX3N0YXRzJ10pID8gbWljcm90aW1lKHRydWUpIDogbnVsbDsKCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgLy8gRG9lcyBub3Qgc3VwcG9ydCB0aGUgZXhwZWN0IGhlYWRlci4KICAgICAgICAgICAgJHJlcXVlc3QgPSAkcmVxdWVzdC0+d2l0aG91dEhlYWRlcignRXhwZWN0Jyk7CgogICAgICAgICAgICAvLyBBcHBlbmQgYSBjb250ZW50LWxlbmd0aCBoZWFkZXIgaWYgYm9keSBzaXplIGlzIHplcm8gdG8gbWF0Y2gKICAgICAgICAgICAgLy8gY1VSTCdzIGJlaGF2aW9yLgogICAgICAgICAgICBpZiAoMCA9PT0gJHJlcXVlc3QtPmdldEJvZHkoKS0+Z2V0U2l6ZSgpKSB7CiAgICAgICAgICAgICAgICAkcmVxdWVzdCA9ICRyZXF1ZXN0LT53aXRoSGVhZGVyKCdDb250ZW50LUxlbmd0aCcsIDApOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gJHRoaXMtPmNyZWF0ZVJlc3BvbnNlKAogICAgICAgICAgICAgICAgJHJlcXVlc3QsCiAgICAgICAgICAgICAgICAkb3B0aW9ucywKICAgICAgICAgICAgICAgICR0aGlzLT5jcmVhdGVTdHJlYW0oJHJlcXVlc3QsICRvcHRpb25zKSwKICAgICAgICAgICAgICAgICRzdGFydFRpbWUKICAgICAgICAgICAgKTsKICAgICAgICB9IGNhdGNoIChcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgIHRocm93ICRlOwogICAgICAgIH0gY2F0Y2ggKFxFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgLy8gRGV0ZXJtaW5lIGlmIHRoZSBlcnJvciB3YXMgYSBuZXR3b3JraW5nIGVycm9yLgogICAgICAgICAgICAkbWVzc2FnZSA9ICRlLT5nZXRNZXNzYWdlKCk7CiAgICAgICAgICAgIC8vIFRoaXMgbGlzdCBjYW4gcHJvYmFibHkgZ2V0IG1vcmUgY29tcHJlaGVuc2l2ZS4KICAgICAgICAgICAgaWYgKHN0cnBvcygkbWVzc2FnZSwgJ2dldGFkZHJpbmZvJykgLy8gRE5TIGxvb2t1cCBmYWlsZWQKICAgICAgICAgICAgICAgIHx8IHN0cnBvcygkbWVzc2FnZSwgJ0Nvbm5lY3Rpb24gcmVmdXNlZCcpCiAgICAgICAgICAgICAgICB8fCBzdHJwb3MoJG1lc3NhZ2UsICJjb3VsZG4ndCBjb25uZWN0IHRvIGhvc3QiKSAvLyBlcnJvciBvbiBISFZNCiAgICAgICAgICAgICAgICB8fCBzdHJwb3MoJG1lc3NhZ2UsICJjb25uZWN0aW9uIGF0dGVtcHQgZmFpbGVkIikKICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAkZSA9IG5ldyBDb25uZWN0RXhjZXB0aW9uKCRlLT5nZXRNZXNzYWdlKCksICRyZXF1ZXN0LCAkZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGUgPSBSZXF1ZXN0RXhjZXB0aW9uOjp3cmFwRXhjZXB0aW9uKCRyZXF1ZXN0LCAkZSk7CiAgICAgICAgICAgICR0aGlzLT5pbnZva2VTdGF0cygkb3B0aW9ucywgJHJlcXVlc3QsICRzdGFydFRpbWUsIG51bGwsICRlKTsKCiAgICAgICAgICAgIHJldHVybiBcR3V6emxlSHR0cFxQcm9taXNlXHJlamVjdGlvbl9mb3IoJGUpOwogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGludm9rZVN0YXRzKAogICAgICAgIGFycmF5ICRvcHRpb25zLAogICAgICAgIFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsCiAgICAgICAgJHN0YXJ0VGltZSwKICAgICAgICBSZXNwb25zZUludGVyZmFjZSAkcmVzcG9uc2UgPSBudWxsLAogICAgICAgICRlcnJvciA9IG51bGwKICAgICkgewogICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1snb25fc3RhdHMnXSkpIHsKICAgICAgICAgICAgJHN0YXRzID0gbmV3IFRyYW5zZmVyU3RhdHMoCiAgICAgICAgICAgICAgICAkcmVxdWVzdCwKICAgICAgICAgICAgICAgICRyZXNwb25zZSwKICAgICAgICAgICAgICAgIG1pY3JvdGltZSh0cnVlKSAtICRzdGFydFRpbWUsCiAgICAgICAgICAgICAgICAkZXJyb3IsCiAgICAgICAgICAgICAgICBbXQogICAgICAgICAgICApOwogICAgICAgICAgICBjYWxsX3VzZXJfZnVuYygkb3B0aW9uc1snb25fc3RhdHMnXSwgJHN0YXRzKTsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBjcmVhdGVSZXNwb25zZSgKICAgICAgICBSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0LAogICAgICAgIGFycmF5ICRvcHRpb25zLAogICAgICAgICRzdHJlYW0sCiAgICAgICAgJHN0YXJ0VGltZQogICAgKSB7CiAgICAgICAgJGhkcnMgPSAkdGhpcy0+bGFzdEhlYWRlcnM7CiAgICAgICAgJHRoaXMtPmxhc3RIZWFkZXJzID0gW107CiAgICAgICAgJHBhcnRzID0gZXhwbG9kZSgnICcsIGFycmF5X3NoaWZ0KCRoZHJzKSwgMyk7CiAgICAgICAgJHZlciA9IGV4cGxvZGUoJy8nLCAkcGFydHNbMF0pWzFdOwogICAgICAgICRzdGF0dXMgPSAkcGFydHNbMV07CiAgICAgICAgJHJlYXNvbiA9IGlzc2V0KCRwYXJ0c1syXSkgPyAkcGFydHNbMl0gOiBudWxsOwogICAgICAgICRoZWFkZXJzID0gXEd1enpsZUh0dHBcaGVhZGVyc19mcm9tX2xpbmVzKCRoZHJzKTsKICAgICAgICBsaXN0KCRzdHJlYW0sICRoZWFkZXJzKSA9ICR0aGlzLT5jaGVja0RlY29kZSgkb3B0aW9ucywgJGhlYWRlcnMsICRzdHJlYW0pOwogICAgICAgICRzdHJlYW0gPSBQc3I3XHN0cmVhbV9mb3IoJHN0cmVhbSk7CiAgICAgICAgJHNpbmsgPSAkc3RyZWFtOwoKICAgICAgICBpZiAoc3RyY2FzZWNtcCgnSEVBRCcsICRyZXF1ZXN0LT5nZXRNZXRob2QoKSkpIHsKICAgICAgICAgICAgJHNpbmsgPSAkdGhpcy0+Y3JlYXRlU2luaygkc3RyZWFtLCAkb3B0aW9ucyk7CiAgICAgICAgfQoKICAgICAgICAkcmVzcG9uc2UgPSBuZXcgUHNyN1xSZXNwb25zZSgkc3RhdHVzLCAkaGVhZGVycywgJHNpbmssICR2ZXIsICRyZWFzb24pOwoKICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ29uX2hlYWRlcnMnXSkpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICRvcHRpb25zWydvbl9oZWFkZXJzJ10oJHJlc3BvbnNlKTsKICAgICAgICAgICAgfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAgICAgJG1zZyA9ICdBbiBlcnJvciB3YXMgZW5jb3VudGVyZWQgZHVyaW5nIHRoZSBvbl9oZWFkZXJzIGV2ZW50JzsKICAgICAgICAgICAgICAgICRleCA9IG5ldyBSZXF1ZXN0RXhjZXB0aW9uKCRtc2csICRyZXF1ZXN0LCAkcmVzcG9uc2UsICRlKTsKICAgICAgICAgICAgICAgIHJldHVybiBcR3V6emxlSHR0cFxQcm9taXNlXHJlamVjdGlvbl9mb3IoJGV4KTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gRG8gbm90IGRyYWluIHdoZW4gdGhlIHJlcXVlc3QgaXMgYSBIRUFEIHJlcXVlc3QgYmVjYXVzZSB0aGV5IGhhdmUKICAgICAgICAvLyBubyBib2R5LgogICAgICAgIGlmICgkc2luayAhPT0gJHN0cmVhbSkgewogICAgICAgICAgICAkdGhpcy0+ZHJhaW4oCiAgICAgICAgICAgICAgICAkc3RyZWFtLAogICAgICAgICAgICAgICAgJHNpbmssCiAgICAgICAgICAgICAgICAkcmVzcG9uc2UtPmdldEhlYWRlckxpbmUoJ0NvbnRlbnQtTGVuZ3RoJykKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5pbnZva2VTdGF0cygkb3B0aW9ucywgJHJlcXVlc3QsICRzdGFydFRpbWUsICRyZXNwb25zZSwgbnVsbCk7CgogICAgICAgIHJldHVybiBuZXcgRnVsZmlsbGVkUHJvbWlzZSgkcmVzcG9uc2UpOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gY3JlYXRlU2luayhTdHJlYW1JbnRlcmZhY2UgJHN0cmVhbSwgYXJyYXkgJG9wdGlvbnMpCiAgICB7CiAgICAgICAgaWYgKCFlbXB0eSgkb3B0aW9uc1snc3RyZWFtJ10pKSB7CiAgICAgICAgICAgIHJldHVybiAkc3RyZWFtOwogICAgICAgIH0KCiAgICAgICAgJHNpbmsgPSBpc3NldCgkb3B0aW9uc1snc2luayddKQogICAgICAgICAgICA/ICRvcHRpb25zWydzaW5rJ10KICAgICAgICAgICAgOiBmb3BlbigncGhwOi8vdGVtcCcsICdyKycpOwoKICAgICAgICByZXR1cm4gaXNfc3RyaW5nKCRzaW5rKQogICAgICAgICAgICA/IG5ldyBQc3I3XExhenlPcGVuU3RyZWFtKCRzaW5rLCAndysnKQogICAgICAgICAgICA6IFBzcjdcc3RyZWFtX2Zvcigkc2luayk7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBjaGVja0RlY29kZShhcnJheSAkb3B0aW9ucywgYXJyYXkgJGhlYWRlcnMsICRzdHJlYW0pCiAgICB7CiAgICAgICAgLy8gQXV0b21hdGljYWxseSBkZWNvZGUgcmVzcG9uc2VzIHdoZW4gaW5zdHJ1Y3RlZC4KICAgICAgICBpZiAoIWVtcHR5KCRvcHRpb25zWydkZWNvZGVfY29udGVudCddKSkgewogICAgICAgICAgICAkbm9ybWFsaXplZEtleXMgPSBcR3V6emxlSHR0cFxub3JtYWxpemVfaGVhZGVyX2tleXMoJGhlYWRlcnMpOwogICAgICAgICAgICBpZiAoaXNzZXQoJG5vcm1hbGl6ZWRLZXlzWydjb250ZW50LWVuY29kaW5nJ10pKSB7CiAgICAgICAgICAgICAgICAkZW5jb2RpbmcgPSAkaGVhZGVyc1skbm9ybWFsaXplZEtleXNbJ2NvbnRlbnQtZW5jb2RpbmcnXV07CiAgICAgICAgICAgICAgICBpZiAoJGVuY29kaW5nWzBdID09PSAnZ3ppcCcgfHwgJGVuY29kaW5nWzBdID09PSAnZGVmbGF0ZScpIHsKICAgICAgICAgICAgICAgICAgICAkc3RyZWFtID0gbmV3IFBzcjdcSW5mbGF0ZVN0cmVhbSgKICAgICAgICAgICAgICAgICAgICAgICAgUHNyN1xzdHJlYW1fZm9yKCRzdHJlYW0pCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAkaGVhZGVyc1sneC1lbmNvZGVkLWNvbnRlbnQtZW5jb2RpbmcnXQogICAgICAgICAgICAgICAgICAgICAgICA9ICRoZWFkZXJzWyRub3JtYWxpemVkS2V5c1snY29udGVudC1lbmNvZGluZyddXTsKICAgICAgICAgICAgICAgICAgICAvLyBSZW1vdmUgY29udGVudC1lbmNvZGluZyBoZWFkZXIKICAgICAgICAgICAgICAgICAgICB1bnNldCgkaGVhZGVyc1skbm9ybWFsaXplZEtleXNbJ2NvbnRlbnQtZW5jb2RpbmcnXV0pOwogICAgICAgICAgICAgICAgICAgIC8vIEZpeCBjb250ZW50LWxlbmd0aCBoZWFkZXIKICAgICAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJG5vcm1hbGl6ZWRLZXlzWydjb250ZW50LWxlbmd0aCddKSkgewogICAgICAgICAgICAgICAgICAgICAgICAkaGVhZGVyc1sneC1lbmNvZGVkLWNvbnRlbnQtbGVuZ3RoJ10KICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJGhlYWRlcnNbJG5vcm1hbGl6ZWRLZXlzWydjb250ZW50LWxlbmd0aCddXTsKCiAgICAgICAgICAgICAgICAgICAgICAgICRsZW5ndGggPSAoaW50KSAkc3RyZWFtLT5nZXRTaXplKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNldCgkaGVhZGVyc1skbm9ybWFsaXplZEtleXNbJ2NvbnRlbnQtbGVuZ3RoJ11dKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRoZWFkZXJzWyRub3JtYWxpemVkS2V5c1snY29udGVudC1sZW5ndGgnXV0gPSBbJGxlbmd0aF07CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBbJHN0cmVhbSwgJGhlYWRlcnNdOwogICAgfQoKICAgIC8qKgogICAgICogRHJhaW5zIHRoZSBzb3VyY2Ugc3RyZWFtIGludG8gdGhlICJzaW5rIiBjbGllbnQgb3B0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSBTdHJlYW1JbnRlcmZhY2UgJHNvdXJjZQogICAgICogQHBhcmFtIFN0cmVhbUludGVyZmFjZSAkc2luawogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAkY29udGVudExlbmd0aCBIZWFkZXIgc3BlY2lmeWluZyB0aGUgYW1vdW50IG9mCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgdG8gcmVhZC4KICAgICAqCiAgICAgKiBAcmV0dXJuIFN0cmVhbUludGVyZmFjZQogICAgICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbiB3aGVuIHRoZSBzaW5rIG9wdGlvbiBpcyBpbnZhbGlkLgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGRyYWluKAogICAgICAgIFN0cmVhbUludGVyZmFjZSAkc291cmNlLAogICAgICAgIFN0cmVhbUludGVyZmFjZSAkc2luaywKICAgICAgICAkY29udGVudExlbmd0aAogICAgKSB7CiAgICAgICAgLy8gSWYgYSBjb250ZW50LWxlbmd0aCBoZWFkZXIgaXMgcHJvdmlkZWQsIHRoZW4gc3RvcCByZWFkaW5nIG9uY2UKICAgICAgICAvLyB0aGF0IG51bWJlciBvZiBieXRlcyBoYXMgYmVlbiByZWFkLiBUaGlzIGNhbiBwcmV2ZW50IGluZmluaXRlbHkKICAgICAgICAvLyByZWFkaW5nIGZyb20gYSBzdHJlYW0gd2hlbiBkZWFsaW5nIHdpdGggc2VydmVycyB0aGF0IGRvIG5vdCBob25vcgogICAgICAgIC8vIENvbm5lY3Rpb246IENsb3NlIGhlYWRlcnMuCiAgICAgICAgUHNyN1xjb3B5X3RvX3N0cmVhbSgKICAgICAgICAgICAgJHNvdXJjZSwKICAgICAgICAgICAgJHNpbmssCiAgICAgICAgICAgIChzdHJsZW4oJGNvbnRlbnRMZW5ndGgpID4gMCAmJiAoaW50KSAkY29udGVudExlbmd0aCA+IDApID8gKGludCkgJGNvbnRlbnRMZW5ndGggOiAtMQogICAgICAgICk7CgogICAgICAgICRzaW5rLT5zZWVrKDApOwogICAgICAgICRzb3VyY2UtPmNsb3NlKCk7CgogICAgICAgIHJldHVybiAkc2luazsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZSBhIHJlc291cmNlIGFuZCBjaGVjayB0byBlbnN1cmUgaXQgd2FzIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5CiAgICAgKgogICAgICogQHBhcmFtIGNhbGxhYmxlICRjYWxsYmFjayBDYWxsYWJsZSB0aGF0IHJldHVybnMgc3RyZWFtIHJlc291cmNlCiAgICAgKgogICAgICogQHJldHVybiByZXNvdXJjZQogICAgICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbiBvbiBlcnJvcgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGNyZWF0ZVJlc291cmNlKGNhbGxhYmxlICRjYWxsYmFjaykKICAgIHsKICAgICAgICAkZXJyb3JzID0gbnVsbDsKICAgICAgICBzZXRfZXJyb3JfaGFuZGxlcihmdW5jdGlvbiAoJF8sICRtc2csICRmaWxlLCAkbGluZSkgdXNlICgmJGVycm9ycykgewogICAgICAgICAgICAkZXJyb3JzW10gPSBbCiAgICAgICAgICAgICAgICAnbWVzc2FnZScgPT4gJG1zZywKICAgICAgICAgICAgICAgICdmaWxlJyAgICA9PiAkZmlsZSwKICAgICAgICAgICAgICAgICdsaW5lJyAgICA9PiAkbGluZQogICAgICAgICAgICBdOwogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9KTsKCiAgICAgICAgJHJlc291cmNlID0gJGNhbGxiYWNrKCk7CiAgICAgICAgcmVzdG9yZV9lcnJvcl9oYW5kbGVyKCk7CgogICAgICAgIGlmICghJHJlc291cmNlKSB7CiAgICAgICAgICAgICRtZXNzYWdlID0gJ0Vycm9yIGNyZWF0aW5nIHJlc291cmNlOiAnOwogICAgICAgICAgICBmb3JlYWNoICgkZXJyb3JzIGFzICRlcnIpIHsKICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRlcnIgYXMgJGtleSA9PiAkdmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICAkbWVzc2FnZSAuPSAiWyRrZXldICR2YWx1ZSIgLiBQSFBfRU9MOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbih0cmltKCRtZXNzYWdlKSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc291cmNlOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gY3JlYXRlU3RyZWFtKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIGFycmF5ICRvcHRpb25zKQogICAgewogICAgICAgIHN0YXRpYyAkbWV0aG9kczsKICAgICAgICBpZiAoISRtZXRob2RzKSB7CiAgICAgICAgICAgICRtZXRob2RzID0gYXJyYXlfZmxpcChnZXRfY2xhc3NfbWV0aG9kcyhfX0NMQVNTX18pKTsKICAgICAgICB9CgogICAgICAgIC8vIEhUVFAvMS4xIHN0cmVhbXMgdXNpbmcgdGhlIFBIUCBzdHJlYW0gd3JhcHBlciByZXF1aXJlIGEKICAgICAgICAvLyBDb25uZWN0aW9uOiBjbG9zZSBoZWFkZXIKICAgICAgICBpZiAoJHJlcXVlc3QtPmdldFByb3RvY29sVmVyc2lvbigpID09ICcxLjEnCiAgICAgICAgICAgICYmICEkcmVxdWVzdC0+aGFzSGVhZGVyKCdDb25uZWN0aW9uJykKICAgICAgICApIHsKICAgICAgICAgICAgJHJlcXVlc3QgPSAkcmVxdWVzdC0+d2l0aEhlYWRlcignQ29ubmVjdGlvbicsICdjbG9zZScpOwogICAgICAgIH0KCiAgICAgICAgLy8gRW5zdXJlIFNTTCBpcyB2ZXJpZmllZCBieSBkZWZhdWx0CiAgICAgICAgaWYgKCFpc3NldCgkb3B0aW9uc1sndmVyaWZ5J10pKSB7CiAgICAgICAgICAgICRvcHRpb25zWyd2ZXJpZnknXSA9IHRydWU7CiAgICAgICAgfQoKICAgICAgICAkcGFyYW1zID0gW107CiAgICAgICAgJGNvbnRleHQgPSAkdGhpcy0+Z2V0RGVmYXVsdENvbnRleHQoJHJlcXVlc3QpOwoKICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ29uX2hlYWRlcnMnXSkgJiYgIWlzX2NhbGxhYmxlKCRvcHRpb25zWydvbl9oZWFkZXJzJ10pKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdvbl9oZWFkZXJzIG11c3QgYmUgY2FsbGFibGUnKTsKICAgICAgICB9CgogICAgICAgIGlmICghZW1wdHkoJG9wdGlvbnMpKSB7CiAgICAgICAgICAgIGZvcmVhY2ggKCRvcHRpb25zIGFzICRrZXkgPT4gJHZhbHVlKSB7CiAgICAgICAgICAgICAgICAkbWV0aG9kID0gImFkZF97JGtleX0iOwogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRtZXRob2RzWyRtZXRob2RdKSkgewogICAgICAgICAgICAgICAgICAgICR0aGlzLT57JG1ldGhvZH0oJHJlcXVlc3QsICRjb250ZXh0LCAkdmFsdWUsICRwYXJhbXMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJG9wdGlvbnNbJ3N0cmVhbV9jb250ZXh0J10pKSB7CiAgICAgICAgICAgIGlmICghaXNfYXJyYXkoJG9wdGlvbnNbJ3N0cmVhbV9jb250ZXh0J10pKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignc3RyZWFtX2NvbnRleHQgbXVzdCBiZSBhbiBhcnJheScpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRjb250ZXh0ID0gYXJyYXlfcmVwbGFjZV9yZWN1cnNpdmUoCiAgICAgICAgICAgICAgICAkY29udGV4dCwKICAgICAgICAgICAgICAgICRvcHRpb25zWydzdHJlYW1fY29udGV4dCddCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAvLyBNaWNyb3NvZnQgTlRMTSBhdXRoZW50aWNhdGlvbiBvbmx5IHN1cHBvcnRlZCB3aXRoIGN1cmwgaGFuZGxlcgogICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1snYXV0aCddKQogICAgICAgICAgICAmJiBpc19hcnJheSgkb3B0aW9uc1snYXV0aCddKQogICAgICAgICAgICAmJiBpc3NldCgkb3B0aW9uc1snYXV0aCddWzJdKQogICAgICAgICAgICAmJiAnbnRsbScgPT0gJG9wdGlvbnNbJ2F1dGgnXVsyXQogICAgICAgICkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignTWljcm9zb2Z0IE5UTE0gYXV0aGVudGljYXRpb24gb25seSBzdXBwb3J0ZWQgd2l0aCBjdXJsIGhhbmRsZXInKTsKICAgICAgICB9CgogICAgICAgICR1cmkgPSAkdGhpcy0+cmVzb2x2ZUhvc3QoJHJlcXVlc3QsICRvcHRpb25zKTsKCiAgICAgICAgJGNvbnRleHQgPSAkdGhpcy0+Y3JlYXRlUmVzb3VyY2UoCiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHVzZSAoJGNvbnRleHQsICRwYXJhbXMpIHsKICAgICAgICAgICAgICAgIHJldHVybiBzdHJlYW1fY29udGV4dF9jcmVhdGUoJGNvbnRleHQsICRwYXJhbXMpOwogICAgICAgICAgICB9CiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT5jcmVhdGVSZXNvdXJjZSgKICAgICAgICAgICAgZnVuY3Rpb24gKCkgdXNlICgkdXJpLCAmJGh0dHBfcmVzcG9uc2VfaGVhZGVyLCAkY29udGV4dCwgJG9wdGlvbnMpIHsKICAgICAgICAgICAgICAgICRyZXNvdXJjZSA9IGZvcGVuKChzdHJpbmcpICR1cmksICdyJywgbnVsbCwgJGNvbnRleHQpOwogICAgICAgICAgICAgICAgJHRoaXMtPmxhc3RIZWFkZXJzID0gJGh0dHBfcmVzcG9uc2VfaGVhZGVyOwoKICAgICAgICAgICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1sncmVhZF90aW1lb3V0J10pKSB7CiAgICAgICAgICAgICAgICAgICAgJHJlYWRUaW1lb3V0ID0gJG9wdGlvbnNbJ3JlYWRfdGltZW91dCddOwogICAgICAgICAgICAgICAgICAgICRzZWMgPSAoaW50KSAkcmVhZFRpbWVvdXQ7CiAgICAgICAgICAgICAgICAgICAgJHVzZWMgPSAoJHJlYWRUaW1lb3V0IC0gJHNlYykgKiAxMDAwMDA7CiAgICAgICAgICAgICAgICAgICAgc3RyZWFtX3NldF90aW1lb3V0KCRyZXNvdXJjZSwgJHNlYywgJHVzZWMpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiAkcmVzb3VyY2U7CiAgICAgICAgICAgIH0KICAgICAgICApOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gcmVzb2x2ZUhvc3QoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgYXJyYXkgJG9wdGlvbnMpCiAgICB7CiAgICAgICAgJHVyaSA9ICRyZXF1ZXN0LT5nZXRVcmkoKTsKCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydmb3JjZV9pcF9yZXNvbHZlJ10pICYmICFmaWx0ZXJfdmFyKCR1cmktPmdldEhvc3QoKSwgRklMVEVSX1ZBTElEQVRFX0lQKSkgewogICAgICAgICAgICBpZiAoJ3Y0JyA9PT0gJG9wdGlvbnNbJ2ZvcmNlX2lwX3Jlc29sdmUnXSkgewogICAgICAgICAgICAgICAgJHJlY29yZHMgPSBkbnNfZ2V0X3JlY29yZCgkdXJpLT5nZXRIb3N0KCksIEROU19BKTsKICAgICAgICAgICAgICAgIGlmICghaXNzZXQoJHJlY29yZHNbMF1bJ2lwJ10pKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IENvbm5lY3RFeGNlcHRpb24oc3ByaW50ZigiQ291bGQgbm90IHJlc29sdmUgSVB2NCBhZGRyZXNzIGZvciBob3N0ICclcyciLCAkdXJpLT5nZXRIb3N0KCkpLCAkcmVxdWVzdCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkdXJpID0gJHVyaS0+d2l0aEhvc3QoJHJlY29yZHNbMF1bJ2lwJ10pOwogICAgICAgICAgICB9IGVsc2VpZiAoJ3Y2JyA9PT0gJG9wdGlvbnNbJ2ZvcmNlX2lwX3Jlc29sdmUnXSkgewogICAgICAgICAgICAgICAgJHJlY29yZHMgPSBkbnNfZ2V0X3JlY29yZCgkdXJpLT5nZXRIb3N0KCksIEROU19BQUFBKTsKICAgICAgICAgICAgICAgIGlmICghaXNzZXQoJHJlY29yZHNbMF1bJ2lwdjYnXSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQ29ubmVjdEV4Y2VwdGlvbihzcHJpbnRmKCJDb3VsZCBub3QgcmVzb2x2ZSBJUHY2IGFkZHJlc3MgZm9yIGhvc3QgJyVzJyIsICR1cmktPmdldEhvc3QoKSksICRyZXF1ZXN0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICR1cmkgPSAkdXJpLT53aXRoSG9zdCgnWycgLiAkcmVjb3Jkc1swXVsnaXB2NiddIC4gJ10nKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR1cmk7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXREZWZhdWx0Q29udGV4dChSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0KQogICAgewogICAgICAgICRoZWFkZXJzID0gJyc7CiAgICAgICAgZm9yZWFjaCAoJHJlcXVlc3QtPmdldEhlYWRlcnMoKSBhcyAkbmFtZSA9PiAkdmFsdWUpIHsKICAgICAgICAgICAgZm9yZWFjaCAoJHZhbHVlIGFzICR2YWwpIHsKICAgICAgICAgICAgICAgICRoZWFkZXJzIC49ICIkbmFtZTogJHZhbFxyXG4iOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkY29udGV4dCA9IFsKICAgICAgICAgICAgJ2h0dHAnID0+IFsKICAgICAgICAgICAgICAgICdtZXRob2QnICAgICAgICAgICA9PiAkcmVxdWVzdC0+Z2V0TWV0aG9kKCksCiAgICAgICAgICAgICAgICAnaGVhZGVyJyAgICAgICAgICAgPT4gJGhlYWRlcnMsCiAgICAgICAgICAgICAgICAncHJvdG9jb2xfdmVyc2lvbicgPT4gJHJlcXVlc3QtPmdldFByb3RvY29sVmVyc2lvbigpLAogICAgICAgICAgICAgICAgJ2lnbm9yZV9lcnJvcnMnICAgID0+IHRydWUsCiAgICAgICAgICAgICAgICAnZm9sbG93X2xvY2F0aW9uJyAgPT4gMCwKICAgICAgICAgICAgXSwKICAgICAgICBdOwoKICAgICAgICAkYm9keSA9IChzdHJpbmcpICRyZXF1ZXN0LT5nZXRCb2R5KCk7CgogICAgICAgIGlmICghZW1wdHkoJGJvZHkpKSB7CiAgICAgICAgICAgICRjb250ZXh0WydodHRwJ11bJ2NvbnRlbnQnXSA9ICRib2R5OwogICAgICAgICAgICAvLyBQcmV2ZW50IHRoZSBIVFRQIGhhbmRsZXIgZnJvbSBhZGRpbmcgYSBDb250ZW50LVR5cGUgaGVhZGVyLgogICAgICAgICAgICBpZiAoISRyZXF1ZXN0LT5oYXNIZWFkZXIoJ0NvbnRlbnQtVHlwZScpKSB7CiAgICAgICAgICAgICAgICAkY29udGV4dFsnaHR0cCddWydoZWFkZXInXSAuPSAiQ29udGVudC1UeXBlOlxyXG4iOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkY29udGV4dFsnaHR0cCddWydoZWFkZXInXSA9IHJ0cmltKCRjb250ZXh0WydodHRwJ11bJ2hlYWRlciddKTsKCiAgICAgICAgcmV0dXJuICRjb250ZXh0OwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkX3Byb3h5KFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsICYkb3B0aW9ucywgJHZhbHVlLCAmJHBhcmFtcykKICAgIHsKICAgICAgICBpZiAoIWlzX2FycmF5KCR2YWx1ZSkpIHsKICAgICAgICAgICAgJG9wdGlvbnNbJ2h0dHAnXVsncHJveHknXSA9ICR2YWx1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkc2NoZW1lID0gJHJlcXVlc3QtPmdldFVyaSgpLT5nZXRTY2hlbWUoKTsKICAgICAgICAgICAgaWYgKGlzc2V0KCR2YWx1ZVskc2NoZW1lXSkpIHsKICAgICAgICAgICAgICAgIGlmICghaXNzZXQoJHZhbHVlWydubyddKQogICAgICAgICAgICAgICAgICAgIHx8ICFcR3V6emxlSHR0cFxpc19ob3N0X2luX25vcHJveHkoCiAgICAgICAgICAgICAgICAgICAgICAgICRyZXF1ZXN0LT5nZXRVcmkoKS0+Z2V0SG9zdCgpLAogICAgICAgICAgICAgICAgICAgICAgICAkdmFsdWVbJ25vJ10KICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICAgICAkb3B0aW9uc1snaHR0cCddWydwcm94eSddID0gJHZhbHVlWyRzY2hlbWVdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkX3RpbWVvdXQoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgJiRvcHRpb25zLCAkdmFsdWUsICYkcGFyYW1zKQogICAgewogICAgICAgIGlmICgkdmFsdWUgPiAwKSB7CiAgICAgICAgICAgICRvcHRpb25zWydodHRwJ11bJ3RpbWVvdXQnXSA9ICR2YWx1ZTsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBhZGRfdmVyaWZ5KFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsICYkb3B0aW9ucywgJHZhbHVlLCAmJHBhcmFtcykKICAgIHsKICAgICAgICBpZiAoJHZhbHVlID09PSB0cnVlKSB7CiAgICAgICAgICAgIC8vIFBIUCA1LjYgb3IgZ3JlYXRlciB3aWxsIGZpbmQgdGhlIHN5c3RlbSBjZXJ0IGJ5IGRlZmF1bHQuIFdoZW4KICAgICAgICAgICAgLy8gPCA1LjYsIHVzZSB0aGUgR3V6emxlIGJ1bmRsZWQgY2FjZXJ0LgogICAgICAgICAgICBpZiAoUEhQX1ZFUlNJT05fSUQgPCA1MDYwMCkgewogICAgICAgICAgICAgICAgJG9wdGlvbnNbJ3NzbCddWydjYWZpbGUnXSA9IFxHdXp6bGVIdHRwXGRlZmF1bHRfY2FfYnVuZGxlKCk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2VpZiAoaXNfc3RyaW5nKCR2YWx1ZSkpIHsKICAgICAgICAgICAgJG9wdGlvbnNbJ3NzbCddWydjYWZpbGUnXSA9ICR2YWx1ZTsKICAgICAgICAgICAgaWYgKCFmaWxlX2V4aXN0cygkdmFsdWUpKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oIlNTTCBDQSBidW5kbGUgbm90IGZvdW5kOiAkdmFsdWUiKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZWlmICgkdmFsdWUgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICRvcHRpb25zWydzc2wnXVsndmVyaWZ5X3BlZXInXSA9IGZhbHNlOwogICAgICAgICAgICAkb3B0aW9uc1snc3NsJ11bJ3ZlcmlmeV9wZWVyX25hbWUnXSA9IGZhbHNlOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0ludmFsaWQgdmVyaWZ5IHJlcXVlc3Qgb3B0aW9uJyk7CiAgICAgICAgfQoKICAgICAgICAkb3B0aW9uc1snc3NsJ11bJ3ZlcmlmeV9wZWVyJ10gPSB0cnVlOwogICAgICAgICRvcHRpb25zWydzc2wnXVsndmVyaWZ5X3BlZXJfbmFtZSddID0gdHJ1ZTsKICAgICAgICAkb3B0aW9uc1snc3NsJ11bJ2FsbG93X3NlbGZfc2lnbmVkJ10gPSBmYWxzZTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGFkZF9jZXJ0KFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsICYkb3B0aW9ucywgJHZhbHVlLCAmJHBhcmFtcykKICAgIHsKICAgICAgICBpZiAoaXNfYXJyYXkoJHZhbHVlKSkgewogICAgICAgICAgICAkb3B0aW9uc1snc3NsJ11bJ3Bhc3NwaHJhc2UnXSA9ICR2YWx1ZVsxXTsKICAgICAgICAgICAgJHZhbHVlID0gJHZhbHVlWzBdOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFmaWxlX2V4aXN0cygkdmFsdWUpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigiU1NMIGNlcnRpZmljYXRlIG5vdCBmb3VuZDogeyR2YWx1ZX0iKTsKICAgICAgICB9CgogICAgICAgICRvcHRpb25zWydzc2wnXVsnbG9jYWxfY2VydCddID0gJHZhbHVlOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkX3Byb2dyZXNzKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsICYkb3B0aW9ucywgJHZhbHVlLCAmJHBhcmFtcykKICAgIHsKICAgICAgICAkdGhpcy0+YWRkTm90aWZpY2F0aW9uKAogICAgICAgICAgICAkcGFyYW1zLAogICAgICAgICAgICBmdW5jdGlvbiAoJGNvZGUsICRhLCAkYiwgJGMsICR0cmFuc2ZlcnJlZCwgJHRvdGFsKSB1c2UgKCR2YWx1ZSkgewogICAgICAgICAgICAgICAgaWYgKCRjb2RlID09IFNUUkVBTV9OT1RJRllfUFJPR1JFU1MpIHsKICAgICAgICAgICAgICAgICAgICAkdmFsdWUoJHRvdGFsLCAkdHJhbnNmZXJyZWQsIG51bGwsIG51bGwpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGFkZF9kZWJ1ZyhSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0LCAmJG9wdGlvbnMsICR2YWx1ZSwgJiRwYXJhbXMpCiAgICB7CiAgICAgICAgaWYgKCR2YWx1ZSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgc3RhdGljICRtYXAgPSBbCiAgICAgICAgICAgIFNUUkVBTV9OT1RJRllfQ09OTkVDVCAgICAgICA9PiAnQ09OTkVDVCcsCiAgICAgICAgICAgIFNUUkVBTV9OT1RJRllfQVVUSF9SRVFVSVJFRCA9PiAnQVVUSF9SRVFVSVJFRCcsCiAgICAgICAgICAgIFNUUkVBTV9OT1RJRllfQVVUSF9SRVNVTFQgICA9PiAnQVVUSF9SRVNVTFQnLAogICAgICAgICAgICBTVFJFQU1fTk9USUZZX01JTUVfVFlQRV9JUyAgPT4gJ01JTUVfVFlQRV9JUycsCiAgICAgICAgICAgIFNUUkVBTV9OT1RJRllfRklMRV9TSVpFX0lTICA9PiAnRklMRV9TSVpFX0lTJywKICAgICAgICAgICAgU1RSRUFNX05PVElGWV9SRURJUkVDVEVEICAgID0+ICdSRURJUkVDVEVEJywKICAgICAgICAgICAgU1RSRUFNX05PVElGWV9QUk9HUkVTUyAgICAgID0+ICdQUk9HUkVTUycsCiAgICAgICAgICAgIFNUUkVBTV9OT1RJRllfRkFJTFVSRSAgICAgICA9PiAnRkFJTFVSRScsCiAgICAgICAgICAgIFNUUkVBTV9OT1RJRllfQ09NUExFVEVEICAgICA9PiAnQ09NUExFVEVEJywKICAgICAgICAgICAgU1RSRUFNX05PVElGWV9SRVNPTFZFICAgICAgID0+ICdSRVNPTFZFJywKICAgICAgICBdOwogICAgICAgIHN0YXRpYyAkYXJncyA9IFsnc2V2ZXJpdHknLCAnbWVzc2FnZScsICdtZXNzYWdlX2NvZGUnLAogICAgICAgICAgICAnYnl0ZXNfdHJhbnNmZXJyZWQnLCAnYnl0ZXNfbWF4J107CgogICAgICAgICR2YWx1ZSA9IFxHdXp6bGVIdHRwXGRlYnVnX3Jlc291cmNlKCR2YWx1ZSk7CiAgICAgICAgJGlkZW50ID0gJHJlcXVlc3QtPmdldE1ldGhvZCgpIC4gJyAnIC4gJHJlcXVlc3QtPmdldFVyaSgpLT53aXRoRnJhZ21lbnQoJycpOwogICAgICAgICR0aGlzLT5hZGROb3RpZmljYXRpb24oCiAgICAgICAgICAgICRwYXJhbXMsCiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHVzZSAoJGlkZW50LCAkdmFsdWUsICRtYXAsICRhcmdzKSB7CiAgICAgICAgICAgICAgICAkcGFzc2VkID0gZnVuY19nZXRfYXJncygpOwogICAgICAgICAgICAgICAgJGNvZGUgPSBhcnJheV9zaGlmdCgkcGFzc2VkKTsKICAgICAgICAgICAgICAgIGZwcmludGYoJHZhbHVlLCAnPCVzPiBbJXNdICcsICRpZGVudCwgJG1hcFskY29kZV0pOwogICAgICAgICAgICAgICAgZm9yZWFjaCAoYXJyYXlfZmlsdGVyKCRwYXNzZWQpIGFzICRpID0+ICR2KSB7CiAgICAgICAgICAgICAgICAgICAgZndyaXRlKCR2YWx1ZSwgJGFyZ3NbJGldIC4gJzogIicgLiAkdiAuICciICcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZndyaXRlKCR2YWx1ZSwgIlxuIik7CiAgICAgICAgICAgIH0KICAgICAgICApOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkTm90aWZpY2F0aW9uKGFycmF5ICYkcGFyYW1zLCBjYWxsYWJsZSAkbm90aWZ5KQogICAgewogICAgICAgIC8vIFdyYXAgdGhlIGV4aXN0aW5nIGZ1bmN0aW9uIGlmIG5lZWRlZC4KICAgICAgICBpZiAoIWlzc2V0KCRwYXJhbXNbJ25vdGlmaWNhdGlvbiddKSkgewogICAgICAgICAgICAkcGFyYW1zWydub3RpZmljYXRpb24nXSA9ICRub3RpZnk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHBhcmFtc1snbm90aWZpY2F0aW9uJ10gPSAkdGhpcy0+Y2FsbEFycmF5KFsKICAgICAgICAgICAgICAgICRwYXJhbXNbJ25vdGlmaWNhdGlvbiddLAogICAgICAgICAgICAgICAgJG5vdGlmeQogICAgICAgICAgICBdKTsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBjYWxsQXJyYXkoYXJyYXkgJGZ1bmN0aW9ucykKICAgIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgdXNlICgkZnVuY3Rpb25zKSB7CiAgICAgICAgICAgICRhcmdzID0gZnVuY19nZXRfYXJncygpOwogICAgICAgICAgICBmb3JlYWNoICgkZnVuY3Rpb25zIGFzICRmbikgewogICAgICAgICAgICAgICAgY2FsbF91c2VyX2Z1bmNfYXJyYXkoJGZuLCAkYXJncyk7CiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgfQp9Cg==AppDevTools/query/vendor/guzzlehttp/guzzle/src/HandlerStack.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHA7Cgp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlOwoKLyoqCiAqIENyZWF0ZXMgYSBjb21wb3NlZCBHdXp6bGUgaGFuZGxlciBmdW5jdGlvbiBieSBzdGFja2luZyBtaWRkbGV3YXJlcyBvbiB0b3Agb2YKICogYW4gSFRUUCBoYW5kbGVyIGZ1bmN0aW9uLgogKi8KY2xhc3MgSGFuZGxlclN0YWNrCnsKICAgIC8qKiBAdmFyIGNhbGxhYmxlICovCiAgICBwcml2YXRlICRoYW5kbGVyOwoKICAgIC8qKiBAdmFyIGFycmF5ICovCiAgICBwcml2YXRlICRzdGFjayA9IFtdOwoKICAgIC8qKiBAdmFyIGNhbGxhYmxlfG51bGwgKi8KICAgIHByaXZhdGUgJGNhY2hlZDsKCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBkZWZhdWx0IGhhbmRsZXIgc3RhY2sgdGhhdCBjYW4gYmUgdXNlZCBieSBjbGllbnRzLgogICAgICoKICAgICAqIFRoZSByZXR1cm5lZCBoYW5kbGVyIHdpbGwgd3JhcCB0aGUgcHJvdmlkZWQgaGFuZGxlciBvciB1c2UgdGhlIG1vc3QKICAgICAqIGFwcHJvcHJpYXRlIGRlZmF1bHQgaGFuZGxlciBmb3IgeW91ciBzeXN0ZW0uIFRoZSByZXR1cm5lZCBIYW5kbGVyU3RhY2sgaGFzCiAgICAgKiBzdXBwb3J0IGZvciBjb29raWVzLCByZWRpcmVjdHMsIEhUVFAgZXJyb3IgZXhjZXB0aW9ucywgYW5kIHByZXBhcmluZyBhIGJvZHkKICAgICAqIGJlZm9yZSBzZW5kaW5nLgogICAgICoKICAgICAqIFRoZSByZXR1cm5lZCBoYW5kbGVyIHN0YWNrIGNhbiBiZSBwYXNzZWQgdG8gYSBjbGllbnQgaW4gdGhlICJoYW5kbGVyIgogICAgICogb3B0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkaGFuZGxlciBIVFRQIGhhbmRsZXIgZnVuY3Rpb24gdG8gdXNlIHdpdGggdGhlIHN0YWNrLiBJZiBubwogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIgaXMgcHJvdmlkZWQsIHRoZSBiZXN0IGhhbmRsZXIgZm9yIHlvdXIKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW0gd2lsbCBiZSB1dGlsaXplZC4KICAgICAqCiAgICAgKiBAcmV0dXJuIEhhbmRsZXJTdGFjawogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZShjYWxsYWJsZSAkaGFuZGxlciA9IG51bGwpCiAgICB7CiAgICAgICAgJHN0YWNrID0gbmV3IHNlbGYoJGhhbmRsZXIgPzogY2hvb3NlX2hhbmRsZXIoKSk7CiAgICAgICAgJHN0YWNrLT5wdXNoKE1pZGRsZXdhcmU6Omh0dHBFcnJvcnMoKSwgJ2h0dHBfZXJyb3JzJyk7CiAgICAgICAgJHN0YWNrLT5wdXNoKE1pZGRsZXdhcmU6OnJlZGlyZWN0KCksICdhbGxvd19yZWRpcmVjdHMnKTsKICAgICAgICAkc3RhY2stPnB1c2goTWlkZGxld2FyZTo6Y29va2llcygpLCAnY29va2llcycpOwogICAgICAgICRzdGFjay0+cHVzaChNaWRkbGV3YXJlOjpwcmVwYXJlQm9keSgpLCAncHJlcGFyZV9ib2R5Jyk7CgogICAgICAgIHJldHVybiAkc3RhY2s7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGhhbmRsZXIgVW5kZXJseWluZyBIVFRQIGhhbmRsZXIuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChjYWxsYWJsZSAkaGFuZGxlciA9IG51bGwpCiAgICB7CiAgICAgICAgJHRoaXMtPmhhbmRsZXIgPSAkaGFuZGxlcjsKICAgIH0KCiAgICAvKioKICAgICAqIEludm9rZXMgdGhlIGhhbmRsZXIgc3RhY2sgYXMgYSBjb21wb3NlZCBoYW5kbGVyCiAgICAgKgogICAgICogQHBhcmFtIFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QKICAgICAqIEBwYXJhbSBhcnJheSAgICAgICAgICAgICRvcHRpb25zCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2ludm9rZShSZXF1ZXN0SW50ZXJmYWNlICRyZXF1ZXN0LCBhcnJheSAkb3B0aW9ucykKICAgIHsKICAgICAgICAkaGFuZGxlciA9ICR0aGlzLT5yZXNvbHZlKCk7CgogICAgICAgIHJldHVybiAkaGFuZGxlcigkcmVxdWVzdCwgJG9wdGlvbnMpOwogICAgfQoKICAgIC8qKgogICAgICogRHVtcHMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHN0YWNrLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkKICAgIHsKICAgICAgICAkZGVwdGggPSAwOwogICAgICAgICRzdGFjayA9IFtdOwogICAgICAgIGlmICgkdGhpcy0+aGFuZGxlcikgewogICAgICAgICAgICAkc3RhY2tbXSA9ICIwKSBIYW5kbGVyOiAiIC4gJHRoaXMtPmRlYnVnQ2FsbGFibGUoJHRoaXMtPmhhbmRsZXIpOwogICAgICAgIH0KCiAgICAgICAgJHJlc3VsdCA9ICcnOwogICAgICAgIGZvcmVhY2ggKGFycmF5X3JldmVyc2UoJHRoaXMtPnN0YWNrKSBhcyAkdHVwbGUpIHsKICAgICAgICAgICAgJGRlcHRoKys7CiAgICAgICAgICAgICRzdHIgPSAieyRkZXB0aH0pIE5hbWU6ICd7JHR1cGxlWzFdfScsICI7CiAgICAgICAgICAgICRzdHIgLj0gIkZ1bmN0aW9uOiAiIC4gJHRoaXMtPmRlYnVnQ2FsbGFibGUoJHR1cGxlWzBdKTsKICAgICAgICAgICAgJHJlc3VsdCA9ICI+IHskc3RyfVxueyRyZXN1bHR9IjsKICAgICAgICAgICAgJHN0YWNrW10gPSAkc3RyOwogICAgICAgIH0KCiAgICAgICAgZm9yZWFjaCAoYXJyYXlfa2V5cygkc3RhY2spIGFzICRrKSB7CiAgICAgICAgICAgICRyZXN1bHQgLj0gIjwgeyRzdGFja1ska119XG4iOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIEhUVFAgaGFuZGxlciB0aGF0IGFjdHVhbGx5IHJldHVybnMgYSBwcm9taXNlLgogICAgICoKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkaGFuZGxlciBBY2NlcHRzIGEgcmVxdWVzdCBhbmQgYXJyYXkgb2Ygb3B0aW9ucyBhbmQKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5zIGEgUHJvbWlzZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEhhbmRsZXIoY2FsbGFibGUgJGhhbmRsZXIpCiAgICB7CiAgICAgICAgJHRoaXMtPmhhbmRsZXIgPSAkaGFuZGxlcjsKICAgICAgICAkdGhpcy0+Y2FjaGVkID0gbnVsbDsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgYnVpbGRlciBoYXMgYSBoYW5kbGVyLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaGFzSGFuZGxlcigpCiAgICB7CiAgICAgICAgcmV0dXJuIChib29sKSAkdGhpcy0+aGFuZGxlcjsKICAgIH0KCiAgICAvKioKICAgICAqIFVuc2hpZnQgYSBtaWRkbGV3YXJlIHRvIHRoZSBib3R0b20gb2YgdGhlIHN0YWNrLgogICAgICoKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkbWlkZGxld2FyZSBNaWRkbGV3YXJlIGZ1bmN0aW9uCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgJG5hbWUgICAgICAgTmFtZSB0byByZWdpc3RlciBmb3IgdGhpcyBtaWRkbGV3YXJlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdW5zaGlmdChjYWxsYWJsZSAkbWlkZGxld2FyZSwgJG5hbWUgPSBudWxsKQogICAgewogICAgICAgIGFycmF5X3Vuc2hpZnQoJHRoaXMtPnN0YWNrLCBbJG1pZGRsZXdhcmUsICRuYW1lXSk7CiAgICAgICAgJHRoaXMtPmNhY2hlZCA9IG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBQdXNoIGEgbWlkZGxld2FyZSB0byB0aGUgdG9wIG9mIHRoZSBzdGFjay4KICAgICAqCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJG1pZGRsZXdhcmUgTWlkZGxld2FyZSBmdW5jdGlvbgogICAgICogQHBhcmFtIHN0cmluZyAgICRuYW1lICAgICAgIE5hbWUgdG8gcmVnaXN0ZXIgZm9yIHRoaXMgbWlkZGxld2FyZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHB1c2goY2FsbGFibGUgJG1pZGRsZXdhcmUsICRuYW1lID0gJycpCiAgICB7CiAgICAgICAgJHRoaXMtPnN0YWNrW10gPSBbJG1pZGRsZXdhcmUsICRuYW1lXTsKICAgICAgICAkdGhpcy0+Y2FjaGVkID0gbnVsbDsKICAgIH0KCiAgICAvKioKICAgICAqIEFkZCBhIG1pZGRsZXdhcmUgYmVmb3JlIGFub3RoZXIgbWlkZGxld2FyZSBieSBuYW1lLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgICAkZmluZE5hbWUgICBNaWRkbGV3YXJlIHRvIGZpbmQKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkbWlkZGxld2FyZSBNaWRkbGV3YXJlIGZ1bmN0aW9uCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgJHdpdGhOYW1lICAgTmFtZSB0byByZWdpc3RlciBmb3IgdGhpcyBtaWRkbGV3YXJlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYmVmb3JlKCRmaW5kTmFtZSwgY2FsbGFibGUgJG1pZGRsZXdhcmUsICR3aXRoTmFtZSA9ICcnKQogICAgewogICAgICAgICR0aGlzLT5zcGxpY2UoJGZpbmROYW1lLCAkd2l0aE5hbWUsICRtaWRkbGV3YXJlLCB0cnVlKTsKICAgIH0KCiAgICAvKioKICAgICAqIEFkZCBhIG1pZGRsZXdhcmUgYWZ0ZXIgYW5vdGhlciBtaWRkbGV3YXJlIGJ5IG5hbWUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgICRmaW5kTmFtZSAgIE1pZGRsZXdhcmUgdG8gZmluZAogICAgICogQHBhcmFtIGNhbGxhYmxlICRtaWRkbGV3YXJlIE1pZGRsZXdhcmUgZnVuY3Rpb24KICAgICAqIEBwYXJhbSBzdHJpbmcgICAkd2l0aE5hbWUgICBOYW1lIHRvIHJlZ2lzdGVyIGZvciB0aGlzIG1pZGRsZXdhcmUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZnRlcigkZmluZE5hbWUsIGNhbGxhYmxlICRtaWRkbGV3YXJlLCAkd2l0aE5hbWUgPSAnJykKICAgIHsKICAgICAgICAkdGhpcy0+c3BsaWNlKCRmaW5kTmFtZSwgJHdpdGhOYW1lLCAkbWlkZGxld2FyZSwgZmFsc2UpOwogICAgfQoKICAgIC8qKgogICAgICogUmVtb3ZlIGEgbWlkZGxld2FyZSBieSBpbnN0YW5jZSBvciBuYW1lIGZyb20gdGhlIHN0YWNrLgogICAgICoKICAgICAqIEBwYXJhbSBjYWxsYWJsZXxzdHJpbmcgJHJlbW92ZSBNaWRkbGV3YXJlIHRvIHJlbW92ZSBieSBpbnN0YW5jZSBvciBuYW1lLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVtb3ZlKCRyZW1vdmUpCiAgICB7CiAgICAgICAgJHRoaXMtPmNhY2hlZCA9IG51bGw7CiAgICAgICAgJGlkeCA9IGlzX2NhbGxhYmxlKCRyZW1vdmUpID8gMCA6IDE7CiAgICAgICAgJHRoaXMtPnN0YWNrID0gYXJyYXlfdmFsdWVzKGFycmF5X2ZpbHRlcigKICAgICAgICAgICAgJHRoaXMtPnN0YWNrLAogICAgICAgICAgICBmdW5jdGlvbiAoJHR1cGxlKSB1c2UgKCRpZHgsICRyZW1vdmUpIHsKICAgICAgICAgICAgICAgIHJldHVybiAkdHVwbGVbJGlkeF0gIT09ICRyZW1vdmU7CiAgICAgICAgICAgIH0KICAgICAgICApKTsKICAgIH0KCiAgICAvKioKICAgICAqIENvbXBvc2UgdGhlIG1pZGRsZXdhcmUgYW5kIGhhbmRsZXIgaW50byBhIHNpbmdsZSBjYWxsYWJsZSBmdW5jdGlvbi4KICAgICAqCiAgICAgKiBAcmV0dXJuIGNhbGxhYmxlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZXNvbHZlKCkKICAgIHsKICAgICAgICBpZiAoISR0aGlzLT5jYWNoZWQpIHsKICAgICAgICAgICAgaWYgKCEoJHByZXYgPSAkdGhpcy0+aGFuZGxlcikpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oJ05vIGhhbmRsZXIgaGFzIGJlZW4gc3BlY2lmaWVkJyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGZvcmVhY2ggKGFycmF5X3JldmVyc2UoJHRoaXMtPnN0YWNrKSBhcyAkZm4pIHsKICAgICAgICAgICAgICAgICRwcmV2ID0gJGZuWzBdKCRwcmV2KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHRoaXMtPmNhY2hlZCA9ICRwcmV2OwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5jYWNoZWQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gJG5hbWUKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZmluZEJ5TmFtZSgkbmFtZSkKICAgIHsKICAgICAgICBmb3JlYWNoICgkdGhpcy0+c3RhY2sgYXMgJGsgPT4gJHYpIHsKICAgICAgICAgICAgaWYgKCR2WzFdID09PSAkbmFtZSkgewogICAgICAgICAgICAgICAgcmV0dXJuICRrOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigiTWlkZGxld2FyZSBub3QgZm91bmQ6ICRuYW1lIik7CiAgICB9CgogICAgLyoqCiAgICAgKiBTcGxpY2VzIGEgZnVuY3Rpb24gaW50byB0aGUgbWlkZGxld2FyZSBsaXN0IGF0IGEgc3BlY2lmaWMgcG9zaXRpb24uCiAgICAgKgogICAgICogQHBhcmFtICAgICAgICAgICRmaW5kTmFtZQogICAgICogQHBhcmFtICAgICAgICAgICR3aXRoTmFtZQogICAgICogQHBhcmFtIGNhbGxhYmxlICRtaWRkbGV3YXJlCiAgICAgKiBAcGFyYW0gICAgICAgICAgJGJlZm9yZQogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHNwbGljZSgkZmluZE5hbWUsICR3aXRoTmFtZSwgY2FsbGFibGUgJG1pZGRsZXdhcmUsICRiZWZvcmUpCiAgICB7CiAgICAgICAgJHRoaXMtPmNhY2hlZCA9IG51bGw7CiAgICAgICAgJGlkeCA9ICR0aGlzLT5maW5kQnlOYW1lKCRmaW5kTmFtZSk7CiAgICAgICAgJHR1cGxlID0gWyRtaWRkbGV3YXJlLCAkd2l0aE5hbWVdOwoKICAgICAgICBpZiAoJGJlZm9yZSkgewogICAgICAgICAgICBpZiAoJGlkeCA9PT0gMCkgewogICAgICAgICAgICAgICAgYXJyYXlfdW5zaGlmdCgkdGhpcy0+c3RhY2ssICR0dXBsZSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkcmVwbGFjZW1lbnQgPSBbJHR1cGxlLCAkdGhpcy0+c3RhY2tbJGlkeF1dOwogICAgICAgICAgICAgICAgYXJyYXlfc3BsaWNlKCR0aGlzLT5zdGFjaywgJGlkeCwgMSwgJHJlcGxhY2VtZW50KTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZWlmICgkaWR4ID09PSBjb3VudCgkdGhpcy0+c3RhY2spIC0gMSkgewogICAgICAgICAgICAkdGhpcy0+c3RhY2tbXSA9ICR0dXBsZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkcmVwbGFjZW1lbnQgPSBbJHRoaXMtPnN0YWNrWyRpZHhdLCAkdHVwbGVdOwogICAgICAgICAgICBhcnJheV9zcGxpY2UoJHRoaXMtPnN0YWNrLCAkaWR4LCAxLCAkcmVwbGFjZW1lbnQpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFByb3ZpZGVzIGEgZGVidWcgc3RyaW5nIGZvciBhIGdpdmVuIGNhbGxhYmxlLgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheXxjYWxsYWJsZSAkZm4gRnVuY3Rpb24gdG8gd3JpdGUgYXMgYSBzdHJpbmcuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBkZWJ1Z0NhbGxhYmxlKCRmbikKICAgIHsKICAgICAgICBpZiAoaXNfc3RyaW5nKCRmbikpIHsKICAgICAgICAgICAgcmV0dXJuICJjYWxsYWJsZSh7JGZufSkiOwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzX2FycmF5KCRmbikpIHsKICAgICAgICAgICAgcmV0dXJuIGlzX3N0cmluZygkZm5bMF0pCiAgICAgICAgICAgICAgICA/ICJjYWxsYWJsZSh7JGZuWzBdfTo6eyRmblsxXX0pIgogICAgICAgICAgICAgICAgOiAiY2FsbGFibGUoWyciIC4gZ2V0X2NsYXNzKCRmblswXSkgLiAiJywgJ3skZm5bMV19J10pIjsKICAgICAgICB9CgogICAgICAgIHJldHVybiAnY2FsbGFibGUoJyAuIHNwbF9vYmplY3RfaGFzaCgkZm4pIC4gJyknOwogICAgfQp9Cg==AppDevTools/query/vendor/guzzlehttp/guzzle/src/MessageFormatter.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHA7Cgp1c2UgUHNyXEh0dHBcTWVzc2FnZVxNZXNzYWdlSW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXNwb25zZUludGVyZmFjZTsKCi8qKgogKiBGb3JtYXRzIGxvZyBtZXNzYWdlcyB1c2luZyB2YXJpYWJsZSBzdWJzdGl0dXRpb25zIGZvciByZXF1ZXN0cywgcmVzcG9uc2VzLAogKiBhbmQgb3RoZXIgdHJhbnNhY3Rpb25hbCBkYXRhLgogKgogKiBUaGUgZm9sbG93aW5nIHZhcmlhYmxlIHN1YnN0aXR1dGlvbnMgYXJlIHN1cHBvcnRlZDoKICoKICogLSB7cmVxdWVzdH06ICAgICAgICBGdWxsIEhUVFAgcmVxdWVzdCBtZXNzYWdlCiAqIC0ge3Jlc3BvbnNlfTogICAgICAgRnVsbCBIVFRQIHJlc3BvbnNlIG1lc3NhZ2UKICogLSB7dHN9OiAgICAgICAgICAgICBJU08gODYwMSBkYXRlIGluIEdNVAogKiAtIHtkYXRlX2lzb184NjAxfSAgIElTTyA4NjAxIGRhdGUgaW4gR01UCiAqIC0ge2RhdGVfY29tbW9uX2xvZ30gQXBhY2hlIGNvbW1vbiBsb2cgZGF0ZSB1c2luZyB0aGUgY29uZmlndXJlZCB0aW1lem9uZS4KICogLSB7aG9zdH06ICAgICAgICAgICBIb3N0IG9mIHRoZSByZXF1ZXN0CiAqIC0ge21ldGhvZH06ICAgICAgICAgTWV0aG9kIG9mIHRoZSByZXF1ZXN0CiAqIC0ge3VyaX06ICAgICAgICAgICAgVVJJIG9mIHRoZSByZXF1ZXN0CiAqIC0ge3ZlcnNpb259OiAgICAgICAgUHJvdG9jb2wgdmVyc2lvbgogKiAtIHt0YXJnZXR9OiAgICAgICAgIFJlcXVlc3QgdGFyZ2V0IG9mIHRoZSByZXF1ZXN0IChwYXRoICsgcXVlcnkgKyBmcmFnbWVudCkKICogLSB7aG9zdG5hbWV9OiAgICAgICBIb3N0bmFtZSBvZiB0aGUgbWFjaGluZSB0aGF0IHNlbnQgdGhlIHJlcXVlc3QKICogLSB7Y29kZX06ICAgICAgICAgICBTdGF0dXMgY29kZSBvZiB0aGUgcmVzcG9uc2UgKGlmIGF2YWlsYWJsZSkKICogLSB7cGhyYXNlfTogICAgICAgICBSZWFzb24gcGhyYXNlIG9mIHRoZSByZXNwb25zZSAgKGlmIGF2YWlsYWJsZSkKICogLSB7ZXJyb3J9OiAgICAgICAgICBBbnkgZXJyb3IgbWVzc2FnZXMgKGlmIGF2YWlsYWJsZSkKICogLSB7cmVxX2hlYWRlcl8qfTogICBSZXBsYWNlIGAqYCB3aXRoIHRoZSBsb3dlcmNhc2VkIG5hbWUgb2YgYSByZXF1ZXN0IGhlYWRlciB0byBhZGQgdG8gdGhlIG1lc3NhZ2UKICogLSB7cmVzX2hlYWRlcl8qfTogICBSZXBsYWNlIGAqYCB3aXRoIHRoZSBsb3dlcmNhc2VkIG5hbWUgb2YgYSByZXNwb25zZSBoZWFkZXIgdG8gYWRkIHRvIHRoZSBtZXNzYWdlCiAqIC0ge3JlcV9oZWFkZXJzfTogICAgUmVxdWVzdCBoZWFkZXJzCiAqIC0ge3Jlc19oZWFkZXJzfTogICAgUmVzcG9uc2UgaGVhZGVycwogKiAtIHtyZXFfYm9keX06ICAgICAgIFJlcXVlc3QgYm9keQogKiAtIHtyZXNfYm9keX06ICAgICAgIFJlc3BvbnNlIGJvZHkKICovCmNsYXNzIE1lc3NhZ2VGb3JtYXR0ZXIKewogICAgLyoqCiAgICAgKiBBcGFjaGUgQ29tbW9uIExvZyBGb3JtYXQuCiAgICAgKiBAbGluayBodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy9kb2NzLzIuNC9sb2dzLmh0bWwjY29tbW9uCiAgICAgKiBAdmFyIHN0cmluZwogICAgICovCiAgICBjb25zdCBDTEYgPSAie2hvc3RuYW1lfSB7cmVxX2hlYWRlcl9Vc2VyLUFnZW50fSAtIFt7ZGF0ZV9jb21tb25fbG9nfV0gXCJ7bWV0aG9kfSB7dGFyZ2V0fSBIVFRQL3t2ZXJzaW9ufVwiIHtjb2RlfSB7cmVzX2hlYWRlcl9Db250ZW50LUxlbmd0aH0iOwogICAgY29uc3QgREVCVUcgPSAiPj4+Pj4+Pj5cbntyZXF1ZXN0fVxuPDw8PDw8PDxcbntyZXNwb25zZX1cbi0tLS0tLS0tXG57ZXJyb3J9IjsKICAgIGNvbnN0IFNIT1JUID0gJ1t7dHN9XSAie21ldGhvZH0ge3RhcmdldH0gSFRUUC97dmVyc2lvbn0iIHtjb2RlfSc7CgogICAgLyoqIEB2YXIgc3RyaW5nIFRlbXBsYXRlIHVzZWQgdG8gZm9ybWF0IGxvZyBtZXNzYWdlcyAqLwogICAgcHJpdmF0ZSAkdGVtcGxhdGU7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0ZW1wbGF0ZSBMb2cgbWVzc2FnZSB0ZW1wbGF0ZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHRlbXBsYXRlID0gc2VsZjo6Q0xGKQogICAgewogICAgICAgICR0aGlzLT50ZW1wbGF0ZSA9ICR0ZW1wbGF0ZSA/OiBzZWxmOjpDTEY7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgZm9ybWF0dGVkIG1lc3NhZ2Ugc3RyaW5nLgogICAgICoKICAgICAqIEBwYXJhbSBSZXF1ZXN0SW50ZXJmYWNlICAkcmVxdWVzdCAgUmVxdWVzdCB0aGF0IHdhcyBzZW50CiAgICAgKiBAcGFyYW0gUmVzcG9uc2VJbnRlcmZhY2UgJHJlc3BvbnNlIFJlc3BvbnNlIHRoYXQgd2FzIHJlY2VpdmVkCiAgICAgKiBAcGFyYW0gXEV4Y2VwdGlvbiAgICAgICAgJGVycm9yICAgIEV4Y2VwdGlvbiB0aGF0IHdhcyByZWNlaXZlZAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmb3JtYXQoCiAgICAgICAgUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwKICAgICAgICBSZXNwb25zZUludGVyZmFjZSAkcmVzcG9uc2UgPSBudWxsLAogICAgICAgIFxFeGNlcHRpb24gJGVycm9yID0gbnVsbAogICAgKSB7CiAgICAgICAgJGNhY2hlID0gW107CgogICAgICAgIHJldHVybiBwcmVnX3JlcGxhY2VfY2FsbGJhY2soCiAgICAgICAgICAgICcve1xzKihbQS1aYS16X1wtXC4wLTldKylccyp9LycsCiAgICAgICAgICAgIGZ1bmN0aW9uIChhcnJheSAkbWF0Y2hlcykgdXNlICgkcmVxdWVzdCwgJHJlc3BvbnNlLCAkZXJyb3IsICYkY2FjaGUpIHsKICAgICAgICAgICAgICAgIGlmIChpc3NldCgkY2FjaGVbJG1hdGNoZXNbMV1dKSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAkY2FjaGVbJG1hdGNoZXNbMV1dOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRyZXN1bHQgPSAnJzsKICAgICAgICAgICAgICAgIHN3aXRjaCAoJG1hdGNoZXNbMV0pIHsKICAgICAgICAgICAgICAgICAgICBjYXNlICdyZXF1ZXN0JzoKICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3VsdCA9IFBzcjdcc3RyKCRyZXF1ZXN0KTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAncmVzcG9uc2UnOgogICAgICAgICAgICAgICAgICAgICAgICAkcmVzdWx0ID0gJHJlc3BvbnNlID8gUHNyN1xzdHIoJHJlc3BvbnNlKSA6ICcnOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlICdyZXFfaGVhZGVycyc6CiAgICAgICAgICAgICAgICAgICAgICAgICRyZXN1bHQgPSB0cmltKCRyZXF1ZXN0LT5nZXRNZXRob2QoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJyAnIC4gJHJlcXVlc3QtPmdldFJlcXVlc3RUYXJnZXQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJyBIVFRQLycgLiAkcmVxdWVzdC0+Z2V0UHJvdG9jb2xWZXJzaW9uKCkgLiAiXHJcbiIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4gJHRoaXMtPmhlYWRlcnMoJHJlcXVlc3QpOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlICdyZXNfaGVhZGVycyc6CiAgICAgICAgICAgICAgICAgICAgICAgICRyZXN1bHQgPSAkcmVzcG9uc2UgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ByaW50ZigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSFRUUC8lcyAlZCAlcycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3BvbnNlLT5nZXRQcm90b2NvbFZlcnNpb24oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmVzcG9uc2UtPmdldFN0YXR1c0NvZGUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmVzcG9uc2UtPmdldFJlYXNvblBocmFzZSgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIC4gIlxyXG4iIC4gJHRoaXMtPmhlYWRlcnMoJHJlc3BvbnNlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnTlVMTCc7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgJ3JlcV9ib2R5JzoKICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3VsdCA9ICRyZXF1ZXN0LT5nZXRCb2R5KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgJ3Jlc19ib2R5JzoKICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3VsdCA9ICRyZXNwb25zZSA/ICRyZXNwb25zZS0+Z2V0Qm9keSgpIDogJ05VTEwnOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlICd0cyc6CiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGF0ZV9pc29fODYwMSc6CiAgICAgICAgICAgICAgICAgICAgICAgICRyZXN1bHQgPSBnbWRhdGUoJ2MnKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZGF0ZV9jb21tb25fbG9nJzoKICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3VsdCA9IGRhdGUoJ2QvTS9ZOkg6aTpzIE8nKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAnbWV0aG9kJzoKICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3VsdCA9ICRyZXF1ZXN0LT5nZXRNZXRob2QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAndmVyc2lvbic6CiAgICAgICAgICAgICAgICAgICAgICAgICRyZXN1bHQgPSAkcmVxdWVzdC0+Z2V0UHJvdG9jb2xWZXJzaW9uKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgJ3VyaSc6CiAgICAgICAgICAgICAgICAgICAgY2FzZSAndXJsJzoKICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3VsdCA9ICRyZXF1ZXN0LT5nZXRVcmkoKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAndGFyZ2V0JzoKICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3VsdCA9ICRyZXF1ZXN0LT5nZXRSZXF1ZXN0VGFyZ2V0KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgJ3JlcV92ZXJzaW9uJzoKICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3VsdCA9ICRyZXF1ZXN0LT5nZXRQcm90b2NvbFZlcnNpb24oKTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAncmVzX3ZlcnNpb24nOgogICAgICAgICAgICAgICAgICAgICAgICAkcmVzdWx0ID0gJHJlc3BvbnNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICRyZXNwb25zZS0+Z2V0UHJvdG9jb2xWZXJzaW9uKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ05VTEwnOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlICdob3N0JzoKICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3VsdCA9ICRyZXF1ZXN0LT5nZXRIZWFkZXJMaW5lKCdIb3N0Jyk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgJ2hvc3RuYW1lJzoKICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3VsdCA9IGdldGhvc3RuYW1lKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgJ2NvZGUnOgogICAgICAgICAgICAgICAgICAgICAgICAkcmVzdWx0ID0gJHJlc3BvbnNlID8gJHJlc3BvbnNlLT5nZXRTdGF0dXNDb2RlKCkgOiAnTlVMTCc7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgJ3BocmFzZSc6CiAgICAgICAgICAgICAgICAgICAgICAgICRyZXN1bHQgPSAkcmVzcG9uc2UgPyAkcmVzcG9uc2UtPmdldFJlYXNvblBocmFzZSgpIDogJ05VTEwnOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlICdlcnJvcic6CiAgICAgICAgICAgICAgICAgICAgICAgICRyZXN1bHQgPSAkZXJyb3IgPyAkZXJyb3ItPmdldE1lc3NhZ2UoKSA6ICdOVUxMJzsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlIHByZWZpeGVkIGR5bmFtaWMgaGVhZGVycwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RycG9zKCRtYXRjaGVzWzFdLCAncmVxX2hlYWRlcl8nKSA9PT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3VsdCA9ICRyZXF1ZXN0LT5nZXRIZWFkZXJMaW5lKHN1YnN0cigkbWF0Y2hlc1sxXSwgMTEpKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKHN0cnBvcygkbWF0Y2hlc1sxXSwgJ3Jlc19oZWFkZXJfJykgPT09IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZXN1bHQgPSAkcmVzcG9uc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICRyZXNwb25zZS0+Z2V0SGVhZGVyTGluZShzdWJzdHIoJG1hdGNoZXNbMV0sIDExKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdOVUxMJzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRjYWNoZVskbWF0Y2hlc1sxXV0gPSAkcmVzdWx0OwogICAgICAgICAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICR0aGlzLT50ZW1wbGF0ZQogICAgICAgICk7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBoZWFkZXJzKE1lc3NhZ2VJbnRlcmZhY2UgJG1lc3NhZ2UpCiAgICB7CiAgICAgICAgJHJlc3VsdCA9ICcnOwogICAgICAgIGZvcmVhY2ggKCRtZXNzYWdlLT5nZXRIZWFkZXJzKCkgYXMgJG5hbWUgPT4gJHZhbHVlcykgewogICAgICAgICAgICAkcmVzdWx0IC49ICRuYW1lIC4gJzogJyAuIGltcGxvZGUoJywgJywgJHZhbHVlcykgLiAiXHJcbiI7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdHJpbSgkcmVzdWx0KTsKICAgIH0KfQo=AppDevTools/query/vendor/guzzlehttp/guzzle/src/Middleware.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHA7Cgp1c2UgR3V6emxlSHR0cFxDb29raWVcQ29va2llSmFySW50ZXJmYWNlOwp1c2UgR3V6emxlSHR0cFxFeGNlcHRpb25cUmVxdWVzdEV4Y2VwdGlvbjsKdXNlIEd1enpsZUh0dHBcUHJvbWlzZVxSZWplY3RlZFByb21pc2U7CnVzZSBHdXp6bGVIdHRwXFBzcjc7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlc3BvbnNlSW50ZXJmYWNlOwp1c2UgUHNyXExvZ1xMb2dnZXJJbnRlcmZhY2U7CnVzZSBQc3JcTG9nXExvZ0xldmVsOwoKLyoqCiAqIEZ1bmN0aW9ucyB1c2VkIHRvIGNyZWF0ZSBhbmQgd3JhcCBoYW5kbGVycyB3aXRoIGhhbmRsZXIgbWlkZGxld2FyZS4KICovCmZpbmFsIGNsYXNzIE1pZGRsZXdhcmUKewogICAgLyoqCiAgICAgKiBNaWRkbGV3YXJlIHRoYXQgYWRkcyBjb29raWVzIHRvIHJlcXVlc3RzLgogICAgICoKICAgICAqIFRoZSBvcHRpb25zIGFycmF5IG11c3QgYmUgc2V0IHRvIGEgQ29va2llSmFySW50ZXJmYWNlIGluIG9yZGVyIHRvIHVzZQogICAgICogY29va2llcy4gVGhpcyBpcyB0eXBpY2FsbHkgaGFuZGxlZCBmb3IgeW91IGJ5IGEgY2xpZW50LgogICAgICoKICAgICAqIEByZXR1cm4gY2FsbGFibGUgUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyB0aGUgbmV4dCBoYW5kbGVyLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNvb2tpZXMoKQogICAgewogICAgICAgIHJldHVybiBmdW5jdGlvbiAoY2FsbGFibGUgJGhhbmRsZXIpIHsKICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgkcmVxdWVzdCwgYXJyYXkgJG9wdGlvbnMpIHVzZSAoJGhhbmRsZXIpIHsKICAgICAgICAgICAgICAgIGlmIChlbXB0eSgkb3B0aW9uc1snY29va2llcyddKSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiAkaGFuZGxlcigkcmVxdWVzdCwgJG9wdGlvbnMpOwogICAgICAgICAgICAgICAgfSBlbHNlaWYgKCEoJG9wdGlvbnNbJ2Nvb2tpZXMnXSBpbnN0YW5jZW9mIENvb2tpZUphckludGVyZmFjZSkpIHsKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignY29va2llcyBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIEd1enpsZUh0dHBcQ29va2llXENvb2tpZUphckludGVyZmFjZScpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJGNvb2tpZUphciA9ICRvcHRpb25zWydjb29raWVzJ107CiAgICAgICAgICAgICAgICAkcmVxdWVzdCA9ICRjb29raWVKYXItPndpdGhDb29raWVIZWFkZXIoJHJlcXVlc3QpOwogICAgICAgICAgICAgICAgcmV0dXJuICRoYW5kbGVyKCRyZXF1ZXN0LCAkb3B0aW9ucykKICAgICAgICAgICAgICAgICAgICAtPnRoZW4oCiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgkcmVzcG9uc2UpIHVzZSAoJGNvb2tpZUphciwgJHJlcXVlc3QpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjb29raWVKYXItPmV4dHJhY3RDb29raWVzKCRyZXF1ZXN0LCAkcmVzcG9uc2UpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRyZXNwb25zZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfTsKICAgICAgICB9OwogICAgfQoKICAgIC8qKgogICAgICogTWlkZGxld2FyZSB0aGF0IHRocm93cyBleGNlcHRpb25zIGZvciA0eHggb3IgNXh4IHJlc3BvbnNlcyB3aGVuIHRoZQogICAgICogImh0dHBfZXJyb3IiIHJlcXVlc3Qgb3B0aW9uIGlzIHNldCB0byB0cnVlLgogICAgICoKICAgICAqIEByZXR1cm4gY2FsbGFibGUgUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyB0aGUgbmV4dCBoYW5kbGVyLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGh0dHBFcnJvcnMoKQogICAgewogICAgICAgIHJldHVybiBmdW5jdGlvbiAoY2FsbGFibGUgJGhhbmRsZXIpIHsKICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgkcmVxdWVzdCwgYXJyYXkgJG9wdGlvbnMpIHVzZSAoJGhhbmRsZXIpIHsKICAgICAgICAgICAgICAgIGlmIChlbXB0eSgkb3B0aW9uc1snaHR0cF9lcnJvcnMnXSkpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJGhhbmRsZXIoJHJlcXVlc3QsICRvcHRpb25zKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJldHVybiAkaGFuZGxlcigkcmVxdWVzdCwgJG9wdGlvbnMpLT50aGVuKAogICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChSZXNwb25zZUludGVyZmFjZSAkcmVzcG9uc2UpIHVzZSAoJHJlcXVlc3QsICRoYW5kbGVyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRjb2RlID0gJHJlc3BvbnNlLT5nZXRTdGF0dXNDb2RlKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkY29kZSA8IDQwMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRyZXNwb25zZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBSZXF1ZXN0RXhjZXB0aW9uOjpjcmVhdGUoJHJlcXVlc3QsICRyZXNwb25zZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfTsKICAgICAgICB9OwogICAgfQoKICAgIC8qKgogICAgICogTWlkZGxld2FyZSB0aGF0IHB1c2hlcyBoaXN0b3J5IGRhdGEgdG8gYW4gQXJyYXlBY2Nlc3MgY29udGFpbmVyLgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheXxcQXJyYXlBY2Nlc3MgJGNvbnRhaW5lciBDb250YWluZXIgdG8gaG9sZCB0aGUgaGlzdG9yeSAoYnkgcmVmZXJlbmNlKS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGNhbGxhYmxlIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgdGhlIG5leHQgaGFuZGxlci4KICAgICAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBpZiBjb250YWluZXIgaXMgbm90IGFuIGFycmF5IG9yIEFycmF5QWNjZXNzLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGhpc3RvcnkoJiRjb250YWluZXIpCiAgICB7CiAgICAgICAgaWYgKCFpc19hcnJheSgkY29udGFpbmVyKSAmJiAhJGNvbnRhaW5lciBpbnN0YW5jZW9mIFxBcnJheUFjY2VzcykgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignaGlzdG9yeSBjb250YWluZXIgbXVzdCBiZSBhbiBhcnJheSBvciBvYmplY3QgaW1wbGVtZW50aW5nIEFycmF5QWNjZXNzJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNhbGxhYmxlICRoYW5kbGVyKSB1c2UgKCYkY29udGFpbmVyKSB7CiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoJHJlcXVlc3QsIGFycmF5ICRvcHRpb25zKSB1c2UgKCRoYW5kbGVyLCAmJGNvbnRhaW5lcikgewogICAgICAgICAgICAgICAgcmV0dXJuICRoYW5kbGVyKCRyZXF1ZXN0LCAkb3B0aW9ucyktPnRoZW4oCiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gKCR2YWx1ZSkgdXNlICgkcmVxdWVzdCwgJiRjb250YWluZXIsICRvcHRpb25zKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRjb250YWluZXJbXSA9IFsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZXF1ZXN0JyAgPT4gJHJlcXVlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmVzcG9uc2UnID0+ICR2YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlcnJvcicgICAgPT4gbnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvcHRpb25zJyAgPT4gJG9wdGlvbnMKICAgICAgICAgICAgICAgICAgICAgICAgXTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICR2YWx1ZTsKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgkcmVhc29uKSB1c2UgKCRyZXF1ZXN0LCAmJGNvbnRhaW5lciwgJG9wdGlvbnMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGNvbnRhaW5lcltdID0gWwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JlcXVlc3QnICA9PiAkcmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZXNwb25zZScgPT4gbnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlcnJvcicgICAgPT4gJHJlYXNvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvcHRpb25zJyAgPT4gJG9wdGlvbnMKICAgICAgICAgICAgICAgICAgICAgICAgXTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxHdXp6bGVIdHRwXFByb21pc2VccmVqZWN0aW9uX2ZvcigkcmVhc29uKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9OwogICAgICAgIH07CiAgICB9CgogICAgLyoqCiAgICAgKiBNaWRkbGV3YXJlIHRoYXQgaW52b2tlcyBhIGNhbGxiYWNrIGJlZm9yZSBhbmQgYWZ0ZXIgc2VuZGluZyBhIHJlcXVlc3QuCiAgICAgKgogICAgICogVGhlIHByb3ZpZGVkIGxpc3RlbmVyIGNhbm5vdCBtb2RpZnkgb3IgYWx0ZXIgdGhlIHJlc3BvbnNlLiBJdCBzaW1wbHkKICAgICAqICJ0YXBzIiBpbnRvIHRoZSBjaGFpbiB0byBiZSBub3RpZmllZCBiZWZvcmUgcmV0dXJuaW5nIHRoZSBwcm9taXNlLiBUaGUKICAgICAqIGJlZm9yZSBsaXN0ZW5lciBhY2NlcHRzIGEgcmVxdWVzdCBhbmQgb3B0aW9ucyBhcnJheSwgYW5kIHRoZSBhZnRlcgogICAgICogbGlzdGVuZXIgYWNjZXB0cyBhIHJlcXVlc3QsIG9wdGlvbnMgYXJyYXksIGFuZCByZXNwb25zZSBwcm9taXNlLgogICAgICoKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkYmVmb3JlIEZ1bmN0aW9uIHRvIGludm9rZSBiZWZvcmUgZm9yd2FyZGluZyB0aGUgcmVxdWVzdC4KICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkYWZ0ZXIgIEZ1bmN0aW9uIGludm9rZWQgYWZ0ZXIgZm9yd2FyZGluZy4KICAgICAqCiAgICAgKiBAcmV0dXJuIGNhbGxhYmxlIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgdGhlIG5leHQgaGFuZGxlci4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB0YXAoY2FsbGFibGUgJGJlZm9yZSA9IG51bGwsIGNhbGxhYmxlICRhZnRlciA9IG51bGwpCiAgICB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjYWxsYWJsZSAkaGFuZGxlcikgdXNlICgkYmVmb3JlLCAkYWZ0ZXIpIHsKICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgkcmVxdWVzdCwgYXJyYXkgJG9wdGlvbnMpIHVzZSAoJGhhbmRsZXIsICRiZWZvcmUsICRhZnRlcikgewogICAgICAgICAgICAgICAgaWYgKCRiZWZvcmUpIHsKICAgICAgICAgICAgICAgICAgICAkYmVmb3JlKCRyZXF1ZXN0LCAkb3B0aW9ucyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkcmVzcG9uc2UgPSAkaGFuZGxlcigkcmVxdWVzdCwgJG9wdGlvbnMpOwogICAgICAgICAgICAgICAgaWYgKCRhZnRlcikgewogICAgICAgICAgICAgICAgICAgICRhZnRlcigkcmVxdWVzdCwgJG9wdGlvbnMsICRyZXNwb25zZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICByZXR1cm4gJHJlc3BvbnNlOwogICAgICAgICAgICB9OwogICAgICAgIH07CiAgICB9CgogICAgLyoqCiAgICAgKiBNaWRkbGV3YXJlIHRoYXQgaGFuZGxlcyByZXF1ZXN0IHJlZGlyZWN0cy4KICAgICAqCiAgICAgKiBAcmV0dXJuIGNhbGxhYmxlIFJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgdGhlIG5leHQgaGFuZGxlci4KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZWRpcmVjdCgpCiAgICB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjYWxsYWJsZSAkaGFuZGxlcikgewogICAgICAgICAgICByZXR1cm4gbmV3IFJlZGlyZWN0TWlkZGxld2FyZSgkaGFuZGxlcik7CiAgICAgICAgfTsKICAgIH0KCiAgICAvKioKICAgICAqIE1pZGRsZXdhcmUgdGhhdCByZXRyaWVzIHJlcXVlc3RzIGJhc2VkIG9uIHRoZSBib29sZWFuIHJlc3VsdCBvZgogICAgICogaW52b2tpbmcgdGhlIHByb3ZpZGVkICJkZWNpZGVyIiBmdW5jdGlvbi4KICAgICAqCiAgICAgKiBJZiBubyBkZWxheSBmdW5jdGlvbiBpcyBwcm92aWRlZCwgYSBzaW1wbGUgaW1wbGVtZW50YXRpb24gb2YgZXhwb25lbnRpYWwKICAgICAqIGJhY2tvZmYgd2lsbCBiZSB1dGlsaXplZC4KICAgICAqCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGRlY2lkZXIgRnVuY3Rpb24gdGhhdCBhY2NlcHRzIHRoZSBudW1iZXIgb2YgcmV0cmllcywKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBhIHJlcXVlc3QsIFtyZXNwb25zZV0sIGFuZCBbZXhjZXB0aW9uXSBhbmQKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5zIHRydWUgaWYgdGhlIHJlcXVlc3QgaXMgdG8gYmUgcmV0cmllZC4KICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkZGVsYXkgICBGdW5jdGlvbiB0aGF0IGFjY2VwdHMgdGhlIG51bWJlciBvZiByZXRyaWVzIGFuZAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybnMgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgdG8gZGVsYXkuCiAgICAgKgogICAgICogQHJldHVybiBjYWxsYWJsZSBSZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIHRoZSBuZXh0IGhhbmRsZXIuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmV0cnkoY2FsbGFibGUgJGRlY2lkZXIsIGNhbGxhYmxlICRkZWxheSA9IG51bGwpCiAgICB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjYWxsYWJsZSAkaGFuZGxlcikgdXNlICgkZGVjaWRlciwgJGRlbGF5KSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgUmV0cnlNaWRkbGV3YXJlKCRkZWNpZGVyLCAkaGFuZGxlciwgJGRlbGF5KTsKICAgICAgICB9OwogICAgfQoKICAgIC8qKgogICAgICogTWlkZGxld2FyZSB0aGF0IGxvZ3MgcmVxdWVzdHMsIHJlc3BvbnNlcywgYW5kIGVycm9ycyB1c2luZyBhIG1lc3NhZ2UKICAgICAqIGZvcm1hdHRlci4KICAgICAqCiAgICAgKiBAcGFyYW0gTG9nZ2VySW50ZXJmYWNlICAkbG9nZ2VyIExvZ3MgbWVzc2FnZXMuCiAgICAgKiBAcGFyYW0gTWVzc2FnZUZvcm1hdHRlciAkZm9ybWF0dGVyIEZvcm1hdHRlciB1c2VkIHRvIGNyZWF0ZSBtZXNzYWdlIHN0cmluZ3MuCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgICAgICAkbG9nTGV2ZWwgTGV2ZWwgYXQgd2hpY2ggdG8gbG9nIHJlcXVlc3RzLgogICAgICoKICAgICAqIEByZXR1cm4gY2FsbGFibGUgUmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyB0aGUgbmV4dCBoYW5kbGVyLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGxvZyhMb2dnZXJJbnRlcmZhY2UgJGxvZ2dlciwgTWVzc2FnZUZvcm1hdHRlciAkZm9ybWF0dGVyLCAkbG9nTGV2ZWwgPSBMb2dMZXZlbDo6SU5GTykKICAgIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGNhbGxhYmxlICRoYW5kbGVyKSB1c2UgKCRsb2dnZXIsICRmb3JtYXR0ZXIsICRsb2dMZXZlbCkgewogICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCRyZXF1ZXN0LCBhcnJheSAkb3B0aW9ucykgdXNlICgkaGFuZGxlciwgJGxvZ2dlciwgJGZvcm1hdHRlciwgJGxvZ0xldmVsKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJGhhbmRsZXIoJHJlcXVlc3QsICRvcHRpb25zKS0+dGhlbigKICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiAoJHJlc3BvbnNlKSB1c2UgKCRsb2dnZXIsICRyZXF1ZXN0LCAkZm9ybWF0dGVyLCAkbG9nTGV2ZWwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJG1lc3NhZ2UgPSAkZm9ybWF0dGVyLT5mb3JtYXQoJHJlcXVlc3QsICRyZXNwb25zZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICRsb2dnZXItPmxvZygkbG9nTGV2ZWwsICRtZXNzYWdlKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRyZXNwb25zZTsKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgkcmVhc29uKSB1c2UgKCRsb2dnZXIsICRyZXF1ZXN0LCAkZm9ybWF0dGVyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRyZXNwb25zZSA9ICRyZWFzb24gaW5zdGFuY2VvZiBSZXF1ZXN0RXhjZXB0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICRyZWFzb24tPmdldFJlc3BvbnNlKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbDsKICAgICAgICAgICAgICAgICAgICAgICAgJG1lc3NhZ2UgPSAkZm9ybWF0dGVyLT5mb3JtYXQoJHJlcXVlc3QsICRyZXNwb25zZSwgJHJlYXNvbik7CiAgICAgICAgICAgICAgICAgICAgICAgICRsb2dnZXItPm5vdGljZSgkbWVzc2FnZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcR3V6emxlSHR0cFxQcm9taXNlXHJlamVjdGlvbl9mb3IoJHJlYXNvbik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfTsKICAgICAgICB9OwogICAgfQoKICAgIC8qKgogICAgICogVGhpcyBtaWRkbGV3YXJlIGFkZHMgYSBkZWZhdWx0IGNvbnRlbnQtdHlwZSBpZiBwb3NzaWJsZSwgYSBkZWZhdWx0CiAgICAgKiBjb250ZW50LWxlbmd0aCBvciB0cmFuc2Zlci1lbmNvZGluZyBoZWFkZXIsIGFuZCB0aGUgZXhwZWN0IGhlYWRlci4KICAgICAqCiAgICAgKiBAcmV0dXJuIGNhbGxhYmxlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcHJlcGFyZUJvZHkoKQogICAgewogICAgICAgIHJldHVybiBmdW5jdGlvbiAoY2FsbGFibGUgJGhhbmRsZXIpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBQcmVwYXJlQm9keU1pZGRsZXdhcmUoJGhhbmRsZXIpOwogICAgICAgIH07CiAgICB9CgogICAgLyoqCiAgICAgKiBNaWRkbGV3YXJlIHRoYXQgYXBwbGllcyBhIG1hcCBmdW5jdGlvbiB0byB0aGUgcmVxdWVzdCBiZWZvcmUgcGFzc2luZyB0bwogICAgICogdGhlIG5leHQgaGFuZGxlci4KICAgICAqCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGZuIEZ1bmN0aW9uIHRoYXQgYWNjZXB0cyBhIFJlcXVlc3RJbnRlcmZhY2UgYW5kIHJldHVybnMKICAgICAqICAgICAgICAgICAgICAgICAgICAgYSBSZXF1ZXN0SW50ZXJmYWNlLgogICAgICogQHJldHVybiBjYWxsYWJsZQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG1hcFJlcXVlc3QoY2FsbGFibGUgJGZuKQogICAgewogICAgICAgIHJldHVybiBmdW5jdGlvbiAoY2FsbGFibGUgJGhhbmRsZXIpIHVzZSAoJGZuKSB7CiAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoJHJlcXVlc3QsIGFycmF5ICRvcHRpb25zKSB1c2UgKCRoYW5kbGVyLCAkZm4pIHsKICAgICAgICAgICAgICAgIHJldHVybiAkaGFuZGxlcigkZm4oJHJlcXVlc3QpLCAkb3B0aW9ucyk7CiAgICAgICAgICAgIH07CiAgICAgICAgfTsKICAgIH0KCiAgICAvKioKICAgICAqIE1pZGRsZXdhcmUgdGhhdCBhcHBsaWVzIGEgbWFwIGZ1bmN0aW9uIHRvIHRoZSByZXNvbHZlZCBwcm9taXNlJ3MKICAgICAqIHJlc3BvbnNlLgogICAgICoKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkZm4gRnVuY3Rpb24gdGhhdCBhY2NlcHRzIGEgUmVzcG9uc2VJbnRlcmZhY2UgYW5kCiAgICAgKiAgICAgICAgICAgICAgICAgICAgIHJldHVybnMgYSBSZXNwb25zZUludGVyZmFjZS4KICAgICAqIEByZXR1cm4gY2FsbGFibGUKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBtYXBSZXNwb25zZShjYWxsYWJsZSAkZm4pCiAgICB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChjYWxsYWJsZSAkaGFuZGxlcikgdXNlICgkZm4pIHsKICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgkcmVxdWVzdCwgYXJyYXkgJG9wdGlvbnMpIHVzZSAoJGhhbmRsZXIsICRmbikgewogICAgICAgICAgICAgICAgcmV0dXJuICRoYW5kbGVyKCRyZXF1ZXN0LCAkb3B0aW9ucyktPnRoZW4oJGZuKTsKICAgICAgICAgICAgfTsKICAgICAgICB9OwogICAgfQp9Cg==AppDevTools/query/vendor/guzzlehttp/guzzle/src/Pool.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHA7Cgp1c2UgR3V6emxlSHR0cFxQcm9taXNlXFByb21pc29ySW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlOwp1c2UgR3V6emxlSHR0cFxQcm9taXNlXEVhY2hQcm9taXNlOwoKLyoqCiAqIFNlbmRzIGFuZCBpdGVyYXRvciBvZiByZXF1ZXN0cyBjb25jdXJyZW50bHkgdXNpbmcgYSBjYXBwZWQgcG9vbCBzaXplLgogKgogKiBUaGUgcG9vbCB3aWxsIHJlYWQgZnJvbSBhbiBpdGVyYXRvciB1bnRpbCBpdCBpcyBjYW5jZWxsZWQgb3IgdW50aWwgdGhlCiAqIGl0ZXJhdG9yIGlzIGNvbnN1bWVkLiBXaGVuIGEgcmVxdWVzdCBpcyB5aWVsZGVkLCB0aGUgcmVxdWVzdCBpcyBzZW50IGFmdGVyCiAqIGFwcGx5aW5nIHRoZSAicmVxdWVzdF9vcHRpb25zIiByZXF1ZXN0IG9wdGlvbnMgKGlmIHByb3ZpZGVkIGluIHRoZSBjdG9yKS4KICoKICogV2hlbiBhIGZ1bmN0aW9uIGlzIHlpZWxkZWQgYnkgdGhlIGl0ZXJhdG9yLCB0aGUgZnVuY3Rpb24gaXMgcHJvdmlkZWQgdGhlCiAqICJyZXF1ZXN0X29wdGlvbnMiIGFycmF5IHRoYXQgc2hvdWxkIGJlIG1lcmdlZCBvbiB0b3Agb2YgYW55IGV4aXN0aW5nCiAqIG9wdGlvbnMsIGFuZCB0aGUgZnVuY3Rpb24gTVVTVCB0aGVuIHJldHVybiBhIHdhaXQtYWJsZSBwcm9taXNlLgogKi8KY2xhc3MgUG9vbCBpbXBsZW1lbnRzIFByb21pc29ySW50ZXJmYWNlCnsKICAgIC8qKiBAdmFyIEVhY2hQcm9taXNlICovCiAgICBwcml2YXRlICRlYWNoOwoKICAgIC8qKgogICAgICogQHBhcmFtIENsaWVudEludGVyZmFjZSAkY2xpZW50ICAgQ2xpZW50IHVzZWQgdG8gc2VuZCB0aGUgcmVxdWVzdHMuCiAgICAgKiBAcGFyYW0gYXJyYXl8XEl0ZXJhdG9yICRyZXF1ZXN0cyBSZXF1ZXN0cyBvciBmdW5jdGlvbnMgdGhhdCByZXR1cm4KICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RzIHRvIHNlbmQgY29uY3VycmVudGx5LgogICAgICogQHBhcmFtIGFycmF5ICAgICAgICAgICAkY29uZmlnICAgQXNzb2NpYXRpdmUgYXJyYXkgb2Ygb3B0aW9ucwogICAgICogICAgIC0gY29uY3VycmVuY3k6IChpbnQpIE1heGltdW0gbnVtYmVyIG9mIHJlcXVlc3RzIHRvIHNlbmQgY29uY3VycmVudGx5CiAgICAgKiAgICAgLSBvcHRpb25zOiBBcnJheSBvZiByZXF1ZXN0IG9wdGlvbnMgdG8gYXBwbHkgdG8gZWFjaCByZXF1ZXN0LgogICAgICogICAgIC0gZnVsZmlsbGVkOiAoY2FsbGFibGUpIEZ1bmN0aW9uIHRvIGludm9rZSB3aGVuIGEgcmVxdWVzdCBjb21wbGV0ZXMuCiAgICAgKiAgICAgLSByZWplY3RlZDogKGNhbGxhYmxlKSBGdW5jdGlvbiB0byBpbnZva2Ugd2hlbiBhIHJlcXVlc3QgaXMgcmVqZWN0ZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgKICAgICAgICBDbGllbnRJbnRlcmZhY2UgJGNsaWVudCwKICAgICAgICAkcmVxdWVzdHMsCiAgICAgICAgYXJyYXkgJGNvbmZpZyA9IFtdCiAgICApIHsKICAgICAgICAvLyBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KICAgICAgICBpZiAoaXNzZXQoJGNvbmZpZ1sncG9vbF9zaXplJ10pKSB7CiAgICAgICAgICAgICRjb25maWdbJ2NvbmN1cnJlbmN5J10gPSAkY29uZmlnWydwb29sX3NpemUnXTsKICAgICAgICB9IGVsc2VpZiAoIWlzc2V0KCRjb25maWdbJ2NvbmN1cnJlbmN5J10pKSB7CiAgICAgICAgICAgICRjb25maWdbJ2NvbmN1cnJlbmN5J10gPSAyNTsKICAgICAgICB9CgogICAgICAgIGlmIChpc3NldCgkY29uZmlnWydvcHRpb25zJ10pKSB7CiAgICAgICAgICAgICRvcHRzID0gJGNvbmZpZ1snb3B0aW9ucyddOwogICAgICAgICAgICB1bnNldCgkY29uZmlnWydvcHRpb25zJ10pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRvcHRzID0gW107CiAgICAgICAgfQoKICAgICAgICAkaXRlcmFibGUgPSBcR3V6emxlSHR0cFxQcm9taXNlXGl0ZXJfZm9yKCRyZXF1ZXN0cyk7CiAgICAgICAgJHJlcXVlc3RzID0gZnVuY3Rpb24gKCkgdXNlICgkaXRlcmFibGUsICRjbGllbnQsICRvcHRzKSB7CiAgICAgICAgICAgIGZvcmVhY2ggKCRpdGVyYWJsZSBhcyAka2V5ID0+ICRyZm4pIHsKICAgICAgICAgICAgICAgIGlmICgkcmZuIGluc3RhbmNlb2YgUmVxdWVzdEludGVyZmFjZSkgewogICAgICAgICAgICAgICAgICAgIHlpZWxkICRrZXkgPT4gJGNsaWVudC0+c2VuZEFzeW5jKCRyZm4sICRvcHRzKTsKICAgICAgICAgICAgICAgIH0gZWxzZWlmIChpc19jYWxsYWJsZSgkcmZuKSkgewogICAgICAgICAgICAgICAgICAgIHlpZWxkICRrZXkgPT4gJHJmbigkb3B0cyk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdFYWNoIHZhbHVlIHlpZWxkZWQgYnkgJwogICAgICAgICAgICAgICAgICAgICAgICAuICd0aGUgaXRlcmF0b3IgbXVzdCBiZSBhIFBzcjdcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2UgJwogICAgICAgICAgICAgICAgICAgICAgICAuICdvciBhIGNhbGxhYmxlIHRoYXQgcmV0dXJucyBhIHByb21pc2UgdGhhdCBmdWxmaWxscyAnCiAgICAgICAgICAgICAgICAgICAgICAgIC4gJ3dpdGggYSBQc3I3XE1lc3NhZ2VcSHR0cFxSZXNwb25zZUludGVyZmFjZSBvYmplY3QuJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9OwoKICAgICAgICAkdGhpcy0+ZWFjaCA9IG5ldyBFYWNoUHJvbWlzZSgkcmVxdWVzdHMoKSwgJGNvbmZpZyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHByb21pc2UoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZWFjaC0+cHJvbWlzZSgpOwogICAgfQoKICAgIC8qKgogICAgICogU2VuZHMgbXVsdGlwbGUgcmVxdWVzdHMgY29uY3VycmVudGx5IGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIHJlc3BvbnNlcwogICAgICogYW5kIGV4Y2VwdGlvbnMgdGhhdCB1c2VzIHRoZSBzYW1lIG9yZGVyaW5nIGFzIHRoZSBwcm92aWRlZCByZXF1ZXN0cy4KICAgICAqCiAgICAgKiBJTVBPUlRBTlQ6IFRoaXMgbWV0aG9kIGtlZXBzIGV2ZXJ5IHJlcXVlc3QgYW5kIHJlc3BvbnNlIGluIG1lbW9yeSwgYW5kCiAgICAgKiBhcyBzdWNoLCBpcyBOT1QgcmVjb21tZW5kZWQgd2hlbiBzZW5kaW5nIGEgbGFyZ2UgbnVtYmVyIG9yIGFuCiAgICAgKiBpbmRldGVybWluYXRlIG51bWJlciBvZiByZXF1ZXN0cyBjb25jdXJyZW50bHkuCiAgICAgKgogICAgICogQHBhcmFtIENsaWVudEludGVyZmFjZSAkY2xpZW50ICAgQ2xpZW50IHVzZWQgdG8gc2VuZCB0aGUgcmVxdWVzdHMKICAgICAqIEBwYXJhbSBhcnJheXxcSXRlcmF0b3IgJHJlcXVlc3RzIFJlcXVlc3RzIHRvIHNlbmQgY29uY3VycmVudGx5LgogICAgICogQHBhcmFtIGFycmF5ICAgICAgICAgICAkb3B0aW9ucyAgUGFzc2VzIHRocm91Z2ggdGhlIG9wdGlvbnMgYXZhaWxhYmxlIGluCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7QHNlZSBHdXp6bGVIdHRwXFBvb2w6Ol9fY29uc3RydWN0fQogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkgUmV0dXJucyBhbiBhcnJheSBjb250YWluaW5nIHRoZSByZXNwb25zZSBvciBhbiBleGNlcHRpb24KICAgICAqICAgICAgICAgICAgICAgaW4gdGhlIHNhbWUgb3JkZXIgdGhhdCB0aGUgcmVxdWVzdHMgd2VyZSBzZW50LgogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGlmIHRoZSBldmVudCBmb3JtYXQgaXMgaW5jb3JyZWN0LgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGJhdGNoKAogICAgICAgIENsaWVudEludGVyZmFjZSAkY2xpZW50LAogICAgICAgICRyZXF1ZXN0cywKICAgICAgICBhcnJheSAkb3B0aW9ucyA9IFtdCiAgICApIHsKICAgICAgICAkcmVzID0gW107CiAgICAgICAgc2VsZjo6Y21wQ2FsbGJhY2soJG9wdGlvbnMsICdmdWxmaWxsZWQnLCAkcmVzKTsKICAgICAgICBzZWxmOjpjbXBDYWxsYmFjaygkb3B0aW9ucywgJ3JlamVjdGVkJywgJHJlcyk7CiAgICAgICAgJHBvb2wgPSBuZXcgc3RhdGljKCRjbGllbnQsICRyZXF1ZXN0cywgJG9wdGlvbnMpOwogICAgICAgICRwb29sLT5wcm9taXNlKCktPndhaXQoKTsKICAgICAgICBrc29ydCgkcmVzKTsKCiAgICAgICAgcmV0dXJuICRyZXM7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gY21wQ2FsbGJhY2soYXJyYXkgJiRvcHRpb25zLCAkbmFtZSwgYXJyYXkgJiRyZXN1bHRzKQogICAgewogICAgICAgIGlmICghaXNzZXQoJG9wdGlvbnNbJG5hbWVdKSkgewogICAgICAgICAgICAkb3B0aW9uc1skbmFtZV0gPSBmdW5jdGlvbiAoJHYsICRrKSB1c2UgKCYkcmVzdWx0cykgewogICAgICAgICAgICAgICAgJHJlc3VsdHNbJGtdID0gJHY7CiAgICAgICAgICAgIH07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGN1cnJlbnRGbiA9ICRvcHRpb25zWyRuYW1lXTsKICAgICAgICAgICAgJG9wdGlvbnNbJG5hbWVdID0gZnVuY3Rpb24gKCR2LCAkaykgdXNlICgmJHJlc3VsdHMsICRjdXJyZW50Rm4pIHsKICAgICAgICAgICAgICAgICRjdXJyZW50Rm4oJHYsICRrKTsKICAgICAgICAgICAgICAgICRyZXN1bHRzWyRrXSA9ICR2OwogICAgICAgICAgICB9OwogICAgICAgIH0KICAgIH0KfQo=AppDevTools/query/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHA7Cgp1c2UgR3V6emxlSHR0cFxQcm9taXNlXFByb21pc2VJbnRlcmZhY2U7CnVzZSBHdXp6bGVIdHRwXFBzcjc7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U7CgovKioKICogUHJlcGFyZXMgcmVxdWVzdHMgdGhhdCBjb250YWluIGEgYm9keSwgYWRkaW5nIHRoZSBDb250ZW50LUxlbmd0aCwKICogQ29udGVudC1UeXBlLCBhbmQgRXhwZWN0IGhlYWRlcnMuCiAqLwpjbGFzcyBQcmVwYXJlQm9keU1pZGRsZXdhcmUKewogICAgLyoqIEB2YXIgY2FsbGFibGUgICovCiAgICBwcml2YXRlICRuZXh0SGFuZGxlcjsKCiAgICAvKioKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkbmV4dEhhbmRsZXIgTmV4dCBoYW5kbGVyIHRvIGludm9rZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGNhbGxhYmxlICRuZXh0SGFuZGxlcikKICAgIHsKICAgICAgICAkdGhpcy0+bmV4dEhhbmRsZXIgPSAkbmV4dEhhbmRsZXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdAogICAgICogQHBhcmFtIGFycmF5ICAgICAgICAgICAgJG9wdGlvbnMKICAgICAqCiAgICAgKiBAcmV0dXJuIFByb21pc2VJbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9faW52b2tlKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIGFycmF5ICRvcHRpb25zKQogICAgewogICAgICAgICRmbiA9ICR0aGlzLT5uZXh0SGFuZGxlcjsKCiAgICAgICAgLy8gRG9uJ3QgZG8gYW55dGhpbmcgaWYgdGhlIHJlcXVlc3QgaGFzIG5vIGJvZHkuCiAgICAgICAgaWYgKCRyZXF1ZXN0LT5nZXRCb2R5KCktPmdldFNpemUoKSA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gJGZuKCRyZXF1ZXN0LCAkb3B0aW9ucyk7CiAgICAgICAgfQoKICAgICAgICAkbW9kaWZ5ID0gW107CgogICAgICAgIC8vIEFkZCBhIGRlZmF1bHQgY29udGVudC10eXBlIGlmIHBvc3NpYmxlLgogICAgICAgIGlmICghJHJlcXVlc3QtPmhhc0hlYWRlcignQ29udGVudC1UeXBlJykpIHsKICAgICAgICAgICAgaWYgKCR1cmkgPSAkcmVxdWVzdC0+Z2V0Qm9keSgpLT5nZXRNZXRhZGF0YSgndXJpJykpIHsKICAgICAgICAgICAgICAgIGlmICgkdHlwZSA9IFBzcjdcbWltZXR5cGVfZnJvbV9maWxlbmFtZSgkdXJpKSkgewogICAgICAgICAgICAgICAgICAgICRtb2RpZnlbJ3NldF9oZWFkZXJzJ11bJ0NvbnRlbnQtVHlwZSddID0gJHR5cGU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIEFkZCBhIGRlZmF1bHQgY29udGVudC1sZW5ndGggb3IgdHJhbnNmZXItZW5jb2RpbmcgaGVhZGVyLgogICAgICAgIGlmICghJHJlcXVlc3QtPmhhc0hlYWRlcignQ29udGVudC1MZW5ndGgnKQogICAgICAgICAgICAmJiAhJHJlcXVlc3QtPmhhc0hlYWRlcignVHJhbnNmZXItRW5jb2RpbmcnKQogICAgICAgICkgewogICAgICAgICAgICAkc2l6ZSA9ICRyZXF1ZXN0LT5nZXRCb2R5KCktPmdldFNpemUoKTsKICAgICAgICAgICAgaWYgKCRzaXplICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICAkbW9kaWZ5WydzZXRfaGVhZGVycyddWydDb250ZW50LUxlbmd0aCddID0gJHNpemU7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkbW9kaWZ5WydzZXRfaGVhZGVycyddWydUcmFuc2Zlci1FbmNvZGluZyddID0gJ2NodW5rZWQnOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBBZGQgdGhlIGV4cGVjdCBoZWFkZXIgaWYgbmVlZGVkLgogICAgICAgICR0aGlzLT5hZGRFeHBlY3RIZWFkZXIoJHJlcXVlc3QsICRvcHRpb25zLCAkbW9kaWZ5KTsKCiAgICAgICAgcmV0dXJuICRmbihQc3I3XG1vZGlmeV9yZXF1ZXN0KCRyZXF1ZXN0LCAkbW9kaWZ5KSwgJG9wdGlvbnMpOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkRXhwZWN0SGVhZGVyKAogICAgICAgIFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsCiAgICAgICAgYXJyYXkgJG9wdGlvbnMsCiAgICAgICAgYXJyYXkgJiRtb2RpZnkKICAgICkgewogICAgICAgIC8vIERldGVybWluZSBpZiB0aGUgRXhwZWN0IGhlYWRlciBzaG91bGQgYmUgdXNlZAogICAgICAgIGlmICgkcmVxdWVzdC0+aGFzSGVhZGVyKCdFeHBlY3QnKSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAkZXhwZWN0ID0gaXNzZXQoJG9wdGlvbnNbJ2V4cGVjdCddKSA/ICRvcHRpb25zWydleHBlY3QnXSA6IG51bGw7CgogICAgICAgIC8vIFJldHVybiBpZiBkaXNhYmxlZCBvciBpZiB5b3UncmUgbm90IHVzaW5nIEhUVFAvMS4xIG9yIEhUVFAvMi4wCiAgICAgICAgaWYgKCRleHBlY3QgPT09IGZhbHNlIHx8ICRyZXF1ZXN0LT5nZXRQcm90b2NvbFZlcnNpb24oKSA8IDEuMSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAvLyBUaGUgZXhwZWN0IGhlYWRlciBpcyB1bmNvbmRpdGlvbmFsbHkgZW5hYmxlZAogICAgICAgIGlmICgkZXhwZWN0ID09PSB0cnVlKSB7CiAgICAgICAgICAgICRtb2RpZnlbJ3NldF9oZWFkZXJzJ11bJ0V4cGVjdCddID0gJzEwMC1Db250aW51ZSc7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIC8vIEJ5IGRlZmF1bHQsIHNlbmQgdGhlIGV4cGVjdCBoZWFkZXIgd2hlbiB0aGUgcGF5bG9hZCBpcyA+IDFtYgogICAgICAgIGlmICgkZXhwZWN0ID09PSBudWxsKSB7CiAgICAgICAgICAgICRleHBlY3QgPSAxMDQ4NTc2OwogICAgICAgIH0KCiAgICAgICAgLy8gQWx3YXlzIGFkZCBpZiB0aGUgYm9keSBjYW5ub3QgYmUgcmV3b3VuZCwgdGhlIHNpemUgY2Fubm90IGJlCiAgICAgICAgLy8gZGV0ZXJtaW5lZCwgb3IgdGhlIHNpemUgaXMgZ3JlYXRlciB0aGFuIHRoZSBjdXRvZmYgdGhyZXNob2xkCiAgICAgICAgJGJvZHkgPSAkcmVxdWVzdC0+Z2V0Qm9keSgpOwogICAgICAgICRzaXplID0gJGJvZHktPmdldFNpemUoKTsKCiAgICAgICAgaWYgKCRzaXplID09PSBudWxsIHx8ICRzaXplID49IChpbnQpICRleHBlY3QgfHwgISRib2R5LT5pc1NlZWthYmxlKCkpIHsKICAgICAgICAgICAgJG1vZGlmeVsnc2V0X2hlYWRlcnMnXVsnRXhwZWN0J10gPSAnMTAwLUNvbnRpbnVlJzsKICAgICAgICB9CiAgICB9Cn0KAppDevTools/query/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHA7Cgp1c2UgR3V6emxlSHR0cFxFeGNlcHRpb25cQmFkUmVzcG9uc2VFeGNlcHRpb247CnVzZSBHdXp6bGVIdHRwXEV4Y2VwdGlvblxUb29NYW55UmVkaXJlY3RzRXhjZXB0aW9uOwp1c2UgR3V6emxlSHR0cFxQcm9taXNlXFByb21pc2VJbnRlcmZhY2U7CnVzZSBHdXp6bGVIdHRwXFBzcjc7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlc3BvbnNlSW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxVcmlJbnRlcmZhY2U7CgovKioKICogUmVxdWVzdCByZWRpcmVjdCBtaWRkbGV3YXJlLgogKgogKiBBcHBseSB0aGlzIG1pZGRsZXdhcmUgbGlrZSBvdGhlciBtaWRkbGV3YXJlIHVzaW5nCiAqIHtAc2VlIEd1enpsZUh0dHBcTWlkZGxld2FyZTo6cmVkaXJlY3QoKX0uCiAqLwpjbGFzcyBSZWRpcmVjdE1pZGRsZXdhcmUKewogICAgY29uc3QgSElTVE9SWV9IRUFERVIgPSAnWC1HdXp6bGUtUmVkaXJlY3QtSGlzdG9yeSc7CgogICAgY29uc3QgU1RBVFVTX0hJU1RPUllfSEVBREVSID0gJ1gtR3V6emxlLVJlZGlyZWN0LVN0YXR1cy1IaXN0b3J5JzsKCiAgICBwdWJsaWMgc3RhdGljICRkZWZhdWx0U2V0dGluZ3MgPSBbCiAgICAgICAgJ21heCcgICAgICAgICAgICAgPT4gNSwKICAgICAgICAncHJvdG9jb2xzJyAgICAgICA9PiBbJ2h0dHAnLCAnaHR0cHMnXSwKICAgICAgICAnc3RyaWN0JyAgICAgICAgICA9PiBmYWxzZSwKICAgICAgICAncmVmZXJlcicgICAgICAgICA9PiBmYWxzZSwKICAgICAgICAndHJhY2tfcmVkaXJlY3RzJyA9PiBmYWxzZSwKICAgIF07CgogICAgLyoqIEB2YXIgY2FsbGFibGUgICovCiAgICBwcml2YXRlICRuZXh0SGFuZGxlcjsKCiAgICAvKioKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkbmV4dEhhbmRsZXIgTmV4dCBoYW5kbGVyIHRvIGludm9rZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGNhbGxhYmxlICRuZXh0SGFuZGxlcikKICAgIHsKICAgICAgICAkdGhpcy0+bmV4dEhhbmRsZXIgPSAkbmV4dEhhbmRsZXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdAogICAgICogQHBhcmFtIGFycmF5ICAgICAgICAgICAgJG9wdGlvbnMKICAgICAqCiAgICAgKiBAcmV0dXJuIFByb21pc2VJbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9faW52b2tlKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIGFycmF5ICRvcHRpb25zKQogICAgewogICAgICAgICRmbiA9ICR0aGlzLT5uZXh0SGFuZGxlcjsKCiAgICAgICAgaWYgKGVtcHR5KCRvcHRpb25zWydhbGxvd19yZWRpcmVjdHMnXSkpIHsKICAgICAgICAgICAgcmV0dXJuICRmbigkcmVxdWVzdCwgJG9wdGlvbnMpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRvcHRpb25zWydhbGxvd19yZWRpcmVjdHMnXSA9PT0gdHJ1ZSkgewogICAgICAgICAgICAkb3B0aW9uc1snYWxsb3dfcmVkaXJlY3RzJ10gPSBzZWxmOjokZGVmYXVsdFNldHRpbmdzOwogICAgICAgIH0gZWxzZWlmICghaXNfYXJyYXkoJG9wdGlvbnNbJ2FsbG93X3JlZGlyZWN0cyddKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignYWxsb3dfcmVkaXJlY3RzIG11c3QgYmUgdHJ1ZSwgZmFsc2UsIG9yIGFycmF5Jyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gTWVyZ2UgdGhlIGRlZmF1bHQgc2V0dGluZ3Mgd2l0aCB0aGUgcHJvdmlkZWQgc2V0dGluZ3MKICAgICAgICAgICAgJG9wdGlvbnNbJ2FsbG93X3JlZGlyZWN0cyddICs9IHNlbGY6OiRkZWZhdWx0U2V0dGluZ3M7CiAgICAgICAgfQoKICAgICAgICBpZiAoZW1wdHkoJG9wdGlvbnNbJ2FsbG93X3JlZGlyZWN0cyddWydtYXgnXSkpIHsKICAgICAgICAgICAgcmV0dXJuICRmbigkcmVxdWVzdCwgJG9wdGlvbnMpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRmbigkcmVxdWVzdCwgJG9wdGlvbnMpCiAgICAgICAgICAgIC0+dGhlbihmdW5jdGlvbiAoUmVzcG9uc2VJbnRlcmZhY2UgJHJlc3BvbnNlKSB1c2UgKCRyZXF1ZXN0LCAkb3B0aW9ucykgewogICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5jaGVja1JlZGlyZWN0KCRyZXF1ZXN0LCAkb3B0aW9ucywgJHJlc3BvbnNlKTsKICAgICAgICAgICAgfSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gUmVxdWVzdEludGVyZmFjZSAgJHJlcXVlc3QKICAgICAqIEBwYXJhbSBhcnJheSAgICAgICAgICAgICAkb3B0aW9ucwogICAgICogQHBhcmFtIFJlc3BvbnNlSW50ZXJmYWNlfFByb21pc2VJbnRlcmZhY2UgJHJlc3BvbnNlCiAgICAgKgogICAgICogQHJldHVybiBSZXNwb25zZUludGVyZmFjZXxQcm9taXNlSW50ZXJmYWNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjaGVja1JlZGlyZWN0KAogICAgICAgIFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsCiAgICAgICAgYXJyYXkgJG9wdGlvbnMsCiAgICAgICAgUmVzcG9uc2VJbnRlcmZhY2UgJHJlc3BvbnNlCiAgICApIHsKICAgICAgICBpZiAoc3Vic3RyKCRyZXNwb25zZS0+Z2V0U3RhdHVzQ29kZSgpLCAwLCAxKSAhPSAnMycKICAgICAgICAgICAgfHwgISRyZXNwb25zZS0+aGFzSGVhZGVyKCdMb2NhdGlvbicpCiAgICAgICAgKSB7CiAgICAgICAgICAgIHJldHVybiAkcmVzcG9uc2U7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+Z3VhcmRNYXgoJHJlcXVlc3QsICRvcHRpb25zKTsKICAgICAgICAkbmV4dFJlcXVlc3QgPSAkdGhpcy0+bW9kaWZ5UmVxdWVzdCgkcmVxdWVzdCwgJG9wdGlvbnMsICRyZXNwb25zZSk7CgogICAgICAgIGlmIChpc3NldCgkb3B0aW9uc1snYWxsb3dfcmVkaXJlY3RzJ11bJ29uX3JlZGlyZWN0J10pKSB7CiAgICAgICAgICAgIGNhbGxfdXNlcl9mdW5jKAogICAgICAgICAgICAgICAgJG9wdGlvbnNbJ2FsbG93X3JlZGlyZWN0cyddWydvbl9yZWRpcmVjdCddLAogICAgICAgICAgICAgICAgJHJlcXVlc3QsCiAgICAgICAgICAgICAgICAkcmVzcG9uc2UsCiAgICAgICAgICAgICAgICAkbmV4dFJlcXVlc3QtPmdldFVyaSgpCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAvKiogQHZhciBQcm9taXNlSW50ZXJmYWNlfFJlc3BvbnNlSW50ZXJmYWNlICRwcm9taXNlICovCiAgICAgICAgJHByb21pc2UgPSAkdGhpcygkbmV4dFJlcXVlc3QsICRvcHRpb25zKTsKCiAgICAgICAgLy8gQWRkIGhlYWRlcnMgdG8gYmUgYWJsZSB0byB0cmFjayBoaXN0b3J5IG9mIHJlZGlyZWN0cy4KICAgICAgICBpZiAoIWVtcHR5KCRvcHRpb25zWydhbGxvd19yZWRpcmVjdHMnXVsndHJhY2tfcmVkaXJlY3RzJ10pKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+d2l0aFRyYWNraW5nKAogICAgICAgICAgICAgICAgJHByb21pc2UsCiAgICAgICAgICAgICAgICAoc3RyaW5nKSAkbmV4dFJlcXVlc3QtPmdldFVyaSgpLAogICAgICAgICAgICAgICAgJHJlc3BvbnNlLT5nZXRTdGF0dXNDb2RlKCkKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcHJvbWlzZTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIHdpdGhUcmFja2luZyhQcm9taXNlSW50ZXJmYWNlICRwcm9taXNlLCAkdXJpLCAkc3RhdHVzQ29kZSkKICAgIHsKICAgICAgICByZXR1cm4gJHByb21pc2UtPnRoZW4oCiAgICAgICAgICAgIGZ1bmN0aW9uIChSZXNwb25zZUludGVyZmFjZSAkcmVzcG9uc2UpIHVzZSAoJHVyaSwgJHN0YXR1c0NvZGUpIHsKICAgICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBhcmUgcHVzaGluZyB0byB0aGUgZnJvbnQgb2YgdGhlIGxpc3QgYXMgdGhpcwogICAgICAgICAgICAgICAgLy8gd291bGQgYmUgYW4gZWFybGllciByZXNwb25zZSB0aGFuIHdoYXQgaXMgY3VycmVudGx5IHByZXNlbnQKICAgICAgICAgICAgICAgIC8vIGluIHRoZSBoaXN0b3J5IGhlYWRlci4KICAgICAgICAgICAgICAgICRoaXN0b3J5SGVhZGVyID0gJHJlc3BvbnNlLT5nZXRIZWFkZXIoc2VsZjo6SElTVE9SWV9IRUFERVIpOwogICAgICAgICAgICAgICAgJHN0YXR1c0hlYWRlciA9ICRyZXNwb25zZS0+Z2V0SGVhZGVyKHNlbGY6OlNUQVRVU19ISVNUT1JZX0hFQURFUik7CiAgICAgICAgICAgICAgICBhcnJheV91bnNoaWZ0KCRoaXN0b3J5SGVhZGVyLCAkdXJpKTsKICAgICAgICAgICAgICAgIGFycmF5X3Vuc2hpZnQoJHN0YXR1c0hlYWRlciwgJHN0YXR1c0NvZGUpOwogICAgICAgICAgICAgICAgcmV0dXJuICRyZXNwb25zZS0+d2l0aEhlYWRlcihzZWxmOjpISVNUT1JZX0hFQURFUiwgJGhpc3RvcnlIZWFkZXIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT53aXRoSGVhZGVyKHNlbGY6OlNUQVRVU19ISVNUT1JZX0hFQURFUiwgJHN0YXR1c0hlYWRlcik7CiAgICAgICAgICAgIH0KICAgICAgICApOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gZ3VhcmRNYXgoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgYXJyYXkgJiRvcHRpb25zKQogICAgewogICAgICAgICRjdXJyZW50ID0gaXNzZXQoJG9wdGlvbnNbJ19fcmVkaXJlY3RfY291bnQnXSkKICAgICAgICAgICAgPyAkb3B0aW9uc1snX19yZWRpcmVjdF9jb3VudCddCiAgICAgICAgICAgIDogMDsKICAgICAgICAkb3B0aW9uc1snX19yZWRpcmVjdF9jb3VudCddID0gJGN1cnJlbnQgKyAxOwogICAgICAgICRtYXggPSAkb3B0aW9uc1snYWxsb3dfcmVkaXJlY3RzJ11bJ21heCddOwoKICAgICAgICBpZiAoJG9wdGlvbnNbJ19fcmVkaXJlY3RfY291bnQnXSA+ICRtYXgpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFRvb01hbnlSZWRpcmVjdHNFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAiV2lsbCBub3QgZm9sbG93IG1vcmUgdGhhbiB7JG1heH0gcmVkaXJlY3RzIiwKICAgICAgICAgICAgICAgICRyZXF1ZXN0CiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIFJlcXVlc3RJbnRlcmZhY2UgICRyZXF1ZXN0CiAgICAgKiBAcGFyYW0gYXJyYXkgICAgICAgICAgICAgJG9wdGlvbnMKICAgICAqIEBwYXJhbSBSZXNwb25zZUludGVyZmFjZSAkcmVzcG9uc2UKICAgICAqCiAgICAgKiBAcmV0dXJuIFJlcXVlc3RJbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG1vZGlmeVJlcXVlc3QoCiAgICAgICAgUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwKICAgICAgICBhcnJheSAkb3B0aW9ucywKICAgICAgICBSZXNwb25zZUludGVyZmFjZSAkcmVzcG9uc2UKICAgICkgewogICAgICAgIC8vIFJlcXVlc3QgbW9kaWZpY2F0aW9ucyB0byBhcHBseS4KICAgICAgICAkbW9kaWZ5ID0gW107CiAgICAgICAgJHByb3RvY29scyA9ICRvcHRpb25zWydhbGxvd19yZWRpcmVjdHMnXVsncHJvdG9jb2xzJ107CgogICAgICAgIC8vIFVzZSBhIEdFVCByZXF1ZXN0IGlmIHRoaXMgaXMgYW4gZW50aXR5IGVuY2xvc2luZyByZXF1ZXN0IGFuZCB3ZSBhcmUKICAgICAgICAvLyBub3QgZm9yY2luZyBSRkMgY29tcGxpYW5jZSwgYnV0IHJhdGhlciBlbXVsYXRpbmcgd2hhdCBhbGwgYnJvd3NlcnMKICAgICAgICAvLyB3b3VsZCBkby4KICAgICAgICAkc3RhdHVzQ29kZSA9ICRyZXNwb25zZS0+Z2V0U3RhdHVzQ29kZSgpOwogICAgICAgIGlmICgkc3RhdHVzQ29kZSA9PSAzMDMgfHwKICAgICAgICAgICAgKCRzdGF0dXNDb2RlIDw9IDMwMiAmJiAkcmVxdWVzdC0+Z2V0Qm9keSgpICYmICEkb3B0aW9uc1snYWxsb3dfcmVkaXJlY3RzJ11bJ3N0cmljdCddKQogICAgICAgICkgewogICAgICAgICAgICAkbW9kaWZ5WydtZXRob2QnXSA9ICdHRVQnOwogICAgICAgICAgICAkbW9kaWZ5Wydib2R5J10gPSAnJzsKICAgICAgICB9CgogICAgICAgICRtb2RpZnlbJ3VyaSddID0gJHRoaXMtPnJlZGlyZWN0VXJpKCRyZXF1ZXN0LCAkcmVzcG9uc2UsICRwcm90b2NvbHMpOwogICAgICAgIFBzcjdccmV3aW5kX2JvZHkoJHJlcXVlc3QpOwoKICAgICAgICAvLyBBZGQgdGhlIFJlZmVyZXIgaGVhZGVyIGlmIGl0IGlzIHRvbGQgdG8gZG8gc28gYW5kIG9ubHkKICAgICAgICAvLyBhZGQgdGhlIGhlYWRlciBpZiB3ZSBhcmUgbm90IHJlZGlyZWN0aW5nIGZyb20gaHR0cHMgdG8gaHR0cC4KICAgICAgICBpZiAoJG9wdGlvbnNbJ2FsbG93X3JlZGlyZWN0cyddWydyZWZlcmVyJ10KICAgICAgICAgICAgJiYgJG1vZGlmeVsndXJpJ10tPmdldFNjaGVtZSgpID09PSAkcmVxdWVzdC0+Z2V0VXJpKCktPmdldFNjaGVtZSgpCiAgICAgICAgKSB7CiAgICAgICAgICAgICR1cmkgPSAkcmVxdWVzdC0+Z2V0VXJpKCktPndpdGhVc2VySW5mbygnJywgJycpOwogICAgICAgICAgICAkbW9kaWZ5WydzZXRfaGVhZGVycyddWydSZWZlcmVyJ10gPSAoc3RyaW5nKSAkdXJpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRtb2RpZnlbJ3JlbW92ZV9oZWFkZXJzJ11bXSA9ICdSZWZlcmVyJzsKICAgICAgICB9CgogICAgICAgIC8vIFJlbW92ZSBBdXRob3JpemF0aW9uIGhlYWRlciBpZiBob3N0IGlzIGRpZmZlcmVudC4KICAgICAgICBpZiAoJHJlcXVlc3QtPmdldFVyaSgpLT5nZXRIb3N0KCkgIT09ICRtb2RpZnlbJ3VyaSddLT5nZXRIb3N0KCkpIHsKICAgICAgICAgICAgJG1vZGlmeVsncmVtb3ZlX2hlYWRlcnMnXVtdID0gJ0F1dGhvcml6YXRpb24nOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFBzcjdcbW9kaWZ5X3JlcXVlc3QoJHJlcXVlc3QsICRtb2RpZnkpOwogICAgfQoKICAgIC8qKgogICAgICogU2V0IHRoZSBhcHByb3ByaWF0ZSBVUkwgb24gdGhlIHJlcXVlc3QgYmFzZWQgb24gdGhlIGxvY2F0aW9uIGhlYWRlcgogICAgICoKICAgICAqIEBwYXJhbSBSZXF1ZXN0SW50ZXJmYWNlICAkcmVxdWVzdAogICAgICogQHBhcmFtIFJlc3BvbnNlSW50ZXJmYWNlICRyZXNwb25zZQogICAgICogQHBhcmFtIGFycmF5ICAgICAgICAgICAgICRwcm90b2NvbHMKICAgICAqCiAgICAgKiBAcmV0dXJuIFVyaUludGVyZmFjZQogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHJlZGlyZWN0VXJpKAogICAgICAgIFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsCiAgICAgICAgUmVzcG9uc2VJbnRlcmZhY2UgJHJlc3BvbnNlLAogICAgICAgIGFycmF5ICRwcm90b2NvbHMKICAgICkgewogICAgICAgICRsb2NhdGlvbiA9IFBzcjdcVXJpUmVzb2x2ZXI6OnJlc29sdmUoCiAgICAgICAgICAgICRyZXF1ZXN0LT5nZXRVcmkoKSwKICAgICAgICAgICAgbmV3IFBzcjdcVXJpKCRyZXNwb25zZS0+Z2V0SGVhZGVyTGluZSgnTG9jYXRpb24nKSkKICAgICAgICApOwoKICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgcmVkaXJlY3QgVVJJIGlzIGFsbG93ZWQgYmFzZWQgb24gdGhlIHByb3RvY29scy4KICAgICAgICBpZiAoIWluX2FycmF5KCRsb2NhdGlvbi0+Z2V0U2NoZW1lKCksICRwcm90b2NvbHMpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBCYWRSZXNwb25zZUV4Y2VwdGlvbigKICAgICAgICAgICAgICAgIHNwcmludGYoCiAgICAgICAgICAgICAgICAgICAgJ1JlZGlyZWN0IFVSSSwgJXMsIGRvZXMgbm90IHVzZSBvbmUgb2YgdGhlIGFsbG93ZWQgcmVkaXJlY3QgcHJvdG9jb2xzOiAlcycsCiAgICAgICAgICAgICAgICAgICAgJGxvY2F0aW9uLAogICAgICAgICAgICAgICAgICAgIGltcGxvZGUoJywgJywgJHByb3RvY29scykKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAkcmVxdWVzdCwKICAgICAgICAgICAgICAgICRyZXNwb25zZQogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRsb2NhdGlvbjsKICAgIH0KfQo=AppDevTools/query/vendor/guzzlehttp/guzzle/src/RequestOptions.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHA7CgovKioKICogVGhpcyBjbGFzcyBjb250YWlucyBhIGxpc3Qgb2YgYnVpbHQtaW4gR3V6emxlIHJlcXVlc3Qgb3B0aW9ucy4KICoKICogTW9yZSBkb2N1bWVudGF0aW9uIGZvciBlYWNoIG9wdGlvbiBjYW4gYmUgZm91bmQgYXQgaHR0cDovL2d1enpsZXBocC5vcmcvLgogKgogKiBAbGluayBodHRwOi8vZG9jcy5ndXp6bGVwaHAub3JnL2VuL3Y2L3JlcXVlc3Qtb3B0aW9ucy5odG1sCiAqLwpmaW5hbCBjbGFzcyBSZXF1ZXN0T3B0aW9ucwp7CiAgICAvKioKICAgICAqIGFsbG93X3JlZGlyZWN0czogKGJvb2x8YXJyYXkpIENvbnRyb2xzIHJlZGlyZWN0IGJlaGF2aW9yLiBQYXNzIGZhbHNlCiAgICAgKiB0byBkaXNhYmxlIHJlZGlyZWN0cywgcGFzcyB0cnVlIHRvIGVuYWJsZSByZWRpcmVjdHMsIHBhc3MgYW4KICAgICAqIGFzc29jaWF0aXZlIHRvIHByb3ZpZGUgY3VzdG9tIHJlZGlyZWN0IHNldHRpbmdzLiBEZWZhdWx0cyB0byAiZmFsc2UiLgogICAgICogVGhpcyBvcHRpb24gb25seSB3b3JrcyBpZiB5b3VyIGhhbmRsZXIgaGFzIHRoZSBSZWRpcmVjdE1pZGRsZXdhcmUuIFdoZW4KICAgICAqIHBhc3NpbmcgYW4gYXNzb2NpYXRpdmUgYXJyYXksIHlvdSBjYW4gcHJvdmlkZSB0aGUgZm9sbG93aW5nIGtleSB2YWx1ZQogICAgICogcGFpcnM6CiAgICAgKgogICAgICogLSBtYXg6IChpbnQsIGRlZmF1bHQ9NSkgbWF4aW11bSBudW1iZXIgb2YgYWxsb3dlZCByZWRpcmVjdHMuCiAgICAgKiAtIHN0cmljdDogKGJvb2wsIGRlZmF1bHQ9ZmFsc2UpIFNldCB0byB0cnVlIHRvIHVzZSBzdHJpY3QgcmVkaXJlY3RzCiAgICAgKiAgIG1lYW5pbmcgcmVkaXJlY3QgUE9TVCByZXF1ZXN0cyB3aXRoIFBPU1QgcmVxdWVzdHMgdnMuIGRvaW5nIHdoYXQgbW9zdAogICAgICogICBicm93c2VycyBkbyB3aGljaCBpcyByZWRpcmVjdCBQT1NUIHJlcXVlc3RzIHdpdGggR0VUIHJlcXVlc3RzCiAgICAgKiAtIHJlZmVyZXI6IChib29sLCBkZWZhdWx0PXRydWUpIFNldCB0byBmYWxzZSB0byBkaXNhYmxlIHRoZSBSZWZlcmVyCiAgICAgKiAgIGhlYWRlci4KICAgICAqIC0gcHJvdG9jb2xzOiAoYXJyYXksIGRlZmF1bHQ9WydodHRwJywgJ2h0dHBzJ10pIEFsbG93ZWQgcmVkaXJlY3QKICAgICAqICAgcHJvdG9jb2xzLgogICAgICogLSBvbl9yZWRpcmVjdDogKGNhbGxhYmxlKSBQSFAgY2FsbGFibGUgdGhhdCBpcyBpbnZva2VkIHdoZW4gYSByZWRpcmVjdAogICAgICogICBpcyBlbmNvdW50ZXJlZC4gVGhlIGNhbGxhYmxlIGlzIGludm9rZWQgd2l0aCB0aGUgcmVxdWVzdCwgdGhlIHJlZGlyZWN0CiAgICAgKiAgIHJlc3BvbnNlIHRoYXQgd2FzIHJlY2VpdmVkLCBhbmQgdGhlIGVmZmVjdGl2ZSBVUkkuIEFueSByZXR1cm4gdmFsdWUKICAgICAqICAgZnJvbSB0aGUgb25fcmVkaXJlY3QgZnVuY3Rpb24gaXMgaWdub3JlZC4KICAgICAqLwogICAgY29uc3QgQUxMT1dfUkVESVJFQ1RTID0gJ2FsbG93X3JlZGlyZWN0cyc7CgogICAgLyoqCiAgICAgKiBhdXRoOiAoYXJyYXkpIFBhc3MgYW4gYXJyYXkgb2YgSFRUUCBhdXRoZW50aWNhdGlvbiBwYXJhbWV0ZXJzIHRvIHVzZQogICAgICogd2l0aCB0aGUgcmVxdWVzdC4gVGhlIGFycmF5IG11c3QgY29udGFpbiB0aGUgdXNlcm5hbWUgaW4gaW5kZXggWzBdLAogICAgICogdGhlIHBhc3N3b3JkIGluIGluZGV4IFsxXSwgYW5kIHlvdSBjYW4gb3B0aW9uYWxseSBwcm92aWRlIGEgYnVpbHQtaW4KICAgICAqIGF1dGhlbnRpY2F0aW9uIHR5cGUgaW4gaW5kZXggWzJdLiBQYXNzIG51bGwgdG8gZGlzYWJsZSBhdXRoZW50aWNhdGlvbgogICAgICogZm9yIGEgcmVxdWVzdC4KICAgICAqLwogICAgY29uc3QgQVVUSCA9ICdhdXRoJzsKCiAgICAvKioKICAgICAqIGJvZHk6IChyZXNvdXJjZXxzdHJpbmd8bnVsbHxpbnR8ZmxvYXR8U3RyZWFtSW50ZXJmYWNlfGNhbGxhYmxlfFxJdGVyYXRvcikKICAgICAqIEJvZHkgdG8gc2VuZCBpbiB0aGUgcmVxdWVzdC4KICAgICAqLwogICAgY29uc3QgQk9EWSA9ICdib2R5JzsKCiAgICAvKioKICAgICAqIGNlcnQ6IChzdHJpbmd8YXJyYXkpIFNldCB0byBhIHN0cmluZyB0byBzcGVjaWZ5IHRoZSBwYXRoIHRvIGEgZmlsZQogICAgICogY29udGFpbmluZyBhIFBFTSBmb3JtYXR0ZWQgU1NMIGNsaWVudCBzaWRlIGNlcnRpZmljYXRlLiBJZiBhIHBhc3N3b3JkCiAgICAgKiBpcyByZXF1aXJlZCwgdGhlbiBzZXQgY2VydCB0byBhbiBhcnJheSBjb250YWluaW5nIHRoZSBwYXRoIHRvIHRoZSBQRU0KICAgICAqIGZpbGUgaW4gdGhlIGZpcnN0IGFycmF5IGVsZW1lbnQgZm9sbG93ZWQgYnkgdGhlIGNlcnRpZmljYXRlIHBhc3N3b3JkCiAgICAgKiBpbiB0aGUgc2Vjb25kIGFycmF5IGVsZW1lbnQuCiAgICAgKi8KICAgIGNvbnN0IENFUlQgPSAnY2VydCc7CgogICAgLyoqCiAgICAgKiBjb29raWVzOiAoYm9vbHxHdXp6bGVIdHRwXENvb2tpZVxDb29raWVKYXJJbnRlcmZhY2UsIGRlZmF1bHQ9ZmFsc2UpCiAgICAgKiBTcGVjaWZpZXMgd2hldGhlciBvciBub3QgY29va2llcyBhcmUgdXNlZCBpbiBhIHJlcXVlc3Qgb3Igd2hhdCBjb29raWUKICAgICAqIGphciB0byB1c2Ugb3Igd2hhdCBjb29raWVzIHRvIHNlbmQuIFRoaXMgb3B0aW9uIG9ubHkgd29ya3MgaWYgeW91cgogICAgICogaGFuZGxlciBoYXMgdGhlIGBjb29raWVgIG1pZGRsZXdhcmUuIFZhbGlkIHZhbHVlcyBhcmUgYGZhbHNlYCBhbmQKICAgICAqIGFuIGluc3RhbmNlIG9mIHtAc2VlIEd1enpsZUh0dHBcQ29va2llXENvb2tpZUphckludGVyZmFjZX0uCiAgICAgKi8KICAgIGNvbnN0IENPT0tJRVMgPSAnY29va2llcyc7CgogICAgLyoqCiAgICAgKiBjb25uZWN0X3RpbWVvdXQ6IChmbG9hdCwgZGVmYXVsdD0wKSBGbG9hdCBkZXNjcmliaW5nIHRoZSBudW1iZXIgb2YKICAgICAqIHNlY29uZHMgdG8gd2FpdCB3aGlsZSB0cnlpbmcgdG8gY29ubmVjdCB0byBhIHNlcnZlci4gVXNlIDAgdG8gd2FpdAogICAgICogaW5kZWZpbml0ZWx5ICh0aGUgZGVmYXVsdCBiZWhhdmlvcikuCiAgICAgKi8KICAgIGNvbnN0IENPTk5FQ1RfVElNRU9VVCA9ICdjb25uZWN0X3RpbWVvdXQnOwoKICAgIC8qKgogICAgICogZGVidWc6IChib29sfHJlc291cmNlKSBTZXQgdG8gdHJ1ZSBvciBzZXQgdG8gYSBQSFAgc3RyZWFtIHJldHVybmVkIGJ5CiAgICAgKiBmb3BlbigpICBlbmFibGUgZGVidWcgb3V0cHV0IHdpdGggdGhlIEhUVFAgaGFuZGxlciB1c2VkIHRvIHNlbmQgYQogICAgICogcmVxdWVzdC4KICAgICAqLwogICAgY29uc3QgREVCVUcgPSAnZGVidWcnOwoKICAgIC8qKgogICAgICogZGVjb2RlX2NvbnRlbnQ6IChib29sLCBkZWZhdWx0PXRydWUpIFNwZWNpZnkgd2hldGhlciBvciBub3QKICAgICAqIENvbnRlbnQtRW5jb2RpbmcgcmVzcG9uc2VzIChnemlwLCBkZWZsYXRlLCBldGMuKSBhcmUgYXV0b21hdGljYWxseQogICAgICogZGVjb2RlZC4KICAgICAqLwogICAgY29uc3QgREVDT0RFX0NPTlRFTlQgPSAnZGVjb2RlX2NvbnRlbnQnOwoKICAgIC8qKgogICAgICogZGVsYXk6IChpbnQpIFRoZSBhbW91bnQgb2YgdGltZSB0byBkZWxheSBiZWZvcmUgc2VuZGluZyBpbiBtaWxsaXNlY29uZHMuCiAgICAgKi8KICAgIGNvbnN0IERFTEFZID0gJ2RlbGF5JzsKCiAgICAvKioKICAgICAqIGV4cGVjdDogKGJvb2x8aW50ZWdlcikgQ29udHJvbHMgdGhlIGJlaGF2aW9yIG9mIHRoZQogICAgICogIkV4cGVjdDogMTAwLUNvbnRpbnVlIiBoZWFkZXIuCiAgICAgKgogICAgICogU2V0IHRvIGB0cnVlYCB0byBlbmFibGUgdGhlICJFeHBlY3Q6IDEwMC1Db250aW51ZSIgaGVhZGVyIGZvciBhbGwKICAgICAqIHJlcXVlc3RzIHRoYXQgc2VuZHMgYSBib2R5LiBTZXQgdG8gYGZhbHNlYCB0byBkaXNhYmxlIHRoZQogICAgICogIkV4cGVjdDogMTAwLUNvbnRpbnVlIiBoZWFkZXIgZm9yIGFsbCByZXF1ZXN0cy4gU2V0IHRvIGEgbnVtYmVyIHNvIHRoYXQKICAgICAqIHRoZSBzaXplIG9mIHRoZSBwYXlsb2FkIG11c3QgYmUgZ3JlYXRlciB0aGFuIHRoZSBudW1iZXIgaW4gb3JkZXIgdG8gc2VuZAogICAgICogdGhlIEV4cGVjdCBoZWFkZXIuIFNldHRpbmcgdG8gYSBudW1iZXIgd2lsbCBzZW5kIHRoZSBFeHBlY3QgaGVhZGVyIGZvcgogICAgICogYWxsIHJlcXVlc3RzIGluIHdoaWNoIHRoZSBzaXplIG9mIHRoZSBwYXlsb2FkIGNhbm5vdCBiZSBkZXRlcm1pbmVkIG9yCiAgICAgKiB3aGVyZSB0aGUgYm9keSBpcyBub3QgcmV3aW5kYWJsZS4KICAgICAqCiAgICAgKiBCeSBkZWZhdWx0LCBHdXp6bGUgd2lsbCBhZGQgdGhlICJFeHBlY3Q6IDEwMC1Db250aW51ZSIgaGVhZGVyIHdoZW4gdGhlCiAgICAgKiBzaXplIG9mIHRoZSBib2R5IG9mIGEgcmVxdWVzdCBpcyBncmVhdGVyIHRoYW4gMSBNQiBhbmQgYSByZXF1ZXN0IGlzCiAgICAgKiB1c2luZyBIVFRQLzEuMS4KICAgICAqLwogICAgY29uc3QgRVhQRUNUID0gJ2V4cGVjdCc7CgogICAgLyoqCiAgICAgKiBmb3JtX3BhcmFtczogKGFycmF5KSBBc3NvY2lhdGl2ZSBhcnJheSBvZiBmb3JtIGZpZWxkIG5hbWVzIHRvIHZhbHVlcwogICAgICogd2hlcmUgZWFjaCB2YWx1ZSBpcyBhIHN0cmluZyBvciBhcnJheSBvZiBzdHJpbmdzLiBTZXRzIHRoZSBDb250ZW50LVR5cGUKICAgICAqIGhlYWRlciB0byBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQgd2hlbiBubyBDb250ZW50LVR5cGUgaGVhZGVyCiAgICAgKiBpcyBhbHJlYWR5IHByZXNlbnQuCiAgICAgKi8KICAgIGNvbnN0IEZPUk1fUEFSQU1TID0gJ2Zvcm1fcGFyYW1zJzsKCiAgICAvKioKICAgICAqIGhlYWRlcnM6IChhcnJheSkgQXNzb2NpYXRpdmUgYXJyYXkgb2YgSFRUUCBoZWFkZXJzLiBFYWNoIHZhbHVlIE1VU1QgYmUKICAgICAqIGEgc3RyaW5nIG9yIGFycmF5IG9mIHN0cmluZ3MuCiAgICAgKi8KICAgIGNvbnN0IEhFQURFUlMgPSAnaGVhZGVycyc7CgogICAgLyoqCiAgICAgKiBodHRwX2Vycm9yczogKGJvb2wsIGRlZmF1bHQ9dHJ1ZSkgU2V0IHRvIGZhbHNlIHRvIGRpc2FibGUgZXhjZXB0aW9ucwogICAgICogd2hlbiBhIG5vbi0gc3VjY2Vzc2Z1bCBIVFRQIHJlc3BvbnNlIGlzIHJlY2VpdmVkLiBCeSBkZWZhdWx0LAogICAgICogZXhjZXB0aW9ucyB3aWxsIGJlIHRocm93biBmb3IgNHh4IGFuZCA1eHggcmVzcG9uc2VzLiBUaGlzIG9wdGlvbiBvbmx5CiAgICAgKiB3b3JrcyBpZiB5b3VyIGhhbmRsZXIgaGFzIHRoZSBgaHR0cEVycm9yc2AgbWlkZGxld2FyZS4KICAgICAqLwogICAgY29uc3QgSFRUUF9FUlJPUlMgPSAnaHR0cF9lcnJvcnMnOwoKICAgIC8qKgogICAgICoganNvbjogKG1peGVkKSBBZGRzIEpTT04gZGF0YSB0byBhIHJlcXVlc3QuIFRoZSBwcm92aWRlZCB2YWx1ZSBpcyBKU09OCiAgICAgKiBlbmNvZGVkIGFuZCBhIENvbnRlbnQtVHlwZSBoZWFkZXIgb2YgYXBwbGljYXRpb24vanNvbiB3aWxsIGJlIGFkZGVkIHRvCiAgICAgKiB0aGUgcmVxdWVzdCBpZiBubyBDb250ZW50LVR5cGUgaGVhZGVyIGlzIGFscmVhZHkgcHJlc2VudC4KICAgICAqLwogICAgY29uc3QgSlNPTiA9ICdqc29uJzsKCiAgICAvKioKICAgICAqIG11bHRpcGFydDogKGFycmF5KSBBcnJheSBvZiBhc3NvY2lhdGl2ZSBhcnJheXMsIGVhY2ggY29udGFpbmluZyBhCiAgICAgKiByZXF1aXJlZCAibmFtZSIga2V5IG1hcHBpbmcgdG8gdGhlIGZvcm0gZmllbGQsIG5hbWUsIGEgcmVxdWlyZWQKICAgICAqICJjb250ZW50cyIga2V5IG1hcHBpbmcgdG8gYSBTdHJlYW1JbnRlcmZhY2V8cmVzb3VyY2V8c3RyaW5nLCBhbgogICAgICogb3B0aW9uYWwgImhlYWRlcnMiIGFzc29jaWF0aXZlIGFycmF5IG9mIGN1c3RvbSBoZWFkZXJzLCBhbmQgYW4KICAgICAqIG9wdGlvbmFsICJmaWxlbmFtZSIga2V5IG1hcHBpbmcgdG8gYSBzdHJpbmcgdG8gc2VuZCBhcyB0aGUgZmlsZW5hbWUgaW4KICAgICAqIHRoZSBwYXJ0LiBJZiBubyAiZmlsZW5hbWUiIGtleSBpcyBwcmVzZW50LCB0aGVuIG5vICJmaWxlbmFtZSIgYXR0cmlidXRlCiAgICAgKiB3aWxsIGJlIGFkZGVkIHRvIHRoZSBwYXJ0LgogICAgICovCiAgICBjb25zdCBNVUxUSVBBUlQgPSAnbXVsdGlwYXJ0JzsKCiAgICAvKioKICAgICAqIG9uX2hlYWRlcnM6IChjYWxsYWJsZSkgQSBjYWxsYWJsZSB0aGF0IGlzIGludm9rZWQgd2hlbiB0aGUgSFRUUCBoZWFkZXJzCiAgICAgKiBvZiB0aGUgcmVzcG9uc2UgaGF2ZSBiZWVuIHJlY2VpdmVkIGJ1dCB0aGUgYm9keSBoYXMgbm90IHlldCBiZWd1biB0bwogICAgICogZG93bmxvYWQuCiAgICAgKi8KICAgIGNvbnN0IE9OX0hFQURFUlMgPSAnb25faGVhZGVycyc7CgogICAgLyoqCiAgICAgKiBvbl9zdGF0czogKGNhbGxhYmxlKSBhbGxvd3MgeW91IHRvIGdldCBhY2Nlc3MgdG8gdHJhbnNmZXIgc3RhdGlzdGljcyBvZgogICAgICogYSByZXF1ZXN0IGFuZCBhY2Nlc3MgdGhlIGxvd2VyIGxldmVsIHRyYW5zZmVyIGRldGFpbHMgb2YgdGhlIGhhbmRsZXIKICAgICAqIGFzc29jaWF0ZWQgd2l0aCB5b3VyIGNsaWVudC4gYGBvbl9zdGF0c2BgIGlzIGEgY2FsbGFibGUgdGhhdCBpcyBpbnZva2VkCiAgICAgKiB3aGVuIGEgaGFuZGxlciBoYXMgZmluaXNoZWQgc2VuZGluZyBhIHJlcXVlc3QuIFRoZSBjYWxsYmFjayBpcyBpbnZva2VkCiAgICAgKiB3aXRoIHRyYW5zZmVyIHN0YXRpc3RpY3MgYWJvdXQgdGhlIHJlcXVlc3QsIHRoZSByZXNwb25zZSByZWNlaXZlZCwgb3IKICAgICAqIHRoZSBlcnJvciBlbmNvdW50ZXJlZC4gSW5jbHVkZWQgaW4gdGhlIGRhdGEgaXMgdGhlIHRvdGFsIGFtb3VudCBvZiB0aW1lCiAgICAgKiB0YWtlbiB0byBzZW5kIHRoZSByZXF1ZXN0LgogICAgICovCiAgICBjb25zdCBPTl9TVEFUUyA9ICdvbl9zdGF0cyc7CgogICAgLyoqCiAgICAgKiBwcm9ncmVzczogKGNhbGxhYmxlKSBEZWZpbmVzIGEgZnVuY3Rpb24gdG8gaW52b2tlIHdoZW4gdHJhbnNmZXIKICAgICAqIHByb2dyZXNzIGlzIG1hZGUuIFRoZSBmdW5jdGlvbiBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgcG9zaXRpb25hbAogICAgICogYXJndW1lbnRzOiB0aGUgdG90YWwgbnVtYmVyIG9mIGJ5dGVzIGV4cGVjdGVkIHRvIGJlIGRvd25sb2FkZWQsIHRoZQogICAgICogbnVtYmVyIG9mIGJ5dGVzIGRvd25sb2FkZWQgc28gZmFyLCB0aGUgbnVtYmVyIG9mIGJ5dGVzIGV4cGVjdGVkIHRvIGJlCiAgICAgKiB1cGxvYWRlZCwgdGhlIG51bWJlciBvZiBieXRlcyB1cGxvYWRlZCBzbyBmYXIuCiAgICAgKi8KICAgIGNvbnN0IFBST0dSRVNTID0gJ3Byb2dyZXNzJzsKCiAgICAvKioKICAgICAqIHByb3h5OiAoc3RyaW5nfGFycmF5KSBQYXNzIGEgc3RyaW5nIHRvIHNwZWNpZnkgYW4gSFRUUCBwcm94eSwgb3IgYW4KICAgICAqIGFycmF5IHRvIHNwZWNpZnkgZGlmZmVyZW50IHByb3hpZXMgZm9yIGRpZmZlcmVudCBwcm90b2NvbHMgKHdoZXJlIHRoZQogICAgICoga2V5IGlzIHRoZSBwcm90b2NvbCBhbmQgdGhlIHZhbHVlIGlzIGEgcHJveHkgc3RyaW5nKS4KICAgICAqLwogICAgY29uc3QgUFJPWFkgPSAncHJveHknOwoKICAgIC8qKgogICAgICogcXVlcnk6IChhcnJheXxzdHJpbmcpIEFzc29jaWF0aXZlIGFycmF5IG9mIHF1ZXJ5IHN0cmluZyB2YWx1ZXMgdG8gYWRkCiAgICAgKiB0byB0aGUgcmVxdWVzdC4gVGhpcyBvcHRpb24gdXNlcyBQSFAncyBodHRwX2J1aWxkX3F1ZXJ5KCkgdG8gY3JlYXRlCiAgICAgKiB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uLiBQYXNzIGEgc3RyaW5nIHZhbHVlIGlmIHlvdSBuZWVkIG1vcmUKICAgICAqIGNvbnRyb2wgdGhhbiB3aGF0IHRoaXMgbWV0aG9kIHByb3ZpZGVzCiAgICAgKi8KICAgIGNvbnN0IFFVRVJZID0gJ3F1ZXJ5JzsKCiAgICAvKioKICAgICAqIHNpbms6IChyZXNvdXJjZXxzdHJpbmd8U3RyZWFtSW50ZXJmYWNlKSBXaGVyZSB0aGUgZGF0YSBvZiB0aGUKICAgICAqIHJlc3BvbnNlIGlzIHdyaXR0ZW4gdG8uIERlZmF1bHRzIHRvIGEgUEhQIHRlbXAgc3RyZWFtLiBQcm92aWRpbmcgYQogICAgICogc3RyaW5nIHdpbGwgd3JpdGUgZGF0YSB0byBhIGZpbGUgYnkgdGhlIGdpdmVuIG5hbWUuCiAgICAgKi8KICAgIGNvbnN0IFNJTksgPSAnc2luayc7CgogICAgLyoqCiAgICAgKiBzeW5jaHJvbm91czogKGJvb2wpIFNldCB0byB0cnVlIHRvIGluZm9ybSBIVFRQIGhhbmRsZXJzIHRoYXQgeW91IGludGVuZAogICAgICogb24gd2FpdGluZyBvbiB0aGUgcmVzcG9uc2UuIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3Igb3B0aW1pemF0aW9ucy4gTm90ZQogICAgICogdGhhdCBhIHByb21pc2UgaXMgc3RpbGwgcmV0dXJuZWQgaWYgeW91IGFyZSB1c2luZyBvbmUgb2YgdGhlIGFzeW5jCiAgICAgKiBjbGllbnQgbWV0aG9kcy4KICAgICAqLwogICAgY29uc3QgU1lOQ0hST05PVVMgPSAnc3luY2hyb25vdXMnOwoKICAgIC8qKgogICAgICogc3NsX2tleTogKGFycmF5fHN0cmluZykgU3BlY2lmeSB0aGUgcGF0aCB0byBhIGZpbGUgY29udGFpbmluZyBhIHByaXZhdGUKICAgICAqIFNTTCBrZXkgaW4gUEVNIGZvcm1hdC4gSWYgYSBwYXNzd29yZCBpcyByZXF1aXJlZCwgdGhlbiBzZXQgdG8gYW4gYXJyYXkKICAgICAqIGNvbnRhaW5pbmcgdGhlIHBhdGggdG8gdGhlIFNTTCBrZXkgaW4gdGhlIGZpcnN0IGFycmF5IGVsZW1lbnQgZm9sbG93ZWQKICAgICAqIGJ5IHRoZSBwYXNzd29yZCByZXF1aXJlZCBmb3IgdGhlIGNlcnRpZmljYXRlIGluIHRoZSBzZWNvbmQgZWxlbWVudC4KICAgICAqLwogICAgY29uc3QgU1NMX0tFWSA9ICdzc2xfa2V5JzsKCiAgICAvKioKICAgICAqIHN0cmVhbTogU2V0IHRvIHRydWUgdG8gYXR0ZW1wdCB0byBzdHJlYW0gYSByZXNwb25zZSByYXRoZXIgdGhhbgogICAgICogZG93bmxvYWQgaXQgYWxsIHVwLWZyb250LgogICAgICovCiAgICBjb25zdCBTVFJFQU0gPSAnc3RyZWFtJzsKCiAgICAvKioKICAgICAqIHZlcmlmeTogKGJvb2x8c3RyaW5nLCBkZWZhdWx0PXRydWUpIERlc2NyaWJlcyB0aGUgU1NMIGNlcnRpZmljYXRlCiAgICAgKiB2ZXJpZmljYXRpb24gYmVoYXZpb3Igb2YgYSByZXF1ZXN0LiBTZXQgdG8gdHJ1ZSB0byBlbmFibGUgU1NMCiAgICAgKiBjZXJ0aWZpY2F0ZSB2ZXJpZmljYXRpb24gdXNpbmcgdGhlIHN5c3RlbSBDQSBidW5kbGUgd2hlbiBhdmFpbGFibGUKICAgICAqICh0aGUgZGVmYXVsdCkuIFNldCB0byBmYWxzZSB0byBkaXNhYmxlIGNlcnRpZmljYXRlIHZlcmlmaWNhdGlvbiAodGhpcwogICAgICogaXMgaW5zZWN1cmUhKS4gU2V0IHRvIGEgc3RyaW5nIHRvIHByb3ZpZGUgdGhlIHBhdGggdG8gYSBDQSBidW5kbGUgb24KICAgICAqIGRpc2sgdG8gZW5hYmxlIHZlcmlmaWNhdGlvbiB1c2luZyBhIGN1c3RvbSBjZXJ0aWZpY2F0ZS4KICAgICAqLwogICAgY29uc3QgVkVSSUZZID0gJ3ZlcmlmeSc7CgogICAgLyoqCiAgICAgKiB0aW1lb3V0OiAoZmxvYXQsIGRlZmF1bHQ9MCkgRmxvYXQgZGVzY3JpYmluZyB0aGUgdGltZW91dCBvZiB0aGUKICAgICAqIHJlcXVlc3QgaW4gc2Vjb25kcy4gVXNlIDAgdG8gd2FpdCBpbmRlZmluaXRlbHkgKHRoZSBkZWZhdWx0IGJlaGF2aW9yKS4KICAgICAqLwogICAgY29uc3QgVElNRU9VVCA9ICd0aW1lb3V0JzsKCiAgICAvKioKICAgICAqIHJlYWRfdGltZW91dDogKGZsb2F0LCBkZWZhdWx0PWRlZmF1bHRfc29ja2V0X3RpbWVvdXQgaW5pIHNldHRpbmcpIEZsb2F0IGRlc2NyaWJpbmcKICAgICAqIHRoZSBib2R5IHJlYWQgdGltZW91dCwgZm9yIHN0cmVhbSByZXF1ZXN0cy4KICAgICAqLwogICAgY29uc3QgUkVBRF9USU1FT1VUID0gJ3JlYWRfdGltZW91dCc7CgogICAgLyoqCiAgICAgKiB2ZXJzaW9uOiAoZmxvYXQpIFNwZWNpZmllcyB0aGUgSFRUUCBwcm90b2NvbCB2ZXJzaW9uIHRvIGF0dGVtcHQgdG8gdXNlLgogICAgICovCiAgICBjb25zdCBWRVJTSU9OID0gJ3ZlcnNpb24nOwoKICAgIC8qKgogICAgICogZm9yY2VfaXBfcmVzb2x2ZTogKGJvb2wpIEZvcmNlIGNsaWVudCB0byB1c2Ugb25seSBpcHY0IG9yIGlwdjYgcHJvdG9jb2wKICAgICAqLwogICAgY29uc3QgRk9SQ0VfSVBfUkVTT0xWRSA9ICdmb3JjZV9pcF9yZXNvbHZlJzsKfQo=AppDevTools/query/vendor/guzzlehttp/guzzle/src/RetryMiddleware.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHA7Cgp1c2UgR3V6emxlSHR0cFxQcm9taXNlXFByb21pc2VJbnRlcmZhY2U7CnVzZSBHdXp6bGVIdHRwXFByb21pc2VcUmVqZWN0ZWRQcm9taXNlOwp1c2UgR3V6emxlSHR0cFxQc3I3Owp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXNwb25zZUludGVyZmFjZTsKCi8qKgogKiBNaWRkbGV3YXJlIHRoYXQgcmV0cmllcyByZXF1ZXN0cyBiYXNlZCBvbiB0aGUgYm9vbGVhbiByZXN1bHQgb2YKICogaW52b2tpbmcgdGhlIHByb3ZpZGVkICJkZWNpZGVyIiBmdW5jdGlvbi4KICovCmNsYXNzIFJldHJ5TWlkZGxld2FyZQp7CiAgICAvKiogQHZhciBjYWxsYWJsZSAgKi8KICAgIHByaXZhdGUgJG5leHRIYW5kbGVyOwoKICAgIC8qKiBAdmFyIGNhbGxhYmxlICovCiAgICBwcml2YXRlICRkZWNpZGVyOwoKICAgIC8qKgogICAgICogQHBhcmFtIGNhbGxhYmxlICRkZWNpZGVyICAgICBGdW5jdGlvbiB0aGF0IGFjY2VwdHMgdGhlIG51bWJlciBvZiByZXRyaWVzLAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIHJlcXVlc3QsIFtyZXNwb25zZV0sIGFuZCBbZXhjZXB0aW9uXSBhbmQKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJucyB0cnVlIGlmIHRoZSByZXF1ZXN0IGlzIHRvIGJlCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHJpZWQuCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJG5leHRIYW5kbGVyIE5leHQgaGFuZGxlciB0byBpbnZva2UuCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJGRlbGF5ICAgICAgIEZ1bmN0aW9uIHRoYXQgYWNjZXB0cyB0aGUgbnVtYmVyIG9mIHJldHJpZXMKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIFtyZXNwb25zZV0gYW5kIHJldHVybnMgdGhlIG51bWJlciBvZgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWxsaXNlY29uZHMgdG8gZGVsYXkuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgKICAgICAgICBjYWxsYWJsZSAkZGVjaWRlciwKICAgICAgICBjYWxsYWJsZSAkbmV4dEhhbmRsZXIsCiAgICAgICAgY2FsbGFibGUgJGRlbGF5ID0gbnVsbAogICAgKSB7CiAgICAgICAgJHRoaXMtPmRlY2lkZXIgPSAkZGVjaWRlcjsKICAgICAgICAkdGhpcy0+bmV4dEhhbmRsZXIgPSAkbmV4dEhhbmRsZXI7CiAgICAgICAgJHRoaXMtPmRlbGF5ID0gJGRlbGF5ID86IF9fQ0xBU1NfXyAuICc6OmV4cG9uZW50aWFsRGVsYXknOwogICAgfQoKICAgIC8qKgogICAgICogRGVmYXVsdCBleHBvbmVudGlhbCBiYWNrb2ZmIGRlbGF5IGZ1bmN0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSAkcmV0cmllcwogICAgICoKICAgICAqIEByZXR1cm4gaW50CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZXhwb25lbnRpYWxEZWxheSgkcmV0cmllcykKICAgIHsKICAgICAgICByZXR1cm4gKGludCkgcG93KDIsICRyZXRyaWVzIC0gMSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdAogICAgICogQHBhcmFtIGFycmF5ICAgICAgICAgICAgJG9wdGlvbnMKICAgICAqCiAgICAgKiBAcmV0dXJuIFByb21pc2VJbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9faW52b2tlKFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIGFycmF5ICRvcHRpb25zKQogICAgewogICAgICAgIGlmICghaXNzZXQoJG9wdGlvbnNbJ3JldHJpZXMnXSkpIHsKICAgICAgICAgICAgJG9wdGlvbnNbJ3JldHJpZXMnXSA9IDA7CiAgICAgICAgfQoKICAgICAgICAkZm4gPSAkdGhpcy0+bmV4dEhhbmRsZXI7CiAgICAgICAgcmV0dXJuICRmbigkcmVxdWVzdCwgJG9wdGlvbnMpCiAgICAgICAgICAgIC0+dGhlbigKICAgICAgICAgICAgICAgICR0aGlzLT5vbkZ1bGZpbGxlZCgkcmVxdWVzdCwgJG9wdGlvbnMpLAogICAgICAgICAgICAgICAgJHRoaXMtPm9uUmVqZWN0ZWQoJHJlcXVlc3QsICRvcHRpb25zKQogICAgICAgICAgICApOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gb25GdWxmaWxsZWQoUmVxdWVzdEludGVyZmFjZSAkcmVxLCBhcnJheSAkb3B0aW9ucykKICAgIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCR2YWx1ZSkgdXNlICgkcmVxLCAkb3B0aW9ucykgewogICAgICAgICAgICBpZiAoIWNhbGxfdXNlcl9mdW5jKAogICAgICAgICAgICAgICAgJHRoaXMtPmRlY2lkZXIsCiAgICAgICAgICAgICAgICAkb3B0aW9uc1sncmV0cmllcyddLAogICAgICAgICAgICAgICAgJHJlcSwKICAgICAgICAgICAgICAgICR2YWx1ZSwKICAgICAgICAgICAgICAgIG51bGwKICAgICAgICAgICAgKSkgewogICAgICAgICAgICAgICAgcmV0dXJuICR2YWx1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gJHRoaXMtPmRvUmV0cnkoJHJlcSwgJG9wdGlvbnMsICR2YWx1ZSk7CiAgICAgICAgfTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIG9uUmVqZWN0ZWQoUmVxdWVzdEludGVyZmFjZSAkcmVxLCBhcnJheSAkb3B0aW9ucykKICAgIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCRyZWFzb24pIHVzZSAoJHJlcSwgJG9wdGlvbnMpIHsKICAgICAgICAgICAgaWYgKCFjYWxsX3VzZXJfZnVuYygKICAgICAgICAgICAgICAgICR0aGlzLT5kZWNpZGVyLAogICAgICAgICAgICAgICAgJG9wdGlvbnNbJ3JldHJpZXMnXSwKICAgICAgICAgICAgICAgICRyZXEsCiAgICAgICAgICAgICAgICBudWxsLAogICAgICAgICAgICAgICAgJHJlYXNvbgogICAgICAgICAgICApKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gXEd1enpsZUh0dHBcUHJvbWlzZVxyZWplY3Rpb25fZm9yKCRyZWFzb24pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+ZG9SZXRyeSgkcmVxLCAkb3B0aW9ucyk7CiAgICAgICAgfTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGRvUmV0cnkoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgYXJyYXkgJG9wdGlvbnMsIFJlc3BvbnNlSW50ZXJmYWNlICRyZXNwb25zZSA9IG51bGwpCiAgICB7CiAgICAgICAgJG9wdGlvbnNbJ2RlbGF5J10gPSBjYWxsX3VzZXJfZnVuYygkdGhpcy0+ZGVsYXksICsrJG9wdGlvbnNbJ3JldHJpZXMnXSwgJHJlc3BvbnNlKTsKCiAgICAgICAgcmV0dXJuICR0aGlzKCRyZXF1ZXN0LCAkb3B0aW9ucyk7CiAgICB9Cn0KAppDevTools/query/vendor/guzzlehttp/guzzle/src/TransferStats.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHA7Cgp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXF1ZXN0SW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxSZXNwb25zZUludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcVXJpSW50ZXJmYWNlOwoKLyoqCiAqIFJlcHJlc2VudHMgZGF0YSBhdCB0aGUgcG9pbnQgYWZ0ZXIgaXQgd2FzIHRyYW5zZmVycmVkIGVpdGhlciBzdWNjZXNzZnVsbHkKICogb3IgYWZ0ZXIgYSBuZXR3b3JrIGVycm9yLgogKi8KZmluYWwgY2xhc3MgVHJhbnNmZXJTdGF0cwp7CiAgICBwcml2YXRlICRyZXF1ZXN0OwogICAgcHJpdmF0ZSAkcmVzcG9uc2U7CiAgICBwcml2YXRlICR0cmFuc2ZlclRpbWU7CiAgICBwcml2YXRlICRoYW5kbGVyU3RhdHM7CiAgICBwcml2YXRlICRoYW5kbGVyRXJyb3JEYXRhOwoKICAgIC8qKgogICAgICogQHBhcmFtIFJlcXVlc3RJbnRlcmZhY2UgICRyZXF1ZXN0ICAgICAgICAgIFJlcXVlc3QgdGhhdCB3YXMgc2VudC4KICAgICAqIEBwYXJhbSBSZXNwb25zZUludGVyZmFjZSAkcmVzcG9uc2UgICAgICAgICBSZXNwb25zZSByZWNlaXZlZCAoaWYgYW55KQogICAgICogQHBhcmFtIG51bGwgICAgICAgICAgICAgICR0cmFuc2ZlclRpbWUgICAgIFRvdGFsIGhhbmRsZXIgdHJhbnNmZXIgdGltZS4KICAgICAqIEBwYXJhbSBtaXhlZCAgICAgICAgICAgICAkaGFuZGxlckVycm9yRGF0YSBIYW5kbGVyIGVycm9yIGRhdGEuCiAgICAgKiBAcGFyYW0gYXJyYXkgICAgICAgICAgICAgJGhhbmRsZXJTdGF0cyAgICAgSGFuZGxlciBzcGVjaWZpYyBzdGF0cy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KAogICAgICAgIFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsCiAgICAgICAgUmVzcG9uc2VJbnRlcmZhY2UgJHJlc3BvbnNlID0gbnVsbCwKICAgICAgICAkdHJhbnNmZXJUaW1lID0gbnVsbCwKICAgICAgICAkaGFuZGxlckVycm9yRGF0YSA9IG51bGwsCiAgICAgICAgJGhhbmRsZXJTdGF0cyA9IFtdCiAgICApIHsKICAgICAgICAkdGhpcy0+cmVxdWVzdCA9ICRyZXF1ZXN0OwogICAgICAgICR0aGlzLT5yZXNwb25zZSA9ICRyZXNwb25zZTsKICAgICAgICAkdGhpcy0+dHJhbnNmZXJUaW1lID0gJHRyYW5zZmVyVGltZTsKICAgICAgICAkdGhpcy0+aGFuZGxlckVycm9yRGF0YSA9ICRoYW5kbGVyRXJyb3JEYXRhOwogICAgICAgICR0aGlzLT5oYW5kbGVyU3RhdHMgPSAkaGFuZGxlclN0YXRzOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBSZXF1ZXN0SW50ZXJmYWNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRSZXF1ZXN0KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnJlcXVlc3Q7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSByZXNwb25zZSB0aGF0IHdhcyByZWNlaXZlZCAoaWYgYW55KS4KICAgICAqCiAgICAgKiBAcmV0dXJuIFJlc3BvbnNlSW50ZXJmYWNlfG51bGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFJlc3BvbnNlKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnJlc3BvbnNlOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJucyB0cnVlIGlmIGEgcmVzcG9uc2Ugd2FzIHJlY2VpdmVkLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaGFzUmVzcG9uc2UoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cmVzcG9uc2UgIT09IG51bGw7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXRzIGhhbmRsZXIgc3BlY2lmaWMgZXJyb3IgZGF0YS4KICAgICAqCiAgICAgKiBUaGlzIG1pZ2h0IGJlIGFuIGV4Y2VwdGlvbiwgYSBpbnRlZ2VyIHJlcHJlc2VudGluZyBhbiBlcnJvciBjb2RlLCBvcgogICAgICogYW55dGhpbmcgZWxzZS4gUmVseWluZyBvbiB0aGlzIHZhbHVlIGFzc3VtZXMgdGhhdCB5b3Uga25vdyB3aGF0IGhhbmRsZXIKICAgICAqIHlvdSBhcmUgdXNpbmcuCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SGFuZGxlckVycm9yRGF0YSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5oYW5kbGVyRXJyb3JEYXRhOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBlZmZlY3RpdmUgVVJJIHRoZSByZXF1ZXN0IHdhcyBzZW50IHRvLgogICAgICoKICAgICAqIEByZXR1cm4gVXJpSW50ZXJmYWNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRFZmZlY3RpdmVVcmkoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cmVxdWVzdC0+Z2V0VXJpKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGVzdGltYXRlZCB0aW1lIHRoZSByZXF1ZXN0IHdhcyBiZWluZyB0cmFuc2ZlcnJlZCBieSB0aGUgaGFuZGxlci4KICAgICAqCiAgICAgKiBAcmV0dXJuIGZsb2F0IFRpbWUgaW4gc2Vjb25kcy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFRyYW5zZmVyVGltZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT50cmFuc2ZlclRpbWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXRzIGFuIGFycmF5IG9mIGFsbCBvZiB0aGUgaGFuZGxlciBzcGVjaWZpYyB0cmFuc2ZlciBkYXRhLgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEhhbmRsZXJTdGF0cygpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5oYW5kbGVyU3RhdHM7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgYSBzcGVjaWZpYyBoYW5kbGVyIHN0YXRpc3RpYyBmcm9tIHRoZSBoYW5kbGVyIGJ5IG5hbWUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc3RhdCBIYW5kbGVyIHNwZWNpZmljIHRyYW5zZmVyIHN0YXQgdG8gcmV0cmlldmUuCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZHxudWxsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRIYW5kbGVyU3RhdCgkc3RhdCkKICAgIHsKICAgICAgICByZXR1cm4gaXNzZXQoJHRoaXMtPmhhbmRsZXJTdGF0c1skc3RhdF0pCiAgICAgICAgICAgID8gJHRoaXMtPmhhbmRsZXJTdGF0c1skc3RhdF0KICAgICAgICAgICAgOiBudWxsOwogICAgfQp9Cg==AppDevTools/query/vendor/guzzlehttp/guzzle/src/UriTemplate.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHA7CgovKioKICogRXhwYW5kcyBVUkkgdGVtcGxhdGVzLiBVc2VybGFuZCBpbXBsZW1lbnRhdGlvbiBvZiBQRUNMIHVyaV90ZW1wbGF0ZS4KICoKICogQGxpbmsgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjU3MAogKi8KY2xhc3MgVXJpVGVtcGxhdGUKewogICAgLyoqIEB2YXIgc3RyaW5nIFVSSSB0ZW1wbGF0ZSAqLwogICAgcHJpdmF0ZSAkdGVtcGxhdGU7CgogICAgLyoqIEB2YXIgYXJyYXkgVmFyaWFibGVzIHRvIHVzZSBpbiB0aGUgdGVtcGxhdGUgZXhwYW5zaW9uICovCiAgICBwcml2YXRlICR2YXJpYWJsZXM7CgogICAgLyoqIEB2YXIgYXJyYXkgSGFzaCBmb3IgcXVpY2sgb3BlcmF0b3IgbG9va3VwcyAqLwogICAgcHJpdmF0ZSBzdGF0aWMgJG9wZXJhdG9ySGFzaCA9IFsKICAgICAgICAnJyAgPT4gWydwcmVmaXgnID0+ICcnLCAgJ2pvaW5lcicgPT4gJywnLCAncXVlcnknID0+IGZhbHNlXSwKICAgICAgICAnKycgPT4gWydwcmVmaXgnID0+ICcnLCAgJ2pvaW5lcicgPT4gJywnLCAncXVlcnknID0+IGZhbHNlXSwKICAgICAgICAnIycgPT4gWydwcmVmaXgnID0+ICcjJywgJ2pvaW5lcicgPT4gJywnLCAncXVlcnknID0+IGZhbHNlXSwKICAgICAgICAnLicgPT4gWydwcmVmaXgnID0+ICcuJywgJ2pvaW5lcicgPT4gJy4nLCAncXVlcnknID0+IGZhbHNlXSwKICAgICAgICAnLycgPT4gWydwcmVmaXgnID0+ICcvJywgJ2pvaW5lcicgPT4gJy8nLCAncXVlcnknID0+IGZhbHNlXSwKICAgICAgICAnOycgPT4gWydwcmVmaXgnID0+ICc7JywgJ2pvaW5lcicgPT4gJzsnLCAncXVlcnknID0+IHRydWVdLAogICAgICAgICc/JyA9PiBbJ3ByZWZpeCcgPT4gJz8nLCAnam9pbmVyJyA9PiAnJicsICdxdWVyeScgPT4gdHJ1ZV0sCiAgICAgICAgJyYnID0+IFsncHJlZml4JyA9PiAnJicsICdqb2luZXInID0+ICcmJywgJ3F1ZXJ5JyA9PiB0cnVlXQogICAgXTsKCiAgICAvKiogQHZhciBhcnJheSBEZWxpbWl0ZXJzICovCiAgICBwcml2YXRlIHN0YXRpYyAkZGVsaW1zID0gWyc6JywgJy8nLCAnPycsICcjJywgJ1snLCAnXScsICdAJywgJyEnLCAnJCcsCiAgICAgICAgJyYnLCAnXCcnLCAnKCcsICcpJywgJyonLCAnKycsICcsJywgJzsnLCAnPSddOwoKICAgIC8qKiBAdmFyIGFycmF5IFBlcmNlbnQgZW5jb2RlZCBkZWxpbWl0ZXJzICovCiAgICBwcml2YXRlIHN0YXRpYyAkZGVsaW1zUGN0ID0gWyclM0EnLCAnJTJGJywgJyUzRicsICclMjMnLCAnJTVCJywgJyU1RCcsCiAgICAgICAgJyU0MCcsICclMjEnLCAnJTI0JywgJyUyNicsICclMjcnLCAnJTI4JywgJyUyOScsICclMkEnLCAnJTJCJywgJyUyQycsCiAgICAgICAgJyUzQicsICclM0QnXTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gZXhwYW5kKCR0ZW1wbGF0ZSwgYXJyYXkgJHZhcmlhYmxlcykKICAgIHsKICAgICAgICBpZiAoZmFsc2UgPT09IHN0cnBvcygkdGVtcGxhdGUsICd7JykpIHsKICAgICAgICAgICAgcmV0dXJuICR0ZW1wbGF0ZTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT50ZW1wbGF0ZSA9ICR0ZW1wbGF0ZTsKICAgICAgICAkdGhpcy0+dmFyaWFibGVzID0gJHZhcmlhYmxlczsKCiAgICAgICAgcmV0dXJuIHByZWdfcmVwbGFjZV9jYWxsYmFjaygKICAgICAgICAgICAgJy9ceyhbXlx9XSspXH0vJywKICAgICAgICAgICAgWyR0aGlzLCAnZXhwYW5kTWF0Y2gnXSwKICAgICAgICAgICAgJHRoaXMtPnRlbXBsYXRlCiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIFBhcnNlIGFuIGV4cHJlc3Npb24gaW50byBwYXJ0cwogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGV4cHJlc3Npb24gRXhwcmVzc2lvbiB0byBwYXJzZQogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkgUmV0dXJucyBhbiBhc3NvY2lhdGl2ZSBhcnJheSBvZiBwYXJ0cwogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIHBhcnNlRXhwcmVzc2lvbigkZXhwcmVzc2lvbikKICAgIHsKICAgICAgICAkcmVzdWx0ID0gW107CgogICAgICAgIGlmIChpc3NldChzZWxmOjokb3BlcmF0b3JIYXNoWyRleHByZXNzaW9uWzBdXSkpIHsKICAgICAgICAgICAgJHJlc3VsdFsnb3BlcmF0b3InXSA9ICRleHByZXNzaW9uWzBdOwogICAgICAgICAgICAkZXhwcmVzc2lvbiA9IHN1YnN0cigkZXhwcmVzc2lvbiwgMSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHJlc3VsdFsnb3BlcmF0b3InXSA9ICcnOwogICAgICAgIH0KCiAgICAgICAgZm9yZWFjaCAoZXhwbG9kZSgnLCcsICRleHByZXNzaW9uKSBhcyAkdmFsdWUpIHsKICAgICAgICAgICAgJHZhbHVlID0gdHJpbSgkdmFsdWUpOwogICAgICAgICAgICAkdmFyc3BlYyA9IFtdOwogICAgICAgICAgICBpZiAoJGNvbG9uUG9zID0gc3RycG9zKCR2YWx1ZSwgJzonKSkgewogICAgICAgICAgICAgICAgJHZhcnNwZWNbJ3ZhbHVlJ10gPSBzdWJzdHIoJHZhbHVlLCAwLCAkY29sb25Qb3MpOwogICAgICAgICAgICAgICAgJHZhcnNwZWNbJ21vZGlmaWVyJ10gPSAnOic7CiAgICAgICAgICAgICAgICAkdmFyc3BlY1sncG9zaXRpb24nXSA9IChpbnQpIHN1YnN0cigkdmFsdWUsICRjb2xvblBvcyArIDEpOwogICAgICAgICAgICB9IGVsc2VpZiAoc3Vic3RyKCR2YWx1ZSwgLTEpID09PSAnKicpIHsKICAgICAgICAgICAgICAgICR2YXJzcGVjWydtb2RpZmllciddID0gJyonOwogICAgICAgICAgICAgICAgJHZhcnNwZWNbJ3ZhbHVlJ10gPSBzdWJzdHIoJHZhbHVlLCAwLCAtMSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkdmFyc3BlY1sndmFsdWUnXSA9IChzdHJpbmcpICR2YWx1ZTsKICAgICAgICAgICAgICAgICR2YXJzcGVjWydtb2RpZmllciddID0gJyc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHJlc3VsdFsndmFsdWVzJ11bXSA9ICR2YXJzcGVjOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBQcm9jZXNzIGFuIGV4cGFuc2lvbgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkbWF0Y2hlcyBNYXRjaGVzIG1ldCBpbiB0aGUgcHJlZ19yZXBsYWNlX2NhbGxiYWNrCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgUmV0dXJucyB0aGUgcmVwbGFjZW1lbnQgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZXhwYW5kTWF0Y2goYXJyYXkgJG1hdGNoZXMpCiAgICB7CiAgICAgICAgc3RhdGljICRyZmMxNzM4dG8zOTg2ID0gWycrJyA9PiAnJTIwJywgJyU3ZScgPT4gJ34nXTsKCiAgICAgICAgJHJlcGxhY2VtZW50cyA9IFtdOwogICAgICAgICRwYXJzZWQgPSBzZWxmOjpwYXJzZUV4cHJlc3Npb24oJG1hdGNoZXNbMV0pOwogICAgICAgICRwcmVmaXggPSBzZWxmOjokb3BlcmF0b3JIYXNoWyRwYXJzZWRbJ29wZXJhdG9yJ11dWydwcmVmaXgnXTsKICAgICAgICAkam9pbmVyID0gc2VsZjo6JG9wZXJhdG9ySGFzaFskcGFyc2VkWydvcGVyYXRvciddXVsnam9pbmVyJ107CiAgICAgICAgJHVzZVF1ZXJ5ID0gc2VsZjo6JG9wZXJhdG9ySGFzaFskcGFyc2VkWydvcGVyYXRvciddXVsncXVlcnknXTsKCiAgICAgICAgZm9yZWFjaCAoJHBhcnNlZFsndmFsdWVzJ10gYXMgJHZhbHVlKSB7CiAgICAgICAgICAgIGlmICghaXNzZXQoJHRoaXMtPnZhcmlhYmxlc1skdmFsdWVbJ3ZhbHVlJ11dKSkgewogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR2YXJpYWJsZSA9ICR0aGlzLT52YXJpYWJsZXNbJHZhbHVlWyd2YWx1ZSddXTsKICAgICAgICAgICAgJGFjdHVhbGx5VXNlUXVlcnkgPSAkdXNlUXVlcnk7CiAgICAgICAgICAgICRleHBhbmRlZCA9ICcnOwoKICAgICAgICAgICAgaWYgKGlzX2FycmF5KCR2YXJpYWJsZSkpIHsKICAgICAgICAgICAgICAgICRpc0Fzc29jID0gJHRoaXMtPmlzQXNzb2MoJHZhcmlhYmxlKTsKICAgICAgICAgICAgICAgICRrdnAgPSBbXTsKICAgICAgICAgICAgICAgIGZvcmVhY2ggKCR2YXJpYWJsZSBhcyAka2V5ID0+ICR2YXIpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoJGlzQXNzb2MpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGtleSA9IHJhd3VybGVuY29kZSgka2V5KTsKICAgICAgICAgICAgICAgICAgICAgICAgJGlzTmVzdGVkQXJyYXkgPSBpc19hcnJheSgkdmFyKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkaXNOZXN0ZWRBcnJheSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgaWYgKCEkaXNOZXN0ZWRBcnJheSkgewogICAgICAgICAgICAgICAgICAgICAgICAkdmFyID0gcmF3dXJsZW5jb2RlKCR2YXIpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHBhcnNlZFsnb3BlcmF0b3InXSA9PT0gJysnIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGFyc2VkWydvcGVyYXRvciddID09PSAnIycKICAgICAgICAgICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdmFyID0gJHRoaXMtPmRlY29kZVJlc2VydmVkKCR2YXIpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAoJHZhbHVlWydtb2RpZmllciddID09PSAnKicpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRpc0Fzc29jKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGlzTmVzdGVkQXJyYXkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOZXN0ZWQgYXJyYXlzIG11c3QgYWxsb3cgZm9yIGRlZXBseSBuZXN0ZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdHJ1Y3R1cmVzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR2YXIgPSBzdHJ0cigKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cF9idWlsZF9xdWVyeShbJGtleSA9PiAkdmFyXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZmMxNzM4dG8zOTg2CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHZhciA9ICRrZXkgLiAnPScgLiAkdmFyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJGtleSA+IDAgJiYgJGFjdHVhbGx5VXNlUXVlcnkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR2YXIgPSAkdmFsdWVbJ3ZhbHVlJ10gLiAnPScgLiAkdmFyOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAka3ZwWyRrZXldID0gJHZhcjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoZW1wdHkoJHZhcmlhYmxlKSkgewogICAgICAgICAgICAgICAgICAgICRhY3R1YWxseVVzZVF1ZXJ5ID0gZmFsc2U7CiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJHZhbHVlWydtb2RpZmllciddID09PSAnKicpIHsKICAgICAgICAgICAgICAgICAgICAkZXhwYW5kZWQgPSBpbXBsb2RlKCRqb2luZXIsICRrdnApOwogICAgICAgICAgICAgICAgICAgIGlmICgkaXNBc3NvYykgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBEb24ndCBwcmVwZW5kIHRoZSB2YWx1ZSBuYW1lIHdoZW4gdXNpbmcgdGhlIGV4cGxvZGUKICAgICAgICAgICAgICAgICAgICAgICAgLy8gbW9kaWZpZXIgd2l0aCBhbiBhc3NvY2lhdGl2ZSBhcnJheS4KICAgICAgICAgICAgICAgICAgICAgICAgJGFjdHVhbGx5VXNlUXVlcnkgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGlmICgkaXNBc3NvYykgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIGFuIGFzc29jaWF0aXZlIGFycmF5IGlzIGVuY291bnRlcmVkIGFuZCB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXhwbG9kZSBtb2RpZmllciBpcyBub3Qgc2V0LCB0aGVuIHRoZSByZXN1bHQgbXVzdCBiZQogICAgICAgICAgICAgICAgICAgICAgICAvLyBhIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIGtleXMgZm9sbG93ZWQgYnkgdGhlaXIKICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVzcGVjdGl2ZSB2YWx1ZXMuCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRrdnAgYXMgJGsgPT4gJiR2KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdiA9ICRrIC4gJywnIC4gJHY7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJGV4cGFuZGVkID0gaW1wbG9kZSgnLCcsICRrdnApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYgKCR2YWx1ZVsnbW9kaWZpZXInXSA9PT0gJzonKSB7CiAgICAgICAgICAgICAgICAgICAgJHZhcmlhYmxlID0gc3Vic3RyKCR2YXJpYWJsZSwgMCwgJHZhbHVlWydwb3NpdGlvbiddKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRleHBhbmRlZCA9IHJhd3VybGVuY29kZSgkdmFyaWFibGUpOwogICAgICAgICAgICAgICAgaWYgKCRwYXJzZWRbJ29wZXJhdG9yJ10gPT09ICcrJyB8fCAkcGFyc2VkWydvcGVyYXRvciddID09PSAnIycpIHsKICAgICAgICAgICAgICAgICAgICAkZXhwYW5kZWQgPSAkdGhpcy0+ZGVjb2RlUmVzZXJ2ZWQoJGV4cGFuZGVkKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCRhY3R1YWxseVVzZVF1ZXJ5KSB7CiAgICAgICAgICAgICAgICBpZiAoISRleHBhbmRlZCAmJiAkam9pbmVyICE9PSAnJicpIHsKICAgICAgICAgICAgICAgICAgICAkZXhwYW5kZWQgPSAkdmFsdWVbJ3ZhbHVlJ107CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICRleHBhbmRlZCA9ICR2YWx1ZVsndmFsdWUnXSAuICc9JyAuICRleHBhbmRlZDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHJlcGxhY2VtZW50c1tdID0gJGV4cGFuZGVkOwogICAgICAgIH0KCiAgICAgICAgJHJldCA9IGltcGxvZGUoJGpvaW5lciwgJHJlcGxhY2VtZW50cyk7CiAgICAgICAgaWYgKCRyZXQgJiYgJHByZWZpeCkgewogICAgICAgICAgICByZXR1cm4gJHByZWZpeCAuICRyZXQ7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJldDsKICAgIH0KCiAgICAvKioKICAgICAqIERldGVybWluZXMgaWYgYW4gYXJyYXkgaXMgYXNzb2NpYXRpdmUuCiAgICAgKgogICAgICogVGhpcyBtYWtlcyB0aGUgYXNzdW1wdGlvbiB0aGF0IGlucHV0IGFycmF5cyBhcmUgc2VxdWVuY2VzIG9yIGhhc2hlcy4KICAgICAqIFRoaXMgYXNzdW1wdGlvbiBpcyBhIHRyYWRlb2ZmIGZvciBhY2N1cmFjeSBpbiBmYXZvciBvZiBzcGVlZCwgYnV0IGl0CiAgICAgKiBzaG91bGQgd29yayBpbiBhbG1vc3QgZXZlcnkgY2FzZSB3aGVyZSBpbnB1dCBpcyBzdXBwbGllZCBmb3IgYSBVUkkKICAgICAqIHRlbXBsYXRlLgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkYXJyYXkgQXJyYXkgdG8gY2hlY2sKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBpc0Fzc29jKGFycmF5ICRhcnJheSkKICAgIHsKICAgICAgICByZXR1cm4gJGFycmF5ICYmIGFycmF5X2tleXMoJGFycmF5KVswXSAhPT0gMDsKICAgIH0KCiAgICAvKioKICAgICAqIFJlbW92ZXMgcGVyY2VudCBlbmNvZGluZyBvbiByZXNlcnZlZCBjaGFyYWN0ZXJzICh1c2VkIHdpdGggKyBhbmQgIwogICAgICogbW9kaWZpZXJzKS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdHJpbmcgU3RyaW5nIHRvIGZpeAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZGVjb2RlUmVzZXJ2ZWQoJHN0cmluZykKICAgIHsKICAgICAgICByZXR1cm4gc3RyX3JlcGxhY2Uoc2VsZjo6JGRlbGltc1BjdCwgc2VsZjo6JGRlbGltcywgJHN0cmluZyk7CiAgICB9Cn0KAppDevTools/query/vendor/guzzlehttp/guzzle/src/functions.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHA7Cgp1c2UgR3V6emxlSHR0cFxIYW5kbGVyXEN1cmxIYW5kbGVyOwp1c2UgR3V6emxlSHR0cFxIYW5kbGVyXEN1cmxNdWx0aUhhbmRsZXI7CnVzZSBHdXp6bGVIdHRwXEhhbmRsZXJcUHJveHk7CnVzZSBHdXp6bGVIdHRwXEhhbmRsZXJcU3RyZWFtSGFuZGxlcjsKCi8qKgogKiBFeHBhbmRzIGEgVVJJIHRlbXBsYXRlCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHRlbXBsYXRlICBVUkkgdGVtcGxhdGUKICogQHBhcmFtIGFycmF5ICAkdmFyaWFibGVzIFRlbXBsYXRlIHZhcmlhYmxlcwogKgogKiBAcmV0dXJuIHN0cmluZwogKi8KZnVuY3Rpb24gdXJpX3RlbXBsYXRlKCR0ZW1wbGF0ZSwgYXJyYXkgJHZhcmlhYmxlcykKewogICAgaWYgKGV4dGVuc2lvbl9sb2FkZWQoJ3VyaV90ZW1wbGF0ZScpKSB7CiAgICAgICAgLy8gQGNvZGVDb3ZlcmFnZUlnbm9yZVN0YXJ0CiAgICAgICAgcmV0dXJuIFx1cmlfdGVtcGxhdGUoJHRlbXBsYXRlLCAkdmFyaWFibGVzKTsKICAgICAgICAvLyBAY29kZUNvdmVyYWdlSWdub3JlRW5kCiAgICB9CgogICAgc3RhdGljICR1cmlUZW1wbGF0ZTsKICAgIGlmICghJHVyaVRlbXBsYXRlKSB7CiAgICAgICAgJHVyaVRlbXBsYXRlID0gbmV3IFVyaVRlbXBsYXRlKCk7CiAgICB9CgogICAgcmV0dXJuICR1cmlUZW1wbGF0ZS0+ZXhwYW5kKCR0ZW1wbGF0ZSwgJHZhcmlhYmxlcyk7Cn0KCi8qKgogKiBEZWJ1ZyBmdW5jdGlvbiB1c2VkIHRvIGRlc2NyaWJlIHRoZSBwcm92aWRlZCB2YWx1ZSB0eXBlIGFuZCBjbGFzcy4KICoKICogQHBhcmFtIG1peGVkICRpbnB1dAogKgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIGEgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIHR5cGUgb2YgdGhlIHZhcmlhYmxlIGFuZAogKiAgICAgICAgICAgICAgICBpZiBhIGNsYXNzIGlzIHByb3ZpZGVkLCB0aGUgY2xhc3MgbmFtZS4KICovCmZ1bmN0aW9uIGRlc2NyaWJlX3R5cGUoJGlucHV0KQp7CiAgICBzd2l0Y2ggKGdldHR5cGUoJGlucHV0KSkgewogICAgICAgIGNhc2UgJ29iamVjdCc6CiAgICAgICAgICAgIHJldHVybiAnb2JqZWN0KCcgLiBnZXRfY2xhc3MoJGlucHV0KSAuICcpJzsKICAgICAgICBjYXNlICdhcnJheSc6CiAgICAgICAgICAgIHJldHVybiAnYXJyYXkoJyAuIGNvdW50KCRpbnB1dCkgLiAnKSc7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgb2Jfc3RhcnQoKTsKICAgICAgICAgICAgdmFyX2R1bXAoJGlucHV0KTsKICAgICAgICAgICAgLy8gbm9ybWFsaXplIGZsb2F0IHZzIGRvdWJsZQogICAgICAgICAgICByZXR1cm4gc3RyX3JlcGxhY2UoJ2RvdWJsZSgnLCAnZmxvYXQoJywgcnRyaW0ob2JfZ2V0X2NsZWFuKCkpKTsKICAgIH0KfQoKLyoqCiAqIFBhcnNlcyBhbiBhcnJheSBvZiBoZWFkZXIgbGluZXMgaW50byBhbiBhc3NvY2lhdGl2ZSBhcnJheSBvZiBoZWFkZXJzLgogKgogKiBAcGFyYW0gYXJyYXkgJGxpbmVzIEhlYWRlciBsaW5lcyBhcnJheSBvZiBzdHJpbmdzIGluIHRoZSBmb2xsb3dpbmcKICogICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6ICJOYW1lOiBWYWx1ZSIKICogQHJldHVybiBhcnJheQogKi8KZnVuY3Rpb24gaGVhZGVyc19mcm9tX2xpbmVzKCRsaW5lcykKewogICAgJGhlYWRlcnMgPSBbXTsKCiAgICBmb3JlYWNoICgkbGluZXMgYXMgJGxpbmUpIHsKICAgICAgICAkcGFydHMgPSBleHBsb2RlKCc6JywgJGxpbmUsIDIpOwogICAgICAgICRoZWFkZXJzW3RyaW0oJHBhcnRzWzBdKV1bXSA9IGlzc2V0KCRwYXJ0c1sxXSkKICAgICAgICAgICAgPyB0cmltKCRwYXJ0c1sxXSkKICAgICAgICAgICAgOiBudWxsOwogICAgfQoKICAgIHJldHVybiAkaGVhZGVyczsKfQoKLyoqCiAqIFJldHVybnMgYSBkZWJ1ZyBzdHJlYW0gYmFzZWQgb24gdGhlIHByb3ZpZGVkIHZhcmlhYmxlLgogKgogKiBAcGFyYW0gbWl4ZWQgJHZhbHVlIE9wdGlvbmFsIHZhbHVlCiAqCiAqIEByZXR1cm4gcmVzb3VyY2UKICovCmZ1bmN0aW9uIGRlYnVnX3Jlc291cmNlKCR2YWx1ZSA9IG51bGwpCnsKICAgIGlmIChpc19yZXNvdXJjZSgkdmFsdWUpKSB7CiAgICAgICAgcmV0dXJuICR2YWx1ZTsKICAgIH0gZWxzZWlmIChkZWZpbmVkKCdTVERPVVQnKSkgewogICAgICAgIHJldHVybiBTVERPVVQ7CiAgICB9CgogICAgcmV0dXJuIGZvcGVuKCdwaHA6Ly9vdXRwdXQnLCAndycpOwp9CgovKioKICogQ2hvb3NlcyBhbmQgY3JlYXRlcyBhIGRlZmF1bHQgaGFuZGxlciB0byB1c2UgYmFzZWQgb24gdGhlIGVudmlyb25tZW50LgogKgogKiBUaGUgcmV0dXJuZWQgaGFuZGxlciBpcyBub3Qgd3JhcHBlZCBieSBhbnkgZGVmYXVsdCBtaWRkbGV3YXJlcy4KICoKICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbiBpZiBubyB2aWFibGUgSGFuZGxlciBpcyBhdmFpbGFibGUuCiAqIEByZXR1cm4gY2FsbGFibGUgUmV0dXJucyB0aGUgYmVzdCBoYW5kbGVyIGZvciB0aGUgZ2l2ZW4gc3lzdGVtLgogKi8KZnVuY3Rpb24gY2hvb3NlX2hhbmRsZXIoKQp7CiAgICAkaGFuZGxlciA9IG51bGw7CiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdjdXJsX211bHRpX2V4ZWMnKSAmJiBmdW5jdGlvbl9leGlzdHMoJ2N1cmxfZXhlYycpKSB7CiAgICAgICAgJGhhbmRsZXIgPSBQcm94eTo6d3JhcFN5bmMobmV3IEN1cmxNdWx0aUhhbmRsZXIoKSwgbmV3IEN1cmxIYW5kbGVyKCkpOwogICAgfSBlbHNlaWYgKGZ1bmN0aW9uX2V4aXN0cygnY3VybF9leGVjJykpIHsKICAgICAgICAkaGFuZGxlciA9IG5ldyBDdXJsSGFuZGxlcigpOwogICAgfSBlbHNlaWYgKGZ1bmN0aW9uX2V4aXN0cygnY3VybF9tdWx0aV9leGVjJykpIHsKICAgICAgICAkaGFuZGxlciA9IG5ldyBDdXJsTXVsdGlIYW5kbGVyKCk7CiAgICB9CgogICAgaWYgKGluaV9nZXQoJ2FsbG93X3VybF9mb3BlbicpKSB7CiAgICAgICAgJGhhbmRsZXIgPSAkaGFuZGxlcgogICAgICAgICAgICA/IFByb3h5Ojp3cmFwU3RyZWFtaW5nKCRoYW5kbGVyLCBuZXcgU3RyZWFtSGFuZGxlcigpKQogICAgICAgICAgICA6IG5ldyBTdHJlYW1IYW5kbGVyKCk7CiAgICB9IGVsc2VpZiAoISRoYW5kbGVyKSB7CiAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdHdXp6bGVIdHRwIHJlcXVpcmVzIGNVUkwsIHRoZSAnCiAgICAgICAgICAgIC4gJ2FsbG93X3VybF9mb3BlbiBpbmkgc2V0dGluZywgb3IgYSBjdXN0b20gSFRUUCBoYW5kbGVyLicpOwogICAgfQoKICAgIHJldHVybiAkaGFuZGxlcjsKfQoKLyoqCiAqIEdldCB0aGUgZGVmYXVsdCBVc2VyLUFnZW50IHN0cmluZyB0byB1c2Ugd2l0aCBHdXp6bGUKICoKICogQHJldHVybiBzdHJpbmcKICovCmZ1bmN0aW9uIGRlZmF1bHRfdXNlcl9hZ2VudCgpCnsKICAgIHN0YXRpYyAkZGVmYXVsdEFnZW50ID0gJyc7CgogICAgaWYgKCEkZGVmYXVsdEFnZW50KSB7CiAgICAgICAgJGRlZmF1bHRBZ2VudCA9ICdHdXp6bGVIdHRwLycgLiBDbGllbnQ6OlZFUlNJT047CiAgICAgICAgaWYgKGV4dGVuc2lvbl9sb2FkZWQoJ2N1cmwnKSAmJiBmdW5jdGlvbl9leGlzdHMoJ2N1cmxfdmVyc2lvbicpKSB7CiAgICAgICAgICAgICRkZWZhdWx0QWdlbnQgLj0gJyBjdXJsLycgLiBcY3VybF92ZXJzaW9uKClbJ3ZlcnNpb24nXTsKICAgICAgICB9CiAgICAgICAgJGRlZmF1bHRBZ2VudCAuPSAnIFBIUC8nIC4gUEhQX1ZFUlNJT047CiAgICB9CgogICAgcmV0dXJuICRkZWZhdWx0QWdlbnQ7Cn0KCi8qKgogKiBSZXR1cm5zIHRoZSBkZWZhdWx0IGNhY2VydCBidW5kbGUgZm9yIHRoZSBjdXJyZW50IHN5c3RlbS4KICoKICogRmlyc3QsIHRoZSBvcGVuc3NsLmNhZmlsZSBhbmQgY3VybC5jYWluZm8gcGhwLmluaSBzZXR0aW5ncyBhcmUgY2hlY2tlZC4KICogSWYgdGhvc2Ugc2V0dGluZ3MgYXJlIG5vdCBjb25maWd1cmVkLCB0aGVuIHRoZSBjb21tb24gbG9jYXRpb25zIGZvcgogKiBidW5kbGVzIGZvdW5kIG9uIFJlZCBIYXQsIENlbnRPUywgRmVkb3JhLCBVYnVudHUsIERlYmlhbiwgRnJlZUJTRCwgT1MgWAogKiBhbmQgV2luZG93cyBhcmUgY2hlY2tlZC4gSWYgYW55IG9mIHRoZXNlIGZpbGUgbG9jYXRpb25zIGFyZSBmb3VuZCBvbgogKiBkaXNrLCB0aGV5IHdpbGwgYmUgdXRpbGl6ZWQuCiAqCiAqIE5vdGU6IHRoZSByZXN1bHQgb2YgdGhpcyBmdW5jdGlvbiBpcyBjYWNoZWQgZm9yIHN1YnNlcXVlbnQgY2FsbHMuCiAqCiAqIEByZXR1cm4gc3RyaW5nCiAqIEB0aHJvd3MgXFJ1bnRpbWVFeGNlcHRpb24gaWYgbm8gYnVuZGxlIGNhbiBiZSBmb3VuZC4KICovCmZ1bmN0aW9uIGRlZmF1bHRfY2FfYnVuZGxlKCkKewogICAgc3RhdGljICRjYWNoZWQgPSBudWxsOwogICAgc3RhdGljICRjYWZpbGVzID0gWwogICAgICAgIC8vIFJlZCBIYXQsIENlbnRPUywgRmVkb3JhIChwcm92aWRlZCBieSB0aGUgY2EtY2VydGlmaWNhdGVzIHBhY2thZ2UpCiAgICAgICAgJy9ldGMvcGtpL3Rscy9jZXJ0cy9jYS1idW5kbGUuY3J0JywKICAgICAgICAvLyBVYnVudHUsIERlYmlhbiAocHJvdmlkZWQgYnkgdGhlIGNhLWNlcnRpZmljYXRlcyBwYWNrYWdlKQogICAgICAgICcvZXRjL3NzbC9jZXJ0cy9jYS1jZXJ0aWZpY2F0ZXMuY3J0JywKICAgICAgICAvLyBGcmVlQlNEIChwcm92aWRlZCBieSB0aGUgY2Ffcm9vdF9uc3MgcGFja2FnZSkKICAgICAgICAnL3Vzci9sb2NhbC9zaGFyZS9jZXJ0cy9jYS1yb290LW5zcy5jcnQnLAogICAgICAgIC8vIFNMRVMgMTIgKHByb3ZpZGVkIGJ5IHRoZSBjYS1jZXJ0aWZpY2F0ZXMgcGFja2FnZSkKICAgICAgICAnL3Zhci9saWIvY2EtY2VydGlmaWNhdGVzL2NhLWJ1bmRsZS5wZW0nLAogICAgICAgIC8vIE9TIFggcHJvdmlkZWQgYnkgaG9tZWJyZXcgKHVzaW5nIHRoZSBkZWZhdWx0IHBhdGgpCiAgICAgICAgJy91c3IvbG9jYWwvZXRjL29wZW5zc2wvY2VydC5wZW0nLAogICAgICAgIC8vIEdvb2dsZSBhcHAgZW5naW5lCiAgICAgICAgJy9ldGMvY2EtY2VydGlmaWNhdGVzLmNydCcsCiAgICAgICAgLy8gV2luZG93cz8KICAgICAgICAnQzpcXHdpbmRvd3NcXHN5c3RlbTMyXFxjdXJsLWNhLWJ1bmRsZS5jcnQnLAogICAgICAgICdDOlxcd2luZG93c1xcY3VybC1jYS1idW5kbGUuY3J0JywKICAgIF07CgogICAgaWYgKCRjYWNoZWQpIHsKICAgICAgICByZXR1cm4gJGNhY2hlZDsKICAgIH0KCiAgICBpZiAoJGNhID0gaW5pX2dldCgnb3BlbnNzbC5jYWZpbGUnKSkgewogICAgICAgIHJldHVybiAkY2FjaGVkID0gJGNhOwogICAgfQoKICAgIGlmICgkY2EgPSBpbmlfZ2V0KCdjdXJsLmNhaW5mbycpKSB7CiAgICAgICAgcmV0dXJuICRjYWNoZWQgPSAkY2E7CiAgICB9CgogICAgZm9yZWFjaCAoJGNhZmlsZXMgYXMgJGZpbGVuYW1lKSB7CiAgICAgICAgaWYgKGZpbGVfZXhpc3RzKCRmaWxlbmFtZSkpIHsKICAgICAgICAgICAgcmV0dXJuICRjYWNoZWQgPSAkZmlsZW5hbWU7CiAgICAgICAgfQogICAgfQoKICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbig8PDwgRU9UCk5vIHN5c3RlbSBDQSBidW5kbGUgY291bGQgYmUgZm91bmQgaW4gYW55IG9mIHRoZSB0aGUgY29tbW9uIHN5c3RlbSBsb2NhdGlvbnMuClBIUCB2ZXJzaW9ucyBlYXJsaWVyIHRoYW4gNS42IGFyZSBub3QgcHJvcGVybHkgY29uZmlndXJlZCB0byB1c2UgdGhlIHN5c3RlbSdzCkNBIGJ1bmRsZSBieSBkZWZhdWx0LiBJbiBvcmRlciB0byB2ZXJpZnkgcGVlciBjZXJ0aWZpY2F0ZXMsIHlvdSB3aWxsIG5lZWQgdG8Kc3VwcGx5IHRoZSBwYXRoIG9uIGRpc2sgdG8gYSBjZXJ0aWZpY2F0ZSBidW5kbGUgdG8gdGhlICd2ZXJpZnknIHJlcXVlc3QKb3B0aW9uOiBodHRwOi8vZG9jcy5ndXp6bGVwaHAub3JnL2VuL2xhdGVzdC9jbGllbnRzLmh0bWwjdmVyaWZ5LiBJZiB5b3UgZG8gbm90Cm5lZWQgYSBzcGVjaWZpYyBjZXJ0aWZpY2F0ZSBidW5kbGUsIHRoZW4gTW96aWxsYSBwcm92aWRlcyBhIGNvbW1vbmx5IHVzZWQgQ0EKYnVuZGxlIHdoaWNoIGNhbiBiZSBkb3dubG9hZGVkIGhlcmUgKHByb3ZpZGVkIGJ5IHRoZSBtYWludGFpbmVyIG9mIGNVUkwpOgpodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vYmFnZGVyL2NhLWJ1bmRsZS9tYXN0ZXIvY2EtYnVuZGxlLmNydC4gT25jZQp5b3UgaGF2ZSBhIENBIGJ1bmRsZSBhdmFpbGFibGUgb24gZGlzaywgeW91IGNhbiBzZXQgdGhlICdvcGVuc3NsLmNhZmlsZScgUEhQCmluaSBzZXR0aW5nIHRvIHBvaW50IHRvIHRoZSBwYXRoIHRvIHRoZSBmaWxlLCBhbGxvd2luZyB5b3UgdG8gb21pdCB0aGUgJ3ZlcmlmeScKcmVxdWVzdCBvcHRpb24uIFNlZSBodHRwOi8vY3VybC5oYXh4LnNlL2RvY3Mvc3NsY2VydHMuaHRtbCBmb3IgbW9yZQppbmZvcm1hdGlvbi4KRU9UCiAgICApOwp9CgovKioKICogQ3JlYXRlcyBhbiBhc3NvY2lhdGl2ZSBhcnJheSBvZiBsb3dlcmNhc2UgaGVhZGVyIG5hbWVzIHRvIHRoZSBhY3R1YWwKICogaGVhZGVyIGNhc2luZy4KICoKICogQHBhcmFtIGFycmF5ICRoZWFkZXJzCiAqCiAqIEByZXR1cm4gYXJyYXkKICovCmZ1bmN0aW9uIG5vcm1hbGl6ZV9oZWFkZXJfa2V5cyhhcnJheSAkaGVhZGVycykKewogICAgJHJlc3VsdCA9IFtdOwogICAgZm9yZWFjaCAoYXJyYXlfa2V5cygkaGVhZGVycykgYXMgJGtleSkgewogICAgICAgICRyZXN1bHRbc3RydG9sb3dlcigka2V5KV0gPSAka2V5OwogICAgfQoKICAgIHJldHVybiAkcmVzdWx0Owp9CgovKioKICogUmV0dXJucyB0cnVlIGlmIHRoZSBwcm92aWRlZCBob3N0IG1hdGNoZXMgYW55IG9mIHRoZSBubyBwcm94eSBhcmVhcy4KICoKICogVGhpcyBtZXRob2Qgd2lsbCBzdHJpcCBhIHBvcnQgZnJvbSB0aGUgaG9zdCBpZiBpdCBpcyBwcmVzZW50LiBFYWNoIHBhdHRlcm4KICogY2FuIGJlIG1hdGNoZWQgd2l0aCBhbiBleGFjdCBtYXRjaCAoZS5nLiwgImZvby5jb20iID09ICJmb28uY29tIikgb3IgYQogKiBwYXJ0aWFsIG1hdGNoOiAoZS5nLiwgImZvby5jb20iID09ICJiYXouZm9vLmNvbSIgYW5kICIuZm9vLmNvbSIgPT0KICogImJhei5mb28uY29tIiwgYnV0ICIuZm9vLmNvbSIgIT0gImZvby5jb20iKS4KICoKICogQXJlYXMgYXJlIG1hdGNoZWQgaW4gdGhlIGZvbGxvd2luZyBjYXNlczoKICogMS4gIioiICh3aXRob3V0IHF1b3RlcykgYWx3YXlzIG1hdGNoZXMgYW55IGhvc3RzLgogKiAyLiBBbiBleGFjdCBtYXRjaC4KICogMy4gVGhlIGFyZWEgc3RhcnRzIHdpdGggIi4iIGFuZCB0aGUgYXJlYSBpcyB0aGUgbGFzdCBwYXJ0IG9mIHRoZSBob3N0LiBlLmcuCiAqICAgICcubWl0LmVkdScgd2lsbCBtYXRjaCBhbnkgaG9zdCB0aGF0IGVuZHMgd2l0aCAnLm1pdC5lZHUnLgogKgogKiBAcGFyYW0gc3RyaW5nICRob3N0ICAgICAgICAgSG9zdCB0byBjaGVjayBhZ2FpbnN0IHRoZSBwYXR0ZXJucy4KICogQHBhcmFtIGFycmF5ICAkbm9Qcm94eUFycmF5IEFuIGFycmF5IG9mIGhvc3QgcGF0dGVybnMuCiAqCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gaXNfaG9zdF9pbl9ub3Byb3h5KCRob3N0LCBhcnJheSAkbm9Qcm94eUFycmF5KQp7CiAgICBpZiAoc3RybGVuKCRob3N0KSA9PT0gMCkgewogICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdFbXB0eSBob3N0IHByb3ZpZGVkJyk7CiAgICB9CgogICAgLy8gU3RyaXAgcG9ydCBpZiBwcmVzZW50LgogICAgaWYgKHN0cnBvcygkaG9zdCwgJzonKSkgewogICAgICAgICRob3N0ID0gZXhwbG9kZSgkaG9zdCwgJzonLCAyKVswXTsKICAgIH0KCiAgICBmb3JlYWNoICgkbm9Qcm94eUFycmF5IGFzICRhcmVhKSB7CiAgICAgICAgLy8gQWx3YXlzIG1hdGNoIG9uIHdpbGRjYXJkcy4KICAgICAgICBpZiAoJGFyZWEgPT09ICcqJykgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9IGVsc2VpZiAoZW1wdHkoJGFyZWEpKSB7CiAgICAgICAgICAgIC8vIERvbid0IG1hdGNoIG9uIGVtcHR5IHZhbHVlcy4KICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgfSBlbHNlaWYgKCRhcmVhID09PSAkaG9zdCkgewogICAgICAgICAgICAvLyBFeGFjdCBtYXRjaGVzLgogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBTcGVjaWFsIG1hdGNoIGlmIHRoZSBhcmVhIHdoZW4gcHJlZml4ZWQgd2l0aCAiLiIuIFJlbW92ZSBhbnkKICAgICAgICAgICAgLy8gZXhpc3RpbmcgbGVhZGluZyAiLiIgYW5kIGFkZCBhIG5ldyBsZWFkaW5nICIuIi4KICAgICAgICAgICAgJGFyZWEgPSAnLicgLiBsdHJpbSgkYXJlYSwgJy4nKTsKICAgICAgICAgICAgaWYgKHN1YnN0cigkaG9zdCwgLShzdHJsZW4oJGFyZWEpKSkgPT09ICRhcmVhKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gZmFsc2U7Cn0KCi8qKgogKiBXcmFwcGVyIGZvciBqc29uX2RlY29kZSB0aGF0IHRocm93cyB3aGVuIGFuIGVycm9yIG9jY3Vycy4KICoKICogQHBhcmFtIHN0cmluZyAkanNvbiAgICBKU09OIGRhdGEgdG8gcGFyc2UKICogQHBhcmFtIGJvb2wgJGFzc29jICAgICBXaGVuIHRydWUsIHJldHVybmVkIG9iamVjdHMgd2lsbCBiZSBjb252ZXJ0ZWQKICogICAgICAgICAgICAgICAgICAgICAgICBpbnRvIGFzc29jaWF0aXZlIGFycmF5cy4KICogQHBhcmFtIGludCAgICAkZGVwdGggICBVc2VyIHNwZWNpZmllZCByZWN1cnNpb24gZGVwdGguCiAqIEBwYXJhbSBpbnQgICAgJG9wdGlvbnMgQml0bWFzayBvZiBKU09OIGRlY29kZSBvcHRpb25zLgogKgogKiBAcmV0dXJuIG1peGVkCiAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBpZiB0aGUgSlNPTiBjYW5ub3QgYmUgZGVjb2RlZC4KICogQGxpbmsgaHR0cDovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5qc29uLWRlY29kZS5waHAKICovCmZ1bmN0aW9uIGpzb25fZGVjb2RlKCRqc29uLCAkYXNzb2MgPSBmYWxzZSwgJGRlcHRoID0gNTEyLCAkb3B0aW9ucyA9IDApCnsKICAgICRkYXRhID0gXGpzb25fZGVjb2RlKCRqc29uLCAkYXNzb2MsICRkZXB0aCwgJG9wdGlvbnMpOwogICAgaWYgKEpTT05fRVJST1JfTk9ORSAhPT0ganNvbl9sYXN0X2Vycm9yKCkpIHsKICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgJ2pzb25fZGVjb2RlIGVycm9yOiAnIC4ganNvbl9sYXN0X2Vycm9yX21zZygpCiAgICAgICAgKTsKICAgIH0KCiAgICByZXR1cm4gJGRhdGE7Cn0KCi8qKgogKiBXcmFwcGVyIGZvciBKU09OIGVuY29kaW5nIHRoYXQgdGhyb3dzIHdoZW4gYW4gZXJyb3Igb2NjdXJzLgogKgogKiBAcGFyYW0gbWl4ZWQgJHZhbHVlICAgVGhlIHZhbHVlIGJlaW5nIGVuY29kZWQKICogQHBhcmFtIGludCAgICAkb3B0aW9ucyBKU09OIGVuY29kZSBvcHRpb24gYml0bWFzawogKiBAcGFyYW0gaW50ICAgICRkZXB0aCAgIFNldCB0aGUgbWF4aW11bSBkZXB0aC4gTXVzdCBiZSBncmVhdGVyIHRoYW4gemVyby4KICoKICogQHJldHVybiBzdHJpbmcKICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGlmIHRoZSBKU09OIGNhbm5vdCBiZSBlbmNvZGVkLgogKiBAbGluayBodHRwOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmpzb24tZW5jb2RlLnBocAogKi8KZnVuY3Rpb24ganNvbl9lbmNvZGUoJHZhbHVlLCAkb3B0aW9ucyA9IDAsICRkZXB0aCA9IDUxMikKewogICAgJGpzb24gPSBcanNvbl9lbmNvZGUoJHZhbHVlLCAkb3B0aW9ucywgJGRlcHRoKTsKICAgIGlmIChKU09OX0VSUk9SX05PTkUgIT09IGpzb25fbGFzdF9lcnJvcigpKSB7CiAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oCiAgICAgICAgICAgICdqc29uX2VuY29kZSBlcnJvcjogJyAuIGpzb25fbGFzdF9lcnJvcl9tc2coKQogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuICRqc29uOwp9Cg==AppDevTools/query/vendor/guzzlehttp/guzzle/src/functions_include.phpPD9waHAKCi8vIERvbid0IHJlZGVmaW5lIHRoZSBmdW5jdGlvbnMgaWYgaW5jbHVkZWQgbXVsdGlwbGUgdGltZXMuCmlmICghZnVuY3Rpb25fZXhpc3RzKCdHdXp6bGVIdHRwXHVyaV90ZW1wbGF0ZScpKSB7CiAgICByZXF1aXJlIF9fRElSX18gLiAnL2Z1bmN0aW9ucy5waHAnOwp9Cg==AppDevTools/query/vendor/guzzlehttp/promises/CHANGELOG.mdIyBDSEFOR0VMT0cKCgojIyAxLjMuMSAtIDIwMTYtMTItMjAKCiMjIyBGaXhlZAoKLSBgd2FpdCgpYCBmb3JlaWduIHByb21pc2UgY29tcGF0aWJpbGl0eQoKCiMjIDEuMy4wIC0gMjAxNi0xMS0xOAoKIyMjIEFkZGVkCgotIEFkZHMgc3VwcG9ydCBmb3IgY3VzdG9tIHRhc2sgcXVldWVzLgoKIyMjIEZpeGVkCgotIEZpeGVkIGNvcm91dGluZSBwcm9taXNlIG1lbW9yeSBsZWFrLgoKCiMjIDEuMi4wIC0gMjAxNi0wNS0xOAoKIyMjIENoYW5nZWQKCi0gVXBkYXRlIHRvIG5vdyBjYXRjaCBgXFRocm93YWJsZWAgb24gUEhQIDcrCgoKIyMgMS4xLjAgLSAyMDE2LTAzLTA3CgojIyMgQ2hhbmdlZAoKLSBVcGRhdGUgRWFjaFByb21pc2UgdG8gcHJldmVudCByZWN1cnJpbmcgb24gYSBpdGVyYXRvciB3aGVuIGFkdmFuY2luZywgYXMgdGhpcwogIGNvdWxkIHRyaWdnZXIgZmF0YWwgZ2VuZXJhdG9yIGVycm9ycy4KLSBVcGRhdGUgUHJvbWlzZSB0byBhbGxvdyByZWN1cnNpdmUgd2FpdGluZyB3aXRob3V0IHVud3JhcHBpbmcgZXhjZXB0aW9ucy4KCgojIyAxLjAuMyAtIDIwMTUtMTAtMTUKCiMjIyBDaGFuZ2VkCgotIFVwZGF0ZSBFYWNoUHJvbWlzZSB0byBpbW1lZGlhdGVseSByZXNvbHZlIHdoZW4gdGhlIHVuZGVybHlpbmcgcHJvbWlzZSBpdGVyYXRvcgogIGlzIGVtcHR5LiBQcmV2aW91c2x5LCBzdWNoIGEgcHJvbWlzZSB3b3VsZCB0aHJvdyBhbiBleGNlcHRpb24gd2hlbiBpdHMgYHdhaXRgCiAgZnVuY3Rpb24gd2FzIGNhbGxlZC4KCgojIyAxLjAuMiAtIDIwMTUtMDUtMTUKCiMjIyBDaGFuZ2VkCgotIENvbmRpdGlvbmFsbHkgcmVxdWlyZSBmdW5jdGlvbnMucGhwLgoKCiMjIDEuMC4xIC0gMjAxNS0wNi0yNAoKIyMjIENoYW5nZWQKCi0gVXBkYXRpbmcgRWFjaFByb21pc2UgdG8gY2FsbCBuZXh0IG9uIHRoZSB1bmRlcmx5aW5nIHByb21pc2UgaXRlcmF0b3IgYXMgbGF0ZQogIGFzIHBvc3NpYmxlIHRvIGVuc3VyZSB0aGF0IGdlbmVyYXRvcnMgdGhhdCBnZW5lcmF0ZSBuZXcgcmVxdWVzdHMgYmFzZWQgb24KICBjYWxsYmFja3MgYXJlIG5vdCBpdGVyYXRlZCB1bnRpbCBhZnRlciBjYWxsYmFja3MgYXJlIGludm9rZWQuCgoKIyMgMS4wLjAgLSAyMDE1LTA1LTEyCgotIEluaXRpYWwgcmVsZWFzZQo=AppDevTools/query/vendor/guzzlehttp/promises/LICENSEQ29weXJpZ2h0IChjKSAyMDE1LTIwMTYgTWljaGFlbCBEb3dsaW5nLCBodHRwczovL2dpdGh1Yi5jb20vbXRkb3dsaW5nIDxtdGRvd2xpbmdAZ21haWwuY29tPgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCmZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgphbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOClRIRSBTT0ZUV0FSRS4KAppDevTools/query/vendor/guzzlehttp/promises/MakefileYWxsOiBjbGVhbiB0ZXN0Cgp0ZXN0OgoJdmVuZG9yL2Jpbi9waHB1bml0Cgpjb3ZlcmFnZToKCXZlbmRvci9iaW4vcGhwdW5pdCAtLWNvdmVyYWdlLWh0bWw9YXJ0aWZhY3RzL2NvdmVyYWdlCgp2aWV3LWNvdmVyYWdlOgoJb3BlbiBhcnRpZmFjdHMvY292ZXJhZ2UvaW5kZXguaHRtbAoKY2xlYW46CglybSAtcmYgYXJ0aWZhY3RzLyoKAppDevTools/query/vendor/guzzlehttp/promises/README.mdIyBHdXp6bGUgUHJvbWlzZXMKCltQcm9taXNlcy9BK10oaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8pIGltcGxlbWVudGF0aW9uIHRoYXQgaGFuZGxlcyBwcm9taXNlCmNoYWluaW5nIGFuZCByZXNvbHV0aW9uIGl0ZXJhdGl2ZWx5LCBhbGxvd2luZyBmb3IgImluZmluaXRlIiBwcm9taXNlIGNoYWluaW5nCndoaWxlIGtlZXBpbmcgdGhlIHN0YWNrIHNpemUgY29uc3RhbnQuIFJlYWQgW3RoaXMgYmxvZyBwb3N0XShodHRwczovL2Jsb2cuZG9tZW5pYy5tZS95b3VyZS1taXNzaW5nLXRoZS1wb2ludC1vZi1wcm9taXNlcy8pCmZvciBhIGdlbmVyYWwgaW50cm9kdWN0aW9uIHRvIHByb21pc2VzLgoKLSBbRmVhdHVyZXNdKCNmZWF0dXJlcykKLSBbUXVpY2sgc3RhcnRdKCNxdWljay1zdGFydCkKLSBbU3luY2hyb25vdXMgd2FpdF0oI3N5bmNocm9ub3VzLXdhaXQpCi0gW0NhbmNlbGxhdGlvbl0oI2NhbmNlbGxhdGlvbikKLSBbQVBJXSgjYXBpKQogIC0gW1Byb21pc2VdKCNwcm9taXNlKQogIC0gW0Z1bGZpbGxlZFByb21pc2VdKCNmdWxmaWxsZWRwcm9taXNlKQogIC0gW1JlamVjdGVkUHJvbWlzZV0oI3JlamVjdGVkcHJvbWlzZSkKLSBbUHJvbWlzZSBpbnRlcm9wXSgjcHJvbWlzZS1pbnRlcm9wKQotIFtJbXBsZW1lbnRhdGlvbiBub3Rlc10oI2ltcGxlbWVudGF0aW9uLW5vdGVzKQoKCiMgRmVhdHVyZXMKCi0gW1Byb21pc2VzL0ErXShodHRwczovL3Byb21pc2VzYXBsdXMuY29tLykgaW1wbGVtZW50YXRpb24uCi0gUHJvbWlzZSByZXNvbHV0aW9uIGFuZCBjaGFpbmluZyBpcyBoYW5kbGVkIGl0ZXJhdGl2ZWx5LCBhbGxvd2luZyBmb3IKICAiaW5maW5pdGUiIHByb21pc2UgY2hhaW5pbmcuCi0gUHJvbWlzZXMgaGF2ZSBhIHN5bmNocm9ub3VzIGB3YWl0YCBtZXRob2QuCi0gUHJvbWlzZXMgY2FuIGJlIGNhbmNlbGxlZC4KLSBXb3JrcyB3aXRoIGFueSBvYmplY3QgdGhhdCBoYXMgYSBgdGhlbmAgZnVuY3Rpb24uCi0gQyMgc3R5bGUgYXN5bmMvYXdhaXQgY29yb3V0aW5lIHByb21pc2VzIHVzaW5nCiAgYEd1enpsZUh0dHBcUHJvbWlzZVxjb3JvdXRpbmUoKWAuCgoKIyBRdWljayBzdGFydAoKQSAqcHJvbWlzZSogcmVwcmVzZW50cyB0aGUgZXZlbnR1YWwgcmVzdWx0IG9mIGFuIGFzeW5jaHJvbm91cyBvcGVyYXRpb24uIFRoZQpwcmltYXJ5IHdheSBvZiBpbnRlcmFjdGluZyB3aXRoIGEgcHJvbWlzZSBpcyB0aHJvdWdoIGl0cyBgdGhlbmAgbWV0aG9kLCB3aGljaApyZWdpc3RlcnMgY2FsbGJhY2tzIHRvIHJlY2VpdmUgZWl0aGVyIGEgcHJvbWlzZSdzIGV2ZW50dWFsIHZhbHVlIG9yIHRoZSByZWFzb24Kd2h5IHRoZSBwcm9taXNlIGNhbm5vdCBiZSBmdWxmaWxsZWQuCgoKIyMgQ2FsbGJhY2tzCgpDYWxsYmFja3MgYXJlIHJlZ2lzdGVyZWQgd2l0aCB0aGUgYHRoZW5gIG1ldGhvZCBieSBwcm92aWRpbmcgYW4gb3B0aW9uYWwgCmAkb25GdWxmaWxsZWRgIGZvbGxvd2VkIGJ5IGFuIG9wdGlvbmFsIGAkb25SZWplY3RlZGAgZnVuY3Rpb24uCgoKYGBgcGhwCnVzZSBHdXp6bGVIdHRwXFByb21pc2VcUHJvbWlzZTsKCiRwcm9taXNlID0gbmV3IFByb21pc2UoKTsKJHByb21pc2UtPnRoZW4oCiAgICAvLyAkb25GdWxmaWxsZWQKICAgIGZ1bmN0aW9uICgkdmFsdWUpIHsKICAgICAgICBlY2hvICdUaGUgcHJvbWlzZSB3YXMgZnVsZmlsbGVkLic7CiAgICB9LAogICAgLy8gJG9uUmVqZWN0ZWQKICAgIGZ1bmN0aW9uICgkcmVhc29uKSB7CiAgICAgICAgZWNobyAnVGhlIHByb21pc2Ugd2FzIHJlamVjdGVkLic7CiAgICB9Cik7CmBgYAoKKlJlc29sdmluZyogYSBwcm9taXNlIG1lYW5zIHRoYXQgeW91IGVpdGhlciBmdWxmaWxsIGEgcHJvbWlzZSB3aXRoIGEgKnZhbHVlKiBvcgpyZWplY3QgYSBwcm9taXNlIHdpdGggYSAqcmVhc29uKi4gUmVzb2x2aW5nIGEgcHJvbWlzZXMgdHJpZ2dlcnMgY2FsbGJhY2tzCnJlZ2lzdGVyZWQgd2l0aCB0aGUgcHJvbWlzZXMncyBgdGhlbmAgbWV0aG9kLiBUaGVzZSBjYWxsYmFja3MgYXJlIHRyaWdnZXJlZApvbmx5IG9uY2UgYW5kIGluIHRoZSBvcmRlciBpbiB3aGljaCB0aGV5IHdlcmUgYWRkZWQuCgoKIyMgUmVzb2x2aW5nIGEgcHJvbWlzZQoKUHJvbWlzZXMgYXJlIGZ1bGZpbGxlZCB1c2luZyB0aGUgYHJlc29sdmUoJHZhbHVlKWAgbWV0aG9kLiBSZXNvbHZpbmcgYSBwcm9taXNlCndpdGggYW55IHZhbHVlIG90aGVyIHRoYW4gYSBgR3V6emxlSHR0cFxQcm9taXNlXFJlamVjdGVkUHJvbWlzZWAgd2lsbCB0cmlnZ2VyCmFsbCBvZiB0aGUgb25GdWxmaWxsZWQgY2FsbGJhY2tzIChyZXNvbHZpbmcgYSBwcm9taXNlIHdpdGggYSByZWplY3RlZCBwcm9taXNlCndpbGwgcmVqZWN0IHRoZSBwcm9taXNlIGFuZCB0cmlnZ2VyIHRoZSBgJG9uUmVqZWN0ZWRgIGNhbGxiYWNrcykuCgpgYGBwaHAKdXNlIEd1enpsZUh0dHBcUHJvbWlzZVxQcm9taXNlOwoKJHByb21pc2UgPSBuZXcgUHJvbWlzZSgpOwokcHJvbWlzZQogICAgLT50aGVuKGZ1bmN0aW9uICgkdmFsdWUpIHsKICAgICAgICAvLyBSZXR1cm4gYSB2YWx1ZSBhbmQgZG9uJ3QgYnJlYWsgdGhlIGNoYWluCiAgICAgICAgcmV0dXJuICJIZWxsbywgIiAuICR2YWx1ZTsKICAgIH0pCiAgICAvLyBUaGlzIHRoZW4gaXMgZXhlY3V0ZWQgYWZ0ZXIgdGhlIGZpcnN0IHRoZW4gYW5kIHJlY2VpdmVzIHRoZSB2YWx1ZQogICAgLy8gcmV0dXJuZWQgZnJvbSB0aGUgZmlyc3QgdGhlbi4KICAgIC0+dGhlbihmdW5jdGlvbiAoJHZhbHVlKSB7CiAgICAgICAgZWNobyAkdmFsdWU7CiAgICB9KTsKCi8vIFJlc29sdmluZyB0aGUgcHJvbWlzZSB0cmlnZ2VycyB0aGUgJG9uRnVsZmlsbGVkIGNhbGxiYWNrcyBhbmQgb3V0cHV0cwovLyAiSGVsbG8sIHJlYWRlciIuCiRwcm9taXNlLT5yZXNvbHZlKCdyZWFkZXIuJyk7CmBgYAoKCiMjIFByb21pc2UgZm9yd2FyZGluZwoKUHJvbWlzZXMgY2FuIGJlIGNoYWluZWQgb25lIGFmdGVyIHRoZSBvdGhlci4gRWFjaCB0aGVuIGluIHRoZSBjaGFpbiBpcyBhIG5ldwpwcm9taXNlLiBUaGUgcmV0dXJuIHZhbHVlIG9mIGEgcHJvbWlzZSBpcyB3aGF0J3MgZm9yd2FyZGVkIHRvIHRoZSBuZXh0CnByb21pc2UgaW4gdGhlIGNoYWluLiBSZXR1cm5pbmcgYSBwcm9taXNlIGluIGEgYHRoZW5gIGNhbGxiYWNrIHdpbGwgY2F1c2UgdGhlCnN1YnNlcXVlbnQgcHJvbWlzZXMgaW4gdGhlIGNoYWluIHRvIG9ubHkgYmUgZnVsZmlsbGVkIHdoZW4gdGhlIHJldHVybmVkIHByb21pc2UKaGFzIGJlZW4gZnVsZmlsbGVkLiBUaGUgbmV4dCBwcm9taXNlIGluIHRoZSBjaGFpbiB3aWxsIGJlIGludm9rZWQgd2l0aCB0aGUKcmVzb2x2ZWQgdmFsdWUgb2YgdGhlIHByb21pc2UuCgpgYGBwaHAKdXNlIEd1enpsZUh0dHBcUHJvbWlzZVxQcm9taXNlOwoKJHByb21pc2UgPSBuZXcgUHJvbWlzZSgpOwokbmV4dFByb21pc2UgPSBuZXcgUHJvbWlzZSgpOwoKJHByb21pc2UKICAgIC0+dGhlbihmdW5jdGlvbiAoJHZhbHVlKSB1c2UgKCRuZXh0UHJvbWlzZSkgewogICAgICAgIGVjaG8gJHZhbHVlOwogICAgICAgIHJldHVybiAkbmV4dFByb21pc2U7CiAgICB9KQogICAgLT50aGVuKGZ1bmN0aW9uICgkdmFsdWUpIHsKICAgICAgICBlY2hvICR2YWx1ZTsKICAgIH0pOwoKLy8gVHJpZ2dlcnMgdGhlIGZpcnN0IGNhbGxiYWNrIGFuZCBvdXRwdXRzICJBIgokcHJvbWlzZS0+cmVzb2x2ZSgnQScpOwovLyBUcmlnZ2VycyB0aGUgc2Vjb25kIGNhbGxiYWNrIGFuZCBvdXRwdXRzICJCIgokbmV4dFByb21pc2UtPnJlc29sdmUoJ0InKTsKYGBgCgojIyBQcm9taXNlIHJlamVjdGlvbgoKV2hlbiBhIHByb21pc2UgaXMgcmVqZWN0ZWQsIHRoZSBgJG9uUmVqZWN0ZWRgIGNhbGxiYWNrcyBhcmUgaW52b2tlZCB3aXRoIHRoZQpyZWplY3Rpb24gcmVhc29uLgoKYGBgcGhwCnVzZSBHdXp6bGVIdHRwXFByb21pc2VcUHJvbWlzZTsKCiRwcm9taXNlID0gbmV3IFByb21pc2UoKTsKJHByb21pc2UtPnRoZW4obnVsbCwgZnVuY3Rpb24gKCRyZWFzb24pIHsKICAgIGVjaG8gJHJlYXNvbjsKfSk7CgokcHJvbWlzZS0+cmVqZWN0KCdFcnJvciEnKTsKLy8gT3V0cHV0cyAiRXJyb3IhIgpgYGAKCiMjIFJlamVjdGlvbiBmb3J3YXJkaW5nCgpJZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGluIGFuIGAkb25SZWplY3RlZGAgY2FsbGJhY2ssIHN1YnNlcXVlbnQKYCRvblJlamVjdGVkYCBjYWxsYmFja3MgYXJlIGludm9rZWQgd2l0aCB0aGUgdGhyb3duIGV4Y2VwdGlvbiBhcyB0aGUgcmVhc29uLgoKYGBgcGhwCnVzZSBHdXp6bGVIdHRwXFByb21pc2VcUHJvbWlzZTsKCiRwcm9taXNlID0gbmV3IFByb21pc2UoKTsKJHByb21pc2UtPnRoZW4obnVsbCwgZnVuY3Rpb24gKCRyZWFzb24pIHsKICAgIHRocm93IG5ldyBcRXhjZXB0aW9uKCRyZWFzb24pOwp9KS0+dGhlbihudWxsLCBmdW5jdGlvbiAoJHJlYXNvbikgewogICAgYXNzZXJ0KCRyZWFzb24tPmdldE1lc3NhZ2UoKSA9PT0gJ0Vycm9yIScpOwp9KTsKCiRwcm9taXNlLT5yZWplY3QoJ0Vycm9yIScpOwpgYGAKCllvdSBjYW4gYWxzbyBmb3J3YXJkIGEgcmVqZWN0aW9uIGRvd24gdGhlIHByb21pc2UgY2hhaW4gYnkgcmV0dXJuaW5nIGEKYEd1enpsZUh0dHBcUHJvbWlzZVxSZWplY3RlZFByb21pc2VgIGluIGVpdGhlciBhbiBgJG9uRnVsZmlsbGVkYCBvcgpgJG9uUmVqZWN0ZWRgIGNhbGxiYWNrLgoKYGBgcGhwCnVzZSBHdXp6bGVIdHRwXFByb21pc2VcUHJvbWlzZTsKdXNlIEd1enpsZUh0dHBcUHJvbWlzZVxSZWplY3RlZFByb21pc2U7CgokcHJvbWlzZSA9IG5ldyBQcm9taXNlKCk7CiRwcm9taXNlLT50aGVuKG51bGwsIGZ1bmN0aW9uICgkcmVhc29uKSB7CiAgICByZXR1cm4gbmV3IFJlamVjdGVkUHJvbWlzZSgkcmVhc29uKTsKfSktPnRoZW4obnVsbCwgZnVuY3Rpb24gKCRyZWFzb24pIHsKICAgIGFzc2VydCgkcmVhc29uID09PSAnRXJyb3IhJyk7Cn0pOwoKJHByb21pc2UtPnJlamVjdCgnRXJyb3IhJyk7CmBgYAoKSWYgYW4gZXhjZXB0aW9uIGlzIG5vdCB0aHJvd24gaW4gYSBgJG9uUmVqZWN0ZWRgIGNhbGxiYWNrIGFuZCB0aGUgY2FsbGJhY2sKZG9lcyBub3QgcmV0dXJuIGEgcmVqZWN0ZWQgcHJvbWlzZSwgZG93bnN0cmVhbSBgJG9uRnVsZmlsbGVkYCBjYWxsYmFja3MgYXJlCmludm9rZWQgdXNpbmcgdGhlIHZhbHVlIHJldHVybmVkIGZyb20gdGhlIGAkb25SZWplY3RlZGAgY2FsbGJhY2suCgpgYGBwaHAKdXNlIEd1enpsZUh0dHBcUHJvbWlzZVxQcm9taXNlOwp1c2UgR3V6emxlSHR0cFxQcm9taXNlXFJlamVjdGVkUHJvbWlzZTsKCiRwcm9taXNlID0gbmV3IFByb21pc2UoKTsKJHByb21pc2UKICAgIC0+dGhlbihudWxsLCBmdW5jdGlvbiAoJHJlYXNvbikgewogICAgICAgIHJldHVybiAiSXQncyBvayI7CiAgICB9KQogICAgLT50aGVuKGZ1bmN0aW9uICgkdmFsdWUpIHsKICAgICAgICBhc3NlcnQoJHZhbHVlID09PSAiSXQncyBvayIpOwogICAgfSk7CgokcHJvbWlzZS0+cmVqZWN0KCdFcnJvciEnKTsKYGBgCgojIFN5bmNocm9ub3VzIHdhaXQKCllvdSBjYW4gc3luY2hyb25vdXNseSBmb3JjZSBwcm9taXNlcyB0byBjb21wbGV0ZSB1c2luZyBhIHByb21pc2UncyBgd2FpdGAKbWV0aG9kLiBXaGVuIGNyZWF0aW5nIGEgcHJvbWlzZSwgeW91IGNhbiBwcm92aWRlIGEgd2FpdCBmdW5jdGlvbiB0aGF0IGlzIHVzZWQKdG8gc3luY2hyb25vdXNseSBmb3JjZSBhIHByb21pc2UgdG8gY29tcGxldGUuIFdoZW4gYSB3YWl0IGZ1bmN0aW9uIGlzIGludm9rZWQKaXQgaXMgZXhwZWN0ZWQgdG8gZGVsaXZlciBhIHZhbHVlIHRvIHRoZSBwcm9taXNlIG9yIHJlamVjdCB0aGUgcHJvbWlzZS4gSWYgdGhlCndhaXQgZnVuY3Rpb24gZG9lcyBub3QgZGVsaXZlciBhIHZhbHVlLCB0aGVuIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24uIFRoZSB3YWl0CmZ1bmN0aW9uIHByb3ZpZGVkIHRvIGEgcHJvbWlzZSBjb25zdHJ1Y3RvciBpcyBpbnZva2VkIHdoZW4gdGhlIGB3YWl0YCBmdW5jdGlvbgpvZiB0aGUgcHJvbWlzZSBpcyBjYWxsZWQuCgpgYGBwaHAKJHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAoKSB1c2UgKCYkcHJvbWlzZSkgewogICAgJHByb21pc2UtPnJlc29sdmUoJ2ZvbycpOwp9KTsKCi8vIENhbGxpbmcgd2FpdCB3aWxsIHJldHVybiB0aGUgdmFsdWUgb2YgdGhlIHByb21pc2UuCmVjaG8gJHByb21pc2UtPndhaXQoKTsgLy8gb3V0cHV0cyAiZm9vIgpgYGAKCklmIGFuIGV4Y2VwdGlvbiBpcyBlbmNvdW50ZXJlZCB3aGlsZSBpbnZva2luZyB0aGUgd2FpdCBmdW5jdGlvbiBvZiBhIHByb21pc2UsCnRoZSBwcm9taXNlIGlzIHJlamVjdGVkIHdpdGggdGhlIGV4Y2VwdGlvbiBhbmQgdGhlIGV4Y2VwdGlvbiBpcyB0aHJvd24uCgpgYGBwaHAKJHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAoKSB1c2UgKCYkcHJvbWlzZSkgewogICAgdGhyb3cgbmV3IFxFeGNlcHRpb24oJ2ZvbycpOwp9KTsKCiRwcm9taXNlLT53YWl0KCk7IC8vIHRocm93cyB0aGUgZXhjZXB0aW9uLgpgYGAKCkNhbGxpbmcgYHdhaXRgIG9uIGEgcHJvbWlzZSB0aGF0IGhhcyBiZWVuIGZ1bGZpbGxlZCB3aWxsIG5vdCB0cmlnZ2VyIHRoZSB3YWl0CmZ1bmN0aW9uLiBJdCB3aWxsIHNpbXBseSByZXR1cm4gdGhlIHByZXZpb3VzbHkgcmVzb2x2ZWQgdmFsdWUuCgpgYGBwaHAKJHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAoKSB7IGRpZSgndGhpcyBpcyBub3QgY2FsbGVkIScpOyB9KTsKJHByb21pc2UtPnJlc29sdmUoJ2ZvbycpOwplY2hvICRwcm9taXNlLT53YWl0KCk7IC8vIG91dHB1dHMgImZvbyIKYGBgCgpDYWxsaW5nIGB3YWl0YCBvbiBhIHByb21pc2UgdGhhdCBoYXMgYmVlbiByZWplY3RlZCB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbi4gSWYKdGhlIHJlamVjdGlvbiByZWFzb24gaXMgYW4gaW5zdGFuY2Ugb2YgYFxFeGNlcHRpb25gIHRoZSByZWFzb24gaXMgdGhyb3duLgpPdGhlcndpc2UsIGEgYEd1enpsZUh0dHBcUHJvbWlzZVxSZWplY3Rpb25FeGNlcHRpb25gIGlzIHRocm93biBhbmQgdGhlIHJlYXNvbgpjYW4gYmUgb2J0YWluZWQgYnkgY2FsbGluZyB0aGUgYGdldFJlYXNvbmAgbWV0aG9kIG9mIHRoZSBleGNlcHRpb24uCgpgYGBwaHAKJHByb21pc2UgPSBuZXcgUHJvbWlzZSgpOwokcHJvbWlzZS0+cmVqZWN0KCdmb28nKTsKJHByb21pc2UtPndhaXQoKTsKYGBgCgo+IFBIUCBGYXRhbCBlcnJvcjogIFVuY2F1Z2h0IGV4Y2VwdGlvbiAnR3V6emxlSHR0cFxQcm9taXNlXFJlamVjdGlvbkV4Y2VwdGlvbicgd2l0aCBtZXNzYWdlICdUaGUgcHJvbWlzZSB3YXMgcmVqZWN0ZWQgd2l0aCB2YWx1ZTogZm9vJwoKCiMjIFVud3JhcHBpbmcgYSBwcm9taXNlCgpXaGVuIHN5bmNocm9ub3VzbHkgd2FpdGluZyBvbiBhIHByb21pc2UsIHlvdSBhcmUgam9pbmluZyB0aGUgc3RhdGUgb2YgdGhlCnByb21pc2UgaW50byB0aGUgY3VycmVudCBzdGF0ZSBvZiBleGVjdXRpb24gKGkuZS4sIHJldHVybiB0aGUgdmFsdWUgb2YgdGhlCnByb21pc2UgaWYgaXQgd2FzIGZ1bGZpbGxlZCBvciB0aHJvdyBhbiBleGNlcHRpb24gaWYgaXQgd2FzIHJlamVjdGVkKS4gVGhpcyBpcwpjYWxsZWQgInVud3JhcHBpbmciIHRoZSBwcm9taXNlLiBXYWl0aW5nIG9uIGEgcHJvbWlzZSB3aWxsIGJ5IGRlZmF1bHQgdW53cmFwCnRoZSBwcm9taXNlIHN0YXRlLgoKWW91IGNhbiBmb3JjZSBhIHByb21pc2UgdG8gcmVzb2x2ZSBhbmQgKm5vdCogdW53cmFwIHRoZSBzdGF0ZSBvZiB0aGUgcHJvbWlzZQpieSBwYXNzaW5nIGBmYWxzZWAgdG8gdGhlIGZpcnN0IGFyZ3VtZW50IG9mIHRoZSBgd2FpdGAgZnVuY3Rpb246CgpgYGBwaHAKJHByb21pc2UgPSBuZXcgUHJvbWlzZSgpOwokcHJvbWlzZS0+cmVqZWN0KCdmb28nKTsKLy8gVGhpcyB3aWxsIG5vdCB0aHJvdyBhbiBleGNlcHRpb24uIEl0IHNpbXBseSBlbnN1cmVzIHRoZSBwcm9taXNlIGhhcwovLyBiZWVuIHJlc29sdmVkLgokcHJvbWlzZS0+d2FpdChmYWxzZSk7CmBgYAoKV2hlbiB1bndyYXBwaW5nIGEgcHJvbWlzZSwgdGhlIHJlc29sdmVkIHZhbHVlIG9mIHRoZSBwcm9taXNlIHdpbGwgYmUgd2FpdGVkCnVwb24gdW50aWwgdGhlIHVud3JhcHBlZCB2YWx1ZSBpcyBub3QgYSBwcm9taXNlLiBUaGlzIG1lYW5zIHRoYXQgaWYgeW91IHJlc29sdmUKcHJvbWlzZSBBIHdpdGggYSBwcm9taXNlIEIgYW5kIHVud3JhcCBwcm9taXNlIEEsIHRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGUKd2FpdCBmdW5jdGlvbiB3aWxsIGJlIHRoZSB2YWx1ZSBkZWxpdmVyZWQgdG8gcHJvbWlzZSBCLgoKKipOb3RlKio6IHdoZW4geW91IGRvIG5vdCB1bndyYXAgdGhlIHByb21pc2UsIG5vIHZhbHVlIGlzIHJldHVybmVkLgoKCiMgQ2FuY2VsbGF0aW9uCgpZb3UgY2FuIGNhbmNlbCBhIHByb21pc2UgdGhhdCBoYXMgbm90IHlldCBiZWVuIGZ1bGZpbGxlZCB1c2luZyB0aGUgYGNhbmNlbCgpYAptZXRob2Qgb2YgYSBwcm9taXNlLiBXaGVuIGNyZWF0aW5nIGEgcHJvbWlzZSB5b3UgY2FuIHByb3ZpZGUgYW4gb3B0aW9uYWwKY2FuY2VsIGZ1bmN0aW9uIHRoYXQgd2hlbiBpbnZva2VkIGNhbmNlbHMgdGhlIGFjdGlvbiBvZiBjb21wdXRpbmcgYSByZXNvbHV0aW9uCm9mIHRoZSBwcm9taXNlLgoKCiMgQVBJCgoKIyMgUHJvbWlzZQoKV2hlbiBjcmVhdGluZyBhIHByb21pc2Ugb2JqZWN0LCB5b3UgY2FuIHByb3ZpZGUgYW4gb3B0aW9uYWwgYCR3YWl0Rm5gIGFuZApgJGNhbmNlbEZuYC4gYCR3YWl0Rm5gIGlzIGEgZnVuY3Rpb24gdGhhdCBpcyBpbnZva2VkIHdpdGggbm8gYXJndW1lbnRzIGFuZCBpcwpleHBlY3RlZCB0byByZXNvbHZlIHRoZSBwcm9taXNlLiBgJGNhbmNlbEZuYCBpcyBhIGZ1bmN0aW9uIHdpdGggbm8gYXJndW1lbnRzCnRoYXQgaXMgZXhwZWN0ZWQgdG8gY2FuY2VsIHRoZSBjb21wdXRhdGlvbiBvZiBhIHByb21pc2UuIEl0IGlzIGludm9rZWQgd2hlbiB0aGUKYGNhbmNlbCgpYCBtZXRob2Qgb2YgYSBwcm9taXNlIGlzIGNhbGxlZC4KCmBgYHBocAp1c2UgR3V6emxlSHR0cFxQcm9taXNlXFByb21pc2U7CgokcHJvbWlzZSA9IG5ldyBQcm9taXNlKAogICAgZnVuY3Rpb24gKCkgdXNlICgmJHByb21pc2UpIHsKICAgICAgICAkcHJvbWlzZS0+cmVzb2x2ZSgnd2FpdGVkJyk7CiAgICB9LAogICAgZnVuY3Rpb24gKCkgewogICAgICAgIC8vIGRvIHNvbWV0aGluZyB0aGF0IHdpbGwgY2FuY2VsIHRoZSBwcm9taXNlIGNvbXB1dGF0aW9uIChlLmcuLCBjbG9zZQogICAgICAgIC8vIGEgc29ja2V0LCBjYW5jZWwgYSBkYXRhYmFzZSBxdWVyeSwgZXRjLi4uKQogICAgfQopOwoKYXNzZXJ0KCd3YWl0ZWQnID09PSAkcHJvbWlzZS0+d2FpdCgpKTsKYGBgCgpBIHByb21pc2UgaGFzIHRoZSBmb2xsb3dpbmcgbWV0aG9kczoKCi0gYHRoZW4oY2FsbGFibGUgJG9uRnVsZmlsbGVkLCBjYWxsYWJsZSAkb25SZWplY3RlZCkgOiBQcm9taXNlSW50ZXJmYWNlYAogIAogIEFwcGVuZHMgZnVsZmlsbG1lbnQgYW5kIHJlamVjdGlvbiBoYW5kbGVycyB0byB0aGUgcHJvbWlzZSwgYW5kIHJldHVybnMgYSBuZXcgcHJvbWlzZSByZXNvbHZpbmcgdG8gdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgY2FsbGVkIGhhbmRsZXIuCgotIGBvdGhlcndpc2UoY2FsbGFibGUgJG9uUmVqZWN0ZWQpIDogUHJvbWlzZUludGVyZmFjZWAKICAKICBBcHBlbmRzIGEgcmVqZWN0aW9uIGhhbmRsZXIgY2FsbGJhY2sgdG8gdGhlIHByb21pc2UsIGFuZCByZXR1cm5zIGEgbmV3IHByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGNhbGxiYWNrIGlmIGl0IGlzIGNhbGxlZCwgb3IgdG8gaXRzIG9yaWdpbmFsIGZ1bGZpbGxtZW50IHZhbHVlIGlmIHRoZSBwcm9taXNlIGlzIGluc3RlYWQgZnVsZmlsbGVkLgoKLSBgd2FpdCgkdW53cmFwID0gdHJ1ZSkgOiBtaXhlZGAKCiAgU3luY2hyb25vdXNseSB3YWl0cyBvbiB0aGUgcHJvbWlzZSB0byBjb21wbGV0ZS4KICAKICBgJHVud3JhcGAgY29udHJvbHMgd2hldGhlciBvciBub3QgdGhlIHZhbHVlIG9mIHRoZSBwcm9taXNlIGlzIHJldHVybmVkIGZvciBhCiAgZnVsZmlsbGVkIHByb21pc2Ugb3IgaWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biBpZiB0aGUgcHJvbWlzZSBpcyByZWplY3RlZC4KICBUaGlzIGlzIHNldCB0byBgdHJ1ZWAgYnkgZGVmYXVsdC4KCi0gYGNhbmNlbCgpYAoKICBBdHRlbXB0cyB0byBjYW5jZWwgdGhlIHByb21pc2UgaWYgcG9zc2libGUuIFRoZSBwcm9taXNlIGJlaW5nIGNhbmNlbGxlZCBhbmQKICB0aGUgcGFyZW50IG1vc3QgYW5jZXN0b3IgdGhhdCBoYXMgbm90IHlldCBiZWVuIHJlc29sdmVkIHdpbGwgYWxzbyBiZQogIGNhbmNlbGxlZC4gQW55IHByb21pc2VzIHdhaXRpbmcgb24gdGhlIGNhbmNlbGxlZCBwcm9taXNlIHRvIHJlc29sdmUgd2lsbCBhbHNvCiAgYmUgY2FuY2VsbGVkLgoKLSBgZ2V0U3RhdGUoKSA6IHN0cmluZ2AKCiAgUmV0dXJucyB0aGUgc3RhdGUgb2YgdGhlIHByb21pc2UuIE9uZSBvZiBgcGVuZGluZ2AsIGBmdWxmaWxsZWRgLCBvcgogIGByZWplY3RlZGAuCgotIGByZXNvbHZlKCR2YWx1ZSlgCgogIEZ1bGZpbGxzIHRoZSBwcm9taXNlIHdpdGggdGhlIGdpdmVuIGAkdmFsdWVgLgoKLSBgcmVqZWN0KCRyZWFzb24pYAoKICBSZWplY3RzIHRoZSBwcm9taXNlIHdpdGggdGhlIGdpdmVuIGAkcmVhc29uYC4KCgojIyBGdWxmaWxsZWRQcm9taXNlCgpBIGZ1bGZpbGxlZCBwcm9taXNlIGNhbiBiZSBjcmVhdGVkIHRvIHJlcHJlc2VudCBhIHByb21pc2UgdGhhdCBoYXMgYmVlbgpmdWxmaWxsZWQuCgpgYGBwaHAKdXNlIEd1enpsZUh0dHBcUHJvbWlzZVxGdWxmaWxsZWRQcm9taXNlOwoKJHByb21pc2UgPSBuZXcgRnVsZmlsbGVkUHJvbWlzZSgndmFsdWUnKTsKCi8vIEZ1bGZpbGxlZCBjYWxsYmFja3MgYXJlIGltbWVkaWF0ZWx5IGludm9rZWQuCiRwcm9taXNlLT50aGVuKGZ1bmN0aW9uICgkdmFsdWUpIHsKICAgIGVjaG8gJHZhbHVlOwp9KTsKYGBgCgoKIyMgUmVqZWN0ZWRQcm9taXNlCgpBIHJlamVjdGVkIHByb21pc2UgY2FuIGJlIGNyZWF0ZWQgdG8gcmVwcmVzZW50IGEgcHJvbWlzZSB0aGF0IGhhcyBiZWVuCnJlamVjdGVkLgoKYGBgcGhwCnVzZSBHdXp6bGVIdHRwXFByb21pc2VcUmVqZWN0ZWRQcm9taXNlOwoKJHByb21pc2UgPSBuZXcgUmVqZWN0ZWRQcm9taXNlKCdFcnJvcicpOwoKLy8gUmVqZWN0ZWQgY2FsbGJhY2tzIGFyZSBpbW1lZGlhdGVseSBpbnZva2VkLgokcHJvbWlzZS0+dGhlbihudWxsLCBmdW5jdGlvbiAoJHJlYXNvbikgewogICAgZWNobyAkcmVhc29uOwp9KTsKYGBgCgoKIyBQcm9taXNlIGludGVyb3AKClRoaXMgbGlicmFyeSB3b3JrcyB3aXRoIGZvcmVpZ24gcHJvbWlzZXMgdGhhdCBoYXZlIGEgYHRoZW5gIG1ldGhvZC4gVGhpcyBtZWFucwp5b3UgY2FuIHVzZSBHdXp6bGUgcHJvbWlzZXMgd2l0aCBbUmVhY3QgcHJvbWlzZXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdHBocC9wcm9taXNlKQpmb3IgZXhhbXBsZS4gV2hlbiBhIGZvcmVpZ24gcHJvbWlzZSBpcyByZXR1cm5lZCBpbnNpZGUgb2YgYSB0aGVuIG1ldGhvZApjYWxsYmFjaywgcHJvbWlzZSByZXNvbHV0aW9uIHdpbGwgb2NjdXIgcmVjdXJzaXZlbHkuCgpgYGBwaHAKLy8gQ3JlYXRlIGEgUmVhY3QgcHJvbWlzZQokZGVmZXJyZWQgPSBuZXcgUmVhY3RcUHJvbWlzZVxEZWZlcnJlZCgpOwokcmVhY3RQcm9taXNlID0gJGRlZmVycmVkLT5wcm9taXNlKCk7CgovLyBDcmVhdGUgYSBHdXp6bGUgcHJvbWlzZSB0aGF0IGlzIGZ1bGZpbGxlZCB3aXRoIGEgUmVhY3QgcHJvbWlzZS4KJGd1enpsZVByb21pc2UgPSBuZXcgXEd1enpsZUh0dHBcUHJvbWlzZVxQcm9taXNlKCk7CiRndXp6bGVQcm9taXNlLT50aGVuKGZ1bmN0aW9uICgkdmFsdWUpIHVzZSAoJHJlYWN0UHJvbWlzZSkgewogICAgLy8gRG8gc29tZXRoaW5nIHNvbWV0aGluZyB3aXRoIHRoZSB2YWx1ZS4uLgogICAgLy8gUmV0dXJuIHRoZSBSZWFjdCBwcm9taXNlCiAgICByZXR1cm4gJHJlYWN0UHJvbWlzZTsKfSk7CmBgYAoKUGxlYXNlIG5vdGUgdGhhdCB3YWl0IGFuZCBjYW5jZWwgY2hhaW5pbmcgaXMgbm8gbG9uZ2VyIHBvc3NpYmxlIHdoZW4gZm9yd2FyZGluZwphIGZvcmVpZ24gcHJvbWlzZS4gWW91IHdpbGwgbmVlZCB0byB3cmFwIGEgdGhpcmQtcGFydHkgcHJvbWlzZSB3aXRoIGEgR3V6emxlCnByb21pc2UgaW4gb3JkZXIgdG8gdXRpbGl6ZSB3YWl0IGFuZCBjYW5jZWwgZnVuY3Rpb25zIHdpdGggZm9yZWlnbiBwcm9taXNlcy4KCgojIyBFdmVudCBMb29wIEludGVncmF0aW9uCgpJbiBvcmRlciB0byBrZWVwIHRoZSBzdGFjayBzaXplIGNvbnN0YW50LCBHdXp6bGUgcHJvbWlzZXMgYXJlIHJlc29sdmVkCmFzeW5jaHJvbm91c2x5IHVzaW5nIGEgdGFzayBxdWV1ZS4gV2hlbiB3YWl0aW5nIG9uIHByb21pc2VzIHN5bmNocm9ub3VzbHksIHRoZQp0YXNrIHF1ZXVlIHdpbGwgYmUgYXV0b21hdGljYWxseSBydW4gdG8gZW5zdXJlIHRoYXQgdGhlIGJsb2NraW5nIHByb21pc2UgYW5kCmFueSBmb3J3YXJkZWQgcHJvbWlzZXMgYXJlIHJlc29sdmVkLiBXaGVuIHVzaW5nIHByb21pc2VzIGFzeW5jaHJvbm91c2x5IGluIGFuCmV2ZW50IGxvb3AsIHlvdSB3aWxsIG5lZWQgdG8gcnVuIHRoZSB0YXNrIHF1ZXVlIG9uIGVhY2ggdGljayBvZiB0aGUgbG9vcC4gSWYKeW91IGRvIG5vdCBydW4gdGhlIHRhc2sgcXVldWUsIHRoZW4gcHJvbWlzZXMgd2lsbCBub3QgYmUgcmVzb2x2ZWQuCgpZb3UgY2FuIHJ1biB0aGUgdGFzayBxdWV1ZSB1c2luZyB0aGUgYHJ1bigpYCBtZXRob2Qgb2YgdGhlIGdsb2JhbCB0YXNrIHF1ZXVlCmluc3RhbmNlLgoKYGBgcGhwCi8vIEdldCB0aGUgZ2xvYmFsIHRhc2sgcXVldWUKJHF1ZXVlID0gXEd1enpsZUh0dHBcUHJvbWlzZVxxdWV1ZSgpOwokcXVldWUtPnJ1bigpOwpgYGAKCkZvciBleGFtcGxlLCB5b3UgY291bGQgdXNlIEd1enpsZSBwcm9taXNlcyB3aXRoIFJlYWN0IHVzaW5nIGEgcGVyaW9kaWMgdGltZXI6CgpgYGBwaHAKJGxvb3AgPSBSZWFjdFxFdmVudExvb3BcRmFjdG9yeTo6Y3JlYXRlKCk7CiRsb29wLT5hZGRQZXJpb2RpY1RpbWVyKDAsIFskcXVldWUsICdydW4nXSk7CmBgYAoKKlRPRE8qOiBQZXJoYXBzIGFkZGluZyBhIGBmdXR1cmVUaWNrKClgIG9uIGVhY2ggdGljayB3b3VsZCBiZSBmYXN0ZXI/CgoKIyBJbXBsZW1lbnRhdGlvbiBub3RlcwoKCiMjIFByb21pc2UgcmVzb2x1dGlvbiBhbmQgY2hhaW5pbmcgaXMgaGFuZGxlZCBpdGVyYXRpdmVseQoKQnkgc2h1ZmZsaW5nIHBlbmRpbmcgaGFuZGxlcnMgZnJvbSBvbmUgb3duZXIgdG8gYW5vdGhlciwgcHJvbWlzZXMgYXJlCnJlc29sdmVkIGl0ZXJhdGl2ZWx5LCBhbGxvd2luZyBmb3IgImluZmluaXRlIiB0aGVuIGNoYWluaW5nLgoKYGBgcGhwCjw/cGhwCnJlcXVpcmUgJ3ZlbmRvci9hdXRvbG9hZC5waHAnOwoKdXNlIEd1enpsZUh0dHBcUHJvbWlzZVxQcm9taXNlOwoKJHBhcmVudCA9IG5ldyBQcm9taXNlKCk7CiRwID0gJHBhcmVudDsKCmZvciAoJGkgPSAwOyAkaSA8IDEwMDA7ICRpKyspIHsKICAgICRwID0gJHAtPnRoZW4oZnVuY3Rpb24gKCR2KSB7CiAgICAgICAgLy8gVGhlIHN0YWNrIHNpemUgcmVtYWlucyBjb25zdGFudCAoYSBnb29kIHRoaW5nKQogICAgICAgIGVjaG8geGRlYnVnX2dldF9zdGFja19kZXB0aCgpIC4gJywgJzsKICAgICAgICByZXR1cm4gJHYgKyAxOwogICAgfSk7Cn0KCiRwYXJlbnQtPnJlc29sdmUoMCk7CnZhcl9kdW1wKCRwLT53YWl0KCkpOyAvLyBpbnQoMTAwMCkKCmBgYAoKV2hlbiBhIHByb21pc2UgaXMgZnVsZmlsbGVkIG9yIHJlamVjdGVkIHdpdGggYSBub24tcHJvbWlzZSB2YWx1ZSwgdGhlIHByb21pc2UKdGhlbiB0YWtlcyBvd25lcnNoaXAgb2YgdGhlIGhhbmRsZXJzIG9mIGVhY2ggY2hpbGQgcHJvbWlzZSBhbmQgZGVsaXZlcnMgdmFsdWVzCmRvd24gdGhlIGNoYWluIHdpdGhvdXQgdXNpbmcgcmVjdXJzaW9uLgoKV2hlbiBhIHByb21pc2UgaXMgcmVzb2x2ZWQgd2l0aCBhbm90aGVyIHByb21pc2UsIHRoZSBvcmlnaW5hbCBwcm9taXNlIHRyYW5zZmVycwphbGwgb2YgaXRzIHBlbmRpbmcgaGFuZGxlcnMgdG8gdGhlIG5ldyBwcm9taXNlLiBXaGVuIHRoZSBuZXcgcHJvbWlzZSBpcwpldmVudHVhbGx5IHJlc29sdmVkLCBhbGwgb2YgdGhlIHBlbmRpbmcgaGFuZGxlcnMgYXJlIGRlbGl2ZXJlZCB0aGUgZm9yd2FyZGVkCnZhbHVlLgoKCiMjIEEgcHJvbWlzZSBpcyB0aGUgZGVmZXJyZWQuCgpTb21lIHByb21pc2UgbGlicmFyaWVzIGltcGxlbWVudCBwcm9taXNlcyB1c2luZyBhIGRlZmVycmVkIG9iamVjdCB0byByZXByZXNlbnQKYSBjb21wdXRhdGlvbiBhbmQgYSBwcm9taXNlIG9iamVjdCB0byByZXByZXNlbnQgdGhlIGRlbGl2ZXJ5IG9mIHRoZSByZXN1bHQgb2YKdGhlIGNvbXB1dGF0aW9uLiBUaGlzIGlzIGEgbmljZSBzZXBhcmF0aW9uIG9mIGNvbXB1dGF0aW9uIGFuZCBkZWxpdmVyeSBiZWNhdXNlCmNvbnN1bWVycyBvZiB0aGUgcHJvbWlzZSBjYW5ub3QgbW9kaWZ5IHRoZSB2YWx1ZSB0aGF0IHdpbGwgYmUgZXZlbnR1YWxseQpkZWxpdmVyZWQuCgpPbmUgc2lkZSBlZmZlY3Qgb2YgYmVpbmcgYWJsZSB0byBpbXBsZW1lbnQgcHJvbWlzZSByZXNvbHV0aW9uIGFuZCBjaGFpbmluZwppdGVyYXRpdmVseSBpcyB0aGF0IHlvdSBuZWVkIHRvIGJlIGFibGUgZm9yIG9uZSBwcm9taXNlIHRvIHJlYWNoIGludG8gdGhlIHN0YXRlCm9mIGFub3RoZXIgcHJvbWlzZSB0byBzaHVmZmxlIGFyb3VuZCBvd25lcnNoaXAgb2YgaGFuZGxlcnMuIEluIG9yZGVyIHRvIGFjaGlldmUKdGhpcyB3aXRob3V0IG1ha2luZyB0aGUgaGFuZGxlcnMgb2YgYSBwcm9taXNlIHB1YmxpY2x5IG11dGFibGUsIGEgcHJvbWlzZSBpcwphbHNvIHRoZSBkZWZlcnJlZCB2YWx1ZSwgYWxsb3dpbmcgcHJvbWlzZXMgb2YgdGhlIHNhbWUgcGFyZW50IGNsYXNzIHRvIHJlYWNoCmludG8gYW5kIG1vZGlmeSB0aGUgcHJpdmF0ZSBwcm9wZXJ0aWVzIG9mIHByb21pc2VzIG9mIHRoZSBzYW1lIHR5cGUuIFdoaWxlIHRoaXMKZG9lcyBhbGxvdyBjb25zdW1lcnMgb2YgdGhlIHZhbHVlIHRvIG1vZGlmeSB0aGUgcmVzb2x1dGlvbiBvciByZWplY3Rpb24gb2YgdGhlCmRlZmVycmVkLCBpdCBpcyBhIHNtYWxsIHByaWNlIHRvIHBheSBmb3Iga2VlcGluZyB0aGUgc3RhY2sgc2l6ZSBjb25zdGFudC4KCmBgYHBocAokcHJvbWlzZSA9IG5ldyBQcm9taXNlKCk7CiRwcm9taXNlLT50aGVuKGZ1bmN0aW9uICgkdmFsdWUpIHsgZWNobyAkdmFsdWU7IH0pOwovLyBUaGUgcHJvbWlzZSBpcyB0aGUgZGVmZXJyZWQgdmFsdWUsIHNvIHlvdSBjYW4gZGVsaXZlciBhIHZhbHVlIHRvIGl0LgokcHJvbWlzZS0+cmVzb2x2ZSgnZm9vJyk7Ci8vIHByaW50cyAiZm9vIgpgYGAKAppDevTools/query/vendor/guzzlehttp/promises/composer.jsonewogICAgIm5hbWUiOiAiZ3V6emxlaHR0cC9wcm9taXNlcyIsCiAgICAiZGVzY3JpcHRpb24iOiAiR3V6emxlIHByb21pc2VzIGxpYnJhcnkiLAogICAgImtleXdvcmRzIjogWyJwcm9taXNlIl0sCiAgICAibGljZW5zZSI6ICJNSVQiLAogICAgImF1dGhvcnMiOiBbCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJNaWNoYWVsIERvd2xpbmciLAogICAgICAgICAgICAiZW1haWwiOiAibXRkb3dsaW5nQGdtYWlsLmNvbSIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vbXRkb3dsaW5nIgogICAgICAgIH0KICAgIF0sCiAgICAicmVxdWlyZSI6IHsKICAgICAgICAicGhwIjogIj49NS41LjAiCiAgICB9LAogICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICJwaHB1bml0L3BocHVuaXQiOiAiXjQuMCIKICAgIH0sCiAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgInBzci00IjogewogICAgICAgICAgICAiR3V6emxlSHR0cFxcUHJvbWlzZVxcIjogInNyYy8iCiAgICAgICAgfSwKICAgICAgICAiZmlsZXMiOiBbInNyYy9mdW5jdGlvbnNfaW5jbHVkZS5waHAiXQogICAgfSwKICAgICJzY3JpcHRzIjogewogICAgICAgICJ0ZXN0IjogInZlbmRvci9iaW4vcGhwdW5pdCIsCiAgICAgICAgInRlc3QtY2kiOiAidmVuZG9yL2Jpbi9waHB1bml0IC0tY292ZXJhZ2UtdGV4dCIKICAgIH0sCiAgICAiZXh0cmEiOiB7CiAgICAgICAgImJyYW5jaC1hbGlhcyI6IHsKICAgICAgICAgICAgImRldi1tYXN0ZXIiOiAiMS40LWRldiIKICAgICAgICB9CiAgICB9Cn0KAppDevTools/query/vendor/guzzlehttp/promises/src/AggregateException.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCi8qKgogKiBFeGNlcHRpb24gdGhyb3duIHdoZW4gdG9vIG1hbnkgZXJyb3JzIG9jY3VyIGluIHRoZSBzb21lKCkgb3IgYW55KCkgbWV0aG9kcy4KICovCmNsYXNzIEFnZ3JlZ2F0ZUV4Y2VwdGlvbiBleHRlbmRzIFJlamVjdGlvbkV4Y2VwdGlvbgp7CiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJG1zZywgYXJyYXkgJHJlYXNvbnMpCiAgICB7CiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgKICAgICAgICAgICAgJHJlYXNvbnMsCiAgICAgICAgICAgIHNwcmludGYoJyVzOyAlZCByZWplY3RlZCBwcm9taXNlcycsICRtc2csIGNvdW50KCRyZWFzb25zKSkKICAgICAgICApOwogICAgfQp9Cg==AppDevTools/query/vendor/guzzlehttp/promises/src/CancellationException.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCi8qKgogKiBFeGNlcHRpb24gdGhhdCBpcyBzZXQgYXMgdGhlIHJlYXNvbiBmb3IgYSBwcm9taXNlIHRoYXQgaGFzIGJlZW4gY2FuY2VsbGVkLgogKi8KY2xhc3MgQ2FuY2VsbGF0aW9uRXhjZXB0aW9uIGV4dGVuZHMgUmVqZWN0aW9uRXhjZXB0aW9uCnsKfQo=AppDevTools/query/vendor/guzzlehttp/promises/src/Coroutine.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCnVzZSBFeGNlcHRpb247CnVzZSBHZW5lcmF0b3I7CnVzZSBUaHJvd2FibGU7CgovKioKICogQ3JlYXRlcyBhIHByb21pc2UgdGhhdCBpcyByZXNvbHZlZCB1c2luZyBhIGdlbmVyYXRvciB0aGF0IHlpZWxkcyB2YWx1ZXMgb3IKICogcHJvbWlzZXMgKHNvbWV3aGF0IHNpbWlsYXIgdG8gQyMncyBhc3luYyBrZXl3b3JkKS4KICoKICogV2hlbiBjYWxsZWQsIHRoZSBjb3JvdXRpbmUgZnVuY3Rpb24gd2lsbCBzdGFydCBhbiBpbnN0YW5jZSBvZiB0aGUgZ2VuZXJhdG9yCiAqIGFuZCByZXR1cm5zIGEgcHJvbWlzZSB0aGF0IGlzIGZ1bGZpbGxlZCB3aXRoIGl0cyBmaW5hbCB5aWVsZGVkIHZhbHVlLgogKgogKiBDb250cm9sIGlzIHJldHVybmVkIGJhY2sgdG8gdGhlIGdlbmVyYXRvciB3aGVuIHRoZSB5aWVsZGVkIHByb21pc2Ugc2V0dGxlcy4KICogVGhpcyBjYW4gbGVhZCB0byBsZXNzIHZlcmJvc2UgY29kZSB3aGVuIGRvaW5nIGxvdHMgb2Ygc2VxdWVudGlhbCBhc3luYyBjYWxscwogKiB3aXRoIG1pbmltYWwgcHJvY2Vzc2luZyBpbiBiZXR3ZWVuLgogKgogKiAgICAgdXNlIEd1enpsZUh0dHBcUHJvbWlzZTsKICoKICogICAgIGZ1bmN0aW9uIGNyZWF0ZVByb21pc2UoJHZhbHVlKSB7CiAqICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlXEZ1bGZpbGxlZFByb21pc2UoJHZhbHVlKTsKICogICAgIH0KICoKICogICAgICRwcm9taXNlID0gUHJvbWlzZVxjb3JvdXRpbmUoZnVuY3Rpb24gKCkgewogKiAgICAgICAgICR2YWx1ZSA9ICh5aWVsZCBjcmVhdGVQcm9taXNlKCdhJykpOwogKiAgICAgICAgIHRyeSB7CiAqICAgICAgICAgICAgICR2YWx1ZSA9ICh5aWVsZCBjcmVhdGVQcm9taXNlKCR2YWx1ZSAuICdiJykpOwogKiAgICAgICAgIH0gY2F0Y2ggKFxFeGNlcHRpb24gJGUpIHsKICogICAgICAgICAgICAgLy8gVGhlIHByb21pc2Ugd2FzIHJlamVjdGVkLgogKiAgICAgICAgIH0KICogICAgICAgICB5aWVsZCAkdmFsdWUgLiAnYyc7CiAqICAgICB9KTsKICoKICogICAgIC8vIE91dHB1dHMgImFiYyIKICogICAgICRwcm9taXNlLT50aGVuKGZ1bmN0aW9uICgkdikgeyBlY2hvICR2OyB9KTsKICoKICogQHBhcmFtIGNhbGxhYmxlICRnZW5lcmF0b3JGbiBHZW5lcmF0b3IgZnVuY3Rpb24gdG8gd3JhcCBpbnRvIGEgcHJvbWlzZS4KICoKICogQHJldHVybiBQcm9taXNlCiAqIEBsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9wZXRrYWFudG9ub3YvYmx1ZWJpcmQvYmxvYi9tYXN0ZXIvQVBJLm1kI2dlbmVyYXRvcnMgaW5zcGlyYXRpb24KICovCmZpbmFsIGNsYXNzIENvcm91dGluZSBpbXBsZW1lbnRzIFByb21pc2VJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBAdmFyIFByb21pc2VJbnRlcmZhY2V8bnVsbAogICAgICovCiAgICBwcml2YXRlICRjdXJyZW50UHJvbWlzZTsKCiAgICAvKioKICAgICAqIEB2YXIgR2VuZXJhdG9yCiAgICAgKi8KICAgIHByaXZhdGUgJGdlbmVyYXRvcjsKCiAgICAvKioKICAgICAqIEB2YXIgUHJvbWlzZQogICAgICovCiAgICBwcml2YXRlICRyZXN1bHQ7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGNhbGxhYmxlICRnZW5lcmF0b3JGbikKICAgIHsKICAgICAgICAkdGhpcy0+Z2VuZXJhdG9yID0gJGdlbmVyYXRvckZuKCk7CiAgICAgICAgJHRoaXMtPnJlc3VsdCA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgd2hpbGUgKGlzc2V0KCR0aGlzLT5jdXJyZW50UHJvbWlzZSkpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5jdXJyZW50UHJvbWlzZS0+d2FpdCgpOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgJHRoaXMtPm5leHRDb3JvdXRpbmUoJHRoaXMtPmdlbmVyYXRvci0+Y3VycmVudCgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGhlbigKICAgICAgICBjYWxsYWJsZSAkb25GdWxmaWxsZWQgPSBudWxsLAogICAgICAgIGNhbGxhYmxlICRvblJlamVjdGVkID0gbnVsbAogICAgKSB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5yZXN1bHQtPnRoZW4oJG9uRnVsZmlsbGVkLCAkb25SZWplY3RlZCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIG90aGVyd2lzZShjYWxsYWJsZSAkb25SZWplY3RlZCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnJlc3VsdC0+b3RoZXJ3aXNlKCRvblJlamVjdGVkKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gd2FpdCgkdW53cmFwID0gdHJ1ZSkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnJlc3VsdC0+d2FpdCgkdW53cmFwKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U3RhdGUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cmVzdWx0LT5nZXRTdGF0ZSgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZXNvbHZlKCR2YWx1ZSkKICAgIHsKICAgICAgICAkdGhpcy0+cmVzdWx0LT5yZXNvbHZlKCR2YWx1ZSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHJlamVjdCgkcmVhc29uKQogICAgewogICAgICAgICR0aGlzLT5yZXN1bHQtPnJlamVjdCgkcmVhc29uKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY2FuY2VsKCkKICAgIHsKICAgICAgICAkdGhpcy0+Y3VycmVudFByb21pc2UtPmNhbmNlbCgpOwogICAgICAgICR0aGlzLT5yZXN1bHQtPmNhbmNlbCgpOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gbmV4dENvcm91dGluZSgkeWllbGRlZCkKICAgIHsKICAgICAgICAkdGhpcy0+Y3VycmVudFByb21pc2UgPSBwcm9taXNlX2ZvcigkeWllbGRlZCkKICAgICAgICAgICAgLT50aGVuKFskdGhpcywgJ19oYW5kbGVTdWNjZXNzJ10sIFskdGhpcywgJ19oYW5kbGVGYWlsdXJlJ10pOwogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfaGFuZGxlU3VjY2VzcygkdmFsdWUpCiAgICB7CiAgICAgICAgdW5zZXQoJHRoaXMtPmN1cnJlbnRQcm9taXNlKTsKICAgICAgICB0cnkgewogICAgICAgICAgICAkbmV4dCA9ICR0aGlzLT5nZW5lcmF0b3ItPnNlbmQoJHZhbHVlKTsKICAgICAgICAgICAgaWYgKCR0aGlzLT5nZW5lcmF0b3ItPnZhbGlkKCkpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5uZXh0Q29yb3V0aW5lKCRuZXh0KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICR0aGlzLT5yZXN1bHQtPnJlc29sdmUoJHZhbHVlKTsKICAgICAgICAgICAgfQogICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZXhjZXB0aW9uKSB7CiAgICAgICAgICAgICR0aGlzLT5yZXN1bHQtPnJlamVjdCgkZXhjZXB0aW9uKTsKICAgICAgICB9IGNhdGNoIChUaHJvd2FibGUgJHRocm93YWJsZSkgewogICAgICAgICAgICAkdGhpcy0+cmVzdWx0LT5yZWplY3QoJHRocm93YWJsZSk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQGludGVybmFsCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfaGFuZGxlRmFpbHVyZSgkcmVhc29uKQogICAgewogICAgICAgIHVuc2V0KCR0aGlzLT5jdXJyZW50UHJvbWlzZSk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgJG5leHRZaWVsZCA9ICR0aGlzLT5nZW5lcmF0b3ItPnRocm93KGV4Y2VwdGlvbl9mb3IoJHJlYXNvbikpOwogICAgICAgICAgICAvLyBUaGUgdGhyb3cgd2FzIGNhdWdodCwgc28ga2VlcCBpdGVyYXRpbmcgb24gdGhlIGNvcm91dGluZQogICAgICAgICAgICAkdGhpcy0+bmV4dENvcm91dGluZSgkbmV4dFlpZWxkKTsKICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGV4Y2VwdGlvbikgewogICAgICAgICAgICAkdGhpcy0+cmVzdWx0LT5yZWplY3QoJGV4Y2VwdGlvbik7CiAgICAgICAgfSBjYXRjaCAoVGhyb3dhYmxlICR0aHJvd2FibGUpIHsKICAgICAgICAgICAgJHRoaXMtPnJlc3VsdC0+cmVqZWN0KCR0aHJvd2FibGUpOwogICAgICAgIH0KICAgIH0KfQo=AppDevTools/query/vendor/guzzlehttp/promises/src/EachPromise.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCi8qKgogKiBSZXByZXNlbnRzIGEgcHJvbWlzZSB0aGF0IGl0ZXJhdGVzIG92ZXIgbWFueSBwcm9taXNlcyBhbmQgaW52b2tlcwogKiBzaWRlLWVmZmVjdCBmdW5jdGlvbnMgaW4gdGhlIHByb2Nlc3MuCiAqLwpjbGFzcyBFYWNoUHJvbWlzZSBpbXBsZW1lbnRzIFByb21pc29ySW50ZXJmYWNlCnsKICAgIHByaXZhdGUgJHBlbmRpbmcgPSBbXTsKCiAgICAvKiogQHZhciBcSXRlcmF0b3IgKi8KICAgIHByaXZhdGUgJGl0ZXJhYmxlOwoKICAgIC8qKiBAdmFyIGNhbGxhYmxlfGludCAqLwogICAgcHJpdmF0ZSAkY29uY3VycmVuY3k7CgogICAgLyoqIEB2YXIgY2FsbGFibGUgKi8KICAgIHByaXZhdGUgJG9uRnVsZmlsbGVkOwoKICAgIC8qKiBAdmFyIGNhbGxhYmxlICovCiAgICBwcml2YXRlICRvblJlamVjdGVkOwoKICAgIC8qKiBAdmFyIFByb21pc2UgKi8KICAgIHByaXZhdGUgJGFnZ3JlZ2F0ZTsKCiAgICAvKiogQHZhciBib29sICovCiAgICBwcml2YXRlICRtdXRleDsKCiAgICAvKioKICAgICAqIENvbmZpZ3VyYXRpb24gaGFzaCBjYW4gaW5jbHVkZSB0aGUgZm9sbG93aW5nIGtleSB2YWx1ZSBwYWlyczoKICAgICAqCiAgICAgKiAtIGZ1bGZpbGxlZDogKGNhbGxhYmxlKSBJbnZva2VkIHdoZW4gYSBwcm9taXNlIGZ1bGZpbGxzLiBUaGUgZnVuY3Rpb24KICAgICAqICAgaXMgaW52b2tlZCB3aXRoIHRocmVlIGFyZ3VtZW50czogdGhlIGZ1bGZpbGxtZW50IHZhbHVlLCB0aGUgaW5kZXgKICAgICAqICAgcG9zaXRpb24gZnJvbSB0aGUgaXRlcmFibGUgbGlzdCBvZiB0aGUgcHJvbWlzZSwgYW5kIHRoZSBhZ2dyZWdhdGUKICAgICAqICAgcHJvbWlzZSB0aGF0IG1hbmFnZXMgYWxsIG9mIHRoZSBwcm9taXNlcy4gVGhlIGFnZ3JlZ2F0ZSBwcm9taXNlIG1heQogICAgICogICBiZSByZXNvbHZlZCBmcm9tIHdpdGhpbiB0aGUgY2FsbGJhY2sgdG8gc2hvcnQtY2lyY3VpdCB0aGUgcHJvbWlzZS4KICAgICAqIC0gcmVqZWN0ZWQ6IChjYWxsYWJsZSkgSW52b2tlZCB3aGVuIGEgcHJvbWlzZSBpcyByZWplY3RlZC4gVGhlCiAgICAgKiAgIGZ1bmN0aW9uIGlzIGludm9rZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6IHRoZSByZWplY3Rpb24gcmVhc29uLCB0aGUKICAgICAqICAgaW5kZXggcG9zaXRpb24gZnJvbSB0aGUgaXRlcmFibGUgbGlzdCBvZiB0aGUgcHJvbWlzZSwgYW5kIHRoZQogICAgICogICBhZ2dyZWdhdGUgcHJvbWlzZSB0aGF0IG1hbmFnZXMgYWxsIG9mIHRoZSBwcm9taXNlcy4gVGhlIGFnZ3JlZ2F0ZQogICAgICogICBwcm9taXNlIG1heSBiZSByZXNvbHZlZCBmcm9tIHdpdGhpbiB0aGUgY2FsbGJhY2sgdG8gc2hvcnQtY2lyY3VpdAogICAgICogICB0aGUgcHJvbWlzZS4KICAgICAqIC0gY29uY3VycmVuY3k6IChpbnRlZ2VyKSBQYXNzIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gbGltaXQgdGhlCiAgICAgKiAgIGFsbG93ZWQgbnVtYmVyIG9mIG91dHN0YW5kaW5nIGNvbmN1cnJlbnRseSBleGVjdXRpbmcgcHJvbWlzZXMsCiAgICAgKiAgIGNyZWF0aW5nIGEgY2FwcGVkIHBvb2wgb2YgcHJvbWlzZXMuIFRoZXJlIGlzIG5vIGxpbWl0IGJ5IGRlZmF1bHQuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICAgICRpdGVyYWJsZSBQcm9taXNlcyBvciB2YWx1ZXMgdG8gaXRlcmF0ZS4KICAgICAqIEBwYXJhbSBhcnJheSAgICAkY29uZmlnICAgQ29uZmlndXJhdGlvbiBvcHRpb25zCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkaXRlcmFibGUsIGFycmF5ICRjb25maWcgPSBbXSkKICAgIHsKICAgICAgICAkdGhpcy0+aXRlcmFibGUgPSBpdGVyX2ZvcigkaXRlcmFibGUpOwoKICAgICAgICBpZiAoaXNzZXQoJGNvbmZpZ1snY29uY3VycmVuY3knXSkpIHsKICAgICAgICAgICAgJHRoaXMtPmNvbmN1cnJlbmN5ID0gJGNvbmZpZ1snY29uY3VycmVuY3knXTsKICAgICAgICB9CgogICAgICAgIGlmIChpc3NldCgkY29uZmlnWydmdWxmaWxsZWQnXSkpIHsKICAgICAgICAgICAgJHRoaXMtPm9uRnVsZmlsbGVkID0gJGNvbmZpZ1snZnVsZmlsbGVkJ107CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJGNvbmZpZ1sncmVqZWN0ZWQnXSkpIHsKICAgICAgICAgICAgJHRoaXMtPm9uUmVqZWN0ZWQgPSAkY29uZmlnWydyZWplY3RlZCddOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gcHJvbWlzZSgpCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5hZ2dyZWdhdGUpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5hZ2dyZWdhdGU7CiAgICAgICAgfQoKICAgICAgICB0cnkgewogICAgICAgICAgICAkdGhpcy0+Y3JlYXRlUHJvbWlzZSgpOwogICAgICAgICAgICAkdGhpcy0+aXRlcmFibGUtPnJld2luZCgpOwogICAgICAgICAgICAkdGhpcy0+cmVmaWxsUGVuZGluZygpOwogICAgICAgIH0gY2F0Y2ggKFxUaHJvd2FibGUgJGUpIHsKICAgICAgICAgICAgJHRoaXMtPmFnZ3JlZ2F0ZS0+cmVqZWN0KCRlKTsKICAgICAgICB9IGNhdGNoIChcRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgICR0aGlzLT5hZ2dyZWdhdGUtPnJlamVjdCgkZSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPmFnZ3JlZ2F0ZTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGNyZWF0ZVByb21pc2UoKQogICAgewogICAgICAgICR0aGlzLT5tdXRleCA9IGZhbHNlOwogICAgICAgICR0aGlzLT5hZ2dyZWdhdGUgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHJlc2V0KCR0aGlzLT5wZW5kaW5nKTsKICAgICAgICAgICAgaWYgKGVtcHR5KCR0aGlzLT5wZW5kaW5nKSAmJiAhJHRoaXMtPml0ZXJhYmxlLT52YWxpZCgpKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+YWdncmVnYXRlLT5yZXNvbHZlKG51bGwpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBDb25zdW1lIGEgcG90ZW50aWFsbHkgZmx1Y3R1YXRpbmcgbGlzdCBvZiBwcm9taXNlcyB3aGlsZQogICAgICAgICAgICAvLyBlbnN1cmluZyB0aGF0IGluZGV4ZXMgYXJlIG1haW50YWluZWQgKHByZWNsdWRpbmcgYXJyYXlfc2hpZnQpLgogICAgICAgICAgICB3aGlsZSAoJHByb21pc2UgPSBjdXJyZW50KCR0aGlzLT5wZW5kaW5nKSkgewogICAgICAgICAgICAgICAgbmV4dCgkdGhpcy0+cGVuZGluZyk7CiAgICAgICAgICAgICAgICAkcHJvbWlzZS0+d2FpdCgpOwogICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5hZ2dyZWdhdGUtPmdldFN0YXRlKCkgIT09IFByb21pc2VJbnRlcmZhY2U6OlBFTkRJTkcpIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgLy8gQ2xlYXIgdGhlIHJlZmVyZW5jZXMgd2hlbiB0aGUgcHJvbWlzZSBpcyByZXNvbHZlZC4KICAgICAgICAkY2xlYXJGbiA9IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgJHRoaXMtPml0ZXJhYmxlID0gJHRoaXMtPmNvbmN1cnJlbmN5ID0gJHRoaXMtPnBlbmRpbmcgPSBudWxsOwogICAgICAgICAgICAkdGhpcy0+b25GdWxmaWxsZWQgPSAkdGhpcy0+b25SZWplY3RlZCA9IG51bGw7CiAgICAgICAgfTsKCiAgICAgICAgJHRoaXMtPmFnZ3JlZ2F0ZS0+dGhlbigkY2xlYXJGbiwgJGNsZWFyRm4pOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gcmVmaWxsUGVuZGluZygpCiAgICB7CiAgICAgICAgaWYgKCEkdGhpcy0+Y29uY3VycmVuY3kpIHsKICAgICAgICAgICAgLy8gQWRkIGFsbCBwZW5kaW5nIHByb21pc2VzLgogICAgICAgICAgICB3aGlsZSAoJHRoaXMtPmFkZFBlbmRpbmcoKSAmJiAkdGhpcy0+YWR2YW5jZUl0ZXJhdG9yKCkpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAvLyBBZGQgb25seSB1cCB0byBOIHBlbmRpbmcgcHJvbWlzZXMuCiAgICAgICAgJGNvbmN1cnJlbmN5ID0gaXNfY2FsbGFibGUoJHRoaXMtPmNvbmN1cnJlbmN5KQogICAgICAgICAgICA/IGNhbGxfdXNlcl9mdW5jKCR0aGlzLT5jb25jdXJyZW5jeSwgY291bnQoJHRoaXMtPnBlbmRpbmcpKQogICAgICAgICAgICA6ICR0aGlzLT5jb25jdXJyZW5jeTsKICAgICAgICAkY29uY3VycmVuY3kgPSBtYXgoJGNvbmN1cnJlbmN5IC0gY291bnQoJHRoaXMtPnBlbmRpbmcpLCAwKTsKICAgICAgICAvLyBDb25jdXJyZW5jeSBtYXkgYmUgc2V0IHRvIDAgdG8gZGlzYWxsb3cgbmV3IHByb21pc2VzLgogICAgICAgIGlmICghJGNvbmN1cnJlbmN5KSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgLy8gQWRkIHRoZSBmaXJzdCBwZW5kaW5nIHByb21pc2UuCiAgICAgICAgJHRoaXMtPmFkZFBlbmRpbmcoKTsKICAgICAgICAvLyBOb3RlIHRoaXMgaXMgc3BlY2lhbCBoYW5kbGluZyBmb3IgY29uY3VycmVuY3k9MSBzbyB0aGF0IHdlIGRvCiAgICAgICAgLy8gbm90IGFkdmFuY2UgdGhlIGl0ZXJhdG9yIGFmdGVyIGFkZGluZyB0aGUgZmlyc3QgcHJvbWlzZS4gVGhpcwogICAgICAgIC8vIGhlbHBzIHdvcmsgYXJvdW5kIGlzc3VlcyB3aXRoIGdlbmVyYXRvcnMgdGhhdCBtaWdodCBub3QgaGF2ZSB0aGUKICAgICAgICAvLyBuZXh0IHZhbHVlIHRvIHlpZWxkIHVudGlsIHByb21pc2UgY2FsbGJhY2tzIGFyZSBjYWxsZWQuCiAgICAgICAgd2hpbGUgKC0tJGNvbmN1cnJlbmN5CiAgICAgICAgICAgICYmICR0aGlzLT5hZHZhbmNlSXRlcmF0b3IoKQogICAgICAgICAgICAmJiAkdGhpcy0+YWRkUGVuZGluZygpKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGFkZFBlbmRpbmcoKQogICAgewogICAgICAgIGlmICghJHRoaXMtPml0ZXJhYmxlIHx8ICEkdGhpcy0+aXRlcmFibGUtPnZhbGlkKCkpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgJHByb21pc2UgPSBwcm9taXNlX2ZvcigkdGhpcy0+aXRlcmFibGUtPmN1cnJlbnQoKSk7CiAgICAgICAgJGlkeCA9ICR0aGlzLT5pdGVyYWJsZS0+a2V5KCk7CgogICAgICAgICR0aGlzLT5wZW5kaW5nWyRpZHhdID0gJHByb21pc2UtPnRoZW4oCiAgICAgICAgICAgIGZ1bmN0aW9uICgkdmFsdWUpIHVzZSAoJGlkeCkgewogICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5vbkZ1bGZpbGxlZCkgewogICAgICAgICAgICAgICAgICAgIGNhbGxfdXNlcl9mdW5jKAogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+b25GdWxmaWxsZWQsICR2YWx1ZSwgJGlkeCwgJHRoaXMtPmFnZ3JlZ2F0ZQogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkdGhpcy0+c3RlcCgkaWR4KTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZnVuY3Rpb24gKCRyZWFzb24pIHVzZSAoJGlkeCkgewogICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5vblJlamVjdGVkKSB7CiAgICAgICAgICAgICAgICAgICAgY2FsbF91c2VyX2Z1bmMoCiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5vblJlamVjdGVkLCAkcmVhc29uLCAkaWR4LCAkdGhpcy0+YWdncmVnYXRlCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICR0aGlzLT5zdGVwKCRpZHgpOwogICAgICAgICAgICB9CiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBhZHZhbmNlSXRlcmF0b3IoKQogICAgewogICAgICAgIC8vIFBsYWNlIGEgbG9jayBvbiB0aGUgaXRlcmF0b3Igc28gdGhhdCB3ZSBlbnN1cmUgdG8gbm90IHJlY3Vyc2UsCiAgICAgICAgLy8gcHJldmVudGluZyBmYXRhbCBnZW5lcmF0b3IgZXJyb3JzLgogICAgICAgIGlmICgkdGhpcy0+bXV0ZXgpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPm11dGV4ID0gdHJ1ZTsKCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgJHRoaXMtPml0ZXJhYmxlLT5uZXh0KCk7CiAgICAgICAgICAgICR0aGlzLT5tdXRleCA9IGZhbHNlOwogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9IGNhdGNoIChcVGhyb3dhYmxlICRlKSB7CiAgICAgICAgICAgICR0aGlzLT5hZ2dyZWdhdGUtPnJlamVjdCgkZSk7CiAgICAgICAgICAgICR0aGlzLT5tdXRleCA9IGZhbHNlOwogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAkdGhpcy0+YWdncmVnYXRlLT5yZWplY3QoJGUpOwogICAgICAgICAgICAkdGhpcy0+bXV0ZXggPSBmYWxzZTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIHN0ZXAoJGlkeCkKICAgIHsKICAgICAgICAvLyBJZiB0aGUgcHJvbWlzZSB3YXMgYWxyZWFkeSByZXNvbHZlZCwgdGhlbiBpZ25vcmUgdGhpcyBzdGVwLgogICAgICAgIGlmICgkdGhpcy0+YWdncmVnYXRlLT5nZXRTdGF0ZSgpICE9PSBQcm9taXNlSW50ZXJmYWNlOjpQRU5ESU5HKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIHVuc2V0KCR0aGlzLT5wZW5kaW5nWyRpZHhdKTsKCiAgICAgICAgLy8gT25seSByZWZpbGwgcGVuZGluZyBwcm9taXNlcyBpZiB3ZSBhcmUgbm90IGxvY2tlZCwgcHJldmVudGluZyB0aGUKICAgICAgICAvLyBFYWNoUHJvbWlzZSB0byByZWN1cnNpdmVseSBpbnZva2UgdGhlIHByb3ZpZGVkIGl0ZXJhdG9yLCB3aGljaAogICAgICAgIC8vIGNhdXNlIGEgZmF0YWwgZXJyb3I6ICJDYW5ub3QgcmVzdW1lIGFuIGFscmVhZHkgcnVubmluZyBnZW5lcmF0b3IiCiAgICAgICAgaWYgKCR0aGlzLT5hZHZhbmNlSXRlcmF0b3IoKSAmJiAhJHRoaXMtPmNoZWNrSWZGaW5pc2hlZCgpKSB7CiAgICAgICAgICAgIC8vIEFkZCBtb3JlIHBlbmRpbmcgcHJvbWlzZXMgaWYgcG9zc2libGUuCiAgICAgICAgICAgICR0aGlzLT5yZWZpbGxQZW5kaW5nKCk7CiAgICAgICAgfQogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gY2hlY2tJZkZpbmlzaGVkKCkKICAgIHsKICAgICAgICBpZiAoISR0aGlzLT5wZW5kaW5nICYmICEkdGhpcy0+aXRlcmFibGUtPnZhbGlkKCkpIHsKICAgICAgICAgICAgLy8gUmVzb2x2ZSB0aGUgcHJvbWlzZSBpZiB0aGVyZSdzIG5vdGhpbmcgbGVmdCB0byBkby4KICAgICAgICAgICAgJHRoaXMtPmFnZ3JlZ2F0ZS0+cmVzb2x2ZShudWxsKTsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9Cn0KAppDevTools/query/vendor/guzzlehttp/promises/src/FulfilledPromise.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCi8qKgogKiBBIHByb21pc2UgdGhhdCBoYXMgYmVlbiBmdWxmaWxsZWQuCiAqCiAqIFRoZW5uaW5nIG9mZiBvZiB0aGlzIHByb21pc2Ugd2lsbCBpbnZva2UgdGhlIG9uRnVsZmlsbGVkIGNhbGxiYWNrCiAqIGltbWVkaWF0ZWx5IGFuZCBpZ25vcmUgb3RoZXIgY2FsbGJhY2tzLgogKi8KY2xhc3MgRnVsZmlsbGVkUHJvbWlzZSBpbXBsZW1lbnRzIFByb21pc2VJbnRlcmZhY2UKewogICAgcHJpdmF0ZSAkdmFsdWU7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCR2YWx1ZSkKICAgIHsKICAgICAgICBpZiAobWV0aG9kX2V4aXN0cygkdmFsdWUsICd0aGVuJykpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAnWW91IGNhbm5vdCBjcmVhdGUgYSBGdWxmaWxsZWRQcm9taXNlIHdpdGggYSBwcm9taXNlLicpOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPnZhbHVlID0gJHZhbHVlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0aGVuKAogICAgICAgIGNhbGxhYmxlICRvbkZ1bGZpbGxlZCA9IG51bGwsCiAgICAgICAgY2FsbGFibGUgJG9uUmVqZWN0ZWQgPSBudWxsCiAgICApIHsKICAgICAgICAvLyBSZXR1cm4gaXRzZWxmIGlmIHRoZXJlIGlzIG5vIG9uRnVsZmlsbGVkIGZ1bmN0aW9uLgogICAgICAgIGlmICghJG9uRnVsZmlsbGVkKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpczsKICAgICAgICB9CgogICAgICAgICRxdWV1ZSA9IHF1ZXVlKCk7CiAgICAgICAgJHAgPSBuZXcgUHJvbWlzZShbJHF1ZXVlLCAncnVuJ10pOwogICAgICAgICR2YWx1ZSA9ICR0aGlzLT52YWx1ZTsKICAgICAgICAkcXVldWUtPmFkZChzdGF0aWMgZnVuY3Rpb24gKCkgdXNlICgkcCwgJHZhbHVlLCAkb25GdWxmaWxsZWQpIHsKICAgICAgICAgICAgaWYgKCRwLT5nZXRTdGF0ZSgpID09PSBzZWxmOjpQRU5ESU5HKSB7CiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICRwLT5yZXNvbHZlKCRvbkZ1bGZpbGxlZCgkdmFsdWUpKTsKICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFxUaHJvd2FibGUgJGUpIHsKICAgICAgICAgICAgICAgICAgICAkcC0+cmVqZWN0KCRlKTsKICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFxFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgICAgICAgICAkcC0+cmVqZWN0KCRlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0pOwoKICAgICAgICByZXR1cm4gJHA7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIG90aGVyd2lzZShjYWxsYWJsZSAkb25SZWplY3RlZCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnRoZW4obnVsbCwgJG9uUmVqZWN0ZWQpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB3YWl0KCR1bndyYXAgPSB0cnVlLCAkZGVmYXVsdERlbGl2ZXJ5ID0gbnVsbCkKICAgIHsKICAgICAgICByZXR1cm4gJHVud3JhcCA/ICR0aGlzLT52YWx1ZSA6IG51bGw7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFN0YXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6RlVMRklMTEVEOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZXNvbHZlKCR2YWx1ZSkKICAgIHsKICAgICAgICBpZiAoJHZhbHVlICE9PSAkdGhpcy0+dmFsdWUpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbigiQ2Fubm90IHJlc29sdmUgYSBmdWxmaWxsZWQgcHJvbWlzZSIpOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVqZWN0KCRyZWFzb24pCiAgICB7CiAgICAgICAgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbigiQ2Fubm90IHJlamVjdCBhIGZ1bGZpbGxlZCBwcm9taXNlIik7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGNhbmNlbCgpCiAgICB7CiAgICAgICAgLy8gcGFzcwogICAgfQp9Cg==AppDevTools/query/vendor/guzzlehttp/promises/src/Promise.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCi8qKgogKiBQcm9taXNlcy9BKyBpbXBsZW1lbnRhdGlvbiB0aGF0IGF2b2lkcyByZWN1cnNpb24gd2hlbiBwb3NzaWJsZS4KICoKICogQGxpbmsgaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8KICovCmNsYXNzIFByb21pc2UgaW1wbGVtZW50cyBQcm9taXNlSW50ZXJmYWNlCnsKICAgIHByaXZhdGUgJHN0YXRlID0gc2VsZjo6UEVORElORzsKICAgIHByaXZhdGUgJHJlc3VsdDsKICAgIHByaXZhdGUgJGNhbmNlbEZuOwogICAgcHJpdmF0ZSAkd2FpdEZuOwogICAgcHJpdmF0ZSAkd2FpdExpc3Q7CiAgICBwcml2YXRlICRoYW5kbGVycyA9IFtdOwoKICAgIC8qKgogICAgICogQHBhcmFtIGNhbGxhYmxlICR3YWl0Rm4gICBGbiB0aGF0IHdoZW4gaW52b2tlZCByZXNvbHZlcyB0aGUgcHJvbWlzZS4KICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkY2FuY2VsRm4gRm4gdGhhdCB3aGVuIGludm9rZWQgY2FuY2VscyB0aGUgcHJvbWlzZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KAogICAgICAgIGNhbGxhYmxlICR3YWl0Rm4gPSBudWxsLAogICAgICAgIGNhbGxhYmxlICRjYW5jZWxGbiA9IG51bGwKICAgICkgewogICAgICAgICR0aGlzLT53YWl0Rm4gPSAkd2FpdEZuOwogICAgICAgICR0aGlzLT5jYW5jZWxGbiA9ICRjYW5jZWxGbjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGhlbigKICAgICAgICBjYWxsYWJsZSAkb25GdWxmaWxsZWQgPSBudWxsLAogICAgICAgIGNhbGxhYmxlICRvblJlamVjdGVkID0gbnVsbAogICAgKSB7CiAgICAgICAgaWYgKCR0aGlzLT5zdGF0ZSA9PT0gc2VsZjo6UEVORElORykgewogICAgICAgICAgICAkcCA9IG5ldyBQcm9taXNlKG51bGwsIFskdGhpcywgJ2NhbmNlbCddKTsKICAgICAgICAgICAgJHRoaXMtPmhhbmRsZXJzW10gPSBbJHAsICRvbkZ1bGZpbGxlZCwgJG9uUmVqZWN0ZWRdOwogICAgICAgICAgICAkcC0+d2FpdExpc3QgPSAkdGhpcy0+d2FpdExpc3Q7CiAgICAgICAgICAgICRwLT53YWl0TGlzdFtdID0gJHRoaXM7CiAgICAgICAgICAgIHJldHVybiAkcDsKICAgICAgICB9CgogICAgICAgIC8vIFJldHVybiBhIGZ1bGZpbGxlZCBwcm9taXNlIGFuZCBpbW1lZGlhdGVseSBpbnZva2UgYW55IGNhbGxiYWNrcy4KICAgICAgICBpZiAoJHRoaXMtPnN0YXRlID09PSBzZWxmOjpGVUxGSUxMRUQpIHsKICAgICAgICAgICAgcmV0dXJuICRvbkZ1bGZpbGxlZAogICAgICAgICAgICAgICAgPyBwcm9taXNlX2ZvcigkdGhpcy0+cmVzdWx0KS0+dGhlbigkb25GdWxmaWxsZWQpCiAgICAgICAgICAgICAgICA6IHByb21pc2VfZm9yKCR0aGlzLT5yZXN1bHQpOwogICAgICAgIH0KCiAgICAgICAgLy8gSXQncyBlaXRoZXIgY2FuY2VsbGVkIG9yIHJlamVjdGVkLCBzbyByZXR1cm4gYSByZWplY3RlZCBwcm9taXNlCiAgICAgICAgLy8gYW5kIGltbWVkaWF0ZWx5IGludm9rZSBhbnkgY2FsbGJhY2tzLgogICAgICAgICRyZWplY3Rpb24gPSByZWplY3Rpb25fZm9yKCR0aGlzLT5yZXN1bHQpOwogICAgICAgIHJldHVybiAkb25SZWplY3RlZCA/ICRyZWplY3Rpb24tPnRoZW4obnVsbCwgJG9uUmVqZWN0ZWQpIDogJHJlamVjdGlvbjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gb3RoZXJ3aXNlKGNhbGxhYmxlICRvblJlamVjdGVkKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dGhlbihudWxsLCAkb25SZWplY3RlZCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHdhaXQoJHVud3JhcCA9IHRydWUpCiAgICB7CiAgICAgICAgJHRoaXMtPndhaXRJZlBlbmRpbmcoKTsKCiAgICAgICAgJGlubmVyID0gJHRoaXMtPnJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2VJbnRlcmZhY2UKICAgICAgICAgICAgPyAkdGhpcy0+cmVzdWx0LT53YWl0KCR1bndyYXApCiAgICAgICAgICAgIDogJHRoaXMtPnJlc3VsdDsKCiAgICAgICAgaWYgKCR1bndyYXApIHsKICAgICAgICAgICAgaWYgKCR0aGlzLT5yZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlSW50ZXJmYWNlCiAgICAgICAgICAgICAgICB8fCAkdGhpcy0+c3RhdGUgPT09IHNlbGY6OkZVTEZJTExFRAogICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgIHJldHVybiAkaW5uZXI7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAvLyBJdCdzIHJlamVjdGVkIHNvICJ1bndyYXAiIGFuZCB0aHJvdyBhbiBleGNlcHRpb24uCiAgICAgICAgICAgICAgICB0aHJvdyBleGNlcHRpb25fZm9yKCRpbm5lcik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFN0YXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnN0YXRlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjYW5jZWwoKQogICAgewogICAgICAgIGlmICgkdGhpcy0+c3RhdGUgIT09IHNlbGY6OlBFTkRJTkcpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPndhaXRGbiA9ICR0aGlzLT53YWl0TGlzdCA9IG51bGw7CgogICAgICAgIGlmICgkdGhpcy0+Y2FuY2VsRm4pIHsKICAgICAgICAgICAgJGZuID0gJHRoaXMtPmNhbmNlbEZuOwogICAgICAgICAgICAkdGhpcy0+Y2FuY2VsRm4gPSBudWxsOwogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgJGZuKCk7CiAgICAgICAgICAgIH0gY2F0Y2ggKFxUaHJvd2FibGUgJGUpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5yZWplY3QoJGUpOwogICAgICAgICAgICB9IGNhdGNoIChcRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+cmVqZWN0KCRlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gUmVqZWN0IHRoZSBwcm9taXNlIG9ubHkgaWYgaXQgd2Fzbid0IHJlamVjdGVkIGluIGEgdGhlbiBjYWxsYmFjay4KICAgICAgICBpZiAoJHRoaXMtPnN0YXRlID09PSBzZWxmOjpQRU5ESU5HKSB7CiAgICAgICAgICAgICR0aGlzLT5yZWplY3QobmV3IENhbmNlbGxhdGlvbkV4Y2VwdGlvbignUHJvbWlzZSBoYXMgYmVlbiBjYW5jZWxsZWQnKSk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZXNvbHZlKCR2YWx1ZSkKICAgIHsKICAgICAgICAkdGhpcy0+c2V0dGxlKHNlbGY6OkZVTEZJTExFRCwgJHZhbHVlKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVqZWN0KCRyZWFzb24pCiAgICB7CiAgICAgICAgJHRoaXMtPnNldHRsZShzZWxmOjpSRUpFQ1RFRCwgJHJlYXNvbik7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBzZXR0bGUoJHN0YXRlLCAkdmFsdWUpCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5zdGF0ZSAhPT0gc2VsZjo6UEVORElORykgewogICAgICAgICAgICAvLyBJZ25vcmUgY2FsbHMgd2l0aCB0aGUgc2FtZSByZXNvbHV0aW9uLgogICAgICAgICAgICBpZiAoJHN0YXRlID09PSAkdGhpcy0+c3RhdGUgJiYgJHZhbHVlID09PSAkdGhpcy0+cmVzdWx0KSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhyb3cgJHRoaXMtPnN0YXRlID09PSAkc3RhdGUKICAgICAgICAgICAgICAgID8gbmV3IFxMb2dpY0V4Y2VwdGlvbigiVGhlIHByb21pc2UgaXMgYWxyZWFkeSB7JHN0YXRlfS4iKQogICAgICAgICAgICAgICAgOiBuZXcgXExvZ2ljRXhjZXB0aW9uKCJDYW5ub3QgY2hhbmdlIGEgeyR0aGlzLT5zdGF0ZX0gcHJvbWlzZSB0byB7JHN0YXRlfSIpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCR2YWx1ZSA9PT0gJHRoaXMpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbignQ2Fubm90IGZ1bGZpbGwgb3IgcmVqZWN0IGEgcHJvbWlzZSB3aXRoIGl0c2VsZicpOwogICAgICAgIH0KCiAgICAgICAgLy8gQ2xlYXIgb3V0IHRoZSBzdGF0ZSBvZiB0aGUgcHJvbWlzZSBidXQgc3Rhc2ggdGhlIGhhbmRsZXJzLgogICAgICAgICR0aGlzLT5zdGF0ZSA9ICRzdGF0ZTsKICAgICAgICAkdGhpcy0+cmVzdWx0ID0gJHZhbHVlOwogICAgICAgICRoYW5kbGVycyA9ICR0aGlzLT5oYW5kbGVyczsKICAgICAgICAkdGhpcy0+aGFuZGxlcnMgPSBudWxsOwogICAgICAgICR0aGlzLT53YWl0TGlzdCA9ICR0aGlzLT53YWl0Rm4gPSBudWxsOwogICAgICAgICR0aGlzLT5jYW5jZWxGbiA9IG51bGw7CgogICAgICAgIGlmICghJGhhbmRsZXJzKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIC8vIElmIHRoZSB2YWx1ZSB3YXMgbm90IGEgc2V0dGxlZCBwcm9taXNlIG9yIGEgdGhlbmFibGUsIHRoZW4gcmVzb2x2ZQogICAgICAgIC8vIGl0IGluIHRoZSB0YXNrIHF1ZXVlIHVzaW5nIHRoZSBjb3JyZWN0IElELgogICAgICAgIGlmICghbWV0aG9kX2V4aXN0cygkdmFsdWUsICd0aGVuJykpIHsKICAgICAgICAgICAgJGlkID0gJHN0YXRlID09PSBzZWxmOjpGVUxGSUxMRUQgPyAxIDogMjsKICAgICAgICAgICAgLy8gSXQncyBhIHN1Y2Nlc3MsIHNvIHJlc29sdmUgdGhlIGhhbmRsZXJzIGluIHRoZSBxdWV1ZS4KICAgICAgICAgICAgcXVldWUoKS0+YWRkKHN0YXRpYyBmdW5jdGlvbiAoKSB1c2UgKCRpZCwgJHZhbHVlLCAkaGFuZGxlcnMpIHsKICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRoYW5kbGVycyBhcyAkaGFuZGxlcikgewogICAgICAgICAgICAgICAgICAgIHNlbGY6OmNhbGxIYW5kbGVyKCRpZCwgJHZhbHVlLCAkaGFuZGxlcik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgIH0gZWxzZWlmICgkdmFsdWUgaW5zdGFuY2VvZiBQcm9taXNlCiAgICAgICAgICAgICYmICR2YWx1ZS0+Z2V0U3RhdGUoKSA9PT0gc2VsZjo6UEVORElORwogICAgICAgICkgewogICAgICAgICAgICAvLyBXZSBjYW4ganVzdCBtZXJnZSBvdXIgaGFuZGxlcnMgb250byB0aGUgbmV4dCBwcm9taXNlLgogICAgICAgICAgICAkdmFsdWUtPmhhbmRsZXJzID0gYXJyYXlfbWVyZ2UoJHZhbHVlLT5oYW5kbGVycywgJGhhbmRsZXJzKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBSZXNvbHZlIHRoZSBoYW5kbGVycyB3aGVuIHRoZSBmb3J3YXJkZWQgcHJvbWlzZSBpcyByZXNvbHZlZC4KICAgICAgICAgICAgJHZhbHVlLT50aGVuKAogICAgICAgICAgICAgICAgc3RhdGljIGZ1bmN0aW9uICgkdmFsdWUpIHVzZSAoJGhhbmRsZXJzKSB7CiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGhhbmRsZXJzIGFzICRoYW5kbGVyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGY6OmNhbGxIYW5kbGVyKDEsICR2YWx1ZSwgJGhhbmRsZXIpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBzdGF0aWMgZnVuY3Rpb24gKCRyZWFzb24pIHVzZSAoJGhhbmRsZXJzKSB7CiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGhhbmRsZXJzIGFzICRoYW5kbGVyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGY6OmNhbGxIYW5kbGVyKDIsICRyZWFzb24sICRoYW5kbGVyKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQ2FsbCBhIHN0YWNrIG9mIGhhbmRsZXJzIHVzaW5nIGEgc3BlY2lmaWMgY2FsbGJhY2sgaW5kZXggYW5kIHZhbHVlLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgICAkaW5kZXggICAxIChyZXNvbHZlKSBvciAyIChyZWplY3QpLgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZSAgIFZhbHVlIHRvIHBhc3MgdG8gdGhlIGNhbGxiYWNrLgogICAgICogQHBhcmFtIGFycmF5ICRoYW5kbGVyIEFycmF5IG9mIGhhbmRsZXIgZGF0YSAocHJvbWlzZSBhbmQgY2FsbGJhY2tzKS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5IFJldHVybnMgdGhlIG5leHQgZ3JvdXAgdG8gcmVzb2x2ZS4KICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gY2FsbEhhbmRsZXIoJGluZGV4LCAkdmFsdWUsIGFycmF5ICRoYW5kbGVyKQogICAgewogICAgICAgIC8qKiBAdmFyIFByb21pc2VJbnRlcmZhY2UgJHByb21pc2UgKi8KICAgICAgICAkcHJvbWlzZSA9ICRoYW5kbGVyWzBdOwoKICAgICAgICAvLyBUaGUgcHJvbWlzZSBtYXkgaGF2ZSBiZWVuIGNhbmNlbGxlZCBvciByZXNvbHZlZCBiZWZvcmUgcGxhY2luZwogICAgICAgIC8vIHRoaXMgdGh1bmsgaW4gdGhlIHF1ZXVlLgogICAgICAgIGlmICgkcHJvbWlzZS0+Z2V0U3RhdGUoKSAhPT0gc2VsZjo6UEVORElORykgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICB0cnkgewogICAgICAgICAgICBpZiAoaXNzZXQoJGhhbmRsZXJbJGluZGV4XSkpIHsKICAgICAgICAgICAgICAgICRwcm9taXNlLT5yZXNvbHZlKCRoYW5kbGVyWyRpbmRleF0oJHZhbHVlKSk7CiAgICAgICAgICAgIH0gZWxzZWlmICgkaW5kZXggPT09IDEpIHsKICAgICAgICAgICAgICAgIC8vIEZvcndhcmQgcmVzb2x1dGlvbiB2YWx1ZXMgYXMtaXMuCiAgICAgICAgICAgICAgICAkcHJvbWlzZS0+cmVzb2x2ZSgkdmFsdWUpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgLy8gRm9yd2FyZCByZWplY3Rpb25zIGRvd24gdGhlIGNoYWluLgogICAgICAgICAgICAgICAgJHByb21pc2UtPnJlamVjdCgkdmFsdWUpOwogICAgICAgICAgICB9CiAgICAgICAgfSBjYXRjaCAoXFRocm93YWJsZSAkcmVhc29uKSB7CiAgICAgICAgICAgICRwcm9taXNlLT5yZWplY3QoJHJlYXNvbik7CiAgICAgICAgfSBjYXRjaCAoXEV4Y2VwdGlvbiAkcmVhc29uKSB7CiAgICAgICAgICAgICRwcm9taXNlLT5yZWplY3QoJHJlYXNvbik7CiAgICAgICAgfQogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gd2FpdElmUGVuZGluZygpCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5zdGF0ZSAhPT0gc2VsZjo6UEVORElORykgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfSBlbHNlaWYgKCR0aGlzLT53YWl0Rm4pIHsKICAgICAgICAgICAgJHRoaXMtPmludm9rZVdhaXRGbigpOwogICAgICAgIH0gZWxzZWlmICgkdGhpcy0+d2FpdExpc3QpIHsKICAgICAgICAgICAgJHRoaXMtPmludm9rZVdhaXRMaXN0KCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gSWYgdGhlcmUncyBub3Qgd2FpdCBmdW5jdGlvbiwgdGhlbiByZWplY3QgdGhlIHByb21pc2UuCiAgICAgICAgICAgICR0aGlzLT5yZWplY3QoJ0Nhbm5vdCB3YWl0IG9uIGEgcHJvbWlzZSB0aGF0IGhhcyAnCiAgICAgICAgICAgICAgICAuICdubyBpbnRlcm5hbCB3YWl0IGZ1bmN0aW9uLiBZb3UgbXVzdCBwcm92aWRlIGEgd2FpdCAnCiAgICAgICAgICAgICAgICAuICdmdW5jdGlvbiB3aGVuIGNvbnN0cnVjdGluZyB0aGUgcHJvbWlzZSB0byBiZSBhYmxlIHRvICcKICAgICAgICAgICAgICAgIC4gJ3dhaXQgb24gYSBwcm9taXNlLicpOwogICAgICAgIH0KCiAgICAgICAgcXVldWUoKS0+cnVuKCk7CgogICAgICAgIGlmICgkdGhpcy0+c3RhdGUgPT09IHNlbGY6OlBFTkRJTkcpIHsKICAgICAgICAgICAgJHRoaXMtPnJlamVjdCgnSW52b2tpbmcgdGhlIHdhaXQgY2FsbGJhY2sgZGlkIG5vdCByZXNvbHZlIHRoZSBwcm9taXNlJyk7CiAgICAgICAgfQogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gaW52b2tlV2FpdEZuKCkKICAgIHsKICAgICAgICB0cnkgewogICAgICAgICAgICAkd2ZuID0gJHRoaXMtPndhaXRGbjsKICAgICAgICAgICAgJHRoaXMtPndhaXRGbiA9IG51bGw7CiAgICAgICAgICAgICR3Zm4odHJ1ZSk7CiAgICAgICAgfSBjYXRjaCAoXEV4Y2VwdGlvbiAkcmVhc29uKSB7CiAgICAgICAgICAgIGlmICgkdGhpcy0+c3RhdGUgPT09IHNlbGY6OlBFTkRJTkcpIHsKICAgICAgICAgICAgICAgIC8vIFRoZSBwcm9taXNlIGhhcyBub3QgYmVlbiByZXNvbHZlZCB5ZXQsIHNvIHJlamVjdCB0aGUgcHJvbWlzZQogICAgICAgICAgICAgICAgLy8gd2l0aCB0aGUgZXhjZXB0aW9uLgogICAgICAgICAgICAgICAgJHRoaXMtPnJlamVjdCgkcmVhc29uKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIC8vIFRoZSBwcm9taXNlIHdhcyBhbHJlYWR5IHJlc29sdmVkLCBzbyB0aGVyZSdzIGEgcHJvYmxlbSBpbgogICAgICAgICAgICAgICAgLy8gdGhlIGFwcGxpY2F0aW9uLgogICAgICAgICAgICAgICAgdGhyb3cgJHJlYXNvbjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGludm9rZVdhaXRMaXN0KCkKICAgIHsKICAgICAgICAkd2FpdExpc3QgPSAkdGhpcy0+d2FpdExpc3Q7CiAgICAgICAgJHRoaXMtPndhaXRMaXN0ID0gbnVsbDsKCiAgICAgICAgZm9yZWFjaCAoJHdhaXRMaXN0IGFzICRyZXN1bHQpIHsKICAgICAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgICAgICRyZXN1bHQtPndhaXRJZlBlbmRpbmcoKTsKCiAgICAgICAgICAgICAgICBpZiAoJHJlc3VsdC0+cmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkgewogICAgICAgICAgICAgICAgICAgICRyZXN1bHQgPSAkcmVzdWx0LT5yZXN1bHQ7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIGlmICgkcmVzdWx0LT5yZXN1bHQgaW5zdGFuY2VvZiBQcm9taXNlSW50ZXJmYWNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRyZXN1bHQtPnJlc3VsdC0+d2FpdChmYWxzZSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9Cg==AppDevTools/query/vendor/guzzlehttp/promises/src/PromiseInterface.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCi8qKgogKiBBIHByb21pc2UgcmVwcmVzZW50cyB0aGUgZXZlbnR1YWwgcmVzdWx0IG9mIGFuIGFzeW5jaHJvbm91cyBvcGVyYXRpb24uCiAqCiAqIFRoZSBwcmltYXJ5IHdheSBvZiBpbnRlcmFjdGluZyB3aXRoIGEgcHJvbWlzZSBpcyB0aHJvdWdoIGl0cyB0aGVuIG1ldGhvZCwKICogd2hpY2ggcmVnaXN0ZXJzIGNhbGxiYWNrcyB0byByZWNlaXZlIGVpdGhlciBhIHByb21pc2XigJlzIGV2ZW50dWFsIHZhbHVlIG9yCiAqIHRoZSByZWFzb24gd2h5IHRoZSBwcm9taXNlIGNhbm5vdCBiZSBmdWxmaWxsZWQuCiAqCiAqIEBsaW5rIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vCiAqLwppbnRlcmZhY2UgUHJvbWlzZUludGVyZmFjZQp7CiAgICBjb25zdCBQRU5ESU5HID0gJ3BlbmRpbmcnOwogICAgY29uc3QgRlVMRklMTEVEID0gJ2Z1bGZpbGxlZCc7CiAgICBjb25zdCBSRUpFQ1RFRCA9ICdyZWplY3RlZCc7CgogICAgLyoqCiAgICAgKiBBcHBlbmRzIGZ1bGZpbGxtZW50IGFuZCByZWplY3Rpb24gaGFuZGxlcnMgdG8gdGhlIHByb21pc2UsIGFuZCByZXR1cm5zCiAgICAgKiBhIG5ldyBwcm9taXNlIHJlc29sdmluZyB0byB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBjYWxsZWQgaGFuZGxlci4KICAgICAqCiAgICAgKiBAcGFyYW0gY2FsbGFibGUgJG9uRnVsZmlsbGVkIEludm9rZWQgd2hlbiB0aGUgcHJvbWlzZSBmdWxmaWxscy4KICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkb25SZWplY3RlZCAgSW52b2tlZCB3aGVuIHRoZSBwcm9taXNlIGlzIHJlamVjdGVkLgogICAgICoKICAgICAqIEByZXR1cm4gUHJvbWlzZUludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdGhlbigKICAgICAgICBjYWxsYWJsZSAkb25GdWxmaWxsZWQgPSBudWxsLAogICAgICAgIGNhbGxhYmxlICRvblJlamVjdGVkID0gbnVsbAogICAgKTsKCiAgICAvKioKICAgICAqIEFwcGVuZHMgYSByZWplY3Rpb24gaGFuZGxlciBjYWxsYmFjayB0byB0aGUgcHJvbWlzZSwgYW5kIHJldHVybnMgYSBuZXcKICAgICAqIHByb21pc2UgcmVzb2x2aW5nIHRvIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGNhbGxiYWNrIGlmIGl0IGlzIGNhbGxlZCwKICAgICAqIG9yIHRvIGl0cyBvcmlnaW5hbCBmdWxmaWxsbWVudCB2YWx1ZSBpZiB0aGUgcHJvbWlzZSBpcyBpbnN0ZWFkCiAgICAgKiBmdWxmaWxsZWQuCiAgICAgKgogICAgICogQHBhcmFtIGNhbGxhYmxlICRvblJlamVjdGVkIEludm9rZWQgd2hlbiB0aGUgcHJvbWlzZSBpcyByZWplY3RlZC4KICAgICAqCiAgICAgKiBAcmV0dXJuIFByb21pc2VJbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG90aGVyd2lzZShjYWxsYWJsZSAkb25SZWplY3RlZCk7CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIHN0YXRlIG9mIHRoZSBwcm9taXNlICgicGVuZGluZyIsICJyZWplY3RlZCIsIG9yICJmdWxmaWxsZWQiKS4KICAgICAqCiAgICAgKiBUaGUgdGhyZWUgc3RhdGVzIGNhbiBiZSBjaGVja2VkIGFnYWluc3QgdGhlIGNvbnN0YW50cyBkZWZpbmVkIG9uCiAgICAgKiBQcm9taXNlSW50ZXJmYWNlOiBQRU5ESU5HLCBGVUxGSUxMRUQsIGFuZCBSRUpFQ1RFRC4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U3RhdGUoKTsKCiAgICAvKioKICAgICAqIFJlc29sdmUgdGhlIHByb21pc2Ugd2l0aCB0aGUgZ2l2ZW4gdmFsdWUuCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbiBpZiB0aGUgcHJvbWlzZSBpcyBhbHJlYWR5IHJlc29sdmVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVzb2x2ZSgkdmFsdWUpOwoKICAgIC8qKgogICAgICogUmVqZWN0IHRoZSBwcm9taXNlIHdpdGggdGhlIGdpdmVuIHJlYXNvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHJlYXNvbgogICAgICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbiBpZiB0aGUgcHJvbWlzZSBpcyBhbHJlYWR5IHJlc29sdmVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVqZWN0KCRyZWFzb24pOwoKICAgIC8qKgogICAgICogQ2FuY2VscyB0aGUgcHJvbWlzZSBpZiBwb3NzaWJsZS4KICAgICAqCiAgICAgKiBAbGluayBodHRwczovL2dpdGh1Yi5jb20vcHJvbWlzZXMtYXBsdXMvY2FuY2VsbGF0aW9uLXNwZWMvaXNzdWVzLzcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNhbmNlbCgpOwoKICAgIC8qKgogICAgICogV2FpdHMgdW50aWwgdGhlIHByb21pc2UgY29tcGxldGVzIGlmIHBvc3NpYmxlLgogICAgICoKICAgICAqIFBhc3MgJHVud3JhcCBhcyB0cnVlIHRvIHVud3JhcCB0aGUgcmVzdWx0IG9mIHRoZSBwcm9taXNlLCBlaXRoZXIKICAgICAqIHJldHVybmluZyB0aGUgcmVzb2x2ZWQgdmFsdWUgb3IgdGhyb3dpbmcgdGhlIHJlamVjdGVkIGV4Y2VwdGlvbi4KICAgICAqCiAgICAgKiBJZiB0aGUgcHJvbWlzZSBjYW5ub3QgYmUgd2FpdGVkIG9uLCB0aGVuIHRoZSBwcm9taXNlIHdpbGwgYmUgcmVqZWN0ZWQuCiAgICAgKgogICAgICogQHBhcmFtIGJvb2wgJHVud3JhcAogICAgICoKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqIEB0aHJvd3MgXExvZ2ljRXhjZXB0aW9uIGlmIHRoZSBwcm9taXNlIGhhcyBubyB3YWl0IGZ1bmN0aW9uIG9yIGlmIHRoZQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZSBkb2VzIG5vdCBzZXR0bGUgYWZ0ZXIgd2FpdGluZy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdhaXQoJHVud3JhcCA9IHRydWUpOwp9Cg==AppDevTools/query/vendor/guzzlehttp/promises/src/PromisorInterface.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCi8qKgogKiBJbnRlcmZhY2UgdXNlZCB3aXRoIGNsYXNzZXMgdGhhdCByZXR1cm4gYSBwcm9taXNlLgogKi8KaW50ZXJmYWNlIFByb21pc29ySW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogUmV0dXJucyBhIHByb21pc2UuCiAgICAgKgogICAgICogQHJldHVybiBQcm9taXNlSW50ZXJmYWNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwcm9taXNlKCk7Cn0KAppDevTools/query/vendor/guzzlehttp/promises/src/RejectedPromise.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCi8qKgogKiBBIHByb21pc2UgdGhhdCBoYXMgYmVlbiByZWplY3RlZC4KICoKICogVGhlbm5pbmcgb2ZmIG9mIHRoaXMgcHJvbWlzZSB3aWxsIGludm9rZSB0aGUgb25SZWplY3RlZCBjYWxsYmFjawogKiBpbW1lZGlhdGVseSBhbmQgaWdub3JlIG90aGVyIGNhbGxiYWNrcy4KICovCmNsYXNzIFJlamVjdGVkUHJvbWlzZSBpbXBsZW1lbnRzIFByb21pc2VJbnRlcmZhY2UKewogICAgcHJpdmF0ZSAkcmVhc29uOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkcmVhc29uKQogICAgewogICAgICAgIGlmIChtZXRob2RfZXhpc3RzKCRyZWFzb24sICd0aGVuJykpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAnWW91IGNhbm5vdCBjcmVhdGUgYSBSZWplY3RlZFByb21pc2Ugd2l0aCBhIHByb21pc2UuJyk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+cmVhc29uID0gJHJlYXNvbjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGhlbigKICAgICAgICBjYWxsYWJsZSAkb25GdWxmaWxsZWQgPSBudWxsLAogICAgICAgIGNhbGxhYmxlICRvblJlamVjdGVkID0gbnVsbAogICAgKSB7CiAgICAgICAgLy8gSWYgdGhlcmUncyBubyBvblJlamVjdGVkIGNhbGxiYWNrIHRoZW4ganVzdCByZXR1cm4gc2VsZi4KICAgICAgICBpZiAoISRvblJlamVjdGVkKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpczsKICAgICAgICB9CgogICAgICAgICRxdWV1ZSA9IHF1ZXVlKCk7CiAgICAgICAgJHJlYXNvbiA9ICR0aGlzLT5yZWFzb247CiAgICAgICAgJHAgPSBuZXcgUHJvbWlzZShbJHF1ZXVlLCAncnVuJ10pOwogICAgICAgICRxdWV1ZS0+YWRkKHN0YXRpYyBmdW5jdGlvbiAoKSB1c2UgKCRwLCAkcmVhc29uLCAkb25SZWplY3RlZCkgewogICAgICAgICAgICBpZiAoJHAtPmdldFN0YXRlKCkgPT09IHNlbGY6OlBFTkRJTkcpIHsKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgLy8gUmV0dXJuIGEgcmVzb2x2ZWQgcHJvbWlzZSBpZiBvblJlamVjdGVkIGRvZXMgbm90IHRocm93LgogICAgICAgICAgICAgICAgICAgICRwLT5yZXNvbHZlKCRvblJlamVjdGVkKCRyZWFzb24pKTsKICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFxUaHJvd2FibGUgJGUpIHsKICAgICAgICAgICAgICAgICAgICAvLyBvblJlamVjdGVkIHRocmV3LCBzbyByZXR1cm4gYSByZWplY3RlZCBwcm9taXNlLgogICAgICAgICAgICAgICAgICAgICRwLT5yZWplY3QoJGUpOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAgICAgICAgIC8vIG9uUmVqZWN0ZWQgdGhyZXcsIHNvIHJldHVybiBhIHJlamVjdGVkIHByb21pc2UuCiAgICAgICAgICAgICAgICAgICAgJHAtPnJlamVjdCgkZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuICRwOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBvdGhlcndpc2UoY2FsbGFibGUgJG9uUmVqZWN0ZWQpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT50aGVuKG51bGwsICRvblJlamVjdGVkKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gd2FpdCgkdW53cmFwID0gdHJ1ZSwgJGRlZmF1bHREZWxpdmVyeSA9IG51bGwpCiAgICB7CiAgICAgICAgaWYgKCR1bndyYXApIHsKICAgICAgICAgICAgdGhyb3cgZXhjZXB0aW9uX2ZvcigkdGhpcy0+cmVhc29uKTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFN0YXRlKCkKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6UkVKRUNURUQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHJlc29sdmUoJHZhbHVlKQogICAgewogICAgICAgIHRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oIkNhbm5vdCByZXNvbHZlIGEgcmVqZWN0ZWQgcHJvbWlzZSIpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZWplY3QoJHJlYXNvbikKICAgIHsKICAgICAgICBpZiAoJHJlYXNvbiAhPT0gJHRoaXMtPnJlYXNvbikgewogICAgICAgICAgICB0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCJDYW5ub3QgcmVqZWN0IGEgcmVqZWN0ZWQgcHJvbWlzZSIpOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY2FuY2VsKCkKICAgIHsKICAgICAgICAvLyBwYXNzCiAgICB9Cn0KAppDevTools/query/vendor/guzzlehttp/promises/src/RejectionException.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCi8qKgogKiBBIHNwZWNpYWwgZXhjZXB0aW9uIHRoYXQgaXMgdGhyb3duIHdoZW4gd2FpdGluZyBvbiBhIHJlamVjdGVkIHByb21pc2UuCiAqCiAqIFRoZSByZWFzb24gdmFsdWUgaXMgYXZhaWxhYmxlIHZpYSB0aGUgZ2V0UmVhc29uKCkgbWV0aG9kLgogKi8KY2xhc3MgUmVqZWN0aW9uRXhjZXB0aW9uIGV4dGVuZHMgXFJ1bnRpbWVFeGNlcHRpb24KewogICAgLyoqIEB2YXIgbWl4ZWQgUmVqZWN0aW9uIHJlYXNvbi4gKi8KICAgIHByaXZhdGUgJHJlYXNvbjsKCiAgICAvKioKICAgICAqIEBwYXJhbSBtaXhlZCAkcmVhc29uICAgICAgIFJlamVjdGlvbiByZWFzb24uCiAgICAgKiBAcGFyYW0gc3RyaW5nICRkZXNjcmlwdGlvbiBPcHRpb25hbCBkZXNjcmlwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHJlYXNvbiwgJGRlc2NyaXB0aW9uID0gbnVsbCkKICAgIHsKICAgICAgICAkdGhpcy0+cmVhc29uID0gJHJlYXNvbjsKCiAgICAgICAgJG1lc3NhZ2UgPSAnVGhlIHByb21pc2Ugd2FzIHJlamVjdGVkJzsKCiAgICAgICAgaWYgKCRkZXNjcmlwdGlvbikgewogICAgICAgICAgICAkbWVzc2FnZSAuPSAnIHdpdGggcmVhc29uOiAnIC4gJGRlc2NyaXB0aW9uOwogICAgICAgIH0gZWxzZWlmIChpc19zdHJpbmcoJHJlYXNvbikKICAgICAgICAgICAgfHwgKGlzX29iamVjdCgkcmVhc29uKSAmJiBtZXRob2RfZXhpc3RzKCRyZWFzb24sICdfX3RvU3RyaW5nJykpCiAgICAgICAgKSB7CiAgICAgICAgICAgICRtZXNzYWdlIC49ICcgd2l0aCByZWFzb246ICcgLiAkdGhpcy0+cmVhc29uOwogICAgICAgIH0gZWxzZWlmICgkcmVhc29uIGluc3RhbmNlb2YgXEpzb25TZXJpYWxpemFibGUpIHsKICAgICAgICAgICAgJG1lc3NhZ2UgLj0gJyB3aXRoIHJlYXNvbjogJwogICAgICAgICAgICAgICAgLiBqc29uX2VuY29kZSgkdGhpcy0+cmVhc29uLCBKU09OX1BSRVRUWV9QUklOVCk7CiAgICAgICAgfQoKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRtZXNzYWdlKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHJlamVjdGlvbiByZWFzb24uCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVhc29uKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnJlYXNvbjsKICAgIH0KfQo=AppDevTools/query/vendor/guzzlehttp/promises/src/TaskQueue.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCi8qKgogKiBBIHRhc2sgcXVldWUgdGhhdCBleGVjdXRlcyB0YXNrcyBpbiBhIEZJRk8gb3JkZXIuCiAqCiAqIFRoaXMgdGFzayBxdWV1ZSBjbGFzcyBpcyB1c2VkIHRvIHNldHRsZSBwcm9taXNlcyBhc3luY2hyb25vdXNseSBhbmQKICogbWFpbnRhaW5zIGEgY29uc3RhbnQgc3RhY2sgc2l6ZS4gWW91IGNhbiB1c2UgdGhlIHRhc2sgcXVldWUgYXN5bmNocm9ub3VzbHkKICogYnkgY2FsbGluZyB0aGUgYHJ1bigpYCBmdW5jdGlvbiBvZiB0aGUgZ2xvYmFsIHRhc2sgcXVldWUgaW4gYW4gZXZlbnQgbG9vcC4KICoKICogICAgIEd1enpsZUh0dHBcUHJvbWlzZVxxdWV1ZSgpLT5ydW4oKTsKICovCmNsYXNzIFRhc2tRdWV1ZSBpbXBsZW1lbnRzIFRhc2tRdWV1ZUludGVyZmFjZQp7CiAgICBwcml2YXRlICRlbmFibGVTaHV0ZG93biA9IHRydWU7CiAgICBwcml2YXRlICRxdWV1ZSA9IFtdOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkd2l0aFNodXRkb3duID0gdHJ1ZSkKICAgIHsKICAgICAgICBpZiAoJHdpdGhTaHV0ZG93bikgewogICAgICAgICAgICByZWdpc3Rlcl9zaHV0ZG93bl9mdW5jdGlvbihmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmVuYWJsZVNodXRkb3duKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gT25seSBydW4gdGhlIHRhc2tzIGlmIGFuIEVfRVJST1IgZGlkbid0IG9jY3VyLgogICAgICAgICAgICAgICAgICAgICRlcnIgPSBlcnJvcl9nZXRfbGFzdCgpOwogICAgICAgICAgICAgICAgICAgIGlmICghJGVyciB8fCAoJGVyclsndHlwZSddIF4gRV9FUlJPUikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnJ1bigpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBpc0VtcHR5KCkKICAgIHsKICAgICAgICByZXR1cm4gISR0aGlzLT5xdWV1ZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkKGNhbGxhYmxlICR0YXNrKQogICAgewogICAgICAgICR0aGlzLT5xdWV1ZVtdID0gJHRhc2s7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHJ1bigpCiAgICB7CiAgICAgICAgLyoqIEB2YXIgY2FsbGFibGUgJHRhc2sgKi8KICAgICAgICB3aGlsZSAoJHRhc2sgPSBhcnJheV9zaGlmdCgkdGhpcy0+cXVldWUpKSB7CiAgICAgICAgICAgICR0YXNrKCk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogVGhlIHRhc2sgcXVldWUgd2lsbCBiZSBydW4gYW5kIGV4aGF1c3RlZCBieSBkZWZhdWx0IHdoZW4gdGhlIHByb2Nlc3MKICAgICAqIGV4aXRzIElGRiB0aGUgZXhpdCBpcyBub3QgdGhlIHJlc3VsdCBvZiBhIFBIUCBFX0VSUk9SIGVycm9yLgogICAgICoKICAgICAqIFlvdSBjYW4gZGlzYWJsZSBydW5uaW5nIHRoZSBhdXRvbWF0aWMgc2h1dGRvd24gb2YgdGhlIHF1ZXVlIGJ5IGNhbGxpbmcKICAgICAqIHRoaXMgZnVuY3Rpb24uIElmIHlvdSBkaXNhYmxlIHRoZSB0YXNrIHF1ZXVlIHNodXRkb3duIHByb2Nlc3MsIHRoZW4geW91CiAgICAgKiBNVVNUIGVpdGhlciBydW4gdGhlIHRhc2sgcXVldWUgKGFzIGEgcmVzdWx0IG9mIHJ1bm5pbmcgeW91ciBldmVudCBsb29wCiAgICAgKiBvciBtYW51YWxseSB1c2luZyB0aGUgcnVuKCkgbWV0aG9kKSBvciB3YWl0IG9uIGVhY2ggb3V0c3RhbmRpbmcgcHJvbWlzZS4KICAgICAqCiAgICAgKiBOb3RlOiBUaGlzIHNodXRkb3duIHdpbGwgb2NjdXIgYmVmb3JlIGFueSBkZXN0cnVjdG9ycyBhcmUgdHJpZ2dlcmVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGlzYWJsZVNodXRkb3duKCkKICAgIHsKICAgICAgICAkdGhpcy0+ZW5hYmxlU2h1dGRvd24gPSBmYWxzZTsKICAgIH0KfQo=AppDevTools/query/vendor/guzzlehttp/promises/src/TaskQueueInterface.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCmludGVyZmFjZSBUYXNrUXVldWVJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHF1ZXVlIGlzIGVtcHR5LgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNFbXB0eSgpOwoKICAgIC8qKgogICAgICogQWRkcyBhIHRhc2sgdG8gdGhlIHF1ZXVlIHRoYXQgd2lsbCBiZSBleGVjdXRlZCB0aGUgbmV4dCB0aW1lIHJ1biBpcwogICAgICogY2FsbGVkLgogICAgICoKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkdGFzawogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkKGNhbGxhYmxlICR0YXNrKTsKCiAgICAvKioKICAgICAqIEV4ZWN1dGUgYWxsIG9mIHRoZSBwZW5kaW5nIHRhc2sgaW4gdGhlIHF1ZXVlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcnVuKCk7Cn0KAppDevTools/query/vendor/guzzlehttp/promises/src/functions.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHJvbWlzZTsKCi8qKgogKiBHZXQgdGhlIGdsb2JhbCB0YXNrIHF1ZXVlIHVzZWQgZm9yIHByb21pc2UgcmVzb2x1dGlvbi4KICoKICogVGhpcyB0YXNrIHF1ZXVlIE1VU1QgYmUgcnVuIGluIGFuIGV2ZW50IGxvb3AgaW4gb3JkZXIgZm9yIHByb21pc2VzIHRvIGJlCiAqIHNldHRsZWQgYXN5bmNocm9ub3VzbHkuIEl0IHdpbGwgYmUgYXV0b21hdGljYWxseSBydW4gd2hlbiBzeW5jaHJvbm91c2x5CiAqIHdhaXRpbmcgb24gYSBwcm9taXNlLgogKgogKiA8Y29kZT4KICogd2hpbGUgKCRldmVudExvb3AtPmlzUnVubmluZygpKSB7CiAqICAgICBHdXp6bGVIdHRwXFByb21pc2VccXVldWUoKS0+cnVuKCk7CiAqIH0KICogPC9jb2RlPgogKgogKiBAcGFyYW0gVGFza1F1ZXVlSW50ZXJmYWNlICRhc3NpZ24gT3B0aW9uYWxseSBzcGVjaWZ5IGEgbmV3IHF1ZXVlIGluc3RhbmNlLgogKgogKiBAcmV0dXJuIFRhc2tRdWV1ZUludGVyZmFjZQogKi8KZnVuY3Rpb24gcXVldWUoVGFza1F1ZXVlSW50ZXJmYWNlICRhc3NpZ24gPSBudWxsKQp7CiAgICBzdGF0aWMgJHF1ZXVlOwoKICAgIGlmICgkYXNzaWduKSB7CiAgICAgICAgJHF1ZXVlID0gJGFzc2lnbjsKICAgIH0gZWxzZWlmICghJHF1ZXVlKSB7CiAgICAgICAgJHF1ZXVlID0gbmV3IFRhc2tRdWV1ZSgpOwogICAgfQoKICAgIHJldHVybiAkcXVldWU7Cn0KCi8qKgogKiBBZGRzIGEgZnVuY3Rpb24gdG8gcnVuIGluIHRoZSB0YXNrIHF1ZXVlIHdoZW4gaXQgaXMgbmV4dCBgcnVuKClgIGFuZCByZXR1cm5zCiAqIGEgcHJvbWlzZSB0aGF0IGlzIGZ1bGZpbGxlZCBvciByZWplY3RlZCB3aXRoIHRoZSByZXN1bHQuCiAqCiAqIEBwYXJhbSBjYWxsYWJsZSAkdGFzayBUYXNrIGZ1bmN0aW9uIHRvIHJ1bi4KICoKICogQHJldHVybiBQcm9taXNlSW50ZXJmYWNlCiAqLwpmdW5jdGlvbiB0YXNrKGNhbGxhYmxlICR0YXNrKQp7CiAgICAkcXVldWUgPSBxdWV1ZSgpOwogICAgJHByb21pc2UgPSBuZXcgUHJvbWlzZShbJHF1ZXVlLCAncnVuJ10pOwogICAgJHF1ZXVlLT5hZGQoZnVuY3Rpb24gKCkgdXNlICgkdGFzaywgJHByb21pc2UpIHsKICAgICAgICB0cnkgewogICAgICAgICAgICAkcHJvbWlzZS0+cmVzb2x2ZSgkdGFzaygpKTsKICAgICAgICB9IGNhdGNoIChcVGhyb3dhYmxlICRlKSB7CiAgICAgICAgICAgICRwcm9taXNlLT5yZWplY3QoJGUpOwogICAgICAgIH0gY2F0Y2ggKFxFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgJHByb21pc2UtPnJlamVjdCgkZSk7CiAgICAgICAgfQogICAgfSk7CgogICAgcmV0dXJuICRwcm9taXNlOwp9CgovKioKICogQ3JlYXRlcyBhIHByb21pc2UgZm9yIGEgdmFsdWUgaWYgdGhlIHZhbHVlIGlzIG5vdCBhIHByb21pc2UuCiAqCiAqIEBwYXJhbSBtaXhlZCAkdmFsdWUgUHJvbWlzZSBvciB2YWx1ZS4KICoKICogQHJldHVybiBQcm9taXNlSW50ZXJmYWNlCiAqLwpmdW5jdGlvbiBwcm9taXNlX2ZvcigkdmFsdWUpCnsKICAgIGlmICgkdmFsdWUgaW5zdGFuY2VvZiBQcm9taXNlSW50ZXJmYWNlKSB7CiAgICAgICAgcmV0dXJuICR2YWx1ZTsKICAgIH0KCiAgICAvLyBSZXR1cm4gYSBHdXp6bGUgcHJvbWlzZSB0aGF0IHNoYWRvd3MgdGhlIGdpdmVuIHByb21pc2UuCiAgICBpZiAobWV0aG9kX2V4aXN0cygkdmFsdWUsICd0aGVuJykpIHsKICAgICAgICAkd2ZuID0gbWV0aG9kX2V4aXN0cygkdmFsdWUsICd3YWl0JykgPyBbJHZhbHVlLCAnd2FpdCddIDogbnVsbDsKICAgICAgICAkY2ZuID0gbWV0aG9kX2V4aXN0cygkdmFsdWUsICdjYW5jZWwnKSA/IFskdmFsdWUsICdjYW5jZWwnXSA6IG51bGw7CiAgICAgICAgJHByb21pc2UgPSBuZXcgUHJvbWlzZSgkd2ZuLCAkY2ZuKTsKICAgICAgICAkdmFsdWUtPnRoZW4oWyRwcm9taXNlLCAncmVzb2x2ZSddLCBbJHByb21pc2UsICdyZWplY3QnXSk7CiAgICAgICAgcmV0dXJuICRwcm9taXNlOwogICAgfQoKICAgIHJldHVybiBuZXcgRnVsZmlsbGVkUHJvbWlzZSgkdmFsdWUpOwp9CgovKioKICogQ3JlYXRlcyBhIHJlamVjdGVkIHByb21pc2UgZm9yIGEgcmVhc29uIGlmIHRoZSByZWFzb24gaXMgbm90IGEgcHJvbWlzZS4gSWYKICogdGhlIHByb3ZpZGVkIHJlYXNvbiBpcyBhIHByb21pc2UsIHRoZW4gaXQgaXMgcmV0dXJuZWQgYXMtaXMuCiAqCiAqIEBwYXJhbSBtaXhlZCAkcmVhc29uIFByb21pc2Ugb3IgcmVhc29uLgogKgogKiBAcmV0dXJuIFByb21pc2VJbnRlcmZhY2UKICovCmZ1bmN0aW9uIHJlamVjdGlvbl9mb3IoJHJlYXNvbikKewogICAgaWYgKCRyZWFzb24gaW5zdGFuY2VvZiBQcm9taXNlSW50ZXJmYWNlKSB7CiAgICAgICAgcmV0dXJuICRyZWFzb247CiAgICB9CgogICAgcmV0dXJuIG5ldyBSZWplY3RlZFByb21pc2UoJHJlYXNvbik7Cn0KCi8qKgogKiBDcmVhdGUgYW4gZXhjZXB0aW9uIGZvciBhIHJlamVjdGVkIHByb21pc2UgdmFsdWUuCiAqCiAqIEBwYXJhbSBtaXhlZCAkcmVhc29uCiAqCiAqIEByZXR1cm4gXEV4Y2VwdGlvbnxcVGhyb3dhYmxlCiAqLwpmdW5jdGlvbiBleGNlcHRpb25fZm9yKCRyZWFzb24pCnsKICAgIHJldHVybiAkcmVhc29uIGluc3RhbmNlb2YgXEV4Y2VwdGlvbiB8fCAkcmVhc29uIGluc3RhbmNlb2YgXFRocm93YWJsZQogICAgICAgID8gJHJlYXNvbgogICAgICAgIDogbmV3IFJlamVjdGlvbkV4Y2VwdGlvbigkcmVhc29uKTsKfQoKLyoqCiAqIFJldHVybnMgYW4gaXRlcmF0b3IgZm9yIHRoZSBnaXZlbiB2YWx1ZS4KICoKICogQHBhcmFtIG1peGVkICR2YWx1ZQogKgogKiBAcmV0dXJuIFxJdGVyYXRvcgogKi8KZnVuY3Rpb24gaXRlcl9mb3IoJHZhbHVlKQp7CiAgICBpZiAoJHZhbHVlIGluc3RhbmNlb2YgXEl0ZXJhdG9yKSB7CiAgICAgICAgcmV0dXJuICR2YWx1ZTsKICAgIH0gZWxzZWlmIChpc19hcnJheSgkdmFsdWUpKSB7CiAgICAgICAgcmV0dXJuIG5ldyBcQXJyYXlJdGVyYXRvcigkdmFsdWUpOwogICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gbmV3IFxBcnJheUl0ZXJhdG9yKFskdmFsdWVdKTsKICAgIH0KfQoKLyoqCiAqIFN5bmNocm9ub3VzbHkgd2FpdHMgb24gYSBwcm9taXNlIHRvIHJlc29sdmUgYW5kIHJldHVybnMgYW4gaW5zcGVjdGlvbiBzdGF0ZQogKiBhcnJheS4KICoKICogUmV0dXJucyBhIHN0YXRlIGFzc29jaWF0aXZlIGFycmF5IGNvbnRhaW5pbmcgYSAic3RhdGUiIGtleSBtYXBwaW5nIHRvIGEKICogdmFsaWQgcHJvbWlzZSBzdGF0ZS4gSWYgdGhlIHN0YXRlIG9mIHRoZSBwcm9taXNlIGlzICJmdWxmaWxsZWQiLCB0aGUgYXJyYXkKICogd2lsbCBjb250YWluIGEgInZhbHVlIiBrZXkgbWFwcGluZyB0byB0aGUgZnVsZmlsbGVkIHZhbHVlIG9mIHRoZSBwcm9taXNlLiBJZgogKiB0aGUgcHJvbWlzZSBpcyByZWplY3RlZCwgdGhlIGFycmF5IHdpbGwgY29udGFpbiBhICJyZWFzb24iIGtleSBtYXBwaW5nIHRvCiAqIHRoZSByZWplY3Rpb24gcmVhc29uIG9mIHRoZSBwcm9taXNlLgogKgogKiBAcGFyYW0gUHJvbWlzZUludGVyZmFjZSAkcHJvbWlzZSBQcm9taXNlIG9yIHZhbHVlLgogKgogKiBAcmV0dXJuIGFycmF5CiAqLwpmdW5jdGlvbiBpbnNwZWN0KFByb21pc2VJbnRlcmZhY2UgJHByb21pc2UpCnsKICAgIHRyeSB7CiAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgJ3N0YXRlJyA9PiBQcm9taXNlSW50ZXJmYWNlOjpGVUxGSUxMRUQsCiAgICAgICAgICAgICd2YWx1ZScgPT4gJHByb21pc2UtPndhaXQoKQogICAgICAgIF07CiAgICB9IGNhdGNoIChSZWplY3Rpb25FeGNlcHRpb24gJGUpIHsKICAgICAgICByZXR1cm4gWydzdGF0ZScgPT4gUHJvbWlzZUludGVyZmFjZTo6UkVKRUNURUQsICdyZWFzb24nID0+ICRlLT5nZXRSZWFzb24oKV07CiAgICB9IGNhdGNoIChcVGhyb3dhYmxlICRlKSB7CiAgICAgICAgcmV0dXJuIFsnc3RhdGUnID0+IFByb21pc2VJbnRlcmZhY2U6OlJFSkVDVEVELCAncmVhc29uJyA9PiAkZV07CiAgICB9IGNhdGNoIChcRXhjZXB0aW9uICRlKSB7CiAgICAgICAgcmV0dXJuIFsnc3RhdGUnID0+IFByb21pc2VJbnRlcmZhY2U6OlJFSkVDVEVELCAncmVhc29uJyA9PiAkZV07CiAgICB9Cn0KCi8qKgogKiBXYWl0cyBvbiBhbGwgb2YgdGhlIHByb3ZpZGVkIHByb21pc2VzLCBidXQgZG9lcyBub3QgdW53cmFwIHJlamVjdGVkIHByb21pc2VzCiAqIGFzIHRocm93biBleGNlcHRpb24uCiAqCiAqIFJldHVybnMgYW4gYXJyYXkgb2YgaW5zcGVjdGlvbiBzdGF0ZSBhcnJheXMuCiAqCiAqIEBwYXJhbSBQcm9taXNlSW50ZXJmYWNlW10gJHByb21pc2VzIFRyYXZlcnNhYmxlIG9mIHByb21pc2VzIHRvIHdhaXQgdXBvbi4KICoKICogQHJldHVybiBhcnJheQogKiBAc2VlIEd1enpsZUh0dHBcUHJvbWlzZVxpbnNwZWN0IGZvciB0aGUgaW5zcGVjdGlvbiBzdGF0ZSBhcnJheSBmb3JtYXQuCiAqLwpmdW5jdGlvbiBpbnNwZWN0X2FsbCgkcHJvbWlzZXMpCnsKICAgICRyZXN1bHRzID0gW107CiAgICBmb3JlYWNoICgkcHJvbWlzZXMgYXMgJGtleSA9PiAkcHJvbWlzZSkgewogICAgICAgICRyZXN1bHRzWyRrZXldID0gaW5zcGVjdCgkcHJvbWlzZSk7CiAgICB9CgogICAgcmV0dXJuICRyZXN1bHRzOwp9CgovKioKICogV2FpdHMgb24gYWxsIG9mIHRoZSBwcm92aWRlZCBwcm9taXNlcyBhbmQgcmV0dXJucyB0aGUgZnVsZmlsbGVkIHZhbHVlcy4KICoKICogUmV0dXJucyBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIHRoZSB2YWx1ZSBvZiBlYWNoIHByb21pc2UgKGluIHRoZSBzYW1lIG9yZGVyCiAqIHRoZSBwcm9taXNlcyB3ZXJlIHByb3ZpZGVkKS4gQW4gZXhjZXB0aW9uIGlzIHRocm93biBpZiBhbnkgb2YgdGhlIHByb21pc2VzCiAqIGFyZSByZWplY3RlZC4KICoKICogQHBhcmFtIG1peGVkICRwcm9taXNlcyBJdGVyYWJsZSBvZiBQcm9taXNlSW50ZXJmYWNlIG9iamVjdHMgdG8gd2FpdCBvbi4KICoKICogQHJldHVybiBhcnJheQogKiBAdGhyb3dzIFxFeGNlcHRpb24gb24gZXJyb3IKICogQHRocm93cyBcVGhyb3dhYmxlIG9uIGVycm9yIGluIFBIUCA+PTcKICovCmZ1bmN0aW9uIHVud3JhcCgkcHJvbWlzZXMpCnsKICAgICRyZXN1bHRzID0gW107CiAgICBmb3JlYWNoICgkcHJvbWlzZXMgYXMgJGtleSA9PiAkcHJvbWlzZSkgewogICAgICAgICRyZXN1bHRzWyRrZXldID0gJHByb21pc2UtPndhaXQoKTsKICAgIH0KCiAgICByZXR1cm4gJHJlc3VsdHM7Cn0KCi8qKgogKiBHaXZlbiBhbiBhcnJheSBvZiBwcm9taXNlcywgcmV0dXJuIGEgcHJvbWlzZSB0aGF0IGlzIGZ1bGZpbGxlZCB3aGVuIGFsbCB0aGUKICogaXRlbXMgaW4gdGhlIGFycmF5IGFyZSBmdWxmaWxsZWQuCiAqCiAqIFRoZSBwcm9taXNlJ3MgZnVsZmlsbG1lbnQgdmFsdWUgaXMgYW4gYXJyYXkgd2l0aCBmdWxmaWxsbWVudCB2YWx1ZXMgYXQKICogcmVzcGVjdGl2ZSBwb3NpdGlvbnMgdG8gdGhlIG9yaWdpbmFsIGFycmF5LiBJZiBhbnkgcHJvbWlzZSBpbiB0aGUgYXJyYXkKICogcmVqZWN0cywgdGhlIHJldHVybmVkIHByb21pc2UgaXMgcmVqZWN0ZWQgd2l0aCB0aGUgcmVqZWN0aW9uIHJlYXNvbi4KICoKICogQHBhcmFtIG1peGVkICRwcm9taXNlcyBQcm9taXNlcyBvciB2YWx1ZXMuCiAqCiAqIEByZXR1cm4gUHJvbWlzZUludGVyZmFjZQogKi8KZnVuY3Rpb24gYWxsKCRwcm9taXNlcykKewogICAgJHJlc3VsdHMgPSBbXTsKICAgIHJldHVybiBlYWNoKAogICAgICAgICRwcm9taXNlcywKICAgICAgICBmdW5jdGlvbiAoJHZhbHVlLCAkaWR4KSB1c2UgKCYkcmVzdWx0cykgewogICAgICAgICAgICAkcmVzdWx0c1skaWR4XSA9ICR2YWx1ZTsKICAgICAgICB9LAogICAgICAgIGZ1bmN0aW9uICgkcmVhc29uLCAkaWR4LCBQcm9taXNlICRhZ2dyZWdhdGUpIHsKICAgICAgICAgICAgJGFnZ3JlZ2F0ZS0+cmVqZWN0KCRyZWFzb24pOwogICAgICAgIH0KICAgICktPnRoZW4oZnVuY3Rpb24gKCkgdXNlICgmJHJlc3VsdHMpIHsKICAgICAgICBrc29ydCgkcmVzdWx0cyk7CiAgICAgICAgcmV0dXJuICRyZXN1bHRzOwogICAgfSk7Cn0KCi8qKgogKiBJbml0aWF0ZSBhIGNvbXBldGl0aXZlIHJhY2UgYmV0d2VlbiBtdWx0aXBsZSBwcm9taXNlcyBvciB2YWx1ZXMgKHZhbHVlcyB3aWxsCiAqIGJlY29tZSBpbW1lZGlhdGVseSBmdWxmaWxsZWQgcHJvbWlzZXMpLgogKgogKiBXaGVuIGNvdW50IGFtb3VudCBvZiBwcm9taXNlcyBoYXZlIGJlZW4gZnVsZmlsbGVkLCB0aGUgcmV0dXJuZWQgcHJvbWlzZSBpcwogKiBmdWxmaWxsZWQgd2l0aCBhbiBhcnJheSB0aGF0IGNvbnRhaW5zIHRoZSBmdWxmaWxsbWVudCB2YWx1ZXMgb2YgdGhlIHdpbm5lcnMKICogaW4gb3JkZXIgb2YgcmVzb2x1dGlvbi4KICoKICogVGhpcyBwcm9tbWlzZSBpcyByZWplY3RlZCB3aXRoIGEge0BzZWUgR3V6emxlSHR0cFxQcm9taXNlXEFnZ3JlZ2F0ZUV4Y2VwdGlvbn0KICogaWYgdGhlIG51bWJlciBvZiBmdWxmaWxsZWQgcHJvbWlzZXMgaXMgbGVzcyB0aGFuIHRoZSBkZXNpcmVkICRjb3VudC4KICoKICogQHBhcmFtIGludCAgICRjb3VudCAgICBUb3RhbCBudW1iZXIgb2YgcHJvbWlzZXMuCiAqIEBwYXJhbSBtaXhlZCAkcHJvbWlzZXMgUHJvbWlzZXMgb3IgdmFsdWVzLgogKgogKiBAcmV0dXJuIFByb21pc2VJbnRlcmZhY2UKICovCmZ1bmN0aW9uIHNvbWUoJGNvdW50LCAkcHJvbWlzZXMpCnsKICAgICRyZXN1bHRzID0gW107CiAgICAkcmVqZWN0aW9ucyA9IFtdOwoKICAgIHJldHVybiBlYWNoKAogICAgICAgICRwcm9taXNlcywKICAgICAgICBmdW5jdGlvbiAoJHZhbHVlLCAkaWR4LCBQcm9taXNlSW50ZXJmYWNlICRwKSB1c2UgKCYkcmVzdWx0cywgJGNvdW50KSB7CiAgICAgICAgICAgIGlmICgkcC0+Z2V0U3RhdGUoKSAhPT0gUHJvbWlzZUludGVyZmFjZTo6UEVORElORykgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRyZXN1bHRzWyRpZHhdID0gJHZhbHVlOwogICAgICAgICAgICBpZiAoY291bnQoJHJlc3VsdHMpID49ICRjb3VudCkgewogICAgICAgICAgICAgICAgJHAtPnJlc29sdmUobnVsbCk7CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGZ1bmN0aW9uICgkcmVhc29uKSB1c2UgKCYkcmVqZWN0aW9ucykgewogICAgICAgICAgICAkcmVqZWN0aW9uc1tdID0gJHJlYXNvbjsKICAgICAgICB9CiAgICApLT50aGVuKAogICAgICAgIGZ1bmN0aW9uICgpIHVzZSAoJiRyZXN1bHRzLCAmJHJlamVjdGlvbnMsICRjb3VudCkgewogICAgICAgICAgICBpZiAoY291bnQoJHJlc3VsdHMpICE9PSAkY291bnQpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBBZ2dyZWdhdGVFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAgICAgJ05vdCBlbm91Z2ggcHJvbWlzZXMgdG8gZnVsZmlsbCBjb3VudCcsCiAgICAgICAgICAgICAgICAgICAgJHJlamVjdGlvbnMKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAga3NvcnQoJHJlc3VsdHMpOwogICAgICAgICAgICByZXR1cm4gYXJyYXlfdmFsdWVzKCRyZXN1bHRzKTsKICAgICAgICB9CiAgICApOwp9CgovKioKICogTGlrZSBzb21lKCksIHdpdGggMSBhcyBjb3VudC4gSG93ZXZlciwgaWYgdGhlIHByb21pc2UgZnVsZmlsbHMsIHRoZQogKiBmdWxmaWxsbWVudCB2YWx1ZSBpcyBub3QgYW4gYXJyYXkgb2YgMSBidXQgdGhlIHZhbHVlIGRpcmVjdGx5LgogKgogKiBAcGFyYW0gbWl4ZWQgJHByb21pc2VzIFByb21pc2VzIG9yIHZhbHVlcy4KICoKICogQHJldHVybiBQcm9taXNlSW50ZXJmYWNlCiAqLwpmdW5jdGlvbiBhbnkoJHByb21pc2VzKQp7CiAgICByZXR1cm4gc29tZSgxLCAkcHJvbWlzZXMpLT50aGVuKGZ1bmN0aW9uICgkdmFsdWVzKSB7IHJldHVybiAkdmFsdWVzWzBdOyB9KTsKfQoKLyoqCiAqIFJldHVybnMgYSBwcm9taXNlIHRoYXQgaXMgZnVsZmlsbGVkIHdoZW4gYWxsIG9mIHRoZSBwcm92aWRlZCBwcm9taXNlcyBoYXZlCiAqIGJlZW4gZnVsZmlsbGVkIG9yIHJlamVjdGVkLgogKgogKiBUaGUgcmV0dXJuZWQgcHJvbWlzZSBpcyBmdWxmaWxsZWQgd2l0aCBhbiBhcnJheSBvZiBpbnNwZWN0aW9uIHN0YXRlIGFycmF5cy4KICoKICogQHBhcmFtIG1peGVkICRwcm9taXNlcyBQcm9taXNlcyBvciB2YWx1ZXMuCiAqCiAqIEByZXR1cm4gUHJvbWlzZUludGVyZmFjZQogKiBAc2VlIEd1enpsZUh0dHBcUHJvbWlzZVxpbnNwZWN0IGZvciB0aGUgaW5zcGVjdGlvbiBzdGF0ZSBhcnJheSBmb3JtYXQuCiAqLwpmdW5jdGlvbiBzZXR0bGUoJHByb21pc2VzKQp7CiAgICAkcmVzdWx0cyA9IFtdOwoKICAgIHJldHVybiBlYWNoKAogICAgICAgICRwcm9taXNlcywKICAgICAgICBmdW5jdGlvbiAoJHZhbHVlLCAkaWR4KSB1c2UgKCYkcmVzdWx0cykgewogICAgICAgICAgICAkcmVzdWx0c1skaWR4XSA9IFsnc3RhdGUnID0+IFByb21pc2VJbnRlcmZhY2U6OkZVTEZJTExFRCwgJ3ZhbHVlJyA9PiAkdmFsdWVdOwogICAgICAgIH0sCiAgICAgICAgZnVuY3Rpb24gKCRyZWFzb24sICRpZHgpIHVzZSAoJiRyZXN1bHRzKSB7CiAgICAgICAgICAgICRyZXN1bHRzWyRpZHhdID0gWydzdGF0ZScgPT4gUHJvbWlzZUludGVyZmFjZTo6UkVKRUNURUQsICdyZWFzb24nID0+ICRyZWFzb25dOwogICAgICAgIH0KICAgICktPnRoZW4oZnVuY3Rpb24gKCkgdXNlICgmJHJlc3VsdHMpIHsKICAgICAgICBrc29ydCgkcmVzdWx0cyk7CiAgICAgICAgcmV0dXJuICRyZXN1bHRzOwogICAgfSk7Cn0KCi8qKgogKiBHaXZlbiBhbiBpdGVyYXRvciB0aGF0IHlpZWxkcyBwcm9taXNlcyBvciB2YWx1ZXMsIHJldHVybnMgYSBwcm9taXNlIHRoYXQgaXMKICogZnVsZmlsbGVkIHdpdGggYSBudWxsIHZhbHVlIHdoZW4gdGhlIGl0ZXJhdG9yIGhhcyBiZWVuIGNvbnN1bWVkIG9yIHRoZQogKiBhZ2dyZWdhdGUgcHJvbWlzZSBoYXMgYmVlbiBmdWxmaWxsZWQgb3IgcmVqZWN0ZWQuCiAqCiAqICRvbkZ1bGZpbGxlZCBpcyBhIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyB0aGUgZnVsZmlsbGVkIHZhbHVlLCBpdGVyYXRvcgogKiBpbmRleCwgYW5kIHRoZSBhZ2dyZWdhdGUgcHJvbWlzZS4gVGhlIGNhbGxiYWNrIGNhbiBpbnZva2UgYW55IG5lY2Vzc2FyeSBzaWRlCiAqIGVmZmVjdHMgYW5kIGNob29zZSB0byByZXNvbHZlIG9yIHJlamVjdCB0aGUgYWdncmVnYXRlIHByb21pc2UgaWYgbmVlZGVkLgogKgogKiAkb25SZWplY3RlZCBpcyBhIGZ1bmN0aW9uIHRoYXQgYWNjZXB0cyB0aGUgcmVqZWN0aW9uIHJlYXNvbiwgaXRlcmF0b3IKICogaW5kZXgsIGFuZCB0aGUgYWdncmVnYXRlIHByb21pc2UuIFRoZSBjYWxsYmFjayBjYW4gaW52b2tlIGFueSBuZWNlc3Nhcnkgc2lkZQogKiBlZmZlY3RzIGFuZCBjaG9vc2UgdG8gcmVzb2x2ZSBvciByZWplY3QgdGhlIGFnZ3JlZ2F0ZSBwcm9taXNlIGlmIG5lZWRlZC4KICoKICogQHBhcmFtIG1peGVkICAgICRpdGVyYWJsZSAgICBJdGVyYXRvciBvciBhcnJheSB0byBpdGVyYXRlIG92ZXIuCiAqIEBwYXJhbSBjYWxsYWJsZSAkb25GdWxmaWxsZWQKICogQHBhcmFtIGNhbGxhYmxlICRvblJlamVjdGVkCiAqCiAqIEByZXR1cm4gUHJvbWlzZUludGVyZmFjZQogKi8KZnVuY3Rpb24gZWFjaCgKICAgICRpdGVyYWJsZSwKICAgIGNhbGxhYmxlICRvbkZ1bGZpbGxlZCA9IG51bGwsCiAgICBjYWxsYWJsZSAkb25SZWplY3RlZCA9IG51bGwKKSB7CiAgICByZXR1cm4gKG5ldyBFYWNoUHJvbWlzZSgkaXRlcmFibGUsIFsKICAgICAgICAnZnVsZmlsbGVkJyA9PiAkb25GdWxmaWxsZWQsCiAgICAgICAgJ3JlamVjdGVkJyAgPT4gJG9uUmVqZWN0ZWQKICAgIF0pKS0+cHJvbWlzZSgpOwp9CgovKioKICogTGlrZSBlYWNoLCBidXQgb25seSBhbGxvd3MgYSBjZXJ0YWluIG51bWJlciBvZiBvdXRzdGFuZGluZyBwcm9taXNlcyBhdCBhbnkKICogZ2l2ZW4gdGltZS4KICoKICogJGNvbmN1cnJlbmN5IG1heSBiZSBhbiBpbnRlZ2VyIG9yIGEgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIHRoZSBudW1iZXIgb2YKICogcGVuZGluZyBwcm9taXNlcyBhbmQgcmV0dXJucyBhIG51bWVyaWMgY29uY3VycmVuY3kgbGltaXQgdmFsdWUgdG8gYWxsb3cgZm9yCiAqIGR5bmFtaWMgYSBjb25jdXJyZW5jeSBzaXplLgogKgogKiBAcGFyYW0gbWl4ZWQgICAgICAgICRpdGVyYWJsZQogKiBAcGFyYW0gaW50fGNhbGxhYmxlICRjb25jdXJyZW5jeQogKiBAcGFyYW0gY2FsbGFibGUgICAgICRvbkZ1bGZpbGxlZAogKiBAcGFyYW0gY2FsbGFibGUgICAgICRvblJlamVjdGVkCiAqCiAqIEByZXR1cm4gUHJvbWlzZUludGVyZmFjZQogKi8KZnVuY3Rpb24gZWFjaF9saW1pdCgKICAgICRpdGVyYWJsZSwKICAgICRjb25jdXJyZW5jeSwKICAgIGNhbGxhYmxlICRvbkZ1bGZpbGxlZCA9IG51bGwsCiAgICBjYWxsYWJsZSAkb25SZWplY3RlZCA9IG51bGwKKSB7CiAgICByZXR1cm4gKG5ldyBFYWNoUHJvbWlzZSgkaXRlcmFibGUsIFsKICAgICAgICAnZnVsZmlsbGVkJyAgID0+ICRvbkZ1bGZpbGxlZCwKICAgICAgICAncmVqZWN0ZWQnICAgID0+ICRvblJlamVjdGVkLAogICAgICAgICdjb25jdXJyZW5jeScgPT4gJGNvbmN1cnJlbmN5CiAgICBdKSktPnByb21pc2UoKTsKfQoKLyoqCiAqIExpa2UgZWFjaF9saW1pdCwgYnV0IGVuc3VyZXMgdGhhdCBubyBwcm9taXNlIGluIHRoZSBnaXZlbiAkaXRlcmFibGUgYXJndW1lbnQKICogaXMgcmVqZWN0ZWQuIElmIGFueSBwcm9taXNlIGlzIHJlamVjdGVkLCB0aGVuIHRoZSBhZ2dyZWdhdGUgcHJvbWlzZSBpcwogKiByZWplY3RlZCB3aXRoIHRoZSBlbmNvdW50ZXJlZCByZWplY3Rpb24uCiAqCiAqIEBwYXJhbSBtaXhlZCAgICAgICAgJGl0ZXJhYmxlCiAqIEBwYXJhbSBpbnR8Y2FsbGFibGUgJGNvbmN1cnJlbmN5CiAqIEBwYXJhbSBjYWxsYWJsZSAgICAgJG9uRnVsZmlsbGVkCiAqCiAqIEByZXR1cm4gUHJvbWlzZUludGVyZmFjZQogKi8KZnVuY3Rpb24gZWFjaF9saW1pdF9hbGwoCiAgICAkaXRlcmFibGUsCiAgICAkY29uY3VycmVuY3ksCiAgICBjYWxsYWJsZSAkb25GdWxmaWxsZWQgPSBudWxsCikgewogICAgcmV0dXJuIGVhY2hfbGltaXQoCiAgICAgICAgJGl0ZXJhYmxlLAogICAgICAgICRjb25jdXJyZW5jeSwKICAgICAgICAkb25GdWxmaWxsZWQsCiAgICAgICAgZnVuY3Rpb24gKCRyZWFzb24sICRpZHgsIFByb21pc2VJbnRlcmZhY2UgJGFnZ3JlZ2F0ZSkgewogICAgICAgICAgICAkYWdncmVnYXRlLT5yZWplY3QoJHJlYXNvbik7CiAgICAgICAgfQogICAgKTsKfQoKLyoqCiAqIFJldHVybnMgdHJ1ZSBpZiBhIHByb21pc2UgaXMgZnVsZmlsbGVkLgogKgogKiBAcGFyYW0gUHJvbWlzZUludGVyZmFjZSAkcHJvbWlzZQogKgogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIGlzX2Z1bGZpbGxlZChQcm9taXNlSW50ZXJmYWNlICRwcm9taXNlKQp7CiAgICByZXR1cm4gJHByb21pc2UtPmdldFN0YXRlKCkgPT09IFByb21pc2VJbnRlcmZhY2U6OkZVTEZJTExFRDsKfQoKLyoqCiAqIFJldHVybnMgdHJ1ZSBpZiBhIHByb21pc2UgaXMgcmVqZWN0ZWQuCiAqCiAqIEBwYXJhbSBQcm9taXNlSW50ZXJmYWNlICRwcm9taXNlCiAqCiAqIEByZXR1cm4gYm9vbAogKi8KZnVuY3Rpb24gaXNfcmVqZWN0ZWQoUHJvbWlzZUludGVyZmFjZSAkcHJvbWlzZSkKewogICAgcmV0dXJuICRwcm9taXNlLT5nZXRTdGF0ZSgpID09PSBQcm9taXNlSW50ZXJmYWNlOjpSRUpFQ1RFRDsKfQoKLyoqCiAqIFJldHVybnMgdHJ1ZSBpZiBhIHByb21pc2UgaXMgZnVsZmlsbGVkIG9yIHJlamVjdGVkLgogKgogKiBAcGFyYW0gUHJvbWlzZUludGVyZmFjZSAkcHJvbWlzZQogKgogKiBAcmV0dXJuIGJvb2wKICovCmZ1bmN0aW9uIGlzX3NldHRsZWQoUHJvbWlzZUludGVyZmFjZSAkcHJvbWlzZSkKewogICAgcmV0dXJuICRwcm9taXNlLT5nZXRTdGF0ZSgpICE9PSBQcm9taXNlSW50ZXJmYWNlOjpQRU5ESU5HOwp9CgovKioKICogQHNlZSBDb3JvdXRpbmUKICoKICogQHBhcmFtIGNhbGxhYmxlICRnZW5lcmF0b3JGbgogKgogKiBAcmV0dXJuIFByb21pc2VJbnRlcmZhY2UKICovCmZ1bmN0aW9uIGNvcm91dGluZShjYWxsYWJsZSAkZ2VuZXJhdG9yRm4pCnsKICAgIHJldHVybiBuZXcgQ29yb3V0aW5lKCRnZW5lcmF0b3JGbik7Cn0KAppDevTools/query/vendor/guzzlehttp/promises/src/functions_include.phpPD9waHAKCi8vIERvbid0IHJlZGVmaW5lIHRoZSBmdW5jdGlvbnMgaWYgaW5jbHVkZWQgbXVsdGlwbGUgdGltZXMuCmlmICghZnVuY3Rpb25fZXhpc3RzKCdHdXp6bGVIdHRwXFByb21pc2VccHJvbWlzZV9mb3InKSkgewogICAgcmVxdWlyZSBfX0RJUl9fIC4gJy9mdW5jdGlvbnMucGhwJzsKfQo=AppDevTools/query/vendor/guzzlehttp/psr7/CHANGELOG.mdIyBDSEFOR0VMT0cKCiMjIDEuNC4yIC0gMjAxNy0wMy0yMAoKKiBSZXZlcnRlZCBCQyBicmVhayB0byBgVXJpOjpyZXNvbHZlYCBhbmQgYFVyaTo6cmVtb3ZlRG90U2VnbWVudHNgIGJ5IHJlbW92aW5nIAogIGNhbGxzIHRvIGB0cmlnZ2VyX2Vycm9yYCB3aGVuIGRlcHJlY2F0ZWQgbWV0aG9kcyBhcmUgaW52b2tlZC4KCiMjIDEuNC4xIC0gMjAxNy0wMi0yNwoKKiBSZXZlcnRlZCBCQyBicmVhayBieSByZWludHJvZHVjaW5nIGJlaGF2aW9yIHRvIGF1dG9tYWdpY2FsbHkgZml4IGEgVVJJIHdpdGggYQogIHJlbGF0aXZlIHBhdGggYW5kIGFuIGF1dGhvcml0eSBieSBhZGRpbmcgYSBsZWFkaW5nIHNsYXNoIHRvIHRoZSBwYXRoLiBJdCdzIG9ubHkKICBkZXByZWNhdGVkIG5vdy4KKiBBZGRlZCB0cmlnZ2VyaW5nIG9mIHNpbGVuY2VkIGRlcHJlY2F0aW9uIHdhcm5pbmdzLgoKIyMgMS40LjAgLSAyMDE3LTAyLTIxCgoqIEZpeCBgU3RyZWFtOjpyZWFkYCB3aGVuIGxlbmd0aCBwYXJhbWV0ZXIgPD0gMC4KKiBgY29weV90b19zdHJlYW1gIHJlYWRzIGJ5dGVzIGluIGNodW5rcyBpbnN0ZWFkIG9mIGBtYXhMZW5gIGludG8gbWVtb3J5LgoqIEZpeCBgU2VydmVyUmVxdWVzdDo6Z2V0VXJpRnJvbUdsb2JhbHNgIHdoZW4gYEhvc3RgIGhlYWRlciBjb250YWlucyBwb3J0LgoqIEVuc3VyZSBgU2VydmVyUmVxdWVzdDo6Z2V0VXJpRnJvbUdsb2JhbHNgIHJldHVybnMgYSBVUkkgaW4gYWJzb2x1dGUgZm9ybS4KKiBBbGxvdyBgcGFyc2VfcmVzcG9uc2VgIHRvIHBhcnNlIGEgcmVzcG9uc2Ugd2l0aG91dCBkZWxpbWl0aW5nIHNwYWNlIGFuZCByZWFzb24uCiogRW5zdXJlIGVhY2ggVVJJIG1vZGlmaWNhdGlvbiByZXN1bHRzIGluIGEgdmFsaWQgVVJJIGFjY29yZGluZyB0byBQU1ItNyBkaXNjdXNzaW9ucy4KICBJbnZhbGlkIG1vZGlmaWNhdGlvbnMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaW5zdGVhZCBvZiByZXR1cm5pbmcgYSB3cm9uZyBVUkkgb3IKICBkb2luZyBzb21lIG1hZ2ljLgogIC0gYChuZXcgVXJpKS0+d2l0aFBhdGgoJ2ZvbycpLT53aXRoSG9zdCgnZXhhbXBsZS5jb20nKWAgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24KICAgIGJlY2F1c2UgdGhlIHBhdGggb2YgYSBVUkkgd2l0aCBhbiBhdXRob3JpdHkgbXVzdCBzdGFydCB3aXRoIGEgc2xhc2ggIi8iIG9yIGJlIGVtcHR5CiAgLSBgKG5ldyBVcmkoKSktPndpdGhTY2hlbWUoJ2h0dHAnKWAgd2lsbCByZXR1cm4gYCdodHRwOi8vbG9jYWxob3N0J2AKKiBGaXggY29tcGF0aWJpbGl0eSBvZiBVUklzIHdpdGggYGZpbGVgIHNjaGVtZSBhbmQgZW1wdHkgaG9zdC4KKiBBZGRlZCBjb21tb24gVVJJIHV0aWxpdHkgbWV0aG9kcyBiYXNlZCBvbiBSRkMgMzk4NiAoc2VlIGRvY3VtZW50YXRpb24gaW4gdGhlIHJlYWRtZSk6CiAgLSBgVXJpOjppc0RlZmF1bHRQb3J0YAogIC0gYFVyaTo6aXNBYnNvbHV0ZWAKICAtIGBVcmk6OmlzTmV0d29ya1BhdGhSZWZlcmVuY2VgCiAgLSBgVXJpOjppc0Fic29sdXRlUGF0aFJlZmVyZW5jZWAKICAtIGBVcmk6OmlzUmVsYXRpdmVQYXRoUmVmZXJlbmNlYAogIC0gYFVyaTo6aXNTYW1lRG9jdW1lbnRSZWZlcmVuY2VgCiAgLSBgVXJpOjpjb21wb3NlQ29tcG9uZW50c2AKICAtIGBVcmlOb3JtYWxpemVyOjpub3JtYWxpemVgCiAgLSBgVXJpTm9ybWFsaXplcjo6aXNFcXVpdmFsZW50YAogIC0gYFVyaVJlc29sdmVyOjpyZWxhdGl2aXplYAoqIERlcHJlY2F0ZWQgYFVyaTo6cmVzb2x2ZWAgaW4gZmF2b3Igb2YgYFVyaVJlc29sdmVyOjpyZXNvbHZlYAoqIERlcHJlY2F0ZWQgYFVyaTo6cmVtb3ZlRG90U2VnbWVudHNgIGluIGZhdm9yIG9mIGBVcmlSZXNvbHZlcjo6cmVtb3ZlRG90U2VnbWVudHNgCgojIyAxLjMuMSAtIDIwMTYtMDYtMjUKCiogRml4IGBVcmk6Ol9fdG9TdHJpbmdgIGZvciBuZXR3b3JrIHBhdGggcmVmZXJlbmNlcywgZS5nLiBgLy9leGFtcGxlLm9yZ2AuCiogRml4IG1pc3NpbmcgbG93ZXJjYXNlIG5vcm1hbGl6YXRpb24gZm9yIGhvc3QuCiogRml4IGhhbmRsaW5nIG9mIFVSSSBjb21wb25lbnRzIGluIGNhc2UgdGhleSBhcmUgYCcwJ2AgaW4gYSBsb3Qgb2YgcGxhY2VzLAogIGUuZy4gYXMgYSB1c2VyIGluZm8gcGFzc3dvcmQuCiogRml4IGBVcmk6OndpdGhBZGRlZEhlYWRlcmAgdG8gY29ycmVjdGx5IG1lcmdlIGhlYWRlcnMgd2l0aCBkaWZmZXJlbnQgY2FzZS4KKiBGaXggdHJpbW1pbmcgb2YgaGVhZGVyIHZhbHVlcyBpbiBgVXJpOjp3aXRoQWRkZWRIZWFkZXJgLiBIZWFkZXIgdmFsdWVzIG1heQogIGJlIHN1cnJvdW5kZWQgYnkgd2hpdGVzcGFjZSB3aGljaCBzaG91bGQgYmUgaWdub3JlZCBhY2NvcmRpbmcgdG8gUkZDIDcyMzAKICBTZWN0aW9uIDMuMi40LiBUaGlzIGRvZXMgbm90IGFwcGx5IHRvIGhlYWRlciBuYW1lcy4KKiBGaXggYFVyaTo6d2l0aEFkZGVkSGVhZGVyYCB3aXRoIGFuIGFycmF5IG9mIGhlYWRlciB2YWx1ZXMuCiogRml4IGBVcmk6OnJlc29sdmVgIHdoZW4gYmFzZSBwYXRoIGhhcyBubyBzbGFzaCBhbmQgaGFuZGxpbmcgb2YgZnJhZ21lbnQuCiogRml4IGhhbmRsaW5nIG9mIGVuY29kaW5nIGluIGBVcmk6OndpdGgob3V0KVF1ZXJ5VmFsdWVgIHNvIG9uZSBjYW4gcGFzcyB0aGUKICBrZXkvdmFsdWUgYm90aCBpbiBlbmNvZGVkIGFzIHdlbGwgYXMgZGVjb2RlZCBmb3JtIHRvIHRob3NlIG1ldGhvZHMuIFRoaXMgaXMKICBjb25zaXN0ZW50IHdpdGggd2l0aFBhdGgsIHdpdGhRdWVyeSBldGMuCiogRml4IGBTZXJ2ZXJSZXF1ZXN0Ojp3aXRob3V0QXR0cmlidXRlYCB3aGVuIGF0dHJpYnV0ZSB2YWx1ZSBpcyBudWxsLgoKIyMgMS4zLjAgLSAyMDE2LTA0LTEzCgoqIEFkZGVkIHJlbWFpbmluZyBpbnRlcmZhY2VzIG5lZWRlZCBmb3IgZnVsbCBQU1I3IGNvbXBhdGliaWxpdHkKICAoU2VydmVyUmVxdWVzdEludGVyZmFjZSwgVXBsb2FkZWRGaWxlSW50ZXJmYWNlLCBldGMuKS4KKiBBZGRlZCBzdXBwb3J0IGZvciBzdHJlYW1fZm9yIGZyb20gc2NhbGFycy4KKiBDYW4gbm93IGV4dGVuZCBVcmkuCiogRml4ZWQgYSBidWcgaW4gdmFsaWRhdGluZyByZXF1ZXN0IG1ldGhvZHMgYnkgbWFraW5nIGl0IG1vcmUgcGVybWlzc2l2ZS4KCiMjIDEuMi4zIC0gMjAxNi0wMi0xOAoKKiBGaXhlZCBzdXBwb3J0IGluIGBHdXp6bGVIdHRwXFBzcjdcQ2FjaGluZ1N0cmVhbWAgZm9yIHNlZWtpbmcgZm9yd2FyZCBvbiByZW1vdGUKICBzdHJlYW1zLCB3aGljaCBjYW4gc29tZXRpbWVzIHJldHVybiBmZXdlciBieXRlcyB0aGFuIHJlcXVlc3RlZCB3aXRoIGBmcmVhZGAuCiogRml4ZWQgaGFuZGxpbmcgb2YgZ3ppcHBlZCByZXNwb25zZXMgd2l0aCBGTkFNRSBoZWFkZXJzLgoKIyMgMS4yLjIgLSAyMDE2LTAxLTIyCgoqIEFkZGVkIHN1cHBvcnQgZm9yIFVSSXMgd2l0aG91dCBhbnkgYXV0aG9yaXR5LgoqIEFkZGVkIHN1cHBvcnQgZm9yIEhUVFAgNDUxICdVbmF2YWlsYWJsZSBGb3IgTGVnYWwgUmVhc29ucy4nCiogQWRkZWQgc3VwcG9ydCBmb3IgdXNpbmcgJzAnIGFzIGEgZmlsZW5hbWUuCiogQWRkZWQgc3VwcG9ydCBmb3IgaW5jbHVkaW5nIG5vbi1zdGFuZGFyZCBwb3J0cyBpbiBIb3N0IGhlYWRlcnMuCgojIyAxLjIuMSAtIDIwMTUtMTEtMDIKCiogTm93IHN1cHBvcnRpbmcgbmVnYXRpdmUgb2Zmc2V0cyB3aGVuIHNlZWtpbmcgdG8gU0VFS19FTkQuCgojIyAxLjIuMCAtIDIwMTUtMDgtMTUKCiogQm9keSBhcyBgIjAiYCBpcyBub3cgcHJvcGVybHkgYWRkZWQgdG8gYSByZXNwb25zZS4KKiBOb3cgYWxsb3dpbmcgZm9yd2FyZCBzZWVraW5nIGluIENhY2hpbmdTdHJlYW0uCiogTm93IHByb3Blcmx5IHBhcnNpbmcgSFRUUCByZXF1ZXN0cyB0aGF0IGNvbnRhaW4gcHJveHkgdGFyZ2V0cyBpbgogIGBwYXJzZV9yZXF1ZXN0YC4KKiBmdW5jdGlvbnMucGhwIGlzIG5vdyBjb25kaXRpb25hbGx5IHJlcXVpcmVkLgoqIHVzZXItaW5mbyBpcyBubyBsb25nZXIgZHJvcHBlZCB3aGVuIHJlc29sdmluZyBVUklzLgoKIyMgMS4xLjAgLSAyMDE1LTA2LTI0CgoqIFVSSXMgY2FuIG5vdyBiZSByZWxhdGl2ZS4KKiBgbXVsdGlwYXJ0L2Zvcm0tZGF0YWAgaGVhZGVycyBhcmUgbm93IG92ZXJyaWRkZW4gY2FzZS1pbnNlbnNpdGl2ZWx5LgoqIFVSSSBwYXRocyBubyBsb25nZXIgZW5jb2RlIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVycyBiZWNhdXNlIHRoZXkgYXJlIGFsbG93ZWQKICBpbiBVUklzOiAiKCIsICIpIiwgIioiLCAiISIsICInIgoqIEEgcG9ydCBpcyBubyBsb25nZXIgYWRkZWQgdG8gYSBVUkkgd2hlbiB0aGUgc2NoZW1lIGlzIG1pc3NpbmcgYW5kIG5vIHBvcnQgaXMKICBwcmVzZW50LgoKIyMgMS4wLjAgLSAyMDE1LTA1LTE5CgpJbml0aWFsIHJlbGVhc2UuCgpDdXJyZW50bHkgdW5zdXBwb3J0ZWQ6CgotIGBQc3JcSHR0cFxNZXNzYWdlXFNlcnZlclJlcXVlc3RJbnRlcmZhY2VgCi0gYFBzclxIdHRwXE1lc3NhZ2VcVXBsb2FkZWRGaWxlSW50ZXJmYWNlYAo=AppDevTools/query/vendor/guzzlehttp/psr7/LICENSEQ29weXJpZ2h0IChjKSAyMDE1IE1pY2hhZWwgRG93bGluZywgaHR0cHM6Ly9naXRodWIuY29tL210ZG93bGluZyA8bXRkb3dsaW5nQGdtYWlsLmNvbT4KClBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwp0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCmNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcwpmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCgpUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgpJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCkFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTgpUSEUgU09GVFdBUkUuCg==AppDevTools/query/vendor/guzzlehttp/psr7/README.mdIyBQU1ItNyBNZXNzYWdlIEltcGxlbWVudGF0aW9uCgpUaGlzIHJlcG9zaXRvcnkgY29udGFpbnMgYSBmdWxsIFtQU1ItN10oaHR0cDovL3d3dy5waHAtZmlnLm9yZy9wc3IvcHNyLTcvKQptZXNzYWdlIGltcGxlbWVudGF0aW9uLCBzZXZlcmFsIHN0cmVhbSBkZWNvcmF0b3JzLCBhbmQgc29tZSBoZWxwZnVsCmZ1bmN0aW9uYWxpdHkgbGlrZSBxdWVyeSBzdHJpbmcgcGFyc2luZy4KCgpbIVtCdWlsZCBTdGF0dXNdKGh0dHBzOi8vdHJhdmlzLWNpLm9yZy9ndXp6bGUvcHNyNy5zdmc/YnJhbmNoPW1hc3RlcildKGh0dHBzOi8vdHJhdmlzLWNpLm9yZy9ndXp6bGUvcHNyNykKCgojIFN0cmVhbSBpbXBsZW1lbnRhdGlvbgoKVGhpcyBwYWNrYWdlIGNvbWVzIHdpdGggYSBudW1iZXIgb2Ygc3RyZWFtIGltcGxlbWVudGF0aW9ucyBhbmQgc3RyZWFtCmRlY29yYXRvcnMuCgoKIyMgQXBwZW5kU3RyZWFtCgpgR3V6emxlSHR0cFxQc3I3XEFwcGVuZFN0cmVhbWAKClJlYWRzIGZyb20gbXVsdGlwbGUgc3RyZWFtcywgb25lIGFmdGVyIHRoZSBvdGhlci4KCmBgYHBocAp1c2UgR3V6emxlSHR0cFxQc3I3OwoKJGEgPSBQc3I3XHN0cmVhbV9mb3IoJ2FiYywgJyk7CiRiID0gUHNyN1xzdHJlYW1fZm9yKCcxMjMuJyk7CiRjb21wb3NlZCA9IG5ldyBQc3I3XEFwcGVuZFN0cmVhbShbJGEsICRiXSk7CgokY29tcG9zZWQtPmFkZFN0cmVhbShQc3I3XHN0cmVhbV9mb3IoJyBBYm92ZSBhbGwgbGlzdGVuIHRvIG1lJykpOwoKZWNobyAkY29tcG9zZWQ7IC8vIGFiYywgMTIzLiBBYm92ZSBhbGwgbGlzdGVuIHRvIG1lLgpgYGAKCgojIyBCdWZmZXJTdHJlYW0KCmBHdXp6bGVIdHRwXFBzcjdcQnVmZmVyU3RyZWFtYAoKUHJvdmlkZXMgYSBidWZmZXIgc3RyZWFtIHRoYXQgY2FuIGJlIHdyaXR0ZW4gdG8gZmlsbCBhIGJ1ZmZlciwgYW5kIHJlYWQKZnJvbSB0byByZW1vdmUgYnl0ZXMgZnJvbSB0aGUgYnVmZmVyLgoKVGhpcyBzdHJlYW0gcmV0dXJucyBhICJod20iIG1ldGFkYXRhIHZhbHVlIHRoYXQgdGVsbHMgdXBzdHJlYW0gY29uc3VtZXJzCndoYXQgdGhlIGNvbmZpZ3VyZWQgaGlnaCB3YXRlciBtYXJrIG9mIHRoZSBzdHJlYW0gaXMsIG9yIHRoZSBtYXhpbXVtCnByZWZlcnJlZCBzaXplIG9mIHRoZSBidWZmZXIuCgpgYGBwaHAKdXNlIEd1enpsZUh0dHBcUHNyNzsKCi8vIFdoZW4gbW9yZSB0aGFuIDEwMjQgYnl0ZXMgYXJlIGluIHRoZSBidWZmZXIsIGl0IHdpbGwgYmVnaW4gcmV0dXJuaW5nCi8vIGZhbHNlIHRvIHdyaXRlcy4gVGhpcyBpcyBhbiBpbmRpY2F0aW9uIHRoYXQgd3JpdGVycyBzaG91bGQgc2xvdyBkb3duLgokYnVmZmVyID0gbmV3IFBzcjdcQnVmZmVyU3RyZWFtKDEwMjQpOwpgYGAKCgojIyBDYWNoaW5nU3RyZWFtCgpUaGUgQ2FjaGluZ1N0cmVhbSBpcyB1c2VkIHRvIGFsbG93IHNlZWtpbmcgb3ZlciBwcmV2aW91c2x5IHJlYWQgYnl0ZXMgb24Kbm9uLXNlZWthYmxlIHN0cmVhbXMuIFRoaXMgY2FuIGJlIHVzZWZ1bCB3aGVuIHRyYW5zZmVycmluZyBhIG5vbi1zZWVrYWJsZQplbnRpdHkgYm9keSBmYWlscyBkdWUgdG8gbmVlZGluZyB0byByZXdpbmQgdGhlIHN0cmVhbSAoZm9yIGV4YW1wbGUsIHJlc3VsdGluZwpmcm9tIGEgcmVkaXJlY3QpLiBEYXRhIHRoYXQgaXMgcmVhZCBmcm9tIHRoZSByZW1vdGUgc3RyZWFtIHdpbGwgYmUgYnVmZmVyZWQgaW4KYSBQSFAgdGVtcCBzdHJlYW0gc28gdGhhdCBwcmV2aW91c2x5IHJlYWQgYnl0ZXMgYXJlIGNhY2hlZCBmaXJzdCBpbiBtZW1vcnksCnRoZW4gb24gZGlzay4KCmBgYHBocAp1c2UgR3V6emxlSHR0cFxQc3I3OwoKJG9yaWdpbmFsID0gUHNyN1xzdHJlYW1fZm9yKGZvcGVuKCdodHRwOi8vd3d3Lmdvb2dsZS5jb20nLCAncicpKTsKJHN0cmVhbSA9IG5ldyBQc3I3XENhY2hpbmdTdHJlYW0oJG9yaWdpbmFsKTsKCiRzdHJlYW0tPnJlYWQoMTAyNCk7CmVjaG8gJHN0cmVhbS0+dGVsbCgpOwovLyAxMDI0Cgokc3RyZWFtLT5zZWVrKDApOwplY2hvICRzdHJlYW0tPnRlbGwoKTsKLy8gMApgYGAKCgojIyBEcm9wcGluZ1N0cmVhbQoKYEd1enpsZUh0dHBcUHNyN1xEcm9wcGluZ1N0cmVhbWAKClN0cmVhbSBkZWNvcmF0b3IgdGhhdCBiZWdpbnMgZHJvcHBpbmcgZGF0YSBvbmNlIHRoZSBzaXplIG9mIHRoZSB1bmRlcmx5aW5nCnN0cmVhbSBiZWNvbWVzIHRvbyBmdWxsLgoKYGBgcGhwCnVzZSBHdXp6bGVIdHRwXFBzcjc7CgovLyBDcmVhdGUgYW4gZW1wdHkgc3RyZWFtCiRzdHJlYW0gPSBQc3I3XHN0cmVhbV9mb3IoKTsKCi8vIFN0YXJ0IGRyb3BwaW5nIGRhdGEgd2hlbiB0aGUgc3RyZWFtIGhhcyBtb3JlIHRoYW4gMTAgYnl0ZXMKJGRyb3BwaW5nID0gbmV3IFBzcjdcRHJvcHBpbmdTdHJlYW0oJHN0cmVhbSwgMTApOwoKJGRyb3BwaW5nLT53cml0ZSgnMDEyMzQ1Njc4OTAxMjM0NTY3ODknKTsKZWNobyAkc3RyZWFtOyAvLyAwMTIzNDU2Nzg5CmBgYAoKCiMjIEZuU3RyZWFtCgpgR3V6emxlSHR0cFxQc3I3XEZuU3RyZWFtYAoKQ29tcG9zZSBzdHJlYW0gaW1wbGVtZW50YXRpb25zIGJhc2VkIG9uIGEgaGFzaCBvZiBmdW5jdGlvbnMuCgpBbGxvd3MgZm9yIGVhc3kgdGVzdGluZyBhbmQgZXh0ZW5zaW9uIG9mIGEgcHJvdmlkZWQgc3RyZWFtIHdpdGhvdXQgbmVlZGluZwp0byBjcmVhdGUgYSBjb25jcmV0ZSBjbGFzcyBmb3IgYSBzaW1wbGUgZXh0ZW5zaW9uIHBvaW50LgoKYGBgcGhwCgp1c2UgR3V6emxlSHR0cFxQc3I3OwoKJHN0cmVhbSA9IFBzcjdcc3RyZWFtX2ZvcignaGknKTsKJGZuU3RyZWFtID0gUHNyN1xGblN0cmVhbTo6ZGVjb3JhdGUoJHN0cmVhbSwgWwogICAgJ3Jld2luZCcgPT4gZnVuY3Rpb24gKCkgdXNlICgkc3RyZWFtKSB7CiAgICAgICAgZWNobyAnQWJvdXQgdG8gcmV3aW5kIC0gJzsKICAgICAgICAkc3RyZWFtLT5yZXdpbmQoKTsKICAgICAgICBlY2hvICdyZXdvdW5kISc7CiAgICB9Cl0pOwoKJGZuU3RyZWFtLT5yZXdpbmQoKTsKLy8gT3V0cHV0czogQWJvdXQgdG8gcmV3aW5kIC0gcmV3b3VuZCEKYGBgCgoKIyMgSW5mbGF0ZVN0cmVhbQoKYEd1enpsZUh0dHBcUHNyN1xJbmZsYXRlU3RyZWFtYAoKVXNlcyBQSFAncyB6bGliLmluZmxhdGUgZmlsdGVyIHRvIGluZmxhdGUgZGVmbGF0ZSBvciBnemlwcGVkIGNvbnRlbnQuCgpUaGlzIHN0cmVhbSBkZWNvcmF0b3Igc2tpcHMgdGhlIGZpcnN0IDEwIGJ5dGVzIG9mIHRoZSBnaXZlbiBzdHJlYW0gdG8gcmVtb3ZlCnRoZSBnemlwIGhlYWRlciwgY29udmVydHMgdGhlIHByb3ZpZGVkIHN0cmVhbSB0byBhIFBIUCBzdHJlYW0gcmVzb3VyY2UsCnRoZW4gYXBwZW5kcyB0aGUgemxpYi5pbmZsYXRlIGZpbHRlci4gVGhlIHN0cmVhbSBpcyB0aGVuIGNvbnZlcnRlZCBiYWNrCnRvIGEgR3V6emxlIHN0cmVhbSByZXNvdXJjZSB0byBiZSB1c2VkIGFzIGEgR3V6emxlIHN0cmVhbS4KCgojIyBMYXp5T3BlblN0cmVhbQoKYEd1enpsZUh0dHBcUHNyN1xMYXp5T3BlblN0cmVhbWAKCkxhemlseSByZWFkcyBvciB3cml0ZXMgdG8gYSBmaWxlIHRoYXQgaXMgb3BlbmVkIG9ubHkgYWZ0ZXIgYW4gSU8gb3BlcmF0aW9uCnRha2UgcGxhY2Ugb24gdGhlIHN0cmVhbS4KCmBgYHBocAp1c2UgR3V6emxlSHR0cFxQc3I3OwoKJHN0cmVhbSA9IG5ldyBQc3I3XExhenlPcGVuU3RyZWFtKCcvcGF0aC90by9maWxlJywgJ3InKTsKLy8gVGhlIGZpbGUgaGFzIG5vdCB5ZXQgYmVlbiBvcGVuZWQuLi4KCmVjaG8gJHN0cmVhbS0+cmVhZCgxMCk7Ci8vIFRoZSBmaWxlIGlzIG9wZW5lZCBhbmQgcmVhZCBmcm9tIG9ubHkgd2hlbiBuZWVkZWQuCmBgYAoKCiMjIExpbWl0U3RyZWFtCgpgR3V6emxlSHR0cFxQc3I3XExpbWl0U3RyZWFtYAoKTGltaXRTdHJlYW0gY2FuIGJlIHVzZWQgdG8gcmVhZCBhIHN1YnNldCBvciBzbGljZSBvZiBhbiBleGlzdGluZyBzdHJlYW0gb2JqZWN0LgpUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGJyZWFraW5nIGEgbGFyZ2UgZmlsZSBpbnRvIHNtYWxsZXIgcGllY2VzIHRvIGJlIHNlbnQgaW4KY2h1bmtzIChlLmcuIEFtYXpvbiBTMydzIG11bHRpcGFydCB1cGxvYWQgQVBJKS4KCmBgYHBocAp1c2UgR3V6emxlSHR0cFxQc3I3OwoKJG9yaWdpbmFsID0gUHNyN1xzdHJlYW1fZm9yKGZvcGVuKCcvdG1wL3Rlc3QudHh0JywgJ3IrJykpOwplY2hvICRvcmlnaW5hbC0+Z2V0U2l6ZSgpOwovLyA+Pj4gMTA0ODU3NgoKLy8gTGltaXQgdGhlIHNpemUgb2YgdGhlIGJvZHkgdG8gMTAyNCBieXRlcyBhbmQgc3RhcnQgcmVhZGluZyBmcm9tIGJ5dGUgMjA0OAokc3RyZWFtID0gbmV3IFBzcjdcTGltaXRTdHJlYW0oJG9yaWdpbmFsLCAxMDI0LCAyMDQ4KTsKZWNobyAkc3RyZWFtLT5nZXRTaXplKCk7Ci8vID4+PiAxMDI0CmVjaG8gJHN0cmVhbS0+dGVsbCgpOwovLyA+Pj4gMApgYGAKCgojIyBNdWx0aXBhcnRTdHJlYW0KCmBHdXp6bGVIdHRwXFBzcjdcTXVsdGlwYXJ0U3RyZWFtYAoKU3RyZWFtIHRoYXQgd2hlbiByZWFkIHJldHVybnMgYnl0ZXMgZm9yIGEgc3RyZWFtaW5nIG11bHRpcGFydCBvcgptdWx0aXBhcnQvZm9ybS1kYXRhIHN0cmVhbS4KCgojIyBOb1NlZWtTdHJlYW0KCmBHdXp6bGVIdHRwXFBzcjdcTm9TZWVrU3RyZWFtYAoKTm9TZWVrU3RyZWFtIHdyYXBzIGEgc3RyZWFtIGFuZCBkb2VzIG5vdCBhbGxvdyBzZWVraW5nLgoKYGBgcGhwCnVzZSBHdXp6bGVIdHRwXFBzcjc7Cgokb3JpZ2luYWwgPSBQc3I3XHN0cmVhbV9mb3IoJ2ZvbycpOwokbm9TZWVrID0gbmV3IFBzcjdcTm9TZWVrU3RyZWFtKCRvcmlnaW5hbCk7CgplY2hvICRub1NlZWstPnJlYWQoMyk7Ci8vIGZvbwp2YXJfZXhwb3J0KCRub1NlZWstPmlzU2Vla2FibGUoKSk7Ci8vIGZhbHNlCiRub1NlZWstPnNlZWsoMCk7CnZhcl9leHBvcnQoJG5vU2Vlay0+cmVhZCgzKSk7Ci8vIE5VTEwKYGBgCgoKIyMgUHVtcFN0cmVhbQoKYEd1enpsZUh0dHBcUHNyN1xQdW1wU3RyZWFtYAoKUHJvdmlkZXMgYSByZWFkIG9ubHkgc3RyZWFtIHRoYXQgcHVtcHMgZGF0YSBmcm9tIGEgUEhQIGNhbGxhYmxlLgoKV2hlbiBpbnZva2luZyB0aGUgcHJvdmlkZWQgY2FsbGFibGUsIHRoZSBQdW1wU3RyZWFtIHdpbGwgcGFzcyB0aGUgYW1vdW50IG9mCmRhdGEgcmVxdWVzdGVkIHRvIHJlYWQgdG8gdGhlIGNhbGxhYmxlLiBUaGUgY2FsbGFibGUgY2FuIGNob29zZSB0byBpZ25vcmUKdGhpcyB2YWx1ZSBhbmQgcmV0dXJuIGZld2VyIG9yIG1vcmUgYnl0ZXMgdGhhbiByZXF1ZXN0ZWQuIEFueSBleHRyYSBkYXRhCnJldHVybmVkIGJ5IHRoZSBwcm92aWRlZCBjYWxsYWJsZSBpcyBidWZmZXJlZCBpbnRlcm5hbGx5IHVudGlsIGRyYWluZWQgdXNpbmcKdGhlIHJlYWQoKSBmdW5jdGlvbiBvZiB0aGUgUHVtcFN0cmVhbS4gVGhlIHByb3ZpZGVkIGNhbGxhYmxlIE1VU1QgcmV0dXJuCmZhbHNlIHdoZW4gdGhlcmUgaXMgbm8gbW9yZSBkYXRhIHRvIHJlYWQuCgoKIyMgSW1wbGVtZW50aW5nIHN0cmVhbSBkZWNvcmF0b3JzCgpDcmVhdGluZyBhIHN0cmVhbSBkZWNvcmF0b3IgaXMgdmVyeSBlYXN5IHRoYW5rcyB0byB0aGUKYEd1enpsZUh0dHBcUHNyN1xTdHJlYW1EZWNvcmF0b3JUcmFpdGAuIFRoaXMgdHJhaXQgcHJvdmlkZXMgbWV0aG9kcyB0aGF0CmltcGxlbWVudCBgUHNyXEh0dHBcTWVzc2FnZVxTdHJlYW1JbnRlcmZhY2VgIGJ5IHByb3h5aW5nIHRvIGFuIHVuZGVybHlpbmcKc3RyZWFtLiBKdXN0IGB1c2VgIHRoZSBgU3RyZWFtRGVjb3JhdG9yVHJhaXRgIGFuZCBpbXBsZW1lbnQgeW91ciBjdXN0b20KbWV0aG9kcy4KCkZvciBleGFtcGxlLCBsZXQncyBzYXkgd2Ugd2FudGVkIHRvIGNhbGwgYSBzcGVjaWZpYyBmdW5jdGlvbiBlYWNoIHRpbWUgdGhlIGxhc3QKYnl0ZSBpcyByZWFkIGZyb20gYSBzdHJlYW0uIFRoaXMgY291bGQgYmUgaW1wbGVtZW50ZWQgYnkgb3ZlcnJpZGluZyB0aGUKYHJlYWQoKWAgbWV0aG9kLgoKYGBgcGhwCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKdXNlIEd1enpsZUh0dHBcUHNyN1xTdHJlYW1EZWNvcmF0b3JUcmFpdDsKCmNsYXNzIEVvZkNhbGxiYWNrU3RyZWFtIGltcGxlbWVudHMgU3RyZWFtSW50ZXJmYWNlCnsKICAgIHVzZSBTdHJlYW1EZWNvcmF0b3JUcmFpdDsKCiAgICBwcml2YXRlICRjYWxsYmFjazsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoU3RyZWFtSW50ZXJmYWNlICRzdHJlYW0sIGNhbGxhYmxlICRjYikKICAgIHsKICAgICAgICAkdGhpcy0+c3RyZWFtID0gJHN0cmVhbTsKICAgICAgICAkdGhpcy0+Y2FsbGJhY2sgPSAkY2I7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHJlYWQoJGxlbmd0aCkKICAgIHsKICAgICAgICAkcmVzdWx0ID0gJHRoaXMtPnN0cmVhbS0+cmVhZCgkbGVuZ3RoKTsKCiAgICAgICAgLy8gSW52b2tlIHRoZSBjYWxsYmFjayB3aGVuIEVPRiBpcyBoaXQuCiAgICAgICAgaWYgKCR0aGlzLT5lb2YoKSkgewogICAgICAgICAgICBjYWxsX3VzZXJfZnVuYygkdGhpcy0+Y2FsbGJhY2spOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9Cn0KYGBgCgpUaGlzIGRlY29yYXRvciBjb3VsZCBiZSBhZGRlZCB0byBhbnkgZXhpc3Rpbmcgc3RyZWFtIGFuZCB1c2VkIGxpa2Ugc286CgpgYGBwaHAKdXNlIEd1enpsZUh0dHBcUHNyNzsKCiRvcmlnaW5hbCA9IFBzcjdcc3RyZWFtX2ZvcignZm9vJyk7CgokZW9mU3RyZWFtID0gbmV3IEVvZkNhbGxiYWNrU3RyZWFtKCRvcmlnaW5hbCwgZnVuY3Rpb24gKCkgewogICAgZWNobyAnRU9GISc7Cn0pOwoKJGVvZlN0cmVhbS0+cmVhZCgyKTsKJGVvZlN0cmVhbS0+cmVhZCgxKTsKLy8gZWNob2VzICJFT0YhIgokZW9mU3RyZWFtLT5zZWVrKDApOwokZW9mU3RyZWFtLT5yZWFkKDMpOwovLyBlY2hvZXMgIkVPRiEiCmBgYAoKCiMjIFBIUCBTdHJlYW1XcmFwcGVyCgpZb3UgY2FuIHVzZSB0aGUgYEd1enpsZUh0dHBcUHNyN1xTdHJlYW1XcmFwcGVyYCBjbGFzcyBpZiB5b3UgbmVlZCB0byB1c2UgYQpQU1ItNyBzdHJlYW0gYXMgYSBQSFAgc3RyZWFtIHJlc291cmNlLgoKVXNlIHRoZSBgR3V6emxlSHR0cFxQc3I3XFN0cmVhbVdyYXBwZXI6OmdldFJlc291cmNlKClgIG1ldGhvZCB0byBjcmVhdGUgYSBQSFAKc3RyZWFtIGZyb20gYSBQU1ItNyBzdHJlYW0uCgpgYGBwaHAKdXNlIEd1enpsZUh0dHBcUHNyN1xTdHJlYW1XcmFwcGVyOwoKJHN0cmVhbSA9IEd1enpsZUh0dHBcUHNyN1xzdHJlYW1fZm9yKCdoZWxsbyEnKTsKJHJlc291cmNlID0gU3RyZWFtV3JhcHBlcjo6Z2V0UmVzb3VyY2UoJHN0cmVhbSk7CmVjaG8gZnJlYWQoJHJlc291cmNlLCA2KTsgLy8gb3V0cHV0cyBoZWxsbyEKYGBgCgoKIyBGdW5jdGlvbiBBUEkKClRoZXJlIGFyZSB2YXJpb3VzIGZ1bmN0aW9ucyBhdmFpbGFibGUgdW5kZXIgdGhlIGBHdXp6bGVIdHRwXFBzcjdgIG5hbWVzcGFjZS4KCgojIyBgZnVuY3Rpb24gc3RyYAoKYGZ1bmN0aW9uIHN0cihNZXNzYWdlSW50ZXJmYWNlICRtZXNzYWdlKWAKClJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBIVFRQIG1lc3NhZ2UuCgpgYGBwaHAKJHJlcXVlc3QgPSBuZXcgR3V6emxlSHR0cFxQc3I3XFJlcXVlc3QoJ0dFVCcsICdodHRwOi8vZXhhbXBsZS5jb20nKTsKZWNobyBHdXp6bGVIdHRwXFBzcjdcc3RyKCRyZXF1ZXN0KTsKYGBgCgoKIyMgYGZ1bmN0aW9uIHVyaV9mb3JgCgpgZnVuY3Rpb24gdXJpX2ZvcigkdXJpKWAKClRoaXMgZnVuY3Rpb24gYWNjZXB0cyBhIHN0cmluZyBvciBgUHNyXEh0dHBcTWVzc2FnZVxVcmlJbnRlcmZhY2VgIGFuZCByZXR1cm5zIGEKVXJpSW50ZXJmYWNlIGZvciB0aGUgZ2l2ZW4gdmFsdWUuIElmIHRoZSB2YWx1ZSBpcyBhbHJlYWR5IGEgYFVyaUludGVyZmFjZWAsIGl0CmlzIHJldHVybmVkIGFzLWlzLgoKYGBgcGhwCiR1cmkgPSBHdXp6bGVIdHRwXFBzcjdcdXJpX2ZvcignaHR0cDovL2V4YW1wbGUuY29tJyk7CmFzc2VydCgkdXJpID09PSBHdXp6bGVIdHRwXFBzcjdcdXJpX2ZvcigkdXJpKSk7CmBgYAoKCiMjIGBmdW5jdGlvbiBzdHJlYW1fZm9yYAoKYGZ1bmN0aW9uIHN0cmVhbV9mb3IoJHJlc291cmNlID0gJycsIGFycmF5ICRvcHRpb25zID0gW10pYAoKQ3JlYXRlIGEgbmV3IHN0cmVhbSBiYXNlZCBvbiB0aGUgaW5wdXQgdHlwZS4KCk9wdGlvbnMgaXMgYW4gYXNzb2NpYXRpdmUgYXJyYXkgdGhhdCBjYW4gY29udGFpbiB0aGUgZm9sbG93aW5nIGtleXM6CgoqIC0gbWV0YWRhdGE6IEFycmF5IG9mIGN1c3RvbSBtZXRhZGF0YS4KKiAtIHNpemU6IFNpemUgb2YgdGhlIHN0cmVhbS4KClRoaXMgbWV0aG9kIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBgJHJlc291cmNlYCB0eXBlczoKCi0gYFBzclxIdHRwXE1lc3NhZ2VcU3RyZWFtSW50ZXJmYWNlYDogUmV0dXJucyB0aGUgdmFsdWUgYXMtaXMuCi0gYHN0cmluZ2A6IENyZWF0ZXMgYSBzdHJlYW0gb2JqZWN0IHRoYXQgdXNlcyB0aGUgZ2l2ZW4gc3RyaW5nIGFzIHRoZSBjb250ZW50cy4KLSBgcmVzb3VyY2VgOiBDcmVhdGVzIGEgc3RyZWFtIG9iamVjdCB0aGF0IHdyYXBzIHRoZSBnaXZlbiBQSFAgc3RyZWFtIHJlc291cmNlLgotIGBJdGVyYXRvcmA6IElmIHRoZSBwcm92aWRlZCB2YWx1ZSBpbXBsZW1lbnRzIGBJdGVyYXRvcmAsIHRoZW4gYSByZWFkLW9ubHkKICBzdHJlYW0gb2JqZWN0IHdpbGwgYmUgY3JlYXRlZCB0aGF0IHdyYXBzIHRoZSBnaXZlbiBpdGVyYWJsZS4gRWFjaCB0aW1lIHRoZQogIHN0cmVhbSBpcyByZWFkIGZyb20sIGRhdGEgZnJvbSB0aGUgaXRlcmF0b3Igd2lsbCBmaWxsIGEgYnVmZmVyIGFuZCB3aWxsIGJlCiAgY29udGludW91c2x5IGNhbGxlZCB1bnRpbCB0aGUgYnVmZmVyIGlzIGVxdWFsIHRvIHRoZSByZXF1ZXN0ZWQgcmVhZCBzaXplLgogIFN1YnNlcXVlbnQgcmVhZCBjYWxscyB3aWxsIGZpcnN0IHJlYWQgZnJvbSB0aGUgYnVmZmVyIGFuZCB0aGVuIGNhbGwgYG5leHRgCiAgb24gdGhlIHVuZGVybHlpbmcgaXRlcmF0b3IgdW50aWwgaXQgaXMgZXhoYXVzdGVkLgotIGBvYmplY3RgIHdpdGggYF9fdG9TdHJpbmcoKWA6IElmIHRoZSBvYmplY3QgaGFzIHRoZSBgX190b1N0cmluZygpYCBtZXRob2QsCiAgdGhlIG9iamVjdCB3aWxsIGJlIGNhc3QgdG8gYSBzdHJpbmcgYW5kIHRoZW4gYSBzdHJlYW0gd2lsbCBiZSByZXR1cm5lZCB0aGF0CiAgdXNlcyB0aGUgc3RyaW5nIHZhbHVlLgotIGBOVUxMYDogV2hlbiBgbnVsbGAgaXMgcGFzc2VkLCBhbiBlbXB0eSBzdHJlYW0gb2JqZWN0IGlzIHJldHVybmVkLgotIGBjYWxsYWJsZWAgV2hlbiBhIGNhbGxhYmxlIGlzIHBhc3NlZCwgYSByZWFkLW9ubHkgc3RyZWFtIG9iamVjdCB3aWxsIGJlCiAgY3JlYXRlZCB0aGF0IGludm9rZXMgdGhlIGdpdmVuIGNhbGxhYmxlLiBUaGUgY2FsbGFibGUgaXMgaW52b2tlZCB3aXRoIHRoZQogIG51bWJlciBvZiBzdWdnZXN0ZWQgYnl0ZXMgdG8gcmVhZC4gVGhlIGNhbGxhYmxlIGNhbiByZXR1cm4gYW55IG51bWJlciBvZgogIGJ5dGVzLCBidXQgTVVTVCByZXR1cm4gYGZhbHNlYCB3aGVuIHRoZXJlIGlzIG5vIG1vcmUgZGF0YSB0byByZXR1cm4uIFRoZQogIHN0cmVhbSBvYmplY3QgdGhhdCB3cmFwcyB0aGUgY2FsbGFibGUgd2lsbCBpbnZva2UgdGhlIGNhbGxhYmxlIHVudGlsIHRoZQogIG51bWJlciBvZiByZXF1ZXN0ZWQgYnl0ZXMgYXJlIGF2YWlsYWJsZS4gQW55IGFkZGl0aW9uYWwgYnl0ZXMgd2lsbCBiZQogIGJ1ZmZlcmVkIGFuZCB1c2VkIGluIHN1YnNlcXVlbnQgcmVhZHMuCgpgYGBwaHAKJHN0cmVhbSA9IEd1enpsZUh0dHBcUHNyN1xzdHJlYW1fZm9yKCdmb28nKTsKJHN0cmVhbSA9IEd1enpsZUh0dHBcUHNyN1xzdHJlYW1fZm9yKGZvcGVuKCcvcGF0aC90by9maWxlJywgJ3InKSk7CgokZ2VuZXJhdG9yIGZ1bmN0aW9uICgkYnl0ZXMpIHsKICAgIGZvciAoJGkgPSAwOyAkaSA8ICRieXRlczsgJGkrKykgewogICAgICAgIHlpZWxkICcgJzsKICAgIH0KfQoKJHN0cmVhbSA9IEd1enpsZUh0dHBcUHNyN1xzdHJlYW1fZm9yKCRnZW5lcmF0b3IoMTAwKSk7CmBgYAoKCiMjIGBmdW5jdGlvbiBwYXJzZV9oZWFkZXJgCgpgZnVuY3Rpb24gcGFyc2VfaGVhZGVyKCRoZWFkZXIpYAoKUGFyc2UgYW4gYXJyYXkgb2YgaGVhZGVyIHZhbHVlcyBjb250YWluaW5nICI7IiBzZXBhcmF0ZWQgZGF0YSBpbnRvIGFuIGFycmF5IG9mCmFzc29jaWF0aXZlIGFycmF5cyByZXByZXNlbnRpbmcgdGhlIGhlYWRlciBrZXkgdmFsdWUgcGFpciBkYXRhIG9mIHRoZSBoZWFkZXIuCldoZW4gYSBwYXJhbWV0ZXIgZG9lcyBub3QgY29udGFpbiBhIHZhbHVlLCBidXQganVzdCBjb250YWlucyBhIGtleSwgdGhpcwpmdW5jdGlvbiB3aWxsIGluamVjdCBhIGtleSB3aXRoIGEgJycgc3RyaW5nIHZhbHVlLgoKCiMjIGBmdW5jdGlvbiBub3JtYWxpemVfaGVhZGVyYAoKYGZ1bmN0aW9uIG5vcm1hbGl6ZV9oZWFkZXIoJGhlYWRlcilgCgpDb252ZXJ0cyBhbiBhcnJheSBvZiBoZWFkZXIgdmFsdWVzIHRoYXQgbWF5IGNvbnRhaW4gY29tbWEgc2VwYXJhdGVkIGhlYWRlcnMKaW50byBhbiBhcnJheSBvZiBoZWFkZXJzIHdpdGggbm8gY29tbWEgc2VwYXJhdGVkIHZhbHVlcy4KCgojIyBgZnVuY3Rpb24gbW9kaWZ5X3JlcXVlc3RgCgpgZnVuY3Rpb24gbW9kaWZ5X3JlcXVlc3QoUmVxdWVzdEludGVyZmFjZSAkcmVxdWVzdCwgYXJyYXkgJGNoYW5nZXMpYAoKQ2xvbmUgYW5kIG1vZGlmeSBhIHJlcXVlc3Qgd2l0aCB0aGUgZ2l2ZW4gY2hhbmdlcy4gVGhpcyBtZXRob2QgaXMgdXNlZnVsIGZvcgpyZWR1Y2luZyB0aGUgbnVtYmVyIG9mIGNsb25lcyBuZWVkZWQgdG8gbXV0YXRlIGEgbWVzc2FnZS4KClRoZSBjaGFuZ2VzIGNhbiBiZSBvbmUgb2Y6CgotIG1ldGhvZDogKHN0cmluZykgQ2hhbmdlcyB0aGUgSFRUUCBtZXRob2QuCi0gc2V0X2hlYWRlcnM6IChhcnJheSkgU2V0cyB0aGUgZ2l2ZW4gaGVhZGVycy4KLSByZW1vdmVfaGVhZGVyczogKGFycmF5KSBSZW1vdmUgdGhlIGdpdmVuIGhlYWRlcnMuCi0gYm9keTogKG1peGVkKSBTZXRzIHRoZSBnaXZlbiBib2R5LgotIHVyaTogKFVyaUludGVyZmFjZSkgU2V0IHRoZSBVUkkuCi0gcXVlcnk6IChzdHJpbmcpIFNldCB0aGUgcXVlcnkgc3RyaW5nIHZhbHVlIG9mIHRoZSBVUkkuCi0gdmVyc2lvbjogKHN0cmluZykgU2V0IHRoZSBwcm90b2NvbCB2ZXJzaW9uLgoKCiMjIGBmdW5jdGlvbiByZXdpbmRfYm9keWAKCmBmdW5jdGlvbiByZXdpbmRfYm9keShNZXNzYWdlSW50ZXJmYWNlICRtZXNzYWdlKWAKCkF0dGVtcHRzIHRvIHJld2luZCBhIG1lc3NhZ2UgYm9keSBhbmQgdGhyb3dzIGFuIGV4Y2VwdGlvbiBvbiBmYWlsdXJlLiBUaGUgYm9keQpvZiB0aGUgbWVzc2FnZSB3aWxsIG9ubHkgYmUgcmV3b3VuZCBpZiBhIGNhbGwgdG8gYHRlbGwoKWAgcmV0dXJucyBhIHZhbHVlIG90aGVyCnRoYW4gYDBgLgoKCiMjIGBmdW5jdGlvbiB0cnlfZm9wZW5gCgpgZnVuY3Rpb24gdHJ5X2ZvcGVuKCRmaWxlbmFtZSwgJG1vZGUpYAoKU2FmZWx5IG9wZW5zIGEgUEhQIHN0cmVhbSByZXNvdXJjZSB1c2luZyBhIGZpbGVuYW1lLgoKV2hlbiBmb3BlbiBmYWlscywgUEhQIG5vcm1hbGx5IHJhaXNlcyBhIHdhcm5pbmcuIFRoaXMgZnVuY3Rpb24gYWRkcyBhbiBlcnJvcgpoYW5kbGVyIHRoYXQgY2hlY2tzIGZvciBlcnJvcnMgYW5kIHRocm93cyBhbiBleGNlcHRpb24gaW5zdGVhZC4KCgojIyBgZnVuY3Rpb24gY29weV90b19zdHJpbmdgCgpgZnVuY3Rpb24gY29weV90b19zdHJpbmcoU3RyZWFtSW50ZXJmYWNlICRzdHJlYW0sICRtYXhMZW4gPSAtMSlgCgpDb3B5IHRoZSBjb250ZW50cyBvZiBhIHN0cmVhbSBpbnRvIGEgc3RyaW5nIHVudGlsIHRoZSBnaXZlbiBudW1iZXIgb2YgYnl0ZXMKaGF2ZSBiZWVuIHJlYWQuCgoKIyMgYGZ1bmN0aW9uIGNvcHlfdG9fc3RyZWFtYAoKYGZ1bmN0aW9uIGNvcHlfdG9fc3RyZWFtKFN0cmVhbUludGVyZmFjZSAkc291cmNlLCBTdHJlYW1JbnRlcmZhY2UgJGRlc3QsICRtYXhMZW4gPSAtMSlgCgpDb3B5IHRoZSBjb250ZW50cyBvZiBhIHN0cmVhbSBpbnRvIGFub3RoZXIgc3RyZWFtIHVudGlsIHRoZSBnaXZlbiBudW1iZXIgb2YKYnl0ZXMgaGF2ZSBiZWVuIHJlYWQuCgoKIyMgYGZ1bmN0aW9uIGhhc2hgCgpgZnVuY3Rpb24gaGFzaChTdHJlYW1JbnRlcmZhY2UgJHN0cmVhbSwgJGFsZ28sICRyYXdPdXRwdXQgPSBmYWxzZSlgCgpDYWxjdWxhdGUgYSBoYXNoIG9mIGEgU3RyZWFtLiBUaGlzIG1ldGhvZCByZWFkcyB0aGUgZW50aXJlIHN0cmVhbSB0byBjYWxjdWxhdGUKYSByb2xsaW5nIGhhc2ggKGJhc2VkIG9uIFBIUCdzIGhhc2hfaW5pdCBmdW5jdGlvbnMpLgoKCiMjIGBmdW5jdGlvbiByZWFkbGluZWAKCmBmdW5jdGlvbiByZWFkbGluZShTdHJlYW1JbnRlcmZhY2UgJHN0cmVhbSwgJG1heExlbmd0aCA9IG51bGwpYAoKUmVhZCBhIGxpbmUgZnJvbSB0aGUgc3RyZWFtIHVwIHRvIHRoZSBtYXhpbXVtIGFsbG93ZWQgYnVmZmVyIGxlbmd0aC4KCgojIyBgZnVuY3Rpb24gcGFyc2VfcmVxdWVzdGAKCmBmdW5jdGlvbiBwYXJzZV9yZXF1ZXN0KCRtZXNzYWdlKWAKClBhcnNlcyBhIHJlcXVlc3QgbWVzc2FnZSBzdHJpbmcgaW50byBhIHJlcXVlc3Qgb2JqZWN0LgoKCiMjIGBmdW5jdGlvbiBwYXJzZV9yZXNwb25zZWAKCmBmdW5jdGlvbiBwYXJzZV9yZXNwb25zZSgkbWVzc2FnZSlgCgpQYXJzZXMgYSByZXNwb25zZSBtZXNzYWdlIHN0cmluZyBpbnRvIGEgcmVzcG9uc2Ugb2JqZWN0LgoKCiMjIGBmdW5jdGlvbiBwYXJzZV9xdWVyeWAKCmBmdW5jdGlvbiBwYXJzZV9xdWVyeSgkc3RyLCAkdXJsRW5jb2RpbmcgPSB0cnVlKWAKClBhcnNlIGEgcXVlcnkgc3RyaW5nIGludG8gYW4gYXNzb2NpYXRpdmUgYXJyYXkuCgpJZiBtdWx0aXBsZSB2YWx1ZXMgYXJlIGZvdW5kIGZvciB0aGUgc2FtZSBrZXksIHRoZSB2YWx1ZSBvZiB0aGF0IGtleSB2YWx1ZSBwYWlyCndpbGwgYmVjb21lIGFuIGFycmF5LiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHBhcnNlIG5lc3RlZCBQSFAgc3R5bGUgYXJyYXlzIGludG8KYW4gYXNzb2NpYXRpdmUgYXJyYXkgKGUuZy4sIGBmb29bYV09MSZmb29bYl09MmAgd2lsbCBiZSBwYXJzZWQgaW50bwpgWydmb29bYV0nID0+ICcxJywgJ2Zvb1tiXScgPT4gJzInXWApLgoKCiMjIGBmdW5jdGlvbiBidWlsZF9xdWVyeWAKCmBmdW5jdGlvbiBidWlsZF9xdWVyeShhcnJheSAkcGFyYW1zLCAkZW5jb2RpbmcgPSBQSFBfUVVFUllfUkZDMzk4NilgCgpCdWlsZCBhIHF1ZXJ5IHN0cmluZyBmcm9tIGFuIGFycmF5IG9mIGtleSB2YWx1ZSBwYWlycy4KClRoaXMgZnVuY3Rpb24gY2FuIHVzZSB0aGUgcmV0dXJuIHZhbHVlIG9mIHBhcnNlX3F1ZXJ5KCkgdG8gYnVpbGQgYSBxdWVyeSBzdHJpbmcuClRoaXMgZnVuY3Rpb24gZG9lcyBub3QgbW9kaWZ5IHRoZSBwcm92aWRlZCBrZXlzIHdoZW4gYW4gYXJyYXkgaXMgZW5jb3VudGVyZWQKKGxpa2UgaHR0cF9idWlsZF9xdWVyeSB3b3VsZCkuCgoKIyMgYGZ1bmN0aW9uIG1pbWV0eXBlX2Zyb21fZmlsZW5hbWVgCgpgZnVuY3Rpb24gbWltZXR5cGVfZnJvbV9maWxlbmFtZSgkZmlsZW5hbWUpYAoKRGV0ZXJtaW5lcyB0aGUgbWltZXR5cGUgb2YgYSBmaWxlIGJ5IGxvb2tpbmcgYXQgaXRzIGV4dGVuc2lvbi4KCgojIyBgZnVuY3Rpb24gbWltZXR5cGVfZnJvbV9leHRlbnNpb25gCgpgZnVuY3Rpb24gbWltZXR5cGVfZnJvbV9leHRlbnNpb24oJGV4dGVuc2lvbilgCgpNYXBzIGEgZmlsZSBleHRlbnNpb25zIHRvIGEgbWltZXR5cGUuCgoKIyBBZGRpdGlvbmFsIFVSSSBNZXRob2RzCgpBc2lkZSBmcm9tIHRoZSBzdGFuZGFyZCBgUHNyXEh0dHBcTWVzc2FnZVxVcmlJbnRlcmZhY2VgIGltcGxlbWVudGF0aW9uIGluIGZvcm0gb2YgdGhlIGBHdXp6bGVIdHRwXFBzcjdcVXJpYCBjbGFzcywKdGhpcyBsaWJyYXJ5IGFsc28gcHJvdmlkZXMgYWRkaXRpb25hbCBmdW5jdGlvbmFsaXR5IHdoZW4gd29ya2luZyB3aXRoIFVSSXMgYXMgc3RhdGljIG1ldGhvZHMuCgojIyBVUkkgVHlwZXMKCkFuIGluc3RhbmNlIG9mIGBQc3JcSHR0cFxNZXNzYWdlXFVyaUludGVyZmFjZWAgY2FuIGVpdGhlciBiZSBhbiBhYnNvbHV0ZSBVUkkgb3IgYSByZWxhdGl2ZSByZWZlcmVuY2UuCkFuIGFic29sdXRlIFVSSSBoYXMgYSBzY2hlbWUuIEEgcmVsYXRpdmUgcmVmZXJlbmNlIGlzIHVzZWQgdG8gZXhwcmVzcyBhIFVSSSByZWxhdGl2ZSB0byBhbm90aGVyIFVSSSwKdGhlIGJhc2UgVVJJLiBSZWxhdGl2ZSByZWZlcmVuY2VzIGNhbiBiZSBkaXZpZGVkIGludG8gc2V2ZXJhbCBmb3JtcyBhY2NvcmRpbmcgdG8KW1JGQyAzOTg2IFNlY3Rpb24gNC4yXShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTQuMik6CgotIG5ldHdvcmstcGF0aCByZWZlcmVuY2VzLCBlLmcuIGAvL2V4YW1wbGUuY29tL3BhdGhgCi0gYWJzb2x1dGUtcGF0aCByZWZlcmVuY2VzLCBlLmcuIGAvcGF0aGAKLSByZWxhdGl2ZS1wYXRoIHJlZmVyZW5jZXMsIGUuZy4gYHN1YnBhdGhgCgpUaGUgZm9sbG93aW5nIG1ldGhvZHMgY2FuIGJlIHVzZWQgdG8gaWRlbnRpZnkgdGhlIHR5cGUgb2YgdGhlIFVSSS4KCiMjIyBgR3V6emxlSHR0cFxQc3I3XFVyaTo6aXNBYnNvbHV0ZWAKCmBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzQWJzb2x1dGUoVXJpSW50ZXJmYWNlICR1cmkpOiBib29sYAoKV2hldGhlciB0aGUgVVJJIGlzIGFic29sdXRlLCBpLmUuIGl0IGhhcyBhIHNjaGVtZS4KCiMjIyBgR3V6emxlSHR0cFxQc3I3XFVyaTo6aXNOZXR3b3JrUGF0aFJlZmVyZW5jZWAKCmBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzTmV0d29ya1BhdGhSZWZlcmVuY2UoVXJpSW50ZXJmYWNlICR1cmkpOiBib29sYAoKV2hldGhlciB0aGUgVVJJIGlzIGEgbmV0d29yay1wYXRoIHJlZmVyZW5jZS4gQSByZWxhdGl2ZSByZWZlcmVuY2UgdGhhdCBiZWdpbnMgd2l0aCB0d28gc2xhc2ggY2hhcmFjdGVycyBpcwp0ZXJtZWQgYW4gbmV0d29yay1wYXRoIHJlZmVyZW5jZS4KCiMjIyBgR3V6emxlSHR0cFxQc3I3XFVyaTo6aXNBYnNvbHV0ZVBhdGhSZWZlcmVuY2VgCgpgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc0Fic29sdXRlUGF0aFJlZmVyZW5jZShVcmlJbnRlcmZhY2UgJHVyaSk6IGJvb2xgCgpXaGV0aGVyIHRoZSBVUkkgaXMgYSBhYnNvbHV0ZS1wYXRoIHJlZmVyZW5jZS4gQSByZWxhdGl2ZSByZWZlcmVuY2UgdGhhdCBiZWdpbnMgd2l0aCBhIHNpbmdsZSBzbGFzaCBjaGFyYWN0ZXIgaXMKdGVybWVkIGFuIGFic29sdXRlLXBhdGggcmVmZXJlbmNlLgoKIyMjIGBHdXp6bGVIdHRwXFBzcjdcVXJpOjppc1JlbGF0aXZlUGF0aFJlZmVyZW5jZWAKCmBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzUmVsYXRpdmVQYXRoUmVmZXJlbmNlKFVyaUludGVyZmFjZSAkdXJpKTogYm9vbGAKCldoZXRoZXIgdGhlIFVSSSBpcyBhIHJlbGF0aXZlLXBhdGggcmVmZXJlbmNlLiBBIHJlbGF0aXZlIHJlZmVyZW5jZSB0aGF0IGRvZXMgbm90IGJlZ2luIHdpdGggYSBzbGFzaCBjaGFyYWN0ZXIgaXMKdGVybWVkIGEgcmVsYXRpdmUtcGF0aCByZWZlcmVuY2UuCgojIyMgYEd1enpsZUh0dHBcUHNyN1xVcmk6OmlzU2FtZURvY3VtZW50UmVmZXJlbmNlYAoKYHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNTYW1lRG9jdW1lbnRSZWZlcmVuY2UoVXJpSW50ZXJmYWNlICR1cmksIFVyaUludGVyZmFjZSAkYmFzZSA9IG51bGwpOiBib29sYAoKV2hldGhlciB0aGUgVVJJIGlzIGEgc2FtZS1kb2N1bWVudCByZWZlcmVuY2UuIEEgc2FtZS1kb2N1bWVudCByZWZlcmVuY2UgcmVmZXJzIHRvIGEgVVJJIHRoYXQgaXMsIGFzaWRlIGZyb20gaXRzCmZyYWdtZW50IGNvbXBvbmVudCwgaWRlbnRpY2FsIHRvIHRoZSBiYXNlIFVSSS4gV2hlbiBubyBiYXNlIFVSSSBpcyBnaXZlbiwgb25seSBhbiBlbXB0eSBVUkkgcmVmZXJlbmNlCihhcGFydCBmcm9tIGl0cyBmcmFnbWVudCkgaXMgY29uc2lkZXJlZCBhIHNhbWUtZG9jdW1lbnQgcmVmZXJlbmNlLgoKIyMgVVJJIENvbXBvbmVudHMKCkFkZGl0aW9uYWwgbWV0aG9kcyB0byB3b3JrIHdpdGggVVJJIGNvbXBvbmVudHMuCgojIyMgYEd1enpsZUh0dHBcUHNyN1xVcmk6OmlzRGVmYXVsdFBvcnRgCgpgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc0RlZmF1bHRQb3J0KFVyaUludGVyZmFjZSAkdXJpKTogYm9vbGAKCldoZXRoZXIgdGhlIFVSSSBoYXMgdGhlIGRlZmF1bHQgcG9ydCBvZiB0aGUgY3VycmVudCBzY2hlbWUuIGBQc3JcSHR0cFxNZXNzYWdlXFVyaUludGVyZmFjZTo6Z2V0UG9ydGAgbWF5IHJldHVybiBudWxsCm9yIHRoZSBzdGFuZGFyZCBwb3J0LiBUaGlzIG1ldGhvZCBjYW4gYmUgdXNlZCBpbmRlcGVuZGVudGx5IG9mIHRoZSBpbXBsZW1lbnRhdGlvbi4KCiMjIyBgR3V6emxlSHR0cFxQc3I3XFVyaTo6Y29tcG9zZUNvbXBvbmVudHNgCgpgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjb21wb3NlQ29tcG9uZW50cygkc2NoZW1lLCAkYXV0aG9yaXR5LCAkcGF0aCwgJHF1ZXJ5LCAkZnJhZ21lbnQpOiBzdHJpbmdgCgpDb21wb3NlcyBhIFVSSSByZWZlcmVuY2Ugc3RyaW5nIGZyb20gaXRzIHZhcmlvdXMgY29tcG9uZW50cyBhY2NvcmRpbmcgdG8KW1JGQyAzOTg2IFNlY3Rpb24gNS4zXShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTUuMykuIFVzdWFsbHkgdGhpcyBtZXRob2QgZG9lcyBub3QgbmVlZCB0byBiZSBjYWxsZWQKbWFudWFsbHkgYnV0IGluc3RlYWQgaXMgdXNlZCBpbmRpcmVjdGx5IHZpYSBgUHNyXEh0dHBcTWVzc2FnZVxVcmlJbnRlcmZhY2U6Ol9fdG9TdHJpbmdgLgoKIyMjIGBHdXp6bGVIdHRwXFBzcjdcVXJpOjpmcm9tUGFydHNgCgpgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcm9tUGFydHMoYXJyYXkgJHBhcnRzKTogVXJpSW50ZXJmYWNlYAoKQ3JlYXRlcyBhIFVSSSBmcm9tIGEgaGFzaCBvZiBbYHBhcnNlX3VybGBdKGh0dHA6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wYXJzZS11cmwucGhwKSBjb21wb25lbnRzLgoKCiMjIyBgR3V6emxlSHR0cFxQc3I3XFVyaTo6d2l0aFF1ZXJ5VmFsdWVgCgpgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB3aXRoUXVlcnlWYWx1ZShVcmlJbnRlcmZhY2UgJHVyaSwgJGtleSwgJHZhbHVlKTogVXJpSW50ZXJmYWNlYAoKQ3JlYXRlcyBhIG5ldyBVUkkgd2l0aCBhIHNwZWNpZmljIHF1ZXJ5IHN0cmluZyB2YWx1ZS4gQW55IGV4aXN0aW5nIHF1ZXJ5IHN0cmluZyB2YWx1ZXMgdGhhdCBleGFjdGx5IG1hdGNoIHRoZQpwcm92aWRlZCBrZXkgYXJlIHJlbW92ZWQgYW5kIHJlcGxhY2VkIHdpdGggdGhlIGdpdmVuIGtleSB2YWx1ZSBwYWlyLiBBIHZhbHVlIG9mIG51bGwgd2lsbCBzZXQgdGhlIHF1ZXJ5IHN0cmluZwprZXkgd2l0aG91dCBhIHZhbHVlLCBlLmcuICJrZXkiIGluc3RlYWQgb2YgImtleT12YWx1ZSIuCgoKIyMjIGBHdXp6bGVIdHRwXFBzcjdcVXJpOjp3aXRob3V0UXVlcnlWYWx1ZWAKCmBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHdpdGhvdXRRdWVyeVZhbHVlKFVyaUludGVyZmFjZSAkdXJpLCAka2V5KTogVXJpSW50ZXJmYWNlYAoKQ3JlYXRlcyBhIG5ldyBVUkkgd2l0aCBhIHNwZWNpZmljIHF1ZXJ5IHN0cmluZyB2YWx1ZSByZW1vdmVkLiBBbnkgZXhpc3RpbmcgcXVlcnkgc3RyaW5nIHZhbHVlcyB0aGF0IGV4YWN0bHkgbWF0Y2ggdGhlCnByb3ZpZGVkIGtleSBhcmUgcmVtb3ZlZC4KCiMjIFJlZmVyZW5jZSBSZXNvbHV0aW9uCgpgR3V6emxlSHR0cFxQc3I3XFVyaVJlc29sdmVyYCBwcm92aWRlcyBtZXRob2RzIHRvIHJlc29sdmUgYSBVUkkgcmVmZXJlbmNlIGluIHRoZSBjb250ZXh0IG9mIGEgYmFzZSBVUkkgYWNjb3JkaW5nCnRvIFtSRkMgMzk4NiBTZWN0aW9uIDVdKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tNSkuIFRoaXMgaXMgZm9yIGV4YW1wbGUgYWxzbyB3aGF0IHdlYiBicm93c2VycwpkbyB3aGVuIHJlc29sdmluZyBhIGxpbmsgaW4gYSB3ZWJzaXRlIGJhc2VkIG9uIHRoZSBjdXJyZW50IHJlcXVlc3QgVVJJLgoKIyMjIGBHdXp6bGVIdHRwXFBzcjdcVXJpUmVzb2x2ZXI6OnJlc29sdmVgCgpgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZXNvbHZlKFVyaUludGVyZmFjZSAkYmFzZSwgVXJpSW50ZXJmYWNlICRyZWwpOiBVcmlJbnRlcmZhY2VgCgpDb252ZXJ0cyB0aGUgcmVsYXRpdmUgVVJJIGludG8gYSBuZXcgVVJJIHRoYXQgaXMgcmVzb2x2ZWQgYWdhaW5zdCB0aGUgYmFzZSBVUkkuCgojIyMgYEd1enpsZUh0dHBcUHNyN1xVcmlSZXNvbHZlcjo6cmVtb3ZlRG90U2VnbWVudHNgCgpgcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZW1vdmVEb3RTZWdtZW50cyhzdHJpbmcgJHBhdGgpOiBzdHJpbmdgCgpSZW1vdmVzIGRvdCBzZWdtZW50cyBmcm9tIGEgcGF0aCBhbmQgcmV0dXJucyB0aGUgbmV3IHBhdGggYWNjb3JkaW5nIHRvCltSRkMgMzk4NiBTZWN0aW9uIDUuMi40XShodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTUuMi40KS4KCiMjIyBgR3V6emxlSHR0cFxQc3I3XFVyaVJlc29sdmVyOjpyZWxhdGl2aXplYAoKYHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmVsYXRpdml6ZShVcmlJbnRlcmZhY2UgJGJhc2UsIFVyaUludGVyZmFjZSAkdGFyZ2V0KTogVXJpSW50ZXJmYWNlYAoKUmV0dXJucyB0aGUgdGFyZ2V0IFVSSSBhcyBhIHJlbGF0aXZlIHJlZmVyZW5jZSBmcm9tIHRoZSBiYXNlIFVSSS4gVGhpcyBtZXRob2QgaXMgdGhlIGNvdW50ZXJwYXJ0IHRvIHJlc29sdmUoKToKCmBgYHBocAooc3RyaW5nKSAkdGFyZ2V0ID09PSAoc3RyaW5nKSBVcmlSZXNvbHZlcjo6cmVzb2x2ZSgkYmFzZSwgVXJpUmVzb2x2ZXI6OnJlbGF0aXZpemUoJGJhc2UsICR0YXJnZXQpKQpgYGAKCk9uZSB1c2UtY2FzZSBpcyB0byB1c2UgdGhlIGN1cnJlbnQgcmVxdWVzdCBVUkkgYXMgYmFzZSBVUkkgYW5kIHRoZW4gZ2VuZXJhdGUgcmVsYXRpdmUgbGlua3MgaW4geW91ciBkb2N1bWVudHMKdG8gcmVkdWNlIHRoZSBkb2N1bWVudCBzaXplIG9yIG9mZmVyIHNlbGYtY29udGFpbmVkIGRvd25sb2FkYWJsZSBkb2N1bWVudCBhcmNoaXZlcy4KCmBgYHBocAokYmFzZSA9IG5ldyBVcmkoJ2h0dHA6Ly9leGFtcGxlLmNvbS9hL2IvJyk7CmVjaG8gVXJpUmVzb2x2ZXI6OnJlbGF0aXZpemUoJGJhc2UsIG5ldyBVcmkoJ2h0dHA6Ly9leGFtcGxlLmNvbS9hL2IvYycpKTsgIC8vIHByaW50cyAnYycuCmVjaG8gVXJpUmVzb2x2ZXI6OnJlbGF0aXZpemUoJGJhc2UsIG5ldyBVcmkoJ2h0dHA6Ly9leGFtcGxlLmNvbS9hL3gveScpKTsgIC8vIHByaW50cyAnLi4veC95Jy4KZWNobyBVcmlSZXNvbHZlcjo6cmVsYXRpdml6ZSgkYmFzZSwgbmV3IFVyaSgnaHR0cDovL2V4YW1wbGUuY29tL2EvYi8/cScpKTsgLy8gcHJpbnRzICc/cScuCmVjaG8gVXJpUmVzb2x2ZXI6OnJlbGF0aXZpemUoJGJhc2UsIG5ldyBVcmkoJ2h0dHA6Ly9leGFtcGxlLm9yZy9hL2IvJykpOyAgIC8vIHByaW50cyAnLy9leGFtcGxlLm9yZy9hL2IvJy4KYGBgCgojIyBOb3JtYWxpemF0aW9uIGFuZCBDb21wYXJpc29uCgpgR3V6emxlSHR0cFxQc3I3XFVyaU5vcm1hbGl6ZXJgIHByb3ZpZGVzIG1ldGhvZHMgdG8gbm9ybWFsaXplIGFuZCBjb21wYXJlIFVSSXMgYWNjb3JkaW5nIHRvCltSRkMgMzk4NiBTZWN0aW9uIDZdKGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tNikuCgojIyMgYEd1enpsZUh0dHBcUHNyN1xVcmlOb3JtYWxpemVyOjpub3JtYWxpemVgCgpgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBub3JtYWxpemUoVXJpSW50ZXJmYWNlICR1cmksICRmbGFncyA9IHNlbGY6OlBSRVNFUlZJTkdfTk9STUFMSVpBVElPTlMpOiBVcmlJbnRlcmZhY2VgCgpSZXR1cm5zIGEgbm9ybWFsaXplZCBVUkkuIFRoZSBzY2hlbWUgYW5kIGhvc3QgY29tcG9uZW50IGFyZSBhbHJlYWR5IG5vcm1hbGl6ZWQgdG8gbG93ZXJjYXNlIHBlciBQU1ItNyBVcmlJbnRlcmZhY2UuClRoaXMgbWV0aG9kcyBhZGRzIGFkZGl0aW9uYWwgbm9ybWFsaXphdGlvbnMgdGhhdCBjYW4gYmUgY29uZmlndXJlZCB3aXRoIHRoZSBgJGZsYWdzYCBwYXJhbWV0ZXIgd2hpY2ggaXMgYSBiaXRtYXNrCm9mIG5vcm1hbGl6YXRpb25zIHRvIGFwcGx5LiBUaGUgZm9sbG93aW5nIG5vcm1hbGl6YXRpb25zIGFyZSBhdmFpbGFibGU6CgotIGBVcmlOb3JtYWxpemVyOjpQUkVTRVJWSU5HX05PUk1BTElaQVRJT05TYAoKICAgIERlZmF1bHQgbm9ybWFsaXphdGlvbnMgd2hpY2ggb25seSBpbmNsdWRlIHRoZSBvbmVzIHRoYXQgcHJlc2VydmUgc2VtYW50aWNzLgoKLSBgVXJpTm9ybWFsaXplcjo6Q0FQSVRBTElaRV9QRVJDRU5UX0VOQ09ESU5HYAoKICAgIEFsbCBsZXR0ZXJzIHdpdGhpbiBhIHBlcmNlbnQtZW5jb2RpbmcgdHJpcGxldCAoZS5nLiwgIiUzQSIpIGFyZSBjYXNlLWluc2Vuc2l0aXZlLCBhbmQgc2hvdWxkIGJlIGNhcGl0YWxpemVkLgoKICAgIEV4YW1wbGU6IGBodHRwOi8vZXhhbXBsZS5vcmcvYSVjMiViMWJgIOKGkiBgaHR0cDovL2V4YW1wbGUub3JnL2ElQzIlQjFiYAoKLSBgVXJpTm9ybWFsaXplcjo6REVDT0RFX1VOUkVTRVJWRURfQ0hBUkFDVEVSU2AKCiAgICBEZWNvZGVzIHBlcmNlbnQtZW5jb2RlZCBvY3RldHMgb2YgdW5yZXNlcnZlZCBjaGFyYWN0ZXJzLiBGb3IgY29uc2lzdGVuY3ksIHBlcmNlbnQtZW5jb2RlZCBvY3RldHMgaW4gdGhlIHJhbmdlcyBvZgogICAgQUxQSEEgKCU0MeKAkyU1QSBhbmQgJTYx4oCTJTdBKSwgRElHSVQgKCUzMOKAkyUzOSksIGh5cGhlbiAoJTJEKSwgcGVyaW9kICglMkUpLCB1bmRlcnNjb3JlICglNUYpLCBvciB0aWxkZSAoJTdFKSBzaG91bGQKICAgIG5vdCBiZSBjcmVhdGVkIGJ5IFVSSSBwcm9kdWNlcnMgYW5kLCB3aGVuIGZvdW5kIGluIGEgVVJJLCBzaG91bGQgYmUgZGVjb2RlZCB0byB0aGVpciBjb3JyZXNwb25kaW5nIHVucmVzZXJ2ZWQKICAgIGNoYXJhY3RlcnMgYnkgVVJJIG5vcm1hbGl6ZXJzLgoKICAgIEV4YW1wbGU6IGBodHRwOi8vZXhhbXBsZS5vcmcvJTdFdXNlcm4lNjFtZS9gIOKGkiBgaHR0cDovL2V4YW1wbGUub3JnL351c2VybmFtZS9gCgotIGBVcmlOb3JtYWxpemVyOjpDT05WRVJUX0VNUFRZX1BBVEhgCgogICAgQ29udmVydHMgdGhlIGVtcHR5IHBhdGggdG8gIi8iIGZvciBodHRwIGFuZCBodHRwcyBVUklzLgoKICAgIEV4YW1wbGU6IGBodHRwOi8vZXhhbXBsZS5vcmdgIOKGkiBgaHR0cDovL2V4YW1wbGUub3JnL2AKCi0gYFVyaU5vcm1hbGl6ZXI6OlJFTU9WRV9ERUZBVUxUX0hPU1RgCgogICAgUmVtb3ZlcyB0aGUgZGVmYXVsdCBob3N0IG9mIHRoZSBnaXZlbiBVUkkgc2NoZW1lIGZyb20gdGhlIFVSSS4gT25seSB0aGUgImZpbGUiIHNjaGVtZSBkZWZpbmVzIHRoZSBkZWZhdWx0IGhvc3QKICAgICJsb2NhbGhvc3QiLiBBbGwgb2YgYGZpbGU6L215ZmlsZWAsIGBmaWxlOi8vL215ZmlsZWAsIGFuZCBgZmlsZTovL2xvY2FsaG9zdC9teWZpbGVgIGFyZSBlcXVpdmFsZW50IGFjY29yZGluZyB0bwogICAgUkZDIDM5ODYuCgogICAgRXhhbXBsZTogYGZpbGU6Ly9sb2NhbGhvc3QvbXlmaWxlYCDihpIgYGZpbGU6Ly8vbXlmaWxlYAoKLSBgVXJpTm9ybWFsaXplcjo6UkVNT1ZFX0RFRkFVTFRfUE9SVGAKCiAgICBSZW1vdmVzIHRoZSBkZWZhdWx0IHBvcnQgb2YgdGhlIGdpdmVuIFVSSSBzY2hlbWUgZnJvbSB0aGUgVVJJLgoKICAgIEV4YW1wbGU6IGBodHRwOi8vZXhhbXBsZS5vcmc6ODAvYCDihpIgYGh0dHA6Ly9leGFtcGxlLm9yZy9gCgotIGBVcmlOb3JtYWxpemVyOjpSRU1PVkVfRE9UX1NFR01FTlRTYAoKICAgIFJlbW92ZXMgdW5uZWNlc3NhcnkgZG90LXNlZ21lbnRzLiBEb3Qtc2VnbWVudHMgaW4gcmVsYXRpdmUtcGF0aCByZWZlcmVuY2VzIGFyZSBub3QgcmVtb3ZlZCBhcyBpdCB3b3VsZAogICAgY2hhbmdlIHRoZSBzZW1hbnRpY3Mgb2YgdGhlIFVSSSByZWZlcmVuY2UuCgogICAgRXhhbXBsZTogYGh0dHA6Ly9leGFtcGxlLm9yZy8uLi9hL2IvLi4vYy8uL2QuaHRtbGAg4oaSIGBodHRwOi8vZXhhbXBsZS5vcmcvYS9jL2QuaHRtbGAKCi0gYFVyaU5vcm1hbGl6ZXI6OlJFTU9WRV9EVVBMSUNBVEVfU0xBU0hFU2AKCiAgICBQYXRocyB3aGljaCBpbmNsdWRlIHR3byBvciBtb3JlIGFkamFjZW50IHNsYXNoZXMgYXJlIGNvbnZlcnRlZCB0byBvbmUuIFdlYnNlcnZlcnMgdXN1YWxseSBpZ25vcmUgZHVwbGljYXRlIHNsYXNoZXMKICAgIGFuZCB0cmVhdCB0aG9zZSBVUklzIGVxdWl2YWxlbnQuIEJ1dCBpbiB0aGVvcnkgdGhvc2UgVVJJcyBkbyBub3QgbmVlZCB0byBiZSBlcXVpdmFsZW50LiBTbyB0aGlzIG5vcm1hbGl6YXRpb24KICAgIG1heSBjaGFuZ2UgdGhlIHNlbWFudGljcy4gRW5jb2RlZCBzbGFzaGVzICglMkYpIGFyZSBub3QgcmVtb3ZlZC4KCiAgICBFeGFtcGxlOiBgaHR0cDovL2V4YW1wbGUub3JnLy9mb28vLy9iYXIuaHRtbGAg4oaSIGBodHRwOi8vZXhhbXBsZS5vcmcvZm9vL2Jhci5odG1sYAoKLSBgVXJpTm9ybWFsaXplcjo6U09SVF9RVUVSWV9QQVJBTUVURVJTYAoKICAgIFNvcnQgcXVlcnkgcGFyYW1ldGVycyB3aXRoIHRoZWlyIHZhbHVlcyBpbiBhbHBoYWJldGljYWwgb3JkZXIuIEhvd2V2ZXIsIHRoZSBvcmRlciBvZiBwYXJhbWV0ZXJzIGluIGEgVVJJIG1heSBiZQogICAgc2lnbmlmaWNhbnQgKHRoaXMgaXMgbm90IGRlZmluZWQgYnkgdGhlIHN0YW5kYXJkKS4gU28gdGhpcyBub3JtYWxpemF0aW9uIGlzIG5vdCBzYWZlIGFuZCBtYXkgY2hhbmdlIHRoZSBzZW1hbnRpY3MKICAgIG9mIHRoZSBVUkkuCgogICAgRXhhbXBsZTogYD9sYW5nPWVuJmFydGljbGU9ZnJlZGAg4oaSIGA/YXJ0aWNsZT1mcmVkJmxhbmc9ZW5gCgojIyMgYEd1enpsZUh0dHBcUHNyN1xVcmlOb3JtYWxpemVyOjppc0VxdWl2YWxlbnRgCgpgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc0VxdWl2YWxlbnQoVXJpSW50ZXJmYWNlICR1cmkxLCBVcmlJbnRlcmZhY2UgJHVyaTIsICRub3JtYWxpemF0aW9ucyA9IHNlbGY6OlBSRVNFUlZJTkdfTk9STUFMSVpBVElPTlMpOiBib29sYAoKV2hldGhlciB0d28gVVJJcyBjYW4gYmUgY29uc2lkZXJlZCBlcXVpdmFsZW50LiBCb3RoIFVSSXMgYXJlIG5vcm1hbGl6ZWQgYXV0b21hdGljYWxseSBiZWZvcmUgY29tcGFyaXNvbiB3aXRoIHRoZSBnaXZlbgpgJG5vcm1hbGl6YXRpb25zYCBiaXRtYXNrLiBUaGUgbWV0aG9kIGFsc28gYWNjZXB0cyByZWxhdGl2ZSBVUkkgcmVmZXJlbmNlcyBhbmQgcmV0dXJucyB0cnVlIHdoZW4gdGhleSBhcmUgZXF1aXZhbGVudC4KVGhpcyBvZiBjb3Vyc2UgYXNzdW1lcyB0aGV5IHdpbGwgYmUgcmVzb2x2ZWQgYWdhaW5zdCB0aGUgc2FtZSBiYXNlIFVSSS4gSWYgdGhpcyBpcyBub3QgdGhlIGNhc2UsIGRldGVybWluYXRpb24gb2YKZXF1aXZhbGVuY2Ugb3IgZGlmZmVyZW5jZSBvZiByZWxhdGl2ZSByZWZlcmVuY2VzIGRvZXMgbm90IG1lYW4gYW55dGhpbmcuCg==AppDevTools/query/vendor/guzzlehttp/psr7/composer.jsonewogICAgIm5hbWUiOiAiZ3V6emxlaHR0cC9wc3I3IiwKICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgImRlc2NyaXB0aW9uIjogIlBTUi03IG1lc3NhZ2UgaW1wbGVtZW50YXRpb24gdGhhdCBhbHNvIHByb3ZpZGVzIGNvbW1vbiB1dGlsaXR5IG1ldGhvZHMiLAogICAgImtleXdvcmRzIjogWyJyZXF1ZXN0IiwgInJlc3BvbnNlIiwgIm1lc3NhZ2UiLCAic3RyZWFtIiwgImh0dHAiLCAidXJpIiwgInVybCJdLAogICAgImxpY2Vuc2UiOiAiTUlUIiwKICAgICJhdXRob3JzIjogWwogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiTWljaGFlbCBEb3dsaW5nIiwKICAgICAgICAgICAgImVtYWlsIjogIm10ZG93bGluZ0BnbWFpbC5jb20iLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL210ZG93bGluZyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiVG9iaWFzIFNjaHVsdHplIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9Ub2Jpb24iCiAgICAgICAgfQogICAgXSwKICAgICJyZXF1aXJlIjogewogICAgICAgICJwaHAiOiAiPj01LjQuMCIsCiAgICAgICAgInBzci9odHRwLW1lc3NhZ2UiOiAifjEuMCIKICAgIH0sCiAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJ+NC4wIgogICAgfSwKICAgICJwcm92aWRlIjogewogICAgICAgICJwc3IvaHR0cC1tZXNzYWdlLWltcGxlbWVudGF0aW9uIjogIjEuMCIKICAgIH0sCiAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgInBzci00IjogewogICAgICAgICAgICAiR3V6emxlSHR0cFxcUHNyN1xcIjogInNyYy8iCiAgICAgICAgfSwKICAgICAgICAiZmlsZXMiOiBbInNyYy9mdW5jdGlvbnNfaW5jbHVkZS5waHAiXQogICAgfSwKICAgICJleHRyYSI6IHsKICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAiZGV2LW1hc3RlciI6ICIxLjQtZGV2IgogICAgICAgIH0KICAgIH0KfQo=AppDevTools/query/vendor/guzzlehttp/psr7/src/AppendStream.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBSZWFkcyBmcm9tIG11bHRpcGxlIHN0cmVhbXMsIG9uZSBhZnRlciB0aGUgb3RoZXIuCiAqCiAqIFRoaXMgaXMgYSByZWFkLW9ubHkgc3RyZWFtIGRlY29yYXRvci4KICovCmNsYXNzIEFwcGVuZFN0cmVhbSBpbXBsZW1lbnRzIFN0cmVhbUludGVyZmFjZQp7CiAgICAvKiogQHZhciBTdHJlYW1JbnRlcmZhY2VbXSBTdHJlYW1zIGJlaW5nIGRlY29yYXRlZCAqLwogICAgcHJpdmF0ZSAkc3RyZWFtcyA9IFtdOwoKICAgIHByaXZhdGUgJHNlZWthYmxlID0gdHJ1ZTsKICAgIHByaXZhdGUgJGN1cnJlbnQgPSAwOwogICAgcHJpdmF0ZSAkcG9zID0gMDsKICAgIHByaXZhdGUgJGRldGFjaGVkID0gZmFsc2U7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gU3RyZWFtSW50ZXJmYWNlW10gJHN0cmVhbXMgU3RyZWFtcyB0byBkZWNvcmF0ZS4gRWFjaCBzdHJlYW0gbXVzdAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIHJlYWRhYmxlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoYXJyYXkgJHN0cmVhbXMgPSBbXSkKICAgIHsKICAgICAgICBmb3JlYWNoICgkc3RyZWFtcyBhcyAkc3RyZWFtKSB7CiAgICAgICAgICAgICR0aGlzLT5hZGRTdHJlYW0oJHN0cmVhbSk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkKICAgIHsKICAgICAgICB0cnkgewogICAgICAgICAgICAkdGhpcy0+cmV3aW5kKCk7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+Z2V0Q29udGVudHMoKTsKICAgICAgICB9IGNhdGNoIChcRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBBZGQgYSBzdHJlYW0gdG8gdGhlIEFwcGVuZFN0cmVhbQogICAgICoKICAgICAqIEBwYXJhbSBTdHJlYW1JbnRlcmZhY2UgJHN0cmVhbSBTdHJlYW0gdG8gYXBwZW5kLiBNdXN0IGJlIHJlYWRhYmxlLgogICAgICoKICAgICAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBpZiB0aGUgc3RyZWFtIGlzIG5vdCByZWFkYWJsZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkU3RyZWFtKFN0cmVhbUludGVyZmFjZSAkc3RyZWFtKQogICAgewogICAgICAgIGlmICghJHN0cmVhbS0+aXNSZWFkYWJsZSgpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdFYWNoIHN0cmVhbSBtdXN0IGJlIHJlYWRhYmxlJyk7CiAgICAgICAgfQoKICAgICAgICAvLyBUaGUgc3RyZWFtIGlzIG9ubHkgc2Vla2FibGUgaWYgYWxsIHN0cmVhbXMgYXJlIHNlZWthYmxlCiAgICAgICAgaWYgKCEkc3RyZWFtLT5pc1NlZWthYmxlKCkpIHsKICAgICAgICAgICAgJHRoaXMtPnNlZWthYmxlID0gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+c3RyZWFtc1tdID0gJHN0cmVhbTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29udGVudHMoKQogICAgewogICAgICAgIHJldHVybiBjb3B5X3RvX3N0cmluZygkdGhpcyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDbG9zZXMgZWFjaCBhdHRhY2hlZCBzdHJlYW0uCiAgICAgKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xvc2UoKQogICAgewogICAgICAgICR0aGlzLT5wb3MgPSAkdGhpcy0+Y3VycmVudCA9IDA7CgogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5zdHJlYW1zIGFzICRzdHJlYW0pIHsKICAgICAgICAgICAgJHN0cmVhbS0+Y2xvc2UoKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5zdHJlYW1zID0gW107CiAgICB9CgogICAgLyoqCiAgICAgKiBEZXRhY2hlcyBlYWNoIGF0dGFjaGVkIHN0cmVhbQogICAgICoKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRldGFjaCgpCiAgICB7CiAgICAgICAgJHRoaXMtPmNsb3NlKCk7CiAgICAgICAgJHRoaXMtPmRldGFjaGVkID0gdHJ1ZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVsbCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5wb3M7CiAgICB9CgogICAgLyoqCiAgICAgKiBUcmllcyB0byBjYWxjdWxhdGUgdGhlIHNpemUgYnkgYWRkaW5nIHRoZSBzaXplIG9mIGVhY2ggc3RyZWFtLgogICAgICoKICAgICAqIElmIGFueSBvZiB0aGUgc3RyZWFtcyBkbyBub3QgcmV0dXJuIGEgdmFsaWQgbnVtYmVyLCB0aGVuIHRoZSBzaXplIG9mIHRoZQogICAgICogYXBwZW5kIHN0cmVhbSBjYW5ub3QgYmUgZGV0ZXJtaW5lZCBhbmQgbnVsbCBpcyByZXR1cm5lZC4KICAgICAqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTaXplKCkKICAgIHsKICAgICAgICAkc2l6ZSA9IDA7CgogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5zdHJlYW1zIGFzICRzdHJlYW0pIHsKICAgICAgICAgICAgJHMgPSAkc3RyZWFtLT5nZXRTaXplKCk7CiAgICAgICAgICAgIGlmICgkcyA9PT0gbnVsbCkgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHNpemUgKz0gJHM7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHNpemU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGVvZigpCiAgICB7CiAgICAgICAgcmV0dXJuICEkdGhpcy0+c3RyZWFtcyB8fAogICAgICAgICAgICAoJHRoaXMtPmN1cnJlbnQgPj0gY291bnQoJHRoaXMtPnN0cmVhbXMpIC0gMSAmJgogICAgICAgICAgICAgJHRoaXMtPnN0cmVhbXNbJHRoaXMtPmN1cnJlbnRdLT5lb2YoKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHJld2luZCgpCiAgICB7CiAgICAgICAgJHRoaXMtPnNlZWsoMCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBBdHRlbXB0cyB0byBzZWVrIHRvIHRoZSBnaXZlbiBwb3NpdGlvbi4gT25seSBzdXBwb3J0cyBTRUVLX1NFVC4KICAgICAqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZWVrKCRvZmZzZXQsICR3aGVuY2UgPSBTRUVLX1NFVCkKICAgIHsKICAgICAgICBpZiAoISR0aGlzLT5zZWVrYWJsZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ1RoaXMgQXBwZW5kU3RyZWFtIGlzIG5vdCBzZWVrYWJsZScpOwogICAgICAgIH0gZWxzZWlmICgkd2hlbmNlICE9PSBTRUVLX1NFVCkgewogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ1RoZSBBcHBlbmRTdHJlYW0gY2FuIG9ubHkgc2VlayB3aXRoIFNFRUtfU0VUJyk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+cG9zID0gJHRoaXMtPmN1cnJlbnQgPSAwOwoKICAgICAgICAvLyBSZXdpbmQgZWFjaCBzdHJlYW0KICAgICAgICBmb3JlYWNoICgkdGhpcy0+c3RyZWFtcyBhcyAkaSA9PiAkc3RyZWFtKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAkc3RyZWFtLT5yZXdpbmQoKTsKICAgICAgICAgICAgfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdVbmFibGUgdG8gc2VlayBzdHJlYW0gJwogICAgICAgICAgICAgICAgICAgIC4gJGkgLiAnIG9mIHRoZSBBcHBlbmRTdHJlYW0nLCAwLCAkZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIFNlZWsgdG8gdGhlIGFjdHVhbCBwb3NpdGlvbiBieSByZWFkaW5nIGZyb20gZWFjaCBzdHJlYW0KICAgICAgICB3aGlsZSAoJHRoaXMtPnBvcyA8ICRvZmZzZXQgJiYgISR0aGlzLT5lb2YoKSkgewogICAgICAgICAgICAkcmVzdWx0ID0gJHRoaXMtPnJlYWQobWluKDgwOTYsICRvZmZzZXQgLSAkdGhpcy0+cG9zKSk7CiAgICAgICAgICAgIGlmICgkcmVzdWx0ID09PSAnJykgewogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBSZWFkcyBmcm9tIGFsbCBvZiB0aGUgYXBwZW5kZWQgc3RyZWFtcyB1bnRpbCB0aGUgbGVuZ3RoIGlzIG1ldCBvciBFT0YuCiAgICAgKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVhZCgkbGVuZ3RoKQogICAgewogICAgICAgICRidWZmZXIgPSAnJzsKICAgICAgICAkdG90YWwgPSBjb3VudCgkdGhpcy0+c3RyZWFtcykgLSAxOwogICAgICAgICRyZW1haW5pbmcgPSAkbGVuZ3RoOwogICAgICAgICRwcm9ncmVzc1RvTmV4dCA9IGZhbHNlOwoKICAgICAgICB3aGlsZSAoJHJlbWFpbmluZyA+IDApIHsKCiAgICAgICAgICAgIC8vIFByb2dyZXNzIHRvIHRoZSBuZXh0IHN0cmVhbSBpZiBuZWVkZWQuCiAgICAgICAgICAgIGlmICgkcHJvZ3Jlc3NUb05leHQgfHwgJHRoaXMtPnN0cmVhbXNbJHRoaXMtPmN1cnJlbnRdLT5lb2YoKSkgewogICAgICAgICAgICAgICAgJHByb2dyZXNzVG9OZXh0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmN1cnJlbnQgPT09ICR0b3RhbCkgewogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJHRoaXMtPmN1cnJlbnQrKzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5zdHJlYW1zWyR0aGlzLT5jdXJyZW50XS0+cmVhZCgkcmVtYWluaW5nKTsKCiAgICAgICAgICAgIC8vIFVzaW5nIGEgbG9vc2UgY29tcGFyaXNvbiBoZXJlIHRvIG1hdGNoIG9uICcnLCBmYWxzZSwgYW5kIG51bGwKICAgICAgICAgICAgaWYgKCRyZXN1bHQgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgJHByb2dyZXNzVG9OZXh0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkYnVmZmVyIC49ICRyZXN1bHQ7CiAgICAgICAgICAgICRyZW1haW5pbmcgPSAkbGVuZ3RoIC0gc3RybGVuKCRidWZmZXIpOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPnBvcyArPSBzdHJsZW4oJGJ1ZmZlcik7CgogICAgICAgIHJldHVybiAkYnVmZmVyOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBpc1JlYWRhYmxlKCkKICAgIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNXcml0YWJsZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBpc1NlZWthYmxlKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnNlZWthYmxlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB3cml0ZSgkc3RyaW5nKQogICAgewogICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignQ2Fubm90IHdyaXRlIHRvIGFuIEFwcGVuZFN0cmVhbScpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRNZXRhZGF0YSgka2V5ID0gbnVsbCkKICAgIHsKICAgICAgICByZXR1cm4gJGtleSA/IG51bGwgOiBbXTsKICAgIH0KfQo=AppDevTools/query/vendor/guzzlehttp/psr7/src/BufferStream.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBQcm92aWRlcyBhIGJ1ZmZlciBzdHJlYW0gdGhhdCBjYW4gYmUgd3JpdHRlbiB0byB0byBmaWxsIGEgYnVmZmVyLCBhbmQgcmVhZAogKiBmcm9tIHRvIHJlbW92ZSBieXRlcyBmcm9tIHRoZSBidWZmZXIuCiAqCiAqIFRoaXMgc3RyZWFtIHJldHVybnMgYSAiaHdtIiBtZXRhZGF0YSB2YWx1ZSB0aGF0IHRlbGxzIHVwc3RyZWFtIGNvbnN1bWVycwogKiB3aGF0IHRoZSBjb25maWd1cmVkIGhpZ2ggd2F0ZXIgbWFyayBvZiB0aGUgc3RyZWFtIGlzLCBvciB0aGUgbWF4aW11bQogKiBwcmVmZXJyZWQgc2l6ZSBvZiB0aGUgYnVmZmVyLgogKi8KY2xhc3MgQnVmZmVyU3RyZWFtIGltcGxlbWVudHMgU3RyZWFtSW50ZXJmYWNlCnsKICAgIHByaXZhdGUgJGh3bTsKICAgIHByaXZhdGUgJGJ1ZmZlciA9ICcnOwoKICAgIC8qKgogICAgICogQHBhcmFtIGludCAkaHdtIEhpZ2ggd2F0ZXIgbWFyaywgcmVwcmVzZW50aW5nIHRoZSBwcmVmZXJyZWQgbWF4aW11bQogICAgICogICAgICAgICAgICAgICAgIGJ1ZmZlciBzaXplLiBJZiB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIGV4Y2VlZHMgdGhlIGhpZ2gKICAgICAqICAgICAgICAgICAgICAgICB3YXRlciBtYXJrLCB0aGVuIGNhbGxzIHRvIHdyaXRlIHdpbGwgY29udGludWUgdG8gc3VjY2VlZAogICAgICogICAgICAgICAgICAgICAgIGJ1dCB3aWxsIHJldHVybiBmYWxzZSB0byBpbmZvcm0gd3JpdGVycyB0byBzbG93IGRvd24KICAgICAqICAgICAgICAgICAgICAgICB1bnRpbCB0aGUgYnVmZmVyIGhhcyBiZWVuIGRyYWluZWQgYnkgcmVhZGluZyBmcm9tIGl0LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGh3bSA9IDE2Mzg0KQogICAgewogICAgICAgICR0aGlzLT5od20gPSAkaHdtOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmdldENvbnRlbnRzKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbnRlbnRzKCkKICAgIHsKICAgICAgICAkYnVmZmVyID0gJHRoaXMtPmJ1ZmZlcjsKICAgICAgICAkdGhpcy0+YnVmZmVyID0gJyc7CgogICAgICAgIHJldHVybiAkYnVmZmVyOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjbG9zZSgpCiAgICB7CiAgICAgICAgJHRoaXMtPmJ1ZmZlciA9ICcnOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBkZXRhY2goKQogICAgewogICAgICAgICR0aGlzLT5jbG9zZSgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTaXplKCkKICAgIHsKICAgICAgICByZXR1cm4gc3RybGVuKCR0aGlzLT5idWZmZXIpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBpc1JlYWRhYmxlKCkKICAgIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNXcml0YWJsZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzU2Vla2FibGUoKQogICAgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gcmV3aW5kKCkKICAgIHsKICAgICAgICAkdGhpcy0+c2VlaygwKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2Vlaygkb2Zmc2V0LCAkd2hlbmNlID0gU0VFS19TRVQpCiAgICB7CiAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdDYW5ub3Qgc2VlayBhIEJ1ZmZlclN0cmVhbScpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBlb2YoKQogICAgewogICAgICAgIHJldHVybiBzdHJsZW4oJHRoaXMtPmJ1ZmZlcikgPT09IDA7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlbGwoKQogICAgewogICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignQ2Fubm90IGRldGVybWluZSB0aGUgcG9zaXRpb24gb2YgYSBCdWZmZXJTdHJlYW0nKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJlYWRzIGRhdGEgZnJvbSB0aGUgYnVmZmVyLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVhZCgkbGVuZ3RoKQogICAgewogICAgICAgICRjdXJyZW50TGVuZ3RoID0gc3RybGVuKCR0aGlzLT5idWZmZXIpOwoKICAgICAgICBpZiAoJGxlbmd0aCA+PSAkY3VycmVudExlbmd0aCkgewogICAgICAgICAgICAvLyBObyBuZWVkIHRvIHNsaWNlIHRoZSBidWZmZXIgYmVjYXVzZSB3ZSBkb24ndCBoYXZlIGVub3VnaCBkYXRhLgogICAgICAgICAgICAkcmVzdWx0ID0gJHRoaXMtPmJ1ZmZlcjsKICAgICAgICAgICAgJHRoaXMtPmJ1ZmZlciA9ICcnOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIFNsaWNlIHVwIHRoZSByZXN1bHQgdG8gcHJvdmlkZSBhIHN1YnNldCBvZiB0aGUgYnVmZmVyLgogICAgICAgICAgICAkcmVzdWx0ID0gc3Vic3RyKCR0aGlzLT5idWZmZXIsIDAsICRsZW5ndGgpOwogICAgICAgICAgICAkdGhpcy0+YnVmZmVyID0gc3Vic3RyKCR0aGlzLT5idWZmZXIsICRsZW5ndGgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBXcml0ZXMgZGF0YSB0byB0aGUgYnVmZmVyLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd3JpdGUoJHN0cmluZykKICAgIHsKICAgICAgICAkdGhpcy0+YnVmZmVyIC49ICRzdHJpbmc7CgogICAgICAgIC8vIFRPRE86IFdoYXQgc2hvdWxkIGhhcHBlbiBoZXJlPwogICAgICAgIGlmIChzdHJsZW4oJHRoaXMtPmJ1ZmZlcikgPj0gJHRoaXMtPmh3bSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gc3RybGVuKCRzdHJpbmcpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRNZXRhZGF0YSgka2V5ID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAoJGtleSA9PSAnaHdtJykgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPmh3bTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAka2V5ID8gbnVsbCA6IFtdOwogICAgfQp9Cg==AppDevTools/query/vendor/guzzlehttp/psr7/src/CachingStream.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBTdHJlYW0gZGVjb3JhdG9yIHRoYXQgY2FuIGNhY2hlIHByZXZpb3VzbHkgcmVhZCBieXRlcyBmcm9tIGEgc2VxdWVudGlhbGx5CiAqIHJlYWQgc3RyZWFtLgogKi8KY2xhc3MgQ2FjaGluZ1N0cmVhbSBpbXBsZW1lbnRzIFN0cmVhbUludGVyZmFjZQp7CiAgICB1c2UgU3RyZWFtRGVjb3JhdG9yVHJhaXQ7CgogICAgLyoqIEB2YXIgU3RyZWFtSW50ZXJmYWNlIFN0cmVhbSBiZWluZyB3cmFwcGVkICovCiAgICBwcml2YXRlICRyZW1vdGVTdHJlYW07CgogICAgLyoqIEB2YXIgaW50IE51bWJlciBvZiBieXRlcyB0byBza2lwIHJlYWRpbmcgZHVlIHRvIGEgd3JpdGUgb24gdGhlIGJ1ZmZlciAqLwogICAgcHJpdmF0ZSAkc2tpcFJlYWRCeXRlcyA9IDA7CgogICAgLyoqCiAgICAgKiBXZSB3aWxsIHRyZWF0IHRoZSBidWZmZXIgb2JqZWN0IGFzIHRoZSBib2R5IG9mIHRoZSBzdHJlYW0KICAgICAqCiAgICAgKiBAcGFyYW0gU3RyZWFtSW50ZXJmYWNlICRzdHJlYW0gU3RyZWFtIHRvIGNhY2hlCiAgICAgKiBAcGFyYW0gU3RyZWFtSW50ZXJmYWNlICR0YXJnZXQgT3B0aW9uYWxseSBzcGVjaWZ5IHdoZXJlIGRhdGEgaXMgY2FjaGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgKICAgICAgICBTdHJlYW1JbnRlcmZhY2UgJHN0cmVhbSwKICAgICAgICBTdHJlYW1JbnRlcmZhY2UgJHRhcmdldCA9IG51bGwKICAgICkgewogICAgICAgICR0aGlzLT5yZW1vdGVTdHJlYW0gPSAkc3RyZWFtOwogICAgICAgICR0aGlzLT5zdHJlYW0gPSAkdGFyZ2V0ID86IG5ldyBTdHJlYW0oZm9wZW4oJ3BocDovL3RlbXAnLCAncisnKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFNpemUoKQogICAgewogICAgICAgIHJldHVybiBtYXgoJHRoaXMtPnN0cmVhbS0+Z2V0U2l6ZSgpLCAkdGhpcy0+cmVtb3RlU3RyZWFtLT5nZXRTaXplKCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZXdpbmQoKQogICAgewogICAgICAgICR0aGlzLT5zZWVrKDApOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZWVrKCRvZmZzZXQsICR3aGVuY2UgPSBTRUVLX1NFVCkKICAgIHsKICAgICAgICBpZiAoJHdoZW5jZSA9PSBTRUVLX1NFVCkgewogICAgICAgICAgICAkYnl0ZSA9ICRvZmZzZXQ7CiAgICAgICAgfSBlbHNlaWYgKCR3aGVuY2UgPT0gU0VFS19DVVIpIHsKICAgICAgICAgICAgJGJ5dGUgPSAkb2Zmc2V0ICsgJHRoaXMtPnRlbGwoKTsKICAgICAgICB9IGVsc2VpZiAoJHdoZW5jZSA9PSBTRUVLX0VORCkgewogICAgICAgICAgICAkc2l6ZSA9ICR0aGlzLT5yZW1vdGVTdHJlYW0tPmdldFNpemUoKTsKICAgICAgICAgICAgaWYgKCRzaXplID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICAkc2l6ZSA9ICR0aGlzLT5jYWNoZUVudGlyZVN0cmVhbSgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRieXRlID0gJHNpemUgKyAkb2Zmc2V0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdJbnZhbGlkIHdoZW5jZScpOwogICAgICAgIH0KCiAgICAgICAgJGRpZmYgPSAkYnl0ZSAtICR0aGlzLT5zdHJlYW0tPmdldFNpemUoKTsKCiAgICAgICAgaWYgKCRkaWZmID4gMCkgewogICAgICAgICAgICAvLyBSZWFkIHRoZSByZW1vdGVTdHJlYW0gdW50aWwgd2UgaGF2ZSByZWFkIGluIGF0IGxlYXN0IHRoZSBhbW91bnQKICAgICAgICAgICAgLy8gb2YgYnl0ZXMgcmVxdWVzdGVkLCBvciB3ZSByZWFjaCB0aGUgZW5kIG9mIHRoZSBmaWxlLgogICAgICAgICAgICB3aGlsZSAoJGRpZmYgPiAwICYmICEkdGhpcy0+cmVtb3RlU3RyZWFtLT5lb2YoKSkgewogICAgICAgICAgICAgICAgJHRoaXMtPnJlYWQoJGRpZmYpOwogICAgICAgICAgICAgICAgJGRpZmYgPSAkYnl0ZSAtICR0aGlzLT5zdHJlYW0tPmdldFNpemUoKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIC8vIFdlIGNhbiBqdXN0IGRvIGEgbm9ybWFsIHNlZWsgc2luY2Ugd2UndmUgYWxyZWFkeSBzZWVuIHRoaXMgYnl0ZS4KICAgICAgICAgICAgJHRoaXMtPnN0cmVhbS0+c2VlaygkYnl0ZSk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZWFkKCRsZW5ndGgpCiAgICB7CiAgICAgICAgLy8gUGVyZm9ybSBhIHJlZ3VsYXIgcmVhZCBvbiBhbnkgcHJldmlvdXNseSByZWFkIGRhdGEgZnJvbSB0aGUgYnVmZmVyCiAgICAgICAgJGRhdGEgPSAkdGhpcy0+c3RyZWFtLT5yZWFkKCRsZW5ndGgpOwogICAgICAgICRyZW1haW5pbmcgPSAkbGVuZ3RoIC0gc3RybGVuKCRkYXRhKTsKCiAgICAgICAgLy8gTW9yZSBkYXRhIHdhcyByZXF1ZXN0ZWQgc28gcmVhZCBmcm9tIHRoZSByZW1vdGUgc3RyZWFtCiAgICAgICAgaWYgKCRyZW1haW5pbmcpIHsKICAgICAgICAgICAgLy8gSWYgZGF0YSB3YXMgd3JpdHRlbiB0byB0aGUgYnVmZmVyIGluIGEgcG9zaXRpb24gdGhhdCB3b3VsZCBoYXZlCiAgICAgICAgICAgIC8vIGJlZW4gZmlsbGVkIGZyb20gdGhlIHJlbW90ZSBzdHJlYW0sIHRoZW4gd2UgbXVzdCBza2lwIGJ5dGVzIG9uCiAgICAgICAgICAgIC8vIHRoZSByZW1vdGUgc3RyZWFtIHRvIGVtdWxhdGUgb3ZlcndyaXRpbmcgYnl0ZXMgZnJvbSB0aGF0CiAgICAgICAgICAgIC8vIHBvc2l0aW9uLiBUaGlzIG1pbWljcyB0aGUgYmVoYXZpb3Igb2Ygb3RoZXIgUEhQIHN0cmVhbSB3cmFwcGVycy4KICAgICAgICAgICAgJHJlbW90ZURhdGEgPSAkdGhpcy0+cmVtb3RlU3RyZWFtLT5yZWFkKAogICAgICAgICAgICAgICAgJHJlbWFpbmluZyArICR0aGlzLT5za2lwUmVhZEJ5dGVzCiAgICAgICAgICAgICk7CgogICAgICAgICAgICBpZiAoJHRoaXMtPnNraXBSZWFkQnl0ZXMpIHsKICAgICAgICAgICAgICAgICRsZW4gPSBzdHJsZW4oJHJlbW90ZURhdGEpOwogICAgICAgICAgICAgICAgJHJlbW90ZURhdGEgPSBzdWJzdHIoJHJlbW90ZURhdGEsICR0aGlzLT5za2lwUmVhZEJ5dGVzKTsKICAgICAgICAgICAgICAgICR0aGlzLT5za2lwUmVhZEJ5dGVzID0gbWF4KDAsICR0aGlzLT5za2lwUmVhZEJ5dGVzIC0gJGxlbik7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRkYXRhIC49ICRyZW1vdGVEYXRhOwogICAgICAgICAgICAkdGhpcy0+c3RyZWFtLT53cml0ZSgkcmVtb3RlRGF0YSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGRhdGE7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHdyaXRlKCRzdHJpbmcpCiAgICB7CiAgICAgICAgLy8gV2hlbiBhcHBlbmRpbmcgdG8gdGhlIGVuZCBvZiB0aGUgY3VycmVudGx5IHJlYWQgc3RyZWFtLCB5b3UnbGwgd2FudAogICAgICAgIC8vIHRvIHNraXAgYnl0ZXMgZnJvbSBiZWluZyByZWFkIGZyb20gdGhlIHJlbW90ZSBzdHJlYW0gdG8gZW11bGF0ZQogICAgICAgIC8vIG90aGVyIHN0cmVhbSB3cmFwcGVycy4gQmFzaWNhbGx5IHJlcGxhY2luZyBieXRlcyBvZiBkYXRhIG9mIGEgZml4ZWQKICAgICAgICAvLyBsZW5ndGguCiAgICAgICAgJG92ZXJmbG93ID0gKHN0cmxlbigkc3RyaW5nKSArICR0aGlzLT50ZWxsKCkpIC0gJHRoaXMtPnJlbW90ZVN0cmVhbS0+dGVsbCgpOwogICAgICAgIGlmICgkb3ZlcmZsb3cgPiAwKSB7CiAgICAgICAgICAgICR0aGlzLT5za2lwUmVhZEJ5dGVzICs9ICRvdmVyZmxvdzsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+c3RyZWFtLT53cml0ZSgkc3RyaW5nKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZW9mKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnN0cmVhbS0+ZW9mKCkgJiYgJHRoaXMtPnJlbW90ZVN0cmVhbS0+ZW9mKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDbG9zZSBib3RoIHRoZSByZW1vdGUgc3RyZWFtIGFuZCBidWZmZXIgc3RyZWFtCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjbG9zZSgpCiAgICB7CiAgICAgICAgJHRoaXMtPnJlbW90ZVN0cmVhbS0+Y2xvc2UoKSAmJiAkdGhpcy0+c3RyZWFtLT5jbG9zZSgpOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gY2FjaGVFbnRpcmVTdHJlYW0oKQogICAgewogICAgICAgICR0YXJnZXQgPSBuZXcgRm5TdHJlYW0oWyd3cml0ZScgPT4gJ3N0cmxlbiddKTsKICAgICAgICBjb3B5X3RvX3N0cmVhbSgkdGhpcywgJHRhcmdldCk7CgogICAgICAgIHJldHVybiAkdGhpcy0+dGVsbCgpOwogICAgfQp9Cg==AppDevTools/query/vendor/guzzlehttp/psr7/src/DroppingStream.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBTdHJlYW0gZGVjb3JhdG9yIHRoYXQgYmVnaW5zIGRyb3BwaW5nIGRhdGEgb25jZSB0aGUgc2l6ZSBvZiB0aGUgdW5kZXJseWluZwogKiBzdHJlYW0gYmVjb21lcyB0b28gZnVsbC4KICovCmNsYXNzIERyb3BwaW5nU3RyZWFtIGltcGxlbWVudHMgU3RyZWFtSW50ZXJmYWNlCnsKICAgIHVzZSBTdHJlYW1EZWNvcmF0b3JUcmFpdDsKCiAgICBwcml2YXRlICRtYXhMZW5ndGg7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gU3RyZWFtSW50ZXJmYWNlICRzdHJlYW0gICAgVW5kZXJseWluZyBzdHJlYW0gdG8gZGVjb3JhdGUuCiAgICAgKiBAcGFyYW0gaW50ICAgICAgICAgICAgICRtYXhMZW5ndGggTWF4aW11bSBzaXplIGJlZm9yZSBkcm9wcGluZyBkYXRhLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoU3RyZWFtSW50ZXJmYWNlICRzdHJlYW0sICRtYXhMZW5ndGgpCiAgICB7CiAgICAgICAgJHRoaXMtPnN0cmVhbSA9ICRzdHJlYW07CiAgICAgICAgJHRoaXMtPm1heExlbmd0aCA9ICRtYXhMZW5ndGg7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHdyaXRlKCRzdHJpbmcpCiAgICB7CiAgICAgICAgJGRpZmYgPSAkdGhpcy0+bWF4TGVuZ3RoIC0gJHRoaXMtPnN0cmVhbS0+Z2V0U2l6ZSgpOwoKICAgICAgICAvLyBCZWdpbiByZXR1cm5pbmcgMCB3aGVuIHRoZSB1bmRlcmx5aW5nIHN0cmVhbSBpcyB0b28gbGFyZ2UuCiAgICAgICAgaWYgKCRkaWZmIDw9IDApIHsKICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgfQoKICAgICAgICAvLyBXcml0ZSB0aGUgc3RyZWFtIG9yIGEgc3Vic2V0IG9mIHRoZSBzdHJlYW0gaWYgbmVlZGVkLgogICAgICAgIGlmIChzdHJsZW4oJHN0cmluZykgPCAkZGlmZikgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnN0cmVhbS0+d3JpdGUoJHN0cmluZyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPnN0cmVhbS0+d3JpdGUoc3Vic3RyKCRzdHJpbmcsIDAsICRkaWZmKSk7CiAgICB9Cn0KAppDevTools/query/vendor/guzzlehttp/psr7/src/FnStream.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBDb21wb3NlIHN0cmVhbSBpbXBsZW1lbnRhdGlvbnMgYmFzZWQgb24gYSBoYXNoIG9mIGZ1bmN0aW9ucy4KICoKICogQWxsb3dzIGZvciBlYXN5IHRlc3RpbmcgYW5kIGV4dGVuc2lvbiBvZiBhIHByb3ZpZGVkIHN0cmVhbSB3aXRob3V0IG5lZWRpbmcKICogdG8gY3JlYXRlIGEgY29uY3JldGUgY2xhc3MgZm9yIGEgc2ltcGxlIGV4dGVuc2lvbiBwb2ludC4KICovCmNsYXNzIEZuU3RyZWFtIGltcGxlbWVudHMgU3RyZWFtSW50ZXJmYWNlCnsKICAgIC8qKiBAdmFyIGFycmF5ICovCiAgICBwcml2YXRlICRtZXRob2RzOwoKICAgIC8qKiBAdmFyIGFycmF5IE1ldGhvZHMgdGhhdCBtdXN0IGJlIGltcGxlbWVudGVkIGluIHRoZSBnaXZlbiBhcnJheSAqLwogICAgcHJpdmF0ZSBzdGF0aWMgJHNsb3RzID0gWydfX3RvU3RyaW5nJywgJ2Nsb3NlJywgJ2RldGFjaCcsICdyZXdpbmQnLAogICAgICAgICdnZXRTaXplJywgJ3RlbGwnLCAnZW9mJywgJ2lzU2Vla2FibGUnLCAnc2VlaycsICdpc1dyaXRhYmxlJywgJ3dyaXRlJywKICAgICAgICAnaXNSZWFkYWJsZScsICdyZWFkJywgJ2dldENvbnRlbnRzJywgJ2dldE1ldGFkYXRhJ107CgogICAgLyoqCiAgICAgKiBAcGFyYW0gYXJyYXkgJG1ldGhvZHMgSGFzaCBvZiBtZXRob2QgbmFtZSB0byBhIGNhbGxhYmxlLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoYXJyYXkgJG1ldGhvZHMpCiAgICB7CiAgICAgICAgJHRoaXMtPm1ldGhvZHMgPSAkbWV0aG9kczsKCiAgICAgICAgLy8gQ3JlYXRlIHRoZSBmdW5jdGlvbnMgb24gdGhlIGNsYXNzCiAgICAgICAgZm9yZWFjaCAoJG1ldGhvZHMgYXMgJG5hbWUgPT4gJGZuKSB7CiAgICAgICAgICAgICR0aGlzLT57J19mbl8nIC4gJG5hbWV9ID0gJGZuOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIExhemlseSBkZXRlcm1pbmUgd2hpY2ggbWV0aG9kcyBhcmUgbm90IGltcGxlbWVudGVkLgogICAgICogQHRocm93cyBcQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19nZXQoJG5hbWUpCiAgICB7CiAgICAgICAgdGhyb3cgbmV3IFxCYWRNZXRob2RDYWxsRXhjZXB0aW9uKHN0cl9yZXBsYWNlKCdfZm5fJywgJycsICRuYW1lKQogICAgICAgICAgICAuICcoKSBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIEZuU3RyZWFtJyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBUaGUgY2xvc2UgbWV0aG9kIGlzIGNhbGxlZCBvbiB0aGUgdW5kZXJseWluZyBzdHJlYW0gb25seSBpZiBwb3NzaWJsZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fZGVzdHJ1Y3QoKQogICAgewogICAgICAgIGlmIChpc3NldCgkdGhpcy0+X2ZuX2Nsb3NlKSkgewogICAgICAgICAgICBjYWxsX3VzZXJfZnVuYygkdGhpcy0+X2ZuX2Nsb3NlKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBBZGRzIGN1c3RvbSBmdW5jdGlvbmFsaXR5IHRvIGFuIHVuZGVybHlpbmcgc3RyZWFtIGJ5IGludGVyY2VwdGluZwogICAgICogc3BlY2lmaWMgbWV0aG9kIGNhbGxzLgogICAgICoKICAgICAqIEBwYXJhbSBTdHJlYW1JbnRlcmZhY2UgJHN0cmVhbSAgU3RyZWFtIHRvIGRlY29yYXRlCiAgICAgKiBAcGFyYW0gYXJyYXkgICAgICAgICAgICRtZXRob2RzIEhhc2ggb2YgbWV0aG9kIG5hbWUgdG8gYSBjbG9zdXJlCiAgICAgKgogICAgICogQHJldHVybiBGblN0cmVhbQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGRlY29yYXRlKFN0cmVhbUludGVyZmFjZSAkc3RyZWFtLCBhcnJheSAkbWV0aG9kcykKICAgIHsKICAgICAgICAvLyBJZiBhbnkgb2YgdGhlIHJlcXVpcmVkIG1ldGhvZHMgd2VyZSBub3QgcHJvdmlkZWQsIHRoZW4gc2ltcGx5CiAgICAgICAgLy8gcHJveHkgdG8gdGhlIGRlY29yYXRlZCBzdHJlYW0uCiAgICAgICAgZm9yZWFjaCAoYXJyYXlfZGlmZihzZWxmOjokc2xvdHMsIGFycmF5X2tleXMoJG1ldGhvZHMpKSBhcyAkZGlmZikgewogICAgICAgICAgICAkbWV0aG9kc1skZGlmZl0gPSBbJHN0cmVhbSwgJGRpZmZdOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRtZXRob2RzKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpCiAgICB7CiAgICAgICAgcmV0dXJuIGNhbGxfdXNlcl9mdW5jKCR0aGlzLT5fZm5fX190b1N0cmluZyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGNsb3NlKCkKICAgIHsKICAgICAgICByZXR1cm4gY2FsbF91c2VyX2Z1bmMoJHRoaXMtPl9mbl9jbG9zZSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGRldGFjaCgpCiAgICB7CiAgICAgICAgcmV0dXJuIGNhbGxfdXNlcl9mdW5jKCR0aGlzLT5fZm5fZGV0YWNoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2l6ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIGNhbGxfdXNlcl9mdW5jKCR0aGlzLT5fZm5fZ2V0U2l6ZSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlbGwoKQogICAgewogICAgICAgIHJldHVybiBjYWxsX3VzZXJfZnVuYygkdGhpcy0+X2ZuX3RlbGwpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBlb2YoKQogICAgewogICAgICAgIHJldHVybiBjYWxsX3VzZXJfZnVuYygkdGhpcy0+X2ZuX2VvZik7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzU2Vla2FibGUoKQogICAgewogICAgICAgIHJldHVybiBjYWxsX3VzZXJfZnVuYygkdGhpcy0+X2ZuX2lzU2Vla2FibGUpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZXdpbmQoKQogICAgewogICAgICAgIGNhbGxfdXNlcl9mdW5jKCR0aGlzLT5fZm5fcmV3aW5kKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc2Vlaygkb2Zmc2V0LCAkd2hlbmNlID0gU0VFS19TRVQpCiAgICB7CiAgICAgICAgY2FsbF91c2VyX2Z1bmMoJHRoaXMtPl9mbl9zZWVrLCAkb2Zmc2V0LCAkd2hlbmNlKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNXcml0YWJsZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIGNhbGxfdXNlcl9mdW5jKCR0aGlzLT5fZm5faXNXcml0YWJsZSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHdyaXRlKCRzdHJpbmcpCiAgICB7CiAgICAgICAgcmV0dXJuIGNhbGxfdXNlcl9mdW5jKCR0aGlzLT5fZm5fd3JpdGUsICRzdHJpbmcpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBpc1JlYWRhYmxlKCkKICAgIHsKICAgICAgICByZXR1cm4gY2FsbF91c2VyX2Z1bmMoJHRoaXMtPl9mbl9pc1JlYWRhYmxlKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVhZCgkbGVuZ3RoKQogICAgewogICAgICAgIHJldHVybiBjYWxsX3VzZXJfZnVuYygkdGhpcy0+X2ZuX3JlYWQsICRsZW5ndGgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb250ZW50cygpCiAgICB7CiAgICAgICAgcmV0dXJuIGNhbGxfdXNlcl9mdW5jKCR0aGlzLT5fZm5fZ2V0Q29udGVudHMpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRNZXRhZGF0YSgka2V5ID0gbnVsbCkKICAgIHsKICAgICAgICByZXR1cm4gY2FsbF91c2VyX2Z1bmMoJHRoaXMtPl9mbl9nZXRNZXRhZGF0YSwgJGtleSk7CiAgICB9Cn0KAppDevTools/query/vendor/guzzlehttp/psr7/src/InflateStream.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBVc2VzIFBIUCdzIHpsaWIuaW5mbGF0ZSBmaWx0ZXIgdG8gaW5mbGF0ZSBkZWZsYXRlIG9yIGd6aXBwZWQgY29udGVudC4KICoKICogVGhpcyBzdHJlYW0gZGVjb3JhdG9yIHNraXBzIHRoZSBmaXJzdCAxMCBieXRlcyBvZiB0aGUgZ2l2ZW4gc3RyZWFtIHRvIHJlbW92ZQogKiB0aGUgZ3ppcCBoZWFkZXIsIGNvbnZlcnRzIHRoZSBwcm92aWRlZCBzdHJlYW0gdG8gYSBQSFAgc3RyZWFtIHJlc291cmNlLAogKiB0aGVuIGFwcGVuZHMgdGhlIHpsaWIuaW5mbGF0ZSBmaWx0ZXIuIFRoZSBzdHJlYW0gaXMgdGhlbiBjb252ZXJ0ZWQgYmFjawogKiB0byBhIEd1enpsZSBzdHJlYW0gcmVzb3VyY2UgdG8gYmUgdXNlZCBhcyBhIEd1enpsZSBzdHJlYW0uCiAqCiAqIEBsaW5rIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzE5NTIKICogQGxpbmsgaHR0cDovL3BocC5uZXQvbWFudWFsL2VuL2ZpbHRlcnMuY29tcHJlc3Npb24ucGhwCiAqLwpjbGFzcyBJbmZsYXRlU3RyZWFtIGltcGxlbWVudHMgU3RyZWFtSW50ZXJmYWNlCnsKICAgIHVzZSBTdHJlYW1EZWNvcmF0b3JUcmFpdDsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoU3RyZWFtSW50ZXJmYWNlICRzdHJlYW0pCiAgICB7CiAgICAgICAgLy8gcmVhZCB0aGUgZmlyc3QgMTAgYnl0ZXMsIGllLiBnemlwIGhlYWRlcgogICAgICAgICRoZWFkZXIgPSAkc3RyZWFtLT5yZWFkKDEwKTsKICAgICAgICAkZmlsZW5hbWVIZWFkZXJMZW5ndGggPSAkdGhpcy0+Z2V0TGVuZ3RoT2ZQb3NzaWJsZUZpbGVuYW1lSGVhZGVyKCRzdHJlYW0sICRoZWFkZXIpOwogICAgICAgIC8vIFNraXAgdGhlIGhlYWRlciwgdGhhdCBpcyAxMCArIGxlbmd0aCBvZiBmaWxlbmFtZSArIDEgKG5pbCkgYnl0ZXMKICAgICAgICAkc3RyZWFtID0gbmV3IExpbWl0U3RyZWFtKCRzdHJlYW0sIC0xLCAxMCArICRmaWxlbmFtZUhlYWRlckxlbmd0aCk7CiAgICAgICAgJHJlc291cmNlID0gU3RyZWFtV3JhcHBlcjo6Z2V0UmVzb3VyY2UoJHN0cmVhbSk7CiAgICAgICAgc3RyZWFtX2ZpbHRlcl9hcHBlbmQoJHJlc291cmNlLCAnemxpYi5pbmZsYXRlJywgU1RSRUFNX0ZJTFRFUl9SRUFEKTsKICAgICAgICAkdGhpcy0+c3RyZWFtID0gbmV3IFN0cmVhbSgkcmVzb3VyY2UpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIFN0cmVhbUludGVyZmFjZSAkc3RyZWFtCiAgICAgKiBAcGFyYW0gJGhlYWRlcgogICAgICogQHJldHVybiBpbnQKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRMZW5ndGhPZlBvc3NpYmxlRmlsZW5hbWVIZWFkZXIoU3RyZWFtSW50ZXJmYWNlICRzdHJlYW0sICRoZWFkZXIpCiAgICB7CiAgICAgICAgJGZpbGVuYW1lX2hlYWRlcl9sZW5ndGggPSAwOwoKICAgICAgICBpZiAoc3Vic3RyKGJpbjJoZXgoJGhlYWRlciksIDYsIDIpID09PSAnMDgnKSB7CiAgICAgICAgICAgIC8vIHdlIGhhdmUgYSBmaWxlbmFtZSwgcmVhZCB1bnRpbCBuaWwKICAgICAgICAgICAgJGZpbGVuYW1lX2hlYWRlcl9sZW5ndGggPSAxOwogICAgICAgICAgICB3aGlsZSAoJHN0cmVhbS0+cmVhZCgxKSAhPT0gY2hyKDApKSB7CiAgICAgICAgICAgICAgICAkZmlsZW5hbWVfaGVhZGVyX2xlbmd0aCsrOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGZpbGVuYW1lX2hlYWRlcl9sZW5ndGg7CiAgICB9Cn0KAppDevTools/query/vendor/guzzlehttp/psr7/src/LazyOpenStream.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBMYXppbHkgcmVhZHMgb3Igd3JpdGVzIHRvIGEgZmlsZSB0aGF0IGlzIG9wZW5lZCBvbmx5IGFmdGVyIGFuIElPIG9wZXJhdGlvbgogKiB0YWtlIHBsYWNlIG9uIHRoZSBzdHJlYW0uCiAqLwpjbGFzcyBMYXp5T3BlblN0cmVhbSBpbXBsZW1lbnRzIFN0cmVhbUludGVyZmFjZQp7CiAgICB1c2UgU3RyZWFtRGVjb3JhdG9yVHJhaXQ7CgogICAgLyoqIEB2YXIgc3RyaW5nIEZpbGUgdG8gb3BlbiAqLwogICAgcHJpdmF0ZSAkZmlsZW5hbWU7CgogICAgLyoqIEB2YXIgc3RyaW5nICRtb2RlICovCiAgICBwcml2YXRlICRtb2RlOwoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkZmlsZW5hbWUgRmlsZSB0byBsYXppbHkgb3BlbgogICAgICogQHBhcmFtIHN0cmluZyAkbW9kZSAgICAgZm9wZW4gbW9kZSB0byB1c2Ugd2hlbiBvcGVuaW5nIHRoZSBzdHJlYW0KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRmaWxlbmFtZSwgJG1vZGUpCiAgICB7CiAgICAgICAgJHRoaXMtPmZpbGVuYW1lID0gJGZpbGVuYW1lOwogICAgICAgICR0aGlzLT5tb2RlID0gJG1vZGU7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIHRoZSB1bmRlcmx5aW5nIHN0cmVhbSBsYXppbHkgd2hlbiByZXF1aXJlZC4KICAgICAqCiAgICAgKiBAcmV0dXJuIFN0cmVhbUludGVyZmFjZQogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY3JlYXRlU3RyZWFtKCkKICAgIHsKICAgICAgICByZXR1cm4gc3RyZWFtX2Zvcih0cnlfZm9wZW4oJHRoaXMtPmZpbGVuYW1lLCAkdGhpcy0+bW9kZSkpOwogICAgfQp9Cg==AppDevTools/query/vendor/guzzlehttp/psr7/src/LimitStream.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCgovKioKICogRGVjb3JhdG9yIHVzZWQgdG8gcmV0dXJuIG9ubHkgYSBzdWJzZXQgb2YgYSBzdHJlYW0KICovCmNsYXNzIExpbWl0U3RyZWFtIGltcGxlbWVudHMgU3RyZWFtSW50ZXJmYWNlCnsKICAgIHVzZSBTdHJlYW1EZWNvcmF0b3JUcmFpdDsKCiAgICAvKiogQHZhciBpbnQgT2Zmc2V0IHRvIHN0YXJ0IHJlYWRpbmcgZnJvbSAqLwogICAgcHJpdmF0ZSAkb2Zmc2V0OwoKICAgIC8qKiBAdmFyIGludCBMaW1pdCB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgY2FuIGJlIHJlYWQgKi8KICAgIHByaXZhdGUgJGxpbWl0OwoKICAgIC8qKgogICAgICogQHBhcmFtIFN0cmVhbUludGVyZmFjZSAkc3RyZWFtIFN0cmVhbSB0byB3cmFwCiAgICAgKiBAcGFyYW0gaW50ICAgICAgICAgICAgICRsaW1pdCAgVG90YWwgbnVtYmVyIG9mIGJ5dGVzIHRvIGFsbG93IHRvIGJlIHJlYWQKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tIHRoZSBzdHJlYW0uIFBhc3MgLTEgZm9yIG5vIGxpbWl0LgogICAgICogQHBhcmFtIGludCAgICAgICAgICAgICAkb2Zmc2V0IFBvc2l0aW9uIHRvIHNlZWsgdG8gYmVmb3JlIHJlYWRpbmcgKG9ubHkKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrcyBvbiBzZWVrYWJsZSBzdHJlYW1zKS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KAogICAgICAgIFN0cmVhbUludGVyZmFjZSAkc3RyZWFtLAogICAgICAgICRsaW1pdCA9IC0xLAogICAgICAgICRvZmZzZXQgPSAwCiAgICApIHsKICAgICAgICAkdGhpcy0+c3RyZWFtID0gJHN0cmVhbTsKICAgICAgICAkdGhpcy0+c2V0TGltaXQoJGxpbWl0KTsKICAgICAgICAkdGhpcy0+c2V0T2Zmc2V0KCRvZmZzZXQpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBlb2YoKQogICAgewogICAgICAgIC8vIEFsd2F5cyByZXR1cm4gdHJ1ZSBpZiB0aGUgdW5kZXJseWluZyBzdHJlYW0gaXMgRU9GCiAgICAgICAgaWYgKCR0aGlzLT5zdHJlYW0tPmVvZigpKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KCiAgICAgICAgLy8gTm8gbGltaXQgYW5kIHRoZSB1bmRlcmx5aW5nIHN0cmVhbSBpcyBub3QgYXQgRU9GCiAgICAgICAgaWYgKCR0aGlzLT5saW1pdCA9PSAtMSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRoaXMtPnN0cmVhbS0+dGVsbCgpID49ICR0aGlzLT5vZmZzZXQgKyAkdGhpcy0+bGltaXQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBsaW1pdGVkIHN1YnNldCBvZiBkYXRhCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTaXplKCkKICAgIHsKICAgICAgICBpZiAobnVsbCA9PT0gKCRsZW5ndGggPSAkdGhpcy0+c3RyZWFtLT5nZXRTaXplKCkpKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0gZWxzZWlmICgkdGhpcy0+bGltaXQgPT0gLTEpIHsKICAgICAgICAgICAgcmV0dXJuICRsZW5ndGggLSAkdGhpcy0+b2Zmc2V0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiBtaW4oJHRoaXMtPmxpbWl0LCAkbGVuZ3RoIC0gJHRoaXMtPm9mZnNldCk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQWxsb3cgZm9yIGEgYm91bmRlZCBzZWVrIG9uIHRoZSByZWFkIGxpbWl0ZWQgc3RyZWFtCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZWVrKCRvZmZzZXQsICR3aGVuY2UgPSBTRUVLX1NFVCkKICAgIHsKICAgICAgICBpZiAoJHdoZW5jZSAhPT0gU0VFS19TRVQgfHwgJG9mZnNldCA8IDApIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKHNwcmludGYoCiAgICAgICAgICAgICAgICAnQ2Fubm90IHNlZWsgdG8gb2Zmc2V0ICUgd2l0aCB3aGVuY2UgJXMnLAogICAgICAgICAgICAgICAgJG9mZnNldCwKICAgICAgICAgICAgICAgICR3aGVuY2UKICAgICAgICAgICAgKSk7CiAgICAgICAgfQoKICAgICAgICAkb2Zmc2V0ICs9ICR0aGlzLT5vZmZzZXQ7CgogICAgICAgIGlmICgkdGhpcy0+bGltaXQgIT09IC0xKSB7CiAgICAgICAgICAgIGlmICgkb2Zmc2V0ID4gJHRoaXMtPm9mZnNldCArICR0aGlzLT5saW1pdCkgewogICAgICAgICAgICAgICAgJG9mZnNldCA9ICR0aGlzLT5vZmZzZXQgKyAkdGhpcy0+bGltaXQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICR0aGlzLT5zdHJlYW0tPnNlZWsoJG9mZnNldCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHaXZlIGEgcmVsYXRpdmUgdGVsbCgpCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0ZWxsKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnN0cmVhbS0+dGVsbCgpIC0gJHRoaXMtPm9mZnNldDsKICAgIH0KCiAgICAvKioKICAgICAqIFNldCB0aGUgb2Zmc2V0IHRvIHN0YXJ0IGxpbWl0aW5nIGZyb20KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRvZmZzZXQgT2Zmc2V0IHRvIHNlZWsgdG8gYW5kIGJlZ2luIGJ5dGUgbGltaXRpbmcgZnJvbQogICAgICoKICAgICAqIEB0aHJvd3MgXFJ1bnRpbWVFeGNlcHRpb24gaWYgdGhlIHN0cmVhbSBjYW5ub3QgYmUgc2Vla2VkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0T2Zmc2V0KCRvZmZzZXQpCiAgICB7CiAgICAgICAgJGN1cnJlbnQgPSAkdGhpcy0+c3RyZWFtLT50ZWxsKCk7CgogICAgICAgIGlmICgkY3VycmVudCAhPT0gJG9mZnNldCkgewogICAgICAgICAgICAvLyBJZiB0aGUgc3RyZWFtIGNhbm5vdCBzZWVrIHRvIHRoZSBvZmZzZXQgcG9zaXRpb24sIHRoZW4gcmVhZCB0byBpdAogICAgICAgICAgICBpZiAoJHRoaXMtPnN0cmVhbS0+aXNTZWVrYWJsZSgpKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+c3RyZWFtLT5zZWVrKCRvZmZzZXQpOwogICAgICAgICAgICB9IGVsc2VpZiAoJGN1cnJlbnQgPiAkb2Zmc2V0KSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oIkNvdWxkIG5vdCBzZWVrIHRvIHN0cmVhbSBvZmZzZXQgJG9mZnNldCIpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHRoaXMtPnN0cmVhbS0+cmVhZCgkb2Zmc2V0IC0gJGN1cnJlbnQpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+b2Zmc2V0ID0gJG9mZnNldDsKICAgIH0KCiAgICAvKioKICAgICAqIFNldCB0aGUgbGltaXQgb2YgYnl0ZXMgdGhhdCB0aGUgZGVjb3JhdG9yIGFsbG93cyB0byBiZSByZWFkIGZyb20gdGhlCiAgICAgKiBzdHJlYW0uCiAgICAgKgogICAgICogQHBhcmFtIGludCAkbGltaXQgTnVtYmVyIG9mIGJ5dGVzIHRvIGFsbG93IHRvIGJlIHJlYWQgZnJvbSB0aGUgc3RyZWFtLgogICAgICogICAgICAgICAgICAgICAgICAgVXNlIC0xIGZvciBubyBsaW1pdC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldExpbWl0KCRsaW1pdCkKICAgIHsKICAgICAgICAkdGhpcy0+bGltaXQgPSAkbGltaXQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHJlYWQoJGxlbmd0aCkKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmxpbWl0ID09IC0xKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+c3RyZWFtLT5yZWFkKCRsZW5ndGgpOwogICAgICAgIH0KCiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGN1cnJlbnQgcG9zaXRpb24gaXMgbGVzcyB0aGFuIHRoZSB0b3RhbCBhbGxvd2VkCiAgICAgICAgLy8gYnl0ZXMgKyBvcmlnaW5hbCBvZmZzZXQKICAgICAgICAkcmVtYWluaW5nID0gKCR0aGlzLT5vZmZzZXQgKyAkdGhpcy0+bGltaXQpIC0gJHRoaXMtPnN0cmVhbS0+dGVsbCgpOwogICAgICAgIGlmICgkcmVtYWluaW5nID4gMCkgewogICAgICAgICAgICAvLyBPbmx5IHJldHVybiB0aGUgYW1vdW50IG9mIHJlcXVlc3RlZCBkYXRhLCBlbnN1cmluZyB0aGF0IHRoZSBieXRlCiAgICAgICAgICAgIC8vIGxpbWl0IGlzIG5vdCBleGNlZWRlZAogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnN0cmVhbS0+cmVhZChtaW4oJHJlbWFpbmluZywgJGxlbmd0aCkpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICcnOwogICAgfQp9Cg==AppDevTools/query/vendor/guzzlehttp/psr7/src/MessageTrait.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBUcmFpdCBpbXBsZW1lbnRpbmcgZnVuY3Rpb25hbGl0eSBjb21tb24gdG8gcmVxdWVzdHMgYW5kIHJlc3BvbnNlcy4KICovCnRyYWl0IE1lc3NhZ2VUcmFpdAp7CiAgICAvKiogQHZhciBhcnJheSBNYXAgb2YgYWxsIHJlZ2lzdGVyZWQgaGVhZGVycywgYXMgb3JpZ2luYWwgbmFtZSA9PiBhcnJheSBvZiB2YWx1ZXMgKi8KICAgIHByaXZhdGUgJGhlYWRlcnMgPSBbXTsKCiAgICAvKiogQHZhciBhcnJheSBNYXAgb2YgbG93ZXJjYXNlIGhlYWRlciBuYW1lID0+IG9yaWdpbmFsIG5hbWUgYXQgcmVnaXN0cmF0aW9uICovCiAgICBwcml2YXRlICRoZWFkZXJOYW1lcyAgPSBbXTsKCiAgICAvKiogQHZhciBzdHJpbmcgKi8KICAgIHByaXZhdGUgJHByb3RvY29sID0gJzEuMSc7CgogICAgLyoqIEB2YXIgU3RyZWFtSW50ZXJmYWNlICovCiAgICBwcml2YXRlICRzdHJlYW07CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFByb3RvY29sVmVyc2lvbigpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5wcm90b2NvbDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aFByb3RvY29sVmVyc2lvbigkdmVyc2lvbikKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPnByb3RvY29sID09PSAkdmVyc2lvbikgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICAkbmV3ID0gY2xvbmUgJHRoaXM7CiAgICAgICAgJG5ldy0+cHJvdG9jb2wgPSAkdmVyc2lvbjsKICAgICAgICByZXR1cm4gJG5ldzsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SGVhZGVycygpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5oZWFkZXJzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBoYXNIZWFkZXIoJGhlYWRlcikKICAgIHsKICAgICAgICByZXR1cm4gaXNzZXQoJHRoaXMtPmhlYWRlck5hbWVzW3N0cnRvbG93ZXIoJGhlYWRlcildKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SGVhZGVyKCRoZWFkZXIpCiAgICB7CiAgICAgICAgJGhlYWRlciA9IHN0cnRvbG93ZXIoJGhlYWRlcik7CgogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPmhlYWRlck5hbWVzWyRoZWFkZXJdKSkgewogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgfQoKICAgICAgICAkaGVhZGVyID0gJHRoaXMtPmhlYWRlck5hbWVzWyRoZWFkZXJdOwoKICAgICAgICByZXR1cm4gJHRoaXMtPmhlYWRlcnNbJGhlYWRlcl07CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEhlYWRlckxpbmUoJGhlYWRlcikKICAgIHsKICAgICAgICByZXR1cm4gaW1wbG9kZSgnLCAnLCAkdGhpcy0+Z2V0SGVhZGVyKCRoZWFkZXIpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aEhlYWRlcigkaGVhZGVyLCAkdmFsdWUpCiAgICB7CiAgICAgICAgaWYgKCFpc19hcnJheSgkdmFsdWUpKSB7CiAgICAgICAgICAgICR2YWx1ZSA9IFskdmFsdWVdOwogICAgICAgIH0KCiAgICAgICAgJHZhbHVlID0gJHRoaXMtPnRyaW1IZWFkZXJWYWx1ZXMoJHZhbHVlKTsKICAgICAgICAkbm9ybWFsaXplZCA9IHN0cnRvbG93ZXIoJGhlYWRlcik7CgogICAgICAgICRuZXcgPSBjbG9uZSAkdGhpczsKICAgICAgICBpZiAoaXNzZXQoJG5ldy0+aGVhZGVyTmFtZXNbJG5vcm1hbGl6ZWRdKSkgewogICAgICAgICAgICB1bnNldCgkbmV3LT5oZWFkZXJzWyRuZXctPmhlYWRlck5hbWVzWyRub3JtYWxpemVkXV0pOwogICAgICAgIH0KICAgICAgICAkbmV3LT5oZWFkZXJOYW1lc1skbm9ybWFsaXplZF0gPSAkaGVhZGVyOwogICAgICAgICRuZXctPmhlYWRlcnNbJGhlYWRlcl0gPSAkdmFsdWU7CgogICAgICAgIHJldHVybiAkbmV3OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoQWRkZWRIZWFkZXIoJGhlYWRlciwgJHZhbHVlKQogICAgewogICAgICAgIGlmICghaXNfYXJyYXkoJHZhbHVlKSkgewogICAgICAgICAgICAkdmFsdWUgPSBbJHZhbHVlXTsKICAgICAgICB9CgogICAgICAgICR2YWx1ZSA9ICR0aGlzLT50cmltSGVhZGVyVmFsdWVzKCR2YWx1ZSk7CiAgICAgICAgJG5vcm1hbGl6ZWQgPSBzdHJ0b2xvd2VyKCRoZWFkZXIpOwoKICAgICAgICAkbmV3ID0gY2xvbmUgJHRoaXM7CiAgICAgICAgaWYgKGlzc2V0KCRuZXctPmhlYWRlck5hbWVzWyRub3JtYWxpemVkXSkpIHsKICAgICAgICAgICAgJGhlYWRlciA9ICR0aGlzLT5oZWFkZXJOYW1lc1skbm9ybWFsaXplZF07CiAgICAgICAgICAgICRuZXctPmhlYWRlcnNbJGhlYWRlcl0gPSBhcnJheV9tZXJnZSgkdGhpcy0+aGVhZGVyc1skaGVhZGVyXSwgJHZhbHVlKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkbmV3LT5oZWFkZXJOYW1lc1skbm9ybWFsaXplZF0gPSAkaGVhZGVyOwogICAgICAgICAgICAkbmV3LT5oZWFkZXJzWyRoZWFkZXJdID0gJHZhbHVlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRuZXc7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhvdXRIZWFkZXIoJGhlYWRlcikKICAgIHsKICAgICAgICAkbm9ybWFsaXplZCA9IHN0cnRvbG93ZXIoJGhlYWRlcik7CgogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPmhlYWRlck5hbWVzWyRub3JtYWxpemVkXSkpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzOwogICAgICAgIH0KCiAgICAgICAgJGhlYWRlciA9ICR0aGlzLT5oZWFkZXJOYW1lc1skbm9ybWFsaXplZF07CgogICAgICAgICRuZXcgPSBjbG9uZSAkdGhpczsKICAgICAgICB1bnNldCgkbmV3LT5oZWFkZXJzWyRoZWFkZXJdLCAkbmV3LT5oZWFkZXJOYW1lc1skbm9ybWFsaXplZF0pOwoKICAgICAgICByZXR1cm4gJG5ldzsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Qm9keSgpCiAgICB7CiAgICAgICAgaWYgKCEkdGhpcy0+c3RyZWFtKSB7CiAgICAgICAgICAgICR0aGlzLT5zdHJlYW0gPSBzdHJlYW1fZm9yKCcnKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+c3RyZWFtOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoQm9keShTdHJlYW1JbnRlcmZhY2UgJGJvZHkpCiAgICB7CiAgICAgICAgaWYgKCRib2R5ID09PSAkdGhpcy0+c3RyZWFtKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpczsKICAgICAgICB9CgogICAgICAgICRuZXcgPSBjbG9uZSAkdGhpczsKICAgICAgICAkbmV3LT5zdHJlYW0gPSAkYm9keTsKICAgICAgICByZXR1cm4gJG5ldzsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIHNldEhlYWRlcnMoYXJyYXkgJGhlYWRlcnMpCiAgICB7CiAgICAgICAgJHRoaXMtPmhlYWRlck5hbWVzID0gJHRoaXMtPmhlYWRlcnMgPSBbXTsKICAgICAgICBmb3JlYWNoICgkaGVhZGVycyBhcyAkaGVhZGVyID0+ICR2YWx1ZSkgewogICAgICAgICAgICBpZiAoIWlzX2FycmF5KCR2YWx1ZSkpIHsKICAgICAgICAgICAgICAgICR2YWx1ZSA9IFskdmFsdWVdOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkdmFsdWUgPSAkdGhpcy0+dHJpbUhlYWRlclZhbHVlcygkdmFsdWUpOwogICAgICAgICAgICAkbm9ybWFsaXplZCA9IHN0cnRvbG93ZXIoJGhlYWRlcik7CiAgICAgICAgICAgIGlmIChpc3NldCgkdGhpcy0+aGVhZGVyTmFtZXNbJG5vcm1hbGl6ZWRdKSkgewogICAgICAgICAgICAgICAgJGhlYWRlciA9ICR0aGlzLT5oZWFkZXJOYW1lc1skbm9ybWFsaXplZF07CiAgICAgICAgICAgICAgICAkdGhpcy0+aGVhZGVyc1skaGVhZGVyXSA9IGFycmF5X21lcmdlKCR0aGlzLT5oZWFkZXJzWyRoZWFkZXJdLCAkdmFsdWUpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHRoaXMtPmhlYWRlck5hbWVzWyRub3JtYWxpemVkXSA9ICRoZWFkZXI7CiAgICAgICAgICAgICAgICAkdGhpcy0+aGVhZGVyc1skaGVhZGVyXSA9ICR2YWx1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFRyaW1zIHdoaXRlc3BhY2UgZnJvbSB0aGUgaGVhZGVyIHZhbHVlcy4KICAgICAqCiAgICAgKiBTcGFjZXMgYW5kIHRhYnMgb3VnaHQgdG8gYmUgZXhjbHVkZWQgYnkgcGFyc2VycyB3aGVuIGV4dHJhY3RpbmcgdGhlIGZpZWxkIHZhbHVlIGZyb20gYSBoZWFkZXIgZmllbGQuCiAgICAgKgogICAgICogaGVhZGVyLWZpZWxkID0gZmllbGQtbmFtZSAiOiIgT1dTIGZpZWxkLXZhbHVlIE9XUwogICAgICogT1dTICAgICAgICAgID0gKiggU1AgLyBIVEFCICkKICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nW10gJHZhbHVlcyBIZWFkZXIgdmFsdWVzCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmdbXSBUcmltbWVkIGhlYWRlciB2YWx1ZXMKICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4yLjQKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiB0cmltSGVhZGVyVmFsdWVzKGFycmF5ICR2YWx1ZXMpCiAgICB7CiAgICAgICAgcmV0dXJuIGFycmF5X21hcChmdW5jdGlvbiAoJHZhbHVlKSB7CiAgICAgICAgICAgIHJldHVybiB0cmltKCR2YWx1ZSwgIiBcdCIpOwogICAgICAgIH0sICR2YWx1ZXMpOwogICAgfQp9Cg==AppDevTools/query/vendor/guzzlehttp/psr7/src/MultipartStream.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBTdHJlYW0gdGhhdCB3aGVuIHJlYWQgcmV0dXJucyBieXRlcyBmb3IgYSBzdHJlYW1pbmcgbXVsdGlwYXJ0IG9yCiAqIG11bHRpcGFydC9mb3JtLWRhdGEgc3RyZWFtLgogKi8KY2xhc3MgTXVsdGlwYXJ0U3RyZWFtIGltcGxlbWVudHMgU3RyZWFtSW50ZXJmYWNlCnsKICAgIHVzZSBTdHJlYW1EZWNvcmF0b3JUcmFpdDsKCiAgICBwcml2YXRlICRib3VuZGFyeTsKCiAgICAvKioKICAgICAqIEBwYXJhbSBhcnJheSAgJGVsZW1lbnRzIEFycmF5IG9mIGFzc29jaWF0aXZlIGFycmF5cywgZWFjaCBjb250YWluaW5nIGEKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkICJuYW1lIiBrZXkgbWFwcGluZyB0byB0aGUgZm9ybSBmaWVsZCwKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsIGEgcmVxdWlyZWQgImNvbnRlbnRzIiBrZXkgbWFwcGluZyB0byBhCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBTdHJlYW1JbnRlcmZhY2UvcmVzb3VyY2Uvc3RyaW5nLCBhbiBvcHRpb25hbAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgImhlYWRlcnMiIGFzc29jaWF0aXZlIGFycmF5IG9mIGN1c3RvbSBoZWFkZXJzLAogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGFuIG9wdGlvbmFsICJmaWxlbmFtZSIga2V5IG1hcHBpbmcgdG8gYQogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nIHRvIHNlbmQgYXMgdGhlIGZpbGVuYW1lIGluIHRoZSBwYXJ0LgogICAgICogQHBhcmFtIHN0cmluZyAkYm91bmRhcnkgWW91IGNhbiBvcHRpb25hbGx5IHByb3ZpZGUgYSBzcGVjaWZpYyBib3VuZGFyeQogICAgICoKICAgICAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoYXJyYXkgJGVsZW1lbnRzID0gW10sICRib3VuZGFyeSA9IG51bGwpCiAgICB7CiAgICAgICAgJHRoaXMtPmJvdW5kYXJ5ID0gJGJvdW5kYXJ5ID86IHNoYTEodW5pcWlkKCcnLCB0cnVlKSk7CiAgICAgICAgJHRoaXMtPnN0cmVhbSA9ICR0aGlzLT5jcmVhdGVTdHJlYW0oJGVsZW1lbnRzKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgYm91bmRhcnkKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Qm91bmRhcnkoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Ym91bmRhcnk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzV3JpdGFibGUoKQogICAgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgaGVhZGVycyBuZWVkZWQgYmVmb3JlIHRyYW5zZmVycmluZyB0aGUgY29udGVudCBvZiBhIFBPU1QgZmlsZQogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldEhlYWRlcnMoYXJyYXkgJGhlYWRlcnMpCiAgICB7CiAgICAgICAgJHN0ciA9ICcnOwogICAgICAgIGZvcmVhY2ggKCRoZWFkZXJzIGFzICRrZXkgPT4gJHZhbHVlKSB7CiAgICAgICAgICAgICRzdHIgLj0gInska2V5fTogeyR2YWx1ZX1cclxuIjsKICAgICAgICB9CgogICAgICAgIHJldHVybiAiLS17JHRoaXMtPmJvdW5kYXJ5fVxyXG4iIC4gdHJpbSgkc3RyKSAuICJcclxuXHJcbiI7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgdGhlIGFnZ3JlZ2F0ZSBzdHJlYW0gdGhhdCB3aWxsIGJlIHVzZWQgdG8gdXBsb2FkIHRoZSBQT1NUIGRhdGEKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNyZWF0ZVN0cmVhbShhcnJheSAkZWxlbWVudHMpCiAgICB7CiAgICAgICAgJHN0cmVhbSA9IG5ldyBBcHBlbmRTdHJlYW0oKTsKCiAgICAgICAgZm9yZWFjaCAoJGVsZW1lbnRzIGFzICRlbGVtZW50KSB7CiAgICAgICAgICAgICR0aGlzLT5hZGRFbGVtZW50KCRzdHJlYW0sICRlbGVtZW50KTsKICAgICAgICB9CgogICAgICAgIC8vIEFkZCB0aGUgdHJhaWxpbmcgYm91bmRhcnkgd2l0aCBDUkxGCiAgICAgICAgJHN0cmVhbS0+YWRkU3RyZWFtKHN0cmVhbV9mb3IoIi0teyR0aGlzLT5ib3VuZGFyeX0tLVxyXG4iKSk7CgogICAgICAgIHJldHVybiAkc3RyZWFtOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gYWRkRWxlbWVudChBcHBlbmRTdHJlYW0gJHN0cmVhbSwgYXJyYXkgJGVsZW1lbnQpCiAgICB7CiAgICAgICAgZm9yZWFjaCAoWydjb250ZW50cycsICduYW1lJ10gYXMgJGtleSkgewogICAgICAgICAgICBpZiAoIWFycmF5X2tleV9leGlzdHMoJGtleSwgJGVsZW1lbnQpKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigiQSAneyRrZXl9JyBrZXkgaXMgcmVxdWlyZWQiKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJGVsZW1lbnRbJ2NvbnRlbnRzJ10gPSBzdHJlYW1fZm9yKCRlbGVtZW50Wydjb250ZW50cyddKTsKCiAgICAgICAgaWYgKGVtcHR5KCRlbGVtZW50WydmaWxlbmFtZSddKSkgewogICAgICAgICAgICAkdXJpID0gJGVsZW1lbnRbJ2NvbnRlbnRzJ10tPmdldE1ldGFkYXRhKCd1cmknKTsKICAgICAgICAgICAgaWYgKHN1YnN0cigkdXJpLCAwLCA2KSAhPT0gJ3BocDovLycpIHsKICAgICAgICAgICAgICAgICRlbGVtZW50WydmaWxlbmFtZSddID0gJHVyaTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgbGlzdCgkYm9keSwgJGhlYWRlcnMpID0gJHRoaXMtPmNyZWF0ZUVsZW1lbnQoCiAgICAgICAgICAgICRlbGVtZW50WyduYW1lJ10sCiAgICAgICAgICAgICRlbGVtZW50Wydjb250ZW50cyddLAogICAgICAgICAgICBpc3NldCgkZWxlbWVudFsnZmlsZW5hbWUnXSkgPyAkZWxlbWVudFsnZmlsZW5hbWUnXSA6IG51bGwsCiAgICAgICAgICAgIGlzc2V0KCRlbGVtZW50WydoZWFkZXJzJ10pID8gJGVsZW1lbnRbJ2hlYWRlcnMnXSA6IFtdCiAgICAgICAgKTsKCiAgICAgICAgJHN0cmVhbS0+YWRkU3RyZWFtKHN0cmVhbV9mb3IoJHRoaXMtPmdldEhlYWRlcnMoJGhlYWRlcnMpKSk7CiAgICAgICAgJHN0cmVhbS0+YWRkU3RyZWFtKCRib2R5KTsKICAgICAgICAkc3RyZWFtLT5hZGRTdHJlYW0oc3RyZWFtX2ZvcigiXHJcbiIpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBjcmVhdGVFbGVtZW50KCRuYW1lLCBTdHJlYW1JbnRlcmZhY2UgJHN0cmVhbSwgJGZpbGVuYW1lLCBhcnJheSAkaGVhZGVycykKICAgIHsKICAgICAgICAvLyBTZXQgYSBkZWZhdWx0IGNvbnRlbnQtZGlzcG9zaXRpb24gaGVhZGVyIGlmIG9uZSB3YXMgbm8gcHJvdmlkZWQKICAgICAgICAkZGlzcG9zaXRpb24gPSAkdGhpcy0+Z2V0SGVhZGVyKCRoZWFkZXJzLCAnY29udGVudC1kaXNwb3NpdGlvbicpOwogICAgICAgIGlmICghJGRpc3Bvc2l0aW9uKSB7CiAgICAgICAgICAgICRoZWFkZXJzWydDb250ZW50LURpc3Bvc2l0aW9uJ10gPSAoJGZpbGVuYW1lID09PSAnMCcgfHwgJGZpbGVuYW1lKQogICAgICAgICAgICAgICAgPyBzcHJpbnRmKCdmb3JtLWRhdGE7IG5hbWU9IiVzIjsgZmlsZW5hbWU9IiVzIicsCiAgICAgICAgICAgICAgICAgICAgJG5hbWUsCiAgICAgICAgICAgICAgICAgICAgYmFzZW5hbWUoJGZpbGVuYW1lKSkKICAgICAgICAgICAgICAgIDogImZvcm0tZGF0YTsgbmFtZT1cInskbmFtZX1cIiI7CiAgICAgICAgfQoKICAgICAgICAvLyBTZXQgYSBkZWZhdWx0IGNvbnRlbnQtbGVuZ3RoIGhlYWRlciBpZiBvbmUgd2FzIG5vIHByb3ZpZGVkCiAgICAgICAgJGxlbmd0aCA9ICR0aGlzLT5nZXRIZWFkZXIoJGhlYWRlcnMsICdjb250ZW50LWxlbmd0aCcpOwogICAgICAgIGlmICghJGxlbmd0aCkgewogICAgICAgICAgICBpZiAoJGxlbmd0aCA9ICRzdHJlYW0tPmdldFNpemUoKSkgewogICAgICAgICAgICAgICAgJGhlYWRlcnNbJ0NvbnRlbnQtTGVuZ3RoJ10gPSAoc3RyaW5nKSAkbGVuZ3RoOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBTZXQgYSBkZWZhdWx0IENvbnRlbnQtVHlwZSBpZiBvbmUgd2FzIG5vdCBzdXBwbGllZAogICAgICAgICR0eXBlID0gJHRoaXMtPmdldEhlYWRlcigkaGVhZGVycywgJ2NvbnRlbnQtdHlwZScpOwogICAgICAgIGlmICghJHR5cGUgJiYgKCRmaWxlbmFtZSA9PT0gJzAnIHx8ICRmaWxlbmFtZSkpIHsKICAgICAgICAgICAgaWYgKCR0eXBlID0gbWltZXR5cGVfZnJvbV9maWxlbmFtZSgkZmlsZW5hbWUpKSB7CiAgICAgICAgICAgICAgICAkaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSAkdHlwZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIFskc3RyZWFtLCAkaGVhZGVyc107CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRIZWFkZXIoYXJyYXkgJGhlYWRlcnMsICRrZXkpCiAgICB7CiAgICAgICAgJGxvd2VyY2FzZUhlYWRlciA9IHN0cnRvbG93ZXIoJGtleSk7CiAgICAgICAgZm9yZWFjaCAoJGhlYWRlcnMgYXMgJGsgPT4gJHYpIHsKICAgICAgICAgICAgaWYgKHN0cnRvbG93ZXIoJGspID09PSAkbG93ZXJjYXNlSGVhZGVyKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJHY7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBudWxsOwogICAgfQp9Cg==AppDevTools/query/vendor/guzzlehttp/psr7/src/NoSeekStream.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBTdHJlYW0gZGVjb3JhdG9yIHRoYXQgcHJldmVudHMgYSBzdHJlYW0gZnJvbSBiZWluZyBzZWVrZWQKICovCmNsYXNzIE5vU2Vla1N0cmVhbSBpbXBsZW1lbnRzIFN0cmVhbUludGVyZmFjZQp7CiAgICB1c2UgU3RyZWFtRGVjb3JhdG9yVHJhaXQ7CgogICAgcHVibGljIGZ1bmN0aW9uIHNlZWsoJG9mZnNldCwgJHdoZW5jZSA9IFNFRUtfU0VUKQogICAgewogICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignQ2Fubm90IHNlZWsgYSBOb1NlZWtTdHJlYW0nKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNTZWVrYWJsZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQp9Cg==AppDevTools/query/vendor/guzzlehttp/psr7/src/PumpStream.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBQcm92aWRlcyBhIHJlYWQgb25seSBzdHJlYW0gdGhhdCBwdW1wcyBkYXRhIGZyb20gYSBQSFAgY2FsbGFibGUuCiAqCiAqIFdoZW4gaW52b2tpbmcgdGhlIHByb3ZpZGVkIGNhbGxhYmxlLCB0aGUgUHVtcFN0cmVhbSB3aWxsIHBhc3MgdGhlIGFtb3VudCBvZgogKiBkYXRhIHJlcXVlc3RlZCB0byByZWFkIHRvIHRoZSBjYWxsYWJsZS4gVGhlIGNhbGxhYmxlIGNhbiBjaG9vc2UgdG8gaWdub3JlCiAqIHRoaXMgdmFsdWUgYW5kIHJldHVybiBmZXdlciBvciBtb3JlIGJ5dGVzIHRoYW4gcmVxdWVzdGVkLiBBbnkgZXh0cmEgZGF0YQogKiByZXR1cm5lZCBieSB0aGUgcHJvdmlkZWQgY2FsbGFibGUgaXMgYnVmZmVyZWQgaW50ZXJuYWxseSB1bnRpbCBkcmFpbmVkIHVzaW5nCiAqIHRoZSByZWFkKCkgZnVuY3Rpb24gb2YgdGhlIFB1bXBTdHJlYW0uIFRoZSBwcm92aWRlZCBjYWxsYWJsZSBNVVNUIHJldHVybgogKiBmYWxzZSB3aGVuIHRoZXJlIGlzIG5vIG1vcmUgZGF0YSB0byByZWFkLgogKi8KY2xhc3MgUHVtcFN0cmVhbSBpbXBsZW1lbnRzIFN0cmVhbUludGVyZmFjZQp7CiAgICAvKiogQHZhciBjYWxsYWJsZSAqLwogICAgcHJpdmF0ZSAkc291cmNlOwoKICAgIC8qKiBAdmFyIGludCAqLwogICAgcHJpdmF0ZSAkc2l6ZTsKCiAgICAvKiogQHZhciBpbnQgKi8KICAgIHByaXZhdGUgJHRlbGxQb3MgPSAwOwoKICAgIC8qKiBAdmFyIGFycmF5ICovCiAgICBwcml2YXRlICRtZXRhZGF0YTsKCiAgICAvKiogQHZhciBCdWZmZXJTdHJlYW0gKi8KICAgIHByaXZhdGUgJGJ1ZmZlcjsKCiAgICAvKioKICAgICAqIEBwYXJhbSBjYWxsYWJsZSAkc291cmNlIFNvdXJjZSBvZiB0aGUgc3RyZWFtIGRhdGEuIFRoZSBjYWxsYWJsZSBNQVkKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdCBhbiBpbnRlZ2VyIGFyZ3VtZW50IHVzZWQgdG8gY29udHJvbCB0aGUKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgIGFtb3VudCBvZiBkYXRhIHRvIHJldHVybi4gVGhlIGNhbGxhYmxlIE1VU1QKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhIHN0cmluZyB3aGVuIGNhbGxlZCwgb3IgZmFsc2Ugb24gZXJyb3IKICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgIG9yIEVPRi4KICAgICAqIEBwYXJhbSBhcnJheSAkb3B0aW9ucyAgIFN0cmVhbSBvcHRpb25zOgogICAgICogICAgICAgICAgICAgICAgICAgICAgICAgLSBtZXRhZGF0YTogSGFzaCBvZiBtZXRhZGF0YSB0byB1c2Ugd2l0aCBzdHJlYW0uCiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAtIHNpemU6IFNpemUgb2YgdGhlIHN0cmVhbSwgaWYga25vd24uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChjYWxsYWJsZSAkc291cmNlLCBhcnJheSAkb3B0aW9ucyA9IFtdKQogICAgewogICAgICAgICR0aGlzLT5zb3VyY2UgPSAkc291cmNlOwogICAgICAgICR0aGlzLT5zaXplID0gaXNzZXQoJG9wdGlvbnNbJ3NpemUnXSkgPyAkb3B0aW9uc1snc2l6ZSddIDogbnVsbDsKICAgICAgICAkdGhpcy0+bWV0YWRhdGEgPSBpc3NldCgkb3B0aW9uc1snbWV0YWRhdGEnXSkgPyAkb3B0aW9uc1snbWV0YWRhdGEnXSA6IFtdOwogICAgICAgICR0aGlzLT5idWZmZXIgPSBuZXcgQnVmZmVyU3RyZWFtKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKQogICAgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHJldHVybiBjb3B5X3RvX3N0cmluZygkdGhpcyk7CiAgICAgICAgfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBjbG9zZSgpCiAgICB7CiAgICAgICAgJHRoaXMtPmRldGFjaCgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBkZXRhY2goKQogICAgewogICAgICAgICR0aGlzLT50ZWxsUG9zID0gZmFsc2U7CiAgICAgICAgJHRoaXMtPnNvdXJjZSA9IG51bGw7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFNpemUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+c2l6ZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVsbCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT50ZWxsUG9zOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBlb2YoKQogICAgewogICAgICAgIHJldHVybiAhJHRoaXMtPnNvdXJjZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNTZWVrYWJsZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZXdpbmQoKQogICAgewogICAgICAgICR0aGlzLT5zZWVrKDApOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZWVrKCRvZmZzZXQsICR3aGVuY2UgPSBTRUVLX1NFVCkKICAgIHsKICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0Nhbm5vdCBzZWVrIGEgUHVtcFN0cmVhbScpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBpc1dyaXRhYmxlKCkKICAgIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHdyaXRlKCRzdHJpbmcpCiAgICB7CiAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdDYW5ub3Qgd3JpdGUgdG8gYSBQdW1wU3RyZWFtJyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGlzUmVhZGFibGUoKQogICAgewogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZWFkKCRsZW5ndGgpCiAgICB7CiAgICAgICAgJGRhdGEgPSAkdGhpcy0+YnVmZmVyLT5yZWFkKCRsZW5ndGgpOwogICAgICAgICRyZWFkTGVuID0gc3RybGVuKCRkYXRhKTsKICAgICAgICAkdGhpcy0+dGVsbFBvcyArPSAkcmVhZExlbjsKICAgICAgICAkcmVtYWluaW5nID0gJGxlbmd0aCAtICRyZWFkTGVuOwoKICAgICAgICBpZiAoJHJlbWFpbmluZykgewogICAgICAgICAgICAkdGhpcy0+cHVtcCgkcmVtYWluaW5nKTsKICAgICAgICAgICAgJGRhdGEgLj0gJHRoaXMtPmJ1ZmZlci0+cmVhZCgkcmVtYWluaW5nKTsKICAgICAgICAgICAgJHRoaXMtPnRlbGxQb3MgKz0gc3RybGVuKCRkYXRhKSAtICRyZWFkTGVuOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRkYXRhOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb250ZW50cygpCiAgICB7CiAgICAgICAgJHJlc3VsdCA9ICcnOwogICAgICAgIHdoaWxlICghJHRoaXMtPmVvZigpKSB7CiAgICAgICAgICAgICRyZXN1bHQgLj0gJHRoaXMtPnJlYWQoMTAwMDAwMCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TWV0YWRhdGEoJGtleSA9IG51bGwpCiAgICB7CiAgICAgICAgaWYgKCEka2V5KSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+bWV0YWRhdGE7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaXNzZXQoJHRoaXMtPm1ldGFkYXRhWyRrZXldKSA/ICR0aGlzLT5tZXRhZGF0YVska2V5XSA6IG51bGw7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBwdW1wKCRsZW5ndGgpCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5zb3VyY2UpIHsKICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgJGRhdGEgPSBjYWxsX3VzZXJfZnVuYygkdGhpcy0+c291cmNlLCAkbGVuZ3RoKTsKICAgICAgICAgICAgICAgIGlmICgkZGF0YSA9PT0gZmFsc2UgfHwgJGRhdGEgPT09IG51bGwpIHsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+c291cmNlID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkdGhpcy0+YnVmZmVyLT53cml0ZSgkZGF0YSk7CiAgICAgICAgICAgICAgICAkbGVuZ3RoIC09IHN0cmxlbigkZGF0YSk7CiAgICAgICAgICAgIH0gd2hpbGUgKCRsZW5ndGggPiAwKTsKICAgICAgICB9CiAgICB9Cn0KAppDevTools/query/vendor/guzzlehttp/psr7/src/Request.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb247CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcVXJpSW50ZXJmYWNlOwoKLyoqCiAqIFBTUi03IHJlcXVlc3QgaW1wbGVtZW50YXRpb24uCiAqLwpjbGFzcyBSZXF1ZXN0IGltcGxlbWVudHMgUmVxdWVzdEludGVyZmFjZQp7CiAgICB1c2UgTWVzc2FnZVRyYWl0OwoKICAgIC8qKiBAdmFyIHN0cmluZyAqLwogICAgcHJpdmF0ZSAkbWV0aG9kOwoKICAgIC8qKiBAdmFyIG51bGx8c3RyaW5nICovCiAgICBwcml2YXRlICRyZXF1ZXN0VGFyZ2V0OwoKICAgIC8qKiBAdmFyIFVyaUludGVyZmFjZSAqLwogICAgcHJpdmF0ZSAkdXJpOwoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbWV0aG9kICBIVFRQIG1ldGhvZAogICAgICogQHBhcmFtIHN0cmluZ3xVcmlJbnRlcmZhY2UgICAgICAgICAgICAgICAgICAkdXJpICAgICBVUkkKICAgICAqIEBwYXJhbSBhcnJheSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGhlYWRlcnMgUmVxdWVzdCBoZWFkZXJzCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGx8cmVzb3VyY2V8U3RyZWFtSW50ZXJmYWNlICRib2R5ICAgIFJlcXVlc3QgYm9keQogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdmVyc2lvbiBQcm90b2NvbCB2ZXJzaW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgKICAgICAgICAkbWV0aG9kLAogICAgICAgICR1cmksCiAgICAgICAgYXJyYXkgJGhlYWRlcnMgPSBbXSwKICAgICAgICAkYm9keSA9IG51bGwsCiAgICAgICAgJHZlcnNpb24gPSAnMS4xJwogICAgKSB7CiAgICAgICAgaWYgKCEoJHVyaSBpbnN0YW5jZW9mIFVyaUludGVyZmFjZSkpIHsKICAgICAgICAgICAgJHVyaSA9IG5ldyBVcmkoJHVyaSk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+bWV0aG9kID0gc3RydG91cHBlcigkbWV0aG9kKTsKICAgICAgICAkdGhpcy0+dXJpID0gJHVyaTsKICAgICAgICAkdGhpcy0+c2V0SGVhZGVycygkaGVhZGVycyk7CiAgICAgICAgJHRoaXMtPnByb3RvY29sID0gJHZlcnNpb247CgogICAgICAgIGlmICghJHRoaXMtPmhhc0hlYWRlcignSG9zdCcpKSB7CiAgICAgICAgICAgICR0aGlzLT51cGRhdGVIb3N0RnJvbVVyaSgpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRib2R5ICE9PSAnJyAmJiAkYm9keSAhPT0gbnVsbCkgewogICAgICAgICAgICAkdGhpcy0+c3RyZWFtID0gc3RyZWFtX2ZvcigkYm9keSk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRSZXF1ZXN0VGFyZ2V0KCkKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPnJlcXVlc3RUYXJnZXQgIT09IG51bGwpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5yZXF1ZXN0VGFyZ2V0OwogICAgICAgIH0KCiAgICAgICAgJHRhcmdldCA9ICR0aGlzLT51cmktPmdldFBhdGgoKTsKICAgICAgICBpZiAoJHRhcmdldCA9PSAnJykgewogICAgICAgICAgICAkdGFyZ2V0ID0gJy8nOwogICAgICAgIH0KICAgICAgICBpZiAoJHRoaXMtPnVyaS0+Z2V0UXVlcnkoKSAhPSAnJykgewogICAgICAgICAgICAkdGFyZ2V0IC49ICc/JyAuICR0aGlzLT51cmktPmdldFF1ZXJ5KCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRhcmdldDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aFJlcXVlc3RUYXJnZXQoJHJlcXVlc3RUYXJnZXQpCiAgICB7CiAgICAgICAgaWYgKHByZWdfbWF0Y2goJyNccyMnLCAkcmVxdWVzdFRhcmdldCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdJbnZhbGlkIHJlcXVlc3QgdGFyZ2V0IHByb3ZpZGVkOyBjYW5ub3QgY29udGFpbiB3aGl0ZXNwYWNlJwogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgJG5ldyA9IGNsb25lICR0aGlzOwogICAgICAgICRuZXctPnJlcXVlc3RUYXJnZXQgPSAkcmVxdWVzdFRhcmdldDsKICAgICAgICByZXR1cm4gJG5ldzsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TWV0aG9kKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm1ldGhvZDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aE1ldGhvZCgkbWV0aG9kKQogICAgewogICAgICAgICRuZXcgPSBjbG9uZSAkdGhpczsKICAgICAgICAkbmV3LT5tZXRob2QgPSBzdHJ0b3VwcGVyKCRtZXRob2QpOwogICAgICAgIHJldHVybiAkbmV3OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRVcmkoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dXJpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoVXJpKFVyaUludGVyZmFjZSAkdXJpLCAkcHJlc2VydmVIb3N0ID0gZmFsc2UpCiAgICB7CiAgICAgICAgaWYgKCR1cmkgPT09ICR0aGlzLT51cmkpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzOwogICAgICAgIH0KCiAgICAgICAgJG5ldyA9IGNsb25lICR0aGlzOwogICAgICAgICRuZXctPnVyaSA9ICR1cmk7CgogICAgICAgIGlmICghJHByZXNlcnZlSG9zdCkgewogICAgICAgICAgICAkbmV3LT51cGRhdGVIb3N0RnJvbVVyaSgpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRuZXc7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiB1cGRhdGVIb3N0RnJvbVVyaSgpCiAgICB7CiAgICAgICAgJGhvc3QgPSAkdGhpcy0+dXJpLT5nZXRIb3N0KCk7CgogICAgICAgIGlmICgkaG9zdCA9PSAnJykgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBpZiAoKCRwb3J0ID0gJHRoaXMtPnVyaS0+Z2V0UG9ydCgpKSAhPT0gbnVsbCkgewogICAgICAgICAgICAkaG9zdCAuPSAnOicgLiAkcG9ydDsKICAgICAgICB9CgogICAgICAgIGlmIChpc3NldCgkdGhpcy0+aGVhZGVyTmFtZXNbJ2hvc3QnXSkpIHsKICAgICAgICAgICAgJGhlYWRlciA9ICR0aGlzLT5oZWFkZXJOYW1lc1snaG9zdCddOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRoZWFkZXIgPSAnSG9zdCc7CiAgICAgICAgICAgICR0aGlzLT5oZWFkZXJOYW1lc1snaG9zdCddID0gJ0hvc3QnOwogICAgICAgIH0KICAgICAgICAvLyBFbnN1cmUgSG9zdCBpcyB0aGUgZmlyc3QgaGVhZGVyLgogICAgICAgIC8vIFNlZTogaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMCNzZWN0aW9uLTUuNAogICAgICAgICR0aGlzLT5oZWFkZXJzID0gWyRoZWFkZXIgPT4gWyRob3N0XV0gKyAkdGhpcy0+aGVhZGVyczsKICAgIH0KfQo=AppDevTools/query/vendor/guzzlehttp/psr7/src/Response.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlc3BvbnNlSW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxTdHJlYW1JbnRlcmZhY2U7CgovKioKICogUFNSLTcgcmVzcG9uc2UgaW1wbGVtZW50YXRpb24uCiAqLwpjbGFzcyBSZXNwb25zZSBpbXBsZW1lbnRzIFJlc3BvbnNlSW50ZXJmYWNlCnsKICAgIHVzZSBNZXNzYWdlVHJhaXQ7CgogICAgLyoqIEB2YXIgYXJyYXkgTWFwIG9mIHN0YW5kYXJkIEhUVFAgc3RhdHVzIGNvZGUvcmVhc29uIHBocmFzZXMgKi8KICAgIHByaXZhdGUgc3RhdGljICRwaHJhc2VzID0gWwogICAgICAgIDEwMCA9PiAnQ29udGludWUnLAogICAgICAgIDEwMSA9PiAnU3dpdGNoaW5nIFByb3RvY29scycsCiAgICAgICAgMTAyID0+ICdQcm9jZXNzaW5nJywKICAgICAgICAyMDAgPT4gJ09LJywKICAgICAgICAyMDEgPT4gJ0NyZWF0ZWQnLAogICAgICAgIDIwMiA9PiAnQWNjZXB0ZWQnLAogICAgICAgIDIwMyA9PiAnTm9uLUF1dGhvcml0YXRpdmUgSW5mb3JtYXRpb24nLAogICAgICAgIDIwNCA9PiAnTm8gQ29udGVudCcsCiAgICAgICAgMjA1ID0+ICdSZXNldCBDb250ZW50JywKICAgICAgICAyMDYgPT4gJ1BhcnRpYWwgQ29udGVudCcsCiAgICAgICAgMjA3ID0+ICdNdWx0aS1zdGF0dXMnLAogICAgICAgIDIwOCA9PiAnQWxyZWFkeSBSZXBvcnRlZCcsCiAgICAgICAgMzAwID0+ICdNdWx0aXBsZSBDaG9pY2VzJywKICAgICAgICAzMDEgPT4gJ01vdmVkIFBlcm1hbmVudGx5JywKICAgICAgICAzMDIgPT4gJ0ZvdW5kJywKICAgICAgICAzMDMgPT4gJ1NlZSBPdGhlcicsCiAgICAgICAgMzA0ID0+ICdOb3QgTW9kaWZpZWQnLAogICAgICAgIDMwNSA9PiAnVXNlIFByb3h5JywKICAgICAgICAzMDYgPT4gJ1N3aXRjaCBQcm94eScsCiAgICAgICAgMzA3ID0+ICdUZW1wb3JhcnkgUmVkaXJlY3QnLAogICAgICAgIDQwMCA9PiAnQmFkIFJlcXVlc3QnLAogICAgICAgIDQwMSA9PiAnVW5hdXRob3JpemVkJywKICAgICAgICA0MDIgPT4gJ1BheW1lbnQgUmVxdWlyZWQnLAogICAgICAgIDQwMyA9PiAnRm9yYmlkZGVuJywKICAgICAgICA0MDQgPT4gJ05vdCBGb3VuZCcsCiAgICAgICAgNDA1ID0+ICdNZXRob2QgTm90IEFsbG93ZWQnLAogICAgICAgIDQwNiA9PiAnTm90IEFjY2VwdGFibGUnLAogICAgICAgIDQwNyA9PiAnUHJveHkgQXV0aGVudGljYXRpb24gUmVxdWlyZWQnLAogICAgICAgIDQwOCA9PiAnUmVxdWVzdCBUaW1lLW91dCcsCiAgICAgICAgNDA5ID0+ICdDb25mbGljdCcsCiAgICAgICAgNDEwID0+ICdHb25lJywKICAgICAgICA0MTEgPT4gJ0xlbmd0aCBSZXF1aXJlZCcsCiAgICAgICAgNDEyID0+ICdQcmVjb25kaXRpb24gRmFpbGVkJywKICAgICAgICA0MTMgPT4gJ1JlcXVlc3QgRW50aXR5IFRvbyBMYXJnZScsCiAgICAgICAgNDE0ID0+ICdSZXF1ZXN0LVVSSSBUb28gTGFyZ2UnLAogICAgICAgIDQxNSA9PiAnVW5zdXBwb3J0ZWQgTWVkaWEgVHlwZScsCiAgICAgICAgNDE2ID0+ICdSZXF1ZXN0ZWQgcmFuZ2Ugbm90IHNhdGlzZmlhYmxlJywKICAgICAgICA0MTcgPT4gJ0V4cGVjdGF0aW9uIEZhaWxlZCcsCiAgICAgICAgNDE4ID0+ICdJXCdtIGEgdGVhcG90JywKICAgICAgICA0MjIgPT4gJ1VucHJvY2Vzc2FibGUgRW50aXR5JywKICAgICAgICA0MjMgPT4gJ0xvY2tlZCcsCiAgICAgICAgNDI0ID0+ICdGYWlsZWQgRGVwZW5kZW5jeScsCiAgICAgICAgNDI1ID0+ICdVbm9yZGVyZWQgQ29sbGVjdGlvbicsCiAgICAgICAgNDI2ID0+ICdVcGdyYWRlIFJlcXVpcmVkJywKICAgICAgICA0MjggPT4gJ1ByZWNvbmRpdGlvbiBSZXF1aXJlZCcsCiAgICAgICAgNDI5ID0+ICdUb28gTWFueSBSZXF1ZXN0cycsCiAgICAgICAgNDMxID0+ICdSZXF1ZXN0IEhlYWRlciBGaWVsZHMgVG9vIExhcmdlJywKICAgICAgICA0NTEgPT4gJ1VuYXZhaWxhYmxlIEZvciBMZWdhbCBSZWFzb25zJywKICAgICAgICA1MDAgPT4gJ0ludGVybmFsIFNlcnZlciBFcnJvcicsCiAgICAgICAgNTAxID0+ICdOb3QgSW1wbGVtZW50ZWQnLAogICAgICAgIDUwMiA9PiAnQmFkIEdhdGV3YXknLAogICAgICAgIDUwMyA9PiAnU2VydmljZSBVbmF2YWlsYWJsZScsCiAgICAgICAgNTA0ID0+ICdHYXRld2F5IFRpbWUtb3V0JywKICAgICAgICA1MDUgPT4gJ0hUVFAgVmVyc2lvbiBub3Qgc3VwcG9ydGVkJywKICAgICAgICA1MDYgPT4gJ1ZhcmlhbnQgQWxzbyBOZWdvdGlhdGVzJywKICAgICAgICA1MDcgPT4gJ0luc3VmZmljaWVudCBTdG9yYWdlJywKICAgICAgICA1MDggPT4gJ0xvb3AgRGV0ZWN0ZWQnLAogICAgICAgIDUxMSA9PiAnTmV0d29yayBBdXRoZW50aWNhdGlvbiBSZXF1aXJlZCcsCiAgICBdOwoKICAgIC8qKiBAdmFyIHN0cmluZyAqLwogICAgcHJpdmF0ZSAkcmVhc29uUGhyYXNlID0gJyc7CgogICAgLyoqIEB2YXIgaW50ICovCiAgICBwcml2YXRlICRzdGF0dXNDb2RlID0gMjAwOwoKICAgIC8qKgogICAgICogQHBhcmFtIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3RhdHVzICBTdGF0dXMgY29kZQogICAgICogQHBhcmFtIGFycmF5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaGVhZGVycyBSZXNwb25zZSBoZWFkZXJzCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGx8cmVzb3VyY2V8U3RyZWFtSW50ZXJmYWNlICRib2R5ICAgIFJlc3BvbnNlIGJvZHkKICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHZlcnNpb24gUHJvdG9jb2wgdmVyc2lvbgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICAgICAgICAgICAgICAgICAgICAgICAgICAkcmVhc29uICBSZWFzb24gcGhyYXNlICh3aGVuIGVtcHR5IGEgZGVmYXVsdCB3aWxsIGJlIHVzZWQgYmFzZWQgb24gdGhlIHN0YXR1cyBjb2RlKQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgJHN0YXR1cyA9IDIwMCwKICAgICAgICBhcnJheSAkaGVhZGVycyA9IFtdLAogICAgICAgICRib2R5ID0gbnVsbCwKICAgICAgICAkdmVyc2lvbiA9ICcxLjEnLAogICAgICAgICRyZWFzb24gPSBudWxsCiAgICApIHsKICAgICAgICAkdGhpcy0+c3RhdHVzQ29kZSA9IChpbnQpICRzdGF0dXM7CgogICAgICAgIGlmICgkYm9keSAhPT0gJycgJiYgJGJvZHkgIT09IG51bGwpIHsKICAgICAgICAgICAgJHRoaXMtPnN0cmVhbSA9IHN0cmVhbV9mb3IoJGJvZHkpOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPnNldEhlYWRlcnMoJGhlYWRlcnMpOwogICAgICAgIGlmICgkcmVhc29uID09ICcnICYmIGlzc2V0KHNlbGY6OiRwaHJhc2VzWyR0aGlzLT5zdGF0dXNDb2RlXSkpIHsKICAgICAgICAgICAgJHRoaXMtPnJlYXNvblBocmFzZSA9IHNlbGY6OiRwaHJhc2VzWyR0aGlzLT5zdGF0dXNDb2RlXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkdGhpcy0+cmVhc29uUGhyYXNlID0gKHN0cmluZykgJHJlYXNvbjsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5wcm90b2NvbCA9ICR2ZXJzaW9uOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTdGF0dXNDb2RlKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnN0YXR1c0NvZGU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFJlYXNvblBocmFzZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5yZWFzb25QaHJhc2U7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhTdGF0dXMoJGNvZGUsICRyZWFzb25QaHJhc2UgPSAnJykKICAgIHsKICAgICAgICAkbmV3ID0gY2xvbmUgJHRoaXM7CiAgICAgICAgJG5ldy0+c3RhdHVzQ29kZSA9IChpbnQpICRjb2RlOwogICAgICAgIGlmICgkcmVhc29uUGhyYXNlID09ICcnICYmIGlzc2V0KHNlbGY6OiRwaHJhc2VzWyRuZXctPnN0YXR1c0NvZGVdKSkgewogICAgICAgICAgICAkcmVhc29uUGhyYXNlID0gc2VsZjo6JHBocmFzZXNbJG5ldy0+c3RhdHVzQ29kZV07CiAgICAgICAgfQogICAgICAgICRuZXctPnJlYXNvblBocmFzZSA9ICRyZWFzb25QaHJhc2U7CiAgICAgICAgcmV0dXJuICRuZXc7CiAgICB9Cn0KAppDevTools/query/vendor/guzzlehttp/psr7/src/ServerRequest.phpPD9waHAKCm5hbWVzcGFjZSBHdXp6bGVIdHRwXFBzcjc7Cgp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxTZXJ2ZXJSZXF1ZXN0SW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxVcmlJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcVXBsb2FkZWRGaWxlSW50ZXJmYWNlOwoKLyoqCiAqIFNlcnZlci1zaWRlIEhUVFAgcmVxdWVzdAogKgogKiBFeHRlbmRzIHRoZSBSZXF1ZXN0IGRlZmluaXRpb24gdG8gYWRkIG1ldGhvZHMgZm9yIGFjY2Vzc2luZyBpbmNvbWluZyBkYXRhLAogKiBzcGVjaWZpY2FsbHkgc2VydmVyIHBhcmFtZXRlcnMsIGNvb2tpZXMsIG1hdGNoZWQgcGF0aCBwYXJhbWV0ZXJzLCBxdWVyeQogKiBzdHJpbmcgYXJndW1lbnRzLCBib2R5IHBhcmFtZXRlcnMsIGFuZCB1cGxvYWQgZmlsZSBpbmZvcm1hdGlvbi4KICoKICogIkF0dHJpYnV0ZXMiIGFyZSBkaXNjb3ZlcmVkIHZpYSBkZWNvbXBvc2luZyB0aGUgcmVxdWVzdCAoYW5kIHVzdWFsbHkKICogc3BlY2lmaWNhbGx5IHRoZSBVUkkgcGF0aCksIGFuZCB0eXBpY2FsbHkgd2lsbCBiZSBpbmplY3RlZCBieSB0aGUgYXBwbGljYXRpb24uCiAqCiAqIFJlcXVlc3RzIGFyZSBjb25zaWRlcmVkIGltbXV0YWJsZTsgYWxsIG1ldGhvZHMgdGhhdCBtaWdodCBjaGFuZ2Ugc3RhdGUgYXJlCiAqIGltcGxlbWVudGVkIHN1Y2ggdGhhdCB0aGV5IHJldGFpbiB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIGN1cnJlbnQKICogbWVzc2FnZSBhbmQgcmV0dXJuIGEgbmV3IGluc3RhbmNlIHRoYXQgY29udGFpbnMgdGhlIGNoYW5nZWQgc3RhdGUuCiAqLwpjbGFzcyBTZXJ2ZXJSZXF1ZXN0IGV4dGVuZHMgUmVxdWVzdCBpbXBsZW1lbnRzIFNlcnZlclJlcXVlc3RJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHByaXZhdGUgJGF0dHJpYnV0ZXMgPSBbXTsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHJpdmF0ZSAkY29va2llUGFyYW1zID0gW107CgogICAgLyoqCiAgICAgKiBAdmFyIG51bGx8YXJyYXl8b2JqZWN0CiAgICAgKi8KICAgIHByaXZhdGUgJHBhcnNlZEJvZHk7CgogICAgLyoqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHByaXZhdGUgJHF1ZXJ5UGFyYW1zID0gW107CgogICAgLyoqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHByaXZhdGUgJHNlcnZlclBhcmFtczsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHJpdmF0ZSAkdXBsb2FkZWRGaWxlcyA9IFtdOwoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbWV0aG9kICAgICAgIEhUVFAgbWV0aG9kCiAgICAgKiBAcGFyYW0gc3RyaW5nfFVyaUludGVyZmFjZSAgICAgICAgICAgICAgICAgICR1cmkgICAgICAgICAgVVJJCiAgICAgKiBAcGFyYW0gYXJyYXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRoZWFkZXJzICAgICAgUmVxdWVzdCBoZWFkZXJzCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGx8cmVzb3VyY2V8U3RyZWFtSW50ZXJmYWNlICRib2R5ICAgICAgICAgUmVxdWVzdCBib2R5CiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR2ZXJzaW9uICAgICAgUHJvdG9jb2wgdmVyc2lvbgogICAgICogQHBhcmFtIGFycmF5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2VydmVyUGFyYW1zIFR5cGljYWxseSB0aGUgJF9TRVJWRVIgc3VwZXJnbG9iYWwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KAogICAgICAgICRtZXRob2QsCiAgICAgICAgJHVyaSwKICAgICAgICBhcnJheSAkaGVhZGVycyA9IFtdLAogICAgICAgICRib2R5ID0gbnVsbCwKICAgICAgICAkdmVyc2lvbiA9ICcxLjEnLAogICAgICAgIGFycmF5ICRzZXJ2ZXJQYXJhbXMgPSBbXQogICAgKSB7CiAgICAgICAgJHRoaXMtPnNlcnZlclBhcmFtcyA9ICRzZXJ2ZXJQYXJhbXM7CgogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJG1ldGhvZCwgJHVyaSwgJGhlYWRlcnMsICRib2R5LCAkdmVyc2lvbik7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYW4gVXBsb2FkZWRGaWxlIGluc3RhbmNlIGFycmF5LgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkZmlsZXMgQSBhcnJheSB3aGljaCByZXNwZWN0ICRfRklMRVMgc3RydWN0dXJlCiAgICAgKiBAdGhyb3dzIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3IgdW5yZWNvZ25pemVkIHZhbHVlcwogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG5vcm1hbGl6ZUZpbGVzKGFycmF5ICRmaWxlcykKICAgIHsKICAgICAgICAkbm9ybWFsaXplZCA9IFtdOwoKICAgICAgICBmb3JlYWNoICgkZmlsZXMgYXMgJGtleSA9PiAkdmFsdWUpIHsKICAgICAgICAgICAgaWYgKCR2YWx1ZSBpbnN0YW5jZW9mIFVwbG9hZGVkRmlsZUludGVyZmFjZSkgewogICAgICAgICAgICAgICAgJG5vcm1hbGl6ZWRbJGtleV0gPSAkdmFsdWU7CiAgICAgICAgICAgIH0gZWxzZWlmIChpc19hcnJheSgkdmFsdWUpICYmIGlzc2V0KCR2YWx1ZVsndG1wX25hbWUnXSkpIHsKICAgICAgICAgICAgICAgICRub3JtYWxpemVkWyRrZXldID0gc2VsZjo6Y3JlYXRlVXBsb2FkZWRGaWxlRnJvbVNwZWMoJHZhbHVlKTsKICAgICAgICAgICAgfSBlbHNlaWYgKGlzX2FycmF5KCR2YWx1ZSkpIHsKICAgICAgICAgICAgICAgICRub3JtYWxpemVkWyRrZXldID0gc2VsZjo6bm9ybWFsaXplRmlsZXMoJHZhbHVlKTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCB2YWx1ZSBpbiBmaWxlcyBzcGVjaWZpY2F0aW9uJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkbm9ybWFsaXplZDsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZSBhbmQgcmV0dXJuIGFuIFVwbG9hZGVkRmlsZSBpbnN0YW5jZSBmcm9tIGEgJF9GSUxFUyBzcGVjaWZpY2F0aW9uLgogICAgICoKICAgICAqIElmIHRoZSBzcGVjaWZpY2F0aW9uIHJlcHJlc2VudHMgYW4gYXJyYXkgb2YgdmFsdWVzLCB0aGlzIG1ldGhvZCB3aWxsCiAgICAgKiBkZWxlZ2F0ZSB0byBub3JtYWxpemVOZXN0ZWRGaWxlU3BlYygpIGFuZCByZXR1cm4gdGhhdCByZXR1cm4gdmFsdWUuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICR2YWx1ZSAkX0ZJTEVTIHN0cnVjdAogICAgICogQHJldHVybiBhcnJheXxVcGxvYWRlZEZpbGVJbnRlcmZhY2UKICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlVXBsb2FkZWRGaWxlRnJvbVNwZWMoYXJyYXkgJHZhbHVlKQogICAgewogICAgICAgIGlmIChpc19hcnJheSgkdmFsdWVbJ3RtcF9uYW1lJ10pKSB7CiAgICAgICAgICAgIHJldHVybiBzZWxmOjpub3JtYWxpemVOZXN0ZWRGaWxlU3BlYygkdmFsdWUpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyBVcGxvYWRlZEZpbGUoCiAgICAgICAgICAgICR2YWx1ZVsndG1wX25hbWUnXSwKICAgICAgICAgICAgKGludCkgJHZhbHVlWydzaXplJ10sCiAgICAgICAgICAgIChpbnQpICR2YWx1ZVsnZXJyb3InXSwKICAgICAgICAgICAgJHZhbHVlWyduYW1lJ10sCiAgICAgICAgICAgICR2YWx1ZVsndHlwZSddCiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIE5vcm1hbGl6ZSBhbiBhcnJheSBvZiBmaWxlIHNwZWNpZmljYXRpb25zLgogICAgICoKICAgICAqIExvb3BzIHRocm91Z2ggYWxsIG5lc3RlZCBmaWxlcyBhbmQgcmV0dXJucyBhIG5vcm1hbGl6ZWQgYXJyYXkgb2YKICAgICAqIFVwbG9hZGVkRmlsZUludGVyZmFjZSBpbnN0YW5jZXMuCiAgICAgKgogICAgICogQHBhcmFtIGFycmF5ICRmaWxlcwogICAgICogQHJldHVybiBVcGxvYWRlZEZpbGVJbnRlcmZhY2VbXQogICAgICovCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBub3JtYWxpemVOZXN0ZWRGaWxlU3BlYyhhcnJheSAkZmlsZXMgPSBbXSkKICAgIHsKICAgICAgICAkbm9ybWFsaXplZEZpbGVzID0gW107CgogICAgICAgIGZvcmVhY2ggKGFycmF5X2tleXMoJGZpbGVzWyd0bXBfbmFtZSddKSBhcyAka2V5KSB7CiAgICAgICAgICAgICRzcGVjID0gWwogICAgICAgICAgICAgICAgJ3RtcF9uYW1lJyA9PiAkZmlsZXNbJ3RtcF9uYW1lJ11bJGtleV0sCiAgICAgICAgICAgICAgICAnc2l6ZScgICAgID0+ICRmaWxlc1snc2l6ZSddWyRrZXldLAogICAgICAgICAgICAgICAgJ2Vycm9yJyAgICA9PiAkZmlsZXNbJ2Vycm9yJ11bJGtleV0sCiAgICAgICAgICAgICAgICAnbmFtZScgICAgID0+ICRmaWxlc1snbmFtZSddWyRrZXldLAogICAgICAgICAgICAgICAgJ3R5cGUnICAgICA9PiAkZmlsZXNbJ3R5cGUnXVska2V5XSwKICAgICAgICAgICAgXTsKICAgICAgICAgICAgJG5vcm1hbGl6ZWRGaWxlc1ska2V5XSA9IHNlbGY6OmNyZWF0ZVVwbG9hZGVkRmlsZUZyb21TcGVjKCRzcGVjKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkbm9ybWFsaXplZEZpbGVzOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJuIGEgU2VydmVyUmVxdWVzdCBwb3B1bGF0ZWQgd2l0aCBzdXBlcmdsb2JhbHM6CiAgICAgKiAkX0dFVAogICAgICogJF9QT1NUCiAgICAgKiAkX0NPT0tJRQogICAgICogJF9GSUxFUwogICAgICogJF9TRVJWRVIKICAgICAqCiAgICAgKiBAcmV0dXJuIFNlcnZlclJlcXVlc3RJbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmcm9tR2xvYmFscygpCiAgICB7CiAgICAgICAgJG1ldGhvZCA9IGlzc2V0KCRfU0VSVkVSWydSRVFVRVNUX01FVEhPRCddKSA/ICRfU0VSVkVSWydSRVFVRVNUX01FVEhPRCddIDogJ0dFVCc7CiAgICAgICAgJGhlYWRlcnMgPSBmdW5jdGlvbl9leGlzdHMoJ2dldGFsbGhlYWRlcnMnKSA/IGdldGFsbGhlYWRlcnMoKSA6IFtdOwogICAgICAgICR1cmkgPSBzZWxmOjpnZXRVcmlGcm9tR2xvYmFscygpOwogICAgICAgICRib2R5ID0gbmV3IExhenlPcGVuU3RyZWFtKCdwaHA6Ly9pbnB1dCcsICdyKycpOwogICAgICAgICRwcm90b2NvbCA9IGlzc2V0KCRfU0VSVkVSWydTRVJWRVJfUFJPVE9DT0wnXSkgPyBzdHJfcmVwbGFjZSgnSFRUUC8nLCAnJywgJF9TRVJWRVJbJ1NFUlZFUl9QUk9UT0NPTCddKSA6ICcxLjEnOwoKICAgICAgICAkc2VydmVyUmVxdWVzdCA9IG5ldyBTZXJ2ZXJSZXF1ZXN0KCRtZXRob2QsICR1cmksICRoZWFkZXJzLCAkYm9keSwgJHByb3RvY29sLCAkX1NFUlZFUik7CgogICAgICAgIHJldHVybiAkc2VydmVyUmVxdWVzdAogICAgICAgICAgICAtPndpdGhDb29raWVQYXJhbXMoJF9DT09LSUUpCiAgICAgICAgICAgIC0+d2l0aFF1ZXJ5UGFyYW1zKCRfR0VUKQogICAgICAgICAgICAtPndpdGhQYXJzZWRCb2R5KCRfUE9TVCkKICAgICAgICAgICAgLT53aXRoVXBsb2FkZWRGaWxlcyhzZWxmOjpub3JtYWxpemVGaWxlcygkX0ZJTEVTKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgYSBVcmkgcG9wdWxhdGVkIHdpdGggdmFsdWVzIGZyb20gJF9TRVJWRVIuCiAgICAgKgogICAgICogQHJldHVybiBVcmlJbnRlcmZhY2UKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRVcmlGcm9tR2xvYmFscygpIHsKICAgICAgICAkdXJpID0gbmV3IFVyaSgnJyk7CgogICAgICAgICR1cmkgPSAkdXJpLT53aXRoU2NoZW1lKCFlbXB0eSgkX1NFUlZFUlsnSFRUUFMnXSkgJiYgJF9TRVJWRVJbJ0hUVFBTJ10gIT09ICdvZmYnID8gJ2h0dHBzJyA6ICdodHRwJyk7CgogICAgICAgICRoYXNQb3J0ID0gZmFsc2U7CiAgICAgICAgaWYgKGlzc2V0KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkpIHsKICAgICAgICAgICAgJGhvc3RIZWFkZXJQYXJ0cyA9IGV4cGxvZGUoJzonLCAkX1NFUlZFUlsnSFRUUF9IT1NUJ10pOwogICAgICAgICAgICAkdXJpID0gJHVyaS0+d2l0aEhvc3QoJGhvc3RIZWFkZXJQYXJ0c1swXSk7CiAgICAgICAgICAgIGlmIChpc3NldCgkaG9zdEhlYWRlclBhcnRzWzFdKSkgewogICAgICAgICAgICAgICAgJGhhc1BvcnQgPSB0cnVlOwogICAgICAgICAgICAgICAgJHVyaSA9ICR1cmktPndpdGhQb3J0KCRob3N0SGVhZGVyUGFydHNbMV0pOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlaWYgKGlzc2V0KCRfU0VSVkVSWydTRVJWRVJfTkFNRSddKSkgewogICAgICAgICAgICAkdXJpID0gJHVyaS0+d2l0aEhvc3QoJF9TRVJWRVJbJ1NFUlZFUl9OQU1FJ10pOwogICAgICAgIH0gZWxzZWlmIChpc3NldCgkX1NFUlZFUlsnU0VSVkVSX0FERFInXSkpIHsKICAgICAgICAgICAgJHVyaSA9ICR1cmktPndpdGhIb3N0KCRfU0VSVkVSWydTRVJWRVJfQUREUiddKTsKICAgICAgICB9CgogICAgICAgIGlmICghJGhhc1BvcnQgJiYgaXNzZXQoJF9TRVJWRVJbJ1NFUlZFUl9QT1JUJ10pKSB7CiAgICAgICAgICAgICR1cmkgPSAkdXJpLT53aXRoUG9ydCgkX1NFUlZFUlsnU0VSVkVSX1BPUlQnXSk7CiAgICAgICAgfQoKICAgICAgICAkaGFzUXVlcnkgPSBmYWxzZTsKICAgICAgICBpZiAoaXNzZXQoJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ10pKSB7CiAgICAgICAgICAgICRyZXF1ZXN0VXJpUGFydHMgPSBleHBsb2RlKCc/JywgJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ10pOwogICAgICAgICAgICAkdXJpID0gJHVyaS0+d2l0aFBhdGgoJHJlcXVlc3RVcmlQYXJ0c1swXSk7CiAgICAgICAgICAgIGlmIChpc3NldCgkcmVxdWVzdFVyaVBhcnRzWzFdKSkgewogICAgICAgICAgICAgICAgJGhhc1F1ZXJ5ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICR1cmkgPSAkdXJpLT53aXRoUXVlcnkoJHJlcXVlc3RVcmlQYXJ0c1sxXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICghJGhhc1F1ZXJ5ICYmIGlzc2V0KCRfU0VSVkVSWydRVUVSWV9TVFJJTkcnXSkpIHsKICAgICAgICAgICAgJHVyaSA9ICR1cmktPndpdGhRdWVyeSgkX1NFUlZFUlsnUVVFUllfU1RSSU5HJ10pOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR1cmk7CiAgICB9CgoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2VydmVyUGFyYW1zKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnNlcnZlclBhcmFtczsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFVwbG9hZGVkRmlsZXMoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dXBsb2FkZWRGaWxlczsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhVcGxvYWRlZEZpbGVzKGFycmF5ICR1cGxvYWRlZEZpbGVzKQogICAgewogICAgICAgICRuZXcgPSBjbG9uZSAkdGhpczsKICAgICAgICAkbmV3LT51cGxvYWRlZEZpbGVzID0gJHVwbG9hZGVkRmlsZXM7CgogICAgICAgIHJldHVybiAkbmV3OwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29va2llUGFyYW1zKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmNvb2tpZVBhcmFtczsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhDb29raWVQYXJhbXMoYXJyYXkgJGNvb2tpZXMpCiAgICB7CiAgICAgICAgJG5ldyA9IGNsb25lICR0aGlzOwogICAgICAgICRuZXctPmNvb2tpZVBhcmFtcyA9ICRjb29raWVzOwoKICAgICAgICByZXR1cm4gJG5ldzsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFF1ZXJ5UGFyYW1zKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnF1ZXJ5UGFyYW1zOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aFF1ZXJ5UGFyYW1zKGFycmF5ICRxdWVyeSkKICAgIHsKICAgICAgICAkbmV3ID0gY2xvbmUgJHRoaXM7CiAgICAgICAgJG5ldy0+cXVlcnlQYXJhbXMgPSAkcXVlcnk7CgogICAgICAgIHJldHVybiAkbmV3OwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UGFyc2VkQm9keSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5wYXJzZWRCb2R5OwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aFBhcnNlZEJvZHkoJGRhdGEpCiAgICB7CiAgICAgICAgJG5ldyA9IGNsb25lICR0aGlzOwogICAgICAgICRuZXctPnBhcnNlZEJvZHkgPSAkZGF0YTsKCiAgICAgICAgcmV0dXJuICRuZXc7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBdHRyaWJ1dGVzKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmF0dHJpYnV0ZXM7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBdHRyaWJ1dGUoJGF0dHJpYnV0ZSwgJGRlZmF1bHQgPSBudWxsKQogICAgewogICAgICAgIGlmIChmYWxzZSA9PT0gYXJyYXlfa2V5X2V4aXN0cygkYXR0cmlidXRlLCAkdGhpcy0+YXR0cmlidXRlcykpIHsKICAgICAgICAgICAgcmV0dXJuICRkZWZhdWx0OwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5hdHRyaWJ1dGVzWyRhdHRyaWJ1dGVdOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aEF0dHJpYnV0ZSgkYXR0cmlidXRlLCAkdmFsdWUpCiAgICB7CiAgICAgICAgJG5ldyA9IGNsb25lICR0aGlzOwogICAgICAgICRuZXctPmF0dHJpYnV0ZXNbJGF0dHJpYnV0ZV0gPSAkdmFsdWU7CgogICAgICAgIHJldHVybiAkbmV3OwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aG91dEF0dHJpYnV0ZSgkYXR0cmlidXRlKQogICAgewogICAgICAgIGlmIChmYWxzZSA9PT0gYXJyYXlfa2V5X2V4aXN0cygkYXR0cmlidXRlLCAkdGhpcy0+YXR0cmlidXRlcykpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzOwogICAgICAgIH0KCiAgICAgICAgJG5ldyA9IGNsb25lICR0aGlzOwogICAgICAgIHVuc2V0KCRuZXctPmF0dHJpYnV0ZXNbJGF0dHJpYnV0ZV0pOwoKICAgICAgICByZXR1cm4gJG5ldzsKICAgIH0KfQo=AppDevTools/query/vendor/guzzlehttp/psr7/src/Stream.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBQSFAgc3RyZWFtIGltcGxlbWVudGF0aW9uLgogKgogKiBAdmFyICRzdHJlYW0KICovCmNsYXNzIFN0cmVhbSBpbXBsZW1lbnRzIFN0cmVhbUludGVyZmFjZQp7CiAgICBwcml2YXRlICRzdHJlYW07CiAgICBwcml2YXRlICRzaXplOwogICAgcHJpdmF0ZSAkc2Vla2FibGU7CiAgICBwcml2YXRlICRyZWFkYWJsZTsKICAgIHByaXZhdGUgJHdyaXRhYmxlOwogICAgcHJpdmF0ZSAkdXJpOwogICAgcHJpdmF0ZSAkY3VzdG9tTWV0YWRhdGE7CgogICAgLyoqIEB2YXIgYXJyYXkgSGFzaCBvZiByZWFkYWJsZSBhbmQgd3JpdGFibGUgc3RyZWFtIHR5cGVzICovCiAgICBwcml2YXRlIHN0YXRpYyAkcmVhZFdyaXRlSGFzaCA9IFsKICAgICAgICAncmVhZCcgPT4gWwogICAgICAgICAgICAncicgPT4gdHJ1ZSwgJ3crJyA9PiB0cnVlLCAncisnID0+IHRydWUsICd4KycgPT4gdHJ1ZSwgJ2MrJyA9PiB0cnVlLAogICAgICAgICAgICAncmInID0+IHRydWUsICd3K2InID0+IHRydWUsICdyK2InID0+IHRydWUsICd4K2InID0+IHRydWUsCiAgICAgICAgICAgICdjK2InID0+IHRydWUsICdydCcgPT4gdHJ1ZSwgJ3crdCcgPT4gdHJ1ZSwgJ3IrdCcgPT4gdHJ1ZSwKICAgICAgICAgICAgJ3grdCcgPT4gdHJ1ZSwgJ2MrdCcgPT4gdHJ1ZSwgJ2ErJyA9PiB0cnVlCiAgICAgICAgXSwKICAgICAgICAnd3JpdGUnID0+IFsKICAgICAgICAgICAgJ3cnID0+IHRydWUsICd3KycgPT4gdHJ1ZSwgJ3J3JyA9PiB0cnVlLCAncisnID0+IHRydWUsICd4KycgPT4gdHJ1ZSwKICAgICAgICAgICAgJ2MrJyA9PiB0cnVlLCAnd2InID0+IHRydWUsICd3K2InID0+IHRydWUsICdyK2InID0+IHRydWUsCiAgICAgICAgICAgICd4K2InID0+IHRydWUsICdjK2InID0+IHRydWUsICd3K3QnID0+IHRydWUsICdyK3QnID0+IHRydWUsCiAgICAgICAgICAgICd4K3QnID0+IHRydWUsICdjK3QnID0+IHRydWUsICdhJyA9PiB0cnVlLCAnYSsnID0+IHRydWUKICAgICAgICBdCiAgICBdOwoKICAgIC8qKgogICAgICogVGhpcyBjb25zdHJ1Y3RvciBhY2NlcHRzIGFuIGFzc29jaWF0aXZlIGFycmF5IG9mIG9wdGlvbnMuCiAgICAgKgogICAgICogLSBzaXplOiAoaW50KSBJZiBhIHJlYWQgc3RyZWFtIHdvdWxkIG90aGVyd2lzZSBoYXZlIGFuIGluZGV0ZXJtaW5hdGUKICAgICAqICAgc2l6ZSwgYnV0IHRoZSBzaXplIGlzIGtub3duIGR1ZSB0byBmb3Jla25vd2xlZGdlLCB0aGVuIHlvdSBjYW4KICAgICAqICAgcHJvdmlkZSB0aGF0IHNpemUsIGluIGJ5dGVzLgogICAgICogLSBtZXRhZGF0YTogKGFycmF5KSBBbnkgYWRkaXRpb25hbCBtZXRhZGF0YSB0byByZXR1cm4gd2hlbiB0aGUgbWV0YWRhdGEKICAgICAqICAgb2YgdGhlIHN0cmVhbSBpcyBhY2Nlc3NlZC4KICAgICAqCiAgICAgKiBAcGFyYW0gcmVzb3VyY2UgJHN0cmVhbSAgU3RyZWFtIHJlc291cmNlIHRvIHdyYXAuCiAgICAgKiBAcGFyYW0gYXJyYXkgICAgJG9wdGlvbnMgQXNzb2NpYXRpdmUgYXJyYXkgb2Ygb3B0aW9ucy4KICAgICAqCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gaWYgdGhlIHN0cmVhbSBpcyBub3QgYSBzdHJlYW0gcmVzb3VyY2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRzdHJlYW0sICRvcHRpb25zID0gW10pCiAgICB7CiAgICAgICAgaWYgKCFpc19yZXNvdXJjZSgkc3RyZWFtKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignU3RyZWFtIG11c3QgYmUgYSByZXNvdXJjZScpOwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRvcHRpb25zWydzaXplJ10pKSB7CiAgICAgICAgICAgICR0aGlzLT5zaXplID0gJG9wdGlvbnNbJ3NpemUnXTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5jdXN0b21NZXRhZGF0YSA9IGlzc2V0KCRvcHRpb25zWydtZXRhZGF0YSddKQogICAgICAgICAgICA/ICRvcHRpb25zWydtZXRhZGF0YSddCiAgICAgICAgICAgIDogW107CgogICAgICAgICR0aGlzLT5zdHJlYW0gPSAkc3RyZWFtOwogICAgICAgICRtZXRhID0gc3RyZWFtX2dldF9tZXRhX2RhdGEoJHRoaXMtPnN0cmVhbSk7CiAgICAgICAgJHRoaXMtPnNlZWthYmxlID0gJG1ldGFbJ3NlZWthYmxlJ107CiAgICAgICAgJHRoaXMtPnJlYWRhYmxlID0gaXNzZXQoc2VsZjo6JHJlYWRXcml0ZUhhc2hbJ3JlYWQnXVskbWV0YVsnbW9kZSddXSk7CiAgICAgICAgJHRoaXMtPndyaXRhYmxlID0gaXNzZXQoc2VsZjo6JHJlYWRXcml0ZUhhc2hbJ3dyaXRlJ11bJG1ldGFbJ21vZGUnXV0pOwogICAgICAgICR0aGlzLT51cmkgPSAkdGhpcy0+Z2V0TWV0YWRhdGEoJ3VyaScpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2dldCgkbmFtZSkKICAgIHsKICAgICAgICBpZiAoJG5hbWUgPT0gJ3N0cmVhbScpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdUaGUgc3RyZWFtIGlzIGRldGFjaGVkJyk7CiAgICAgICAgfQoKICAgICAgICB0aHJvdyBuZXcgXEJhZE1ldGhvZENhbGxFeGNlcHRpb24oJ05vIHZhbHVlIGZvciAnIC4gJG5hbWUpOwogICAgfQoKICAgIC8qKgogICAgICogQ2xvc2VzIHRoZSBzdHJlYW0gd2hlbiB0aGUgZGVzdHJ1Y3RlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19kZXN0cnVjdCgpCiAgICB7CiAgICAgICAgJHRoaXMtPmNsb3NlKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKQogICAgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgICR0aGlzLT5zZWVrKDApOwogICAgICAgICAgICByZXR1cm4gKHN0cmluZykgc3RyZWFtX2dldF9jb250ZW50cygkdGhpcy0+c3RyZWFtKTsKICAgICAgICB9IGNhdGNoIChcRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbnRlbnRzKCkKICAgIHsKICAgICAgICAkY29udGVudHMgPSBzdHJlYW1fZ2V0X2NvbnRlbnRzKCR0aGlzLT5zdHJlYW0pOwoKICAgICAgICBpZiAoJGNvbnRlbnRzID09PSBmYWxzZSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ1VuYWJsZSB0byByZWFkIHN0cmVhbSBjb250ZW50cycpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRjb250ZW50czsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xvc2UoKQogICAgewogICAgICAgIGlmIChpc3NldCgkdGhpcy0+c3RyZWFtKSkgewogICAgICAgICAgICBpZiAoaXNfcmVzb3VyY2UoJHRoaXMtPnN0cmVhbSkpIHsKICAgICAgICAgICAgICAgIGZjbG9zZSgkdGhpcy0+c3RyZWFtKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkdGhpcy0+ZGV0YWNoKCk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBkZXRhY2goKQogICAgewogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPnN0cmVhbSkpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICAkcmVzdWx0ID0gJHRoaXMtPnN0cmVhbTsKICAgICAgICB1bnNldCgkdGhpcy0+c3RyZWFtKTsKICAgICAgICAkdGhpcy0+c2l6ZSA9ICR0aGlzLT51cmkgPSBudWxsOwogICAgICAgICR0aGlzLT5yZWFkYWJsZSA9ICR0aGlzLT53cml0YWJsZSA9ICR0aGlzLT5zZWVrYWJsZSA9IGZhbHNlOwoKICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2l6ZSgpCiAgICB7CiAgICAgICAgaWYgKCR0aGlzLT5zaXplICE9PSBudWxsKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+c2l6ZTsKICAgICAgICB9CgogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPnN0cmVhbSkpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICAvLyBDbGVhciB0aGUgc3RhdCBjYWNoZSBpZiB0aGUgc3RyZWFtIGhhcyBhIFVSSQogICAgICAgIGlmICgkdGhpcy0+dXJpKSB7CiAgICAgICAgICAgIGNsZWFyc3RhdGNhY2hlKHRydWUsICR0aGlzLT51cmkpOwogICAgICAgIH0KCiAgICAgICAgJHN0YXRzID0gZnN0YXQoJHRoaXMtPnN0cmVhbSk7CiAgICAgICAgaWYgKGlzc2V0KCRzdGF0c1snc2l6ZSddKSkgewogICAgICAgICAgICAkdGhpcy0+c2l6ZSA9ICRzdGF0c1snc2l6ZSddOwogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnNpemU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbnVsbDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNSZWFkYWJsZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5yZWFkYWJsZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNXcml0YWJsZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT53cml0YWJsZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNTZWVrYWJsZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5zZWVrYWJsZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZW9mKCkKICAgIHsKICAgICAgICByZXR1cm4gISR0aGlzLT5zdHJlYW0gfHwgZmVvZigkdGhpcy0+c3RyZWFtKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVsbCgpCiAgICB7CiAgICAgICAgJHJlc3VsdCA9IGZ0ZWxsKCR0aGlzLT5zdHJlYW0pOwoKICAgICAgICBpZiAoJHJlc3VsdCA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdVbmFibGUgdG8gZGV0ZXJtaW5lIHN0cmVhbSBwb3NpdGlvbicpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHJld2luZCgpCiAgICB7CiAgICAgICAgJHRoaXMtPnNlZWsoMCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHNlZWsoJG9mZnNldCwgJHdoZW5jZSA9IFNFRUtfU0VUKQogICAgewogICAgICAgIGlmICghJHRoaXMtPnNlZWthYmxlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignU3RyZWFtIGlzIG5vdCBzZWVrYWJsZScpOwogICAgICAgIH0gZWxzZWlmIChmc2VlaygkdGhpcy0+c3RyZWFtLCAkb2Zmc2V0LCAkd2hlbmNlKSA9PT0gLTEpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdVbmFibGUgdG8gc2VlayB0byBzdHJlYW0gcG9zaXRpb24gJwogICAgICAgICAgICAgICAgLiAkb2Zmc2V0IC4gJyB3aXRoIHdoZW5jZSAnIC4gdmFyX2V4cG9ydCgkd2hlbmNlLCB0cnVlKSk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZWFkKCRsZW5ndGgpCiAgICB7CiAgICAgICAgaWYgKCEkdGhpcy0+cmVhZGFibGUpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdDYW5ub3QgcmVhZCBmcm9tIG5vbi1yZWFkYWJsZSBzdHJlYW0nKTsKICAgICAgICB9CiAgICAgICAgaWYgKCRsZW5ndGggPCAwKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignTGVuZ3RoIHBhcmFtZXRlciBjYW5ub3QgYmUgbmVnYXRpdmUnKTsKICAgICAgICB9CgogICAgICAgIGlmICgwID09PSAkbGVuZ3RoKSB7CiAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICB9CgogICAgICAgICRzdHJpbmcgPSBmcmVhZCgkdGhpcy0+c3RyZWFtLCAkbGVuZ3RoKTsKICAgICAgICBpZiAoZmFsc2UgPT09ICRzdHJpbmcpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdVbmFibGUgdG8gcmVhZCBmcm9tIHN0cmVhbScpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRzdHJpbmc7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHdyaXRlKCRzdHJpbmcpCiAgICB7CiAgICAgICAgaWYgKCEkdGhpcy0+d3JpdGFibGUpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdDYW5ub3Qgd3JpdGUgdG8gYSBub24td3JpdGFibGUgc3RyZWFtJyk7CiAgICAgICAgfQoKICAgICAgICAvLyBXZSBjYW4ndCBrbm93IHRoZSBzaXplIGFmdGVyIHdyaXRpbmcgYW55dGhpbmcKICAgICAgICAkdGhpcy0+c2l6ZSA9IG51bGw7CiAgICAgICAgJHJlc3VsdCA9IGZ3cml0ZSgkdGhpcy0+c3RyZWFtLCAkc3RyaW5nKTsKCiAgICAgICAgaWYgKCRyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignVW5hYmxlIHRvIHdyaXRlIHRvIHN0cmVhbScpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldE1ldGFkYXRhKCRrZXkgPSBudWxsKQogICAgewogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPnN0cmVhbSkpIHsKICAgICAgICAgICAgcmV0dXJuICRrZXkgPyBudWxsIDogW107CiAgICAgICAgfSBlbHNlaWYgKCEka2V5KSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+Y3VzdG9tTWV0YWRhdGEgKyBzdHJlYW1fZ2V0X21ldGFfZGF0YSgkdGhpcy0+c3RyZWFtKTsKICAgICAgICB9IGVsc2VpZiAoaXNzZXQoJHRoaXMtPmN1c3RvbU1ldGFkYXRhWyRrZXldKSkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPmN1c3RvbU1ldGFkYXRhWyRrZXldOwogICAgICAgIH0KCiAgICAgICAgJG1ldGEgPSBzdHJlYW1fZ2V0X21ldGFfZGF0YSgkdGhpcy0+c3RyZWFtKTsKCiAgICAgICAgcmV0dXJuIGlzc2V0KCRtZXRhWyRrZXldKSA/ICRtZXRhWyRrZXldIDogbnVsbDsKICAgIH0KfQo=AppDevTools/query/vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBTdHJlYW0gZGVjb3JhdG9yIHRyYWl0CiAqIEBwcm9wZXJ0eSBTdHJlYW1JbnRlcmZhY2Ugc3RyZWFtCiAqLwp0cmFpdCBTdHJlYW1EZWNvcmF0b3JUcmFpdAp7CiAgICAvKioKICAgICAqIEBwYXJhbSBTdHJlYW1JbnRlcmZhY2UgJHN0cmVhbSBTdHJlYW0gdG8gZGVjb3JhdGUKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KFN0cmVhbUludGVyZmFjZSAkc3RyZWFtKQogICAgewogICAgICAgICR0aGlzLT5zdHJlYW0gPSAkc3RyZWFtOwogICAgfQoKICAgIC8qKgogICAgICogTWFnaWMgbWV0aG9kIHVzZWQgdG8gY3JlYXRlIGEgbmV3IHN0cmVhbSBpZiBzdHJlYW1zIGFyZSBub3QgYWRkZWQgaW4KICAgICAqIHRoZSBjb25zdHJ1Y3RvciBvZiBhIGRlY29yYXRvciAoZS5nLiwgTGF6eU9wZW5TdHJlYW0pLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgTmFtZSBvZiB0aGUgcHJvcGVydHkgKGFsbG93cyAic3RyZWFtIiBvbmx5KS4KICAgICAqCiAgICAgKiBAcmV0dXJuIFN0cmVhbUludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19nZXQoJG5hbWUpCiAgICB7CiAgICAgICAgaWYgKCRuYW1lID09ICdzdHJlYW0nKSB7CiAgICAgICAgICAgICR0aGlzLT5zdHJlYW0gPSAkdGhpcy0+Y3JlYXRlU3RyZWFtKCk7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+c3RyZWFtOwogICAgICAgIH0KCiAgICAgICAgdGhyb3cgbmV3IFxVbmV4cGVjdGVkVmFsdWVFeGNlcHRpb24oIiRuYW1lIG5vdCBmb3VuZCBvbiBjbGFzcyIpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkKICAgIHsKICAgICAgICB0cnkgewogICAgICAgICAgICBpZiAoJHRoaXMtPmlzU2Vla2FibGUoKSkgewogICAgICAgICAgICAgICAgJHRoaXMtPnNlZWsoMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5nZXRDb250ZW50cygpOwogICAgICAgIH0gY2F0Y2ggKFxFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgLy8gUmVhbGx5LCBQSFA/IGh0dHBzOi8vYnVncy5waHAubmV0L2J1Zy5waHA/aWQ9NTM2NDgKICAgICAgICAgICAgdHJpZ2dlcl9lcnJvcignU3RyZWFtRGVjb3JhdG9yOjpfX3RvU3RyaW5nIGV4Y2VwdGlvbjogJwogICAgICAgICAgICAgICAgLiAoc3RyaW5nKSAkZSwgRV9VU0VSX0VSUk9SKTsKICAgICAgICAgICAgcmV0dXJuICcnOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29udGVudHMoKQogICAgewogICAgICAgIHJldHVybiBjb3B5X3RvX3N0cmluZygkdGhpcyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBBbGxvdyBkZWNvcmF0b3JzIHRvIGltcGxlbWVudCBjdXN0b20gbWV0aG9kcwogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG1ldGhvZCBNaXNzaW5nIG1ldGhvZCBuYW1lCiAgICAgKiBAcGFyYW0gYXJyYXkgICRhcmdzICAgTWV0aG9kIGFyZ3VtZW50cwogICAgICoKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY2FsbCgkbWV0aG9kLCBhcnJheSAkYXJncykKICAgIHsKICAgICAgICAkcmVzdWx0ID0gY2FsbF91c2VyX2Z1bmNfYXJyYXkoWyR0aGlzLT5zdHJlYW0sICRtZXRob2RdLCAkYXJncyk7CgogICAgICAgIC8vIEFsd2F5cyByZXR1cm4gdGhlIHdyYXBwZWQgb2JqZWN0IGlmIHRoZSByZXN1bHQgaXMgYSByZXR1cm4gJHRoaXMKICAgICAgICByZXR1cm4gJHJlc3VsdCA9PT0gJHRoaXMtPnN0cmVhbSA/ICR0aGlzIDogJHJlc3VsdDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY2xvc2UoKQogICAgewogICAgICAgICR0aGlzLT5zdHJlYW0tPmNsb3NlKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldE1ldGFkYXRhKCRrZXkgPSBudWxsKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+c3RyZWFtLT5nZXRNZXRhZGF0YSgka2V5KTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZGV0YWNoKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnN0cmVhbS0+ZGV0YWNoKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFNpemUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+c3RyZWFtLT5nZXRTaXplKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGVvZigpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5zdHJlYW0tPmVvZigpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZWxsKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnN0cmVhbS0+dGVsbCgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBpc1JlYWRhYmxlKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnN0cmVhbS0+aXNSZWFkYWJsZSgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBpc1dyaXRhYmxlKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnN0cmVhbS0+aXNXcml0YWJsZSgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBpc1NlZWthYmxlKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnN0cmVhbS0+aXNTZWVrYWJsZSgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZXdpbmQoKQogICAgewogICAgICAgICR0aGlzLT5zZWVrKDApOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZWVrKCRvZmZzZXQsICR3aGVuY2UgPSBTRUVLX1NFVCkKICAgIHsKICAgICAgICAkdGhpcy0+c3RyZWFtLT5zZWVrKCRvZmZzZXQsICR3aGVuY2UpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiByZWFkKCRsZW5ndGgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5zdHJlYW0tPnJlYWQoJGxlbmd0aCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHdyaXRlKCRzdHJpbmcpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5zdHJlYW0tPndyaXRlKCRzdHJpbmcpOwogICAgfQoKICAgIC8qKgogICAgICogSW1wbGVtZW50IGluIHN1YmNsYXNzZXMgdG8gZHluYW1pY2FsbHkgY3JlYXRlIHN0cmVhbXMgd2hlbiByZXF1ZXN0ZWQuCiAgICAgKgogICAgICogQHJldHVybiBTdHJlYW1JbnRlcmZhY2UKICAgICAqIEB0aHJvd3MgXEJhZE1ldGhvZENhbGxFeGNlcHRpb24KICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNyZWF0ZVN0cmVhbSgpCiAgICB7CiAgICAgICAgdGhyb3cgbmV3IFxCYWRNZXRob2RDYWxsRXhjZXB0aW9uKCdOb3QgaW1wbGVtZW50ZWQnKTsKICAgIH0KfQo=AppDevTools/query/vendor/guzzlehttp/psr7/src/StreamWrapper.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKCi8qKgogKiBDb252ZXJ0cyBHdXp6bGUgc3RyZWFtcyBpbnRvIFBIUCBzdHJlYW0gcmVzb3VyY2VzLgogKi8KY2xhc3MgU3RyZWFtV3JhcHBlcgp7CiAgICAvKiogQHZhciByZXNvdXJjZSAqLwogICAgcHVibGljICRjb250ZXh0OwoKICAgIC8qKiBAdmFyIFN0cmVhbUludGVyZmFjZSAqLwogICAgcHJpdmF0ZSAkc3RyZWFtOwoKICAgIC8qKiBAdmFyIHN0cmluZyByLCByKywgb3IgdyAqLwogICAgcHJpdmF0ZSAkbW9kZTsKCiAgICAvKioKICAgICAqIFJldHVybnMgYSByZXNvdXJjZSByZXByZXNlbnRpbmcgdGhlIHN0cmVhbS4KICAgICAqCiAgICAgKiBAcGFyYW0gU3RyZWFtSW50ZXJmYWNlICRzdHJlYW0gVGhlIHN0cmVhbSB0byBnZXQgYSByZXNvdXJjZSBmb3IKICAgICAqCiAgICAgKiBAcmV0dXJuIHJlc291cmNlCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gaWYgc3RyZWFtIGlzIG5vdCByZWFkYWJsZSBvciB3cml0YWJsZQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFJlc291cmNlKFN0cmVhbUludGVyZmFjZSAkc3RyZWFtKQogICAgewogICAgICAgIHNlbGY6OnJlZ2lzdGVyKCk7CgogICAgICAgIGlmICgkc3RyZWFtLT5pc1JlYWRhYmxlKCkpIHsKICAgICAgICAgICAgJG1vZGUgPSAkc3RyZWFtLT5pc1dyaXRhYmxlKCkgPyAncisnIDogJ3InOwogICAgICAgIH0gZWxzZWlmICgkc3RyZWFtLT5pc1dyaXRhYmxlKCkpIHsKICAgICAgICAgICAgJG1vZGUgPSAndyc7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1RoZSBzdHJlYW0gbXVzdCBiZSByZWFkYWJsZSwgJwogICAgICAgICAgICAgICAgLiAnd3JpdGFibGUsIG9yIGJvdGguJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZm9wZW4oJ2d1enpsZTovL3N0cmVhbScsICRtb2RlLCBudWxsLCBzdHJlYW1fY29udGV4dF9jcmVhdGUoWwogICAgICAgICAgICAnZ3V6emxlJyA9PiBbJ3N0cmVhbScgPT4gJHN0cmVhbV0KICAgICAgICBdKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZWdpc3RlcnMgdGhlIHN0cmVhbSB3cmFwcGVyIGlmIG5lZWRlZAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJlZ2lzdGVyKCkKICAgIHsKICAgICAgICBpZiAoIWluX2FycmF5KCdndXp6bGUnLCBzdHJlYW1fZ2V0X3dyYXBwZXJzKCkpKSB7CiAgICAgICAgICAgIHN0cmVhbV93cmFwcGVyX3JlZ2lzdGVyKCdndXp6bGUnLCBfX0NMQVNTX18pOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc3RyZWFtX29wZW4oJHBhdGgsICRtb2RlLCAkb3B0aW9ucywgJiRvcGVuZWRfcGF0aCkKICAgIHsKICAgICAgICAkb3B0aW9ucyA9IHN0cmVhbV9jb250ZXh0X2dldF9vcHRpb25zKCR0aGlzLT5jb250ZXh0KTsKCiAgICAgICAgaWYgKCFpc3NldCgkb3B0aW9uc1snZ3V6emxlJ11bJ3N0cmVhbSddKSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+bW9kZSA9ICRtb2RlOwogICAgICAgICR0aGlzLT5zdHJlYW0gPSAkb3B0aW9uc1snZ3V6emxlJ11bJ3N0cmVhbSddOwoKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc3RyZWFtX3JlYWQoJGNvdW50KQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+c3RyZWFtLT5yZWFkKCRjb3VudCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHN0cmVhbV93cml0ZSgkZGF0YSkKICAgIHsKICAgICAgICByZXR1cm4gKGludCkgJHRoaXMtPnN0cmVhbS0+d3JpdGUoJGRhdGEpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzdHJlYW1fdGVsbCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5zdHJlYW0tPnRlbGwoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gc3RyZWFtX2VvZigpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5zdHJlYW0tPmVvZigpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzdHJlYW1fc2Vlaygkb2Zmc2V0LCAkd2hlbmNlKQogICAgewogICAgICAgICR0aGlzLT5zdHJlYW0tPnNlZWsoJG9mZnNldCwgJHdoZW5jZSk7CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBzdHJlYW1fc3RhdCgpCiAgICB7CiAgICAgICAgc3RhdGljICRtb2RlTWFwID0gWwogICAgICAgICAgICAncicgID0+IDMzMDYwLAogICAgICAgICAgICAncisnID0+IDMzMjA2LAogICAgICAgICAgICAndycgID0+IDMzMTg4CiAgICAgICAgXTsKCiAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgJ2RldicgICAgID0+IDAsCiAgICAgICAgICAgICdpbm8nICAgICA9PiAwLAogICAgICAgICAgICAnbW9kZScgICAgPT4gJG1vZGVNYXBbJHRoaXMtPm1vZGVdLAogICAgICAgICAgICAnbmxpbmsnICAgPT4gMCwKICAgICAgICAgICAgJ3VpZCcgICAgID0+IDAsCiAgICAgICAgICAgICdnaWQnICAgICA9PiAwLAogICAgICAgICAgICAncmRldicgICAgPT4gMCwKICAgICAgICAgICAgJ3NpemUnICAgID0+ICR0aGlzLT5zdHJlYW0tPmdldFNpemUoKSA/OiAwLAogICAgICAgICAgICAnYXRpbWUnICAgPT4gMCwKICAgICAgICAgICAgJ210aW1lJyAgID0+IDAsCiAgICAgICAgICAgICdjdGltZScgICA9PiAwLAogICAgICAgICAgICAnYmxrc2l6ZScgPT4gMCwKICAgICAgICAgICAgJ2Jsb2NrcycgID0+IDAKICAgICAgICBdOwogICAgfQp9Cg==AppDevTools/query/vendor/guzzlehttp/psr7/src/UploadedFile.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb247CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFN0cmVhbUludGVyZmFjZTsKdXNlIFBzclxIdHRwXE1lc3NhZ2VcVXBsb2FkZWRGaWxlSW50ZXJmYWNlOwp1c2UgUnVudGltZUV4Y2VwdGlvbjsKCmNsYXNzIFVwbG9hZGVkRmlsZSBpbXBsZW1lbnRzIFVwbG9hZGVkRmlsZUludGVyZmFjZQp7CiAgICAvKioKICAgICAqIEB2YXIgaW50W10KICAgICAqLwogICAgcHJpdmF0ZSBzdGF0aWMgJGVycm9ycyA9IFsKICAgICAgICBVUExPQURfRVJSX09LLAogICAgICAgIFVQTE9BRF9FUlJfSU5JX1NJWkUsCiAgICAgICAgVVBMT0FEX0VSUl9GT1JNX1NJWkUsCiAgICAgICAgVVBMT0FEX0VSUl9QQVJUSUFMLAogICAgICAgIFVQTE9BRF9FUlJfTk9fRklMRSwKICAgICAgICBVUExPQURfRVJSX05PX1RNUF9ESVIsCiAgICAgICAgVVBMT0FEX0VSUl9DQU5UX1dSSVRFLAogICAgICAgIFVQTE9BRF9FUlJfRVhURU5TSU9OLAogICAgXTsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgJGNsaWVudEZpbGVuYW1lOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJpdmF0ZSAkY2xpZW50TWVkaWFUeXBlOwoKICAgIC8qKgogICAgICogQHZhciBpbnQKICAgICAqLwogICAgcHJpdmF0ZSAkZXJyb3I7CgogICAgLyoqCiAgICAgKiBAdmFyIG51bGx8c3RyaW5nCiAgICAgKi8KICAgIHByaXZhdGUgJGZpbGU7CgogICAgLyoqCiAgICAgKiBAdmFyIGJvb2wKICAgICAqLwogICAgcHJpdmF0ZSAkbW92ZWQgPSBmYWxzZTsKCiAgICAvKioKICAgICAqIEB2YXIgaW50CiAgICAgKi8KICAgIHByaXZhdGUgJHNpemU7CgogICAgLyoqCiAgICAgKiBAdmFyIFN0cmVhbUludGVyZmFjZXxudWxsCiAgICAgKi8KICAgIHByaXZhdGUgJHN0cmVhbTsKCiAgICAvKioKICAgICAqIEBwYXJhbSBTdHJlYW1JbnRlcmZhY2V8c3RyaW5nfHJlc291cmNlICRzdHJlYW1PckZpbGUKICAgICAqIEBwYXJhbSBpbnQgJHNpemUKICAgICAqIEBwYXJhbSBpbnQgJGVycm9yU3RhdHVzCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJGNsaWVudEZpbGVuYW1lCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJGNsaWVudE1lZGlhVHlwZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoCiAgICAgICAgJHN0cmVhbU9yRmlsZSwKICAgICAgICAkc2l6ZSwKICAgICAgICAkZXJyb3JTdGF0dXMsCiAgICAgICAgJGNsaWVudEZpbGVuYW1lID0gbnVsbCwKICAgICAgICAkY2xpZW50TWVkaWFUeXBlID0gbnVsbAogICAgKSB7CiAgICAgICAgJHRoaXMtPnNldEVycm9yKCRlcnJvclN0YXR1cyk7CiAgICAgICAgJHRoaXMtPnNldFNpemUoJHNpemUpOwogICAgICAgICR0aGlzLT5zZXRDbGllbnRGaWxlbmFtZSgkY2xpZW50RmlsZW5hbWUpOwogICAgICAgICR0aGlzLT5zZXRDbGllbnRNZWRpYVR5cGUoJGNsaWVudE1lZGlhVHlwZSk7CgogICAgICAgIGlmICgkdGhpcy0+aXNPaygpKSB7CiAgICAgICAgICAgICR0aGlzLT5zZXRTdHJlYW1PckZpbGUoJHN0cmVhbU9yRmlsZSk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogRGVwZW5kaW5nIG9uIHRoZSB2YWx1ZSBzZXQgZmlsZSBvciBzdHJlYW0gdmFyaWFibGUKICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHN0cmVhbU9yRmlsZQogICAgICogQHRocm93cyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBzZXRTdHJlYW1PckZpbGUoJHN0cmVhbU9yRmlsZSkKICAgIHsKICAgICAgICBpZiAoaXNfc3RyaW5nKCRzdHJlYW1PckZpbGUpKSB7CiAgICAgICAgICAgICR0aGlzLT5maWxlID0gJHN0cmVhbU9yRmlsZTsKICAgICAgICB9IGVsc2VpZiAoaXNfcmVzb3VyY2UoJHN0cmVhbU9yRmlsZSkpIHsKICAgICAgICAgICAgJHRoaXMtPnN0cmVhbSA9IG5ldyBTdHJlYW0oJHN0cmVhbU9yRmlsZSk7CiAgICAgICAgfSBlbHNlaWYgKCRzdHJlYW1PckZpbGUgaW5zdGFuY2VvZiBTdHJlYW1JbnRlcmZhY2UpIHsKICAgICAgICAgICAgJHRoaXMtPnN0cmVhbSA9ICRzdHJlYW1PckZpbGU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdJbnZhbGlkIHN0cmVhbSBvciBmaWxlIHByb3ZpZGVkIGZvciBVcGxvYWRlZEZpbGUnCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIGludCAkZXJyb3IKICAgICAqIEB0aHJvd3MgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gc2V0RXJyb3IoJGVycm9yKQogICAgewogICAgICAgIGlmIChmYWxzZSA9PT0gaXNfaW50KCRlcnJvcikpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdVcGxvYWQgZmlsZSBlcnJvciBzdGF0dXMgbXVzdCBiZSBhbiBpbnRlZ2VyJwogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZhbHNlID09PSBpbl9hcnJheSgkZXJyb3IsIFVwbG9hZGVkRmlsZTo6JGVycm9ycykpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICdJbnZhbGlkIGVycm9yIHN0YXR1cyBmb3IgVXBsb2FkZWRGaWxlJwogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPmVycm9yID0gJGVycm9yOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIGludCAkc2l6ZQogICAgICogQHRocm93cyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBzZXRTaXplKCRzaXplKQogICAgewogICAgICAgIGlmIChmYWxzZSA9PT0gaXNfaW50KCRzaXplKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ1VwbG9hZCBmaWxlIHNpemUgbXVzdCBiZSBhbiBpbnRlZ2VyJwogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPnNpemUgPSAkc2l6ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBtaXhlZCAkcGFyYW0KICAgICAqIEByZXR1cm4gYm9vbGVhbgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGlzU3RyaW5nT3JOdWxsKCRwYXJhbSkKICAgIHsKICAgICAgICByZXR1cm4gaW5fYXJyYXkoZ2V0dHlwZSgkcGFyYW0pLCBbJ3N0cmluZycsICdOVUxMJ10pOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkICRwYXJhbQogICAgICogQHJldHVybiBib29sZWFuCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gaXNTdHJpbmdOb3RFbXB0eSgkcGFyYW0pCiAgICB7CiAgICAgICAgcmV0dXJuIGlzX3N0cmluZygkcGFyYW0pICYmIGZhbHNlID09PSBlbXB0eSgkcGFyYW0pOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZ3xudWxsICRjbGllbnRGaWxlbmFtZQogICAgICogQHRocm93cyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBzZXRDbGllbnRGaWxlbmFtZSgkY2xpZW50RmlsZW5hbWUpCiAgICB7CiAgICAgICAgaWYgKGZhbHNlID09PSAkdGhpcy0+aXNTdHJpbmdPck51bGwoJGNsaWVudEZpbGVuYW1lKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ1VwbG9hZCBmaWxlIGNsaWVudCBmaWxlbmFtZSBtdXN0IGJlIGEgc3RyaW5nIG9yIG51bGwnCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+Y2xpZW50RmlsZW5hbWUgPSAkY2xpZW50RmlsZW5hbWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nfG51bGwgJGNsaWVudE1lZGlhVHlwZQogICAgICogQHRocm93cyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBzZXRDbGllbnRNZWRpYVR5cGUoJGNsaWVudE1lZGlhVHlwZSkKICAgIHsKICAgICAgICBpZiAoZmFsc2UgPT09ICR0aGlzLT5pc1N0cmluZ09yTnVsbCgkY2xpZW50TWVkaWFUeXBlKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKAogICAgICAgICAgICAgICAgJ1VwbG9hZCBmaWxlIGNsaWVudCBtZWRpYSB0eXBlIG11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbCcKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5jbGllbnRNZWRpYVR5cGUgPSAkY2xpZW50TWVkaWFUeXBlOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJuIHRydWUgaWYgdGhlcmUgaXMgbm8gdXBsb2FkIGVycm9yCiAgICAgKgogICAgICogQHJldHVybiBib29sZWFuCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gaXNPaygpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5lcnJvciA9PT0gVVBMT0FEX0VSUl9PSzsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gYm9vbGVhbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNNb3ZlZCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5tb3ZlZDsKICAgIH0KCiAgICAvKioKICAgICAqIEB0aHJvd3MgUnVudGltZUV4Y2VwdGlvbiBpZiBpcyBtb3ZlZCBvciBub3Qgb2sKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiB2YWxpZGF0ZUFjdGl2ZSgpCiAgICB7CiAgICAgICAgaWYgKGZhbHNlID09PSAkdGhpcy0+aXNPaygpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCdDYW5ub3QgcmV0cmlldmUgc3RyZWFtIGR1ZSB0byB1cGxvYWQgZXJyb3InKTsKICAgICAgICB9CgogICAgICAgIGlmICgkdGhpcy0+aXNNb3ZlZCgpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCdDYW5ub3QgcmV0cmlldmUgc3RyZWFtIGFmdGVyIGl0IGhhcyBhbHJlYWR5IGJlZW4gbW92ZWQnKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKiBAdGhyb3dzIFJ1bnRpbWVFeGNlcHRpb24gaWYgdGhlIHVwbG9hZCB3YXMgbm90IHN1Y2Nlc3NmdWwuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTdHJlYW0oKQogICAgewogICAgICAgICR0aGlzLT52YWxpZGF0ZUFjdGl2ZSgpOwoKICAgICAgICBpZiAoJHRoaXMtPnN0cmVhbSBpbnN0YW5jZW9mIFN0cmVhbUludGVyZmFjZSkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnN0cmVhbTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgTGF6eU9wZW5TdHJlYW0oJHRoaXMtPmZpbGUsICdyKycpOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICoKICAgICAqIEBzZWUgaHR0cDovL3BocC5uZXQvaXNfdXBsb2FkZWRfZmlsZQogICAgICogQHNlZSBodHRwOi8vcGhwLm5ldC9tb3ZlX3VwbG9hZGVkX2ZpbGUKICAgICAqIEBwYXJhbSBzdHJpbmcgJHRhcmdldFBhdGggUGF0aCB0byB3aGljaCB0byBtb3ZlIHRoZSB1cGxvYWRlZCBmaWxlLgogICAgICogQHRocm93cyBSdW50aW1lRXhjZXB0aW9uIGlmIHRoZSB1cGxvYWQgd2FzIG5vdCBzdWNjZXNzZnVsLgogICAgICogQHRocm93cyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gaWYgdGhlICRwYXRoIHNwZWNpZmllZCBpcyBpbnZhbGlkLgogICAgICogQHRocm93cyBSdW50aW1lRXhjZXB0aW9uIG9uIGFueSBlcnJvciBkdXJpbmcgdGhlIG1vdmUgb3BlcmF0aW9uLCBvciBvbgogICAgICogICAgIHRoZSBzZWNvbmQgb3Igc3Vic2VxdWVudCBjYWxsIHRvIHRoZSBtZXRob2QuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtb3ZlVG8oJHRhcmdldFBhdGgpCiAgICB7CiAgICAgICAgJHRoaXMtPnZhbGlkYXRlQWN0aXZlKCk7CgogICAgICAgIGlmIChmYWxzZSA9PT0gJHRoaXMtPmlzU3RyaW5nTm90RW1wdHkoJHRhcmdldFBhdGgpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oCiAgICAgICAgICAgICAgICAnSW52YWxpZCBwYXRoIHByb3ZpZGVkIGZvciBtb3ZlIG9wZXJhdGlvbjsgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcnCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJHRoaXMtPmZpbGUpIHsKICAgICAgICAgICAgJHRoaXMtPm1vdmVkID0gcGhwX3NhcGlfbmFtZSgpID09ICdjbGknCiAgICAgICAgICAgICAgICA/IHJlbmFtZSgkdGhpcy0+ZmlsZSwgJHRhcmdldFBhdGgpCiAgICAgICAgICAgICAgICA6IG1vdmVfdXBsb2FkZWRfZmlsZSgkdGhpcy0+ZmlsZSwgJHRhcmdldFBhdGgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvcHlfdG9fc3RyZWFtKAogICAgICAgICAgICAgICAgJHRoaXMtPmdldFN0cmVhbSgpLAogICAgICAgICAgICAgICAgbmV3IExhenlPcGVuU3RyZWFtKCR0YXJnZXRQYXRoLCAndycpCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAkdGhpcy0+bW92ZWQgPSB0cnVlOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZhbHNlID09PSAkdGhpcy0+bW92ZWQpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oCiAgICAgICAgICAgICAgICBzcHJpbnRmKCdVcGxvYWRlZCBmaWxlIGNvdWxkIG5vdCBiZSBtb3ZlZCB0byAlcycsICR0YXJnZXRQYXRoKQogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqCiAgICAgKiBAcmV0dXJuIGludHxudWxsIFRoZSBmaWxlIHNpemUgaW4gYnl0ZXMgb3IgbnVsbCBpZiB1bmtub3duLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2l6ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5zaXplOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICoKICAgICAqIEBzZWUgaHR0cDovL3BocC5uZXQvbWFudWFsL2VuL2ZlYXR1cmVzLmZpbGUtdXBsb2FkLmVycm9ycy5waHAKICAgICAqIEByZXR1cm4gaW50IE9uZSBvZiBQSFAncyBVUExPQURfRVJSX1hYWCBjb25zdGFudHMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRFcnJvcigpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5lcnJvcjsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsIFRoZSBmaWxlbmFtZSBzZW50IGJ5IHRoZSBjbGllbnQgb3IgbnVsbCBpZiBub25lCiAgICAgKiAgICAgd2FzIHByb3ZpZGVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2xpZW50RmlsZW5hbWUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y2xpZW50RmlsZW5hbWU7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDbGllbnRNZWRpYVR5cGUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y2xpZW50TWVkaWFUeXBlOwogICAgfQp9Cg==AppDevTools/query/vendor/guzzlehttp/psr7/src/Uri.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFVyaUludGVyZmFjZTsKCi8qKgogKiBQU1ItNyBVUkkgaW1wbGVtZW50YXRpb24uCiAqCiAqIEBhdXRob3IgTWljaGFlbCBEb3dsaW5nCiAqIEBhdXRob3IgVG9iaWFzIFNjaHVsdHplCiAqIEBhdXRob3IgTWF0dGhldyBXZWllciBPJ1BoaW5uZXkKICovCmNsYXNzIFVyaSBpbXBsZW1lbnRzIFVyaUludGVyZmFjZQp7CiAgICAvKioKICAgICAqIEFic29sdXRlIGh0dHAgYW5kIGh0dHBzIFVSSXMgcmVxdWlyZSBhIGhvc3QgcGVyIFJGQyA3MjMwIFNlY3Rpb24gMi43CiAgICAgKiBidXQgaW4gZ2VuZXJpYyBVUklzIHRoZSBob3N0IGNhbiBiZSBlbXB0eS4gU28gZm9yIGh0dHAocykgVVJJcwogICAgICogd2UgYXBwbHkgdGhpcyBkZWZhdWx0IGhvc3Qgd2hlbiBubyBob3N0IGlzIGdpdmVuIHlldCB0byBmb3JtIGEKICAgICAqIHZhbGlkIFVSSS4KICAgICAqLwogICAgY29uc3QgSFRUUF9ERUZBVUxUX0hPU1QgPSAnbG9jYWxob3N0JzsKCiAgICBwcml2YXRlIHN0YXRpYyAkZGVmYXVsdFBvcnRzID0gWwogICAgICAgICdodHRwJyAgPT4gODAsCiAgICAgICAgJ2h0dHBzJyA9PiA0NDMsCiAgICAgICAgJ2Z0cCcgPT4gMjEsCiAgICAgICAgJ2dvcGhlcicgPT4gNzAsCiAgICAgICAgJ25udHAnID0+IDExOSwKICAgICAgICAnbmV3cycgPT4gMTE5LAogICAgICAgICd0ZWxuZXQnID0+IDIzLAogICAgICAgICd0bjMyNzAnID0+IDIzLAogICAgICAgICdpbWFwJyA9PiAxNDMsCiAgICAgICAgJ3BvcCcgPT4gMTEwLAogICAgICAgICdsZGFwJyA9PiAzODksCiAgICBdOwoKICAgIHByaXZhdGUgc3RhdGljICRjaGFyVW5yZXNlcnZlZCA9ICdhLXpBLVowLTlfXC1cLn4nOwogICAgcHJpdmF0ZSBzdGF0aWMgJGNoYXJTdWJEZWxpbXMgPSAnIVwkJlwnXChcKVwqXCssOz0nOwogICAgcHJpdmF0ZSBzdGF0aWMgJHJlcGxhY2VRdWVyeSA9IFsnPScgPT4gJyUzRCcsICcmJyA9PiAnJTI2J107CgogICAgLyoqIEB2YXIgc3RyaW5nIFVyaSBzY2hlbWUuICovCiAgICBwcml2YXRlICRzY2hlbWUgPSAnJzsKCiAgICAvKiogQHZhciBzdHJpbmcgVXJpIHVzZXIgaW5mby4gKi8KICAgIHByaXZhdGUgJHVzZXJJbmZvID0gJyc7CgogICAgLyoqIEB2YXIgc3RyaW5nIFVyaSBob3N0LiAqLwogICAgcHJpdmF0ZSAkaG9zdCA9ICcnOwoKICAgIC8qKiBAdmFyIGludHxudWxsIFVyaSBwb3J0LiAqLwogICAgcHJpdmF0ZSAkcG9ydDsKCiAgICAvKiogQHZhciBzdHJpbmcgVXJpIHBhdGguICovCiAgICBwcml2YXRlICRwYXRoID0gJyc7CgogICAgLyoqIEB2YXIgc3RyaW5nIFVyaSBxdWVyeSBzdHJpbmcuICovCiAgICBwcml2YXRlICRxdWVyeSA9ICcnOwoKICAgIC8qKiBAdmFyIHN0cmluZyBVcmkgZnJhZ21lbnQuICovCiAgICBwcml2YXRlICRmcmFnbWVudCA9ICcnOwoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkdXJpIFVSSSB0byBwYXJzZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHVyaSA9ICcnKQogICAgewogICAgICAgIC8vIHdlYWsgdHlwZSBjaGVjayB0byBhbHNvIGFjY2VwdCBudWxsIHVudGlsIHdlIGNhbiBhZGQgc2NhbGFyIHR5cGUgaGludHMKICAgICAgICBpZiAoJHVyaSAhPSAnJykgewogICAgICAgICAgICAkcGFydHMgPSBwYXJzZV91cmwoJHVyaSk7CiAgICAgICAgICAgIGlmICgkcGFydHMgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigiVW5hYmxlIHRvIHBhcnNlIFVSSTogJHVyaSIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICR0aGlzLT5hcHBseVBhcnRzKCRwYXJ0cyk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkKICAgIHsKICAgICAgICByZXR1cm4gc2VsZjo6Y29tcG9zZUNvbXBvbmVudHMoCiAgICAgICAgICAgICR0aGlzLT5zY2hlbWUsCiAgICAgICAgICAgICR0aGlzLT5nZXRBdXRob3JpdHkoKSwKICAgICAgICAgICAgJHRoaXMtPnBhdGgsCiAgICAgICAgICAgICR0aGlzLT5xdWVyeSwKICAgICAgICAgICAgJHRoaXMtPmZyYWdtZW50CiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIENvbXBvc2VzIGEgVVJJIHJlZmVyZW5jZSBzdHJpbmcgZnJvbSBpdHMgdmFyaW91cyBjb21wb25lbnRzLgogICAgICoKICAgICAqIFVzdWFsbHkgdGhpcyBtZXRob2QgZG9lcyBub3QgbmVlZCB0byBiZSBjYWxsZWQgbWFudWFsbHkgYnV0IGluc3RlYWQgaXMgdXNlZCBpbmRpcmVjdGx5IHZpYQogICAgICogYFBzclxIdHRwXE1lc3NhZ2VcVXJpSW50ZXJmYWNlOjpfX3RvU3RyaW5nYC4KICAgICAqCiAgICAgKiBQU1ItNyBVcmlJbnRlcmZhY2UgdHJlYXRzIGFuIGVtcHR5IGNvbXBvbmVudCB0aGUgc2FtZSBhcyBhIG1pc3NpbmcgY29tcG9uZW50IGFzCiAgICAgKiBnZXRRdWVyeSgpLCBnZXRGcmFnbWVudCgpIGV0Yy4gYWx3YXlzIHJldHVybiBhIHN0cmluZy4gVGhpcyBleHBsYWlucyB0aGUgc2xpZ2h0CiAgICAgKiBkaWZmZXJlbmNlIHRvIFJGQyAzOTg2IFNlY3Rpb24gNS4zLgogICAgICoKICAgICAqIEFub3RoZXIgYWRqdXN0bWVudCBpcyB0aGF0IHRoZSBhdXRob3JpdHkgc2VwYXJhdG9yIGlzIGFkZGVkIGV2ZW4gd2hlbiB0aGUgYXV0aG9yaXR5IGlzIG1pc3NpbmcvZW1wdHkKICAgICAqIGZvciB0aGUgImZpbGUiIHNjaGVtZS4gVGhpcyBpcyBiZWNhdXNlIFBIUCBzdHJlYW0gZnVuY3Rpb25zIGxpa2UgYGZpbGVfZ2V0X2NvbnRlbnRzYCBvbmx5IHdvcmsgd2l0aAogICAgICogYGZpbGU6Ly8vbXlmaWxlYCBidXQgbm90IHdpdGggYGZpbGU6L215ZmlsZWAgYWx0aG91Z2ggdGhleSBhcmUgZXF1aXZhbGVudCBhY2NvcmRpbmcgdG8gUkZDIDM5ODYuIEJ1dAogICAgICogYGZpbGU6Ly8vYCBpcyB0aGUgbW9yZSBjb21tb24gc3ludGF4IGZvciB0aGUgZmlsZSBzY2hlbWUgYW55d2F5IChDaHJvbWUgZm9yIGV4YW1wbGUgcmVkaXJlY3RzIHRvCiAgICAgKiB0aGF0IGZvcm1hdCkuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc2NoZW1lCiAgICAgKiBAcGFyYW0gc3RyaW5nICRhdXRob3JpdHkKICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhdGgKICAgICAqIEBwYXJhbSBzdHJpbmcgJHF1ZXJ5CiAgICAgKiBAcGFyYW0gc3RyaW5nICRmcmFnbWVudAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKgogICAgICogQGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi01LjMKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjb21wb3NlQ29tcG9uZW50cygkc2NoZW1lLCAkYXV0aG9yaXR5LCAkcGF0aCwgJHF1ZXJ5LCAkZnJhZ21lbnQpCiAgICB7CiAgICAgICAgJHVyaSA9ICcnOwoKICAgICAgICAvLyB3ZWFrIHR5cGUgY2hlY2tzIHRvIGFsc28gYWNjZXB0IG51bGwgdW50aWwgd2UgY2FuIGFkZCBzY2FsYXIgdHlwZSBoaW50cwogICAgICAgIGlmICgkc2NoZW1lICE9ICcnKSB7CiAgICAgICAgICAgICR1cmkgLj0gJHNjaGVtZSAuICc6JzsKICAgICAgICB9CgogICAgICAgIGlmICgkYXV0aG9yaXR5ICE9ICcnfHwgJHNjaGVtZSA9PT0gJ2ZpbGUnKSB7CiAgICAgICAgICAgICR1cmkgLj0gJy8vJyAuICRhdXRob3JpdHk7CiAgICAgICAgfQoKICAgICAgICAkdXJpIC49ICRwYXRoOwoKICAgICAgICBpZiAoJHF1ZXJ5ICE9ICcnKSB7CiAgICAgICAgICAgICR1cmkgLj0gJz8nIC4gJHF1ZXJ5OwogICAgICAgIH0KCiAgICAgICAgaWYgKCRmcmFnbWVudCAhPSAnJykgewogICAgICAgICAgICAkdXJpIC49ICcjJyAuICRmcmFnbWVudDsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdXJpOwogICAgfQoKICAgIC8qKgogICAgICogV2hldGhlciB0aGUgVVJJIGhhcyB0aGUgZGVmYXVsdCBwb3J0IG9mIHRoZSBjdXJyZW50IHNjaGVtZS4KICAgICAqCiAgICAgKiBgUHNyXEh0dHBcTWVzc2FnZVxVcmlJbnRlcmZhY2U6OmdldFBvcnRgIG1heSByZXR1cm4gbnVsbCBvciB0aGUgc3RhbmRhcmQgcG9ydC4gVGhpcyBtZXRob2QgY2FuIGJlIHVzZWQKICAgICAqIGluZGVwZW5kZW50bHkgb2YgdGhlIGltcGxlbWVudGF0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSBVcmlJbnRlcmZhY2UgJHVyaQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzRGVmYXVsdFBvcnQoVXJpSW50ZXJmYWNlICR1cmkpCiAgICB7CiAgICAgICAgcmV0dXJuICR1cmktPmdldFBvcnQoKSA9PT0gbnVsbAogICAgICAgICAgICB8fCAoaXNzZXQoc2VsZjo6JGRlZmF1bHRQb3J0c1skdXJpLT5nZXRTY2hlbWUoKV0pICYmICR1cmktPmdldFBvcnQoKSA9PT0gc2VsZjo6JGRlZmF1bHRQb3J0c1skdXJpLT5nZXRTY2hlbWUoKV0pOwogICAgfQoKICAgIC8qKgogICAgICogV2hldGhlciB0aGUgVVJJIGlzIGFic29sdXRlLCBpLmUuIGl0IGhhcyBhIHNjaGVtZS4KICAgICAqCiAgICAgKiBBbiBpbnN0YW5jZSBvZiBVcmlJbnRlcmZhY2UgY2FuIGVpdGhlciBiZSBhbiBhYnNvbHV0ZSBVUkkgb3IgYSByZWxhdGl2ZSByZWZlcmVuY2UuIFRoaXMgbWV0aG9kIHJldHVybnMgdHJ1ZQogICAgICogaWYgaXQgaXMgdGhlIGZvcm1lci4gQW4gYWJzb2x1dGUgVVJJIGhhcyBhIHNjaGVtZS4gQSByZWxhdGl2ZSByZWZlcmVuY2UgaXMgdXNlZCB0byBleHByZXNzIGEgVVJJIHJlbGF0aXZlCiAgICAgKiB0byBhbm90aGVyIFVSSSwgdGhlIGJhc2UgVVJJLiBSZWxhdGl2ZSByZWZlcmVuY2VzIGNhbiBiZSBkaXZpZGVkIGludG8gc2V2ZXJhbCBmb3JtczoKICAgICAqIC0gbmV0d29yay1wYXRoIHJlZmVyZW5jZXMsIGUuZy4gJy8vZXhhbXBsZS5jb20vcGF0aCcKICAgICAqIC0gYWJzb2x1dGUtcGF0aCByZWZlcmVuY2VzLCBlLmcuICcvcGF0aCcKICAgICAqIC0gcmVsYXRpdmUtcGF0aCByZWZlcmVuY2VzLCBlLmcuICdzdWJwYXRoJwogICAgICoKICAgICAqIEBwYXJhbSBVcmlJbnRlcmZhY2UgJHVyaQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICogQHNlZSBVcmk6OmlzTmV0d29ya1BhdGhSZWZlcmVuY2UKICAgICAqIEBzZWUgVXJpOjppc0Fic29sdXRlUGF0aFJlZmVyZW5jZQogICAgICogQHNlZSBVcmk6OmlzUmVsYXRpdmVQYXRoUmVmZXJlbmNlCiAgICAgKiBAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc0Fic29sdXRlKFVyaUludGVyZmFjZSAkdXJpKQogICAgewogICAgICAgIHJldHVybiAkdXJpLT5nZXRTY2hlbWUoKSAhPT0gJyc7CiAgICB9CgogICAgLyoqCiAgICAgKiBXaGV0aGVyIHRoZSBVUkkgaXMgYSBuZXR3b3JrLXBhdGggcmVmZXJlbmNlLgogICAgICoKICAgICAqIEEgcmVsYXRpdmUgcmVmZXJlbmNlIHRoYXQgYmVnaW5zIHdpdGggdHdvIHNsYXNoIGNoYXJhY3RlcnMgaXMgdGVybWVkIGFuIG5ldHdvcmstcGF0aCByZWZlcmVuY2UuCiAgICAgKgogICAgICogQHBhcmFtIFVyaUludGVyZmFjZSAkdXJpCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKiBAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTQuMgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzTmV0d29ya1BhdGhSZWZlcmVuY2UoVXJpSW50ZXJmYWNlICR1cmkpCiAgICB7CiAgICAgICAgcmV0dXJuICR1cmktPmdldFNjaGVtZSgpID09PSAnJyAmJiAkdXJpLT5nZXRBdXRob3JpdHkoKSAhPT0gJyc7CiAgICB9CgogICAgLyoqCiAgICAgKiBXaGV0aGVyIHRoZSBVUkkgaXMgYSBhYnNvbHV0ZS1wYXRoIHJlZmVyZW5jZS4KICAgICAqCiAgICAgKiBBIHJlbGF0aXZlIHJlZmVyZW5jZSB0aGF0IGJlZ2lucyB3aXRoIGEgc2luZ2xlIHNsYXNoIGNoYXJhY3RlciBpcyB0ZXJtZWQgYW4gYWJzb2x1dGUtcGF0aCByZWZlcmVuY2UuCiAgICAgKgogICAgICogQHBhcmFtIFVyaUludGVyZmFjZSAkdXJpCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKiBAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTQuMgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzQWJzb2x1dGVQYXRoUmVmZXJlbmNlKFVyaUludGVyZmFjZSAkdXJpKQogICAgewogICAgICAgIHJldHVybiAkdXJpLT5nZXRTY2hlbWUoKSA9PT0gJycKICAgICAgICAgICAgJiYgJHVyaS0+Z2V0QXV0aG9yaXR5KCkgPT09ICcnCiAgICAgICAgICAgICYmIGlzc2V0KCR1cmktPmdldFBhdGgoKVswXSkKICAgICAgICAgICAgJiYgJHVyaS0+Z2V0UGF0aCgpWzBdID09PSAnLyc7CiAgICB9CgogICAgLyoqCiAgICAgKiBXaGV0aGVyIHRoZSBVUkkgaXMgYSByZWxhdGl2ZS1wYXRoIHJlZmVyZW5jZS4KICAgICAqCiAgICAgKiBBIHJlbGF0aXZlIHJlZmVyZW5jZSB0aGF0IGRvZXMgbm90IGJlZ2luIHdpdGggYSBzbGFzaCBjaGFyYWN0ZXIgaXMgdGVybWVkIGEgcmVsYXRpdmUtcGF0aCByZWZlcmVuY2UuCiAgICAgKgogICAgICogQHBhcmFtIFVyaUludGVyZmFjZSAkdXJpCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKiBAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTQuMgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzUmVsYXRpdmVQYXRoUmVmZXJlbmNlKFVyaUludGVyZmFjZSAkdXJpKQogICAgewogICAgICAgIHJldHVybiAkdXJpLT5nZXRTY2hlbWUoKSA9PT0gJycKICAgICAgICAgICAgJiYgJHVyaS0+Z2V0QXV0aG9yaXR5KCkgPT09ICcnCiAgICAgICAgICAgICYmICghaXNzZXQoJHVyaS0+Z2V0UGF0aCgpWzBdKSB8fCAkdXJpLT5nZXRQYXRoKClbMF0gIT09ICcvJyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBXaGV0aGVyIHRoZSBVUkkgaXMgYSBzYW1lLWRvY3VtZW50IHJlZmVyZW5jZS4KICAgICAqCiAgICAgKiBBIHNhbWUtZG9jdW1lbnQgcmVmZXJlbmNlIHJlZmVycyB0byBhIFVSSSB0aGF0IGlzLCBhc2lkZSBmcm9tIGl0cyBmcmFnbWVudAogICAgICogY29tcG9uZW50LCBpZGVudGljYWwgdG8gdGhlIGJhc2UgVVJJLiBXaGVuIG5vIGJhc2UgVVJJIGlzIGdpdmVuLCBvbmx5IGFuIGVtcHR5CiAgICAgKiBVUkkgcmVmZXJlbmNlIChhcGFydCBmcm9tIGl0cyBmcmFnbWVudCkgaXMgY29uc2lkZXJlZCBhIHNhbWUtZG9jdW1lbnQgcmVmZXJlbmNlLgogICAgICoKICAgICAqIEBwYXJhbSBVcmlJbnRlcmZhY2UgICAgICAkdXJpICBUaGUgVVJJIHRvIGNoZWNrCiAgICAgKiBAcGFyYW0gVXJpSW50ZXJmYWNlfG51bGwgJGJhc2UgQW4gb3B0aW9uYWwgYmFzZSBVUkkgdG8gY29tcGFyZSBhZ2FpbnN0CiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKiBAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTQuNAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzU2FtZURvY3VtZW50UmVmZXJlbmNlKFVyaUludGVyZmFjZSAkdXJpLCBVcmlJbnRlcmZhY2UgJGJhc2UgPSBudWxsKQogICAgewogICAgICAgIGlmICgkYmFzZSAhPT0gbnVsbCkgewogICAgICAgICAgICAkdXJpID0gVXJpUmVzb2x2ZXI6OnJlc29sdmUoJGJhc2UsICR1cmkpOwoKICAgICAgICAgICAgcmV0dXJuICgkdXJpLT5nZXRTY2hlbWUoKSA9PT0gJGJhc2UtPmdldFNjaGVtZSgpKQogICAgICAgICAgICAgICAgJiYgKCR1cmktPmdldEF1dGhvcml0eSgpID09PSAkYmFzZS0+Z2V0QXV0aG9yaXR5KCkpCiAgICAgICAgICAgICAgICAmJiAoJHVyaS0+Z2V0UGF0aCgpID09PSAkYmFzZS0+Z2V0UGF0aCgpKQogICAgICAgICAgICAgICAgJiYgKCR1cmktPmdldFF1ZXJ5KCkgPT09ICRiYXNlLT5nZXRRdWVyeSgpKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdXJpLT5nZXRTY2hlbWUoKSA9PT0gJycgJiYgJHVyaS0+Z2V0QXV0aG9yaXR5KCkgPT09ICcnICYmICR1cmktPmdldFBhdGgoKSA9PT0gJycgJiYgJHVyaS0+Z2V0UXVlcnkoKSA9PT0gJyc7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZW1vdmVzIGRvdCBzZWdtZW50cyBmcm9tIGEgcGF0aCBhbmQgcmV0dXJucyB0aGUgbmV3IHBhdGguCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcGF0aAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKgogICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAxLjQuIFVzZSBVcmlSZXNvbHZlcjo6cmVtb3ZlRG90U2VnbWVudHMgaW5zdGVhZC4KICAgICAqIEBzZWUgVXJpUmVzb2x2ZXI6OnJlbW92ZURvdFNlZ21lbnRzCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmVtb3ZlRG90U2VnbWVudHMoJHBhdGgpCiAgICB7CiAgICAgICAgcmV0dXJuIFVyaVJlc29sdmVyOjpyZW1vdmVEb3RTZWdtZW50cygkcGF0aCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb252ZXJ0cyB0aGUgcmVsYXRpdmUgVVJJIGludG8gYSBuZXcgVVJJIHRoYXQgaXMgcmVzb2x2ZWQgYWdhaW5zdCB0aGUgYmFzZSBVUkkuCiAgICAgKgogICAgICogQHBhcmFtIFVyaUludGVyZmFjZSAgICAgICAgJGJhc2UgQmFzZSBVUkkKICAgICAqIEBwYXJhbSBzdHJpbmd8VXJpSW50ZXJmYWNlICRyZWwgIFJlbGF0aXZlIFVSSQogICAgICoKICAgICAqIEByZXR1cm4gVXJpSW50ZXJmYWNlCiAgICAgKgogICAgICogQGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAxLjQuIFVzZSBVcmlSZXNvbHZlcjo6cmVzb2x2ZSBpbnN0ZWFkLgogICAgICogQHNlZSBVcmlSZXNvbHZlcjo6cmVzb2x2ZQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJlc29sdmUoVXJpSW50ZXJmYWNlICRiYXNlLCAkcmVsKQogICAgewogICAgICAgIGlmICghKCRyZWwgaW5zdGFuY2VvZiBVcmlJbnRlcmZhY2UpKSB7CiAgICAgICAgICAgICRyZWwgPSBuZXcgc2VsZigkcmVsKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBVcmlSZXNvbHZlcjo6cmVzb2x2ZSgkYmFzZSwgJHJlbCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGVzIGEgbmV3IFVSSSB3aXRoIGEgc3BlY2lmaWMgcXVlcnkgc3RyaW5nIHZhbHVlIHJlbW92ZWQuCiAgICAgKgogICAgICogQW55IGV4aXN0aW5nIHF1ZXJ5IHN0cmluZyB2YWx1ZXMgdGhhdCBleGFjdGx5IG1hdGNoIHRoZSBwcm92aWRlZCBrZXkgYXJlCiAgICAgKiByZW1vdmVkLgogICAgICoKICAgICAqIEBwYXJhbSBVcmlJbnRlcmZhY2UgJHVyaSBVUkkgdG8gdXNlIGFzIGEgYmFzZS4KICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAgJGtleSBRdWVyeSBzdHJpbmcga2V5IHRvIHJlbW92ZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIFVyaUludGVyZmFjZQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHdpdGhvdXRRdWVyeVZhbHVlKFVyaUludGVyZmFjZSAkdXJpLCAka2V5KQogICAgewogICAgICAgICRjdXJyZW50ID0gJHVyaS0+Z2V0UXVlcnkoKTsKICAgICAgICBpZiAoJGN1cnJlbnQgPT09ICcnKSB7CiAgICAgICAgICAgIHJldHVybiAkdXJpOwogICAgICAgIH0KCiAgICAgICAgJGRlY29kZWRLZXkgPSByYXd1cmxkZWNvZGUoJGtleSk7CiAgICAgICAgJHJlc3VsdCA9IGFycmF5X2ZpbHRlcihleHBsb2RlKCcmJywgJGN1cnJlbnQpLCBmdW5jdGlvbiAoJHBhcnQpIHVzZSAoJGRlY29kZWRLZXkpIHsKICAgICAgICAgICAgcmV0dXJuIHJhd3VybGRlY29kZShleHBsb2RlKCc9JywgJHBhcnQpWzBdKSAhPT0gJGRlY29kZWRLZXk7CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiAkdXJpLT53aXRoUXVlcnkoaW1wbG9kZSgnJicsICRyZXN1bHQpKTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBuZXcgVVJJIHdpdGggYSBzcGVjaWZpYyBxdWVyeSBzdHJpbmcgdmFsdWUuCiAgICAgKgogICAgICogQW55IGV4aXN0aW5nIHF1ZXJ5IHN0cmluZyB2YWx1ZXMgdGhhdCBleGFjdGx5IG1hdGNoIHRoZSBwcm92aWRlZCBrZXkgYXJlCiAgICAgKiByZW1vdmVkIGFuZCByZXBsYWNlZCB3aXRoIHRoZSBnaXZlbiBrZXkgdmFsdWUgcGFpci4KICAgICAqCiAgICAgKiBBIHZhbHVlIG9mIG51bGwgd2lsbCBzZXQgdGhlIHF1ZXJ5IHN0cmluZyBrZXkgd2l0aG91dCBhIHZhbHVlLCBlLmcuICJrZXkiCiAgICAgKiBpbnN0ZWFkIG9mICJrZXk9dmFsdWUiLgogICAgICoKICAgICAqIEBwYXJhbSBVcmlJbnRlcmZhY2UgJHVyaSAgIFVSSSB0byB1c2UgYXMgYSBiYXNlLgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAka2V5ICAgS2V5IHRvIHNldC4KICAgICAqIEBwYXJhbSBzdHJpbmd8bnVsbCAgJHZhbHVlIFZhbHVlIHRvIHNldAogICAgICoKICAgICAqIEByZXR1cm4gVXJpSW50ZXJmYWNlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gd2l0aFF1ZXJ5VmFsdWUoVXJpSW50ZXJmYWNlICR1cmksICRrZXksICR2YWx1ZSkKICAgIHsKICAgICAgICAkY3VycmVudCA9ICR1cmktPmdldFF1ZXJ5KCk7CgogICAgICAgIGlmICgkY3VycmVudCA9PT0gJycpIHsKICAgICAgICAgICAgJHJlc3VsdCA9IFtdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRkZWNvZGVkS2V5ID0gcmF3dXJsZGVjb2RlKCRrZXkpOwogICAgICAgICAgICAkcmVzdWx0ID0gYXJyYXlfZmlsdGVyKGV4cGxvZGUoJyYnLCAkY3VycmVudCksIGZ1bmN0aW9uICgkcGFydCkgdXNlICgkZGVjb2RlZEtleSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHJhd3VybGRlY29kZShleHBsb2RlKCc9JywgJHBhcnQpWzBdKSAhPT0gJGRlY29kZWRLZXk7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KCiAgICAgICAgLy8gUXVlcnkgc3RyaW5nIHNlcGFyYXRvcnMgKCI9IiwgIiYiKSB3aXRoaW4gdGhlIGtleSBvciB2YWx1ZSBuZWVkIHRvIGJlIGVuY29kZWQKICAgICAgICAvLyAod2hpbGUgcHJldmVudGluZyBkb3VibGUtZW5jb2RpbmcpIGJlZm9yZSBzZXR0aW5nIHRoZSBxdWVyeSBzdHJpbmcuIEFsbCBvdGhlcgogICAgICAgIC8vIGNoYXJzIHRoYXQgbmVlZCBwZXJjZW50LWVuY29kaW5nIHdpbGwgYmUgZW5jb2RlZCBieSB3aXRoUXVlcnkoKS4KICAgICAgICAka2V5ID0gc3RydHIoJGtleSwgc2VsZjo6JHJlcGxhY2VRdWVyeSk7CgogICAgICAgIGlmICgkdmFsdWUgIT09IG51bGwpIHsKICAgICAgICAgICAgJHJlc3VsdFtdID0gJGtleSAuICc9JyAuIHN0cnRyKCR2YWx1ZSwgc2VsZjo6JHJlcGxhY2VRdWVyeSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHJlc3VsdFtdID0gJGtleTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdXJpLT53aXRoUXVlcnkoaW1wbG9kZSgnJicsICRyZXN1bHQpKTsKICAgIH0KCiAgICAvKioKICAgICAqIENyZWF0ZXMgYSBVUkkgZnJvbSBhIGhhc2ggb2YgYHBhcnNlX3VybGAgY29tcG9uZW50cy4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJHBhcnRzCiAgICAgKgogICAgICogQHJldHVybiBVcmlJbnRlcmZhY2UKICAgICAqIEBsaW5rIGh0dHA6Ly9waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5wYXJzZS11cmwucGhwCiAgICAgKgogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIElmIHRoZSBjb21wb25lbnRzIGRvIG5vdCBmb3JtIGEgdmFsaWQgVVJJLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZyb21QYXJ0cyhhcnJheSAkcGFydHMpCiAgICB7CiAgICAgICAgJHVyaSA9IG5ldyBzZWxmKCk7CiAgICAgICAgJHVyaS0+YXBwbHlQYXJ0cygkcGFydHMpOwogICAgICAgICR1cmktPnZhbGlkYXRlU3RhdGUoKTsKCiAgICAgICAgcmV0dXJuICR1cmk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFNjaGVtZSgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5zY2hlbWU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEF1dGhvcml0eSgpCiAgICB7CiAgICAgICAgJGF1dGhvcml0eSA9ICR0aGlzLT5ob3N0OwogICAgICAgIGlmICgkdGhpcy0+dXNlckluZm8gIT09ICcnKSB7CiAgICAgICAgICAgICRhdXRob3JpdHkgPSAkdGhpcy0+dXNlckluZm8gLiAnQCcgLiAkYXV0aG9yaXR5OwogICAgICAgIH0KCiAgICAgICAgaWYgKCR0aGlzLT5wb3J0ICE9PSBudWxsKSB7CiAgICAgICAgICAgICRhdXRob3JpdHkgLj0gJzonIC4gJHRoaXMtPnBvcnQ7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGF1dGhvcml0eTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VXNlckluZm8oKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dXNlckluZm87CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEhvc3QoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+aG9zdDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UG9ydCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5wb3J0OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQYXRoKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnBhdGg7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFF1ZXJ5KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnF1ZXJ5OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRGcmFnbWVudCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5mcmFnbWVudDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aFNjaGVtZSgkc2NoZW1lKQogICAgewogICAgICAgICRzY2hlbWUgPSAkdGhpcy0+ZmlsdGVyU2NoZW1lKCRzY2hlbWUpOwoKICAgICAgICBpZiAoJHRoaXMtPnNjaGVtZSA9PT0gJHNjaGVtZSkgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICAkbmV3ID0gY2xvbmUgJHRoaXM7CiAgICAgICAgJG5ldy0+c2NoZW1lID0gJHNjaGVtZTsKICAgICAgICAkbmV3LT5yZW1vdmVEZWZhdWx0UG9ydCgpOwogICAgICAgICRuZXctPnZhbGlkYXRlU3RhdGUoKTsKCiAgICAgICAgcmV0dXJuICRuZXc7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhVc2VySW5mbygkdXNlciwgJHBhc3N3b3JkID0gbnVsbCkKICAgIHsKICAgICAgICAkaW5mbyA9ICR1c2VyOwogICAgICAgIGlmICgkcGFzc3dvcmQgIT0gJycpIHsKICAgICAgICAgICAgJGluZm8gLj0gJzonIC4gJHBhc3N3b3JkOwogICAgICAgIH0KCiAgICAgICAgaWYgKCR0aGlzLT51c2VySW5mbyA9PT0gJGluZm8pIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzOwogICAgICAgIH0KCiAgICAgICAgJG5ldyA9IGNsb25lICR0aGlzOwogICAgICAgICRuZXctPnVzZXJJbmZvID0gJGluZm87CiAgICAgICAgJG5ldy0+dmFsaWRhdGVTdGF0ZSgpOwoKICAgICAgICByZXR1cm4gJG5ldzsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aEhvc3QoJGhvc3QpCiAgICB7CiAgICAgICAgJGhvc3QgPSAkdGhpcy0+ZmlsdGVySG9zdCgkaG9zdCk7CgogICAgICAgIGlmICgkdGhpcy0+aG9zdCA9PT0gJGhvc3QpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzOwogICAgICAgIH0KCiAgICAgICAgJG5ldyA9IGNsb25lICR0aGlzOwogICAgICAgICRuZXctPmhvc3QgPSAkaG9zdDsKICAgICAgICAkbmV3LT52YWxpZGF0ZVN0YXRlKCk7CgogICAgICAgIHJldHVybiAkbmV3OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoUG9ydCgkcG9ydCkKICAgIHsKICAgICAgICAkcG9ydCA9ICR0aGlzLT5maWx0ZXJQb3J0KCRwb3J0KTsKCiAgICAgICAgaWYgKCR0aGlzLT5wb3J0ID09PSAkcG9ydCkgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICAkbmV3ID0gY2xvbmUgJHRoaXM7CiAgICAgICAgJG5ldy0+cG9ydCA9ICRwb3J0OwogICAgICAgICRuZXctPnJlbW92ZURlZmF1bHRQb3J0KCk7CiAgICAgICAgJG5ldy0+dmFsaWRhdGVTdGF0ZSgpOwoKICAgICAgICByZXR1cm4gJG5ldzsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aFBhdGgoJHBhdGgpCiAgICB7CiAgICAgICAgJHBhdGggPSAkdGhpcy0+ZmlsdGVyUGF0aCgkcGF0aCk7CgogICAgICAgIGlmICgkdGhpcy0+cGF0aCA9PT0gJHBhdGgpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzOwogICAgICAgIH0KCiAgICAgICAgJG5ldyA9IGNsb25lICR0aGlzOwogICAgICAgICRuZXctPnBhdGggPSAkcGF0aDsKICAgICAgICAkbmV3LT52YWxpZGF0ZVN0YXRlKCk7CgogICAgICAgIHJldHVybiAkbmV3OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoUXVlcnkoJHF1ZXJ5KQogICAgewogICAgICAgICRxdWVyeSA9ICR0aGlzLT5maWx0ZXJRdWVyeUFuZEZyYWdtZW50KCRxdWVyeSk7CgogICAgICAgIGlmICgkdGhpcy0+cXVlcnkgPT09ICRxdWVyeSkgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICAkbmV3ID0gY2xvbmUgJHRoaXM7CiAgICAgICAgJG5ldy0+cXVlcnkgPSAkcXVlcnk7CgogICAgICAgIHJldHVybiAkbmV3OwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoRnJhZ21lbnQoJGZyYWdtZW50KQogICAgewogICAgICAgICRmcmFnbWVudCA9ICR0aGlzLT5maWx0ZXJRdWVyeUFuZEZyYWdtZW50KCRmcmFnbWVudCk7CgogICAgICAgIGlmICgkdGhpcy0+ZnJhZ21lbnQgPT09ICRmcmFnbWVudCkgewogICAgICAgICAgICByZXR1cm4gJHRoaXM7CiAgICAgICAgfQoKICAgICAgICAkbmV3ID0gY2xvbmUgJHRoaXM7CiAgICAgICAgJG5ldy0+ZnJhZ21lbnQgPSAkZnJhZ21lbnQ7CgogICAgICAgIHJldHVybiAkbmV3OwogICAgfQoKICAgIC8qKgogICAgICogQXBwbHkgcGFyc2VfdXJsIHBhcnRzIHRvIGEgVVJJLgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkcGFydHMgQXJyYXkgb2YgcGFyc2VfdXJsIHBhcnRzIHRvIGFwcGx5LgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGFwcGx5UGFydHMoYXJyYXkgJHBhcnRzKQogICAgewogICAgICAgICR0aGlzLT5zY2hlbWUgPSBpc3NldCgkcGFydHNbJ3NjaGVtZSddKQogICAgICAgICAgICA/ICR0aGlzLT5maWx0ZXJTY2hlbWUoJHBhcnRzWydzY2hlbWUnXSkKICAgICAgICAgICAgOiAnJzsKICAgICAgICAkdGhpcy0+dXNlckluZm8gPSBpc3NldCgkcGFydHNbJ3VzZXInXSkgPyAkcGFydHNbJ3VzZXInXSA6ICcnOwogICAgICAgICR0aGlzLT5ob3N0ID0gaXNzZXQoJHBhcnRzWydob3N0J10pCiAgICAgICAgICAgID8gJHRoaXMtPmZpbHRlckhvc3QoJHBhcnRzWydob3N0J10pCiAgICAgICAgICAgIDogJyc7CiAgICAgICAgJHRoaXMtPnBvcnQgPSBpc3NldCgkcGFydHNbJ3BvcnQnXSkKICAgICAgICAgICAgPyAkdGhpcy0+ZmlsdGVyUG9ydCgkcGFydHNbJ3BvcnQnXSkKICAgICAgICAgICAgOiBudWxsOwogICAgICAgICR0aGlzLT5wYXRoID0gaXNzZXQoJHBhcnRzWydwYXRoJ10pCiAgICAgICAgICAgID8gJHRoaXMtPmZpbHRlclBhdGgoJHBhcnRzWydwYXRoJ10pCiAgICAgICAgICAgIDogJyc7CiAgICAgICAgJHRoaXMtPnF1ZXJ5ID0gaXNzZXQoJHBhcnRzWydxdWVyeSddKQogICAgICAgICAgICA/ICR0aGlzLT5maWx0ZXJRdWVyeUFuZEZyYWdtZW50KCRwYXJ0c1sncXVlcnknXSkKICAgICAgICAgICAgOiAnJzsKICAgICAgICAkdGhpcy0+ZnJhZ21lbnQgPSBpc3NldCgkcGFydHNbJ2ZyYWdtZW50J10pCiAgICAgICAgICAgID8gJHRoaXMtPmZpbHRlclF1ZXJ5QW5kRnJhZ21lbnQoJHBhcnRzWydmcmFnbWVudCddKQogICAgICAgICAgICA6ICcnOwogICAgICAgIGlmIChpc3NldCgkcGFydHNbJ3Bhc3MnXSkpIHsKICAgICAgICAgICAgJHRoaXMtPnVzZXJJbmZvIC49ICc6JyAuICRwYXJ0c1sncGFzcyddOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPnJlbW92ZURlZmF1bHRQb3J0KCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzY2hlbWUKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICoKICAgICAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBJZiB0aGUgc2NoZW1lIGlzIGludmFsaWQuCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZmlsdGVyU2NoZW1lKCRzY2hlbWUpCiAgICB7CiAgICAgICAgaWYgKCFpc19zdHJpbmcoJHNjaGVtZSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1NjaGVtZSBtdXN0IGJlIGEgc3RyaW5nJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gc3RydG9sb3dlcigkc2NoZW1lKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGhvc3QKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICoKICAgICAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBJZiB0aGUgaG9zdCBpcyBpbnZhbGlkLgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGZpbHRlckhvc3QoJGhvc3QpCiAgICB7CiAgICAgICAgaWYgKCFpc19zdHJpbmcoJGhvc3QpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdIb3N0IG11c3QgYmUgYSBzdHJpbmcnKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBzdHJ0b2xvd2VyKCRob3N0KTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBpbnR8bnVsbCAkcG9ydAogICAgICoKICAgICAqIEByZXR1cm4gaW50fG51bGwKICAgICAqCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gSWYgdGhlIHBvcnQgaXMgaW52YWxpZC4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBmaWx0ZXJQb3J0KCRwb3J0KQogICAgewogICAgICAgIGlmICgkcG9ydCA9PT0gbnVsbCkgewogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgICRwb3J0ID0gKGludCkgJHBvcnQ7CiAgICAgICAgaWYgKDEgPiAkcG9ydCB8fCAweGZmZmYgPCAkcG9ydCkgewogICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgIHNwcmludGYoJ0ludmFsaWQgcG9ydDogJWQuIE11c3QgYmUgYmV0d2VlbiAxIGFuZCA2NTUzNScsICRwb3J0KQogICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRwb3J0OwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gcmVtb3ZlRGVmYXVsdFBvcnQoKQogICAgewogICAgICAgIGlmICgkdGhpcy0+cG9ydCAhPT0gbnVsbCAmJiBzZWxmOjppc0RlZmF1bHRQb3J0KCR0aGlzKSkgewogICAgICAgICAgICAkdGhpcy0+cG9ydCA9IG51bGw7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogRmlsdGVycyB0aGUgcGF0aCBvZiBhIFVSSQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHBhdGgKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICoKICAgICAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBJZiB0aGUgcGF0aCBpcyBpbnZhbGlkLgogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGZpbHRlclBhdGgoJHBhdGgpCiAgICB7CiAgICAgICAgaWYgKCFpc19zdHJpbmcoJHBhdGgpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdQYXRoIG11c3QgYmUgYSBzdHJpbmcnKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBwcmVnX3JlcGxhY2VfY2FsbGJhY2soCiAgICAgICAgICAgICcvKD86W14nIC4gc2VsZjo6JGNoYXJVbnJlc2VydmVkIC4gc2VsZjo6JGNoYXJTdWJEZWxpbXMgLiAnJTpAXC9dKyt8JSg/IVtBLUZhLWYwLTldezJ9KSkvJywKICAgICAgICAgICAgWyR0aGlzLCAncmF3dXJsZW5jb2RlTWF0Y2haZXJvJ10sCiAgICAgICAgICAgICRwYXRoCiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIEZpbHRlcnMgdGhlIHF1ZXJ5IHN0cmluZyBvciBmcmFnbWVudCBvZiBhIFVSSS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRzdHIKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICoKICAgICAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBJZiB0aGUgcXVlcnkgb3IgZnJhZ21lbnQgaXMgaW52YWxpZC4KICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBmaWx0ZXJRdWVyeUFuZEZyYWdtZW50KCRzdHIpCiAgICB7CiAgICAgICAgaWYgKCFpc19zdHJpbmcoJHN0cikpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1F1ZXJ5IGFuZCBmcmFnbWVudCBtdXN0IGJlIGEgc3RyaW5nJyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gcHJlZ19yZXBsYWNlX2NhbGxiYWNrKAogICAgICAgICAgICAnLyg/OlteJyAuIHNlbGY6OiRjaGFyVW5yZXNlcnZlZCAuIHNlbGY6OiRjaGFyU3ViRGVsaW1zIC4gJyU6QFwvXD9dKyt8JSg/IVtBLUZhLWYwLTldezJ9KSkvJywKICAgICAgICAgICAgWyR0aGlzLCAncmF3dXJsZW5jb2RlTWF0Y2haZXJvJ10sCiAgICAgICAgICAgICRzdHIKICAgICAgICApOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gcmF3dXJsZW5jb2RlTWF0Y2haZXJvKGFycmF5ICRtYXRjaCkKICAgIHsKICAgICAgICByZXR1cm4gcmF3dXJsZW5jb2RlKCRtYXRjaFswXSk7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiB2YWxpZGF0ZVN0YXRlKCkKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmhvc3QgPT09ICcnICYmICgkdGhpcy0+c2NoZW1lID09PSAnaHR0cCcgfHwgJHRoaXMtPnNjaGVtZSA9PT0gJ2h0dHBzJykpIHsKICAgICAgICAgICAgJHRoaXMtPmhvc3QgPSBzZWxmOjpIVFRQX0RFRkFVTFRfSE9TVDsKICAgICAgICB9CgogICAgICAgIGlmICgkdGhpcy0+Z2V0QXV0aG9yaXR5KCkgPT09ICcnKSB7CiAgICAgICAgICAgIGlmICgwID09PSBzdHJwb3MoJHRoaXMtPnBhdGgsICcvLycpKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignVGhlIHBhdGggb2YgYSBVUkkgd2l0aG91dCBhbiBhdXRob3JpdHkgbXVzdCBub3Qgc3RhcnQgd2l0aCB0d28gc2xhc2hlcyAiLy8iJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCR0aGlzLT5zY2hlbWUgPT09ICcnICYmIGZhbHNlICE9PSBzdHJwb3MoZXhwbG9kZSgnLycsICR0aGlzLT5wYXRoLCAyKVswXSwgJzonKSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0EgcmVsYXRpdmUgVVJJIG11c3Qgbm90IGhhdmUgYSBwYXRoIGJlZ2lubmluZyB3aXRoIGEgc2VnbWVudCBjb250YWluaW5nIGEgY29sb24nKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZWlmIChpc3NldCgkdGhpcy0+cGF0aFswXSkgJiYgJHRoaXMtPnBhdGhbMF0gIT09ICcvJykgewogICAgICAgICAgICBAdHJpZ2dlcl9lcnJvcigKICAgICAgICAgICAgICAgICdUaGUgcGF0aCBvZiBhIFVSSSB3aXRoIGFuIGF1dGhvcml0eSBtdXN0IHN0YXJ0IHdpdGggYSBzbGFzaCAiLyIgb3IgYmUgZW1wdHkuIEF1dG9tYWdpY2FsbHkgZml4aW5nIHRoZSBVUkkgJyAuCiAgICAgICAgICAgICAgICAnYnkgYWRkaW5nIGEgbGVhZGluZyBzbGFzaCB0byB0aGUgcGF0aCBpcyBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMS40IGFuZCB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbiBpbnN0ZWFkLicsCiAgICAgICAgICAgICAgICBFX1VTRVJfREVQUkVDQVRFRAogICAgICAgICAgICApOwogICAgICAgICAgICAkdGhpcy0+cGF0aCA9ICcvJy4gJHRoaXMtPnBhdGg7CiAgICAgICAgICAgIC8vdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1RoZSBwYXRoIG9mIGEgVVJJIHdpdGggYW4gYXV0aG9yaXR5IG11c3Qgc3RhcnQgd2l0aCBhIHNsYXNoICIvIiBvciBiZSBlbXB0eScpOwogICAgICAgIH0KICAgIH0KfQo=AppDevTools/query/vendor/guzzlehttp/psr7/src/UriNormalizer.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFVyaUludGVyZmFjZTsKCi8qKgogKiBQcm92aWRlcyBtZXRob2RzIHRvIG5vcm1hbGl6ZSBhbmQgY29tcGFyZSBVUklzLgogKgogKiBAYXV0aG9yIFRvYmlhcyBTY2h1bHR6ZQogKgogKiBAbGluayBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTYKICovCmZpbmFsIGNsYXNzIFVyaU5vcm1hbGl6ZXIKewogICAgLyoqCiAgICAgKiBEZWZhdWx0IG5vcm1hbGl6YXRpb25zIHdoaWNoIG9ubHkgaW5jbHVkZSB0aGUgb25lcyB0aGF0IHByZXNlcnZlIHNlbWFudGljcy4KICAgICAqCiAgICAgKiBzZWxmOjpDQVBJVEFMSVpFX1BFUkNFTlRfRU5DT0RJTkcgfCBzZWxmOjpERUNPREVfVU5SRVNFUlZFRF9DSEFSQUNURVJTIHwgc2VsZjo6Q09OVkVSVF9FTVBUWV9QQVRIIHwKICAgICAqIHNlbGY6OlJFTU9WRV9ERUZBVUxUX0hPU1QgfCBzZWxmOjpSRU1PVkVfREVGQVVMVF9QT1JUIHwgc2VsZjo6UkVNT1ZFX0RPVF9TRUdNRU5UUwogICAgICovCiAgICBjb25zdCBQUkVTRVJWSU5HX05PUk1BTElaQVRJT05TID0gNjM7CgogICAgLyoqCiAgICAgKiBBbGwgbGV0dGVycyB3aXRoaW4gYSBwZXJjZW50LWVuY29kaW5nIHRyaXBsZXQgKGUuZy4sICIlM0EiKSBhcmUgY2FzZS1pbnNlbnNpdGl2ZSwgYW5kIHNob3VsZCBiZSBjYXBpdGFsaXplZC4KICAgICAqCiAgICAgKiBFeGFtcGxlOiBodHRwOi8vZXhhbXBsZS5vcmcvYSVjMiViMWIg4oaSIGh0dHA6Ly9leGFtcGxlLm9yZy9hJUMyJUIxYgogICAgICovCiAgICBjb25zdCBDQVBJVEFMSVpFX1BFUkNFTlRfRU5DT0RJTkcgPSAxOwoKICAgIC8qKgogICAgICogRGVjb2RlcyBwZXJjZW50LWVuY29kZWQgb2N0ZXRzIG9mIHVucmVzZXJ2ZWQgY2hhcmFjdGVycy4KICAgICAqCiAgICAgKiBGb3IgY29uc2lzdGVuY3ksIHBlcmNlbnQtZW5jb2RlZCBvY3RldHMgaW4gdGhlIHJhbmdlcyBvZiBBTFBIQSAoJTQx4oCTJTVBIGFuZCAlNjHigJMlN0EpLCBESUdJVCAoJTMw4oCTJTM5KSwKICAgICAqIGh5cGhlbiAoJTJEKSwgcGVyaW9kICglMkUpLCB1bmRlcnNjb3JlICglNUYpLCBvciB0aWxkZSAoJTdFKSBzaG91bGQgbm90IGJlIGNyZWF0ZWQgYnkgVVJJIHByb2R1Y2VycyBhbmQsCiAgICAgKiB3aGVuIGZvdW5kIGluIGEgVVJJLCBzaG91bGQgYmUgZGVjb2RlZCB0byB0aGVpciBjb3JyZXNwb25kaW5nIHVucmVzZXJ2ZWQgY2hhcmFjdGVycyBieSBVUkkgbm9ybWFsaXplcnMuCiAgICAgKgogICAgICogRXhhbXBsZTogaHR0cDovL2V4YW1wbGUub3JnLyU3RXVzZXJuJTYxbWUvIOKGkiBodHRwOi8vZXhhbXBsZS5vcmcvfnVzZXJuYW1lLwogICAgICovCiAgICBjb25zdCBERUNPREVfVU5SRVNFUlZFRF9DSEFSQUNURVJTID0gMjsKCiAgICAvKioKICAgICAqIENvbnZlcnRzIHRoZSBlbXB0eSBwYXRoIHRvICIvIiBmb3IgaHR0cCBhbmQgaHR0cHMgVVJJcy4KICAgICAqCiAgICAgKiBFeGFtcGxlOiBodHRwOi8vZXhhbXBsZS5vcmcg4oaSIGh0dHA6Ly9leGFtcGxlLm9yZy8KICAgICAqLwogICAgY29uc3QgQ09OVkVSVF9FTVBUWV9QQVRIID0gNDsKCiAgICAvKioKICAgICAqIFJlbW92ZXMgdGhlIGRlZmF1bHQgaG9zdCBvZiB0aGUgZ2l2ZW4gVVJJIHNjaGVtZSBmcm9tIHRoZSBVUkkuCiAgICAgKgogICAgICogT25seSB0aGUgImZpbGUiIHNjaGVtZSBkZWZpbmVzIHRoZSBkZWZhdWx0IGhvc3QgImxvY2FsaG9zdCIuCiAgICAgKiBBbGwgb2YgYGZpbGU6L215ZmlsZWAsIGBmaWxlOi8vL215ZmlsZWAsIGFuZCBgZmlsZTovL2xvY2FsaG9zdC9teWZpbGVgCiAgICAgKiBhcmUgZXF1aXZhbGVudCBhY2NvcmRpbmcgdG8gUkZDIDM5ODYuIFRoZSBmaXJzdCBmb3JtYXQgaXMgbm90IGFjY2VwdGVkCiAgICAgKiBieSBQSFBzIHN0cmVhbSBmdW5jdGlvbnMgYW5kIHRodXMgYWxyZWFkeSBub3JtYWxpemVkIGltcGxpY2l0bHkgdG8gdGhlCiAgICAgKiBzZWNvbmQgZm9ybWF0IGluIHRoZSBVcmkgY2xhc3MuIFNlZSBgR3V6emxlSHR0cFxQc3I3XFVyaTo6Y29tcG9zZUNvbXBvbmVudHNgLgogICAgICoKICAgICAqIEV4YW1wbGU6IGZpbGU6Ly9sb2NhbGhvc3QvbXlmaWxlIOKGkiBmaWxlOi8vL215ZmlsZQogICAgICovCiAgICBjb25zdCBSRU1PVkVfREVGQVVMVF9IT1NUID0gODsKCiAgICAvKioKICAgICAqIFJlbW92ZXMgdGhlIGRlZmF1bHQgcG9ydCBvZiB0aGUgZ2l2ZW4gVVJJIHNjaGVtZSBmcm9tIHRoZSBVUkkuCiAgICAgKgogICAgICogRXhhbXBsZTogaHR0cDovL2V4YW1wbGUub3JnOjgwLyDihpIgaHR0cDovL2V4YW1wbGUub3JnLwogICAgICovCiAgICBjb25zdCBSRU1PVkVfREVGQVVMVF9QT1JUID0gMTY7CgogICAgLyoqCiAgICAgKiBSZW1vdmVzIHVubmVjZXNzYXJ5IGRvdC1zZWdtZW50cy4KICAgICAqCiAgICAgKiBEb3Qtc2VnbWVudHMgaW4gcmVsYXRpdmUtcGF0aCByZWZlcmVuY2VzIGFyZSBub3QgcmVtb3ZlZCBhcyBpdCB3b3VsZAogICAgICogY2hhbmdlIHRoZSBzZW1hbnRpY3Mgb2YgdGhlIFVSSSByZWZlcmVuY2UuCiAgICAgKgogICAgICogRXhhbXBsZTogaHR0cDovL2V4YW1wbGUub3JnLy4uL2EvYi8uLi9jLy4vZC5odG1sIOKGkiBodHRwOi8vZXhhbXBsZS5vcmcvYS9jL2QuaHRtbAogICAgICovCiAgICBjb25zdCBSRU1PVkVfRE9UX1NFR01FTlRTID0gMzI7CgogICAgLyoqCiAgICAgKiBQYXRocyB3aGljaCBpbmNsdWRlIHR3byBvciBtb3JlIGFkamFjZW50IHNsYXNoZXMgYXJlIGNvbnZlcnRlZCB0byBvbmUuCiAgICAgKgogICAgICogV2Vic2VydmVycyB1c3VhbGx5IGlnbm9yZSBkdXBsaWNhdGUgc2xhc2hlcyBhbmQgdHJlYXQgdGhvc2UgVVJJcyBlcXVpdmFsZW50LgogICAgICogQnV0IGluIHRoZW9yeSB0aG9zZSBVUklzIGRvIG5vdCBuZWVkIHRvIGJlIGVxdWl2YWxlbnQuIFNvIHRoaXMgbm9ybWFsaXphdGlvbgogICAgICogbWF5IGNoYW5nZSB0aGUgc2VtYW50aWNzLiBFbmNvZGVkIHNsYXNoZXMgKCUyRikgYXJlIG5vdCByZW1vdmVkLgogICAgICoKICAgICAqIEV4YW1wbGU6IGh0dHA6Ly9leGFtcGxlLm9yZy8vZm9vLy8vYmFyLmh0bWwg4oaSIGh0dHA6Ly9leGFtcGxlLm9yZy9mb28vYmFyLmh0bWwKICAgICAqLwogICAgY29uc3QgUkVNT1ZFX0RVUExJQ0FURV9TTEFTSEVTID0gNjQ7CgogICAgLyoqCiAgICAgKiBTb3J0IHF1ZXJ5IHBhcmFtZXRlcnMgd2l0aCB0aGVpciB2YWx1ZXMgaW4gYWxwaGFiZXRpY2FsIG9yZGVyLgogICAgICoKICAgICAqIEhvd2V2ZXIsIHRoZSBvcmRlciBvZiBwYXJhbWV0ZXJzIGluIGEgVVJJIG1heSBiZSBzaWduaWZpY2FudCAodGhpcyBpcyBub3QgZGVmaW5lZCBieSB0aGUgc3RhbmRhcmQpLgogICAgICogU28gdGhpcyBub3JtYWxpemF0aW9uIGlzIG5vdCBzYWZlIGFuZCBtYXkgY2hhbmdlIHRoZSBzZW1hbnRpY3Mgb2YgdGhlIFVSSS4KICAgICAqCiAgICAgKiBFeGFtcGxlOiA/bGFuZz1lbiZhcnRpY2xlPWZyZWQg4oaSID9hcnRpY2xlPWZyZWQmbGFuZz1lbgogICAgICoKICAgICAqIE5vdGU6IFRoZSBzb3J0aW5nIGlzIG5laXRoZXIgbG9jYWxlIG5vciBVbmljb2RlIGF3YXJlICh0aGUgVVJJIHF1ZXJ5IGRvZXMgbm90IGdldCBkZWNvZGVkIGF0IGFsbCkgYXMgdGhlCiAgICAgKiBwdXJwb3NlIGlzIHRvIGJlIGFibGUgdG8gY29tcGFyZSBVUklzIGluIGEgcmVwcm9kdWNpYmxlIHdheSwgbm90IHRvIGhhdmUgdGhlIHBhcmFtcyBzb3J0ZWQgcGVyZmVjdGx5LgogICAgICovCiAgICBjb25zdCBTT1JUX1FVRVJZX1BBUkFNRVRFUlMgPSAxMjg7CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgbm9ybWFsaXplZCBVUkkuCiAgICAgKgogICAgICogVGhlIHNjaGVtZSBhbmQgaG9zdCBjb21wb25lbnQgYXJlIGFscmVhZHkgbm9ybWFsaXplZCB0byBsb3dlcmNhc2UgcGVyIFBTUi03IFVyaUludGVyZmFjZS4KICAgICAqIFRoaXMgbWV0aG9kcyBhZGRzIGFkZGl0aW9uYWwgbm9ybWFsaXphdGlvbnMgdGhhdCBjYW4gYmUgY29uZmlndXJlZCB3aXRoIHRoZSAkZmxhZ3MgcGFyYW1ldGVyLgogICAgICoKICAgICAqIFBTUi03IFVyaUludGVyZmFjZSBjYW5ub3QgZGlzdGluZ3Vpc2ggYmV0d2VlbiBhbiBlbXB0eSBjb21wb25lbnQgYW5kIGEgbWlzc2luZyBjb21wb25lbnQgYXMKICAgICAqIGdldFF1ZXJ5KCksIGdldEZyYWdtZW50KCkgZXRjLiBhbHdheXMgcmV0dXJuIGEgc3RyaW5nLiBUaGlzIG1lYW5zIHRoZSBVUklzICIvPyMiIGFuZCAiLyIgYXJlCiAgICAgKiB0cmVhdGVkIGVxdWl2YWxlbnQgd2hpY2ggaXMgbm90IG5lY2Vzc2FyaWx5IHRydWUgYWNjb3JkaW5nIHRvIFJGQyAzOTg2LiBCdXQgdGhhdCBkaWZmZXJlbmNlCiAgICAgKiBpcyBoaWdobHkgdW5jb21tb24gaW4gcmVhbGl0eS4gU28gdGhpcyBwb3RlbnRpYWwgbm9ybWFsaXphdGlvbiBpcyBpbXBsaWVkIGluIFBTUi03IGFzIHdlbGwuCiAgICAgKgogICAgICogQHBhcmFtIFVyaUludGVyZmFjZSAkdXJpICAgVGhlIFVSSSB0byBub3JtYWxpemUKICAgICAqIEBwYXJhbSBpbnQgICAgICAgICAgJGZsYWdzIEEgYml0bWFzayBvZiBub3JtYWxpemF0aW9ucyB0byBhcHBseSwgc2VlIGNvbnN0YW50cwogICAgICoKICAgICAqIEByZXR1cm4gVXJpSW50ZXJmYWNlIFRoZSBub3JtYWxpemVkIFVSSQogICAgICogQGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi02LjIKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBub3JtYWxpemUoVXJpSW50ZXJmYWNlICR1cmksICRmbGFncyA9IHNlbGY6OlBSRVNFUlZJTkdfTk9STUFMSVpBVElPTlMpCiAgICB7CiAgICAgICAgaWYgKCRmbGFncyAmIHNlbGY6OkNBUElUQUxJWkVfUEVSQ0VOVF9FTkNPRElORykgewogICAgICAgICAgICAkdXJpID0gc2VsZjo6Y2FwaXRhbGl6ZVBlcmNlbnRFbmNvZGluZygkdXJpKTsKICAgICAgICB9CgogICAgICAgIGlmICgkZmxhZ3MgJiBzZWxmOjpERUNPREVfVU5SRVNFUlZFRF9DSEFSQUNURVJTKSB7CiAgICAgICAgICAgICR1cmkgPSBzZWxmOjpkZWNvZGVVbnJlc2VydmVkQ2hhcmFjdGVycygkdXJpKTsKICAgICAgICB9CgogICAgICAgIGlmICgkZmxhZ3MgJiBzZWxmOjpDT05WRVJUX0VNUFRZX1BBVEggJiYgJHVyaS0+Z2V0UGF0aCgpID09PSAnJyAmJgogICAgICAgICAgICAoJHVyaS0+Z2V0U2NoZW1lKCkgPT09ICdodHRwJyB8fCAkdXJpLT5nZXRTY2hlbWUoKSA9PT0gJ2h0dHBzJykKICAgICAgICApIHsKICAgICAgICAgICAgJHVyaSA9ICR1cmktPndpdGhQYXRoKCcvJyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGZsYWdzICYgc2VsZjo6UkVNT1ZFX0RFRkFVTFRfSE9TVCAmJiAkdXJpLT5nZXRTY2hlbWUoKSA9PT0gJ2ZpbGUnICYmICR1cmktPmdldEhvc3QoKSA9PT0gJ2xvY2FsaG9zdCcpIHsKICAgICAgICAgICAgJHVyaSA9ICR1cmktPndpdGhIb3N0KCcnKTsKICAgICAgICB9CgogICAgICAgIGlmICgkZmxhZ3MgJiBzZWxmOjpSRU1PVkVfREVGQVVMVF9QT1JUICYmICR1cmktPmdldFBvcnQoKSAhPT0gbnVsbCAmJiBVcmk6OmlzRGVmYXVsdFBvcnQoJHVyaSkpIHsKICAgICAgICAgICAgJHVyaSA9ICR1cmktPndpdGhQb3J0KG51bGwpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRmbGFncyAmIHNlbGY6OlJFTU9WRV9ET1RfU0VHTUVOVFMgJiYgIVVyaTo6aXNSZWxhdGl2ZVBhdGhSZWZlcmVuY2UoJHVyaSkpIHsKICAgICAgICAgICAgJHVyaSA9ICR1cmktPndpdGhQYXRoKFVyaVJlc29sdmVyOjpyZW1vdmVEb3RTZWdtZW50cygkdXJpLT5nZXRQYXRoKCkpKTsKICAgICAgICB9CgogICAgICAgIGlmICgkZmxhZ3MgJiBzZWxmOjpSRU1PVkVfRFVQTElDQVRFX1NMQVNIRVMpIHsKICAgICAgICAgICAgJHVyaSA9ICR1cmktPndpdGhQYXRoKHByZWdfcmVwbGFjZSgnIy8vKysjJywgJy8nLCAkdXJpLT5nZXRQYXRoKCkpKTsKICAgICAgICB9CgogICAgICAgIGlmICgkZmxhZ3MgJiBzZWxmOjpTT1JUX1FVRVJZX1BBUkFNRVRFUlMgJiYgJHVyaS0+Z2V0UXVlcnkoKSAhPT0gJycpIHsKICAgICAgICAgICAgJHF1ZXJ5S2V5VmFsdWVzID0gZXhwbG9kZSgnJicsICR1cmktPmdldFF1ZXJ5KCkpOwogICAgICAgICAgICBzb3J0KCRxdWVyeUtleVZhbHVlcyk7CiAgICAgICAgICAgICR1cmkgPSAkdXJpLT53aXRoUXVlcnkoaW1wbG9kZSgnJicsICRxdWVyeUtleVZhbHVlcykpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR1cmk7CiAgICB9CgogICAgLyoqCiAgICAgKiBXaGV0aGVyIHR3byBVUklzIGNhbiBiZSBjb25zaWRlcmVkIGVxdWl2YWxlbnQuCiAgICAgKgogICAgICogQm90aCBVUklzIGFyZSBub3JtYWxpemVkIGF1dG9tYXRpY2FsbHkgYmVmb3JlIGNvbXBhcmlzb24gd2l0aCB0aGUgZ2l2ZW4gJG5vcm1hbGl6YXRpb25zIGJpdG1hc2suIFRoZSBtZXRob2QgYWxzbwogICAgICogYWNjZXB0cyByZWxhdGl2ZSBVUkkgcmVmZXJlbmNlcyBhbmQgcmV0dXJucyB0cnVlIHdoZW4gdGhleSBhcmUgZXF1aXZhbGVudC4gVGhpcyBvZiBjb3Vyc2UgYXNzdW1lcyB0aGV5IHdpbGwgYmUKICAgICAqIHJlc29sdmVkIGFnYWluc3QgdGhlIHNhbWUgYmFzZSBVUkkuIElmIHRoaXMgaXMgbm90IHRoZSBjYXNlLCBkZXRlcm1pbmF0aW9uIG9mIGVxdWl2YWxlbmNlIG9yIGRpZmZlcmVuY2Ugb2YKICAgICAqIHJlbGF0aXZlIHJlZmVyZW5jZXMgZG9lcyBub3QgbWVhbiBhbnl0aGluZy4KICAgICAqCiAgICAgKiBAcGFyYW0gVXJpSW50ZXJmYWNlICR1cmkxICAgICAgICAgICBBbiBVUkkgdG8gY29tcGFyZQogICAgICogQHBhcmFtIFVyaUludGVyZmFjZSAkdXJpMiAgICAgICAgICAgQW4gVVJJIHRvIGNvbXBhcmUKICAgICAqIEBwYXJhbSBpbnQgICAgICAgICAgJG5vcm1hbGl6YXRpb25zIEEgYml0bWFzayBvZiBub3JtYWxpemF0aW9ucyB0byBhcHBseSwgc2VlIGNvbnN0YW50cwogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICogQGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi02LjEKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc0VxdWl2YWxlbnQoVXJpSW50ZXJmYWNlICR1cmkxLCBVcmlJbnRlcmZhY2UgJHVyaTIsICRub3JtYWxpemF0aW9ucyA9IHNlbGY6OlBSRVNFUlZJTkdfTk9STUFMSVpBVElPTlMpCiAgICB7CiAgICAgICAgcmV0dXJuIChzdHJpbmcpIHNlbGY6Om5vcm1hbGl6ZSgkdXJpMSwgJG5vcm1hbGl6YXRpb25zKSA9PT0gKHN0cmluZykgc2VsZjo6bm9ybWFsaXplKCR1cmkyLCAkbm9ybWFsaXphdGlvbnMpOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGNhcGl0YWxpemVQZXJjZW50RW5jb2RpbmcoVXJpSW50ZXJmYWNlICR1cmkpCiAgICB7CiAgICAgICAgJHJlZ2V4ID0gJy8oPzolW0EtRmEtZjAtOV17Mn0pKysvJzsKCiAgICAgICAgJGNhbGxiYWNrID0gZnVuY3Rpb24gKGFycmF5ICRtYXRjaCkgewogICAgICAgICAgICByZXR1cm4gc3RydG91cHBlcigkbWF0Y2hbMF0pOwogICAgICAgIH07CgogICAgICAgIHJldHVybgogICAgICAgICAgICAkdXJpLT53aXRoUGF0aCgKICAgICAgICAgICAgICAgIHByZWdfcmVwbGFjZV9jYWxsYmFjaygkcmVnZXgsICRjYWxsYmFjaywgJHVyaS0+Z2V0UGF0aCgpKQogICAgICAgICAgICApLT53aXRoUXVlcnkoCiAgICAgICAgICAgICAgICBwcmVnX3JlcGxhY2VfY2FsbGJhY2soJHJlZ2V4LCAkY2FsbGJhY2ssICR1cmktPmdldFF1ZXJ5KCkpCiAgICAgICAgICAgICk7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZGVjb2RlVW5yZXNlcnZlZENoYXJhY3RlcnMoVXJpSW50ZXJmYWNlICR1cmkpCiAgICB7CiAgICAgICAgJHJlZ2V4ID0gJy8lKD86MkR8MkV8NUZ8N0V8M1swLTldfFs0Nl1bMS05QS1GXXxbNTddWzAtOUFdKS9pJzsKCiAgICAgICAgJGNhbGxiYWNrID0gZnVuY3Rpb24gKGFycmF5ICRtYXRjaCkgewogICAgICAgICAgICByZXR1cm4gcmF3dXJsZGVjb2RlKCRtYXRjaFswXSk7CiAgICAgICAgfTsKCiAgICAgICAgcmV0dXJuCiAgICAgICAgICAgICR1cmktPndpdGhQYXRoKAogICAgICAgICAgICAgICAgcHJlZ19yZXBsYWNlX2NhbGxiYWNrKCRyZWdleCwgJGNhbGxiYWNrLCAkdXJpLT5nZXRQYXRoKCkpCiAgICAgICAgICAgICktPndpdGhRdWVyeSgKICAgICAgICAgICAgICAgIHByZWdfcmVwbGFjZV9jYWxsYmFjaygkcmVnZXgsICRjYWxsYmFjaywgJHVyaS0+Z2V0UXVlcnkoKSkKICAgICAgICAgICAgKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkKICAgIHsKICAgICAgICAvLyBjYW5ub3QgYmUgaW5zdGFudGlhdGVkCiAgICB9Cn0KAppDevTools/query/vendor/guzzlehttp/psr7/src/UriResolver.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXFVyaUludGVyZmFjZTsKCi8qKgogKiBSZXNvbHZlcyBhIFVSSSByZWZlcmVuY2UgaW4gdGhlIGNvbnRleHQgb2YgYSBiYXNlIFVSSSBhbmQgdGhlIG9wcG9zaXRlIHdheS4KICoKICogQGF1dGhvciBUb2JpYXMgU2NodWx0emUKICoKICogQGxpbmsgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi01CiAqLwpmaW5hbCBjbGFzcyBVcmlSZXNvbHZlcgp7CiAgICAvKioKICAgICAqIFJlbW92ZXMgZG90IHNlZ21lbnRzIGZyb20gYSBwYXRoIGFuZCByZXR1cm5zIHRoZSBuZXcgcGF0aC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXRoCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEBsaW5rIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi01LjIuNAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJlbW92ZURvdFNlZ21lbnRzKCRwYXRoKQogICAgewogICAgICAgIGlmICgkcGF0aCA9PT0gJycgfHwgJHBhdGggPT09ICcvJykgewogICAgICAgICAgICByZXR1cm4gJHBhdGg7CiAgICAgICAgfQoKICAgICAgICAkcmVzdWx0cyA9IFtdOwogICAgICAgICRzZWdtZW50cyA9IGV4cGxvZGUoJy8nLCAkcGF0aCk7CiAgICAgICAgZm9yZWFjaCAoJHNlZ21lbnRzIGFzICRzZWdtZW50KSB7CiAgICAgICAgICAgIGlmICgkc2VnbWVudCA9PT0gJy4uJykgewogICAgICAgICAgICAgICAgYXJyYXlfcG9wKCRyZXN1bHRzKTsKICAgICAgICAgICAgfSBlbHNlaWYgKCRzZWdtZW50ICE9PSAnLicpIHsKICAgICAgICAgICAgICAgICRyZXN1bHRzW10gPSAkc2VnbWVudDsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJG5ld1BhdGggPSBpbXBsb2RlKCcvJywgJHJlc3VsdHMpOwoKICAgICAgICBpZiAoJHBhdGhbMF0gPT09ICcvJyAmJiAoIWlzc2V0KCRuZXdQYXRoWzBdKSB8fCAkbmV3UGF0aFswXSAhPT0gJy8nKSkgewogICAgICAgICAgICAvLyBSZS1hZGQgdGhlIGxlYWRpbmcgc2xhc2ggaWYgbmVjZXNzYXJ5IGZvciBjYXNlcyBsaWtlICIvLi4iCiAgICAgICAgICAgICRuZXdQYXRoID0gJy8nIC4gJG5ld1BhdGg7CiAgICAgICAgfSBlbHNlaWYgKCRuZXdQYXRoICE9PSAnJyAmJiAoJHNlZ21lbnQgPT09ICcuJyB8fCAkc2VnbWVudCA9PT0gJy4uJykpIHsKICAgICAgICAgICAgLy8gQWRkIHRoZSB0cmFpbGluZyBzbGFzaCBpZiBuZWNlc3NhcnkKICAgICAgICAgICAgLy8gSWYgbmV3UGF0aCBpcyBub3QgZW1wdHksIHRoZW4gJHNlZ21lbnQgbXVzdCBiZSBzZXQgYW5kIGlzIHRoZSBsYXN0IHNlZ21lbnQgZnJvbSB0aGUgZm9yZWFjaAogICAgICAgICAgICAkbmV3UGF0aCAuPSAnLyc7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJG5ld1BhdGg7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb252ZXJ0cyB0aGUgcmVsYXRpdmUgVVJJIGludG8gYSBuZXcgVVJJIHRoYXQgaXMgcmVzb2x2ZWQgYWdhaW5zdCB0aGUgYmFzZSBVUkkuCiAgICAgKgogICAgICogQHBhcmFtIFVyaUludGVyZmFjZSAkYmFzZSBCYXNlIFVSSQogICAgICogQHBhcmFtIFVyaUludGVyZmFjZSAkcmVsICBSZWxhdGl2ZSBVUkkKICAgICAqCiAgICAgKiBAcmV0dXJuIFVyaUludGVyZmFjZQogICAgICogQGxpbmsgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTUuMgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJlc29sdmUoVXJpSW50ZXJmYWNlICRiYXNlLCBVcmlJbnRlcmZhY2UgJHJlbCkKICAgIHsKICAgICAgICBpZiAoKHN0cmluZykgJHJlbCA9PT0gJycpIHsKICAgICAgICAgICAgLy8gd2UgY2FuIHNpbXBseSByZXR1cm4gdGhlIHNhbWUgYmFzZSBVUkkgaW5zdGFuY2UgZm9yIHRoaXMgc2FtZS1kb2N1bWVudCByZWZlcmVuY2UKICAgICAgICAgICAgcmV0dXJuICRiYXNlOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRyZWwtPmdldFNjaGVtZSgpICE9ICcnKSB7CiAgICAgICAgICAgIHJldHVybiAkcmVsLT53aXRoUGF0aChzZWxmOjpyZW1vdmVEb3RTZWdtZW50cygkcmVsLT5nZXRQYXRoKCkpKTsKICAgICAgICB9CgogICAgICAgIGlmICgkcmVsLT5nZXRBdXRob3JpdHkoKSAhPSAnJykgewogICAgICAgICAgICAkdGFyZ2V0QXV0aG9yaXR5ID0gJHJlbC0+Z2V0QXV0aG9yaXR5KCk7CiAgICAgICAgICAgICR0YXJnZXRQYXRoID0gc2VsZjo6cmVtb3ZlRG90U2VnbWVudHMoJHJlbC0+Z2V0UGF0aCgpKTsKICAgICAgICAgICAgJHRhcmdldFF1ZXJ5ID0gJHJlbC0+Z2V0UXVlcnkoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkdGFyZ2V0QXV0aG9yaXR5ID0gJGJhc2UtPmdldEF1dGhvcml0eSgpOwogICAgICAgICAgICBpZiAoJHJlbC0+Z2V0UGF0aCgpID09PSAnJykgewogICAgICAgICAgICAgICAgJHRhcmdldFBhdGggPSAkYmFzZS0+Z2V0UGF0aCgpOwogICAgICAgICAgICAgICAgJHRhcmdldFF1ZXJ5ID0gJHJlbC0+Z2V0UXVlcnkoKSAhPSAnJyA/ICRyZWwtPmdldFF1ZXJ5KCkgOiAkYmFzZS0+Z2V0UXVlcnkoKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGlmICgkcmVsLT5nZXRQYXRoKClbMF0gPT09ICcvJykgewogICAgICAgICAgICAgICAgICAgICR0YXJnZXRQYXRoID0gJHJlbC0+Z2V0UGF0aCgpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICBpZiAoJHRhcmdldEF1dGhvcml0eSAhPSAnJyAmJiAkYmFzZS0+Z2V0UGF0aCgpID09PSAnJykgewogICAgICAgICAgICAgICAgICAgICAgICAkdGFyZ2V0UGF0aCA9ICcvJyAuICRyZWwtPmdldFBhdGgoKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkbGFzdFNsYXNoUG9zID0gc3RycnBvcygkYmFzZS0+Z2V0UGF0aCgpLCAnLycpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGxhc3RTbGFzaFBvcyA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0YXJnZXRQYXRoID0gJHJlbC0+Z2V0UGF0aCgpOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRhcmdldFBhdGggPSBzdWJzdHIoJGJhc2UtPmdldFBhdGgoKSwgMCwgJGxhc3RTbGFzaFBvcyArIDEpIC4gJHJlbC0+Z2V0UGF0aCgpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJHRhcmdldFBhdGggPSBzZWxmOjpyZW1vdmVEb3RTZWdtZW50cygkdGFyZ2V0UGF0aCk7CiAgICAgICAgICAgICAgICAkdGFyZ2V0UXVlcnkgPSAkcmVsLT5nZXRRdWVyeSgpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IFVyaShVcmk6OmNvbXBvc2VDb21wb25lbnRzKAogICAgICAgICAgICAkYmFzZS0+Z2V0U2NoZW1lKCksCiAgICAgICAgICAgICR0YXJnZXRBdXRob3JpdHksCiAgICAgICAgICAgICR0YXJnZXRQYXRoLAogICAgICAgICAgICAkdGFyZ2V0UXVlcnksCiAgICAgICAgICAgICRyZWwtPmdldEZyYWdtZW50KCkKICAgICAgICApKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIHRhcmdldCBVUkkgYXMgYSByZWxhdGl2ZSByZWZlcmVuY2UgZnJvbSB0aGUgYmFzZSBVUkkuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgaXMgdGhlIGNvdW50ZXJwYXJ0IHRvIHJlc29sdmUoKToKICAgICAqCiAgICAgKiAgICAoc3RyaW5nKSAkdGFyZ2V0ID09PSAoc3RyaW5nKSBVcmlSZXNvbHZlcjo6cmVzb2x2ZSgkYmFzZSwgVXJpUmVzb2x2ZXI6OnJlbGF0aXZpemUoJGJhc2UsICR0YXJnZXQpKQogICAgICoKICAgICAqIE9uZSB1c2UtY2FzZSBpcyB0byB1c2UgdGhlIGN1cnJlbnQgcmVxdWVzdCBVUkkgYXMgYmFzZSBVUkkgYW5kIHRoZW4gZ2VuZXJhdGUgcmVsYXRpdmUgbGlua3MgaW4geW91ciBkb2N1bWVudHMKICAgICAqIHRvIHJlZHVjZSB0aGUgZG9jdW1lbnQgc2l6ZSBvciBvZmZlciBzZWxmLWNvbnRhaW5lZCBkb3dubG9hZGFibGUgZG9jdW1lbnQgYXJjaGl2ZXMuCiAgICAgKgogICAgICogICAgJGJhc2UgPSBuZXcgVXJpKCdodHRwOi8vZXhhbXBsZS5jb20vYS9iLycpOwogICAgICogICAgZWNobyBVcmlSZXNvbHZlcjo6cmVsYXRpdml6ZSgkYmFzZSwgbmV3IFVyaSgnaHR0cDovL2V4YW1wbGUuY29tL2EvYi9jJykpOyAgLy8gcHJpbnRzICdjJy4KICAgICAqICAgIGVjaG8gVXJpUmVzb2x2ZXI6OnJlbGF0aXZpemUoJGJhc2UsIG5ldyBVcmkoJ2h0dHA6Ly9leGFtcGxlLmNvbS9hL3gveScpKTsgIC8vIHByaW50cyAnLi4veC95Jy4KICAgICAqICAgIGVjaG8gVXJpUmVzb2x2ZXI6OnJlbGF0aXZpemUoJGJhc2UsIG5ldyBVcmkoJ2h0dHA6Ly9leGFtcGxlLmNvbS9hL2IvP3EnKSk7IC8vIHByaW50cyAnP3EnLgogICAgICogICAgZWNobyBVcmlSZXNvbHZlcjo6cmVsYXRpdml6ZSgkYmFzZSwgbmV3IFVyaSgnaHR0cDovL2V4YW1wbGUub3JnL2EvYi8nKSk7ICAgLy8gcHJpbnRzICcvL2V4YW1wbGUub3JnL2EvYi8nLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIGFsc28gYWNjZXB0cyBhIHRhcmdldCB0aGF0IGlzIGFscmVhZHkgcmVsYXRpdmUgYW5kIHdpbGwgdHJ5IHRvIHJlbGF0aXZpemUgaXQgZnVydGhlci4gT25seSBhCiAgICAgKiByZWxhdGl2ZS1wYXRoIHJlZmVyZW5jZSB3aWxsIGJlIHJldHVybmVkIGFzLWlzLgogICAgICoKICAgICAqICAgIGVjaG8gVXJpUmVzb2x2ZXI6OnJlbGF0aXZpemUoJGJhc2UsIG5ldyBVcmkoJy9hL2IvYycpKTsgIC8vIHByaW50cyAnYycgYXMgd2VsbAogICAgICoKICAgICAqIEBwYXJhbSBVcmlJbnRlcmZhY2UgJGJhc2UgICBCYXNlIFVSSQogICAgICogQHBhcmFtIFVyaUludGVyZmFjZSAkdGFyZ2V0IFRhcmdldCBVUkkKICAgICAqCiAgICAgKiBAcmV0dXJuIFVyaUludGVyZmFjZSBUaGUgcmVsYXRpdmUgVVJJIHJlZmVyZW5jZQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJlbGF0aXZpemUoVXJpSW50ZXJmYWNlICRiYXNlLCBVcmlJbnRlcmZhY2UgJHRhcmdldCkKICAgIHsKICAgICAgICBpZiAoJHRhcmdldC0+Z2V0U2NoZW1lKCkgIT09ICcnICYmCiAgICAgICAgICAgICgkYmFzZS0+Z2V0U2NoZW1lKCkgIT09ICR0YXJnZXQtPmdldFNjaGVtZSgpIHx8ICR0YXJnZXQtPmdldEF1dGhvcml0eSgpID09PSAnJyAmJiAkYmFzZS0+Z2V0QXV0aG9yaXR5KCkgIT09ICcnKQogICAgICAgICkgewogICAgICAgICAgICByZXR1cm4gJHRhcmdldDsKICAgICAgICB9CgogICAgICAgIGlmIChVcmk6OmlzUmVsYXRpdmVQYXRoUmVmZXJlbmNlKCR0YXJnZXQpKSB7CiAgICAgICAgICAgIC8vIEFzIHRoZSB0YXJnZXQgaXMgYWxyZWFkeSBoaWdobHkgcmVsYXRpdmUgd2UgcmV0dXJuIGl0IGFzLWlzLiBJdCB3b3VsZCBiZSBwb3NzaWJsZSB0byByZXNvbHZlCiAgICAgICAgICAgIC8vIHRoZSB0YXJnZXQgd2l0aCBgJHRhcmdldCA9IHNlbGY6OnJlc29sdmUoJGJhc2UsICR0YXJnZXQpO2AgYW5kIHRoZW4gdHJ5IG1ha2UgaXQgbW9yZSByZWxhdGl2ZQogICAgICAgICAgICAvLyBieSByZW1vdmluZyBhIGR1cGxpY2F0ZSBxdWVyeS4gQnV0IGxldCdzIG5vdCBkbyB0aGF0IGF1dG9tYXRpY2FsbHkuCiAgICAgICAgICAgIHJldHVybiAkdGFyZ2V0OwogICAgICAgIH0KCiAgICAgICAgaWYgKCR0YXJnZXQtPmdldEF1dGhvcml0eSgpICE9PSAnJyAmJiAkYmFzZS0+Z2V0QXV0aG9yaXR5KCkgIT09ICR0YXJnZXQtPmdldEF1dGhvcml0eSgpKSB7CiAgICAgICAgICAgIHJldHVybiAkdGFyZ2V0LT53aXRoU2NoZW1lKCcnKTsKICAgICAgICB9CgogICAgICAgIC8vIFdlIG11c3QgcmVtb3ZlIHRoZSBwYXRoIGJlZm9yZSByZW1vdmluZyB0aGUgYXV0aG9yaXR5IGJlY2F1c2UgaWYgdGhlIHBhdGggc3RhcnRzIHdpdGggdHdvIHNsYXNoZXMsIHRoZSBVUkkKICAgICAgICAvLyB3b3VsZCB0dXJuIGludmFsaWQuIEFuZCB3ZSBhbHNvIGNhbm5vdCBzZXQgYSByZWxhdGl2ZSBwYXRoIGJlZm9yZSByZW1vdmluZyB0aGUgYXV0aG9yaXR5LCBhcyB0aGF0IGlzIGFsc28KICAgICAgICAvLyBpbnZhbGlkLgogICAgICAgICRlbXB0eVBhdGhVcmkgPSAkdGFyZ2V0LT53aXRoU2NoZW1lKCcnKS0+d2l0aFBhdGgoJycpLT53aXRoVXNlckluZm8oJycpLT53aXRoUG9ydChudWxsKS0+d2l0aEhvc3QoJycpOwoKICAgICAgICBpZiAoJGJhc2UtPmdldFBhdGgoKSAhPT0gJHRhcmdldC0+Z2V0UGF0aCgpKSB7CiAgICAgICAgICAgIHJldHVybiAkZW1wdHlQYXRoVXJpLT53aXRoUGF0aChzZWxmOjpnZXRSZWxhdGl2ZVBhdGgoJGJhc2UsICR0YXJnZXQpKTsKICAgICAgICB9CgogICAgICAgIGlmICgkYmFzZS0+Z2V0UXVlcnkoKSA9PT0gJHRhcmdldC0+Z2V0UXVlcnkoKSkgewogICAgICAgICAgICAvLyBPbmx5IHRoZSB0YXJnZXQgZnJhZ21lbnQgaXMgbGVmdC4gQW5kIGl0IG11c3QgYmUgcmV0dXJuZWQgZXZlbiBpZiBiYXNlIGFuZCB0YXJnZXQgZnJhZ21lbnQgYXJlIHRoZSBzYW1lLgogICAgICAgICAgICByZXR1cm4gJGVtcHR5UGF0aFVyaS0+d2l0aFF1ZXJ5KCcnKTsKICAgICAgICB9CgogICAgICAgIC8vIElmIHRoZSBiYXNlIFVSSSBoYXMgYSBxdWVyeSBidXQgdGhlIHRhcmdldCBoYXMgbm9uZSwgd2UgY2Fubm90IHJldHVybiBhbiBlbXB0eSBwYXRoIHJlZmVyZW5jZSBhcyBpdCB3b3VsZAogICAgICAgIC8vIGluaGVyaXQgdGhlIGJhc2UgcXVlcnkgY29tcG9uZW50IHdoZW4gcmVzb2x2aW5nLgogICAgICAgIGlmICgkdGFyZ2V0LT5nZXRRdWVyeSgpID09PSAnJykgewogICAgICAgICAgICAkc2VnbWVudHMgPSBleHBsb2RlKCcvJywgJHRhcmdldC0+Z2V0UGF0aCgpKTsKICAgICAgICAgICAgJGxhc3RTZWdtZW50ID0gZW5kKCRzZWdtZW50cyk7CgogICAgICAgICAgICByZXR1cm4gJGVtcHR5UGF0aFVyaS0+d2l0aFBhdGgoJGxhc3RTZWdtZW50ID09PSAnJyA/ICcuLycgOiAkbGFzdFNlZ21lbnQpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRlbXB0eVBhdGhVcmk7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZ2V0UmVsYXRpdmVQYXRoKFVyaUludGVyZmFjZSAkYmFzZSwgVXJpSW50ZXJmYWNlICR0YXJnZXQpCiAgICB7CiAgICAgICAgJHNvdXJjZVNlZ21lbnRzID0gZXhwbG9kZSgnLycsICRiYXNlLT5nZXRQYXRoKCkpOwogICAgICAgICR0YXJnZXRTZWdtZW50cyA9IGV4cGxvZGUoJy8nLCAkdGFyZ2V0LT5nZXRQYXRoKCkpOwogICAgICAgIGFycmF5X3BvcCgkc291cmNlU2VnbWVudHMpOwogICAgICAgICR0YXJnZXRMYXN0U2VnbWVudCA9IGFycmF5X3BvcCgkdGFyZ2V0U2VnbWVudHMpOwogICAgICAgIGZvcmVhY2ggKCRzb3VyY2VTZWdtZW50cyBhcyAkaSA9PiAkc2VnbWVudCkgewogICAgICAgICAgICBpZiAoaXNzZXQoJHRhcmdldFNlZ21lbnRzWyRpXSkgJiYgJHNlZ21lbnQgPT09ICR0YXJnZXRTZWdtZW50c1skaV0pIHsKICAgICAgICAgICAgICAgIHVuc2V0KCRzb3VyY2VTZWdtZW50c1skaV0sICR0YXJnZXRTZWdtZW50c1skaV0pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgJHRhcmdldFNlZ21lbnRzW10gPSAkdGFyZ2V0TGFzdFNlZ21lbnQ7CiAgICAgICAgJHJlbGF0aXZlUGF0aCA9IHN0cl9yZXBlYXQoJy4uLycsIGNvdW50KCRzb3VyY2VTZWdtZW50cykpIC4gaW1wbG9kZSgnLycsICR0YXJnZXRTZWdtZW50cyk7CgogICAgICAgIC8vIEEgcmVmZXJlbmNlIHRvIGFtIGVtcHR5IGxhc3Qgc2VnbWVudCBvciBhbiBlbXB0eSBmaXJzdCBzdWItc2VnbWVudCBtdXN0IGJlIHByZWZpeGVkIHdpdGggIi4vIi4KICAgICAgICAvLyBUaGlzIGFsc28gYXBwbGllcyB0byBhIHNlZ21lbnQgd2l0aCBhIGNvbG9uIGNoYXJhY3RlciAoZS5nLiwgImZpbGU6Y29sb24iKSB0aGF0IGNhbm5vdCBiZSB1c2VkCiAgICAgICAgLy8gYXMgdGhlIGZpcnN0IHNlZ21lbnQgb2YgYSByZWxhdGl2ZS1wYXRoIHJlZmVyZW5jZSwgYXMgaXQgd291bGQgYmUgbWlzdGFrZW4gZm9yIGEgc2NoZW1lIG5hbWUuCiAgICAgICAgaWYgKCcnID09PSAkcmVsYXRpdmVQYXRoIHx8IGZhbHNlICE9PSBzdHJwb3MoZXhwbG9kZSgnLycsICRyZWxhdGl2ZVBhdGgsIDIpWzBdLCAnOicpKSB7CiAgICAgICAgICAgICRyZWxhdGl2ZVBhdGggPSAiLi8kcmVsYXRpdmVQYXRoIjsKICAgICAgICB9IGVsc2VpZiAoJy8nID09PSAkcmVsYXRpdmVQYXRoWzBdKSB7CiAgICAgICAgICAgIGlmICgkYmFzZS0+Z2V0QXV0aG9yaXR5KCkgIT0gJycgJiYgJGJhc2UtPmdldFBhdGgoKSA9PT0gJycpIHsKICAgICAgICAgICAgICAgIC8vIEluIHRoaXMgY2FzZSBhbiBleHRyYSBzbGFzaCBpcyBhZGRlZCBieSByZXNvbHZlKCkgYXV0b21hdGljYWxseS4gU28gd2UgbXVzdCBub3QgYWRkIG9uZSBoZXJlLgogICAgICAgICAgICAgICAgJHJlbGF0aXZlUGF0aCA9ICIuJHJlbGF0aXZlUGF0aCI7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkcmVsYXRpdmVQYXRoID0gIi4vJHJlbGF0aXZlUGF0aCI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVsYXRpdmVQYXRoOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQogICAgewogICAgICAgIC8vIGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQKICAgIH0KfQo=AppDevTools/query/vendor/guzzlehttp/psr7/src/functions.phpPD9waHAKbmFtZXNwYWNlIEd1enpsZUh0dHBcUHNyNzsKCnVzZSBQc3JcSHR0cFxNZXNzYWdlXE1lc3NhZ2VJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlcXVlc3RJbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFJlc3BvbnNlSW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxTZXJ2ZXJSZXF1ZXN0SW50ZXJmYWNlOwp1c2UgUHNyXEh0dHBcTWVzc2FnZVxTdHJlYW1JbnRlcmZhY2U7CnVzZSBQc3JcSHR0cFxNZXNzYWdlXFVyaUludGVyZmFjZTsKCi8qKgogKiBSZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gSFRUUCBtZXNzYWdlLgogKgogKiBAcGFyYW0gTWVzc2FnZUludGVyZmFjZSAkbWVzc2FnZSBNZXNzYWdlIHRvIGNvbnZlcnQgdG8gYSBzdHJpbmcuCiAqCiAqIEByZXR1cm4gc3RyaW5nCiAqLwpmdW5jdGlvbiBzdHIoTWVzc2FnZUludGVyZmFjZSAkbWVzc2FnZSkKewogICAgaWYgKCRtZXNzYWdlIGluc3RhbmNlb2YgUmVxdWVzdEludGVyZmFjZSkgewogICAgICAgICRtc2cgPSB0cmltKCRtZXNzYWdlLT5nZXRNZXRob2QoKSAuICcgJwogICAgICAgICAgICAgICAgLiAkbWVzc2FnZS0+Z2V0UmVxdWVzdFRhcmdldCgpKQogICAgICAgICAgICAuICcgSFRUUC8nIC4gJG1lc3NhZ2UtPmdldFByb3RvY29sVmVyc2lvbigpOwogICAgICAgIGlmICghJG1lc3NhZ2UtPmhhc0hlYWRlcignaG9zdCcpKSB7CiAgICAgICAgICAgICRtc2cgLj0gIlxyXG5Ib3N0OiAiIC4gJG1lc3NhZ2UtPmdldFVyaSgpLT5nZXRIb3N0KCk7CiAgICAgICAgfQogICAgfSBlbHNlaWYgKCRtZXNzYWdlIGluc3RhbmNlb2YgUmVzcG9uc2VJbnRlcmZhY2UpIHsKICAgICAgICAkbXNnID0gJ0hUVFAvJyAuICRtZXNzYWdlLT5nZXRQcm90b2NvbFZlcnNpb24oKSAuICcgJwogICAgICAgICAgICAuICRtZXNzYWdlLT5nZXRTdGF0dXNDb2RlKCkgLiAnICcKICAgICAgICAgICAgLiAkbWVzc2FnZS0+Z2V0UmVhc29uUGhyYXNlKCk7CiAgICB9IGVsc2UgewogICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdVbmtub3duIG1lc3NhZ2UgdHlwZScpOwogICAgfQoKICAgIGZvcmVhY2ggKCRtZXNzYWdlLT5nZXRIZWFkZXJzKCkgYXMgJG5hbWUgPT4gJHZhbHVlcykgewogICAgICAgICRtc2cgLj0gIlxyXG57JG5hbWV9OiAiIC4gaW1wbG9kZSgnLCAnLCAkdmFsdWVzKTsKICAgIH0KCiAgICByZXR1cm4gInskbXNnfVxyXG5cclxuIiAuICRtZXNzYWdlLT5nZXRCb2R5KCk7Cn0KCi8qKgogKiBSZXR1cm5zIGEgVXJpSW50ZXJmYWNlIGZvciB0aGUgZ2l2ZW4gdmFsdWUuCiAqCiAqIFRoaXMgZnVuY3Rpb24gYWNjZXB0cyBhIHN0cmluZyBvciB7QHNlZSBQc3JcSHR0cFxNZXNzYWdlXFVyaUludGVyZmFjZX0gYW5kCiAqIHJldHVybnMgYSBVcmlJbnRlcmZhY2UgZm9yIHRoZSBnaXZlbiB2YWx1ZS4gSWYgdGhlIHZhbHVlIGlzIGFscmVhZHkgYQogKiBgVXJpSW50ZXJmYWNlYCwgaXQgaXMgcmV0dXJuZWQgYXMtaXMuCiAqCiAqIEBwYXJhbSBzdHJpbmd8VXJpSW50ZXJmYWNlICR1cmkKICoKICogQHJldHVybiBVcmlJbnRlcmZhY2UKICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAqLwpmdW5jdGlvbiB1cmlfZm9yKCR1cmkpCnsKICAgIGlmICgkdXJpIGluc3RhbmNlb2YgVXJpSW50ZXJmYWNlKSB7CiAgICAgICAgcmV0dXJuICR1cmk7CiAgICB9IGVsc2VpZiAoaXNfc3RyaW5nKCR1cmkpKSB7CiAgICAgICAgcmV0dXJuIG5ldyBVcmkoJHVyaSk7CiAgICB9CgogICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1VSSSBtdXN0IGJlIGEgc3RyaW5nIG9yIFVyaUludGVyZmFjZScpOwp9CgovKioKICogQ3JlYXRlIGEgbmV3IHN0cmVhbSBiYXNlZCBvbiB0aGUgaW5wdXQgdHlwZS4KICoKICogT3B0aW9ucyBpcyBhbiBhc3NvY2lhdGl2ZSBhcnJheSB0aGF0IGNhbiBjb250YWluIHRoZSBmb2xsb3dpbmcga2V5czoKICogLSBtZXRhZGF0YTogQXJyYXkgb2YgY3VzdG9tIG1ldGFkYXRhLgogKiAtIHNpemU6IFNpemUgb2YgdGhlIHN0cmVhbS4KICoKICogQHBhcmFtIHJlc291cmNlfHN0cmluZ3xudWxsfGludHxmbG9hdHxib29sfFN0cmVhbUludGVyZmFjZXxjYWxsYWJsZSAkcmVzb3VyY2UgRW50aXR5IGJvZHkgZGF0YQogKiBAcGFyYW0gYXJyYXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvcHRpb25zICBBZGRpdGlvbmFsIG9wdGlvbnMKICoKICogQHJldHVybiBTdHJlYW0KICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGlmIHRoZSAkcmVzb3VyY2UgYXJnIGlzIG5vdCB2YWxpZC4KICovCmZ1bmN0aW9uIHN0cmVhbV9mb3IoJHJlc291cmNlID0gJycsIGFycmF5ICRvcHRpb25zID0gW10pCnsKICAgIGlmIChpc19zY2FsYXIoJHJlc291cmNlKSkgewogICAgICAgICRzdHJlYW0gPSBmb3BlbigncGhwOi8vdGVtcCcsICdyKycpOwogICAgICAgIGlmICgkcmVzb3VyY2UgIT09ICcnKSB7CiAgICAgICAgICAgIGZ3cml0ZSgkc3RyZWFtLCAkcmVzb3VyY2UpOwogICAgICAgICAgICBmc2Vlaygkc3RyZWFtLCAwKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ldyBTdHJlYW0oJHN0cmVhbSwgJG9wdGlvbnMpOwogICAgfQoKICAgIHN3aXRjaCAoZ2V0dHlwZSgkcmVzb3VyY2UpKSB7CiAgICAgICAgY2FzZSAncmVzb3VyY2UnOgogICAgICAgICAgICByZXR1cm4gbmV3IFN0cmVhbSgkcmVzb3VyY2UsICRvcHRpb25zKTsKICAgICAgICBjYXNlICdvYmplY3QnOgogICAgICAgICAgICBpZiAoJHJlc291cmNlIGluc3RhbmNlb2YgU3RyZWFtSW50ZXJmYWNlKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJHJlc291cmNlOwogICAgICAgICAgICB9IGVsc2VpZiAoJHJlc291cmNlIGluc3RhbmNlb2YgXEl0ZXJhdG9yKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFB1bXBTdHJlYW0oZnVuY3Rpb24gKCkgdXNlICgkcmVzb3VyY2UpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoISRyZXNvdXJjZS0+dmFsaWQoKSkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICRyZXN1bHQgPSAkcmVzb3VyY2UtPmN1cnJlbnQoKTsKICAgICAgICAgICAgICAgICAgICAkcmVzb3VyY2UtPm5leHQoKTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgICAgICAgICAgICAgIH0sICRvcHRpb25zKTsKICAgICAgICAgICAgfSBlbHNlaWYgKG1ldGhvZF9leGlzdHMoJHJlc291cmNlLCAnX190b1N0cmluZycpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gc3RyZWFtX2Zvcigoc3RyaW5nKSAkcmVzb3VyY2UsICRvcHRpb25zKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICdOVUxMJzoKICAgICAgICAgICAgcmV0dXJuIG5ldyBTdHJlYW0oZm9wZW4oJ3BocDovL3RlbXAnLCAncisnKSwgJG9wdGlvbnMpOwogICAgfQoKICAgIGlmIChpc19jYWxsYWJsZSgkcmVzb3VyY2UpKSB7CiAgICAgICAgcmV0dXJuIG5ldyBQdW1wU3RyZWFtKCRyZXNvdXJjZSwgJG9wdGlvbnMpOwogICAgfQoKICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdJbnZhbGlkIHJlc291cmNlIHR5cGU6ICcgLiBnZXR0eXBlKCRyZXNvdXJjZSkpOwp9CgovKioKICogUGFyc2UgYW4gYXJyYXkgb2YgaGVhZGVyIHZhbHVlcyBjb250YWluaW5nICI7IiBzZXBhcmF0ZWQgZGF0YSBpbnRvIGFuCiAqIGFycmF5IG9mIGFzc29jaWF0aXZlIGFycmF5cyByZXByZXNlbnRpbmcgdGhlIGhlYWRlciBrZXkgdmFsdWUgcGFpcgogKiBkYXRhIG9mIHRoZSBoZWFkZXIuIFdoZW4gYSBwYXJhbWV0ZXIgZG9lcyBub3QgY29udGFpbiBhIHZhbHVlLCBidXQganVzdAogKiBjb250YWlucyBhIGtleSwgdGhpcyBmdW5jdGlvbiB3aWxsIGluamVjdCBhIGtleSB3aXRoIGEgJycgc3RyaW5nIHZhbHVlLgogKgogKiBAcGFyYW0gc3RyaW5nfGFycmF5ICRoZWFkZXIgSGVhZGVyIHRvIHBhcnNlIGludG8gY29tcG9uZW50cy4KICoKICogQHJldHVybiBhcnJheSBSZXR1cm5zIHRoZSBwYXJzZWQgaGVhZGVyIHZhbHVlcy4KICovCmZ1bmN0aW9uIHBhcnNlX2hlYWRlcigkaGVhZGVyKQp7CiAgICBzdGF0aWMgJHRyaW1tZWQgPSAiXCInICBcblx0XHIiOwogICAgJHBhcmFtcyA9ICRtYXRjaGVzID0gW107CgogICAgZm9yZWFjaCAobm9ybWFsaXplX2hlYWRlcigkaGVhZGVyKSBhcyAkdmFsKSB7CiAgICAgICAgJHBhcnQgPSBbXTsKICAgICAgICBmb3JlYWNoIChwcmVnX3NwbGl0KCcvOyg/PShbXiJdKiJbXiJdKiIpKlteIl0qJCkvJywgJHZhbCkgYXMgJGt2cCkgewogICAgICAgICAgICBpZiAocHJlZ19tYXRjaF9hbGwoJy88W14+XSs+fFtePV0rLycsICRrdnAsICRtYXRjaGVzKSkgewogICAgICAgICAgICAgICAgJG0gPSAkbWF0Y2hlc1swXTsKICAgICAgICAgICAgICAgIGlmIChpc3NldCgkbVsxXSkpIHsKICAgICAgICAgICAgICAgICAgICAkcGFydFt0cmltKCRtWzBdLCAkdHJpbW1lZCldID0gdHJpbSgkbVsxXSwgJHRyaW1tZWQpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkcGFydFtdID0gdHJpbSgkbVswXSwgJHRyaW1tZWQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICgkcGFydCkgewogICAgICAgICAgICAkcGFyYW1zW10gPSAkcGFydDsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICRwYXJhbXM7Cn0KCi8qKgogKiBDb252ZXJ0cyBhbiBhcnJheSBvZiBoZWFkZXIgdmFsdWVzIHRoYXQgbWF5IGNvbnRhaW4gY29tbWEgc2VwYXJhdGVkCiAqIGhlYWRlcnMgaW50byBhbiBhcnJheSBvZiBoZWFkZXJzIHdpdGggbm8gY29tbWEgc2VwYXJhdGVkIHZhbHVlcy4KICoKICogQHBhcmFtIHN0cmluZ3xhcnJheSAkaGVhZGVyIEhlYWRlciB0byBub3JtYWxpemUuCiAqCiAqIEByZXR1cm4gYXJyYXkgUmV0dXJucyB0aGUgbm9ybWFsaXplZCBoZWFkZXIgZmllbGQgdmFsdWVzLgogKi8KZnVuY3Rpb24gbm9ybWFsaXplX2hlYWRlcigkaGVhZGVyKQp7CiAgICBpZiAoIWlzX2FycmF5KCRoZWFkZXIpKSB7CiAgICAgICAgcmV0dXJuIGFycmF5X21hcCgndHJpbScsIGV4cGxvZGUoJywnLCAkaGVhZGVyKSk7CiAgICB9CgogICAgJHJlc3VsdCA9IFtdOwogICAgZm9yZWFjaCAoJGhlYWRlciBhcyAkdmFsdWUpIHsKICAgICAgICBmb3JlYWNoICgoYXJyYXkpICR2YWx1ZSBhcyAkdikgewogICAgICAgICAgICBpZiAoc3RycG9zKCR2LCAnLCcpID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgJHJlc3VsdFtdID0gJHY7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBmb3JlYWNoIChwcmVnX3NwbGl0KCcvLCg/PShbXiJdKiJbXiJdKiIpKlteIl0qJCkvJywgJHYpIGFzICR2dikgewogICAgICAgICAgICAgICAgJHJlc3VsdFtdID0gdHJpbSgkdnYpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAkcmVzdWx0Owp9CgovKioKICogQ2xvbmUgYW5kIG1vZGlmeSBhIHJlcXVlc3Qgd2l0aCB0aGUgZ2l2ZW4gY2hhbmdlcy4KICoKICogVGhlIGNoYW5nZXMgY2FuIGJlIG9uZSBvZjoKICogLSBtZXRob2Q6IChzdHJpbmcpIENoYW5nZXMgdGhlIEhUVFAgbWV0aG9kLgogKiAtIHNldF9oZWFkZXJzOiAoYXJyYXkpIFNldHMgdGhlIGdpdmVuIGhlYWRlcnMuCiAqIC0gcmVtb3ZlX2hlYWRlcnM6IChhcnJheSkgUmVtb3ZlIHRoZSBnaXZlbiBoZWFkZXJzLgogKiAtIGJvZHk6IChtaXhlZCkgU2V0cyB0aGUgZ2l2ZW4gYm9keS4KICogLSB1cmk6IChVcmlJbnRlcmZhY2UpIFNldCB0aGUgVVJJLgogKiAtIHF1ZXJ5OiAoc3RyaW5nKSBTZXQgdGhlIHF1ZXJ5IHN0cmluZyB2YWx1ZSBvZiB0aGUgVVJJLgogKiAtIHZlcnNpb246IChzdHJpbmcpIFNldCB0aGUgcHJvdG9jb2wgdmVyc2lvbi4KICoKICogQHBhcmFtIFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QgUmVxdWVzdCB0byBjbG9uZSBhbmQgbW9kaWZ5LgogKiBAcGFyYW0gYXJyYXkgICAgICAgICAgICAkY2hhbmdlcyBDaGFuZ2VzIHRvIGFwcGx5LgogKgogKiBAcmV0dXJuIFJlcXVlc3RJbnRlcmZhY2UKICovCmZ1bmN0aW9uIG1vZGlmeV9yZXF1ZXN0KFJlcXVlc3RJbnRlcmZhY2UgJHJlcXVlc3QsIGFycmF5ICRjaGFuZ2VzKQp7CiAgICBpZiAoISRjaGFuZ2VzKSB7CiAgICAgICAgcmV0dXJuICRyZXF1ZXN0OwogICAgfQoKICAgICRoZWFkZXJzID0gJHJlcXVlc3QtPmdldEhlYWRlcnMoKTsKCiAgICBpZiAoIWlzc2V0KCRjaGFuZ2VzWyd1cmknXSkpIHsKICAgICAgICAkdXJpID0gJHJlcXVlc3QtPmdldFVyaSgpOwogICAgfSBlbHNlIHsKICAgICAgICAvLyBSZW1vdmUgdGhlIGhvc3QgaGVhZGVyIGlmIG9uZSBpcyBvbiB0aGUgVVJJCiAgICAgICAgaWYgKCRob3N0ID0gJGNoYW5nZXNbJ3VyaSddLT5nZXRIb3N0KCkpIHsKICAgICAgICAgICAgJGNoYW5nZXNbJ3NldF9oZWFkZXJzJ11bJ0hvc3QnXSA9ICRob3N0OwoKICAgICAgICAgICAgaWYgKCRwb3J0ID0gJGNoYW5nZXNbJ3VyaSddLT5nZXRQb3J0KCkpIHsKICAgICAgICAgICAgICAgICRzdGFuZGFyZFBvcnRzID0gWydodHRwJyA9PiA4MCwgJ2h0dHBzJyA9PiA0NDNdOwogICAgICAgICAgICAgICAgJHNjaGVtZSA9ICRjaGFuZ2VzWyd1cmknXS0+Z2V0U2NoZW1lKCk7CiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJHN0YW5kYXJkUG9ydHNbJHNjaGVtZV0pICYmICRwb3J0ICE9ICRzdGFuZGFyZFBvcnRzWyRzY2hlbWVdKSB7CiAgICAgICAgICAgICAgICAgICAgJGNoYW5nZXNbJ3NldF9oZWFkZXJzJ11bJ0hvc3QnXSAuPSAnOicuJHBvcnQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgJHVyaSA9ICRjaGFuZ2VzWyd1cmknXTsKICAgIH0KCiAgICBpZiAoIWVtcHR5KCRjaGFuZ2VzWydyZW1vdmVfaGVhZGVycyddKSkgewogICAgICAgICRoZWFkZXJzID0gX2Nhc2VsZXNzX3JlbW92ZSgkY2hhbmdlc1sncmVtb3ZlX2hlYWRlcnMnXSwgJGhlYWRlcnMpOwogICAgfQoKICAgIGlmICghZW1wdHkoJGNoYW5nZXNbJ3NldF9oZWFkZXJzJ10pKSB7CiAgICAgICAgJGhlYWRlcnMgPSBfY2FzZWxlc3NfcmVtb3ZlKGFycmF5X2tleXMoJGNoYW5nZXNbJ3NldF9oZWFkZXJzJ10pLCAkaGVhZGVycyk7CiAgICAgICAgJGhlYWRlcnMgPSAkY2hhbmdlc1snc2V0X2hlYWRlcnMnXSArICRoZWFkZXJzOwogICAgfQoKICAgIGlmIChpc3NldCgkY2hhbmdlc1sncXVlcnknXSkpIHsKICAgICAgICAkdXJpID0gJHVyaS0+d2l0aFF1ZXJ5KCRjaGFuZ2VzWydxdWVyeSddKTsKICAgIH0KCiAgICBpZiAoJHJlcXVlc3QgaW5zdGFuY2VvZiBTZXJ2ZXJSZXF1ZXN0SW50ZXJmYWNlKSB7CiAgICAgICAgcmV0dXJuIG5ldyBTZXJ2ZXJSZXF1ZXN0KAogICAgICAgICAgICBpc3NldCgkY2hhbmdlc1snbWV0aG9kJ10pID8gJGNoYW5nZXNbJ21ldGhvZCddIDogJHJlcXVlc3QtPmdldE1ldGhvZCgpLAogICAgICAgICAgICAkdXJpLAogICAgICAgICAgICAkaGVhZGVycywKICAgICAgICAgICAgaXNzZXQoJGNoYW5nZXNbJ2JvZHknXSkgPyAkY2hhbmdlc1snYm9keSddIDogJHJlcXVlc3QtPmdldEJvZHkoKSwKICAgICAgICAgICAgaXNzZXQoJGNoYW5nZXNbJ3ZlcnNpb24nXSkKICAgICAgICAgICAgICAgID8gJGNoYW5nZXNbJ3ZlcnNpb24nXQogICAgICAgICAgICAgICAgOiAkcmVxdWVzdC0+Z2V0UHJvdG9jb2xWZXJzaW9uKCksCiAgICAgICAgICAgICRyZXF1ZXN0LT5nZXRTZXJ2ZXJQYXJhbXMoKQogICAgICAgICk7CiAgICB9CgogICAgcmV0dXJuIG5ldyBSZXF1ZXN0KAogICAgICAgIGlzc2V0KCRjaGFuZ2VzWydtZXRob2QnXSkgPyAkY2hhbmdlc1snbWV0aG9kJ10gOiAkcmVxdWVzdC0+Z2V0TWV0aG9kKCksCiAgICAgICAgJHVyaSwKICAgICAgICAkaGVhZGVycywKICAgICAgICBpc3NldCgkY2hhbmdlc1snYm9keSddKSA/ICRjaGFuZ2VzWydib2R5J10gOiAkcmVxdWVzdC0+Z2V0Qm9keSgpLAogICAgICAgIGlzc2V0KCRjaGFuZ2VzWyd2ZXJzaW9uJ10pCiAgICAgICAgICAgID8gJGNoYW5nZXNbJ3ZlcnNpb24nXQogICAgICAgICAgICA6ICRyZXF1ZXN0LT5nZXRQcm90b2NvbFZlcnNpb24oKQogICAgKTsKfQoKLyoqCiAqIEF0dGVtcHRzIHRvIHJld2luZCBhIG1lc3NhZ2UgYm9keSBhbmQgdGhyb3dzIGFuIGV4Y2VwdGlvbiBvbiBmYWlsdXJlLgogKgogKiBUaGUgYm9keSBvZiB0aGUgbWVzc2FnZSB3aWxsIG9ubHkgYmUgcmV3b3VuZCBpZiBhIGNhbGwgdG8gYHRlbGwoKWAgcmV0dXJucyBhCiAqIHZhbHVlIG90aGVyIHRoYW4gYDBgLgogKgogKiBAcGFyYW0gTWVzc2FnZUludGVyZmFjZSAkbWVzc2FnZSBNZXNzYWdlIHRvIHJld2luZAogKgogKiBAdGhyb3dzIFxSdW50aW1lRXhjZXB0aW9uCiAqLwpmdW5jdGlvbiByZXdpbmRfYm9keShNZXNzYWdlSW50ZXJmYWNlICRtZXNzYWdlKQp7CiAgICAkYm9keSA9ICRtZXNzYWdlLT5nZXRCb2R5KCk7CgogICAgaWYgKCRib2R5LT50ZWxsKCkpIHsKICAgICAgICAkYm9keS0+cmV3aW5kKCk7CiAgICB9Cn0KCi8qKgogKiBTYWZlbHkgb3BlbnMgYSBQSFAgc3RyZWFtIHJlc291cmNlIHVzaW5nIGEgZmlsZW5hbWUuCiAqCiAqIFdoZW4gZm9wZW4gZmFpbHMsIFBIUCBub3JtYWxseSByYWlzZXMgYSB3YXJuaW5nLiBUaGlzIGZ1bmN0aW9uIGFkZHMgYW4KICogZXJyb3IgaGFuZGxlciB0aGF0IGNoZWNrcyBmb3IgZXJyb3JzIGFuZCB0aHJvd3MgYW4gZXhjZXB0aW9uIGluc3RlYWQuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lIEZpbGUgdG8gb3BlbgogKiBAcGFyYW0gc3RyaW5nICRtb2RlICAgICBNb2RlIHVzZWQgdG8gb3BlbiB0aGUgZmlsZQogKgogKiBAcmV0dXJuIHJlc291cmNlCiAqIEB0aHJvd3MgXFJ1bnRpbWVFeGNlcHRpb24gaWYgdGhlIGZpbGUgY2Fubm90IGJlIG9wZW5lZAogKi8KZnVuY3Rpb24gdHJ5X2ZvcGVuKCRmaWxlbmFtZSwgJG1vZGUpCnsKICAgICRleCA9IG51bGw7CiAgICBzZXRfZXJyb3JfaGFuZGxlcihmdW5jdGlvbiAoKSB1c2UgKCRmaWxlbmFtZSwgJG1vZGUsICYkZXgpIHsKICAgICAgICAkZXggPSBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oc3ByaW50ZigKICAgICAgICAgICAgJ1VuYWJsZSB0byBvcGVuICVzIHVzaW5nIG1vZGUgJXM6ICVzJywKICAgICAgICAgICAgJGZpbGVuYW1lLAogICAgICAgICAgICAkbW9kZSwKICAgICAgICAgICAgZnVuY19nZXRfYXJncygpWzFdCiAgICAgICAgKSk7CiAgICB9KTsKCiAgICAkaGFuZGxlID0gZm9wZW4oJGZpbGVuYW1lLCAkbW9kZSk7CiAgICByZXN0b3JlX2Vycm9yX2hhbmRsZXIoKTsKCiAgICBpZiAoJGV4KSB7CiAgICAgICAgLyoqIEB2YXIgJGV4IFxSdW50aW1lRXhjZXB0aW9uICovCiAgICAgICAgdGhyb3cgJGV4OwogICAgfQoKICAgIHJldHVybiAkaGFuZGxlOwp9CgovKioKICogQ29weSB0aGUgY29udGVudHMgb2YgYSBzdHJlYW0gaW50byBhIHN0cmluZyB1bnRpbCB0aGUgZ2l2ZW4gbnVtYmVyIG9mCiAqIGJ5dGVzIGhhdmUgYmVlbiByZWFkLgogKgogKiBAcGFyYW0gU3RyZWFtSW50ZXJmYWNlICRzdHJlYW0gU3RyZWFtIHRvIHJlYWQKICogQHBhcmFtIGludCAgICAgICAgICAgICAkbWF4TGVuIE1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRvIHJlYWQuIFBhc3MgLTEKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHJlYWQgdGhlIGVudGlyZSBzdHJlYW0uCiAqIEByZXR1cm4gc3RyaW5nCiAqIEB0aHJvd3MgXFJ1bnRpbWVFeGNlcHRpb24gb24gZXJyb3IuCiAqLwpmdW5jdGlvbiBjb3B5X3RvX3N0cmluZyhTdHJlYW1JbnRlcmZhY2UgJHN0cmVhbSwgJG1heExlbiA9IC0xKQp7CiAgICAkYnVmZmVyID0gJyc7CgogICAgaWYgKCRtYXhMZW4gPT09IC0xKSB7CiAgICAgICAgd2hpbGUgKCEkc3RyZWFtLT5lb2YoKSkgewogICAgICAgICAgICAkYnVmID0gJHN0cmVhbS0+cmVhZCgxMDQ4NTc2KTsKICAgICAgICAgICAgLy8gVXNpbmcgYSBsb29zZSBlcXVhbGl0eSBoZXJlIHRvIG1hdGNoIG9uICcnIGFuZCBmYWxzZS4KICAgICAgICAgICAgaWYgKCRidWYgPT0gbnVsbCkgewogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGJ1ZmZlciAuPSAkYnVmOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJGJ1ZmZlcjsKICAgIH0KCiAgICAkbGVuID0gMDsKICAgIHdoaWxlICghJHN0cmVhbS0+ZW9mKCkgJiYgJGxlbiA8ICRtYXhMZW4pIHsKICAgICAgICAkYnVmID0gJHN0cmVhbS0+cmVhZCgkbWF4TGVuIC0gJGxlbik7CiAgICAgICAgLy8gVXNpbmcgYSBsb29zZSBlcXVhbGl0eSBoZXJlIHRvIG1hdGNoIG9uICcnIGFuZCBmYWxzZS4KICAgICAgICBpZiAoJGJ1ZiA9PSBudWxsKSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICAkYnVmZmVyIC49ICRidWY7CiAgICAgICAgJGxlbiA9IHN0cmxlbigkYnVmZmVyKTsKICAgIH0KCiAgICByZXR1cm4gJGJ1ZmZlcjsKfQoKLyoqCiAqIENvcHkgdGhlIGNvbnRlbnRzIG9mIGEgc3RyZWFtIGludG8gYW5vdGhlciBzdHJlYW0gdW50aWwgdGhlIGdpdmVuIG51bWJlcgogKiBvZiBieXRlcyBoYXZlIGJlZW4gcmVhZC4KICoKICogQHBhcmFtIFN0cmVhbUludGVyZmFjZSAkc291cmNlIFN0cmVhbSB0byByZWFkIGZyb20KICogQHBhcmFtIFN0cmVhbUludGVyZmFjZSAkZGVzdCAgIFN0cmVhbSB0byB3cml0ZSB0bwogKiBAcGFyYW0gaW50ICAgICAgICAgICAgICRtYXhMZW4gTWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdG8gcmVhZC4gUGFzcyAtMQogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gcmVhZCB0aGUgZW50aXJlIHN0cmVhbS4KICoKICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbiBvbiBlcnJvci4KICovCmZ1bmN0aW9uIGNvcHlfdG9fc3RyZWFtKAogICAgU3RyZWFtSW50ZXJmYWNlICRzb3VyY2UsCiAgICBTdHJlYW1JbnRlcmZhY2UgJGRlc3QsCiAgICAkbWF4TGVuID0gLTEKKSB7CiAgICAkYnVmZmVyU2l6ZSA9IDgxOTI7CgogICAgaWYgKCRtYXhMZW4gPT09IC0xKSB7CiAgICAgICAgd2hpbGUgKCEkc291cmNlLT5lb2YoKSkgewogICAgICAgICAgICBpZiAoISRkZXN0LT53cml0ZSgkc291cmNlLT5yZWFkKCRidWZmZXJTaXplKSkpIHsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgICAkcmVtYWluaW5nID0gJG1heExlbjsKICAgICAgICB3aGlsZSAoJHJlbWFpbmluZyA+IDAgJiYgISRzb3VyY2UtPmVvZigpKSB7CiAgICAgICAgICAgICRidWYgPSAkc291cmNlLT5yZWFkKG1pbigkYnVmZmVyU2l6ZSwgJHJlbWFpbmluZykpOwogICAgICAgICAgICAkbGVuID0gc3RybGVuKCRidWYpOwogICAgICAgICAgICBpZiAoISRsZW4pIHsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRyZW1haW5pbmcgLT0gJGxlbjsKICAgICAgICAgICAgJGRlc3QtPndyaXRlKCRidWYpOwogICAgICAgIH0KICAgIH0KfQoKLyoqCiAqIENhbGN1bGF0ZSBhIGhhc2ggb2YgYSBTdHJlYW0KICoKICogQHBhcmFtIFN0cmVhbUludGVyZmFjZSAkc3RyZWFtICAgIFN0cmVhbSB0byBjYWxjdWxhdGUgdGhlIGhhc2ggZm9yCiAqIEBwYXJhbSBzdHJpbmcgICAgICAgICAgJGFsZ28gICAgICBIYXNoIGFsZ29yaXRobSAoZS5nLiBtZDUsIGNyYzMyLCBldGMpCiAqIEBwYXJhbSBib29sICAgICAgICAgICAgJHJhd091dHB1dCBXaGV0aGVyIG9yIG5vdCB0byB1c2UgcmF3IG91dHB1dAogKgogKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIHRoZSBoYXNoIG9mIHRoZSBzdHJlYW0KICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbiBvbiBlcnJvci4KICovCmZ1bmN0aW9uIGhhc2goCiAgICBTdHJlYW1JbnRlcmZhY2UgJHN0cmVhbSwKICAgICRhbGdvLAogICAgJHJhd091dHB1dCA9IGZhbHNlCikgewogICAgJHBvcyA9ICRzdHJlYW0tPnRlbGwoKTsKCiAgICBpZiAoJHBvcyA+IDApIHsKICAgICAgICAkc3RyZWFtLT5yZXdpbmQoKTsKICAgIH0KCiAgICAkY3R4ID0gaGFzaF9pbml0KCRhbGdvKTsKICAgIHdoaWxlICghJHN0cmVhbS0+ZW9mKCkpIHsKICAgICAgICBoYXNoX3VwZGF0ZSgkY3R4LCAkc3RyZWFtLT5yZWFkKDEwNDg1NzYpKTsKICAgIH0KCiAgICAkb3V0ID0gaGFzaF9maW5hbCgkY3R4LCAoYm9vbCkgJHJhd091dHB1dCk7CiAgICAkc3RyZWFtLT5zZWVrKCRwb3MpOwoKICAgIHJldHVybiAkb3V0Owp9CgovKioKICogUmVhZCBhIGxpbmUgZnJvbSB0aGUgc3RyZWFtIHVwIHRvIHRoZSBtYXhpbXVtIGFsbG93ZWQgYnVmZmVyIGxlbmd0aAogKgogKiBAcGFyYW0gU3RyZWFtSW50ZXJmYWNlICRzdHJlYW0gICAgU3RyZWFtIHRvIHJlYWQgZnJvbQogKiBAcGFyYW0gaW50ICAgICAgICAgICAgICRtYXhMZW5ndGggTWF4aW11bSBidWZmZXIgbGVuZ3RoCiAqCiAqIEByZXR1cm4gc3RyaW5nfGJvb2wKICovCmZ1bmN0aW9uIHJlYWRsaW5lKFN0cmVhbUludGVyZmFjZSAkc3RyZWFtLCAkbWF4TGVuZ3RoID0gbnVsbCkKewogICAgJGJ1ZmZlciA9ICcnOwogICAgJHNpemUgPSAwOwoKICAgIHdoaWxlICghJHN0cmVhbS0+ZW9mKCkpIHsKICAgICAgICAvLyBVc2luZyBhIGxvb3NlIGVxdWFsaXR5IGhlcmUgdG8gbWF0Y2ggb24gJycgYW5kIGZhbHNlLgogICAgICAgIGlmIChudWxsID09ICgkYnl0ZSA9ICRzdHJlYW0tPnJlYWQoMSkpKSB7CiAgICAgICAgICAgIHJldHVybiAkYnVmZmVyOwogICAgICAgIH0KICAgICAgICAkYnVmZmVyIC49ICRieXRlOwogICAgICAgIC8vIEJyZWFrIHdoZW4gYSBuZXcgbGluZSBpcyBmb3VuZCBvciB0aGUgbWF4IGxlbmd0aCAtIDEgaXMgcmVhY2hlZAogICAgICAgIGlmICgkYnl0ZSA9PT0gIlxuIiB8fCArKyRzaXplID09PSAkbWF4TGVuZ3RoIC0gMSkgewogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICRidWZmZXI7Cn0KCi8qKgogKiBQYXJzZXMgYSByZXF1ZXN0IG1lc3NhZ2Ugc3RyaW5nIGludG8gYSByZXF1ZXN0IG9iamVjdC4KICoKICogQHBhcmFtIHN0cmluZyAkbWVzc2FnZSBSZXF1ZXN0IG1lc3NhZ2Ugc3RyaW5nLgogKgogKiBAcmV0dXJuIFJlcXVlc3QKICovCmZ1bmN0aW9uIHBhcnNlX3JlcXVlc3QoJG1lc3NhZ2UpCnsKICAgICRkYXRhID0gX3BhcnNlX21lc3NhZ2UoJG1lc3NhZ2UpOwogICAgJG1hdGNoZXMgPSBbXTsKICAgIGlmICghcHJlZ19tYXRjaCgnL15bXFNdK1xzKyhbYS16QS1aXSs6XC9cL3xcLykuKi8nLCAkZGF0YVsnc3RhcnQtbGluZSddLCAkbWF0Y2hlcykpIHsKICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCByZXF1ZXN0IHN0cmluZycpOwogICAgfQogICAgJHBhcnRzID0gZXhwbG9kZSgnICcsICRkYXRhWydzdGFydC1saW5lJ10sIDMpOwogICAgJHZlcnNpb24gPSBpc3NldCgkcGFydHNbMl0pID8gZXhwbG9kZSgnLycsICRwYXJ0c1syXSlbMV0gOiAnMS4xJzsKCiAgICAkcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KAogICAgICAgICRwYXJ0c1swXSwKICAgICAgICAkbWF0Y2hlc1sxXSA9PT0gJy8nID8gX3BhcnNlX3JlcXVlc3RfdXJpKCRwYXJ0c1sxXSwgJGRhdGFbJ2hlYWRlcnMnXSkgOiAkcGFydHNbMV0sCiAgICAgICAgJGRhdGFbJ2hlYWRlcnMnXSwKICAgICAgICAkZGF0YVsnYm9keSddLAogICAgICAgICR2ZXJzaW9uCiAgICApOwoKICAgIHJldHVybiAkbWF0Y2hlc1sxXSA9PT0gJy8nID8gJHJlcXVlc3QgOiAkcmVxdWVzdC0+d2l0aFJlcXVlc3RUYXJnZXQoJHBhcnRzWzFdKTsKfQoKLyoqCiAqIFBhcnNlcyBhIHJlc3BvbnNlIG1lc3NhZ2Ugc3RyaW5nIGludG8gYSByZXNwb25zZSBvYmplY3QuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UgUmVzcG9uc2UgbWVzc2FnZSBzdHJpbmcuCiAqCiAqIEByZXR1cm4gUmVzcG9uc2UKICovCmZ1bmN0aW9uIHBhcnNlX3Jlc3BvbnNlKCRtZXNzYWdlKQp7CiAgICAkZGF0YSA9IF9wYXJzZV9tZXNzYWdlKCRtZXNzYWdlKTsKICAgIC8vIEFjY29yZGluZyB0byBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMCNzZWN0aW9uLTMuMS4yIHRoZSBzcGFjZQogICAgLy8gYmV0d2VlbiBzdGF0dXMtY29kZSBhbmQgcmVhc29uLXBocmFzZSBpcyByZXF1aXJlZC4gQnV0IGJyb3dzZXJzIGFjY2VwdAogICAgLy8gcmVzcG9uc2VzIHdpdGhvdXQgc3BhY2UgYW5kIHJlYXNvbiBhcyB3ZWxsLgogICAgaWYgKCFwcmVnX21hdGNoKCcvXkhUVFBcLy4qIFswLTldezN9KCAuKnwkKS8nLCAkZGF0YVsnc3RhcnQtbGluZSddKSkgewogICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdJbnZhbGlkIHJlc3BvbnNlIHN0cmluZycpOwogICAgfQogICAgJHBhcnRzID0gZXhwbG9kZSgnICcsICRkYXRhWydzdGFydC1saW5lJ10sIDMpOwoKICAgIHJldHVybiBuZXcgUmVzcG9uc2UoCiAgICAgICAgJHBhcnRzWzFdLAogICAgICAgICRkYXRhWydoZWFkZXJzJ10sCiAgICAgICAgJGRhdGFbJ2JvZHknXSwKICAgICAgICBleHBsb2RlKCcvJywgJHBhcnRzWzBdKVsxXSwKICAgICAgICBpc3NldCgkcGFydHNbMl0pID8gJHBhcnRzWzJdIDogbnVsbAogICAgKTsKfQoKLyoqCiAqIFBhcnNlIGEgcXVlcnkgc3RyaW5nIGludG8gYW4gYXNzb2NpYXRpdmUgYXJyYXkuCiAqCiAqIElmIG11bHRpcGxlIHZhbHVlcyBhcmUgZm91bmQgZm9yIHRoZSBzYW1lIGtleSwgdGhlIHZhbHVlIG9mIHRoYXQga2V5CiAqIHZhbHVlIHBhaXIgd2lsbCBiZWNvbWUgYW4gYXJyYXkuIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcGFyc2UgbmVzdGVkCiAqIFBIUCBzdHlsZSBhcnJheXMgaW50byBhbiBhc3NvY2lhdGl2ZSBhcnJheSAoZS5nLiwgZm9vW2FdPTEmZm9vW2JdPTIgd2lsbAogKiBiZSBwYXJzZWQgaW50byBbJ2Zvb1thXScgPT4gJzEnLCAnZm9vW2JdJyA9PiAnMiddKS4KICoKICogQHBhcmFtIHN0cmluZyAgICAgICRzdHIgICAgICAgICBRdWVyeSBzdHJpbmcgdG8gcGFyc2UKICogQHBhcmFtIGJvb2x8c3RyaW5nICR1cmxFbmNvZGluZyBIb3cgdGhlIHF1ZXJ5IHN0cmluZyBpcyBlbmNvZGVkCiAqCiAqIEByZXR1cm4gYXJyYXkKICovCmZ1bmN0aW9uIHBhcnNlX3F1ZXJ5KCRzdHIsICR1cmxFbmNvZGluZyA9IHRydWUpCnsKICAgICRyZXN1bHQgPSBbXTsKCiAgICBpZiAoJHN0ciA9PT0gJycpIHsKICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KCiAgICBpZiAoJHVybEVuY29kaW5nID09PSB0cnVlKSB7CiAgICAgICAgJGRlY29kZXIgPSBmdW5jdGlvbiAoJHZhbHVlKSB7CiAgICAgICAgICAgIHJldHVybiByYXd1cmxkZWNvZGUoc3RyX3JlcGxhY2UoJysnLCAnICcsICR2YWx1ZSkpOwogICAgICAgIH07CiAgICB9IGVsc2VpZiAoJHVybEVuY29kaW5nID09IFBIUF9RVUVSWV9SRkMzOTg2KSB7CiAgICAgICAgJGRlY29kZXIgPSAncmF3dXJsZGVjb2RlJzsKICAgIH0gZWxzZWlmICgkdXJsRW5jb2RpbmcgPT0gUEhQX1FVRVJZX1JGQzE3MzgpIHsKICAgICAgICAkZGVjb2RlciA9ICd1cmxkZWNvZGUnOwogICAgfSBlbHNlIHsKICAgICAgICAkZGVjb2RlciA9IGZ1bmN0aW9uICgkc3RyKSB7IHJldHVybiAkc3RyOyB9OwogICAgfQoKICAgIGZvcmVhY2ggKGV4cGxvZGUoJyYnLCAkc3RyKSBhcyAka3ZwKSB7CiAgICAgICAgJHBhcnRzID0gZXhwbG9kZSgnPScsICRrdnAsIDIpOwogICAgICAgICRrZXkgPSAkZGVjb2RlcigkcGFydHNbMF0pOwogICAgICAgICR2YWx1ZSA9IGlzc2V0KCRwYXJ0c1sxXSkgPyAkZGVjb2RlcigkcGFydHNbMV0pIDogbnVsbDsKICAgICAgICBpZiAoIWlzc2V0KCRyZXN1bHRbJGtleV0pKSB7CiAgICAgICAgICAgICRyZXN1bHRbJGtleV0gPSAkdmFsdWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKCFpc19hcnJheSgkcmVzdWx0WyRrZXldKSkgewogICAgICAgICAgICAgICAgJHJlc3VsdFska2V5XSA9IFskcmVzdWx0WyRrZXldXTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkcmVzdWx0WyRrZXldW10gPSAkdmFsdWU7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAkcmVzdWx0Owp9CgovKioKICogQnVpbGQgYSBxdWVyeSBzdHJpbmcgZnJvbSBhbiBhcnJheSBvZiBrZXkgdmFsdWUgcGFpcnMuCiAqCiAqIFRoaXMgZnVuY3Rpb24gY2FuIHVzZSB0aGUgcmV0dXJuIHZhbHVlIG9mIHBhcnNlX3F1ZXJ5KCkgdG8gYnVpbGQgYSBxdWVyeQogKiBzdHJpbmcuIFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgbW9kaWZ5IHRoZSBwcm92aWRlZCBrZXlzIHdoZW4gYW4gYXJyYXkgaXMKICogZW5jb3VudGVyZWQgKGxpa2UgaHR0cF9idWlsZF9xdWVyeSB3b3VsZCkuCiAqCiAqIEBwYXJhbSBhcnJheSAgICAgJHBhcmFtcyAgIFF1ZXJ5IHN0cmluZyBwYXJhbWV0ZXJzLgogKiBAcGFyYW0gaW50fGZhbHNlICRlbmNvZGluZyBTZXQgdG8gZmFsc2UgdG8gbm90IGVuY29kZSwgUEhQX1FVRVJZX1JGQzM5ODYKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gZW5jb2RlIHVzaW5nIFJGQzM5ODYsIG9yIFBIUF9RVUVSWV9SRkMxNzM4CiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGVuY29kZSB1c2luZyBSRkMxNzM4LgogKiBAcmV0dXJuIHN0cmluZwogKi8KZnVuY3Rpb24gYnVpbGRfcXVlcnkoYXJyYXkgJHBhcmFtcywgJGVuY29kaW5nID0gUEhQX1FVRVJZX1JGQzM5ODYpCnsKICAgIGlmICghJHBhcmFtcykgewogICAgICAgIHJldHVybiAnJzsKICAgIH0KCiAgICBpZiAoJGVuY29kaW5nID09PSBmYWxzZSkgewogICAgICAgICRlbmNvZGVyID0gZnVuY3Rpb24gKCRzdHIpIHsgcmV0dXJuICRzdHI7IH07CiAgICB9IGVsc2VpZiAoJGVuY29kaW5nID09PSBQSFBfUVVFUllfUkZDMzk4NikgewogICAgICAgICRlbmNvZGVyID0gJ3Jhd3VybGVuY29kZSc7CiAgICB9IGVsc2VpZiAoJGVuY29kaW5nID09PSBQSFBfUVVFUllfUkZDMTczOCkgewogICAgICAgICRlbmNvZGVyID0gJ3VybGVuY29kZSc7CiAgICB9IGVsc2UgewogICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdJbnZhbGlkIHR5cGUnKTsKICAgIH0KCiAgICAkcXMgPSAnJzsKICAgIGZvcmVhY2ggKCRwYXJhbXMgYXMgJGsgPT4gJHYpIHsKICAgICAgICAkayA9ICRlbmNvZGVyKCRrKTsKICAgICAgICBpZiAoIWlzX2FycmF5KCR2KSkgewogICAgICAgICAgICAkcXMgLj0gJGs7CiAgICAgICAgICAgIGlmICgkdiAhPT0gbnVsbCkgewogICAgICAgICAgICAgICAgJHFzIC49ICc9JyAuICRlbmNvZGVyKCR2KTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkcXMgLj0gJyYnOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGZvcmVhY2ggKCR2IGFzICR2dikgewogICAgICAgICAgICAgICAgJHFzIC49ICRrOwogICAgICAgICAgICAgICAgaWYgKCR2diAhPT0gbnVsbCkgewogICAgICAgICAgICAgICAgICAgICRxcyAuPSAnPScgLiAkZW5jb2RlcigkdnYpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJHFzIC49ICcmJzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gJHFzID8gKHN0cmluZykgc3Vic3RyKCRxcywgMCwgLTEpIDogJyc7Cn0KCi8qKgogKiBEZXRlcm1pbmVzIHRoZSBtaW1ldHlwZSBvZiBhIGZpbGUgYnkgbG9va2luZyBhdCBpdHMgZXh0ZW5zaW9uLgogKgogKiBAcGFyYW0gJGZpbGVuYW1lCiAqCiAqIEByZXR1cm4gbnVsbHxzdHJpbmcKICovCmZ1bmN0aW9uIG1pbWV0eXBlX2Zyb21fZmlsZW5hbWUoJGZpbGVuYW1lKQp7CiAgICByZXR1cm4gbWltZXR5cGVfZnJvbV9leHRlbnNpb24ocGF0aGluZm8oJGZpbGVuYW1lLCBQQVRISU5GT19FWFRFTlNJT04pKTsKfQoKLyoqCiAqIE1hcHMgYSBmaWxlIGV4dGVuc2lvbnMgdG8gYSBtaW1ldHlwZS4KICoKICogQHBhcmFtICRleHRlbnNpb24gc3RyaW5nIFRoZSBmaWxlIGV4dGVuc2lvbi4KICoKICogQHJldHVybiBzdHJpbmd8bnVsbAogKiBAbGluayBodHRwOi8vc3ZuLmFwYWNoZS5vcmcvcmVwb3MvYXNmL2h0dHBkL2h0dHBkL2JyYW5jaGVzLzEuMy54L2NvbmYvbWltZS50eXBlcwogKi8KZnVuY3Rpb24gbWltZXR5cGVfZnJvbV9leHRlbnNpb24oJGV4dGVuc2lvbikKewogICAgc3RhdGljICRtaW1ldHlwZXMgPSBbCiAgICAgICAgJzd6JyA9PiAnYXBwbGljYXRpb24veC03ei1jb21wcmVzc2VkJywKICAgICAgICAnYWFjJyA9PiAnYXVkaW8veC1hYWMnLAogICAgICAgICdhaScgPT4gJ2FwcGxpY2F0aW9uL3Bvc3RzY3JpcHQnLAogICAgICAgICdhaWYnID0+ICdhdWRpby94LWFpZmYnLAogICAgICAgICdhc2MnID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAnYXNmJyA9PiAndmlkZW8veC1tcy1hc2YnLAogICAgICAgICdhdG9tJyA9PiAnYXBwbGljYXRpb24vYXRvbSt4bWwnLAogICAgICAgICdhdmknID0+ICd2aWRlby94LW1zdmlkZW8nLAogICAgICAgICdibXAnID0+ICdpbWFnZS9ibXAnLAogICAgICAgICdiejInID0+ICdhcHBsaWNhdGlvbi94LWJ6aXAyJywKICAgICAgICAnY2VyJyA9PiAnYXBwbGljYXRpb24vcGtpeC1jZXJ0JywKICAgICAgICAnY3JsJyA9PiAnYXBwbGljYXRpb24vcGtpeC1jcmwnLAogICAgICAgICdjcnQnID0+ICdhcHBsaWNhdGlvbi94LXg1MDktY2EtY2VydCcsCiAgICAgICAgJ2NzcycgPT4gJ3RleHQvY3NzJywKICAgICAgICAnY3N2JyA9PiAndGV4dC9jc3YnLAogICAgICAgICdjdScgPT4gJ2FwcGxpY2F0aW9uL2N1LXNlZW1lJywKICAgICAgICAnZGViJyA9PiAnYXBwbGljYXRpb24veC1kZWJpYW4tcGFja2FnZScsCiAgICAgICAgJ2RvYycgPT4gJ2FwcGxpY2F0aW9uL21zd29yZCcsCiAgICAgICAgJ2RvY3gnID0+ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudCcsCiAgICAgICAgJ2R2aScgPT4gJ2FwcGxpY2F0aW9uL3gtZHZpJywKICAgICAgICAnZW90JyA9PiAnYXBwbGljYXRpb24vdm5kLm1zLWZvbnRvYmplY3QnLAogICAgICAgICdlcHMnID0+ICdhcHBsaWNhdGlvbi9wb3N0c2NyaXB0JywKICAgICAgICAnZXB1YicgPT4gJ2FwcGxpY2F0aW9uL2VwdWIremlwJywKICAgICAgICAnZXR4JyA9PiAndGV4dC94LXNldGV4dCcsCiAgICAgICAgJ2ZsYWMnID0+ICdhdWRpby9mbGFjJywKICAgICAgICAnZmx2JyA9PiAndmlkZW8veC1mbHYnLAogICAgICAgICdnaWYnID0+ICdpbWFnZS9naWYnLAogICAgICAgICdneicgPT4gJ2FwcGxpY2F0aW9uL2d6aXAnLAogICAgICAgICdodG0nID0+ICd0ZXh0L2h0bWwnLAogICAgICAgICdodG1sJyA9PiAndGV4dC9odG1sJywKICAgICAgICAnaWNvJyA9PiAnaW1hZ2UveC1pY29uJywKICAgICAgICAnaWNzJyA9PiAndGV4dC9jYWxlbmRhcicsCiAgICAgICAgJ2luaScgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICdpc28nID0+ICdhcHBsaWNhdGlvbi94LWlzbzk2NjAtaW1hZ2UnLAogICAgICAgICdqYXInID0+ICdhcHBsaWNhdGlvbi9qYXZhLWFyY2hpdmUnLAogICAgICAgICdqcGUnID0+ICdpbWFnZS9qcGVnJywKICAgICAgICAnanBlZycgPT4gJ2ltYWdlL2pwZWcnLAogICAgICAgICdqcGcnID0+ICdpbWFnZS9qcGVnJywKICAgICAgICAnanMnID0+ICd0ZXh0L2phdmFzY3JpcHQnLAogICAgICAgICdqc29uJyA9PiAnYXBwbGljYXRpb24vanNvbicsCiAgICAgICAgJ2xhdGV4JyA9PiAnYXBwbGljYXRpb24veC1sYXRleCcsCiAgICAgICAgJ2xvZycgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICdtNGEnID0+ICdhdWRpby9tcDQnLAogICAgICAgICdtNHYnID0+ICd2aWRlby9tcDQnLAogICAgICAgICdtaWQnID0+ICdhdWRpby9taWRpJywKICAgICAgICAnbWlkaScgPT4gJ2F1ZGlvL21pZGknLAogICAgICAgICdtb3YnID0+ICd2aWRlby9xdWlja3RpbWUnLAogICAgICAgICdtcDMnID0+ICdhdWRpby9tcGVnJywKICAgICAgICAnbXA0JyA9PiAndmlkZW8vbXA0JywKICAgICAgICAnbXA0YScgPT4gJ2F1ZGlvL21wNCcsCiAgICAgICAgJ21wNHYnID0+ICd2aWRlby9tcDQnLAogICAgICAgICdtcGUnID0+ICd2aWRlby9tcGVnJywKICAgICAgICAnbXBlZycgPT4gJ3ZpZGVvL21wZWcnLAogICAgICAgICdtcGcnID0+ICd2aWRlby9tcGVnJywKICAgICAgICAnbXBnNCcgPT4gJ3ZpZGVvL21wNCcsCiAgICAgICAgJ29nYScgPT4gJ2F1ZGlvL29nZycsCiAgICAgICAgJ29nZycgPT4gJ2F1ZGlvL29nZycsCiAgICAgICAgJ29ndicgPT4gJ3ZpZGVvL29nZycsCiAgICAgICAgJ29neCcgPT4gJ2FwcGxpY2F0aW9uL29nZycsCiAgICAgICAgJ3BibScgPT4gJ2ltYWdlL3gtcG9ydGFibGUtYml0bWFwJywKICAgICAgICAncGRmJyA9PiAnYXBwbGljYXRpb24vcGRmJywKICAgICAgICAncGdtJyA9PiAnaW1hZ2UveC1wb3J0YWJsZS1ncmF5bWFwJywKICAgICAgICAncG5nJyA9PiAnaW1hZ2UvcG5nJywKICAgICAgICAncG5tJyA9PiAnaW1hZ2UveC1wb3J0YWJsZS1hbnltYXAnLAogICAgICAgICdwcG0nID0+ICdpbWFnZS94LXBvcnRhYmxlLXBpeG1hcCcsCiAgICAgICAgJ3BwdCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5tcy1wb3dlcnBvaW50JywKICAgICAgICAncHB0eCcgPT4gJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC5wcmVzZW50YXRpb24nLAogICAgICAgICdwcycgPT4gJ2FwcGxpY2F0aW9uL3Bvc3RzY3JpcHQnLAogICAgICAgICdxdCcgPT4gJ3ZpZGVvL3F1aWNrdGltZScsCiAgICAgICAgJ3JhcicgPT4gJ2FwcGxpY2F0aW9uL3gtcmFyLWNvbXByZXNzZWQnLAogICAgICAgICdyYXMnID0+ICdpbWFnZS94LWNtdS1yYXN0ZXInLAogICAgICAgICdyc3MnID0+ICdhcHBsaWNhdGlvbi9yc3MreG1sJywKICAgICAgICAncnRmJyA9PiAnYXBwbGljYXRpb24vcnRmJywKICAgICAgICAnc2dtJyA9PiAndGV4dC9zZ21sJywKICAgICAgICAnc2dtbCcgPT4gJ3RleHQvc2dtbCcsCiAgICAgICAgJ3N2ZycgPT4gJ2ltYWdlL3N2Zyt4bWwnLAogICAgICAgICdzd2YnID0+ICdhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCcsCiAgICAgICAgJ3RhcicgPT4gJ2FwcGxpY2F0aW9uL3gtdGFyJywKICAgICAgICAndGlmJyA9PiAnaW1hZ2UvdGlmZicsCiAgICAgICAgJ3RpZmYnID0+ICdpbWFnZS90aWZmJywKICAgICAgICAndG9ycmVudCcgPT4gJ2FwcGxpY2F0aW9uL3gtYml0dG9ycmVudCcsCiAgICAgICAgJ3R0ZicgPT4gJ2FwcGxpY2F0aW9uL3gtZm9udC10dGYnLAogICAgICAgICd0eHQnID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAnd2F2JyA9PiAnYXVkaW8veC13YXYnLAogICAgICAgICd3ZWJtJyA9PiAndmlkZW8vd2VibScsCiAgICAgICAgJ3dtYScgPT4gJ2F1ZGlvL3gtbXMtd21hJywKICAgICAgICAnd212JyA9PiAndmlkZW8veC1tcy13bXYnLAogICAgICAgICd3b2ZmJyA9PiAnYXBwbGljYXRpb24veC1mb250LXdvZmYnLAogICAgICAgICd3c2RsJyA9PiAnYXBwbGljYXRpb24vd3NkbCt4bWwnLAogICAgICAgICd4Ym0nID0+ICdpbWFnZS94LXhiaXRtYXAnLAogICAgICAgICd4bHMnID0+ICdhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwnLAogICAgICAgICd4bHN4JyA9PiAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnLAogICAgICAgICd4bWwnID0+ICdhcHBsaWNhdGlvbi94bWwnLAogICAgICAgICd4cG0nID0+ICdpbWFnZS94LXhwaXhtYXAnLAogICAgICAgICd4d2QnID0+ICdpbWFnZS94LXh3aW5kb3dkdW1wJywKICAgICAgICAneWFtbCcgPT4gJ3RleHQveWFtbCcsCiAgICAgICAgJ3ltbCcgPT4gJ3RleHQveWFtbCcsCiAgICAgICAgJ3ppcCcgPT4gJ2FwcGxpY2F0aW9uL3ppcCcsCiAgICBdOwoKICAgICRleHRlbnNpb24gPSBzdHJ0b2xvd2VyKCRleHRlbnNpb24pOwoKICAgIHJldHVybiBpc3NldCgkbWltZXR5cGVzWyRleHRlbnNpb25dKQogICAgICAgID8gJG1pbWV0eXBlc1skZXh0ZW5zaW9uXQogICAgICAgIDogbnVsbDsKfQoKLyoqCiAqIFBhcnNlcyBhbiBIVFRQIG1lc3NhZ2UgaW50byBhbiBhc3NvY2lhdGl2ZSBhcnJheS4KICoKICogVGhlIGFycmF5IGNvbnRhaW5zIHRoZSAic3RhcnQtbGluZSIga2V5IGNvbnRhaW5pbmcgdGhlIHN0YXJ0IGxpbmUgb2YKICogdGhlIG1lc3NhZ2UsICJoZWFkZXJzIiBrZXkgY29udGFpbmluZyBhbiBhc3NvY2lhdGl2ZSBhcnJheSBvZiBoZWFkZXIKICogYXJyYXkgdmFsdWVzLCBhbmQgYSAiYm9keSIga2V5IGNvbnRhaW5pbmcgdGhlIGJvZHkgb2YgdGhlIG1lc3NhZ2UuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJG1lc3NhZ2UgSFRUUCByZXF1ZXN0IG9yIHJlc3BvbnNlIHRvIHBhcnNlLgogKgogKiBAcmV0dXJuIGFycmF5CiAqIEBpbnRlcm5hbAogKi8KZnVuY3Rpb24gX3BhcnNlX21lc3NhZ2UoJG1lc3NhZ2UpCnsKICAgIGlmICghJG1lc3NhZ2UpIHsKICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCBtZXNzYWdlJyk7CiAgICB9CgogICAgLy8gSXRlcmF0ZSBvdmVyIGVhY2ggbGluZSBpbiB0aGUgbWVzc2FnZSwgYWNjb3VudGluZyBmb3IgbGluZSBlbmRpbmdzCiAgICAkbGluZXMgPSBwcmVnX3NwbGl0KCcvKFxccj9cXG4pLycsICRtZXNzYWdlLCAtMSwgUFJFR19TUExJVF9ERUxJTV9DQVBUVVJFKTsKICAgICRyZXN1bHQgPSBbJ3N0YXJ0LWxpbmUnID0+IGFycmF5X3NoaWZ0KCRsaW5lcyksICdoZWFkZXJzJyA9PiBbXSwgJ2JvZHknID0+ICcnXTsKICAgIGFycmF5X3NoaWZ0KCRsaW5lcyk7CgogICAgZm9yICgkaSA9IDAsICR0b3RhbExpbmVzID0gY291bnQoJGxpbmVzKTsgJGkgPCAkdG90YWxMaW5lczsgJGkgKz0gMikgewogICAgICAgICRsaW5lID0gJGxpbmVzWyRpXTsKICAgICAgICAvLyBJZiB0d28gbGluZSBicmVha3Mgd2VyZSBlbmNvdW50ZXJlZCwgdGhlbiB0aGlzIGlzIHRoZSBlbmQgb2YgYm9keQogICAgICAgIGlmIChlbXB0eSgkbGluZSkpIHsKICAgICAgICAgICAgaWYgKCRpIDwgJHRvdGFsTGluZXMgLSAxKSB7CiAgICAgICAgICAgICAgICAkcmVzdWx0Wydib2R5J10gPSBpbXBsb2RlKCcnLCBhcnJheV9zbGljZSgkbGluZXMsICRpICsgMikpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBpZiAoc3RycG9zKCRsaW5lLCAnOicpKSB7CiAgICAgICAgICAgICRwYXJ0cyA9IGV4cGxvZGUoJzonLCAkbGluZSwgMik7CiAgICAgICAgICAgICRrZXkgPSB0cmltKCRwYXJ0c1swXSk7CiAgICAgICAgICAgICR2YWx1ZSA9IGlzc2V0KCRwYXJ0c1sxXSkgPyB0cmltKCRwYXJ0c1sxXSkgOiAnJzsKICAgICAgICAgICAgJHJlc3VsdFsnaGVhZGVycyddWyRrZXldW10gPSAkdmFsdWU7CiAgICAgICAgfQogICAgfQoKICAgIHJldHVybiAkcmVzdWx0Owp9CgovKioKICogQ29uc3RydWN0cyBhIFVSSSBmb3IgYW4gSFRUUCByZXF1ZXN0IG1lc3NhZ2UuCiAqCiAqIEBwYXJhbSBzdHJpbmcgJHBhdGggICAgUGF0aCBmcm9tIHRoZSBzdGFydC1saW5lCiAqIEBwYXJhbSBhcnJheSAgJGhlYWRlcnMgQXJyYXkgb2YgaGVhZGVycyAoZWFjaCB2YWx1ZSBhbiBhcnJheSkuCiAqCiAqIEByZXR1cm4gc3RyaW5nCiAqIEBpbnRlcm5hbAogKi8KZnVuY3Rpb24gX3BhcnNlX3JlcXVlc3RfdXJpKCRwYXRoLCBhcnJheSAkaGVhZGVycykKewogICAgJGhvc3RLZXkgPSBhcnJheV9maWx0ZXIoYXJyYXlfa2V5cygkaGVhZGVycyksIGZ1bmN0aW9uICgkaykgewogICAgICAgIHJldHVybiBzdHJ0b2xvd2VyKCRrKSA9PT0gJ2hvc3QnOwogICAgfSk7CgogICAgLy8gSWYgbm8gaG9zdCBpcyBmb3VuZCwgdGhlbiBhIGZ1bGwgVVJJIGNhbm5vdCBiZSBjb25zdHJ1Y3RlZC4KICAgIGlmICghJGhvc3RLZXkpIHsKICAgICAgICByZXR1cm4gJHBhdGg7CiAgICB9CgogICAgJGhvc3QgPSAkaGVhZGVyc1tyZXNldCgkaG9zdEtleSldWzBdOwogICAgJHNjaGVtZSA9IHN1YnN0cigkaG9zdCwgLTQpID09PSAnOjQ0MycgPyAnaHR0cHMnIDogJ2h0dHAnOwoKICAgIHJldHVybiAkc2NoZW1lIC4gJzovLycgLiAkaG9zdCAuICcvJyAuIGx0cmltKCRwYXRoLCAnLycpOwp9CgovKiogQGludGVybmFsICovCmZ1bmN0aW9uIF9jYXNlbGVzc19yZW1vdmUoJGtleXMsIGFycmF5ICRkYXRhKQp7CiAgICAkcmVzdWx0ID0gW107CgogICAgZm9yZWFjaCAoJGtleXMgYXMgJiRrZXkpIHsKICAgICAgICAka2V5ID0gc3RydG9sb3dlcigka2V5KTsKICAgIH0KCiAgICBmb3JlYWNoICgkZGF0YSBhcyAkayA9PiAkdikgewogICAgICAgIGlmICghaW5fYXJyYXkoc3RydG9sb3dlcigkayksICRrZXlzKSkgewogICAgICAgICAgICAkcmVzdWx0WyRrXSA9ICR2OwogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gJHJlc3VsdDsKfQo=AppDevTools/query/vendor/guzzlehttp/psr7/src/functions_include.phpPD9waHAKCi8vIERvbid0IHJlZGVmaW5lIHRoZSBmdW5jdGlvbnMgaWYgaW5jbHVkZWQgbXVsdGlwbGUgdGltZXMuCmlmICghZnVuY3Rpb25fZXhpc3RzKCdHdXp6bGVIdHRwXFBzcjdcc3RyJykpIHsKICAgIHJlcXVpcmUgX19ESVJfXyAuICcvZnVuY3Rpb25zLnBocCc7Cn0KAppDevTools/query/vendor/jaeger/g-http/.gitignoreLmlkZWEKL3ZlbmRvci8KAppDevTools/query/vendor/jaeger/g-http/README.mdIyBHSHR0cArln7rkuo5HdXp6bGVIdHRw55qE566A5Y2V54mISHR0cOWuouaIt+err+OAgiBTaW1wbGUgSHR0cCBjbGllbnQgYmFzZSBvbiBHdXp6bGVIdHRwCgojIyDlronoo4UKCmBgYApjb21wb3NlciByZXF1aXJlIGphZWdlci9nLWh0dHAKYGBgCgojIyDnlKjms5UKCiMjIyMgMS4gZ2V0IC8gZ2V0SnNvbgpgYGBwaHAKCnVzZSBKYWVnZXJcR0h0dHA7CgokcnQgPSBHSHR0cDo6Z2V0KCdodHRwczovL3d3dy5iYWlkdS5jb20vcz93ZD1RdWVyeUxpc3QnKTsKCiRydCA9IEdIdHRwOjpnZXQoJ2h0dHBzOi8vd3d3LmJhaWR1LmNvbS9zJywnd2Q9UXVlcnlMaXN0JndkMj10ZXN0c3RyJyk7CgovL29yCgokcnQgPSBHSHR0cDo6Z2V0KCdodHRwczovL3d3dy5iYWlkdS5jb20vcycsWwogICAgJ3dkJyA9PiAnUXVlcnlMaXN0JywKICAgICd3ZDInID0+ICd0ZXN0c3RyJwpdKTsKCi8vb3B0CgokcnQgPSBHSHR0cDo6Z2V0KCdodHRwczovL3d3dy5iYWlkdS5jb20vcycsWwogICAgJ3dkJyA9PiAnUXVlcnlMaXN0JwpdLFsKICAgICdoZWFkZXJzJyA9PiBbCiAgICAgICAgJ3JlZmVyZXInID0+ICdodHRwczovL2JhaWR1LmNvbScsCiAgICAgICAgJ1VzZXItQWdlbnQnID0+ICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVENocm9tZS81OC4wLjMwMjkuMTEwIFNhZmFyaS81MzcuMzYnLAogICAgICAgICdDb29raWUnID0+ICdjb29raWUgeHh4JwogICAgXQpdKTsKCiRydCA9IEdIdHRwOjpnZXRKc29uKCdodHRwczovL3h4eHguY29tL2pzb24nKTsKCmBgYAoKIyMjIyAyLnBvc3QgLyBwb3N0UmF3IC8gcG9zdEpzb24KYGBgCiRydCA9IEdIdHRwOjpwb3N0KCdodHRwczovL3d3dy5wb3N0dGVzdHNlcnZlci5jb20vcG9zdC5waHAnLFsKICAgICduYW1lJyA9PiAnUXVlcnlMaXN0JywKICAgICdwYXNzd29yZCcgPT4gJ3FsJwpdKTsKCiRydCA9IEdIdHRwOjpwb3N0KCdodHRwczovL3d3dy5wb3N0dGVzdHNlcnZlci5jb20vcG9zdC5waHAnLCduYW1lPVF1ZXJ5TGlzdCZwYXNzd29yZD1xbCcpOwoKCiRydCA9IEdIdHRwOjpwb3N0UmF3KCdodHRwOi8vaHR0cGJpbi5vcmcvcG9zdCcsJ3JhdyBkYXRhJyk7CiRydCA9IEdIdHRwOjpwb3N0UmF3KCdodHRwOi8vaHR0cGJpbi5vcmcvcG9zdCcsWydhYScgPT4gMTEsJ2JiJyA9PiAyMl0pOwoKCiRydCA9IEdIdHRwOjpwb3N0SnNvbignaHR0cDovL2h0dHBiaW4ub3JnL3Bvc3QnLFsnYWEnID0+IDExLCdiYicgPT4gMjJdKTsKJHJ0ID0gR0h0dHA6OnBvc3RKc29uKCdodHRwOi8vaHR0cGJpbi5vcmcvcG9zdCcsJ2FhPTExJmJiPTIyJyk7CgpgYGAKIyMjIyAzLmRvd25sb2FkCgpgYGAKR0h0dHA6OmRvd25sb2FkKCdodHRwOi8vc3cuYm9zLmJhaWR1LmNvbS9zZXR1cC5leGUnLCcuL3BhdGgvdG8veHguZXhlJyk7CmBgYAo=AppDevTools/query/vendor/jaeger/g-http/composer.jsonewogICAgIm5hbWUiOiAiamFlZ2VyL2ctaHR0cCIsCiAgICAiZGVzY3JpcHRpb24iOiAiU2ltcGxlIEh0dHAgY2xpZW50IGJhc2Ugb24gR3V6emxlSHR0cCIsCiAgICAibGljZW5zZSI6ICJNSVQiLAogICAgImF1dGhvcnMiOiBbCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJKYWVnZXIiLAogICAgICAgICAgICAiZW1haWwiOiAiSmFlZ2VyQ29kZUBnbWFpbC5jb20iCiAgICAgICAgfQogICAgXSwKICAgICJyZXF1aXJlIjogewogICAgICAgICJndXp6bGVodHRwL2d1enpsZSI6ICJeNi4yIgogICAgfSwKICAgICJhdXRvbG9hZCI6ewogICAgICAgICJwc3ItNCI6ewogICAgICAgICAgICAiSmFlZ2VyXFwiOiJzcmMiCiAgICAgICAgfQogICAgfQp9Cg==AppDevTools/query/vendor/jaeger/g-http/composer.lockewogICAgIl9yZWFkbWUiOiBbCiAgICAgICAgIlRoaXMgZmlsZSBsb2NrcyB0aGUgZGVwZW5kZW5jaWVzIG9mIHlvdXIgcHJvamVjdCB0byBhIGtub3duIHN0YXRlIiwKICAgICAgICAiUmVhZCBtb3JlIGFib3V0IGl0IGF0IGh0dHBzOi8vZ2V0Y29tcG9zZXIub3JnL2RvYy8wMS1iYXNpYy11c2FnZS5tZCNjb21wb3Nlci1sb2NrLXRoZS1sb2NrLWZpbGUiLAogICAgICAgICJUaGlzIGZpbGUgaXMgQGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IgogICAgXSwKICAgICJoYXNoIjogImFiZTRiMjhjMjdmYTk1NGE1OWRiYmEzNzlkMDAyYjhlIiwKICAgICJjb250ZW50LWhhc2giOiAiZDg3MjU2MGQ2NzBmNmIzNGU0MzlkZWI0Y2VmYWRkM2YiLAogICAgInBhY2thZ2VzIjogWwogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiZ3V6emxlaHR0cC9ndXp6bGUiLAogICAgICAgICAgICAidmVyc2lvbiI6ICI2LjIuMyIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL2d1enpsZS5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICI4ZDZjNmNjNTUxODZkYjg3YjdkYzUwMDk4Mjc0MjliYTRlOWRjMDA2IgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZmlsZXMucGhwY29tcG9zZXIuY29tL2ZpbGVzL2d1enpsZS9ndXp6bGUvOGQ2YzZjYzU1MTg2ZGI4N2I3ZGM1MDA5ODI3NDI5YmE0ZTlkYzAwNi56aXAiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICI4ZDZjNmNjNTUxODZkYjg3YjdkYzUwMDk4Mjc0MjliYTRlOWRjMDA2IiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJndXp6bGVodHRwL3Byb21pc2VzIjogIl4xLjAiLAogICAgICAgICAgICAgICAgImd1enpsZWh0dHAvcHNyNyI6ICJeMS40IiwKICAgICAgICAgICAgICAgICJwaHAiOiAiPj01LjUiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAgICAgICAgICJleHQtY3VybCI6ICIqIiwKICAgICAgICAgICAgICAgICJwaHB1bml0L3BocHVuaXQiOiAiXjQuMCIsCiAgICAgICAgICAgICAgICAicHNyL2xvZyI6ICJeMS4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImV4dHJhIjogewogICAgICAgICAgICAgICAgImJyYW5jaC1hbGlhcyI6IHsKICAgICAgICAgICAgICAgICAgICAiZGV2LW1hc3RlciI6ICI2LjItZGV2IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAiZmlsZXMiOiBbCiAgICAgICAgICAgICAgICAgICAgInNyYy9mdW5jdGlvbnNfaW5jbHVkZS5waHAiCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJHdXp6bGVIdHRwXFwiOiAic3JjLyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJNSVQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIk1pY2hhZWwgRG93bGluZyIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogIm10ZG93bGluZ0BnbWFpbC5jb20iLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vbXRkb3dsaW5nIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiR3V6emxlIGlzIGEgUEhQIEhUVFAgY2xpZW50IGxpYnJhcnkiLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cDovL2d1enpsZXBocC5vcmcvIiwKICAgICAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAgICAgImNsaWVudCIsCiAgICAgICAgICAgICAgICAiY3VybCIsCiAgICAgICAgICAgICAgICAiZnJhbWV3b3JrIiwKICAgICAgICAgICAgICAgICJodHRwIiwKICAgICAgICAgICAgICAgICJodHRwIGNsaWVudCIsCiAgICAgICAgICAgICAgICAicmVzdCIsCiAgICAgICAgICAgICAgICAid2ViIHNlcnZpY2UiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJ0aW1lIjogIjIwMTctMDItMjggMjI6NTA6MzAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogImd1enpsZWh0dHAvcHJvbWlzZXMiLAogICAgICAgICAgICAidmVyc2lvbiI6ICJ2MS4zLjEiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2d1enpsZS9wcm9taXNlcy5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJhNTlkYTZjZjYxZDgwMDYwNjQ3ZmY0ZDNlYjJjMDNhMmJjNjk0NjQ2IgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZmlsZXMucGhwY29tcG9zZXIuY29tL2ZpbGVzL2d1enpsZS9wcm9taXNlcy9hNTlkYTZjZjYxZDgwMDYwNjQ3ZmY0ZDNlYjJjMDNhMmJjNjk0NjQ2LnppcCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogImE1OWRhNmNmNjFkODAwNjA2NDdmZjRkM2ViMmMwM2EyYmM2OTQ2NDYiLAogICAgICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgInBocCI6ICI+PTUuNS4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIl40LjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjEuNC1kZXYiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgICAgICAgICAiR3V6emxlSHR0cFxcUHJvbWlzZVxcIjogInNyYy8iCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgImZpbGVzIjogWwogICAgICAgICAgICAgICAgICAgICJzcmMvZnVuY3Rpb25zX2luY2x1ZGUucGhwIgogICAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIk1JVCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiTWljaGFlbCBEb3dsaW5nIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAibXRkb3dsaW5nQGdtYWlsLmNvbSIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9tdGRvd2xpbmciCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJHdXp6bGUgcHJvbWlzZXMgbGlicmFyeSIsCiAgICAgICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgICAgICJwcm9taXNlIgogICAgICAgICAgICBdLAogICAgICAgICAgICAidGltZSI6ICIyMDE2LTEyLTIwIDEwOjA3OjExIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJndXp6bGVodHRwL3BzcjciLAogICAgICAgICAgICAidmVyc2lvbiI6ICIxLjQuMiIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vZ3V6emxlL3BzcjcuZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiZjViOGE4NTEyZTJiNThiMDA3MWE3MjgwZTM5ZjE0ZjcyZTA1ZDg3YyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2ZpbGVzLnBocGNvbXBvc2VyLmNvbS9maWxlcy9ndXp6bGUvcHNyNy9mNWI4YTg1MTJlMmI1OGIwMDcxYTcyODBlMzlmMTRmNzJlMDVkODdjLnppcCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogImY1YjhhODUxMmUyYjU4YjAwNzFhNzI4MGUzOWYxNGY3MmUwNWQ4N2MiLAogICAgICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgInBocCI6ICI+PTUuNC4wIiwKICAgICAgICAgICAgICAgICJwc3IvaHR0cC1tZXNzYWdlIjogIn4xLjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJwcm92aWRlIjogewogICAgICAgICAgICAgICAgInBzci9odHRwLW1lc3NhZ2UtaW1wbGVtZW50YXRpb24iOiAiMS4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIn40LjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjEuNC1kZXYiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgICAgICAgICAiR3V6emxlSHR0cFxcUHNyN1xcIjogInNyYy8iCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgImZpbGVzIjogWwogICAgICAgICAgICAgICAgICAgICJzcmMvZnVuY3Rpb25zX2luY2x1ZGUucGhwIgogICAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIk1JVCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiTWljaGFlbCBEb3dsaW5nIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAibXRkb3dsaW5nQGdtYWlsLmNvbSIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9tdGRvd2xpbmciCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlRvYmlhcyBTY2h1bHR6ZSIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9Ub2Jpb24iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJQU1ItNyBtZXNzYWdlIGltcGxlbWVudGF0aW9uIHRoYXQgYWxzbyBwcm92aWRlcyBjb21tb24gdXRpbGl0eSBtZXRob2RzIiwKICAgICAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAgICAgImh0dHAiLAogICAgICAgICAgICAgICAgIm1lc3NhZ2UiLAogICAgICAgICAgICAgICAgInJlcXVlc3QiLAogICAgICAgICAgICAgICAgInJlc3BvbnNlIiwKICAgICAgICAgICAgICAgICJzdHJlYW0iLAogICAgICAgICAgICAgICAgInVyaSIsCiAgICAgICAgICAgICAgICAidXJsIgogICAgICAgICAgICBdLAogICAgICAgICAgICAidGltZSI6ICIyMDE3LTAzLTIwIDE3OjEwOjQ2IgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJwc3IvaHR0cC1tZXNzYWdlIiwKICAgICAgICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3BocC1maWcvaHR0cC1tZXNzYWdlLmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogImY2NTYxYmYyOGQ1MjAxNTRlNGIwZWM3MmJlOTU0MThhYmU2ZDkzNjMiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9maWxlcy5waHBjb21wb3Nlci5jb20vZmlsZXMvcGhwLWZpZy9odHRwLW1lc3NhZ2UvZjY1NjFiZjI4ZDUyMDE1NGU0YjBlYzcyYmU5NTQxOGFiZTZkOTM2My56aXAiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJmNjU2MWJmMjhkNTIwMTU0ZTRiMGVjNzJiZTk1NDE4YWJlNmQ5MzYzIiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJwaHAiOiAiPj01LjMuMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgICAgICJleHRyYSI6IHsKICAgICAgICAgICAgICAgICJicmFuY2gtYWxpYXMiOiB7CiAgICAgICAgICAgICAgICAgICAgImRldi1tYXN0ZXIiOiAiMS4wLngtZGV2IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIlBzclxcSHR0cFxcTWVzc2FnZVxcIjogInNyYy8iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiTUlUIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJQSFAtRklHIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cDovL3d3dy5waHAtZmlnLm9yZy8iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJDb21tb24gaW50ZXJmYWNlIGZvciBIVFRQIG1lc3NhZ2VzIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9waHAtZmlnL2h0dHAtbWVzc2FnZSIsCiAgICAgICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgICAgICJodHRwIiwKICAgICAgICAgICAgICAgICJodHRwLW1lc3NhZ2UiLAogICAgICAgICAgICAgICAgInBzciIsCiAgICAgICAgICAgICAgICAicHNyLTciLAogICAgICAgICAgICAgICAgInJlcXVlc3QiLAogICAgICAgICAgICAgICAgInJlc3BvbnNlIgogICAgICAgICAgICBdLAogICAgICAgICAgICAidGltZSI6ICIyMDE2LTA4LTA2IDE0OjM5OjUxIgogICAgICAgIH0KICAgIF0sCiAgICAicGFja2FnZXMtZGV2IjogW10sCiAgICAiYWxpYXNlcyI6IFtdLAogICAgIm1pbmltdW0tc3RhYmlsaXR5IjogInN0YWJsZSIsCiAgICAic3RhYmlsaXR5LWZsYWdzIjogW10sCiAgICAicHJlZmVyLXN0YWJsZSI6IGZhbHNlLAogICAgInByZWZlci1sb3dlc3QiOiBmYWxzZSwKICAgICJwbGF0Zm9ybSI6IFtdLAogICAgInBsYXRmb3JtLWRldiI6IFtdCn0KAppDevTools/query/vendor/jaeger/g-http/src/GHttp.phpPD9waHANCg0KLyoqDQogKiDln7rkuo5HdXp6bGVIdHRw55qE566A5Y2V54mISHR0cOWuouaIt+err+OAgiBTaW1wbGUgSHR0cCBjbGllbnQgYmFzZSBvbiBHdXp6bGVIdHRwDQogKg0KICogQEF1dGhvcjogSmFlZ2VyIDxKYWVnZXJDb2RlQGdtYWlsLmNvbT4NCiAqDQogKiBAVmVyc2lvbiBWMS4wDQogKi8NCg0KbmFtZXNwYWNlIEphZWdlcjsNCg0KdXNlIEd1enpsZUh0dHBcQ2xpZW50Ow0KDQpjbGFzcyBHSHR0cA0Kew0KICAgIHByaXZhdGUgc3RhdGljICRjbGllbnQgPSBudWxsOw0KDQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRDbGllbnQoYXJyYXkgJGNvbmZpZyA9IFtdKQ0KICAgIHsNCiAgICAgICAgaWYoc2VsZjo6JGNsaWVudCA9PSBudWxsKXsNCiAgICAgICAgICAgIHNlbGY6OiRjbGllbnQgPSBuZXcgQ2xpZW50KCRjb25maWcpOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiBzZWxmOjokY2xpZW50Ow0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEBwYXJhbSAkdXJsDQogICAgICogQHBhcmFtIGFycmF5ICRhcmdzDQogICAgICogQHBhcmFtIGFycmF5ICRvdGhlckFyZ3MNCiAgICAgKiBAcmV0dXJuIHN0cmluZw0KICAgICAqLw0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0KCR1cmwsJGFyZ3MgPSBudWxsLCRvdGhlckFyZ3MgPSBbXSkNCiAgICB7DQogICAgICAgIGlzX3N0cmluZygkYXJncykgJiYgcGFyc2Vfc3RyKCRhcmdzLCRhcmdzKTsNCiAgICAgICAgJGFyZ3MgPSBhcnJheV9tZXJnZShbDQogICAgICAgICAgICAndmVyaWZ5JyA9PiBmYWxzZSwNCiAgICAgICAgICAgICdxdWVyeScgPT4gJGFyZ3MsDQogICAgICAgICAgICAnaGVhZGVycycgPT4gWw0KICAgICAgICAgICAgICAgICdyZWZlcmVyJyA9PiAkdXJsLA0KICAgICAgICAgICAgICAgICdVc2VyLUFnZW50JyA9PiAnTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzU4LjAuMzAyOS4xMTAgU2FmYXJpLzUzNy4zNicNCiAgICAgICAgICAgIF0NCiAgICAgICAgXSwkb3RoZXJBcmdzKTsNCiAgICAgICAgJGNsaWVudCA9IHNlbGY6OmdldENsaWVudCgpOw0KICAgICAgICAkcmVzcG9uc2UgPSAkY2xpZW50LT5yZXF1ZXN0KCdHRVQnLCAkdXJsLCRhcmdzKTsNCiAgICAgICAgcmV0dXJuIChzdHJpbmcpJHJlc3BvbnNlLT5nZXRCb2R5KCk7DQogICAgfQ0KDQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRKc29uKCR1cmwsICRhcmdzID0gbnVsbCwgJG90aGVyQXJncyA9IFtdKQ0KICAgIHsNCiAgICAgICAgJGRhdGEgPSBzZWxmOjpnZXQoJHVybCwgJGFyZ3MgLCAkb3RoZXJBcmdzKTsNCiAgICAgICAgcmV0dXJuIGpzb25fZGVjb2RlKCRkYXRhLEpTT05fVU5FU0NBUEVEX1VOSUNPREUpOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEBwYXJhbSAkdXJsDQogICAgICogQHBhcmFtIGFycmF5ICRhcmdzDQogICAgICogQHBhcmFtIGFycmF5ICRvdGhlckFyZ3MNCiAgICAgKiBAcmV0dXJuIHN0cmluZw0KICAgICAqLw0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcG9zdCgkdXJsLCRhcmdzID0gbnVsbCwkb3RoZXJBcmdzID0gW10pDQogICAgew0KICAgICAgICBpc19zdHJpbmcoJGFyZ3MpICYmIHBhcnNlX3N0cigkYXJncywkYXJncyk7DQogICAgICAgICRhcmdzID0gYXJyYXlfbWVyZ2UoWw0KICAgICAgICAgICAgJ3ZlcmlmeScgPT4gZmFsc2UsDQogICAgICAgICAgICAnZm9ybV9wYXJhbXMnID0+ICRhcmdzLA0KICAgICAgICAgICAgJ2hlYWRlcnMnID0+IFsNCiAgICAgICAgICAgICAgICAncmVmZXJlcicgPT4gJHVybCwNCiAgICAgICAgICAgICAgICAnVXNlci1BZ2VudCcgPT4gJ01vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS81OC4wLjMwMjkuMTEwIFNhZmFyaS81MzcuMzYnDQogICAgICAgICAgICBdDQogICAgICAgIF0sJG90aGVyQXJncyk7DQogICAgICAgICRjbGllbnQgPSBzZWxmOjpnZXRDbGllbnQoKTsNCiAgICAgICAgJHJlc3BvbnNlID0gJGNsaWVudC0+cmVxdWVzdCgnUG9zdCcsICR1cmwsJGFyZ3MpOw0KICAgICAgICByZXR1cm4gKHN0cmluZykkcmVzcG9uc2UtPmdldEJvZHkoKTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBAcGFyYW0gJHVybA0KICAgICAqIEBwYXJhbSBudWxsICRyYXcNCiAgICAgKiBAcGFyYW0gYXJyYXkgJG90aGVyQXJncw0KICAgICAqIEByZXR1cm4gc3RyaW5nDQogICAgICovDQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwb3N0UmF3KCR1cmwsICRyYXcgPSBudWxsLCAkb3RoZXJBcmdzID0gW10pDQogICAgew0KICAgICAgICBpc19hcnJheSgkcmF3KSAmJiAkcmF3ID0ganNvbl9lbmNvZGUoJHJhdyk7DQogICAgICAgICRhcmdzID0gYXJyYXlfbWVyZ2UoWw0KICAgICAgICAgICAgJ3ZlcmlmeScgPT4gZmFsc2UsDQogICAgICAgICAgICAnYm9keScgPT4gJHJhdywNCiAgICAgICAgICAgICdoZWFkZXJzJyA9PiBbDQogICAgICAgICAgICAgICAgJ3JlZmVyZXInID0+ICR1cmwsDQogICAgICAgICAgICAgICAgJ1VzZXItQWdlbnQnID0+ICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvNTguMC4zMDI5LjExMCBTYWZhcmkvNTM3LjM2Jw0KICAgICAgICAgICAgXQ0KICAgICAgICBdLCRvdGhlckFyZ3MpOw0KICAgICAgICAkY2xpZW50ID0gc2VsZjo6Z2V0Q2xpZW50KCk7DQogICAgICAgICRyZXNwb25zZSA9ICRjbGllbnQtPnJlcXVlc3QoJ1Bvc3QnLCAkdXJsLCRhcmdzKTsNCiAgICAgICAgcmV0dXJuIChzdHJpbmcpJHJlc3BvbnNlLT5nZXRCb2R5KCk7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogQHBhcmFtICR1cmwNCiAgICAgKiBAcGFyYW0gbnVsbCAkYXJncw0KICAgICAqIEBwYXJhbSBhcnJheSAkb3RoZXJBcmdzDQogICAgICogQHJldHVybiBzdHJpbmcNCiAgICAgKi8NCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHBvc3RKc29uKCR1cmwsICRhcmdzID0gbnVsbCwgJG90aGVyQXJncyA9IFtdKQ0KICAgIHsNCiAgICAgICAgaXNfc3RyaW5nKCRhcmdzKSAmJiBwYXJzZV9zdHIoJGFyZ3MsJGFyZ3MpOw0KICAgICAgICAkYXJncyA9IGFycmF5X21lcmdlKFsNCiAgICAgICAgICAgICd2ZXJpZnknID0+IGZhbHNlLA0KICAgICAgICAgICAgJ2pzb24nID0+ICRhcmdzLA0KICAgICAgICAgICAgJ2hlYWRlcnMnID0+IFsNCiAgICAgICAgICAgICAgICAncmVmZXJlcicgPT4gJHVybCwNCiAgICAgICAgICAgICAgICAnVXNlci1BZ2VudCcgPT4gJ01vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS81OC4wLjMwMjkuMTEwIFNhZmFyaS81MzcuMzYnDQogICAgICAgICAgICBdDQogICAgICAgIF0sJG90aGVyQXJncyk7DQogICAgICAgICRjbGllbnQgPSBzZWxmOjpnZXRDbGllbnQoKTsNCiAgICAgICAgJHJlc3BvbnNlID0gJGNsaWVudC0+cmVxdWVzdCgnUG9zdCcsICR1cmwsJGFyZ3MpOw0KICAgICAgICByZXR1cm4gKHN0cmluZykkcmVzcG9uc2UtPmdldEJvZHkoKTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBAcGFyYW0gJHVybA0KICAgICAqIEBwYXJhbSAkZmlsZVBhdGgNCiAgICAgKiBAcGFyYW0gbnVsbCAkYXJncw0KICAgICAqIEBwYXJhbSBhcnJheSAkb3RoZXJBcmdzDQogICAgICogQHJldHVybiBzdHJpbmcNCiAgICAgKi8NCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGRvd25sb2FkKCR1cmwsJGZpbGVQYXRoLCRhcmdzID0gbnVsbCwkb3RoZXJBcmdzID0gW10pDQogICAgew0KICAgICAgICAkb3RoZXJBcmdzID0gYXJyYXlfbWVyZ2UoJG90aGVyQXJncyxbDQogICAgICAgICAgICAnc2luaycgPT4gJGZpbGVQYXRoLA0KICAgICAgICBdKTsNCiAgICAgICAgcmV0dXJuIHNlbGY6OmdldCgkdXJsLCRhcmdzLCRvdGhlckFyZ3MpOw0KICAgIH0NCn0=AppDevTools/query/vendor/jaeger/phpquery-single/README.mdIyBwaHBRdWVyeS1zaW5nbGUKcGhwUXVlcnkgb25lZmlsZSBjb21wb3Nlci5Db250aW51b3VzIG1haW50ZW5hbmNlLFdlbGNvbWUgUFIuCgpgUXVlcnlMaXN0YCBiYXNlIG9uIHBocFF1ZXJ5OiBodHRwczovL2dpdGh1Yi5jb20vamFlLWphZS9RdWVyeUxpc3QKCnBocFF1ZXJ55Y2V5paH5Lu254mI5pysLOaMgee7ree7tOaKpO+8jOasoui/jlBSLgo+IHBocFF1ZXJ56aG555uu5Li76aG1Omh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9waHBxdWVyeS8KCmBRdWVyeUxpc3Rg5piv5Z+65LqOcGhwUXVlcnnnmoTph4fpm4blt6Xlhbc6IGh0dHBzOi8vZ2l0aHViLmNvbS9qYWUtamFlL1F1ZXJ5TGlzdAoKIyMgQ29tcG9zZXIgSW5zdGFsbGF0aW9uClBhY2thZ2lzdDogaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL3BhY2thZ2VzL2phZWdlci9waHBxdWVyeS1zaW5nbGUKYGBgCmNvbXBvc2VyIHJlcXVpcmUgamFlZ2VyL3BocHF1ZXJ5LXNpbmdsZQpgYGAKCiMjIFVzYWdlCmBgYHBocAokaHRtbCA9IDw8PFNUUgo8ZGl2IGlkPSJvbmUiPgogICAgPGRpdiBjbGFzcz0idHdvIj4KICAgICAgICA8YSBocmVmPSJodHRwOi8vcXVlcnlsaXN0LmNjIj5RdWVyeUxpc3TlrpjnvZE8L2E+CiAgICAgICAgPGltZyBzcmM9Imh0dHA6Ly9xdWVyeWxpc3QuY2MvMS5qcGciIGFsdD0i6L+Z5piv5Zu+54mHIj4KICAgICAgICA8aW1nIHNyYz0iaHR0cDovL3F1ZXJ5bGlzdC5jYy8yLmpwZyIgYWx0PSLov5nmmK/lm77niYcyIj4KICAgIDwvZGl2PgogICAgPHNwYW4+5YW25a6D55qEPGI+5LiA5LqbPC9iPuaWh+acrDwvc3Bhbj4KPC9kaXY+ICAgICAgICAKU1RSOwoKJGRvYyA9IHBocFF1ZXJ5OjpuZXdEb2N1bWVudEhUTUwoJGh0bWwpOwoKJHNyYyA9ICRkb2MtPmZpbmQoJy50d28gaW1nOmVxKDApJyktPmF0dHIoJ3NyYycpOwoKZWNobyAkc3JjOwovLyBodHRwOi8vcXVlcnlsaXN0LmNjLzEuanBnCmBgYA==AppDevTools/query/vendor/jaeger/phpquery-single/composer.jsonewogICAgIm5hbWUiOiAiamFlZ2VyL3BocHF1ZXJ5LXNpbmdsZSIsCiAgICAiZGVzY3JpcHRpb24iOiAicGhwUXVlcnnljZXmlofku7bniYjmnKzvvIzmmK9RdWVyeWxpc3TnmoTkvp3otZYoaHR0cDovL3F1ZXJ5bGlzdC5jYy8p77yMcGhwUXVlcnnpobnnm67kuLvpobU6aHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3BocHF1ZXJ5LyIsCiAgICAiaG9tZXBhZ2UiOiAiaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3BocHF1ZXJ5LyIsCiAgICAibGljZW5zZSI6ICJNSVQiLAogICAgInJlcXVpcmUiOiB7CiAgICAJIlBIUCI6Ij49NS4zLjAiCiAgICB9LAogICAgImF1dGhvcnMiOiBbCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJUb2JpYXN6IEN1ZG5payIKICAgICAgICAgICAgLCJlbWFpbCI6ICJ0b2JpYXN6LmN1ZG5pa0BnbWFpbC5jb20iCiAgICAgICAgICAgICwiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL1RvYmlhc3pDdWRuaWsiCiAgICAgICAgICAgICwicm9sZSI6ICJEZXZlbG9wZXIiCiAgICAgICAgfSAKICAgICAgICAsewogICAgICAgICAgICAibmFtZSI6ICJKYWVnZXIiLAogICAgICAgICAgICAicm9sZSI6ICJQYWNrYWdlciIKICAgICAgICB9CiAgICBdLAogICAgImF1dG9sb2FkIjp7CiAgICAgICAgImNsYXNzbWFwIjpbInBocFF1ZXJ5LnBocCJdCiAgICB9Cn0KAppDevTools/query/vendor/jaeger/phpquery-single/phpQuery.phpPD9waHAKLyoqCiAqIHBocFF1ZXJ5IGlzIGEgc2VydmVyLXNpZGUsIGNoYWluYWJsZSwgQ1NTMyBzZWxlY3RvciBkcml2ZW4KICogRG9jdW1lbnQgT2JqZWN0IE1vZGVsIChET00pIEFQSSBiYXNlZCBvbiBqUXVlcnkgSmF2YVNjcmlwdCBMaWJyYXJ5LgogKgogKiBAdmVyc2lvbiAwLjkuOQogKiBAbGluayBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvcGhwcXVlcnkvCiAqIEBsaW5rIGh0dHA6Ly9waHBxdWVyeS1saWJyYXJ5LmJsb2dzcG90LmNvbS8KICogQGxpbmsgaHR0cDovL2pxdWVyeS5jb20vCiAqIEBhdXRob3IgVG9iaWFzeiBDdWRuaWsgPHRvYmlhc3ouY3VkbmlrL2dtYWlsLmNvbT4KICogQGxpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHAgTUlUIExpY2Vuc2UKICogQHBhY2thZ2UgcGhwUXVlcnkKICovCgovLyBjbGFzcyBuYW1lcyBmb3IgaW5zdGFuY2VvZgovLyBUT0RPIG1vdmUgdGhlbSBhcyBjbGFzcyBjb25zdGFudHMgaW50byBwaHBRdWVyeQpkZWZpbmUoJ0RPTURPQ1VNRU5UJywgJ0RPTURvY3VtZW50Jyk7CmRlZmluZSgnRE9NRUxFTUVOVCcsICdET01FbGVtZW50Jyk7CmRlZmluZSgnRE9NTk9ERUxJU1QnLCAnRE9NTm9kZUxpc3QnKTsKZGVmaW5lKCdET01OT0RFJywgJ0RPTU5vZGUnKTsKCi8qKgogKiBET01FdmVudCBjbGFzcy4KICoKICogQmFzZWQgb24KICogQGxpbmsgaHR0cDovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9Fbi9ET006ZXZlbnQKICogQGF1dGhvciBUb2JpYXN6IEN1ZG5payA8dG9iaWFzei5jdWRuaWsvZ21haWwuY29tPgogKiBAcGFja2FnZSBwaHBRdWVyeQogKiBAdG9kbyBpbXBsZW1lbnQgQXJyYXlBY2Nlc3MgPwogKi8KY2xhc3MgRE9NRXZlbnQgewoJLyoqCgkgKiBSZXR1cm5zIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGV2ZW50IGJ1YmJsZXMgdXAgdGhyb3VnaCB0aGUgRE9NIG9yIG5vdC4KCSAqCgkgKiBAdmFyIHVua25vd25fdHlwZQoJICovCglwdWJsaWMgJGJ1YmJsZXMgPSB0cnVlOwoJLyoqCgkgKiBSZXR1cm5zIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGV2ZW50IGlzIGNhbmNlbGFibGUuCgkgKgoJICogQHZhciB1bmtub3duX3R5cGUKCSAqLwoJcHVibGljICRjYW5jZWxhYmxlID0gdHJ1ZTsKCS8qKgoJICogUmV0dXJucyBhIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudGx5IHJlZ2lzdGVyZWQgdGFyZ2V0IGZvciB0aGUgZXZlbnQuCgkgKgoJICogQHZhciB1bmtub3duX3R5cGUKCSAqLwoJcHVibGljICRjdXJyZW50VGFyZ2V0OwoJLyoqCgkgKiBSZXR1cm5zIGRldGFpbCBhYm91dCB0aGUgZXZlbnQsIGRlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBldmVudC4KCSAqCgkgKiBAdmFyIHVua25vd25fdHlwZQoJICogQGxpbmsgaHR0cDovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi9ET00vZXZlbnQuZGV0YWlsCgkgKi8KCXB1YmxpYyAkZGV0YWlsOwkvLyA/Pz8KCS8qKgoJICogVXNlZCB0byBpbmRpY2F0ZSB3aGljaCBwaGFzZSBvZiB0aGUgZXZlbnQgZmxvdyBpcyBjdXJyZW50bHkgYmVpbmcgZXZhbHVhdGVkLgoJICoKCSAqIE5PVCBJTVBMRU1FTlRFRAoJICoKCSAqIEB2YXIgdW5rbm93bl90eXBlCgkgKiBAbGluayBodHRwOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuL0RPTS9ldmVudC5ldmVudFBoYXNlCgkgKi8KCXB1YmxpYyAkZXZlbnRQaGFzZTsJLy8gPz8/CgkvKioKCSAqIFRoZSBleHBsaWNpdCBvcmlnaW5hbCB0YXJnZXQgb2YgdGhlIGV2ZW50IChNb3ppbGxhLXNwZWNpZmljKS4KCSAqCgkgKiBOT1QgSU1QTEVNRU5URUQKCSAqCgkgKiBAdmFyIHVua25vd25fdHlwZQoJICovCglwdWJsaWMgJGV4cGxpY2l0T3JpZ2luYWxUYXJnZXQ7IC8vIG1veiBvbmx5CgkvKioKCSAqIFRoZSBvcmlnaW5hbCB0YXJnZXQgb2YgdGhlIGV2ZW50LCBiZWZvcmUgYW55IHJldGFyZ2V0aW5ncyAoTW96aWxsYS1zcGVjaWZpYykuCgkgKgoJICogTk9UIElNUExFTUVOVEVECgkgKgoJICogQHZhciB1bmtub3duX3R5cGUKCSAqLwoJcHVibGljICRvcmlnaW5hbFRhcmdldDsJLy8gbW96IG9ubHkKCS8qKgoJICogSWRlbnRpZmllcyBhIHNlY29uZGFyeSB0YXJnZXQgZm9yIHRoZSBldmVudC4KCSAqCgkgKiBAdmFyIHVua25vd25fdHlwZQoJICovCglwdWJsaWMgJHJlbGF0ZWRUYXJnZXQ7CgkvKioKCSAqIFJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIHRhcmdldCB0byB3aGljaCB0aGUgZXZlbnQgd2FzIG9yaWdpbmFsbHkgZGlzcGF0Y2hlZC4KCSAqCgkgKiBAdmFyIHVua25vd25fdHlwZQoJICovCglwdWJsaWMgJHRhcmdldDsKCS8qKgoJICogUmV0dXJucyB0aGUgdGltZSB0aGF0IHRoZSBldmVudCB3YXMgY3JlYXRlZC4KCSAqCgkgKiBAdmFyIHVua25vd25fdHlwZQoJICovCglwdWJsaWMgJHRpbWVTdGFtcDsKCS8qKgoJICogUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgZXZlbnQgKGNhc2UtaW5zZW5zaXRpdmUpLgoJICovCglwdWJsaWMgJHR5cGU7CglwdWJsaWMgJHJ1bkRlZmF1bHQgPSB0cnVlOwoJcHVibGljICRkYXRhID0gbnVsbDsKCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkZGF0YSkgewoJCWZvcmVhY2goJGRhdGEgYXMgJGsgPT4gJHYpIHsKCQkJJHRoaXMtPiRrID0gJHY7CgkJfQoJCWlmICghICR0aGlzLT50aW1lU3RhbXApCgkJCSR0aGlzLT50aW1lU3RhbXAgPSB0aW1lKCk7Cgl9CgkvKioKCSAqIENhbmNlbHMgdGhlIGV2ZW50IChpZiBpdCBpcyBjYW5jZWxhYmxlKS4KCSAqCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBwcmV2ZW50RGVmYXVsdCgpIHsKCQkkdGhpcy0+cnVuRGVmYXVsdCA9IGZhbHNlOwoJfQoJLyoqCgkgKiBTdG9wcyB0aGUgcHJvcGFnYXRpb24gb2YgZXZlbnRzIGZ1cnRoZXIgYWxvbmcgaW4gdGhlIERPTS4KCSAqCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzdG9wUHJvcGFnYXRpb24oKSB7CgkJJHRoaXMtPmJ1YmJsZXMgPSBmYWxzZTsKCX0KfQoKCi8qKgogKiBET01Eb2N1bWVudFdyYXBwZXIgY2xhc3Mgc2ltcGxpZmllcyB3b3JrIHdpdGggRE9NRG9jdW1lbnQuCiAqCiAqIEtub3cgYnVnOgogKiAtIGluIFhIVE1MIGZyYWdtZW50cywgPGJyIC8+IGNoYW5nZXMgdG8gPGJyIGNsZWFyPSJub25lIiAvPgogKgogKiBAdG9kbyBjaGVjayBYTUwgY2F0YWxvZ3MgY29tcGF0aWJpbGl0eQogKiBAYXV0aG9yIFRvYmlhc3ogQ3VkbmlrIDx0b2JpYXN6LmN1ZG5pay9nbWFpbC5jb20+CiAqIEBwYWNrYWdlIHBocFF1ZXJ5CiAqLwpjbGFzcyBET01Eb2N1bWVudFdyYXBwZXIgewoJLyoqCgkgKiBAdmFyIERPTURvY3VtZW50CgkgKi8KCXB1YmxpYyAkZG9jdW1lbnQ7CglwdWJsaWMgJGlkOwoJLyoqCgkgKiBAdG9kbyBSZXdyaXRlIGFzIG1ldGhvZCBhbmQgcXVlc3MgaWYgbnVsbC4KCSAqIEB2YXIgdW5rbm93bl90eXBlCgkgKi8KCXB1YmxpYyAkY29udGVudFR5cGUgPSAnJzsKCXB1YmxpYyAkeHBhdGg7CglwdWJsaWMgJHV1aWQgPSAwOwoJcHVibGljICRkYXRhID0gYXJyYXkoKTsKCXB1YmxpYyAkZGF0YU5vZGVzID0gYXJyYXkoKTsKCXB1YmxpYyAkZXZlbnRzID0gYXJyYXkoKTsKCXB1YmxpYyAkZXZlbnRzTm9kZXMgPSBhcnJheSgpOwoJcHVibGljICRldmVudHNHbG9iYWwgPSBhcnJheSgpOwoJLyoqCgkgKiBAVE9ETyBpZnJhbWVzIHN1cHBvcnQgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3BocHF1ZXJ5L2lzc3Vlcy9kZXRhaWw/aWQ9MjgKCSAqIEB2YXIgdW5rbm93bl90eXBlCgkgKi8KCXB1YmxpYyAkZnJhbWVzID0gYXJyYXkoKTsKCS8qKgoJICogRG9jdW1lbnQgcm9vdCwgYnkgZGVmYXVsdCBlcXVhbHMgdG8gZG9jdW1lbnQgaXRzZWxmLgoJICogVXNlZCBieSBkb2N1bWVudEZyYWdtZW50cy4KCSAqCgkgKiBAdmFyIERPTU5vZGUKCSAqLwoJcHVibGljICRyb290OwoJcHVibGljICRpc0RvY3VtZW50RnJhZ21lbnQ7CglwdWJsaWMgJGlzWE1MID0gZmFsc2U7CglwdWJsaWMgJGlzWEhUTUwgPSBmYWxzZTsKCXB1YmxpYyAkaXNIVE1MID0gZmFsc2U7CglwdWJsaWMgJGNoYXJzZXQ7CglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJG1hcmt1cCA9IG51bGwsICRjb250ZW50VHlwZSA9IG51bGwsICRuZXdEb2N1bWVudElEID0gbnVsbCkgewoJCWlmIChpc3NldCgkbWFya3VwKSkKCQkJJHRoaXMtPmxvYWQoJG1hcmt1cCwgJGNvbnRlbnRUeXBlLCAkbmV3RG9jdW1lbnRJRCk7CgkJJHRoaXMtPmlkID0gJG5ld0RvY3VtZW50SUQKCQkJPyAkbmV3RG9jdW1lbnRJRAoJCQk6IG1kNShtaWNyb3RpbWUoKSk7Cgl9CglwdWJsaWMgZnVuY3Rpb24gbG9hZCgkbWFya3VwLCAkY29udGVudFR5cGUgPSBudWxsLCAkbmV3RG9jdW1lbnRJRCA9IG51bGwpIHsKLy8JCXBocFF1ZXJ5OjokZG9jdW1lbnRzWyRpZF0gPSAkdGhpczsKCQkkdGhpcy0+Y29udGVudFR5cGUgPSBzdHJ0b2xvd2VyKCRjb250ZW50VHlwZSk7CgkJaWYgKCRtYXJrdXAgaW5zdGFuY2VvZiBET01ET0NVTUVOVCkgewoJCQkkdGhpcy0+ZG9jdW1lbnQgPSAkbWFya3VwOwoJCQkkdGhpcy0+cm9vdCA9ICR0aGlzLT5kb2N1bWVudDsKCQkJJHRoaXMtPmNoYXJzZXQgPSAkdGhpcy0+ZG9jdW1lbnQtPmVuY29kaW5nOwoJCQkvLyBUT0RPIGlzRG9jdW1lbnRGcmFnbWVudAoJCQkkbG9hZGVkID0gdHJ1ZTsKCQl9IGVsc2UgewoJCQkkbG9hZGVkID0gJHRoaXMtPmxvYWRNYXJrdXAoJG1hcmt1cCk7CgkJfQoJCWlmICgkbG9hZGVkKSB7Ci8vCQkJJHRoaXMtPmRvY3VtZW50LT5mb3JtYXRPdXRwdXQgPSB0cnVlOwoJCQkkdGhpcy0+ZG9jdW1lbnQtPnByZXNlcnZlV2hpdGVTcGFjZSA9IHRydWU7CgkJCSR0aGlzLT54cGF0aCA9IG5ldyBET01YUGF0aCgkdGhpcy0+ZG9jdW1lbnQpOwoJCQkkdGhpcy0+YWZ0ZXJNYXJrdXBMb2FkKCk7CgkJCXJldHVybiB0cnVlOwoJCQkvLyByZW1lbWJlciBsYXN0IGxvYWRlZCBkb2N1bWVudAovLwkJCXJldHVybiBwaHBRdWVyeTo6c2VsZWN0RG9jdW1lbnQoJGlkKTsKCQl9CgkJcmV0dXJuIGZhbHNlOwoJfQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGFmdGVyTWFya3VwTG9hZCgpIHsKCQlpZiAoJHRoaXMtPmlzWEhUTUwpIHsKCQkJJHRoaXMtPnhwYXRoLT5yZWdpc3Rlck5hbWVzcGFjZSgiaHRtbCIsICJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIik7CgkJfQoJfQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGxvYWRNYXJrdXAoJG1hcmt1cCkgewoJCSRsb2FkZWQgPSBmYWxzZTsKCQlpZiAoJHRoaXMtPmNvbnRlbnRUeXBlKSB7CgkJCXNlbGY6OmRlYnVnKCJMb2FkIG1hcmt1cCBmb3IgY29udGVudCB0eXBlIHskdGhpcy0+Y29udGVudFR5cGV9Iik7CgkJCS8vIGNvbnRlbnQgZGV0ZXJtaW5lZCBieSBjb250ZW50VHlwZQoJCQlsaXN0KCRjb250ZW50VHlwZSwgJGNoYXJzZXQpID0gJHRoaXMtPmNvbnRlbnRUeXBlVG9BcnJheSgkdGhpcy0+Y29udGVudFR5cGUpOwoJCQlzd2l0Y2goJGNvbnRlbnRUeXBlKSB7CgkJCQljYXNlICd0ZXh0L2h0bWwnOgoJCQkJCXBocFF1ZXJ5OjpkZWJ1ZygiTG9hZGluZyBIVE1MLCBjb250ZW50IHR5cGUgJ3skdGhpcy0+Y29udGVudFR5cGV9JyIpOwoJCQkJCSRsb2FkZWQgPSAkdGhpcy0+bG9hZE1hcmt1cEhUTUwoJG1hcmt1cCwgJGNoYXJzZXQpOwoJCQkJYnJlYWs7CgkJCQljYXNlICd0ZXh0L3htbCc6CgkJCQljYXNlICdhcHBsaWNhdGlvbi94aHRtbCt4bWwnOgoJCQkJCXBocFF1ZXJ5OjpkZWJ1ZygiTG9hZGluZyBYTUwsIGNvbnRlbnQgdHlwZSAneyR0aGlzLT5jb250ZW50VHlwZX0nIik7CgkJCQkJJGxvYWRlZCA9ICR0aGlzLT5sb2FkTWFya3VwWE1MKCRtYXJrdXAsICRjaGFyc2V0KTsKCQkJCWJyZWFrOwoJCQkJZGVmYXVsdDoKCQkJCQkvLyBmb3IgZmVlZHMgb3IgYW55dGhpbmcgdGhhdCBzb21ldGltZXMgZG9lc24ndCB1c2UgdGV4dC94bWwKCQkJCQlpZiAoc3RycG9zKCd4bWwnLCAkdGhpcy0+Y29udGVudFR5cGUpICE9PSBmYWxzZSkgewoJCQkJCQlwaHBRdWVyeTo6ZGVidWcoIkxvYWRpbmcgWE1MLCBjb250ZW50IHR5cGUgJ3skdGhpcy0+Y29udGVudFR5cGV9JyIpOwoJCQkJCQkkbG9hZGVkID0gJHRoaXMtPmxvYWRNYXJrdXBYTUwoJG1hcmt1cCwgJGNoYXJzZXQpOwoJCQkJCX0gZWxzZQoJCQkJCQlwaHBRdWVyeTo6ZGVidWcoIkNvdWxkIG5vdCBkZXRlcm1pbmUgZG9jdW1lbnQgdHlwZSBmcm9tIGNvbnRlbnQgdHlwZSAneyR0aGlzLT5jb250ZW50VHlwZX0nIik7CgkJCX0KCQl9IGVsc2UgewoJCQkvLyBjb250ZW50IHR5cGUgYXV0b2RldGVjdGlvbgoJCQlpZiAoJHRoaXMtPmlzWE1MKCRtYXJrdXApKSB7CgkJCQlwaHBRdWVyeTo6ZGVidWcoIkxvYWRpbmcgWE1MLCBpc1hNTCgpID09IHRydWUiKTsKCQkJCSRsb2FkZWQgPSAkdGhpcy0+bG9hZE1hcmt1cFhNTCgkbWFya3VwKTsKCQkJCWlmICghICRsb2FkZWQgJiYgJHRoaXMtPmlzWEhUTUwpIHsKCQkJCQlwaHBRdWVyeTo6ZGVidWcoJ0xvYWRpbmcgYXMgWE1MIGZhaWxlZCwgdHJ5aW5nIHRvIGxvYWQgYXMgSFRNTCwgaXNYSFRNTCA9PSB0cnVlJyk7CgkJCQkJJGxvYWRlZCA9ICR0aGlzLT5sb2FkTWFya3VwSFRNTCgkbWFya3VwKTsKCQkJCX0KCQkJfSBlbHNlIHsKCQkJCXBocFF1ZXJ5OjpkZWJ1ZygiTG9hZGluZyBIVE1MLCBpc1hNTCgpID09IGZhbHNlIik7CgkJCQkkbG9hZGVkID0gJHRoaXMtPmxvYWRNYXJrdXBIVE1MKCRtYXJrdXApOwoJCQl9CgkJfQoJCXJldHVybiAkbG9hZGVkOwoJfQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGxvYWRNYXJrdXBSZXNldCgpIHsKCQkkdGhpcy0+aXNYTUwgPSAkdGhpcy0+aXNYSFRNTCA9ICR0aGlzLT5pc0hUTUwgPSBmYWxzZTsKCX0KCXByb3RlY3RlZCBmdW5jdGlvbiBkb2N1bWVudENyZWF0ZSgkY2hhcnNldCwgJHZlcnNpb24gPSAnMS4wJykgewoJCWlmICghICR2ZXJzaW9uKQoJCQkkdmVyc2lvbiA9ICcxLjAnOwoJCSR0aGlzLT5kb2N1bWVudCA9IG5ldyBET01Eb2N1bWVudCgkdmVyc2lvbiwgJGNoYXJzZXQpOwoJCSR0aGlzLT5jaGFyc2V0ID0gJHRoaXMtPmRvY3VtZW50LT5lbmNvZGluZzsKLy8JCSR0aGlzLT5kb2N1bWVudC0+ZW5jb2RpbmcgPSAkY2hhcnNldDsKCQkkdGhpcy0+ZG9jdW1lbnQtPmZvcm1hdE91dHB1dCA9IHRydWU7CgkJJHRoaXMtPmRvY3VtZW50LT5wcmVzZXJ2ZVdoaXRlU3BhY2UgPSB0cnVlOwoJfQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGxvYWRNYXJrdXBIVE1MKCRtYXJrdXAsICRyZXF1ZXN0ZWRDaGFyc2V0ID0gbnVsbCkgewoJCWlmIChwaHBRdWVyeTo6JGRlYnVnKQoJCQlwaHBRdWVyeTo6ZGVidWcoJ0Z1bGwgbWFya3VwIGxvYWQgKEhUTUwpOiAnLnN1YnN0cigkbWFya3VwLCAwLCAyNTApKTsKCQkkdGhpcy0+bG9hZE1hcmt1cFJlc2V0KCk7CgkJJHRoaXMtPmlzSFRNTCA9IHRydWU7CgkJaWYgKCFpc3NldCgkdGhpcy0+aXNEb2N1bWVudEZyYWdtZW50KSkKCQkJJHRoaXMtPmlzRG9jdW1lbnRGcmFnbWVudCA9IHNlbGY6OmlzRG9jdW1lbnRGcmFnbWVudEhUTUwoJG1hcmt1cCk7CgkJJGNoYXJzZXQgPSBudWxsOwoJCSRkb2N1bWVudENoYXJzZXQgPSAkdGhpcy0+Y2hhcnNldEZyb21IVE1MKCRtYXJrdXApOwoJCSRhZGREb2N1bWVudENoYXJzZXQgPSBmYWxzZTsKCQlpZiAoJGRvY3VtZW50Q2hhcnNldCkgewoJCQkkY2hhcnNldCA9ICRkb2N1bWVudENoYXJzZXQ7CgkJCSRtYXJrdXAgPSAkdGhpcy0+Y2hhcnNldEZpeEhUTUwoJG1hcmt1cCk7CgkJfSBlbHNlIGlmICgkcmVxdWVzdGVkQ2hhcnNldCkgewoJCQkkY2hhcnNldCA9ICRyZXF1ZXN0ZWRDaGFyc2V0OwoJCX0KCQlpZiAoISAkY2hhcnNldCkKCQkJJGNoYXJzZXQgPSBwaHBRdWVyeTo6JGRlZmF1bHRDaGFyc2V0OwoJCS8vIEhUVFAgMS4xIHNheXMgdGhhdCB0aGUgZGVmYXVsdCBjaGFyc2V0IGlzIElTTy04ODU5LTEKCQkvLyBAc2VlIGh0dHA6Ly93d3cudzMub3JnL0ludGVybmF0aW9uYWwvTy1IVFRQLWNoYXJzZXQKCQlpZiAoISAkZG9jdW1lbnRDaGFyc2V0KSB7CgkJCSRkb2N1bWVudENoYXJzZXQgPSAnSVNPLTg4NTktMSc7CgkJCSRhZGREb2N1bWVudENoYXJzZXQgPSB0cnVlOwoJCX0KCQkvLyBTaG91bGQgYmUgY2FyZWZ1bCBoZXJlLCBzdGlsbCBuZWVkICdtYWdpYyBlbmNvZGluZyBkZXRlY3Rpb24nIHNpbmNlIGxvdHMgb2YgcGFnZXMgaGF2ZSBvdGhlciAnZGVmYXVsdCBlbmNvZGluZycKCQkvLyBXb3JzZSwgc29tZSBwYWdlcyBjYW4gaGF2ZSBtaXhlZCBlbmNvZGluZ3MuLi4gd2UnbGwgdHJ5IG5vdCB0byB3b3JyeSBhYm91dCB0aGF0CgkJJHJlcXVlc3RlZENoYXJzZXQgPSBzdHJ0b3VwcGVyKCRyZXF1ZXN0ZWRDaGFyc2V0KTsKCQkkZG9jdW1lbnRDaGFyc2V0ID0gc3RydG91cHBlcigkZG9jdW1lbnRDaGFyc2V0KTsKCQlwaHBRdWVyeTo6ZGVidWcoIkRPQzogJGRvY3VtZW50Q2hhcnNldCBSRVE6ICRyZXF1ZXN0ZWRDaGFyc2V0Iik7CgkJaWYgKCRyZXF1ZXN0ZWRDaGFyc2V0ICYmICRkb2N1bWVudENoYXJzZXQgJiYgJHJlcXVlc3RlZENoYXJzZXQgIT09ICRkb2N1bWVudENoYXJzZXQpIHsKCQkJcGhwUXVlcnk6OmRlYnVnKCJDSEFSU0VUIENPTlZFUlQiKTsKCQkJLy8gRG9jdW1lbnQgRW5jb2RpbmcgQ29udmVyc2lvbgoJCQkvLyBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvcGhwcXVlcnkvaXNzdWVzL2RldGFpbD9pZD04NgoJCQlpZiAoZnVuY3Rpb25fZXhpc3RzKCdtYl9kZXRlY3RfZW5jb2RpbmcnKSkgewoJCQkJJHBvc3NpYmxlQ2hhcnNldHMgPSBhcnJheSgkZG9jdW1lbnRDaGFyc2V0LCAkcmVxdWVzdGVkQ2hhcnNldCwgJ0FVVE8nKTsKCQkJCSRkb2NFbmNvZGluZyA9IG1iX2RldGVjdF9lbmNvZGluZygkbWFya3VwLCBpbXBsb2RlKCcsICcsICRwb3NzaWJsZUNoYXJzZXRzKSk7CgkJCQlpZiAoISAkZG9jRW5jb2RpbmcpCgkJCQkJJGRvY0VuY29kaW5nID0gJGRvY3VtZW50Q2hhcnNldDsgLy8gb2sgdHJ1c3QgdGhlIGRvY3VtZW50CgkJCQlwaHBRdWVyeTo6ZGVidWcoIkRFVEVDVEVEICckZG9jRW5jb2RpbmcnIik7CgkJCQkvLyBEZXRlY3RlZCBkb2VzIG5vdCBtYXRjaCB3aGF0IGRvY3VtZW50IHNheXMuLi4KCQkJCWlmICgkZG9jRW5jb2RpbmcgIT09ICRkb2N1bWVudENoYXJzZXQpIHsKCQkJCQkvLyBUcmlja3kuLgoJCQkJfQoJCQkJaWYgKCRkb2NFbmNvZGluZyAhPT0gJHJlcXVlc3RlZENoYXJzZXQpIHsKCQkJCQlwaHBRdWVyeTo6ZGVidWcoIkNPTlZFUlQgJGRvY0VuY29kaW5nID0+ICRyZXF1ZXN0ZWRDaGFyc2V0Iik7CgkJCQkJJG1hcmt1cCA9IG1iX2NvbnZlcnRfZW5jb2RpbmcoJG1hcmt1cCwgJHJlcXVlc3RlZENoYXJzZXQsICRkb2NFbmNvZGluZyk7CgkJCQkJJG1hcmt1cCA9ICR0aGlzLT5jaGFyc2V0QXBwZW5kVG9IVE1MKCRtYXJrdXAsICRyZXF1ZXN0ZWRDaGFyc2V0KTsKCQkJCQkkY2hhcnNldCA9ICRyZXF1ZXN0ZWRDaGFyc2V0OwoJCQkJfQoJCQl9IGVsc2UgewoJCQkJcGhwUXVlcnk6OmRlYnVnKCJUT0RPOiBjaGFyc2V0IGNvbnZlcnNpb24gd2l0aG91dCBtYnN0cmluZy4uLiIpOwoJCQl9CgkJfQoJCSRyZXR1cm4gPSBmYWxzZTsKCQlpZiAoJHRoaXMtPmlzRG9jdW1lbnRGcmFnbWVudCkgewoJCQlwaHBRdWVyeTo6ZGVidWcoIkZ1bGwgbWFya3VwIGxvYWQgKEhUTUwpLCBEb2N1bWVudEZyYWdtZW50IGRldGVjdGVkLCB1c2luZyBjaGFyc2V0ICckY2hhcnNldCciKTsKCQkJJHJldHVybiA9ICR0aGlzLT5kb2N1bWVudEZyYWdtZW50TG9hZE1hcmt1cCgkdGhpcywgJGNoYXJzZXQsICRtYXJrdXApOwoJCX0gZWxzZSB7CgkJCWlmICgkYWRkRG9jdW1lbnRDaGFyc2V0KSB7CgkJCQlwaHBRdWVyeTo6ZGVidWcoIkZ1bGwgbWFya3VwIGxvYWQgKEhUTUwpLCBhcHBlbmRpbmcgY2hhcnNldDogJyRjaGFyc2V0JyIpOwoJCQkJJG1hcmt1cCA9ICR0aGlzLT5jaGFyc2V0QXBwZW5kVG9IVE1MKCRtYXJrdXAsICRjaGFyc2V0KTsKCQkJfQoJCQlwaHBRdWVyeTo6ZGVidWcoIkZ1bGwgbWFya3VwIGxvYWQgKEhUTUwpLCBkb2N1bWVudENyZWF0ZSgnJGNoYXJzZXQnKSIpOwoJCQkkdGhpcy0+ZG9jdW1lbnRDcmVhdGUoJGNoYXJzZXQpOwoJCQkkcmV0dXJuID0gcGhwUXVlcnk6OiRkZWJ1ZyA9PT0gMgoJCQkJPyAkdGhpcy0+ZG9jdW1lbnQtPmxvYWRIVE1MKCRtYXJrdXApCgkJCQk6IEAkdGhpcy0+ZG9jdW1lbnQtPmxvYWRIVE1MKCRtYXJrdXApOwoJCQlpZiAoJHJldHVybikKCQkJCSR0aGlzLT5yb290ID0gJHRoaXMtPmRvY3VtZW50OwoJCX0KCQlpZiAoJHJldHVybiAmJiAhICR0aGlzLT5jb250ZW50VHlwZSkKCQkJJHRoaXMtPmNvbnRlbnRUeXBlID0gJ3RleHQvaHRtbCc7CgkJcmV0dXJuICRyZXR1cm47Cgl9Cglwcm90ZWN0ZWQgZnVuY3Rpb24gbG9hZE1hcmt1cFhNTCgkbWFya3VwLCAkcmVxdWVzdGVkQ2hhcnNldCA9IG51bGwpIHsKCQlpZiAocGhwUXVlcnk6OiRkZWJ1ZykKCQkJcGhwUXVlcnk6OmRlYnVnKCdGdWxsIG1hcmt1cCBsb2FkIChYTUwpOiAnLnN1YnN0cigkbWFya3VwLCAwLCAyNTApKTsKCQkkdGhpcy0+bG9hZE1hcmt1cFJlc2V0KCk7CgkJJHRoaXMtPmlzWE1MID0gdHJ1ZTsKCQkvLyBjaGVjayBhZ2FpbnMgWEhUTUwgaW4gY29udGVudFR5cGUgb3IgbWFya3VwCgkJJGlzQ29udGVudFR5cGVYSFRNTCA9ICR0aGlzLT5pc1hIVE1MKCk7CgkJJGlzTWFya3VwWEhUTUwgPSAkdGhpcy0+aXNYSFRNTCgkbWFya3VwKTsKCQlpZiAoJGlzQ29udGVudFR5cGVYSFRNTCB8fCAkaXNNYXJrdXBYSFRNTCkgewoJCQlzZWxmOjpkZWJ1ZygnRnVsbCBtYXJrdXAgbG9hZCAoWE1MKSwgWEhUTUwgZGV0ZWN0ZWQnKTsKCQkJJHRoaXMtPmlzWEhUTUwgPSB0cnVlOwoJCX0KCQkvLyBkZXRlcm1pbmUgZG9jdW1lbnQgZnJhZ21lbnQKCQlpZiAoISBpc3NldCgkdGhpcy0+aXNEb2N1bWVudEZyYWdtZW50KSkKCQkJJHRoaXMtPmlzRG9jdW1lbnRGcmFnbWVudCA9ICR0aGlzLT5pc1hIVE1MCgkJCQk/IHNlbGY6OmlzRG9jdW1lbnRGcmFnbWVudFhIVE1MKCRtYXJrdXApCgkJCQk6IHNlbGY6OmlzRG9jdW1lbnRGcmFnbWVudFhNTCgkbWFya3VwKTsKCQkvLyB0aGlzIGNoYXJzZXQgd2lsbCBiZSB1c2VkCgkJJGNoYXJzZXQgPSBudWxsOwoJCS8vIGNoYXJzZXQgZnJvbSBYTUwgZGVjbGFyYXRpb24gQHZhciBzdHJpbmcKCQkkZG9jdW1lbnRDaGFyc2V0ID0gJHRoaXMtPmNoYXJzZXRGcm9tWE1MKCRtYXJrdXApOwoJCWlmICghICRkb2N1bWVudENoYXJzZXQpIHsKCQkJaWYgKCR0aGlzLT5pc1hIVE1MKSB7CgkJCQkvLyB0aGlzIGlzIFhIVE1MLCB0cnkgdG8gZ2V0IGNoYXJzZXQgZnJvbSBjb250ZW50LXR5cGUgbWV0YSBoZWFkZXIKCQkJCSRkb2N1bWVudENoYXJzZXQgPSAkdGhpcy0+Y2hhcnNldEZyb21IVE1MKCRtYXJrdXApOwoJCQkJaWYgKCRkb2N1bWVudENoYXJzZXQpIHsKCQkJCQlwaHBRdWVyeTo6ZGVidWcoIkZ1bGwgbWFya3VwIGxvYWQgKFhNTCksIGFwcGVuZGluZyBYSFRNTCBjaGFyc2V0ICckZG9jdW1lbnRDaGFyc2V0JyIpOwoJCQkJCSR0aGlzLT5jaGFyc2V0QXBwZW5kVG9YTUwoJG1hcmt1cCwgJGRvY3VtZW50Q2hhcnNldCk7CgkJCQkJJGNoYXJzZXQgPSAkZG9jdW1lbnRDaGFyc2V0OwoJCQkJfQoJCQl9CgkJCWlmICghICRkb2N1bWVudENoYXJzZXQpIHsKCQkJCS8vIGlmIHN0aWxsIG5vIGRvY3VtZW50IGNoYXJzZXQuLi4KCQkJCSRjaGFyc2V0ID0gJHJlcXVlc3RlZENoYXJzZXQ7CgkJCX0KCQl9IGVsc2UgaWYgKCRyZXF1ZXN0ZWRDaGFyc2V0KSB7CgkJCSRjaGFyc2V0ID0gJHJlcXVlc3RlZENoYXJzZXQ7CgkJfQoJCWlmICghICRjaGFyc2V0KSB7CgkJCSRjaGFyc2V0ID0gcGhwUXVlcnk6OiRkZWZhdWx0Q2hhcnNldDsKCQl9CgkJaWYgKCRyZXF1ZXN0ZWRDaGFyc2V0ICYmICRkb2N1bWVudENoYXJzZXQgJiYgJHJlcXVlc3RlZENoYXJzZXQgIT0gJGRvY3VtZW50Q2hhcnNldCkgewoJCQkvLyBUT0RPIHBsYWNlIGZvciBjaGFyc2V0IGNvbnZlcnNpb24KLy8JCQkkY2hhcnNldCA9ICRyZXF1ZXN0ZWRDaGFyc2V0OwoJCX0KCQkkcmV0dXJuID0gZmFsc2U7CgkJaWYgKCR0aGlzLT5pc0RvY3VtZW50RnJhZ21lbnQpIHsKCQkJcGhwUXVlcnk6OmRlYnVnKCJGdWxsIG1hcmt1cCBsb2FkIChYTUwpLCBEb2N1bWVudEZyYWdtZW50IGRldGVjdGVkLCB1c2luZyBjaGFyc2V0ICckY2hhcnNldCciKTsKCQkJJHJldHVybiA9ICR0aGlzLT5kb2N1bWVudEZyYWdtZW50TG9hZE1hcmt1cCgkdGhpcywgJGNoYXJzZXQsICRtYXJrdXApOwoJCX0gZWxzZSB7CgkJCS8vIEZJWE1FID8/PwoJCQlpZiAoJGlzQ29udGVudFR5cGVYSFRNTCAmJiAhICRpc01hcmt1cFhIVE1MKQoJCQlpZiAoISAkZG9jdW1lbnRDaGFyc2V0KSB7CgkJCQlwaHBRdWVyeTo6ZGVidWcoIkZ1bGwgbWFya3VwIGxvYWQgKFhNTCksIGFwcGVuZGluZyBjaGFyc2V0ICckY2hhcnNldCciKTsKCQkJCSRtYXJrdXAgPSAkdGhpcy0+Y2hhcnNldEFwcGVuZFRvWE1MKCRtYXJrdXAsICRjaGFyc2V0KTsKCQkJfQoJCQkvLyBzZWUgaHR0cDovL3BsMi5waHAubmV0L21hbnVhbC9lbi9ib29rLmRvbS5waHAjNzg5MjkKCQkJLy8gTElCWE1MX0RURExPQUQgKD49IFBIUCA1LjEpCgkJCS8vIGRvZXMgWE1MIGN0YWxvZ3VlcyB3b3JrcyB3aXRoIExJQlhNTF9OT05FVAoJLy8JCSR0aGlzLT5kb2N1bWVudC0+cmVzb2x2ZUV4dGVybmFscyA9IHRydWU7CgkJCS8vIFRPRE8gdGVzdCBMSUJYTUxfQ09NUEFDVCBmb3IgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQKCQkJLy8gY3JlYXRlIGRvY3VtZW50CgkJCSR0aGlzLT5kb2N1bWVudENyZWF0ZSgkY2hhcnNldCk7CgkJCWlmIChwaHB2ZXJzaW9uKCkgPCA1LjEpIHsKCQkJCSR0aGlzLT5kb2N1bWVudC0+cmVzb2x2ZUV4dGVybmFscyA9IHRydWU7CgkJCQkkcmV0dXJuID0gcGhwUXVlcnk6OiRkZWJ1ZyA9PT0gMgoJCQkJCT8gJHRoaXMtPmRvY3VtZW50LT5sb2FkWE1MKCRtYXJrdXApCgkJCQkJOiBAJHRoaXMtPmRvY3VtZW50LT5sb2FkWE1MKCRtYXJrdXApOwoJCQl9IGVsc2UgewoJCQkJLyoqIEBsaW5rIGh0dHA6Ly9wbDIucGhwLm5ldC9tYW51YWwvZW4vbGlieG1sLmNvbnN0YW50cy5waHAgKi8KCQkJCSRsaWJ4bWxTdGF0aWMgPSBwaHBRdWVyeTo6JGRlYnVnID09PSAyCgkJCQkJPyBMSUJYTUxfRFRETE9BRHxMSUJYTUxfRFREQVRUUnxMSUJYTUxfTk9ORVQKCQkJCQk6IExJQlhNTF9EVERMT0FEfExJQlhNTF9EVERBVFRSfExJQlhNTF9OT05FVHxMSUJYTUxfTk9XQVJOSU5HfExJQlhNTF9OT0VSUk9SOwoJCQkJJHJldHVybiA9ICR0aGlzLT5kb2N1bWVudC0+bG9hZFhNTCgkbWFya3VwLCAkbGlieG1sU3RhdGljKTsKLy8gCQkJCWlmICghICRyZXR1cm4pCi8vIAkJCQkJJHJldHVybiA9ICR0aGlzLT5kb2N1bWVudC0+bG9hZEhUTUwoJG1hcmt1cCk7CgkJCX0KCQkJaWYgKCRyZXR1cm4pCgkJCQkkdGhpcy0+cm9vdCA9ICR0aGlzLT5kb2N1bWVudDsKCQl9CgkJaWYgKCRyZXR1cm4pIHsKCQkJaWYgKCEgJHRoaXMtPmNvbnRlbnRUeXBlKSB7CgkJCQlpZiAoJHRoaXMtPmlzWEhUTUwpCgkJCQkJJHRoaXMtPmNvbnRlbnRUeXBlID0gJ2FwcGxpY2F0aW9uL3hodG1sK3htbCc7CgkJCQllbHNlCgkJCQkJJHRoaXMtPmNvbnRlbnRUeXBlID0gJ3RleHQveG1sJzsKCQkJfQoJCQlyZXR1cm4gJHJldHVybjsKCQl9IGVsc2UgewoJCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCJFcnJvciBsb2FkaW5nIFhNTCBtYXJrdXAiKTsKCQl9Cgl9Cglwcm90ZWN0ZWQgZnVuY3Rpb24gaXNYSFRNTCgkbWFya3VwID0gbnVsbCkgewoJCWlmICghIGlzc2V0KCRtYXJrdXApKSB7CgkJCXJldHVybiBzdHJwb3MoJHRoaXMtPmNvbnRlbnRUeXBlLCAneGh0bWwnKSAhPT0gZmFsc2U7CgkJfQoJCS8vIFhYWCBvayA/CgkJcmV0dXJuIHN0cnBvcygkbWFya3VwLCAiPCFET0NUWVBFIGh0bWwiKSAhPT0gZmFsc2U7Ci8vCQlyZXR1cm4gc3RyaXBvcygkZG9jdHlwZSwgJ3hodG1sJykgIT09IGZhbHNlOwovLwkJJGRvY3R5cGUgPSBpc3NldCgkZG9tLT5kb2N0eXBlKSAmJiBpc19vYmplY3QoJGRvbS0+ZG9jdHlwZSkKLy8JCQk/ICRkb20tPmRvY3R5cGUtPnB1YmxpY0lkCi8vCQkJOiBzZWxmOjokZGVmYXVsdERvY3R5cGU7Cgl9Cglwcm90ZWN0ZWQgZnVuY3Rpb24gaXNYTUwoJG1hcmt1cCkgewovLwkJcmV0dXJuIHN0cnBvcygkbWFya3VwLCAnPD94bWwnKSAhPT0gZmFsc2UgJiYgc3RyaXBvcygkbWFya3VwLCAneGh0bWwnKSA9PT0gZmFsc2U7CgkJcmV0dXJuIHN0cnBvcyhzdWJzdHIoJG1hcmt1cCwgMCwgMTAwKSwgJzwnLic/eG1sJykgIT09IGZhbHNlOwoJfQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGNvbnRlbnRUeXBlVG9BcnJheSgkY29udGVudFR5cGUpIHsKCQkkbWF0Y2hlcyA9IGV4cGxvZGUoJzsnLCB0cmltKHN0cnRvbG93ZXIoJGNvbnRlbnRUeXBlKSkpOwoJCWlmIChpc3NldCgkbWF0Y2hlc1sxXSkpIHsKCQkJJG1hdGNoZXNbMV0gPSBleHBsb2RlKCc9JywgJG1hdGNoZXNbMV0pOwoJCQkvLyBzdHJpcCAnY2hhcnNldD0nCgkJCSRtYXRjaGVzWzFdID0gaXNzZXQoJG1hdGNoZXNbMV1bMV0pICYmIHRyaW0oJG1hdGNoZXNbMV1bMV0pCgkJCQk/ICRtYXRjaGVzWzFdWzFdCgkJCQk6ICRtYXRjaGVzWzFdWzBdOwoJCX0gZWxzZQoJCQkkbWF0Y2hlc1sxXSA9IG51bGw7CgkJcmV0dXJuICRtYXRjaGVzOwoJfQoJLyoqCgkgKgoJICogQHBhcmFtICRtYXJrdXAKCSAqIEByZXR1cm4gYXJyYXkgY29udGVudFR5cGUsIGNoYXJzZXQKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGNvbnRlbnRUeXBlRnJvbUhUTUwoJG1hcmt1cCkgewoJCSRtYXRjaGVzID0gYXJyYXkoKTsKCQkvLyBmaW5kIG1ldGEgdGFnCgkJcHJlZ19tYXRjaCgnQDxtZXRhW14+XStodHRwLWVxdWl2XFxzKj1cXHMqKFsifFwnXSlDb250ZW50LVR5cGVcXDEoW14+XSs/KT5AaScsCgkJCSRtYXJrdXAsICRtYXRjaGVzCgkJKTsKCQlpZiAoISBpc3NldCgkbWF0Y2hlc1swXSkpCgkJCXJldHVybiBhcnJheShudWxsLCBudWxsKTsKCQkvLyBnZXQgYXR0ciAnY29udGVudCcKCQlwcmVnX21hdGNoKCdAY29udGVudFxccyo9XFxzKihbInxcJ10pKC4rPylcXDFAJywgJG1hdGNoZXNbMF0sICRtYXRjaGVzKTsKCQlpZiAoISBpc3NldCgkbWF0Y2hlc1swXSkpCgkJCXJldHVybiBhcnJheShudWxsLCBudWxsKTsKCQlyZXR1cm4gJHRoaXMtPmNvbnRlbnRUeXBlVG9BcnJheSgkbWF0Y2hlc1syXSk7Cgl9Cglwcm90ZWN0ZWQgZnVuY3Rpb24gY2hhcnNldEZyb21IVE1MKCRtYXJrdXApIHsKCQkkY29udGVudFR5cGUgPSAkdGhpcy0+Y29udGVudFR5cGVGcm9tSFRNTCgkbWFya3VwKTsKCQlyZXR1cm4gJGNvbnRlbnRUeXBlWzFdOwoJfQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGNoYXJzZXRGcm9tWE1MKCRtYXJrdXApIHsKCQkkbWF0Y2hlczsKCQkvLyBmaW5kIGRlY2xhcmF0aW9uCgkJcHJlZ19tYXRjaCgnQDwnLic/eG1sW14+XStlbmNvZGluZ1xccyo9XFxzKihbInxcJ10pKC4qPylcXDFAaScsCgkJCSRtYXJrdXAsICRtYXRjaGVzCgkJKTsKCQlyZXR1cm4gaXNzZXQoJG1hdGNoZXNbMl0pCgkJCT8gc3RydG9sb3dlcigkbWF0Y2hlc1syXSkKCQkJOiBudWxsOwoJfQoJLyoqCgkgKiBSZXBvc2l0aW9ucyBtZXRhW3R5cGU9Y2hhcnNldF0gYXQgdGhlIHN0YXJ0IG9mIGhlYWQuIEJ5cGFzc2VzIERPTURvY3VtZW50IGJ1Zy4KCSAqCgkgKiBAbGluayBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvcGhwcXVlcnkvaXNzdWVzL2RldGFpbD9pZD04MAoJICogQHBhcmFtICRodG1sCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBjaGFyc2V0Rml4SFRNTCgkbWFya3VwKSB7CgkJJG1hdGNoZXMgPSBhcnJheSgpOwoJCS8vIGZpbmQgbWV0YSB0YWcKCQlwcmVnX21hdGNoKCdAXHMqPG1ldGFbXj5dK2h0dHAtZXF1aXZcXHMqPVxccyooWyJ8XCddKUNvbnRlbnQtVHlwZVxcMShbXj5dKz8pPkBpJywKCQkJJG1hcmt1cCwgJG1hdGNoZXMsIFBSRUdfT0ZGU0VUX0NBUFRVUkUKCQkpOwoJCWlmICghIGlzc2V0KCRtYXRjaGVzWzBdKSkKCQkJcmV0dXJuOwoJCSRtZXRhQ29udGVudFR5cGUgPSAkbWF0Y2hlc1swXVswXTsKCQkkbWFya3VwID0gc3Vic3RyKCRtYXJrdXAsIDAsICRtYXRjaGVzWzBdWzFdKQoJCQkuc3Vic3RyKCRtYXJrdXAsICRtYXRjaGVzWzBdWzFdK3N0cmxlbigkbWV0YUNvbnRlbnRUeXBlKSk7CgkJJGhlYWRTdGFydCA9IHN0cmlwb3MoJG1hcmt1cCwgJzxoZWFkPicpOwoJCSRtYXJrdXAgPSBzdWJzdHIoJG1hcmt1cCwgMCwgJGhlYWRTdGFydCs2KS4kbWV0YUNvbnRlbnRUeXBlCgkJCS5zdWJzdHIoJG1hcmt1cCwgJGhlYWRTdGFydCs2KTsKCQlyZXR1cm4gJG1hcmt1cDsKCX0KCXByb3RlY3RlZCBmdW5jdGlvbiBjaGFyc2V0QXBwZW5kVG9IVE1MKCRodG1sLCAkY2hhcnNldCwgJHhodG1sID0gZmFsc2UpIHsKCQkvLyByZW1vdmUgZXhpc3RpbmcgbWV0YVt0eXBlPWNvbnRlbnQtdHlwZV0KCQkkaHRtbCA9IHByZWdfcmVwbGFjZSgnQFxzKjxtZXRhW14+XStodHRwLWVxdWl2XFxzKj1cXHMqKFsifFwnXSlDb250ZW50LVR5cGVcXDEoW14+XSs/KT5AaScsICcnLCAkaHRtbCk7CgkJJG1ldGEgPSAnPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7Y2hhcnNldD0nCgkJCS4kY2hhcnNldC4nIiAnCgkJCS4oJHhodG1sID8gJy8nIDogJycpCgkJCS4nPic7CgkJaWYgKHN0cnBvcygkaHRtbCwgJzxoZWFkJykgPT09IGZhbHNlKSB7CgkJCWlmIChzdHJwb3MoJGh0bWwsICc8aHRtbCcpID09PSBmYWxzZSkgewoJCQkJcmV0dXJuICRtZXRhLiRodG1sOwoJCQl9IGVsc2UgewoJCQkJcmV0dXJuIHByZWdfcmVwbGFjZSgKCQkJCQknQDxodG1sKC4qPykoPyg/PCFcPyk+KUBzJywKCQkJCQkiPGh0bWxcXDE+PGhlYWQ+eyRtZXRhfTwvaGVhZD4iLAoJCQkJCSRodG1sCgkJCQkpOwoJCQl9CgkJfSBlbHNlIHsKCQkJcmV0dXJuIHByZWdfcmVwbGFjZSgKCQkJCSdAPGhlYWQoLio/KSg/KD88IVw/KT4pQHMnLAoJCQkJJzxoZWFkXFwxPicuJG1ldGEsCgkJCQkkaHRtbAoJCQkpOwoJCX0KCX0KCXByb3RlY3RlZCBmdW5jdGlvbiBjaGFyc2V0QXBwZW5kVG9YTUwoJG1hcmt1cCwgJGNoYXJzZXQpIHsKCQkkZGVjbGFyYXRpb24gPSAnPCcuJz94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iJy4kY2hhcnNldC4nIj8nLic+JzsKCQlyZXR1cm4gJGRlY2xhcmF0aW9uLiRtYXJrdXA7Cgl9CglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzRG9jdW1lbnRGcmFnbWVudEhUTUwoJG1hcmt1cCkgewoJCXJldHVybiBzdHJpcG9zKCRtYXJrdXAsICc8aHRtbCcpID09PSBmYWxzZSAmJiBzdHJpcG9zKCRtYXJrdXAsICc8IWRvY3R5cGUnKSA9PT0gZmFsc2U7Cgl9CglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzRG9jdW1lbnRGcmFnbWVudFhNTCgkbWFya3VwKSB7CgkJcmV0dXJuIHN0cmlwb3MoJG1hcmt1cCwgJzwnLic/eG1sJykgPT09IGZhbHNlOwoJfQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpc0RvY3VtZW50RnJhZ21lbnRYSFRNTCgkbWFya3VwKSB7CgkJcmV0dXJuIHNlbGY6OmlzRG9jdW1lbnRGcmFnbWVudEhUTUwoJG1hcmt1cCk7Cgl9CglwdWJsaWMgZnVuY3Rpb24gaW1wb3J0QXR0cigkdmFsdWUpIHsKCQkvLyBUT0RPCgl9CgkvKioKCSAqCgkgKiBAcGFyYW0gJHNvdXJjZQoJICogQHBhcmFtICR0YXJnZXQKCSAqIEBwYXJhbSAkc291cmNlQ2hhcnNldAoJICogQHJldHVybiBhcnJheSBBcnJheSBvZiBpbXBvcnRlZCBub2Rlcy4KCSAqLwoJcHVibGljIGZ1bmN0aW9uIGltcG9ydCgkc291cmNlLCAkc291cmNlQ2hhcnNldCA9IG51bGwpIHsKCQkvLyBUT0RPIGNoYXJzZXQgY29udmVyc2lvbnMKCQkkcmV0dXJuID0gYXJyYXkoKTsKCQlpZiAoJHNvdXJjZSBpbnN0YW5jZW9mIERPTU5PREUgJiYgISgkc291cmNlIGluc3RhbmNlb2YgRE9NTk9ERUxJU1QpKQoJCQkkc291cmNlID0gYXJyYXkoJHNvdXJjZSk7Ci8vCQlpZiAoaXNfYXJyYXkoJHNvdXJjZSkpIHsKLy8JCQlmb3JlYWNoKCRzb3VyY2UgYXMgJG5vZGUpIHsKLy8JCQkJaWYgKGlzX3N0cmluZygkbm9kZSkpIHsKLy8JCQkJCS8vIHN0cmluZyBtYXJrdXAKLy8JCQkJCSRmYWtlID0gJHRoaXMtPmRvY3VtZW50RnJhZ21lbnRDcmVhdGUoJG5vZGUsICRzb3VyY2VDaGFyc2V0KTsKLy8JCQkJCWlmICgkZmFrZSA9PT0gZmFsc2UpCi8vCQkJCQkJdGhyb3cgbmV3IEV4Y2VwdGlvbigiRXJyb3IgbG9hZGluZyBkb2N1bWVudEZyYWdtZW50IG1hcmt1cCIpOwovLwkJCQkJZWxzZQovLwkJCQkJCSRyZXR1cm4gPSBhcnJheV9tZXJnZSgkcmV0dXJuLAovLwkJCQkJCQkkdGhpcy0+aW1wb3J0KCRmYWtlLT5yb290LT5jaGlsZE5vZGVzKQovLwkJCQkJCSk7Ci8vCQkJCX0gZWxzZSB7Ci8vCQkJCQkkcmV0dXJuW10gPSAkdGhpcy0+ZG9jdW1lbnQtPmltcG9ydE5vZGUoJG5vZGUsIHRydWUpOwovLwkJCQl9Ci8vCQkJfQovLwkJCXJldHVybiAkcmV0dXJuOwovLwkJfSBlbHNlIHsKLy8JCQkvLyBzdHJpbmcgbWFya3VwCi8vCQkJJGZha2UgPSAkdGhpcy0+ZG9jdW1lbnRGcmFnbWVudENyZWF0ZSgkc291cmNlLCAkc291cmNlQ2hhcnNldCk7Ci8vCQkJaWYgKCRmYWtlID09PSBmYWxzZSkKLy8JCQkJdGhyb3cgbmV3IEV4Y2VwdGlvbigiRXJyb3IgbG9hZGluZyBkb2N1bWVudEZyYWdtZW50IG1hcmt1cCIpOwovLwkJCWVsc2UKLy8JCQkJcmV0dXJuICR0aGlzLT5pbXBvcnQoJGZha2UtPnJvb3QtPmNoaWxkTm9kZXMpOwovLwkJfQoJCWlmIChpc19hcnJheSgkc291cmNlKSB8fCAkc291cmNlIGluc3RhbmNlb2YgRE9NTk9ERUxJU1QpIHsKCQkJLy8gZG9tIG5vZGVzCgkJCXNlbGY6OmRlYnVnKCdJbXBvcnRpbmcgbm9kZXMgdG8gZG9jdW1lbnQnKTsKCQkJZm9yZWFjaCgkc291cmNlIGFzICRub2RlKQoJCQkJJHJldHVybltdID0gJHRoaXMtPmRvY3VtZW50LT5pbXBvcnROb2RlKCRub2RlLCB0cnVlKTsKCQl9IGVsc2UgewoJCQkvLyBzdHJpbmcgbWFya3VwCgkJCSRmYWtlID0gJHRoaXMtPmRvY3VtZW50RnJhZ21lbnRDcmVhdGUoJHNvdXJjZSwgJHNvdXJjZUNoYXJzZXQpOwoJCQlpZiAoJGZha2UgPT09IGZhbHNlKQoJCQkJdGhyb3cgbmV3IEV4Y2VwdGlvbigiRXJyb3IgbG9hZGluZyBkb2N1bWVudEZyYWdtZW50IG1hcmt1cCIpOwoJCQllbHNlCgkJCQlyZXR1cm4gJHRoaXMtPmltcG9ydCgkZmFrZS0+cm9vdC0+Y2hpbGROb2Rlcyk7CgkJfQoJCXJldHVybiAkcmV0dXJuOwoJfQoJLyoqCgkgKiBDcmVhdGVzIG5ldyBkb2N1bWVudCBmcmFnbWVudC4KCSAqCgkgKiBAcGFyYW0gJHNvdXJjZQoJICogQHJldHVybiBET01Eb2N1bWVudFdyYXBwZXIKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGRvY3VtZW50RnJhZ21lbnRDcmVhdGUoJHNvdXJjZSwgJGNoYXJzZXQgPSBudWxsKSB7CgkJJGZha2UgPSBuZXcgRE9NRG9jdW1lbnRXcmFwcGVyKCk7CgkJJGZha2UtPmNvbnRlbnRUeXBlID0gJHRoaXMtPmNvbnRlbnRUeXBlOwoJCSRmYWtlLT5pc1hNTCA9ICR0aGlzLT5pc1hNTDsKCQkkZmFrZS0+aXNIVE1MID0gJHRoaXMtPmlzSFRNTDsKCQkkZmFrZS0+aXNYSFRNTCA9ICR0aGlzLT5pc1hIVE1MOwoJCSRmYWtlLT5yb290ID0gJGZha2UtPmRvY3VtZW50OwoJCWlmICghICRjaGFyc2V0KQoJCQkkY2hhcnNldCA9ICR0aGlzLT5jaGFyc2V0OwovLwkkZmFrZS0+ZG9jdW1lbnRDcmVhdGUoJHRoaXMtPmNoYXJzZXQpOwoJCWlmICgkc291cmNlIGluc3RhbmNlb2YgRE9NTk9ERSAmJiAhKCRzb3VyY2UgaW5zdGFuY2VvZiBET01OT0RFTElTVCkpCgkJCSRzb3VyY2UgPSBhcnJheSgkc291cmNlKTsKCQlpZiAoaXNfYXJyYXkoJHNvdXJjZSkgfHwgJHNvdXJjZSBpbnN0YW5jZW9mIERPTU5PREVMSVNUKSB7CgkJCS8vIGRvbSBub2RlcwoJCQkvLyBsb2FkIGZha2UgZG9jdW1lbnQKCQkJaWYgKCEgJHRoaXMtPmRvY3VtZW50RnJhZ21lbnRMb2FkTWFya3VwKCRmYWtlLCAkY2hhcnNldCkpCgkJCQlyZXR1cm4gZmFsc2U7CgkJCSRub2RlcyA9ICRmYWtlLT5pbXBvcnQoJHNvdXJjZSk7CgkJCWZvcmVhY2goJG5vZGVzIGFzICRub2RlKQoJCQkJJGZha2UtPnJvb3QtPmFwcGVuZENoaWxkKCRub2RlKTsKCQl9IGVsc2UgewoJCQkvLyBzdHJpbmcgbWFya3VwCgkJCSR0aGlzLT5kb2N1bWVudEZyYWdtZW50TG9hZE1hcmt1cCgkZmFrZSwgJGNoYXJzZXQsICRzb3VyY2UpOwoJCX0KCQlyZXR1cm4gJGZha2U7Cgl9CgkvKioKCSAqCgkgKiBAcGFyYW0gJGRvY3VtZW50IERPTURvY3VtZW50V3JhcHBlcgoJICogQHBhcmFtICRtYXJrdXAKCSAqIEByZXR1cm4gJGRvY3VtZW50CgkgKi8KCXByaXZhdGUgZnVuY3Rpb24gZG9jdW1lbnRGcmFnbWVudExvYWRNYXJrdXAoJGZyYWdtZW50LCAkY2hhcnNldCwgJG1hcmt1cCA9IG51bGwpIHsKCQkvLyBUT0RPIGVycm9yIGhhbmRsaW5nCgkJLy8gVE9ETyBjb3B5IGRvY3R5cGUKCQkvLyB0ZW1wb2xhcnkgdHVybiBvZmYKCQkkZnJhZ21lbnQtPmlzRG9jdW1lbnRGcmFnbWVudCA9IGZhbHNlOwoJCWlmICgkZnJhZ21lbnQtPmlzWE1MKSB7CgkJCWlmICgkZnJhZ21lbnQtPmlzWEhUTUwpIHsKCQkJCS8vIGFkZCBGQUtFIGVsZW1lbnQgdG8gc2V0IGRlZmF1bHQgbmFtZXNwYWNlCgkJCQkkZnJhZ21lbnQtPmxvYWRNYXJrdXBYTUwoJzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IicuJGNoYXJzZXQuJyI/PicKCQkJCQkuJzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICcKCQkJCQkuJyJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4nCgkJCQkJLic8ZmFrZSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI+Jy4kbWFya3VwLic8L2Zha2U+Jyk7CgkJCQkkZnJhZ21lbnQtPnJvb3QgPSAkZnJhZ21lbnQtPmRvY3VtZW50LT5maXJzdENoaWxkLT5uZXh0U2libGluZzsKCQkJfSBlbHNlIHsKCQkJCSRmcmFnbWVudC0+bG9hZE1hcmt1cFhNTCgnPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iJy4kY2hhcnNldC4nIj8+PGZha2U+Jy4kbWFya3VwLic8L2Zha2U+Jyk7CgkJCQkkZnJhZ21lbnQtPnJvb3QgPSAkZnJhZ21lbnQtPmRvY3VtZW50LT5maXJzdENoaWxkOwoJCQl9CgkJfSBlbHNlIHsKCQkJJG1hcmt1cDIgPSBwaHBRdWVyeTo6JGRlZmF1bHREb2N0eXBlLic8aHRtbD48aGVhZD48bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDtjaGFyc2V0PScKCQkJCS4kY2hhcnNldC4nIj48L2hlYWQ+JzsKCQkJJG5vQm9keSA9IHN0cnBvcygkbWFya3VwLCAnPGJvZHknKSA9PT0gZmFsc2U7CgkJCWlmICgkbm9Cb2R5KQoJCQkJJG1hcmt1cDIgLj0gJzxib2R5Pic7CgkJCSRtYXJrdXAyIC49ICRtYXJrdXA7CgkJCWlmICgkbm9Cb2R5KQoJCQkJJG1hcmt1cDIgLj0gJzwvYm9keT4nOwoJCQkkbWFya3VwMiAuPSAnPC9odG1sPic7CgkJCSRmcmFnbWVudC0+bG9hZE1hcmt1cEhUTUwoJG1hcmt1cDIpOwoJCQkvLyBUT0RPIHJlc29sdiBib2R5IHRhZyBtZXJnaW5nIGlzc3VlCgkJCSRmcmFnbWVudC0+cm9vdCA9ICRub0JvZHkKCQkJCT8gJGZyYWdtZW50LT5kb2N1bWVudC0+Zmlyc3RDaGlsZC0+bmV4dFNpYmxpbmctPmZpcnN0Q2hpbGQtPm5leHRTaWJsaW5nCgkJCQk6ICRmcmFnbWVudC0+ZG9jdW1lbnQtPmZpcnN0Q2hpbGQtPm5leHRTaWJsaW5nLT5maXJzdENoaWxkLT5uZXh0U2libGluZzsKCQl9CgkJaWYgKCEgJGZyYWdtZW50LT5yb290KQoJCQlyZXR1cm4gZmFsc2U7CgkJJGZyYWdtZW50LT5pc0RvY3VtZW50RnJhZ21lbnQgPSB0cnVlOwoJCXJldHVybiB0cnVlOwoJfQoJcHJvdGVjdGVkIGZ1bmN0aW9uIGRvY3VtZW50RnJhZ21lbnRUb01hcmt1cCgkZnJhZ21lbnQpIHsKCQlwaHBRdWVyeTo6ZGVidWcoJ2RvY3VtZW50RnJhZ21lbnRUb01hcmt1cCcpOwoJCSR0bXAgPSAkZnJhZ21lbnQtPmlzRG9jdW1lbnRGcmFnbWVudDsKCQkkZnJhZ21lbnQtPmlzRG9jdW1lbnRGcmFnbWVudCA9IGZhbHNlOwoJCSRtYXJrdXAgPSAkZnJhZ21lbnQtPm1hcmt1cCgpOwoJCWlmICgkZnJhZ21lbnQtPmlzWE1MKSB7CgkJCSRtYXJrdXAgPSBzdWJzdHIoJG1hcmt1cCwgMCwgc3RycnBvcygkbWFya3VwLCAnPC9mYWtlPicpKTsKCQkJaWYgKCRmcmFnbWVudC0+aXNYSFRNTCkgewoJCQkJJG1hcmt1cCA9IHN1YnN0cigkbWFya3VwLCBzdHJwb3MoJG1hcmt1cCwgJzxmYWtlJykrNDMpOwoJCQl9IGVsc2UgewoJCQkJJG1hcmt1cCA9IHN1YnN0cigkbWFya3VwLCBzdHJwb3MoJG1hcmt1cCwgJzxmYWtlPicpKzYpOwoJCQl9CgkJfSBlbHNlIHsKCQkJCSRtYXJrdXAgPSBzdWJzdHIoJG1hcmt1cCwgc3RycG9zKCRtYXJrdXAsICc8Ym9keT4nKSs2KTsKCQkJCSRtYXJrdXAgPSBzdWJzdHIoJG1hcmt1cCwgMCwgc3RycnBvcygkbWFya3VwLCAnPC9ib2R5PicpKTsKCQl9CgkJJGZyYWdtZW50LT5pc0RvY3VtZW50RnJhZ21lbnQgPSAkdG1wOwoJCWlmIChwaHBRdWVyeTo6JGRlYnVnKQoJCQlwaHBRdWVyeTo6ZGVidWcoJ2RvY3VtZW50RnJhZ21lbnRUb01hcmt1cDogJy5zdWJzdHIoJG1hcmt1cCwgMCwgMTUwKSk7CgkJcmV0dXJuICRtYXJrdXA7Cgl9CgkvKioKCSAqIFJldHVybiBkb2N1bWVudCBtYXJrdXAsIHN0YXJ0aW5nIHdpdGggb3B0aW9uYWwgJG5vZGVzIGFzIHJvb3QuCgkgKgoJICogQHBhcmFtICRub2RlcwlET01Ob2RlfERPTU5vZGVMaXN0CgkgKiBAcmV0dXJuIHN0cmluZwoJICovCglwdWJsaWMgZnVuY3Rpb24gbWFya3VwKCRub2RlcyA9IG51bGwsICRpbm5lck1hcmt1cCA9IGZhbHNlKSB7CgkJaWYgKGlzc2V0KCRub2RlcykgJiYgY291bnQoJG5vZGVzKSA9PSAxICYmICRub2Rlc1swXSBpbnN0YW5jZW9mIERPTURPQ1VNRU5UKQoJCQkkbm9kZXMgPSBudWxsOwoJCWlmIChpc3NldCgkbm9kZXMpKSB7CgkJCSRtYXJrdXAgPSAnJzsKCQkJaWYgKCFpc19hcnJheSgkbm9kZXMpICYmICEoJG5vZGVzIGluc3RhbmNlb2YgRE9NTk9ERUxJU1QpICkKCQkJCSRub2RlcyA9IGFycmF5KCRub2Rlcyk7CgkJCWlmICgkdGhpcy0+aXNEb2N1bWVudEZyYWdtZW50ICYmICEgJGlubmVyTWFya3VwKQoJCQkJZm9yZWFjaCgkbm9kZXMgYXMgJGkgPT4gJG5vZGUpCgkJCQkJaWYgKCRub2RlLT5pc1NhbWVOb2RlKCR0aGlzLT5yb290KSkgewoJCQkJCS8vCXZhcl9kdW1wKCRub2RlKTsKCQkJCQkJJG5vZGVzID0gYXJyYXlfc2xpY2UoJG5vZGVzLCAwLCAkaSkKCQkJCQkJCSsgcGhwUXVlcnk6OkRPTU5vZGVMaXN0VG9BcnJheSgkbm9kZS0+Y2hpbGROb2RlcykKCQkJCQkJCSsgYXJyYXlfc2xpY2UoJG5vZGVzLCAkaSsxKTsKCQkJCQkJfQoJCQlpZiAoJHRoaXMtPmlzWE1MICYmICEgJGlubmVyTWFya3VwKSB7CgkJCQlzZWxmOjpkZWJ1ZygiR2V0dGluZyBvdXRlclhNTCB3aXRoIGNoYXJzZXQgJ3skdGhpcy0+Y2hhcnNldH0nIik7CgkJCQkvLyB3ZSBuZWVkIG91dGVyWE1MLCBzbyB3ZSBjYW4gYmVuZWZpdCBmcm9tCgkJCQkvLyAkbm9kZSBwYXJhbSBzdXBwb3J0IGluIHNhdmVYTUwoKQoJCQkJZm9yZWFjaCgkbm9kZXMgYXMgJG5vZGUpCgkJCQkJJG1hcmt1cCAuPSAkdGhpcy0+ZG9jdW1lbnQtPnNhdmVYTUwoJG5vZGUpOwoJCQl9IGVsc2UgewoJCQkJJGxvb3AgPSBhcnJheSgpOwoJCQkJaWYgKCRpbm5lck1hcmt1cCkKCQkJCQlmb3JlYWNoKCRub2RlcyBhcyAkbm9kZSkgewoJCQkJCQlpZiAoJG5vZGUtPmNoaWxkTm9kZXMpCgkJCQkJCQlmb3JlYWNoKCRub2RlLT5jaGlsZE5vZGVzIGFzICRjaGlsZCkKCQkJCQkJCQkkbG9vcFtdID0gJGNoaWxkOwoJCQkJCQllbHNlCgkJCQkJCQkkbG9vcFtdID0gJG5vZGU7CgkJCQkJfQoJCQkJZWxzZQoJCQkJCSRsb29wID0gJG5vZGVzOwoJCQkJc2VsZjo6ZGVidWcoIkdldHRpbmcgbWFya3VwLCBtb3Zpbmcgc2VsZWN0ZWQgbm9kZXMgKCIuY291bnQoJGxvb3ApLiIpIHRvIG5ldyBEb2N1bWVudEZyYWdtZW50Iik7CgkJCQkkZmFrZSA9ICR0aGlzLT5kb2N1bWVudEZyYWdtZW50Q3JlYXRlKCRsb29wKTsKCQkJCSRtYXJrdXAgPSAkdGhpcy0+ZG9jdW1lbnRGcmFnbWVudFRvTWFya3VwKCRmYWtlKTsKCQkJfQoJCQlpZiAoJHRoaXMtPmlzWEhUTUwpIHsKCQkJCXNlbGY6OmRlYnVnKCJGaXhpbmcgWEhUTUwiKTsKCQkJCSRtYXJrdXAgPSBzZWxmOjptYXJrdXBGaXhYSFRNTCgkbWFya3VwKTsKCQkJfQoJCQlzZWxmOjpkZWJ1ZygiTWFya3VwOiAiLnN1YnN0cigkbWFya3VwLCAwLCAyNTApKTsKCQkJcmV0dXJuICRtYXJrdXA7CgkJfSBlbHNlIHsKCQkJaWYgKCR0aGlzLT5pc0RvY3VtZW50RnJhZ21lbnQpIHsKCQkJCS8vIGRvY3VtZW50RnJhZ21lbnQsIGh0bWwgb25seS4uLgoJCQkJc2VsZjo6ZGVidWcoIkdldHRpbmcgbWFya3VwLCBEb2N1bWVudEZyYWdtZW50IGRldGVjdGVkIik7Ci8vCQkJCXJldHVybiAkdGhpcy0+bWFya3VwKAovLy8vCQkJCQkkdGhpcy0+ZG9jdW1lbnQtPmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JyktPml0ZW0oMCkKLy8JCQkJCSR0aGlzLT5kb2N1bWVudC0+cm9vdCwgdHJ1ZQovLwkJCQkpOwoJCQkJJG1hcmt1cCA9ICR0aGlzLT5kb2N1bWVudEZyYWdtZW50VG9NYXJrdXAoJHRoaXMpOwoJCQkJLy8gbm8gbmVlZCBmb3IgbWFya3VwRml4WEhUTUwsIGFzIGl0J3MgZG9uZSB0aG91Z2h0IG1hcmt1cCgkbm9kZXMpIG1ldGhvZAoJCQkJcmV0dXJuICRtYXJrdXA7CgkJCX0gZWxzZSB7CgkJCQlzZWxmOjpkZWJ1ZygiR2V0dGluZyBtYXJrdXAgKCIuKCR0aGlzLT5pc1hNTD8nWE1MJzonSFRNTCcpLiIpLCBmaW5hbCB3aXRoIGNoYXJzZXQgJ3skdGhpcy0+Y2hhcnNldH0nIik7CgkJCQkkbWFya3VwID0gJHRoaXMtPmlzWE1MCgkJCQkJPyAkdGhpcy0+ZG9jdW1lbnQtPnNhdmVYTUwoKQoJCQkJCTogJHRoaXMtPmRvY3VtZW50LT5zYXZlSFRNTCgpOwoJCQkJaWYgKCR0aGlzLT5pc1hIVE1MKSB7CgkJCQkJc2VsZjo6ZGVidWcoIkZpeGluZyBYSFRNTCIpOwoJCQkJCSRtYXJrdXAgPSBzZWxmOjptYXJrdXBGaXhYSFRNTCgkbWFya3VwKTsKCQkJCX0KCQkJCXNlbGY6OmRlYnVnKCJNYXJrdXA6ICIuc3Vic3RyKCRtYXJrdXAsIDAsIDI1MCkpOwoJCQkJcmV0dXJuICRtYXJrdXA7CgkJCX0KCQl9Cgl9Cglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIG1hcmt1cEZpeFhIVE1MKCRtYXJrdXApIHsKCQkkbWFya3VwID0gc2VsZjo6ZXhwYW5kRW1wdHlUYWcoJ3NjcmlwdCcsICRtYXJrdXApOwoJCSRtYXJrdXAgPSBzZWxmOjpleHBhbmRFbXB0eVRhZygnc2VsZWN0JywgJG1hcmt1cCk7CgkJJG1hcmt1cCA9IHNlbGY6OmV4cGFuZEVtcHR5VGFnKCd0ZXh0YXJlYScsICRtYXJrdXApOwoJCXJldHVybiAkbWFya3VwOwoJfQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkZWJ1ZygkdGV4dCkgewoJCXBocFF1ZXJ5OjpkZWJ1ZygkdGV4dCk7Cgl9CgkvKioKCSAqIGV4cGFuZEVtcHR5VGFnCgkgKgoJICogQHBhcmFtICR0YWcKCSAqIEBwYXJhbSAkeG1sCgkgKiBAcmV0dXJuIHVua25vd25fdHlwZQoJICogQGF1dGhvciBtamFxdWUgYXQgaWxrZWJlbnNvbiBkb3QgY29tCgkgKiBAbGluayBodHRwOi8vcGhwLm5ldC9tYW51YWwvZW4vZG9tZG9jdW1lbnQuc2F2ZWh0bWwucGhwIzgxMjU2CgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZXhwYW5kRW1wdHlUYWcoJHRhZywgJHhtbCl7CiAgICAgICAgJGluZGljZSA9IDA7CiAgICAgICAgd2hpbGUgKCRpbmRpY2U8IHN0cmxlbigkeG1sKSl7CiAgICAgICAgICAgICRwb3MgPSBzdHJwb3MoJHhtbCwgIjwkdGFnICIsICRpbmRpY2UpOwogICAgICAgICAgICBpZiAoJHBvcyl7CiAgICAgICAgICAgICAgICAkcG9zQ2llcnJlID0gc3RycG9zKCR4bWwsICI+IiwgJHBvcyk7CiAgICAgICAgICAgICAgICBpZiAoJHhtbFskcG9zQ2llcnJlLTFdID09ICIvIil7CiAgICAgICAgICAgICAgICAgICAgJHhtbCA9IHN1YnN0cl9yZXBsYWNlKCR4bWwsICI+PC8kdGFnPiIsICRwb3NDaWVycmUtMSwgMik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkaW5kaWNlID0gJHBvc0NpZXJyZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGJyZWFrOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHhtbDsKCX0KfQoKLyoqCiAqIEV2ZW50IGhhbmRsaW5nIGNsYXNzLgogKgogKiBAYXV0aG9yIFRvYmlhc3ogQ3VkbmlrCiAqIEBwYWNrYWdlIHBocFF1ZXJ5CiAqIEBzdGF0aWMKICovCmFic3RyYWN0IGNsYXNzIHBocFF1ZXJ5RXZlbnRzIHsKCS8qKgoJICogVHJpZ2dlciBhIHR5cGUgb2YgZXZlbnQgb24gZXZlcnkgbWF0Y2hlZCBlbGVtZW50LgoJICoKCSAqIEBwYXJhbSBET01Ob2RlfHBocFF1ZXJ5T2JqZWN0fHN0cmluZyAkZG9jdW1lbnQKCSAqIEBwYXJhbSB1bmtub3duX3R5cGUgJHR5cGUKCSAqIEBwYXJhbSB1bmtub3duX3R5cGUgJGRhdGEKCSAqCgkgKiBAVE9ETyBleGNsdXNpdmUgZXZlbnRzICh3aXRoICEpCgkgKiBAVE9ETyBnbG9iYWwgZXZlbnRzICh0ZXN0KQoJICogQFRPRE8gc3VwcG9ydCBtb3JlIHRoYW4gZXZlbnQgaW4gJHR5cGUgKHNwYWNlLXNlcGFyYXRlZCkKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiB0cmlnZ2VyKCRkb2N1bWVudCwgJHR5cGUsICRkYXRhID0gYXJyYXkoKSwgJG5vZGUgPSBudWxsKSB7CgkJLy8gdHJpZ2dlcjogZnVuY3Rpb24odHlwZSwgZGF0YSwgZWxlbSwgZG9uYXRpdmUsIGV4dHJhKSB7CgkJJGRvY3VtZW50SUQgPSBwaHBRdWVyeTo6Z2V0RG9jdW1lbnRJRCgkZG9jdW1lbnQpOwoJCSRuYW1lc3BhY2UgPSBudWxsOwoJCWlmIChzdHJwb3MoJHR5cGUsICcuJykgIT09IGZhbHNlKQoJCQlsaXN0KCRuYW1lLCAkbmFtZXNwYWNlKSA9IGV4cGxvZGUoJy4nLCAkdHlwZSk7CgkJZWxzZQoJCQkkbmFtZSA9ICR0eXBlOwoJCWlmICghICRub2RlKSB7CgkJCWlmIChzZWxmOjppc3NldEdsb2JhbCgkZG9jdW1lbnRJRCwgJHR5cGUpKSB7CgkJCQkkcHEgPSBwaHBRdWVyeTo6Z2V0RG9jdW1lbnQoJGRvY3VtZW50SUQpOwoJCQkJLy8gVE9ETyBjaGVjayBhZGQoJHBxLT5kb2N1bWVudCkKCQkJCSRwcS0+ZmluZCgnKicpLT5hZGQoJHBxLT5kb2N1bWVudCkKCQkJCQktPnRyaWdnZXIoJHR5cGUsICRkYXRhKTsKCQkJfQoJCX0gZWxzZSB7CgkJCWlmIChpc3NldCgkZGF0YVswXSkgJiYgJGRhdGFbMF0gaW5zdGFuY2VvZiBET01FdmVudCkgewoJCQkJJGV2ZW50ID0gJGRhdGFbMF07CgkJCQkkZXZlbnQtPnJlbGF0ZWRUYXJnZXQgPSAkZXZlbnQtPnRhcmdldDsKCQkJCSRldmVudC0+dGFyZ2V0ID0gJG5vZGU7CgkJCQkkZGF0YSA9IGFycmF5X3NsaWNlKCRkYXRhLCAxKTsKCQkJfSBlbHNlIHsKCQkJCSRldmVudCA9IG5ldyBET01FdmVudChhcnJheSgKCQkJCQkndHlwZScgPT4gJHR5cGUsCgkJCQkJJ3RhcmdldCcgPT4gJG5vZGUsCgkJCQkJJ3RpbWVTdGFtcCcgPT4gdGltZSgpLAoJCQkJKSk7CgkJCX0KCQkJJGkgPSAwOwoJCQl3aGlsZSgkbm9kZSkgewoJCQkJLy8gVE9ETyB3aG9pcwoJCQkJcGhwUXVlcnk6OmRlYnVnKCJUcmlnZ2VyaW5nICIuKCRpPyJidWJibGVkICI6JycpLiJldmVudCAneyR0eXBlfScgb24gIgoJCQkJCS4ibm9kZSBcbiIpOy8vLnBocFF1ZXJ5T2JqZWN0Ojp3aG9pcygkbm9kZSkuIlxuIik7CgkJCQkkZXZlbnQtPmN1cnJlbnRUYXJnZXQgPSAkbm9kZTsKCQkJCSRldmVudE5vZGUgPSBzZWxmOjpnZXROb2RlKCRkb2N1bWVudElELCAkbm9kZSk7CgkJCQlpZiAoaXNzZXQoJGV2ZW50Tm9kZS0+ZXZlbnRIYW5kbGVycykpIHsKCQkJCQlmb3JlYWNoKCRldmVudE5vZGUtPmV2ZW50SGFuZGxlcnMgYXMgJGV2ZW50VHlwZSA9PiAkaGFuZGxlcnMpIHsKCQkJCQkJJGV2ZW50TmFtZXNwYWNlID0gbnVsbDsKCQkJCQkJaWYgKHN0cnBvcygkdHlwZSwgJy4nKSAhPT0gZmFsc2UpCgkJCQkJCQlsaXN0KCRldmVudE5hbWUsICRldmVudE5hbWVzcGFjZSkgPSBleHBsb2RlKCcuJywgJGV2ZW50VHlwZSk7CgkJCQkJCWVsc2UKCQkJCQkJCSRldmVudE5hbWUgPSAkZXZlbnRUeXBlOwoJCQkJCQlpZiAoJG5hbWUgIT0gJGV2ZW50TmFtZSkKCQkJCQkJCWNvbnRpbnVlOwoJCQkJCQlpZiAoJG5hbWVzcGFjZSAmJiAkZXZlbnROYW1lc3BhY2UgJiYgJG5hbWVzcGFjZSAhPSAkZXZlbnROYW1lc3BhY2UpCgkJCQkJCQljb250aW51ZTsKCQkJCQkJZm9yZWFjaCgkaGFuZGxlcnMgYXMgJGhhbmRsZXIpIHsKCQkJCQkJCXBocFF1ZXJ5OjpkZWJ1ZygiQ2FsbGluZyBldmVudCBoYW5kbGVyXG4iKTsKCQkJCQkJCSRldmVudC0+ZGF0YSA9ICRoYW5kbGVyWydkYXRhJ10KCQkJCQkJCQk/ICRoYW5kbGVyWydkYXRhJ10KCQkJCQkJCQk6IG51bGw7CgkJCQkJCQkkcGFyYW1zID0gYXJyYXlfbWVyZ2UoYXJyYXkoJGV2ZW50KSwgJGRhdGEpOwoJCQkJCQkJJHJldHVybiA9IHBocFF1ZXJ5OjpjYWxsYmFja1J1bigkaGFuZGxlclsnY2FsbGJhY2snXSwgJHBhcmFtcyk7CgkJCQkJCQlpZiAoJHJldHVybiA9PT0gZmFsc2UpIHsKCQkJCQkJCQkkZXZlbnQtPmJ1YmJsZXMgPSBmYWxzZTsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJCS8vIHRvIGJ1YmJsZSBvciBub3QgdG8gYnViYmxlLi4uCgkJCQlpZiAoISAkZXZlbnQtPmJ1YmJsZXMpCgkJCQkJYnJlYWs7CgkJCQkkbm9kZSA9ICRub2RlLT5wYXJlbnROb2RlOwoJCQkJJGkrKzsKCQkJfQoJCX0KCX0KCS8qKgoJICogQmluZHMgYSBoYW5kbGVyIHRvIG9uZSBvciBtb3JlIGV2ZW50cyAobGlrZSBjbGljaykgZm9yIGVhY2ggbWF0Y2hlZCBlbGVtZW50LgoJICogQ2FuIGFsc28gYmluZCBjdXN0b20gZXZlbnRzLgoJICoKCSAqIEBwYXJhbSBET01Ob2RlfHBocFF1ZXJ5T2JqZWN0fHN0cmluZyAkZG9jdW1lbnQKCSAqIEBwYXJhbSB1bmtub3duX3R5cGUgJHR5cGUKCSAqIEBwYXJhbSB1bmtub3duX3R5cGUgJGRhdGEgT3B0aW9uYWwKCSAqIEBwYXJhbSB1bmtub3duX3R5cGUgJGNhbGxiYWNrCgkgKgoJICogQFRPRE8gc3VwcG9ydCAnIScgKGV4Y2x1c2l2ZSkgZXZlbnRzCgkgKiBAVE9ETyBzdXBwb3J0IG1vcmUgdGhhbiBldmVudCBpbiAkdHlwZSAoc3BhY2Utc2VwYXJhdGVkKQoJICogQFRPRE8gc3VwcG9ydCBiaW5kaW5nIHRvIGdsb2JhbCBldmVudHMKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBhZGQoJGRvY3VtZW50LCAkbm9kZSwgJHR5cGUsICRkYXRhLCAkY2FsbGJhY2sgPSBudWxsKSB7CgkJcGhwUXVlcnk6OmRlYnVnKCJCaW5kaW5nICckdHlwZScgZXZlbnQiKTsKCQkkZG9jdW1lbnRJRCA9IHBocFF1ZXJ5OjpnZXREb2N1bWVudElEKCRkb2N1bWVudCk7Ci8vCQlpZiAoaXNfbnVsbCgkY2FsbGJhY2spICYmIGlzX2NhbGxhYmxlKCRkYXRhKSkgewovLwkJCSRjYWxsYmFjayA9ICRkYXRhOwovLwkJCSRkYXRhID0gbnVsbDsKLy8JCX0KCQkkZXZlbnROb2RlID0gc2VsZjo6Z2V0Tm9kZSgkZG9jdW1lbnRJRCwgJG5vZGUpOwoJCWlmICghICRldmVudE5vZGUpCgkJCSRldmVudE5vZGUgPSBzZWxmOjpzZXROb2RlKCRkb2N1bWVudElELCAkbm9kZSk7CgkJaWYgKCFpc3NldCgkZXZlbnROb2RlLT5ldmVudEhhbmRsZXJzWyR0eXBlXSkpCgkJCSRldmVudE5vZGUtPmV2ZW50SGFuZGxlcnNbJHR5cGVdID0gYXJyYXkoKTsKCQkkZXZlbnROb2RlLT5ldmVudEhhbmRsZXJzWyR0eXBlXVtdID0gYXJyYXkoCgkJCSdjYWxsYmFjaycgPT4gJGNhbGxiYWNrLAoJCQknZGF0YScgPT4gJGRhdGEsCgkJKTsKCX0KCS8qKgoJICogRW50ZXIgZGVzY3JpcHRpb24gaGVyZS4uLgoJICoKCSAqIEBwYXJhbSBET01Ob2RlfHBocFF1ZXJ5T2JqZWN0fHN0cmluZyAkZG9jdW1lbnQKCSAqIEBwYXJhbSB1bmtub3duX3R5cGUgJHR5cGUKCSAqIEBwYXJhbSB1bmtub3duX3R5cGUgJGNhbGxiYWNrCgkgKgoJICogQFRPRE8gbmFtZXNwYWNlIGV2ZW50cwoJICogQFRPRE8gc3VwcG9ydCBtb3JlIHRoYW4gZXZlbnQgaW4gJHR5cGUgKHNwYWNlLXNlcGFyYXRlZCkKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZW1vdmUoJGRvY3VtZW50LCAkbm9kZSwgJHR5cGUgPSBudWxsLCAkY2FsbGJhY2sgPSBudWxsKSB7CgkJJGRvY3VtZW50SUQgPSBwaHBRdWVyeTo6Z2V0RG9jdW1lbnRJRCgkZG9jdW1lbnQpOwoJCSRldmVudE5vZGUgPSBzZWxmOjpnZXROb2RlKCRkb2N1bWVudElELCAkbm9kZSk7CgkJaWYgKGlzX29iamVjdCgkZXZlbnROb2RlKSAmJiBpc3NldCgkZXZlbnROb2RlLT5ldmVudEhhbmRsZXJzWyR0eXBlXSkpIHsKCQkJaWYgKCRjYWxsYmFjaykgewoJCQkJZm9yZWFjaCgkZXZlbnROb2RlLT5ldmVudEhhbmRsZXJzWyR0eXBlXSBhcyAkayA9PiAkaGFuZGxlcikKCQkJCQlpZiAoJGhhbmRsZXJbJ2NhbGxiYWNrJ10gPT0gJGNhbGxiYWNrKQoJCQkJCQl1bnNldCgkZXZlbnROb2RlLT5ldmVudEhhbmRsZXJzWyR0eXBlXVska10pOwoJCQl9IGVsc2UgewoJCQkJdW5zZXQoJGV2ZW50Tm9kZS0+ZXZlbnRIYW5kbGVyc1skdHlwZV0pOwoJCQl9CgkJfQoJfQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBnZXROb2RlKCRkb2N1bWVudElELCAkbm9kZSkgewoJCWZvcmVhY2gocGhwUXVlcnk6OiRkb2N1bWVudHNbJGRvY3VtZW50SURdLT5ldmVudHNOb2RlcyBhcyAkZXZlbnROb2RlKSB7CgkJCWlmICgkbm9kZS0+aXNTYW1lTm9kZSgkZXZlbnROb2RlKSkKCQkJCXJldHVybiAkZXZlbnROb2RlOwoJCX0KCX0KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gc2V0Tm9kZSgkZG9jdW1lbnRJRCwgJG5vZGUpIHsKCQlwaHBRdWVyeTo6JGRvY3VtZW50c1skZG9jdW1lbnRJRF0tPmV2ZW50c05vZGVzW10gPSAkbm9kZTsKCQlyZXR1cm4gcGhwUXVlcnk6OiRkb2N1bWVudHNbJGRvY3VtZW50SURdLT5ldmVudHNOb2Rlc1sKCQkJY291bnQocGhwUXVlcnk6OiRkb2N1bWVudHNbJGRvY3VtZW50SURdLT5ldmVudHNOb2RlcyktMQoJCV07Cgl9Cglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGlzc2V0R2xvYmFsKCRkb2N1bWVudElELCAkdHlwZSkgewoJCXJldHVybiBpc3NldChwaHBRdWVyeTo6JGRvY3VtZW50c1skZG9jdW1lbnRJRF0pCgkJCT8gaW5fYXJyYXkoJHR5cGUsIHBocFF1ZXJ5OjokZG9jdW1lbnRzWyRkb2N1bWVudElEXS0+ZXZlbnRzR2xvYmFsKQoJCQk6IGZhbHNlOwoJfQp9CgoKaW50ZXJmYWNlIElDYWxsYmFja05hbWVkIHsKCWZ1bmN0aW9uIGhhc05hbWUoKTsKCWZ1bmN0aW9uIGdldE5hbWUoKTsKfQovKioKICogQ2FsbGJhY2sgY2xhc3MgaW50cm9kdWNlcyBjdXJyeWluZy1saWtlIHBhdHRlcm4uCiAqCiAqIEV4YW1wbGU6CiAqIGZ1bmN0aW9uIGZvbygkcGFyYW0xLCAkcGFyYW0yLCAkcGFyYW0zKSB7CiAqICAgdmFyX2R1bXAoJHBhcmFtMSwgJHBhcmFtMiwgJHBhcmFtMyk7CiAqIH0KICogJGZvb0N1cnJpZWQgPSBuZXcgQ2FsbGJhY2soJ2ZvbycsCiAqICAgJ3BhcmFtMSBpcyBub3cgc3RhdGljYWxseSBzZXQnLAogKiAgIG5ldyBDYWxsYmFja1BhcmFtLCBuZXcgQ2FsbGJhY2tQYXJhbQogKiApOwogKiBwaHBRdWVyeTo6Y2FsbGJhY2tSdW4oJGZvb0N1cnJpZWQsCiAqIAlhcnJheSgncGFyYW0yIHZhbHVlJywgJ3BhcmFtMyB2YWx1ZScKICogKTsKICoKICogQ2FsbGJhY2sgY2xhc3MgaXMgc3VwcG9ydGVkIGluIGFsbCBwaHBRdWVyeSBtZXRob2RzIHdoaWNoIGFjY2VwdHMgY2FsbGJhY2tzLgogKgogKiBAbGluayBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvcGhwcXVlcnkvd2lraS9DYWxsYmFja3MjUGFyYW1fU3RydWN0dXJlcwogKiBAYXV0aG9yIFRvYmlhc3ogQ3VkbmlrIDx0b2JpYXN6LmN1ZG5pay9nbWFpbC5jb20+CiAqCiAqIEBUT0RPPz8/IHJldHVybiBmYWtlIGZvcndhcmRpbmcgZnVuY3Rpb24gY3JlYXRlZCB2aWEgY3JlYXRlX2Z1bmN0aW9uCiAqIEBUT0RPIGhvbm9yIHBhcmFtU3RydWN0dXJlCiAqLwpjbGFzcyBDYWxsYmFjawoJaW1wbGVtZW50cyBJQ2FsbGJhY2tOYW1lZCB7CglwdWJsaWMgJGNhbGxiYWNrID0gbnVsbDsKCXB1YmxpYyAkcGFyYW1zID0gbnVsbDsKCXByb3RlY3RlZCAkbmFtZTsKCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkY2FsbGJhY2ssICRwYXJhbTEgPSBudWxsLCAkcGFyYW0yID0gbnVsbCwKCQkJJHBhcmFtMyA9IG51bGwpIHsKCQkkcGFyYW1zID0gZnVuY19nZXRfYXJncygpOwoJCSRwYXJhbXMgPSBhcnJheV9zbGljZSgkcGFyYW1zLCAxKTsKCQlpZiAoJGNhbGxiYWNrIGluc3RhbmNlb2YgQ2FsbGJhY2spIHsKCQkJLy8gVE9ETyBpbXBsZW1lbnQgcmVjdXJlbnRpb24KCQl9IGVsc2UgewoJCQkkdGhpcy0+Y2FsbGJhY2sgPSAkY2FsbGJhY2s7CgkJCSR0aGlzLT5wYXJhbXMgPSAkcGFyYW1zOwoJCX0KCX0KCXB1YmxpYyBmdW5jdGlvbiBnZXROYW1lKCkgewoJCXJldHVybiAnQ2FsbGJhY2s6ICcuJHRoaXMtPm5hbWU7Cgl9CglwdWJsaWMgZnVuY3Rpb24gaGFzTmFtZSgpIHsKCQlyZXR1cm4gaXNzZXQoJHRoaXMtPm5hbWUpICYmICR0aGlzLT5uYW1lOwoJfQoJcHVibGljIGZ1bmN0aW9uIHNldE5hbWUoJG5hbWUpIHsKCQkkdGhpcy0+bmFtZSA9ICRuYW1lOwoJCXJldHVybiAkdGhpczsKCX0KCS8vIFRPRE8gdGVzdCBtZQovLwlwdWJsaWMgZnVuY3Rpb24gYWRkUGFyYW1zKCkgewovLwkJJHBhcmFtcyA9IGZ1bmNfZ2V0X2FyZ3MoKTsKLy8JCXJldHVybiBuZXcgQ2FsbGJhY2soJHRoaXMtPmNhbGxiYWNrLCAkdGhpcy0+cGFyYW1zKyRwYXJhbXMpOwovLwl9Cn0KLyoqCiAqIFNob3J0aGFuZCBmb3IgbmV3IENhbGxiYWNrKGNyZWF0ZV9mdW5jdGlvbiguLi4pLCAuLi4pOwogKgogKiBAYXV0aG9yIFRvYmlhc3ogQ3VkbmlrIDx0b2JpYXN6LmN1ZG5pay9nbWFpbC5jb20+CiAqLwpjbGFzcyBDYWxsYmFja0JvZHkgZXh0ZW5kcyBDYWxsYmFjayB7CglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHBhcmFtTGlzdCwgJGNvZGUsICRwYXJhbTEgPSBudWxsLCAkcGFyYW0yID0gbnVsbCwKCQkJJHBhcmFtMyA9IG51bGwpIHsKCQkkcGFyYW1zID0gZnVuY19nZXRfYXJncygpOwoJCSRwYXJhbXMgPSBhcnJheV9zbGljZSgkcGFyYW1zLCAyKTsKCQkkdGhpcy0+Y2FsbGJhY2sgPSBjcmVhdGVfZnVuY3Rpb24oJHBhcmFtTGlzdCwgJGNvZGUpOwoJCSR0aGlzLT5wYXJhbXMgPSAkcGFyYW1zOwoJfQp9Ci8qKgogKiBDYWxsYmFjayB0eXBlIHdoaWNoIG9uIGV4ZWN1dGlvbiByZXR1cm5zIHJlZmVyZW5jZSBwYXNzZWQgZHVyaW5nIGNyZWF0aW9uLgogKgogKiBAYXV0aG9yIFRvYmlhc3ogQ3VkbmlrIDx0b2JpYXN6LmN1ZG5pay9nbWFpbC5jb20+CiAqLwpjbGFzcyBDYWxsYmFja1JldHVyblJlZmVyZW5jZSBleHRlbmRzIENhbGxiYWNrCglpbXBsZW1lbnRzIElDYWxsYmFja05hbWVkIHsKCXByb3RlY3RlZCAkcmVmZXJlbmNlOwoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCYkcmVmZXJlbmNlLCAkbmFtZSA9IG51bGwpewoJCSR0aGlzLT5yZWZlcmVuY2UgPSYgJHJlZmVyZW5jZTsKCQkkdGhpcy0+Y2FsbGJhY2sgPSBhcnJheSgkdGhpcywgJ2NhbGxiYWNrJyk7Cgl9CglwdWJsaWMgZnVuY3Rpb24gY2FsbGJhY2soKSB7CgkJcmV0dXJuICR0aGlzLT5yZWZlcmVuY2U7Cgl9CglwdWJsaWMgZnVuY3Rpb24gZ2V0TmFtZSgpIHsKCQlyZXR1cm4gJ0NhbGxiYWNrOiAnLiR0aGlzLT5uYW1lOwoJfQoJcHVibGljIGZ1bmN0aW9uIGhhc05hbWUoKSB7CgkJcmV0dXJuIGlzc2V0KCR0aGlzLT5uYW1lKSAmJiAkdGhpcy0+bmFtZTsKCX0KfQovKioKICogQ2FsbGJhY2sgdHlwZSB3aGljaCBvbiBleGVjdXRpb24gcmV0dXJucyB2YWx1ZSBwYXNzZWQgZHVyaW5nIGNyZWF0aW9uLgogKgogKiBAYXV0aG9yIFRvYmlhc3ogQ3VkbmlrIDx0b2JpYXN6LmN1ZG5pay9nbWFpbC5jb20+CiAqLwpjbGFzcyBDYWxsYmFja1JldHVyblZhbHVlIGV4dGVuZHMgQ2FsbGJhY2sKCWltcGxlbWVudHMgSUNhbGxiYWNrTmFtZWQgewoJcHJvdGVjdGVkICR2YWx1ZTsKCXByb3RlY3RlZCAkbmFtZTsKCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkdmFsdWUsICRuYW1lID0gbnVsbCl7CgkJJHRoaXMtPnZhbHVlID0mICR2YWx1ZTsKCQkkdGhpcy0+bmFtZSA9ICRuYW1lOwoJCSR0aGlzLT5jYWxsYmFjayA9IGFycmF5KCR0aGlzLCAnY2FsbGJhY2snKTsKCX0KCXB1YmxpYyBmdW5jdGlvbiBjYWxsYmFjaygpIHsKCQlyZXR1cm4gJHRoaXMtPnZhbHVlOwoJfQoJcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKSB7CgkJcmV0dXJuICR0aGlzLT5nZXROYW1lKCk7Cgl9CglwdWJsaWMgZnVuY3Rpb24gZ2V0TmFtZSgpIHsKCQlyZXR1cm4gJ0NhbGxiYWNrOiAnLiR0aGlzLT5uYW1lOwoJfQoJcHVibGljIGZ1bmN0aW9uIGhhc05hbWUoKSB7CgkJcmV0dXJuIGlzc2V0KCR0aGlzLT5uYW1lKSAmJiAkdGhpcy0+bmFtZTsKCX0KfQovKioKICogQ2FsbGJhY2tQYXJhbWV0ZXJUb1JlZmVyZW5jZSBjYW4gYmUgdXNlZCB3aGVuIHdlIGRvbid0IHJlYWxseSB3YW50IGEgY2FsbGJhY2ssCiAqIG9ubHkgcGFyYW1ldGVyIHBhc3NlZCB0byBpdC4gQ2FsbGJhY2tQYXJhbWV0ZXJUb1JlZmVyZW5jZSB0YWtlcyBmaXJzdAogKiBwYXJhbWV0ZXIncyB2YWx1ZSBhbmQgcGFzc2VzIGl0IHRvIHJlZmVyZW5jZS4KICoKICogQGF1dGhvciBUb2JpYXN6IEN1ZG5payA8dG9iaWFzei5jdWRuaWsvZ21haWwuY29tPgogKi8KY2xhc3MgQ2FsbGJhY2tQYXJhbWV0ZXJUb1JlZmVyZW5jZSBleHRlbmRzIENhbGxiYWNrIHsKCS8qKgoJICogQHBhcmFtICRyZWZlcmVuY2UKCSAqIEBUT0RPIGltcGxlbWVudCAkcGFyYW1JbmRleDsKCSAqIHBhcmFtIGluZGV4IGNob29zZSB3aGljaCBjYWxsYmFjayBwYXJhbSB3aWxsIGJlIHBhc3NlZCB0byByZWZlcmVuY2UKCSAqLwoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCYkcmVmZXJlbmNlKXsKCQkkdGhpcy0+Y2FsbGJhY2sgPSYgJHJlZmVyZW5jZTsKCX0KfQovL2NsYXNzIENhbGxiYWNrUmVmZXJlbmNlIGV4dGVuZHMgQ2FsbGJhY2sgewovLwkvKioKLy8JICoKLy8JICogQHBhcmFtICRyZWZlcmVuY2UKLy8JICogQHBhcmFtICRwYXJhbUluZGV4Ci8vCSAqIEB0b2RvIGltcGxlbWVudCAkcGFyYW1JbmRleDsgcGFyYW0gaW5kZXggY2hvb3NlIHdoaWNoIGNhbGxiYWNrIHBhcmFtIHdpbGwgYmUgcGFzc2VkIHRvIHJlZmVyZW5jZQovLwkgKi8KLy8JcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCYkcmVmZXJlbmNlLCAkbmFtZSA9IG51bGwpewovLwkJJHRoaXMtPmNhbGxiYWNrID0mICRyZWZlcmVuY2U7Ci8vCX0KLy99CmNsYXNzIENhbGxiYWNrUGFyYW0ge30KCi8qKgogKiBDbGFzcyByZXByZXNlbnRpbmcgcGhwUXVlcnkgb2JqZWN0cy4KICoKICogQGF1dGhvciBUb2JpYXN6IEN1ZG5payA8dG9iaWFzei5jdWRuaWsvZ21haWwuY29tPgogKiBAcGFja2FnZSBwaHBRdWVyeQogKiBAbWV0aG9kIHBocFF1ZXJ5T2JqZWN0IGNsb25lKCkgY2xvbmUoKQogKiBAbWV0aG9kIHBocFF1ZXJ5T2JqZWN0IGVtcHR5KCkgZW1wdHkoKQogKiBAbWV0aG9kIHBocFF1ZXJ5T2JqZWN0IG5leHQoKSBuZXh0KCRzZWxlY3RvciA9IG51bGwpCiAqIEBtZXRob2QgcGhwUXVlcnlPYmplY3QgcHJldigpIHByZXYoJHNlbGVjdG9yID0gbnVsbCkKICogQHByb3BlcnR5IEludCAkbGVuZ3RoCiAqLwpjbGFzcyBwaHBRdWVyeU9iamVjdAoJaW1wbGVtZW50cyBJdGVyYXRvciwgQ291bnRhYmxlLCBBcnJheUFjY2VzcyB7CglwdWJsaWMgJGRvY3VtZW50SUQgPSBudWxsOwoJLyoqCgkgKiBET01Eb2N1bWVudCBjbGFzcy4KCSAqCgkgKiBAdmFyIERPTURvY3VtZW50CgkgKi8KCXB1YmxpYyAkZG9jdW1lbnQgPSBudWxsOwoJcHVibGljICRjaGFyc2V0ID0gbnVsbDsKCS8qKgoJICoKCSAqIEB2YXIgRE9NRG9jdW1lbnRXcmFwcGVyCgkgKi8KCXB1YmxpYyAkZG9jdW1lbnRXcmFwcGVyID0gbnVsbDsKCS8qKgoJICogWFBhdGggaW50ZXJmYWNlLgoJICoKCSAqIEB2YXIgRE9NWFBhdGgKCSAqLwoJcHVibGljICR4cGF0aCA9IG51bGw7CgkvKioKCSAqIFN0YWNrIG9mIHNlbGVjdGVkIGVsZW1lbnRzLgoJICogQFRPRE8gcmVmYWN0b3IgdG8gLT5ub2RlcwoJICogQHZhciBhcnJheQoJICovCglwdWJsaWMgJGVsZW1lbnRzID0gYXJyYXkoKTsKCS8qKgoJICogQGFjY2VzcyBwcml2YXRlCgkgKi8KCXByb3RlY3RlZCAkZWxlbWVudHNCYWNrdXAgPSBhcnJheSgpOwoJLyoqCgkgKiBAYWNjZXNzIHByaXZhdGUKCSAqLwoJcHJvdGVjdGVkICRwcmV2aW91cyA9IG51bGw7CgkvKioKCSAqIEBhY2Nlc3MgcHJpdmF0ZQoJICogQFRPRE8gZGVwcmVjYXRlCgkgKi8KCXByb3RlY3RlZCAkcm9vdCA9IGFycmF5KCk7CgkvKioKCSAqIEluZGljYXRlZCBpZiBkb3VtZW50IGlzIGp1c3QgYSBmcmFnbWVudCAobm8gPGh0bWw+IHRhZykuCgkgKgoJICogRXZlcnkgZG9jdW1lbnQgaXMgcmVhbHkgYSBmdWxsIGRvY3VtZW50LCBzbyBldmVuIGRvY3VtZW50RnJhZ21lbnRzIGNhbgoJICogYmUgcXVlcmllZCBhZ2FpbnN0IDxodG1sPiwgYnV0IGdldERvY3VtZW50KGlkKS0+aHRtbE91dGVyKCkgd2lsbCByZXR1cm4KCSAqIG9ubHkgY29udGVudHMgb2YgPGJvZHk+LgoJICoKCSAqIEB2YXIgYm9vbAoJICovCglwdWJsaWMgJGRvY3VtZW50RnJhZ21lbnQgPSB0cnVlOwoJLyoqCgkgKiBJdGVyYXRvciBpbnRlcmZhY2UgaGVscGVyCgkgKiBAYWNjZXNzIHByaXZhdGUKCSAqLwoJcHJvdGVjdGVkICRlbGVtZW50c0ludGVyYXRvciA9IGFycmF5KCk7CgkvKioKCSAqIEl0ZXJhdG9yIGludGVyZmFjZSBoZWxwZXIKCSAqIEBhY2Nlc3MgcHJpdmF0ZQoJICovCglwcm90ZWN0ZWQgJHZhbGlkID0gZmFsc2U7CgkvKioKCSAqIEl0ZXJhdG9yIGludGVyZmFjZSBoZWxwZXIKCSAqIEBhY2Nlc3MgcHJpdmF0ZQoJICovCglwcm90ZWN0ZWQgJGN1cnJlbnQgPSBudWxsOwoJLyoqCgkgKiBFbnRlciBkZXNjcmlwdGlvbiBoZXJlLi4uCgkgKgoJICogQHJldHVybiBwaHBRdWVyeU9iamVjdHxRdWVyeVRlbXBsYXRlc1NvdXJjZXxRdWVyeVRlbXBsYXRlc1BhcnNlfFF1ZXJ5VGVtcGxhdGVzU291cmNlUXVlcnkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRkb2N1bWVudElEKSB7Ci8vCQlpZiAoJGRvY3VtZW50SUQgaW5zdGFuY2VvZiBzZWxmKQovLwkJCXZhcl9kdW1wKCRkb2N1bWVudElELT5nZXREb2N1bWVudElEKCkpOwoJCSRpZCA9ICRkb2N1bWVudElEIGluc3RhbmNlb2Ygc2VsZgoJCQk/ICRkb2N1bWVudElELT5nZXREb2N1bWVudElEKCkKCQkJOiAkZG9jdW1lbnRJRDsKLy8JCXZhcl9kdW1wKCRpZCk7CgkJaWYgKCEgaXNzZXQocGhwUXVlcnk6OiRkb2N1bWVudHNbJGlkXSApKSB7Ci8vCQkJdmFyX2R1bXAocGhwUXVlcnk6OiRkb2N1bWVudHMpOwoJCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCJEb2N1bWVudCB3aXRoIElEICd7JGlkfScgaXNuJ3QgbG9hZGVkLiBVc2UgcGhwUXVlcnk6Om5ld0RvY3VtZW50KFwkaHRtbCkgb3IgcGhwUXVlcnk6Om5ld0RvY3VtZW50RmlsZShcJGZpbGUpIGZpcnN0LiIpOwoJCX0KCQkkdGhpcy0+ZG9jdW1lbnRJRCA9ICRpZDsKCQkkdGhpcy0+ZG9jdW1lbnRXcmFwcGVyID0mIHBocFF1ZXJ5OjokZG9jdW1lbnRzWyRpZF07CgkJJHRoaXMtPmRvY3VtZW50ID0mICR0aGlzLT5kb2N1bWVudFdyYXBwZXItPmRvY3VtZW50OwoJCSR0aGlzLT54cGF0aCA9JiAkdGhpcy0+ZG9jdW1lbnRXcmFwcGVyLT54cGF0aDsKCQkkdGhpcy0+Y2hhcnNldCA9JiAkdGhpcy0+ZG9jdW1lbnRXcmFwcGVyLT5jaGFyc2V0OwoJCSR0aGlzLT5kb2N1bWVudEZyYWdtZW50ID0mICR0aGlzLT5kb2N1bWVudFdyYXBwZXItPmlzRG9jdW1lbnRGcmFnbWVudDsKCQkvLyBUT0RPIGNoZWNrICR0aGlzLT5ET00tPmRvY3VtZW50RWxlbWVudDsKLy8JCSR0aGlzLT5yb290ID0gJHRoaXMtPmRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQ7CgkJJHRoaXMtPnJvb3QgPSYgJHRoaXMtPmRvY3VtZW50V3JhcHBlci0+cm9vdDsKLy8JCSR0aGlzLT50b1Jvb3QoKTsKCQkkdGhpcy0+ZWxlbWVudHMgPSBhcnJheSgkdGhpcy0+cm9vdCk7Cgl9CgkvKioKCSAqCgkgKiBAYWNjZXNzIHByaXZhdGUKCSAqIEBwYXJhbSAkYXR0cgoJICogQHJldHVybiB1bmtub3duX3R5cGUKCSAqLwoJcHVibGljIGZ1bmN0aW9uIF9fZ2V0KCRhdHRyKSB7CgkJc3dpdGNoKCRhdHRyKSB7CgkJCS8vIEZJWE1FIGRvZXNudCB3b3JrIGF0IGFsbCA/CgkJCWNhc2UgJ2xlbmd0aCc6CgkJCQlyZXR1cm4gJHRoaXMtPnNpemUoKTsKCQkJYnJlYWs7CgkJCWRlZmF1bHQ6CgkJCQlyZXR1cm4gJHRoaXMtPiRhdHRyOwoJCX0KCX0KCS8qKgoJICogU2F2ZXMgYWN0dWFsIG9iamVjdCB0byAkdmFyIGJ5IHJlZmVyZW5jZS4KCSAqIFVzZWZ1bCB3aGVuIG5lZWQgdG8gYnJlYWsgY2hhaW4uCgkgKiBAcGFyYW0gcGhwUXVlcnlPYmplY3QgJHZhcgoJICogQHJldHVybiBwaHBRdWVyeU9iamVjdHxRdWVyeVRlbXBsYXRlc1NvdXJjZXxRdWVyeVRlbXBsYXRlc1BhcnNlfFF1ZXJ5VGVtcGxhdGVzU291cmNlUXVlcnkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHRvUmVmZXJlbmNlKCYkdmFyKSB7CgkJcmV0dXJuICR2YXIgPSAkdGhpczsKCX0KCXB1YmxpYyBmdW5jdGlvbiBkb2N1bWVudEZyYWdtZW50KCRzdGF0ZSA9IG51bGwpIHsKCQlpZiAoJHN0YXRlKSB7CgkJCXBocFF1ZXJ5OjokZG9jdW1lbnRzWyR0aGlzLT5nZXREb2N1bWVudElEKCldWydkb2N1bWVudEZyYWdtZW50J10gPSAkc3RhdGU7CgkJCXJldHVybiAkdGhpczsKCQl9CgkJcmV0dXJuICR0aGlzLT5kb2N1bWVudEZyYWdtZW50OwoJfQoJLyoqCiAgICogQGFjY2VzcyBwcml2YXRlCiAgICogQFRPRE8gZG9jdW1lbnRXcmFwcGVyCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBpc1Jvb3QoICRub2RlKSB7Ci8vCQlyZXR1cm4gJG5vZGUgaW5zdGFuY2VvZiBET01ET0NVTUVOVCB8fCAkbm9kZS0+dGFnTmFtZSA9PSAnaHRtbCc7CgkJcmV0dXJuICRub2RlIGluc3RhbmNlb2YgRE9NRE9DVU1FTlQKCQkJfHwgKCRub2RlIGluc3RhbmNlb2YgRE9NRUxFTUVOVCAmJiAkbm9kZS0+dGFnTmFtZSA9PSAnaHRtbCcpCgkJCXx8ICR0aGlzLT5yb290LT5pc1NhbWVOb2RlKCRub2RlKTsKCX0KCS8qKgogICAqIEBhY2Nlc3MgcHJpdmF0ZQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gc3RhY2tJc1Jvb3QoKSB7CgkJcmV0dXJuICR0aGlzLT5zaXplKCkgPT0gMSAmJiAkdGhpcy0+aXNSb290KCR0aGlzLT5lbGVtZW50c1swXSk7Cgl9CgkvKioKCSAqIEVudGVyIGRlc2NyaXB0aW9uIGhlcmUuLi4KCSAqIE5PTiBKUVVFUlkgTUVUSE9ECgkgKgoJICogV2F0Y2ggb3V0LCBpdCBkb2Vzbid0IGNyZWF0ZXMgbmV3IGluc3RhbmNlLCBjYW4gYmUgcmV2ZXJ0ZWQgd2l0aCBlbmQoKS4KCSAqCgkgKiBAcmV0dXJuIHBocFF1ZXJ5T2JqZWN0fFF1ZXJ5VGVtcGxhdGVzU291cmNlfFF1ZXJ5VGVtcGxhdGVzUGFyc2V8UXVlcnlUZW1wbGF0ZXNTb3VyY2VRdWVyeQoJICovCglwdWJsaWMgZnVuY3Rpb24gdG9Sb290KCkgewoJCSR0aGlzLT5lbGVtZW50cyA9IGFycmF5KCR0aGlzLT5yb290KTsKCQlyZXR1cm4gJHRoaXM7Ci8vCQlyZXR1cm4gJHRoaXMtPm5ld0luc3RhbmNlKGFycmF5KCR0aGlzLT5yb290KSk7Cgl9CgkvKioKCSAqIFNhdmVzIG9iamVjdCdzIERvY3VtZW50SUQgdG8gJHZhciBieSByZWZlcmVuY2UuCgkgKiA8Y29kZT4KCSAqICRteURvY3VtZW50SWQ7CgkgKiBwaHBRdWVyeTo6bmV3RG9jdW1lbnQoJzxkaXYvPicpCgkgKiAgICAgLT5nZXREb2N1bWVudElEUmVmKCRteURvY3VtZW50SWQpCgkgKiAgICAgLT5maW5kKCdkaXYnKS0+Li4uCgkgKiA8L2NvZGU+CgkgKgoJICogQHBhcmFtIHVua25vd25fdHlwZSAkZG9tSWQKCSAqIEBzZWUgcGhwUXVlcnk6Om5ld0RvY3VtZW50CgkgKiBAc2VlIHBocFF1ZXJ5OjpuZXdEb2N1bWVudEZpbGUKCSAqIEByZXR1cm4gcGhwUXVlcnlPYmplY3R8UXVlcnlUZW1wbGF0ZXNTb3VyY2V8UXVlcnlUZW1wbGF0ZXNQYXJzZXxRdWVyeVRlbXBsYXRlc1NvdXJjZVF1ZXJ5CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXREb2N1bWVudElEUmVmKCYkZG9jdW1lbnRJRCkgewoJCSRkb2N1bWVudElEID0gJHRoaXMtPmdldERvY3VtZW50SUQoKTsKCQlyZXR1cm4gJHRoaXM7Cgl9CgkvKioKCSAqIFJldHVybnMgb2JqZWN0IHdpdGggc3RhY2sgc2V0IHRvIGRvY3VtZW50IHJvb3QuCgkgKgoJICogQHJldHVybiBwaHBRdWVyeU9iamVjdHxRdWVyeVRlbXBsYXRlc1NvdXJjZXxRdWVyeVRlbXBsYXRlc1BhcnNlfFF1ZXJ5VGVtcGxhdGVzU291cmNlUXVlcnkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldERvY3VtZW50KCkgewoJCXJldHVybiBwaHBRdWVyeTo6Z2V0RG9jdW1lbnQoJHRoaXMtPmdldERvY3VtZW50SUQoKSk7Cgl9CgkvKioKCSAqCgkgKiBAcmV0dXJuIERPTURvY3VtZW50CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRET01Eb2N1bWVudCgpIHsKCQlyZXR1cm4gJHRoaXMtPmRvY3VtZW50OwoJfQoJLyoqCgkgKiBHZXQgb2JqZWN0J3MgRG9jdW1lbnQgSUQuCgkgKgoJICogQHJldHVybiBwaHBRdWVyeU9iamVjdHxRdWVyeVRlbXBsYXRlc1NvdXJjZXxRdWVyeVRlbXBsYXRlc1BhcnNlfFF1ZXJ5VGVtcGxhdGVzU291cmNlUXVlcnkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldERvY3VtZW50SUQoKSB7CgkJcmV0dXJuICR0aGlzLT5kb2N1bWVudElEOwoJfQoJLyoqCgkgKiBVbmxvYWRzIHdob2xlIGRvY3VtZW50IGZyb20gbWVtb3J5LgoJICogQ0FVVElPTiEgTm9uZSBmdXJ0aGVyIG9wZXJhdGlvbnMgd2lsbCBiZSBwb3NzaWJsZSBvbiB0aGlzIGRvY3VtZW50LgoJICogQWxsIG9iamVjdHMgcmVmZXJpbmcgdG8gaXQgd2lsbCBiZSB1c2VsZXNzLgoJICoKCSAqIEByZXR1cm4gcGhwUXVlcnlPYmplY3R8UXVlcnlUZW1wbGF0ZXNTb3VyY2V8UXVlcnlUZW1wbGF0ZXNQYXJzZXxRdWVyeVRlbXBsYXRlc1NvdXJjZVF1ZXJ5CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiB1bmxvYWREb2N1bWVudCgpIHsKCQlwaHBRdWVyeTo6dW5sb2FkRG9jdW1lbnRzKCR0aGlzLT5nZXREb2N1bWVudElEKCkpOwoJfQoJcHVibGljIGZ1bmN0aW9uIGlzSFRNTCgpIHsKCQlyZXR1cm4gJHRoaXMtPmRvY3VtZW50V3JhcHBlci0+aXNIVE1MOwoJfQoJcHVibGljIGZ1bmN0aW9uIGlzWEhUTUwoKSB7CgkJcmV0dXJuICR0aGlzLT5kb2N1bWVudFdyYXBwZXItPmlzWEhUTUw7Cgl9CglwdWJsaWMgZnVuY3Rpb24gaXNYTUwoKSB7CgkJcmV0dXJuICR0aGlzLT5kb2N1bWVudFdyYXBwZXItPmlzWE1MOwoJfQoJLyoqCgkgKiBFbnRlciBkZXNjcmlwdGlvbiBoZXJlLi4uCgkgKgoJICogQGxpbmsgaHR0cDovL2RvY3MuanF1ZXJ5LmNvbS9BamF4L3NlcmlhbGl6ZQoJICogQHJldHVybiBzdHJpbmcKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHNlcmlhbGl6ZSgpIHsKCQlyZXR1cm4gcGhwUXVlcnk6OnBhcmFtKCR0aGlzLT5zZXJpYWxpemVBcnJheSgpKTsKCX0KCS8qKgoJICogRW50ZXIgZGVzY3JpcHRpb24gaGVyZS4uLgoJICoKCSAqIEBsaW5rIGh0dHA6Ly9kb2NzLmpxdWVyeS5jb20vQWpheC9zZXJpYWxpemVBcnJheQoJICogQHJldHVybiBhcnJheQoJICovCglwdWJsaWMgZnVuY3Rpb24gc2VyaWFsaXplQXJyYXkoJHN1Ym1pdCA9IG51bGwpIHsKCQkkc291cmNlID0gJHRoaXMtPmZpbHRlcignZm9ybSwgaW5wdXQsIHNlbGVjdCwgdGV4dGFyZWEnKQoJCQktPmZpbmQoJ2lucHV0LCBzZWxlY3QsIHRleHRhcmVhJykKCQkJLT5hbmRTZWxmKCkKCQkJLT5ub3QoJ2Zvcm0nKTsKCQkkcmV0dXJuID0gYXJyYXkoKTsKLy8JCSRzb3VyY2UtPmR1bXBEaWUoKTsKCQlmb3JlYWNoKCRzb3VyY2UgYXMgJGlucHV0KSB7CgkJCSRpbnB1dCA9IHBocFF1ZXJ5OjpwcSgkaW5wdXQpOwoJCQlpZiAoJGlucHV0LT5pcygnW2Rpc2FibGVkXScpKQoJCQkJY29udGludWU7CgkJCWlmICghJGlucHV0LT5pcygnW25hbWVdJykpCgkJCQljb250aW51ZTsKCQkJaWYgKCRpbnB1dC0+aXMoJ1t0eXBlPWNoZWNrYm94XScpICYmICEkaW5wdXQtPmlzKCdbY2hlY2tlZF0nKSkKCQkJCWNvbnRpbnVlOwoJCQkvLyBqcXVlcnkgZGlmZgoJCQlpZiAoJHN1Ym1pdCAmJiAkaW5wdXQtPmlzKCdbdHlwZT1zdWJtaXRdJykpIHsKCQkJCWlmICgkc3VibWl0IGluc3RhbmNlb2YgRE9NRUxFTUVOVCAmJiAhICRpbnB1dC0+ZWxlbWVudHNbMF0tPmlzU2FtZU5vZGUoJHN1Ym1pdCkpCgkJCQkJY29udGludWU7CgkJCQllbHNlIGlmIChpc19zdHJpbmcoJHN1Ym1pdCkgJiYgJGlucHV0LT5hdHRyKCduYW1lJykgIT0gJHN1Ym1pdCkKCQkJCQljb250aW51ZTsKCQkJfQoJCQkkcmV0dXJuW10gPSBhcnJheSgKCQkJCSduYW1lJyA9PiAkaW5wdXQtPmF0dHIoJ25hbWUnKSwKCQkJCSd2YWx1ZScgPT4gJGlucHV0LT52YWwoKSwKCQkJKTsKCQl9CgkJcmV0dXJuICRyZXR1cm47Cgl9CgkvKioKCSAqIEBhY2Nlc3MgcHJpdmF0ZQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gZGVidWcoJGluKSB7CgkJaWYgKCEgcGhwUXVlcnk6OiRkZWJ1ZyApCgkJCXJldHVybjsKCQlwcmludCgnPHByZT4nKTsKCQlwcmludF9yKCRpbik7CgkJLy8gZmlsZSBkZWJ1ZwovLwkJZmlsZV9wdXRfY29udGVudHMoZGlybmFtZShfX0ZJTEVfXykuJy9waHBRdWVyeS5sb2cnLCBwcmludF9yKCRpbiwgdHJ1ZSkuIlxuIiwgRklMRV9BUFBFTkQpOwoJCS8vIHF1aXRlIGhhbmR5IGRlYnVnIHRyYWNlCi8vCQlpZiAoIGlzX2FycmF5KCRpbikpCi8vCQkJcHJpbnRfcihhcnJheV9zbGljZShkZWJ1Z19iYWNrdHJhY2UoKSwgMykpOwoJCXByaW50KCI8L3ByZT5cbiIpOwoJfQoJLyoqCgkgKiBAYWNjZXNzIHByaXZhdGUKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGlzUmVnZXhwKCRwYXR0ZXJuKSB7CgkJcmV0dXJuIGluX2FycmF5KAoJCQkkcGF0dGVyblsgbWJfc3RybGVuKCRwYXR0ZXJuKS0xIF0sCgkJCWFycmF5KCdeJywnKicsJyQnKQoJCSk7Cgl9CgkvKioKCSAqIERldGVybWluZXMgaWYgJGNoYXIgaXMgcmVhbGx5IGEgY2hhci4KCSAqCgkgKiBAcGFyYW0gc3RyaW5nICRjaGFyCgkgKiBAcmV0dXJuIGJvb2wKCSAqIEB0b2RvIHJld3JpdGUgbWUgdG8gY2hhcmNvZGUgcmFuZ2UgISA7KQoJICogQGFjY2VzcyBwcml2YXRlCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBpc0NoYXIoJGNoYXIpIHsKCQlyZXR1cm4gZXh0ZW5zaW9uX2xvYWRlZCgnbWJzdHJpbmcnKSAmJiBwaHBRdWVyeTo6JG1ic3RyaW5nU3VwcG9ydAoJCQk/IG1iX2VyZWdpKCdcdycsICRjaGFyKQoJCQk6IHByZWdfbWF0Y2goJ0Bcd0AnLCAkY2hhcik7Cgl9CgkvKioKCSAqIEBhY2Nlc3MgcHJpdmF0ZQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gcGFyc2VTZWxlY3RvcigkcXVlcnkpIHsKCQkvLyBjbGVhbiBzcGFjZXMKCQkvLyBUT0RPIGluY2x1ZGUgdGhpcyBpbnNpZGUgcGFyc2luZyA/CgkJJHF1ZXJ5ID0gdHJpbSgKCQkJcHJlZ19yZXBsYWNlKCdAXHMrQCcsICcgJywKCQkJCXByZWdfcmVwbGFjZSgnQFxzKig+fFxcK3x+KVxzKkAnLCAnXFwxJywgJHF1ZXJ5KQoJCQkpCgkJKTsKCQkkcXVlcmllcyA9IGFycmF5KGFycmF5KCkpOwoJCWlmICghICRxdWVyeSkKCQkJcmV0dXJuICRxdWVyaWVzOwoJCSRyZXR1cm4gPSYgJHF1ZXJpZXNbMF07CgkJJHNwZWNpYWxDaGFycyA9IGFycmF5KCc+JywnICcpOwovLwkJJHNwZWNpYWxDaGFyc01hcHBpbmcgPSBhcnJheSgnLycgPT4gJz4nKTsKCQkkc3BlY2lhbENoYXJzTWFwcGluZyA9IGFycmF5KCk7CgkJJHN0cmxlbiA9IG1iX3N0cmxlbigkcXVlcnkpOwoJCSRjbGFzc0NoYXJzID0gYXJyYXkoJy4nLCAnLScpOwoJCSRwc2V1ZG9DaGFycyA9IGFycmF5KCctJyk7CgkJJHRhZ0NoYXJzID0gYXJyYXkoJyonLCAnfCcsICctJyk7CgkJLy8gc3BsaXQgbXVsdGlieXRlIHN0cmluZwoJCS8vIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9waHBxdWVyeS9pc3N1ZXMvZGV0YWlsP2lkPTc2CgkJJF9xdWVyeSA9IGFycmF5KCk7CgkJZm9yICgkaT0wOyAkaTwkc3RybGVuOyAkaSsrKQoJCQkkX3F1ZXJ5W10gPSBtYl9zdWJzdHIoJHF1ZXJ5LCAkaSwgMSk7CgkJJHF1ZXJ5ID0gJF9xdWVyeTsKCQkvLyBpdCB3b3JrcywgYnV0IGkgZG9udCBsaWtlIGl0Li4uCgkJJGkgPSAwOwoJCXdoaWxlKCAkaSA8ICRzdHJsZW4pIHsKCQkJJGMgPSAkcXVlcnlbJGldOwoJCQkkdG1wID0gJyc7CgkJCS8vIFRBRwoJCQlpZiAoJHRoaXMtPmlzQ2hhcigkYykgfHwgaW5fYXJyYXkoJGMsICR0YWdDaGFycykpIHsKCQkJCXdoaWxlKGlzc2V0KCRxdWVyeVskaV0pCgkJCQkJJiYgKCR0aGlzLT5pc0NoYXIoJHF1ZXJ5WyRpXSkgfHwgaW5fYXJyYXkoJHF1ZXJ5WyRpXSwgJHRhZ0NoYXJzKSkpIHsKCQkJCQkkdG1wIC49ICRxdWVyeVskaV07CgkJCQkJJGkrKzsKCQkJCX0KCQkJCSRyZXR1cm5bXSA9ICR0bXA7CgkJCS8vIElEcwoJCQl9IGVsc2UgaWYgKCAkYyA9PSAnIycpIHsKCQkJCSRpKys7CgkJCQl3aGlsZSggaXNzZXQoJHF1ZXJ5WyRpXSkgJiYgKCR0aGlzLT5pc0NoYXIoJHF1ZXJ5WyRpXSkgfHwgJHF1ZXJ5WyRpXSA9PSAnLScpKSB7CgkJCQkJJHRtcCAuPSAkcXVlcnlbJGldOwoJCQkJCSRpKys7CgkJCQl9CgkJCQkkcmV0dXJuW10gPSAnIycuJHRtcDsKCQkJLy8gU1BFQ0lBTCBDSEFSUwoJCQl9IGVsc2UgaWYgKGluX2FycmF5KCRjLCAkc3BlY2lhbENoYXJzKSkgewoJCQkJJHJldHVybltdID0gJGM7CgkJCQkkaSsrOwoJCQkvLyBNQVBQRUQgU1BFQ0lBTCBNVUxUSUNIQVJTCi8vCQkJfSBlbHNlIGlmICggJGMuJHF1ZXJ5WyRpKzFdID09ICcvLycpIHsKLy8JCQkJJHJldHVybltdID0gJyAnOwovLwkJCQkkaSA9ICRpKzI7CgkJCS8vIE1BUFBFRCBTUEVDSUFMIENIQVJTCgkJCX0gZWxzZSBpZiAoIGlzc2V0KCRzcGVjaWFsQ2hhcnNNYXBwaW5nWyRjXSkpIHsKCQkJCSRyZXR1cm5bXSA9ICRzcGVjaWFsQ2hhcnNNYXBwaW5nWyRjXTsKCQkJCSRpKys7CgkJCS8vIENPTU1BCgkJCX0gZWxzZSBpZiAoICRjID09ICcsJykgewoJCQkJJHF1ZXJpZXNbXSA9IGFycmF5KCk7CgkJCQkkcmV0dXJuID0mICRxdWVyaWVzWyBjb3VudCgkcXVlcmllcyktMSBdOwoJCQkJJGkrKzsKCQkJCXdoaWxlKCBpc3NldCgkcXVlcnlbJGldKSAmJiAkcXVlcnlbJGldID09ICcgJykKCQkJCQkkaSsrOwoJCQkvLyBDTEFTU0VTCgkJCX0gZWxzZSBpZiAoJGMgPT0gJy4nKSB7CgkJCQl3aGlsZSggaXNzZXQoJHF1ZXJ5WyRpXSkgJiYgKCR0aGlzLT5pc0NoYXIoJHF1ZXJ5WyRpXSkgfHwgaW5fYXJyYXkoJHF1ZXJ5WyRpXSwgJGNsYXNzQ2hhcnMpKSkgewoJCQkJCSR0bXAgLj0gJHF1ZXJ5WyRpXTsKCQkJCQkkaSsrOwoJCQkJfQoJCQkJJHJldHVybltdID0gJHRtcDsKCQkJLy8gfiBHZW5lcmFsIFNpYmxpbmcgU2VsZWN0b3IKCQkJfSBlbHNlIGlmICgkYyA9PSAnficpIHsKCQkJCSRzcGFjZUFsbG93ZWQgPSB0cnVlOwoJCQkJJHRtcCAuPSAkcXVlcnlbJGkrK107CgkJCQl3aGlsZSggaXNzZXQoJHF1ZXJ5WyRpXSkKCQkJCQkmJiAoJHRoaXMtPmlzQ2hhcigkcXVlcnlbJGldKQoJCQkJCQl8fCBpbl9hcnJheSgkcXVlcnlbJGldLCAkY2xhc3NDaGFycykKCQkJCQkJfHwgJHF1ZXJ5WyRpXSA9PSAnKicKCQkJCQkJfHwgKCRxdWVyeVskaV0gPT0gJyAnICYmICRzcGFjZUFsbG93ZWQpCgkJCQkJKSkgewoJCQkJCWlmICgkcXVlcnlbJGldICE9ICcgJykKCQkJCQkJJHNwYWNlQWxsb3dlZCA9IGZhbHNlOwoJCQkJCSR0bXAgLj0gJHF1ZXJ5WyRpXTsKCQkJCQkkaSsrOwoJCQkJfQoJCQkJJHJldHVybltdID0gJHRtcDsKCQkJLy8gKyBBZGphY2VudCBzaWJsaW5nIHNlbGVjdG9ycwoJCQl9IGVsc2UgaWYgKCRjID09ICcrJykgewoJCQkJJHNwYWNlQWxsb3dlZCA9IHRydWU7CgkJCQkkdG1wIC49ICRxdWVyeVskaSsrXTsKCQkJCXdoaWxlKCBpc3NldCgkcXVlcnlbJGldKQoJCQkJCSYmICgkdGhpcy0+aXNDaGFyKCRxdWVyeVskaV0pCgkJCQkJCXx8IGluX2FycmF5KCRxdWVyeVskaV0sICRjbGFzc0NoYXJzKQoJCQkJCQl8fCAkcXVlcnlbJGldID09ICcqJwoJCQkJCQl8fCAoJHNwYWNlQWxsb3dlZCAmJiAkcXVlcnlbJGldID09ICcgJykKCQkJCQkpKSB7CgkJCQkJaWYgKCRxdWVyeVskaV0gIT0gJyAnKQoJCQkJCQkkc3BhY2VBbGxvd2VkID0gZmFsc2U7CgkJCQkJJHRtcCAuPSAkcXVlcnlbJGldOwoJCQkJCSRpKys7CgkJCQl9CgkJCQkkcmV0dXJuW10gPSAkdG1wOwoJCQkvLyBBVFRSUwoJCQl9IGVsc2UgaWYgKCRjID09ICdbJykgewoJCQkJJHN0YWNrID0gMTsKCQkJCSR0bXAgLj0gJGM7CgkJCQl3aGlsZSggaXNzZXQoJHF1ZXJ5WysrJGldKSkgewoJCQkJCSR0bXAgLj0gJHF1ZXJ5WyRpXTsKCQkJCQlpZiAoICRxdWVyeVskaV0gPT0gJ1snKSB7CgkJCQkJCSRzdGFjaysrOwoJCQkJCX0gZWxzZSBpZiAoICRxdWVyeVskaV0gPT0gJ10nKSB7CgkJCQkJCSRzdGFjay0tOwoJCQkJCQlpZiAoISAkc3RhY2sgKQoJCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJfQoJCQkJJHJldHVybltdID0gJHRtcDsKCQkJCSRpKys7CgkJCS8vIFBTRVVETyBDTEFTU0VTCgkJCX0gZWxzZSBpZiAoJGMgPT0gJzonKSB7CgkJCQkkc3RhY2sgPSAxOwoJCQkJJHRtcCAuPSAkcXVlcnlbJGkrK107CgkJCQl3aGlsZSggaXNzZXQoJHF1ZXJ5WyRpXSkgJiYgKCR0aGlzLT5pc0NoYXIoJHF1ZXJ5WyRpXSkgfHwgaW5fYXJyYXkoJHF1ZXJ5WyRpXSwgJHBzZXVkb0NoYXJzKSkpIHsKCQkJCQkkdG1wIC49ICRxdWVyeVskaV07CgkJCQkJJGkrKzsKCQkJCX0KCQkJCS8vIHdpdGggYXJndW1lbnRzID8KCQkJCWlmICggaXNzZXQoJHF1ZXJ5WyRpXSkgJiYgJHF1ZXJ5WyRpXSA9PSAnKCcpIHsKCQkJCQkkdG1wIC49ICRxdWVyeVskaV07CgkJCQkJJHN0YWNrID0gMTsKCQkJCQl3aGlsZSggaXNzZXQoJHF1ZXJ5WysrJGldKSkgewoJCQkJCQkkdG1wIC49ICRxdWVyeVskaV07CgkJCQkJCWlmICggJHF1ZXJ5WyRpXSA9PSAnKCcpIHsKCQkJCQkJCSRzdGFjaysrOwoJCQkJCQl9IGVsc2UgaWYgKCAkcXVlcnlbJGldID09ICcpJykgewoJCQkJCQkJJHN0YWNrLS07CgkJCQkJCQlpZiAoISAkc3RhY2sgKQoJCQkJCQkJCWJyZWFrOwoJCQkJCQl9CgkJCQkJfQoJCQkJCSRyZXR1cm5bXSA9ICR0bXA7CgkJCQkJJGkrKzsKCQkJCX0gZWxzZSB7CgkJCQkJJHJldHVybltdID0gJHRtcDsKCQkJCX0KCQkJfSBlbHNlIHsKCQkJCSRpKys7CgkJCX0KCQl9CgkJZm9yZWFjaCgkcXVlcmllcyBhcyAkayA9PiAkcSkgewoJCQlpZiAoaXNzZXQoJHFbMF0pKSB7CgkJCQlpZiAoaXNzZXQoJHFbMF1bMF0pICYmICRxWzBdWzBdID09ICc6JykKCQkJCQlhcnJheV91bnNoaWZ0KCRxdWVyaWVzWyRrXSwgJyonKTsKCQkJCWlmICgkcVswXSAhPSAnPicpCgkJCQkJYXJyYXlfdW5zaGlmdCgkcXVlcmllc1ska10sICcgJyk7CgkJCX0KCQl9CgkJcmV0dXJuICRxdWVyaWVzOwoJfQoJLyoqCgkgKiBSZXR1cm4gbWF0Y2hlZCBET00gbm9kZXMuCgkgKgoJICogQHBhcmFtIGludCAkaW5kZXgKCSAqIEByZXR1cm4gYXJyYXl8RE9NRWxlbWVudCBTaW5nbGUgRE9NRWxlbWVudCBvciBhcnJheSBvZiBET01FbGVtZW50LgoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0KCRpbmRleCA9IG51bGwsICRjYWxsYmFjazEgPSBudWxsLCAkY2FsbGJhY2syID0gbnVsbCwgJGNhbGxiYWNrMyA9IG51bGwpIHsKCQkkcmV0dXJuID0gaXNzZXQoJGluZGV4KQoJCQk/IChpc3NldCgkdGhpcy0+ZWxlbWVudHNbJGluZGV4XSkgPyAkdGhpcy0+ZWxlbWVudHNbJGluZGV4XSA6IG51bGwpCgkJCTogJHRoaXMtPmVsZW1lbnRzOwoJCS8vIHBhc3MgdGhvdSBjYWxsYmFja3MKCQkkYXJncyA9IGZ1bmNfZ2V0X2FyZ3MoKTsKCQkkYXJncyA9IGFycmF5X3NsaWNlKCRhcmdzLCAxKTsKCQlmb3JlYWNoKCRhcmdzIGFzICRjYWxsYmFjaykgewoJCQlpZiAoaXNfYXJyYXkoJHJldHVybikpCgkJCQlmb3JlYWNoKCRyZXR1cm4gYXMgJGsgPT4gJHYpCgkJCQkJJHJldHVyblska10gPSBwaHBRdWVyeTo6Y2FsbGJhY2tSdW4oJGNhbGxiYWNrLCBhcnJheSgkdikpOwoJCQllbHNlCgkJCQkkcmV0dXJuID0gcGhwUXVlcnk6OmNhbGxiYWNrUnVuKCRjYWxsYmFjaywgYXJyYXkoJHJldHVybikpOwoJCX0KCQlyZXR1cm4gJHJldHVybjsKCX0KCS8qKgoJICogUmV0dXJuIG1hdGNoZWQgRE9NIG5vZGVzLgoJICogalF1ZXJ5IGRpZmZlcmVuY2UuCgkgKgoJICogQHBhcmFtIGludCAkaW5kZXgKCSAqIEByZXR1cm4gYXJyYXl8c3RyaW5nIFJldHVybnMgc3RyaW5nIGlmICRpbmRleCAhPSBudWxsCgkgKiBAdG9kbyBpbXBsZW1lbnQgY2FsbGJhY2tzCgkgKiBAdG9kbyByZXR1cm4gb25seSBhcnJheXMgPwoJICogQHRvZG8gbWF5YmUgb3RoZXIgbmFtZS4uLgoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0U3RyaW5nKCRpbmRleCA9IG51bGwsICRjYWxsYmFjazEgPSBudWxsLCAkY2FsbGJhY2syID0gbnVsbCwgJGNhbGxiYWNrMyA9IG51bGwpIHsKICAgICAgICBpZiAoIWlzX251bGwoJGluZGV4KSAmJiBpc19pbnQoJGluZGV4KSkKCQkJJHJldHVybiA9ICR0aGlzLT5lcSgkaW5kZXgpLT50ZXh0KCk7CgkJZWxzZSB7CgkJCSRyZXR1cm4gPSBhcnJheSgpOwoJCQlmb3IoJGkgPSAwOyAkaSA8ICR0aGlzLT5zaXplKCk7ICRpKyspIHsKCQkJCSRyZXR1cm5bXSA9ICR0aGlzLT5lcSgkaSktPnRleHQoKTsKCQkJfQoJCX0KCQkvLyBwYXNzIHRob3UgY2FsbGJhY2tzCgkJJGFyZ3MgPSBmdW5jX2dldF9hcmdzKCk7CgkJJGFyZ3MgPSBhcnJheV9zbGljZSgkYXJncywgMSk7CgkJZm9yZWFjaCgkYXJncyBhcyAkY2FsbGJhY2spIHsKCQkJJHJldHVybiA9IHBocFF1ZXJ5OjpjYWxsYmFja1J1bigkY2FsbGJhY2ssIGFycmF5KCRyZXR1cm4pKTsKCQl9CgkJcmV0dXJuICRyZXR1cm47Cgl9CgkvKioKCSAqIFJldHVybiBtYXRjaGVkIERPTSBub2Rlcy4KCSAqIGpRdWVyeSBkaWZmZXJlbmNlLgoJICoKCSAqIEBwYXJhbSBpbnQgJGluZGV4CgkgKiBAcmV0dXJuIGFycmF5fHN0cmluZyBSZXR1cm5zIHN0cmluZyBpZiAkaW5kZXggIT0gbnVsbAoJICogQHRvZG8gaW1wbGVtZW50IGNhbGxiYWNrcwoJICogQHRvZG8gcmV0dXJuIG9ubHkgYXJyYXlzID8KCSAqIEB0b2RvIG1heWJlIG90aGVyIG5hbWUuLi4KCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldFN0cmluZ3MoJGluZGV4ID0gbnVsbCwgJGNhbGxiYWNrMSA9IG51bGwsICRjYWxsYmFjazIgPSBudWxsLCAkY2FsbGJhY2szID0gbnVsbCkgewogICAgICAgIGlmICghaXNfbnVsbCgkaW5kZXgpICYmIGlzX2ludCgkaW5kZXgpKQoJCQkkcmV0dXJuID0gJHRoaXMtPmVxKCRpbmRleCktPnRleHQoKTsKCQllbHNlIHsKCQkJJHJldHVybiA9IGFycmF5KCk7CgkJCWZvcigkaSA9IDA7ICRpIDwgJHRoaXMtPnNpemUoKTsgJGkrKykgewoJCQkJJHJldHVybltdID0gJHRoaXMtPmVxKCRpKS0+dGV4dCgpOwoJCQl9CgkJCS8vIHBhc3MgdGhvdSBjYWxsYmFja3MKCQkJJGFyZ3MgPSBmdW5jX2dldF9hcmdzKCk7CgkJCSRhcmdzID0gYXJyYXlfc2xpY2UoJGFyZ3MsIDEpOwoJCX0KCQlmb3JlYWNoKCRhcmdzIGFzICRjYWxsYmFjaykgewoJCQlpZiAoaXNfYXJyYXkoJHJldHVybikpCgkJCQlmb3JlYWNoKCRyZXR1cm4gYXMgJGsgPT4gJHYpCgkJCQkJJHJldHVyblska10gPSBwaHBRdWVyeTo6Y2FsbGJhY2tSdW4oJGNhbGxiYWNrLCBhcnJheSgkdikpOwoJCQllbHNlCgkJCQkkcmV0dXJuID0gcGhwUXVlcnk6OmNhbGxiYWNrUnVuKCRjYWxsYmFjaywgYXJyYXkoJHJldHVybikpOwoJCX0KCQlyZXR1cm4gJHJldHVybjsKCX0KCS8qKgoJICogUmV0dXJucyBuZXcgaW5zdGFuY2Ugb2YgYWN0dWFsIGNsYXNzLgoJICoKCSAqIEBwYXJhbSBhcnJheSAkbmV3U3RhY2sgT3B0aW9uYWwuIFdpbGwgcmVwbGFjZSBvbGQgc3RhY2sgd2l0aCBuZXcgYW5kIG1vdmUgb2xkIG9uZSB0byBoaXN0b3J5LmMKCSAqLwoJcHVibGljIGZ1bmN0aW9uIG5ld0luc3RhbmNlKCRuZXdTdGFjayA9IG51bGwpIHsKCQkkY2xhc3MgPSBnZXRfY2xhc3MoJHRoaXMpOwoJCS8vIHN1cHBvcnQgaW5oZXJpdGFuY2UgYnkgcGFzc2luZyBvbGQgb2JqZWN0IHRvIG92ZXJsb2FkZWQgY29uc3RydWN0b3IKCQkkbmV3ID0gJGNsYXNzICE9ICdwaHBRdWVyeScKCQkJPyBuZXcgJGNsYXNzKCR0aGlzLCAkdGhpcy0+Z2V0RG9jdW1lbnRJRCgpKQoJCQk6IG5ldyBwaHBRdWVyeU9iamVjdCgkdGhpcy0+Z2V0RG9jdW1lbnRJRCgpKTsKCQkkbmV3LT5wcmV2aW91cyA9ICR0aGlzOwoJCWlmIChpc19udWxsKCRuZXdTdGFjaykpIHsKCQkJJG5ldy0+ZWxlbWVudHMgPSAkdGhpcy0+ZWxlbWVudHM7CgkJCWlmICgkdGhpcy0+ZWxlbWVudHNCYWNrdXApCgkJCQkkdGhpcy0+ZWxlbWVudHMgPSAkdGhpcy0+ZWxlbWVudHNCYWNrdXA7CgkJfSBlbHNlIGlmIChpc19zdHJpbmcoJG5ld1N0YWNrKSkgewoJCQkkbmV3LT5lbGVtZW50cyA9IHBocFF1ZXJ5OjpwcSgkbmV3U3RhY2ssICR0aGlzLT5nZXREb2N1bWVudElEKCkpLT5zdGFjaygpOwoJCX0gZWxzZSB7CgkJCSRuZXctPmVsZW1lbnRzID0gJG5ld1N0YWNrOwoJCX0KCQlyZXR1cm4gJG5ldzsKCX0KCS8qKgoJICogRW50ZXIgZGVzY3JpcHRpb24gaGVyZS4uLgoJICoKCSAqIEluIHRoZSBmdXR1cmUsIHdoZW4gUEhQIHdpbGwgc3VwcG9ydCBYTFMgMi4wLCB0aGVuIHdlIHdvdWxkIGRvIHRoYXQgdGhpcyB3YXk6CgkgKiBjb250YWlucyh0b2tlbml6ZShAY2xhc3MsICdccycpLCAic29tZXRoaW5nIikKCSAqIEBwYXJhbSB1bmtub3duX3R5cGUgJGNsYXNzCgkgKiBAcGFyYW0gdW5rbm93bl90eXBlICRub2RlCgkgKiBAcmV0dXJuIGJvb2xlYW4KCSAqIEBhY2Nlc3MgcHJpdmF0ZQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gbWF0Y2hDbGFzc2VzKCRjbGFzcywgJG5vZGUpIHsKCQkvLyBtdWx0aS1jbGFzcwoJCWlmICggbWJfc3RycG9zKCRjbGFzcywgJy4nLCAxKSkgewoJCQkkY2xhc3NlcyA9IGV4cGxvZGUoJy4nLCBzdWJzdHIoJGNsYXNzLCAxKSk7CgkJCSRjbGFzc2VzQ291bnQgPSBjb3VudCggJGNsYXNzZXMgKTsKCQkJJG5vZGVDbGFzc2VzID0gZXhwbG9kZSgnICcsICRub2RlLT5nZXRBdHRyaWJ1dGUoJ2NsYXNzJykgKTsKCQkJJG5vZGVDbGFzc2VzQ291bnQgPSBjb3VudCggJG5vZGVDbGFzc2VzICk7CgkJCWlmICggJGNsYXNzZXNDb3VudCA+ICRub2RlQ2xhc3Nlc0NvdW50ICkKCQkJCXJldHVybiBmYWxzZTsKCQkJJGRpZmYgPSBjb3VudCgKCQkJCWFycmF5X2RpZmYoCgkJCQkJJGNsYXNzZXMsCgkJCQkJJG5vZGVDbGFzc2VzCgkJCQkpCgkJCSk7CgkJCWlmICghICRkaWZmICkKCQkJCXJldHVybiB0cnVlOwoJCS8vIHNpbmdsZS1jbGFzcwoJCX0gZWxzZSB7CgkJCXJldHVybiBpbl9hcnJheSgKCQkJCS8vIHN0cmlwIGxlYWRpbmcgZG90IGZyb20gY2xhc3MgbmFtZQoJCQkJc3Vic3RyKCRjbGFzcywgMSksCgkJCQkvLyBnZXQgY2xhc3NlcyBmb3IgZWxlbWVudCBhcyBhcnJheQoJCQkJZXhwbG9kZSgnICcsICRub2RlLT5nZXRBdHRyaWJ1dGUoJ2NsYXNzJykgKQoJCQkpOwoJCX0KCX0KCS8qKgoJICogQGFjY2VzcyBwcml2YXRlCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBydW5RdWVyeSgkWFF1ZXJ5LCAkc2VsZWN0b3IgPSBudWxsLCAkY29tcGFyZSA9IG51bGwpIHsKCQlpZiAoJGNvbXBhcmUgJiYgISBtZXRob2RfZXhpc3RzKCR0aGlzLCAkY29tcGFyZSkpCgkJCXJldHVybiBmYWxzZTsKCQkkc3RhY2sgPSBhcnJheSgpOwoJCWlmICghICR0aGlzLT5lbGVtZW50cykKCQkJJHRoaXMtPmRlYnVnKCdTdGFjayBlbXB0eSwgc2tpcHBpbmcuLi4nKTsKLy8JCXZhcl9kdW1wKCR0aGlzLT5lbGVtZW50c1swXS0+bm9kZVR5cGUpOwoJCS8vIGVsZW1lbnQsIGRvY3VtZW50CgkJZm9yZWFjaCgkdGhpcy0+c3RhY2soYXJyYXkoMSwgOSwgMTMpKSBhcyAkayA9PiAkc3RhY2tOb2RlKSB7CgkJCSRkZXRhY2hBZnRlciA9IGZhbHNlOwoJCQkvLyB0byB3b3JrIG9uIGRldGFjaGVkIG5vZGVzIHdlIG5lZWQgdGVtcG9yYXJ5IHBsYWNlIHRoZW0gc29tZXdoZXJlCgkJCS8vIHRoYXRzIGJlY2F1c2UgY29udGV4dCB4cGF0aCBxdWVyaWVzIHN1Y2tzIDtdCgkJCSR0ZXN0Tm9kZSA9ICRzdGFja05vZGU7CgkJCXdoaWxlICgkdGVzdE5vZGUpIHsKCQkJCWlmICghICR0ZXN0Tm9kZS0+cGFyZW50Tm9kZSAmJiAhICR0aGlzLT5pc1Jvb3QoJHRlc3ROb2RlKSkgewoJCQkJCSR0aGlzLT5yb290LT5hcHBlbmRDaGlsZCgkdGVzdE5vZGUpOwoJCQkJCSRkZXRhY2hBZnRlciA9ICR0ZXN0Tm9kZTsKCQkJCQlicmVhazsKCQkJCX0KCQkJCSR0ZXN0Tm9kZSA9IGlzc2V0KCR0ZXN0Tm9kZS0+cGFyZW50Tm9kZSkKCQkJCQk/ICR0ZXN0Tm9kZS0+cGFyZW50Tm9kZQoJCQkJCTogbnVsbDsKCQkJfQoJCQkvLyBYWFggdG1wID8KCQkJJHhwYXRoID0gJHRoaXMtPmRvY3VtZW50V3JhcHBlci0+aXNYSFRNTAoJCQkJPyAkdGhpcy0+Z2V0Tm9kZVhwYXRoKCRzdGFja05vZGUsICdodG1sJykKCQkJCTogJHRoaXMtPmdldE5vZGVYcGF0aCgkc3RhY2tOb2RlKTsKCQkJLy8gRklYTUUgcHNldWRvY2xhc3Nlcy1vbmx5IHF1ZXJ5LCBzdXBwb3J0IFhNTAoJCQkkcXVlcnkgPSAkWFF1ZXJ5ID09ICcvLycgJiYgJHhwYXRoID09ICcvaHRtbFsxXScKCQkJCT8gJy8vKicKCQkJCTogJHhwYXRoLiRYUXVlcnk7CgkJCSR0aGlzLT5kZWJ1ZygiWFBBVEg6IHskcXVlcnl9Iik7CgkJCS8vIHJ1biBxdWVyeSwgZ2V0IGVsZW1lbnRzCgkJCSRub2RlcyA9ICR0aGlzLT54cGF0aC0+cXVlcnkoJHF1ZXJ5KTsKCQkJJHRoaXMtPmRlYnVnKCJRVUVSWSBGRVRDSEVEIik7CgkJCWlmICghICRub2Rlcy0+bGVuZ3RoICkKCQkJCSR0aGlzLT5kZWJ1ZygnTm90aGluZyBmb3VuZCcpOwoJCQkkZGVidWcgPSBhcnJheSgpOwoJCQlmb3JlYWNoKCRub2RlcyBhcyAkbm9kZSkgewoJCQkJJG1hdGNoZWQgPSBmYWxzZTsKCQkJCWlmICggJGNvbXBhcmUpIHsKCQkJCQlwaHBRdWVyeTo6JGRlYnVnID8KCQkJCQkJJHRoaXMtPmRlYnVnKCJGb3VuZDogIi4kdGhpcy0+d2hvaXMoICRub2RlICkuIiwgY29tcGFyaW5nIHdpdGggeyRjb21wYXJlfSgpIikKCQkJCQkJOiBudWxsOwoJCQkJCSRwaHBRdWVyeURlYnVnID0gcGhwUXVlcnk6OiRkZWJ1ZzsKCQkJCQlwaHBRdWVyeTo6JGRlYnVnID0gZmFsc2U7CgkJCQkJLy8gVE9ETyA/Pz8gdXNlIHBocFF1ZXJ5OjpjYWxsYmFja1J1bigpCgkJCQkJaWYgKGNhbGxfdXNlcl9mdW5jX2FycmF5KGFycmF5KCR0aGlzLCAkY29tcGFyZSksIGFycmF5KCRzZWxlY3RvciwgJG5vZGUpKSkKCQkJCQkJJG1hdGNoZWQgPSB0cnVlOwoJCQkJCXBocFF1ZXJ5OjokZGVidWcgPSAkcGhwUXVlcnlEZWJ1ZzsKCQkJCX0gZWxzZSB7CgkJCQkJJG1hdGNoZWQgPSB0cnVlOwoJCQkJfQoJCQkJaWYgKCAkbWF0Y2hlZCkgewoJCQkJCWlmIChwaHBRdWVyeTo6JGRlYnVnKQoJCQkJCQkkZGVidWdbXSA9ICR0aGlzLT53aG9pcyggJG5vZGUgKTsKCQkJCQkkc3RhY2tbXSA9ICRub2RlOwoJCQkJfQoJCQl9CgkJCWlmIChwaHBRdWVyeTo6JGRlYnVnKSB7CgkJCQkkdGhpcy0+ZGVidWcoIk1hdGNoZWQgIi5jb3VudCgkZGVidWcpLiI6ICIuaW1wbG9kZSgnLCAnLCAkZGVidWcpKTsKCQkJfQoJCQlpZiAoJGRldGFjaEFmdGVyKQoJCQkJJHRoaXMtPnJvb3QtPnJlbW92ZUNoaWxkKCRkZXRhY2hBZnRlcik7CgkJfQoJCSR0aGlzLT5lbGVtZW50cyA9ICRzdGFjazsKCX0KCS8qKgoJICogRW50ZXIgZGVzY3JpcHRpb24gaGVyZS4uLgoJICoKCSAqIEByZXR1cm4gcGhwUXVlcnlPYmplY3R8UXVlcnlUZW1wbGF0ZXNTb3VyY2V8UXVlcnlUZW1wbGF0ZXNQYXJzZXxRdWVyeVRlbXBsYXRlc1NvdXJjZVF1ZXJ5CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBmaW5kKCRzZWxlY3RvcnMsICRjb250ZXh0ID0gbnVsbCwgJG5vSGlzdG9yeSA9IGZhbHNlKSB7CgkJaWYgKCEkbm9IaXN0b3J5KQoJCQkvLyBiYWNrdXAgbGFzdCBzdGFjayAvZm9yIGVuZCgpLwoJCQkkdGhpcy0+ZWxlbWVudHNCYWNrdXAgPSAkdGhpcy0+ZWxlbWVudHM7CgkJLy8gYWxsb3cgdG8gZGVmaW5lIGNvbnRleHQKCQkvLyBUT0RPIGNvbWJpbmUgY29kZSBiZWxvdyB3aXRoIHBocFF1ZXJ5OjpwcSgpIGNvbnRleHQgZ3Vlc3NpbmcgY29kZQoJCS8vICAgYXMgZ2VuZXJpYyBmdW5jdGlvbgoJCWlmICgkY29udGV4dCkgewoJCQlpZiAoISBpc19hcnJheSgkY29udGV4dCkgJiYgJGNvbnRleHQgaW5zdGFuY2VvZiBET01FTEVNRU5UKQoJCQkJJHRoaXMtPmVsZW1lbnRzID0gYXJyYXkoJGNvbnRleHQpOwoJCQllbHNlIGlmIChpc19hcnJheSgkY29udGV4dCkpIHsKCQkJCSR0aGlzLT5lbGVtZW50cyA9IGFycmF5KCk7CgkJCQlmb3JlYWNoICgkY29udGV4dCBhcyAkYykKCQkJCQlpZiAoJGMgaW5zdGFuY2VvZiBET01FTEVNRU5UKQoJCQkJCQkkdGhpcy0+ZWxlbWVudHNbXSA9ICRjOwoJCQl9IGVsc2UgaWYgKCAkY29udGV4dCBpbnN0YW5jZW9mIHNlbGYgKQoJCQkJJHRoaXMtPmVsZW1lbnRzID0gJGNvbnRleHQtPmVsZW1lbnRzOwoJCX0KCQkkcXVlcmllcyA9ICR0aGlzLT5wYXJzZVNlbGVjdG9yKCRzZWxlY3RvcnMpOwoJCSR0aGlzLT5kZWJ1ZyhhcnJheSgnRklORCcsICRzZWxlY3RvcnMsICRxdWVyaWVzKSk7CgkJJFhRdWVyeSA9ICcnOwoJCS8vIHJlbWVtYmVyIHN0YWNrIHN0YXRlIGJlY2F1c2Ugb2YgbXVsdGktcXVlcmllcwoJCSRvbGRTdGFjayA9ICR0aGlzLT5lbGVtZW50czsKCQkvLyBoZXJlIHdlIHdpbGwgYmUga2VlcGluZyBmb3VuZCBlbGVtZW50cwoJCSRzdGFjayA9IGFycmF5KCk7CgkJZm9yZWFjaCgkcXVlcmllcyBhcyAkc2VsZWN0b3IpIHsKCQkJJHRoaXMtPmVsZW1lbnRzID0gJG9sZFN0YWNrOwoJCQkkZGVsaW1pdGVyQmVmb3JlID0gZmFsc2U7CgkJCWZvcmVhY2goJHNlbGVjdG9yIGFzICRzKSB7CgkJCQkvLyBUQUcKCQkJCSRpc1RhZyA9IGV4dGVuc2lvbl9sb2FkZWQoJ21ic3RyaW5nJykgJiYgcGhwUXVlcnk6OiRtYnN0cmluZ1N1cHBvcnQKCQkJCQk/IG1iX2VyZWdfbWF0Y2goJ15bXHd8XHx8LV0rJCcsICRzKSB8fCAkcyA9PSAnKicKCQkJCQk6IHByZWdfbWF0Y2goJ0BeW1x3fFx8fC1dKyRAJywgJHMpIHx8ICRzID09ICcqJzsKCQkJCWlmICgkaXNUYWcpIHsKCQkJCQlpZiAoJHRoaXMtPmlzWE1MKCkpIHsKCQkJCQkJLy8gbmFtZXNwYWNlIHN1cHBvcnQKCQkJCQkJaWYgKG1iX3N0cnBvcygkcywgJ3wnKSAhPT0gZmFsc2UpIHsKCQkJCQkJCSRucyA9ICR0YWcgPSBudWxsOwoJCQkJCQkJbGlzdCgkbnMsICR0YWcpID0gZXhwbG9kZSgnfCcsICRzKTsKCQkJCQkJCSRYUXVlcnkgLj0gIiRuczokdGFnIjsKCQkJCQkJfSBlbHNlIGlmICgkcyA9PSAnKicpIHsKCQkJCQkJCSRYUXVlcnkgLj0gIioiOwoJCQkJCQl9IGVsc2UgewoJCQkJCQkJJFhRdWVyeSAuPSAiKltsb2NhbC1uYW1lKCk9JyRzJ10iOwoJCQkJCQl9CgkJCQkJfSBlbHNlIHsKCQkJCQkJJFhRdWVyeSAuPSAkczsKCQkJCQl9CgkJCQkvLyBJRAoJCQkJfSBlbHNlIGlmICgkc1swXSA9PSAnIycpIHsKCQkJCQlpZiAoJGRlbGltaXRlckJlZm9yZSkKCQkJCQkJJFhRdWVyeSAuPSAnKic7CgkJCQkJJFhRdWVyeSAuPSAiW0BpZD0nIi5zdWJzdHIoJHMsIDEpLiInXSI7CgkJCQkvLyBBVFRSSUJVVEVTCgkJCQl9IGVsc2UgaWYgKCRzWzBdID09ICdbJykgewoJCQkJCWlmICgkZGVsaW1pdGVyQmVmb3JlKQoJCQkJCQkkWFF1ZXJ5IC49ICcqJzsKCQkJCQkvLyBzdHJpcCBzaWRlIGJyYWNrZXRzCgkJCQkJJGF0dHIgPSB0cmltKCRzLCAnXVsnKTsKCQkJCQkkZXhlY3V0ZSA9IGZhbHNlOwoJCQkJCS8vIGF0dHIgd2l0aCBzcGVjaWZlZCB2YWx1ZQoJCQkJCWlmIChtYl9zdHJwb3MoJHMsICc9JykpIHsKCQkJCQkJJHZhbHVlID0gbnVsbDsKCQkJCQkJbGlzdCgkYXR0ciwgJHZhbHVlKSA9IGV4cGxvZGUoJz0nLCAkYXR0cik7CgkJCQkJCSR2YWx1ZSA9IHRyaW0oJHZhbHVlLCAiJ1wiIik7CgkJCQkJCWlmICgkdGhpcy0+aXNSZWdleHAoJGF0dHIpKSB7CgkJCQkJCQkvLyBjdXQgcmVnZXhwIGNoYXJhY3RlcgoJCQkJCQkJJGF0dHIgPSBzdWJzdHIoJGF0dHIsIDAsIC0xKTsKCQkJCQkJCSRleGVjdXRlID0gdHJ1ZTsKCQkJCQkJCSRYUXVlcnkgLj0gIltAeyRhdHRyfV0iOwoJCQkJCQl9IGVsc2UgewoJCQkJCQkJJFhRdWVyeSAuPSAiW0B7JGF0dHJ9PSd7JHZhbHVlfSddIjsKCQkJCQkJfQoJCQkJCS8vIGF0dHIgd2l0aG91dCBzcGVjaWZpZWQgdmFsdWUKCQkJCQl9IGVsc2UgewoJCQkJCQkkWFF1ZXJ5IC49ICJbQHskYXR0cn1dIjsKCQkJCQl9CgkJCQkJaWYgKCRleGVjdXRlKSB7CgkJCQkJCSR0aGlzLT5ydW5RdWVyeSgkWFF1ZXJ5LCAkcywgJ2lzJyk7CgkJCQkJCSRYUXVlcnkgPSAnJzsKCQkJCQkJaWYgKCEgJHRoaXMtPmxlbmd0aCgpKQoJCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJLy8gQ0xBU1NFUwoJCQkJfSBlbHNlIGlmICgkc1swXSA9PSAnLicpIHsKCQkJCQkvLyBUT0RPIHVzZSByZXR1cm4gJHRoaXMtPmZpbmQoIi4vc2VsZjo6Kltjb250YWlucyhjb25jYXQoXCIgXCIsQGNsYXNzLFwiIFwiKSwgXCIgJGNsYXNzIFwiKV0iKTsKCQkJCQkvLyB0aHggd2l6RG9tIDspCgkJCQkJaWYgKCRkZWxpbWl0ZXJCZWZvcmUpCgkJCQkJCSRYUXVlcnkgLj0gJyonOwoJCQkJCSRYUXVlcnkgLj0gJ1tAY2xhc3NdJzsKCQkJCQkkdGhpcy0+cnVuUXVlcnkoJFhRdWVyeSwgJHMsICdtYXRjaENsYXNzZXMnKTsKCQkJCQkkWFF1ZXJ5ID0gJyc7CgkJCQkJaWYgKCEgJHRoaXMtPmxlbmd0aCgpICkKCQkJCQkJYnJlYWs7CgkJCQkvLyB+IEdlbmVyYWwgU2libGluZyBTZWxlY3RvcgoJCQkJfSBlbHNlIGlmICgkc1swXSA9PSAnficpIHsKCQkJCQkkdGhpcy0+cnVuUXVlcnkoJFhRdWVyeSk7CgkJCQkJJFhRdWVyeSA9ICcnOwoJCQkJCSR0aGlzLT5lbGVtZW50cyA9ICR0aGlzCgkJCQkJCS0+c2libGluZ3MoCgkJCQkJCQlzdWJzdHIoJHMsIDEpCgkJCQkJCSktPmVsZW1lbnRzOwoJCQkJCWlmICghICR0aGlzLT5sZW5ndGgoKSApCgkJCQkJCWJyZWFrOwoJCQkJLy8gKyBBZGphY2VudCBzaWJsaW5nIHNlbGVjdG9ycwoJCQkJfSBlbHNlIGlmICgkc1swXSA9PSAnKycpIHsKCQkJCQkvLyBUT0RPIC9mb2xsb3dpbmctc2libGluZzo6CgkJCQkJJHRoaXMtPnJ1blF1ZXJ5KCRYUXVlcnkpOwoJCQkJCSRYUXVlcnkgPSAnJzsKCQkJCQkkc3ViU2VsZWN0b3IgPSBzdWJzdHIoJHMsIDEpOwoJCQkJCSRzdWJFbGVtZW50cyA9ICR0aGlzLT5lbGVtZW50czsKCQkJCQkkdGhpcy0+ZWxlbWVudHMgPSBhcnJheSgpOwoJCQkJCWZvcmVhY2goJHN1YkVsZW1lbnRzIGFzICRub2RlKSB7CgkJCQkJCS8vIHNlYXJjaCBmaXJzdCBET01FbGVtZW50IHNpYmxpbmcKCQkJCQkJJHRlc3QgPSAkbm9kZS0+bmV4dFNpYmxpbmc7CgkJCQkJCXdoaWxlKCR0ZXN0ICYmICEgKCR0ZXN0IGluc3RhbmNlb2YgRE9NRUxFTUVOVCkpCgkJCQkJCQkkdGVzdCA9ICR0ZXN0LT5uZXh0U2libGluZzsKCQkJCQkJaWYgKCR0ZXN0ICYmICR0aGlzLT5pcygkc3ViU2VsZWN0b3IsICR0ZXN0KSkKCQkJCQkJCSR0aGlzLT5lbGVtZW50c1tdID0gJHRlc3Q7CgkJCQkJfQoJCQkJCWlmICghICR0aGlzLT5sZW5ndGgoKSApCgkJCQkJCWJyZWFrOwoJCQkJLy8gUFNFVURPIENMQVNTRVMKCQkJCX0gZWxzZSBpZiAoJHNbMF0gPT0gJzonKSB7CgkJCQkJLy8gVE9ETyBvcHRpbWl6YXRpb24gZm9yIDpmaXJzdCA6bGFzdAoJCQkJCWlmICgkWFF1ZXJ5KSB7CgkJCQkJCSR0aGlzLT5ydW5RdWVyeSgkWFF1ZXJ5KTsKCQkJCQkJJFhRdWVyeSA9ICcnOwoJCQkJCX0KCQkJCQlpZiAoISAkdGhpcy0+bGVuZ3RoKCkpCgkJCQkJCWJyZWFrOwoJCQkJCSR0aGlzLT5wc2V1ZG9DbGFzc2VzKCRzKTsKCQkJCQlpZiAoISAkdGhpcy0+bGVuZ3RoKCkpCgkJCQkJCWJyZWFrOwoJCQkJLy8gRElSRUNUIERFU0NFTkRBTkRTCgkJCQl9IGVsc2UgaWYgKCRzID09ICc+JykgewoJCQkJCSRYUXVlcnkgLj0gJy8nOwoJCQkJCSRkZWxpbWl0ZXJCZWZvcmUgPSAyOwoJCQkJLy8gQUxMIERFU0NFTkRBTkRTCgkJCQl9IGVsc2UgaWYgKCRzID09ICcgJykgewoJCQkJCSRYUXVlcnkgLj0gJy8vJzsKCQkJCQkkZGVsaW1pdGVyQmVmb3JlID0gMjsKCQkJCS8vIEVSUk9SUwoJCQkJfSBlbHNlIHsKCQkJCQlwaHBRdWVyeTo6ZGVidWcoIlVucmVjb2duaXplZCB0b2tlbiAnJHMnIik7CgkJCQl9CgkJCQkkZGVsaW1pdGVyQmVmb3JlID0gJGRlbGltaXRlckJlZm9yZSA9PT0gMjsKCQkJfQoJCQkvLyBydW4gcXVlcnkgaWYgYW55CgkJCWlmICgkWFF1ZXJ5ICYmICRYUXVlcnkgIT0gJy8vJykgewoJCQkJJHRoaXMtPnJ1blF1ZXJ5KCRYUXVlcnkpOwoJCQkJJFhRdWVyeSA9ICcnOwoJCQl9CgkJCWZvcmVhY2goJHRoaXMtPmVsZW1lbnRzIGFzICRub2RlKQoJCQkJaWYgKCEgJHRoaXMtPmVsZW1lbnRzQ29udGFpbnNOb2RlKCRub2RlLCAkc3RhY2spKQoJCQkJCSRzdGFja1tdID0gJG5vZGU7CgkJfQoJCSR0aGlzLT5lbGVtZW50cyA9ICRzdGFjazsKCQlyZXR1cm4gJHRoaXMtPm5ld0luc3RhbmNlKCk7Cgl9CgkvKioKCSAqIEB0b2RvIGNyZWF0ZSBBUEkgZm9yIGNsYXNzZXMgd2l0aCBwc2V1ZG9zZWxlY3RvcnMKCSAqIEBhY2Nlc3MgcHJpdmF0ZQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gcHNldWRvQ2xhc3NlcygkY2xhc3MpIHsKCQkvLyBUT0RPIGNsZWFuIGFyZ3MgcGFyc2luZyA/CgkJJGNsYXNzID0gbHRyaW0oJGNsYXNzLCAnOicpOwoJCSRoYXZlQXJncyA9IG1iX3N0cnBvcygkY2xhc3MsICcoJyk7CgkJaWYgKCRoYXZlQXJncyAhPT0gZmFsc2UpIHsKCQkJJGFyZ3MgPSBzdWJzdHIoJGNsYXNzLCAkaGF2ZUFyZ3MrMSwgLTEpOwoJCQkkY2xhc3MgPSBzdWJzdHIoJGNsYXNzLCAwLCAkaGF2ZUFyZ3MpOwoJCX0KCQlzd2l0Y2goJGNsYXNzKSB7CgkJCWNhc2UgJ2V2ZW4nOgoJCQljYXNlICdvZGQnOgoJCQkJJHN0YWNrID0gYXJyYXkoKTsKCQkJCWZvcmVhY2goJHRoaXMtPmVsZW1lbnRzIGFzICRpID0+ICRub2RlKSB7CgkJCQkJaWYgKCRjbGFzcyA9PSAnZXZlbicgJiYgKCRpJTIpID09IDApCgkJCQkJCSRzdGFja1tdID0gJG5vZGU7CgkJCQkJZWxzZSBpZiAoICRjbGFzcyA9PSAnb2RkJyAmJiAkaSAlIDIgKQoJCQkJCQkkc3RhY2tbXSA9ICRub2RlOwoJCQkJfQoJCQkJJHRoaXMtPmVsZW1lbnRzID0gJHN0YWNrOwoJCQkJYnJlYWs7CgkJCWNhc2UgJ2VxJzoKCQkJCSRrID0gaW50dmFsKCRhcmdzKTsKCQkJCSR0aGlzLT5lbGVtZW50cyA9IGlzc2V0KCAkdGhpcy0+ZWxlbWVudHNbJGtdICkKCQkJCQk/IGFycmF5KCAkdGhpcy0+ZWxlbWVudHNbJGtdICkKCQkJCQk6IGFycmF5KCk7CgkJCQlicmVhazsKCQkJY2FzZSAnZ3QnOgoJCQkJJHRoaXMtPmVsZW1lbnRzID0gYXJyYXlfc2xpY2UoJHRoaXMtPmVsZW1lbnRzLCAkYXJncysxKTsKCQkJCWJyZWFrOwoJCQljYXNlICdsdCc6CgkJCQkkdGhpcy0+ZWxlbWVudHMgPSBhcnJheV9zbGljZSgkdGhpcy0+ZWxlbWVudHMsIDAsICRhcmdzKzEpOwoJCQkJYnJlYWs7CgkJCWNhc2UgJ2ZpcnN0JzoKCQkJCWlmIChpc3NldCgkdGhpcy0+ZWxlbWVudHNbMF0pKQoJCQkJCSR0aGlzLT5lbGVtZW50cyA9IGFycmF5KCR0aGlzLT5lbGVtZW50c1swXSk7CgkJCQlicmVhazsKCQkJY2FzZSAnbGFzdCc6CgkJCQlpZiAoJHRoaXMtPmVsZW1lbnRzKQoJCQkJCSR0aGlzLT5lbGVtZW50cyA9IGFycmF5KCR0aGlzLT5lbGVtZW50c1tjb3VudCgkdGhpcy0+ZWxlbWVudHMpLTFdKTsKCQkJCWJyZWFrOwoJCQkvKmNhc2UgJ3BhcmVudCc6CgkJCQkkc3RhY2sgPSBhcnJheSgpOwoJCQkJZm9yZWFjaCgkdGhpcy0+ZWxlbWVudHMgYXMgJG5vZGUpIHsKCQkJCQlpZiAoICRub2RlLT5jaGlsZE5vZGVzLT5sZW5ndGggKQoJCQkJCQkkc3RhY2tbXSA9ICRub2RlOwoJCQkJfQoJCQkJJHRoaXMtPmVsZW1lbnRzID0gJHN0YWNrOwoJCQkJYnJlYWs7Ki8KCQkJY2FzZSAnY29udGFpbnMnOgoJCQkJJHRleHQgPSB0cmltKCRhcmdzLCAiXCInIik7CgkJCQkkc3RhY2sgPSBhcnJheSgpOwoJCQkJZm9yZWFjaCgkdGhpcy0+ZWxlbWVudHMgYXMgJG5vZGUpIHsKCQkJCQlpZiAobWJfc3RyaXBvcygkbm9kZS0+dGV4dENvbnRlbnQsICR0ZXh0KSA9PT0gZmFsc2UpCgkJCQkJCWNvbnRpbnVlOwoJCQkJCSRzdGFja1tdID0gJG5vZGU7CgkJCQl9CgkJCQkkdGhpcy0+ZWxlbWVudHMgPSAkc3RhY2s7CgkJCQlicmVhazsKCQkJY2FzZSAnbm90JzoKCQkJCSRzZWxlY3RvciA9IHNlbGY6OnVuUXVvdGUoJGFyZ3MpOwoJCQkJJHRoaXMtPmVsZW1lbnRzID0gJHRoaXMtPm5vdCgkc2VsZWN0b3IpLT5zdGFjaygpOwoJCQkJYnJlYWs7CgkJCWNhc2UgJ3NsaWNlJzoKCQkJCS8vIFRPRE8galF1ZXJ5IGRpZmZlcmVuY2UgPwoJCQkJJGFyZ3MgPSBleHBsb2RlKCcsJywKCQkJCQlzdHJfcmVwbGFjZSgnLCAnLCAnLCcsIHRyaW0oJGFyZ3MsICJcIiciKSkKCQkJCSk7CgkJCQkkc3RhcnQgPSAkYXJnc1swXTsKCQkJCSRlbmQgPSBpc3NldCgkYXJnc1sxXSkKCQkJCQk/ICRhcmdzWzFdCgkJCQkJOiBudWxsOwoJCQkJaWYgKCRlbmQgPiAwKQoJCQkJCSRlbmQgPSAkZW5kLSRzdGFydDsKCQkJCSR0aGlzLT5lbGVtZW50cyA9IGFycmF5X3NsaWNlKCR0aGlzLT5lbGVtZW50cywgJHN0YXJ0LCAkZW5kKTsKCQkJCWJyZWFrOwoJCQljYXNlICdoYXMnOgoJCQkJJHNlbGVjdG9yID0gdHJpbSgkYXJncywgIlwiJyIpOwoJCQkJJHN0YWNrID0gYXJyYXkoKTsKCQkJCWZvcmVhY2goJHRoaXMtPnN0YWNrKDEpIGFzICRlbCkgewoJCQkJCWlmICgkdGhpcy0+ZmluZCgkc2VsZWN0b3IsICRlbCwgdHJ1ZSktPmxlbmd0aCkKCQkJCQkJJHN0YWNrW10gPSAkZWw7CgkJCQl9CgkJCQkkdGhpcy0+ZWxlbWVudHMgPSAkc3RhY2s7CgkJCQlicmVhazsKCQkJY2FzZSAnc3VibWl0JzoKCQkJY2FzZSAncmVzZXQnOgoJCQkJJHRoaXMtPmVsZW1lbnRzID0gcGhwUXVlcnk6Om1lcmdlKAoJCQkJCSR0aGlzLT5tYXAoYXJyYXkoJHRoaXMsICdpcycpLAoJCQkJCQkiaW5wdXRbdHlwZT0kY2xhc3NdIiwgbmV3IENhbGxiYWNrUGFyYW0oKQoJCQkJCSksCgkJCQkJJHRoaXMtPm1hcChhcnJheSgkdGhpcywgJ2lzJyksCgkJCQkJCSJidXR0b25bdHlwZT0kY2xhc3NdIiwgbmV3IENhbGxiYWNrUGFyYW0oKQoJCQkJCSkKCQkJCSk7CgkJCWJyZWFrOwovLwkJCQkkc3RhY2sgPSBhcnJheSgpOwovLwkJCQlmb3JlYWNoKCR0aGlzLT5lbGVtZW50cyBhcyAkbm9kZSkKLy8JCQkJCWlmICgkbm9kZS0+aXMoJ2lucHV0W3R5cGU9c3VibWl0XScpIHx8ICRub2RlLT5pcygnYnV0dG9uW3R5cGU9c3VibWl0XScpKQovLwkJCQkJCSRzdGFja1tdID0gJGVsOwovLwkJCQkkdGhpcy0+ZWxlbWVudHMgPSAkc3RhY2s7CgkJCWNhc2UgJ2lucHV0JzoKCQkJCSR0aGlzLT5lbGVtZW50cyA9ICR0aGlzLT5tYXAoCgkJCQkJYXJyYXkoJHRoaXMsICdpcycpLAoJCQkJCSdpbnB1dCcsIG5ldyBDYWxsYmFja1BhcmFtKCkKCQkJCSktPmVsZW1lbnRzOwoJCQlicmVhazsKCQkJY2FzZSAncGFzc3dvcmQnOgoJCQljYXNlICdjaGVja2JveCc6CgkJCWNhc2UgJ3JhZGlvJzoKCQkJY2FzZSAnaGlkZGVuJzoKCQkJY2FzZSAnaW1hZ2UnOgoJCQljYXNlICdmaWxlJzoKCQkJCSR0aGlzLT5lbGVtZW50cyA9ICR0aGlzLT5tYXAoCgkJCQkJYXJyYXkoJHRoaXMsICdpcycpLAoJCQkJCSJpbnB1dFt0eXBlPSRjbGFzc10iLCBuZXcgQ2FsbGJhY2tQYXJhbSgpCgkJCQkpLT5lbGVtZW50czsKCQkJYnJlYWs7CgkJCWNhc2UgJ3BhcmVudCc6CgkJCQkkdGhpcy0+ZWxlbWVudHMgPSAkdGhpcy0+bWFwKAoJCQkJCWZ1bmN0aW9uICgkbm9kZSkgewoJCQkJCQlyZXR1cm4gJG5vZGUgaW5zdGFuY2VvZiBET01FTEVNRU5UICYmICRub2RlLT5jaGlsZE5vZGVzLT5sZW5ndGgKCQkJCQkJCT8gJG5vZGUgOiBudWxsOwoJCQkJCX0KCQkJCSktPmVsZW1lbnRzOwoJCQlicmVhazsKCQkJY2FzZSAnZW1wdHknOgoJCQkJJHRoaXMtPmVsZW1lbnRzID0gJHRoaXMtPm1hcCgKCQkJCQlmdW5jdGlvbiAoJG5vZGUpIHsKCQkJCQkJcmV0dXJuICRub2RlIGluc3RhbmNlb2YgRE9NRUxFTUVOVCAmJiAkbm9kZS0+Y2hpbGROb2Rlcy0+bGVuZ3RoCgkJCQkJCQk/IG51bGwgOiAkbm9kZTsKCQkJCQl9CgkJCQkpLT5lbGVtZW50czsKCQkJYnJlYWs7CgkJCWNhc2UgJ2Rpc2FibGVkJzoKCQkJY2FzZSAnc2VsZWN0ZWQnOgoJCQljYXNlICdjaGVja2VkJzoKCQkJCSR0aGlzLT5lbGVtZW50cyA9ICR0aGlzLT5tYXAoCgkJCQkJYXJyYXkoJHRoaXMsICdpcycpLAoJCQkJCSJbJGNsYXNzXSIsIG5ldyBDYWxsYmFja1BhcmFtKCkKCQkJCSktPmVsZW1lbnRzOwoJCQlicmVhazsKCQkJY2FzZSAnZW5hYmxlZCc6CgkJCQkkdGhpcy0+ZWxlbWVudHMgPSAkdGhpcy0+bWFwKAoJCQkJCWZ1bmN0aW9uICgkbm9kZSkgewoJCQkJCQlyZXR1cm4gcHEoJG5vZGUpLT5ub3QoIjpkaXNhYmxlZCIpID8gJG5vZGUgOiBudWxsOwoJCQkJCX0KCQkJCSktPmVsZW1lbnRzOwoJCQlicmVhazsKCQkJY2FzZSAnaGVhZGVyJzoKCQkJCSR0aGlzLT5lbGVtZW50cyA9ICR0aGlzLT5tYXAoCgkJCQkJZnVuY3Rpb24gKCRub2RlKSB7CgkJCQkJCSRpc0hlYWRlciA9IGlzc2V0KCRub2RlLT50YWdOYW1lKSAmJiBpbl9hcnJheSgkbm9kZS0+dGFnTmFtZSwgYXJyYXkoCgkJCQkJCQkiaDEiLCAiaDIiLCAiaDMiLCAiaDQiLCAiaDUiLCAiaDYiLCAiaDciCgkJCQkJCSkpOwoJCQkJCQlyZXR1cm4gJGlzSGVhZGVyCgkJCQkJCQk/ICRub2RlCgkJCQkJCQk6IG51bGw7CgkJCQkJfQoJCQkJKS0+ZWxlbWVudHM7Ci8vCQkJCSR0aGlzLT5lbGVtZW50cyA9ICR0aGlzLT5tYXAoCi8vCQkJCQljcmVhdGVfZnVuY3Rpb24oJyRub2RlJywgJyRub2RlID0gcHEoJG5vZGUpOwovLwkJCQkJCXJldHVybiAkbm9kZS0+aXMoImgxIikKLy8JCQkJCQkJfHwgJG5vZGUtPmlzKCJoMiIpCi8vCQkJCQkJCXx8ICRub2RlLT5pcygiaDMiKQovLwkJCQkJCQl8fCAkbm9kZS0+aXMoImg0IikKLy8JCQkJCQkJfHwgJG5vZGUtPmlzKCJoNSIpCi8vCQkJCQkJCXx8ICRub2RlLT5pcygiaDYiKQovLwkJCQkJCQl8fCAkbm9kZS0+aXMoImg3IikKLy8JCQkJCQkJPyAkbm9kZQovLwkJCQkJCQk6IG51bGw7JykKLy8JCQkJKS0+ZWxlbWVudHM7CgkJCWJyZWFrOwoJCQljYXNlICdvbmx5LWNoaWxkJzoKCQkJCSR0aGlzLT5lbGVtZW50cyA9ICR0aGlzLT5tYXAoCgkJCQkJZnVuY3Rpb24gKCRub2RlKSB7CgkJCQkJCXJldHVybiBwcSgkbm9kZSktPnNpYmxpbmdzKCktPnNpemUoKSA9PSAwID8gJG5vZGUgOiBudWxsOwoJCQkJCX0KCQkJCSktPmVsZW1lbnRzOwoJCQlicmVhazsKCQkJY2FzZSAnZmlyc3QtY2hpbGQnOgoJCQkJJHRoaXMtPmVsZW1lbnRzID0gJHRoaXMtPm1hcCgKCQkJCQlmdW5jdGlvbiAoJG5vZGUpIHsKCQkJCQkJcmV0dXJuIHBxKCRub2RlKS0+cHJldkFsbCgpLT5zaXplKCkgPT0gMCA/ICRub2RlIDogbnVsbDsKCQkJCQl9CgkJCQkpLT5lbGVtZW50czsKCQkJYnJlYWs7CgkJCWNhc2UgJ2xhc3QtY2hpbGQnOgoJCQkJJHRoaXMtPmVsZW1lbnRzID0gJHRoaXMtPm1hcCgKCQkJCQlmdW5jdGlvbiAoJG5vZGUpIHsKCQkJCQkJcmV0dXJuIHBxKCRub2RlKS0+bmV4dEFsbCgpLT5zaXplKCkgPT0gMCA/ICRub2RlIDogbnVsbDsKCQkJCQl9CgkJCQkpLT5lbGVtZW50czsKCQkJYnJlYWs7CgkJCWNhc2UgJ250aC1jaGlsZCc6CgkJCQkkcGFyYW0gPSB0cmltKCRhcmdzLCAiXCInIik7CgkJCQlpZiAoISAkcGFyYW0pCgkJCQkJYnJlYWs7CgkJCQkJLy8gbnRoLWNoaWxkKG4rYikgdG8gbnRoLWNoaWxkKDFuK2IpCgkJCQlpZiAoJHBhcmFtezB9ID09ICduJykKCQkJCQkkcGFyYW0gPSAnMScuJHBhcmFtOwoJCQkJLy8gOm50aC1jaGlsZChpbmRleC9ldmVuL29kZC9lcXVhdGlvbikKCQkJCWlmICgkcGFyYW0gPT0gJ2V2ZW4nIHx8ICRwYXJhbSA9PSAnb2RkJykKCQkJCQkkbWFwcGVkID0gJHRoaXMtPm1hcCgKCQkJCQkJZnVuY3Rpb24gKCRub2RlLCAkcGFyYW0pIHsKCQkJCQkJCSRpbmRleCA9IHBxKCRub2RlKS0+cHJldkFsbCgpLT5zaXplKCkrMTsKCQkJCQkJCWlmICgkcGFyYW0gPT0gImV2ZW4iICYmICgkaW5kZXglMikgPT0gMCkKCQkJCQkJCQlyZXR1cm4gJG5vZGU7CgkJCQkJCQllbHNlIGlmICgkcGFyYW0gPT0gIm9kZCIgJiYgJGluZGV4JTIgPT0gMSkKCQkJCQkJCQlyZXR1cm4gJG5vZGU7CgkJCQkJCQllbHNlCgkJCQkJCQkJcmV0dXJuIG51bGw7CgkJCQkJCX0sCgkJCQkJCW5ldyBDYWxsYmFja1BhcmFtKCksICRwYXJhbQoJCQkJCSk7CgkJCQllbHNlIGlmIChtYl9zdHJsZW4oJHBhcmFtKSA+IDEgJiYgcHJlZ19tYXRjaCgnL14oXGQqKW4oWy0rXT8pKFxkKikvJywgJHBhcmFtKSA9PT0gMSkKCQkJCQkvLyBhbitiCgkJCQkJJG1hcHBlZCA9ICR0aGlzLT5tYXAoCgkJCQkJCWZ1bmN0aW9uICgkbm9kZSwgJHBhcmFtKSB7CgkJCQkJCQkkcHJldnMgPSBwcSgkbm9kZSktPnByZXZBbGwoKS0+c2l6ZSgpOwoJCQkJCQkJJGluZGV4ID0gMSskcHJldnM7CgoJCQkJCQkJcHJlZ19tYXRjaCgiL14oXGQqKW4oWy0rXT8pKFxkKikvIiwgJHBhcmFtLCAkbWF0Y2hlcyk7CiAJCQkJCQkJJGEgPSBpbnR2YWwoJG1hdGNoZXNbMV0pOwogCQkJCQkJCSRiID0gaW50dmFsKCRtYXRjaGVzWzNdKTsKIAkJCQkJCQlpZiggJG1hdGNoZXNbMl0gPT09ICItIiApIHsKIAkJCQkJCQkgICAgJGIgPSAtJGI7CiAJCQkJCQkJfQoKCQkJCQkJCWlmICgkYSA+IDApIHsKCQkJCQkJCQlyZXR1cm4gKCRpbmRleC0kYiklJGEgPT0gMAoJCQkJCQkJCQk/ICRub2RlCgkJCQkJCQkJCTogbnVsbDsKCQkJCQkJCQlwaHBRdWVyeTo6ZGVidWcoJGEuIioiLmZsb29yKCRpbmRleC8kYSkuIiskYi0xID09ICIuKCRhKmZsb29yKCRpbmRleC8kYSkrJGItMSkuIiA/PSAkcHJldnMiKTsKCQkJCQkJCQlyZXR1cm4gJGEqZmxvb3IoJGluZGV4LyRhKSskYi0xID09ICRwcmV2cwoJCQkJCQkJCQkJPyAkbm9kZQoJCQkJCQkJCQkJOiBudWxsOwoJCQkJCQkJfSBlbHNlIGlmICgkYSA9PSAwKQoJCQkJCQkJCXJldHVybiAkaW5kZXggPT0gJGIKCQkJCQkJCQkJCT8gJG5vZGUKCQkJCQkJCQkJCTogbnVsbDsKCQkJCQkJCWVsc2UKCQkJCQkJCQkvLyBuZWdhdGl2ZSB2YWx1ZQoJCQkJCQkJCXJldHVybiAkaW5kZXggPD0gJGIKCQkJCQkJCQkJCT8gJG5vZGUKCQkJCQkJCQkJCTogbnVsbDsKLy8JCQkJCQkJaWYgKCEgJGIpCi8vCQkJCQkJCQlyZXR1cm4gJGluZGV4JSRhID09IDAKLy8JCQkJCQkJCQk/ICRub2RlCi8vCQkJCQkJCQkJOiBudWxsOwovLwkJCQkJCQllbHNlCi8vCQkJCQkJCQlyZXR1cm4gKCRpbmRleC0kYiklJGEgPT0gMAovLwkJCQkJCQkJCT8gJG5vZGUKLy8JCQkJCQkJCQk6IG51bGw7CgkJCQkJCX0sCgkJCQkJCW5ldyBDYWxsYmFja1BhcmFtKCksICRwYXJhbQoJCQkJCSk7CgkJCQllbHNlCgkJCQkJLy8gaW5kZXgKCQkJCQkkbWFwcGVkID0gJHRoaXMtPm1hcCgKCQkJCQkJZnVuY3Rpb24gKCRub2RlLCAkaW5kZXgpIHsKCQkJCQkJCSRwcmV2cyA9IHBxKCRub2RlKS0+cHJldkFsbCgpLT5zaXplKCk7CgkJCQkJCQlpZiAoJHByZXZzICYmICRwcmV2cyA9PSAkaW5kZXgtMSkKCQkJCQkJCQlyZXR1cm4gJG5vZGU7CgkJCQkJCQllbHNlIGlmICghICRwcmV2cyAmJiAkaW5kZXggPT0gMSkKCQkJCQkJCQlyZXR1cm4gJG5vZGU7CgkJCQkJCQllbHNlCgkJCQkJCQkJcmV0dXJuIG51bGw7CgkJCQkJCX0sCgkJCQkJCW5ldyBDYWxsYmFja1BhcmFtKCksICRwYXJhbQoJCQkJCSk7CgkJCQkkdGhpcy0+ZWxlbWVudHMgPSAkbWFwcGVkLT5lbGVtZW50czsKCQkJYnJlYWs7CgkJCWRlZmF1bHQ6CgkJCQkkdGhpcy0+ZGVidWcoIlVua25vd24gcHNldWRvY2xhc3MgJ3skY2xhc3N9Jywgc2tpcHBpbmcuLi4iKTsKCQl9Cgl9CgkvKioKCSAqIEBhY2Nlc3MgcHJpdmF0ZQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gX19wc2V1ZG9DbGFzc1BhcmFtKCRwYXJhbXNTdHJpbmcpIHsKCQkvLyBUT0RPOwoJfQoJLyoqCgkgKiBFbnRlciBkZXNjcmlwdGlvbiBoZXJlLi4uCgkgKgoJICogQHJldHVybiBwaHBRdWVyeU9iamVjdHxRdWVyeVRlbXBsYXRlc1NvdXJjZXxRdWVyeVRlbXBsYXRlc1BhcnNlfFF1ZXJ5VGVtcGxhdGVzU291cmNlUXVlcnkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGlzKCRzZWxlY3RvciwgJG5vZGVzID0gbnVsbCkgewoJCXBocFF1ZXJ5OjpkZWJ1ZyhhcnJheSgiSXM6IiwgJHNlbGVjdG9yKSk7CgkJaWYgKCEgJHNlbGVjdG9yKQoJCQlyZXR1cm4gZmFsc2U7CgkJJG9sZFN0YWNrID0gJHRoaXMtPmVsZW1lbnRzOwoJCSRyZXR1cm5BcnJheSA9IGZhbHNlOwoJCWlmICgkbm9kZXMgJiYgaXNfYXJyYXkoJG5vZGVzKSkgewoJCQkkdGhpcy0+ZWxlbWVudHMgPSAkbm9kZXM7CgkJfSBlbHNlIGlmICgkbm9kZXMpCgkJCSR0aGlzLT5lbGVtZW50cyA9IGFycmF5KCRub2Rlcyk7CgkJJHRoaXMtPmZpbHRlcigkc2VsZWN0b3IsIHRydWUpOwoJCSRzdGFjayA9ICR0aGlzLT5lbGVtZW50czsKCQkkdGhpcy0+ZWxlbWVudHMgPSAkb2xkU3RhY2s7CgkJaWYgKCRub2RlcykKCQkJcmV0dXJuICRzdGFjayA/ICRzdGFjayA6IG51bGw7CgkJcmV0dXJuIChib29sKWNvdW50KCRzdGFjayk7Cgl9CgkvKioKCSAqIEVudGVyIGRlc2NyaXB0aW9uIGhlcmUuLi4KCSAqIGpRdWVyeSBkaWZmZXJlbmNlLgoJICoKCSAqIENhbGxiYWNrOgoJICogLSAkaW5kZXggaW50CgkgKiAtICRub2RlIERPTU5vZGUKCSAqCgkgKiBAcmV0dXJuIHBocFF1ZXJ5T2JqZWN0fFF1ZXJ5VGVtcGxhdGVzU291cmNlfFF1ZXJ5VGVtcGxhdGVzUGFyc2V8UXVlcnlUZW1wbGF0ZXNTb3VyY2VRdWVyeQoJICogQGxpbmsgaHR0cDovL2RvY3MuanF1ZXJ5LmNvbS9UcmF2ZXJzaW5nL2ZpbHRlcgoJICovCglwdWJsaWMgZnVuY3Rpb24gZmlsdGVyQ2FsbGJhY2soJGNhbGxiYWNrLCAkX3NraXBIaXN0b3J5ID0gZmFsc2UpIHsKCQlpZiAoISAkX3NraXBIaXN0b3J5KSB7CgkJCSR0aGlzLT5lbGVtZW50c0JhY2t1cCA9ICR0aGlzLT5lbGVtZW50czsKCQkJJHRoaXMtPmRlYnVnKCJGaWx0ZXJpbmcgYnkgY2FsbGJhY2siKTsKCQl9CgkJJG5ld1N0YWNrID0gYXJyYXkoKTsKCQlmb3JlYWNoKCR0aGlzLT5lbGVtZW50cyBhcyAkaW5kZXggPT4gJG5vZGUpIHsKCQkJJHJlc3VsdCA9IHBocFF1ZXJ5OjpjYWxsYmFja1J1bigkY2FsbGJhY2ssIGFycmF5KCRpbmRleCwgJG5vZGUpKTsKCQkJaWYgKGlzX251bGwoJHJlc3VsdCkgfHwgKCEgaXNfbnVsbCgkcmVzdWx0KSAmJiAkcmVzdWx0KSkKCQkJCSRuZXdTdGFja1tdID0gJG5vZGU7CgkJfQoJCSR0aGlzLT5lbGVtZW50cyA9ICRuZXdTdGFjazsKCQlyZXR1cm4gJF9za2lwSGlzdG9yeQoJCQk/ICR0aGlzCgkJCTogJHRoaXMtPm5ld0luc3RhbmNlKCk7Cgl9CgkvKioKCSAqIEVudGVyIGRlc2NyaXB0aW9uIGhlcmUuLi4KCSAqCgkgKiBAcmV0dXJuIHBocFF1ZXJ5T2JqZWN0fFF1ZXJ5VGVtcGxhdGVzU291cmNlfFF1ZXJ5VGVtcGxhdGVzUGFyc2V8UXVlcnlUZW1wbGF0ZXNTb3VyY2VRdWVyeQoJICogQGxpbmsgaHR0cDovL2RvY3MuanF1ZXJ5LmNvbS9UcmF2ZXJzaW5nL2ZpbHRlcgoJICovCglwdWJsaWMgZnVuY3Rpb24gZmlsdGVyKCRzZWxlY3RvcnMsICRfc2tpcEhpc3RvcnkgPSBmYWxzZSkgewoJCWlmICgkc2VsZWN0b3JzIGluc3RhbmNlb2YgQ2FsbGJhY2sgT1IgJHNlbGVjdG9ycyBpbnN0YW5jZW9mIENsb3N1cmUpCgkJCXJldHVybiAkdGhpcy0+ZmlsdGVyQ2FsbGJhY2soJHNlbGVjdG9ycywgJF9za2lwSGlzdG9yeSk7CgkJaWYgKCEgJF9za2lwSGlzdG9yeSkKCQkJJHRoaXMtPmVsZW1lbnRzQmFja3VwID0gJHRoaXMtPmVsZW1lbnRzOwoJCSRub3RTaW1wbGVTZWxlY3RvciA9IGFycmF5KCcgJywgJz4nLCAnficsICcrJywgJy8nKTsKCQlpZiAoISBpc19hcnJheSgkc2VsZWN0b3JzKSkKCQkJJHNlbGVjdG9ycyA9ICR0aGlzLT5wYXJzZVNlbGVjdG9yKCRzZWxlY3RvcnMpOwoJCWlmICghICRfc2tpcEhpc3RvcnkpCgkJCSR0aGlzLT5kZWJ1ZyhhcnJheSgiRmlsdGVyaW5nOiIsICRzZWxlY3RvcnMpKTsKCQkkZmluYWxTdGFjayA9IGFycmF5KCk7CgkJZm9yZWFjaCgkc2VsZWN0b3JzIGFzICRzZWxlY3RvcikgewoJCQkkc3RhY2sgPSBhcnJheSgpOwoJCQlpZiAoISAkc2VsZWN0b3IpCgkJCQlicmVhazsKCQkJLy8gYXZvaWQgZmlyc3Qgc3BhY2Ugb3IgLwoJCQlpZiAoaW5fYXJyYXkoJHNlbGVjdG9yWzBdLCAkbm90U2ltcGxlU2VsZWN0b3IpKQoJCQkJJHNlbGVjdG9yID0gYXJyYXlfc2xpY2UoJHNlbGVjdG9yLCAxKTsKCQkJLy8gUEVSIE5PREUgc2VsZWN0b3IgY2h1bmtzCgkJCWZvcmVhY2goJHRoaXMtPnN0YWNrKCkgYXMgJG5vZGUpIHsKCQkJCSRicmVhayA9IGZhbHNlOwoJCQkJZm9yZWFjaCgkc2VsZWN0b3IgYXMgJHMpIHsKCQkJCQlpZiAoISgkbm9kZSBpbnN0YW5jZW9mIERPTUVMRU1FTlQpKSB7CgkJCQkJCS8vIGFsbCBiZXNpZGVzIERPTUVsZW1lbnQKCQkJCQkJaWYgKCAkc1swXSA9PSAnWycpIHsKCQkJCQkJCSRhdHRyID0gdHJpbSgkcywgJ1tdJyk7CgkJCQkJCQlpZiAoIG1iX3N0cnBvcygkYXR0ciwgJz0nKSkgewoJCQkJCQkJCWxpc3QoICRhdHRyLCAkdmFsICkgPSBleHBsb2RlKCc9JywgJGF0dHIpOwoJCQkJCQkJCWlmICgkYXR0ciA9PSAnbm9kZVR5cGUnICYmICRub2RlLT5ub2RlVHlwZSAhPSAkdmFsKQoJCQkJCQkJCQkkYnJlYWsgPSB0cnVlOwoJCQkJCQkJfQoJCQkJCQl9IGVsc2UKCQkJCQkJCSRicmVhayA9IHRydWU7CgkJCQkJfSBlbHNlIHsKCQkJCQkJLy8gRE9NRWxlbWVudCBvbmx5CgkJCQkJCS8vIElECgkJCQkJCWlmICggJHNbMF0gPT0gJyMnKSB7CgkJCQkJCQlpZiAoICRub2RlLT5nZXRBdHRyaWJ1dGUoJ2lkJykgIT0gc3Vic3RyKCRzLCAxKSApCgkJCQkJCQkJJGJyZWFrID0gdHJ1ZTsKCQkJCQkJLy8gQ0xBU1NFUwoJCQkJCQl9IGVsc2UgaWYgKCAkc1swXSA9PSAnLicpIHsKCQkJCQkJCWlmICghICR0aGlzLT5tYXRjaENsYXNzZXMoICRzLCAkbm9kZSApICkKCQkJCQkJCQkkYnJlYWsgPSB0cnVlOwoJCQkJCQkvLyBBVFRSUwoJCQkJCQl9IGVsc2UgaWYgKCAkc1swXSA9PSAnWycpIHsKCQkJCQkJCS8vIHN0cmlwIHNpZGUgYnJhY2tldHMKCQkJCQkJCSRhdHRyID0gdHJpbSgkcywgJ1tdJyk7CgkJCQkJCQlpZiAobWJfc3RycG9zKCRhdHRyLCAnPScpKSB7CgkJCQkJCQkJbGlzdCgkYXR0ciwgJHZhbCkgPSBleHBsb2RlKCc9JywgJGF0dHIpOwoJCQkJCQkJCSR2YWwgPSBzZWxmOjp1blF1b3RlKCR2YWwpOwoJCQkJCQkJCWlmICgkYXR0ciA9PSAnbm9kZVR5cGUnKSB7CgkJCQkJCQkJCWlmICgkdmFsICE9ICRub2RlLT5ub2RlVHlwZSkKCQkJCQkJCQkJCSRicmVhayA9IHRydWU7CgkJCQkJCQkJfSBlbHNlIGlmICgkdGhpcy0+aXNSZWdleHAoJGF0dHIpKSB7CgkJCQkJCQkJCSR2YWwgPSBleHRlbnNpb25fbG9hZGVkKCdtYnN0cmluZycpICYmIHBocFF1ZXJ5OjokbWJzdHJpbmdTdXBwb3J0CgkJCQkJCQkJCQk/IHF1b3RlbWV0YSh0cmltKCR2YWwsICciXCcnKSkKCQkJCQkJCQkJCTogcHJlZ19xdW90ZSh0cmltKCR2YWwsICciXCcnKSwgJ0AnKTsKCQkJCQkJCQkJLy8gc3dpdGNoIGxhc3QgY2hhcmFjdGVyCgkJCQkJCQkJCXN3aXRjaCggc3Vic3RyKCRhdHRyLCAtMSkpIHsKCQkJCQkJCQkJCS8vIHF1b3RlbWV0YSB1c2VkIGluc3RlZCBvZiBwcmVnX3F1b3RlCgkJCQkJCQkJCQkvLyBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvcGhwcXVlcnkvaXNzdWVzL2RldGFpbD9pZD03NgoJCQkJCQkJCQkJY2FzZSAnXic6CgkJCQkJCQkJCQkJJHBhdHRlcm4gPSAnXicuJHZhbDsKCQkJCQkJCQkJCQlicmVhazsKCQkJCQkJCQkJCWNhc2UgJyonOgoJCQkJCQkJCQkJCSRwYXR0ZXJuID0gJy4qJy4kdmFsLicuKic7CgkJCQkJCQkJCQkJYnJlYWs7CgkJCQkJCQkJCQljYXNlICckJzoKCQkJCQkJCQkJCQkkcGF0dGVybiA9ICcuKicuJHZhbC4nJCc7CgkJCQkJCQkJCQkJYnJlYWs7CgkJCQkJCQkJCX0KCQkJCQkJCQkJLy8gY3V0IGxhc3QgY2hhcmFjdGVyCgkJCQkJCQkJCSRhdHRyID0gc3Vic3RyKCRhdHRyLCAwLCAtMSk7CgkJCQkJCQkJCSRpc01hdGNoID0gZXh0ZW5zaW9uX2xvYWRlZCgnbWJzdHJpbmcnKSAmJiBwaHBRdWVyeTo6JG1ic3RyaW5nU3VwcG9ydAoJCQkJCQkJCQkJPyBtYl9lcmVnX21hdGNoKCRwYXR0ZXJuLCAkbm9kZS0+Z2V0QXR0cmlidXRlKCRhdHRyKSkKCQkJCQkJCQkJCTogcHJlZ19tYXRjaCgiQHskcGF0dGVybn1AIiwgJG5vZGUtPmdldEF0dHJpYnV0ZSgkYXR0cikpOwoJCQkJCQkJCQlpZiAoISAkaXNNYXRjaCkKCQkJCQkJCQkJCSRicmVhayA9IHRydWU7CgkJCQkJCQkJfSBlbHNlIGlmICgkbm9kZS0+Z2V0QXR0cmlidXRlKCRhdHRyKSAhPSAkdmFsKQoJCQkJCQkJCQkkYnJlYWsgPSB0cnVlOwoJCQkJCQkJfSBlbHNlIGlmICghICRub2RlLT5oYXNBdHRyaWJ1dGUoJGF0dHIpKQoJCQkJCQkJCSRicmVhayA9IHRydWU7CgkJCQkJCS8vIFBTRVVETyBDTEFTU0VTCgkJCQkJCX0gZWxzZSBpZiAoICRzWzBdID09ICc6JykgewoJCQkJCQkJLy8gc2tpcAoJCQkJCQkvLyBUQUcKCQkJCQkJfSBlbHNlIGlmICh0cmltKCRzKSkgewoJCQkJCQkJaWYgKCRzICE9ICcqJykgewoJCQkJCQkJCS8vIFRPRE8gbmFtZXNwYWNlcwoJCQkJCQkJCWlmIChpc3NldCgkbm9kZS0+dGFnTmFtZSkpIHsKCQkJCQkJCQkJaWYgKCRub2RlLT50YWdOYW1lICE9ICRzKQoJCQkJCQkJCQkJJGJyZWFrID0gdHJ1ZTsKCQkJCQkJCQl9IGVsc2UgaWYgKCRzID09ICdodG1sJyAmJiAhICR0aGlzLT5pc1Jvb3QoJG5vZGUpKQoJCQkJCQkJCQkkYnJlYWsgPSB0cnVlOwoJCQkJCQkJfQoJCQkJCQkvLyBBVk9JRCBOT04tU0lNUExFIFNFTEVDVE9SUwoJCQkJCQl9IGVsc2UgaWYgKGluX2FycmF5KCRzLCAkbm90U2ltcGxlU2VsZWN0b3IpKSB7CgkJCQkJCQkkYnJlYWsgPSB0cnVlOwoJCQkJCQkJJHRoaXMtPmRlYnVnKGFycmF5KCdTa2lwcGluZyBub24gc2ltcGxlIHNlbGVjdG9yJywgJHNlbGVjdG9yKSk7CgkJCQkJCX0KCQkJCQl9CgkJCQkJaWYgKCRicmVhaykKCQkJCQkJYnJlYWs7CgkJCQl9CgkJCQkvLyBpZiBlbGVtZW50IHBhc3NlZCBhbGwgY2h1bmtzIG9mIHNlbGVjdG9yIC0gYWRkIGl0IHRvIG5ldyBzdGFjawoJCQkJaWYgKCEgJGJyZWFrICkKCQkJCQkkc3RhY2tbXSA9ICRub2RlOwoJCQl9CgkJCSR0bXBTdGFjayA9ICR0aGlzLT5lbGVtZW50czsKCQkJJHRoaXMtPmVsZW1lbnRzID0gJHN0YWNrOwoJCQkvLyBQRVIgQUxMIE5PREVTIHNlbGVjdG9yIGNodW5rcwoJCQlmb3JlYWNoKCRzZWxlY3RvciBhcyAkcykKCQkJCS8vIFBTRVVETyBDTEFTU0VTCgkJCQlpZiAoJHNbMF0gPT0gJzonKQoJCQkJCSR0aGlzLT5wc2V1ZG9DbGFzc2VzKCRzKTsKCQkJZm9yZWFjaCgkdGhpcy0+ZWxlbWVudHMgYXMgJG5vZGUpCgkJCQkvLyBYWFggaXQgc2hvdWxkIGJlIG1lcmdlZCB3aXRob3V0IGR1cGxpY2F0ZXMKCQkJCS8vIGJ1dCBqUXVlcnkgZG9lc250IGRvIHRoYXQKCQkJCSRmaW5hbFN0YWNrW10gPSAkbm9kZTsKCQkJJHRoaXMtPmVsZW1lbnRzID0gJHRtcFN0YWNrOwoJCX0KCQkkdGhpcy0+ZWxlbWVudHMgPSAkZmluYWxTdGFjazsKCQlpZiAoJF9za2lwSGlzdG9yeSkgewoJCQlyZXR1cm4gJHRoaXM7CgkJfSBlbHNlIHsKCQkJJHRoaXMtPmRlYnVnKCJTdGFjayBsZW5ndGggYWZ0ZXIgZmlsdGVyKCk6ICIuY291bnQoJGZpbmFsU3RhY2spKTsKCQkJcmV0dXJuICR0aGlzLT5uZXdJbnN0YW5jZSgpOwoJCX0KCX0KCS8qKgoJICoKCSAqIEBwYXJhbSAkdmFsdWUKCSAqIEByZXR1cm4gdW5rbm93bl90eXBlCgkgKiBAVE9ETyBpbXBsZW1lbnQgaW4gYWxsIG1ldGhvZHMgdXNpbmcgcGFzc2VkIHBhcmFtZXRlcnMKCSAqLwoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiB1blF1b3RlKCR2YWx1ZSkgewoJCXJldHVybiAkdmFsdWVbMF0gPT0gJ1wnJyB8fCAkdmFsdWVbMF0gPT0gJyInCgkJCT8gc3Vic3RyKCR2YWx1ZSwgMSwgLTEpCgkJCTogJHZhbHVlOwoJfQoJLyoqCgkgKiBFbnRlciBkZXNjcmlwdGlvbiBoZXJlLi4uCgkgKgoJICogQGxpbmsgaHR0cDovL2RvY3MuanF1ZXJ5LmNvbS9BamF4L2xvYWQKCSAqIEByZXR1cm4gcGhwUXVlcnl8UXVlcnlUZW1wbGF0ZXNTb3VyY2V8UXVlcnlUZW1wbGF0ZXNQYXJzZXxRdWVyeVRlbXBsYXRlc1NvdXJjZVF1ZXJ5CgkgKiBAdG9kbyBTdXBwb3J0ICRzZWxlY3RvcgoJICovCglwdWJsaWMgZnVuY3Rpb24gbG9hZCgkdXJsLCAkZGF0YSA9IG51bGwsICRjYWxsYmFjayA9IG51bGwpIHsKCQlpZiAoJGRhdGEgJiYgISBpc19hcnJheSgkZGF0YSkpIHsKCQkJJGNhbGxiYWNrID0gJGRhdGE7CgkJCSRkYXRhID0gbnVsbDsKCQl9CgkJaWYgKG1iX3N0cnBvcygkdXJsLCAnICcpICE9PSBmYWxzZSkgewoJCQkkbWF0Y2hlcyA9IG51bGw7CgkJCWlmIChleHRlbnNpb25fbG9hZGVkKCdtYnN0cmluZycpICYmIHBocFF1ZXJ5OjokbWJzdHJpbmdTdXBwb3J0KQoJCQkJbWJfZXJlZygnXihbXiBdKykgKC4qKSQnLCAkdXJsLCAkbWF0Y2hlcyk7CgkJCWVsc2UKCQkJCXByZWdfbWF0Y2goJ14oW14gXSspICguKikkJywgJHVybCwgJG1hdGNoZXMpOwoJCQkkdXJsID0gJG1hdGNoZXNbMV07CgkJCSRzZWxlY3RvciA9ICRtYXRjaGVzWzJdOwoJCQkvLyBGSVhNRSB0aGlzIHN1Y2tzLCBwYXNzIGFzIGNhbGxiYWNrIHBhcmFtCgkJCSR0aGlzLT5fbG9hZFNlbGVjdG9yID0gJHNlbGVjdG9yOwoJCX0KCQkkYWpheCA9IGFycmF5KAoJCQkndXJsJyA9PiAkdXJsLAoJCQkndHlwZScgPT4gJGRhdGEgPyAnUE9TVCcgOiAnR0VUJywKCQkJJ2RhdGEnID0+ICRkYXRhLAoJCQknY29tcGxldGUnID0+ICRjYWxsYmFjaywKCQkJJ3N1Y2Nlc3MnID0+IGFycmF5KCR0aGlzLCAnX19sb2FkU3VjY2VzcycpCgkJKTsKCQlwaHBRdWVyeTo6YWpheCgkYWpheCk7CgkJcmV0dXJuICR0aGlzOwoJfQoJLyoqCgkgKiBAYWNjZXNzIHByaXZhdGUKCSAqIEBwYXJhbSAkaHRtbAoJICogQHJldHVybiB1bmtub3duX3R5cGUKCSAqLwoJcHVibGljIGZ1bmN0aW9uIF9fbG9hZFN1Y2Nlc3MoJGh0bWwpIHsKCQlpZiAoJHRoaXMtPl9sb2FkU2VsZWN0b3IpIHsKCQkJJGh0bWwgPSBwaHBRdWVyeTo6bmV3RG9jdW1lbnQoJGh0bWwpLT5maW5kKCR0aGlzLT5fbG9hZFNlbGVjdG9yKTsKCQkJdW5zZXQoJHRoaXMtPl9sb2FkU2VsZWN0b3IpOwoJCX0KCQlmb3JlYWNoKCR0aGlzLT5zdGFjaygxKSBhcyAkbm9kZSkgewoJCQlwaHBRdWVyeTo6cHEoJG5vZGUsICR0aGlzLT5nZXREb2N1bWVudElEKCkpCgkJCQktPm1hcmt1cCgkaHRtbCk7CgkJfQoJfQoJLyoqCgkgKiBFbnRlciBkZXNjcmlwdGlvbiBoZXJlLi4uCgkgKgoJICogQHJldHVybiBwaHBRdWVyeXxRdWVyeVRlbXBsYXRlc1NvdXJjZXxRdWVyeVRlbXBsYXRlc1BhcnNlfFF1ZXJ5VGVtcGxhdGVzU291cmNlUXVlcnkKCSAqIEB0b2RvCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBjc3MoKSB7CgkJLy8gVE9ETwoJCXJldHVybiAkdGhpczsKCX0KCS8qKgoJICogQHRvZG8KCSAqCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzaG93KCl7CgkJLy8gVE9ETwoJCXJldHVybiAkdGhpczsKCX0KCS8qKgoJICogQHRvZG8KCSAqCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBoaWRlKCl7CgkJLy8gVE9ETwoJCXJldHVybiAkdGhpczsKCX0KCS8qKgoJICogVHJpZ2dlciBhIHR5cGUgb2YgZXZlbnQgb24gZXZlcnkgbWF0Y2hlZCBlbGVtZW50LgoJICoKCSAqIEBwYXJhbSB1bmtub3duX3R5cGUgJHR5cGUKCSAqIEBwYXJhbSB1bmtub3duX3R5cGUgJGRhdGEKCSAqIEByZXR1cm4gcGhwUXVlcnlPYmplY3R8UXVlcnlUZW1wbGF0ZXNTb3VyY2V8UXVlcnlUZW1wbGF0ZXNQYXJzZXxRdWVyeVRlbXBsYXRlc1NvdXJjZVF1ZXJ5CgkgKiBAVE9ETyBzdXBwb3J0IG1vcmUgdGhhbiBldmVudCBpbiAkdHlwZSAoc3BhY2Utc2VwYXJhdGVkKQoJICovCglwdWJsaWMgZnVuY3Rpb24gdHJpZ2dlcigkdHlwZSwgJGRhdGEgPSBhcnJheSgpKSB7CgkJZm9yZWFjaCgkdGhpcy0+ZWxlbWVudHMgYXMgJG5vZGUpCgkJCXBocFF1ZXJ5RXZlbnRzOjp0cmlnZ2VyKCR0aGlzLT5nZXREb2N1bWVudElEKCksICR0eXBlLCAkZGF0YSwgJG5vZGUpOwoJCXJldHVybiAkdGhpczsKCX0KCS8qKgoJICogVGhpcyBwYXJ0aWN1bGFyIG1ldGhvZCB0cmlnZ2VycyBhbGwgYm91bmQgZXZlbnQgaGFuZGxlcnMgb24gYW4gZWxlbWVudCAoZm9yIGEgc3BlY2lmaWMgZXZlbnQgdHlwZSkgV0lUSE9VVCBleGVjdXRpbmcgdGhlIGJyb3dzZXJzIGRlZmF1bHQgYWN0aW9ucy4KCSAqCgkgKiBAcGFyYW0gdW5rbm93bl90eXBlICR0eXBlCgkgKiBAcGFyYW0gdW5rbm93bl90eXBlICRkYXRhCgkgKiBAcmV0dXJuIHBocFF1ZXJ5T2JqZWN0fFF1ZXJ5VGVtcGxhdGVzU291cmNlfFF1ZXJ5VGVtcGxhdGVzUGFyc2V8UXVlcnlUZW1wbGF0ZXNTb3VyY2VRdWVyeQoJICogQFRPRE8KCSAqLwoJcHVibGljIGZ1bmN0aW9uIHRyaWdnZXJIYW5kbGVyKCR0eXBlLCAkZGF0YSA9IGFycmF5KCkpIHsKCQkvLyBUT0RPOwoJfQoJLyoqCgkgKiBCaW5kcyBhIGhhbmRsZXIgdG8gb25lIG9yIG1vcmUgZXZlbnRzIChsaWtlIGNsaWNrKSBmb3IgZWFjaCBtYXRjaGVkIGVsZW1lbnQuCgkgKiBDYW4gYWxzbyBiaW5kIGN1c3RvbSBldmVudHMuCgkgKgoJICogQHBhcmFtIHVua25vd25fdHlwZSAkdHlwZQoJICogQHBhcmFtIHVua25vd25fdHlwZSAkZGF0YSBPcHRpb25hbAoJICogQHBhcmFtIHVua25vd25fdHlwZSAkY2FsbGJhY2sKCSAqIEByZXR1cm4gcGhwUXVlcnlPYmplY3R8UXVlcnlUZW1wbGF0ZXNTb3VyY2V8UXVlcnlUZW1wbGF0ZXNQYXJzZXxRdWVyeVRlbXBsYXRlc1NvdXJjZVF1ZXJ5CgkgKiBAVE9ETyBzdXBwb3J0ICchJyAoZXhjbHVzaXZlKSBldmVudHMKCSAqIEBUT0RPIHN1cHBvcnQgbW9yZSB0aGFuIGV2ZW50IGluICR0eXBlIChzcGFjZS1zZXBhcmF0ZWQpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBiaW5kKCR0eXBlLCAkZGF0YSwgJGNhbGxiYWNrID0gbnVsbCkgewoJCS8vIFRPRE8gY2hlY2sgaWYgJGRhdGEgaXMgY2FsbGFibGUsIG5vdCB1c2luZyBpc19jYWxsYWJsZQoJCWlmICghIGlzc2V0KCRjYWxsYmFjaykpIHsKCQkJJGNhbGxiYWNrID0gJGRhdGE7CgkJCSRkYXRhID0gbnVsbDsKCQl9CgkJZm9yZWFjaCgkdGhpcy0+ZWxlbWVudHMgYXMgJG5vZGUpCgkJCXBocFF1ZXJ5RXZlbnRzOjphZGQoJHRoaXMtPmdldERvY3VtZW50SUQoKSwgJG5vZGUsICR0eXBlLCAkZGF0YSwgJGNhbGxiYWNrKTsKCQlyZXR1cm4gJHRoaXM7Cgl9CgkvKioKCSAqIEVudGVyIGRlc2NyaXB0aW9uIGhlcmUuLi4KCSAqCgkgKiBAcGFyYW0gdW5rbm93bl90eXBlICR0eXBlCgkgKiBAcGFyYW0gdW5rbm93bl90eXBlICRjYWxsYmFjawoJICogQHJldHVybiB1bmtub3duCgkgKiBAVE9ETyBuYW1lc3BhY2UgZXZlbnRzCgkgKiBAVE9ETyBzdXBwb3J0IG1vcmUgdGhhbiBldmVudCBpbiAkdHlwZSAoc3BhY2Utc2VwYXJhdGVkKQoJICovCglwdWJsaWMgZnVuY3Rpb24gdW5iaW5kKCR0eXBlID0gbnVsbCwgJGNhbGxiYWNrID0gbnVsbCkgewoJCWZvcmVhY2goJHRoaXMtPmVsZW1lbnRzIGFzICRub2RlKQoJCQlwaHBRdWVyeUV2ZW50czo6cmVtb3ZlKCR0aGlzLT5nZXREb2N1bWVudElEKCksICRub2RlLCAkdHlwZSwgJGNhbGxiYWNrKTsKCQlyZXR1cm4gJHRoaXM7Cgl9CgkvKioKCSAqIEVudGVyIGRlc2NyaXB0aW9uIGhlcmUuLi4KCSAqCgkgKiBAcmV0dXJuIHBocFF1ZXJ5T2JqZWN0fFF1ZXJ5VGVtcGxhdGVzU291cmNlfFF1ZXJ5VGVtcGxhdGVzUGFyc2V8UXVlcnlUZW1wbGF0ZXNTb3VyY2VRdWVyeQoJICovCglwdWJsaWMgZnVuY3Rpb24gY2hhbmdlKCRjYWxsYmFjayA9IG51bGwpIHsKCQlpZiAoJGNhbGxiYWNrKQoJCQlyZXR1cm4gJHRoaXMtPmJpbmQoJ2NoYW5nZScsICRjYWxsYmFjayk7CgkJcmV0dXJuICR0aGlzLT50cmlnZ2VyKCdjaGFuZ2UnKTsKCX0KCS8qKgoJICogRW50ZXIgZGVzY3JpcHRpb24gaGVyZS4uLgoJICoKCSAqIEByZXR1cm4gcGhwUXVlcnlPYmplY3R8UXVlcnlUZW1wbGF0ZXNTb3VyY2V8UXVlcnlUZW1wbGF0ZXNQYXJzZXxRdWVyeVRlbXBsYXRlc1NvdXJjZVF1ZXJ5CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzdWJtaXQoJGNhbGxiYWNrID0gbnVsbCkgewoJCWlmICgkY2FsbGJhY2spCgkJCXJldHVybiAkdGhpcy0+YmluZCgnc3VibWl0JywgJGNhbGxiYWNrKTsKCQlyZXR1cm4gJHRoaXMtPnRyaWdnZXIoJ3N1Ym1pdCcpOwoJfQoJLyoqCgkgKiBFbnRlciBkZXNjcmlwdGlvbiBoZXJlLi4uCgkgKgoJICogQHJldHVybiBwaHBRdWVyeU9iamVjdHxRdWVyeVRlbXBsYXRlc1NvdXJjZXxRdWVyeVRlbXBsYXRlc1BhcnNlfFF1ZXJ5VGVtcGxhdGVzU291cmNlUXVlcnkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGNsaWNrKCRjYWxsYmFjayA9IG51bGwpIHsKCQlpZiAoJGNhbGxiYWNrKQoJCQlyZXR1cm4gJHRoaXMtPmJpbmQoJ2NsaWNrJywgJGNhbGxiYWNrKTsKCQlyZXR1cm4gJHRoaXMtPnRyaWdnZXIoJ2NsaWNrJyk7Cgl9CgkvKioKCSAqIEVudGVyIGRlc2NyaXB0aW9uIGhlcmUuLi4KCSAqCgkgKiBAcGFyYW0gU3RyaW5nfHBocFF1ZXJ5CgkgKiBAcmV0dXJuIHBocFF1ZXJ5T2JqZWN0fFF1ZXJ5VGVtcGxhdGVzU291cmNlfFF1ZXJ5VGVtcGxhdGVzUGFyc2V8UXVlcnlUZW1wbGF0ZXNTb3VyY2VRdWVyeQoJICovCglwdWJsaWMgZnVuY3Rpb24gd3JhcEFsbE9sZCgkd3JhcHBlcikgewoJCSR3cmFwcGVyID0gcHEoJHdyYXBwZXIpLT5fY2xvbmUoKTsKCQlpZiAoISAkd3JhcHBlci0+bGVuZ3RoKCkgfHwgISAkdGhpcy0+bGVuZ3RoKCkgKQoJCQlyZXR1cm4gJHRoaXM7CgkJJHdyYXBwZXItPmluc2VydEJlZm9yZSgkdGhpcy0+ZWxlbWVudHNbMF0pOwoJCSRkZWVwZXN0ID0gJHdyYXBwZXItPmVsZW1lbnRzWzBdOwoJCXdoaWxlKCRkZWVwZXN0LT5maXJzdENoaWxkICYmICRkZWVwZXN0LT5maXJzdENoaWxkIGluc3RhbmNlb2YgRE9NRUxFTUVOVCkKCQkJJGRlZXBlc3QgPSAkZGVlcGVzdC0+Zmlyc3RDaGlsZDsKCQlwcSgkZGVlcGVzdCktPmFwcGVuZCgkdGhpcyk7CgkJcmV0dXJuICR0aGlzOwoJfQoJLyoqCgkgKiBFbnRlciBkZXNjcmlwdGlvbiBoZXJlLi4uCgkgKgoJICogVE9ETyB0ZXN0bWUuLi4KCSAqIEBwYXJhbSBTdHJpbmd8cGhwUXVlcnkKCSAqIEByZXR1cm4gcGhwUXVlcnlPYmplY3R8UXVlcnlUZW1wbGF0ZXNTb3VyY2V8UXVlcnlUZW1wbGF0ZXNQYXJzZXxRdWVyeVRlbXBsYXRlc1NvdXJjZVF1ZXJ5CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiB3cmFwQWxsKCR3cmFwcGVyKSB7CgkJaWYgKCEgJHRoaXMtPmxlbmd0aCgpKQoJCQlyZXR1cm4gJHRoaXM7CgkJcmV0dXJuIHBocFF1ZXJ5OjpwcSgkd3JhcHBlciwgJHRoaXMtPmdldERvY3VtZW50SUQoKSkKCQkJLT5jbG9uZSgpCgkJCS0+aW5zZXJ0QmVmb3JlKCR0aGlzLT5nZXQoMCkpCgkJCS0+bWFwKGFycmF5KCR0aGlzLCAnX19fd3JhcEFsbENhbGxiYWNrJykpCgkJCS0+YXBwZW5kKCR0aGlzKTsKCX0KICAvKioKICAgKgoJICogQHBhcmFtICRub2RlCgkgKiBAcmV0dXJuIHVua25vd25fdHlwZQoJICogQGFjY2VzcyBwcml2YXRlCiAgICovCglwdWJsaWMgZnVuY3Rpb24gX19fd3JhcEFsbENhbGxiYWNrKCRub2RlKSB7CgkJJGRlZXBlc3QgPSAkbm9kZTsKCQl3aGlsZSgkZGVlcGVzdC0+Zmlyc3RDaGlsZCAmJiAkZGVlcGVzdC0+Zmlyc3RDaGlsZCBpbnN0YW5jZW9mIERPTUVMRU1FTlQpCgkJCSRkZWVwZXN0ID0gJGRlZXBlc3QtPmZpcnN0Q2hpbGQ7CgkJcmV0dXJuICRkZWVwZXN0OwoJfQoJLyoqCgkgKiBFbnRlciBkZXNjcmlwdGlvbiBoZXJlLi4uCgkgKiBOT04gSlFVRVJZIE1FVEhPRAoJICoKCSAqIEBwYXJhbSBTdHJpbmd8cGhwUXVlcnkKCSAqIEByZXR1cm4gcGhwUXVlcnlPYmplY3R8UXVlcnlUZW1wbGF0ZXNTb3VyY2V8UXVlcnlUZW1wbGF0ZXNQYXJzZXxRdWVyeVRlbXBsYXRlc1NvdXJjZVF1ZXJ5CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiB3cmFwQWxsUEhQKCRjb2RlQmVmb3JlLCAkY29kZUFmdGVyKSB7CgkJcmV0dXJuICR0aGlzCgkJCS0+c2xpY2UoMCwgMSkKCQkJCS0+YmVmb3JlUEhQKCRjb2RlQmVmb3JlKQoJCQktPmVuZCgpCgkJCS0+c2xpY2UoLTEpCgkJCQktPmFmdGVyUEhQKCRjb2RlQWZ0ZXIpCgkJCS0+ZW5kKCk7Cgl9CgkvKioKCSAqIEVudGVyIGRlc2NyaXB0aW9uIGhlcmUuLi4KCSAqCgkgKiBAcGFyYW0gU3RyaW5nfHBocFF1ZXJ5CgkgKiBAcmV0dXJuIHBocFF1ZXJ5T2JqZWN0fFF1ZXJ5VGVtcGxhdGVzU291cmNlfFF1ZXJ5VGVtcGxhdGVzUGFyc2V8UXVlcnlUZW1wbGF0ZXNTb3VyY2VRdWVyeQoJICovCglwdWJsaWMgZnVuY3Rpb24gd3JhcCgkd3JhcHBlcikgewoJCWZvcmVhY2goJHRoaXMtPnN0YWNrKCkgYXMgJG5vZGUpCgkJCXBocFF1ZXJ5OjpwcSgkbm9kZSwgJHRoaXMtPmdldERvY3VtZW50SUQoKSktPndyYXBBbGwoJHdyYXBwZXIpOwoJCXJldHVybiAkdGhpczsKCX0KCS8qKgoJICogRW50ZXIgZGVzY3JpcHRpb24gaGVyZS4uLgoJICoKCSAqIEBwYXJhbSBTdHJpbmd8cGhwUXVlcnkKCSAqIEByZXR1cm4gcGhwUXVlcnlPYmplY3R8UXVlcnlUZW1wbGF0ZXNTb3VyY2V8UXVlcnlUZW1wbGF0ZXNQYXJzZXxRdWVyeVRlbXBsYXRlc1NvdXJjZVF1ZXJ5CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiB3cmFwUEhQKCRjb2RlQmVmb3JlLCAkY29kZUFmdGVyKSB7CgkJZm9yZWFjaCgkdGhpcy0+c3RhY2soKSBhcyAkbm9kZSkKCQkJcGhwUXVlcnk6OnBxKCRub2RlLCAkdGhpcy0+Z2V0RG9jdW1lbnRJRCgpKS0+d3JhcEFsbFBIUCgkY29kZUJlZm9yZSwgJGNvZGVBZnRlcik7CgkJcmV0dXJuICR0aGlzOwoJfQoJLyoqCgkgKiBFbnRlciBkZXNjcmlwdGlvbiBoZXJlLi4uCgkgKgoJICogQHBhcmFtIFN0cmluZ3xwaHBRdWVyeQoJICogQHJldHVybiBwaHBRdWVyeU9iamVjdHxRdWVyeVRlbXBsYXRlc1NvdXJjZXxRdWVyeVRlbXBsYXRlc1BhcnNlfFF1ZXJ5VGVtcGxhdGVzU291cmNlUXVlcnkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHdyYXBJbm5lcigkd3JhcHBlcikgewoJCWZvcmVhY2goJHRoaXMtPnN0YWNrKCkgYXMgJG5vZGUpCgkJCXBocFF1ZXJ5OjpwcSgkbm9kZSwgJHRoaXMtPmdldERvY3VtZW50SUQoKSktPmNvbnRlbnRzKCktPndyYXBBbGwoJHdyYXBwZXIpOwoJCXJldHVybiAkdGhpczsKCX0KCS8qKgoJICogRW50ZXIgZGVzY3JpcHRpb24gaGVyZS4uLgoJICoKCSAqIEBwYXJhbSBTdHJpbmd8cGhwUXVlcnkKCSAqIEByZXR1cm4gcGhwUXVlcnlPYmplY3R8UXVlcnlUZW1wbGF0ZXNTb3VyY2V8UXVlcnlUZW1wbGF0ZXNQYXJzZXxRdWVyeVRlbXBsYXRlc1NvdXJjZVF1ZXJ5CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiB3cmFwSW5uZXJQSFAoJGNvZGVCZWZvcmUsICRjb2RlQWZ0ZXIpIHsKCQlmb3JlYWNoKCR0aGlzLT5zdGFjaygxKSBhcyAkbm9kZSkKCQkJcGhwUXVlcnk6OnBxKCRub2RlLCAkdGhpcy0+Z2V0RG9jdW1lbnRJRCgpKS0+Y29udGVudHMoKQoJCQkJLT53cmFwQWxsUEhQKCRjb2RlQmVmb3JlLCAkY29kZUFmdGVyKTsKCQlyZXR1cm4gJHRoaXM7Cgl9CgkvKioKCSAqIEVudGVyIGRlc2NyaXB0aW9uIGhlcmUuLi4KCSAqCgkgKiBAcmV0dXJuIHBocFF1ZXJ5T2JqZWN0fFF1ZXJ5VGVtcGxhdGVzU291cmNlfFF1ZXJ5VGVtcGxhdGVzUGFyc2V8UXVlcnlUZW1wbGF0ZXNTb3VyY2VRdWVyeQoJICogQHRlc3RtZSBTdXBwb3J0IGZvciB0ZXh0IG5vZGVzCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBjb250ZW50cygpIHsKCQkkc3RhY2sgPSBhcnJheSgpOwoJCWZvcmVhY2goJHRoaXMtPnN0YWNrKDEpIGFzICRlbCkgewoJCQkvLyBGSVhNRSAoZml4ZWQpIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9waHBxdWVyeS9pc3N1ZXMvZGV0YWlsP2lkPTU2Ci8vCQkJaWYgKCEgaXNzZXQoJGVsLT5jaGlsZE5vZGVzKSkKLy8JCQkJY29udGludWU7CgkJCWZvcmVhY2goJGVsLT5jaGlsZE5vZGVzIGFzICRub2RlKSB7CgkJCQkkc3RhY2tbXSA9ICRub2RlOwoJCQl9CgkJfQoJCXJldHVybiAkdGhpcy0+bmV3SW5zdGFuY2UoJHN0YWNrKTsKCX0KCS8qKgoJICogRW50ZXIgZGVzY3JpcHRpb24gaGVyZS4uLgoJICoKCSAqIGpRdWVyeSBkaWZmZXJlbmNlLgoJICoKCSAqIEByZXR1cm4gcGhwUXVlcnlPYmplY3R8UXVlcnlUZW1wbGF0ZXNTb3VyY2V8UXVlcnlUZW1wbGF0ZXNQYXJzZXxRdWVyeVRlbXBsYXRlc1NvdXJjZVF1ZXJ5CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBjb250ZW50c1Vud3JhcCgpIHsKCQlmb3JlYWNoKCR0aGlzLT5zdGFjaygxKSBhcyAkbm9kZSkgewoJCQlpZiAoISAkbm9kZS0+cGFyZW50Tm9kZSApCgkJCQljb250aW51ZTsKCQkJJGNoaWxkTm9kZXMgPSBhcnJheSgpOwoJCQkvLyBhbnkgbW9kaWZpY2F0aW9uIGluIERPTSB0cmVlIGJyZWFrcyBjaGlsZE5vZGVzIGl0ZXJhdGlvbiwgc28gY2FjaGUgdGhlbSBmaXJzdAoJCQlmb3JlYWNoKCRub2RlLT5jaGlsZE5vZGVzIGFzICRjaE5vZGUgKQoJCQkJJGNoaWxkTm9kZXNbXSA9ICRjaE5vZGU7CgkJCWZvcmVhY2goJGNoaWxkTm9kZXMgYXMgJGNoTm9kZSApCi8vCQkJCSRub2RlLT5wYXJlbnROb2RlLT5hcHBlbmRDaGlsZCgkY2hOb2RlKTsKCQkJCSRub2RlLT5wYXJlbnROb2RlLT5pbnNlcnRCZWZvcmUoJGNoTm9kZSwgJG5vZGUpOwoJCQkkbm9kZS0+cGFyZW50Tm9kZS0+cmVtb3ZlQ2hpbGQoJG5vZGUpOwoJCX0KCQlyZXR1cm4gJHRoaXM7Cgl9CgkvKioKCSAqIEVudGVyIGRlc2NyaXB0aW9uIGhlcmUuLi4KCSAqCgkgKiBqUXVlcnkgZGlmZmVyZW5jZS4KCSAqLwoJcHVibGljIGZ1bmN0aW9uIHN3aXRjaFdpdGgoJG1hcmt1cCkgewoJCSRtYXJrdXAgPSBwcSgkbWFya3VwLCAkdGhpcy0+Z2V0RG9jdW1lbnRJRCgpKTsKCQkkY29udGVudCA9IG51bGw7CgkJZm9yZWFjaCgkdGhpcy0+c3RhY2soMSkgYXMgJG5vZGUpIHsKCQkJcHEoJG5vZGUpCgkJCQktPmNvbnRlbnRzKCktPnRvUmVmZXJlbmNlKCRjb250ZW50KS0+ZW5kKCkKCQkJCS0+cmVwbGFjZVdpdGgoJG1hcmt1cC0+Y2xvbmUoKS0+YXBwZW5kKCRjb250ZW50KSk7CgkJfQoJCXJldHVybiAkdGhpczsKCX0KCS8qKgoJICogRW50ZXIgZGVzY3JpcHRpb24gaGVyZS4uLgoJICoKCSAqIEByZXR1cm4gcGhwUXVlcnlPYmplY3R8UXVlcnlUZW1wbGF0ZXNTb3VyY2V8UXVlcnlUZW1wbGF0ZXNQYXJzZXxRdWVyeVRlbXBsYXRlc1NvdXJjZVF1ZXJ5CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBlcSgkbnVtKSB7CgkJJG9sZFN0YWNrID0gJHRoaXMtPmVsZW1lbnRzOwoJCSR0aGlzLT5lbGVtZW50c0JhY2t1cCA9ICR0aGlzLT5lbGVtZW50czsKCQkkdGhpcy0+ZWxlbWVudHMgPSBhcnJheSgpOwoJCWlmICggaXNzZXQoJG9sZFN0YWNrWyRudW1dKSApCgkJCSR0aGlzLT5lbGVtZW50c1tdID0gJG9sZFN0YWNrWyRudW1dOwoJCXJldHVybiAkdGhpcy0+bmV3SW5zdGFuY2UoKTsKCX0KCS8qKgoJICogRW50ZXIgZGVzY3JpcHRpb24gaGVyZS4uLgoJICoKCSAqIEByZXR1cm4gcGhwUXVlcnlPYmplY3R8UXVlcnlUZW1wbGF0ZXNTb3VyY2V8UXVlcnlUZW1wbGF0ZXNQYXJzZXxRdWVyeVRlbXBsYXRlc1NvdXJjZVF1ZXJ5CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzaXplKCkgewoJCXJldHVybiBjb3VudCgkdGhpcy0+ZWxlbWVudHMpOwoJfQoJLyoqCgkgKiBFbnRlciBkZXNjcmlwdGlvbiBoZXJlLi4uCgkgKgoJICogQHJldHVybiBwaHBRdWVyeU9iamVjdHxRdWVyeVRlbXBsYXRlc1NvdXJjZXxRdWVyeVRlbXBsYXRlc1BhcnNlfFF1ZXJ5VGVtcGxhdGVzU291cmNlUXVlcnkKCSAqIEBkZXByZWNhdGVkIFVzZSBsZW5ndGggYXMgYXR0cmlidXRlCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBsZW5ndGgoKSB7CgkJcmV0dXJuICR0aGlzLT5zaXplKCk7Cgl9CglwdWJsaWMgZnVuY3Rpb24gY291bnQoKSB7CgkJcmV0dXJuICR0aGlzLT5zaXplKCk7Cgl9CgkvKioKCSAqIEVudGVyIGRlc2NyaXB0aW9uIGhlcmUuLi4KCSAqCgkgKiBAcmV0dXJuIHBocFF1ZXJ5T2JqZWN0fFF1ZXJ5VGVtcGxhdGVzU291cmNlfFF1ZXJ5VGVtcGxhdGVzUGFyc2V8UXVlcnlUZW1wbGF0ZXNTb3VyY2VRdWVyeQoJICogQHRvZG8gJGxldmVsCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBlbmQoJGxldmVsID0gMSkgewovLwkJJHRoaXMtPmVsZW1lbnRzID0gYXJyYXlfcG9wKCAkdGhpcy0+aGlzdG9yeSApOwovLwkJcmV0dXJuICR0aGlzOwovLwkJJHRoaXMtPnByZXZpb3VzLT5ET00gPSAkdGhpcy0+RE9NOwovLwkJJHRoaXMtPnByZXZpb3VzLT5YUGF0aCA9ICR0aGlzLT5YUGF0aDsKCQlyZXR1cm4gJHRoaXMtPnByZXZpb3VzCgkJCT8gJHRoaXMtPnByZXZpb3VzCgkJCTogJHRoaXM7Cgl9CgkvKioKCSAqIEVudGVyIGRlc2NyaXB0aW9uIGhlcmUuLi4KCSAqIE5vcm1hbCB1c2UgLT5jbG9uZSgpIC4KCSAqCgkgKiBAcmV0dXJuIHBocFF1ZXJ5T2JqZWN0fFF1ZXJ5VGVtcGxhdGVzU291cmNlfFF1ZXJ5VGVtcGxhdGVzUGFyc2V8UXVlcnlUZW1wbGF0ZXNTb3VyY2VRdWVyeQoJICogQGFjY2VzcyBwcml2YXRlCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBfY2xvbmUoKSB7CgkJJG5ld1N0YWNrID0gYXJyYXkoKTsKCQkvL3ByKGFycmF5KCdjb3B5Li4uICcsICR0aGlzLT53aG9pcygpKSk7CgkJLy8kdGhpcy0+ZHVtcEhpc3RvcnkoJ2NvcHknKTsKCQkkdGhpcy0+ZWxlbWVudHNCYWNrdXAgPSAkdGhpcy0+ZWxlbWVudHM7CgkJZm9yZWFjaCgkdGhpcy0+ZWxlbWVudHMgYXMgJG5vZGUpIHsKCQkJJG5ld1N0YWNrW10gPSAkbm9kZS0+Y2xvbmVOb2RlKHRydWUpOwoJCX0KCQkkdGhpcy0+ZWxlbWVudHMgPSAkbmV3U3RhY2s7CgkJcmV0dXJuICR0aGlzLT5uZXdJbnN0YW5jZSgpOwoJfQoJLyoqCgkgKiBFbnRlciBkZXNjcmlwdGlvbiBoZXJlLi4uCgkgKgoJICogQHJldHVybiBwaHBRdWVyeU9iamVjdHxRdWVyeVRlbXBsYXRlc1NvdXJjZXxRdWVyeVRlbXBsYXRlc1BhcnNlfFF1ZXJ5VGVtcGxhdGVzU291cmNlUXVlcnkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHJlcGxhY2VXaXRoUEhQKCRjb2RlKSB7CgkJcmV0dXJuICR0aGlzLT5yZXBsYWNlV2l0aChwaHBRdWVyeTo6cGhwKCRjb2RlKSk7Cgl9CgkvKioKCSAqIEVudGVyIGRlc2NyaXB0aW9uIGhlcmUuLi4KCSAqCgkgKiBAcGFyYW0gU3RyaW5nfHBocFF1ZXJ5ICRjb250ZW50CgkgKiBAbGluayBodHRwOi8vZG9jcy5qcXVlcnkuY29tL01hbmlwdWxhdGlvbi9yZXBsYWNlV2l0aCNjb250ZW50CgkgKiBAcmV0dXJuIHBocFF1ZXJ5T2JqZWN0fFF1ZXJ5VGVtcGxhdGVzU291cmNlfFF1ZXJ5VGVtcGxhdGVzUGFyc2V8UXVlcnlUZW1wbGF0ZXNTb3VyY2VRdWVyeQoJICovCglwdWJsaWMgZnVuY3Rpb24gcmVwbGFjZVdpdGgoJGNvbnRlbnQpIHsKCQlyZXR1cm4gJHRoaXMtPmFmdGVyKCRjb250ZW50KS0+cmVtb3ZlKCk7Cgl9CgkvKioKCSAqIEVudGVyIGRlc2NyaXB0aW9uIGhlcmUuLi4KCSAqCgkgKiBAcGFyYW0gU3RyaW5nICRzZWxlY3RvcgoJICogQHJldHVybiBwaHBRdWVyeU9iamVjdHxRdWVyeVRlbXBsYXRlc1NvdXJjZXxRdWVyeVRlbXBsYXRlc1BhcnNlfFF1ZXJ5VGVtcGxhdGVzU291cmNlUXVlcnkKCSAqIEB0b2RvIHRoaXMgd29ya3MgPwoJICovCglwdWJsaWMgZnVuY3Rpb24gcmVwbGFjZUFsbCgkc2VsZWN0b3IpIHsKCQlmb3JlYWNoKHBocFF1ZXJ5OjpwcSgkc2VsZWN0b3IsICR0aGlzLT5nZXREb2N1bWVudElEKCkpIGFzICRub2RlKQoJCQlwaHBRdWVyeTo6cHEoJG5vZGUsICR0aGlzLT5nZXREb2N1bWVudElEKCkpCgkJCQktPmFmdGVyKCR0aGlzLT5fY2xvbmUoKSkKCQkJCS0+cmVtb3ZlKCk7CgkJcmV0dXJuICR0aGlzOwoJfQoJLyoqCgkgKiBFbnRlciBkZXNjcmlwdGlvbiBoZXJlLi4uCgkgKgoJICogQHJldHVybiBwaHBRdWVyeU9iamVjdHxRdWVyeVRlbXBsYXRlc1NvdXJjZXxRdWVyeVRlbXBsYXRlc1BhcnNlfFF1ZXJ5VGVtcGxhdGVzU291cmNlUXVlcnkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHJlbW92ZSgkc2VsZWN0b3IgPSBudWxsKSB7CgkJJGxvb3AgPSAkc2VsZWN0b3IKCQkJPyAkdGhpcy0+ZmlsdGVyKCRzZWxlY3RvciktPmVsZW1lbnRzCgkJCTogJHRoaXMtPmVsZW1lbnRzOwoJCWZvcmVhY2goJGxvb3AgYXMgJG5vZGUpIHsKCQkJaWYgKCEgJG5vZGUtPnBhcmVudE5vZGUgKQoJCQkJY29udGludWU7CgkJCWlmIChpc3NldCgkbm9kZS0+dGFnTmFtZSkpCgkJCQkkdGhpcy0+ZGVidWcoIlJlbW92aW5nICd7JG5vZGUtPnRhZ05hbWV9JyIpOwoJCQkkbm9kZS0+cGFyZW50Tm9kZS0+cmVtb3ZlQ2hpbGQoJG5vZGUpOwoJCQkvLyBNdXRhdGlvbiBldmVudAoJCQkkZXZlbnQgPSBuZXcgRE9NRXZlbnQoYXJyYXkoCgkJCQkndGFyZ2V0JyA9PiAkbm9kZSwKCQkJCSd0eXBlJyA9PiAnRE9NTm9kZVJlbW92ZWQnCgkJCSkpOwoJCQlwaHBRdWVyeUV2ZW50czo6dHJpZ2dlcigkdGhpcy0+Z2V0RG9jdW1lbnRJRCgpLAoJCQkJJGV2ZW50LT50eXBlLCBhcnJheSgkZXZlbnQpLCAkbm9kZQoJCQkpOwoJCX0KCQlyZXR1cm4gJHRoaXM7Cgl9Cglwcm90ZWN0ZWQgZnVuY3Rpb24gbWFya3VwRXZlbnRzKCRuZXdNYXJrdXAsICRvbGRNYXJrdXAsICRub2RlKSB7CgkJaWYgKCRub2RlLT50YWdOYW1lID09ICd0ZXh0YXJlYScgJiYgJG5ld01hcmt1cCAhPSAkb2xkTWFya3VwKSB7CgkJCSRldmVudCA9IG5ldyBET01FdmVudChhcnJheSgKCQkJCSd0YXJnZXQnID0+ICRub2RlLAoJCQkJJ3R5cGUnID0+ICdjaGFuZ2UnCgkJCSkpOwoJCQlwaHBRdWVyeUV2ZW50czo6dHJpZ2dlcigkdGhpcy0+Z2V0RG9jdW1lbnRJRCgpLAoJCQkJJGV2ZW50LT50eXBlLCBhcnJheSgkZXZlbnQpLCAkbm9kZQoJCQkpOwoJCX0KCX0KCS8qKgoJICogalF1ZXkgZGlmZmVyZW5jZQoJICoKCSAqIEBwYXJhbSAkbWFya3VwCgkgKiBAcmV0dXJuIHVua25vd25fdHlwZQoJICogQFRPRE8gdHJpZ2dlciBjaGFuZ2UgZXZlbnQgZm9yIHRleHRhcmVhCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBtYXJrdXAoJG1hcmt1cCA9IG51bGwsICRjYWxsYmFjazEgPSBudWxsLCAkY2FsbGJhY2syID0gbnVsbCwgJGNhbGxiYWNrMyA9IG51bGwpIHsKCQkkYXJncyA9IGZ1bmNfZ2V0X2FyZ3MoKTsKCQlpZiAoJHRoaXMtPmRvY3VtZW50V3JhcHBlci0+aXNYTUwpCgkJCXJldHVybiBjYWxsX3VzZXJfZnVuY19hcnJheShhcnJheSgkdGhpcywgJ3htbCcpLCAkYXJncyk7CgkJZWxzZQoJCQlyZXR1cm4gY2FsbF91c2VyX2Z1bmNfYXJyYXkoYXJyYXkoJHRoaXMsICdodG1sJyksICRhcmdzKTsKCX0KCS8qKgoJICogalF1ZXkgZGlmZmVyZW5jZQoJICoKCSAqIEBwYXJhbSAkbWFya3VwCgkgKiBAcmV0dXJuIHVua25vd25fdHlwZQoJICovCglwdWJsaWMgZnVuY3Rpb24gbWFya3VwT3V0ZXIoJGNhbGxiYWNrMSA9IG51bGwsICRjYWxsYmFjazIgPSBudWxsLCAkY2FsbGJhY2szID0gbnVsbCkgewoJCSRhcmdzID0gZnVuY19nZXRfYXJncygpOwoJCWlmICgkdGhpcy0+ZG9jdW1lbnRXcmFwcGVyLT5pc1hNTCkKCQkJcmV0dXJuIGNhbGxfdXNlcl9mdW5jX2FycmF5KGFycmF5KCR0aGlzLCAneG1sT3V0ZXInKSwgJGFyZ3MpOwoJCWVsc2UKCQkJcmV0dXJuIGNhbGxfdXNlcl9mdW5jX2FycmF5KGFycmF5KCR0aGlzLCAnaHRtbE91dGVyJyksICRhcmdzKTsKCX0KCS8qKgoJICogRW50ZXIgZGVzY3JpcHRpb24gaGVyZS4uLgoJICoKCSAqIEBwYXJhbSB1bmtub3duX3R5cGUgJGh0bWwKCSAqIEByZXR1cm4gc3RyaW5nfHBocFF1ZXJ5fFF1ZXJ5VGVtcGxhdGVzU291cmNlfFF1ZXJ5VGVtcGxhdGVzUGFyc2V8UXVlcnlUZW1wbGF0ZXNTb3VyY2VRdWVyeQoJICogQFRPRE8gZm9yY2UgaHRtbCByZXN1bHQKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGh0bWwoJGh0bWwgPSBudWxsLCAkY2FsbGJhY2sxID0gbnVsbCwgJGNhbGxiYWNrMiA9IG51bGwsICRjYWxsYmFjazMgPSBudWxsKSB7CgkJaWYgKGlzc2V0KCRodG1sKSkgewoJCQkvLyBJTlNFUlQKCQkJJG5vZGVzID0gJHRoaXMtPmRvY3VtZW50V3JhcHBlci0+aW1wb3J0KCRodG1sKTsKCQkJJHRoaXMtPmVtcHR5KCk7CgkJCWZvcmVhY2goJHRoaXMtPnN0YWNrKDEpIGFzICRhbHJlYWR5QWRkZWQgPT4gJG5vZGUpIHsKCQkJCS8vIGZvciBub3csIGxpbWl0IGV2ZW50cyBmb3IgdGV4dGFyZWEKCQkJCWlmICgoJHRoaXMtPmlzWEhUTUwoKSB8fCAkdGhpcy0+aXNIVE1MKCkpICYmICRub2RlLT50YWdOYW1lID09ICd0ZXh0YXJlYScpCgkJCQkJJG9sZEh0bWwgPSBwcSgkbm9kZSwgJHRoaXMtPmdldERvY3VtZW50SUQoKSktPm1hcmt1cCgpOwoJCQkJZm9yZWFjaCgkbm9kZXMgYXMgJG5ld05vZGUpIHsKCQkJCQkkbm9kZS0+YXBwZW5kQ2hpbGQoJGFscmVhZHlBZGRlZAoJCQkJCQk/ICRuZXdOb2RlLT5jbG9uZU5vZGUodHJ1ZSkKCQkJCQkJOiAkbmV3Tm9kZQoJCQkJCSk7CgkJCQl9CgkJCQkvLyBmb3Igbm93LCBsaW1pdCBldmVudHMgZm9yIHRleHRhcmVhCgkJCQlpZiAoKCR0aGlzLT5pc1hIVE1MKCkgfHwgJHRoaXMtPmlzSFRNTCgpKSAmJiAkbm9kZS0+dGFnTmFtZSA9PSAndGV4dGFyZWEnKQoJCQkJCSR0aGlzLT5tYXJrdXBFdmVudHMoJGh0bWwsICRvbGRIdG1sLCAkbm9kZSk7CgkJCX0KCQkJcmV0dXJuICR0aGlzOwoJCX0gZWxzZSB7CgkJCS8vIEZFVENICgkJCSRyZXR1cm4gPSAkdGhpcy0+ZG9jdW1lbnRXcmFwcGVyLT5tYXJrdXAoJHRoaXMtPmVsZW1lbnRzLCB0cnVlKTsKCQkJJGFyZ3MgPSBmdW5jX2dldF9hcmdzKCk7CgkJCWZvcmVhY2goYXJyYXlfc2xpY2UoJGFyZ3MsIDEpIGFzICRjYWxsYmFjaykgewoJCQkJJHJldHVybiA9IHBocFF1ZXJ5OjpjYWxsYmFja1J1bigkY2FsbGJhY2ssIGFycmF5KCRyZXR1cm4pKTsKCQkJfQoJCQlyZXR1cm4gJHJldHVybjsKCQl9Cgl9CgkvKioKCSAqIEBUT0RPIGZvcmNlIHhtbCByZXN1bHQKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHhtbCgkeG1sID0gbnVsbCwgJGNhbGxiYWNrMSA9IG51bGwsICRjYWxsYmFjazIgPSBudWxsLCAkY2FsbGJhY2szID0gbnVsbCkgewoJCSRhcmdzID0gZnVuY19nZXRfYXJncygpOwoJCXJldHVybiBjYWxsX3VzZXJfZnVuY19hcnJheShhcnJheSgkdGhpcywgJ2h0bWwnKSwgJGFyZ3MpOwoJfQoJLyoqCgkgKiBFbnRlciBkZXNjcmlwdGlvbiBoZXJlLi4uCgkgKiBAVE9ETyBmb3JjZSBodG1sIHJlc3VsdAoJICoKCSAqIEByZXR1cm4gU3RyaW5nCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBodG1sT3V0ZXIoJGNhbGxiYWNrMSA9IG51bGwsICRjYWxsYmFjazIgPSBudWxsLCAkY2FsbGJhY2szID0gbnVsbCkgewoJCSRtYXJrdXAgPSAkdGhpcy0+ZG9jdW1lbnRXcmFwcGVyLT5tYXJrdXAoJHRoaXMtPmVsZW1lbnRzKTsKCQkvLyBwYXNzIHRob3UgY2FsbGJhY2tzCgkJJGFyZ3MgPSBmdW5jX2dldF9hcmdzKCk7CgkJZm9yZWFjaCgkYXJncyBhcyAkY2FsbGJhY2spIHsKCQkJJG1hcmt1cCA9IHBocFF1ZXJ5OjpjYWxsYmFja1J1bigkY2FsbGJhY2ssIGFycmF5KCRtYXJrdXApKTsKCQl9CgkJcmV0dXJuICRtYXJrdXA7Cgl9CgkvKioKCSAqIEBUT0RPIGZvcmNlIHhtbCByZXN1bHQKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHhtbE91dGVyKCRjYWxsYmFjazEgPSBudWxsLCAkY2FsbGJhY2syID0gbnVsbCwgJGNhbGxiYWNrMyA9IG51bGwpIHsKCQkkYXJncyA9IGZ1bmNfZ2V0X2FyZ3MoKTsKCQlyZXR1cm4gY2FsbF91c2VyX2Z1bmNfYXJyYXkoYXJyYXkoJHRoaXMsICdodG1sT3V0ZXInKSwgJGFyZ3MpOwoJfQoJcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKSB7CgkJcmV0dXJuICR0aGlzLT5tYXJrdXBPdXRlcigpOwoJfQoJLyoqCgkgKiBKdXN0IGxpa2UgaHRtbCgpLCBidXQgcmV0dXJucyBtYXJrdXAgd2l0aCBWQUxJRCAoZGFuZ2Vyb3VzKSBQSFAgdGFncy4KCSAqCgkgKiBAcmV0dXJuIHBocFF1ZXJ5T2JqZWN0fFF1ZXJ5VGVtcGxhdGVzU291cmNlfFF1ZXJ5VGVtcGxhdGVzUGFyc2V8UXVlcnlUZW1wbGF0ZXNTb3VyY2VRdWVyeQoJICogQHRvZG8gc3VwcG9ydCByZXR1cm5pbmcgbWFya3VwIHdpdGggUEhQIHRhZ3Mgd2hlbiBjYWxsZWQgd2l0aG91dCBwYXJhbQoJICovCglwdWJsaWMgZnVuY3Rpb24gcGhwKCRjb2RlID0gbnVsbCkgewoJCXJldHVybiAkdGhpcy0+bWFya3VwUEhQKCRjb2RlKTsKCX0KCS8qKgoJICogRW50ZXIgZGVzY3JpcHRpb24gaGVyZS4uLgoJICoKCSAqIEBwYXJhbSAkY29kZQoJICogQHJldHVybiB1bmtub3duX3R5cGUKCSAqLwoJcHVibGljIGZ1bmN0aW9uIG1hcmt1cFBIUCgkY29kZSA9IG51bGwpIHsKCQlyZXR1cm4gaXNzZXQoJGNvZGUpCgkJCT8gJHRoaXMtPm1hcmt1cChwaHBRdWVyeTo6cGhwKCRjb2RlKSkKCQkJOiBwaHBRdWVyeTo6bWFya3VwVG9QSFAoJHRoaXMtPm1hcmt1cCgpKTsKCX0KCS8qKgoJICogRW50ZXIgZGVzY3JpcHRpb24gaGVyZS4uLgoJICoKCSAqIEBwYXJhbSAkY29kZQoJICogQHJldHVybiB1bmtub3duX3R5cGUKCSAqLwoJcHVibGljIGZ1bmN0aW9uIG1hcmt1cE91dGVyUEhQKCkgewoJCXJldHVybiBwaHBRdWVyeTo6bWFya3VwVG9QSFAoJHRoaXMtPm1hcmt1cE91dGVyKCkpOwoJfQoJLyoqCgkgKiBFbnRlciBkZXNjcmlwdGlvbiBoZXJlLi4uCgkgKgoJICogQHJldHVybiBwaHBRdWVyeU9iamVjdHxRdWVyeVRlbXBsYXRlc1NvdXJjZXxRdWVyeVRlbXBsYXRlc1BhcnNlfFF1ZXJ5VGVtcGxhdGVzU291cmNlUXVlcnkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGNoaWxkcmVuKCRzZWxlY3RvciA9IG51bGwpIHsKCQkkc3RhY2sgPSBhcnJheSgpOwoJCWZvcmVhY2goJHRoaXMtPnN0YWNrKDEpIGFzICRub2RlKSB7Ci8vCQkJZm9yZWFjaCgkbm9kZS0+Z2V0RWxlbWVudHNCeVRhZ05hbWUoJyonKSBhcyAkbmV3Tm9kZSkgewoJCQlmb3JlYWNoKCRub2RlLT5jaGlsZE5vZGVzIGFzICRuZXdOb2RlKSB7CgkJCQlpZiAoJG5ld05vZGUtPm5vZGVUeXBlICE9IDEpCgkJCQkJY29udGludWU7CgkJCQlpZiAoJHNlbGVjdG9yICYmICEgJHRoaXMtPmlzKCRzZWxlY3RvciwgJG5ld05vZGUpKQoJCQkJCWNvbnRpbnVlOwoJCQkJaWYgKCR0aGlzLT5lbGVtZW50c0NvbnRhaW5zTm9kZSgkbmV3Tm9kZSwgJHN0YWNrKSkKCQkJCQljb250aW51ZTsKCQkJCSRzdGFja1tdID0gJG5ld05vZGU7CgkJCX0KCQl9CgkJJHRoaXMtPmVsZW1lbnRzQmFja3VwID0gJHRoaXMtPmVsZW1lbnRzOwoJCSR0aGlzLT5lbGVtZW50cyA9ICRzdGFjazsKCQlyZXR1cm4gJHRoaXMtPm5ld0luc3RhbmNlKCk7Cgl9CgkvKioKCSAqIEVudGVyIGRlc2NyaXB0aW9uIGhlcmUuLi4KCSAqCgkgKiBAcmV0dXJuIHBocFF1ZXJ5T2JqZWN0fFF1ZXJ5VGVtcGxhdGVzU291cmNlfFF1ZXJ5VGVtcGxhdGVzUGFyc2V8UXVlcnlUZW1wbGF0ZXNTb3VyY2VRdWVyeQoJICovCglwdWJsaWMgZnVuY3Rpb24gYW5jZXN0b3JzKCRzZWxlY3RvciA9IG51bGwpIHsKCQlyZXR1cm4gJHRoaXMtPmNoaWxkcmVuKCAkc2VsZWN0b3IgKTsKCX0KCS8qKgoJICogRW50ZXIgZGVzY3JpcHRpb24gaGVyZS4uLgoJICoKCSAqIEByZXR1cm4gcGhwUXVlcnlPYmplY3R8UXVlcnlUZW1wbGF0ZXNTb3VyY2V8UXVlcnlUZW1wbGF0ZXNQYXJzZXxRdWVyeVRlbXBsYXRlc1NvdXJjZVF1ZXJ5CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBhcHBlbmQoICRjb250ZW50KSB7CgkJcmV0dXJuICR0aGlzLT5pbnNlcnQoJGNvbnRlbnQsIF9fRlVOQ1RJT05fXyk7Cgl9CgkvKioKCSAqIEVudGVyIGRlc2NyaXB0aW9uIGhlcmUuLi4KCSAqCgkgKiBAcmV0dXJuIHBocFF1ZXJ5T2JqZWN0fFF1ZXJ5VGVtcGxhdGVzU291cmNlfFF1ZXJ5VGVtcGxhdGVzUGFyc2V8UXVlcnlUZW1wbGF0ZXNTb3VyY2VRdWVyeQoJICovCglwdWJsaWMgZnVuY3Rpb24gYXBwZW5kUEhQKCAkY29udGVudCkgewoJCXJldHVybiAkdGhpcy0+aW5zZXJ0KCI8cGhwPjwhLS0geyRjb250ZW50fSAtLT48L3BocD4iLCAnYXBwZW5kJyk7Cgl9CgkvKioKCSAqIEVudGVyIGRlc2NyaXB0aW9uIGhlcmUuLi4KCSAqCgkgKiBAcmV0dXJuIHBocFF1ZXJ5T2JqZWN0fFF1ZXJ5VGVtcGxhdGVzU291cmNlfFF1ZXJ5VGVtcGxhdGVzUGFyc2V8UXVlcnlUZW1wbGF0ZXNTb3VyY2VRdWVyeQoJICovCglwdWJsaWMgZnVuY3Rpb24gYXBwZW5kVG8oICRzZWxldG9yKSB7CgkJcmV0dXJuICR0aGlzLT5pbnNlcnQoJHNlbGV0b3IsIF9fRlVOQ1RJT05fXyk7Cgl9CgkvKioKCSAqIEVudGVyIGRlc2NyaXB0aW9uIGhlcmUuLi4KCSAqCgkgKiBAcmV0dXJuIHBocFF1ZXJ5T2JqZWN0fFF1ZXJ5VGVtcGxhdGVzU291cmNlfFF1ZXJ5VGVtcGxhdGVzUGFyc2V8UXVlcnlUZW1wbGF0ZXNTb3VyY2VRdWVyeQoJICovCglwdWJsaWMgZnVuY3Rpb24gcHJlcGVuZCggJGNvbnRlbnQpIHsKCQlyZXR1cm4gJHRoaXMtPmluc2VydCgkY29udGVudCwgX19GVU5DVElPTl9fKTsKCX0KCS8qKgoJICogRW50ZXIgZGVzY3JpcHRpb24gaGVyZS4uLgoJICoKCSAqIEB0b2RvIGFjY2VwdCBtYW55IGFyZ3VtZW50cywgd2hpY2ggYXJlIGpvaW5lZCwgYXJyYXlzIG1heWJlIGFsc28KCSAqIEByZXR1cm4gcGhwUXVlcnlPYmplY3R8UXVlcnlUZW1wbGF0ZXNTb3VyY2V8UXVlcnlUZW1wbGF0ZXNQYXJzZXxRdWVyeVRlbXBsYXRlc1NvdXJjZVF1ZXJ5CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBwcmVwZW5kUEhQKCAkY29udGVudCkgewoJCXJldHVybiAkdGhpcy0+aW5zZXJ0KCI8cGhwPjwhLS0geyRjb250ZW50fSAtLT48L3BocD4iLCAncHJlcGVuZCcpOwoJfQoJLyoqCgkgKiBFbnRlciBkZXNjcmlwdGlvbiBoZXJlLi4uCgkgKgoJICogQHJldHVybiBwaHBRdWVyeU9iamVjdHxRdWVyeVRlbXBsYXRlc1NvdXJjZXxRdWVyeVRlbXBsYXRlc1BhcnNlfFF1ZXJ5VGVtcGxhdGVzU291cmNlUXVlcnkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHByZXBlbmRUbyggJHNlbGV0b3IpIHsKCQlyZXR1cm4gJHRoaXMtPmluc2VydCgkc2VsZXRvciwgX19GVU5DVElPTl9fKTsKCX0KCS8qKgoJICogRW50ZXIgZGVzY3JpcHRpb24gaGVyZS4uLgoJICoKCSAqIEByZXR1cm4gcGhwUXVlcnlPYmplY3R8UXVlcnlUZW1wbGF0ZXNTb3VyY2V8UXVlcnlUZW1wbGF0ZXNQYXJzZXxRdWVyeVRlbXBsYXRlc1NvdXJjZVF1ZXJ5CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBiZWZvcmUoJGNvbnRlbnQpIHsKCQlyZXR1cm4gJHRoaXMtPmluc2VydCgkY29udGVudCwgX19GVU5DVElPTl9fKTsKCX0KCS8qKgoJICogRW50ZXIgZGVzY3JpcHRpb24gaGVyZS4uLgoJICoKCSAqIEByZXR1cm4gcGhwUXVlcnlPYmplY3R8UXVlcnlUZW1wbGF0ZXNTb3VyY2V8UXVlcnlUZW1wbGF0ZXNQYXJzZXxRdWVyeVRlbXBsYXRlc1NvdXJjZVF1ZXJ5CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBiZWZvcmVQSFAoICRjb250ZW50KSB7CgkJcmV0dXJuICR0aGlzLT5pbnNlcnQoIjxwaHA+PCEtLSB7JGNvbnRlbnR9IC0tPjwvcGhwPiIsICdiZWZvcmUnKTsKCX0KCS8qKgoJICogRW50ZXIgZGVzY3JpcHRpb24gaGVyZS4uLgoJICoKCSAqIEBwYXJhbSBTdHJpbmd8cGhwUXVlcnkKCSAqIEByZXR1cm4gcGhwUXVlcnlPYmplY3R8UXVlcnlUZW1wbGF0ZXNTb3VyY2V8UXVlcnlUZW1wbGF0ZXNQYXJzZXxRdWVyeVRlbXBsYXRlc1NvdXJjZVF1ZXJ5CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBpbnNlcnRCZWZvcmUoICRzZWxldG9yKSB7CgkJcmV0dXJuICR0aGlzLT5pbnNlcnQoJHNlbGV0b3IsIF9fRlVOQ1RJT05fXyk7Cgl9CgkvKioKCSAqIEVudGVyIGRlc2NyaXB0aW9uIGhlcmUuLi4KCSAqCgkgKiBAcmV0dXJuIHBocFF1ZXJ5T2JqZWN0fFF1ZXJ5VGVtcGxhdGVzU291cmNlfFF1ZXJ5VGVtcGxhdGVzUGFyc2V8UXVlcnlUZW1wbGF0ZXNTb3VyY2VRdWVyeQoJICovCglwdWJsaWMgZnVuY3Rpb24gYWZ0ZXIoICRjb250ZW50KSB7CgkJcmV0dXJuICR0aGlzLT5pbnNlcnQoJGNvbnRlbnQsIF9fRlVOQ1RJT05fXyk7Cgl9CgkvKioKCSAqIEVudGVyIGRlc2NyaXB0aW9uIGhlcmUuLi4KCSAqCgkgKiBAcmV0dXJuIHBocFF1ZXJ5T2JqZWN0fFF1ZXJ5VGVtcGxhdGVzU291cmNlfFF1ZXJ5VGVtcGxhdGVzUGFyc2V8UXVlcnlUZW1wbGF0ZXNTb3VyY2VRdWVyeQoJICovCglwdWJsaWMgZnVuY3Rpb24gYWZ0ZXJQSFAoICRjb250ZW50KSB7CgkJcmV0dXJuICR0aGlzLT5pbnNlcnQoIjxwaHA+PCEtLSB7JGNvbnRlbnR9IC0tPjwvcGhwPiIsICdhZnRlcicpOwoJfQoJLyoqCgkgKiBFbnRlciBkZXNjcmlwdGlvbiBoZXJlLi4uCgkgKgoJICogQHJldHVybiBwaHBRdWVyeU9iamVjdHxRdWVyeVRlbXBsYXRlc1NvdXJjZXxRdWVyeVRlbXBsYXRlc1BhcnNlfFF1ZXJ5VGVtcGxhdGVzU291cmNlUXVlcnkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGluc2VydEFmdGVyKCAkc2VsZXRvcikgewoJCXJldHVybiAkdGhpcy0+aW5zZXJ0KCRzZWxldG9yLCBfX0ZVTkNUSU9OX18pOwoJfQoJLyoqCgkgKiBJbnRlcm5hbCBpbnNlcnQgbWV0aG9kLiBEb24ndCB1c2UgaXQuCgkgKgoJICogQHBhcmFtIHVua25vd25fdHlwZSAkdGFyZ2V0CgkgKiBAcGFyYW0gdW5rbm93bl90eXBlICR0eXBlCgkgKiBAcmV0dXJuIHBocFF1ZXJ5T2JqZWN0fFF1ZXJ5VGVtcGxhdGVzU291cmNlfFF1ZXJ5VGVtcGxhdGVzUGFyc2V8UXVlcnlUZW1wbGF0ZXNTb3VyY2VRdWVyeQoJICogQGFjY2VzcyBwcml2YXRlCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBpbnNlcnQoJHRhcmdldCwgJHR5cGUpIHsKCQkkdGhpcy0+ZGVidWcoIkluc2VydGluZyBkYXRhIHdpdGggJ3skdHlwZX0nIik7CgkJJHRvID0gZmFsc2U7CgkJc3dpdGNoKCAkdHlwZSkgewoJCQljYXNlICdhcHBlbmRUbyc6CgkJCWNhc2UgJ3ByZXBlbmRUbyc6CgkJCWNhc2UgJ2luc2VydEJlZm9yZSc6CgkJCWNhc2UgJ2luc2VydEFmdGVyJzoKCQkJCSR0byA9IHRydWU7CgkJfQoJCXN3aXRjaChnZXR0eXBlKCR0YXJnZXQpKSB7CgkJCWNhc2UgJ3N0cmluZyc6CgkJCQkkaW5zZXJ0RnJvbSA9ICRpbnNlcnRUbyA9IGFycmF5KCk7CgkJCQlpZiAoJHRvKSB7CgkJCQkJLy8gSU5TRVJUIFRPCgkJCQkJJGluc2VydEZyb20gPSAkdGhpcy0+ZWxlbWVudHM7CgkJCQkJaWYgKHBocFF1ZXJ5Ojppc01hcmt1cCgkdGFyZ2V0KSkgewoJCQkJCQkvLyAkdGFyZ2V0IGlzIG5ldyBtYXJrdXAsIGltcG9ydCBpdAoJCQkJCQkkaW5zZXJ0VG8gPSAkdGhpcy0+ZG9jdW1lbnRXcmFwcGVyLT5pbXBvcnQoJHRhcmdldCk7CgkJCQkJLy8gaW5zZXJ0IGludG8gc2VsZWN0ZWQgZWxlbWVudAoJCQkJCX0gZWxzZSB7CgkJCQkJCS8vICR0YWdyZXQgaXMgYSBzZWxlY3RvcgoJCQkJCQkkdGhpc1N0YWNrID0gJHRoaXMtPmVsZW1lbnRzOwoJCQkJCQkkdGhpcy0+dG9Sb290KCk7CgkJCQkJCSRpbnNlcnRUbyA9ICR0aGlzLT5maW5kKCR0YXJnZXQpLT5lbGVtZW50czsKCQkJCQkJJHRoaXMtPmVsZW1lbnRzID0gJHRoaXNTdGFjazsKCQkJCQl9CgkJCQl9IGVsc2UgewoJCQkJCS8vIElOU0VSVCBGUk9NCgkJCQkJJGluc2VydFRvID0gJHRoaXMtPmVsZW1lbnRzOwoJCQkJCSRpbnNlcnRGcm9tID0gJHRoaXMtPmRvY3VtZW50V3JhcHBlci0+aW1wb3J0KCR0YXJnZXQpOwoJCQkJfQoJCQkJYnJlYWs7CgkJCWNhc2UgJ29iamVjdCc6CgkJCQkkaW5zZXJ0RnJvbSA9ICRpbnNlcnRUbyA9IGFycmF5KCk7CgkJCQkvLyBwaHBRdWVyeQoJCQkJaWYgKCR0YXJnZXQgaW5zdGFuY2VvZiBzZWxmKSB7CgkJCQkJaWYgKCR0bykgewoJCQkJCQkkaW5zZXJ0VG8gPSAkdGFyZ2V0LT5lbGVtZW50czsKCQkJCQkJaWYgKCR0aGlzLT5kb2N1bWVudEZyYWdtZW50ICYmICR0aGlzLT5zdGFja0lzUm9vdCgpKQoJCQkJCQkJLy8gZ2V0IGFsbCBib2R5IGNoaWxkcmVuCi8vCQkJCQkJCSRsb29wID0gJHRoaXMtPmZpbmQoJ2JvZHkgPiAqJyktPmVsZW1lbnRzOwoJCQkJCQkJLy8gVE9ETyB0ZXN0IGl0LCB0ZXN0IGl0IGhhcmQuLi4KLy8JCQkJCQkJJGxvb3AgPSAkdGhpcy0+bmV3SW5zdGFuY2UoJHRoaXMtPnJvb3QpLT5maW5kKCc+IConKS0+ZWxlbWVudHM7CgkJCQkJCQkkbG9vcCA9ICR0aGlzLT5yb290LT5jaGlsZE5vZGVzOwoJCQkJCQllbHNlCgkJCQkJCQkkbG9vcCA9ICR0aGlzLT5lbGVtZW50czsKCQkJCQkJLy8gaW1wb3J0IG5vZGVzIGlmIG5lZWRlZAoJCQkJCQkkaW5zZXJ0RnJvbSA9ICR0aGlzLT5nZXREb2N1bWVudElEKCkgPT0gJHRhcmdldC0+Z2V0RG9jdW1lbnRJRCgpCgkJCQkJCQk/ICRsb29wCgkJCQkJCQk6ICR0YXJnZXQtPmRvY3VtZW50V3JhcHBlci0+aW1wb3J0KCRsb29wKTsKCQkJCQl9IGVsc2UgewoJCQkJCQkkaW5zZXJ0VG8gPSAkdGhpcy0+ZWxlbWVudHM7CgkJCQkJCWlmICggJHRhcmdldC0+ZG9jdW1lbnRGcmFnbWVudCAmJiAkdGFyZ2V0LT5zdGFja0lzUm9vdCgpICkKCQkJCQkJCS8vIGdldCBhbGwgYm9keSBjaGlsZHJlbgovLwkJCQkJCQkkbG9vcCA9ICR0YXJnZXQtPmZpbmQoJ2JvZHkgPiAqJyktPmVsZW1lbnRzOwoJCQkJCQkJJGxvb3AgPSAkdGFyZ2V0LT5yb290LT5jaGlsZE5vZGVzOwoJCQkJCQllbHNlCgkJCQkJCQkkbG9vcCA9ICR0YXJnZXQtPmVsZW1lbnRzOwoJCQkJCQkvLyBpbXBvcnQgbm9kZXMgaWYgbmVlZGVkCgkJCQkJCSRpbnNlcnRGcm9tID0gJHRoaXMtPmdldERvY3VtZW50SUQoKSA9PSAkdGFyZ2V0LT5nZXREb2N1bWVudElEKCkKCQkJCQkJCT8gJGxvb3AKCQkJCQkJCTogJHRoaXMtPmRvY3VtZW50V3JhcHBlci0+aW1wb3J0KCRsb29wKTsKCQkJCQl9CgkJCQkvLyBET01OT0RFCgkJCQl9IGVsc2VpZiAoJHRhcmdldCBpbnN0YW5jZW9mIERPTU5PREUpIHsKCQkJCQkvLyBpbXBvcnQgbm9kZSBpZiBuZWVkZWQKLy8JCQkJCWlmICggJHRhcmdldC0+b3duZXJEb2N1bWVudCAhPSAkdGhpcy0+RE9NICkKLy8JCQkJCQkkdGFyZ2V0ID0gJHRoaXMtPkRPTS0+aW1wb3J0Tm9kZSgkdGFyZ2V0LCB0cnVlKTsKCQkJCQlpZiAoICR0bykgewoJCQkJCQkkaW5zZXJ0VG8gPSBhcnJheSgkdGFyZ2V0KTsKCQkJCQkJaWYgKCR0aGlzLT5kb2N1bWVudEZyYWdtZW50ICYmICR0aGlzLT5zdGFja0lzUm9vdCgpKQoJCQkJCQkJLy8gZ2V0IGFsbCBib2R5IGNoaWxkcmVuCgkJCQkJCQkkbG9vcCA9ICR0aGlzLT5yb290LT5jaGlsZE5vZGVzOwovLwkJCQkJCQkkbG9vcCA9ICR0aGlzLT5maW5kKCdib2R5ID4gKicpLT5lbGVtZW50czsKCQkJCQkJZWxzZQoJCQkJCQkJJGxvb3AgPSAkdGhpcy0+ZWxlbWVudHM7CgkJCQkJCWZvcmVhY2goJGxvb3AgYXMgJGZyb21Ob2RlKQoJCQkJCQkJLy8gaW1wb3J0IG5vZGVzIGlmIG5lZWRlZAoJCQkJCQkJJGluc2VydEZyb21bXSA9ICEgJGZyb21Ob2RlLT5vd25lckRvY3VtZW50LT5pc1NhbWVOb2RlKCR0YXJnZXQtPm93bmVyRG9jdW1lbnQpCgkJCQkJCQkJPyAkdGFyZ2V0LT5vd25lckRvY3VtZW50LT5pbXBvcnROb2RlKCRmcm9tTm9kZSwgdHJ1ZSkKCQkJCQkJCQk6ICRmcm9tTm9kZTsKCQkJCQl9IGVsc2UgewoJCQkJCQkvLyBpbXBvcnQgbm9kZSBpZiBuZWVkZWQKCQkJCQkJaWYgKCEgJHRhcmdldC0+b3duZXJEb2N1bWVudC0+aXNTYW1lTm9kZSgkdGhpcy0+ZG9jdW1lbnQpKQoJCQkJCQkJJHRhcmdldCA9ICR0aGlzLT5kb2N1bWVudC0+aW1wb3J0Tm9kZSgkdGFyZ2V0LCB0cnVlKTsKCQkJCQkJJGluc2VydFRvID0gJHRoaXMtPmVsZW1lbnRzOwoJCQkJCQkkaW5zZXJ0RnJvbVtdID0gJHRhcmdldDsKCQkJCQl9CgkJCQl9CgkJCQlicmVhazsKCQl9CgkJcGhwUXVlcnk6OmRlYnVnKCJGcm9tICIuY291bnQoJGluc2VydEZyb20pLiI7IFRvICIuY291bnQoJGluc2VydFRvKS4iIG5vZGVzIik7CgkJZm9yZWFjaCgkaW5zZXJ0VG8gYXMgJGluc2VydE51bWJlciA9PiAkdG9Ob2RlKSB7CgkJCS8vIHdlIG5lZWQgc3RhdGljIHJlbGF0aXZlIGVsZW1lbnRzIGluIHNvbWUgY2FzZXMKCQkJc3dpdGNoKCAkdHlwZSkgewoJCQkJY2FzZSAncHJlcGVuZFRvJzoKCQkJCWNhc2UgJ3ByZXBlbmQnOgoJCQkJCSRmaXJzdENoaWxkID0gJHRvTm9kZS0+Zmlyc3RDaGlsZDsKCQkJCQlicmVhazsKCQkJCWNhc2UgJ2luc2VydEFmdGVyJzoKCQkJCWNhc2UgJ2FmdGVyJzoKCQkJCQkkbmV4dFNpYmxpbmcgPSAkdG9Ob2RlLT5uZXh0U2libGluZzsKCQkJCQlicmVhazsKCQkJfQoJCQlmb3JlYWNoKCRpbnNlcnRGcm9tIGFzICRmcm9tTm9kZSkgewoJCQkJLy8gY2xvbmUgaWYgaW5zZXJ0ZWQgYWxyZWFkeSBiZWZvcmUKCQkJCSRpbnNlcnQgPSAkaW5zZXJ0TnVtYmVyCgkJCQkJPyAkZnJvbU5vZGUtPmNsb25lTm9kZSh0cnVlKQoJCQkJCTogJGZyb21Ob2RlOwoJCQkJc3dpdGNoKCR0eXBlKSB7CgkJCQkJY2FzZSAnYXBwZW5kVG8nOgoJCQkJCWNhc2UgJ2FwcGVuZCc6Ci8vCQkJCQkJJHRvTm9kZS0+aW5zZXJ0QmVmb3JlKAovLwkJCQkJCQkkZnJvbU5vZGUsCi8vCQkJCQkJCSR0b05vZGUtPmxhc3RDaGlsZC0+bmV4dFNpYmxpbmcKLy8JCQkJCQkpOwoJCQkJCQkkdG9Ob2RlLT5hcHBlbmRDaGlsZCgkaW5zZXJ0KTsKCQkJCQkJJGV2ZW50VGFyZ2V0ID0gJGluc2VydDsKCQkJCQkJYnJlYWs7CgkJCQkJY2FzZSAncHJlcGVuZFRvJzoKCQkJCQljYXNlICdwcmVwZW5kJzoKCQkJCQkJJHRvTm9kZS0+aW5zZXJ0QmVmb3JlKAoJCQkJCQkJJGluc2VydCwKCQkJCQkJCSRmaXJzdENoaWxkCgkJCQkJCSk7CgkJCQkJCWJyZWFrOwoJCQkJCWNhc2UgJ2luc2VydEJlZm9yZSc6CgkJCQkJY2FzZSAnYmVmb3JlJzoKCQkJCQkJaWYgKCEgJHRvTm9kZS0+cGFyZW50Tm9kZSkKCQkJCQkJCXRocm93IG5ldyBFeGNlcHRpb24oIk5vIHBhcmVudE5vZGUsIGNhbid0IGRvIHskdHlwZX0oKSIpOwoJCQkJCQllbHNlCgkJCQkJCQkkdG9Ob2RlLT5wYXJlbnROb2RlLT5pbnNlcnRCZWZvcmUoCgkJCQkJCQkJJGluc2VydCwKCQkJCQkJCQkkdG9Ob2RlCgkJCQkJCQkpOwoJCQkJCQlicmVhazsKCQkJCQljYXNlICdpbnNlcnRBZnRlcic6CgkJCQkJY2FzZSAnYWZ0ZXInOgoJCQkJCQlpZiAoISAkdG9Ob2RlLT5wYXJlbnROb2RlKQoJCQkJCQkJdGhyb3cgbmV3IEV4Y2VwdGlvbigiTm8gcGFyZW50Tm9kZSwgY2FuJ3QgZG8geyR0eXBlfSgpIik7CgkJCQkJCWVsc2UKCQkJCQkJCSR0b05vZGUtPnBhcmVudE5vZGUtPmluc2VydEJlZm9yZSgKCQkJCQkJCQkkaW5zZXJ0LAoJCQkJCQkJCSRuZXh0U2libGluZwoJCQkJCQkJKTsKCQkJCQkJYnJlYWs7CgkJCQl9CgkJCQkvLyBNdXRhdGlvbiBldmVudAoJCQkJJGV2ZW50ID0gbmV3IERPTUV2ZW50KGFycmF5KAoJCQkJCSd0YXJnZXQnID0+ICRpbnNlcnQsCgkJCQkJJ3R5cGUnID0+ICdET01Ob2RlSW5zZXJ0ZWQnCgkJCQkpKTsKCQkJCXBocFF1ZXJ5RXZlbnRzOjp0cmlnZ2VyKCR0aGlzLT5nZXREb2N1bWVudElEKCksCgkJCQkJJGV2ZW50LT50eXBlLCBhcnJheSgkZXZlbnQpLCAkaW5zZXJ0CgkJCQkpOwoJCQl9CgkJfQoJCXJldHVybiAkdGhpczsKCX0KCS8qKgoJICogRW50ZXIgZGVzY3JpcHRpb24gaGVyZS4uLgoJICoKCSAqIEByZXR1cm4gSW50CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBpbmRleCgkc3ViamVjdCkgewoJCSRpbmRleCA9IC0xOwoJCSRzdWJqZWN0ID0gJHN1YmplY3QgaW5zdGFuY2VvZiBwaHBRdWVyeU9iamVjdAoJCQk/ICRzdWJqZWN0LT5lbGVtZW50c1swXQoJCQk6ICRzdWJqZWN0OwoJCWZvcmVhY2goJHRoaXMtPm5ld0luc3RhbmNlKCkgYXMgJGsgPT4gJG5vZGUpIHsKCQkJaWYgKCRub2RlLT5pc1NhbWVOb2RlKCRzdWJqZWN0KSkKCQkJCSRpbmRleCA9ICRrOwoJCX0KCQlyZXR1cm4gJGluZGV4OwoJfQoJLyoqCgkgKiBFbnRlciBkZXNjcmlwdGlvbiBoZXJlLi4uCgkgKgoJICogQHBhcmFtIHVua25vd25fdHlwZSAkc3RhcnQKCSAqIEBwYXJhbSB1bmtub3duX3R5cGUgJGVuZAoJICoKCSAqIEByZXR1cm4gcGhwUXVlcnlPYmplY3R8UXVlcnlUZW1wbGF0ZXNTb3VyY2V8UXVlcnlUZW1wbGF0ZXNQYXJzZXxRdWVyeVRlbXBsYXRlc1NvdXJjZVF1ZXJ5CgkgKiBAdGVzdG1lCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzbGljZSgkc3RhcnQsICRlbmQgPSBudWxsKSB7Ci8vCQkkbGFzdCA9IGNvdW50KCR0aGlzLT5lbGVtZW50cyktMTsKLy8JCSRlbmQgPSAkZW5kCi8vCQkJPyBtaW4oJGVuZCwgJGxhc3QpCi8vCQkJOiAkbGFzdDsKLy8JCWlmICgkc3RhcnQgPCAwKQovLwkJCSRzdGFydCA9ICRsYXN0KyRzdGFydDsKLy8JCWlmICgkc3RhcnQgPiAkbGFzdCkKLy8JCQlyZXR1cm4gYXJyYXkoKTsKCQlpZiAoJGVuZCA+IDApCgkJCSRlbmQgPSAkZW5kLSRzdGFydDsKCQlyZXR1cm4gJHRoaXMtPm5ld0luc3RhbmNlKAoJCQlhcnJheV9zbGljZSgkdGhpcy0+ZWxlbWVudHMsICRzdGFydCwgJGVuZCkKCQkpOwoJfQoJLyoqCgkgKiBFbnRlciBkZXNjcmlwdGlvbiBoZXJlLi4uCgkgKgoJICogQHJldHVybiBwaHBRdWVyeU9iamVjdHxRdWVyeVRlbXBsYXRlc1NvdXJjZXxRdWVyeVRlbXBsYXRlc1BhcnNlfFF1ZXJ5VGVtcGxhdGVzU291cmNlUXVlcnkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHJldmVyc2UoKSB7CgkJJHRoaXMtPmVsZW1lbnRzQmFja3VwID0gJHRoaXMtPmVsZW1lbnRzOwoJCSR0aGlzLT5lbGVtZW50cyA9IGFycmF5X3JldmVyc2UoJHRoaXMtPmVsZW1lbnRzKTsKCQlyZXR1cm4gJHRoaXMtPm5ld0luc3RhbmNlKCk7Cgl9CgkvKioKCSAqIFJldHVybiBqb2luZWQgdGV4dCBjb250ZW50LgoJICogQHJldHVybiBTdHJpbmcKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHRleHQoJHRleHQgPSBudWxsLCAkY2FsbGJhY2sxID0gbnVsbCwgJGNhbGxiYWNrMiA9IG51bGwsICRjYWxsYmFjazMgPSBudWxsKSB7CgkJaWYgKGlzc2V0KCR0ZXh0KSkKCQkJcmV0dXJuICR0aGlzLT5odG1sKGh0bWxzcGVjaWFsY2hhcnMoJHRleHQpKTsKCQkkYXJncyA9IGZ1bmNfZ2V0X2FyZ3MoKTsKCQkkYXJncyA9IGFycmF5X3NsaWNlKCRhcmdzLCAxKTsKCQkkcmV0dXJuID0gJyc7CgkJZm9yZWFjaCgkdGhpcy0+ZWxlbWVudHMgYXMgJG5vZGUpIHsKCQkJJHRleHQgPSAkbm9kZS0+dGV4dENvbnRlbnQ7CgkJCWlmIChjb3VudCgkdGhpcy0+ZWxlbWVudHMpID4gMSAmJiAkdGV4dCkKCQkJCSR0ZXh0IC49ICJcbiI7CgkJCWZvcmVhY2goJGFyZ3MgYXMgJGNhbGxiYWNrKSB7CgkJCQkkdGV4dCA9IHBocFF1ZXJ5OjpjYWxsYmFja1J1bigkY2FsbGJhY2ssIGFycmF5KCR0ZXh0KSk7CgkJCX0KCQkJJHJldHVybiAuPSAkdGV4dDsKCQl9CgkJcmV0dXJuICRyZXR1cm47Cgl9CiAgICAvKioKICAgICAqIEByZXR1cm4gVGhlIHRleHQgY29udGVudCBvZiBlYWNoIG1hdGNoaW5nIGVsZW1lbnQsIGxpa2UKICAgICAqIHRleHQoKSBidXQgcmV0dXJucyBhbiBhcnJheSB3aXRoIG9uZSBlbnRyeSBwZXIgbWF0Y2hlZCBlbGVtZW50LgogICAgICogUmVhZCBvbmx5LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdGV4dHMoJGF0dHIgPSBudWxsKSB7CiAgICAgICAgJHJlc3VsdHMgPSBhcnJheSgpOwogICAgICAgIGZvcmVhY2goJHRoaXMtPmVsZW1lbnRzIGFzICRub2RlKSB7CiAgICAgICAgICAgICRyZXN1bHRzW10gPSAkbm9kZS0+dGV4dENvbnRlbnQ7CiAgICAgICAgfQogICAgICAgIHJldHVybiAkcmVzdWx0czsKICAgIH0KCS8qKgoJICogRW50ZXIgZGVzY3JpcHRpb24gaGVyZS4uLgoJICoKCSAqIEByZXR1cm4gcGhwUXVlcnlPYmplY3R8UXVlcnlUZW1wbGF0ZXNTb3VyY2V8UXVlcnlUZW1wbGF0ZXNQYXJzZXxRdWVyeVRlbXBsYXRlc1NvdXJjZVF1ZXJ5CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBwbHVnaW4oJGNsYXNzLCAkZmlsZSA9IG51bGwpIHsKCQlwaHBRdWVyeTo6cGx1Z2luKCRjbGFzcywgJGZpbGUpOwoJCXJldHVybiAkdGhpczsKCX0KCS8qKgoJICogRGVwcmVjYXRlZCwgdXNlICRwcS0+cGx1Z2luKCkgaW5zdGVhZC4KCSAqCgkgKiBAZGVwcmVjYXRlZAoJICogQHBhcmFtICRjbGFzcwoJICogQHBhcmFtICRmaWxlCgkgKiBAcmV0dXJuIHVua25vd25fdHlwZQoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGV4dGVuZCgkY2xhc3MsICRmaWxlID0gbnVsbCkgewoJCXJldHVybiAkdGhpcy0+cGx1Z2luKCRjbGFzcywgJGZpbGUpOwoJfQoJLyoqCgkgKgoJICogQGFjY2VzcyBwcml2YXRlCgkgKiBAcGFyYW0gJG1ldGhvZAoJICogQHBhcmFtICRhcmdzCgkgKiBAcmV0dXJuIHVua25vd25fdHlwZQoJICovCglwdWJsaWMgZnVuY3Rpb24gX19jYWxsKCRtZXRob2QsICRhcmdzKSB7CgkJJGFsaWFzTWV0aG9kcyA9IGFycmF5KCdjbG9uZScsICdlbXB0eScpOwoJCWlmIChpc3NldChwaHBRdWVyeTo6JGV4dGVuZE1ldGhvZHNbJG1ldGhvZF0pKSB7CgkJCWFycmF5X3Vuc2hpZnQoJGFyZ3MsICR0aGlzKTsKCQkJcmV0dXJuIHBocFF1ZXJ5OjpjYWxsYmFja1J1bigKCQkJCXBocFF1ZXJ5OjokZXh0ZW5kTWV0aG9kc1skbWV0aG9kXSwgJGFyZ3MKCQkJKTsKCQl9IGVsc2UgaWYgKGlzc2V0KHBocFF1ZXJ5OjokcGx1Z2luc01ldGhvZHNbJG1ldGhvZF0pKSB7CgkJCWFycmF5X3Vuc2hpZnQoJGFyZ3MsICR0aGlzKTsKCQkJJGNsYXNzID0gcGhwUXVlcnk6OiRwbHVnaW5zTWV0aG9kc1skbWV0aG9kXTsKCQkJJHJlYWxDbGFzcyA9ICJwaHBRdWVyeU9iamVjdFBsdWdpbl8kY2xhc3MiOwoJCQkkcmV0dXJuID0gY2FsbF91c2VyX2Z1bmNfYXJyYXkoCgkJCQlhcnJheSgkcmVhbENsYXNzLCAkbWV0aG9kKSwKCQkJCSRhcmdzCgkJCSk7CgkJCS8vIFhYWCBkZXByZWNhdGUgPwoJCQlyZXR1cm4gaXNfbnVsbCgkcmV0dXJuKQoJCQkJPyAkdGhpcwoJCQkJOiAkcmV0dXJuOwoJCX0gZWxzZSBpZiAoaW5fYXJyYXkoJG1ldGhvZCwgJGFsaWFzTWV0aG9kcykpIHsKCQkJcmV0dXJuIGNhbGxfdXNlcl9mdW5jX2FycmF5KGFycmF5KCR0aGlzLCAnXycuJG1ldGhvZCksICRhcmdzKTsKCQl9IGVsc2UKCQkJdGhyb3cgbmV3IEV4Y2VwdGlvbigiTWV0aG9kICd7JG1ldGhvZH0nIGRvZXNudCBleGlzdCIpOwoJfQoJLyoqCgkgKiBTYWZlIHJlbmFtZSBvZiBuZXh0KCkuCgkgKgoJICogVXNlIGl0IE9OTFkgd2hlbiBuZWVkIHRvIGNhbGwgbmV4dCgpIG9uIGFuIGl0ZXJhdGVkIG9iamVjdCAoaW4gc2FtZSB0aW1lKS4KCSAqIE5vcm1hbHkgdGhlcmUgaXMgbm8gbmVlZCB0byBkbyBzdWNoIHRoaW5nIDspCgkgKgoJICogQHJldHVybiBwaHBRdWVyeU9iamVjdHxRdWVyeVRlbXBsYXRlc1NvdXJjZXxRdWVyeVRlbXBsYXRlc1BhcnNlfFF1ZXJ5VGVtcGxhdGVzU291cmNlUXVlcnkKCSAqIEBhY2Nlc3MgcHJpdmF0ZQoJICovCglwdWJsaWMgZnVuY3Rpb24gX25leHQoJHNlbGVjdG9yID0gbnVsbCkgewoJCXJldHVybiAkdGhpcy0+bmV3SW5zdGFuY2UoCgkJCSR0aGlzLT5nZXRFbGVtZW50U2libGluZ3MoJ25leHRTaWJsaW5nJywgJHNlbGVjdG9yLCB0cnVlKQoJCSk7Cgl9CgkvKioKCSAqIFVzZSBwcmV2KCkgYW5kIG5leHQoKS4KCSAqCgkgKiBAZGVwcmVjYXRlZAoJICogQHJldHVybiBwaHBRdWVyeU9iamVjdHxRdWVyeVRlbXBsYXRlc1NvdXJjZXxRdWVyeVRlbXBsYXRlc1BhcnNlfFF1ZXJ5VGVtcGxhdGVzU291cmNlUXVlcnkKCSAqIEBhY2Nlc3MgcHJpdmF0ZQoJICovCglwdWJsaWMgZnVuY3Rpb24gX3ByZXYoJHNlbGVjdG9yID0gbnVsbCkgewoJCXJldHVybiAkdGhpcy0+cHJldigkc2VsZWN0b3IpOwoJfQoJLyoqCgkgKiBFbnRlciBkZXNjcmlwdGlvbiBoZXJlLi4uCgkgKgoJICogQHJldHVybiBwaHBRdWVyeU9iamVjdHxRdWVyeVRlbXBsYXRlc1NvdXJjZXxRdWVyeVRlbXBsYXRlc1BhcnNlfFF1ZXJ5VGVtcGxhdGVzU291cmNlUXVlcnkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHByZXYoJHNlbGVjdG9yID0gbnVsbCkgewoJCXJldHVybiAkdGhpcy0+bmV3SW5zdGFuY2UoCgkJCSR0aGlzLT5nZXRFbGVtZW50U2libGluZ3MoJ3ByZXZpb3VzU2libGluZycsICRzZWxlY3RvciwgdHJ1ZSkKCQkpOwoJfQoJLyoqCgkgKiBAcmV0dXJuIHBocFF1ZXJ5T2JqZWN0fFF1ZXJ5VGVtcGxhdGVzU291cmNlfFF1ZXJ5VGVtcGxhdGVzUGFyc2V8UXVlcnlUZW1wbGF0ZXNTb3VyY2VRdWVyeQoJICogQHRvZG8KCSAqLwoJcHVibGljIGZ1bmN0aW9uIHByZXZBbGwoJHNlbGVjdG9yID0gbnVsbCkgewoJCXJldHVybiAkdGhpcy0+bmV3SW5zdGFuY2UoCgkJCSR0aGlzLT5nZXRFbGVtZW50U2libGluZ3MoJ3ByZXZpb3VzU2libGluZycsICRzZWxlY3RvcikKCQkpOwoJfQoJLyoqCgkgKiBAcmV0dXJuIHBocFF1ZXJ5T2JqZWN0fFF1ZXJ5VGVtcGxhdGVzU291cmNlfFF1ZXJ5VGVtcGxhdGVzUGFyc2V8UXVlcnlUZW1wbGF0ZXNTb3VyY2VRdWVyeQoJICogQHRvZG8gRklYTUU6IHJldHVybnMgc291cmNlIGVsZW1lbnRzIGluc3RlZCBvZiBuZXh0IHNpYmxpbmdzCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBuZXh0QWxsKCRzZWxlY3RvciA9IG51bGwpIHsKCQlyZXR1cm4gJHRoaXMtPm5ld0luc3RhbmNlKAoJCQkkdGhpcy0+Z2V0RWxlbWVudFNpYmxpbmdzKCduZXh0U2libGluZycsICRzZWxlY3RvcikKCQkpOwoJfQoJLyoqCgkgKiBAYWNjZXNzIHByaXZhdGUKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEVsZW1lbnRTaWJsaW5ncygkZGlyZWN0aW9uLCAkc2VsZWN0b3IgPSBudWxsLCAkbGltaXRUb09uZSA9IGZhbHNlKSB7CgkJJHN0YWNrID0gYXJyYXkoKTsKCQkkY291bnQgPSAwOwoJCWZvcmVhY2goJHRoaXMtPnN0YWNrKCkgYXMgJG5vZGUpIHsKCQkJJHRlc3QgPSAkbm9kZTsKCQkJd2hpbGUoIGlzc2V0KCR0ZXN0LT57JGRpcmVjdGlvbn0pICYmICR0ZXN0LT57JGRpcmVjdGlvbn0pIHsKCQkJCSR0ZXN0ID0gJHRlc3QtPnskZGlyZWN0aW9ufTsKCQkJCWlmICghICR0ZXN0IGluc3RhbmNlb2YgRE9NRUxFTUVOVCkKCQkJCQljb250aW51ZTsKCQkJCSRzdGFja1tdID0gJHRlc3Q7CgkJCQlpZiAoJGxpbWl0VG9PbmUpCgkJCQkJYnJlYWs7CgkJCX0KCQl9CgkJaWYgKCRzZWxlY3RvcikgewoJCQkkc3RhY2tPbGQgPSAkdGhpcy0+ZWxlbWVudHM7CgkJCSR0aGlzLT5lbGVtZW50cyA9ICRzdGFjazsKCQkJJHN0YWNrID0gJHRoaXMtPmZpbHRlcigkc2VsZWN0b3IsIHRydWUpLT5zdGFjaygpOwoJCQkkdGhpcy0+ZWxlbWVudHMgPSAkc3RhY2tPbGQ7CgkJfQoJCXJldHVybiAkc3RhY2s7Cgl9CgkvKioKCSAqIEVudGVyIGRlc2NyaXB0aW9uIGhlcmUuLi4KCSAqCgkgKiBAcmV0dXJuIHBocFF1ZXJ5T2JqZWN0fFF1ZXJ5VGVtcGxhdGVzU291cmNlfFF1ZXJ5VGVtcGxhdGVzUGFyc2V8UXVlcnlUZW1wbGF0ZXNTb3VyY2VRdWVyeQoJICovCglwdWJsaWMgZnVuY3Rpb24gc2libGluZ3MoJHNlbGVjdG9yID0gbnVsbCkgewoJCSRzdGFjayA9IGFycmF5KCk7CgkJJHNpYmxpbmdzID0gYXJyYXlfbWVyZ2UoCgkJCSR0aGlzLT5nZXRFbGVtZW50U2libGluZ3MoJ3ByZXZpb3VzU2libGluZycsICRzZWxlY3RvciksCgkJCSR0aGlzLT5nZXRFbGVtZW50U2libGluZ3MoJ25leHRTaWJsaW5nJywgJHNlbGVjdG9yKQoJCSk7CgkJZm9yZWFjaCgkc2libGluZ3MgYXMgJG5vZGUpIHsKCQkJaWYgKCEgJHRoaXMtPmVsZW1lbnRzQ29udGFpbnNOb2RlKCRub2RlLCAkc3RhY2spKQoJCQkJJHN0YWNrW10gPSAkbm9kZTsKCQl9CgkJcmV0dXJuICR0aGlzLT5uZXdJbnN0YW5jZSgkc3RhY2spOwoJfQoJLyoqCgkgKiBFbnRlciBkZXNjcmlwdGlvbiBoZXJlLi4uCgkgKgoJICogQHJldHVybiBwaHBRdWVyeU9iamVjdHxRdWVyeVRlbXBsYXRlc1NvdXJjZXxRdWVyeVRlbXBsYXRlc1BhcnNlfFF1ZXJ5VGVtcGxhdGVzU291cmNlUXVlcnkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIG5vdCgkc2VsZWN0b3IgPSBudWxsKSB7CgkJaWYgKGlzX3N0cmluZygkc2VsZWN0b3IpKQoJCQlwaHBRdWVyeTo6ZGVidWcoYXJyYXkoJ25vdCcsICRzZWxlY3RvcikpOwoJCWVsc2UKCQkJcGhwUXVlcnk6OmRlYnVnKCdub3QnKTsKCQkkc3RhY2sgPSBhcnJheSgpOwoJCWlmICgkc2VsZWN0b3IgaW5zdGFuY2VvZiBzZWxmIHx8ICRzZWxlY3RvciBpbnN0YW5jZW9mIERPTU5PREUpIHsKCQkJZm9yZWFjaCgkdGhpcy0+c3RhY2soKSBhcyAkbm9kZSkgewoJCQkJaWYgKCRzZWxlY3RvciBpbnN0YW5jZW9mIHNlbGYpIHsKCQkJCQkkbWF0Y2hGb3VuZCA9IGZhbHNlOwoJCQkJCWZvcmVhY2goJHNlbGVjdG9yLT5zdGFjaygpIGFzICRub3ROb2RlKSB7CgkJCQkJCWlmICgkbm90Tm9kZS0+aXNTYW1lTm9kZSgkbm9kZSkpCgkJCQkJCQkkbWF0Y2hGb3VuZCA9IHRydWU7CgkJCQkJfQoJCQkJCWlmICghICRtYXRjaEZvdW5kKQoJCQkJCQkkc3RhY2tbXSA9ICRub2RlOwoJCQkJfSBlbHNlIGlmICgkc2VsZWN0b3IgaW5zdGFuY2VvZiBET01OT0RFKSB7CgkJCQkJaWYgKCEgJHNlbGVjdG9yLT5pc1NhbWVOb2RlKCRub2RlKSkKCQkJCQkJJHN0YWNrW10gPSAkbm9kZTsKCQkJCX0gZWxzZSB7CgkJCQkJaWYgKCEgJHRoaXMtPmlzKCRzZWxlY3RvcikpCgkJCQkJCSRzdGFja1tdID0gJG5vZGU7CgkJCQl9CgkJCX0KCQl9IGVsc2UgewoJCQkkb3JnU3RhY2sgPSAkdGhpcy0+c3RhY2soKTsKCQkJJG1hdGNoZWQgPSAkdGhpcy0+ZmlsdGVyKCRzZWxlY3RvciwgdHJ1ZSktPnN0YWNrKCk7Ci8vCQkJJG1hdGNoZWQgPSBhcnJheSgpOwovLwkJCS8vIHNpbXVsYXRlIE9SIGluIGZpbHRlcigpIGluc3RlYWQgb2YgQU5EIDV5Ci8vCQkJZm9yZWFjaCgkdGhpcy0+cGFyc2VTZWxlY3Rvcigkc2VsZWN0b3IpIGFzICRzKSB7Ci8vCQkJCSRtYXRjaGVkID0gYXJyYXlfbWVyZ2UoJG1hdGNoZWQsCi8vCQkJCQkkdGhpcy0+ZmlsdGVyKGFycmF5KCRzKSktPnN0YWNrKCkKLy8JCQkJKTsKLy8JCQl9CgkJCWZvcmVhY2goJG9yZ1N0YWNrIGFzICRub2RlKQoJCQkJaWYgKCEgJHRoaXMtPmVsZW1lbnRzQ29udGFpbnNOb2RlKCRub2RlLCAkbWF0Y2hlZCkpCgkJCQkJJHN0YWNrW10gPSAkbm9kZTsKCQl9CgkJcmV0dXJuICR0aGlzLT5uZXdJbnN0YW5jZSgkc3RhY2spOwoJfQoJLyoqCgkgKiBFbnRlciBkZXNjcmlwdGlvbiBoZXJlLi4uCgkgKgoJICogQHBhcmFtIHN0cmluZ3xwaHBRdWVyeU9iamVjdAoJICogQHJldHVybiBwaHBRdWVyeU9iamVjdHxRdWVyeVRlbXBsYXRlc1NvdXJjZXxRdWVyeVRlbXBsYXRlc1BhcnNlfFF1ZXJ5VGVtcGxhdGVzU291cmNlUXVlcnkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGFkZCgkc2VsZWN0b3IgPSBudWxsKSB7CgkJaWYgKCEgJHNlbGVjdG9yKQoJCQlyZXR1cm4gJHRoaXM7CgkJJHN0YWNrID0gYXJyYXkoKTsKCQkkdGhpcy0+ZWxlbWVudHNCYWNrdXAgPSAkdGhpcy0+ZWxlbWVudHM7CgkJJGZvdW5kID0gcGhwUXVlcnk6OnBxKCRzZWxlY3RvciwgJHRoaXMtPmdldERvY3VtZW50SUQoKSk7CgkJJHRoaXMtPm1lcmdlKCRmb3VuZC0+ZWxlbWVudHMpOwoJCXJldHVybiAkdGhpcy0+bmV3SW5zdGFuY2UoKTsKCX0KCS8qKgoJICogQGFjY2VzcyBwcml2YXRlCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBtZXJnZSgpIHsKCQlmb3JlYWNoKGZ1bmNfZ2V0X2FyZ3MoKSBhcyAkbm9kZXMpCgkJCWZvcmVhY2goJG5vZGVzIGFzICRuZXdOb2RlICkKCQkJCWlmICghICR0aGlzLT5lbGVtZW50c0NvbnRhaW5zTm9kZSgkbmV3Tm9kZSkgKQoJCQkJCSR0aGlzLT5lbGVtZW50c1tdID0gJG5ld05vZGU7Cgl9CgkvKioKCSAqIEBhY2Nlc3MgcHJpdmF0ZQoJICogVE9ETyByZWZhY3RvciB0byBzdGFja0NvbnRhaW5zTm9kZQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gZWxlbWVudHNDb250YWluc05vZGUoJG5vZGVUb0NoZWNrLCAkZWxlbWVudHNTdGFjayA9IG51bGwpIHsKCQkkbG9vcCA9ICEgaXNfbnVsbCgkZWxlbWVudHNTdGFjaykKCQkJPyAkZWxlbWVudHNTdGFjawoJCQk6ICR0aGlzLT5lbGVtZW50czsKCQlmb3JlYWNoKCRsb29wIGFzICRub2RlKSB7CgkJCWlmICggJG5vZGUtPmlzU2FtZU5vZGUoICRub2RlVG9DaGVjayApICkKCQkJCXJldHVybiB0cnVlOwoJCX0KCQlyZXR1cm4gZmFsc2U7Cgl9CgkvKioKCSAqIEVudGVyIGRlc2NyaXB0aW9uIGhlcmUuLi4KCSAqCgkgKiBAcmV0dXJuIHBocFF1ZXJ5T2JqZWN0fFF1ZXJ5VGVtcGxhdGVzU291cmNlfFF1ZXJ5VGVtcGxhdGVzUGFyc2V8UXVlcnlUZW1wbGF0ZXNTb3VyY2VRdWVyeQoJICovCglwdWJsaWMgZnVuY3Rpb24gcGFyZW50KCRzZWxlY3RvciA9IG51bGwpIHsKCQkkc3RhY2sgPSBhcnJheSgpOwoJCWZvcmVhY2goJHRoaXMtPmVsZW1lbnRzIGFzICRub2RlICkKCQkJaWYgKCAkbm9kZS0+cGFyZW50Tm9kZSAmJiAhICR0aGlzLT5lbGVtZW50c0NvbnRhaW5zTm9kZSgkbm9kZS0+cGFyZW50Tm9kZSwgJHN0YWNrKSApCgkJCQkkc3RhY2tbXSA9ICRub2RlLT5wYXJlbnROb2RlOwoJCSR0aGlzLT5lbGVtZW50c0JhY2t1cCA9ICR0aGlzLT5lbGVtZW50czsKCQkkdGhpcy0+ZWxlbWVudHMgPSAkc3RhY2s7CgkJaWYgKCAkc2VsZWN0b3IgKQoJCQkkdGhpcy0+ZmlsdGVyKCRzZWxlY3RvciwgdHJ1ZSk7CgkJcmV0dXJuICR0aGlzLT5uZXdJbnN0YW5jZSgpOwoJfQoJLyoqCgkgKiBFbnRlciBkZXNjcmlwdGlvbiBoZXJlLi4uCgkgKgoJICogQHJldHVybiBwaHBRdWVyeU9iamVjdHxRdWVyeVRlbXBsYXRlc1NvdXJjZXxRdWVyeVRlbXBsYXRlc1BhcnNlfFF1ZXJ5VGVtcGxhdGVzU291cmNlUXVlcnkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHBhcmVudHMoJHNlbGVjdG9yID0gbnVsbCkgewoJCSRzdGFjayA9IGFycmF5KCk7CgkJaWYgKCEgJHRoaXMtPmVsZW1lbnRzICkKCQkJJHRoaXMtPmRlYnVnKCdwYXJlbnRzKCkgLSBzdGFjayBlbXB0eScpOwoJCWZvcmVhY2goJHRoaXMtPmVsZW1lbnRzIGFzICRub2RlKSB7CgkJCSR0ZXN0ID0gJG5vZGU7CgkJCXdoaWxlKCAkdGVzdC0+cGFyZW50Tm9kZSkgewoJCQkJJHRlc3QgPSAkdGVzdC0+cGFyZW50Tm9kZTsKCQkJCWlmICgkdGhpcy0+aXNSb290KCR0ZXN0KSkKCQkJCQlicmVhazsKCQkJCWlmICghICR0aGlzLT5lbGVtZW50c0NvbnRhaW5zTm9kZSgkdGVzdCwgJHN0YWNrKSkgewoJCQkJCSRzdGFja1tdID0gJHRlc3Q7CgkJCQkJY29udGludWU7CgkJCQl9CgkJCX0KCQl9CgkJJHRoaXMtPmVsZW1lbnRzQmFja3VwID0gJHRoaXMtPmVsZW1lbnRzOwoJCSR0aGlzLT5lbGVtZW50cyA9ICRzdGFjazsKCQlpZiAoICRzZWxlY3RvciApCgkJCSR0aGlzLT5maWx0ZXIoJHNlbGVjdG9yLCB0cnVlKTsKCQlyZXR1cm4gJHRoaXMtPm5ld0luc3RhbmNlKCk7Cgl9CgkvKioKCSAqIEludGVybmFsIHN0YWNrIGl0ZXJhdG9yLgoJICoKCSAqIEBhY2Nlc3MgcHJpdmF0ZQoJICovCglwdWJsaWMgZnVuY3Rpb24gc3RhY2soJG5vZGVUeXBlcyA9IG51bGwpIHsKCQlpZiAoIWlzc2V0KCRub2RlVHlwZXMpKQoJCQlyZXR1cm4gJHRoaXMtPmVsZW1lbnRzOwoJCWlmICghaXNfYXJyYXkoJG5vZGVUeXBlcykpCgkJCSRub2RlVHlwZXMgPSBhcnJheSgkbm9kZVR5cGVzKTsKCQkkcmV0dXJuID0gYXJyYXkoKTsKCQlmb3JlYWNoKCR0aGlzLT5lbGVtZW50cyBhcyAkbm9kZSkgewoJCQlpZiAoaW5fYXJyYXkoJG5vZGUtPm5vZGVUeXBlLCAkbm9kZVR5cGVzKSkKCQkJCSRyZXR1cm5bXSA9ICRub2RlOwoJCX0KCQlyZXR1cm4gJHJldHVybjsKCX0KCS8vIFRPRE8gcGhwZG9jOyAkb2xkQXR0ciBpcyByZXN1bHQgb2YgaGFzQXR0cmlidXRlLCBiZWZvcmUgYW55IGNoYW5nZXMKCXByb3RlY3RlZCBmdW5jdGlvbiBhdHRyRXZlbnRzKCRhdHRyLCAkb2xkQXR0ciwgJG9sZFZhbHVlLCAkbm9kZSkgewoJCS8vIHNraXAgZXZlbnRzIGZvciBYTUwgZG9jdW1lbnRzCgkJaWYgKCEgJHRoaXMtPmlzWEhUTUwoKSAmJiAhICR0aGlzLT5pc0hUTUwoKSkKCQkJcmV0dXJuOwoJCSRldmVudCA9IG51bGw7CgkJLy8gaWRlbnRpZnkKCQkkaXNJbnB1dFZhbHVlID0gJG5vZGUtPnRhZ05hbWUgPT0gJ2lucHV0JwoJCQkmJiAoCgkJCQlpbl9hcnJheSgkbm9kZS0+Z2V0QXR0cmlidXRlKCd0eXBlJyksCgkJCQkJYXJyYXkoJ3RleHQnLCAncGFzc3dvcmQnLCAnaGlkZGVuJykpCgkJCQl8fCAhJG5vZGUtPmdldEF0dHJpYnV0ZSgndHlwZScpCgkJCQkgKTsKCQkkaXNSYWRpbyA9ICRub2RlLT50YWdOYW1lID09ICdpbnB1dCcKCQkJJiYgJG5vZGUtPmdldEF0dHJpYnV0ZSgndHlwZScpID09ICdyYWRpbyc7CgkJJGlzQ2hlY2tib3ggPSAkbm9kZS0+dGFnTmFtZSA9PSAnaW5wdXQnCgkJCSYmICRub2RlLT5nZXRBdHRyaWJ1dGUoJ3R5cGUnKSA9PSAnY2hlY2tib3gnOwoJCSRpc09wdGlvbiA9ICRub2RlLT50YWdOYW1lID09ICdvcHRpb24nOwoJCWlmICgkaXNJbnB1dFZhbHVlICYmICRhdHRyID09ICd2YWx1ZScgJiYgJG9sZFZhbHVlICE9ICRub2RlLT5nZXRBdHRyaWJ1dGUoJGF0dHIpKSB7CgkJCSRldmVudCA9IG5ldyBET01FdmVudChhcnJheSgKCQkJCSd0YXJnZXQnID0+ICRub2RlLAoJCQkJJ3R5cGUnID0+ICdjaGFuZ2UnCgkJCSkpOwoJCX0gZWxzZSBpZiAoKCRpc1JhZGlvIHx8ICRpc0NoZWNrYm94KSAmJiAkYXR0ciA9PSAnY2hlY2tlZCcgJiYgKAoJCQkJLy8gY2hlY2sKCQkJCSghICRvbGRBdHRyICYmICRub2RlLT5oYXNBdHRyaWJ1dGUoJGF0dHIpKQoJCQkJLy8gdW4tY2hlY2sKCQkJCXx8ICghICRub2RlLT5oYXNBdHRyaWJ1dGUoJGF0dHIpICYmICRvbGRBdHRyKQoJCQkpKSB7CgkJCSRldmVudCA9IG5ldyBET01FdmVudChhcnJheSgKCQkJCSd0YXJnZXQnID0+ICRub2RlLAoJCQkJJ3R5cGUnID0+ICdjaGFuZ2UnCgkJCSkpOwoJCX0gZWxzZSBpZiAoJGlzT3B0aW9uICYmICRub2RlLT5wYXJlbnROb2RlICYmICRhdHRyID09ICdzZWxlY3RlZCcgJiYgKAoJCQkJLy8gc2VsZWN0CgkJCQkoISAkb2xkQXR0ciAmJiAkbm9kZS0+aGFzQXR0cmlidXRlKCRhdHRyKSkKCQkJCS8vIHVuLXNlbGVjdAoJCQkJfHwgKCEgJG5vZGUtPmhhc0F0dHJpYnV0ZSgkYXR0cikgJiYgJG9sZEF0dHIpCgkJCSkpIHsKCQkJJGV2ZW50ID0gbmV3IERPTUV2ZW50KGFycmF5KAoJCQkJJ3RhcmdldCcgPT4gJG5vZGUtPnBhcmVudE5vZGUsCgkJCQkndHlwZScgPT4gJ2NoYW5nZScKCQkJKSk7CgkJfQoJCWlmICgkZXZlbnQpIHsKCQkJcGhwUXVlcnlFdmVudHM6OnRyaWdnZXIoJHRoaXMtPmdldERvY3VtZW50SUQoKSwKCQkJCSRldmVudC0+dHlwZSwgYXJyYXkoJGV2ZW50KSwgJG5vZGUKCQkJKTsKCQl9Cgl9CglwdWJsaWMgZnVuY3Rpb24gYXR0cigkYXR0ciA9IG51bGwsICR2YWx1ZSA9IG51bGwpIHsKCQlmb3JlYWNoKCR0aGlzLT5zdGFjaygxKSBhcyAkbm9kZSkgewoJCQlpZiAoISBpc19udWxsKCR2YWx1ZSkpIHsKCQkJCSRsb29wID0gJGF0dHIgPT0gJyonCgkJCQkJPyAkdGhpcy0+Z2V0Tm9kZUF0dHJzKCRub2RlKQoJCQkJCTogYXJyYXkoJGF0dHIpOwoJCQkJZm9yZWFjaCgkbG9vcCBhcyAkYSkgewoJCQkJCSRvbGRWYWx1ZSA9ICRub2RlLT5nZXRBdHRyaWJ1dGUoJGEpOwoJCQkJCSRvbGRBdHRyID0gJG5vZGUtPmhhc0F0dHJpYnV0ZSgkYSk7CgkJCQkJLy8gVE9ETyByYWlzZXMgYW4gZXJyb3Igd2hlbiBjaGFyc2V0IG90aGVyIHRoYW4gVVRGLTgKCQkJCQkvLyB3aGlsZSBkb2N1bWVudCdzIGNoYXJzZXQgaXMgYWxzbyBub3QgVVRGLTgKCQkJCQlAJG5vZGUtPnNldEF0dHJpYnV0ZSgkYSwgJHZhbHVlKTsKCQkJCQkkdGhpcy0+YXR0ckV2ZW50cygkYSwgJG9sZEF0dHIsICRvbGRWYWx1ZSwgJG5vZGUpOwoJCQkJfQoJCQl9IGVsc2UgaWYgKCRhdHRyID09ICcqJykgewoJCQkJLy8galF1ZXJ5IGRpZmZlcmVuY2UKCQkJCSRyZXR1cm4gPSBhcnJheSgpOwoJCQkJZm9yZWFjaCgkbm9kZS0+YXR0cmlidXRlcyBhcyAkbiA9PiAkdikKCQkJCQkkcmV0dXJuWyRuXSA9ICR2LT52YWx1ZTsKCQkJCXJldHVybiAkcmV0dXJuOwoJCQl9IGVsc2UKCQkJCXJldHVybiAkbm9kZS0+aGFzQXR0cmlidXRlKCRhdHRyKQoJCQkJCT8gJG5vZGUtPmdldEF0dHJpYnV0ZSgkYXR0cikKCQkJCQk6IG51bGw7CgkJfQoJCXJldHVybiBpc19udWxsKCR2YWx1ZSkKCQkJPyAnJyA6ICR0aGlzOwoJfQogICAgLyoqCiAgICAgKiBAcmV0dXJuIFRoZSBzYW1lIGF0dHJpYnV0ZSBvZiBlYWNoIG1hdGNoaW5nIGVsZW1lbnQsIGxpa2UKICAgICAqIGF0dHIoKSBidXQgcmV0dXJucyBhbiBhcnJheSB3aXRoIG9uZSBlbnRyeSBwZXIgbWF0Y2hlZCBlbGVtZW50LgogICAgICogUmVhZCBvbmx5LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYXR0cnMoJGF0dHIgPSBudWxsKSB7CiAgICAgICAgJHJlc3VsdHMgPSBhcnJheSgpOwogICAgICAgIGZvcmVhY2goJHRoaXMtPnN0YWNrKDEpIGFzICRub2RlKSB7CiAgICAgICAgICAgICRyZXN1bHRzW10gPSAkbm9kZS0+aGFzQXR0cmlidXRlKCRhdHRyKQogICAgICAgICAgICAgICAgPyAkbm9kZS0+Z2V0QXR0cmlidXRlKCRhdHRyKQogICAgICAgICAgICAgICAgOiBudWxsOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJHJlc3VsdHM7CiAgICB9CgkvKioKCSAqIEBhY2Nlc3MgcHJpdmF0ZQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0Tm9kZUF0dHJzKCRub2RlKSB7CgkJJHJldHVybiA9IGFycmF5KCk7CgkJZm9yZWFjaCgkbm9kZS0+YXR0cmlidXRlcyBhcyAkbiA9PiAkbykKCQkJJHJldHVybltdID0gJG47CgkJcmV0dXJuICRyZXR1cm47Cgl9CgkvKioKCSAqIEVudGVyIGRlc2NyaXB0aW9uIGhlcmUuLi4KCSAqCgkgKiBAcmV0dXJuIHBocFF1ZXJ5T2JqZWN0fFF1ZXJ5VGVtcGxhdGVzU291cmNlfFF1ZXJ5VGVtcGxhdGVzUGFyc2V8UXVlcnlUZW1wbGF0ZXNTb3VyY2VRdWVyeQoJICogQHRvZG8gY2hlY2sgQ0RBVEEgPz8/CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBhdHRyUEhQKCRhdHRyLCAkY29kZSkgewoJCWlmICghIGlzX251bGwoJGNvZGUpKSB7CgkJCSR2YWx1ZSA9ICc8Jy4nP3BocCAnLiRjb2RlLicgPycuJz4nOwoJCQkvLyBUT0RPIHRlbXBvbGFyeSBzb2x1dGlvbgoJCQkvLyBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvcGhwcXVlcnkvaXNzdWVzL2RldGFpbD9pZD0xNwovLwkJCWlmIChmdW5jdGlvbl9leGlzdHMoJ21iX2RldGVjdF9lbmNvZGluZycpICYmIG1iX2RldGVjdF9lbmNvZGluZygkdmFsdWUpID09ICdBU0NJSScpCi8vCQkJCSR2YWx1ZQk9IG1iX2NvbnZlcnRfZW5jb2RpbmcoJHZhbHVlLCAnVVRGLTgnLCAnSFRNTC1FTlRJVElFUycpOwoJCX0KCQlmb3JlYWNoKCR0aGlzLT5zdGFjaygxKSBhcyAkbm9kZSkgewoJCQlpZiAoISBpc19udWxsKCRjb2RlKSkgewovLwkJCQkkYXR0ck5vZGUgPSAkdGhpcy0+RE9NLT5jcmVhdGVBdHRyaWJ1dGUoJGF0dHIpOwoJCQkJJG5vZGUtPnNldEF0dHJpYnV0ZSgkYXR0ciwgJHZhbHVlKTsKLy8JCQkJJGF0dHJOb2RlLT52YWx1ZSA9ICR2YWx1ZTsKLy8JCQkJJG5vZGUtPmFwcGVuZENoaWxkKCRhdHRyTm9kZSk7CgkJCX0gZWxzZSBpZiAoICRhdHRyID09ICcqJykgewoJCQkJLy8galF1ZXJ5IGRpZmYKCQkJCSRyZXR1cm4gPSBhcnJheSgpOwoJCQkJZm9yZWFjaCgkbm9kZS0+YXR0cmlidXRlcyBhcyAkbiA9PiAkdikKCQkJCQkkcmV0dXJuWyRuXSA9ICR2LT52YWx1ZTsKCQkJCXJldHVybiAkcmV0dXJuOwoJCQl9IGVsc2UKCQkJCXJldHVybiAkbm9kZS0+Z2V0QXR0cmlidXRlKCRhdHRyKTsKCQl9CgkJcmV0dXJuICR0aGlzOwoJfQoJLyoqCgkgKiBFbnRlciBkZXNjcmlwdGlvbiBoZXJlLi4uCgkgKgoJICogQHJldHVybiBwaHBRdWVyeU9iamVjdHxRdWVyeVRlbXBsYXRlc1NvdXJjZXxRdWVyeVRlbXBsYXRlc1BhcnNlfFF1ZXJ5VGVtcGxhdGVzU291cmNlUXVlcnkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHJlbW92ZUF0dHIoJGF0dHIpIHsKCQlmb3JlYWNoKCR0aGlzLT5zdGFjaygxKSBhcyAkbm9kZSkgewoJCQkkbG9vcCA9ICRhdHRyID09ICcqJwoJCQkJPyAkdGhpcy0+Z2V0Tm9kZUF0dHJzKCRub2RlKQoJCQkJOiBhcnJheSgkYXR0cik7CgkJCWZvcmVhY2goJGxvb3AgYXMgJGEpIHsKCQkJCSRvbGRWYWx1ZSA9ICRub2RlLT5nZXRBdHRyaWJ1dGUoJGEpOwoJCQkJJG5vZGUtPnJlbW92ZUF0dHJpYnV0ZSgkYSk7CgkJCQkkdGhpcy0+YXR0ckV2ZW50cygkYSwgJG9sZFZhbHVlLCBudWxsLCAkbm9kZSk7CgkJCX0KCQl9CgkJcmV0dXJuICR0aGlzOwoJfQoJLyoqCgkgKiBSZXR1cm4gZm9ybSBlbGVtZW50IHZhbHVlLgoJICoKCSAqIEByZXR1cm4gU3RyaW5nIEZpZWxkcyB2YWx1ZS4KCSAqLwoJcHVibGljIGZ1bmN0aW9uIHZhbCgkdmFsID0gbnVsbCkgewoJCWlmICghIGlzc2V0KCR2YWwpKSB7CgkJCWlmICgkdGhpcy0+ZXEoMCktPmlzKCdzZWxlY3QnKSkgewoJCQkJCSRzZWxlY3RlZCA9ICR0aGlzLT5lcSgwKS0+ZmluZCgnb3B0aW9uW3NlbGVjdGVkPXNlbGVjdGVkXScpOwoJCQkJCWlmICgkc2VsZWN0ZWQtPmlzKCdbdmFsdWVdJykpCgkJCQkJCXJldHVybiAkc2VsZWN0ZWQtPmF0dHIoJ3ZhbHVlJyk7CgkJCQkJZWxzZQoJCQkJCQlyZXR1cm4gJHNlbGVjdGVkLT50ZXh0KCk7CgkJCX0gZWxzZSBpZiAoJHRoaXMtPmVxKDApLT5pcygndGV4dGFyZWEnKSkKCQkJCQlyZXR1cm4gJHRoaXMtPmVxKDApLT5tYXJrdXAoKTsKCQkJCWVsc2UKCQkJCQlyZXR1cm4gJHRoaXMtPmVxKDApLT5hdHRyKCd2YWx1ZScpOwoJCX0gZWxzZSB7CgkJCSRfdmFsID0gbnVsbDsKCQkJZm9yZWFjaCgkdGhpcy0+c3RhY2soMSkgYXMgJG5vZGUpIHsKCQkJCSRub2RlID0gcHEoJG5vZGUsICR0aGlzLT5nZXREb2N1bWVudElEKCkpOwoJCQkJaWYgKGlzX2FycmF5KCR2YWwpICYmIGluX2FycmF5KCRub2RlLT5hdHRyKCd0eXBlJyksIGFycmF5KCdjaGVja2JveCcsICdyYWRpbycpKSkgewoJCQkJCSRpc0NoZWNrZWQgPSBpbl9hcnJheSgkbm9kZS0+YXR0cigndmFsdWUnKSwgJHZhbCkKCQkJCQkJCXx8IGluX2FycmF5KCRub2RlLT5hdHRyKCduYW1lJyksICR2YWwpOwoJCQkJCWlmICgkaXNDaGVja2VkKQoJCQkJCQkkbm9kZS0+YXR0cignY2hlY2tlZCcsICdjaGVja2VkJyk7CgkJCQkJZWxzZQoJCQkJCQkkbm9kZS0+cmVtb3ZlQXR0cignY2hlY2tlZCcpOwoJCQkJfSBlbHNlIGlmICgkbm9kZS0+Z2V0KDApLT50YWdOYW1lID09ICdzZWxlY3QnKSB7CgkJCQkJaWYgKCEgaXNzZXQoJF92YWwpKSB7CgkJCQkJCSRfdmFsID0gYXJyYXkoKTsKCQkJCQkJaWYgKCEgaXNfYXJyYXkoJHZhbCkpCgkJCQkJCQkkX3ZhbCA9IGFycmF5KChzdHJpbmcpJHZhbCk7CgkJCQkJCWVsc2UKCQkJCQkJCWZvcmVhY2goJHZhbCBhcyAkdikKCQkJCQkJCQkkX3ZhbFtdID0gJHY7CgkJCQkJfQoJCQkJCWZvcmVhY2goJG5vZGVbJ29wdGlvbiddLT5zdGFjaygxKSBhcyAkb3B0aW9uKSB7CgkJCQkJCSRvcHRpb24gPSBwcSgkb3B0aW9uLCAkdGhpcy0+Z2V0RG9jdW1lbnRJRCgpKTsKCQkJCQkJJHNlbGVjdGVkID0gZmFsc2U7CgkJCQkJCS8vIFhYWDogd29ya2Fyb3VuZCBmb3Igc3RyaW5nIGNvbXBhcnNpb24sIHNlZSBpc3N1ZSAjOTYKCQkJCQkJLy8gaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL3BocHF1ZXJ5L2lzc3Vlcy9kZXRhaWw/aWQ9OTYKCQkJCQkJJHNlbGVjdGVkID0gaXNfbnVsbCgkb3B0aW9uLT5hdHRyKCd2YWx1ZScpKQoJCQkJCQkJPyBpbl9hcnJheSgkb3B0aW9uLT5tYXJrdXAoKSwgJF92YWwpCgkJCQkJCQk6IGluX2FycmF5KCRvcHRpb24tPmF0dHIoJ3ZhbHVlJyksICRfdmFsKTsKLy8JCQkJCQkkb3B0aW9uVmFsdWUgPSAkb3B0aW9uLT5hdHRyKCd2YWx1ZScpOwovLwkJCQkJCSRvcHRpb25UZXh0ID0gJG9wdGlvbi0+dGV4dCgpOwovLwkJCQkJCSRvcHRpb25UZXh0TGVuZ2h0ID0gbWJfc3RybGVuKCRvcHRpb25UZXh0KTsKLy8JCQkJCQlmb3JlYWNoKCRfdmFsIGFzICR2KQovLwkJCQkJCQlpZiAoJG9wdGlvblZhbHVlID09ICR2KQovLwkJCQkJCQkJJHNlbGVjdGVkID0gdHJ1ZTsKLy8JCQkJCQkJZWxzZSBpZiAoJG9wdGlvblRleHQgPT0gJHYgJiYgJG9wdGlvblRleHRMZW5naHQgPT0gbWJfc3RybGVuKCR2KSkKLy8JCQkJCQkJCSRzZWxlY3RlZCA9IHRydWU7CgkJCQkJCWlmICgkc2VsZWN0ZWQpCgkJCQkJCQkkb3B0aW9uLT5hdHRyKCdzZWxlY3RlZCcsICdzZWxlY3RlZCcpOwoJCQkJCQllbHNlCgkJCQkJCQkkb3B0aW9uLT5yZW1vdmVBdHRyKCdzZWxlY3RlZCcpOwoJCQkJCX0KCQkJCX0gZWxzZSBpZiAoJG5vZGUtPmdldCgwKS0+dGFnTmFtZSA9PSAndGV4dGFyZWEnKQoJCQkJCSRub2RlLT5tYXJrdXAoJHZhbCk7CgkJCQllbHNlCgkJCQkJJG5vZGUtPmF0dHIoJ3ZhbHVlJywgJHZhbCk7CgkJCX0KCQl9CgkJcmV0dXJuICR0aGlzOwoJfQoJLyoqCgkgKiBFbnRlciBkZXNjcmlwdGlvbiBoZXJlLi4uCgkgKgoJICogQHJldHVybiBwaHBRdWVyeU9iamVjdHxRdWVyeVRlbXBsYXRlc1NvdXJjZXxRdWVyeVRlbXBsYXRlc1BhcnNlfFF1ZXJ5VGVtcGxhdGVzU291cmNlUXVlcnkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGFuZFNlbGYoKSB7CgkJaWYgKCAkdGhpcy0+cHJldmlvdXMgKQoJCQkkdGhpcy0+ZWxlbWVudHMgPSBhcnJheV9tZXJnZSgkdGhpcy0+ZWxlbWVudHMsICR0aGlzLT5wcmV2aW91cy0+ZWxlbWVudHMpOwoJCXJldHVybiAkdGhpczsKCX0KCS8qKgoJICogRW50ZXIgZGVzY3JpcHRpb24gaGVyZS4uLgoJICoKCSAqIEByZXR1cm4gcGhwUXVlcnlPYmplY3R8UXVlcnlUZW1wbGF0ZXNTb3VyY2V8UXVlcnlUZW1wbGF0ZXNQYXJzZXxRdWVyeVRlbXBsYXRlc1NvdXJjZVF1ZXJ5CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBhZGRDbGFzcyggJGNsYXNzTmFtZSkgewoJCWlmICghICRjbGFzc05hbWUpCgkJCXJldHVybiAkdGhpczsKCQlmb3JlYWNoKCR0aGlzLT5zdGFjaygxKSBhcyAkbm9kZSkgewoJCQlpZiAoISAkdGhpcy0+aXMoIi4kY2xhc3NOYW1lIiwgJG5vZGUpKQoJCQkJJG5vZGUtPnNldEF0dHJpYnV0ZSgKCQkJCQknY2xhc3MnLAoJCQkJCXRyaW0oJG5vZGUtPmdldEF0dHJpYnV0ZSgnY2xhc3MnKS4nICcuJGNsYXNzTmFtZSkKCQkJCSk7CgkJfQoJCXJldHVybiAkdGhpczsKCX0KCS8qKgoJICogRW50ZXIgZGVzY3JpcHRpb24gaGVyZS4uLgoJICoKCSAqIEByZXR1cm4gcGhwUXVlcnlPYmplY3R8UXVlcnlUZW1wbGF0ZXNTb3VyY2V8UXVlcnlUZW1wbGF0ZXNQYXJzZXxRdWVyeVRlbXBsYXRlc1NvdXJjZVF1ZXJ5CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBhZGRDbGFzc1BIUCggJGNsYXNzTmFtZSkgewoJCWZvcmVhY2goJHRoaXMtPnN0YWNrKDEpIGFzICRub2RlKSB7CgkJCQkkY2xhc3NlcyA9ICRub2RlLT5nZXRBdHRyaWJ1dGUoJ2NsYXNzJyk7CgkJCQkkbmV3VmFsdWUgPSAkY2xhc3NlcwoJCQkJCT8gJGNsYXNzZXMuJyA8Jy4nP3BocCAnLiRjbGFzc05hbWUuJyA/Jy4nPicKCQkJCQk6ICc8Jy4nP3BocCAnLiRjbGFzc05hbWUuJyA/Jy4nPic7CgkJCQkkbm9kZS0+c2V0QXR0cmlidXRlKCdjbGFzcycsICRuZXdWYWx1ZSk7CgkJfQoJCXJldHVybiAkdGhpczsKCX0KCS8qKgoJICogRW50ZXIgZGVzY3JpcHRpb24gaGVyZS4uLgoJICoKCSAqIEBwYXJhbQlzdHJpbmcJJGNsYXNzTmFtZQoJICogQHJldHVybglib29sCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBoYXNDbGFzcygkY2xhc3NOYW1lKSB7CgkJZm9yZWFjaCgkdGhpcy0+c3RhY2soMSkgYXMgJG5vZGUpIHsKCQkJaWYgKCAkdGhpcy0+aXMoIi4kY2xhc3NOYW1lIiwgJG5vZGUpKQoJCQkJcmV0dXJuIHRydWU7CgkJfQoJCXJldHVybiBmYWxzZTsKCX0KCS8qKgoJICogRW50ZXIgZGVzY3JpcHRpb24gaGVyZS4uLgoJICoKCSAqIEByZXR1cm4gcGhwUXVlcnlPYmplY3R8UXVlcnlUZW1wbGF0ZXNTb3VyY2V8UXVlcnlUZW1wbGF0ZXNQYXJzZXxRdWVyeVRlbXBsYXRlc1NvdXJjZVF1ZXJ5CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiByZW1vdmVDbGFzcygkY2xhc3NOYW1lKSB7CgkJZm9yZWFjaCgkdGhpcy0+c3RhY2soMSkgYXMgJG5vZGUpIHsKCQkJJGNsYXNzZXMgPSBleHBsb2RlKCAnICcsICRub2RlLT5nZXRBdHRyaWJ1dGUoJ2NsYXNzJykpOwoJCQlpZiAoIGluX2FycmF5KCRjbGFzc05hbWUsICRjbGFzc2VzKSkgewoJCQkJJGNsYXNzZXMgPSBhcnJheV9kaWZmKCRjbGFzc2VzLCBhcnJheSgkY2xhc3NOYW1lKSk7CgkJCQlpZiAoICRjbGFzc2VzICkKCQkJCQkkbm9kZS0+c2V0QXR0cmlidXRlKCdjbGFzcycsIGltcGxvZGUoJyAnLCAkY2xhc3NlcykpOwoJCQkJZWxzZQoJCQkJCSRub2RlLT5yZW1vdmVBdHRyaWJ1dGUoJ2NsYXNzJyk7CgkJCX0KCQl9CgkJcmV0dXJuICR0aGlzOwoJfQoJLyoqCgkgKiBFbnRlciBkZXNjcmlwdGlvbiBoZXJlLi4uCgkgKgoJICogQHJldHVybiBwaHBRdWVyeU9iamVjdHxRdWVyeVRlbXBsYXRlc1NvdXJjZXxRdWVyeVRlbXBsYXRlc1BhcnNlfFF1ZXJ5VGVtcGxhdGVzU291cmNlUXVlcnkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHRvZ2dsZUNsYXNzKCRjbGFzc05hbWUpIHsKCQlmb3JlYWNoKCR0aGlzLT5zdGFjaygxKSBhcyAkbm9kZSkgewoJCQlpZiAoICR0aGlzLT5pcyggJG5vZGUsICcuJy4kY2xhc3NOYW1lICkpCgkJCQkkdGhpcy0+cmVtb3ZlQ2xhc3MoJGNsYXNzTmFtZSk7CgkJCWVsc2UKCQkJCSR0aGlzLT5hZGRDbGFzcygkY2xhc3NOYW1lKTsKCQl9CgkJcmV0dXJuICR0aGlzOwoJfQoJLyoqCgkgKiBQcm9wZXIgbmFtZSB3aXRob3V0IHVuZGVyc2NvcmUgKGp1c3QgLT5lbXB0eSgpKSBhbHNvIHdvcmtzLgoJICoKCSAqIFJlbW92ZXMgYWxsIGNoaWxkIG5vZGVzIGZyb20gdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLgoJICoKCSAqIEV4YW1wbGU6CgkgKiBwcSgicCIpLl9lbXB0eSgpCgkgKgoJICogSFRNTDoKCSAqIDxwPkhlbGxvLCA8c3Bhbj5QZXJzb248L3NwYW4+IDxhIGhyZWY9IiMiPmFuZCBwZXJzb248L2E+PC9wPgoJICoKCSAqIFJlc3VsdDoKCSAqIFsgPHA+PC9wPiBdCgkgKgoJICogQHJldHVybiBwaHBRdWVyeU9iamVjdHxRdWVyeVRlbXBsYXRlc1NvdXJjZXxRdWVyeVRlbXBsYXRlc1BhcnNlfFF1ZXJ5VGVtcGxhdGVzU291cmNlUXVlcnkKCSAqIEBhY2Nlc3MgcHJpdmF0ZQoJICovCglwdWJsaWMgZnVuY3Rpb24gX2VtcHR5KCkgewoJCWZvcmVhY2goJHRoaXMtPnN0YWNrKDEpIGFzICRub2RlKSB7CgkJCS8vIHRoeCB0byAnZGF2ZSBhdCBkZ3ggZG90IGN6JwoJCQkkbm9kZS0+bm9kZVZhbHVlID0gJyc7CgkJfQoJCXJldHVybiAkdGhpczsKCX0KCS8qKgoJICogRW50ZXIgZGVzY3JpcHRpb24gaGVyZS4uLgoJICoKCSAqIEBwYXJhbSBhcnJheXxzdHJpbmcgJGNhbGxiYWNrIEV4cGVjdHMgJG5vZGUgYXMgZmlyc3QgcGFyYW0sICRpbmRleCBhcyBzZWNvbmQKCSAqIEBwYXJhbSBhcnJheSAkc2NvcGUgRXh0ZXJuYWwgdmFyaWFibGVzIHBhc3NlZCB0byBjYWxsYmFjay4gVXNlIGNvbXBhY3QoJ3Zhck5hbWUxJywgJ3Zhck5hbWUyJy4uLikgYW5kIGV4dHJhY3QoJHNjb3BlKQoJICogQHBhcmFtIGFycmF5ICRhcmcxIFdpbGwgYmEgcGFzc2VkIGFzIHRoaXJkIGFuZCBmdXRoZXIgYXJncyB0byBjYWxsYmFjay4KCSAqIEBwYXJhbSBhcnJheSAkYXJnMiBXaWxsIGJhIHBhc3NlZCBhcyBmb3VydGggYW5kIGZ1dGhlciBhcmdzIHRvIGNhbGxiYWNrLCBhbmQgc28gb24uLi4KCSAqIEByZXR1cm4gcGhwUXVlcnlPYmplY3R8UXVlcnlUZW1wbGF0ZXNTb3VyY2V8UXVlcnlUZW1wbGF0ZXNQYXJzZXxRdWVyeVRlbXBsYXRlc1NvdXJjZVF1ZXJ5CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBlYWNoKCRjYWxsYmFjaywgJHBhcmFtMSA9IG51bGwsICRwYXJhbTIgPSBudWxsLCAkcGFyYW0zID0gbnVsbCkgewoJCSRwYXJhbVN0cnVjdHVyZSA9IG51bGw7CgkJaWYgKGZ1bmNfbnVtX2FyZ3MoKSA+IDEpIHsKCQkJJHBhcmFtU3RydWN0dXJlID0gZnVuY19nZXRfYXJncygpOwoJCQkkcGFyYW1TdHJ1Y3R1cmUgPSBhcnJheV9zbGljZSgkcGFyYW1TdHJ1Y3R1cmUsIDEpOwoJCX0KCQlmb3JlYWNoKCR0aGlzLT5lbGVtZW50cyBhcyAkdikKCQkJcGhwUXVlcnk6OmNhbGxiYWNrUnVuKCRjYWxsYmFjaywgYXJyYXkoJHYpLCAkcGFyYW1TdHJ1Y3R1cmUpOwoJCXJldHVybiAkdGhpczsKCX0KCS8qKgoJICogUnVuIGNhbGxiYWNrIG9uIGFjdHVhbCBvYmplY3QuCgkgKgoJICogQHJldHVybiBwaHBRdWVyeU9iamVjdHxRdWVyeVRlbXBsYXRlc1NvdXJjZXxRdWVyeVRlbXBsYXRlc1BhcnNlfFF1ZXJ5VGVtcGxhdGVzU291cmNlUXVlcnkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGNhbGxiYWNrKCRjYWxsYmFjaywgJHBhcmFtMSA9IG51bGwsICRwYXJhbTIgPSBudWxsLCAkcGFyYW0zID0gbnVsbCkgewoJCSRwYXJhbXMgPSBmdW5jX2dldF9hcmdzKCk7CgkJJHBhcmFtc1swXSA9ICR0aGlzOwoJCXBocFF1ZXJ5OjpjYWxsYmFja1J1bigkY2FsbGJhY2ssICRwYXJhbXMpOwoJCXJldHVybiAkdGhpczsKCX0KCS8qKgoJICogRW50ZXIgZGVzY3JpcHRpb24gaGVyZS4uLgoJICoKCSAqIEByZXR1cm4gcGhwUXVlcnlPYmplY3R8UXVlcnlUZW1wbGF0ZXNTb3VyY2V8UXVlcnlUZW1wbGF0ZXNQYXJzZXxRdWVyeVRlbXBsYXRlc1NvdXJjZVF1ZXJ5CgkgKiBAdG9kbyBhZGQgJHNjb3BlIGFuZCAkYXJncyBhcyBpbiBlYWNoKCkgPz8/CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBtYXAoJGNhbGxiYWNrLCAkcGFyYW0xID0gbnVsbCwgJHBhcmFtMiA9IG51bGwsICRwYXJhbTMgPSBudWxsKSB7Ci8vCQkkc3RhY2sgPSBhcnJheSgpOwovLy8vCQlmb3JlYWNoKCR0aGlzLT5uZXdJbnN0YW5jZSgpIGFzICRub2RlKSB7Ci8vCQlmb3JlYWNoKCR0aGlzLT5uZXdJbnN0YW5jZSgpIGFzICRub2RlKSB7Ci8vCQkJJHJlc3VsdCA9IGNhbGxfdXNlcl9mdW5jKCRjYWxsYmFjaywgJG5vZGUpOwovLwkJCWlmICgkcmVzdWx0KQovLwkJCQkkc3RhY2tbXSA9ICRyZXN1bHQ7Ci8vCQl9CgkJJHBhcmFtcyA9IGZ1bmNfZ2V0X2FyZ3MoKTsKCQlhcnJheV91bnNoaWZ0KCRwYXJhbXMsICR0aGlzLT5lbGVtZW50cyk7CgkJcmV0dXJuICR0aGlzLT5uZXdJbnN0YW5jZSgKCQkJY2FsbF91c2VyX2Z1bmNfYXJyYXkoYXJyYXkoJ3BocFF1ZXJ5JywgJ21hcCcpLCAkcGFyYW1zKQovLwkJCXBocFF1ZXJ5OjptYXAoJHRoaXMtPmVsZW1lbnRzLCAkY2FsbGJhY2spCgkJKTsKCX0KCS8qKgoJICogRW50ZXIgZGVzY3JpcHRpb24gaGVyZS4uLgoJICoKCSAqIEBwYXJhbSA8dHlwZT4gJGtleQoJICogQHBhcmFtIDx0eXBlPiAkdmFsdWUKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGRhdGEoJGtleSwgJHZhbHVlID0gbnVsbCkgewoJCWlmICghIGlzc2V0KCR2YWx1ZSkpIHsKCQkJLy8gVE9ETz8gaW1wbGVtZW50IHNwZWNpZmljIGpRdWVyeSBiZWhhdmlvciBvZCByZXR1cm5pbmcgcGFyZW50IHZhbHVlcwoJCQkvLyBpcyBjaGlsZCB3aGljaCB3ZSBsb29rIHVwIGRvZXNuJ3QgZXhpc3QKCQkJcmV0dXJuIHBocFF1ZXJ5OjpkYXRhKCR0aGlzLT5nZXQoMCksICRrZXksICR2YWx1ZSwgJHRoaXMtPmdldERvY3VtZW50SUQoKSk7CgkJfSBlbHNlIHsKCQkJZm9yZWFjaCgkdGhpcyBhcyAkbm9kZSkKCQkJCXBocFF1ZXJ5OjpkYXRhKCRub2RlLCAka2V5LCAkdmFsdWUsICR0aGlzLT5nZXREb2N1bWVudElEKCkpOwoJCQlyZXR1cm4gJHRoaXM7CgkJfQoJfQoJLyoqCgkgKiBFbnRlciBkZXNjcmlwdGlvbiBoZXJlLi4uCgkgKgoJICogQHBhcmFtIDx0eXBlPiAka2V5CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiByZW1vdmVEYXRhKCRrZXkpIHsKCQlmb3JlYWNoKCR0aGlzIGFzICRub2RlKQoJCQlwaHBRdWVyeTo6cmVtb3ZlRGF0YSgkbm9kZSwgJGtleSwgJHRoaXMtPmdldERvY3VtZW50SUQoKSk7CgkJcmV0dXJuICR0aGlzOwoJfQoJLy8gSU5URVJGQUNFIElNUExFTUVOVEFUSU9OUwoKCS8vIElURVJBVE9SIElOVEVSRkFDRQoJLyoqCiAgICogQGFjY2VzcyBwcml2YXRlCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiByZXdpbmQoKXsKCQkkdGhpcy0+ZGVidWcoJ2l0ZXJhdGluZyBmb3JlYWNoJyk7Ci8vCQlwaHBRdWVyeTo6c2VsZWN0RG9jdW1lbnQoJHRoaXMtPmdldERvY3VtZW50SUQoKSk7CgkJJHRoaXMtPmVsZW1lbnRzQmFja3VwID0gJHRoaXMtPmVsZW1lbnRzOwoJCSR0aGlzLT5lbGVtZW50c0ludGVyYXRvciA9ICR0aGlzLT5lbGVtZW50czsKCQkkdGhpcy0+dmFsaWQgPSBpc3NldCggJHRoaXMtPmVsZW1lbnRzWzBdICkKCQkJPyAxIDogMDsKLy8gCQkkdGhpcy0+ZWxlbWVudHMgPSAkdGhpcy0+dmFsaWQKLy8gCQkJPyBhcnJheSgkdGhpcy0+ZWxlbWVudHNbMF0pCi8vIAkJCTogYXJyYXkoKTsKCQkkdGhpcy0+Y3VycmVudCA9IDA7Cgl9CgkvKioKICAgKiBAYWNjZXNzIHByaXZhdGUKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGN1cnJlbnQoKXsKCQlyZXR1cm4gJHRoaXMtPmVsZW1lbnRzSW50ZXJhdG9yWyAkdGhpcy0+Y3VycmVudCBdOwoJfQoJLyoqCiAgICogQGFjY2VzcyBwcml2YXRlCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBrZXkoKXsKCQlyZXR1cm4gJHRoaXMtPmN1cnJlbnQ7Cgl9CgkvKioKCSAqIERvdWJsZS1mdW5jdGlvbiBtZXRob2QuCgkgKgoJICogRmlyc3Q6IG1haW4gaXRlcmF0b3IgaW50ZXJmYWNlIG1ldGhvZC4KCSAqIFNlY29uZDogUmV0dXJuaW5nIG5leHQgc2libGluZywgYWxpYXMgZm9yIF9uZXh0KCkuCgkgKgoJICogUHJvcGVyIGZ1bmN0aW9uYWxpdHkgaXMgY2hvb3NlZCBhdXRvbWFnaWNhbHkuCgkgKgoJICogQHNlZSBwaHBRdWVyeU9iamVjdDo6X25leHQoKQoJICogQHJldHVybiBwaHBRdWVyeU9iamVjdHxRdWVyeVRlbXBsYXRlc1NvdXJjZXxRdWVyeVRlbXBsYXRlc1BhcnNlfFF1ZXJ5VGVtcGxhdGVzU291cmNlUXVlcnkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIG5leHQoJGNzc1NlbGVjdG9yID0gbnVsbCl7Ci8vCQlpZiAoJGNzc1NlbGVjdG9yIHx8ICR0aGlzLT52YWxpZCkKLy8JCQlyZXR1cm4gJHRoaXMtPl9uZXh0KCRjc3NTZWxlY3Rvcik7CgkJJHRoaXMtPnZhbGlkID0gaXNzZXQoICR0aGlzLT5lbGVtZW50c0ludGVyYXRvclsgJHRoaXMtPmN1cnJlbnQrMSBdICkKCQkJPyB0cnVlCgkJCTogZmFsc2U7CgkJaWYgKCEgJHRoaXMtPnZhbGlkICYmICR0aGlzLT5lbGVtZW50c0ludGVyYXRvcikgewoJCQkkdGhpcy0+ZWxlbWVudHNJbnRlcmF0b3IgPSBudWxsOwoJCX0gZWxzZSBpZiAoJHRoaXMtPnZhbGlkKSB7CgkJCSR0aGlzLT5jdXJyZW50Kys7CgkJfSBlbHNlIHsKCQkJcmV0dXJuICR0aGlzLT5fbmV4dCgkY3NzU2VsZWN0b3IpOwoJCX0KCX0KCS8qKgogICAqIEBhY2Nlc3MgcHJpdmF0ZQoJICovCglwdWJsaWMgZnVuY3Rpb24gdmFsaWQoKXsKCQlyZXR1cm4gJHRoaXMtPnZhbGlkOwoJfQoJLy8gSVRFUkFUT1IgSU5URVJGQUNFIEVORAoJLy8gQVJSQVlBQ0NFU1MgSU5URVJGQUNFCgkvKioKICAgKiBAYWNjZXNzIHByaXZhdGUKCSAqLwoJcHVibGljIGZ1bmN0aW9uIG9mZnNldEV4aXN0cygkb2Zmc2V0KSB7CgkJcmV0dXJuICR0aGlzLT5maW5kKCRvZmZzZXQpLT5zaXplKCkgPiAwOwoJfQoJLyoqCiAgICogQGFjY2VzcyBwcml2YXRlCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBvZmZzZXRHZXQoJG9mZnNldCkgewoJCXJldHVybiAkdGhpcy0+ZmluZCgkb2Zmc2V0KTsKCX0KCS8qKgogICAqIEBhY2Nlc3MgcHJpdmF0ZQoJICovCglwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0U2V0KCRvZmZzZXQsICR2YWx1ZSkgewovLwkJJHRoaXMtPmZpbmQoJG9mZnNldCktPnJlcGxhY2VXaXRoKCR2YWx1ZSk7CgkJJHRoaXMtPmZpbmQoJG9mZnNldCktPmh0bWwoJHZhbHVlKTsKCX0KCS8qKgogICAqIEBhY2Nlc3MgcHJpdmF0ZQoJICovCglwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0VW5zZXQoJG9mZnNldCkgewoJCS8vIGVtcHR5CgkJdGhyb3cgbmV3IEV4Y2VwdGlvbigiQ2FuJ3QgZG8gdW5zZXQsIHVzZSBhcnJheSBpbnRlcmZhY2Ugb25seSBmb3IgY2FsbGluZyBxdWVyaWVzIGFuZCByZXBsYWNpbmcgSFRNTC4iKTsKCX0KCS8vIEFSUkFZQUNDRVNTIElOVEVSRkFDRSBFTkQKCS8qKgoJICogUmV0dXJucyBub2RlJ3MgWFBhdGguCgkgKgoJICogQHBhcmFtIHVua25vd25fdHlwZSAkb25lTm9kZQoJICogQHJldHVybiBzdHJpbmcKCSAqIEBUT0RPIHVzZSBuYXRpdmUgZ2V0Tm9kZVBhdGggaXMgYXZhaWJsZQoJICogQGFjY2VzcyBwcml2YXRlCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXROb2RlWHBhdGgoJG9uZU5vZGUgPSBudWxsLCAkbmFtZXNwYWNlID0gbnVsbCkgewoJCSRyZXR1cm4gPSBhcnJheSgpOwoJCSRsb29wID0gJG9uZU5vZGUKCQkJPyBhcnJheSgkb25lTm9kZSkKCQkJOiAkdGhpcy0+ZWxlbWVudHM7Ci8vCQlpZiAoJG5hbWVzcGFjZSkKLy8JCQkkbmFtZXNwYWNlIC49ICc6JzsKCQlmb3JlYWNoKCRsb29wIGFzICRub2RlKSB7CgkJCWlmICgkbm9kZSBpbnN0YW5jZW9mIERPTURPQ1VNRU5UKSB7CgkJCQkkcmV0dXJuW10gPSAnJzsKCQkJCWNvbnRpbnVlOwoJCQl9CgkJCSR4cGF0aCA9IGFycmF5KCk7CgkJCXdoaWxlKCEgKCRub2RlIGluc3RhbmNlb2YgRE9NRE9DVU1FTlQpKSB7CgkJCQkkaSA9IDE7CgkJCQkkc2libGluZyA9ICRub2RlOwoJCQkJd2hpbGUoJHNpYmxpbmctPnByZXZpb3VzU2libGluZykgewoJCQkJCSRzaWJsaW5nID0gJHNpYmxpbmctPnByZXZpb3VzU2libGluZzsKCQkJCQkkaXNFbGVtZW50ID0gJHNpYmxpbmcgaW5zdGFuY2VvZiBET01FTEVNRU5UOwoJCQkJCWlmICgkaXNFbGVtZW50ICYmICRzaWJsaW5nLT50YWdOYW1lID09ICRub2RlLT50YWdOYW1lKQoJCQkJCQkkaSsrOwoJCQkJfQoJCQkJJHhwYXRoW10gPSAkdGhpcy0+aXNYTUwoKQoJCQkJCT8gIipbbG9jYWwtbmFtZSgpPSd7JG5vZGUtPnRhZ05hbWV9J11beyRpfV0iCgkJCQkJOiAieyRub2RlLT50YWdOYW1lfVt7JGl9XSI7CgkJCQkkbm9kZSA9ICRub2RlLT5wYXJlbnROb2RlOwoJCQl9CgkJCSR4cGF0aCA9IGltcGxvZGUoJy8nLCBhcnJheV9yZXZlcnNlKCR4cGF0aCkpOwoJCQkkcmV0dXJuW10gPSAnLycuJHhwYXRoOwoJCX0KCQlyZXR1cm4gJG9uZU5vZGUKCQkJPyAkcmV0dXJuWzBdCgkJCTogJHJldHVybjsKCX0KCS8vIEhFTFBFUlMKCXB1YmxpYyBmdW5jdGlvbiB3aG9pcygkb25lTm9kZSA9IG51bGwpIHsKCQkkcmV0dXJuID0gYXJyYXkoKTsKCQkkbG9vcCA9ICRvbmVOb2RlCgkJCT8gYXJyYXkoICRvbmVOb2RlICkKCQkJOiAkdGhpcy0+ZWxlbWVudHM7CgkJZm9yZWFjaCgkbG9vcCBhcyAkbm9kZSkgewoJCQlpZiAoaXNzZXQoJG5vZGUtPnRhZ05hbWUpKSB7CgkJCQkkdGFnID0gaW5fYXJyYXkoJG5vZGUtPnRhZ05hbWUsIGFycmF5KCdwaHAnLCAnanMnKSkKCQkJCQk/IHN0cnRvdXBwZXIoJG5vZGUtPnRhZ05hbWUpCgkJCQkJOiAkbm9kZS0+dGFnTmFtZTsKCQkJCSRyZXR1cm5bXSA9ICR0YWcKCQkJCQkuKCRub2RlLT5nZXRBdHRyaWJ1dGUoJ2lkJykKCQkJCQkJPyAnIycuJG5vZGUtPmdldEF0dHJpYnV0ZSgnaWQnKTonJykKCQkJCQkuKCRub2RlLT5nZXRBdHRyaWJ1dGUoJ2NsYXNzJykKCQkJCQkJPyAnLicuaW1wbG9kZSgnLicsIGV4cGxvZGUoJyAnLCAkbm9kZS0+Z2V0QXR0cmlidXRlKCdjbGFzcycpKSk6JycpCgkJCQkJLigkbm9kZS0+Z2V0QXR0cmlidXRlKCduYW1lJykKCQkJCQkJPyAnW25hbWU9IicuJG5vZGUtPmdldEF0dHJpYnV0ZSgnbmFtZScpLiciXSc6JycpCgkJCQkJLigkbm9kZS0+Z2V0QXR0cmlidXRlKCd2YWx1ZScpICYmIHN0cnBvcygkbm9kZS0+Z2V0QXR0cmlidXRlKCd2YWx1ZScpLCAnPCcuJz9waHAnKSA9PT0gZmFsc2UKCQkJCQkJPyAnW3ZhbHVlPSInLnN1YnN0cihzdHJfcmVwbGFjZSgiXG4iLCAnJywgJG5vZGUtPmdldEF0dHJpYnV0ZSgndmFsdWUnKSksIDAsIDE1KS4nIl0nOicnKQoJCQkJCS4oJG5vZGUtPmdldEF0dHJpYnV0ZSgndmFsdWUnKSAmJiBzdHJwb3MoJG5vZGUtPmdldEF0dHJpYnV0ZSgndmFsdWUnKSwgJzwnLic/cGhwJykgIT09IGZhbHNlCgkJCQkJCT8gJ1t2YWx1ZT1QSFBdJzonJykKCQkJCQkuKCRub2RlLT5nZXRBdHRyaWJ1dGUoJ3NlbGVjdGVkJykKCQkJCQkJPyAnW3NlbGVjdGVkXSc6JycpCgkJCQkJLigkbm9kZS0+Z2V0QXR0cmlidXRlKCdjaGVja2VkJykKCQkJCQkJPyAnW2NoZWNrZWRdJzonJykKCQkJCTsKCQkJfSBlbHNlIGlmICgkbm9kZSBpbnN0YW5jZW9mIERPTVRFWFQpIHsKCQkJCWlmICh0cmltKCRub2RlLT50ZXh0Q29udGVudCkpCgkJCQkJJHJldHVybltdID0gJ1RleHQ6Jy5zdWJzdHIoc3RyX3JlcGxhY2UoIlxuIiwgJyAnLCAkbm9kZS0+dGV4dENvbnRlbnQpLCAwLCAxNSk7CgkJCX0gZWxzZSB7CgoJCQl9CgkJfQoJCXJldHVybiAkb25lTm9kZSAmJiBpc3NldCgkcmV0dXJuWzBdKQoJCQk/ICRyZXR1cm5bMF0KCQkJOiAkcmV0dXJuOwoJfQoJLyoqCgkgKiBEdW1wIGh0bWxPdXRlciBhbmQgcHJlc2VydmUgY2hhaW4uIFVzZWZ1bGwgZm9yIGRlYnVnZ2luZy4KCSAqCgkgKiBAcmV0dXJuIHBocFF1ZXJ5T2JqZWN0fFF1ZXJ5VGVtcGxhdGVzU291cmNlfFF1ZXJ5VGVtcGxhdGVzUGFyc2V8UXVlcnlUZW1wbGF0ZXNTb3VyY2VRdWVyeQoJICoKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGR1bXAoKSB7CgkJcHJpbnQgJ0RVTVAgIycuKHBocFF1ZXJ5OjokZHVtcENvdW50KyspLicgJzsKCQkkZGVidWcgPSBwaHBRdWVyeTo6JGRlYnVnOwoJCXBocFF1ZXJ5OjokZGVidWcgPSBmYWxzZTsKLy8JCXByaW50IF9fRklMRV9fLic6Jy5fX0xJTkVfXy4iXG4iOwoJCXZhcl9kdW1wKCR0aGlzLT5odG1sT3V0ZXIoKSk7CgkJcmV0dXJuICR0aGlzOwoJfQoJcHVibGljIGZ1bmN0aW9uIGR1bXBXaG9pcygpIHsKCQlwcmludCAnRFVNUCAjJy4ocGhwUXVlcnk6OiRkdW1wQ291bnQrKykuJyAnOwoJCSRkZWJ1ZyA9IHBocFF1ZXJ5OjokZGVidWc7CgkJcGhwUXVlcnk6OiRkZWJ1ZyA9IGZhbHNlOwovLwkJcHJpbnQgX19GSUxFX18uJzonLl9fTElORV9fLiJcbiI7CgkJdmFyX2R1bXAoJ3dob2lzJywgJHRoaXMtPndob2lzKCkpOwoJCXBocFF1ZXJ5OjokZGVidWcgPSAkZGVidWc7CgkJcmV0dXJuICR0aGlzOwoJfQoJcHVibGljIGZ1bmN0aW9uIGR1bXBMZW5ndGgoKSB7CgkJcHJpbnQgJ0RVTVAgIycuKHBocFF1ZXJ5OjokZHVtcENvdW50KyspLicgJzsKCQkkZGVidWcgPSBwaHBRdWVyeTo6JGRlYnVnOwoJCXBocFF1ZXJ5OjokZGVidWcgPSBmYWxzZTsKLy8JCXByaW50IF9fRklMRV9fLic6Jy5fX0xJTkVfXy4iXG4iOwoJCXZhcl9kdW1wKCdsZW5ndGgnLCAkdGhpcy0+bGVuZ3RoKCkpOwoJCXBocFF1ZXJ5OjokZGVidWcgPSAkZGVidWc7CgkJcmV0dXJuICR0aGlzOwoJfQoJcHVibGljIGZ1bmN0aW9uIGR1bXBUcmVlKCRodG1sID0gdHJ1ZSwgJHRpdGxlID0gdHJ1ZSkgewoJCSRvdXRwdXQgPSAkdGl0bGUKCQkJPyAnRFVNUCAjJy4ocGhwUXVlcnk6OiRkdW1wQ291bnQrKykuIiBcbiIgOiAnJzsKCQkkZGVidWcgPSBwaHBRdWVyeTo6JGRlYnVnOwoJCXBocFF1ZXJ5OjokZGVidWcgPSBmYWxzZTsKCQlmb3JlYWNoKCR0aGlzLT5zdGFjaygpIGFzICRub2RlKQoJCQkkb3V0cHV0IC49ICR0aGlzLT5fX2R1bXBUcmVlKCRub2RlKTsKCQlwaHBRdWVyeTo6JGRlYnVnID0gJGRlYnVnOwoJCXByaW50ICRodG1sCgkJCT8gbmwyYnIoc3RyX3JlcGxhY2UoJyAnLCAnJm5ic3A7JywgJG91dHB1dCkpCgkJCTogJG91dHB1dDsKCQlyZXR1cm4gJHRoaXM7Cgl9Cglwcml2YXRlIGZ1bmN0aW9uIF9fZHVtcFRyZWUoJG5vZGUsICRpbnRlbmQgPSAwKSB7CgkJJHdob2lzID0gJHRoaXMtPndob2lzKCRub2RlKTsKCQkkcmV0dXJuID0gJyc7CgkJaWYgKCR3aG9pcykKCQkJJHJldHVybiAuPSBzdHJfcmVwZWF0KCcgLSAnLCAkaW50ZW5kKS4kd2hvaXMuIlxuIjsKCQlpZiAoaXNzZXQoJG5vZGUtPmNoaWxkTm9kZXMpKQoJCQlmb3JlYWNoKCRub2RlLT5jaGlsZE5vZGVzIGFzICRjaE5vZGUpCgkJCQkkcmV0dXJuIC49ICR0aGlzLT5fX2R1bXBUcmVlKCRjaE5vZGUsICRpbnRlbmQrMSk7CgkJcmV0dXJuICRyZXR1cm47Cgl9CgkvKioKCSAqIER1bXAgaHRtbE91dGVyIGFuZCBzdG9wIHNjcmlwdCBleGVjdXRpb24uIFVzZWZ1bGwgZm9yIGRlYnVnZ2luZy4KCSAqCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBkdW1wRGllKCkgewoJCXByaW50IF9fRklMRV9fLic6Jy5fX0xJTkVfXzsKCQl2YXJfZHVtcCgkdGhpcy0+aHRtbE91dGVyKCkpOwoJCWRpZSgpOwoJfQp9CgoKLy8gLS0gTXVsdGlieXRlIENvbXBhdGliaWxpdHkgZnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBodHRwOi8vc3ZuLmlwaG9uZXdlYmRldi5jb20vbGFjZS9saWIvbWJfY29tcGF0LnBocAoKLyoqCiAqICBtYl9pbnRlcm5hbF9lbmNvZGluZygpCiAqCiAqICBJbmNsdWRlZCBmb3IgbWJzdHJpbmcgcHNldWRvLWNvbXBhdGFiaWxpdHkuCiAqLwppZiAoIWZ1bmN0aW9uX2V4aXN0cygnbWJfaW50ZXJuYWxfZW5jb2RpbmcnKSkKewoJZnVuY3Rpb24gbWJfaW50ZXJuYWxfZW5jb2RpbmcoJGVuYykge3JldHVybiB0cnVlOyB9Cn0KCi8qKgogKiAgbWJfcmVnZXhfZW5jb2RpbmcoKQogKgogKiAgSW5jbHVkZWQgZm9yIG1ic3RyaW5nIHBzZXVkby1jb21wYXRhYmlsaXR5LgogKi8KaWYgKCFmdW5jdGlvbl9leGlzdHMoJ21iX3JlZ2V4X2VuY29kaW5nJykpCnsKCWZ1bmN0aW9uIG1iX3JlZ2V4X2VuY29kaW5nKCRlbmMpIHtyZXR1cm4gdHJ1ZTsgfQp9CgovKioKICogIG1iX3N0cmxlbigpCiAqCiAqICBJbmNsdWRlZCBmb3IgbWJzdHJpbmcgcHNldWRvLWNvbXBhdGFiaWxpdHkuCiAqLwppZiAoIWZ1bmN0aW9uX2V4aXN0cygnbWJfc3RybGVuJykpCnsKCWZ1bmN0aW9uIG1iX3N0cmxlbigkc3RyKQoJewoJCXJldHVybiBzdHJsZW4oJHN0cik7Cgl9Cn0KCi8qKgogKiAgbWJfc3RycG9zKCkKICoKICogIEluY2x1ZGVkIGZvciBtYnN0cmluZyBwc2V1ZG8tY29tcGF0YWJpbGl0eS4KICovCmlmICghZnVuY3Rpb25fZXhpc3RzKCdtYl9zdHJwb3MnKSkKewoJZnVuY3Rpb24gbWJfc3RycG9zKCRoYXlzdGFjaywgJG5lZWRsZSwgJG9mZnNldD0wKQoJewoJCXJldHVybiBzdHJwb3MoJGhheXN0YWNrLCAkbmVlZGxlLCAkb2Zmc2V0KTsKCX0KfQovKioKICogIG1iX3N0cmlwb3MoKQogKgogKiAgSW5jbHVkZWQgZm9yIG1ic3RyaW5nIHBzZXVkby1jb21wYXRhYmlsaXR5LgogKi8KaWYgKCFmdW5jdGlvbl9leGlzdHMoJ21iX3N0cmlwb3MnKSkKewoJZnVuY3Rpb24gbWJfc3RyaXBvcygkaGF5c3RhY2ssICRuZWVkbGUsICRvZmZzZXQ9MCkKCXsKCQlyZXR1cm4gc3RyaXBvcygkaGF5c3RhY2ssICRuZWVkbGUsICRvZmZzZXQpOwoJfQp9CgovKioKICogIG1iX3N1YnN0cigpCiAqCiAqICBJbmNsdWRlZCBmb3IgbWJzdHJpbmcgcHNldWRvLWNvbXBhdGFiaWxpdHkuCiAqLwppZiAoIWZ1bmN0aW9uX2V4aXN0cygnbWJfc3Vic3RyJykpCnsKCWZ1bmN0aW9uIG1iX3N1YnN0cigkc3RyLCAkc3RhcnQsICRsZW5ndGg9MCkKCXsKCQlyZXR1cm4gc3Vic3RyKCRzdHIsICRzdGFydCwgJGxlbmd0aCk7Cgl9Cn0KCi8qKgogKiAgbWJfc3Vic3RyX2NvdW50KCkKICoKICogIEluY2x1ZGVkIGZvciBtYnN0cmluZyBwc2V1ZG8tY29tcGF0YWJpbGl0eS4KICovCmlmICghZnVuY3Rpb25fZXhpc3RzKCdtYl9zdWJzdHJfY291bnQnKSkKewoJZnVuY3Rpb24gbWJfc3Vic3RyX2NvdW50KCRoYXlzdGFjaywgJG5lZWRsZSkKCXsKCQlyZXR1cm4gc3Vic3RyX2NvdW50KCRoYXlzdGFjaywgJG5lZWRsZSk7Cgl9Cn0KCgovKioKICogU3RhdGljIG5hbWVzcGFjZSBmb3IgcGhwUXVlcnkgZnVuY3Rpb25zLgogKgogKiBAYXV0aG9yIFRvYmlhc3ogQ3VkbmlrIDx0b2JpYXN6LmN1ZG5pay9nbWFpbC5jb20+CiAqIEBwYWNrYWdlIHBocFF1ZXJ5CiAqLwphYnN0cmFjdCBjbGFzcyBwaHBRdWVyeSB7CgkvKioKCSAqIFhYWDogV29ya2Fyb3VuZCBmb3IgbWJzdHJpbmcgcHJvYmxlbXMKCSAqCgkgKiBAdmFyIGJvb2wKCSAqLwoJcHVibGljIHN0YXRpYyAkbWJzdHJpbmdTdXBwb3J0ID0gdHJ1ZTsKCXB1YmxpYyBzdGF0aWMgJGRlYnVnID0gZmFsc2U7CglwdWJsaWMgc3RhdGljICRkb2N1bWVudHMgPSBhcnJheSgpOwoJcHVibGljIHN0YXRpYyAkZGVmYXVsdERvY3VtZW50SUQgPSBudWxsOwovLwlwdWJsaWMgc3RhdGljICRkZWZhdWx0RG9jdHlwZSA9ICdodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIic7CgkvKioKCSAqIEFwcGxpZXMgb25seSB0byBIVE1MLgoJICoKCSAqIEB2YXIgdW5rbm93bl90eXBlCgkgKi8KCXB1YmxpYyBzdGF0aWMgJGRlZmF1bHREb2N0eXBlID0gJzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vVzNDLy9EVEQgSFRNTCA0LjAxIFRyYW5zaXRpb25hbC8vRU4iCiJodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNC9sb29zZS5kdGQiPic7CglwdWJsaWMgc3RhdGljICRkZWZhdWx0Q2hhcnNldCA9ICdVVEYtOCc7CgkvKioKCSAqIFN0YXRpYyBuYW1lc3BhY2UgZm9yIHBsdWdpbnMuCgkgKgoJICogQHZhciBvYmplY3QKCSAqLwoJcHVibGljIHN0YXRpYyAkcGx1Z2lucyA9IGFycmF5KCk7CgkvKioKCSAqIExpc3Qgb2YgbG9hZGVkIHBsdWdpbnMuCgkgKgoJICogQHZhciB1bmtub3duX3R5cGUKCSAqLwoJcHVibGljIHN0YXRpYyAkcGx1Z2luc0xvYWRlZCA9IGFycmF5KCk7CglwdWJsaWMgc3RhdGljICRwbHVnaW5zTWV0aG9kcyA9IGFycmF5KCk7CglwdWJsaWMgc3RhdGljICRwbHVnaW5zU3RhdGljTWV0aG9kcyA9IGFycmF5KCk7CglwdWJsaWMgc3RhdGljICRleHRlbmRNZXRob2RzID0gYXJyYXkoKTsKCS8qKgoJICogQFRPRE8gaW1wbGVtZW50CgkgKi8KCXB1YmxpYyBzdGF0aWMgJGV4dGVuZFN0YXRpY01ldGhvZHMgPSBhcnJheSgpOwoJLyoqCgkgKiBIb3N0cyBhbGxvd2VkIGZvciBBSkFYIGNvbm5lY3Rpb25zLgoJICogRG90ICcuJyBtZWFucyAkX1NFUlZFUlsnSFRUUF9IT1NUJ10gKGlmIGFueSkuCgkgKgoJICogQHZhciBhcnJheQoJICovCglwdWJsaWMgc3RhdGljICRhamF4QWxsb3dlZEhvc3RzID0gYXJyYXkoCgkJJy4nCgkpOwoJLyoqCgkgKiBBSkFYIHNldHRpbmdzLgoJICoKCSAqIEB2YXIgYXJyYXkKCSAqIFhYWCBzaG91bGQgaXQgYmUgc3RhdGljIG9yIG5vdCA/CgkgKi8KCXB1YmxpYyBzdGF0aWMgJGFqYXhTZXR0aW5ncyA9IGFycmF5KAoJCSd1cmwnID0+ICcnLC8vVE9ETwoJCSdnbG9iYWwnID0+IHRydWUsCgkJJ3R5cGUnID0+ICJHRVQiLAoJCSd0aW1lb3V0JyA9PiBudWxsLAoJCSdjb250ZW50VHlwZScgPT4gImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIsCgkJJ3Byb2Nlc3NEYXRhJyA9PiB0cnVlLAovLwkJJ2FzeW5jJyA9PiB0cnVlLAoJCSdkYXRhJyA9PiBudWxsLAoJCSd1c2VybmFtZScgPT4gbnVsbCwKCQkncGFzc3dvcmQnID0+IG51bGwsCgkJJ2FjY2VwdHMnID0+IGFycmF5KAoJCQkneG1sJyA9PiAiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbCIsCgkJCSdodG1sJyA9PiAidGV4dC9odG1sIiwKCQkJJ3NjcmlwdCcgPT4gInRleHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCIsCgkJCSdqc29uJyA9PiAiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0IiwKCQkJJ3RleHQnID0+ICJ0ZXh0L3BsYWluIiwKCQkJJ19kZWZhdWx0JyA9PiAiKi8qIgoJCSkKCSk7CglwdWJsaWMgc3RhdGljICRsYXN0TW9kaWZpZWQgPSBudWxsOwoJcHVibGljIHN0YXRpYyAkYWN0aXZlID0gMDsKCXB1YmxpYyBzdGF0aWMgJGR1bXBDb3VudCA9IDA7CgkvKioKCSAqIE11bHRpLXB1cnBvc2UgZnVuY3Rpb24uCgkgKiBVc2UgcHEoKSBhcyBzaG9ydGN1dC4KCSAqCgkgKiBJbiBiZWxvdyBleGFtcGxlcywgJHBxIGlzIGFueSByZXN1bHQgb2YgcHEoKTsgZnVuY3Rpb24uCgkgKgoJICogMS4gSW1wb3J0IG1hcmt1cCBpbnRvIGV4aXN0aW5nIGRvY3VtZW50ICh3aXRob3V0IGFueSBhdHRhY2hpbmcpOgoJICogLSBJbXBvcnQgaW50byBzZWxlY3RlZCBkb2N1bWVudDoKCSAqICAgcHEoJzxkaXYvPicpCQkJCS8vIERPRVNOVCBhY2NlcHQgdGV4dCBub2RlcyBhdCBiZWdpbm5pbmcgb2YgaW5wdXQgc3RyaW5nICEKCSAqIC0gSW1wb3J0IGludG8gZG9jdW1lbnQgd2l0aCBJRCBmcm9tICRwcS0+Z2V0RG9jdW1lbnRJRCgpOgoJICogICBwcSgnPGRpdi8+JywgJHBxLT5nZXREb2N1bWVudElEKCkpCgkgKiAtIEltcG9ydCBpbnRvIHNhbWUgZG9jdW1lbnQgYXMgRE9NTm9kZSBiZWxvbmdzIHRvOgoJICogICBwcSgnPGRpdi8+JywgRE9NTm9kZSkKCSAqIC0gSW1wb3J0IGludG8gZG9jdW1lbnQgZnJvbSBwaHBRdWVyeSBvYmplY3Q6CgkgKiAgIHBxKCc8ZGl2Lz4nLCAkcHEpCgkgKgoJICogMi4gUnVuIHF1ZXJ5OgoJICogLSBSdW4gcXVlcnkgb24gbGFzdCBzZWxlY3RlZCBkb2N1bWVudDoKCSAqICAgcHEoJ2Rpdi5teUNsYXNzJykKCSAqIC0gUnVuIHF1ZXJ5IG9uIGRvY3VtZW50IHdpdGggSUQgZnJvbSAkcHEtPmdldERvY3VtZW50SUQoKToKCSAqICAgcHEoJ2Rpdi5teUNsYXNzJywgJHBxLT5nZXREb2N1bWVudElEKCkpCgkgKiAtIFJ1biBxdWVyeSBvbiBzYW1lIGRvY3VtZW50IGFzIERPTU5vZGUgYmVsb25ncyB0byBhbmQgdXNlIG5vZGUocylhcyByb290IGZvciBxdWVyeToKCSAqICAgcHEoJ2Rpdi5teUNsYXNzJywgRE9NTm9kZSkKCSAqIC0gUnVuIHF1ZXJ5IG9uIGRvY3VtZW50IGZyb20gcGhwUXVlcnkgb2JqZWN0CgkgKiAgIGFuZCB1c2Ugb2JqZWN0J3Mgc3RhY2sgYXMgcm9vdCBub2RlKHMpIGZvciBxdWVyeToKCSAqICAgcHEoJ2Rpdi5teUNsYXNzJywgJHBxKQoJICoKCSAqIEBwYXJhbSBzdHJpbmd8RE9NTm9kZXxET01Ob2RlTGlzdHxhcnJheQkkYXJnMQlIVE1MIG1hcmt1cCwgQ1NTIFNlbGVjdG9yLCBET01Ob2RlIG9yIGFycmF5IG9mIERPTU5vZGVzCgkgKiBAcGFyYW0gc3RyaW5nfHBocFF1ZXJ5T2JqZWN0fERPTU5vZGUJJGNvbnRleHQJRE9NIElEIGZyb20gJHBxLT5nZXREb2N1bWVudElEKCksIHBocFF1ZXJ5IG9iamVjdCAoZGV0ZXJtaW5lcyBhbHNvIHF1ZXJ5IHJvb3QpIG9yIERPTU5vZGUgKGRldGVybWluZXMgYWxzbyBxdWVyeSByb290KQoJICoKCSAqIEByZXR1cm4gcGhwUXVlcnlPYmplY3R8UXVlcnlUZW1wbGF0ZXNTb3VyY2V8UXVlcnlUZW1wbGF0ZXNQYXJzZXxRdWVyeVRlbXBsYXRlc1NvdXJjZVF1ZXJ5fFF1ZXJ5VGVtcGxhdGVzUGhwUXVlcnl8ZmFsc2UKICAgKiBwaHBRdWVyeSBvYmplY3Qgb3IgZmFsc2UgaW4gY2FzZSBvZiBlcnJvci4KCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwcSgkYXJnMSwgJGNvbnRleHQgPSBudWxsKSB7CgkJaWYgKCRhcmcxIGluc3RhbmNlb2YgRE9NTk9ERSAmJiAhIGlzc2V0KCRjb250ZXh0KSkgewoJCQlmb3JlYWNoKHBocFF1ZXJ5OjokZG9jdW1lbnRzIGFzICRkb2N1bWVudFdyYXBwZXIpIHsKCQkJCSRjb21wYXJlID0gJGFyZzEgaW5zdGFuY2VvZiBET01Eb2N1bWVudAoJCQkJCT8gJGFyZzEgOiAkYXJnMS0+b3duZXJEb2N1bWVudDsKCQkJCWlmICgkZG9jdW1lbnRXcmFwcGVyLT5kb2N1bWVudC0+aXNTYW1lTm9kZSgkY29tcGFyZSkpCgkJCQkJJGNvbnRleHQgPSAkZG9jdW1lbnRXcmFwcGVyLT5pZDsKCQkJfQoJCX0KCQlpZiAoISAkY29udGV4dCkgewoJCQkkZG9tSWQgPSBzZWxmOjokZGVmYXVsdERvY3VtZW50SUQ7CgkJCWlmICghICRkb21JZCkKCQkJCXRocm93IG5ldyBFeGNlcHRpb24oIkNhbid0IHVzZSBsYXN0IGNyZWF0ZWQgRE9NLCBiZWNhdXNlIHRoZXJlIGlzbid0IGFueS4gVXNlIHBocFF1ZXJ5OjpuZXdEb2N1bWVudCgpIGZpcnN0LiIpOwovLwkJfSBlbHNlIGlmIChpc19vYmplY3QoJGNvbnRleHQpICYmICgkY29udGV4dCBpbnN0YW5jZW9mIFBIUFFVRVJZIHx8IGlzX3N1YmNsYXNzX29mKCRjb250ZXh0LCAncGhwUXVlcnlPYmplY3QnKSkpCgkJfSBlbHNlIGlmIChpc19vYmplY3QoJGNvbnRleHQpICYmICRjb250ZXh0IGluc3RhbmNlb2YgcGhwUXVlcnlPYmplY3QpCgkJCSRkb21JZCA9ICRjb250ZXh0LT5nZXREb2N1bWVudElEKCk7CgkJZWxzZSBpZiAoJGNvbnRleHQgaW5zdGFuY2VvZiBET01ET0NVTUVOVCkgewoJCQkkZG9tSWQgPSBzZWxmOjpnZXREb2N1bWVudElEKCRjb250ZXh0KTsKCQkJaWYgKCEgJGRvbUlkKSB7CgkJCQkvL3Rocm93IG5ldyBFeGNlcHRpb24oJ09ycGhhbmVkIERPTURvY3VtZW50Jyk7CgkJCQkkZG9tSWQgPSBzZWxmOjpuZXdEb2N1bWVudCgkY29udGV4dCktPmdldERvY3VtZW50SUQoKTsKCQkJfQoJCX0gZWxzZSBpZiAoJGNvbnRleHQgaW5zdGFuY2VvZiBET01OT0RFKSB7CgkJCSRkb21JZCA9IHNlbGY6OmdldERvY3VtZW50SUQoJGNvbnRleHQpOwoJCQlpZiAoISAkZG9tSWQpIHsKCQkJCXRocm93IG5ldyBFeGNlcHRpb24oJ09ycGhhbmVkIERPTU5vZGUnKTsKLy8JCQkJJGRvbUlkID0gc2VsZjo6bmV3RG9jdW1lbnQoJGNvbnRleHQtPm93bmVyRG9jdW1lbnQpOwoJCQl9CgkJfSBlbHNlCgkJCSRkb21JZCA9ICRjb250ZXh0OwoJCWlmICgkYXJnMSBpbnN0YW5jZW9mIHBocFF1ZXJ5T2JqZWN0KSB7Ci8vCQlpZiAoaXNfb2JqZWN0KCRhcmcxKSAmJiAoZ2V0X2NsYXNzKCRhcmcxKSA9PSAncGhwUXVlcnlPYmplY3QnIHx8ICRhcmcxIGluc3RhbmNlb2YgUEhQUVVFUlkgfHwgaXNfc3ViY2xhc3Nfb2YoJGFyZzEsICdwaHBRdWVyeU9iamVjdCcpKSkgewoJCQkvKioKCQkJICogUmV0dXJuICRhcmcxIG9yIGltcG9ydCAkYXJnMSBzdGFjayBpZiBkb2N1bWVudCBkaWZmZXJzOgoJCQkgKiBwcShwcSgnPGRpdi8+JykpCgkJCSAqLwoJCQlpZiAoJGFyZzEtPmdldERvY3VtZW50SUQoKSA9PSAkZG9tSWQpCgkJCQlyZXR1cm4gJGFyZzE7CgkJCSRjbGFzcyA9IGdldF9jbGFzcygkYXJnMSk7CgkJCS8vIHN1cHBvcnQgaW5oZXJpdGFuY2UgYnkgcGFzc2luZyBvbGQgb2JqZWN0IHRvIG92ZXJsb2FkZWQgY29uc3RydWN0b3IKCQkJJHBocFF1ZXJ5ID0gJGNsYXNzICE9ICdwaHBRdWVyeScKCQkJCT8gbmV3ICRjbGFzcygkYXJnMSwgJGRvbUlkKQoJCQkJOiBuZXcgcGhwUXVlcnlPYmplY3QoJGRvbUlkKTsKCQkJJHBocFF1ZXJ5LT5lbGVtZW50cyA9IGFycmF5KCk7CgkJCWZvcmVhY2goJGFyZzEtPmVsZW1lbnRzIGFzICRub2RlKQoJCQkJJHBocFF1ZXJ5LT5lbGVtZW50c1tdID0gJHBocFF1ZXJ5LT5kb2N1bWVudC0+aW1wb3J0Tm9kZSgkbm9kZSwgdHJ1ZSk7CgkJCXJldHVybiAkcGhwUXVlcnk7CgkJfSBlbHNlIGlmICgkYXJnMSBpbnN0YW5jZW9mIERPTU5PREUgfHwgKGlzX2FycmF5KCRhcmcxKSAmJiBpc3NldCgkYXJnMVswXSkgJiYgJGFyZzFbMF0gaW5zdGFuY2VvZiBET01OT0RFKSkgewoJCQkvKgoJCQkgKiBXcmFwIERPTSBub2RlcyB3aXRoIHBocFF1ZXJ5IG9iamVjdCwgaW1wb3J0IGludG8gZG9jdW1lbnQgd2hlbiBuZWVkZWQ6CgkJCSAqIHBxKGFycmF5KCRkb21Ob2RlMSwgJGRvbU5vZGUyKSkKCQkJICovCgkJCSRwaHBRdWVyeSA9IG5ldyBwaHBRdWVyeU9iamVjdCgkZG9tSWQpOwoJCQlpZiAoISgkYXJnMSBpbnN0YW5jZW9mIERPTU5PREVMSVNUKSAmJiAhIGlzX2FycmF5KCRhcmcxKSkKCQkJCSRhcmcxID0gYXJyYXkoJGFyZzEpOwoJCQkkcGhwUXVlcnktPmVsZW1lbnRzID0gYXJyYXkoKTsKCQkJZm9yZWFjaCgkYXJnMSBhcyAkbm9kZSkgewoJCQkJJHNhbWVEb2N1bWVudCA9ICRub2RlLT5vd25lckRvY3VtZW50IGluc3RhbmNlb2YgRE9NRE9DVU1FTlQKCQkJCQkmJiAhICRub2RlLT5vd25lckRvY3VtZW50LT5pc1NhbWVOb2RlKCRwaHBRdWVyeS0+ZG9jdW1lbnQpOwoJCQkJJHBocFF1ZXJ5LT5lbGVtZW50c1tdID0gJHNhbWVEb2N1bWVudAoJCQkJCT8gJHBocFF1ZXJ5LT5kb2N1bWVudC0+aW1wb3J0Tm9kZSgkbm9kZSwgdHJ1ZSkKCQkJCQk6ICRub2RlOwoJCQl9CgkJCXJldHVybiAkcGhwUXVlcnk7CgkJfSBlbHNlIGlmIChzZWxmOjppc01hcmt1cCgkYXJnMSkpIHsKCQkJLyoqCgkJCSAqIEltcG9ydCBIVE1MOgoJCQkgKiBwcSgnPGRpdi8+JykKCQkJICovCgkJCSRwaHBRdWVyeSA9IG5ldyBwaHBRdWVyeU9iamVjdCgkZG9tSWQpOwoJCQlyZXR1cm4gJHBocFF1ZXJ5LT5uZXdJbnN0YW5jZSgKCQkJCSRwaHBRdWVyeS0+ZG9jdW1lbnRXcmFwcGVyLT5pbXBvcnQoJGFyZzEpCgkJCSk7CgkJfSBlbHNlIHsKCQkJLyoqCgkJCSAqIFJ1biBDU1MgcXVlcnk6CgkJCSAqIHBxKCdkaXYubXlDbGFzcycpCgkJCSAqLwoJCQkkcGhwUXVlcnkgPSBuZXcgcGhwUXVlcnlPYmplY3QoJGRvbUlkKTsKLy8JCQlpZiAoJGNvbnRleHQgJiYgKCRjb250ZXh0IGluc3RhbmNlb2YgUEhQUVVFUlkgfHwgaXNfc3ViY2xhc3Nfb2YoJGNvbnRleHQsICdwaHBRdWVyeU9iamVjdCcpKSkKCQkJaWYgKCRjb250ZXh0ICYmICRjb250ZXh0IGluc3RhbmNlb2YgcGhwUXVlcnlPYmplY3QpCgkJCQkkcGhwUXVlcnktPmVsZW1lbnRzID0gJGNvbnRleHQtPmVsZW1lbnRzOwoJCQllbHNlIGlmICgkY29udGV4dCAmJiAkY29udGV4dCBpbnN0YW5jZW9mIERPTU5PREVMSVNUKSB7CgkJCQkkcGhwUXVlcnktPmVsZW1lbnRzID0gYXJyYXkoKTsKCQkJCWZvcmVhY2goJGNvbnRleHQgYXMgJG5vZGUpCgkJCQkJJHBocFF1ZXJ5LT5lbGVtZW50c1tdID0gJG5vZGU7CgkJCX0gZWxzZSBpZiAoJGNvbnRleHQgJiYgJGNvbnRleHQgaW5zdGFuY2VvZiBET01OT0RFKQoJCQkJJHBocFF1ZXJ5LT5lbGVtZW50cyA9IGFycmF5KCRjb250ZXh0KTsKCQkJcmV0dXJuICRwaHBRdWVyeS0+ZmluZCgkYXJnMSk7CgkJfQoJfQoJLyoqCgkgKiBTZXRzIGRlZmF1bHQgZG9jdW1lbnQgdG8gJGlkLiBEb2N1bWVudCBoYXMgdG8gYmUgbG9hZGVkIHByaW9yCgkgKiB0byB1c2luZyB0aGlzIG1ldGhvZC4KCSAqICRpZCBjYW4gYmUgcmV0cml2ZWQgdmlhIGdldERvY3VtZW50SUQoKSBvciBnZXREb2N1bWVudElEUmVmKCkuCgkgKgoJICogQHBhcmFtIHVua25vd25fdHlwZSAkaWQKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzZWxlY3REb2N1bWVudCgkaWQpIHsKCQkkaWQgPSBzZWxmOjpnZXREb2N1bWVudElEKCRpZCk7CgkJc2VsZjo6ZGVidWcoIlNlbGVjdGluZyBkb2N1bWVudCAnJGlkJyBhcyBkZWZhdWx0IG9uZSIpOwoJCXNlbGY6OiRkZWZhdWx0RG9jdW1lbnRJRCA9IHNlbGY6OmdldERvY3VtZW50SUQoJGlkKTsKCX0KCS8qKgoJICogUmV0dXJucyBkb2N1bWVudCB3aXRoIGlkICRpZCBvciBsYXN0IHVzZWQgYXMgcGhwUXVlcnlPYmplY3QuCgkgKiAkaWQgY2FuIGJlIHJldHJpdmVkIHZpYSBnZXREb2N1bWVudElEKCkgb3IgZ2V0RG9jdW1lbnRJRFJlZigpLgoJICogQ2hhaW5hYmxlLgoJICoKCSAqIEBzZWUgcGhwUXVlcnk6OnNlbGVjdERvY3VtZW50KCkKCSAqIEBwYXJhbSB1bmtub3duX3R5cGUgJGlkCgkgKiBAcmV0dXJuIHBocFF1ZXJ5T2JqZWN0fFF1ZXJ5VGVtcGxhdGVzU291cmNlfFF1ZXJ5VGVtcGxhdGVzUGFyc2V8UXVlcnlUZW1wbGF0ZXNTb3VyY2VRdWVyeQoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldERvY3VtZW50KCRpZCA9IG51bGwpIHsKCQlpZiAoJGlkKQoJCQlwaHBRdWVyeTo6c2VsZWN0RG9jdW1lbnQoJGlkKTsKCQllbHNlCgkJCSRpZCA9IHBocFF1ZXJ5OjokZGVmYXVsdERvY3VtZW50SUQ7CgkJcmV0dXJuIG5ldyBwaHBRdWVyeU9iamVjdCgkaWQpOwoJfQoJLyoqCgkgKiBDcmVhdGVzIG5ldyBkb2N1bWVudCBmcm9tIG1hcmt1cC4KCSAqIENoYWluYWJsZS4KCSAqCgkgKiBAcGFyYW0gdW5rbm93bl90eXBlICRtYXJrdXAKCSAqIEByZXR1cm4gcGhwUXVlcnlPYmplY3R8UXVlcnlUZW1wbGF0ZXNTb3VyY2V8UXVlcnlUZW1wbGF0ZXNQYXJzZXxRdWVyeVRlbXBsYXRlc1NvdXJjZVF1ZXJ5CgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbmV3RG9jdW1lbnQoJG1hcmt1cCA9IG51bGwsICRjb250ZW50VHlwZSA9IG51bGwpIHsKCQlpZiAoISAkbWFya3VwKQoJCQkkbWFya3VwID0gJyc7CgkJJGRvY3VtZW50SUQgPSBwaHBRdWVyeTo6Y3JlYXRlRG9jdW1lbnRXcmFwcGVyKCRtYXJrdXAsICRjb250ZW50VHlwZSk7CgkJcmV0dXJuIG5ldyBwaHBRdWVyeU9iamVjdCgkZG9jdW1lbnRJRCk7Cgl9CgkvKioKCSAqIENyZWF0ZXMgbmV3IGRvY3VtZW50IGZyb20gbWFya3VwLgoJICogQ2hhaW5hYmxlLgoJICoKCSAqIEBwYXJhbSB1bmtub3duX3R5cGUgJG1hcmt1cAoJICogQHJldHVybiBwaHBRdWVyeU9iamVjdHxRdWVyeVRlbXBsYXRlc1NvdXJjZXxRdWVyeVRlbXBsYXRlc1BhcnNlfFF1ZXJ5VGVtcGxhdGVzU291cmNlUXVlcnkKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBuZXdEb2N1bWVudEhUTUwoJG1hcmt1cCA9IG51bGwsICRjaGFyc2V0ID0gbnVsbCkgewoJCSRjb250ZW50VHlwZSA9ICRjaGFyc2V0CgkJCT8gIjtjaGFyc2V0PSRjaGFyc2V0IgoJCQk6ICcnOwoJCXJldHVybiBzZWxmOjpuZXdEb2N1bWVudCgkbWFya3VwLCAidGV4dC9odG1seyRjb250ZW50VHlwZX0iKTsKCX0KCS8qKgoJICogQ3JlYXRlcyBuZXcgZG9jdW1lbnQgZnJvbSBtYXJrdXAuCgkgKiBDaGFpbmFibGUuCgkgKgoJICogQHBhcmFtIHVua25vd25fdHlwZSAkbWFya3VwCgkgKiBAcmV0dXJuIHBocFF1ZXJ5T2JqZWN0fFF1ZXJ5VGVtcGxhdGVzU291cmNlfFF1ZXJ5VGVtcGxhdGVzUGFyc2V8UXVlcnlUZW1wbGF0ZXNTb3VyY2VRdWVyeQoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG5ld0RvY3VtZW50WE1MKCRtYXJrdXAgPSBudWxsLCAkY2hhcnNldCA9IG51bGwpIHsKCQkkY29udGVudFR5cGUgPSAkY2hhcnNldAoJCQk/ICI7Y2hhcnNldD0kY2hhcnNldCIKCQkJOiAnJzsKCQlyZXR1cm4gc2VsZjo6bmV3RG9jdW1lbnQoJG1hcmt1cCwgInRleHQveG1seyRjb250ZW50VHlwZX0iKTsKCX0KCS8qKgoJICogQ3JlYXRlcyBuZXcgZG9jdW1lbnQgZnJvbSBtYXJrdXAuCgkgKiBDaGFpbmFibGUuCgkgKgoJICogQHBhcmFtIHVua25vd25fdHlwZSAkbWFya3VwCgkgKiBAcmV0dXJuIHBocFF1ZXJ5T2JqZWN0fFF1ZXJ5VGVtcGxhdGVzU291cmNlfFF1ZXJ5VGVtcGxhdGVzUGFyc2V8UXVlcnlUZW1wbGF0ZXNTb3VyY2VRdWVyeQoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG5ld0RvY3VtZW50WEhUTUwoJG1hcmt1cCA9IG51bGwsICRjaGFyc2V0ID0gbnVsbCkgewoJCSRjb250ZW50VHlwZSA9ICRjaGFyc2V0CgkJCT8gIjtjaGFyc2V0PSRjaGFyc2V0IgoJCQk6ICcnOwoJCXJldHVybiBzZWxmOjpuZXdEb2N1bWVudCgkbWFya3VwLCAiYXBwbGljYXRpb24veGh0bWwreG1seyRjb250ZW50VHlwZX0iKTsKCX0KCS8qKgoJICogQ3JlYXRlcyBuZXcgZG9jdW1lbnQgZnJvbSBtYXJrdXAuCgkgKiBDaGFpbmFibGUuCgkgKgoJICogQHBhcmFtIHVua25vd25fdHlwZSAkbWFya3VwCgkgKiBAcmV0dXJuIHBocFF1ZXJ5T2JqZWN0fFF1ZXJ5VGVtcGxhdGVzU291cmNlfFF1ZXJ5VGVtcGxhdGVzUGFyc2V8UXVlcnlUZW1wbGF0ZXNTb3VyY2VRdWVyeQoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG5ld0RvY3VtZW50UEhQKCRtYXJrdXAgPSBudWxsLCAkY29udGVudFR5cGUgPSAidGV4dC9odG1sIikgewoJCS8vIFRPRE8gcGFzcyBjaGFyc2V0IHRvIHBocFRvTWFya3VwIGlmIHBvc3NpYmxlICh1c2UgRE9NRG9jdW1lbnRXcmFwcGVyIGZ1bmN0aW9uKQoJCSRtYXJrdXAgPSBwaHBRdWVyeTo6cGhwVG9NYXJrdXAoJG1hcmt1cCwgc2VsZjo6JGRlZmF1bHRDaGFyc2V0KTsKCQlyZXR1cm4gc2VsZjo6bmV3RG9jdW1lbnQoJG1hcmt1cCwgJGNvbnRlbnRUeXBlKTsKCX0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcGhwVG9NYXJrdXAoJHBocCwgJGNoYXJzZXQgPSAndXRmLTgnKSB7CgkJJHJlZ2V4ZXMgPSBhcnJheSgKCQkJJ0AoPCg/IVxcPykoPzpbXj5dfFxcPz4pK1xcdytcXHMqPVxccyopKFwnKShbXlwnXSopPCcuJz9waHA/KC4qPykoPzpcXD8+KShbXlwnXSopXCdAcycsCgkJCSdAKDwoPyFcXD8pKD86W14+XXxcXD8+KStcXHcrXFxzKj1cXHMqKSgiKShbXiJdKik8Jy4nP3BocD8oLio/KSg/OlxcPz4pKFteIl0qKSJAcycsCgkJKTsKCQlmb3JlYWNoKCRyZWdleGVzIGFzICRyZWdleCkKCQkJd2hpbGUgKHByZWdfbWF0Y2goJHJlZ2V4LCAkcGhwLCAkbWF0Y2hlcykpIHsKCQkJCSRwaHAgPSBwcmVnX3JlcGxhY2VfY2FsbGJhY2soCgkJCQkJJHJlZ2V4LAovLwkJCQkJY3JlYXRlX2Z1bmN0aW9uKCckbSwgJGNoYXJzZXQgPSAiJy4kY2hhcnNldC4nIicsCi8vCQkJCQkJJ3JldHVybiAkbVsxXS4kbVsyXQovLwkJCQkJCQkuaHRtbHNwZWNpYWxjaGFycygiPCIuIj9waHAiLiRtWzRdLiI/Ii4iPiIsIEVOVF9RVU9URVN8RU5UX05PUVVPVEVTLCAkY2hhcnNldCkKLy8JCQkJCQkJLiRtWzVdLiRtWzJdOycKLy8JCQkJCSksCgkJCQkJYXJyYXkoJ3BocFF1ZXJ5JywgJ19waHBUb01hcmt1cENhbGxiYWNrJyksCgkJCQkJJHBocAoJCQkJKTsKCQkJfQoJCSRyZWdleCA9ICdAKF58PltePF0qKSs/KDxcP3BocCguKj8pKFw/PikpQHMnOwovL3ByZWdfbWF0Y2hfYWxsKCRyZWdleCwgJHBocCwgJG1hdGNoZXMpOwovL3Zhcl9kdW1wKCRtYXRjaGVzKTsKCQkkcGhwID0gcHJlZ19yZXBsYWNlKCRyZWdleCwgJ1xcMTxwaHA+PCEtLSBcXDMgLS0+PC9waHA+JywgJHBocCk7CgkJcmV0dXJuICRwaHA7Cgl9CglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIF9waHBUb01hcmt1cENhbGxiYWNrKCRwaHAsICRjaGFyc2V0ID0gJ3V0Zi04JykgewoJCXJldHVybiAkbVsxXS4kbVsyXQoJCQkuaHRtbHNwZWNpYWxjaGFycygiPCIuIj9waHAiLiRtWzRdLiI/Ii4iPiIsIEVOVF9RVU9URVN8RU5UX05PUVVPVEVTLCAkY2hhcnNldCkKCQkJLiRtWzVdLiRtWzJdOwoJfQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBfbWFya3VwVG9QSFBDYWxsYmFjaygkbSkgewoJCXJldHVybiAiPCIuIj9waHAgIi5odG1sc3BlY2lhbGNoYXJzX2RlY29kZSgkbVsxXSkuIiA/Ii4iPiI7Cgl9CgkvKioKCSAqIENvbnZlcnRzIGRvY3VtZW50IG1hcmt1cCBjb250YWluaW5nIFBIUCBjb2RlIGdlbmVyYXRlZCBieSBwaHBRdWVyeTo6cGhwKCkKCSAqIGludG8gdmFsaWQgKGV4ZWN1dGFibGUpIFBIUCBjb2RlIHN5bnRheC4KCSAqCgkgKiBAcGFyYW0gc3RyaW5nfHBocFF1ZXJ5T2JqZWN0ICRjb250ZW50CgkgKiBAcmV0dXJuIHN0cmluZyBQSFAgY29kZS4KCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBtYXJrdXBUb1BIUCgkY29udGVudCkgewoJCWlmICgkY29udGVudCBpbnN0YW5jZW9mIHBocFF1ZXJ5T2JqZWN0KQoJCQkkY29udGVudCA9ICRjb250ZW50LT5tYXJrdXBPdXRlcigpOwoJCS8qIDxwaHA+Li4uPC9waHA+IHRvIDw/cGhwLi4uPyA+ICovCgkJJGNvbnRlbnQgPSBwcmVnX3JlcGxhY2VfY2FsbGJhY2soCgkJCSdAPHBocD5ccyo8IS0tKC4qPyktLT5ccyo8L3BocD5AcycsCi8vCQkJY3JlYXRlX2Z1bmN0aW9uKCckbScsCi8vCQkJCSdyZXR1cm4gIjwnLic/cGhwICIuaHRtbHNwZWNpYWxjaGFyc19kZWNvZGUoJG1bMV0pLiIgPycuJz4iOycKLy8JCQkpLAoJCQlhcnJheSgncGhwUXVlcnknLCAnX21hcmt1cFRvUEhQQ2FsbGJhY2snKSwKCQkJJGNvbnRlbnQKCQkpOwoJCS8qIDxub2RlIGF0dHI9JzwgP3BocCA/ID4nPiBleHRyYSBzcGFjZSBhZGRlZCB0byBzYXZlIGhpZ2hsaWdodGVycyAqLwoJCSRyZWdleGVzID0gYXJyYXkoCgkJCSdAKDwoPyFcXD8pKD86W14+XXxcXD8+KStcXHcrXFxzKj1cXHMqKShcJykoW15cJ10qKSg/OiZsdDt8JTNDKVxcPyg/OnBocCk/KC4qPykoPzpcXD8oPzomZ3Q7fCUzRSkpKFteXCddKilcJ0BzJywKCQkJJ0AoPCg/IVxcPykoPzpbXj5dfFxcPz4pK1xcdytcXHMqPVxccyopKCIpKFteIl0qKSg/OiZsdDt8JTNDKVxcPyg/OnBocCk/KC4qPykoPzpcXD8oPzomZ3Q7fCUzRSkpKFteIl0qKSJAcycsCgkJKTsKCQlmb3JlYWNoKCRyZWdleGVzIGFzICRyZWdleCkKCQkJd2hpbGUgKHByZWdfbWF0Y2goJHJlZ2V4LCAkY29udGVudCkpCgkJCQkkY29udGVudCA9IHByZWdfcmVwbGFjZV9jYWxsYmFjaygKCQkJCQkkcmVnZXgsCgkJCQkJZnVuY3Rpb24gKCRtKSB7CgkJCQkJCXJldHVybiAkbVsxXS4kbVsyXS4kbVszXS4iPD9waHAgIgoJCQkJCQkJLnN0cl9yZXBsYWNlKAoJCQkJCQkJCWFycmF5KCIlMjAiLCAiJTNFIiwgIiUwOSIsICImIzEwOyIsICImIzk7IiwgIiU3QiIsICIlMjQiLCAiJTdEIiwgIiUyMiIsICIlNUIiLCAiJTVEIiksCgkJCQkJCQkJYXJyYXkoIiAiLCAiPiIsICIJIiwgIlxuIiwgIgkiLCAieyIsICIkIiwgIn0iLCAnIicsICJbIiwgIl0iKSwKCQkJCQkJCQlodG1sc3BlY2lhbGNoYXJzX2RlY29kZSgkbVs0XSkKCQkJCQkJCSkKCQkJCQkJCS4iID8+Ii4kbVs1XS4kbVsyXTsKCQkJCQl9LAoJCQkJCSRjb250ZW50CgkJCQkpOwoJCXJldHVybiAkY29udGVudDsKCX0KCS8qKgoJICogQ3JlYXRlcyBuZXcgZG9jdW1lbnQgZnJvbSBmaWxlICRmaWxlLgoJICogQ2hhaW5hYmxlLgoJICoKCSAqIEBwYXJhbSBzdHJpbmcgJGZpbGUgVVJMcyBhbGxvd2VkLiBTZWUgRmlsZSB3cmFwcGVyIHBhZ2UgYXQgcGhwLm5ldCBmb3IgbW9yZSBzdXBwb3J0ZWQgc291cmNlcy4KCSAqIEByZXR1cm4gcGhwUXVlcnlPYmplY3R8UXVlcnlUZW1wbGF0ZXNTb3VyY2V8UXVlcnlUZW1wbGF0ZXNQYXJzZXxRdWVyeVRlbXBsYXRlc1NvdXJjZVF1ZXJ5CgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbmV3RG9jdW1lbnRGaWxlKCRmaWxlLCAkY29udGVudFR5cGUgPSBudWxsKSB7CgkJJGRvY3VtZW50SUQgPSBzZWxmOjpjcmVhdGVEb2N1bWVudFdyYXBwZXIoCgkJCWZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlKSwgJGNvbnRlbnRUeXBlCgkJKTsKCQlyZXR1cm4gbmV3IHBocFF1ZXJ5T2JqZWN0KCRkb2N1bWVudElEKTsKCX0KCS8qKgoJICogQ3JlYXRlcyBuZXcgZG9jdW1lbnQgZnJvbSBtYXJrdXAuCgkgKiBDaGFpbmFibGUuCgkgKgoJICogQHBhcmFtIHVua25vd25fdHlwZSAkbWFya3VwCgkgKiBAcmV0dXJuIHBocFF1ZXJ5T2JqZWN0fFF1ZXJ5VGVtcGxhdGVzU291cmNlfFF1ZXJ5VGVtcGxhdGVzUGFyc2V8UXVlcnlUZW1wbGF0ZXNTb3VyY2VRdWVyeQoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG5ld0RvY3VtZW50RmlsZUhUTUwoJGZpbGUsICRjaGFyc2V0ID0gbnVsbCkgewoJCSRjb250ZW50VHlwZSA9ICRjaGFyc2V0CgkJCT8gIjtjaGFyc2V0PSRjaGFyc2V0IgoJCQk6ICcnOwoJCXJldHVybiBzZWxmOjpuZXdEb2N1bWVudEZpbGUoJGZpbGUsICJ0ZXh0L2h0bWx7JGNvbnRlbnRUeXBlfSIpOwoJfQoJLyoqCgkgKiBDcmVhdGVzIG5ldyBkb2N1bWVudCBmcm9tIG1hcmt1cC4KCSAqIENoYWluYWJsZS4KCSAqCgkgKiBAcGFyYW0gdW5rbm93bl90eXBlICRtYXJrdXAKCSAqIEByZXR1cm4gcGhwUXVlcnlPYmplY3R8UXVlcnlUZW1wbGF0ZXNTb3VyY2V8UXVlcnlUZW1wbGF0ZXNQYXJzZXxRdWVyeVRlbXBsYXRlc1NvdXJjZVF1ZXJ5CgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbmV3RG9jdW1lbnRGaWxlWE1MKCRmaWxlLCAkY2hhcnNldCA9IG51bGwpIHsKCQkkY29udGVudFR5cGUgPSAkY2hhcnNldAoJCQk/ICI7Y2hhcnNldD0kY2hhcnNldCIKCQkJOiAnJzsKCQlyZXR1cm4gc2VsZjo6bmV3RG9jdW1lbnRGaWxlKCRmaWxlLCAidGV4dC94bWx7JGNvbnRlbnRUeXBlfSIpOwoJfQoJLyoqCgkgKiBDcmVhdGVzIG5ldyBkb2N1bWVudCBmcm9tIG1hcmt1cC4KCSAqIENoYWluYWJsZS4KCSAqCgkgKiBAcGFyYW0gdW5rbm93bl90eXBlICRtYXJrdXAKCSAqIEByZXR1cm4gcGhwUXVlcnlPYmplY3R8UXVlcnlUZW1wbGF0ZXNTb3VyY2V8UXVlcnlUZW1wbGF0ZXNQYXJzZXxRdWVyeVRlbXBsYXRlc1NvdXJjZVF1ZXJ5CgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbmV3RG9jdW1lbnRGaWxlWEhUTUwoJGZpbGUsICRjaGFyc2V0ID0gbnVsbCkgewoJCSRjb250ZW50VHlwZSA9ICRjaGFyc2V0CgkJCT8gIjtjaGFyc2V0PSRjaGFyc2V0IgoJCQk6ICcnOwoJCXJldHVybiBzZWxmOjpuZXdEb2N1bWVudEZpbGUoJGZpbGUsICJhcHBsaWNhdGlvbi94aHRtbCt4bWx7JGNvbnRlbnRUeXBlfSIpOwoJfQoJLyoqCgkgKiBDcmVhdGVzIG5ldyBkb2N1bWVudCBmcm9tIG1hcmt1cC4KCSAqIENoYWluYWJsZS4KCSAqCgkgKiBAcGFyYW0gdW5rbm93bl90eXBlICRtYXJrdXAKCSAqIEByZXR1cm4gcGhwUXVlcnlPYmplY3R8UXVlcnlUZW1wbGF0ZXNTb3VyY2V8UXVlcnlUZW1wbGF0ZXNQYXJzZXxRdWVyeVRlbXBsYXRlc1NvdXJjZVF1ZXJ5CgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbmV3RG9jdW1lbnRGaWxlUEhQKCRmaWxlLCAkY29udGVudFR5cGUgPSBudWxsKSB7CgkJcmV0dXJuIHNlbGY6Om5ld0RvY3VtZW50UEhQKGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlKSwgJGNvbnRlbnRUeXBlKTsKCX0KCS8qKgoJICogUmV1c2VzIGV4aXN0aW5nIERPTURvY3VtZW50IG9iamVjdC4KCSAqIENoYWluYWJsZS4KCSAqCgkgKiBAcGFyYW0gJGRvY3VtZW50IERPTURvY3VtZW50CgkgKiBAcmV0dXJuIHBocFF1ZXJ5T2JqZWN0fFF1ZXJ5VGVtcGxhdGVzU291cmNlfFF1ZXJ5VGVtcGxhdGVzUGFyc2V8UXVlcnlUZW1wbGF0ZXNTb3VyY2VRdWVyeQoJICogQFRPRE8gc3VwcG9ydCBET01Eb2N1bWVudAoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGxvYWREb2N1bWVudCgkZG9jdW1lbnQpIHsKCQkvLyBUT0RPCgkJZGllKCdUT0RPIGxvYWREb2N1bWVudCcpOwoJfQoJLyoqCgkgKiBFbnRlciBkZXNjcmlwdGlvbiBoZXJlLi4uCgkgKgoJICogQHBhcmFtIHVua25vd25fdHlwZSAkaHRtbAoJICogQHBhcmFtIHVua25vd25fdHlwZSAkZG9tSWQKCSAqIEByZXR1cm4gdW5rbm93biBOZXcgRE9NIElECgkgKiBAdG9kbyBzdXBwb3J0IFBIUCB0YWdzIGluIGlucHV0CgkgKiBAdG9kbyBzdXBwb3J0IHBhc3NpbmcgRE9NRG9jdW1lbnQgb2JqZWN0IGZyb20gc2VsZjo6bG9hZERvY3VtZW50CgkgKi8KCXByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlRG9jdW1lbnRXcmFwcGVyKCRodG1sLCAkY29udGVudFR5cGUgPSBudWxsLCAkZG9jdW1lbnRJRCA9IG51bGwpIHsKCQlpZiAoZnVuY3Rpb25fZXhpc3RzKCdkb214bWxfb3Blbl9tZW0nKSkKCQkJdGhyb3cgbmV3IEV4Y2VwdGlvbigiT2xkIFBIUDQgRE9NIFhNTCBleHRlbnNpb24gZGV0ZWN0ZWQuIHBocFF1ZXJ5IHdvbid0IHdvcmsgdW50aWwgdGhpcyBleHRlbnNpb24gaXMgZW5hYmxlZC4iKTsKLy8JCSRpZCA9ICRkb2N1bWVudElECi8vCQkJPyAkZG9jdW1lbnRJRAovLwkJCTogbWQ1KG1pY3JvdGltZSgpKTsKCQkkZG9jdW1lbnQgPSBudWxsOwoJCWlmICgkaHRtbCBpbnN0YW5jZW9mIERPTURPQ1VNRU5UKSB7CgkJCWlmIChzZWxmOjpnZXREb2N1bWVudElEKCRodG1sKSkgewoJCQkJLy8gZG9jdW1lbnQgYWxyZWFkeSBleGlzdHMgaW4gcGhwUXVlcnk6OiRkb2N1bWVudHMsIG1ha2UgYSBjb3B5CgkJCQkkZG9jdW1lbnQgPSBjbG9uZSAkaHRtbDsKCQkJfSBlbHNlIHsKCQkJCS8vIG5ldyBkb2N1bWVudCwgYWRkIGl0IHRvIHBocFF1ZXJ5OjokZG9jdW1lbnRzCgkJCQkkd3JhcHBlciA9IG5ldyBET01Eb2N1bWVudFdyYXBwZXIoJGh0bWwsICRjb250ZW50VHlwZSwgJGRvY3VtZW50SUQpOwoJCQl9CgkJfSBlbHNlIHsKCQkJJHdyYXBwZXIgPSBuZXcgRE9NRG9jdW1lbnRXcmFwcGVyKCRodG1sLCAkY29udGVudFR5cGUsICRkb2N1bWVudElEKTsKCQl9Ci8vCQkkd3JhcHBlci0+aWQgPSAkaWQ7CgkJLy8gYmluZCBkb2N1bWVudAoJCXBocFF1ZXJ5OjokZG9jdW1lbnRzWyR3cmFwcGVyLT5pZF0gPSAkd3JhcHBlcjsKCQkvLyByZW1lbWJlciBsYXN0IGxvYWRlZCBkb2N1bWVudAoJCXBocFF1ZXJ5OjpzZWxlY3REb2N1bWVudCgkd3JhcHBlci0+aWQpOwoJCXJldHVybiAkd3JhcHBlci0+aWQ7Cgl9CgkvKioKCSAqIEV4dGVuZCBjbGFzcyBuYW1lc3BhY2UuCgkgKgoJICogQHBhcmFtIHN0cmluZ3xhcnJheSAkdGFyZ2V0CgkgKiBAcGFyYW0gYXJyYXkgJHNvdXJjZQoJICogQFRPRE8gc3VwcG9ydCBzdHJpbmcgJHNvdXJjZQoJICogQHJldHVybiB1bmtub3duX3R5cGUKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBleHRlbmQoJHRhcmdldCwgJHNvdXJjZSkgewoJCXN3aXRjaCgkdGFyZ2V0KSB7CgkJCWNhc2UgJ3BocFF1ZXJ5T2JqZWN0JzoKCQkJCSR0YXJnZXRSZWYgPSAmc2VsZjo6JGV4dGVuZE1ldGhvZHM7CgkJCQkkdGFyZ2V0UmVmMiA9ICZzZWxmOjokcGx1Z2luc01ldGhvZHM7CgkJCQlicmVhazsKCQkJY2FzZSAncGhwUXVlcnknOgoJCQkJJHRhcmdldFJlZiA9ICZzZWxmOjokZXh0ZW5kU3RhdGljTWV0aG9kczsKCQkJCSR0YXJnZXRSZWYyID0gJnNlbGY6OiRwbHVnaW5zU3RhdGljTWV0aG9kczsKCQkJCWJyZWFrOwoJCQlkZWZhdWx0OgoJCQkJdGhyb3cgbmV3IEV4Y2VwdGlvbigiVW5zdXBwb3J0ZWQgXCR0YXJnZXQgdHlwZSIpOwoJCX0KCQlpZiAoaXNfc3RyaW5nKCRzb3VyY2UpKQoJCQkkc291cmNlID0gYXJyYXkoJHNvdXJjZSA9PiAkc291cmNlKTsKCQlmb3JlYWNoKCRzb3VyY2UgYXMgJG1ldGhvZCA9PiAkY2FsbGJhY2spIHsKCQkJaWYgKGlzc2V0KCR0YXJnZXRSZWZbJG1ldGhvZF0pKSB7Ci8vCQkJCXRocm93IG5ldyBFeGNlcHRpb24KCQkJCXNlbGY6OmRlYnVnKCJEdXBsaWNhdGUgbWV0aG9kICd7JG1ldGhvZH0nLCBjYW5cJ3QgZXh0ZW5kICd7JHRhcmdldH0nIik7CgkJCQljb250aW51ZTsKCQkJfQoJCQlpZiAoaXNzZXQoJHRhcmdldFJlZjJbJG1ldGhvZF0pKSB7Ci8vCQkJCXRocm93IG5ldyBFeGNlcHRpb24KCQkJCXNlbGY6OmRlYnVnKCJEdXBsaWNhdGUgbWV0aG9kICd7JG1ldGhvZH0nIGZyb20gcGx1Z2luICd7JHRhcmdldFJlZjJbJG1ldGhvZF19JywiCgkJCQkJLiIgY2FuXCd0IGV4dGVuZCAneyR0YXJnZXR9JyIpOwoJCQkJY29udGludWU7CgkJCX0KCQkJJHRhcmdldFJlZlskbWV0aG9kXSA9ICRjYWxsYmFjazsKCQl9CgkJcmV0dXJuIHRydWU7Cgl9CgkvKioKCSAqIEV4dGVuZCBwaHBRdWVyeSB3aXRoICRjbGFzcyBmcm9tICRmaWxlLgoJICoKCSAqIEBwYXJhbSBzdHJpbmcgJGNsYXNzIEV4dGVuZGluZyBjbGFzcyBuYW1lLiBSZWFsIGNsYXNzIG5hbWUgY2FuIGJlIHByZXBlbmRlZCBwaHBRdWVyeV8uCgkgKiBAcGFyYW0gc3RyaW5nICRmaWxlIEZpbGVuYW1lIHRvIGluY2x1ZGUuIERlZmF1bHRzIHRvICJ7JGNsYXNzfS5waHAiLgoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHBsdWdpbigkY2xhc3MsICRmaWxlID0gbnVsbCkgewoJCS8vIFRPRE8gJGNsYXNzIGNoZWNrZWQgYWdhaW5zIHBocFF1ZXJ5XyRjbGFzcwovLwkJaWYgKHN0cnBvcygkY2xhc3MsICdwaHBRdWVyeScpID09PSAwKQovLwkJCSRjbGFzcyA9IHN1YnN0cigkY2xhc3MsIDgpOwoJCWlmIChpbl9hcnJheSgkY2xhc3MsIHNlbGY6OiRwbHVnaW5zTG9hZGVkKSkKCQkJcmV0dXJuIHRydWU7CgkJaWYgKCEgJGZpbGUpCgkJCSRmaWxlID0gJGNsYXNzLicucGhwJzsKCQkkb2JqZWN0Q2xhc3NFeGlzdHMgPSBjbGFzc19leGlzdHMoJ3BocFF1ZXJ5T2JqZWN0UGx1Z2luXycuJGNsYXNzKTsKCQkkc3RhdGljQ2xhc3NFeGlzdHMgPSBjbGFzc19leGlzdHMoJ3BocFF1ZXJ5UGx1Z2luXycuJGNsYXNzKTsKCQlpZiAoISAkb2JqZWN0Q2xhc3NFeGlzdHMgJiYgISAkc3RhdGljQ2xhc3NFeGlzdHMpCgkJCXJlcXVpcmVfb25jZSgkZmlsZSk7CgkJc2VsZjo6JHBsdWdpbnNMb2FkZWRbXSA9ICRjbGFzczsKCQkvLyBzdGF0aWMgbWV0aG9kcwoJCWlmIChjbGFzc19leGlzdHMoJ3BocFF1ZXJ5UGx1Z2luXycuJGNsYXNzKSkgewoJCQkkcmVhbENsYXNzID0gJ3BocFF1ZXJ5UGx1Z2luXycuJGNsYXNzOwoJCQkkdmFycyA9IGdldF9jbGFzc192YXJzKCRyZWFsQ2xhc3MpOwoJCQkkbG9vcCA9IGlzc2V0KCR2YXJzWydwaHBRdWVyeU1ldGhvZHMnXSkKCQkJCSYmICEgaXNfbnVsbCgkdmFyc1sncGhwUXVlcnlNZXRob2RzJ10pCgkJCQk/ICR2YXJzWydwaHBRdWVyeU1ldGhvZHMnXQoJCQkJOiBnZXRfY2xhc3NfbWV0aG9kcygkcmVhbENsYXNzKTsKCQkJZm9yZWFjaCgkbG9vcCBhcyAkbWV0aG9kKSB7CgkJCQlpZiAoJG1ldGhvZCA9PSAnX19pbml0aWFsaXplJykKCQkJCQljb250aW51ZTsKCQkJCWlmICghIGlzX2NhbGxhYmxlKGFycmF5KCRyZWFsQ2xhc3MsICRtZXRob2QpKSkKCQkJCQljb250aW51ZTsKCQkJCWlmIChpc3NldChzZWxmOjokcGx1Z2luc1N0YXRpY01ldGhvZHNbJG1ldGhvZF0pKSB7CgkJCQkJdGhyb3cgbmV3IEV4Y2VwdGlvbigiRHVwbGljYXRlIG1ldGhvZCAneyRtZXRob2R9JyBmcm9tIHBsdWdpbiAneyRjfScgY29uZmxpY3RzIHdpdGggc2FtZSBtZXRob2QgZnJvbSBwbHVnaW4gJyIuc2VsZjo6JHBsdWdpbnNTdGF0aWNNZXRob2RzWyRtZXRob2RdLiInIik7CgkJCQkJcmV0dXJuOwoJCQkJfQoJCQkJc2VsZjo6JHBsdWdpbnNTdGF0aWNNZXRob2RzWyRtZXRob2RdID0gJGNsYXNzOwoJCQl9CgkJCWlmIChtZXRob2RfZXhpc3RzKCRyZWFsQ2xhc3MsICdfX2luaXRpYWxpemUnKSkKCQkJCWNhbGxfdXNlcl9mdW5jX2FycmF5KGFycmF5KCRyZWFsQ2xhc3MsICdfX2luaXRpYWxpemUnKSwgYXJyYXkoKSk7CgkJfQoJCS8vIG9iamVjdCBtZXRob2RzCgkJaWYgKGNsYXNzX2V4aXN0cygncGhwUXVlcnlPYmplY3RQbHVnaW5fJy4kY2xhc3MpKSB7CgkJCSRyZWFsQ2xhc3MgPSAncGhwUXVlcnlPYmplY3RQbHVnaW5fJy4kY2xhc3M7CgkJCSR2YXJzID0gZ2V0X2NsYXNzX3ZhcnMoJHJlYWxDbGFzcyk7CgkJCSRsb29wID0gaXNzZXQoJHZhcnNbJ3BocFF1ZXJ5TWV0aG9kcyddKQoJCQkJJiYgISBpc19udWxsKCR2YXJzWydwaHBRdWVyeU1ldGhvZHMnXSkKCQkJCT8gJHZhcnNbJ3BocFF1ZXJ5TWV0aG9kcyddCgkJCQk6IGdldF9jbGFzc19tZXRob2RzKCRyZWFsQ2xhc3MpOwoJCQlmb3JlYWNoKCRsb29wIGFzICRtZXRob2QpIHsKCQkJCWlmICghIGlzX2NhbGxhYmxlKGFycmF5KCRyZWFsQ2xhc3MsICRtZXRob2QpKSkKCQkJCQljb250aW51ZTsKCQkJCWlmIChpc3NldChzZWxmOjokcGx1Z2luc01ldGhvZHNbJG1ldGhvZF0pKSB7CgkJCQkJdGhyb3cgbmV3IEV4Y2VwdGlvbigiRHVwbGljYXRlIG1ldGhvZCAneyRtZXRob2R9JyBmcm9tIHBsdWdpbiAneyRjfScgY29uZmxpY3RzIHdpdGggc2FtZSBtZXRob2QgZnJvbSBwbHVnaW4gJyIuc2VsZjo6JHBsdWdpbnNNZXRob2RzWyRtZXRob2RdLiInIik7CgkJCQkJY29udGludWU7CgkJCQl9CgkJCQlzZWxmOjokcGx1Z2luc01ldGhvZHNbJG1ldGhvZF0gPSAkY2xhc3M7CgkJCX0KCQl9CgkJcmV0dXJuIHRydWU7Cgl9CgkvKioKCSAqIFVubG9hZGVzIGFsbCBvciBzcGVjaWZpZWQgZG9jdW1lbnQgZnJvbSBtZW1vcnkuCgkgKgoJICogQHBhcmFtIG1peGVkICRkb2N1bWVudElEIEBzZWUgcGhwUXVlcnk6OmdldERvY3VtZW50SUQoKSBmb3Igc3VwcG9ydGVkIHR5cGVzLgoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHVubG9hZERvY3VtZW50cygkaWQgPSBudWxsKSB7CgkJaWYgKGlzc2V0KCRpZCkpIHsKCQkJaWYgKCRpZCA9IHNlbGY6OmdldERvY3VtZW50SUQoJGlkKSkKCQkJCXVuc2V0KHBocFF1ZXJ5OjokZG9jdW1lbnRzWyRpZF0pOwoJCX0gZWxzZSB7CgkJCWZvcmVhY2gocGhwUXVlcnk6OiRkb2N1bWVudHMgYXMgJGsgPT4gJHYpIHsKCQkJCXVuc2V0KHBocFF1ZXJ5OjokZG9jdW1lbnRzWyRrXSk7CgkJCX0KCQl9Cgl9CgkvKioKCSAqIFBhcnNlcyBwaHBRdWVyeSBvYmplY3Qgb3IgSFRNTCByZXN1bHQgYWdhaW5zdCBQSFAgdGFncyBhbmQgbWFrZXMgdGhlbSBhY3RpdmUuCgkgKgoJICogQHBhcmFtIHBocFF1ZXJ5fHN0cmluZyAkY29udGVudAoJICogQGRlcHJlY2F0ZWQKCSAqIEByZXR1cm4gc3RyaW5nCgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdW5zYWZlUEhQVGFncygkY29udGVudCkgewoJCXJldHVybiBzZWxmOjptYXJrdXBUb1BIUCgkY29udGVudCk7Cgl9CglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIERPTU5vZGVMaXN0VG9BcnJheSgkRE9NTm9kZUxpc3QpIHsKCQkkYXJyYXkgPSBhcnJheSgpOwoJCWlmICghICRET01Ob2RlTGlzdCkKCQkJcmV0dXJuICRhcnJheTsKCQlmb3JlYWNoKCRET01Ob2RlTGlzdCBhcyAkbm9kZSkKCQkJJGFycmF5W10gPSAkbm9kZTsKCQlyZXR1cm4gJGFycmF5OwoJfQoJLyoqCgkgKiBDaGVja3MgaWYgJGlucHV0IGlzIEhUTUwgc3RyaW5nLCB3aGljaCBoYXMgdG8gc3RhcnQgd2l0aCAnPCcuCgkgKgoJICogQGRlcHJlY2F0ZWQKCSAqIEBwYXJhbSBTdHJpbmcgJGlucHV0CgkgKiBAcmV0dXJuIEJvb2wKCSAqIEB0b2RvIHN0aWxsIHVzZWQgPwoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzTWFya3VwKCRpbnB1dCkgewoJCXJldHVybiAhIGlzX2FycmF5KCRpbnB1dCkgJiYgc3Vic3RyKHRyaW0oJGlucHV0KSwgMCwgMSkgPT0gJzwnOwoJfQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkZWJ1ZygkdGV4dCkgewoJCWlmIChzZWxmOjokZGVidWcpCgkJCXByaW50IHZhcl9kdW1wKCR0ZXh0KTsKCX0KCS8qKgoJICogTWFrZSBhbiBBSkFYIHJlcXVlc3QuCgkgKgoJICogQHBhcmFtIGFycmF5IFNlZSAkb3B0aW9ucyBodHRwOi8vZG9jcy5qcXVlcnkuY29tL0FqYXgvalF1ZXJ5LmFqYXgjdG9wdGlvbnMKCSAqIEFkZGl0aW9uYWwgb3B0aW9ucyBhcmU6CgkgKiAnZG9jdW1lbnQnIC0gZG9jdW1lbnQgZm9yIGdsb2JhbCBldmVudHMsIEBzZWUgcGhwUXVlcnk6OmdldERvY3VtZW50SUQoKQoJICogJ3JlZmVyZXInIC0gaW1wbGVtZW50ZWQKCSAqICdyZXF1ZXN0ZWRfd2l0aCcgLSBUT0RPOyBub3QgaW1wbGVtZW50ZWQgKFgtUmVxdWVzdGVkLVdpdGgpCgkgKiBAcmV0dXJuIFplbmRfSHR0cF9DbGllbnQKCSAqIEBsaW5rIGh0dHA6Ly9kb2NzLmpxdWVyeS5jb20vQWpheC9qUXVlcnkuYWpheAoJICoKCSAqIEBUT0RPICRvcHRpb25zWydjYWNoZSddCgkgKiBAVE9ETyAkb3B0aW9uc1sncHJvY2Vzc0RhdGEnXQoJICogQFRPRE8gJG9wdGlvbnNbJ3hociddCgkgKiBAVE9ETyAkb3B0aW9uc1snZGF0YSddIGFzIHN0cmluZwoJICogQFRPRE8gWEhSIGludGVyZmFjZQoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGFqYXgoJG9wdGlvbnMgPSBhcnJheSgpLCAkeGhyID0gbnVsbCkgewoJCSRvcHRpb25zID0gYXJyYXlfbWVyZ2UoCgkJCXNlbGY6OiRhamF4U2V0dGluZ3MsICRvcHRpb25zCgkJKTsKCQkkZG9jdW1lbnRJRCA9IGlzc2V0KCRvcHRpb25zWydkb2N1bWVudCddKQoJCQk/IHNlbGY6OmdldERvY3VtZW50SUQoJG9wdGlvbnNbJ2RvY3VtZW50J10pCgkJCTogbnVsbDsKCQlpZiAoJHhocikgewoJCQkvLyByZXVzZSBleGlzdGluZyBYSFIgb2JqZWN0LCBidXQgY2xlYW4gaXQgdXAKCQkJJGNsaWVudCA9ICR4aHI7Ci8vCQkJJGNsaWVudC0+c2V0UGFyYW1ldGVyUG9zdChudWxsKTsKLy8JCQkkY2xpZW50LT5zZXRQYXJhbWV0ZXJHZXQobnVsbCk7CgkJCSRjbGllbnQtPnNldEF1dGgoZmFsc2UpOwoJCQkkY2xpZW50LT5zZXRIZWFkZXJzKCJJZi1Nb2RpZmllZC1TaW5jZSIsIG51bGwpOwoJCQkkY2xpZW50LT5zZXRIZWFkZXJzKCJSZWZlcmVyIiwgbnVsbCk7CgkJCSRjbGllbnQtPnJlc2V0UGFyYW1ldGVycygpOwoJCX0gZWxzZSB7CgkJCS8vIGNyZWF0ZSBuZXcgWEhSIG9iamVjdAoJCQlyZXF1aXJlX29uY2UoJ1plbmQvSHR0cC9DbGllbnQucGhwJyk7CgkJCSRjbGllbnQgPSBuZXcgWmVuZF9IdHRwX0NsaWVudCgpOwoJCQkkY2xpZW50LT5zZXRDb29raWVKYXIoKTsKCQl9CgkJaWYgKGlzc2V0KCRvcHRpb25zWyd0aW1lb3V0J10pKQoJCQkkY2xpZW50LT5zZXRDb25maWcoYXJyYXkoCgkJCQkndGltZW91dCcgICAgICA9PiAkb3B0aW9uc1sndGltZW91dCddLAoJCQkpKTsKLy8JCQknbWF4cmVkaXJlY3RzJyA9PiAwLAoJCWZvcmVhY2goc2VsZjo6JGFqYXhBbGxvd2VkSG9zdHMgYXMgJGsgPT4gJGhvc3QpCgkJCWlmICgkaG9zdCA9PSAnLicgJiYgaXNzZXQoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKSkKCQkJCXNlbGY6OiRhamF4QWxsb3dlZEhvc3RzWyRrXSA9ICRfU0VSVkVSWydIVFRQX0hPU1QnXTsKCQkkaG9zdCA9IHBhcnNlX3VybCgkb3B0aW9uc1sndXJsJ10sIFBIUF9VUkxfSE9TVCk7CgkJaWYgKCEgaW5fYXJyYXkoJGhvc3QsIHNlbGY6OiRhamF4QWxsb3dlZEhvc3RzKSkgewoJCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCJSZXF1ZXN0IG5vdCBwZXJtaXR0ZWQsIGhvc3QgJyRob3N0JyBub3QgcHJlc2VudCBpbiAiCgkJCQkuInBocFF1ZXJ5OjpcJGFqYXhBbGxvd2VkSG9zdHMiKTsKCQl9CgkJLy8gSlNPTlAKCQkkanNyZSA9ICIvPVxcPygmfCQpLyI7CgkJaWYgKGlzc2V0KCRvcHRpb25zWydkYXRhVHlwZSddKSAmJiAkb3B0aW9uc1snZGF0YVR5cGUnXSA9PSAnanNvbnAnKSB7CgkJCSRqc29ucENhbGxiYWNrUGFyYW0gPSAkb3B0aW9uc1snanNvbnAnXQoJCQkJPyAkb3B0aW9uc1snanNvbnAnXSA6ICdjYWxsYmFjayc7CgkJCWlmIChzdHJ0b2xvd2VyKCRvcHRpb25zWyd0eXBlJ10pID09ICdnZXQnKSB7CgkJCQlpZiAoISBwcmVnX21hdGNoKCRqc3JlLCAkb3B0aW9uc1sndXJsJ10pKSB7CgkJCQkJJHNlcCA9IHN0cnBvcygkb3B0aW9uc1sndXJsJ10sICc/JykKCQkJCQkJPyAnJicgOiAnPyc7CgkJCQkJJG9wdGlvbnNbJ3VybCddIC49ICIkc2VwJGpzb25wQ2FsbGJhY2tQYXJhbT0/IjsKCQkJCX0KCQkJfSBlbHNlIGlmICgkb3B0aW9uc1snZGF0YSddKSB7CgkJCQkkanNvbnAgPSBmYWxzZTsKCQkJCWZvcmVhY2goJG9wdGlvbnNbJ2RhdGEnXSBhcyAkbiA9PiAkdikgewoJCQkJCWlmICgkdiA9PSAnPycpCgkJCQkJCSRqc29ucCA9IHRydWU7CgkJCQl9CgkJCQlpZiAoISAkanNvbnApIHsKCQkJCQkkb3B0aW9uc1snZGF0YSddWyRqc29ucENhbGxiYWNrUGFyYW1dID0gJz8nOwoJCQkJfQoJCQl9CgkJCSRvcHRpb25zWydkYXRhVHlwZSddID0gJ2pzb24nOwoJCX0KCQlpZiAoaXNzZXQoJG9wdGlvbnNbJ2RhdGFUeXBlJ10pICYmICRvcHRpb25zWydkYXRhVHlwZSddID09ICdqc29uJykgewoJCQkkanNvbnBDYWxsYmFjayA9ICdqc29uXycubWQ1KG1pY3JvdGltZSgpKTsKCQkJJGpzb25wRGF0YSA9ICRqc29ucFVybCA9IGZhbHNlOwoJCQlpZiAoJG9wdGlvbnNbJ2RhdGEnXSkgewoJCQkJZm9yZWFjaCgkb3B0aW9uc1snZGF0YSddIGFzICRuID0+ICR2KSB7CgkJCQkJaWYgKCR2ID09ICc/JykKCQkJCQkJJGpzb25wRGF0YSA9ICRuOwoJCQkJfQoJCQl9CgkJCWlmIChwcmVnX21hdGNoKCRqc3JlLCAkb3B0aW9uc1sndXJsJ10pKQoJCQkJJGpzb25wVXJsID0gdHJ1ZTsKCQkJaWYgKCRqc29ucERhdGEgIT09IGZhbHNlIHx8ICRqc29ucFVybCkgewoJCQkJLy8gcmVtZW1iZXIgY2FsbGJhY2sgbmFtZSBmb3IgaHR0cERhdGEoKQoJCQkJJG9wdGlvbnNbJ19qc29ucCddID0gJGpzb25wQ2FsbGJhY2s7CgkJCQlpZiAoJGpzb25wRGF0YSAhPT0gZmFsc2UpCgkJCQkJJG9wdGlvbnNbJ2RhdGEnXVskanNvbnBEYXRhXSA9ICRqc29ucENhbGxiYWNrOwoJCQkJaWYgKCRqc29ucFVybCkKCQkJCQkkb3B0aW9uc1sndXJsJ10gPSBwcmVnX3JlcGxhY2UoJGpzcmUsICI9JGpzb25wQ2FsbGJhY2tcXDEiLCAkb3B0aW9uc1sndXJsJ10pOwoJCQl9CgkJfQoJCSRjbGllbnQtPnNldFVyaSgkb3B0aW9uc1sndXJsJ10pOwoJCSRjbGllbnQtPnNldE1ldGhvZChzdHJ0b3VwcGVyKCRvcHRpb25zWyd0eXBlJ10pKTsKCQlpZiAoaXNzZXQoJG9wdGlvbnNbJ3JlZmVyZXInXSkgJiYgJG9wdGlvbnNbJ3JlZmVyZXInXSkKCQkJJGNsaWVudC0+c2V0SGVhZGVycygnUmVmZXJlcicsICRvcHRpb25zWydyZWZlcmVyJ10pOwoJCSRjbGllbnQtPnNldEhlYWRlcnMoYXJyYXkoCi8vCQkJJ2NvbnRlbnQtdHlwZScgPT4gJG9wdGlvbnNbJ2NvbnRlbnRUeXBlJ10sCgkJCSdVc2VyLUFnZW50JyA9PiAnTW96aWxsYS81LjAgKFgxMTsgVTsgTGludXggeDg2OyBlbi1VUzsgcnY6MS45LjAuNSkgR2Vja28nCgkJCQkgLicvMjAwODEyMjAxMCBGaXJlZm94LzMuMC41JywKCSAJCS8vIFRPRE8gY3VzdG9tIGNoYXJzZXQKCQkJJ0FjY2VwdC1DaGFyc2V0JyA9PiAnSVNPLTg4NTktMSx1dGYtODtxPTAuNywqO3E9MC43JywKLy8gCSAJCSdDb25uZWN0aW9uJyA9PiAna2VlcC1hbGl2ZScsCi8vIAkJCSdBY2NlcHQnID0+ICd0ZXh0L2h0bWwsYXBwbGljYXRpb24veGh0bWwreG1sLGFwcGxpY2F0aW9uL3htbDtxPTAuOSwqLyo7cT0wLjgnLAoJIAkJJ0FjY2VwdC1MYW5ndWFnZScgPT4gJ2VuLXVzLGVuO3E9MC41JywKCQkpKTsKCQlpZiAoJG9wdGlvbnNbJ3VzZXJuYW1lJ10pCgkJCSRjbGllbnQtPnNldEF1dGgoJG9wdGlvbnNbJ3VzZXJuYW1lJ10sICRvcHRpb25zWydwYXNzd29yZCddKTsKCQlpZiAoaXNzZXQoJG9wdGlvbnNbJ2lmTW9kaWZpZWQnXSkgJiYgJG9wdGlvbnNbJ2lmTW9kaWZpZWQnXSkKCQkJJGNsaWVudC0+c2V0SGVhZGVycygiSWYtTW9kaWZpZWQtU2luY2UiLAoJCQkJc2VsZjo6JGxhc3RNb2RpZmllZAoJCQkJCT8gc2VsZjo6JGxhc3RNb2RpZmllZAoJCQkJCTogIlRodSwgMDEgSmFuIDE5NzAgMDA6MDA6MDAgR01UIgoJCQkpOwoJCSRjbGllbnQtPnNldEhlYWRlcnMoIkFjY2VwdCIsCgkJCWlzc2V0KCRvcHRpb25zWydkYXRhVHlwZSddKQoJCQkmJiBpc3NldChzZWxmOjokYWpheFNldHRpbmdzWydhY2NlcHRzJ11bICRvcHRpb25zWydkYXRhVHlwZSddIF0pCgkJCQk/IHNlbGY6OiRhamF4U2V0dGluZ3NbJ2FjY2VwdHMnXVsgJG9wdGlvbnNbJ2RhdGFUeXBlJ10gXS4iLCAqLyoiCgkJCQk6IHNlbGY6OiRhamF4U2V0dGluZ3NbJ2FjY2VwdHMnXVsnX2RlZmF1bHQnXQoJCSk7CgkJLy8gVE9ETyAkb3B0aW9uc1sncHJvY2Vzc0RhdGEnXQoJCWlmICgkb3B0aW9uc1snZGF0YSddIGluc3RhbmNlb2YgcGhwUXVlcnlPYmplY3QpIHsKCQkJJHNlcmlhbGl6ZWQgPSAkb3B0aW9uc1snZGF0YSddLT5zZXJpYWxpemVBcnJheSgkb3B0aW9uc1snZGF0YSddKTsKCQkJJG9wdGlvbnNbJ2RhdGEnXSA9IGFycmF5KCk7CgkJCWZvcmVhY2goJHNlcmlhbGl6ZWQgYXMgJHIpCgkJCQkkb3B0aW9uc1snZGF0YSddWyAkclsnbmFtZSddIF0gPSAkclsndmFsdWUnXTsKCQl9CgkJaWYgKHN0cnRvbG93ZXIoJG9wdGlvbnNbJ3R5cGUnXSkgPT0gJ2dldCcpIHsKCQkJJGNsaWVudC0+c2V0UGFyYW1ldGVyR2V0KCRvcHRpb25zWydkYXRhJ10pOwoJCX0gZWxzZSBpZiAoc3RydG9sb3dlcigkb3B0aW9uc1sndHlwZSddKSA9PSAncG9zdCcpIHsKCQkJJGNsaWVudC0+c2V0RW5jVHlwZSgkb3B0aW9uc1snY29udGVudFR5cGUnXSk7CgkJCSRjbGllbnQtPnNldFBhcmFtZXRlclBvc3QoJG9wdGlvbnNbJ2RhdGEnXSk7CgkJfQoJCWlmIChzZWxmOjokYWN0aXZlID09IDAgJiYgJG9wdGlvbnNbJ2dsb2JhbCddKQoJCQlwaHBRdWVyeUV2ZW50czo6dHJpZ2dlcigkZG9jdW1lbnRJRCwgJ2FqYXhTdGFydCcpOwoJCXNlbGY6OiRhY3RpdmUrKzsKCQkvLyBiZWZvcmVTZW5kIGNhbGxiYWNrCgkJaWYgKGlzc2V0KCRvcHRpb25zWydiZWZvcmVTZW5kJ10pICYmICRvcHRpb25zWydiZWZvcmVTZW5kJ10pCgkJCXBocFF1ZXJ5OjpjYWxsYmFja1J1bigkb3B0aW9uc1snYmVmb3JlU2VuZCddLCBhcnJheSgkY2xpZW50KSk7CgkJLy8gYWpheFNlbmQgZXZlbnQKCQlpZiAoJG9wdGlvbnNbJ2dsb2JhbCddKQoJCQlwaHBRdWVyeUV2ZW50czo6dHJpZ2dlcigkZG9jdW1lbnRJRCwgJ2FqYXhTZW5kJywgYXJyYXkoJGNsaWVudCwgJG9wdGlvbnMpKTsKCQlpZiAocGhwUXVlcnk6OiRkZWJ1ZykgewoJCQlzZWxmOjpkZWJ1ZygieyRvcHRpb25zWyd0eXBlJ119OiB7JG9wdGlvbnNbJ3VybCddfVxuIik7CgkJCXNlbGY6OmRlYnVnKCJPcHRpb25zOiA8cHJlPiIudmFyX2V4cG9ydCgkb3B0aW9ucywgdHJ1ZSkuIjwvcHJlPlxuIik7Ci8vCQkJaWYgKCRjbGllbnQtPmdldENvb2tpZUphcigpKQovLwkJCQlzZWxmOjpkZWJ1ZygiQ29va2llczogPHByZT4iLnZhcl9leHBvcnQoJGNsaWVudC0+Z2V0Q29va2llSmFyKCktPmdldE1hdGNoaW5nQ29va2llcygkb3B0aW9uc1sndXJsJ10pLCB0cnVlKS4iPC9wcmU+XG4iKTsKCQl9CgkJLy8gcmVxdWVzdAoJCSRyZXNwb25zZSA9ICRjbGllbnQtPnJlcXVlc3QoKTsKCQlpZiAocGhwUXVlcnk6OiRkZWJ1ZykgewoJCQlzZWxmOjpkZWJ1ZygnU3RhdHVzOiAnLiRyZXNwb25zZS0+Z2V0U3RhdHVzKCkuJyAvICcuJHJlc3BvbnNlLT5nZXRNZXNzYWdlKCkpOwoJCQlzZWxmOjpkZWJ1ZygkY2xpZW50LT5nZXRMYXN0UmVxdWVzdCgpKTsKCQkJc2VsZjo6ZGVidWcoJHJlc3BvbnNlLT5nZXRIZWFkZXJzKCkpOwoJCX0KCQlpZiAoJHJlc3BvbnNlLT5pc1N1Y2Nlc3NmdWwoKSkgewoJCQkvLyBYWFggdGVtcG9sYXJ5CgkJCXNlbGY6OiRsYXN0TW9kaWZpZWQgPSAkcmVzcG9uc2UtPmdldEhlYWRlcignTGFzdC1Nb2RpZmllZCcpOwoJCQkkZGF0YSA9IHNlbGY6Omh0dHBEYXRhKCRyZXNwb25zZS0+Z2V0Qm9keSgpLCAkb3B0aW9uc1snZGF0YVR5cGUnXSwgJG9wdGlvbnMpOwoJCQlpZiAoaXNzZXQoJG9wdGlvbnNbJ3N1Y2Nlc3MnXSkgJiYgJG9wdGlvbnNbJ3N1Y2Nlc3MnXSkKCQkJCXBocFF1ZXJ5OjpjYWxsYmFja1J1bigkb3B0aW9uc1snc3VjY2VzcyddLCBhcnJheSgkZGF0YSwgJHJlc3BvbnNlLT5nZXRTdGF0dXMoKSwgJG9wdGlvbnMpKTsKCQkJaWYgKCRvcHRpb25zWydnbG9iYWwnXSkKCQkJCXBocFF1ZXJ5RXZlbnRzOjp0cmlnZ2VyKCRkb2N1bWVudElELCAnYWpheFN1Y2Nlc3MnLCBhcnJheSgkY2xpZW50LCAkb3B0aW9ucykpOwoJCX0gZWxzZSB7CgkJCWlmIChpc3NldCgkb3B0aW9uc1snZXJyb3InXSkgJiYgJG9wdGlvbnNbJ2Vycm9yJ10pCgkJCQlwaHBRdWVyeTo6Y2FsbGJhY2tSdW4oJG9wdGlvbnNbJ2Vycm9yJ10sIGFycmF5KCRjbGllbnQsICRyZXNwb25zZS0+Z2V0U3RhdHVzKCksICRyZXNwb25zZS0+Z2V0TWVzc2FnZSgpKSk7CgkJCWlmICgkb3B0aW9uc1snZ2xvYmFsJ10pCgkJCQlwaHBRdWVyeUV2ZW50czo6dHJpZ2dlcigkZG9jdW1lbnRJRCwgJ2FqYXhFcnJvcicsIGFycmF5KCRjbGllbnQsIC8qJHJlc3BvbnNlLT5nZXRTdGF0dXMoKSwqLyRyZXNwb25zZS0+Z2V0TWVzc2FnZSgpLCAkb3B0aW9ucykpOwoJCX0KCQlpZiAoaXNzZXQoJG9wdGlvbnNbJ2NvbXBsZXRlJ10pICYmICRvcHRpb25zWydjb21wbGV0ZSddKQoJCQlwaHBRdWVyeTo6Y2FsbGJhY2tSdW4oJG9wdGlvbnNbJ2NvbXBsZXRlJ10sIGFycmF5KCRjbGllbnQsICRyZXNwb25zZS0+Z2V0U3RhdHVzKCkpKTsKCQlpZiAoJG9wdGlvbnNbJ2dsb2JhbCddKQoJCQlwaHBRdWVyeUV2ZW50czo6dHJpZ2dlcigkZG9jdW1lbnRJRCwgJ2FqYXhDb21wbGV0ZScsIGFycmF5KCRjbGllbnQsICRvcHRpb25zKSk7CgkJaWYgKCRvcHRpb25zWydnbG9iYWwnXSAmJiAhIC0tc2VsZjo6JGFjdGl2ZSkKCQkJcGhwUXVlcnlFdmVudHM6OnRyaWdnZXIoJGRvY3VtZW50SUQsICdhamF4U3RvcCcpOwoJCXJldHVybiAkY2xpZW50OwovLwkJaWYgKGlzX251bGwoJGRvbUlkKSkKLy8JCQkkZG9tSWQgPSBzZWxmOjokZGVmYXVsdERvY3VtZW50SUQgPyBzZWxmOjokZGVmYXVsdERvY3VtZW50SUQgOiBmYWxzZTsKLy8JCXJldHVybiBuZXcgcGhwUXVlcnlBamF4UmVzcG9uc2UoJHJlc3BvbnNlLCAkZG9tSWQpOwoJfQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBodHRwRGF0YSgkZGF0YSwgJHR5cGUsICRvcHRpb25zKSB7CgkJaWYgKGlzc2V0KCRvcHRpb25zWydkYXRhRmlsdGVyJ10pICYmICRvcHRpb25zWydkYXRhRmlsdGVyJ10pCgkJCSRkYXRhID0gc2VsZjo6Y2FsbGJhY2tSdW4oJG9wdGlvbnNbJ2RhdGFGaWx0ZXInXSwgYXJyYXkoJGRhdGEsICR0eXBlKSk7CgkJaWYgKGlzX3N0cmluZygkZGF0YSkpIHsKCQkJaWYgKCR0eXBlID09ICJqc29uIikgewoJCQkJaWYgKGlzc2V0KCRvcHRpb25zWydfanNvbnAnXSkgJiYgJG9wdGlvbnNbJ19qc29ucCddKSB7CgkJCQkJJGRhdGEgPSBwcmVnX3JlcGxhY2UoJy9eXHMqXHcrXCgoLiopXClccyokL3MnLCAnJDEnLCAkZGF0YSk7CgkJCQl9CgkJCQkkZGF0YSA9IHNlbGY6OnBhcnNlSlNPTigkZGF0YSk7CgkJCX0KCQl9CgkJcmV0dXJuICRkYXRhOwoJfQoJLyoqCgkgKiBFbnRlciBkZXNjcmlwdGlvbiBoZXJlLi4uCgkgKgoJICogQHBhcmFtIGFycmF5fHBocFF1ZXJ5ICRkYXRhCgkgKgoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHBhcmFtKCRkYXRhKSB7CgkJcmV0dXJuIGh0dHBfYnVpbGRfcXVlcnkoJGRhdGEsIG51bGwsICcmJyk7Cgl9CglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldCgkdXJsLCAkZGF0YSA9IG51bGwsICRjYWxsYmFjayA9IG51bGwsICR0eXBlID0gbnVsbCkgewoJCWlmICghaXNfYXJyYXkoJGRhdGEpKSB7CgkJCSRjYWxsYmFjayA9ICRkYXRhOwoJCQkkZGF0YSA9IG51bGw7CgkJfQoJCS8vIFRPRE8gc29tZSBhcnJheV92YWx1ZXMgb24gdGhpcyBzaGl0CgkJcmV0dXJuIHBocFF1ZXJ5OjphamF4KGFycmF5KAoJCQkndHlwZScgPT4gJ0dFVCcsCgkJCSd1cmwnID0+ICR1cmwsCgkJCSdkYXRhJyA9PiAkZGF0YSwKCQkJJ3N1Y2Nlc3MnID0+ICRjYWxsYmFjaywKCQkJJ2RhdGFUeXBlJyA9PiAkdHlwZSwKCQkpKTsKCX0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcG9zdCgkdXJsLCAkZGF0YSA9IG51bGwsICRjYWxsYmFjayA9IG51bGwsICR0eXBlID0gbnVsbCkgewoJCWlmICghaXNfYXJyYXkoJGRhdGEpKSB7CgkJCSRjYWxsYmFjayA9ICRkYXRhOwoJCQkkZGF0YSA9IG51bGw7CgkJfQoJCXJldHVybiBwaHBRdWVyeTo6YWpheChhcnJheSgKCQkJJ3R5cGUnID0+ICdQT1NUJywKCQkJJ3VybCcgPT4gJHVybCwKCQkJJ2RhdGEnID0+ICRkYXRhLAoJCQknc3VjY2VzcycgPT4gJGNhbGxiYWNrLAoJCQknZGF0YVR5cGUnID0+ICR0eXBlLAoJCSkpOwoJfQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRKU09OKCR1cmwsICRkYXRhID0gbnVsbCwgJGNhbGxiYWNrID0gbnVsbCkgewoJCWlmICghaXNfYXJyYXkoJGRhdGEpKSB7CgkJCSRjYWxsYmFjayA9ICRkYXRhOwoJCQkkZGF0YSA9IG51bGw7CgkJfQoJCS8vIFRPRE8gc29tZSBhcnJheV92YWx1ZXMgb24gdGhpcyBzaGl0CgkJcmV0dXJuIHBocFF1ZXJ5OjphamF4KGFycmF5KAoJCQkndHlwZScgPT4gJ0dFVCcsCgkJCSd1cmwnID0+ICR1cmwsCgkJCSdkYXRhJyA9PiAkZGF0YSwKCQkJJ3N1Y2Nlc3MnID0+ICRjYWxsYmFjaywKCQkJJ2RhdGFUeXBlJyA9PiAnanNvbicsCgkJKSk7Cgl9CglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGFqYXhTZXR1cCgkb3B0aW9ucykgewoJCXNlbGY6OiRhamF4U2V0dGluZ3MgPSBhcnJheV9tZXJnZSgKCQkJc2VsZjo6JGFqYXhTZXR0aW5ncywKCQkJJG9wdGlvbnMKCQkpOwoJfQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBhamF4QWxsb3dIb3N0KCRob3N0MSwgJGhvc3QyID0gbnVsbCwgJGhvc3QzID0gbnVsbCkgewoJCSRsb29wID0gaXNfYXJyYXkoJGhvc3QxKQoJCQk/ICRob3N0MQoJCQk6IGZ1bmNfZ2V0X2FyZ3MoKTsKCQlmb3JlYWNoKCRsb29wIGFzICRob3N0KSB7CgkJCWlmICgkaG9zdCAmJiAhIGluX2FycmF5KCRob3N0LCBwaHBRdWVyeTo6JGFqYXhBbGxvd2VkSG9zdHMpKSB7CgkJCQlwaHBRdWVyeTo6JGFqYXhBbGxvd2VkSG9zdHNbXSA9ICRob3N0OwoJCQl9CgkJfQoJfQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBhamF4QWxsb3dVUkwoJHVybDEsICR1cmwyID0gbnVsbCwgJHVybDMgPSBudWxsKSB7CgkJJGxvb3AgPSBpc19hcnJheSgkdXJsMSkKCQkJPyAkdXJsMQoJCQk6IGZ1bmNfZ2V0X2FyZ3MoKTsKCQlmb3JlYWNoKCRsb29wIGFzICR1cmwpCgkJCXBocFF1ZXJ5OjphamF4QWxsb3dIb3N0KHBhcnNlX3VybCgkdXJsLCBQSFBfVVJMX0hPU1QpKTsKCX0KCS8qKgoJICogUmV0dXJucyBKU09OIHJlcHJlc2VudGF0aW9uIG9mICRkYXRhLgoJICoKCSAqIEBzdGF0aWMKCSAqIEBwYXJhbSBtaXhlZCAkZGF0YQoJICogQHJldHVybiBzdHJpbmcKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiB0b0pTT04oJGRhdGEpIHsKCQlpZiAoZnVuY3Rpb25fZXhpc3RzKCdqc29uX2VuY29kZScpKQoJCQlyZXR1cm4ganNvbl9lbmNvZGUoJGRhdGEpOwoJCXJlcXVpcmVfb25jZSgnWmVuZC9Kc29uL0VuY29kZXIucGhwJyk7CgkJcmV0dXJuIFplbmRfSnNvbl9FbmNvZGVyOjplbmNvZGUoJGRhdGEpOwoJfQoJLyoqCgkgKiBQYXJzZXMgSlNPTiBpbnRvIHByb3BlciBQSFAgdHlwZS4KCSAqCgkgKiBAc3RhdGljCgkgKiBAcGFyYW0gc3RyaW5nICRqc29uCgkgKiBAcmV0dXJuIG1peGVkCgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcGFyc2VKU09OKCRqc29uKSB7CgkJaWYgKGZ1bmN0aW9uX2V4aXN0cygnanNvbl9kZWNvZGUnKSkgewoJCQkkcmV0dXJuID0ganNvbl9kZWNvZGUodHJpbSgkanNvbiksIHRydWUpOwoJCQkvLyBqc29uX2RlY29kZSBhbmQgVVRGOCBpc3N1ZXMKCQkJaWYgKGlzc2V0KCRyZXR1cm4pKQoJCQkJcmV0dXJuICRyZXR1cm47CgkJfQoJCXJlcXVpcmVfb25jZSgnWmVuZC9Kc29uL0RlY29kZXIucGhwJyk7CgkJcmV0dXJuIFplbmRfSnNvbl9EZWNvZGVyOjpkZWNvZGUoJGpzb24pOwoJfQoJLyoqCgkgKiBSZXR1cm5zIHNvdXJjZSdzIGRvY3VtZW50IElELgoJICoKCSAqIEBwYXJhbSAkc291cmNlIERPTU5vZGV8cGhwUXVlcnlPYmplY3QKCSAqIEByZXR1cm4gc3RyaW5nCgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0RG9jdW1lbnRJRCgkc291cmNlKSB7CgkJaWYgKCRzb3VyY2UgaW5zdGFuY2VvZiBET01ET0NVTUVOVCkgewoJCQlmb3JlYWNoKHBocFF1ZXJ5OjokZG9jdW1lbnRzIGFzICRpZCA9PiAkZG9jdW1lbnQpIHsKCQkJCWlmICgkc291cmNlLT5pc1NhbWVOb2RlKCRkb2N1bWVudC0+ZG9jdW1lbnQpKQoJCQkJCXJldHVybiAkaWQ7CgkJCX0KCQl9IGVsc2UgaWYgKCRzb3VyY2UgaW5zdGFuY2VvZiBET01OT0RFKSB7CgkJCWZvcmVhY2gocGhwUXVlcnk6OiRkb2N1bWVudHMgYXMgJGlkID0+ICRkb2N1bWVudCkgewoJCQkJaWYgKCRzb3VyY2UtPm93bmVyRG9jdW1lbnQtPmlzU2FtZU5vZGUoJGRvY3VtZW50LT5kb2N1bWVudCkpCgkJCQkJcmV0dXJuICRpZDsKCQkJfQoJCX0gZWxzZSBpZiAoJHNvdXJjZSBpbnN0YW5jZW9mIHBocFF1ZXJ5T2JqZWN0KQoJCQlyZXR1cm4gJHNvdXJjZS0+Z2V0RG9jdW1lbnRJRCgpOwoJCWVsc2UgaWYgKGlzX3N0cmluZygkc291cmNlKSAmJiBpc3NldChwaHBRdWVyeTo6JGRvY3VtZW50c1skc291cmNlXSkpCgkJCXJldHVybiAkc291cmNlOwoJfQoJLyoqCgkgKiBHZXQgRE9NRG9jdW1lbnQgb2JqZWN0IHJlbGF0ZWQgdG8gJHNvdXJjZS4KCSAqIFJldHVybnMgbnVsbCBpZiBzdWNoIGRvY3VtZW50IGRvZXNuJ3QgZXhpc3QuCgkgKgoJICogQHBhcmFtICRzb3VyY2UgRE9NTm9kZXxwaHBRdWVyeU9iamVjdHxzdHJpbmcKCSAqIEByZXR1cm4gc3RyaW5nCgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0RE9NRG9jdW1lbnQoJHNvdXJjZSkgewoJCWlmICgkc291cmNlIGluc3RhbmNlb2YgRE9NRE9DVU1FTlQpCgkJCXJldHVybiAkc291cmNlOwoJCSRzb3VyY2UgPSBzZWxmOjpnZXREb2N1bWVudElEKCRzb3VyY2UpOwoJCXJldHVybiAkc291cmNlCgkJCT8gc2VsZjo6JGRvY3VtZW50c1skaWRdWydkb2N1bWVudCddCgkJCTogbnVsbDsKCX0KCgkvLyBVVElMSVRJRVMKCS8vIGh0dHA6Ly9kb2NzLmpxdWVyeS5jb20vVXRpbGl0aWVzCgoJLyoqCgkgKgoJICogQHJldHVybiB1bmtub3duX3R5cGUKCSAqIEBsaW5rIGh0dHA6Ly9kb2NzLmpxdWVyeS5jb20vVXRpbGl0aWVzL2pRdWVyeS5tYWtlQXJyYXkKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBtYWtlQXJyYXkoJG9iaikgewoJCSRhcnJheSA9IGFycmF5KCk7CgkJaWYgKGlzX29iamVjdCgkb2JqZWN0KSAmJiAkb2JqZWN0IGluc3RhbmNlb2YgRE9NTk9ERUxJU1QpIHsKCQkJZm9yZWFjaCgkb2JqZWN0IGFzICR2YWx1ZSkKCQkJCSRhcnJheVtdID0gJHZhbHVlOwoJCX0gZWxzZSBpZiAoaXNfb2JqZWN0KCRvYmplY3QpICYmICEgKCRvYmplY3QgaW5zdGFuY2VvZiBJdGVyYXRvcikpIHsKCQkJZm9yZWFjaChnZXRfb2JqZWN0X3ZhcnMoJG9iamVjdCkgYXMgJG5hbWUgPT4gJHZhbHVlKQoJCQkJJGFycmF5WzBdWyRuYW1lXSA9ICR2YWx1ZTsKCQl9IGVsc2UgewoJCQlmb3JlYWNoKCRvYmplY3QgYXMgJG5hbWUgPT4gJHZhbHVlKQoJCQkJJGFycmF5WzBdWyRuYW1lXSA9ICR2YWx1ZTsKCQl9CgkJcmV0dXJuICRhcnJheTsKCX0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaW5BcnJheSgkdmFsdWUsICRhcnJheSkgewoJCXJldHVybiBpbl9hcnJheSgkdmFsdWUsICRhcnJheSk7Cgl9CgkvKioKCSAqCgkgKiBAcGFyYW0gJG9iamVjdAoJICogQHBhcmFtICRjYWxsYmFjawoJICogQHJldHVybiB1bmtub3duX3R5cGUKCSAqIEBsaW5rIGh0dHA6Ly9kb2NzLmpxdWVyeS5jb20vVXRpbGl0aWVzL2pRdWVyeS5lYWNoCgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZWFjaCgkb2JqZWN0LCAkY2FsbGJhY2ssICRwYXJhbTEgPSBudWxsLCAkcGFyYW0yID0gbnVsbCwgJHBhcmFtMyA9IG51bGwpIHsKCQkkcGFyYW1TdHJ1Y3R1cmUgPSBudWxsOwoJCWlmIChmdW5jX251bV9hcmdzKCkgPiAyKSB7CgkJCSRwYXJhbVN0cnVjdHVyZSA9IGZ1bmNfZ2V0X2FyZ3MoKTsKCQkJJHBhcmFtU3RydWN0dXJlID0gYXJyYXlfc2xpY2UoJHBhcmFtU3RydWN0dXJlLCAyKTsKCQl9CgkJaWYgKGlzX29iamVjdCgkb2JqZWN0KSAmJiAhICgkb2JqZWN0IGluc3RhbmNlb2YgSXRlcmF0b3IpKSB7CgkJCWZvcmVhY2goZ2V0X29iamVjdF92YXJzKCRvYmplY3QpIGFzICRuYW1lID0+ICR2YWx1ZSkKCQkJCXBocFF1ZXJ5OjpjYWxsYmFja1J1bigkY2FsbGJhY2ssIGFycmF5KCRuYW1lLCAkdmFsdWUpLCAkcGFyYW1TdHJ1Y3R1cmUpOwoJCX0gZWxzZSB7CgkJCWZvcmVhY2goJG9iamVjdCBhcyAkbmFtZSA9PiAkdmFsdWUpCgkJCQlwaHBRdWVyeTo6Y2FsbGJhY2tSdW4oJGNhbGxiYWNrLCBhcnJheSgkbmFtZSwgJHZhbHVlKSwgJHBhcmFtU3RydWN0dXJlKTsKCQl9Cgl9CgkvKioKCSAqCgkgKiBAbGluayBodHRwOi8vZG9jcy5qcXVlcnkuY29tL1V0aWxpdGllcy9qUXVlcnkubWFwCgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbWFwKCRhcnJheSwgJGNhbGxiYWNrLCAkcGFyYW0xID0gbnVsbCwgJHBhcmFtMiA9IG51bGwsICRwYXJhbTMgPSBudWxsKSB7CgkJJHJlc3VsdCA9IGFycmF5KCk7CgkJJHBhcmFtU3RydWN0dXJlID0gbnVsbDsKCQlpZiAoZnVuY19udW1fYXJncygpID4gMikgewoJCQkkcGFyYW1TdHJ1Y3R1cmUgPSBmdW5jX2dldF9hcmdzKCk7CgkJCSRwYXJhbVN0cnVjdHVyZSA9IGFycmF5X3NsaWNlKCRwYXJhbVN0cnVjdHVyZSwgMik7CgkJfQoJCWZvcmVhY2goJGFycmF5IGFzICR2KSB7CgkJCSR2diA9IHBocFF1ZXJ5OjpjYWxsYmFja1J1bigkY2FsbGJhY2ssIGFycmF5KCR2KSwgJHBhcmFtU3RydWN0dXJlKTsKLy8JCQkkY2FsbGJhY2tBcmdzID0gJGFyZ3M7Ci8vCQkJZm9yZWFjaCgkYXJncyBhcyAkaSA9PiAkYXJnKSB7Ci8vCQkJCSRjYWxsYmFja0FyZ3NbJGldID0gJGFyZyBpbnN0YW5jZW9mIENhbGxiYWNrUGFyYW0KLy8JCQkJCT8gJHYKLy8JCQkJCTogJGFyZzsKLy8JCQl9Ci8vCQkJJHZ2ID0gY2FsbF91c2VyX2Z1bmNfYXJyYXkoJGNhbGxiYWNrLCAkY2FsbGJhY2tBcmdzKTsKCQkJaWYgKGlzX2FycmF5KCR2dikpICB7CgkJCQlmb3JlYWNoKCR2diBhcyAkdnZ2KQoJCQkJCSRyZXN1bHRbXSA9ICR2dnY7CgkJCX0gZWxzZSBpZiAoJHZ2ICE9PSBudWxsKSB7CgkJCQkkcmVzdWx0W10gPSAkdnY7CgkJCX0KCQl9CgkJcmV0dXJuICRyZXN1bHQ7Cgl9CgkvKioKCSAqCgkgKiBAcGFyYW0gJGNhbGxiYWNrIENhbGxiYWNrCgkgKiBAcGFyYW0gJHBhcmFtcwoJICogQHBhcmFtICRwYXJhbVN0cnVjdHVyZQoJICogQHJldHVybiB1bmtub3duX3R5cGUKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjYWxsYmFja1J1bigkY2FsbGJhY2ssICRwYXJhbXMgPSBhcnJheSgpLCAkcGFyYW1TdHJ1Y3R1cmUgPSBudWxsKSB7CgkJaWYgKCEgJGNhbGxiYWNrKQoJCQlyZXR1cm47CgkJaWYgKCRjYWxsYmFjayBpbnN0YW5jZW9mIENhbGxiYWNrUGFyYW1ldGVyVG9SZWZlcmVuY2UpIHsKCQkJLy8gVE9ETyBzdXBwb3J0IFBhcmFtU3RydWN0dXJlIHRvIHNlbGVjdCB3aGljaCAkcGFyYW0gcHVzaCB0byByZWZlcmVuY2UKCQkJaWYgKGlzc2V0KCRwYXJhbXNbMF0pKQoJCQkJJGNhbGxiYWNrLT5jYWxsYmFjayA9ICRwYXJhbXNbMF07CgkJCXJldHVybiB0cnVlOwoJCX0KCQlpZiAoJGNhbGxiYWNrIGluc3RhbmNlb2YgQ2FsbGJhY2spIHsKCQkJJHBhcmFtU3RydWN0dXJlID0gJGNhbGxiYWNrLT5wYXJhbXM7CgkJCSRjYWxsYmFjayA9ICRjYWxsYmFjay0+Y2FsbGJhY2s7CgkJfQoJCWlmICghICRwYXJhbVN0cnVjdHVyZSkKCQkJcmV0dXJuIGNhbGxfdXNlcl9mdW5jX2FycmF5KCRjYWxsYmFjaywgJHBhcmFtcyk7CgkJJHAgPSAwOwoJCWZvcmVhY2goJHBhcmFtU3RydWN0dXJlIGFzICRpID0+ICR2KSB7CgkJCSRwYXJhbVN0cnVjdHVyZVskaV0gPSAkdiBpbnN0YW5jZW9mIENhbGxiYWNrUGFyYW0KCQkJCT8gJHBhcmFtc1skcCsrXQoJCQkJOiAkdjsKCQl9CgkJcmV0dXJuIGNhbGxfdXNlcl9mdW5jX2FycmF5KCRjYWxsYmFjaywgJHBhcmFtU3RydWN0dXJlKTsKCX0KCS8qKgoJICogTWVyZ2UgMiBwaHBRdWVyeSBvYmplY3RzLgoJICogQHBhcmFtIGFycmF5ICRvbmUKCSAqIEBwYXJhbSBhcnJheSAkdHdvCgkgKiBAcHJvdGVjdGVkCgkgKiBAdG9kbyBub2RlIGxpc3RzLCBwaHBRdWVyeU9iamVjdAoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG1lcmdlKCRvbmUsICR0d28pIHsKCQkkZWxlbWVudHMgPSAkb25lLT5lbGVtZW50czsKCQlmb3JlYWNoKCR0d28tPmVsZW1lbnRzIGFzICRub2RlKSB7CgkJCSRleGlzdHMgPSBmYWxzZTsKCQkJZm9yZWFjaCgkZWxlbWVudHMgYXMgJG5vZGUyKSB7CgkJCQlpZiAoJG5vZGUyLT5pc1NhbWVOb2RlKCRub2RlKSkKCQkJCQkkZXhpc3RzID0gdHJ1ZTsKCQkJfQoJCQlpZiAoISAkZXhpc3RzKQoJCQkJJGVsZW1lbnRzW10gPSAkbm9kZTsKCQl9CgkJcmV0dXJuICRlbGVtZW50czsKLy8JCSRvbmUgPSAkb25lLT5uZXdJbnN0YW5jZSgpOwovLwkJJG9uZS0+ZWxlbWVudHMgPSAkZWxlbWVudHM7Ci8vCQlyZXR1cm4gJG9uZTsKCX0KCS8qKgoJICoKCSAqIEBwYXJhbSAkYXJyYXkKCSAqIEBwYXJhbSAkY2FsbGJhY2sKCSAqIEBwYXJhbSAkaW52ZXJ0CgkgKiBAcmV0dXJuIHVua25vd25fdHlwZQoJICogQGxpbmsgaHR0cDovL2RvY3MuanF1ZXJ5LmNvbS9VdGlsaXRpZXMvalF1ZXJ5LmdyZXAKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBncmVwKCRhcnJheSwgJGNhbGxiYWNrLCAkaW52ZXJ0ID0gZmFsc2UpIHsKCQkkcmVzdWx0ID0gYXJyYXkoKTsKCQlmb3JlYWNoKCRhcnJheSBhcyAkayA9PiAkdikgewoJCQkkciA9IGNhbGxfdXNlcl9mdW5jX2FycmF5KCRjYWxsYmFjaywgYXJyYXkoJHYsICRrKSk7CgkJCWlmICgkciA9PT0gIShib29sKSRpbnZlcnQpCgkJCQkkcmVzdWx0W10gPSAkdjsKCQl9CgkJcmV0dXJuICRyZXN1bHQ7Cgl9CglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHVuaXF1ZSgkYXJyYXkpIHsKCQlyZXR1cm4gYXJyYXlfdW5pcXVlKCRhcnJheSk7Cgl9CgkvKioKCSAqCgkgKiBAcGFyYW0gJGZ1bmN0aW9uCgkgKiBAcmV0dXJuIHVua25vd25fdHlwZQoJICogQFRPRE8gdGhlcmUgYXJlIHByb2JsZW1zIHdpdGggbm9uLXN0YXRpYyBtZXRob2RzLCBzZWNvbmQgcGFyYW1ldGVyIHBhc3MgaXQKCSAqIAlidXQgZG9lc250IHZlcmlmeSBpcyBtZXRob2QgaXMgcmVhbGx5IGNhbGxhYmxlCgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaXNGdW5jdGlvbigkZnVuY3Rpb24pIHsKCQlyZXR1cm4gaXNfY2FsbGFibGUoJGZ1bmN0aW9uKTsKCX0KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdHJpbSgkc3RyKSB7CgkJcmV0dXJuIHRyaW0oJHN0cik7Cgl9CgkvKiBQTFVHSU5TIE5BTUVTUEFDRSAqLwoJLyoqCgkgKgoJICogQHBhcmFtICR1cmwKCSAqIEBwYXJhbSAkY2FsbGJhY2sKCSAqIEBwYXJhbSAkcGFyYW0xCgkgKiBAcGFyYW0gJHBhcmFtMgoJICogQHBhcmFtICRwYXJhbTMKCSAqIEByZXR1cm4gcGhwUXVlcnlPYmplY3QKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBicm93c2VyR2V0KCR1cmwsICRjYWxsYmFjaywgJHBhcmFtMSA9IG51bGwsICRwYXJhbTIgPSBudWxsLCAkcGFyYW0zID0gbnVsbCkgewoJCWlmIChzZWxmOjpwbHVnaW4oJ1dlYkJyb3dzZXInKSkgewoJCQkkcGFyYW1zID0gZnVuY19nZXRfYXJncygpOwoJCQlyZXR1cm4gc2VsZjo6Y2FsbGJhY2tSdW4oYXJyYXkoc2VsZjo6JHBsdWdpbnMsICdicm93c2VyR2V0JyksICRwYXJhbXMpOwoJCX0gZWxzZSB7CgkJCXNlbGY6OmRlYnVnKCdXZWJCcm93c2VyIHBsdWdpbiBub3QgYXZhaWxhYmxlLi4uJyk7CgkJfQoJfQoJLyoqCgkgKgoJICogQHBhcmFtICR1cmwKCSAqIEBwYXJhbSAkZGF0YQoJICogQHBhcmFtICRjYWxsYmFjawoJICogQHBhcmFtICRwYXJhbTEKCSAqIEBwYXJhbSAkcGFyYW0yCgkgKiBAcGFyYW0gJHBhcmFtMwoJICogQHJldHVybiBwaHBRdWVyeU9iamVjdAoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGJyb3dzZXJQb3N0KCR1cmwsICRkYXRhLCAkY2FsbGJhY2ssICRwYXJhbTEgPSBudWxsLCAkcGFyYW0yID0gbnVsbCwgJHBhcmFtMyA9IG51bGwpIHsKCQlpZiAoc2VsZjo6cGx1Z2luKCdXZWJCcm93c2VyJykpIHsKCQkJJHBhcmFtcyA9IGZ1bmNfZ2V0X2FyZ3MoKTsKCQkJcmV0dXJuIHNlbGY6OmNhbGxiYWNrUnVuKGFycmF5KHNlbGY6OiRwbHVnaW5zLCAnYnJvd3NlclBvc3QnKSwgJHBhcmFtcyk7CgkJfSBlbHNlIHsKCQkJc2VsZjo6ZGVidWcoJ1dlYkJyb3dzZXIgcGx1Z2luIG5vdCBhdmFpbGFibGUuLi4nKTsKCQl9Cgl9CgkvKioKCSAqCgkgKiBAcGFyYW0gJGFqYXhTZXR0aW5ncwoJICogQHBhcmFtICRjYWxsYmFjawoJICogQHBhcmFtICRwYXJhbTEKCSAqIEBwYXJhbSAkcGFyYW0yCgkgKiBAcGFyYW0gJHBhcmFtMwoJICogQHJldHVybiBwaHBRdWVyeU9iamVjdAoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGJyb3dzZXIoJGFqYXhTZXR0aW5ncywgJGNhbGxiYWNrLCAkcGFyYW0xID0gbnVsbCwgJHBhcmFtMiA9IG51bGwsICRwYXJhbTMgPSBudWxsKSB7CgkJaWYgKHNlbGY6OnBsdWdpbignV2ViQnJvd3NlcicpKSB7CgkJCSRwYXJhbXMgPSBmdW5jX2dldF9hcmdzKCk7CgkJCXJldHVybiBzZWxmOjpjYWxsYmFja1J1bihhcnJheShzZWxmOjokcGx1Z2lucywgJ2Jyb3dzZXInKSwgJHBhcmFtcyk7CgkJfSBlbHNlIHsKCQkJc2VsZjo6ZGVidWcoJ1dlYkJyb3dzZXIgcGx1Z2luIG5vdCBhdmFpbGFibGUuLi4nKTsKCQl9Cgl9CgkvKioKCSAqCgkgKiBAcGFyYW0gJGNvZGUKCSAqIEByZXR1cm4gc3RyaW5nCgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcGhwKCRjb2RlKSB7CgkJcmV0dXJuIHNlbGY6OmNvZGUoJ3BocCcsICRjb2RlKTsKCX0KCS8qKgoJICoKCSAqIEBwYXJhbSAkdHlwZQoJICogQHBhcmFtICRjb2RlCgkgKiBAcmV0dXJuIHN0cmluZwoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNvZGUoJHR5cGUsICRjb2RlKSB7CgkJcmV0dXJuICI8JHR5cGU+PCEtLSAiLnRyaW0oJGNvZGUpLiIgLS0+PC8kdHlwZT4iOwoJfQoKCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gX19jYWxsU3RhdGljKCRtZXRob2QsICRwYXJhbXMpIHsKCQlyZXR1cm4gY2FsbF91c2VyX2Z1bmNfYXJyYXkoCgkJCWFycmF5KHBocFF1ZXJ5OjokcGx1Z2lucywgJG1ldGhvZCksCgkJCSRwYXJhbXMKCQkpOwoJfQoJcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBkYXRhU2V0dXBOb2RlKCRub2RlLCAkZG9jdW1lbnRJRCkgewoJCS8vIHNlYXJjaCBhcmUgcmV0dXJuIGlmIGFscmVkeSBleGlzdHMKCQlmb3JlYWNoKHBocFF1ZXJ5OjokZG9jdW1lbnRzWyRkb2N1bWVudElEXS0+ZGF0YU5vZGVzIGFzICRkYXRhTm9kZSkgewoJCQlpZiAoJG5vZGUtPmlzU2FtZU5vZGUoJGRhdGFOb2RlKSkKCQkJCXJldHVybiAkZGF0YU5vZGU7CgkJfQoJCS8vIGlmIGRvZXNuJ3QsIGFkZCBpdAoJCXBocFF1ZXJ5OjokZG9jdW1lbnRzWyRkb2N1bWVudElEXS0+ZGF0YU5vZGVzW10gPSAkbm9kZTsKCQlyZXR1cm4gJG5vZGU7Cgl9Cglwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIGRhdGFSZW1vdmVOb2RlKCRub2RlLCAkZG9jdW1lbnRJRCkgewoJCS8vIHNlYXJjaCBhcmUgcmV0dXJuIGlmIGFscmVkeSBleGlzdHMKCQlmb3JlYWNoKHBocFF1ZXJ5OjokZG9jdW1lbnRzWyRkb2N1bWVudElEXS0+ZGF0YU5vZGVzIGFzICRrID0+ICRkYXRhTm9kZSkgewoJCQlpZiAoJG5vZGUtPmlzU2FtZU5vZGUoJGRhdGFOb2RlKSkgewoJCQkJdW5zZXQoc2VsZjo6JGRvY3VtZW50c1skZG9jdW1lbnRJRF0tPmRhdGFOb2Rlc1ska10pOwoJCQkJdW5zZXQoc2VsZjo6JGRvY3VtZW50c1skZG9jdW1lbnRJRF0tPmRhdGFbICRkYXRhTm9kZS0+ZGF0YUlEIF0pOwoJCQl9CgkJfQoJfQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkYXRhKCRub2RlLCAkbmFtZSwgJGRhdGEsICRkb2N1bWVudElEID0gbnVsbCkgewoJCWlmICghICRkb2N1bWVudElEKQoJCQkvLyBUT0RPIGNoZWNrIGlmIHRoaXMgd29ya3MKCQkJJGRvY3VtZW50SUQgPSBzZWxmOjpnZXREb2N1bWVudElEKCRub2RlKTsKCQkkZG9jdW1lbnQgPSBwaHBRdWVyeTo6JGRvY3VtZW50c1skZG9jdW1lbnRJRF07CgkJJG5vZGUgPSBzZWxmOjpkYXRhU2V0dXBOb2RlKCRub2RlLCAkZG9jdW1lbnRJRCk7CgkJaWYgKCEgaXNzZXQoJG5vZGUtPmRhdGFJRCkpCgkJCSRub2RlLT5kYXRhSUQgPSArK3BocFF1ZXJ5OjokZG9jdW1lbnRzWyRkb2N1bWVudElEXS0+dXVpZDsKCQkkaWQgPSAkbm9kZS0+ZGF0YUlEOwoJCWlmICghIGlzc2V0KCRkb2N1bWVudC0+ZGF0YVskaWRdKSkKCQkJJGRvY3VtZW50LT5kYXRhWyRpZF0gPSBhcnJheSgpOwoJCWlmICghIGlzX251bGwoJGRhdGEpKQoJCQkkZG9jdW1lbnQtPmRhdGFbJGlkXVskbmFtZV0gPSAkZGF0YTsKCQlpZiAoJG5hbWUpIHsKCQkJaWYgKGlzc2V0KCRkb2N1bWVudC0+ZGF0YVskaWRdWyRuYW1lXSkpCgkJCQlyZXR1cm4gJGRvY3VtZW50LT5kYXRhWyRpZF1bJG5hbWVdOwoJCX0gZWxzZQoJCQlyZXR1cm4gJGlkOwoJfQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZW1vdmVEYXRhKCRub2RlLCAkbmFtZSwgJGRvY3VtZW50SUQpIHsKCQlpZiAoISAkZG9jdW1lbnRJRCkKCQkJLy8gVE9ETyBjaGVjayBpZiB0aGlzIHdvcmtzCgkJCSRkb2N1bWVudElEID0gc2VsZjo6Z2V0RG9jdW1lbnRJRCgkbm9kZSk7CgkJJGRvY3VtZW50ID0gcGhwUXVlcnk6OiRkb2N1bWVudHNbJGRvY3VtZW50SURdOwoJCSRub2RlID0gc2VsZjo6ZGF0YVNldHVwTm9kZSgkbm9kZSwgJGRvY3VtZW50SUQpOwoJCSRpZCA9ICRub2RlLT5kYXRhSUQ7CgkJaWYgKCRuYW1lKSB7CgkJCWlmIChpc3NldCgkZG9jdW1lbnQtPmRhdGFbJGlkXVskbmFtZV0pKQoJCQkJdW5zZXQoJGRvY3VtZW50LT5kYXRhWyRpZF1bJG5hbWVdKTsKCQkJJG5hbWUgPSBudWxsOwoJCQlmb3JlYWNoKCRkb2N1bWVudC0+ZGF0YVskaWRdIGFzICRuYW1lKQoJCQkJYnJlYWs7CgkJCWlmICghICRuYW1lKQoJCQkJc2VsZjo6cmVtb3ZlRGF0YSgkbm9kZSwgJG5hbWUsICRkb2N1bWVudElEKTsKCQl9IGVsc2UgewoJCQlzZWxmOjpkYXRhUmVtb3ZlTm9kZSgkbm9kZSwgJGRvY3VtZW50SUQpOwoJCX0KCX0KfQovKioKICogUGx1Z2lucyBzdGF0aWMgbmFtZXNwYWNlIGNsYXNzLgogKgogKiBAYXV0aG9yIFRvYmlhc3ogQ3VkbmlrIDx0b2JpYXN6LmN1ZG5pay9nbWFpbC5jb20+CiAqIEBwYWNrYWdlIHBocFF1ZXJ5CiAqIEB0b2RvIG1vdmUgcGx1Z2luIG1ldGhvZHMgaGVyZSAoYXMgc3RhdGljcykKICovCmNsYXNzIHBocFF1ZXJ5UGx1Z2lucyB7CglwdWJsaWMgZnVuY3Rpb24gX19jYWxsKCRtZXRob2QsICRhcmdzKSB7CgkJaWYgKGlzc2V0KHBocFF1ZXJ5OjokZXh0ZW5kU3RhdGljTWV0aG9kc1skbWV0aG9kXSkpIHsKCQkJJHJldHVybiA9IGNhbGxfdXNlcl9mdW5jX2FycmF5KAoJCQkJcGhwUXVlcnk6OiRleHRlbmRTdGF0aWNNZXRob2RzWyRtZXRob2RdLAoJCQkJJGFyZ3MKCQkJKTsKCQl9IGVsc2UgaWYgKGlzc2V0KHBocFF1ZXJ5OjokcGx1Z2luc1N0YXRpY01ldGhvZHNbJG1ldGhvZF0pKSB7CgkJCSRjbGFzcyA9IHBocFF1ZXJ5OjokcGx1Z2luc1N0YXRpY01ldGhvZHNbJG1ldGhvZF07CgkJCSRyZWFsQ2xhc3MgPSAicGhwUXVlcnlQbHVnaW5fJGNsYXNzIjsKCQkJJHJldHVybiA9IGNhbGxfdXNlcl9mdW5jX2FycmF5KAoJCQkJYXJyYXkoJHJlYWxDbGFzcywgJG1ldGhvZCksCgkJCQkkYXJncwoJCQkpOwoJCQlyZXR1cm4gaXNzZXQoJHJldHVybikKCQkJCT8gJHJldHVybgoJCQkJOiAkdGhpczsKCQl9IGVsc2UKCQkJdGhyb3cgbmV3IEV4Y2VwdGlvbigiTWV0aG9kICd7JG1ldGhvZH0nIGRvZXNudCBleGlzdCIpOwoJfQp9Ci8qKgogKiBTaG9ydGN1dCB0byBwaHBRdWVyeTo6cHEoJGFyZzEsICRjb250ZXh0KQogKiBDaGFpbmFibGUuCiAqCiAqIEBzZWUgcGhwUXVlcnk6OnBxKCkKICogQHJldHVybiBwaHBRdWVyeU9iamVjdHxRdWVyeVRlbXBsYXRlc1NvdXJjZXxRdWVyeVRlbXBsYXRlc1BhcnNlfFF1ZXJ5VGVtcGxhdGVzU291cmNlUXVlcnkKICogQGF1dGhvciBUb2JpYXN6IEN1ZG5payA8dG9iaWFzei5jdWRuaWsvZ21haWwuY29tPgogKiBAcGFja2FnZSBwaHBRdWVyeQogKi8KZnVuY3Rpb24gcHEoJGFyZzEsICRjb250ZXh0ID0gbnVsbCkgewoJJGFyZ3MgPSBmdW5jX2dldF9hcmdzKCk7CglyZXR1cm4gY2FsbF91c2VyX2Z1bmNfYXJyYXkoCgkJYXJyYXkoJ3BocFF1ZXJ5JywgJ3BxJyksCgkJJGFyZ3MKCSk7Cn0KLy8gYWRkIHBsdWdpbnMgZGlyIGFuZCBaZW5kIGZyYW1ld29yayB0byBpbmNsdWRlIHBhdGgKc2V0X2luY2x1ZGVfcGF0aCgKCWdldF9pbmNsdWRlX3BhdGgoKQoJCS5QQVRIX1NFUEFSQVRPUi5kaXJuYW1lKF9fRklMRV9fKS4nL3BocFF1ZXJ5LycKCQkuUEFUSF9TRVBBUkFUT1IuZGlybmFtZShfX0ZJTEVfXykuJy9waHBRdWVyeS9wbHVnaW5zLycKKTsKLy8gd2h5ID8gbm8gX19jYWxsIG5vciBfX2dldCBmb3Igc3RhdGljcyBpbiBwaHAuLi4KLy8gWFhYIF9fY2FsbFN0YXRpYyB3aWxsIGJlIGF2YWlsYWJsZSBpbiBQSFAgNS4zCnBocFF1ZXJ5OjokcGx1Z2lucyA9IG5ldyBwaHBRdWVyeVBsdWdpbnMoKTsKLy8gaW5jbHVkZSBib290c3RyYXAgZmlsZSAocGVyc29uYWwgbGlicmFyeSBjb25maWcpCmlmIChmaWxlX2V4aXN0cyhkaXJuYW1lKF9fRklMRV9fKS4nL3BocFF1ZXJ5L2Jvb3RzdHJhcC5waHAnKSkKCXJlcXVpcmVfb25jZSBkaXJuYW1lKF9fRklMRV9fKS4nL3BocFF1ZXJ5L2Jvb3RzdHJhcC5waHAnOwo=AppDevTools/query/vendor/jaeger/querylist/.gitignoreL3ZlbmRvci8KLmlkZWEvCmNvbXBvc2VyLmxvY2sKLkRTX1N0b3JlAppDevTools/query/vendor/jaeger/querylist/README-ZH.mdPHAgYWxpZ249ImNlbnRlciI+CiAgPGltZyB3aWR0aD0iMTUwIiBzcmM9ImxvZ28ucG5nIiBhbHQ9IlF1ZXJ5TGlzdCI+CiAgPGJyPgogIDxicj4KPC9wPgoKIyBRdWVyeUxpc3QgIOeugOS7iwpgUXVlcnlMaXN0YOaYr+S4gOWll+eugOa0geOAgeS8mOmbheOAgeWPr+aJqeWxleeahFBIUOmHh+mbhuW3peWFtyjniKzomasp77yM5Z+65LqOcGhwUXVlcnnjgIIKCiMjIOeJueaApwotIOaLpeacieS4jmpRdWVyeeWujOWFqOebuOWQjOeahENTUzMgRE9N6YCJ5oup5ZmoCi0g5oul5pyJ5LiOalF1ZXJ55a6M5YWo55u45ZCM55qERE9N5pON5L2cQVBJCi0g5oul5pyJ6YCa55So55qE5YiX6KGo6YeH6ZuG5pa55qGICi0g5oul5pyJ5by65aSn55qESFRUUOivt+axguWll+S7tu+8jOi9u+advuWunueOsOWmgu+8muaooeaLn+eZu+mZhuOAgeS8qumAoOa1j+iniOWZqOOAgUhUVFDku6PnkIbnrYnmhI/lpI3mnYLnmoTnvZHnu5zor7fmsYIKLSDmi6XmnInkubHnoIHop6PlhrPmlrnmoYgKLSDmi6XmnInlvLrlpKfnmoTlhoXlrrnov4fmu6Tlip/og73vvIzlj6/kvb/nlKhqUXVleemAieaLqeWZqOadpei/h+a7pOWGheWuuQotIOaLpeaciemrmOW6pueahOaooeWdl+WMluiuvuiuoe+8jOaJqeWxleaAp+W8ugotIOaLpeacieWvjOacieihqOeOsOWKm+eahEFQSQotIOaLpeaciemrmOi0qOmHj+aWh+ahowotIOaLpeacieS4sOWvjOeahOaPkuS7tgotIOaLpeacieS4k+S4mueahOmXruetlOekvuWMuuWSjOS6pOa1gee+pAoK6YCa6L+H5o+S5Lu25Y+v5Lul6L275p2+5a6e546w6K+45aaC77yaCi0g5aSa57q/56iL6YeH6ZuGCi0g6YeH6ZuGSmF2YVNjcmlwdOWKqOaAgea4suafk+eahOmhtemdoiAoUGhhbnRvbUpTL2hlYWRsZXNzIFdlYktpdCkKLSDlm77niYfmnKzlnLDljJYKLSDmqKHmi5/mtY/op4jlmajooYzkuLrvvIzlpoLvvJrmj5DkuqRGb3Jt6KGo5Y2VCi0g572R57uc54is6JmrCi0gLi4uLi4KCiMjIOeOr+Wig+imgeaxggotIFBIUCA+PSA3LjAKCj4g5aaC5p6c5L2g55qEUEhQ54mI5pys6L+Y5YGc55WZ5ZyoUEhQNe+8jOaIluiAheS4jeS8muS9v+eUqENvbXBvc2VyLOS9oOWPr+S7pemAieaLqeS9v+eUqFF1ZXJ5TGlzdDMsUXVlcnlMaXN0M+aUr+aMgXBocDUuM+S7peWPiuaJi+WKqOWuieijheOAggpRdWVyeUxpc3QzIOaWh+ahozpodHRwOi8vdjMucXVlcnlsaXN0LmNjCgojIyDlronoo4UK6YCa6L+HQ29tcG9zZXLlronoo4U6CmBgYApjb21wb3NlciByZXF1aXJlIGphZWdlci9xdWVyeWxpc3QKYGBgCgojIyDkvb/nlKgKCiMjIyMg5YWD57Sg5pON5L2cCi0gIOmHh+mbhuOAjOaYteWbvue9keOAjeaJgOacieWbvueJh+WcsOWdgAoKYGBgcGhwClF1ZXJ5TGlzdDo6Z2V0KCdodHRwOi8vd3d3Lm5pcGljLmNvbScpLT5maW5kKCdpbWcnKS0+YXR0cnMoJ3NyYycpOwpgYGAKLSDph4fpm4bnmb7luqbmkJzntKLnu5PmnpwKCmBgYHBocAokcWwgPSBRdWVyeUxpc3Q6OmdldCgnaHR0cDovL3d3dy5iYWlkdS5jb20vcz93ZD1RdWVyeUxpc3QnKTsKCiRxbC0+ZmluZCgndGl0bGUnKS0+dGV4dCgpOyAvLyDojrflj5bnvZHnq5nmoIfpopgKJHFsLT5maW5kKCdtZXRhW25hbWU9a2V5d29yZHNdJyktPmNvbnRlbnQ7IC8vIOiOt+WPlue9keermeWktOmDqOWFs+mUruivjQoKJHFsLT5maW5kKCdoMz5hJyktPnRleHRzKCk7IC8v6I635Y+W5pCc57Si57uT5p6c5qCH6aKY5YiX6KGoCiRxbC0+ZmluZCgnaDM+YScpLT5hdHRycygnaHJlZicpOyAvL+iOt+WPluaQnOe0oue7k+aenOmTvuaOpeWIl+ihqAoKJHFsLT5maW5kKCdpbWcnKS0+c3JjOyAvL+iOt+WPluesrOS4gOW8oOWbvueJh+eahOmTvuaOpeWcsOWdgAokcWwtPmZpbmQoJ2ltZzplcSgxKScpLT5zcmM7IC8v6I635Y+W56ys5LqM5byg5Zu+54mH55qE6ZO+5o6l5Zyw5Z2ACiRxbC0+ZmluZCgnaW1nJyktPmVxKDIpLT5zcmM7IC8v6I635Y+W56ys5LiJ5byg5Zu+54mH55qE6ZO+5o6l5Zyw5Z2ACi8vIOmBjeWOhuaJgOacieWbvueJhwokcWwtPmZpbmQoJ2ltZycpLT5tYXAoZnVuY3Rpb24oJGltZyl7CgllY2hvICRpbWctPmFsdDsgIC8v5omT5Y2w5Zu+54mH55qEYWx05bGe5oCnCn0pOwpgYGAKLSDmm7TlpJrnlKjms5UKCmBgYHBocAokcWwtPmZpbmQoJyNoZWFkJyktPmFwcGVuZCgnPGRpdj7ov73liqDlhoXlrrk8L2Rpdj4nKS0+ZmluZCgnZGl2JyktPmh0bWxzKCk7CiRxbC0+ZmluZCgnLnR3bycpLT5jaGlsZHJlbignaW1nJyktPmF0dHJzKCdhbHQnKTsgLy/ojrflj5ZjbGFzc+S4unR3b+WFg+e0oOS4i+eahOaJgOaciWltZ+WtqeWtkOiKgueCuQovL+mBjeWOhmNsYXNz5Li6dHdv5YWD57Sg5LiL55qE5omA5pyJ5a2p5a2Q6IqC54K5CiRkYXRhID0gJHFsLT5maW5kKCcudHdvJyktPmNoaWxkcmVuKCktPm1hcChmdW5jdGlvbiAoJGl0ZW0pewogICAgLy/nlKhpc+WIpOaWreiKgueCueexu+WeiwogICAgaWYoJGl0ZW0tPmlzKCdhJykpewogICAgICAgIHJldHVybiAkaXRlbS0+dGV4dCgpOwogICAgfWVsc2VpZigkaXRlbS0+aXMoJ2ltZycpKQogICAgewogICAgICAgIHJldHVybiAkaXRlbS0+YWx0OwogICAgfQp9KTsKCiRxbC0+ZmluZCgnYScpLT5hdHRyKCdocmVmJywgJ25ld1ZhbCcpLT5yZW1vdmVDbGFzcygnY2xhc3NOYW1lJyktPmh0bWwoJ25ld0h0bWwnKS0+Li4uCiRxbC0+ZmluZCgnZGl2ID4gcCcpLT5hZGQoJ2RpdiA+IHVsJyktPmZpbHRlcignOmhhcyhhKScpLT5maW5kKCdwOmZpcnN0JyktPm5leHRBbGwoKS0+YW5kU2VsZigpLT4uLi4KJHFsLT5maW5kKCdkaXYub2xkJyktPnJlcGxhY2VXaXRoKCAkcWwtPmZpbmQoJ2Rpdi5uZXcnKS0+Y2xvbmUoKSktPmFwcGVuZFRvKCcudHJhc2gnKS0+cHJlcGVuZCgnRGVsZXRlZCcpLT4uLi4KYGBgCiMjIyMg5YiX6KGo6YeH6ZuGCumHh+mbhueZvuW6puaQnOe0oue7k+aenOWIl+ihqOeahOagh+mimOWSjOmTvuaOpToKYGBgcGhwCiRkYXRhID0gUXVlcnlMaXN0OjpnZXQoJ2h0dHA6Ly93d3cuYmFpZHUuY29tL3M/d2Q9UXVlcnlMaXN0JykKCS8vIOiuvue9rumHh+mbhuinhOWImQogICAgLT5ydWxlcyhbIAoJICAgICd0aXRsZSc9PmFycmF5KCdoMycsJ3RleHQnKSwKCSAgICAnbGluayc9PmFycmF5KCdoMz5hJywnaHJlZicpCgldKQoJLT5xdWVyeSgpLT5nZXREYXRhKCk7CgpwcmludF9yKCRkYXRhLT5hbGwoKSk7CmBgYArph4fpm4bnu5Pmnpw6CmBgYApBcnJheQooCiAgICBbMF0gPT4gQXJyYXkKICAgICAgICAoCiAgICAgICAgICAgIFt0aXRsZV0gPT4gUXVlcnlMaXN0fOWfuuS6jnBocFF1ZXJ555qE5peg5q+U5by65aSn55qEUEhQ6YeH6ZuG5bel5YW3CiAgICAgICAgICAgIFtsaW5rXSA9PiBodHRwOi8vd3d3LmJhaWR1LmNvbS9saW5rP3VybD1HVV9ZYkRUMklIazRuczF0akcySThfdmptSDBTQ0pFQVB1dVpOCiAgICAgICAgKQogICAgWzFdID0+IEFycmF5CiAgICAgICAgKAogICAgICAgICAgICBbdGl0bGVdID0+IFBIUCDnlKhRdWVyeUxpc3TmipPlj5bnvZHpobXlhoXlrrkgLSB3YjE0NTIzMCAtIOWNmuWuouWbrQogICAgICAgICAgICBbbGlua10gPT4gaHR0cDovL3d3dy5iYWlkdS5jb20vbGluaz91cmw9em4wRFhCbnJ2SUYyaWJSVlczNEtjUlZGRzFfYkNkWnZxdndJaFVxaVhhUwogICAgICAgICkKICAgIFsyXSA9PiBBcnJheQogICAgICAgICgKICAgICAgICAgICAgW3RpdGxlXSA9PiDku4vnu40tIFF1ZXJ5TGlzdOaMh+WvvOaWh+ahowogICAgICAgICAgICBbbGlua10gPT4gaHR0cDovL3d3dy5iYWlkdS5jb20vbGluaz91cmw9cFN5cHZNb3ZxUzR2MnNXZVFvNWZEQko0RW9ZaFhZaTBMeHgKICAgICAgICApCiAgICAgICAgLy8uLi4KKQpgYGAKIyMjIyDnvJbnoIHovazmjaIKYGBgcGhwCi8vIOi+k+WHuue8lueggTpVVEYtOCzovpPlhaXnvJbnoIE6R0IyMzEyClF1ZXJ5TGlzdDo6Z2V0KCdodHRwczovL3RvcC5ldGFvLmNvbScpLT5lbmNvZGluZygnVVRGLTgnLCdHQjIzMTInKS0+ZmluZCgnYScpLT50ZXh0cygpOwoKLy8g6L6T5Ye657yW56CBOlVURi04LOi+k+WFpee8lueggTroh6rliqjor4bliKsKUXVlcnlMaXN0OjpnZXQoJ2h0dHBzOi8vdG9wLmV0YW8uY29tJyktPmVuY29kaW5nKCdVVEYtOCcpLT5maW5kKCdhJyktPnRleHRzKCk7CmBgYAoKIyMjIyBIVFRQ572R57uc5pON5L2c77yIR3V6emxlSHR0cO+8iQotIOaQuuW4pmNvb2tpZeeZu+W9leaWsOa1quW+ruWNmgpgYGBwaHAKLy/ph4fpm4bmlrDmtarlvq7ljZrpnIDopoHnmbvlvZXmiY3og73orr/pl67nmoTpobXpnaIKJHFsID0gUXVlcnlMaXN0OjpnZXQoJ2h0dHA6Ly93ZWliby5jb20nLCdwYXJhbTE9dGVzdHZhbHVlICYgcGFyYW1zMj1zb21ldmFsdWUnLFsKICAgICdoZWFkZXJzJyA9PiBbCiAgICAgICAgLy/loavlhpnku47mtY/op4jlmajojrflj5bliLDnmoRjb29raWUKICAgICAgICAnQ29va2llJyA9PiAnU0lOQUdMT0JBTD01NDYwNjQ7IHdiX2NtdExpa2VfMjExMjAzMT0xOyB3dnI9NjsuLi4uJwogICAgXQpdKTsKLy9lY2hvICRxbC0+Z2V0SHRtbCgpOwplY2hvICRxbC0+ZmluZCgndGl0bGUnKS0+dGV4dCgpOwovL+i+k+WHujog5oiR55qE6aaW6aG1IOW+ruWNmi3pmo/ml7bpmo/lnLDlj5HnjrDmlrDpspzkuosKYGBgCi0g5L2/55SoSHR0cOS7o+eQhgpgYGBwaHAKJHVybFBhcmFtcyA9IFsncGFyYW0xJyA9PiAndGVzdHZhbHVlJywncGFyYW1zMicgPT4gJ3NvbWV2YWx1ZSddOwokb3B0cyA9IFsKCS8vIOiuvue9rmh0dHDku6PnkIYKICAgICdwcm94eScgPT4gJ2h0dHA6Ly8yMjIuMTQxLjExLjE3OjgxMTgnLAogICAgLy/orr7nva7otoXml7bml7bpl7TvvIzljZXkvY3vvJrnp5IKICAgICd0aW1lb3V0JyA9PiAzMCwKICAgICAvLyDkvKrpgKBodHRw5aS0CiAgICAnaGVhZGVycycgPT4gWwogICAgICAgICdSZWZlcmVyJyA9PiAnaHR0cHM6Ly9xdWVyeWxpc3QuY2MvJywKICAgICAgICAnVXNlci1BZ2VudCcgPT4gJ3Rlc3RpbmcvMS4wJywKICAgICAgICAnQWNjZXB0JyAgICAgPT4gJ2FwcGxpY2F0aW9uL2pzb24nLAogICAgICAgICdYLUZvbycgICAgICA9PiBbJ0JhcicsICdCYXonXSwKICAgICAgICAnQ29va2llJyAgICA9PiAnYWJjPTExMTt4eHg9MjIyJwogICAgXQpdOwokcWwtPmdldCgnaHR0cDovL2h0dHBiaW4ub3JnL2dldCcsJHVybFBhcmFtcywkb3B0cyk7Ci8vIGVjaG8gJHFsLT5nZXRIdG1sKCk7CmBgYAoKLSDmqKHmi5/nmbvlvZUKYGBgcGhwCi8vIOeUqHBvc3TnmbvlvZUKJHFsID0gUXVlcnlMaXN0Ojpwb3N0KCdodHRwOi8veHh4eC5jb20vbG9naW4nLFsKICAgICd1c2VybmFtZScgPT4gJ2FkbWluJywKICAgICdwYXNzd29yZCcgPT4gJzEyMzQ1NicKXSktPmdldCgnaHR0cDovL3h4eC5jb20vYWRtaW4nKTsKLy/ph4fpm4bpnIDopoHnmbvlvZXmiY3og73orr/pl67nmoTpobXpnaIKJHFsLT5nZXQoJ2h0dHA6Ly94eHguY29tL2FkbWluL3BhZ2UnKTsKLy9lY2hvICRxbC0+Z2V0SHRtbCgpOwpgYGAKCiMjIyMgRm9ybeihqOWNleaTjeS9nArmqKHmi5/nmbvpmYZHaXRIdWIKYGBgcGhwCi8vIOiOt+WPllF1ZXJ5TGlzdOWunuS+iwokcWwgPSBRdWVyeUxpc3Q6OmdldEluc3RhbmNlKCk7Ci8v6I635Y+W5Yiw55m75b2V6KGo5Y2VCiRmb3JtID0gJHFsLT5nZXQoJ2h0dHBzOi8vZ2l0aHViLmNvbS9sb2dpbicpLT5maW5kKCdmb3JtJyk7CgovL+Whq+WGmUdpdEh1YueUqOaIt+WQjeWSjOWvhueggQokZm9ybS0+ZmluZCgnaW5wdXRbbmFtZT1sb2dpbl0nKS0+dmFsKCd5b3VyIGdpdGh1YiB1c2VybmFtZSBvciBlbWFpbCcpOwokZm9ybS0+ZmluZCgnaW5wdXRbbmFtZT1wYXNzd29yZF0nKS0+dmFsKCd5b3VyIGdpdGh1YiBwYXNzd29yZCcpOwoKLy/luo/liJfljJbooajljZXmlbDmja4KJGZyb21EYXRhID0gJGZvcm0tPnNlcmlhbGl6ZUFycmF5KCk7CiRwb3N0RGF0YSA9IFtdOwpmb3JlYWNoICgkZnJvbURhdGEgYXMgJGl0ZW0pIHsKICAgICRwb3N0RGF0YVskaXRlbVsnbmFtZSddXSA9ICRpdGVtWyd2YWx1ZSddOwp9CgovL+aPkOS6pOeZu+W9leihqOWNlQokYWN0aW9uVXJsID0gJ2h0dHBzOi8vZ2l0aHViLmNvbScuJGZvcm0tPmF0dHIoJ2FjdGlvbicpOwokcWwtPnBvc3QoJGFjdGlvblVybCwkcG9zdERhdGEpOwovL+WIpOaWreeZu+W9leaYr+WQpuaIkOWKnwovLyBlY2hvICRxbC0+Z2V0SHRtbCgpOwokdXNlck5hbWUgPSAkcWwtPmZpbmQoJy5oZWFkZXItbmF2LWN1cnJlbnQtdXNlcj4uY3NzLXRydW5jYXRlLXRhcmdldCcpLT50ZXh0KCk7CmlmKCR1c2VyTmFtZSkKewogICAgZWNobyAn55m75b2V5oiQ5YqfIeasoui/juS9oDonLiR1c2VyTmFtZTsKfWVsc2V7CiAgICBlY2hvICfnmbvlvZXlpLHotKUhJzsKfQpgYGAKIyMjIyBCaW5k5Yqf6IO95omp5bGVCuiHquWumuS5ieaJqeWxleS4gOS4qmBteUh0dHBg5pa55rOVOgpgYGBwaHAKJHFsID0gUXVlcnlMaXN0OjpnZXRJbnN0YW5jZSgpOwoKLy/nu5HlrprkuIDkuKpteUh0dHDmlrnms5XliLBRdWVyeUxpc3Tlr7nosaEKJHFsLT5iaW5kKCdteUh0dHAnLGZ1bmN0aW9uICgkdXJsKXsKICAgIC8vICR0aGlzIOS4uuW9k+WJjeeahFF1ZXJ5TGlzdOWvueixoQogICAgJGh0bWwgPSBmaWxlX2dldF9jb250ZW50cygkdXJsKTsKICAgICR0aGlzLT5zZXRIdG1sKCRodG1sKTsKICAgIHJldHVybiAkdGhpczsKfSk7CgovL+eEtuWQjuWwseWPr+S7pemAmui/h+azqOWGjOeahOWQjeWtl+adpeiwg+eUqAokZGF0YSA9ICRxbC0+bXlIdHRwKCdodHRwczovL3RvdXRpYW8uaW8nKS0+ZmluZCgnaDMgYScpLT50ZXh0cygpOwpwcmludF9yKCRkYXRhLT5hbGwoKSk7CmBgYArmiJbogIXmiorlrp7njrDkvZPlsIHoo4XliLBjbGFzc++8jOeEtuWQjui/meagt+e7keWumjoKYGBgcGhwCiRxbC0+YmluZCgnbXlIdHRwJyxmdW5jdGlvbiAoJHVybCl7CiAgICByZXR1cm4gbmV3IE15SHR0cCgkdGhpcywkdXJsKTsKfSk7CmBgYAoKIyMjIyDmj5Lku7bkvb/nlKgKLSDkvb/nlKhQaGFudG9tSlPmj5Lku7bph4fpm4ZKYXZhU2NyaXB05Yqo5oCB5riy5p+T55qE6aG16Z2iOgoKYGBgcGhwCi8vIOWuieijheaXtuiuvue9rlBoYW50b21KU+S6jOi/m+WItuaWh+S7tui3r+W+hCAKJHFsID0gUXVlcnlMaXN0Ojp1c2UoUGhhbnRvbUpzOjpjbGFzcywnL3Vzci9sb2NhbC9iaW4vcGhhbnRvbWpzJyk7CgovLyDph4fpm4bku4rml6XlpLTmnaHmiYvmnLrniYgKJGRhdGEgPSAkcWwtPmJyb3dzZXIoJ2h0dHBzOi8vbS50b3V0aWFvLmNvbScpLT5maW5kKCdwJyktPnRleHRzKCk7CnByaW50X3IoJGRhdGEtPmFsbCgpKTsKCi8vIOS9v+eUqEhUVFDku6PnkIYKJHFsLT5icm93c2VyKCdodHRwczovL20udG91dGlhby5jb20nLGZhbHNlLFsKCSctLXByb3h5JyA9PiAnMTkyLjE2OC4xLjQyOjgwODAnLAogICAgJy0tcHJveHktdHlwZScgPT4gJ2h0dHAnCl0pCmBgYAoKLSDkvb/nlKhDVVJM5aSa57q/56iL5o+S5Lu2LOWkmue6v+eoi+mHh+mbhkdpdEh1YuaOkuihjOamnDoKCmBgYHBocAokcWwgPSBRdWVyeUxpc3Q6OnVzZShDdXJsTXVsdGk6OmNsYXNzKTsKJHFsLT5jdXJsTXVsdGkoWwogICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS90cmVuZGluZy9waHAnLAogICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS90cmVuZGluZy9nbycsCiAgICAvLy4uLi4ubW9yZSB1cmxzCl0pCiAvLyDmr4/kuKrku7vliqHmiJDlip/lrozmiJDosIPnlKjmraTlm57osIMKIC0+c3VjY2VzcyhmdW5jdGlvbiAoUXVlcnlMaXN0ICRxbCxDdXJsTXVsdGkgJGN1cmwsJHIpewogICAgZWNobyAiQ3VycmVudCB1cmw6eyRyWydpbmZvJ11bJ3VybCddfSBcclxuIjsKICAgICRkYXRhID0gJHFsLT5maW5kKCdoMyBhJyktPnRleHRzKCk7CiAgICBwcmludF9yKCRkYXRhLT5hbGwoKSk7Cn0pCiAvLyDmr4/kuKrku7vliqHlpLHotKXlm57osIMKLT5lcnJvcihmdW5jdGlvbiAoJGVycm9ySW5mbyxDdXJsTXVsdGkgJGN1cmwpewogICAgZWNobyAiQ3VycmVudCB1cmw6eyRlcnJvckluZm9bJ2luZm8nXVsndXJsJ119IFxyXG4iOwogICAgcHJpbnRfcigkZXJyb3JJbmZvWydlcnJvciddKTsKfSkKLT5zdGFydChbCgkvLyDmnIDlpKflubblj5HmlbAKICAgICdtYXhUaHJlYWQnID0+IDEwLAogICAgLy8g6ZSZ6K+v6YeN6K+V5qyh5pWwCiAgICAnbWF4VHJ5JyA9PiAzLApdKTsKCmBgYAoKIyMg5o+S5Lu2Ci0gW2phZS1qYWUvUXVlcnlMaXN0LVBoYW50b21KU10oaHR0cHM6Ly9naXRodWIuY29tL2phZS1qYWUvUXVlcnlMaXN0LVBoYW50b21KUyk6IOS9v+eUqFBoYW50b21KU+mHh+mbhkphdmFTY3JpcHTliqjmgIHmuLLmn5PnmoTpobXpnaIKLSBbamFlLWphZS9RdWVyeUxpc3QtQ3VybE11bHRpXShodHRwczovL2dpdGh1Yi5jb20vamFlLWphZS9RdWVyeUxpc3QtQ3VybE11bHRpKSA6IEN1cmzlpJrnur/nqIvph4fpm4YKLSBbamFlLWphZS9RdWVyeUxpc3QtQWJzb2x1dGVVcmxdKGh0dHBzOi8vZ2l0aHViLmNvbS9qYWUtamFlL1F1ZXJ5TGlzdC1BYnNvbHV0ZVVybCkgOiDovazmjaJVUkznm7jlr7not6/lvoTliLDnu53lr7not6/lvoQKLSBbamFlLWphZS9RdWVyeUxpc3QtUnVsZS1Hb29nbGVdKGh0dHBzOi8vZ2l0aHViLmNvbS9qYWUtamFlL1F1ZXJ5TGlzdC1SdWxlLUdvb2dsZSkgOiDosLfmrYzmkJzntKLlvJXmk44KLSBbamFlLWphZS9RdWVyeUxpc3QtUnVsZS1CYWlkdV0oaHR0cHM6Ly9naXRodWIuY29tL2phZS1qYWUvUXVlcnlMaXN0LVJ1bGUtQmFpZHUpIDog55m+5bqm5pCc57Si5byV5pOOCgoK5p+l55yL5pu05aSa55qEUXVlcnlMaXN05o+S5Lu25ZKM5Z+65LqOUXVlcnlMaXN055qE5Lqn5ZOBOltRdWVyeUxpc3TnpL7ljLrlipvph49dKGh0dHBzOi8vZ2l0aHViLmNvbS9qYWUtamFlL1F1ZXJ5TGlzdC1Db21tdW5pdHkpCgojIyDotKHnjK4K5qyi6L+O5Li6UXVlcnlMaXN06LSh54yu5Luj56CB44CC5YWz5LqO6LSh54yu5o+S5Lu25Y+v5Lul5p+l55yLOltRdWVyeUxpc3Tmj5Lku7botKHnjK7or7TmmI5dKGh0dHBzOi8vZ2l0aHViLmNvbS9qYWUtamFlL1F1ZXJ5TGlzdC1Db21tdW5pdHkvYmxvYi9tYXN0ZXIvQ09OVFJJQlVUSU5HLm1kKQoKIyMg5a+75rGC5biu5YqpPwotIFF1ZXJ5TGlzdOS4u+mhtTogW2h0dHA6Ly9xdWVyeWxpc3QuY2NdKGh0dHA6Ly9xdWVyeWxpc3QuY2MvKQotIFF1ZXJ5TGlzdOaWh+ahozogW2h0dHA6Ly9kb2MucXVlcnlsaXN0LmNjXShodHRwOi8vZG9jLnF1ZXJ5bGlzdC5jYy8pCi0gUXVlcnlMaXN06Zeu562UOltodHRwOi8vd2VuZGEucXVlcnlsaXN0LmNjXShodHRwOi8vd2VuZGEucXVlcnlsaXN0LmNjLykKLSBRdWVyeUxpc3TkuqTmtYFRUee+pDoxMjMyNjY5NjEgPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly9zaGFuZy5xcS5jb20vd3BhL3F1bndwYT9pZGtleT1hMWIyNDhhZTMwYjNmNzExYmRhYjRmNzk5ZGY4MzkzMDBkYzdmZWQ1NDMzMTE3NzAzNWVmYTA1MTNkYTAyN2Y2Ij48aW1nIGJvcmRlcj0iMCIgc3JjPSJodHRwOi8vcHViLmlkcXFpbWcuY29tL3dwYS9pbWFnZXMvZ3JvdXAucG5nIiBhbHQ9ImNhZmVFWCIgdGl0bGU9ImNhZmVFWCI+PC9hPgotIEdpdEh1YjpodHRwczovL2dpdGh1Yi5jb20vamFlLWphZS9RdWVyeUxpc3QKLSBHaXRAT1NDOmh0dHA6Ly9naXQub3NjaGluYS5uZXQvamFlL1F1ZXJ5TGlzdAoKIyMgQXV0aG9yCkphZWdlciA8SmFlZ2VyQ29kZUBnbWFpbC5jb20+CgojIyBMaXNlbmNlClF1ZXJ5TGlzdCBpcyBsaWNlbnNlZCB1bmRlciB0aGUgbGljZW5zZSBvZiBNSVQuIFNlZSB0aGUgTElDRU5TRSBmb3IgbW9yZSBkZXRhaWxzLg==AppDevTools/query/vendor/jaeger/querylist/README.mdPHAgYWxpZ249ImNlbnRlciI+CiAgPGltZyB3aWR0aD0iMTUwIiBzcmM9ImxvZ28ucG5nIiBhbHQ9IlF1ZXJ5TGlzdCI+CiAgPGJyPgogIDxicj4KPC9wPgoKIyBRdWVyeUxpc3QgCmBRdWVyeUxpc3RgIGlzIGEgc2ltcGxlLCBlbGVnYW50LCBleHRlbnNpYmxlIFBIUCAgV2ViIFNjcmFwZXIgKGNyYXdsZXIvc3BpZGVyKSAsYmFzZWQgb24gcGhwUXVlcnkuCgpbQVBJIERvY3VtZW50YXRpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9qYWUtamFlL1F1ZXJ5TGlzdC93aWtpKSAKClvkuK3mlofmlofmoaNdKFJFQURNRS1aSC5tZCkKCiMjIEZlYXR1cmVzCi0gSGF2ZSB0aGUgc2FtZSBDU1MzIERPTSBzZWxlY3RvciBhcyBqUXVlcnkKLSBIYXZlIHRoZSBzYW1lIERPTSBtYW5pcHVsYXRpb24gQVBJIGFzIGpRdWVyeQotIEhhdmUgYSBnZW5lcmljIGxpc3QgY3Jhd2xpbmcgcHJvZ3JhbQotIEhhdmUgYSBzdHJvbmcgSFRUUCByZXF1ZXN0IHN1aXRlLCBlYXN5IHRvIGFjaGlldmUgc3VjaCBhczogc2ltdWxhdGVkIGxhbmRpbmcsIGZvcmdlZCBicm93c2VyLCBIVFRQIHByb3h5IGFuZCBvdGhlciBjb21wbGV4IG5ldHdvcmsgcmVxdWVzdHMKLSBIYXZlIGEgbWVzc3kgY29kZSBzb2x1dGlvbgotIEhhdmUgcG93ZXJmdWwgY29udGVudCBmaWx0ZXJpbmcsIHlvdSBjYW4gdXNlIHRoZSBqUXVleSBzZWxlY3RvciB0byBmaWx0ZXIgY29udGVudAotIEhhcyBhIGhpZ2ggZGVncmVlIG9mIG1vZHVsYXIgZGVzaWduLCBzY2FsYWJpbGl0eSBhbmQgc3Ryb25nCi0gSGF2ZSBhbiBleHByZXNzaXZlIEFQSQotIEhhcyBhIHdlYWx0aCBvZiBwbHVnLWlucwoKVGhyb3VnaCBwbHVnLWlucyB5b3UgY2FuIGVhc2lseSBpbXBsZW1lbnQgdGhpbmdzIGxpa2U6Ci0gTXVsdGl0aHJlYWRlZCBjcmF3bAotIENyYXdsIEphdmFTY3JpcHQgZHluYW1pYyByZW5kZXJpbmcgcGFnZSAoUGhhbnRvbUpTL2hlYWRsZXNzIFdlYktpdCkKLSBJbWFnZSBkb3dubG9hZHMgdG8gbG9jYWwKLSBTaW11bGF0ZSBicm93c2VyIGJlaGF2aW9yIHN1Y2ggYXMgc3VibWl0dGluZyBGb3JtIGZvcm1zCi0gV2ViIGNyYXdsZXIKLSAuLi4uLgoKIyMgUmVxdWlyZW1lbnRzCi0gUEhQID49IDcuMAoKIyMgSW5zdGFsbGF0aW9uCkJ5IENvbXBvc2VyIGluc3RhbGxhdGlvbjoKYGBgCmNvbXBvc2VyIHJlcXVpcmUgamFlZ2VyL3F1ZXJ5bGlzdApgYGAKCiMjIFVzYWdlCgojIyMjIERPTSBUcmF2ZXJzYWwgYW5kIE1hbmlwdWxhdGlvbgotICBDcmF3bOOAjEdpdEh1YuOAjWFsbCBwaWN0dXJlIGxpbmtzCgpgYGBwaHAKUXVlcnlMaXN0OjpnZXQoJ2h0dHBzOi8vZ2l0aHViLmNvbScpLT5maW5kKCdpbWcnKS0+YXR0cnMoJ3NyYycpOwpgYGAKLSBDcmF3bCBHb29nbGUgc2VhcmNoIHJlc3VsdHMKCmBgYHBocAokcWwgPSBRdWVyeUxpc3Q6OmdldCgnaHR0cHM6Ly93d3cuZ29vZ2xlLmNvLmpwL3NlYXJjaD9xPVF1ZXJ5TGlzdCcpOwoKJHFsLT5maW5kKCd0aXRsZScpLT50ZXh0KCk7IC8vVGhlIHBhZ2UgdGl0bGUKJHFsLT5maW5kKCdtZXRhW25hbWU9a2V5d29yZHNdJyktPmNvbnRlbnQ7IC8vVGhlIHBhZ2Uga2V5d29yZHMKCiRxbC0+ZmluZCgnaDM+YScpLT50ZXh0cygpOyAvL0dldCBhIGxpc3Qgb2Ygc2VhcmNoIHJlc3VsdHMgdGl0bGVzCiRxbC0+ZmluZCgnaDM+YScpLT5hdHRycygnaHJlZicpOyAvL0dldCBhIGxpc3Qgb2Ygc2VhcmNoIHJlc3VsdHMgbGlua3MKCiRxbC0+ZmluZCgnaW1nJyktPnNyYzsgLy9HZXRzIHRoZSBsaW5rIGFkZHJlc3Mgb2YgdGhlIGZpcnN0IGltYWdlCiRxbC0+ZmluZCgnaW1nOmVxKDEpJyktPnNyYzsgLy9HZXRzIHRoZSBsaW5rIGFkZHJlc3Mgb2YgdGhlIHNlY29uZCBpbWFnZQokcWwtPmZpbmQoJ2ltZycpLT5lcSgyKS0+c3JjOyAvL0dldHMgdGhlIGxpbmsgYWRkcmVzcyBvZiB0aGUgdGhpcmQgaW1hZ2UKLy8gTG9vcCBhbGwgdGhlIGltYWdlcwokcWwtPmZpbmQoJ2ltZycpLT5tYXAoZnVuY3Rpb24oJGltZyl7CgllY2hvICRpbWctPmFsdDsgIC8vUHJpbnQgdGhlIGFsdCBhdHRyaWJ1dGUgb2YgdGhlIGltYWdlCn0pOwpgYGAKLSBNb3JlIHVzYWdlCgpgYGBwaHAKJHFsLT5maW5kKCcjaGVhZCcpLT5hcHBlbmQoJzxkaXY+QXBwZW5kIGNvbnRlbnQ8L2Rpdj4nKS0+ZmluZCgnZGl2JyktPmh0bWxzKCk7CiRxbC0+ZmluZCgnLnR3bycpLT5jaGlsZHJlbignaW1nJyktPmF0dHJzKCdhbHQnKTsgLy8gR2V0IHRoZSBjbGFzcyBpcyB0aGUgInR3byIgZWxlbWVudCB1bmRlciBhbGwgaW1nIGNoaWxkIG5vZGVzCi8vIExvb3AgY2xhc3MgaXMgdGhlICJ0d28iIGVsZW1lbnQgdW5kZXIgYWxsIGNoaWxkIG5vZGVzCiRkYXRhID0gJHFsLT5maW5kKCcudHdvJyktPmNoaWxkcmVuKCktPm1hcChmdW5jdGlvbiAoJGl0ZW0pewogICAgLy8gVXNlICJpcyIgdG8gZGV0ZXJtaW5lIHRoZSBub2RlIHR5cGUKICAgIGlmKCRpdGVtLT5pcygnYScpKXsKICAgICAgICByZXR1cm4gJGl0ZW0tPnRleHQoKTsKICAgIH1lbHNlaWYoJGl0ZW0tPmlzKCdpbWcnKSkKICAgIHsKICAgICAgICByZXR1cm4gJGl0ZW0tPmFsdDsKICAgIH0KfSk7CgokcWwtPmZpbmQoJ2EnKS0+YXR0cignaHJlZicsICduZXdWYWwnKS0+cmVtb3ZlQ2xhc3MoJ2NsYXNzTmFtZScpLT5odG1sKCduZXdIdG1sJyktPi4uLgokcWwtPmZpbmQoJ2RpdiA+IHAnKS0+YWRkKCdkaXYgPiB1bCcpLT5maWx0ZXIoJzpoYXMoYSknKS0+ZmluZCgncDpmaXJzdCcpLT5uZXh0QWxsKCktPmFuZFNlbGYoKS0+Li4uCiRxbC0+ZmluZCgnZGl2Lm9sZCcpLT5yZXBsYWNlV2l0aCggJHFsLT5maW5kKCdkaXYubmV3JyktPmNsb25lKCkpLT5hcHBlbmRUbygnLnRyYXNoJyktPnByZXBlbmQoJ0RlbGV0ZWQnKS0+Li4uCmBgYAojIyMjIExpc3QgY3Jhd2wKQ3Jhd2wgdGhlIHRpdGxlIGFuZCBsaW5rIG9mIHRoZSBHb29nbGUgc2VhcmNoIHJlc3VsdHMgbGlzdDoKYGBgcGhwCiRkYXRhID0gUXVlcnlMaXN0OjpnZXQoJ2h0dHBzOi8vd3d3Lmdvb2dsZS5jby5qcC9zZWFyY2g/cT1RdWVyeUxpc3QnKQoJLy8gU2V0IHRoZSBjcmF3bCBydWxlcwogICAgLT5ydWxlcyhbIAoJICAgICd0aXRsZSc9PmFycmF5KCdoMycsJ3RleHQnKSwKCSAgICAnbGluayc9PmFycmF5KCdoMz5hJywnaHJlZicpCgldKQoJLT5xdWVyeSgpLT5nZXREYXRhKCk7CgpwcmludF9yKCRkYXRhLT5hbGwoKSk7CmBgYAogUmVzdWx0czoKYGBgCkFycmF5CigKICAgIFswXSA9PiBBcnJheQogICAgICAgICgKICAgICAgICAgICAgW3RpdGxlXSA9PiBBbmd1bGFyIC0gUXVlcnlMaXN0CiAgICAgICAgICAgIFtsaW5rXSA9PiBodHRwczovL2FuZ3VsYXIuaW8vYXBpL2NvcmUvUXVlcnlMaXN0CiAgICAgICAgKQogICAgWzFdID0+IEFycmF5CiAgICAgICAgKAogICAgICAgICAgICBbdGl0bGVdID0+IFF1ZXJ5TGlzdCB8IEBhbmd1bGFyL2NvcmUgLSBBbmd1bGFy44Oq44OV44Kh44Os44Oz44K5IC0gV2ViIENyZWF0aXZlIFBhcmsKICAgICAgICAgICAgW2xpbmtdID0+IGh0dHA6Ly93d3cud2ViY3JlYXRpdmVwYXJrLm5ldC9hbmd1bGFyL3F1ZXJ5bGlzdC8KICAgICAgICApCiAgICBbMl0gPT4gQXJyYXkKICAgICAgICAoCiAgICAgICAgICAgIFt0aXRsZV0gPT4gUXVlcnlMaXN044GrUXVlcnnjgpLov73liqDjgZfjgZ/jgorjgIHov73liqDjgZXjgozjgZ/jgZPjgajjgpLmhJ/nn6XjgZnjgosgfCBUSVBTIC4uLgogICAgICAgICAgICBbbGlua10gPT4gaHR0cDovL3d3dy53ZWJjcmVhdGl2ZXBhcmsubmV0L2FuZ3VsYXIvcXVlcnlsaXN0X3F1ZXJ5X2FkZF9zdWJzY3JpYmUvCiAgICAgICAgKQogICAgICAgIC8vLi4uCikKYGBgCiMjIyMgRW5jb2RlIGNvbnZlcnQKYGBgcGhwCi8vIE91dCBjaGFyc2V0IDpVVEYtOAovLyBJbiBjaGFyc2V0IDpHQjIzMTIKUXVlcnlMaXN0OjpnZXQoJ2h0dHBzOi8vdG9wLmV0YW8uY29tJyktPmVuY29kaW5nKCdVVEYtOCcsJ0dCMjMxMicpLT5maW5kKCdhJyktPnRleHRzKCk7CgovLyBPdXQgY2hhcnNldDpVVEYtOAovLyBJbiBjaGFyc2V0OkF1dG9tYXRpYyBJZGVudGlmaWNhdGlvbgpRdWVyeUxpc3Q6OmdldCgnaHR0cHM6Ly90b3AuZXRhby5jb20nKS0+ZW5jb2RpbmcoJ1VURi04JyktPmZpbmQoJ2EnKS0+dGV4dHMoKTsKYGBgCgojIyMjIEhUVFAgQ2xpZW50IChHdXp6bGVIdHRwKQotIENhcnJ5IGNvb2tpZSBsb2dpbiBHaXRIdWIKYGBgcGhwCi8vQ3Jhd2wgR2l0SHViIGNvbnRlbnQKJHFsID0gUXVlcnlMaXN0OjpnZXQoJ2h0dHBzOi8vZ2l0aHViLmNvbScsJ3BhcmFtMT10ZXN0dmFsdWUgJiBwYXJhbXMyPXNvbWV2YWx1ZScsWwogICdoZWFkZXJzJyA9PiBbCiAgICAgIC8vIEZpbGwgaW4gdGhlIGNvb2tpZSBmcm9tIHRoZSBicm93c2VyCiAgICAgICdDb29raWUnID0+ICdTSU5BR0xPQkFMPTU0NjA2NDsgd2JfY210TGlrZV8yMTEyMDMxPTE7IHd2cj02Oy4uLi4nCiAgXQpdKTsKLy9lY2hvICRxbC0+Z2V0SHRtbCgpOwokdXNlck5hbWUgPSAkcWwtPmZpbmQoJy5oZWFkZXItbmF2LWN1cnJlbnQtdXNlcj4uY3NzLXRydW5jYXRlLXRhcmdldCcpLT50ZXh0KCk7CmVjaG8gJHVzZXJOYW1lOwpgYGAKLSBVc2UgdGhlIEh0dHAgcHJveHkKYGBgcGhwCiR1cmxQYXJhbXMgPSBbJ3BhcmFtMScgPT4gJ3Rlc3R2YWx1ZScsJ3BhcmFtczInID0+ICdzb21ldmFsdWUnXTsKJG9wdHMgPSBbCgkvLyBTZXQgdGhlIGh0dHAgcHJveHkKICAgICdwcm94eScgPT4gJ2h0dHA6Ly8yMjIuMTQxLjExLjE3OjgxMTgnLAogICAgLy9TZXQgdGhlIHRpbWVvdXQgdGltZSBpbiBzZWNvbmRzCiAgICAndGltZW91dCcgPT4gMzAsCiAgICAgLy8gRmFrZSBIVFRQIGhlYWRlcnMKICAgICdoZWFkZXJzJyA9PiBbCiAgICAgICAgJ1JlZmVyZXInID0+ICdodHRwczovL3F1ZXJ5bGlzdC5jYy8nLAogICAgICAgICdVc2VyLUFnZW50JyA9PiAndGVzdGluZy8xLjAnLAogICAgICAgICdBY2NlcHQnICAgICA9PiAnYXBwbGljYXRpb24vanNvbicsCiAgICAgICAgJ1gtRm9vJyAgICAgID0+IFsnQmFyJywgJ0JheiddLAogICAgICAgICdDb29raWUnICAgID0+ICdhYmM9MTExO3h4eD0yMjInCiAgICBdCl07CiRxbC0+Z2V0KCdodHRwOi8vaHR0cGJpbi5vcmcvZ2V0JywkdXJsUGFyYW1zLCRvcHRzKTsKLy8gZWNobyAkcWwtPmdldEh0bWwoKTsKYGBgCgotIEFuYWxvZyBsb2dpbgpgYGBwaHAKLy8gUG9zdCBsb2dpbgokcWwgPSBRdWVyeUxpc3Q6OnBvc3QoJ2h0dHA6Ly94eHh4LmNvbS9sb2dpbicsWwogICAgJ3VzZXJuYW1lJyA9PiAnYWRtaW4nLAogICAgJ3Bhc3N3b3JkJyA9PiAnMTIzNDU2JwpdKS0+Z2V0KCdodHRwOi8veHh4LmNvbS9hZG1pbicpOwovLyBDcmF3bCBwYWdlcyB0aGF0IG5lZWQgdG8gYmUgbG9nZ2VkIGluIHRvIGFjY2VzcwokcWwtPmdldCgnaHR0cDovL3h4eC5jb20vYWRtaW4vcGFnZScpOwovL2VjaG8gJHFsLT5nZXRIdG1sKCk7CmBgYAoKIyMjIyBTdWJtaXQgZm9ybXMKTG9naW4gR2l0SHViCmBgYHBocAovLyBHZXQgdGhlIFF1ZXJ5TGlzdCBpbnN0YW5jZQokcWwgPSBRdWVyeUxpc3Q6OmdldEluc3RhbmNlKCk7Ci8vIEdldCB0aGUgbG9naW4gZm9ybQokZm9ybSA9ICRxbC0+Z2V0KCdodHRwczovL2dpdGh1Yi5jb20vbG9naW4nKS0+ZmluZCgnZm9ybScpOwoKLy8gRmlsbCBpbiB0aGUgR2l0SHViIHVzZXJuYW1lIGFuZCBwYXNzd29yZAokZm9ybS0+ZmluZCgnaW5wdXRbbmFtZT1sb2dpbl0nKS0+dmFsKCd5b3VyIGdpdGh1YiB1c2VybmFtZSBvciBlbWFpbCcpOwokZm9ybS0+ZmluZCgnaW5wdXRbbmFtZT1wYXNzd29yZF0nKS0+dmFsKCd5b3VyIGdpdGh1YiBwYXNzd29yZCcpOwoKLy8gU2VyaWFsaXplIHRoZSBmb3JtIGRhdGEKJGZyb21EYXRhID0gJGZvcm0tPnNlcmlhbGl6ZUFycmF5KCk7CiRwb3N0RGF0YSA9IFtdOwpmb3JlYWNoICgkZnJvbURhdGEgYXMgJGl0ZW0pIHsKICAgICRwb3N0RGF0YVskaXRlbVsnbmFtZSddXSA9ICRpdGVtWyd2YWx1ZSddOwp9CgovLyBTdWJtaXQgdGhlIGxvZ2luIGZvcm0KJGFjdGlvblVybCA9ICdodHRwczovL2dpdGh1Yi5jb20nLiRmb3JtLT5hdHRyKCdhY3Rpb24nKTsKJHFsLT5wb3N0KCRhY3Rpb25VcmwsJHBvc3REYXRhKTsKLy8gVG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGxvZ2luIGlzIHN1Y2Nlc3NmdWwKLy8gZWNobyAkcWwtPmdldEh0bWwoKTsKJHVzZXJOYW1lID0gJHFsLT5maW5kKCcuaGVhZGVyLW5hdi1jdXJyZW50LXVzZXI+LmNzcy10cnVuY2F0ZS10YXJnZXQnKS0+dGV4dCgpOwppZigkdXNlck5hbWUpCnsKICAgIGVjaG8gJ0xvZ2luIHN1Y2Nlc3NmdWwgISBXZWxjb21lOicuJHVzZXJOYW1lOwp9ZWxzZXsKICAgIGVjaG8gJ0xvZ2luIGZhaWxlZCAhJzsKfQpgYGAKIyMjIyBCaW5kIGZ1bmN0aW9uIGV4dGVuc2lvbgpDdXN0b21pemUgdGhlIGV4dGVuc2lvbiBvZiBhIGBteUh0dHBgIG1ldGhvZDoKYGBgcGhwCiRxbCA9IFF1ZXJ5TGlzdDo6Z2V0SW5zdGFuY2UoKTsKCi8vQmluZCBhIGBteUh0dHBgIG1ldGhvZCB0byB0aGUgUXVlcnlMaXN0IG9iamVjdAokcWwtPmJpbmQoJ215SHR0cCcsZnVuY3Rpb24gKCR1cmwpewoJLy8gJHRoaXMgaXMgdGhlIGN1cnJlbnQgUXVlcnlMaXN0IG9iamVjdAogICAgJGh0bWwgPSBmaWxlX2dldF9jb250ZW50cygkdXJsKTsKICAgICR0aGlzLT5zZXRIdG1sKCRodG1sKTsKICAgIHJldHVybiAkdGhpczsKfSk7CgovLyBBbmQgdGhlbiB5b3UgY2FuIGNhbGwgYnkgdGhlIG5hbWUgb2YgdGhlIGJpbmRpbmcKJGRhdGEgPSAkcWwtPm15SHR0cCgnaHR0cHM6Ly90b3V0aWFvLmlvJyktPmZpbmQoJ2gzIGEnKS0+dGV4dHMoKTsKcHJpbnRfcigkZGF0YS0+YWxsKCkpOwpgYGAKT3IgcGFja2FnZSB0byBjbGFzcywgYW5kIHRoZW4gYmluZDoKYGBgcGhwCiRxbC0+YmluZCgnbXlIdHRwJyxmdW5jdGlvbiAoJHVybCl7CiAgICByZXR1cm4gbmV3IE15SHR0cCgkdGhpcywkdXJsKTsKfSk7CmBgYAoKIyMjIyBQbHVnaW4gdXNlZAotIFVzZSB0aGUgUGhhbnRvbUpTIHBsdWdpbiB0byBjcmF3bCBKYXZhU2NyaXB0IGR5bmFtaWNhbGx5IHJlbmRlcmVkIHBhZ2VzOgoKYGBgcGhwCi8vIFNldCB0aGUgUGhhbnRvbUpTIGJpbmFyeSBmaWxlIHBhdGggZHVyaW5nIGluc3RhbGxhdGlvbgokcWwgPSBRdWVyeUxpc3Q6OnVzZShQaGFudG9tSnM6OmNsYXNzLCcvdXNyL2xvY2FsL2Jpbi9waGFudG9tanMnKTsKCi8vIENyYXds44CMNTAwcHjjgI1hbGwgcGljdHVyZSBsaW5rcwokZGF0YSA9ICRxbC0+YnJvd3NlcignaHR0cHM6Ly81MDBweC5jb20vZWRpdG9ycycpLT5maW5kKCdpbWcnKS0+YXR0cnMoJ3NyYycpOwpwcmludF9yKCRkYXRhLT5hbGwoKSk7CgovLyBVc2UgdGhlIEhUVFAgcHJveHkKJHFsLT5icm93c2VyKCdodHRwczovLzUwMHB4LmNvbS9lZGl0b3JzJyxmYWxzZSxbCgknLS1wcm94eScgPT4gJzE5Mi4xNjguMS40Mjo4MDgwJywKICAgICctLXByb3h5LXR5cGUnID0+ICdodHRwJwpdKQpgYGAKCi0gVXNpbmcgdGhlIENVUkwgbXVsdGl0aHJlYWRpbmcgcGx1Zy1pbiwgbXVsdGktdGhyZWFkZWQgY3Jhd2xpbmcgR2l0SHViIHRyZW5kaW5nIDoKCmBgYHBocAokcWwgPSBRdWVyeUxpc3Q6OnVzZShDdXJsTXVsdGk6OmNsYXNzKTsKJHFsLT5jdXJsTXVsdGkoWwogICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS90cmVuZGluZy9waHAnLAogICAgJ2h0dHBzOi8vZ2l0aHViLmNvbS90cmVuZGluZy9nbycsCiAgICAvLy4uLi4ubW9yZSB1cmxzCl0pCiAvLyBDYWxsZWQgaWYgdGFzayBpcyBzdWNjZXNzCiAtPnN1Y2Nlc3MoZnVuY3Rpb24gKFF1ZXJ5TGlzdCAkcWwsQ3VybE11bHRpICRjdXJsLCRyKXsKICAgIGVjaG8gIkN1cnJlbnQgdXJsOnskclsnaW5mbyddWyd1cmwnXX0gXHJcbiI7CiAgICAkZGF0YSA9ICRxbC0+ZmluZCgnaDMgYScpLT50ZXh0cygpOwogICAgcHJpbnRfcigkZGF0YS0+YWxsKCkpOwp9KQogLy8gVGFzayBmYWlsIGNhbGxiYWNrCi0+ZXJyb3IoZnVuY3Rpb24gKCRlcnJvckluZm8sQ3VybE11bHRpICRjdXJsKXsKICAgIGVjaG8gIkN1cnJlbnQgdXJsOnskZXJyb3JJbmZvWydpbmZvJ11bJ3VybCddfSBcclxuIjsKICAgIHByaW50X3IoJGVycm9ySW5mb1snZXJyb3InXSk7Cn0pCi0+c3RhcnQoWwoJLy8gTWF4aW11bSBudW1iZXIgb2YgdGhyZWFkcwogICAgJ21heFRocmVhZCcgPT4gMTAsCiAgICAvLyBOdW1iZXIgb2YgZXJyb3IgcmV0cmllcwogICAgJ21heFRyeScgPT4gMywKXSk7CgpgYGAKCiMjIFBsdWdpbnMKLSBbamFlLWphZS9RdWVyeUxpc3QtUGhhbnRvbUpTXShodHRwczovL2dpdGh1Yi5jb20vamFlLWphZS9RdWVyeUxpc3QtUGhhbnRvbUpTKTpVc2UgUGhhbnRvbUpTIHRvIGNyYXdsIEphdmFzY3JpcHQgZHluYW1pY2FsbHkgcmVuZGVyZWQgcGFnZS4KLSBbamFlLWphZS9RdWVyeUxpc3QtQ3VybE11bHRpXShodHRwczovL2dpdGh1Yi5jb20vamFlLWphZS9RdWVyeUxpc3QtQ3VybE11bHRpKSA6IEN1cmwgbXVsdGkgdGhyZWFkaW5nLgotIFtqYWUtamFlL1F1ZXJ5TGlzdC1BYnNvbHV0ZVVybF0oaHR0cHM6Ly9naXRodWIuY29tL2phZS1qYWUvUXVlcnlMaXN0LUFic29sdXRlVXJsKSA6IENvbnZlcnRpbmcgcmVsYXRpdmUgdXJscyB0byBhYnNvbHV0ZS4KLSBbamFlLWphZS9RdWVyeUxpc3QtUnVsZS1Hb29nbGVdKGh0dHBzOi8vZ2l0aHViLmNvbS9qYWUtamFlL1F1ZXJ5TGlzdC1SdWxlLUdvb2dsZSkgOiBHb29nbGUgc2VhcmNoZXIuCi0gW2phZS1qYWUvUXVlcnlMaXN0LVJ1bGUtQmFpZHVdKGh0dHBzOi8vZ2l0aHViLmNvbS9qYWUtamFlL1F1ZXJ5TGlzdC1SdWxlLUJhaWR1KSA6IEJhaWR1IHNlYXJjaGVyLgoKClZpZXcgbW9yZSBRdWVyeUxpc3QgcGx1Z2lucyBhbmQgUXVlcnlMaXN0LWJhc2VkIHByb2R1Y3RzOiBbUXVlcnlMaXN0IENvbW11bml0eV0oaHR0cHM6Ly9naXRodWIuY29tL2phZS1qYWUvUXVlcnlMaXN0LUNvbW11bml0eSkKCiMjIENvbnRyaWJ1dGluZwpXZWxjb21lIHRvIGNvbnRyaWJ1dGUgY29kZSBmb3IgdGhlIFF1ZXJ5TGlzdOOAgkFib3V0IENvbnRyaWJ1dGluZyBQbHVnaW5zIGNhbiBiZSB2aWV3ZWQ6W1F1ZXJ5TGlzdCBQbHVnaW4gQ29udHJpYnV0aW5nIEd1aWRlXShodHRwczovL2dpdGh1Yi5jb20vamFlLWphZS9RdWVyeUxpc3QtQ29tbXVuaXR5L2Jsb2IvbWFzdGVyL0NPTlRSSUJVVElORy5tZCkKCiMjIEF1dGhvcgpKYWVnZXIgPEphZWdlckNvZGVAZ21haWwuY29tPgoKSWYgdGhpcyBsaWJyYXJ5IGlzIHVzZWZ1bCBmb3IgeW91LCBzYXkgdGhhbmtzIFtidXlpbmcgbWUgYSBiZWVyIDpiZWVyOl0oaHR0cHM6Ly93d3cucGF5cGFsLm1lL2phZXBheSkhCgojIyBMaXNlbmNlClF1ZXJ5TGlzdCBpcyBsaWNlbnNlZCB1bmRlciB0aGUgbGljZW5zZSBvZiBNSVQuIFNlZSB0aGUgTElDRU5TRSBmb3IgbW9yZSBkZXRhaWxzLg==AppDevTools/query/vendor/jaeger/querylist/composer.jsonewogICAgIm5hbWUiOiAiamFlZ2VyL3F1ZXJ5bGlzdCIsCiAgICAiZGVzY3JpcHRpb24iOiAiU2ltcGxlLCBlbGVnYW50LCBleHRlbnNpYmxlIFBIUCBXZWIgU2NyYXBlciAoY3Jhd2xlci9zcGlkZXIpLFVzZSB0aGUgY3NzMyBkb20gc2VsZWN0b3IsQmFzZWQgb24gcGhwUXVlcnkhIOeugOa0geOAgeS8mOmbheOAgeWPr+aJqeWxleeahFBIUOmHh+mbhuW3peWFtyjniKzomasp77yM5Z+65LqOcGhwUXVlcnnjgIIiLAogICAgImtleXdvcmRzIjpbIlF1ZXJ5TGlzdCIsInBocFF1ZXJ5Iiwic3BpZGVyIl0sCiAgICAiaG9tZXBhZ2UiOiAiaHR0cDovL3F1ZXJ5bGlzdC5jYyIsCiAgICAicmVxdWlyZSI6IHsKICAgICAgICAiUEhQIjoiPj03LjAiLAogICAgICAgICJqYWVnZXIvcGhwcXVlcnktc2luZ2xlIjogIl4wLjkiLAogICAgICAgICJ0aWdodGVuY28vY29sbGVjdCI6ICJeNSIsCiAgICAgICAgImphZWdlci9nLWh0dHAiOiAiXjEuMSIKICAgIH0sCiAgICAic3VnZ2VzdCI6ewoKICAgIH0sCiAgICAibGljZW5zZSI6ICJNSVQiLAogICAgImF1dGhvcnMiOiBbCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJKYWVnZXIiLAogICAgICAgICAgICAiZW1haWwiOiAiSmFlZ2VyQ29kZUBnbWFpbC5jb20iCiAgICAgICAgfQogICAgXSwKICAgICJhdXRvbG9hZCI6ewogICAgICAgICJwc3ItNCI6ewogICAgICAgICAgICAiUUxcXCI6InNyYyIKICAgICAgICB9CiAgICB9LAogICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICJzeW1mb255L3Zhci1kdW1wZXIiOiAiXjMuMyIKICAgIH0KfQo=AppDevTools/query/vendor/jaeger/querylist/logo.pngiVBORw0KGgoAAAANSUhEUgAAAfQAAAH0CAYAAADL1t+KAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAC4jAAAuIwF4pT92AAAAB3RJTUUH4QkeDAkOk3pPcAAAOmpJREFUeNrt3XdgHOWd//HPM9ukVZdlyZbl3ju4YTA2YNNTDkJLAqEEQksIScgld7lfcil3yV0uV1IucIQQSOiBkJAeisEGG9zABXe5yZIlWbJ6W+3u/P6QcCBgI1tlZh+9X38l2JivpPW+d56Zecbo3htcAQCAlOZ4PQAAAOg9gg4AgAUIOgAAFiDoAABYgKADAGABgg4AgAUIOgAAFiDoAABYgKADAGABgg4AgAUIOgAAFiDoAABYgKADAGABgg4AgAUIOgAAFiDoAABYgKADAGABgg4AgAUIOgAAFiDoAABYgKADAGABgg4AgAUIOgAAFiDoAABYgKADAGABgg4AgAUIOgAAFiDoAABYgKADAGABgg4AgAUIOgAAFiDoAABYgKADAGABgg4AgAUIOgAAFiDoAABYgKADAGABgg4AgAUIOgAAFiDoAABYgKADAGABgg4AgAUIOgAAFiDoAABYgKADAGABgg4AgAUIOgAAFiDoAABYgKADAGABgg4AgAUIOgAAFiDoAABYgKADAGABgg4AgAUIOgAAFiDoAABYgKADAGABgg4AgAUIOgAAFiDoAABYgKADAGABgg4AgAUIOgAAFiDoAABYgKADAGABgg4AgAUIOgAAFiDoAABYgKADAGABgg4AgAUIOgAAFiDoAABYgKADAGABgg4AgAUIOgAAFiDoAABYgKADAGABgg4AgAUIOgAAFiDoAABYgKADAGABgg4AgAUIOgAAFiDoAABYgKADAGABgg4AgAUIOgAAFiDoAABYgKADAGABgg4AgAUIOgAAFiDoAABYgKADAGABgg4AgAUIOgAAFiDoAABYgKADAGABgg4AgAWCXg+AgeRK7nF+7R3Me/82c5xfAwB4hqDbxHX112i7kjGSjIwxCjlBRQMhpYfCCjl//bEbSWlOUCEnIMeY7j/GVaebUEciocTbQh9PJtQWj6k1EVNnIq6k2/1rbrLrT3or9kQfAAYcQU9FR8PtSsZROBBSJBBUUVqWiqI5yghGNCYzX+OzC5UVjio9EFRRerYK0rKUE44qEgwdza2RUcg4CjiOTPc/deUq4SbVmUzKfVvQY4m4GmOtOtzerOq2RjUnYmrrjGlvY7X2NNWoKd6u6rZGVbY2qj3ZqVi8U66bPPrBgtADQP8h6L7XHW5XkjHKCEU0JC1TYzMLNCl3mMZlFmj2kFHKi2RoREau8iOZCjoBhZ2AjBmYeLqSOhNxxd2k6jtadLClTvWxVm09Uq5djdXa01itnY1VqmlvVmOsrfuDiP4aeuC9uMnjnCLykDHdr13AX4zuvcGPf2UGNzcpSXKMo+xwVBOyCzU9r1jzho7RtNxijc8u1JC0TGWG0ryetEfa4jHVdjRrX2ONttSV642a/dpUV65djVWq62hVIhnv+o0EHt3CTlCnDBmpaDDsq6YbSTsbqlTRWideq/Abgu4LXUfhRkaZ4XRNyinSaUPHamHheE3JHa6JOUXKCqcrYOy4KSHpumrpbNeepsPaUV+p9TX79HLlLm2tP6SGjha5rstR0GDmuhoWzdGfL/qCpuQWv+M6Dq85Mrpj1cP6ydYXJCfg9TjAO7Dk7iU3KSOj/LRMnTJklJYOn6IlxZM1LW+EcsPRoxep2cYxRlnhdM0eMkqzh4zSFePnqynWru31h7SycqdeqNim9TX7Vd3W8Ne4czQ0qBgZRQIhhQP+e4sKOnZ8sIZ9/Pe3xXbdF7RlhNJ06pDR+uCoWVo2Ypqm5hYrIxTxejpPGBllh9O1oHCcFhSO06enLdXuxmq9UL5Nvy/bpLU1e1Xf3tx1nGbJKgUA9DWCPlDcpAImoDHZQ3XRyJm6ZPSpmlc4VjnhqNeT+U5aMKwZ+SWakV+im6aepc1HyvTbfa/r1/vf0M6GSnUm4xy1A8DfIOj9quvceDQY0byhY/XR8Qt00ciZGpVZYO1yel+LBsM6rXC8FhSO0+3Tl+nZ8jf1eOkavVK1W42xVnXdDsf3EgAIer/oCnlOOEPnlUzTtRPO0JLiyRyN94KRUXFGnq6bdKYuHztfr1WX6ue7VukPZZt0uK1RhB3AYEfQ+5qbVE44qgtKZujmqWfrzGETFQmEvJ7KKhmhiJaOmKbFwyfr9Zr9emDny/rVvg2qaq1nKR7AoEXQ+4qbVGYoTReUzNBtU8/RouGTlEbI+1XICWhB4TjNKRitGycv0T3bluupvetV19FM2AEMOgS9t9yk0oMRnV8yXZ+acpaWFk9VejDs9VSDStAJaO7QMfrfIZ/Q1RMW6qfbV+iZAxu7zrFzVTyAQYKgnyzXlWOM5heO110zL9DFo2crIzg4bzvzi7AT1NnFU3V60QS9UL5N/7X5z3rp0A51JhOcXwdgPYJ+MtykitJzdPu0c3Tz1HM0LJrj9UR4m0ggpItGzdLCovF6aNcq/WDLc9rdWMXROgCrEfQT4boKOo7OK5mlr5zyQZ0xbIIcIuFbeZEM3THjPJ07Ypq+u/GPemLPWrXGOwg7ACsR9J5ykyrOyNPnZ5yvm6YsUW4kw+uJ0ENT80bo7sXXacmwyfr2G7/jaB2AlQj6+3LlyGjpiOn65rxLtbBw/IA9lhR9Jy0Q0g1TFmt+4Vh9ff2v9dv9byjGuXUAFuEw5XjcpLJDafry7Iv1yNJbdHrRBGKe4mbkl+hnZ92of5n/ERWmZx99VC0ApDqO0I/FTWpizjD967yP6JKxcxXiUYnWyAqn665ZF+mUIaP15dee0Ou1+1mCB5DyeBd7D46k80tm6PFlt+qK8QuIuYUcY3ReyXT98tzbdc3EMxRxAt1PwgOA1ETQ3851FTaObpq8RL8452adWjDG64nQz8bnFOmeM6/TV0/9sLLDaUQdQMpiyf0trquccLr+YfbFumPGeYP22eSDUUYooi+fcrFGZOTqy2t+qeq2RpbgAaQcgi5JblKF6dn6twVX6NqJixRweDMfbIJOQNdOOlPZ4XTdtfox7WuuIeoAUgrvWG5SJRn5+vGia3X9pDOJ+SDmGKOPjJ2nB8++STPzS7gCHkBKGdz1cpOakF2k+5bcoMvGzeOWNEiSlhRP0QNn36T5Q8cRdQApY/AG3U1qcs5w3bfkBl0wcqbX08Bn5hSM0f1nfVILCycQdQApYXAG3U1qUs4w3bv4Op1VPMXraeBTM/JL9JMl1+u0wvFEHYDvDb6gu0mNzBiiH5xxtZYQc7yPGfklunfx9ZpbMIaoA/C1wRV019WwaK5+sOhqltnRY7OGjNQ9i6/jQjkAvjZ4gu66yo9k6HunXaVLxszxehqkmHlDx+p/F12rsVlDiToAXxokQXeVHgzp63Mv0ccmLPR6GKSoxcMn6dvzL1NeJJMd5QD4zqAIuiOj26aeo5unniWHW9PQC1eOX6CvnvpBRQLsyQTAX+wPuuvq8rHz9E9zPqxIIOT1NEhxjnF067Sl+uTkxeKjIQA/sTvoblJzC0br2/MvU34kw+tpYIn0YFhfn3uJLiyZwfl0AL5hb9BdV8XRPH33tKs0PqfI62lgmcL0bH17/mWanDOcqAPwBWuDHgkE9eXZF2vpiKlejwJLnVIwWt+ad6myQ+mSuEgOgLfsDLrr6hMTz9BNU8/yehJY7pKxc/WZ6cvkWPpXCUDqsO9SXTepmfkl+tLsixUNhr2exjdc11VHMq5EMqnmznbVdbSoLtaqWDJx3H8vaBzlhtOVH8lUVjhNQSegsBOQw6NFJUkhJ6AvzLpQb9Qe0B/KNvHIVQCesSzorjJDafqnUz6kiYP4vHk8mVBNe7Oq2xr1Zl25DrU2aHtdhfY016gjEVdte5PqYq1qiXconjz++V/HOMoIhpUXjmpIepbSAkGNjOZpWt4IFUWzNTW3WCUZeSpIy1J4kN7KNSQtU1+b83faXFeusuYjErdGAvCAXe/ArnTNhNN16di5Xk8yoBLJpKraGrSt/pBerSrVpiMHtelImWo6mlXX0aJEMtG9EYrRX++1Mj0OT0tnu6rbGqWGQ92nil3JGBnjKCccVUFapmbmjdCM/BE6vXCCpueN0PCMXIWcgNffmgFzWtF4fX7G+frSml8qzkVyADxgT9DdpGbkleiLsy4cFEeKCTepg811eqVqp/5ctkVra/ZpX1ON2uMxuW6yK9bGqCvcjnp10/TR8Jt3/DmupPpYi+o7WrS7vlJP71uvSCCskZn5OnXIKJ07YpqWDJ+scdlDFXbs/5ncMHmxni1/U39k6R2AB6x5l00LhvXF2Rdaf4tafUerVlft1tP71uuFiu3a31yreCLeFVrjdId8II+MuyPfHf2OZFy7G6q0u75ST+1dp+HRXC0qmqjLx87V2cVTNTQ9y+tvYb/JjUR154zz9Gp1qepirerdpygAODF2BN1N6kMjZ+uKcfO9nqR/vjxJ5c1H9Jv9G/RY6RptqNmv1s6Ovx6FOz47GuyeKympvKVOT5S+pt/s36AZeSW6ctx8XTZ2nsZlD5Wx8FzzshHT9IkJZ+gHbz5HzwEMqNQPuutqeDRXd826UNFgxOtp+lxZ8xE9snu1frFrtbbXVyjhJruOxP0W8WPpjntHMqH1NXu1oXaf7t3+kj46foGunbhIE3OKrAp70Ano09OX6c8Ht2hHwyGW3gEMmNQPupE+OXmxFhSO83qSPlXd1qhf7V2vu7cu15a6g0q+FfJUDoRx5EoqbazWt1//nR4rXaPrJy3S1RNO19jsoV5P12cm5Q7TnTPO1Z2rH1UnF8gBGCApXAdJblKz8kbq5qlnW3OUF0vE9fTe9brkLz/UZ1Y9pE1HDigppXbI/5Yxco1RaWO1vrbuaV38p//WfdtfUktnh9eT9ZmPTVios4ZPZltYAAMmpSsRdIK6bdrZGpU5xOtR+sSexmp9dtVDuu7F+7S6apcSrmtXyP9Wd9i311fojlce0o0r7tem2jKvp+oTuZEM3TH9XGWE0rweBcAgkbq1cJM6vXCcLrfgQrh4MqHf7NugS5/9ke7d9pKa4u12h/xvGUftyYQeL31NH3n2R3pgx0q1Jzq9nqrXzi2ZrgtGTOcoHcCASNlqRAIh3TL1bBWkpfZtUA2xNv3L67/VdS/ep021B+S+de/4YGQclTZW6dOvPKQvv/aEKlvrvZ6oV6LBsG6ddo6yw1Hx8BYA/S01g+4mdUbRBH1g1CleT9IrB5pqdcuKn+lfX/+tGmJtg+uo/FiMo9ZETD/c8pyuffE+vXmk3OuJemXJ8Mm6qGRG9059ANB/UrIg4UBIN05erNxI1OtRTtqbR8p144r79fieNYq7Lvt/v0PXufVnD27R1S/8n5aXb/V6oJMWCYT0ySlLlB3mEasA+lfqBd1Nas6QUbpw5EyvJzlpr1aV6hPL79Vz5W9yVH48xtHGIwd03Yv36em9672e5qQtHjZJS4uncpQOoF+lXk2Mo0vHzNWQFD13/vKhnbpxxf16vXY/Me8J46is5YjuXPWI/nBgo9fTnJT0YFjXTzpT6RZufATAP1KrKK6rSdmFKbvF6/MH39SNK+7X1rpyYn4ijKOyllrdvPJBPVG6Rm4KLl0vLZ6qM4smcMU7gH6TYlVxdcmYOSm5q9jqyl26/ZVfaGdDJTE/GcZRecsR3bnqYf167wavpzlhWeF0fWzCQgUHwVPnAHgjhcriqiAtW5ePnef1ICfszSPlumPVw8S8t4yjyrYGfWH1o1p5aIfX05ywC0pmaGrucI7SAfSL1KmL6+qs4ZM0a8hIryc5IWXNtfrsqoe1vmYfMe8LxtG+5hp9fvWj2lZX4fU0J6Q4I08fTvFbLQH4V8oUJuQEddnYeYoEQl6P0mMtnR3653VP64WKrcS8LxlH62v26a5XH1N1W6PX05yQ80qmKyuc7vUYACyUGpVxk5qcM6zrYRcp5N5tL+qh3a8S8/5gHP3p4Gb9+xu/V0ci7vU0PTanYLTmDhnNsjuAPpcypbmgZLqKM/K8HqPHVh7aoe9t+pM6kwmvR7GWK+mebS/q8dJXvR6lx7LC6frQ6FPYSAhAn0uJoGeG0nXRqNlej9Fjla0N+tq6p1XRWscbd78yao136FsbfquNtQe8HqbHzhsxXcPSc9hoBkCf8n/Q3aRm55doTsForyfpkXgyqf/e/Ge9VLmTpfaBYBztbqzSN9c/07UffgqYlDtMpxeOJ+gA+lQKFMfovBHTlRfJ8HqQHvnLwc26d/tLcnmzHjjG0W8PvKEn9qzxepIeiQRCunjkLDlOwOtRAFjE90HPCqdr2YipXo/RIzXtTfruxj+qvqOFpfYB1pmM64ebn9WexmqvR+mRRcMmqjjKsjuAvuPvoLtJTc0dpun5JV5P0iMP71qtl6t2sdTuBeNoc1257tm6XMkUiOS47KE6Zcgogg6gz/i+PGcWTUyJ5fbdDVW6e+tyJZLcjuSlh3av1vrDe70e431FAqGuJ7CxkgOgj/g66OFASIuHTfJ6jB752Y6V2tFQyRu0l4zRodZ63bN1eUrcLnh60YTuD6scpQPoPf8G3XU1IpqrU1Pg6vZtdRV6pPQ1r8eAJBmj3xx4Q69VlXo9yfualFOkCdlDWXYH0Cd8HPSkThkySsOjuV5P8r4e3r1a+5pqODr3BaPa9iY9sPNlxX1+lJ6flqn5Q8cRdAB9wr9BN44WDB2rcMDfj5ssbazWE3vWej0G3sHodwc26vUU2GxmUdEEBXz+GgeQGnwb9GgoooVF470e4309vXe9djVWcXTuJ8aoqq1Bj+5a7fUk72vmkBINiWRylA6g1/wZdNfV6Ix8TcwZ5vUkx3WkvVlP7V3Hm7EvGf2ubJP2Nh32epDjGps1VBNzCsWFcQB6y7dBH5ddqKFpWV5PclyrqnZr45GD3HfuR8aotPGwnj34pteTHFdmKKJZeSO9HgOABfxZIiPfnz93JT2z/w21dbZ7PQqOIekm9Mz+19UWj3k9ynEYnVIwilM2AHrNl0EPOAFNzCnyeozjqmpt0GvVpbwR+5kxeq16r7bVVXg9yXFNzytWdihdLLsD6A3/Bd11NSSSqVk+3+51/eG92tFYxXK7rxnVtDdpecV2rwc5rlGZBSpIy6TnAHrFhzVyNSQtUwU+P3/+bPlWdfh6KRddXD1X8abaE51eD3JMBWmZmpDFhXEAesd/QXddzcgt1pC0TK8nOaYj7c1aVbXL6zHQI0Ybaw9qT4N/n8KWHgxrfE4hd0sA6BX/BV1SSWa+gj5+VvS2+grtbODe85RgjKraGrXm8B6vJzmuSTlFnL4B0Cv+ewcxjsZkFXg9xXGtO7xPDbE2SQQ9FSSTca2q2u31GMc1PW+EIsGQ12MASGG+C3rAcVTo4/Pn8WRCr1TtZnk0lRij9TX7Vdve7PUkx5QfyVQ0EBbn0QGcLJ8F3VVuOKrJucO9HuSY6mOt2tVQycF5SjEqazmiipY6rwc5ppEZeRoRzeWDIoCT5q+gu1JGKKJ8H18Qt6fxsPY21XL+PJUYo9r2Fm08Uub1JMeUFU739esegP/5K+hylRuKKiMY9nqQY9rXdFjN8Q5xiJ5akm5Cexr9u697yAmoIJLBETqAk+avoLuuxmUXKCcc9XqSY1pfs1+JRNzrMXCiXFcHWo54PcUxBZ2AJucMY+UHwEnzV9AlFaXnKOTTW9Zc19Wh1npx4VIKMkY76yvVFPPv3vvFmfli5QfAyfJd0KM+Xm6v62jR1roKjqJSUteFcfWxVq8HOab0QIjXFoCT5q+gG0ejMvK9nuKYmuIdOtzRLI6iUpCRmjs7VNfh31vXiqO5ijj+fcIgAH/zVdCDTkCjMv0b9Pr2FrV0dtDzlGRUH2vV7kb/bgFbHM1RZigiTukAOBm+C3qej2/d2dt0WI3sEJey4smEqtubvB7jmHIiGYoGI/QcwEnxVdCNJMfH+1lXtTepM5nwegz0Qmtnh9cjHJNjjAzn0AGcJF/VM+QElObjc4jEPMW5SZU1+/jWNeMo4tM7PAD4n3+C7rqKBsPKCad7Pckx1bQ1ivXQ1FbRWq9EMun1GO8pGgwrJ5QuXmMAToZ/gi4pPRBWRiji9RjHdKi1gZ28UppRTUezOl1/rrSEAyFfv/4B+JuPgu4qKxRResCf96EnkgnVdbR4PQZ6KeG6vv1MFnYCygtH+dAI4KT4KOhSejCscMCf59A73aTqYq3iCvcUdvRH589gBoyjrHCa12MASFG+Cno4EFTQ8dVIR7luV9SR2uLJhBI+/TkaYxTx6QoVAP/zTz3drlvWjF9vW+PA3AqdibhvL4qT5NvnGADwP5/WE+gfCTeppE+X3CXxwRHASSPoGFRc15XLRWcALETQAQCwAEEHAMACBB0AAAsQdAAALEDQAQCwAEEHAMACBB0AAAsQdAAALEDQAQCwAEEHAMACBB0AAAsQdAAALEDQAQCwAEEHAMACBB0AAAsQdAAALEDQAQCwAEEHAMACBB0AAAsQdAAALEDQAQCwAEEHAMACBB0AAAsQdAAALEDQAQCwAEEHAMACBB0AAAsQdAAALEDQAQCwAEEHAMACBB0AAAsQdAAALEDQAQCwAEEHAMACBB0AAAsQdAAALEDQAQCwAEEHAMACBB0AAAsQdAAALEDQAQCwAEEHAMACBB0AAAsQdAAALEDQAQCwAEEHAMACBB0AAAsQdAAALEDQAQCwAEEHAMACBB0AAAsQdAAALEDQAQCwAEEHAMACBB0AAAsQdAAALEDQAQCwAEEHAMACBB0AAAsQdAAALEDQAQCwAEEHAMACBB0AAAsQdAAALEDQAQCwAEEHAMACBB0AAAsQdAAALEDQAQCwAEEHAMACBB0AAAsQdAAALEDQAQCwAEEHAMACBB39x01Kruv1FAAwKBB09ANXuaE03TZ1qSblFHWFHQDQrwg6+lzAOPrM9HP1/UVX69Glt+rs4qkyHKkDQL8i6OhbblKXjD5Vd826UCEnoDlDx+ihc27WJyaeoaAxLMEDQD8h6Og7blILC8fr3xdcqdxI9Og/HpGRpx8uukbfmX+5itKzWYIHgH5A0NE3XFejMwv0Hwuv0vicwnf9cnY4XV+YdaEePPsmzcgvIeoA0McIOvqAq8xQRN+Ye4nOHDbpmL/LMUYXjJypJ5bdrkvGzFGg+98dUMbIePmtAoB+QtDRawE5umP6ufr4xIU9+v1T84p135JP6vMzL1BmMDKg59UDxsgYkg7APv4JupFc1+WiqVTjJnVhyXR9cdaFCjnBHv9rQ9Iy9e0Fl+mHZ1ytkoy8AVuCDzpBBUzAq+/W+0okORUB4OT4J+iS4smEEj49t2okOSzWvpOb1OSc4frm/I8oPy3zhP/1kBPUdZPP1KNLb9VpheMHJOohJ6CA46uX/VGu6yqW6PR6DAApylfvbO2JTnUm4l6P8Z4Cxig7GPF6DP9wXeVFMvSdBZdrTsGYk/5jjIzOHD5JD51zsy4bO69/z6u7kvHxknvSddXa2eH1GABSlI+CbtTc2a52nwY9aALdt2JxSkDqOtL94qwL9eExp/bJnzchp0j3LrlBfz/rImUF0wblVfBxN6H6zjaJlSAAJ8FHQZda4jG1xP15hGKMUWF6tnizlYxcXT9pke6ccb4Cpu9eQvmRDH1z/kf0f4uv08ScYf0S9exgpGuDGx/qSMTVGGvnJQbgpPgn6EZqi8fUFGvzepJjGh7NlXwagwHjJrV0+FR9Y96lygj1/SmIkBPQxyYs1GPLbtV5I2bIkau+WxVxNTyae0IX7w2ktnhMjT5+/QPwN/8EXUbtybiafHqELklpwbDXI3jLTWpiTpG+s+Dyrg83/WhOwRj9YumndMvUc5TmhPrm7gdjNDpzyMB8r05CRzKulkRMHKIDOBk+CnrXVb5+PkOdE0qT04dLzCnFdZUTjupf512m+YXjBuQ/WZSeo/9c+FF9b+FVXac7er0Eb5SXljEgs5+MrrUIP/8NAOBnvqpTwk2qJdbu9RjHNCaroF+WmVNByAnoCzMv0KVj5w7ofzc9GNZt05bq/rM+qSm5xb2KujFGWT6+U6G1s0MdPr0oFID/+SrosWRCB1vqvB7jmIZFc5QTTh98m9+4SV0xdp4+P/N8BZ2B35TFMUYfGDVbjy27VReNnNX9oj3Rn4GrrFCaxmcXnuC/N3Cq2xrU1NnOdRoAToqvgi43qf3NNV5PcUzRYFgZg+08upvUaYXj9a35H1FWON3TUWYPGaUHzr5Jt09bqvTACZ5Xd6WccLqGZeR6+jUcz8GWOrXH2VgGwMnxWdBd1fn4Kt/8SKYmZRcNniN011Vhera+Ne8jGueTI9vC9Gz9x8Kr9N8LP6Zh0RM5r+4qNxzt2jvepxo7O5QchPffA+gb/gq6pKZYm5I+DWY4ENTorAINjs1lXKUHw/qnUz6kc0dM83qYd0gLhPSpqWfrobNv1sLCCTI9eb24rqblFp/UFrUDpb6jRYPjtQWgP/gr6MaotLFazZ3+vTBuel6x5MF55IFmZHTLlLN0y7SzfblVqmOMlpVM1y/PvV3XTlqkkHHeZ+XEaFTWkD7dCKcvJV1X2+sPDZ7VHwB9zmfvbkaV7Y2+3lxjam6xogHLz6O7SX1g5Cx95dQPKRIIeT3NcZVk5uuHi67Rv8z7iPIjGcdegjdG47OGej3uMcWScR1srRP3oAM4WT4LetduWc0+3lxmTFaBhkdz7D2ScpOaljdC355/mYamZ3k9TY9khdJ01+wLdfeZ13ad639X1F1lh9M1La/Y61GPqT3eybavAHrFX0E3RnUdrSptqPJ6kmMqiuZofPZQO4PuuipIy9J3F1yhmUNGej3NCQkYR1eOX6BHzrlFS4ZNfud5dVcqSs/2zYV976WitU4HW46IogM4Wf4KuqSORKfKfHwvelogpIWF4618340EQvrS7It10ajZXo9y0k4rGq9Hl92qGyYvVvit8+puUqfkj1RRerbX4x3T4fYmNcTauAcdwEnzXdAlV+U+DrokzSkYrYht59HdpM4aPkk3Tz1LTopHpTgjT98/4+P6zoLLNaT7qva5Q8d4silOTx1oqlVHkl3iAJw8/wXddVXRWu/1FMd1asFojcjItWvZ3RhtqDmgn2x7ydd3GfRUZihNn5t5vn665AadVjhBZxRN8Hqk49p4pExJtn0F0Av+e46kMdpWV6GGWKtywlGvp3lPxdFczS8Yqz0NVZLx71HfiTGqaW/SV9Y+pa11FfrW/I9oREae10P1imMc/d2YOZpTMFp5Ef8+lCXhJn2/KgXA//x3hC6jstY61bY3ez3IMQWdgM4bMU2OT5+rfdKMUaeb1AM7X9aVz/1Yy8u3ybVgFWJk5hBlhtK8HuOYatqbtelIOefPAfSK/4JujGram7WjvtLrSY5r8fBJKsnIs2vZvZtrjFZV7dLVy/9PP92+gieA9bPDbQ2qaW+SlVdaAhgw/gu6pPZ4TDsb/B30sdmFmlcwpg+e0e1TxtGh1gbdufoR/fO6p9XQ0er1RNbaWHtQNR3NHKED6BVfBl2uq7WH9yrh41iGnIDOL5kux8dXTveaMWpNxPSfm/+kG1fcr10+3h8gle2oP6RkMuH1GABSnD+DbqQdDZVq8vEWsJJ0Xsl0jc0qsHLZ/a+M4q6rp/au08eev0fPl2+14ry6X3QkOrXm8F6eyQKg13wadKPSxsMqbaz2epLjGps9VBePnK1B8W5sHK2v2atrlt+rn2x/SR0JntvdFypbG7pe5yy3A+glfwZdRg2dbdp85KDXg7zPlEZXjZ+vvEimBkvUK1sb9PnVj+pLrz6hw21NXk+U8nY2VHY9lIWgA+glnwZdSibierW61Osx3tfcoWO1rHiqlBwEQZeOnlf/0dbndcNL92lzbZnXE6W0VVW71R6PeT0GAAv4NugyRmsO7+2+nce/0gIh3TRliXIiUQ2Ko3RJklFS0u8PbNSVz9+tJ/es9fUFjH7VFo9pTfUer8cAYAlfB7208bC21VV4Pcn7Ort4ii4aOdPyi+Peg3G0vb5CN698QN/b+Ee1+Pixt350oLlWbxw5KO4/B9AX/Bt0GTXGWrW6arfXg7yvSCCk26YtVf5gOZf+dsZRXUer/nn9r/XZVx5WWXOt1xOljNeq96iyrYHz5wD6hI+D3mX5oR1qT4Erqs8omqArxs4bfEfpkmSMOpIJ3b9jpa5efq/Wsoz8vpKuqxWHdiiZ4P5zAH3D50E32lhbpt0psKFJ0AnoMzPO1biswsEZdUkyRisP7dCVz9+tR3avVpzNUo6psrVeq6tLWW0H0Gf8HXRjVNnWoJcrd3k9SY/MyC/Rp6cvVcDx97e1XxlH+5oO6/aXf6FvbXhG9WwZ+57W1+xTaeNhyQzi1wqAPuX7dxM3mdRfDm5JmQeEXD/5TJ1bPM3ePd57wjhqiLXpX1//nW59+UHt8fkGQV74U9kWdSS4XQ1A3/F90GWMXq3ekxLL7pKUH8nUV+d8SMOjuYN36V2SjFFCrh4vfU1XPne3Xj600+uJfONQS71eOrTd6zEAWCYlgn6orUHPlm/xepIeO2PYJP3DKR9QJBDyehTvvW3L2J/tWJkSFzj2t1eqdmlXYzXL7QD6VGq8o7hJ/Wb/G75/WMtbjKRPTTlL10xYOLiX3t9iHO1vrtWnX3lIX1nzpA63NXo9kWfiyYSe3rtesTgfbAD0rdQIujHaULNfG2r2ez1Jj6UHw/qHUz6guTY/M/1EGKO2REzf3/Ksrn3xPr15pNzriTyxo/6QXqrcyb3nAPpcagS9e5OZp/et93qQEzIhp0j/ufCjGp1p+yNWe6pry9g/lW3SVc//WM/se13JQfZ9WXFoh8pb6wk6gD6XIkGXJKM/lm3WvqbDXg9yQs4qnqJ/X3C58sJRov4W4+jNunLduOJ+fX/zX9TSOTi2jG3ubNfT+zawYgOgX6RO0I3R7sZq/f7AJq8nOWGXj1+gr839O0WDYaL+FuOopr1Z/7D2l7pz1SM61Frv9UT9bnXVbr1avYeL4QD0i5R6Z0m6ST1RuiblNisJGEe3T1uqfzr1g0oPhoj6W4xRLJnU/TtW6PoX79OWIwe9nqjfJJJJPV66Rk2dqXFhJ4DUk1JBl3G0tmafllds83qSExYOBPWFWRfqH08h6n/LNUZ/ObhFVz13t36zb4OSFi5Jb6k7qD+WbRZ7vQLoL6kVdEltnR16tPQ1dSZTY+e4t0sLhPSl2Rfpq6d+WBmhCFF/O+Noa325blzxM/33pr+oubPd64n61PMHt6qitY6L4QD0m5QLuhyj5RXb9FqKPtErEgjprtkX6vunf1zDojlcIPV2xlFte7O+svZJ3bzigZTZHbAnLhk7R9dMPEMh42jQPWIXwIBIvaDLqKa9ST/dvkKdKfo0r7AT1CenLNZ9S27QxJxhRP3tjFHMTerR3av05deeUGOKbCb0fsZlF+rHi67V1+Z8WFnBNFZnAPS5FAy6JGP02wMb9Vp1qdeTnPyXIKMPjJqtR5beoqXF0+TIFUdu3dyk5gwdp9umL1VWKM3rafpMVjhNXz7lA7rnzGs1LmsoH+QA9KnUDLqMatub9JNtLymWIk9hO5Z5Q8fq4aW36DPTz1VmMDK43+RdVxEnoE9MXKRfnnu7zh0xXcayc84hJ6CPTzxdDy+9WYuHTZLhSB1AH0nRoEsyRs8ceEMrD+3wepJeGxbN0X+cdpXuW3yDZuSXdEd9kL3Ru0mNzRqq75/+cd195rUal13o9UT9amHRBD267DZdP/lMhY3DEjyAXgvoQ6d+3eshTo5Rezymxli7Pjh6tsKBoNcD9UrAcTQjv0QXlMxQ0nW1s75K7YmY/VdFu0mlBUK6bNw8/XjRJ3TR6Fkp/7PsqexwupaNmKaccLo21O5XW7zD/p93D2WF0nT9pEUqSMvyepR3+X3ZJq1jgyD4UGq/Io2jP5Vv0W/3v+H1JH1mfHah/uv0j+rxZbfpwpGzFHECdi7Du0kFZLSgcLzuW3K9frrkk5o5ZKTMILtPOzOUpi/MukA/XXKDpuUW2/mzBjAgUv5QqD0e0w+2PKelxVNVFM3xepw+EXKCOn/kDC0sGq+n967XPdte1PqafepMxCXHKKU3J3GTChhH0/NH6cbJZ+qq8adZ83M7WY5x9Hdj5mh8dqG++OrjerZ8i7qynsI/ZwADLoWX3LsZo4rWOmWH07suMrJoyTISCOmUglG6ZMypmppbrIRcVbU1qiMeO/q1pwS36wr+jFBEi4dN0t/PvlDfnHepziuZoUyLrmLvrcL0bJ1fMkPxZFKbasu6bstMlZ9xH2PJHThxKX+ELklJ19WPt76gZSOm6fSiCV6P0+cK0rJ07aRFumLcfK07vFdP7V2nPx3coj2Nh7uO2o3x3xu/60quK8dxNCIzX+ePmK4rx83XwqIJyg6nez2dbxWmZ+s7Cy7XlNzh+taGZ3Sw5QjhANAjVgRdxuhQa73+/Y0/6OfnfMraYKQHw1o8fLIWDZuku1rqtLJyp35/YKNWV5WqvLVOsUTnW9+QgQ+8+9f76INOQMMy8jSvYIwuKJmhpcVTNS67UEGHMPVEJBDSzVPP1qScYfriq49pfc1+/31gG8zcd/0P4D0M/N9ZO4IuScbRH8o26Re7VunT05d5PU2/cozRyMx8fXzCQl0xbr4qWuq0/vA+rarerbWH92l3Y5Vq2lsUS8S6Qmvedt69t2E4enuVe/TPDgVCygtHNT67UHOGjNIZRRM0v3CcRmUOUWSQXLHeH84unqInzr1dX1n7lJ7cs04JN0nYfSAjGFZOJENBE/B6FPhUwk2qMd6u5ADfjmp07w32fMx0XY3NKtBT531GpxaM9noaD758V22JmA401Wpfc4021OzXnqYa7aqvVFlrndoTnWqMtakt3vm2J5q5R79373A0HKb7/xqlBULKCacrLRDW8Gi2JuUM08iMfM0bOkbjsoZqTPZQZQQjcohOn6rvaNX/bP6z/mfLs2qItdq/BO+6Gh7N1fIPfkmTc4d7Pc27HGw+osNtjVZdr4O+48hof3ONblr5oKrbGgf0Q7hdh0/GaG/TYf3Lhmd0/9k3Kicc9XqiAf7yjaLBiKbkFWtKXrEuHDlLrly1dHaoPtaqtnhMFS11KmuuU1O8o+vXYu1q7mxTU2eH2rv3xo84AWUGw8oMpSkjnK6AcRQNhFSSkacRGXnKCKUpJ5ymrFA6b2oDIDcS1f+b83eanDtc/7T2Ke1tOmx/1H2sJDNfJZn5Xo8BH8sIRRRyBn4Fx66gS5Jx9MyBjfr5zld0x4zzvJ7Gc0ZGmaG0o1eTT8wZ5vVIOAlBx9HHJizUxJwi3fXqY1pxaAdRB3zKq2VvK98R4smE/nPTn7W6arfXowB9at7QsfrF2Z/SxyecrqAxbBkL4Cgrgy7TdQ7jH9c8qbLmI15PA/SpUVkF+vGZn9A35lyioWlZ7C4HQJKtQZck4+ilQzv0z+t+pZbODq+nAfpUTjiqfzj1g/r5OTdpel4JUQdgcdAlyRg9XPqafrDl2a5bfgCLOMbowpGz9MSy2/Th0ad2/2VmCR4YrOwOuqRYIq7vbvyDfrVnndejAP1iWv4I3X/WjfrcjPOUGYxwXh0YpKwPuoxRfaxNX17zy64rgwELDUnL1HcWXKHvn/5xFUdzWYIHBiH7gy4dvT/9jlce0qbaA15PA/SLcCCoG6Ys1s/Pvkkz80cSdWCQGRxBlyTjaNORMn121cPa13TY62mAfmFktKxkup5YdpsuHTNXXVtbsAQPDAaDJ+hS95XvO3Xnqkd0qLXe62mAfjMlr1j3LblBd826UFmcVwcGhcEVdEkyRs/sf0N//+rjOtLe7PU0QL/JT8vUv8y/TD844xqVZOSxBA9YbvAFXZKM0aOlr+mzqx5WVVuD19MA/SbkBHTd5EX65bm3a9mIaXJYfgesNTiDLikp6ZHdr+qOVx5m+R3vUtPepB9teU67Giq9HqXXjIwWFk3QQ+fcok9NOVtpgZDXIwHoB4M26JLkGqMn96zVLSsf1N5GLpRDl+q2Rn1h9WO6c/Ujumb5T7SiYrtcC85BD4vm6L9O/6guHzOX5XfAQoM66FJX1H+7/w1d/+J92ljDLW2D3f6mGt328s/10O5VSkpaU12qjy//P/1sx0rFEnGvx+u112sO6JXq3XrrOfcA7DHogy5JMkYrKnfomhfv1UsV272eBh7ZXFuma5f/RL/au17uW8Ezjspb6nXn6kf0lTVPqjaFL6Q80FyrL732hPY2Vks8xx6wDkF/i3G05chBXffSfXps96uKJxNeT4QB4kp6qWK7rn/pp1pRuePdsTNGzfEO/c+Wv+jWlQ+otLHa65FPWHNnu7627mmtqtrNc9QBS/E3++2Mo/1Ntbr15Z/ruxv/oNY4T2mzXWcyoV/sfEVXL79XG2r2HSd2RglJT+5dp48/f49erNiWMufVk66re7Yu1yO7X+XIHLAYQf9bxqgh1qZvbnhGn1v1iCpa6ryeCP2ktr1ZX137K93xykMqb6nr2ZGrcbTm8B5d/cK9un/HipQ4r/7b/a/r3zb+QZ2sOgFWI+jvxRh1JBO6b/sKXfncj/Xnss08ftUirlytqS7VdS/ep+9t+qMa4+0nduRqHFW01uvOVY/qi68+1vVhwKc2HN6nf1zzpGrbmzg6ByxH0I/DNUavVO3SNcvv1b+9/nvVdbR4PRJ6qaWzXfe8uVyXPfu/+v2BN9R1zHoSoTNGLYkO/ejN5/WJt5brfaaytUFffu0Jbauv4Lw5MAjwt/z9GEc17c36+vpf65rl92pN9R657LaVkrbXH9LNKx/U5199VAd7usR+XEauMVpesU1XPne3nihd45uVnLZ4TN9Y/2s9d2gbMQcGiaDXA6QEYxSXqz8c2KhNtWW6c8Z5+uSUJcqPZHg9GXqgLR7Tr/au07++/ru/Hq325fKzcVTaWKVbXn5Q+5pq9JkZ5yoaDHv29bpydf+OlXpg5yuezQBg4PHR/UQYRwdb6vSPa5/UR5+7Wy8f2uGbIzK8m+u62lh7QJ9a8TPdvPLB/l16No7qO1r1tfVP63OrHlF5yxHPvu4XyrfpWxueUXuiU2wgAwweHKGfKGMUd109W75Fm46U6bpJi3TbtHM0Jmuo15PhbapaG3T/jpW6e9uLKmuu6T4q7+fPr90XU/5k+0va1VCl7y28SnOHjhnQr7usuVZfW/d010OHWGoHBhX+xp8s46iqrVH/sfGP+tCfvq97ti5P6V3EbNEUa9NDu1bpw3/5gb667lcqa64d+LAZoxcPbdOVz/9Yj5e+NmCrOGweAwxuHKH3hjFyJW2pO6jPrnpYD+9+VbdPO0cfGDVb2eF0r6cbVNoTnVpevk0/fPM5La/Y1rXc3Nfnyk+EcbSnsVq3rvy5dtZX6rMzz1NOONpv/7m3No95mM1jgEGLoPcF46jTTerlyh1ad3ivFg+bqOsnn6nzS2aoIC3L6+ms1tzZrhWHdurnO1/RHw9uUmOsbWCW13vCOKqPteqbrz+jbfWH9I15l2piTlG//Kd+s2/DXzePIejAoETQ+5Jx1J6M69nyN/XioR2aN3SMbph0pj44+hQNj+Z6PZ1Vatub9ezBLXpg5ytaWbmza5teY/wR8rfrvubi0dJX9WZ9hb674AqdP3Jmn16qtrZ6r7702hPdm8f47OsHMGAIen/oPmJfXbVbaw/v1Y+2vqArx87XpWPmaFLuMAWdgNcTpqSEm9T+phr9Zv/rerx0jd6oPaCOo0vrPg+ZcbSp9oBueOmn+sbcS3TtpEWKBEK9/mMrWxv0lbW/1O7GKv9/DwD0K4Len4yjuOtqU+0Bba4t093bluu8EdN02dh5Or1ogoakZXo9YUpo7mzX+sP79Ms9a/XHg5u1r6lGSTeZGiF/O+PoUGuDPrf6Ue1sqNKXT7m4V6dkjm4eU8HmMQAI+sAwjlxJ5S11emDHy3p8z1rNyBuhD4yapYtHzdb0vGJFgxGvp/SV9kSndtVX6tnyrfr9gY1aV7NPjbFWScafS+s9ZYxaEzH91+Y/a1t9hf7jtKs0Na/4hP8YV9LP2DwGwNsQ9IFkumLUlujU2sN7tO7wXv3gzed16pBROr9kus4ePkVTcocP2ivkmzs7VNpYpRWHduovB7dobc0+Vbc1dD2mNJUj/i5GSUm/P7BRB5qP6DsLLtdFI2fJOYGL2Z4t26JvvrV5DBfBARBB9073UfuRjmY9X/6mni/fqrxIhqbnFev0wgk6a/gkzcgv0fCMXIUdO39M8WRCNe1N2lpXoZWVO7Xi0E5trjuomvam7meNm6MfgqxkHG0+UqYbXvyp/t+cD+mmKUt6tFKzq6FSX1n7pPWbx1j6U8cg4NVr1+jeG3jSiG+4ktv144gEwirJyNP0vGKdUTRBM/NLNC2vWEPTspURSs3l+bZ4TIfbm7SroUqbj5RpdVWpttSVa19Trdri7d2PvLE44MfiuooEgrpu0iJ9Y+6lGhbNOeZvbe5s160rH9TDu1dbHHNXOaGoPjfzPA2P5irp8haF1OEYo6q2Rv335j+r/q3ThAOEoPuZ2x14I6UFIxqalqUJ2UM1JXe4pucWa2reCA2P5mhERp7SAiGFAkFfHNV0JuPqSMRV2dqgitZ6lTZW643aMu2sP6TtDZU63N6kls6Oo1+bvWE6MUaulhZP1X8u/KhmDxn1rl9Puq7+a9Of9JW1T6lzMDxDgJAjlXlwYELQU4nr6q2jeOMEFAmElBeOalTmEOVHohqRkafccFQTsws1Jnuo0gIh5YTTNTQtS5mhNIWcgGSMAjIKOo6cHoY06SYVTyaV6D6GjicTaulsV217s47EWhVLxFXWVKsdDZU6EmtVRUudjnS06GDLEdV0tKgj3qlEMt79Ah+ER+Anwk1qWt4IfWPuJbpkzJx33OL41J61umXlg6rtaOF7COBdCHqqOxp5SW8tWjsBhQNBOcZRNBBSfiRDQyKZigS77nuOBoLKDUWVHoooGgwrIxBSpPv3G0kJ11VnMq6WeKdaEzG1dXaoPtam5kRMkhRLxFXX0aIjHS1qjnco6bqKJTqVTCa7ZzDdq0zE+6S4SeWEo/rCzAv0+ZnnKyucrnWH9+pjz9/D/eYAjomgW+9tsXf/5p8fZd59msd9j9/zjv/Z/f8Jdv9wXYWcgK4cN193TD9XX133Kz1b/iYxB3BMBB3wMUeuCtNzVNPepDjnlAEch533QwGWSMqosrWBlRAA74v1O8DviDmAHiDoAABYgKADAGABgg4AgAUIOgAAFiDoAABYgKADAGABgg4AgAUIOgAAFiDoAABYgKADAGABgg4AgAUIOgAAFiDoAABYgKADAGABgg4AgAUIOgAAFiDoAABYgKADAGABgg4AgAUIOgAAFiDoAABYgKADAGABgg4AgAUIOgAAFiDoAABYgKADAGABgg4AgAUIOgAAFiDoAABYgKADAGABgg4AgAUIOgAAFiDoAABYgKADAGABgg4AgAUIOgAAFiDoAABYgKADAGABgg4AgAUIOgAAFiDoAABYgKADAGABgg4AgAUIOgAAFiDoAABYgKADAGABgg4AgAUIOgAAFiDoAABYgKADAGABgg4AgAUIOgAAFiDoAABYgKADAGABgg4AgAUIOgAAFiDoAABYgKADAGABgg4AgAUIOgAAFiDoAABYgKADAGABgg4AgAUIOgAAFiDoAABYgKADAGABgg4AgAUIOgAAFiDoAABYgKADAGABgg4AgAUIOgAAFiDoAABYgKADAGABgg4AgAUIOgAAFiDoAABYgKADAGABgg4AgAUIOgAAFiDoAABYgKADAGABgg4AgAUIOgAAFiDoAABYgKADAGABgg4AgAUIOgAAFiDoAABYgKADAGABgg4AgAUIOgAAFiDoAABYgKADAGABgg4AgAUIOgAAFiDoAABYgKADAGABgg4AgAUIOgAAFiDoAABYgKADAGABgg4AgAUIOgAAFiDoAABYgKADAGABgg4AgAUIOgAAFiDoAABYgKADAGABgg4AgAUIOgAAFiDoAABYgKADAGABgg4AgAX+P6E7hD3LDebHAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDE3LTA5LTMwVDEyOjA5OjE0KzA4OjAwbm7UQwAAACV0RVh0ZGF0ZTptb2RpZnkAMjAxNy0wOS0zMFQxMjowOToxNCswODowMB8zbP8AAABOdEVYdHNvZnR3YXJlAEltYWdlTWFnaWNrIDYuOS4xLTEwIFExNiB4ODZfNjQgMjAxNy0wOC0wMyBodHRwOi8vd3d3LmltYWdlbWFnaWNrLm9yZ2K/pMsAAAAYdEVYdFRodW1iOjpEb2N1bWVudDo6UGFnZXMAMaf/uy8AAAAZdEVYdFRodW1iOjpJbWFnZTo6SGVpZ2h0ADM3ODC14iogAAAAGHRFWHRUaHVtYjo6SW1hZ2U6OldpZHRoADM3ODCgq/Y5AAAAGXRFWHRUaHVtYjo6TWltZXR5cGUAaW1hZ2UvcG5nP7JWTgAAABd0RVh0VGh1bWI6Ok1UaW1lADE1MDY3NDQ1NTRDZIUEAAAAEnRFWHRUaHVtYjo6U2l6ZQAxNTRLQkLODFbbAAAARXRFWHRUaHVtYjo6VVJJAGZpbGU6Ly8vd29ya3NwYWNlL3RtcC9tb2dyMl85XzM1ODdjMzBiNGIyYzQxXzgxMjdjMl8zMGJbMF2Y663mAAAAAElFTkSuQmCCAppDevTools/query/vendor/jaeger/querylist/src/Config.phpPD9waHANCi8qKg0KICogQ3JlYXRlZCBieSBQaHBTdG9ybS4NCiAqIFVzZXI6IEphZWdlciA8SmFlZ2VyQ29kZUBnbWFpbC5jb20+DQogKiBEYXRlOiAyMDE3LzkvMjINCiAqLw0KDQpuYW1lc3BhY2UgUUw7DQp1c2UgQ2xvc3VyZTsNCg0KY2xhc3MgQ29uZmlnDQp7DQogICAgcHJvdGVjdGVkIHN0YXRpYyAkaW5zdGFuY2UgPSBudWxsOw0KDQogICAgcHJvdGVjdGVkICRwbHVnaW5zOw0KICAgIHByb3RlY3RlZCAkYmluZHM7DQoNCiAgICAvKioNCiAgICAgKiBDb25maWcgY29uc3RydWN0b3IuDQogICAgICovDQogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkNCiAgICB7DQogICAgICAgICR0aGlzLT5wbHVnaW5zID0gY29sbGVjdCgpOw0KICAgICAgICAkdGhpcy0+YmluZHMgPSBjb2xsZWN0KCk7DQogICAgfQ0KDQoNCiAgICAvKioNCiAgICAgKiBHZXQgdGhlIENvbmZpZyBpbnN0YW5jZQ0KICAgICAqDQogICAgICogQHJldHVybiBudWxsfENvbmZpZw0KICAgICAqLw0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0SW5zdGFuY2UoKQ0KICAgIHsNCiAgICAgICAgc2VsZjo6JGluc3RhbmNlIHx8IHNlbGY6OiRpbnN0YW5jZSA9IG5ldyBzZWxmKCk7DQogICAgICAgIHJldHVybiBzZWxmOjokaW5zdGFuY2U7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogR2xvYmFsIGluc3RhbGxhdGlvbiBwbHVnaW4NCiAgICAgKg0KICAgICAqIEBwYXJhbSAkcGx1Z2lucw0KICAgICAqIEBwYXJhbSBhcnJheSAuLi4kb3B0DQogICAgICogQHJldHVybiAkdGhpcw0KICAgICAqLw0KICAgIHB1YmxpYyBmdW5jdGlvbiB1c2UoJHBsdWdpbnMsLi4uJG9wdCkNCiAgICB7DQogICAgICAgIGlmKGlzX3N0cmluZygkcGx1Z2lucykpew0KICAgICAgICAgICAgJHRoaXMtPnBsdWdpbnMtPnB1c2goWyRwbHVnaW5zLCRvcHRdKTsNCiAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAkdGhpcy0+cGx1Z2lucyA9ICR0aGlzLT5wbHVnaW5zLT5tZXJnZSgkcGx1Z2lucyk7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuICR0aGlzOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEdsb2JhbCBiaW5kaW5nIGN1c3RvbSBtZXRob2QNCiAgICAgKg0KICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUNCiAgICAgKiBAcGFyYW0gQ2xvc3VyZSAkcHJvdmlkZXINCiAgICAgKiBAcmV0dXJuICR0aGlzDQogICAgICovDQogICAgcHVibGljIGZ1bmN0aW9uIGJpbmQoc3RyaW5nICRuYW1lLCBDbG9zdXJlICRwcm92aWRlcikNCiAgICB7DQogICAgICAgICR0aGlzLT5iaW5kc1skbmFtZV0gPSAkcHJvdmlkZXI7DQogICAgICAgIHJldHVybiAkdGhpczsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gYm9vdHN0cmFwKFF1ZXJ5TGlzdCAkcXVlcnlMaXN0KQ0KICAgIHsNCiAgICAgICAgJHRoaXMtPmluc3RhbGxQbHVnaW5zKCRxdWVyeUxpc3QpOw0KICAgICAgICAkdGhpcy0+aW5zdGFsbEJpbmQoJHF1ZXJ5TGlzdCk7DQogICAgfQ0KDQogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGluc3RhbGxQbHVnaW5zKFF1ZXJ5TGlzdCAkcXVlcnlMaXN0KQ0KICAgIHsNCiAgICAgICAgJHRoaXMtPnBsdWdpbnMtPmVhY2goZnVuY3Rpb24oJHBsdWdpbikgdXNlKCRxdWVyeUxpc3Qpew0KICAgICAgICAgICAgaWYoaXNfc3RyaW5nKCRwbHVnaW4pKXsNCiAgICAgICAgICAgICAgICAkcXVlcnlMaXN0LT51c2UoJHBsdWdpbik7DQogICAgICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICAgICAkcXVlcnlMaXN0LT51c2UoJHBsdWdpblswXSwuLi4kcGx1Z2luWzFdKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSk7DQogICAgfQ0KDQogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGluc3RhbGxCaW5kKFF1ZXJ5TGlzdCAkcXVlcnlMaXN0KQ0KICAgIHsNCiAgICAgICAgJHRoaXMtPmJpbmRzLT5lYWNoKGZ1bmN0aW9uICgkcHJvdmlkZXIsJG5hbWUpIHVzZSgkcXVlcnlMaXN0KXsNCiAgICAgICAgICAgICRxdWVyeUxpc3QtPmJpbmQoJG5hbWUsJHByb3ZpZGVyKTsNCiAgICAgICAgfSk7DQogICAgfQ0KDQp9AppDevTools/query/vendor/jaeger/querylist/src/Contracts/PluginContract.phpPD9waHANCi8qKg0KICogQ3JlYXRlZCBieSBQaHBTdG9ybS4NCiAqIFVzZXI6IEphZWdlciA8SmFlZ2VyQ29kZUBnbWFpbC5jb20+DQogKiBEYXRlOiAyMDE3LzkvMjINCiAqLw0KDQpuYW1lc3BhY2UgUUxcQ29udHJhY3RzOw0KDQp1c2UgUUxcUXVlcnlMaXN0Ow0KDQppbnRlcmZhY2UgUGx1Z2luQ29udHJhY3QNCnsNCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGluc3RhbGwoUXVlcnlMaXN0ICRxdWVyeUxpc3QsLi4uJG9wdCk7DQp9AppDevTools/query/vendor/jaeger/querylist/src/Contracts/ServiceProviderContract.phpPD9waHANCi8qKg0KICogQ3JlYXRlZCBieSBQaHBTdG9ybS4NCiAqIFVzZXI6IEphZWdlciA8SmFlZ2VyQ29kZUBnbWFpbC5jb20+DQogKiBEYXRlOiAyMDE3LzkvMjANCiAqLw0KDQpuYW1lc3BhY2UgUUxcQ29udHJhY3RzOw0KDQp1c2UgUUxcS2VybmVsOw0KDQppbnRlcmZhY2UgU2VydmljZVByb3ZpZGVyQ29udHJhY3QNCnsNCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVnaXN0ZXIoS2VybmVsICRrZXJuZWwpOw0KfQ==AppDevTools/query/vendor/jaeger/querylist/src/Dom/Dom.phpPD9waHANCi8qKg0KICogQ3JlYXRlZCBieSBQaHBTdG9ybS4NCiAqIFVzZXI6IEphZWdlciA8SmFlZ2VyQ29kZUBnbWFpbC5jb20+DQogKiBEYXRlOiAyMDE3LzkvMTkNCiAqLw0KDQpuYW1lc3BhY2UgUUxcRG9tOw0KDQp1c2UgcGhwUXVlcnlPYmplY3Q7DQoNCmNsYXNzIERvbQ0Kew0KDQogICAgcHJvdGVjdGVkICRkb2N1bWVudDsNCg0KICAgIC8qKg0KICAgICAqIERvbSBjb25zdHJ1Y3Rvci4NCiAgICAgKi8NCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QocGhwUXVlcnlPYmplY3QgJGRvY3VtZW50KQ0KICAgIHsNCiAgICAgICAgJHRoaXMtPmRvY3VtZW50ID0gJGRvY3VtZW50Ow0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBmaW5kKCRzZWxlY3RvcikNCiAgICB7DQogICAgICAgICRlbGVtZW50cyA9ICAkdGhpcy0+ZG9jdW1lbnQtPmZpbmQoJHNlbGVjdG9yKTsNCiAgICAgICAgcmV0dXJuIG5ldyBFbGVtZW50cygkZWxlbWVudHMpOw0KICAgIH0NCn0=AppDevTools/query/vendor/jaeger/querylist/src/Dom/Elements.phpPD9waHANCi8qKg0KICogQ3JlYXRlZCBieSBQaHBTdG9ybS4NCiAqIFVzZXI6IEphZWdlciA8SmFlZ2VyQ29kZUBnbWFpbC5jb20+DQogKiBEYXRlOiAyMDE3LzkvMTkNCiAqLw0KDQpuYW1lc3BhY2UgUUxcRG9tOw0KDQp1c2UgcGhwUXVlcnlPYmplY3Q7DQoNCi8qKg0KICogQ2xhc3MgRWxlbWVudHMNCiAqIEBwYWNrYWdlIFFMXERvbQ0KICoNCiAqIEBtZXRob2QgRWxlbWVudHMgdG9SZWZlcmVuY2UoJHZhcikNCiAqIEBtZXRob2QgIGRvY3VtZW50RnJhZ21lbnQoJHN0YXRlKQ0KICogQG1ldGhvZCBFbGVtZW50cyB0b1Jvb3QoKQ0KICogQG1ldGhvZCBFbGVtZW50cyBnZXREb2N1bWVudElEUmVmKCRkb2N1bWVudElEKQ0KICogQG1ldGhvZCBFbGVtZW50cyBnZXREb2N1bWVudCgpDQogKiBAbWV0aG9kICBnZXRET01Eb2N1bWVudCgpDQogKiBAbWV0aG9kIEVsZW1lbnRzIGdldERvY3VtZW50SUQoKQ0KICogQG1ldGhvZCBFbGVtZW50cyB1bmxvYWREb2N1bWVudCgpDQogKiBAbWV0aG9kICBpc0hUTUwoKQ0KICogQG1ldGhvZCAgaXNYSFRNTCgpDQogKiBAbWV0aG9kICBpc1hNTCgpDQogKiBAbWV0aG9kICBzZXJpYWxpemUoKQ0KICogQG1ldGhvZCAgc2VyaWFsaXplQXJyYXkoJHN1Ym1pdCkNCiAqIEBtZXRob2QgIGdldCgkaW5kZXgsJGNhbGxiYWNrMSwkY2FsbGJhY2syLCRjYWxsYmFjazMpDQogKiBAbWV0aG9kICBnZXRTdHJpbmcoJGluZGV4LCRjYWxsYmFjazEsJGNhbGxiYWNrMiwkY2FsbGJhY2szKQ0KICogQG1ldGhvZCAgZ2V0U3RyaW5ncygkaW5kZXgsJGNhbGxiYWNrMSwkY2FsbGJhY2syLCRjYWxsYmFjazMpDQogKiBAbWV0aG9kICBuZXdJbnN0YW5jZSgkbmV3U3RhY2spDQogKiBAbWV0aG9kIEVsZW1lbnRzIGZpbmQoJHNlbGVjdG9ycywkY29udGV4dCwkbm9IaXN0b3J5KQ0KICogQG1ldGhvZCBFbGVtZW50cyBpcygkc2VsZWN0b3IsJG5vZGVzKQ0KICogQG1ldGhvZCBFbGVtZW50cyBmaWx0ZXJDYWxsYmFjaygkY2FsbGJhY2ssJF9za2lwSGlzdG9yeSkNCiAqIEBtZXRob2QgRWxlbWVudHMgZmlsdGVyKCRzZWxlY3RvcnMsJF9za2lwSGlzdG9yeSkNCiAqIEBtZXRob2QgIGxvYWQoJHVybCwkZGF0YSwkY2FsbGJhY2spDQogKiBAbWV0aG9kIEVsZW1lbnRzIHRyaWdnZXIoJHR5cGUsJGRhdGEpDQogKiBAbWV0aG9kIEVsZW1lbnRzIHRyaWdnZXJIYW5kbGVyKCR0eXBlLCRkYXRhKQ0KICogQG1ldGhvZCBFbGVtZW50cyBiaW5kKCR0eXBlLCRkYXRhLCRjYWxsYmFjaykNCiAqIEBtZXRob2QgIHVuYmluZCgkdHlwZSwkY2FsbGJhY2spDQogKiBAbWV0aG9kIEVsZW1lbnRzIGNoYW5nZSgkY2FsbGJhY2spDQogKiBAbWV0aG9kIEVsZW1lbnRzIHN1Ym1pdCgkY2FsbGJhY2spDQogKiBAbWV0aG9kIEVsZW1lbnRzIGNsaWNrKCRjYWxsYmFjaykNCiAqIEBtZXRob2QgRWxlbWVudHMgd3JhcEFsbE9sZCgkd3JhcHBlcikNCiAqIEBtZXRob2QgRWxlbWVudHMgd3JhcEFsbCgkd3JhcHBlcikNCiAqIEBtZXRob2QgRWxlbWVudHMgd3JhcEFsbFBIUCgkY29kZUJlZm9yZSwkY29kZUFmdGVyKQ0KICogQG1ldGhvZCBFbGVtZW50cyB3cmFwKCR3cmFwcGVyKQ0KICogQG1ldGhvZCBFbGVtZW50cyB3cmFwUEhQKCRjb2RlQmVmb3JlLCRjb2RlQWZ0ZXIpDQogKiBAbWV0aG9kIEVsZW1lbnRzIHdyYXBJbm5lcigkd3JhcHBlcikNCiAqIEBtZXRob2QgRWxlbWVudHMgd3JhcElubmVyUEhQKCRjb2RlQmVmb3JlLCRjb2RlQWZ0ZXIpDQogKiBAbWV0aG9kIEVsZW1lbnRzIGNvbnRlbnRzKCkNCiAqIEBtZXRob2QgRWxlbWVudHMgY29udGVudHNVbndyYXAoKQ0KICogQG1ldGhvZCAgc3dpdGNoV2l0aCgkbWFya3VwKQ0KICogQG1ldGhvZCBFbGVtZW50cyBlcSgkbnVtKQ0KICogQG1ldGhvZCBFbGVtZW50cyBzaXplKCkNCiAqIEBtZXRob2QgRWxlbWVudHMgbGVuZ3RoKCkNCiAqIEBtZXRob2QgIGNvdW50KCkNCiAqIEBtZXRob2QgRWxlbWVudHMgZW5kKCRsZXZlbCkNCiAqIEBtZXRob2QgRWxlbWVudHMgX2Nsb25lKCkNCiAqIEBtZXRob2QgRWxlbWVudHMgcmVwbGFjZVdpdGhQSFAoJGNvZGUpDQogKiBAbWV0aG9kIEVsZW1lbnRzIHJlcGxhY2VXaXRoKCRjb250ZW50KQ0KICogQG1ldGhvZCBFbGVtZW50cyByZXBsYWNlQWxsKCRzZWxlY3RvcikNCiAqIEBtZXRob2QgRWxlbWVudHMgcmVtb3ZlKCRzZWxlY3RvcikNCiAqIEBtZXRob2QgIG1hcmt1cCgkbWFya3VwLCRjYWxsYmFjazEsJGNhbGxiYWNrMiwkY2FsbGJhY2szKQ0KICogQG1ldGhvZCAgbWFya3VwT3V0ZXIoJGNhbGxiYWNrMSwkY2FsbGJhY2syLCRjYWxsYmFjazMpDQogKiBAbWV0aG9kICBodG1sKCRodG1sLCRjYWxsYmFjazEsJGNhbGxiYWNrMiwkY2FsbGJhY2szKQ0KICogQG1ldGhvZCAgeG1sKCR4bWwsJGNhbGxiYWNrMSwkY2FsbGJhY2syLCRjYWxsYmFjazMpDQogKiBAbWV0aG9kICBodG1sT3V0ZXIoJGNhbGxiYWNrMSwkY2FsbGJhY2syLCRjYWxsYmFjazMpDQogKiBAbWV0aG9kICB4bWxPdXRlcigkY2FsbGJhY2sxLCRjYWxsYmFjazIsJGNhbGxiYWNrMykNCiAqIEBtZXRob2QgRWxlbWVudHMgcGhwKCRjb2RlKQ0KICogQG1ldGhvZCAgbWFya3VwUEhQKCRjb2RlKQ0KICogQG1ldGhvZCAgbWFya3VwT3V0ZXJQSFAoKQ0KICogQG1ldGhvZCBFbGVtZW50cyBjaGlsZHJlbigkc2VsZWN0b3IpDQogKiBAbWV0aG9kIEVsZW1lbnRzIGFuY2VzdG9ycygkc2VsZWN0b3IpDQogKiBAbWV0aG9kIEVsZW1lbnRzIGFwcGVuZCgkY29udGVudCkNCiAqIEBtZXRob2QgRWxlbWVudHMgYXBwZW5kUEhQKCRjb250ZW50KQ0KICogQG1ldGhvZCBFbGVtZW50cyBhcHBlbmRUbygkc2VsZXRvcikNCiAqIEBtZXRob2QgRWxlbWVudHMgcHJlcGVuZCgkY29udGVudCkNCiAqIEBtZXRob2QgRWxlbWVudHMgcHJlcGVuZFBIUCgkY29udGVudCkNCiAqIEBtZXRob2QgRWxlbWVudHMgcHJlcGVuZFRvKCRzZWxldG9yKQ0KICogQG1ldGhvZCBFbGVtZW50cyBiZWZvcmUoJGNvbnRlbnQpDQogKiBAbWV0aG9kIEVsZW1lbnRzIGJlZm9yZVBIUCgkY29udGVudCkNCiAqIEBtZXRob2QgRWxlbWVudHMgaW5zZXJ0QmVmb3JlKCRzZWxldG9yKQ0KICogQG1ldGhvZCBFbGVtZW50cyBhZnRlcigkY29udGVudCkNCiAqIEBtZXRob2QgRWxlbWVudHMgYWZ0ZXJQSFAoJGNvbnRlbnQpDQogKiBAbWV0aG9kIEVsZW1lbnRzIGluc2VydEFmdGVyKCRzZWxldG9yKQ0KICogQG1ldGhvZCBFbGVtZW50cyBpbnNlcnQoJHRhcmdldCwkdHlwZSkNCiAqIEBtZXRob2QgIGluZGV4KCRzdWJqZWN0KQ0KICogQG1ldGhvZCBFbGVtZW50cyBzbGljZSgkc3RhcnQsJGVuZCkNCiAqIEBtZXRob2QgRWxlbWVudHMgcmV2ZXJzZSgpDQogKiBAbWV0aG9kICB0ZXh0KCR0ZXh0LCRjYWxsYmFjazEsJGNhbGxiYWNrMiwkY2FsbGJhY2szKQ0KICogQG1ldGhvZCBFbGVtZW50cyBwbHVnaW4oJGNsYXNzLCRmaWxlKQ0KICogQG1ldGhvZCAgZXh0ZW5kKCRjbGFzcywkZmlsZSkNCiAqIEBtZXRob2QgRWxlbWVudHMgX25leHQoJHNlbGVjdG9yKQ0KICogQG1ldGhvZCBFbGVtZW50cyBfcHJldigkc2VsZWN0b3IpDQogKiBAbWV0aG9kIEVsZW1lbnRzIHByZXYoJHNlbGVjdG9yKQ0KICogQG1ldGhvZCBFbGVtZW50cyBwcmV2QWxsKCRzZWxlY3RvcikNCiAqIEBtZXRob2QgRWxlbWVudHMgbmV4dEFsbCgkc2VsZWN0b3IpDQogKiBAbWV0aG9kIEVsZW1lbnRzIHNpYmxpbmdzKCRzZWxlY3RvcikNCiAqIEBtZXRob2QgRWxlbWVudHMgbm90KCRzZWxlY3RvcikNCiAqIEBtZXRob2QgRWxlbWVudHMgYWRkKCRzZWxlY3RvcikNCiAqIEBtZXRob2QgRWxlbWVudHMgcGFyZW50KCRzZWxlY3RvcikNCiAqIEBtZXRob2QgRWxlbWVudHMgcGFyZW50cygkc2VsZWN0b3IpDQogKiBAbWV0aG9kICBzdGFjaygkbm9kZVR5cGVzKQ0KICogQG1ldGhvZCAgYXR0cigkYXR0ciwkdmFsdWUpDQogKiBAbWV0aG9kIEVsZW1lbnRzIGF0dHJQSFAoJGF0dHIsJGNvZGUpDQogKiBAbWV0aG9kIEVsZW1lbnRzIHJlbW92ZUF0dHIoJGF0dHIpDQogKiBAbWV0aG9kICB2YWwoJHZhbCkNCiAqIEBtZXRob2QgRWxlbWVudHMgYW5kU2VsZigpDQogKiBAbWV0aG9kIEVsZW1lbnRzIGFkZENsYXNzKCRjbGFzc05hbWUpDQogKiBAbWV0aG9kIEVsZW1lbnRzIGFkZENsYXNzUEhQKCRjbGFzc05hbWUpDQogKiBAbWV0aG9kICBoYXNDbGFzcygkY2xhc3NOYW1lKQ0KICogQG1ldGhvZCBFbGVtZW50cyByZW1vdmVDbGFzcygkY2xhc3NOYW1lKQ0KICogQG1ldGhvZCBFbGVtZW50cyB0b2dnbGVDbGFzcygkY2xhc3NOYW1lKQ0KICogQG1ldGhvZCBFbGVtZW50cyBfZW1wdHkoKQ0KICogQG1ldGhvZCBFbGVtZW50cyBlYWNoKCRjYWxsYmFjaywkcGFyYW0xLCRwYXJhbTIsJHBhcmFtMykNCiAqIEBtZXRob2QgRWxlbWVudHMgY2FsbGJhY2soJGNhbGxiYWNrLCRwYXJhbTEsJHBhcmFtMiwkcGFyYW0zKQ0KICogQG1ldGhvZCAgZGF0YSgka2V5LCR2YWx1ZSkNCiAqIEBtZXRob2QgIHJlbW92ZURhdGEoJGtleSkNCiAqIEBtZXRob2QgIHJld2luZCgpDQogKiBAbWV0aG9kICBjdXJyZW50KCkNCiAqIEBtZXRob2QgIGtleSgpDQogKiBAbWV0aG9kIEVsZW1lbnRzIG5leHQoJGNzc1NlbGVjdG9yKQ0KICogQG1ldGhvZCAgdmFsaWQoKQ0KICogQG1ldGhvZCAgb2Zmc2V0RXhpc3RzKCRvZmZzZXQpDQogKiBAbWV0aG9kICBvZmZzZXRHZXQoJG9mZnNldCkNCiAqIEBtZXRob2QgIG9mZnNldFNldCgkb2Zmc2V0LCR2YWx1ZSkNCiAqIEBtZXRob2QgIG9mZnNldFVuc2V0KCRvZmZzZXQpDQogKiBAbWV0aG9kICB3aG9pcygkb25lTm9kZSkNCiAqIEBtZXRob2QgRWxlbWVudHMgZHVtcCgpDQogKiBAbWV0aG9kICBkdW1wV2hvaXMoKQ0KICogQG1ldGhvZCAgZHVtcExlbmd0aCgpDQogKiBAbWV0aG9kICBkdW1wVHJlZSgkaHRtbCwkdGl0bGUpDQogKiBAbWV0aG9kICBkdW1wRGllKCkNCiAqLw0KDQpjbGFzcyBFbGVtZW50cw0Kew0KICAgIC8qKg0KICAgICAqIEB2YXIgcGhwUXVlcnlPYmplY3QNCiAgICAgKi8NCiAgICBwcm90ZWN0ZWQgJGVsZW1lbnRzOw0KDQogICAgLyoqDQogICAgICogRWxlbWVudHMgY29uc3RydWN0b3IuDQogICAgICogQHBhcmFtICRlbGVtZW50cw0KICAgICAqLw0KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChwaHBRdWVyeU9iamVjdCAkZWxlbWVudHMpDQogICAgew0KICAgICAgICAkdGhpcy0+ZWxlbWVudHMgPSAkZWxlbWVudHM7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIF9fZ2V0KCRuYW1lKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuIHByb3BlcnR5X2V4aXN0cygkdGhpcy0+ZWxlbWVudHMsJG5hbWUpPyR0aGlzLT5lbGVtZW50cy0+JG5hbWU6JHRoaXMtPmVsZW1lbnRzLT5hdHRyKCRuYW1lKTsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jYWxsKCRuYW1lLCAkYXJndW1lbnRzKQ0KICAgIHsNCiAgICAgICAgJG9iaiA9IGNhbGxfdXNlcl9mdW5jX2FycmF5KFskdGhpcy0+ZWxlbWVudHMsJG5hbWVdLCRhcmd1bWVudHMpOw0KICAgICAgICBpZigkb2JqIGluc3RhbmNlb2YgcGhwUXVlcnlPYmplY3Qpew0KICAgICAgICAgICAgJG9iaiA9IG5ldyBzZWxmKCRvYmopOw0KICAgICAgICB9ZWxzZSBpZihpc19zdHJpbmcoJG9iaikpew0KICAgICAgICAgICAgJG9iaiA9IHRyaW0oJG9iaik7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuICRvYmo7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogSXRlcmF0aW5nIGVsZW1lbnRzDQogICAgICoNCiAgICAgKiBAcGFyYW0gJGNhbGxiYWNrDQogICAgICogQHJldHVybiBcSWxsdW1pbmF0ZVxTdXBwb3J0XENvbGxlY3Rpb24NCiAgICAgKi8NCiAgICBwdWJsaWMgZnVuY3Rpb24gbWFwKCRjYWxsYmFjaykNCiAgICB7DQogICAgICAgICRjb2xsZWN0aW9uID0gY29sbGVjdCgpOw0KICAgICAgICAkdGhpcy0+ZWxlbWVudHMtPmVhY2goZnVuY3Rpb24oJGRvbSkgdXNlKCYgJGNvbGxlY3Rpb24sJGNhbGxiYWNrKXsNCiAgICAgICAgICAgICRjb2xsZWN0aW9uLT5wdXNoKCRjYWxsYmFjayhuZXcgc2VsZihwcSgkZG9tKSkpKTsNCiAgICAgICAgfSk7DQogICAgICAgIHJldHVybiAkY29sbGVjdGlvbjsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBHZXRzIHRoZSBhdHRyaWJ1dGVzIG9mIGFsbCB0aGUgZWxlbWVudHMNCiAgICAgKg0KICAgICAqIEBwYXJhbSAkYXR0ciBIVE1MIGF0dHJpYnV0ZSBuYW1lDQogICAgICogQHJldHVybiBcSWxsdW1pbmF0ZVxTdXBwb3J0XENvbGxlY3Rpb24NCiAgICAgKi8NCiAgICBwdWJsaWMgZnVuY3Rpb24gYXR0cnMoJGF0dHIpDQogICAgew0KICAgICAgICByZXR1cm4gJHRoaXMtPm1hcChmdW5jdGlvbigkaXRlbSkgdXNlKCRhdHRyKXsNCiAgICAgICAgICAgIHJldHVybiAkaXRlbS0+YXR0cigkYXR0cik7DQogICAgICAgIH0pOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEdldHMgdGhlIHRleHQgb2YgYWxsIHRoZSBlbGVtZW50cw0KICAgICAqDQogICAgICogQHJldHVybiBcSWxsdW1pbmF0ZVxTdXBwb3J0XENvbGxlY3Rpb24NCiAgICAgKi8NCiAgICBwdWJsaWMgZnVuY3Rpb24gdGV4dHMoKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuICR0aGlzLT5tYXAoZnVuY3Rpb24oJGl0ZW0pew0KICAgICAgICAgICAgcmV0dXJuIHRyaW0oJGl0ZW0tPnRleHQoKSk7DQogICAgICAgIH0pOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEdldHMgdGhlIGh0bWwgb2YgYWxsIHRoZSBlbGVtZW50cw0KICAgICAqDQogICAgICogQHJldHVybiBcSWxsdW1pbmF0ZVxTdXBwb3J0XENvbGxlY3Rpb24NCiAgICAgKi8NCiAgICBwdWJsaWMgZnVuY3Rpb24gaHRtbHMoKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuICR0aGlzLT5tYXAoZnVuY3Rpb24oJGl0ZW0pew0KICAgICAgICAgICAgcmV0dXJuIHRyaW0oJGl0ZW0tPmh0bWwoKSk7DQogICAgICAgIH0pOw0KICAgIH0NCg0KICAgIC8qKg0KICAgICAqIEByZXR1cm4gcGhwUXVlcnlPYmplY3QNCiAgICAgKi8NCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RWxlbWVudHMoKTogcGhwUXVlcnlPYmplY3QNCiAgICB7DQogICAgICAgIHJldHVybiAkdGhpcy0+ZWxlbWVudHM7DQogICAgfQ0KDQp9AppDevTools/query/vendor/jaeger/querylist/src/Dom/Query.phpPD9waHANCi8qKg0KICogQ3JlYXRlZCBieSBQaHBTdG9ybS4NCiAqIFVzZXI6IEphZWdlciA8SmFlZ2VyQ29kZUBnbWFpbC5jb20+DQogKiBEYXRlOiAyMDE3LzkvMjENCiAqLw0KDQpuYW1lc3BhY2UgUUxcRG9tOw0KDQp1c2UgSWxsdW1pbmF0ZVxTdXBwb3J0XENvbGxlY3Rpb247DQp1c2UgcGhwUXVlcnk7DQp1c2UgUUxcUXVlcnlMaXN0Ow0KdXNlIENsb3N1cmU7DQoNCmNsYXNzIFF1ZXJ5DQp7DQogICAgcHJvdGVjdGVkICRodG1sOw0KICAgIHByb3RlY3RlZCAkZG9jdW1lbnQ7DQogICAgcHJvdGVjdGVkICRydWxlczsNCiAgICBwcm90ZWN0ZWQgJHJhbmdlID0gbnVsbDsNCiAgICBwcm90ZWN0ZWQgJHFsOw0KICAgIC8qKg0KICAgICAqIEB2YXIgQ29sbGVjdGlvbg0KICAgICAqLw0KICAgIHByb3RlY3RlZCAkZGF0YTsNCg0KDQogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KFF1ZXJ5TGlzdCAkcWwpDQogICAgew0KICAgICAgICAkdGhpcy0+cWwgPSAkcWw7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogQHJldHVybiBtaXhlZA0KICAgICAqLw0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRIdG1sKCkNCiAgICB7DQogICAgICAgIHJldHVybiAkdGhpcy0+aHRtbDsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBAcGFyYW0gJGh0bWwNCiAgICAgKiBAcGFyYW0gbnVsbCAkY2hhcnNldA0KICAgICAqIEByZXR1cm4gUXVlcnlMaXN0DQogICAgICovDQogICAgcHVibGljIGZ1bmN0aW9uIHNldEh0bWwoJGh0bWwsICRjaGFyc2V0ID0gbnVsbCkNCiAgICB7DQogICAgICAgICR0aGlzLT5odG1sID0gdmFsdWUoJGh0bWwpOw0KICAgICAgICAkdGhpcy0+ZG9jdW1lbnQgPSBwaHBRdWVyeTo6bmV3RG9jdW1lbnRIVE1MKCR0aGlzLT5odG1sLCRjaGFyc2V0KTsNCiAgICAgICAgcmV0dXJuICR0aGlzLT5xbDsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBHZXQgY3Jhd2wgcmVzdWx0cw0KICAgICAqDQogICAgICogQHBhcmFtIENsb3N1cmV8bnVsbCAkY2FsbGJhY2sNCiAgICAgKiBAcmV0dXJuIENvbGxlY3Rpb258c3RhdGljDQogICAgICovDQogICAgcHVibGljIGZ1bmN0aW9uIGdldERhdGEoQ2xvc3VyZSAkY2FsbGJhY2sgPSBudWxsKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuICBpc19udWxsKCRjYWxsYmFjaykgPyAkdGhpcy0+ZGF0YSA6ICR0aGlzLT5kYXRhLT5tYXAoJGNhbGxiYWNrKTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBAcGFyYW0gQ29sbGVjdGlvbiAkZGF0YQ0KICAgICAqLw0KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXREYXRhKENvbGxlY3Rpb24gJGRhdGEpDQogICAgew0KICAgICAgICAkdGhpcy0+ZGF0YSA9ICRkYXRhOw0KICAgIH0NCg0KDQogICAgLyoqDQogICAgICogU2VhcmNoZXMgZm9yIGFsbCBlbGVtZW50cyB0aGF0IG1hdGNoIHRoZSBzcGVjaWZpZWQgZXhwcmVzc2lvbi4NCiAgICAgKg0KICAgICAqIEBwYXJhbSAkc2VsZWN0b3IgQSBzdHJpbmcgY29udGFpbmluZyBhIHNlbGVjdG9yIGV4cHJlc3Npb24gdG8gbWF0Y2ggZWxlbWVudHMgYWdhaW5zdC4NCiAgICAgKiBAcmV0dXJuIEVsZW1lbnRzDQogICAgICovDQogICAgcHVibGljIGZ1bmN0aW9uIGZpbmQoJHNlbGVjdG9yKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuIChuZXcgRG9tKCR0aGlzLT5kb2N1bWVudCkpLT5maW5kKCRzZWxlY3Rvcik7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogU2V0IGNyYXdsIHJ1bGUNCiAgICAgKg0KICAgICAqICRydWxlcyA9IFsNCiAgICAgKiAgICAncnVsZV9uYW1lMScgPT4gWydzZWxlY3RvcicsJ0hUTUwgYXR0cmlidXRlIHwgdGV4dCB8IGh0bWwnLCdUYWcgZmlsdGVyIGxpc3QnLCdjYWxsYmFjayddLA0KICAgICAqICAgICdydWxlX25hbWUyJyA9PiBbJ3NlbGVjdG9yJywnSFRNTCBhdHRyaWJ1dGUgfCB0ZXh0IHwgaHRtbCcsJ1RhZyBmaWx0ZXIgbGlzdCcsJ2NhbGxiYWNrJ10sDQogICAgICogICAgLy8gLi4uDQogICAgICogIF0NCiAgICAgKg0KICAgICAqIEBwYXJhbSBhcnJheSAkcnVsZXMNCiAgICAgKiBAcmV0dXJuIFF1ZXJ5TGlzdA0KICAgICAqLw0KICAgIHB1YmxpYyBmdW5jdGlvbiBydWxlcyhhcnJheSAkcnVsZXMpDQogICAgew0KICAgICAgICAkdGhpcy0+cnVsZXMgPSAkcnVsZXM7DQogICAgICAgIHJldHVybiAkdGhpcy0+cWw7DQogICAgfQ0KDQoNCiAgICAvKioNCiAgICAgKiBTZXQgdGhlIHNsaWNlIGFyZWEgZm9yIGNyYXdsIGxpc3QNCiAgICAgKg0KICAgICAqIEBwYXJhbSAkc2VsZWN0b3INCiAgICAgKiBAcmV0dXJuIFF1ZXJ5TGlzdA0KICAgICAqLw0KICAgIHB1YmxpYyBmdW5jdGlvbiByYW5nZSgkc2VsZWN0b3IpDQogICAgew0KICAgICAgICAkdGhpcy0+cmFuZ2UgPSAkc2VsZWN0b3I7DQogICAgICAgIHJldHVybiAkdGhpcy0+cWw7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogUmVtb3ZlIEhUTUwgaGVhZCx0cnkgdG8gc29sdmUgdGhlIGdhcmJsZWQNCiAgICAgKg0KICAgICAqIEByZXR1cm4gUXVlcnlMaXN0DQogICAgICovDQogICAgcHVibGljIGZ1bmN0aW9uIHJlbW92ZUhlYWQoKQ0KICAgIHsNCiAgICAgICAgJGh0bWwgPSBwcmVnX3JlcGxhY2UoJy88aGVhZC4rPz4uKzxcL2hlYWQ+L2lzJywnPGhlYWQ+PC9oZWFkPicsJHRoaXMtPmh0bWwpOw0KICAgICAgICAkdGhpcy0+c2V0SHRtbCgkaHRtbCk7DQogICAgICAgIHJldHVybiAkdGhpcy0+cWw7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogRXhlY3V0ZSB0aGUgcXVlcnkgcnVsZQ0KICAgICAqDQogICAgICogQHBhcmFtIENsb3N1cmV8bnVsbCAkY2FsbGJhY2sNCiAgICAgKiBAcmV0dXJuIFF1ZXJ5TGlzdA0KICAgICAqLw0KICAgIHB1YmxpYyBmdW5jdGlvbiBxdWVyeShDbG9zdXJlICRjYWxsYmFjayA9IG51bGwpDQogICAgew0KICAgICAgICAkdGhpcy0+ZGF0YSA9ICR0aGlzLT5nZXRMaXN0KCk7DQogICAgICAgICRjYWxsYmFjayAmJiAkdGhpcy0+ZGF0YSA9ICR0aGlzLT5kYXRhLT5tYXAoJGNhbGxiYWNrKTsNCiAgICAgICAgcmV0dXJuICR0aGlzLT5xbDsNCiAgICB9DQoNCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0TGlzdCgpDQogICAgew0KICAgICAgICAkZGF0YSA9IFtdOw0KICAgICAgICBpZiAoIWVtcHR5KCR0aGlzLT5yYW5nZSkpIHsNCiAgICAgICAgICAgICRyb2JqID0gJHRoaXMtPmRvY3VtZW50LT5maW5kKCR0aGlzLT5yYW5nZSk7DQogICAgICAgICAgICAkaSA9IDA7DQogICAgICAgICAgICBmb3JlYWNoICgkcm9iaiBhcyAkaXRlbSkgew0KICAgICAgICAgICAgICAgIGZvcmVhY2ggKCR0aGlzLT5ydWxlcyBhcyAka2V5ID0+ICRyZWdfdmFsdWUpew0KICAgICAgICAgICAgICAgICAgICAkdGFncyA9ICRyZWdfdmFsdWVbMl0gPz8gJyc7DQogICAgICAgICAgICAgICAgICAgICRpb2JqID0gcHEoJGl0ZW0sJHRoaXMtPmRvY3VtZW50KS0+ZmluZCgkcmVnX3ZhbHVlWzBdKTsNCiAgICAgICAgICAgICAgICAgICAgc3dpdGNoICgkcmVnX3ZhbHVlWzFdKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICd0ZXh0JzoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGF0YVskaV1bJGtleV0gPSAkdGhpcy0+YWxsb3dUYWdzKHBxKCRpb2JqKS0+aHRtbCgpLCR0YWdzKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2h0bWwnOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkYXRhWyRpXVska2V5XSA9ICR0aGlzLT5zdHJpcFRhZ3MocHEoJGlvYmopLT5odG1sKCksJHRhZ3MpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGF0YVskaV1bJGtleV0gPSBwcSgkaW9iaiktPmF0dHIoJHJlZ192YWx1ZVsxXSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICBpZihpc3NldCgkcmVnX3ZhbHVlWzNdKSl7DQogICAgICAgICAgICAgICAgICAgICAgICAkZGF0YVskaV1bJGtleV0gPSBjYWxsX3VzZXJfZnVuYygkcmVnX3ZhbHVlWzNdLCRkYXRhWyRpXVska2V5XSwka2V5KTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkaSsrOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgZm9yZWFjaCAoJHRoaXMtPnJ1bGVzIGFzICRrZXkgPT4gJHJlZ192YWx1ZSl7DQogICAgICAgICAgICAgICAgJHRhZ3MgPSAkcmVnX3ZhbHVlWzJdID8/ICcnOw0KICAgICAgICAgICAgICAgICRsb2JqID0gJHRoaXMtPmRvY3VtZW50LT5maW5kKCRyZWdfdmFsdWVbMF0pOw0KICAgICAgICAgICAgICAgICRpID0gMDsNCiAgICAgICAgICAgICAgICBmb3JlYWNoICgkbG9iaiBhcyAkaXRlbSkgew0KICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKCRyZWdfdmFsdWVbMV0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ3RleHQnOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkYXRhWyRpXVska2V5XSA9ICR0aGlzLT5hbGxvd1RhZ3MocHEoJGl0ZW0sJHRoaXMtPmRvY3VtZW50KS0+aHRtbCgpLCR0YWdzKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2h0bWwnOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRkYXRhWyRpXVska2V5XSA9ICR0aGlzLT5zdHJpcFRhZ3MocHEoJGl0ZW0sJHRoaXMtPmRvY3VtZW50KS0+aHRtbCgpLCR0YWdzKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRhdGFbJGldWyRrZXldID0gcHEoJGl0ZW0sJHRoaXMtPmRvY3VtZW50KS0+YXR0cigkcmVnX3ZhbHVlWzFdKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgIGlmKGlzc2V0KCRyZWdfdmFsdWVbM10pKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICRkYXRhWyRpXVska2V5XSA9IGNhbGxfdXNlcl9mdW5jKCRyZWdfdmFsdWVbM10sJGRhdGFbJGldWyRrZXldLCRrZXkpOw0KICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgJGkrKzsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCi8vICAgICAgICBwaHBRdWVyeTo6JGRvY3VtZW50cyA9IGFycmF5KCk7DQogICAgICAgIHJldHVybiBjb2xsZWN0KCRkYXRhKTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiDljrvpmaTnibnlrprnmoRodG1s5qCH562+DQogICAgICogQHBhcmFtICBzdHJpbmcgJGh0bWwNCiAgICAgKiBAcGFyYW0gIHN0cmluZyAkdGFnc19zdHIg5aSa5Liq5qCH562+5ZCN5LmL6Ze055So56m65qC86ZqU5byADQogICAgICogQHJldHVybiBzdHJpbmcNCiAgICAgKi8NCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gc3RyaXBUYWdzKCRodG1sLCR0YWdzX3N0cikNCiAgICB7DQogICAgICAgICR0YWdzQXJyID0gJHRoaXMtPnRhZygkdGFnc19zdHIpOw0KICAgICAgICAkaHRtbCA9ICR0aGlzLT5yZW1vdmVUYWdzKCRodG1sLCR0YWdzQXJyWzFdKTsNCiAgICAgICAgJHAgPSBhcnJheSgpOw0KICAgICAgICBmb3JlYWNoICgkdGFnc0FyclswXSBhcyAkdGFnKSB7DQogICAgICAgICAgICAkcFtdPSIvKDwoPzpcLyIuJHRhZy4ifCIuJHRhZy4iKVtePl0qPikvaSI7DQogICAgICAgIH0NCiAgICAgICAgJGh0bWwgPSBwcmVnX3JlcGxhY2UoJHAsIiIsdHJpbSgkaHRtbCkpOw0KICAgICAgICByZXR1cm4gJGh0bWw7DQogICAgfQ0KDQogICAgLyoqDQogICAgICog5L+d55WZ54m55a6a55qEaHRtbOagh+etvg0KICAgICAqIEBwYXJhbSAgc3RyaW5nICRodG1sDQogICAgICogQHBhcmFtICBzdHJpbmcgJHRhZ3Nfc3RyIOWkmuS4quagh+etvuWQjeS5i+mXtOeUqOepuuagvOmalOW8gA0KICAgICAqIEByZXR1cm4gc3RyaW5nDQogICAgICovDQogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGFsbG93VGFncygkaHRtbCwkdGFnc19zdHIpDQogICAgew0KICAgICAgICAkdGFnc0FyciA9ICR0aGlzLT50YWcoJHRhZ3Nfc3RyKTsNCiAgICAgICAgJGh0bWwgPSAkdGhpcy0+cmVtb3ZlVGFncygkaHRtbCwkdGFnc0FyclsxXSk7DQogICAgICAgICRhbGxvdyA9ICcnOw0KICAgICAgICBmb3JlYWNoICgkdGFnc0FyclswXSBhcyAkdGFnKSB7DQogICAgICAgICAgICAkYWxsb3cgLj0gIjwkdGFnPiAiOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiBzdHJpcF90YWdzKHRyaW0oJGh0bWwpLCRhbGxvdyk7DQogICAgfQ0KDQogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHRhZygkdGFnc19zdHIpDQogICAgew0KICAgICAgICAkdGFnQXJyID0gcHJlZ19zcGxpdCgiL1xzKy8iLCR0YWdzX3N0ciwtMSxQUkVHX1NQTElUX05PX0VNUFRZKTsNCiAgICAgICAgJHRhZ3MgPSBhcnJheShhcnJheSgpLGFycmF5KCkpOw0KICAgICAgICBmb3JlYWNoKCR0YWdBcnIgYXMgJHRhZykNCiAgICAgICAgew0KICAgICAgICAgICAgaWYocHJlZ19tYXRjaCgnLy0oLispLycsICR0YWcsJGFycikpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgYXJyYXlfcHVzaCgkdGFnc1sxXSwgJGFyclsxXSk7DQogICAgICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICAgICBhcnJheV9wdXNoKCR0YWdzWzBdLCAkdGFnKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gJHRhZ3M7DQogICAgfQ0KDQogICAgLyoqDQogICAgICog56e76Zmk54m55a6a55qEaHRtbOagh+etvg0KICAgICAqIEBwYXJhbSAgc3RyaW5nICRodG1sDQogICAgICogQHBhcmFtICBhcnJheSAgJHRhZ3Mg5qCH562+5pWw57uEDQogICAgICogQHJldHVybiBzdHJpbmcNCiAgICAgKi8NCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gcmVtb3ZlVGFncygkaHRtbCwkdGFncykNCiAgICB7DQogICAgICAgICR0YWdfc3RyID0gJyc7DQogICAgICAgIGlmKGNvdW50KCR0YWdzKSkNCiAgICAgICAgew0KICAgICAgICAgICAgZm9yZWFjaCAoJHRhZ3MgYXMgJHRhZykgew0KICAgICAgICAgICAgICAgICR0YWdfc3RyIC49ICR0YWdfc3RyPycsJy4kdGFnOiR0YWc7DQogICAgICAgICAgICB9DQovLyAgICAgICAgICAgIHBocFF1ZXJ5OjokZGVmYXVsdENoYXJzZXQgPSAkdGhpcy0+aW5wdXRFbmNvZGluZz8kdGhpcy0+aW5wdXRFbmNvZGluZzokdGhpcy0+aHRtbEVuY29kaW5nOw0KICAgICAgICAgICAgJGRvYyA9IHBocFF1ZXJ5OjpuZXdEb2N1bWVudEhUTUwoJGh0bWwpOw0KICAgICAgICAgICAgcHEoJGRvYyktPmZpbmQoJHRhZ19zdHIpLT5yZW1vdmUoKTsNCiAgICAgICAgICAgICRodG1sID0gcHEoJGRvYyktPmh0bWxPdXRlcigpOw0KICAgICAgICAgICAgJGRvYy0+dW5sb2FkRG9jdW1lbnQoKTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gJGh0bWw7DQogICAgfQ0KfQ==AppDevTools/query/vendor/jaeger/querylist/src/Exceptions/ServiceNotFoundException.phpPD9waHANCi8qKg0KICogQ3JlYXRlZCBieSBQaHBTdG9ybS4NCiAqIFVzZXI6IEphZWdlciA8SmFlZ2VyQ29kZUBnbWFpbC5jb20+DQogKiBEYXRlOiAyMDE3LzkvMjENCiAqLw0KDQpuYW1lc3BhY2UgUUxcRXhjZXB0aW9uczsNCg0KdXNlIEV4Y2VwdGlvbjsNCg0KY2xhc3MgU2VydmljZU5vdEZvdW5kRXhjZXB0aW9uIGV4dGVuZHMgRXhjZXB0aW9uDQp7DQoNCn0=AppDevTools/query/vendor/jaeger/querylist/src/Kernel.phpPD9waHANCi8qKg0KICogQ3JlYXRlZCBieSBQaHBTdG9ybS4NCiAqIFVzZXI6IEphZWdlciA8SmFlZ2VyQ29kZUBnbWFpbC5jb20+DQogKiBEYXRlOiAyMDE3LzkvMjENCiAqLw0KDQpuYW1lc3BhY2UgUUw7DQoNCnVzZSBRTFxDb250cmFjdHNcU2VydmljZVByb3ZpZGVyQ29udHJhY3Q7DQp1c2UgUUxcRXhjZXB0aW9uc1xTZXJ2aWNlTm90Rm91bmRFeGNlcHRpb247DQp1c2UgUUxcUHJvdmlkZXJzXEVuY29kZVNlcnZpY2VQcm92aWRlcjsNCnVzZSBDbG9zdXJlOw0KdXNlIFFMXFByb3ZpZGVyc1xIdHRwU2VydmljZVByb3ZpZGVyOw0KdXNlIFFMXFByb3ZpZGVyc1xQbHVnaW5TZXJ2aWNlUHJvdmlkZXI7DQp1c2UgUUxcUHJvdmlkZXJzXFN5c3RlbVNlcnZpY2VQcm92aWRlcjsNCg0KY2xhc3MgS2VybmVsDQp7DQogICAgcHJvdGVjdGVkICRwcm92aWRlcnMgPSBbDQogICAgICAgIFN5c3RlbVNlcnZpY2VQcm92aWRlcjo6Y2xhc3MsDQogICAgICAgIEh0dHBTZXJ2aWNlUHJvdmlkZXI6OmNsYXNzLA0KICAgICAgICBFbmNvZGVTZXJ2aWNlUHJvdmlkZXI6OmNsYXNzLA0KICAgICAgICBQbHVnaW5TZXJ2aWNlUHJvdmlkZXI6OmNsYXNzDQogICAgXTsNCg0KICAgIHByb3RlY3RlZCAkYmluZHM7DQogICAgcHJvdGVjdGVkICRxbDsNCg0KICAgIC8qKg0KICAgICAqIEtlcm5lbCBjb25zdHJ1Y3Rvci4NCiAgICAgKiBAcGFyYW0gJHFsDQogICAgICovDQogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KFF1ZXJ5TGlzdCAkcWwpDQogICAgew0KICAgICAgICAkdGhpcy0+cWwgPSAkcWw7DQogICAgICAgICR0aGlzLT5iaW5kcyA9IGNvbGxlY3QoKTsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gYm9vdHN0cmFwKCkNCiAgICB7DQogICAgICAgIC8v5rOo5YaM5pyN5Yqh5o+Q5L6b6ICFDQogICAgICAgICR0aGlzLT5yZWdpc3RlclByb3ZpZGVycygpOw0KICAgICAgICByZXR1cm4gJHRoaXM7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIHJlZ2lzdGVyUHJvdmlkZXJzKCkNCiAgICB7DQogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5wcm92aWRlcnMgYXMgJHByb3ZpZGVyKSB7DQogICAgICAgICAgICAkdGhpcy0+cmVnaXN0ZXIobmV3ICRwcm92aWRlcigpKTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBiaW5kKHN0cmluZyAkbmFtZSxDbG9zdXJlICRwcm92aWRlcikNCiAgICB7DQogICAgICAgICR0aGlzLT5iaW5kc1skbmFtZV0gPSAkcHJvdmlkZXI7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIGdldFNlcnZpY2Uoc3RyaW5nICRuYW1lKQ0KICAgIHsNCiAgICAgICAgaWYoISR0aGlzLT5iaW5kcy0+b2Zmc2V0RXhpc3RzKCRuYW1lKSl7DQogICAgICAgICAgICB0aHJvdyBuZXcgU2VydmljZU5vdEZvdW5kRXhjZXB0aW9uKCJTZXJ2aWNlOiB7JG5hbWV9IG5vdCBmb3VuZCEiKTsNCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gJHRoaXMtPmJpbmRzWyRuYW1lXTsNCiAgICB9DQoNCiAgICBwcml2YXRlIGZ1bmN0aW9uIHJlZ2lzdGVyKFNlcnZpY2VQcm92aWRlckNvbnRyYWN0ICRpbnN0YW5jZSkNCiAgICB7DQogICAgICAgICRpbnN0YW5jZS0+cmVnaXN0ZXIoJHRoaXMpOw0KICAgIH0NCg0KDQp9AppDevTools/query/vendor/jaeger/querylist/src/Providers/EncodeServiceProvider.phpPD9waHANCi8qKg0KICogQ3JlYXRlZCBieSBQaHBTdG9ybS4NCiAqIFVzZXI6IEphZWdlciA8SmFlZ2VyQ29kZUBnbWFpbC5jb20+DQogKiBEYXRlOiAyMDE3LzkvMjANCiAqLw0KDQpuYW1lc3BhY2UgUUxcUHJvdmlkZXJzOw0KDQp1c2UgUUxcQ29udHJhY3RzXFNlcnZpY2VQcm92aWRlckNvbnRyYWN0Ow0KdXNlIFFMXEtlcm5lbDsNCnVzZSBRTFxTZXJ2aWNlc1xFbmNvZGVTZXJ2aWNlOw0KDQpjbGFzcyBFbmNvZGVTZXJ2aWNlUHJvdmlkZXIgaW1wbGVtZW50cyBTZXJ2aWNlUHJvdmlkZXJDb250cmFjdA0Kew0KICAgIHB1YmxpYyBmdW5jdGlvbiByZWdpc3RlcihLZXJuZWwgJGtlcm5lbCkNCiAgICB7DQogICAgICAgICRrZXJuZWwtPmJpbmQoJ2VuY29kaW5nJyxmdW5jdGlvbiAoc3RyaW5nICRvdXRwdXRFbmNvZGluZyxzdHJpbmcgJGlucHV0RW5jb2RpbmcgPSBudWxsKXsNCiAgICAgICAgICAgIHJldHVybiBFbmNvZGVTZXJ2aWNlOjpjb252ZXJ0KCR0aGlzLCRvdXRwdXRFbmNvZGluZywkaW5wdXRFbmNvZGluZyk7DQogICAgICAgIH0pOw0KICAgIH0NCn0=AppDevTools/query/vendor/jaeger/querylist/src/Providers/HttpServiceProvider.phpPD9waHANCi8qKg0KICogQ3JlYXRlZCBieSBQaHBTdG9ybS4NCiAqIFVzZXI6IEphZWdlciA8SmFlZ2VyQ29kZUBnbWFpbC5jb20+DQogKiBEYXRlOiAyMDE3LzkvMjINCiAqLw0KDQpuYW1lc3BhY2UgUUxcUHJvdmlkZXJzOw0KDQoNCnVzZSBRTFxDb250cmFjdHNcU2VydmljZVByb3ZpZGVyQ29udHJhY3Q7DQp1c2UgUUxcS2VybmVsOw0KdXNlIFFMXFNlcnZpY2VzXEh0dHBTZXJ2aWNlOw0KDQpjbGFzcyBIdHRwU2VydmljZVByb3ZpZGVyIGltcGxlbWVudHMgU2VydmljZVByb3ZpZGVyQ29udHJhY3QNCnsNCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVnaXN0ZXIoS2VybmVsICRrZXJuZWwpDQogICAgew0KICAgICAgICAka2VybmVsLT5iaW5kKCdnZXQnLGZ1bmN0aW9uICguLi4kYXJncyl7DQogICAgICAgICAgIHJldHVybiBIdHRwU2VydmljZTo6Z2V0KCR0aGlzLC4uLiRhcmdzKTsNCiAgICAgICAgfSk7DQoNCiAgICAgICAgJGtlcm5lbC0+YmluZCgncG9zdCcsZnVuY3Rpb24gKC4uLiRhcmdzKXsNCiAgICAgICAgICAgIHJldHVybiBIdHRwU2VydmljZTo6cG9zdCgkdGhpcywuLi4kYXJncyk7DQogICAgICAgIH0pOw0KICAgIH0NCn0=AppDevTools/query/vendor/jaeger/querylist/src/Providers/PluginServiceProvider.phpPD9waHANCi8qKg0KICogQ3JlYXRlZCBieSBQaHBTdG9ybS4NCiAqIFVzZXI6IEphZWdlciA8SmFlZ2VyQ29kZUBnbWFpbC5jb20+DQogKiBEYXRlOiAyMDE3LzkvMjINCiAqLw0KDQpuYW1lc3BhY2UgUUxcUHJvdmlkZXJzOw0KDQp1c2UgUUxcQ29udHJhY3RzXFNlcnZpY2VQcm92aWRlckNvbnRyYWN0Ow0KdXNlIFFMXEtlcm5lbDsNCnVzZSBRTFxTZXJ2aWNlc1xQbHVnaW5TZXJ2aWNlOw0KDQpjbGFzcyBQbHVnaW5TZXJ2aWNlUHJvdmlkZXIgaW1wbGVtZW50cyBTZXJ2aWNlUHJvdmlkZXJDb250cmFjdA0Kew0KICAgIHB1YmxpYyBmdW5jdGlvbiByZWdpc3RlcihLZXJuZWwgJGtlcm5lbCkNCiAgICB7DQogICAgICAgICRrZXJuZWwtPmJpbmQoJ3VzZScsZnVuY3Rpb24gKCRwbHVnaW5zLC4uLiRvcHQpew0KICAgICAgICAgICAgcmV0dXJuIFBsdWdpblNlcnZpY2U6Omluc3RhbGwoJHRoaXMsJHBsdWdpbnMsLi4uJG9wdCk7DQogICAgICAgIH0pOw0KICAgIH0NCg0KfQ==AppDevTools/query/vendor/jaeger/querylist/src/Providers/SystemServiceProvider.phpPD9waHANCi8qKg0KICogQ3JlYXRlZCBieSBQaHBTdG9ybS4NCiAqIFVzZXI6IEphZWdlciA8SmFlZ2VyQ29kZUBnbWFpbC5jb20+DQogKiBEYXRlOiAyMDE3LzkvMjINCiAqLw0KDQpuYW1lc3BhY2UgUUxcUHJvdmlkZXJzOw0KDQp1c2UgUUxcQ29udHJhY3RzXFNlcnZpY2VQcm92aWRlckNvbnRyYWN0Ow0KdXNlIFFMXEtlcm5lbDsNCg0KY2xhc3MgU3lzdGVtU2VydmljZVByb3ZpZGVyIGltcGxlbWVudHMgU2VydmljZVByb3ZpZGVyQ29udHJhY3QNCnsNCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVnaXN0ZXIoS2VybmVsICRrZXJuZWwpDQogICAgew0KICAgICAgICAka2VybmVsLT5iaW5kKCdodG1sJyxmdW5jdGlvbiAoLi4uJGFyZ3Mpew0KICAgICAgICAgICAgJHRoaXMtPnNldEh0bWwoLi4uJGFyZ3MpOw0KICAgICAgICAgICAgcmV0dXJuICR0aGlzOw0KICAgICAgICB9KTsNCg0KICAgIH0NCn0=AppDevTools/query/vendor/jaeger/querylist/src/QueryList.phpPD9waHANCi8qKg0KICogUXVlcnlMaXN0DQogKg0KICog5LiA5Liq5Z+65LqOcGhwUXVlcnnnmoTpgJrnlKjliJfooajph4fpm4bnsbsNCiAqDQogKiBAYXV0aG9yIAkJCUphZWdlcg0KICogQGVtYWlsIAkJCUphZWdlckNvZGVAZ21haWwuY29tDQogKiBAbGluayAgICAgICAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9qYWUtamFlL1F1ZXJ5TGlzdA0KICogQHZlcnNpb24gICAgICAgICA0LjAuMA0KICoNCiAqLw0KDQpuYW1lc3BhY2UgUUw7DQp1c2UgcGhwUXVlcnk7DQp1c2UgUUxcRG9tXFF1ZXJ5Ow0KdXNlIElsbHVtaW5hdGVcU3VwcG9ydFxDb2xsZWN0aW9uOw0KdXNlIENsb3N1cmU7DQoNCi8qKg0KICogQ2xhc3MgUXVlcnlMaXN0DQogKiBAcGFja2FnZSBRTA0KICoNCiAqIEBtZXRob2Qgc3RyaW5nIGdldEh0bWwoKQ0KICogQG1ldGhvZCBRdWVyeUxpc3Qgc2V0SHRtbCgkaHRtbCkNCiAqIEBtZXRob2QgUXVlcnlMaXN0IGh0bWwoJGh0bWwpDQogKiBAbWV0aG9kIERvbVxFbGVtZW50cyBmaW5kKCRzZWxlY3RvcikNCiAqIEBtZXRob2QgUXVlcnlMaXN0IHJ1bGVzKGFycmF5ICRydWxlcykNCiAqIEBtZXRob2QgUXVlcnlMaXN0IHJhbmdlKCRyYW5nZSkNCiAqIEBtZXRob2QgUXVlcnlMaXN0IHJlbW92ZUhlYWQoKQ0KICogQG1ldGhvZCBRdWVyeUxpc3QgcXVlcnkoQ2xvc3VyZSAkY2FsbGJhY2sgPSBudWxsKQ0KICogQG1ldGhvZCBDb2xsZWN0aW9uIGdldERhdGEoQ2xvc3VyZSAkY2FsbGJhY2sgPSBudWxsKQ0KICogQG1ldGhvZCBRdWVyeUxpc3Qgc2V0RGF0YShDb2xsZWN0aW9uICRkYXRhKQ0KICogQG1ldGhvZCBRdWVyeUxpc3QgZW5jb2Rpbmcoc3RyaW5nICRvdXRwdXRFbmNvZGluZyxzdHJpbmcgJGlucHV0RW5jb2RpbmcgPSBudWxsKQ0KICogQG1ldGhvZCBRdWVyeUxpc3QgZ2V0KCR1cmwsJGFyZ3MgPSBudWxsLCRvdGhlckFyZ3MgPSBbXSkNCiAqIEBtZXRob2QgUXVlcnlMaXN0IHBvc3QoJHVybCwkYXJncyA9IG51bGwsJG90aGVyQXJncyA9IFtdKQ0KICogQG1ldGhvZCBRdWVyeUxpc3QgdXNlKCRwbHVnaW5zLC4uLiRvcHQpDQogKi8NCmNsYXNzIFF1ZXJ5TGlzdA0Kew0KICAgIHByb3RlY3RlZCAkcXVlcnk7DQogICAgcHJvdGVjdGVkICRrZXJuZWw7DQogICAgcHJvdGVjdGVkIHN0YXRpYyAkaW5zdGFuY2UgPSBudWxsOw0KDQogICAgLyoqDQogICAgICogUXVlcnlMaXN0IGNvbnN0cnVjdG9yLg0KICAgICAqLw0KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpDQogICAgew0KICAgICAgICAkdGhpcy0+cXVlcnkgPSBuZXcgUXVlcnkoJHRoaXMpOw0KICAgICAgICAkdGhpcy0+a2VybmVsID0gKG5ldyBLZXJuZWwoJHRoaXMpKS0+Ym9vdHN0cmFwKCk7DQogICAgICAgIENvbmZpZzo6Z2V0SW5zdGFuY2UoKS0+Ym9vdHN0cmFwKCR0aGlzKTsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jYWxsKCRuYW1lLCAkYXJndW1lbnRzKQ0KICAgIHsNCiAgICAgICAgaWYobWV0aG9kX2V4aXN0cygkdGhpcy0+cXVlcnksJG5hbWUpKXsNCiAgICAgICAgICAgICRyZXN1bHQgPSAkdGhpcy0+cXVlcnktPiRuYW1lKC4uLiRhcmd1bWVudHMpOw0KICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgICRyZXN1bHQgPSAkdGhpcy0+a2VybmVsLT5nZXRTZXJ2aWNlKCRuYW1lKS0+Y2FsbCgkdGhpcywuLi4kYXJndW1lbnRzKTsNCiAgICAgICAgfQ0KICAgICAgIHJldHVybiAkcmVzdWx0Ow0KICAgIH0NCg0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gX19jYWxsU3RhdGljKCRuYW1lLCAkYXJndW1lbnRzKQ0KICAgIHsNCiAgICAgICAgJGluc3RhbmNlID0gc2VsZjo6Z2V0SW5zdGFuY2UoKTsNCiAgICAgICAgcmV0dXJuICRpbnN0YW5jZS0+JG5hbWUoLi4uJGFyZ3VtZW50cyk7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIF9fZGVzdHJ1Y3QoKQ0KICAgIHsNCiAgICAgICAgJHRoaXMtPmRlc3RydWN0KCk7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogR2V0IHRoZSBRdWVyeUxpc3Qgc2luZ2xlIGluc3RhbmNlDQogICAgICoNCiAgICAgKiBAcmV0dXJuIFF1ZXJ5TGlzdA0KICAgICAqLw0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0SW5zdGFuY2UoKQ0KICAgIHsNCiAgICAgICAgc2VsZjo6JGluc3RhbmNlIHx8IHNlbGY6OiRpbnN0YW5jZSA9IG5ldyBzZWxmKCk7DQogICAgICAgIHJldHVybiBzZWxmOjokaW5zdGFuY2U7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogR2V0IHRoZSBDb25maWcgaW5zdGFuY2UNCiAgICAgKiBAcmV0dXJuIG51bGx8Q29uZmlnDQogICAgICovDQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjb25maWcoKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuIENvbmZpZzo6Z2V0SW5zdGFuY2UoKTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBEZXN0cnVjdGlvbiBvZiByZXNvdXJjZXMNCiAgICAgKi8NCiAgICBwdWJsaWMgZnVuY3Rpb24gZGVzdHJ1Y3QoKQ0KICAgIHsNCiAgICAgICAgcGhwUXVlcnk6OiRkb2N1bWVudHMgPSBbXTsNCiAgICB9DQoNCiAgICAvKioNCiAgICAgKiBCaW5kIGEgY3VzdG9tIG1ldGhvZCB0byB0aGUgUXVlcnlMaXN0IG9iamVjdA0KICAgICAqDQogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSBJbnZva2luZyB0aGUgbmFtZQ0KICAgICAqIEBwYXJhbSBDbG9zdXJlICRwcm92aWRlIENhbGxlZCBtZXRob2QNCiAgICAgKiBAcmV0dXJuICR0aGlzDQogICAgICovDQogICAgcHVibGljIGZ1bmN0aW9uIGJpbmQoc3RyaW5nICRuYW1lLENsb3N1cmUgJHByb3ZpZGUpDQogICAgew0KICAgICAgICAkdGhpcy0+a2VybmVsLT5iaW5kKCRuYW1lLCRwcm92aWRlKTsNCiAgICAgICAgcmV0dXJuICR0aGlzOw0KICAgIH0NCg0KfQ==AppDevTools/query/vendor/jaeger/querylist/src/Services/EncodeService.phpPD9waHANCi8qKg0KICogQ3JlYXRlZCBieSBQaHBTdG9ybS4NCiAqIFVzZXI6IEphZWdlciA8SmFlZ2VyQ29kZUBnbWFpbC5jb20+DQogKiBEYXRlOiAyMDE3LzkvMjANCiAqIOe8lueggei9rOaNouacjeWKoQ0KICovDQoNCm5hbWVzcGFjZSBRTFxTZXJ2aWNlczsNCg0KdXNlIFFMXFF1ZXJ5TGlzdDsNCg0KY2xhc3MgRW5jb2RlU2VydmljZQ0Kew0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY29udmVydChRdWVyeUxpc3QgJHFsLHN0cmluZyAkb3V0cHV0RW5jb2Rpbmcsc3RyaW5nICRpbnB1dEVuY29kaW5nID0gbnVsbCkNCiAgICB7DQogICAgICAgICRodG1sID0gJHFsLT5nZXRIdG1sKCk7DQogICAgICAgICRpbnB1dEVuY29kaW5nIHx8ICRpbnB1dEVuY29kaW5nID0gc2VsZjo6ZGV0ZWN0KCRodG1sKTsNCiAgICAgICAgJGh0bWwgPSBpY29udigkaW5wdXRFbmNvZGluZywkb3V0cHV0RW5jb2RpbmcuJy8vSUdOT1JFJywkaHRtbCk7DQogICAgICAgICRxbC0+c2V0SHRtbCgkaHRtbCk7DQogICAgICAgIHJldHVybiAkcWw7DQogICAgfQ0KDQogICAgLyoqDQogICAgICogQXR0ZW1wdHMgdG8gZGV0ZWN0IHRoZSBlbmNvZGluZw0KICAgICAqIEBwYXJhbSAkc3RyaW5nDQogICAgICogQHJldHVybiBib29sfGZhbHNlfG1peGVkfHN0cmluZw0KICAgICAqLw0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZGV0ZWN0KCRzdHJpbmcpDQogICAgew0KICAgICAgICAkY2hhcnNldD1tYl9kZXRlY3RfZW5jb2RpbmcoJHN0cmluZywgYXJyYXkoJ0FTQ0lJJywgJ0dCMjMxMicsICdHQksnLCAnVVRGLTgnKSx0cnVlKTsNCiAgICAgICAgaWYoc3RydG9sb3dlcigkY2hhcnNldCk9PSdjcDkzNicpDQogICAgICAgICAgICAkY2hhcnNldD0nR0JLJzsNCiAgICAgICAgcmV0dXJuICRjaGFyc2V0Ow0KICAgIH0NCg0KfQ==AppDevTools/query/vendor/jaeger/querylist/src/Services/HttpService.phpPD9waHANCi8qKg0KICogQ3JlYXRlZCBieSBQaHBTdG9ybS4NCiAqIFVzZXI6IEphZWdlciA8SmFlZ2VyQ29kZUBnbWFpbC5jb20+DQogKiBEYXRlOiAyMDE3LzkvMjINCiAqLw0KDQpuYW1lc3BhY2UgUUxcU2VydmljZXM7DQoNCnVzZSBHdXp6bGVIdHRwXENvb2tpZVxDb29raWVKYXI7DQp1c2UgSmFlZ2VyXEdIdHRwOw0KdXNlIFFMXFF1ZXJ5TGlzdDsNCg0KY2xhc3MgSHR0cFNlcnZpY2UNCnsNCiAgICBwcm90ZWN0ZWQgc3RhdGljICRjb29raWVKYXIgPSBudWxsOw0KDQogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRDb29raWVKYXIoKQ0KICAgIHsNCiAgICAgICAgaWYoc2VsZjo6JGNvb2tpZUphciA9PSBudWxsKQ0KICAgICAgICB7DQogICAgICAgICAgICBzZWxmOjokY29va2llSmFyID0gbmV3IENvb2tpZUphcigpOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiBzZWxmOjokY29va2llSmFyOw0KICAgIH0NCg0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0KFF1ZXJ5TGlzdCAkcWwsJHVybCwkYXJncyA9IG51bGwsJG90aGVyQXJncyA9IFtdKQ0KICAgIHsNCiAgICAgICAgJG90aGVyQXJncyA9IGFycmF5X21lcmdlKFsNCiAgICAgICAgICAgICdjb29raWVzJyA9PiBzZWxmOjpnZXRDb29raWVKYXIoKSwNCiAgICAgICAgICAgICd2ZXJpZnknID0+IGZhbHNlDQogICAgICAgIF0sJG90aGVyQXJncyk7DQogICAgICAgICRodG1sID0gR0h0dHA6OmdldCgkdXJsLCRhcmdzLCRvdGhlckFyZ3MpOw0KICAgICAgICAkcWwtPnNldEh0bWwoJGh0bWwpOw0KICAgICAgICByZXR1cm4gJHFsOw0KICAgIH0NCg0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcG9zdChRdWVyeUxpc3QgJHFsLCR1cmwsJGFyZ3MgPSBudWxsLCRvdGhlckFyZ3MgPSBbXSkNCiAgICB7DQogICAgICAgICRvdGhlckFyZ3MgPSBhcnJheV9tZXJnZShbDQogICAgICAgICAgICAnY29va2llcycgPT4gc2VsZjo6Z2V0Q29va2llSmFyKCksDQogICAgICAgICAgICAndmVyaWZ5JyA9PiBmYWxzZQ0KICAgICAgICBdLCRvdGhlckFyZ3MpOw0KICAgICAgICAkaHRtbCA9IEdIdHRwOjpwb3N0KCR1cmwsJGFyZ3MsJG90aGVyQXJncyk7DQogICAgICAgICRxbC0+c2V0SHRtbCgkaHRtbCk7DQogICAgICAgIHJldHVybiAkcWw7DQogICAgfQ0KfQ==AppDevTools/query/vendor/jaeger/querylist/src/Services/PluginService.phpPD9waHANCi8qKg0KICogQ3JlYXRlZCBieSBQaHBTdG9ybS4NCiAqIFVzZXI6IEphZWdlciA8SmFlZ2VyQ29kZUBnbWFpbC5jb20+DQogKiBEYXRlOiAyMDE3LzkvMjINCiAqLw0KDQpuYW1lc3BhY2UgUUxcU2VydmljZXM7DQoNCnVzZSBRTFxRdWVyeUxpc3Q7DQoNCmNsYXNzIFBsdWdpblNlcnZpY2UNCnsNCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGluc3RhbGwoUXVlcnlMaXN0ICRxdWVyeUxpc3QsICRwbHVnaW5zLCAuLi4kb3B0KQ0KICAgIHsNCiAgICAgICAgaWYoaXNfYXJyYXkoJHBsdWdpbnMpKQ0KICAgICAgICB7DQogICAgICAgICAgICBmb3JlYWNoICgkcGx1Z2lucyBhcyAkcGx1Z2luKSB7DQogICAgICAgICAgICAgICAgJHBsdWdpbjo6aW5zdGFsbCgkcXVlcnlMaXN0KTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfWVsc2V7DQogICAgICAgICAgICAkcGx1Z2luczo6aW5zdGFsbCgkcXVlcnlMaXN0LC4uLiRvcHQpOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiAkcXVlcnlMaXN0Ow0KICAgIH0NCn0=AppDevTools/query/vendor/psr/http-message/CHANGELOG.mdIyBDaGFuZ2Vsb2cKCkFsbCBub3RhYmxlIGNoYW5nZXMgdG8gdGhpcyBwcm9qZWN0IHdpbGwgYmUgZG9jdW1lbnRlZCBpbiB0aGlzIGZpbGUsIGluIHJldmVyc2UgY2hyb25vbG9naWNhbCBvcmRlciBieSByZWxlYXNlLgoKIyMgMS4wLjEgLSAyMDE2LTA4LTA2CgojIyMgQWRkZWQKCi0gTm90aGluZy4KCiMjIyBEZXByZWNhdGVkCgotIE5vdGhpbmcuCgojIyMgUmVtb3ZlZAoKLSBOb3RoaW5nLgoKIyMjIEZpeGVkCgotIFVwZGF0ZWQgYWxsIGBAcmV0dXJuIHNlbGZgIGFubm90YXRpb24gcmVmZXJlbmNlcyBpbiBpbnRlcmZhY2VzIHRvIHVzZQogIGBAcmV0dXJuIHN0YXRpY2AsIHdoaWNoIG1vcmUgY2xvc2VsbHkgZm9sbG93cyB0aGUgc2VtYW50aWNzIG9mIHRoZQogIHNwZWNpZmljYXRpb24uCi0gVXBkYXRlZCB0aGUgYE1lc3NhZ2VJbnRlcmZhY2U6OmdldEhlYWRlcnMoKWAgcmV0dXJuIGFubm90YXRpb24gdG8gdXNlIHRoZQogIHZhbHVlIGBzdHJpbmdbXVtdYCwgaW5kaWNhdGluZyB0aGUgZm9ybWF0IGlzIGEgbmVzdGVkIGFycmF5IG9mIHN0cmluZ3MuCi0gVXBkYXRlZCB0aGUgYEBsaW5rYCBhbm5vdGF0aW9uIGZvciBgUmVxdWVzdEludGVyZmFjZTo6d2l0aFJlcXVlc3RUYXJnZXQoKWAKICB0byBwb2ludCB0byB0aGUgY29ycmVjdCBzZWN0aW9uIG9mIFJGQyA3MjMwLgotIFVwZGF0ZWQgdGhlIGBTZXJ2ZXJSZXF1ZXN0SW50ZXJmYWNlOjp3aXRoVXBsb2FkZWRGaWxlcygpYCBwYXJhbWV0ZXIgYW5ub3RhdGlvbgogIHRvIGFkZCB0aGUgcGFyYW1ldGVyIG5hbWUgKGAkdXBsb2FkZWRGaWxlc2ApLgotIFVwZGF0ZWQgYSBgQHRocm93c2AgYW5ub3RhdGlvbiBmb3IgdGhlIGBVcGxvYWRlZEZpbGVJbnRlcmZhY2U6Om1vdmVUbygpYAogIG1ldGhvZCB0byBjb3JyZWN0bHkgcmVmZXJlbmNlIHRoZSBtZXRob2QgcGFyYW1ldGVyIChpdCB3YXMgcmVmZXJlbmNpbmcgYW4KICBpbmNvcnJlY3QgcGFyYW1ldGVyIG5hbWUgcHJldmlvdXNseSkuCgojIyAxLjAuMCAtIDIwMTYtMDUtMTgKCkluaXRpYWwgc3RhYmxlIHJlbGVhc2U7IHJlZmxlY3RzIGFjY2VwdGVkIFBTUi03IHNwZWNpZmljYXRpb24uCg==AppDevTools/query/vendor/psr/http-message/LICENSEQ29weXJpZ2h0IChjKSAyMDE0IFBIUCBGcmFtZXdvcmsgSW50ZXJvcGVyYWJpbGl0eSBHcm91cAoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSAKb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyAKdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCAKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIApmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgoKVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gCmFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgoKVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQpBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCkxJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCk9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KVEhFIFNPRlRXQVJFLgo=AppDevTools/query/vendor/psr/http-message/README.mdUFNSIEh0dHAgTWVzc2FnZQo9PT09PT09PT09PT09PT09CgpUaGlzIHJlcG9zaXRvcnkgaG9sZHMgYWxsIGludGVyZmFjZXMvY2xhc3Nlcy90cmFpdHMgcmVsYXRlZCB0bwpbUFNSLTddKGh0dHA6Ly93d3cucGhwLWZpZy5vcmcvcHNyL3Bzci03LykuCgpOb3RlIHRoYXQgdGhpcyBpcyBub3QgYSBIVFRQIG1lc3NhZ2UgaW1wbGVtZW50YXRpb24gb2YgaXRzIG93bi4gSXQgaXMgbWVyZWx5IGFuCmludGVyZmFjZSB0aGF0IGRlc2NyaWJlcyBhIEhUVFAgbWVzc2FnZS4gU2VlIHRoZSBzcGVjaWZpY2F0aW9uIGZvciBtb3JlIGRldGFpbHMuCgpVc2FnZQotLS0tLQoKV2UnbGwgY2VydGFpbmx5IG5lZWQgc29tZSBzdHVmZiBpbiBoZXJlLg==AppDevTools/query/vendor/psr/http-message/composer.jsonewogICAgIm5hbWUiOiAicHNyL2h0dHAtbWVzc2FnZSIsCiAgICAiZGVzY3JpcHRpb24iOiAiQ29tbW9uIGludGVyZmFjZSBmb3IgSFRUUCBtZXNzYWdlcyIsCiAgICAia2V5d29yZHMiOiBbInBzciIsICJwc3ItNyIsICJodHRwIiwgImh0dHAtbWVzc2FnZSIsICJyZXF1ZXN0IiwgInJlc3BvbnNlIl0sCiAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3BocC1maWcvaHR0cC1tZXNzYWdlIiwKICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAiYXV0aG9ycyI6IFsKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogIlBIUC1GSUciLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cDovL3d3dy5waHAtZmlnLm9yZy8iCiAgICAgICAgfQogICAgXSwKICAgICJyZXF1aXJlIjogewogICAgICAgICJwaHAiOiAiPj01LjMuMCIKICAgIH0sCiAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgInBzci00IjogewogICAgICAgICAgICAiUHNyXFxIdHRwXFxNZXNzYWdlXFwiOiAic3JjLyIKICAgICAgICB9CiAgICB9LAogICAgImV4dHJhIjogewogICAgICAgICJicmFuY2gtYWxpYXMiOiB7CiAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjEuMC54LWRldiIKICAgICAgICB9CiAgICB9Cn0KAppDevTools/query/vendor/psr/http-message/src/MessageInterface.phpPD9waHAKCm5hbWVzcGFjZSBQc3JcSHR0cFxNZXNzYWdlOwoKLyoqCiAqIEhUVFAgbWVzc2FnZXMgY29uc2lzdCBvZiByZXF1ZXN0cyBmcm9tIGEgY2xpZW50IHRvIGEgc2VydmVyIGFuZCByZXNwb25zZXMKICogZnJvbSBhIHNlcnZlciB0byBhIGNsaWVudC4gVGhpcyBpbnRlcmZhY2UgZGVmaW5lcyB0aGUgbWV0aG9kcyBjb21tb24gdG8KICogZWFjaC4KICoKICogTWVzc2FnZXMgYXJlIGNvbnNpZGVyZWQgaW1tdXRhYmxlOyBhbGwgbWV0aG9kcyB0aGF0IG1pZ2h0IGNoYW5nZSBzdGF0ZSBNVVNUCiAqIGJlIGltcGxlbWVudGVkIHN1Y2ggdGhhdCB0aGV5IHJldGFpbiB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIGN1cnJlbnQKICogbWVzc2FnZSBhbmQgcmV0dXJuIGFuIGluc3RhbmNlIHRoYXQgY29udGFpbnMgdGhlIGNoYW5nZWQgc3RhdGUuCiAqCiAqIEBsaW5rIGh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzcyMzAudHh0CiAqIEBsaW5rIGh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzcyMzEudHh0CiAqLwppbnRlcmZhY2UgTWVzc2FnZUludGVyZmFjZQp7CiAgICAvKioKICAgICAqIFJldHJpZXZlcyB0aGUgSFRUUCBwcm90b2NvbCB2ZXJzaW9uIGFzIGEgc3RyaW5nLgogICAgICoKICAgICAqIFRoZSBzdHJpbmcgTVVTVCBjb250YWluIG9ubHkgdGhlIEhUVFAgdmVyc2lvbiBudW1iZXIgKGUuZy4sICIxLjEiLCAiMS4wIikuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgSFRUUCBwcm90b2NvbCB2ZXJzaW9uLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UHJvdG9jb2xWZXJzaW9uKCk7CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYW4gaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIEhUVFAgcHJvdG9jb2wgdmVyc2lvbi4KICAgICAqCiAgICAgKiBUaGUgdmVyc2lvbiBzdHJpbmcgTVVTVCBjb250YWluIG9ubHkgdGhlIEhUVFAgdmVyc2lvbiBudW1iZXIgKGUuZy4sCiAgICAgKiAiMS4xIiwgIjEuMCIpLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgYmUgaW1wbGVtZW50ZWQgaW4gc3VjaCBhIHdheSBhcyB0byByZXRhaW4gdGhlCiAgICAgKiBpbW11dGFiaWxpdHkgb2YgdGhlIG1lc3NhZ2UsIGFuZCBNVVNUIHJldHVybiBhbiBpbnN0YW5jZSB0aGF0IGhhcyB0aGUKICAgICAqIG5ldyBwcm90b2NvbCB2ZXJzaW9uLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHZlcnNpb24gSFRUUCBwcm90b2NvbCB2ZXJzaW9uCiAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aFByb3RvY29sVmVyc2lvbigkdmVyc2lvbik7CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZXMgYWxsIG1lc3NhZ2UgaGVhZGVyIHZhbHVlcy4KICAgICAqCiAgICAgKiBUaGUga2V5cyByZXByZXNlbnQgdGhlIGhlYWRlciBuYW1lIGFzIGl0IHdpbGwgYmUgc2VudCBvdmVyIHRoZSB3aXJlLCBhbmQKICAgICAqIGVhY2ggdmFsdWUgaXMgYW4gYXJyYXkgb2Ygc3RyaW5ncyBhc3NvY2lhdGVkIHdpdGggdGhlIGhlYWRlci4KICAgICAqCiAgICAgKiAgICAgLy8gUmVwcmVzZW50IHRoZSBoZWFkZXJzIGFzIGEgc3RyaW5nCiAgICAgKiAgICAgZm9yZWFjaCAoJG1lc3NhZ2UtPmdldEhlYWRlcnMoKSBhcyAkbmFtZSA9PiAkdmFsdWVzKSB7CiAgICAgKiAgICAgICAgIGVjaG8gJG5hbWUgLiAiOiAiIC4gaW1wbG9kZSgiLCAiLCAkdmFsdWVzKTsKICAgICAqICAgICB9CiAgICAgKgogICAgICogICAgIC8vIEVtaXQgaGVhZGVycyBpdGVyYXRpdmVseToKICAgICAqICAgICBmb3JlYWNoICgkbWVzc2FnZS0+Z2V0SGVhZGVycygpIGFzICRuYW1lID0+ICR2YWx1ZXMpIHsKICAgICAqICAgICAgICAgZm9yZWFjaCAoJHZhbHVlcyBhcyAkdmFsdWUpIHsKICAgICAqICAgICAgICAgICAgIGhlYWRlcihzcHJpbnRmKCclczogJXMnLCAkbmFtZSwgJHZhbHVlKSwgZmFsc2UpOwogICAgICogICAgICAgICB9CiAgICAgKiAgICAgfQogICAgICoKICAgICAqIFdoaWxlIGhlYWRlciBuYW1lcyBhcmUgbm90IGNhc2Utc2Vuc2l0aXZlLCBnZXRIZWFkZXJzKCkgd2lsbCBwcmVzZXJ2ZSB0aGUKICAgICAqIGV4YWN0IGNhc2UgaW4gd2hpY2ggaGVhZGVycyB3ZXJlIG9yaWdpbmFsbHkgc3BlY2lmaWVkLgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nW11bXSBSZXR1cm5zIGFuIGFzc29jaWF0aXZlIGFycmF5IG9mIHRoZSBtZXNzYWdlJ3MgaGVhZGVycy4gRWFjaAogICAgICogICAgIGtleSBNVVNUIGJlIGEgaGVhZGVyIG5hbWUsIGFuZCBlYWNoIHZhbHVlIE1VU1QgYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncwogICAgICogICAgIGZvciB0aGF0IGhlYWRlci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEhlYWRlcnMoKTsKCiAgICAvKioKICAgICAqIENoZWNrcyBpZiBhIGhlYWRlciBleGlzdHMgYnkgdGhlIGdpdmVuIGNhc2UtaW5zZW5zaXRpdmUgbmFtZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIENhc2UtaW5zZW5zaXRpdmUgaGVhZGVyIGZpZWxkIG5hbWUuCiAgICAgKiBAcmV0dXJuIGJvb2wgUmV0dXJucyB0cnVlIGlmIGFueSBoZWFkZXIgbmFtZXMgbWF0Y2ggdGhlIGdpdmVuIGhlYWRlcgogICAgICogICAgIG5hbWUgdXNpbmcgYSBjYXNlLWluc2Vuc2l0aXZlIHN0cmluZyBjb21wYXJpc29uLiBSZXR1cm5zIGZhbHNlIGlmCiAgICAgKiAgICAgbm8gbWF0Y2hpbmcgaGVhZGVyIG5hbWUgaXMgZm91bmQgaW4gdGhlIG1lc3NhZ2UuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBoYXNIZWFkZXIoJG5hbWUpOwoKICAgIC8qKgogICAgICogUmV0cmlldmVzIGEgbWVzc2FnZSBoZWFkZXIgdmFsdWUgYnkgdGhlIGdpdmVuIGNhc2UtaW5zZW5zaXRpdmUgbmFtZS4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCByZXR1cm5zIGFuIGFycmF5IG9mIGFsbCB0aGUgaGVhZGVyIHZhbHVlcyBvZiB0aGUgZ2l2ZW4KICAgICAqIGNhc2UtaW5zZW5zaXRpdmUgaGVhZGVyIG5hbWUuCiAgICAgKgogICAgICogSWYgdGhlIGhlYWRlciBkb2VzIG5vdCBhcHBlYXIgaW4gdGhlIG1lc3NhZ2UsIHRoaXMgbWV0aG9kIE1VU1QgcmV0dXJuIGFuCiAgICAgKiBlbXB0eSBhcnJheS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIENhc2UtaW5zZW5zaXRpdmUgaGVhZGVyIGZpZWxkIG5hbWUuCiAgICAgKiBAcmV0dXJuIHN0cmluZ1tdIEFuIGFycmF5IG9mIHN0cmluZyB2YWx1ZXMgYXMgcHJvdmlkZWQgZm9yIHRoZSBnaXZlbgogICAgICogICAgaGVhZGVyLiBJZiB0aGUgaGVhZGVyIGRvZXMgbm90IGFwcGVhciBpbiB0aGUgbWVzc2FnZSwgdGhpcyBtZXRob2QgTVVTVAogICAgICogICAgcmV0dXJuIGFuIGVtcHR5IGFycmF5LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SGVhZGVyKCRuYW1lKTsKCiAgICAvKioKICAgICAqIFJldHJpZXZlcyBhIGNvbW1hLXNlcGFyYXRlZCBzdHJpbmcgb2YgdGhlIHZhbHVlcyBmb3IgYSBzaW5nbGUgaGVhZGVyLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIHJldHVybnMgYWxsIG9mIHRoZSBoZWFkZXIgdmFsdWVzIG9mIHRoZSBnaXZlbgogICAgICogY2FzZS1pbnNlbnNpdGl2ZSBoZWFkZXIgbmFtZSBhcyBhIHN0cmluZyBjb25jYXRlbmF0ZWQgdG9nZXRoZXIgdXNpbmcKICAgICAqIGEgY29tbWEuCiAgICAgKgogICAgICogTk9URTogTm90IGFsbCBoZWFkZXIgdmFsdWVzIG1heSBiZSBhcHByb3ByaWF0ZWx5IHJlcHJlc2VudGVkIHVzaW5nCiAgICAgKiBjb21tYSBjb25jYXRlbmF0aW9uLiBGb3Igc3VjaCBoZWFkZXJzLCB1c2UgZ2V0SGVhZGVyKCkgaW5zdGVhZAogICAgICogYW5kIHN1cHBseSB5b3VyIG93biBkZWxpbWl0ZXIgd2hlbiBjb25jYXRlbmF0aW5nLgogICAgICoKICAgICAqIElmIHRoZSBoZWFkZXIgZG9lcyBub3QgYXBwZWFyIGluIHRoZSBtZXNzYWdlLCB0aGlzIG1ldGhvZCBNVVNUIHJldHVybgogICAgICogYW4gZW1wdHkgc3RyaW5nLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgQ2FzZS1pbnNlbnNpdGl2ZSBoZWFkZXIgZmllbGQgbmFtZS4KICAgICAqIEByZXR1cm4gc3RyaW5nIEEgc3RyaW5nIG9mIHZhbHVlcyBhcyBwcm92aWRlZCBmb3IgdGhlIGdpdmVuIGhlYWRlcgogICAgICogICAgY29uY2F0ZW5hdGVkIHRvZ2V0aGVyIHVzaW5nIGEgY29tbWEuIElmIHRoZSBoZWFkZXIgZG9lcyBub3QgYXBwZWFyIGluCiAgICAgKiAgICB0aGUgbWVzc2FnZSwgdGhpcyBtZXRob2QgTVVTVCByZXR1cm4gYW4gZW1wdHkgc3RyaW5nLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SGVhZGVyTGluZSgkbmFtZSk7CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYW4gaW5zdGFuY2Ugd2l0aCB0aGUgcHJvdmlkZWQgdmFsdWUgcmVwbGFjaW5nIHRoZSBzcGVjaWZpZWQgaGVhZGVyLgogICAgICoKICAgICAqIFdoaWxlIGhlYWRlciBuYW1lcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZSwgdGhlIGNhc2luZyBvZiB0aGUgaGVhZGVyIHdpbGwKICAgICAqIGJlIHByZXNlcnZlZCBieSB0aGlzIGZ1bmN0aW9uLCBhbmQgcmV0dXJuZWQgZnJvbSBnZXRIZWFkZXJzKCkuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCBiZSBpbXBsZW1lbnRlZCBpbiBzdWNoIGEgd2F5IGFzIHRvIHJldGFpbiB0aGUKICAgICAqIGltbXV0YWJpbGl0eSBvZiB0aGUgbWVzc2FnZSwgYW5kIE1VU1QgcmV0dXJuIGFuIGluc3RhbmNlIHRoYXQgaGFzIHRoZQogICAgICogbmV3IGFuZC9vciB1cGRhdGVkIGhlYWRlciBhbmQgdmFsdWUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSBDYXNlLWluc2Vuc2l0aXZlIGhlYWRlciBmaWVsZCBuYW1lLgogICAgICogQHBhcmFtIHN0cmluZ3xzdHJpbmdbXSAkdmFsdWUgSGVhZGVyIHZhbHVlKHMpLgogICAgICogQHJldHVybiBzdGF0aWMKICAgICAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3IgaW52YWxpZCBoZWFkZXIgbmFtZXMgb3IgdmFsdWVzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aEhlYWRlcigkbmFtZSwgJHZhbHVlKTsKCiAgICAvKioKICAgICAqIFJldHVybiBhbiBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgaGVhZGVyIGFwcGVuZGVkIHdpdGggdGhlIGdpdmVuIHZhbHVlLgogICAgICoKICAgICAqIEV4aXN0aW5nIHZhbHVlcyBmb3IgdGhlIHNwZWNpZmllZCBoZWFkZXIgd2lsbCBiZSBtYWludGFpbmVkLiBUaGUgbmV3CiAgICAgKiB2YWx1ZShzKSB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoZSBleGlzdGluZyBsaXN0LiBJZiB0aGUgaGVhZGVyIGRpZCBub3QKICAgICAqIGV4aXN0IHByZXZpb3VzbHksIGl0IHdpbGwgYmUgYWRkZWQuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCBiZSBpbXBsZW1lbnRlZCBpbiBzdWNoIGEgd2F5IGFzIHRvIHJldGFpbiB0aGUKICAgICAqIGltbXV0YWJpbGl0eSBvZiB0aGUgbWVzc2FnZSwgYW5kIE1VU1QgcmV0dXJuIGFuIGluc3RhbmNlIHRoYXQgaGFzIHRoZQogICAgICogbmV3IGhlYWRlciBhbmQvb3IgdmFsdWUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSBDYXNlLWluc2Vuc2l0aXZlIGhlYWRlciBmaWVsZCBuYW1lIHRvIGFkZC4KICAgICAqIEBwYXJhbSBzdHJpbmd8c3RyaW5nW10gJHZhbHVlIEhlYWRlciB2YWx1ZShzKS4KICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gZm9yIGludmFsaWQgaGVhZGVyIG5hbWVzIG9yIHZhbHVlcy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhBZGRlZEhlYWRlcigkbmFtZSwgJHZhbHVlKTsKCiAgICAvKioKICAgICAqIFJldHVybiBhbiBpbnN0YW5jZSB3aXRob3V0IHRoZSBzcGVjaWZpZWQgaGVhZGVyLgogICAgICoKICAgICAqIEhlYWRlciByZXNvbHV0aW9uIE1VU1QgYmUgZG9uZSB3aXRob3V0IGNhc2Utc2Vuc2l0aXZpdHkuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCBiZSBpbXBsZW1lbnRlZCBpbiBzdWNoIGEgd2F5IGFzIHRvIHJldGFpbiB0aGUKICAgICAqIGltbXV0YWJpbGl0eSBvZiB0aGUgbWVzc2FnZSwgYW5kIE1VU1QgcmV0dXJuIGFuIGluc3RhbmNlIHRoYXQgcmVtb3ZlcwogICAgICogdGhlIG5hbWVkIGhlYWRlci4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIENhc2UtaW5zZW5zaXRpdmUgaGVhZGVyIGZpZWxkIG5hbWUgdG8gcmVtb3ZlLgogICAgICogQHJldHVybiBzdGF0aWMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhvdXRIZWFkZXIoJG5hbWUpOwoKICAgIC8qKgogICAgICogR2V0cyB0aGUgYm9keSBvZiB0aGUgbWVzc2FnZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIFN0cmVhbUludGVyZmFjZSBSZXR1cm5zIHRoZSBib2R5IGFzIGEgc3RyZWFtLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Qm9keSgpOwoKICAgIC8qKgogICAgICogUmV0dXJuIGFuIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBtZXNzYWdlIGJvZHkuCiAgICAgKgogICAgICogVGhlIGJvZHkgTVVTVCBiZSBhIFN0cmVhbUludGVyZmFjZSBvYmplY3QuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCBiZSBpbXBsZW1lbnRlZCBpbiBzdWNoIGEgd2F5IGFzIHRvIHJldGFpbiB0aGUKICAgICAqIGltbXV0YWJpbGl0eSBvZiB0aGUgbWVzc2FnZSwgYW5kIE1VU1QgcmV0dXJuIGEgbmV3IGluc3RhbmNlIHRoYXQgaGFzIHRoZQogICAgICogbmV3IGJvZHkgc3RyZWFtLgogICAgICoKICAgICAqIEBwYXJhbSBTdHJlYW1JbnRlcmZhY2UgJGJvZHkgQm9keS4KICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gV2hlbiB0aGUgYm9keSBpcyBub3QgdmFsaWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoQm9keShTdHJlYW1JbnRlcmZhY2UgJGJvZHkpOwp9Cg==AppDevTools/query/vendor/psr/http-message/src/RequestInterface.phpPD9waHAKCm5hbWVzcGFjZSBQc3JcSHR0cFxNZXNzYWdlOwoKLyoqCiAqIFJlcHJlc2VudGF0aW9uIG9mIGFuIG91dGdvaW5nLCBjbGllbnQtc2lkZSByZXF1ZXN0LgogKgogKiBQZXIgdGhlIEhUVFAgc3BlY2lmaWNhdGlvbiwgdGhpcyBpbnRlcmZhY2UgaW5jbHVkZXMgcHJvcGVydGllcyBmb3IKICogZWFjaCBvZiB0aGUgZm9sbG93aW5nOgogKgogKiAtIFByb3RvY29sIHZlcnNpb24KICogLSBIVFRQIG1ldGhvZAogKiAtIFVSSQogKiAtIEhlYWRlcnMKICogLSBNZXNzYWdlIGJvZHkKICoKICogRHVyaW5nIGNvbnN0cnVjdGlvbiwgaW1wbGVtZW50YXRpb25zIE1VU1QgYXR0ZW1wdCB0byBzZXQgdGhlIEhvc3QgaGVhZGVyIGZyb20KICogYSBwcm92aWRlZCBVUkkgaWYgbm8gSG9zdCBoZWFkZXIgaXMgcHJvdmlkZWQuCiAqCiAqIFJlcXVlc3RzIGFyZSBjb25zaWRlcmVkIGltbXV0YWJsZTsgYWxsIG1ldGhvZHMgdGhhdCBtaWdodCBjaGFuZ2Ugc3RhdGUgTVVTVAogKiBiZSBpbXBsZW1lbnRlZCBzdWNoIHRoYXQgdGhleSByZXRhaW4gdGhlIGludGVybmFsIHN0YXRlIG9mIHRoZSBjdXJyZW50CiAqIG1lc3NhZ2UgYW5kIHJldHVybiBhbiBpbnN0YW5jZSB0aGF0IGNvbnRhaW5zIHRoZSBjaGFuZ2VkIHN0YXRlLgogKi8KaW50ZXJmYWNlIFJlcXVlc3RJbnRlcmZhY2UgZXh0ZW5kcyBNZXNzYWdlSW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogUmV0cmlldmVzIHRoZSBtZXNzYWdlJ3MgcmVxdWVzdCB0YXJnZXQuCiAgICAgKgogICAgICogUmV0cmlldmVzIHRoZSBtZXNzYWdlJ3MgcmVxdWVzdC10YXJnZXQgZWl0aGVyIGFzIGl0IHdpbGwgYXBwZWFyIChmb3IKICAgICAqIGNsaWVudHMpLCBhcyBpdCBhcHBlYXJlZCBhdCByZXF1ZXN0IChmb3Igc2VydmVycyksIG9yIGFzIGl0IHdhcwogICAgICogc3BlY2lmaWVkIGZvciB0aGUgaW5zdGFuY2UgKHNlZSB3aXRoUmVxdWVzdFRhcmdldCgpKS4KICAgICAqCiAgICAgKiBJbiBtb3N0IGNhc2VzLCB0aGlzIHdpbGwgYmUgdGhlIG9yaWdpbi1mb3JtIG9mIHRoZSBjb21wb3NlZCBVUkksCiAgICAgKiB1bmxlc3MgYSB2YWx1ZSB3YXMgcHJvdmlkZWQgdG8gdGhlIGNvbmNyZXRlIGltcGxlbWVudGF0aW9uIChzZWUKICAgICAqIHdpdGhSZXF1ZXN0VGFyZ2V0KCkgYmVsb3cpLgogICAgICoKICAgICAqIElmIG5vIFVSSSBpcyBhdmFpbGFibGUsIGFuZCBubyByZXF1ZXN0LXRhcmdldCBoYXMgYmVlbiBzcGVjaWZpY2FsbHkKICAgICAqIHByb3ZpZGVkLCB0aGlzIG1ldGhvZCBNVVNUIHJldHVybiB0aGUgc3RyaW5nICIvIi4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmVxdWVzdFRhcmdldCgpOwoKICAgIC8qKgogICAgICogUmV0dXJuIGFuIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmljIHJlcXVlc3QtdGFyZ2V0LgogICAgICoKICAgICAqIElmIHRoZSByZXF1ZXN0IG5lZWRzIGEgbm9uLW9yaWdpbi1mb3JtIHJlcXVlc3QtdGFyZ2V0IOKAlCBlLmcuLCBmb3IKICAgICAqIHNwZWNpZnlpbmcgYW4gYWJzb2x1dGUtZm9ybSwgYXV0aG9yaXR5LWZvcm0sIG9yIGFzdGVyaXNrLWZvcm0g4oCUCiAgICAgKiB0aGlzIG1ldGhvZCBtYXkgYmUgdXNlZCB0byBjcmVhdGUgYW4gaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkCiAgICAgKiByZXF1ZXN0LXRhcmdldCwgdmVyYmF0aW0uCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCBiZSBpbXBsZW1lbnRlZCBpbiBzdWNoIGEgd2F5IGFzIHRvIHJldGFpbiB0aGUKICAgICAqIGltbXV0YWJpbGl0eSBvZiB0aGUgbWVzc2FnZSwgYW5kIE1VU1QgcmV0dXJuIGFuIGluc3RhbmNlIHRoYXQgaGFzIHRoZQogICAgICogY2hhbmdlZCByZXF1ZXN0IHRhcmdldC4KICAgICAqCiAgICAgKiBAbGluayBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tNS4zIChmb3IgdGhlIHZhcmlvdXMKICAgICAqICAgICByZXF1ZXN0LXRhcmdldCBmb3JtcyBhbGxvd2VkIGluIHJlcXVlc3QgbWVzc2FnZXMpCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHJlcXVlc3RUYXJnZXQKICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoUmVxdWVzdFRhcmdldCgkcmVxdWVzdFRhcmdldCk7CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZXMgdGhlIEhUVFAgbWV0aG9kIG9mIHRoZSByZXF1ZXN0LgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nIFJldHVybnMgdGhlIHJlcXVlc3QgbWV0aG9kLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0TWV0aG9kKCk7CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYW4gaW5zdGFuY2Ugd2l0aCB0aGUgcHJvdmlkZWQgSFRUUCBtZXRob2QuCiAgICAgKgogICAgICogV2hpbGUgSFRUUCBtZXRob2QgbmFtZXMgYXJlIHR5cGljYWxseSBhbGwgdXBwZXJjYXNlIGNoYXJhY3RlcnMsIEhUVFAKICAgICAqIG1ldGhvZCBuYW1lcyBhcmUgY2FzZS1zZW5zaXRpdmUgYW5kIHRodXMgaW1wbGVtZW50YXRpb25zIFNIT1VMRCBOT1QKICAgICAqIG1vZGlmeSB0aGUgZ2l2ZW4gc3RyaW5nLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgYmUgaW1wbGVtZW50ZWQgaW4gc3VjaCBhIHdheSBhcyB0byByZXRhaW4gdGhlCiAgICAgKiBpbW11dGFiaWxpdHkgb2YgdGhlIG1lc3NhZ2UsIGFuZCBNVVNUIHJldHVybiBhbiBpbnN0YW5jZSB0aGF0IGhhcyB0aGUKICAgICAqIGNoYW5nZWQgcmVxdWVzdCBtZXRob2QuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbWV0aG9kIENhc2Utc2Vuc2l0aXZlIG1ldGhvZC4KICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gZm9yIGludmFsaWQgSFRUUCBtZXRob2RzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aE1ldGhvZCgkbWV0aG9kKTsKCiAgICAvKioKICAgICAqIFJldHJpZXZlcyB0aGUgVVJJIGluc3RhbmNlLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgcmV0dXJuIGEgVXJpSW50ZXJmYWNlIGluc3RhbmNlLgogICAgICoKICAgICAqIEBsaW5rIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi00LjMKICAgICAqIEByZXR1cm4gVXJpSW50ZXJmYWNlIFJldHVybnMgYSBVcmlJbnRlcmZhY2UgaW5zdGFuY2UKICAgICAqICAgICByZXByZXNlbnRpbmcgdGhlIFVSSSBvZiB0aGUgcmVxdWVzdC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFVyaSgpOwoKICAgIC8qKgogICAgICogUmV0dXJucyBhbiBpbnN0YW5jZSB3aXRoIHRoZSBwcm92aWRlZCBVUkkuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCB1cGRhdGUgdGhlIEhvc3QgaGVhZGVyIG9mIHRoZSByZXR1cm5lZCByZXF1ZXN0IGJ5CiAgICAgKiBkZWZhdWx0IGlmIHRoZSBVUkkgY29udGFpbnMgYSBob3N0IGNvbXBvbmVudC4gSWYgdGhlIFVSSSBkb2VzIG5vdAogICAgICogY29udGFpbiBhIGhvc3QgY29tcG9uZW50LCBhbnkgcHJlLWV4aXN0aW5nIEhvc3QgaGVhZGVyIE1VU1QgYmUgY2FycmllZAogICAgICogb3ZlciB0byB0aGUgcmV0dXJuZWQgcmVxdWVzdC4KICAgICAqCiAgICAgKiBZb3UgY2FuIG9wdC1pbiB0byBwcmVzZXJ2aW5nIHRoZSBvcmlnaW5hbCBzdGF0ZSBvZiB0aGUgSG9zdCBoZWFkZXIgYnkKICAgICAqIHNldHRpbmcgYCRwcmVzZXJ2ZUhvc3RgIHRvIGB0cnVlYC4gV2hlbiBgJHByZXNlcnZlSG9zdGAgaXMgc2V0IHRvCiAgICAgKiBgdHJ1ZWAsIHRoaXMgbWV0aG9kIGludGVyYWN0cyB3aXRoIHRoZSBIb3N0IGhlYWRlciBpbiB0aGUgZm9sbG93aW5nIHdheXM6CiAgICAgKgogICAgICogLSBJZiB0aGUgSG9zdCBoZWFkZXIgaXMgbWlzc2luZyBvciBlbXB0eSwgYW5kIHRoZSBuZXcgVVJJIGNvbnRhaW5zCiAgICAgKiAgIGEgaG9zdCBjb21wb25lbnQsIHRoaXMgbWV0aG9kIE1VU1QgdXBkYXRlIHRoZSBIb3N0IGhlYWRlciBpbiB0aGUgcmV0dXJuZWQKICAgICAqICAgcmVxdWVzdC4KICAgICAqIC0gSWYgdGhlIEhvc3QgaGVhZGVyIGlzIG1pc3Npbmcgb3IgZW1wdHksIGFuZCB0aGUgbmV3IFVSSSBkb2VzIG5vdCBjb250YWluIGEKICAgICAqICAgaG9zdCBjb21wb25lbnQsIHRoaXMgbWV0aG9kIE1VU1QgTk9UIHVwZGF0ZSB0aGUgSG9zdCBoZWFkZXIgaW4gdGhlIHJldHVybmVkCiAgICAgKiAgIHJlcXVlc3QuCiAgICAgKiAtIElmIGEgSG9zdCBoZWFkZXIgaXMgcHJlc2VudCBhbmQgbm9uLWVtcHR5LCB0aGlzIG1ldGhvZCBNVVNUIE5PVCB1cGRhdGUKICAgICAqICAgdGhlIEhvc3QgaGVhZGVyIGluIHRoZSByZXR1cm5lZCByZXF1ZXN0LgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgYmUgaW1wbGVtZW50ZWQgaW4gc3VjaCBhIHdheSBhcyB0byByZXRhaW4gdGhlCiAgICAgKiBpbW11dGFiaWxpdHkgb2YgdGhlIG1lc3NhZ2UsIGFuZCBNVVNUIHJldHVybiBhbiBpbnN0YW5jZSB0aGF0IGhhcyB0aGUKICAgICAqIG5ldyBVcmlJbnRlcmZhY2UgaW5zdGFuY2UuCiAgICAgKgogICAgICogQGxpbmsgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTQuMwogICAgICogQHBhcmFtIFVyaUludGVyZmFjZSAkdXJpIE5ldyByZXF1ZXN0IFVSSSB0byB1c2UuCiAgICAgKiBAcGFyYW0gYm9vbCAkcHJlc2VydmVIb3N0IFByZXNlcnZlIHRoZSBvcmlnaW5hbCBzdGF0ZSBvZiB0aGUgSG9zdCBoZWFkZXIuCiAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aFVyaShVcmlJbnRlcmZhY2UgJHVyaSwgJHByZXNlcnZlSG9zdCA9IGZhbHNlKTsKfQo=AppDevTools/query/vendor/psr/http-message/src/ResponseInterface.phpPD9waHAKCm5hbWVzcGFjZSBQc3JcSHR0cFxNZXNzYWdlOwoKLyoqCiAqIFJlcHJlc2VudGF0aW9uIG9mIGFuIG91dGdvaW5nLCBzZXJ2ZXItc2lkZSByZXNwb25zZS4KICoKICogUGVyIHRoZSBIVFRQIHNwZWNpZmljYXRpb24sIHRoaXMgaW50ZXJmYWNlIGluY2x1ZGVzIHByb3BlcnRpZXMgZm9yCiAqIGVhY2ggb2YgdGhlIGZvbGxvd2luZzoKICoKICogLSBQcm90b2NvbCB2ZXJzaW9uCiAqIC0gU3RhdHVzIGNvZGUgYW5kIHJlYXNvbiBwaHJhc2UKICogLSBIZWFkZXJzCiAqIC0gTWVzc2FnZSBib2R5CiAqCiAqIFJlc3BvbnNlcyBhcmUgY29uc2lkZXJlZCBpbW11dGFibGU7IGFsbCBtZXRob2RzIHRoYXQgbWlnaHQgY2hhbmdlIHN0YXRlIE1VU1QKICogYmUgaW1wbGVtZW50ZWQgc3VjaCB0aGF0IHRoZXkgcmV0YWluIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgY3VycmVudAogKiBtZXNzYWdlIGFuZCByZXR1cm4gYW4gaW5zdGFuY2UgdGhhdCBjb250YWlucyB0aGUgY2hhbmdlZCBzdGF0ZS4KICovCmludGVyZmFjZSBSZXNwb25zZUludGVyZmFjZSBleHRlbmRzIE1lc3NhZ2VJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBHZXRzIHRoZSByZXNwb25zZSBzdGF0dXMgY29kZS4KICAgICAqCiAgICAgKiBUaGUgc3RhdHVzIGNvZGUgaXMgYSAzLWRpZ2l0IGludGVnZXIgcmVzdWx0IGNvZGUgb2YgdGhlIHNlcnZlcidzIGF0dGVtcHQKICAgICAqIHRvIHVuZGVyc3RhbmQgYW5kIHNhdGlzZnkgdGhlIHJlcXVlc3QuCiAgICAgKgogICAgICogQHJldHVybiBpbnQgU3RhdHVzIGNvZGUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTdGF0dXNDb2RlKCk7CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYW4gaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIHN0YXR1cyBjb2RlIGFuZCwgb3B0aW9uYWxseSwgcmVhc29uIHBocmFzZS4KICAgICAqCiAgICAgKiBJZiBubyByZWFzb24gcGhyYXNlIGlzIHNwZWNpZmllZCwgaW1wbGVtZW50YXRpb25zIE1BWSBjaG9vc2UgdG8gZGVmYXVsdAogICAgICogdG8gdGhlIFJGQyA3MjMxIG9yIElBTkEgcmVjb21tZW5kZWQgcmVhc29uIHBocmFzZSBmb3IgdGhlIHJlc3BvbnNlJ3MKICAgICAqIHN0YXR1cyBjb2RlLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgYmUgaW1wbGVtZW50ZWQgaW4gc3VjaCBhIHdheSBhcyB0byByZXRhaW4gdGhlCiAgICAgKiBpbW11dGFiaWxpdHkgb2YgdGhlIG1lc3NhZ2UsIGFuZCBNVVNUIHJldHVybiBhbiBpbnN0YW5jZSB0aGF0IGhhcyB0aGUKICAgICAqIHVwZGF0ZWQgc3RhdHVzIGFuZCByZWFzb24gcGhyYXNlLgogICAgICoKICAgICAqIEBsaW5rIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi02CiAgICAgKiBAbGluayBodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL2h0dHAtc3RhdHVzLWNvZGVzL2h0dHAtc3RhdHVzLWNvZGVzLnhodG1sCiAgICAgKiBAcGFyYW0gaW50ICRjb2RlIFRoZSAzLWRpZ2l0IGludGVnZXIgcmVzdWx0IGNvZGUgdG8gc2V0LgogICAgICogQHBhcmFtIHN0cmluZyAkcmVhc29uUGhyYXNlIFRoZSByZWFzb24gcGhyYXNlIHRvIHVzZSB3aXRoIHRoZQogICAgICogICAgIHByb3ZpZGVkIHN0YXR1cyBjb2RlOyBpZiBub25lIGlzIHByb3ZpZGVkLCBpbXBsZW1lbnRhdGlvbnMgTUFZCiAgICAgKiAgICAgdXNlIHRoZSBkZWZhdWx0cyBhcyBzdWdnZXN0ZWQgaW4gdGhlIEhUVFAgc3BlY2lmaWNhdGlvbi4KICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gRm9yIGludmFsaWQgc3RhdHVzIGNvZGUgYXJndW1lbnRzLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aFN0YXR1cygkY29kZSwgJHJlYXNvblBocmFzZSA9ICcnKTsKCiAgICAvKioKICAgICAqIEdldHMgdGhlIHJlc3BvbnNlIHJlYXNvbiBwaHJhc2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdGF0dXMgY29kZS4KICAgICAqCiAgICAgKiBCZWNhdXNlIGEgcmVhc29uIHBocmFzZSBpcyBub3QgYSByZXF1aXJlZCBlbGVtZW50IGluIGEgcmVzcG9uc2UKICAgICAqIHN0YXR1cyBsaW5lLCB0aGUgcmVhc29uIHBocmFzZSB2YWx1ZSBNQVkgYmUgbnVsbC4gSW1wbGVtZW50YXRpb25zIE1BWQogICAgICogY2hvb3NlIHRvIHJldHVybiB0aGUgZGVmYXVsdCBSRkMgNzIzMSByZWNvbW1lbmRlZCByZWFzb24gcGhyYXNlIChvciB0aG9zZQogICAgICogbGlzdGVkIGluIHRoZSBJQU5BIEhUVFAgU3RhdHVzIENvZGUgUmVnaXN0cnkpIGZvciB0aGUgcmVzcG9uc2UncwogICAgICogc3RhdHVzIGNvZGUuCiAgICAgKgogICAgICogQGxpbmsgaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTYKICAgICAqIEBsaW5rIGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvaHR0cC1zdGF0dXMtY29kZXMvaHR0cC1zdGF0dXMtY29kZXMueGh0bWwKICAgICAqIEByZXR1cm4gc3RyaW5nIFJlYXNvbiBwaHJhc2U7IG11c3QgcmV0dXJuIGFuIGVtcHR5IHN0cmluZyBpZiBub25lIHByZXNlbnQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRSZWFzb25QaHJhc2UoKTsKfQo=AppDevTools/query/vendor/psr/http-message/src/ServerRequestInterface.phpPD9waHAKCm5hbWVzcGFjZSBQc3JcSHR0cFxNZXNzYWdlOwoKLyoqCiAqIFJlcHJlc2VudGF0aW9uIG9mIGFuIGluY29taW5nLCBzZXJ2ZXItc2lkZSBIVFRQIHJlcXVlc3QuCiAqCiAqIFBlciB0aGUgSFRUUCBzcGVjaWZpY2F0aW9uLCB0aGlzIGludGVyZmFjZSBpbmNsdWRlcyBwcm9wZXJ0aWVzIGZvcgogKiBlYWNoIG9mIHRoZSBmb2xsb3dpbmc6CiAqCiAqIC0gUHJvdG9jb2wgdmVyc2lvbgogKiAtIEhUVFAgbWV0aG9kCiAqIC0gVVJJCiAqIC0gSGVhZGVycwogKiAtIE1lc3NhZ2UgYm9keQogKgogKiBBZGRpdGlvbmFsbHksIGl0IGVuY2Fwc3VsYXRlcyBhbGwgZGF0YSBhcyBpdCBoYXMgYXJyaXZlZCB0byB0aGUKICogYXBwbGljYXRpb24gZnJvbSB0aGUgQ0dJIGFuZC9vciBQSFAgZW52aXJvbm1lbnQsIGluY2x1ZGluZzoKICoKICogLSBUaGUgdmFsdWVzIHJlcHJlc2VudGVkIGluICRfU0VSVkVSLgogKiAtIEFueSBjb29raWVzIHByb3ZpZGVkIChnZW5lcmFsbHkgdmlhICRfQ09PS0lFKQogKiAtIFF1ZXJ5IHN0cmluZyBhcmd1bWVudHMgKGdlbmVyYWxseSB2aWEgJF9HRVQsIG9yIGFzIHBhcnNlZCB2aWEgcGFyc2Vfc3RyKCkpCiAqIC0gVXBsb2FkIGZpbGVzLCBpZiBhbnkgKGFzIHJlcHJlc2VudGVkIGJ5ICRfRklMRVMpCiAqIC0gRGVzZXJpYWxpemVkIGJvZHkgcGFyYW1ldGVycyAoZ2VuZXJhbGx5IGZyb20gJF9QT1NUKQogKgogKiAkX1NFUlZFUiB2YWx1ZXMgTVVTVCBiZSB0cmVhdGVkIGFzIGltbXV0YWJsZSwgYXMgdGhleSByZXByZXNlbnQgYXBwbGljYXRpb24KICogc3RhdGUgYXQgdGhlIHRpbWUgb2YgcmVxdWVzdDsgYXMgc3VjaCwgbm8gbWV0aG9kcyBhcmUgcHJvdmlkZWQgdG8gYWxsb3cKICogbW9kaWZpY2F0aW9uIG9mIHRob3NlIHZhbHVlcy4gVGhlIG90aGVyIHZhbHVlcyBwcm92aWRlIHN1Y2ggbWV0aG9kcywgYXMgdGhleQogKiBjYW4gYmUgcmVzdG9yZWQgZnJvbSAkX1NFUlZFUiBvciB0aGUgcmVxdWVzdCBib2R5LCBhbmQgbWF5IG5lZWQgdHJlYXRtZW50CiAqIGR1cmluZyB0aGUgYXBwbGljYXRpb24gKGUuZy4sIGJvZHkgcGFyYW1ldGVycyBtYXkgYmUgZGVzZXJpYWxpemVkIGJhc2VkIG9uCiAqIGNvbnRlbnQgdHlwZSkuCiAqCiAqIEFkZGl0aW9uYWxseSwgdGhpcyBpbnRlcmZhY2UgcmVjb2duaXplcyB0aGUgdXRpbGl0eSBvZiBpbnRyb3NwZWN0aW5nIGEKICogcmVxdWVzdCB0byBkZXJpdmUgYW5kIG1hdGNoIGFkZGl0aW9uYWwgcGFyYW1ldGVycyAoZS5nLiwgdmlhIFVSSSBwYXRoCiAqIG1hdGNoaW5nLCBkZWNyeXB0aW5nIGNvb2tpZSB2YWx1ZXMsIGRlc2VyaWFsaXppbmcgbm9uLWZvcm0tZW5jb2RlZCBib2R5CiAqIGNvbnRlbnQsIG1hdGNoaW5nIGF1dGhvcml6YXRpb24gaGVhZGVycyB0byB1c2VycywgZXRjKS4gVGhlc2UgcGFyYW1ldGVycwogKiBhcmUgc3RvcmVkIGluIGFuICJhdHRyaWJ1dGVzIiBwcm9wZXJ0eS4KICoKICogUmVxdWVzdHMgYXJlIGNvbnNpZGVyZWQgaW1tdXRhYmxlOyBhbGwgbWV0aG9kcyB0aGF0IG1pZ2h0IGNoYW5nZSBzdGF0ZSBNVVNUCiAqIGJlIGltcGxlbWVudGVkIHN1Y2ggdGhhdCB0aGV5IHJldGFpbiB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgdGhlIGN1cnJlbnQKICogbWVzc2FnZSBhbmQgcmV0dXJuIGFuIGluc3RhbmNlIHRoYXQgY29udGFpbnMgdGhlIGNoYW5nZWQgc3RhdGUuCiAqLwppbnRlcmZhY2UgU2VydmVyUmVxdWVzdEludGVyZmFjZSBleHRlbmRzIFJlcXVlc3RJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSBzZXJ2ZXIgcGFyYW1ldGVycy4KICAgICAqCiAgICAgKiBSZXRyaWV2ZXMgZGF0YSByZWxhdGVkIHRvIHRoZSBpbmNvbWluZyByZXF1ZXN0IGVudmlyb25tZW50LAogICAgICogdHlwaWNhbGx5IGRlcml2ZWQgZnJvbSBQSFAncyAkX1NFUlZFUiBzdXBlcmdsb2JhbC4gVGhlIGRhdGEgSVMgTk9UCiAgICAgKiBSRVFVSVJFRCB0byBvcmlnaW5hdGUgZnJvbSAkX1NFUlZFUi4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTZXJ2ZXJQYXJhbXMoKTsKCiAgICAvKioKICAgICAqIFJldHJpZXZlIGNvb2tpZXMuCiAgICAgKgogICAgICogUmV0cmlldmVzIGNvb2tpZXMgc2VudCBieSB0aGUgY2xpZW50IHRvIHRoZSBzZXJ2ZXIuCiAgICAgKgogICAgICogVGhlIGRhdGEgTVVTVCBiZSBjb21wYXRpYmxlIHdpdGggdGhlIHN0cnVjdHVyZSBvZiB0aGUgJF9DT09LSUUKICAgICAqIHN1cGVyZ2xvYmFsLgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldENvb2tpZVBhcmFtcygpOwoKICAgIC8qKgogICAgICogUmV0dXJuIGFuIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBjb29raWVzLgogICAgICoKICAgICAqIFRoZSBkYXRhIElTIE5PVCBSRVFVSVJFRCB0byBjb21lIGZyb20gdGhlICRfQ09PS0lFIHN1cGVyZ2xvYmFsLCBidXQgTVVTVAogICAgICogYmUgY29tcGF0aWJsZSB3aXRoIHRoZSBzdHJ1Y3R1cmUgb2YgJF9DT09LSUUuIFR5cGljYWxseSwgdGhpcyBkYXRhIHdpbGwKICAgICAqIGJlIGluamVjdGVkIGF0IGluc3RhbnRpYXRpb24uCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCBOT1QgdXBkYXRlIHRoZSByZWxhdGVkIENvb2tpZSBoZWFkZXIgb2YgdGhlIHJlcXVlc3QKICAgICAqIGluc3RhbmNlLCBub3IgcmVsYXRlZCB2YWx1ZXMgaW4gdGhlIHNlcnZlciBwYXJhbXMuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCBiZSBpbXBsZW1lbnRlZCBpbiBzdWNoIGEgd2F5IGFzIHRvIHJldGFpbiB0aGUKICAgICAqIGltbXV0YWJpbGl0eSBvZiB0aGUgbWVzc2FnZSwgYW5kIE1VU1QgcmV0dXJuIGFuIGluc3RhbmNlIHRoYXQgaGFzIHRoZQogICAgICogdXBkYXRlZCBjb29raWUgdmFsdWVzLgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkY29va2llcyBBcnJheSBvZiBrZXkvdmFsdWUgcGFpcnMgcmVwcmVzZW50aW5nIGNvb2tpZXMuCiAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aENvb2tpZVBhcmFtcyhhcnJheSAkY29va2llcyk7CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSBxdWVyeSBzdHJpbmcgYXJndW1lbnRzLgogICAgICoKICAgICAqIFJldHJpZXZlcyB0aGUgZGVzZXJpYWxpemVkIHF1ZXJ5IHN0cmluZyBhcmd1bWVudHMsIGlmIGFueS4KICAgICAqCiAgICAgKiBOb3RlOiB0aGUgcXVlcnkgcGFyYW1zIG1pZ2h0IG5vdCBiZSBpbiBzeW5jIHdpdGggdGhlIFVSSSBvciBzZXJ2ZXIKICAgICAqIHBhcmFtcy4gSWYgeW91IG5lZWQgdG8gZW5zdXJlIHlvdSBhcmUgb25seSBnZXR0aW5nIHRoZSBvcmlnaW5hbAogICAgICogdmFsdWVzLCB5b3UgbWF5IG5lZWQgdG8gcGFyc2UgdGhlIHF1ZXJ5IHN0cmluZyBmcm9tIGBnZXRVcmkoKS0+Z2V0UXVlcnkoKWAKICAgICAqIG9yIGZyb20gdGhlIGBRVUVSWV9TVFJJTkdgIHNlcnZlciBwYXJhbS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRRdWVyeVBhcmFtcygpOwoKICAgIC8qKgogICAgICogUmV0dXJuIGFuIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBxdWVyeSBzdHJpbmcgYXJndW1lbnRzLgogICAgICoKICAgICAqIFRoZXNlIHZhbHVlcyBTSE9VTEQgcmVtYWluIGltbXV0YWJsZSBvdmVyIHRoZSBjb3Vyc2Ugb2YgdGhlIGluY29taW5nCiAgICAgKiByZXF1ZXN0LiBUaGV5IE1BWSBiZSBpbmplY3RlZCBkdXJpbmcgaW5zdGFudGlhdGlvbiwgc3VjaCBhcyBmcm9tIFBIUCdzCiAgICAgKiAkX0dFVCBzdXBlcmdsb2JhbCwgb3IgTUFZIGJlIGRlcml2ZWQgZnJvbSBzb21lIG90aGVyIHZhbHVlIHN1Y2ggYXMgdGhlCiAgICAgKiBVUkkuIEluIGNhc2VzIHdoZXJlIHRoZSBhcmd1bWVudHMgYXJlIHBhcnNlZCBmcm9tIHRoZSBVUkksIHRoZSBkYXRhCiAgICAgKiBNVVNUIGJlIGNvbXBhdGlibGUgd2l0aCB3aGF0IFBIUCdzIHBhcnNlX3N0cigpIHdvdWxkIHJldHVybiBmb3IKICAgICAqIHB1cnBvc2VzIG9mIGhvdyBkdXBsaWNhdGUgcXVlcnkgcGFyYW1ldGVycyBhcmUgaGFuZGxlZCwgYW5kIGhvdyBuZXN0ZWQKICAgICAqIHNldHMgYXJlIGhhbmRsZWQuCiAgICAgKgogICAgICogU2V0dGluZyBxdWVyeSBzdHJpbmcgYXJndW1lbnRzIE1VU1QgTk9UIGNoYW5nZSB0aGUgVVJJIHN0b3JlZCBieSB0aGUKICAgICAqIHJlcXVlc3QsIG5vciB0aGUgdmFsdWVzIGluIHRoZSBzZXJ2ZXIgcGFyYW1zLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgYmUgaW1wbGVtZW50ZWQgaW4gc3VjaCBhIHdheSBhcyB0byByZXRhaW4gdGhlCiAgICAgKiBpbW11dGFiaWxpdHkgb2YgdGhlIG1lc3NhZ2UsIGFuZCBNVVNUIHJldHVybiBhbiBpbnN0YW5jZSB0aGF0IGhhcyB0aGUKICAgICAqIHVwZGF0ZWQgcXVlcnkgc3RyaW5nIGFyZ3VtZW50cy4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJHF1ZXJ5IEFycmF5IG9mIHF1ZXJ5IHN0cmluZyBhcmd1bWVudHMsIHR5cGljYWxseSBmcm9tCiAgICAgKiAgICAgJF9HRVQuCiAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aFF1ZXJ5UGFyYW1zKGFycmF5ICRxdWVyeSk7CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSBub3JtYWxpemVkIGZpbGUgdXBsb2FkIGRhdGEuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgcmV0dXJucyB1cGxvYWQgbWV0YWRhdGEgaW4gYSBub3JtYWxpemVkIHRyZWUsIHdpdGggZWFjaCBsZWFmCiAgICAgKiBhbiBpbnN0YW5jZSBvZiBQc3JcSHR0cFxNZXNzYWdlXFVwbG9hZGVkRmlsZUludGVyZmFjZS4KICAgICAqCiAgICAgKiBUaGVzZSB2YWx1ZXMgTUFZIGJlIHByZXBhcmVkIGZyb20gJF9GSUxFUyBvciB0aGUgbWVzc2FnZSBib2R5IGR1cmluZwogICAgICogaW5zdGFudGlhdGlvbiwgb3IgTUFZIGJlIGluamVjdGVkIHZpYSB3aXRoVXBsb2FkZWRGaWxlcygpLgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkgQW4gYXJyYXkgdHJlZSBvZiBVcGxvYWRlZEZpbGVJbnRlcmZhY2UgaW5zdGFuY2VzOyBhbiBlbXB0eQogICAgICogICAgIGFycmF5IE1VU1QgYmUgcmV0dXJuZWQgaWYgbm8gZGF0YSBpcyBwcmVzZW50LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VXBsb2FkZWRGaWxlcygpOwoKICAgIC8qKgogICAgICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCB1cGxvYWRlZCBmaWxlcy4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIGJlIGltcGxlbWVudGVkIGluIHN1Y2ggYSB3YXkgYXMgdG8gcmV0YWluIHRoZQogICAgICogaW1tdXRhYmlsaXR5IG9mIHRoZSBtZXNzYWdlLCBhbmQgTVVTVCByZXR1cm4gYW4gaW5zdGFuY2UgdGhhdCBoYXMgdGhlCiAgICAgKiB1cGRhdGVkIGJvZHkgcGFyYW1ldGVycy4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJHVwbG9hZGVkRmlsZXMgQW4gYXJyYXkgdHJlZSBvZiBVcGxvYWRlZEZpbGVJbnRlcmZhY2UgaW5zdGFuY2VzLgogICAgICogQHJldHVybiBzdGF0aWMKICAgICAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBpZiBhbiBpbnZhbGlkIHN0cnVjdHVyZSBpcyBwcm92aWRlZC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhVcGxvYWRlZEZpbGVzKGFycmF5ICR1cGxvYWRlZEZpbGVzKTsKCiAgICAvKioKICAgICAqIFJldHJpZXZlIGFueSBwYXJhbWV0ZXJzIHByb3ZpZGVkIGluIHRoZSByZXF1ZXN0IGJvZHkuCiAgICAgKgogICAgICogSWYgdGhlIHJlcXVlc3QgQ29udGVudC1UeXBlIGlzIGVpdGhlciBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQKICAgICAqIG9yIG11bHRpcGFydC9mb3JtLWRhdGEsIGFuZCB0aGUgcmVxdWVzdCBtZXRob2QgaXMgUE9TVCwgdGhpcyBtZXRob2QgTVVTVAogICAgICogcmV0dXJuIHRoZSBjb250ZW50cyBvZiAkX1BPU1QuCiAgICAgKgogICAgICogT3RoZXJ3aXNlLCB0aGlzIG1ldGhvZCBtYXkgcmV0dXJuIGFueSByZXN1bHRzIG9mIGRlc2VyaWFsaXppbmcKICAgICAqIHRoZSByZXF1ZXN0IGJvZHkgY29udGVudDsgYXMgcGFyc2luZyByZXR1cm5zIHN0cnVjdHVyZWQgY29udGVudCwgdGhlCiAgICAgKiBwb3RlbnRpYWwgdHlwZXMgTVVTVCBiZSBhcnJheXMgb3Igb2JqZWN0cyBvbmx5LiBBIG51bGwgdmFsdWUgaW5kaWNhdGVzCiAgICAgKiB0aGUgYWJzZW5jZSBvZiBib2R5IGNvbnRlbnQuCiAgICAgKgogICAgICogQHJldHVybiBudWxsfGFycmF5fG9iamVjdCBUaGUgZGVzZXJpYWxpemVkIGJvZHkgcGFyYW1ldGVycywgaWYgYW55LgogICAgICogICAgIFRoZXNlIHdpbGwgdHlwaWNhbGx5IGJlIGFuIGFycmF5IG9yIG9iamVjdC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFBhcnNlZEJvZHkoKTsKCiAgICAvKioKICAgICAqIFJldHVybiBhbiBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgYm9keSBwYXJhbWV0ZXJzLgogICAgICoKICAgICAqIFRoZXNlIE1BWSBiZSBpbmplY3RlZCBkdXJpbmcgaW5zdGFudGlhdGlvbi4KICAgICAqCiAgICAgKiBJZiB0aGUgcmVxdWVzdCBDb250ZW50LVR5cGUgaXMgZWl0aGVyIGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZAogICAgICogb3IgbXVsdGlwYXJ0L2Zvcm0tZGF0YSwgYW5kIHRoZSByZXF1ZXN0IG1ldGhvZCBpcyBQT1NULCB1c2UgdGhpcyBtZXRob2QKICAgICAqIE9OTFkgdG8gaW5qZWN0IHRoZSBjb250ZW50cyBvZiAkX1BPU1QuCiAgICAgKgogICAgICogVGhlIGRhdGEgSVMgTk9UIFJFUVVJUkVEIHRvIGNvbWUgZnJvbSAkX1BPU1QsIGJ1dCBNVVNUIGJlIHRoZSByZXN1bHRzIG9mCiAgICAgKiBkZXNlcmlhbGl6aW5nIHRoZSByZXF1ZXN0IGJvZHkgY29udGVudC4gRGVzZXJpYWxpemF0aW9uL3BhcnNpbmcgcmV0dXJucwogICAgICogc3RydWN0dXJlZCBkYXRhLCBhbmQsIGFzIHN1Y2gsIHRoaXMgbWV0aG9kIE9OTFkgYWNjZXB0cyBhcnJheXMgb3Igb2JqZWN0cywKICAgICAqIG9yIGEgbnVsbCB2YWx1ZSBpZiBub3RoaW5nIHdhcyBhdmFpbGFibGUgdG8gcGFyc2UuCiAgICAgKgogICAgICogQXMgYW4gZXhhbXBsZSwgaWYgY29udGVudCBuZWdvdGlhdGlvbiBkZXRlcm1pbmVzIHRoYXQgdGhlIHJlcXVlc3QgZGF0YQogICAgICogaXMgYSBKU09OIHBheWxvYWQsIHRoaXMgbWV0aG9kIGNvdWxkIGJlIHVzZWQgdG8gY3JlYXRlIGEgcmVxdWVzdAogICAgICogaW5zdGFuY2Ugd2l0aCB0aGUgZGVzZXJpYWxpemVkIHBhcmFtZXRlcnMuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCBiZSBpbXBsZW1lbnRlZCBpbiBzdWNoIGEgd2F5IGFzIHRvIHJldGFpbiB0aGUKICAgICAqIGltbXV0YWJpbGl0eSBvZiB0aGUgbWVzc2FnZSwgYW5kIE1VU1QgcmV0dXJuIGFuIGluc3RhbmNlIHRoYXQgaGFzIHRoZQogICAgICogdXBkYXRlZCBib2R5IHBhcmFtZXRlcnMuCiAgICAgKgogICAgICogQHBhcmFtIG51bGx8YXJyYXl8b2JqZWN0ICRkYXRhIFRoZSBkZXNlcmlhbGl6ZWQgYm9keSBkYXRhLiBUaGlzIHdpbGwKICAgICAqICAgICB0eXBpY2FsbHkgYmUgaW4gYW4gYXJyYXkgb3Igb2JqZWN0LgogICAgICogQHJldHVybiBzdGF0aWMKICAgICAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBpZiBhbiB1bnN1cHBvcnRlZCBhcmd1bWVudCB0eXBlIGlzCiAgICAgKiAgICAgcHJvdmlkZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoUGFyc2VkQm9keSgkZGF0YSk7CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSBhdHRyaWJ1dGVzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdC4KICAgICAqCiAgICAgKiBUaGUgcmVxdWVzdCAiYXR0cmlidXRlcyIgbWF5IGJlIHVzZWQgdG8gYWxsb3cgaW5qZWN0aW9uIG9mIGFueQogICAgICogcGFyYW1ldGVycyBkZXJpdmVkIGZyb20gdGhlIHJlcXVlc3Q6IGUuZy4sIHRoZSByZXN1bHRzIG9mIHBhdGgKICAgICAqIG1hdGNoIG9wZXJhdGlvbnM7IHRoZSByZXN1bHRzIG9mIGRlY3J5cHRpbmcgY29va2llczsgdGhlIHJlc3VsdHMgb2YKICAgICAqIGRlc2VyaWFsaXppbmcgbm9uLWZvcm0tZW5jb2RlZCBtZXNzYWdlIGJvZGllczsgZXRjLiBBdHRyaWJ1dGVzCiAgICAgKiB3aWxsIGJlIGFwcGxpY2F0aW9uIGFuZCByZXF1ZXN0IHNwZWNpZmljLCBhbmQgQ0FOIGJlIG11dGFibGUuCiAgICAgKgogICAgICogQHJldHVybiBhcnJheSBBdHRyaWJ1dGVzIGRlcml2ZWQgZnJvbSB0aGUgcmVxdWVzdC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEF0dHJpYnV0ZXMoKTsKCiAgICAvKioKICAgICAqIFJldHJpZXZlIGEgc2luZ2xlIGRlcml2ZWQgcmVxdWVzdCBhdHRyaWJ1dGUuCiAgICAgKgogICAgICogUmV0cmlldmVzIGEgc2luZ2xlIGRlcml2ZWQgcmVxdWVzdCBhdHRyaWJ1dGUgYXMgZGVzY3JpYmVkIGluCiAgICAgKiBnZXRBdHRyaWJ1dGVzKCkuIElmIHRoZSBhdHRyaWJ1dGUgaGFzIG5vdCBiZWVuIHByZXZpb3VzbHkgc2V0LCByZXR1cm5zCiAgICAgKiB0aGUgZGVmYXVsdCB2YWx1ZSBhcyBwcm92aWRlZC4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBvYnZpYXRlcyB0aGUgbmVlZCBmb3IgYSBoYXNBdHRyaWJ1dGUoKSBtZXRob2QsIGFzIGl0IGFsbG93cwogICAgICogc3BlY2lmeWluZyBhIGRlZmF1bHQgdmFsdWUgdG8gcmV0dXJuIGlmIHRoZSBhdHRyaWJ1dGUgaXMgbm90IGZvdW5kLgogICAgICoKICAgICAqIEBzZWUgZ2V0QXR0cmlidXRlcygpCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lIFRoZSBhdHRyaWJ1dGUgbmFtZS4KICAgICAqIEBwYXJhbSBtaXhlZCAkZGVmYXVsdCBEZWZhdWx0IHZhbHVlIHRvIHJldHVybiBpZiB0aGUgYXR0cmlidXRlIGRvZXMgbm90IGV4aXN0LgogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0QXR0cmlidXRlKCRuYW1lLCAkZGVmYXVsdCA9IG51bGwpOwoKICAgIC8qKgogICAgICogUmV0dXJuIGFuIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBkZXJpdmVkIHJlcXVlc3QgYXR0cmlidXRlLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIGFsbG93cyBzZXR0aW5nIGEgc2luZ2xlIGRlcml2ZWQgcmVxdWVzdCBhdHRyaWJ1dGUgYXMKICAgICAqIGRlc2NyaWJlZCBpbiBnZXRBdHRyaWJ1dGVzKCkuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCBiZSBpbXBsZW1lbnRlZCBpbiBzdWNoIGEgd2F5IGFzIHRvIHJldGFpbiB0aGUKICAgICAqIGltbXV0YWJpbGl0eSBvZiB0aGUgbWVzc2FnZSwgYW5kIE1VU1QgcmV0dXJuIGFuIGluc3RhbmNlIHRoYXQgaGFzIHRoZQogICAgICogdXBkYXRlZCBhdHRyaWJ1dGUuCiAgICAgKgogICAgICogQHNlZSBnZXRBdHRyaWJ1dGVzKCkKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUgVGhlIGF0dHJpYnV0ZSBuYW1lLgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIGF0dHJpYnV0ZS4KICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoQXR0cmlidXRlKCRuYW1lLCAkdmFsdWUpOwoKICAgIC8qKgogICAgICogUmV0dXJuIGFuIGluc3RhbmNlIHRoYXQgcmVtb3ZlcyB0aGUgc3BlY2lmaWVkIGRlcml2ZWQgcmVxdWVzdCBhdHRyaWJ1dGUuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgYWxsb3dzIHJlbW92aW5nIGEgc2luZ2xlIGRlcml2ZWQgcmVxdWVzdCBhdHRyaWJ1dGUgYXMKICAgICAqIGRlc2NyaWJlZCBpbiBnZXRBdHRyaWJ1dGVzKCkuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCBiZSBpbXBsZW1lbnRlZCBpbiBzdWNoIGEgd2F5IGFzIHRvIHJldGFpbiB0aGUKICAgICAqIGltbXV0YWJpbGl0eSBvZiB0aGUgbWVzc2FnZSwgYW5kIE1VU1QgcmV0dXJuIGFuIGluc3RhbmNlIHRoYXQgcmVtb3ZlcwogICAgICogdGhlIGF0dHJpYnV0ZS4KICAgICAqCiAgICAgKiBAc2VlIGdldEF0dHJpYnV0ZXMoKQogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSBUaGUgYXR0cmlidXRlIG5hbWUuCiAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aG91dEF0dHJpYnV0ZSgkbmFtZSk7Cn0KAppDevTools/query/vendor/psr/http-message/src/StreamInterface.phpPD9waHAKCm5hbWVzcGFjZSBQc3JcSHR0cFxNZXNzYWdlOwoKLyoqCiAqIERlc2NyaWJlcyBhIGRhdGEgc3RyZWFtLgogKgogKiBUeXBpY2FsbHksIGFuIGluc3RhbmNlIHdpbGwgd3JhcCBhIFBIUCBzdHJlYW07IHRoaXMgaW50ZXJmYWNlIHByb3ZpZGVzCiAqIGEgd3JhcHBlciBhcm91bmQgdGhlIG1vc3QgY29tbW9uIG9wZXJhdGlvbnMsIGluY2x1ZGluZyBzZXJpYWxpemF0aW9uIG9mCiAqIHRoZSBlbnRpcmUgc3RyZWFtIHRvIGEgc3RyaW5nLgogKi8KaW50ZXJmYWNlIFN0cmVhbUludGVyZmFjZQp7CiAgICAvKioKICAgICAqIFJlYWRzIGFsbCBkYXRhIGZyb20gdGhlIHN0cmVhbSBpbnRvIGEgc3RyaW5nLCBmcm9tIHRoZSBiZWdpbm5pbmcgdG8gZW5kLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgYXR0ZW1wdCB0byBzZWVrIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHN0cmVhbSBiZWZvcmUKICAgICAqIHJlYWRpbmcgZGF0YSBhbmQgcmVhZCB0aGUgc3RyZWFtIHVudGlsIHRoZSBlbmQgaXMgcmVhY2hlZC4KICAgICAqCiAgICAgKiBXYXJuaW5nOiBUaGlzIGNvdWxkIGF0dGVtcHQgdG8gbG9hZCBhIGxhcmdlIGFtb3VudCBvZiBkYXRhIGludG8gbWVtb3J5LgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgTk9UIHJhaXNlIGFuIGV4Y2VwdGlvbiBpbiBvcmRlciB0byBjb25mb3JtIHdpdGggUEhQJ3MKICAgICAqIHN0cmluZyBjYXN0aW5nIG9wZXJhdGlvbnMuCiAgICAgKgogICAgICogQHNlZSBodHRwOi8vcGhwLm5ldC9tYW51YWwvZW4vbGFuZ3VhZ2Uub29wNS5tYWdpYy5waHAjb2JqZWN0LnRvc3RyaW5nCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpOwoKICAgIC8qKgogICAgICogQ2xvc2VzIHRoZSBzdHJlYW0gYW5kIGFueSB1bmRlcmx5aW5nIHJlc291cmNlcy4KICAgICAqCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNsb3NlKCk7CgogICAgLyoqCiAgICAgKiBTZXBhcmF0ZXMgYW55IHVuZGVybHlpbmcgcmVzb3VyY2VzIGZyb20gdGhlIHN0cmVhbS4KICAgICAqCiAgICAgKiBBZnRlciB0aGUgc3RyZWFtIGhhcyBiZWVuIGRldGFjaGVkLCB0aGUgc3RyZWFtIGlzIGluIGFuIHVudXNhYmxlIHN0YXRlLgogICAgICoKICAgICAqIEByZXR1cm4gcmVzb3VyY2V8bnVsbCBVbmRlcmx5aW5nIFBIUCBzdHJlYW0sIGlmIGFueQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGV0YWNoKCk7CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIHNpemUgb2YgdGhlIHN0cmVhbSBpZiBrbm93bi4KICAgICAqCiAgICAgKiBAcmV0dXJuIGludHxudWxsIFJldHVybnMgdGhlIHNpemUgaW4gYnl0ZXMgaWYga25vd24sIG9yIG51bGwgaWYgdW5rbm93bi4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFNpemUoKTsKCiAgICAvKioKICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgcG9zaXRpb24gb2YgdGhlIGZpbGUgcmVhZC93cml0ZSBwb2ludGVyCiAgICAgKgogICAgICogQHJldHVybiBpbnQgUG9zaXRpb24gb2YgdGhlIGZpbGUgcG9pbnRlcgogICAgICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbiBvbiBlcnJvci4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRlbGwoKTsKCiAgICAvKioKICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3RyZWFtIGlzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmVhbS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGVvZigpOwoKICAgIC8qKgogICAgICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgc3RyZWFtIGlzIHNlZWthYmxlLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNTZWVrYWJsZSgpOwoKICAgIC8qKgogICAgICogU2VlayB0byBhIHBvc2l0aW9uIGluIHRoZSBzdHJlYW0uCiAgICAgKgogICAgICogQGxpbmsgaHR0cDovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5mc2Vlay5waHAKICAgICAqIEBwYXJhbSBpbnQgJG9mZnNldCBTdHJlYW0gb2Zmc2V0CiAgICAgKiBAcGFyYW0gaW50ICR3aGVuY2UgU3BlY2lmaWVzIGhvdyB0aGUgY3Vyc29yIHBvc2l0aW9uIHdpbGwgYmUgY2FsY3VsYXRlZAogICAgICogICAgIGJhc2VkIG9uIHRoZSBzZWVrIG9mZnNldC4gVmFsaWQgdmFsdWVzIGFyZSBpZGVudGljYWwgdG8gdGhlIGJ1aWx0LWluCiAgICAgKiAgICAgUEhQICR3aGVuY2UgdmFsdWVzIGZvciBgZnNlZWsoKWAuICBTRUVLX1NFVDogU2V0IHBvc2l0aW9uIGVxdWFsIHRvCiAgICAgKiAgICAgb2Zmc2V0IGJ5dGVzIFNFRUtfQ1VSOiBTZXQgcG9zaXRpb24gdG8gY3VycmVudCBsb2NhdGlvbiBwbHVzIG9mZnNldAogICAgICogICAgIFNFRUtfRU5EOiBTZXQgcG9zaXRpb24gdG8gZW5kLW9mLXN0cmVhbSBwbHVzIG9mZnNldC4KICAgICAqIEB0aHJvd3MgXFJ1bnRpbWVFeGNlcHRpb24gb24gZmFpbHVyZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNlZWsoJG9mZnNldCwgJHdoZW5jZSA9IFNFRUtfU0VUKTsKCiAgICAvKioKICAgICAqIFNlZWsgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgc3RyZWFtLgogICAgICoKICAgICAqIElmIHRoZSBzdHJlYW0gaXMgbm90IHNlZWthYmxlLCB0aGlzIG1ldGhvZCB3aWxsIHJhaXNlIGFuIGV4Y2VwdGlvbjsKICAgICAqIG90aGVyd2lzZSwgaXQgd2lsbCBwZXJmb3JtIGEgc2VlaygwKS4KICAgICAqCiAgICAgKiBAc2VlIHNlZWsoKQogICAgICogQGxpbmsgaHR0cDovL3d3dy5waHAubmV0L21hbnVhbC9lbi9mdW5jdGlvbi5mc2Vlay5waHAKICAgICAqIEB0aHJvd3MgXFJ1bnRpbWVFeGNlcHRpb24gb24gZmFpbHVyZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHJld2luZCgpOwoKICAgIC8qKgogICAgICogUmV0dXJucyB3aGV0aGVyIG9yIG5vdCB0aGUgc3RyZWFtIGlzIHdyaXRhYmxlLgogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNXcml0YWJsZSgpOwoKICAgIC8qKgogICAgICogV3JpdGUgZGF0YSB0byB0aGUgc3RyZWFtLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0cmluZyBUaGUgc3RyaW5nIHRoYXQgaXMgdG8gYmUgd3JpdHRlbi4KICAgICAqIEByZXR1cm4gaW50IFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuIHRvIHRoZSBzdHJlYW0uCiAgICAgKiBAdGhyb3dzIFxSdW50aW1lRXhjZXB0aW9uIG9uIGZhaWx1cmUuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3cml0ZSgkc3RyaW5nKTsKCiAgICAvKioKICAgICAqIFJldHVybnMgd2hldGhlciBvciBub3QgdGhlIHN0cmVhbSBpcyByZWFkYWJsZS4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGlzUmVhZGFibGUoKTsKCiAgICAvKioKICAgICAqIFJlYWQgZGF0YSBmcm9tIHRoZSBzdHJlYW0uCiAgICAgKgogICAgICogQHBhcmFtIGludCAkbGVuZ3RoIFJlYWQgdXAgdG8gJGxlbmd0aCBieXRlcyBmcm9tIHRoZSBvYmplY3QgYW5kIHJldHVybgogICAgICogICAgIHRoZW0uIEZld2VyIHRoYW4gJGxlbmd0aCBieXRlcyBtYXkgYmUgcmV0dXJuZWQgaWYgdW5kZXJseWluZyBzdHJlYW0KICAgICAqICAgICBjYWxsIHJldHVybnMgZmV3ZXIgYnl0ZXMuCiAgICAgKiBAcmV0dXJuIHN0cmluZyBSZXR1cm5zIHRoZSBkYXRhIHJlYWQgZnJvbSB0aGUgc3RyZWFtLCBvciBhbiBlbXB0eSBzdHJpbmcKICAgICAqICAgICBpZiBubyBieXRlcyBhcmUgYXZhaWxhYmxlLgogICAgICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbiBpZiBhbiBlcnJvciBvY2N1cnMuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZWFkKCRsZW5ndGgpOwoKICAgIC8qKgogICAgICogUmV0dXJucyB0aGUgcmVtYWluaW5nIGNvbnRlbnRzIGluIGEgc3RyaW5nCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqIEB0aHJvd3MgXFJ1bnRpbWVFeGNlcHRpb24gaWYgdW5hYmxlIHRvIHJlYWQgb3IgYW4gZXJyb3Igb2NjdXJzIHdoaWxlCiAgICAgKiAgICAgcmVhZGluZy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbnRlbnRzKCk7CgogICAgLyoqCiAgICAgKiBHZXQgc3RyZWFtIG1ldGFkYXRhIGFzIGFuIGFzc29jaWF0aXZlIGFycmF5IG9yIHJldHJpZXZlIGEgc3BlY2lmaWMga2V5LgogICAgICoKICAgICAqIFRoZSBrZXlzIHJldHVybmVkIGFyZSBpZGVudGljYWwgdG8gdGhlIGtleXMgcmV0dXJuZWQgZnJvbSBQSFAncwogICAgICogc3RyZWFtX2dldF9tZXRhX2RhdGEoKSBmdW5jdGlvbi4KICAgICAqCiAgICAgKiBAbGluayBodHRwOi8vcGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uc3RyZWFtLWdldC1tZXRhLWRhdGEucGhwCiAgICAgKiBAcGFyYW0gc3RyaW5nICRrZXkgU3BlY2lmaWMgbWV0YWRhdGEgdG8gcmV0cmlldmUuCiAgICAgKiBAcmV0dXJuIGFycmF5fG1peGVkfG51bGwgUmV0dXJucyBhbiBhc3NvY2lhdGl2ZSBhcnJheSBpZiBubyBrZXkgaXMKICAgICAqICAgICBwcm92aWRlZC4gUmV0dXJucyBhIHNwZWNpZmljIGtleSB2YWx1ZSBpZiBhIGtleSBpcyBwcm92aWRlZCBhbmQgdGhlCiAgICAgKiAgICAgdmFsdWUgaXMgZm91bmQsIG9yIG51bGwgaWYgdGhlIGtleSBpcyBub3QgZm91bmQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRNZXRhZGF0YSgka2V5ID0gbnVsbCk7Cn0KAppDevTools/query/vendor/psr/http-message/src/UploadedFileInterface.phpPD9waHAKCm5hbWVzcGFjZSBQc3JcSHR0cFxNZXNzYWdlOwoKLyoqCiAqIFZhbHVlIG9iamVjdCByZXByZXNlbnRpbmcgYSBmaWxlIHVwbG9hZGVkIHRocm91Z2ggYW4gSFRUUCByZXF1ZXN0LgogKgogKiBJbnN0YW5jZXMgb2YgdGhpcyBpbnRlcmZhY2UgYXJlIGNvbnNpZGVyZWQgaW1tdXRhYmxlOyBhbGwgbWV0aG9kcyB0aGF0CiAqIG1pZ2h0IGNoYW5nZSBzdGF0ZSBNVVNUIGJlIGltcGxlbWVudGVkIHN1Y2ggdGhhdCB0aGV5IHJldGFpbiB0aGUgaW50ZXJuYWwKICogc3RhdGUgb2YgdGhlIGN1cnJlbnQgaW5zdGFuY2UgYW5kIHJldHVybiBhbiBpbnN0YW5jZSB0aGF0IGNvbnRhaW5zIHRoZQogKiBjaGFuZ2VkIHN0YXRlLgogKi8KaW50ZXJmYWNlIFVwbG9hZGVkRmlsZUludGVyZmFjZQp7CiAgICAvKioKICAgICAqIFJldHJpZXZlIGEgc3RyZWFtIHJlcHJlc2VudGluZyB0aGUgdXBsb2FkZWQgZmlsZS4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIHJldHVybiBhIFN0cmVhbUludGVyZmFjZSBpbnN0YW5jZSwgcmVwcmVzZW50aW5nIHRoZQogICAgICogdXBsb2FkZWQgZmlsZS4gVGhlIHB1cnBvc2Ugb2YgdGhpcyBtZXRob2QgaXMgdG8gYWxsb3cgdXRpbGl6aW5nIG5hdGl2ZSBQSFAKICAgICAqIHN0cmVhbSBmdW5jdGlvbmFsaXR5IHRvIG1hbmlwdWxhdGUgdGhlIGZpbGUgdXBsb2FkLCBzdWNoIGFzCiAgICAgKiBzdHJlYW1fY29weV90b19zdHJlYW0oKSAodGhvdWdoIHRoZSByZXN1bHQgd2lsbCBuZWVkIHRvIGJlIGRlY29yYXRlZCBpbiBhCiAgICAgKiBuYXRpdmUgUEhQIHN0cmVhbSB3cmFwcGVyIHRvIHdvcmsgd2l0aCBzdWNoIGZ1bmN0aW9ucykuCiAgICAgKgogICAgICogSWYgdGhlIG1vdmVUbygpIG1ldGhvZCBoYXMgYmVlbiBjYWxsZWQgcHJldmlvdXNseSwgdGhpcyBtZXRob2QgTVVTVCByYWlzZQogICAgICogYW4gZXhjZXB0aW9uLgogICAgICoKICAgICAqIEByZXR1cm4gU3RyZWFtSW50ZXJmYWNlIFN0cmVhbSByZXByZXNlbnRhdGlvbiBvZiB0aGUgdXBsb2FkZWQgZmlsZS4KICAgICAqIEB0aHJvd3MgXFJ1bnRpbWVFeGNlcHRpb24gaW4gY2FzZXMgd2hlbiBubyBzdHJlYW0gaXMgYXZhaWxhYmxlIG9yIGNhbiBiZQogICAgICogICAgIGNyZWF0ZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTdHJlYW0oKTsKCiAgICAvKioKICAgICAqIE1vdmUgdGhlIHVwbG9hZGVkIGZpbGUgdG8gYSBuZXcgbG9jYXRpb24uCiAgICAgKgogICAgICogVXNlIHRoaXMgbWV0aG9kIGFzIGFuIGFsdGVybmF0aXZlIHRvIG1vdmVfdXBsb2FkZWRfZmlsZSgpLiBUaGlzIG1ldGhvZCBpcwogICAgICogZ3VhcmFudGVlZCB0byB3b3JrIGluIGJvdGggU0FQSSBhbmQgbm9uLVNBUEkgZW52aXJvbm1lbnRzLgogICAgICogSW1wbGVtZW50YXRpb25zIG11c3QgZGV0ZXJtaW5lIHdoaWNoIGVudmlyb25tZW50IHRoZXkgYXJlIGluLCBhbmQgdXNlIHRoZQogICAgICogYXBwcm9wcmlhdGUgbWV0aG9kIChtb3ZlX3VwbG9hZGVkX2ZpbGUoKSwgcmVuYW1lKCksIG9yIGEgc3RyZWFtCiAgICAgKiBvcGVyYXRpb24pIHRvIHBlcmZvcm0gdGhlIG9wZXJhdGlvbi4KICAgICAqCiAgICAgKiAkdGFyZ2V0UGF0aCBtYXkgYmUgYW4gYWJzb2x1dGUgcGF0aCwgb3IgYSByZWxhdGl2ZSBwYXRoLiBJZiBpdCBpcyBhCiAgICAgKiByZWxhdGl2ZSBwYXRoLCByZXNvbHV0aW9uIHNob3VsZCBiZSB0aGUgc2FtZSBhcyB1c2VkIGJ5IFBIUCdzIHJlbmFtZSgpCiAgICAgKiBmdW5jdGlvbi4KICAgICAqCiAgICAgKiBUaGUgb3JpZ2luYWwgZmlsZSBvciBzdHJlYW0gTVVTVCBiZSByZW1vdmVkIG9uIGNvbXBsZXRpb24uCiAgICAgKgogICAgICogSWYgdGhpcyBtZXRob2QgaXMgY2FsbGVkIG1vcmUgdGhhbiBvbmNlLCBhbnkgc3Vic2VxdWVudCBjYWxscyBNVVNUIHJhaXNlCiAgICAgKiBhbiBleGNlcHRpb24uCiAgICAgKgogICAgICogV2hlbiB1c2VkIGluIGFuIFNBUEkgZW52aXJvbm1lbnQgd2hlcmUgJF9GSUxFUyBpcyBwb3B1bGF0ZWQsIHdoZW4gd3JpdGluZwogICAgICogZmlsZXMgdmlhIG1vdmVUbygpLCBpc191cGxvYWRlZF9maWxlKCkgYW5kIG1vdmVfdXBsb2FkZWRfZmlsZSgpIFNIT1VMRCBiZQogICAgICogdXNlZCB0byBlbnN1cmUgcGVybWlzc2lvbnMgYW5kIHVwbG9hZCBzdGF0dXMgYXJlIHZlcmlmaWVkIGNvcnJlY3RseS4KICAgICAqCiAgICAgKiBJZiB5b3Ugd2lzaCB0byBtb3ZlIHRvIGEgc3RyZWFtLCB1c2UgZ2V0U3RyZWFtKCksIGFzIFNBUEkgb3BlcmF0aW9ucwogICAgICogY2Fubm90IGd1YXJhbnRlZSB3cml0aW5nIHRvIHN0cmVhbSBkZXN0aW5hdGlvbnMuCiAgICAgKgogICAgICogQHNlZSBodHRwOi8vcGhwLm5ldC9pc191cGxvYWRlZF9maWxlCiAgICAgKiBAc2VlIGh0dHA6Ly9waHAubmV0L21vdmVfdXBsb2FkZWRfZmlsZQogICAgICogQHBhcmFtIHN0cmluZyAkdGFyZ2V0UGF0aCBQYXRoIHRvIHdoaWNoIHRvIG1vdmUgdGhlIHVwbG9hZGVkIGZpbGUuCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gaWYgdGhlICR0YXJnZXRQYXRoIHNwZWNpZmllZCBpcyBpbnZhbGlkLgogICAgICogQHRocm93cyBcUnVudGltZUV4Y2VwdGlvbiBvbiBhbnkgZXJyb3IgZHVyaW5nIHRoZSBtb3ZlIG9wZXJhdGlvbiwgb3Igb24KICAgICAqICAgICB0aGUgc2Vjb25kIG9yIHN1YnNlcXVlbnQgY2FsbCB0byB0aGUgbWV0aG9kLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbW92ZVRvKCR0YXJnZXRQYXRoKTsKICAgIAogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSB0aGUgZmlsZSBzaXplLgogICAgICoKICAgICAqIEltcGxlbWVudGF0aW9ucyBTSE9VTEQgcmV0dXJuIHRoZSB2YWx1ZSBzdG9yZWQgaW4gdGhlICJzaXplIiBrZXkgb2YKICAgICAqIHRoZSBmaWxlIGluIHRoZSAkX0ZJTEVTIGFycmF5IGlmIGF2YWlsYWJsZSwgYXMgUEhQIGNhbGN1bGF0ZXMgdGhpcyBiYXNlZAogICAgICogb24gdGhlIGFjdHVhbCBzaXplIHRyYW5zbWl0dGVkLgogICAgICoKICAgICAqIEByZXR1cm4gaW50fG51bGwgVGhlIGZpbGUgc2l6ZSBpbiBieXRlcyBvciBudWxsIGlmIHVua25vd24uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRTaXplKCk7CiAgICAKICAgIC8qKgogICAgICogUmV0cmlldmUgdGhlIGVycm9yIGFzc29jaWF0ZWQgd2l0aCB0aGUgdXBsb2FkZWQgZmlsZS4KICAgICAqCiAgICAgKiBUaGUgcmV0dXJuIHZhbHVlIE1VU1QgYmUgb25lIG9mIFBIUCdzIFVQTE9BRF9FUlJfWFhYIGNvbnN0YW50cy4KICAgICAqCiAgICAgKiBJZiB0aGUgZmlsZSB3YXMgdXBsb2FkZWQgc3VjY2Vzc2Z1bGx5LCB0aGlzIG1ldGhvZCBNVVNUIHJldHVybgogICAgICogVVBMT0FEX0VSUl9PSy4KICAgICAqCiAgICAgKiBJbXBsZW1lbnRhdGlvbnMgU0hPVUxEIHJldHVybiB0aGUgdmFsdWUgc3RvcmVkIGluIHRoZSAiZXJyb3IiIGtleSBvZgogICAgICogdGhlIGZpbGUgaW4gdGhlICRfRklMRVMgYXJyYXkuCiAgICAgKgogICAgICogQHNlZSBodHRwOi8vcGhwLm5ldC9tYW51YWwvZW4vZmVhdHVyZXMuZmlsZS11cGxvYWQuZXJyb3JzLnBocAogICAgICogQHJldHVybiBpbnQgT25lIG9mIFBIUCdzIFVQTE9BRF9FUlJfWFhYIGNvbnN0YW50cy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEVycm9yKCk7CiAgICAKICAgIC8qKgogICAgICogUmV0cmlldmUgdGhlIGZpbGVuYW1lIHNlbnQgYnkgdGhlIGNsaWVudC4KICAgICAqCiAgICAgKiBEbyBub3QgdHJ1c3QgdGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoaXMgbWV0aG9kLiBBIGNsaWVudCBjb3VsZCBzZW5kCiAgICAgKiBhIG1hbGljaW91cyBmaWxlbmFtZSB3aXRoIHRoZSBpbnRlbnRpb24gdG8gY29ycnVwdCBvciBoYWNrIHlvdXIKICAgICAqIGFwcGxpY2F0aW9uLgogICAgICoKICAgICAqIEltcGxlbWVudGF0aW9ucyBTSE9VTEQgcmV0dXJuIHRoZSB2YWx1ZSBzdG9yZWQgaW4gdGhlICJuYW1lIiBrZXkgb2YKICAgICAqIHRoZSBmaWxlIGluIHRoZSAkX0ZJTEVTIGFycmF5LgogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfG51bGwgVGhlIGZpbGVuYW1lIHNlbnQgYnkgdGhlIGNsaWVudCBvciBudWxsIGlmIG5vbmUKICAgICAqICAgICB3YXMgcHJvdmlkZWQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDbGllbnRGaWxlbmFtZSgpOwogICAgCiAgICAvKioKICAgICAqIFJldHJpZXZlIHRoZSBtZWRpYSB0eXBlIHNlbnQgYnkgdGhlIGNsaWVudC4KICAgICAqCiAgICAgKiBEbyBub3QgdHJ1c3QgdGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoaXMgbWV0aG9kLiBBIGNsaWVudCBjb3VsZCBzZW5kCiAgICAgKiBhIG1hbGljaW91cyBtZWRpYSB0eXBlIHdpdGggdGhlIGludGVudGlvbiB0byBjb3JydXB0IG9yIGhhY2sgeW91cgogICAgICogYXBwbGljYXRpb24uCiAgICAgKgogICAgICogSW1wbGVtZW50YXRpb25zIFNIT1VMRCByZXR1cm4gdGhlIHZhbHVlIHN0b3JlZCBpbiB0aGUgInR5cGUiIGtleSBvZgogICAgICogdGhlIGZpbGUgaW4gdGhlICRfRklMRVMgYXJyYXkuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8bnVsbCBUaGUgbWVkaWEgdHlwZSBzZW50IGJ5IHRoZSBjbGllbnQgb3IgbnVsbCBpZiBub25lCiAgICAgKiAgICAgd2FzIHByb3ZpZGVkLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2xpZW50TWVkaWFUeXBlKCk7Cn0KAppDevTools/query/vendor/psr/http-message/src/UriInterface.phpPD9waHAKbmFtZXNwYWNlIFBzclxIdHRwXE1lc3NhZ2U7CgovKioKICogVmFsdWUgb2JqZWN0IHJlcHJlc2VudGluZyBhIFVSSS4KICoKICogVGhpcyBpbnRlcmZhY2UgaXMgbWVhbnQgdG8gcmVwcmVzZW50IFVSSXMgYWNjb3JkaW5nIHRvIFJGQyAzOTg2IGFuZCB0bwogKiBwcm92aWRlIG1ldGhvZHMgZm9yIG1vc3QgY29tbW9uIG9wZXJhdGlvbnMuIEFkZGl0aW9uYWwgZnVuY3Rpb25hbGl0eSBmb3IKICogd29ya2luZyB3aXRoIFVSSXMgY2FuIGJlIHByb3ZpZGVkIG9uIHRvcCBvZiB0aGUgaW50ZXJmYWNlIG9yIGV4dGVybmFsbHkuCiAqIEl0cyBwcmltYXJ5IHVzZSBpcyBmb3IgSFRUUCByZXF1ZXN0cywgYnV0IG1heSBhbHNvIGJlIHVzZWQgaW4gb3RoZXIKICogY29udGV4dHMuCiAqCiAqIEluc3RhbmNlcyBvZiB0aGlzIGludGVyZmFjZSBhcmUgY29uc2lkZXJlZCBpbW11dGFibGU7IGFsbCBtZXRob2RzIHRoYXQKICogbWlnaHQgY2hhbmdlIHN0YXRlIE1VU1QgYmUgaW1wbGVtZW50ZWQgc3VjaCB0aGF0IHRoZXkgcmV0YWluIHRoZSBpbnRlcm5hbAogKiBzdGF0ZSBvZiB0aGUgY3VycmVudCBpbnN0YW5jZSBhbmQgcmV0dXJuIGFuIGluc3RhbmNlIHRoYXQgY29udGFpbnMgdGhlCiAqIGNoYW5nZWQgc3RhdGUuCiAqCiAqIFR5cGljYWxseSB0aGUgSG9zdCBoZWFkZXIgd2lsbCBiZSBhbHNvIGJlIHByZXNlbnQgaW4gdGhlIHJlcXVlc3QgbWVzc2FnZS4KICogRm9yIHNlcnZlci1zaWRlIHJlcXVlc3RzLCB0aGUgc2NoZW1lIHdpbGwgdHlwaWNhbGx5IGJlIGRpc2NvdmVyYWJsZSBpbiB0aGUKICogc2VydmVyIHBhcmFtZXRlcnMuCiAqCiAqIEBsaW5rIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYgKHRoZSBVUkkgc3BlY2lmaWNhdGlvbikKICovCmludGVyZmFjZSBVcmlJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSB0aGUgc2NoZW1lIGNvbXBvbmVudCBvZiB0aGUgVVJJLgogICAgICoKICAgICAqIElmIG5vIHNjaGVtZSBpcyBwcmVzZW50LCB0aGlzIG1ldGhvZCBNVVNUIHJldHVybiBhbiBlbXB0eSBzdHJpbmcuCiAgICAgKgogICAgICogVGhlIHZhbHVlIHJldHVybmVkIE1VU1QgYmUgbm9ybWFsaXplZCB0byBsb3dlcmNhc2UsIHBlciBSRkMgMzk4NgogICAgICogU2VjdGlvbiAzLjEuCiAgICAgKgogICAgICogVGhlIHRyYWlsaW5nICI6IiBjaGFyYWN0ZXIgaXMgbm90IHBhcnQgb2YgdGhlIHNjaGVtZSBhbmQgTVVTVCBOT1QgYmUKICAgICAqIGFkZGVkLgogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi0zLjEKICAgICAqIEByZXR1cm4gc3RyaW5nIFRoZSBVUkkgc2NoZW1lLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2NoZW1lKCk7CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSB0aGUgYXV0aG9yaXR5IGNvbXBvbmVudCBvZiB0aGUgVVJJLgogICAgICoKICAgICAqIElmIG5vIGF1dGhvcml0eSBpbmZvcm1hdGlvbiBpcyBwcmVzZW50LCB0aGlzIG1ldGhvZCBNVVNUIHJldHVybiBhbiBlbXB0eQogICAgICogc3RyaW5nLgogICAgICoKICAgICAqIFRoZSBhdXRob3JpdHkgc3ludGF4IG9mIHRoZSBVUkkgaXM6CiAgICAgKgogICAgICogPHByZT4KICAgICAqIFt1c2VyLWluZm9AXWhvc3RbOnBvcnRdCiAgICAgKiA8L3ByZT4KICAgICAqCiAgICAgKiBJZiB0aGUgcG9ydCBjb21wb25lbnQgaXMgbm90IHNldCBvciBpcyB0aGUgc3RhbmRhcmQgcG9ydCBmb3IgdGhlIGN1cnJlbnQKICAgICAqIHNjaGVtZSwgaXQgU0hPVUxEIE5PVCBiZSBpbmNsdWRlZC4KICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tMy4yCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgVVJJIGF1dGhvcml0eSwgaW4gIlt1c2VyLWluZm9AXWhvc3RbOnBvcnRdIiBmb3JtYXQuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRBdXRob3JpdHkoKTsKCiAgICAvKioKICAgICAqIFJldHJpZXZlIHRoZSB1c2VyIGluZm9ybWF0aW9uIGNvbXBvbmVudCBvZiB0aGUgVVJJLgogICAgICoKICAgICAqIElmIG5vIHVzZXIgaW5mb3JtYXRpb24gaXMgcHJlc2VudCwgdGhpcyBtZXRob2QgTVVTVCByZXR1cm4gYW4gZW1wdHkKICAgICAqIHN0cmluZy4KICAgICAqCiAgICAgKiBJZiBhIHVzZXIgaXMgcHJlc2VudCBpbiB0aGUgVVJJLCB0aGlzIHdpbGwgcmV0dXJuIHRoYXQgdmFsdWU7CiAgICAgKiBhZGRpdGlvbmFsbHksIGlmIHRoZSBwYXNzd29yZCBpcyBhbHNvIHByZXNlbnQsIGl0IHdpbGwgYmUgYXBwZW5kZWQgdG8gdGhlCiAgICAgKiB1c2VyIHZhbHVlLCB3aXRoIGEgY29sb24gKCI6Iikgc2VwYXJhdGluZyB0aGUgdmFsdWVzLgogICAgICoKICAgICAqIFRoZSB0cmFpbGluZyAiQCIgY2hhcmFjdGVyIGlzIG5vdCBwYXJ0IG9mIHRoZSB1c2VyIGluZm9ybWF0aW9uIGFuZCBNVVNUCiAgICAgKiBOT1QgYmUgYWRkZWQuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgVGhlIFVSSSB1c2VyIGluZm9ybWF0aW9uLCBpbiAidXNlcm5hbWVbOnBhc3N3b3JkXSIgZm9ybWF0LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VXNlckluZm8oKTsKCiAgICAvKioKICAgICAqIFJldHJpZXZlIHRoZSBob3N0IGNvbXBvbmVudCBvZiB0aGUgVVJJLgogICAgICoKICAgICAqIElmIG5vIGhvc3QgaXMgcHJlc2VudCwgdGhpcyBtZXRob2QgTVVTVCByZXR1cm4gYW4gZW1wdHkgc3RyaW5nLgogICAgICoKICAgICAqIFRoZSB2YWx1ZSByZXR1cm5lZCBNVVNUIGJlIG5vcm1hbGl6ZWQgdG8gbG93ZXJjYXNlLCBwZXIgUkZDIDM5ODYKICAgICAqIFNlY3Rpb24gMy4yLjIuCiAgICAgKgogICAgICogQHNlZSBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tMy4yLjIKICAgICAqIEByZXR1cm4gc3RyaW5nIFRoZSBVUkkgaG9zdC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEhvc3QoKTsKCiAgICAvKioKICAgICAqIFJldHJpZXZlIHRoZSBwb3J0IGNvbXBvbmVudCBvZiB0aGUgVVJJLgogICAgICoKICAgICAqIElmIGEgcG9ydCBpcyBwcmVzZW50LCBhbmQgaXQgaXMgbm9uLXN0YW5kYXJkIGZvciB0aGUgY3VycmVudCBzY2hlbWUsCiAgICAgKiB0aGlzIG1ldGhvZCBNVVNUIHJldHVybiBpdCBhcyBhbiBpbnRlZ2VyLiBJZiB0aGUgcG9ydCBpcyB0aGUgc3RhbmRhcmQgcG9ydAogICAgICogdXNlZCB3aXRoIHRoZSBjdXJyZW50IHNjaGVtZSwgdGhpcyBtZXRob2QgU0hPVUxEIHJldHVybiBudWxsLgogICAgICoKICAgICAqIElmIG5vIHBvcnQgaXMgcHJlc2VudCwgYW5kIG5vIHNjaGVtZSBpcyBwcmVzZW50LCB0aGlzIG1ldGhvZCBNVVNUIHJldHVybgogICAgICogYSBudWxsIHZhbHVlLgogICAgICoKICAgICAqIElmIG5vIHBvcnQgaXMgcHJlc2VudCwgYnV0IGEgc2NoZW1lIGlzIHByZXNlbnQsIHRoaXMgbWV0aG9kIE1BWSByZXR1cm4KICAgICAqIHRoZSBzdGFuZGFyZCBwb3J0IGZvciB0aGF0IHNjaGVtZSwgYnV0IFNIT1VMRCByZXR1cm4gbnVsbC4KICAgICAqCiAgICAgKiBAcmV0dXJuIG51bGx8aW50IFRoZSBVUkkgcG9ydC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFBvcnQoKTsKCiAgICAvKioKICAgICAqIFJldHJpZXZlIHRoZSBwYXRoIGNvbXBvbmVudCBvZiB0aGUgVVJJLgogICAgICoKICAgICAqIFRoZSBwYXRoIGNhbiBlaXRoZXIgYmUgZW1wdHkgb3IgYWJzb2x1dGUgKHN0YXJ0aW5nIHdpdGggYSBzbGFzaCkgb3IKICAgICAqIHJvb3RsZXNzIChub3Qgc3RhcnRpbmcgd2l0aCBhIHNsYXNoKS4gSW1wbGVtZW50YXRpb25zIE1VU1Qgc3VwcG9ydCBhbGwKICAgICAqIHRocmVlIHN5bnRheGVzLgogICAgICoKICAgICAqIE5vcm1hbGx5LCB0aGUgZW1wdHkgcGF0aCAiIiBhbmQgYWJzb2x1dGUgcGF0aCAiLyIgYXJlIGNvbnNpZGVyZWQgZXF1YWwgYXMKICAgICAqIGRlZmluZWQgaW4gUkZDIDcyMzAgU2VjdGlvbiAyLjcuMy4gQnV0IHRoaXMgbWV0aG9kIE1VU1QgTk9UIGF1dG9tYXRpY2FsbHkKICAgICAqIGRvIHRoaXMgbm9ybWFsaXphdGlvbiBiZWNhdXNlIGluIGNvbnRleHRzIHdpdGggYSB0cmltbWVkIGJhc2UgcGF0aCwgZS5nLgogICAgICogdGhlIGZyb250IGNvbnRyb2xsZXIsIHRoaXMgZGlmZmVyZW5jZSBiZWNvbWVzIHNpZ25pZmljYW50LiBJdCdzIHRoZSB0YXNrCiAgICAgKiBvZiB0aGUgdXNlciB0byBoYW5kbGUgYm90aCAiIiBhbmQgIi8iLgogICAgICoKICAgICAqIFRoZSB2YWx1ZSByZXR1cm5lZCBNVVNUIGJlIHBlcmNlbnQtZW5jb2RlZCwgYnV0IE1VU1QgTk9UIGRvdWJsZS1lbmNvZGUKICAgICAqIGFueSBjaGFyYWN0ZXJzLiBUbyBkZXRlcm1pbmUgd2hhdCBjaGFyYWN0ZXJzIHRvIGVuY29kZSwgcGxlYXNlIHJlZmVyIHRvCiAgICAgKiBSRkMgMzk4NiwgU2VjdGlvbnMgMiBhbmQgMy4zLgogICAgICoKICAgICAqIEFzIGFuIGV4YW1wbGUsIGlmIHRoZSB2YWx1ZSBzaG91bGQgaW5jbHVkZSBhIHNsYXNoICgiLyIpIG5vdCBpbnRlbmRlZCBhcwogICAgICogZGVsaW1pdGVyIGJldHdlZW4gcGF0aCBzZWdtZW50cywgdGhhdCB2YWx1ZSBNVVNUIGJlIHBhc3NlZCBpbiBlbmNvZGVkCiAgICAgKiBmb3JtIChlLmcuLCAiJTJGIikgdG8gdGhlIGluc3RhbmNlLgogICAgICoKICAgICAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi0yCiAgICAgKiBAc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tMy4zCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgVVJJIHBhdGguCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQYXRoKCk7CgogICAgLyoqCiAgICAgKiBSZXRyaWV2ZSB0aGUgcXVlcnkgc3RyaW5nIG9mIHRoZSBVUkkuCiAgICAgKgogICAgICogSWYgbm8gcXVlcnkgc3RyaW5nIGlzIHByZXNlbnQsIHRoaXMgbWV0aG9kIE1VU1QgcmV0dXJuIGFuIGVtcHR5IHN0cmluZy4KICAgICAqCiAgICAgKiBUaGUgbGVhZGluZyAiPyIgY2hhcmFjdGVyIGlzIG5vdCBwYXJ0IG9mIHRoZSBxdWVyeSBhbmQgTVVTVCBOT1QgYmUKICAgICAqIGFkZGVkLgogICAgICoKICAgICAqIFRoZSB2YWx1ZSByZXR1cm5lZCBNVVNUIGJlIHBlcmNlbnQtZW5jb2RlZCwgYnV0IE1VU1QgTk9UIGRvdWJsZS1lbmNvZGUKICAgICAqIGFueSBjaGFyYWN0ZXJzLiBUbyBkZXRlcm1pbmUgd2hhdCBjaGFyYWN0ZXJzIHRvIGVuY29kZSwgcGxlYXNlIHJlZmVyIHRvCiAgICAgKiBSRkMgMzk4NiwgU2VjdGlvbnMgMiBhbmQgMy40LgogICAgICoKICAgICAqIEFzIGFuIGV4YW1wbGUsIGlmIGEgdmFsdWUgaW4gYSBrZXkvdmFsdWUgcGFpciBvZiB0aGUgcXVlcnkgc3RyaW5nIHNob3VsZAogICAgICogaW5jbHVkZSBhbiBhbXBlcnNhbmQgKCImIikgbm90IGludGVuZGVkIGFzIGEgZGVsaW1pdGVyIGJldHdlZW4gdmFsdWVzLAogICAgICogdGhhdCB2YWx1ZSBNVVNUIGJlIHBhc3NlZCBpbiBlbmNvZGVkIGZvcm0gKGUuZy4sICIlMjYiKSB0byB0aGUgaW5zdGFuY2UuCiAgICAgKgogICAgICogQHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTIKICAgICAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjc2VjdGlvbi0zLjQKICAgICAqIEByZXR1cm4gc3RyaW5nIFRoZSBVUkkgcXVlcnkgc3RyaW5nLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UXVlcnkoKTsKCiAgICAvKioKICAgICAqIFJldHJpZXZlIHRoZSBmcmFnbWVudCBjb21wb25lbnQgb2YgdGhlIFVSSS4KICAgICAqCiAgICAgKiBJZiBubyBmcmFnbWVudCBpcyBwcmVzZW50LCB0aGlzIG1ldGhvZCBNVVNUIHJldHVybiBhbiBlbXB0eSBzdHJpbmcuCiAgICAgKgogICAgICogVGhlIGxlYWRpbmcgIiMiIGNoYXJhY3RlciBpcyBub3QgcGFydCBvZiB0aGUgZnJhZ21lbnQgYW5kIE1VU1QgTk9UIGJlCiAgICAgKiBhZGRlZC4KICAgICAqCiAgICAgKiBUaGUgdmFsdWUgcmV0dXJuZWQgTVVTVCBiZSBwZXJjZW50LWVuY29kZWQsIGJ1dCBNVVNUIE5PVCBkb3VibGUtZW5jb2RlCiAgICAgKiBhbnkgY2hhcmFjdGVycy4gVG8gZGV0ZXJtaW5lIHdoYXQgY2hhcmFjdGVycyB0byBlbmNvZGUsIHBsZWFzZSByZWZlciB0bwogICAgICogUkZDIDM5ODYsIFNlY3Rpb25zIDIgYW5kIDMuNS4KICAgICAqCiAgICAgKiBAc2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tMgogICAgICogQHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzk4NiNzZWN0aW9uLTMuNQogICAgICogQHJldHVybiBzdHJpbmcgVGhlIFVSSSBmcmFnbWVudC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEZyYWdtZW50KCk7CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYW4gaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIHNjaGVtZS4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIHJldGFpbiB0aGUgc3RhdGUgb2YgdGhlIGN1cnJlbnQgaW5zdGFuY2UsIGFuZCByZXR1cm4KICAgICAqIGFuIGluc3RhbmNlIHRoYXQgY29udGFpbnMgdGhlIHNwZWNpZmllZCBzY2hlbWUuCiAgICAgKgogICAgICogSW1wbGVtZW50YXRpb25zIE1VU1Qgc3VwcG9ydCB0aGUgc2NoZW1lcyAiaHR0cCIgYW5kICJodHRwcyIgY2FzZQogICAgICogaW5zZW5zaXRpdmVseSwgYW5kIE1BWSBhY2NvbW1vZGF0ZSBvdGhlciBzY2hlbWVzIGlmIHJlcXVpcmVkLgogICAgICoKICAgICAqIEFuIGVtcHR5IHNjaGVtZSBpcyBlcXVpdmFsZW50IHRvIHJlbW92aW5nIHRoZSBzY2hlbWUuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkc2NoZW1lIFRoZSBzY2hlbWUgdG8gdXNlIHdpdGggdGhlIG5ldyBpbnN0YW5jZS4KICAgICAqIEByZXR1cm4gc3RhdGljIEEgbmV3IGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBzY2hlbWUuCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gZm9yIGludmFsaWQgb3IgdW5zdXBwb3J0ZWQgc2NoZW1lcy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhTY2hlbWUoJHNjaGVtZSk7CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYW4gaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIHVzZXIgaW5mb3JtYXRpb24uCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCByZXRhaW4gdGhlIHN0YXRlIG9mIHRoZSBjdXJyZW50IGluc3RhbmNlLCBhbmQgcmV0dXJuCiAgICAgKiBhbiBpbnN0YW5jZSB0aGF0IGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgdXNlciBpbmZvcm1hdGlvbi4KICAgICAqCiAgICAgKiBQYXNzd29yZCBpcyBvcHRpb25hbCwgYnV0IHRoZSB1c2VyIGluZm9ybWF0aW9uIE1VU1QgaW5jbHVkZSB0aGUKICAgICAqIHVzZXI7IGFuIGVtcHR5IHN0cmluZyBmb3IgdGhlIHVzZXIgaXMgZXF1aXZhbGVudCB0byByZW1vdmluZyB1c2VyCiAgICAgKiBpbmZvcm1hdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR1c2VyIFRoZSB1c2VyIG5hbWUgdG8gdXNlIGZvciBhdXRob3JpdHkuCiAgICAgKiBAcGFyYW0gbnVsbHxzdHJpbmcgJHBhc3N3b3JkIFRoZSBwYXNzd29yZCBhc3NvY2lhdGVkIHdpdGggJHVzZXIuCiAgICAgKiBAcmV0dXJuIHN0YXRpYyBBIG5ldyBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgdXNlciBpbmZvcm1hdGlvbi4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhVc2VySW5mbygkdXNlciwgJHBhc3N3b3JkID0gbnVsbCk7CgogICAgLyoqCiAgICAgKiBSZXR1cm4gYW4gaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIGhvc3QuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCByZXRhaW4gdGhlIHN0YXRlIG9mIHRoZSBjdXJyZW50IGluc3RhbmNlLCBhbmQgcmV0dXJuCiAgICAgKiBhbiBpbnN0YW5jZSB0aGF0IGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgaG9zdC4KICAgICAqCiAgICAgKiBBbiBlbXB0eSBob3N0IHZhbHVlIGlzIGVxdWl2YWxlbnQgdG8gcmVtb3ZpbmcgdGhlIGhvc3QuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkaG9zdCBUaGUgaG9zdG5hbWUgdG8gdXNlIHdpdGggdGhlIG5ldyBpbnN0YW5jZS4KICAgICAqIEByZXR1cm4gc3RhdGljIEEgbmV3IGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBob3N0LgogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGZvciBpbnZhbGlkIGhvc3RuYW1lcy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhIb3N0KCRob3N0KTsKCiAgICAvKioKICAgICAqIFJldHVybiBhbiBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgcG9ydC4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIHJldGFpbiB0aGUgc3RhdGUgb2YgdGhlIGN1cnJlbnQgaW5zdGFuY2UsIGFuZCByZXR1cm4KICAgICAqIGFuIGluc3RhbmNlIHRoYXQgY29udGFpbnMgdGhlIHNwZWNpZmllZCBwb3J0LgogICAgICoKICAgICAqIEltcGxlbWVudGF0aW9ucyBNVVNUIHJhaXNlIGFuIGV4Y2VwdGlvbiBmb3IgcG9ydHMgb3V0c2lkZSB0aGUKICAgICAqIGVzdGFibGlzaGVkIFRDUCBhbmQgVURQIHBvcnQgcmFuZ2VzLgogICAgICoKICAgICAqIEEgbnVsbCB2YWx1ZSBwcm92aWRlZCBmb3IgdGhlIHBvcnQgaXMgZXF1aXZhbGVudCB0byByZW1vdmluZyB0aGUgcG9ydAogICAgICogaW5mb3JtYXRpb24uCiAgICAgKgogICAgICogQHBhcmFtIG51bGx8aW50ICRwb3J0IFRoZSBwb3J0IHRvIHVzZSB3aXRoIHRoZSBuZXcgaW5zdGFuY2U7IGEgbnVsbCB2YWx1ZQogICAgICogICAgIHJlbW92ZXMgdGhlIHBvcnQgaW5mb3JtYXRpb24uCiAgICAgKiBAcmV0dXJuIHN0YXRpYyBBIG5ldyBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgcG9ydC4KICAgICAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3IgaW52YWxpZCBwb3J0cy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhQb3J0KCRwb3J0KTsKCiAgICAvKioKICAgICAqIFJldHVybiBhbiBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgcGF0aC4KICAgICAqCiAgICAgKiBUaGlzIG1ldGhvZCBNVVNUIHJldGFpbiB0aGUgc3RhdGUgb2YgdGhlIGN1cnJlbnQgaW5zdGFuY2UsIGFuZCByZXR1cm4KICAgICAqIGFuIGluc3RhbmNlIHRoYXQgY29udGFpbnMgdGhlIHNwZWNpZmllZCBwYXRoLgogICAgICoKICAgICAqIFRoZSBwYXRoIGNhbiBlaXRoZXIgYmUgZW1wdHkgb3IgYWJzb2x1dGUgKHN0YXJ0aW5nIHdpdGggYSBzbGFzaCkgb3IKICAgICAqIHJvb3RsZXNzIChub3Qgc3RhcnRpbmcgd2l0aCBhIHNsYXNoKS4gSW1wbGVtZW50YXRpb25zIE1VU1Qgc3VwcG9ydCBhbGwKICAgICAqIHRocmVlIHN5bnRheGVzLgogICAgICoKICAgICAqIElmIHRoZSBwYXRoIGlzIGludGVuZGVkIHRvIGJlIGRvbWFpbi1yZWxhdGl2ZSByYXRoZXIgdGhhbiBwYXRoIHJlbGF0aXZlIHRoZW4KICAgICAqIGl0IG11c3QgYmVnaW4gd2l0aCBhIHNsYXNoICgiLyIpLiBQYXRocyBub3Qgc3RhcnRpbmcgd2l0aCBhIHNsYXNoICgiLyIpCiAgICAgKiBhcmUgYXNzdW1lZCB0byBiZSByZWxhdGl2ZSB0byBzb21lIGJhc2UgcGF0aCBrbm93biB0byB0aGUgYXBwbGljYXRpb24gb3IKICAgICAqIGNvbnN1bWVyLgogICAgICoKICAgICAqIFVzZXJzIGNhbiBwcm92aWRlIGJvdGggZW5jb2RlZCBhbmQgZGVjb2RlZCBwYXRoIGNoYXJhY3RlcnMuCiAgICAgKiBJbXBsZW1lbnRhdGlvbnMgZW5zdXJlIHRoZSBjb3JyZWN0IGVuY29kaW5nIGFzIG91dGxpbmVkIGluIGdldFBhdGgoKS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRwYXRoIFRoZSBwYXRoIHRvIHVzZSB3aXRoIHRoZSBuZXcgaW5zdGFuY2UuCiAgICAgKiBAcmV0dXJuIHN0YXRpYyBBIG5ldyBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgcGF0aC4KICAgICAqIEB0aHJvd3MgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBmb3IgaW52YWxpZCBwYXRocy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhQYXRoKCRwYXRoKTsKCiAgICAvKioKICAgICAqIFJldHVybiBhbiBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgcXVlcnkgc3RyaW5nLgogICAgICoKICAgICAqIFRoaXMgbWV0aG9kIE1VU1QgcmV0YWluIHRoZSBzdGF0ZSBvZiB0aGUgY3VycmVudCBpbnN0YW5jZSwgYW5kIHJldHVybgogICAgICogYW4gaW5zdGFuY2UgdGhhdCBjb250YWlucyB0aGUgc3BlY2lmaWVkIHF1ZXJ5IHN0cmluZy4KICAgICAqCiAgICAgKiBVc2VycyBjYW4gcHJvdmlkZSBib3RoIGVuY29kZWQgYW5kIGRlY29kZWQgcXVlcnkgY2hhcmFjdGVycy4KICAgICAqIEltcGxlbWVudGF0aW9ucyBlbnN1cmUgdGhlIGNvcnJlY3QgZW5jb2RpbmcgYXMgb3V0bGluZWQgaW4gZ2V0UXVlcnkoKS4KICAgICAqCiAgICAgKiBBbiBlbXB0eSBxdWVyeSBzdHJpbmcgdmFsdWUgaXMgZXF1aXZhbGVudCB0byByZW1vdmluZyB0aGUgcXVlcnkgc3RyaW5nLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHF1ZXJ5IFRoZSBxdWVyeSBzdHJpbmcgdG8gdXNlIHdpdGggdGhlIG5ldyBpbnN0YW5jZS4KICAgICAqIEByZXR1cm4gc3RhdGljIEEgbmV3IGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBxdWVyeSBzdHJpbmcuCiAgICAgKiBAdGhyb3dzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gZm9yIGludmFsaWQgcXVlcnkgc3RyaW5ncy4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhRdWVyeSgkcXVlcnkpOwoKICAgIC8qKgogICAgICogUmV0dXJuIGFuIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZCBVUkkgZnJhZ21lbnQuCiAgICAgKgogICAgICogVGhpcyBtZXRob2QgTVVTVCByZXRhaW4gdGhlIHN0YXRlIG9mIHRoZSBjdXJyZW50IGluc3RhbmNlLCBhbmQgcmV0dXJuCiAgICAgKiBhbiBpbnN0YW5jZSB0aGF0IGNvbnRhaW5zIHRoZSBzcGVjaWZpZWQgVVJJIGZyYWdtZW50LgogICAgICoKICAgICAqIFVzZXJzIGNhbiBwcm92aWRlIGJvdGggZW5jb2RlZCBhbmQgZGVjb2RlZCBmcmFnbWVudCBjaGFyYWN0ZXJzLgogICAgICogSW1wbGVtZW50YXRpb25zIGVuc3VyZSB0aGUgY29ycmVjdCBlbmNvZGluZyBhcyBvdXRsaW5lZCBpbiBnZXRGcmFnbWVudCgpLgogICAgICoKICAgICAqIEFuIGVtcHR5IGZyYWdtZW50IHZhbHVlIGlzIGVxdWl2YWxlbnQgdG8gcmVtb3ZpbmcgdGhlIGZyYWdtZW50LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZyYWdtZW50IFRoZSBmcmFnbWVudCB0byB1c2Ugd2l0aCB0aGUgbmV3IGluc3RhbmNlLgogICAgICogQHJldHVybiBzdGF0aWMgQSBuZXcgaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIGZyYWdtZW50LgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aEZyYWdtZW50KCRmcmFnbWVudCk7CgogICAgLyoqCiAgICAgKiBSZXR1cm4gdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBhcyBhIFVSSSByZWZlcmVuY2UuCiAgICAgKgogICAgICogRGVwZW5kaW5nIG9uIHdoaWNoIGNvbXBvbmVudHMgb2YgdGhlIFVSSSBhcmUgcHJlc2VudCwgdGhlIHJlc3VsdGluZwogICAgICogc3RyaW5nIGlzIGVpdGhlciBhIGZ1bGwgVVJJIG9yIHJlbGF0aXZlIHJlZmVyZW5jZSBhY2NvcmRpbmcgdG8gUkZDIDM5ODYsCiAgICAgKiBTZWN0aW9uIDQuMS4gVGhlIG1ldGhvZCBjb25jYXRlbmF0ZXMgdGhlIHZhcmlvdXMgY29tcG9uZW50cyBvZiB0aGUgVVJJLAogICAgICogdXNpbmcgdGhlIGFwcHJvcHJpYXRlIGRlbGltaXRlcnM6CiAgICAgKgogICAgICogLSBJZiBhIHNjaGVtZSBpcyBwcmVzZW50LCBpdCBNVVNUIGJlIHN1ZmZpeGVkIGJ5ICI6Ii4KICAgICAqIC0gSWYgYW4gYXV0aG9yaXR5IGlzIHByZXNlbnQsIGl0IE1VU1QgYmUgcHJlZml4ZWQgYnkgIi8vIi4KICAgICAqIC0gVGhlIHBhdGggY2FuIGJlIGNvbmNhdGVuYXRlZCB3aXRob3V0IGRlbGltaXRlcnMuIEJ1dCB0aGVyZSBhcmUgdHdvCiAgICAgKiAgIGNhc2VzIHdoZXJlIHRoZSBwYXRoIGhhcyB0byBiZSBhZGp1c3RlZCB0byBtYWtlIHRoZSBVUkkgcmVmZXJlbmNlCiAgICAgKiAgIHZhbGlkIGFzIFBIUCBkb2VzIG5vdCBhbGxvdyB0byB0aHJvdyBhbiBleGNlcHRpb24gaW4gX190b1N0cmluZygpOgogICAgICogICAgIC0gSWYgdGhlIHBhdGggaXMgcm9vdGxlc3MgYW5kIGFuIGF1dGhvcml0eSBpcyBwcmVzZW50LCB0aGUgcGF0aCBNVVNUCiAgICAgKiAgICAgICBiZSBwcmVmaXhlZCBieSAiLyIuCiAgICAgKiAgICAgLSBJZiB0aGUgcGF0aCBpcyBzdGFydGluZyB3aXRoIG1vcmUgdGhhbiBvbmUgIi8iIGFuZCBubyBhdXRob3JpdHkgaXMKICAgICAqICAgICAgIHByZXNlbnQsIHRoZSBzdGFydGluZyBzbGFzaGVzIE1VU1QgYmUgcmVkdWNlZCB0byBvbmUuCiAgICAgKiAtIElmIGEgcXVlcnkgaXMgcHJlc2VudCwgaXQgTVVTVCBiZSBwcmVmaXhlZCBieSAiPyIuCiAgICAgKiAtIElmIGEgZnJhZ21lbnQgaXMgcHJlc2VudCwgaXQgTVVTVCBiZSBwcmVmaXhlZCBieSAiIyIuCiAgICAgKgogICAgICogQHNlZSBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I3NlY3Rpb24tNC4xCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpOwp9Cg==AppDevTools/query/vendor/symfony/polyfill-mbstring/LICENSEQ29weXJpZ2h0IChjKSAyMDE1LTIwMTggRmFiaWVuIFBvdGVuY2llcgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZAp0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOClRIRSBTT0ZUV0FSRS4KAppDevTools/query/vendor/symfony/polyfill-mbstring/Mbstring.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XFBvbHlmaWxsXE1ic3RyaW5nOwoKLyoqCiAqIFBhcnRpYWwgbWJzdHJpbmcgaW1wbGVtZW50YXRpb24gaW4gUEhQLCBpY29udiBiYXNlZCwgVVRGLTggY2VudHJpYy4KICoKICogSW1wbGVtZW50ZWQ6CiAqIC0gbWJfY2hyICAgICAgICAgICAgICAgICAgLSBSZXR1cm5zIGEgc3BlY2lmaWMgY2hhcmFjdGVyIGZyb20gaXRzIFVuaWNvZGUgY29kZSBwb2ludAogKiAtIG1iX2NvbnZlcnRfZW5jb2RpbmcgICAgIC0gQ29udmVydCBjaGFyYWN0ZXIgZW5jb2RpbmcKICogLSBtYl9jb252ZXJ0X3ZhcmlhYmxlcyAgICAtIENvbnZlcnQgY2hhcmFjdGVyIGNvZGUgaW4gdmFyaWFibGUocykKICogLSBtYl9kZWNvZGVfbWltZWhlYWRlciAgICAtIERlY29kZSBzdHJpbmcgaW4gTUlNRSBoZWFkZXIgZmllbGQKICogLSBtYl9lbmNvZGVfbWltZWhlYWRlciAgICAtIEVuY29kZSBzdHJpbmcgZm9yIE1JTUUgaGVhZGVyIFhYWCBOQVRJVkUgSU1QTEVNRU5UQVRJT04gSVMgUkVBTExZIEJVR0dFRAogKiAtIG1iX2RlY29kZV9udW1lcmljZW50aXR5IC0gRGVjb2RlIEhUTUwgbnVtZXJpYyBzdHJpbmcgcmVmZXJlbmNlIHRvIGNoYXJhY3RlcgogKiAtIG1iX2VuY29kZV9udW1lcmljZW50aXR5IC0gRW5jb2RlIGNoYXJhY3RlciB0byBIVE1MIG51bWVyaWMgc3RyaW5nIHJlZmVyZW5jZQogKiAtIG1iX2NvbnZlcnRfY2FzZSAgICAgICAgIC0gUGVyZm9ybSBjYXNlIGZvbGRpbmcgb24gYSBzdHJpbmcKICogLSBtYl9kZXRlY3RfZW5jb2RpbmcgICAgICAtIERldGVjdCBjaGFyYWN0ZXIgZW5jb2RpbmcKICogLSBtYl9nZXRfaW5mbyAgICAgICAgICAgICAtIEdldCBpbnRlcm5hbCBzZXR0aW5ncyBvZiBtYnN0cmluZwogKiAtIG1iX2h0dHBfaW5wdXQgICAgICAgICAgIC0gRGV0ZWN0IEhUVFAgaW5wdXQgY2hhcmFjdGVyIGVuY29kaW5nCiAqIC0gbWJfaHR0cF9vdXRwdXQgICAgICAgICAgLSBTZXQvR2V0IEhUVFAgb3V0cHV0IGNoYXJhY3RlciBlbmNvZGluZwogKiAtIG1iX2ludGVybmFsX2VuY29kaW5nICAgIC0gU2V0L0dldCBpbnRlcm5hbCBjaGFyYWN0ZXIgZW5jb2RpbmcKICogLSBtYl9saXN0X2VuY29kaW5ncyAgICAgICAtIFJldHVybnMgYW4gYXJyYXkgb2YgYWxsIHN1cHBvcnRlZCBlbmNvZGluZ3MKICogLSBtYl9vcmQgICAgICAgICAgICAgICAgICAtIFJldHVybnMgdGhlIFVuaWNvZGUgY29kZSBwb2ludCBvZiBhIGNoYXJhY3RlcgogKiAtIG1iX291dHB1dF9oYW5kbGVyICAgICAgIC0gQ2FsbGJhY2sgZnVuY3Rpb24gY29udmVydHMgY2hhcmFjdGVyIGVuY29kaW5nIGluIG91dHB1dCBidWZmZXIKICogLSBtYl9zY3J1YiAgICAgICAgICAgICAgICAtIFJlcGxhY2VzIGlsbC1mb3JtZWQgYnl0ZSBzZXF1ZW5jZXMgd2l0aCBzdWJzdGl0dXRlIGNoYXJhY3RlcnMKICogLSBtYl9zdHJsZW4gICAgICAgICAgICAgICAtIEdldCBzdHJpbmcgbGVuZ3RoCiAqIC0gbWJfc3RycG9zICAgICAgICAgICAgICAgLSBGaW5kIHBvc2l0aW9uIG9mIGZpcnN0IG9jY3VycmVuY2Ugb2Ygc3RyaW5nIGluIGEgc3RyaW5nCiAqIC0gbWJfc3RycnBvcyAgICAgICAgICAgICAgLSBGaW5kIHBvc2l0aW9uIG9mIGxhc3Qgb2NjdXJyZW5jZSBvZiBhIHN0cmluZyBpbiBhIHN0cmluZwogKiAtIG1iX3N0cnRvbG93ZXIgICAgICAgICAgIC0gTWFrZSBhIHN0cmluZyBsb3dlcmNhc2UKICogLSBtYl9zdHJ0b3VwcGVyICAgICAgICAgICAtIE1ha2UgYSBzdHJpbmcgdXBwZXJjYXNlCiAqIC0gbWJfc3Vic3RpdHV0ZV9jaGFyYWN0ZXIgLSBTZXQvR2V0IHN1YnN0aXR1dGlvbiBjaGFyYWN0ZXIKICogLSBtYl9zdWJzdHIgICAgICAgICAgICAgICAtIEdldCBwYXJ0IG9mIHN0cmluZwogKiAtIG1iX3N0cmlwb3MgICAgICAgICAgICAgIC0gRmluZHMgcG9zaXRpb24gb2YgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhIHN0cmluZyB3aXRoaW4gYW5vdGhlciwgY2FzZSBpbnNlbnNpdGl2ZQogKiAtIG1iX3N0cmlzdHIgICAgICAgICAgICAgIC0gRmluZHMgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhIHN0cmluZyB3aXRoaW4gYW5vdGhlciwgY2FzZSBpbnNlbnNpdGl2ZQogKiAtIG1iX3N0cnJjaHIgICAgICAgICAgICAgIC0gRmluZHMgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiBhIGNoYXJhY3RlciBpbiBhIHN0cmluZyB3aXRoaW4gYW5vdGhlcgogKiAtIG1iX3N0cnJpY2hyICAgICAgICAgICAgIC0gRmluZHMgdGhlIGxhc3Qgb2NjdXJyZW5jZSBvZiBhIGNoYXJhY3RlciBpbiBhIHN0cmluZyB3aXRoaW4gYW5vdGhlciwgY2FzZSBpbnNlbnNpdGl2ZQogKiAtIG1iX3N0cnJpcG9zICAgICAgICAgICAgIC0gRmluZHMgcG9zaXRpb24gb2YgbGFzdCBvY2N1cnJlbmNlIG9mIGEgc3RyaW5nIHdpdGhpbiBhbm90aGVyLCBjYXNlIGluc2Vuc2l0aXZlCiAqIC0gbWJfc3Ryc3RyICAgICAgICAgICAgICAgLSBGaW5kcyBmaXJzdCBvY2N1cnJlbmNlIG9mIGEgc3RyaW5nIHdpdGhpbiBhbm90aGVycwogKiAtIG1iX3N0cndpZHRoICAgICAgICAgICAgIC0gUmV0dXJuIHdpZHRoIG9mIHN0cmluZwogKiAtIG1iX3N1YnN0cl9jb3VudCAgICAgICAgIC0gQ291bnQgdGhlIG51bWJlciBvZiBzdWJzdHJpbmcgb2NjdXJyZW5jZXMKICoKICogTm90IGltcGxlbWVudGVkOgogKiAtIG1iX2NvbnZlcnRfa2FuYSAgICAgICAgIC0gQ29udmVydCAia2FuYSIgb25lIGZyb20gYW5vdGhlciAoInplbi1rYWt1IiwgImhhbi1rYWt1IiBhbmQgbW9yZSkKICogLSBtYl9lcmVnXyogICAgICAgICAgICAgICAtIFJlZ3VsYXIgZXhwcmVzc2lvbiB3aXRoIG11bHRpYnl0ZSBzdXBwb3J0CiAqIC0gbWJfcGFyc2Vfc3RyICAgICAgICAgICAgLSBQYXJzZSBHRVQvUE9TVC9DT09LSUUgZGF0YSBhbmQgc2V0IGdsb2JhbCB2YXJpYWJsZQogKiAtIG1iX3ByZWZlcnJlZF9taW1lX25hbWUgIC0gR2V0IE1JTUUgY2hhcnNldCBzdHJpbmcKICogLSBtYl9yZWdleF9lbmNvZGluZyAgICAgICAtIFJldHVybnMgY3VycmVudCBlbmNvZGluZyBmb3IgbXVsdGlieXRlIHJlZ2V4IGFzIHN0cmluZwogKiAtIG1iX3JlZ2V4X3NldF9vcHRpb25zICAgIC0gU2V0L0dldCB0aGUgZGVmYXVsdCBvcHRpb25zIGZvciBtYnJlZ2V4IGZ1bmN0aW9ucwogKiAtIG1iX3NlbmRfbWFpbCAgICAgICAgICAgIC0gU2VuZCBlbmNvZGVkIG1haWwKICogLSBtYl9zcGxpdCAgICAgICAgICAgICAgICAtIFNwbGl0IG11bHRpYnl0ZSBzdHJpbmcgdXNpbmcgcmVndWxhciBleHByZXNzaW9uCiAqIC0gbWJfc3RyY3V0ICAgICAgICAgICAgICAgLSBHZXQgcGFydCBvZiBzdHJpbmcKICogLSBtYl9zdHJpbXdpZHRoICAgICAgICAgICAtIEdldCB0cnVuY2F0ZWQgc3RyaW5nIHdpdGggc3BlY2lmaWVkIHdpZHRoCiAqCiAqIEBhdXRob3IgTmljb2xhcyBHcmVrYXMgPHBAdGNod29yay5jb20+CiAqCiAqIEBpbnRlcm5hbAogKi8KZmluYWwgY2xhc3MgTWJzdHJpbmcKewogICAgY29uc3QgTUJfQ0FTRV9GT0xEID0gUEhQX0lOVF9NQVg7CgogICAgcHJpdmF0ZSBzdGF0aWMgJGVuY29kaW5nTGlzdCA9IGFycmF5KCdBU0NJSScsICdVVEYtOCcpOwogICAgcHJpdmF0ZSBzdGF0aWMgJGxhbmd1YWdlID0gJ25ldXRyYWwnOwogICAgcHJpdmF0ZSBzdGF0aWMgJGludGVybmFsRW5jb2RpbmcgPSAnVVRGLTgnOwogICAgcHJpdmF0ZSBzdGF0aWMgJGNhc2VGb2xkID0gYXJyYXkoCiAgICAgICAgYXJyYXkoJ8K1Jywnxb8nLCJceENEXHg4NSIsJ8+CJywiXHhDRlx4OTAiLCJceENGXHg5MSIsIlx4Q0ZceDk1IiwiXHhDRlx4OTYiLCJceENGXHhCMCIsIlx4Q0ZceEIxIiwiXHhDRlx4QjUiLCJceEUxXHhCQVx4OUIiLCJceEUxXHhCRVx4QkUiKSwKICAgICAgICBhcnJheSgnzrwnLCdzJywnzrknLCAgICAgICAnz4MnLCfOsicsICAgICAgICfOuCcsICAgICAgICfPhicsICAgICAgICfPgCcsICAgICAgICfOuicsICAgICAgICfPgScsICAgICAgICfOtScsICAgICAgICJceEUxXHhCOVx4QTEiLCfOuScpLAogICAgKTsKCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG1iX2NvbnZlcnRfZW5jb2RpbmcoJHMsICR0b0VuY29kaW5nLCAkZnJvbUVuY29kaW5nID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAoXGlzX2FycmF5KCRmcm9tRW5jb2RpbmcpIHx8IGZhbHNlICE9PSBzdHJwb3MoJGZyb21FbmNvZGluZywgJywnKSkgewogICAgICAgICAgICAkZnJvbUVuY29kaW5nID0gc2VsZjo6bWJfZGV0ZWN0X2VuY29kaW5nKCRzLCAkZnJvbUVuY29kaW5nKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkZnJvbUVuY29kaW5nID0gc2VsZjo6Z2V0RW5jb2RpbmcoJGZyb21FbmNvZGluZyk7CiAgICAgICAgfQoKICAgICAgICAkdG9FbmNvZGluZyA9IHNlbGY6OmdldEVuY29kaW5nKCR0b0VuY29kaW5nKTsKCiAgICAgICAgaWYgKCdCQVNFNjQnID09PSAkZnJvbUVuY29kaW5nKSB7CiAgICAgICAgICAgICRzID0gYmFzZTY0X2RlY29kZSgkcyk7CiAgICAgICAgICAgICRmcm9tRW5jb2RpbmcgPSAkdG9FbmNvZGluZzsKICAgICAgICB9CgogICAgICAgIGlmICgnQkFTRTY0JyA9PT0gJHRvRW5jb2RpbmcpIHsKICAgICAgICAgICAgcmV0dXJuIGJhc2U2NF9lbmNvZGUoJHMpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCdIVE1MLUVOVElUSUVTJyA9PT0gJHRvRW5jb2RpbmcgfHwgJ0hUTUwnID09PSAkdG9FbmNvZGluZykgewogICAgICAgICAgICBpZiAoJ0hUTUwtRU5USVRJRVMnID09PSAkZnJvbUVuY29kaW5nIHx8ICdIVE1MJyA9PT0gJGZyb21FbmNvZGluZykgewogICAgICAgICAgICAgICAgJGZyb21FbmNvZGluZyA9ICdXaW5kb3dzLTEyNTInOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgnVVRGLTgnICE9PSAkZnJvbUVuY29kaW5nKSB7CiAgICAgICAgICAgICAgICAkcyA9IGljb252KCRmcm9tRW5jb2RpbmcsICdVVEYtOC8vSUdOT1JFJywgJHMpOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gcHJlZ19yZXBsYWNlX2NhbGxiYWNrKCcvW1x4ODAtXHhGRl0rLycsIGFycmF5KF9fQ0xBU1NfXywgJ2h0bWxfZW5jb2RpbmdfY2FsbGJhY2snKSwgJHMpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCdIVE1MLUVOVElUSUVTJyA9PT0gJGZyb21FbmNvZGluZykgewogICAgICAgICAgICAkcyA9IGh0bWxfZW50aXR5X2RlY29kZSgkcywgRU5UX0NPTVBBVCwgJ1VURi04Jyk7CiAgICAgICAgICAgICRmcm9tRW5jb2RpbmcgPSAnVVRGLTgnOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGljb252KCRmcm9tRW5jb2RpbmcsICR0b0VuY29kaW5nLicvL0lHTk9SRScsICRzKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG1iX2NvbnZlcnRfdmFyaWFibGVzKCR0b0VuY29kaW5nLCAkZnJvbUVuY29kaW5nLCAmJGEgPSBudWxsLCAmJGIgPSBudWxsLCAmJGMgPSBudWxsLCAmJGQgPSBudWxsLCAmJGUgPSBudWxsLCAmJGYgPSBudWxsKQogICAgewogICAgICAgICR2YXJzID0gYXJyYXkoJiRhLCAmJGIsICYkYywgJiRkLCAmJGUsICYkZik7CgogICAgICAgICRvayA9IHRydWU7CiAgICAgICAgYXJyYXlfd2Fsa19yZWN1cnNpdmUoJHZhcnMsIGZ1bmN0aW9uICgmJHYpIHVzZSAoJiRvaywgJHRvRW5jb2RpbmcsICRmcm9tRW5jb2RpbmcpIHsKICAgICAgICAgICAgaWYgKGZhbHNlID09PSAkdiA9IE1ic3RyaW5nOjptYl9jb252ZXJ0X2VuY29kaW5nKCR2LCAkdG9FbmNvZGluZywgJGZyb21FbmNvZGluZykpIHsKICAgICAgICAgICAgICAgICRvayA9IGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiAkb2sgPyAkZnJvbUVuY29kaW5nIDogZmFsc2U7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBtYl9kZWNvZGVfbWltZWhlYWRlcigkcykKICAgIHsKICAgICAgICByZXR1cm4gaWNvbnZfbWltZV9kZWNvZGUoJHMsIDIsIHNlbGY6OiRpbnRlcm5hbEVuY29kaW5nKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG1iX2VuY29kZV9taW1laGVhZGVyKCRzLCAkY2hhcnNldCA9IG51bGwsICR0cmFuc2ZlckVuY29kaW5nID0gbnVsbCwgJGxpbmVmZWVkID0gbnVsbCwgJGluZGVudCA9IG51bGwpCiAgICB7CiAgICAgICAgdHJpZ2dlcl9lcnJvcignbWJfZW5jb2RlX21pbWVoZWFkZXIoKSBpcyBidWdnZWQuIFBsZWFzZSB1c2UgaWNvbnZfbWltZV9lbmNvZGUoKSBpbnN0ZWFkJywgRV9VU0VSX1dBUk5JTkcpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbWJfZGVjb2RlX251bWVyaWNlbnRpdHkoJHMsICRjb252bWFwLCAkZW5jb2RpbmcgPSBudWxsKQogICAgewogICAgICAgIGlmIChudWxsICE9PSAkcyAmJiAhXGlzX3NjYWxhcigkcykgJiYgIShcaXNfb2JqZWN0KCRzKSAmJiBcbWV0aG9kX2V4aXN0cygkcywgJ19fdG9TdHJpbmcnKSkpIHsKICAgICAgICAgICAgdHJpZ2dlcl9lcnJvcignbWJfZGVjb2RlX251bWVyaWNlbnRpdHkoKSBleHBlY3RzIHBhcmFtZXRlciAxIHRvIGJlIHN0cmluZywgJy5nZXR0eXBlKCRzKS4nIGdpdmVuJywgRV9VU0VSX1dBUk5JTkcpOwogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CgogICAgICAgIGlmICghXGlzX2FycmF5KCRjb252bWFwKSB8fCAhJGNvbnZtYXApIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgaWYgKG51bGwgIT09ICRlbmNvZGluZyAmJiAhXGlzX3NjYWxhcigkZW5jb2RpbmcpKSB7CiAgICAgICAgICAgIHRyaWdnZXJfZXJyb3IoJ21iX2RlY29kZV9udW1lcmljZW50aXR5KCkgZXhwZWN0cyBwYXJhbWV0ZXIgMyB0byBiZSBzdHJpbmcsICcuZ2V0dHlwZSgkcykuJyBnaXZlbicsIEVfVVNFUl9XQVJOSU5HKTsKICAgICAgICAgICAgcmV0dXJuICcnOyAgLy8gSW5zdGVhZCBvZiBudWxsIChjZi4gbWJfZW5jb2RlX251bWVyaWNlbnRpdHkpLgogICAgICAgIH0KCiAgICAgICAgJHMgPSAoc3RyaW5nKSAkczsKICAgICAgICBpZiAoJycgPT09ICRzKSB7CiAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICB9CgogICAgICAgICRlbmNvZGluZyA9IHNlbGY6OmdldEVuY29kaW5nKCRlbmNvZGluZyk7CgogICAgICAgIGlmICgnVVRGLTgnID09PSAkZW5jb2RpbmcpIHsKICAgICAgICAgICAgJGVuY29kaW5nID0gbnVsbDsKICAgICAgICAgICAgaWYgKCFwcmVnX21hdGNoKCcvL3UnLCAkcykpIHsKICAgICAgICAgICAgICAgICRzID0gQGljb252KCdVVEYtOCcsICdVVEYtOC8vSUdOT1JFJywgJHMpOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHMgPSBpY29udigkZW5jb2RpbmcsICdVVEYtOC8vSUdOT1JFJywgJHMpOwogICAgICAgIH0KCiAgICAgICAgJGNudCA9IGZsb29yKFxjb3VudCgkY29udm1hcCkgLyA0KSAqIDQ7CgogICAgICAgIGZvciAoJGkgPSAwOyAkaSA8ICRjbnQ7ICRpICs9IDQpIHsKICAgICAgICAgICAgLy8gY29sbGVjdG9yX2RlY29kZV9odG1sbnVtZXJpY2VudGl0eSBpZ25vcmVzICRjb252bWFwWyRpICsgM10KICAgICAgICAgICAgJGNvbnZtYXBbJGldICs9ICRjb252bWFwWyRpICsgMl07CiAgICAgICAgICAgICRjb252bWFwWyRpICsgMV0gKz0gJGNvbnZtYXBbJGkgKyAyXTsKICAgICAgICB9CgogICAgICAgICRzID0gcHJlZ19yZXBsYWNlX2NhbGxiYWNrKCcvJiMoPzowKihbMC05XSspfHgwKihbMC05YS1mQS1GXSspKSg/ISYpOz8vJywgZnVuY3Rpb24gKGFycmF5ICRtKSB1c2UgKCRjbnQsICRjb252bWFwKSB7CiAgICAgICAgICAgICRjID0gaXNzZXQoJG1bMl0pID8gKGludCkgaGV4ZGVjKCRtWzJdKSA6ICRtWzFdOwogICAgICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCAkY250OyAkaSArPSA0KSB7CiAgICAgICAgICAgICAgICBpZiAoJGMgPj0gJGNvbnZtYXBbJGldICYmICRjIDw9ICRjb252bWFwWyRpICsgMV0pIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gTWJzdHJpbmc6Om1iX2NocigkYyAtICRjb252bWFwWyRpICsgMl0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiAkbVswXTsKICAgICAgICB9LCAkcyk7CgogICAgICAgIGlmIChudWxsID09PSAkZW5jb2RpbmcpIHsKICAgICAgICAgICAgcmV0dXJuICRzOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGljb252KCdVVEYtOCcsICRlbmNvZGluZy4nLy9JR05PUkUnLCAkcyk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBtYl9lbmNvZGVfbnVtZXJpY2VudGl0eSgkcywgJGNvbnZtYXAsICRlbmNvZGluZyA9IG51bGwsICRpc19oZXggPSBmYWxzZSkKICAgIHsKICAgICAgICBpZiAobnVsbCAhPT0gJHMgJiYgIVxpc19zY2FsYXIoJHMpICYmICEoXGlzX29iamVjdCgkcykgJiYgXG1ldGhvZF9leGlzdHMoJHMsICdfX3RvU3RyaW5nJykpKSB7CiAgICAgICAgICAgIHRyaWdnZXJfZXJyb3IoJ21iX2VuY29kZV9udW1lcmljZW50aXR5KCkgZXhwZWN0cyBwYXJhbWV0ZXIgMSB0byBiZSBzdHJpbmcsICcuZ2V0dHlwZSgkcykuJyBnaXZlbicsIEVfVVNFUl9XQVJOSU5HKTsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICBpZiAoIVxpc19hcnJheSgkY29udm1hcCkgfHwgISRjb252bWFwKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIGlmIChudWxsICE9PSAkZW5jb2RpbmcgJiYgIVxpc19zY2FsYXIoJGVuY29kaW5nKSkgewogICAgICAgICAgICB0cmlnZ2VyX2Vycm9yKCdtYl9lbmNvZGVfbnVtZXJpY2VudGl0eSgpIGV4cGVjdHMgcGFyYW1ldGVyIDMgdG8gYmUgc3RyaW5nLCAnLmdldHR5cGUoJHMpLicgZ2l2ZW4nLCBFX1VTRVJfV0FSTklORyk7CiAgICAgICAgICAgIHJldHVybiBudWxsOyAgLy8gSW5zdGVhZCBvZiAnJyAoY2YuIG1iX2RlY29kZV9udW1lcmljZW50aXR5KS4KICAgICAgICB9CgogICAgICAgIGlmIChudWxsICE9PSAkaXNfaGV4ICYmICFcaXNfc2NhbGFyKCRpc19oZXgpKSB7CiAgICAgICAgICAgIHRyaWdnZXJfZXJyb3IoJ21iX2VuY29kZV9udW1lcmljZW50aXR5KCkgZXhwZWN0cyBwYXJhbWV0ZXIgNCB0byBiZSBib29sZWFuLCAnLmdldHR5cGUoJHMpLicgZ2l2ZW4nLCBFX1VTRVJfV0FSTklORyk7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgJHMgPSAoc3RyaW5nKSAkczsKICAgICAgICBpZiAoJycgPT09ICRzKSB7CiAgICAgICAgICAgIHJldHVybiAnJzsKICAgICAgICB9CgogICAgICAgICRlbmNvZGluZyA9IHNlbGY6OmdldEVuY29kaW5nKCRlbmNvZGluZyk7CgogICAgICAgIGlmICgnVVRGLTgnID09PSAkZW5jb2RpbmcpIHsKICAgICAgICAgICAgJGVuY29kaW5nID0gbnVsbDsKICAgICAgICAgICAgaWYgKCFwcmVnX21hdGNoKCcvL3UnLCAkcykpIHsKICAgICAgICAgICAgICAgICRzID0gQGljb252KCdVVEYtOCcsICdVVEYtOC8vSUdOT1JFJywgJHMpOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHMgPSBpY29udigkZW5jb2RpbmcsICdVVEYtOC8vSUdOT1JFJywgJHMpOwogICAgICAgIH0KCiAgICAgICAgc3RhdGljICR1bGVuTWFzayA9IGFycmF5KCJceEMwIiA9PiAyLCAiXHhEMCIgPT4gMiwgIlx4RTAiID0+IDMsICJceEYwIiA9PiA0KTsKCiAgICAgICAgJGNudCA9IGZsb29yKFxjb3VudCgkY29udm1hcCkgLyA0KSAqIDQ7CiAgICAgICAgJGkgPSAwOwogICAgICAgICRsZW4gPSBcc3RybGVuKCRzKTsKICAgICAgICAkcmVzdWx0ID0gJyc7CgogICAgICAgIHdoaWxlICgkaSA8ICRsZW4pIHsKICAgICAgICAgICAgJHVsZW4gPSAkc1skaV0gPCAiXHg4MCIgPyAxIDogJHVsZW5NYXNrWyRzWyRpXSAmICJceEYwIl07CiAgICAgICAgICAgICR1Y2hyID0gc3Vic3RyKCRzLCAkaSwgJHVsZW4pOwogICAgICAgICAgICAkaSArPSAkdWxlbjsKICAgICAgICAgICAgJGMgPSBzZWxmOjptYl9vcmQoJHVjaHIpOwoKICAgICAgICAgICAgZm9yICgkaiA9IDA7ICRqIDwgJGNudDsgJGogKz0gNCkgewogICAgICAgICAgICAgICAgaWYgKCRjID49ICRjb252bWFwWyRqXSAmJiAkYyA8PSAkY29udm1hcFskaiArIDFdKSB7CiAgICAgICAgICAgICAgICAgICAgJGNPZmZzZXQgPSAoJGMgKyAkY29udm1hcFskaiArIDJdKSAmICRjb252bWFwWyRqICsgM107CiAgICAgICAgICAgICAgICAgICAgJHJlc3VsdCAuPSAkaXNfaGV4ID8gc3ByaW50ZignJiN4JVg7JywgJGNPZmZzZXQpIDogJyYjJy4kY09mZnNldC4nOyc7CiAgICAgICAgICAgICAgICAgICAgY29udGludWUgMjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICAkcmVzdWx0IC49ICR1Y2hyOwogICAgICAgIH0KCiAgICAgICAgaWYgKG51bGwgPT09ICRlbmNvZGluZykgewogICAgICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgICAgICB9CgogICAgICAgIHJldHVybiBpY29udignVVRGLTgnLCAkZW5jb2RpbmcuJy8vSUdOT1JFJywgJHJlc3VsdCk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBtYl9jb252ZXJ0X2Nhc2UoJHMsICRtb2RlLCAkZW5jb2RpbmcgPSBudWxsKQogICAgewogICAgICAgICRzID0gKHN0cmluZykgJHM7CiAgICAgICAgaWYgKCcnID09PSAkcykgewogICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgfQoKICAgICAgICAkZW5jb2RpbmcgPSBzZWxmOjpnZXRFbmNvZGluZygkZW5jb2RpbmcpOwoKICAgICAgICBpZiAoJ1VURi04JyA9PT0gJGVuY29kaW5nKSB7CiAgICAgICAgICAgICRlbmNvZGluZyA9IG51bGw7CiAgICAgICAgICAgIGlmICghcHJlZ19tYXRjaCgnLy91JywgJHMpKSB7CiAgICAgICAgICAgICAgICAkcyA9IEBpY29udignVVRGLTgnLCAnVVRGLTgvL0lHTk9SRScsICRzKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRzID0gaWNvbnYoJGVuY29kaW5nLCAnVVRGLTgvL0lHTk9SRScsICRzKTsKICAgICAgICB9CgogICAgICAgIGlmIChNQl9DQVNFX1RJVExFID09ICRtb2RlKSB7CiAgICAgICAgICAgICRzID0gcHJlZ19yZXBsYWNlX2NhbGxiYWNrKCcvXGJccHtMbH0vdScsIGFycmF5KF9fQ0xBU1NfXywgJ3RpdGxlX2Nhc2VfdXBwZXInKSwgJHMpOwogICAgICAgICAgICAkcyA9IHByZWdfcmVwbGFjZV9jYWxsYmFjaygnL1xCW1xwe0x1fVxwe0x0fV0rL3UnLCBhcnJheShfX0NMQVNTX18sICd0aXRsZV9jYXNlX2xvd2VyJyksICRzKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAoTUJfQ0FTRV9VUFBFUiA9PSAkbW9kZSkgewogICAgICAgICAgICAgICAgc3RhdGljICR1cHBlciA9IG51bGw7CiAgICAgICAgICAgICAgICBpZiAobnVsbCA9PT0gJHVwcGVyKSB7CiAgICAgICAgICAgICAgICAgICAgJHVwcGVyID0gc2VsZjo6Z2V0RGF0YSgndXBwZXJDYXNlJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkbWFwID0gJHVwcGVyOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgaWYgKHNlbGY6Ok1CX0NBU0VfRk9MRCA9PT0gJG1vZGUpIHsKICAgICAgICAgICAgICAgICAgICAkcyA9IHN0cl9yZXBsYWNlKHNlbGY6OiRjYXNlRm9sZFswXSwgc2VsZjo6JGNhc2VGb2xkWzFdLCAkcyk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgc3RhdGljICRsb3dlciA9IG51bGw7CiAgICAgICAgICAgICAgICBpZiAobnVsbCA9PT0gJGxvd2VyKSB7CiAgICAgICAgICAgICAgICAgICAgJGxvd2VyID0gc2VsZjo6Z2V0RGF0YSgnbG93ZXJDYXNlJyk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkbWFwID0gJGxvd2VyOwogICAgICAgICAgICB9CgogICAgICAgICAgICBzdGF0aWMgJHVsZW5NYXNrID0gYXJyYXkoIlx4QzAiID0+IDIsICJceEQwIiA9PiAyLCAiXHhFMCIgPT4gMywgIlx4RjAiID0+IDQpOwoKICAgICAgICAgICAgJGkgPSAwOwogICAgICAgICAgICAkbGVuID0gXHN0cmxlbigkcyk7CgogICAgICAgICAgICB3aGlsZSAoJGkgPCAkbGVuKSB7CiAgICAgICAgICAgICAgICAkdWxlbiA9ICRzWyRpXSA8ICJceDgwIiA/IDEgOiAkdWxlbk1hc2tbJHNbJGldICYgIlx4RjAiXTsKICAgICAgICAgICAgICAgICR1Y2hyID0gc3Vic3RyKCRzLCAkaSwgJHVsZW4pOwogICAgICAgICAgICAgICAgJGkgKz0gJHVsZW47CgogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRtYXBbJHVjaHJdKSkgewogICAgICAgICAgICAgICAgICAgICR1Y2hyID0gJG1hcFskdWNocl07CiAgICAgICAgICAgICAgICAgICAgJG5sZW4gPSBcc3RybGVuKCR1Y2hyKTsKCiAgICAgICAgICAgICAgICAgICAgaWYgKCRubGVuID09ICR1bGVuKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRubGVuID0gJGk7CiAgICAgICAgICAgICAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzWy0tJG5sZW5dID0gJHVjaHJbLS0kdWxlbl07CiAgICAgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKCR1bGVuKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkcyA9IHN1YnN0cl9yZXBsYWNlKCRzLCAkdWNociwgJGkgLSAkdWxlbiwgJHVsZW4pOwogICAgICAgICAgICAgICAgICAgICAgICAkbGVuICs9ICRubGVuIC0gJHVsZW47CiAgICAgICAgICAgICAgICAgICAgICAgICRpICAgKz0gJG5sZW4gLSAkdWxlbjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChudWxsID09PSAkZW5jb2RpbmcpIHsKICAgICAgICAgICAgcmV0dXJuICRzOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGljb252KCdVVEYtOCcsICRlbmNvZGluZy4nLy9JR05PUkUnLCAkcyk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBtYl9pbnRlcm5hbF9lbmNvZGluZygkZW5jb2RpbmcgPSBudWxsKQogICAgewogICAgICAgIGlmIChudWxsID09PSAkZW5jb2RpbmcpIHsKICAgICAgICAgICAgcmV0dXJuIHNlbGY6OiRpbnRlcm5hbEVuY29kaW5nOwogICAgICAgIH0KCiAgICAgICAgJGVuY29kaW5nID0gc2VsZjo6Z2V0RW5jb2RpbmcoJGVuY29kaW5nKTsKCiAgICAgICAgaWYgKCdVVEYtOCcgPT09ICRlbmNvZGluZyB8fCBmYWxzZSAhPT0gQGljb252KCRlbmNvZGluZywgJGVuY29kaW5nLCAnICcpKSB7CiAgICAgICAgICAgIHNlbGY6OiRpbnRlcm5hbEVuY29kaW5nID0gJGVuY29kaW5nOwoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBtYl9sYW5ndWFnZSgkbGFuZyA9IG51bGwpCiAgICB7CiAgICAgICAgaWYgKG51bGwgPT09ICRsYW5nKSB7CiAgICAgICAgICAgIHJldHVybiBzZWxmOjokbGFuZ3VhZ2U7CiAgICAgICAgfQoKICAgICAgICBzd2l0Y2ggKCRsYW5nID0gc3RydG9sb3dlcigkbGFuZykpIHsKICAgICAgICAgICAgY2FzZSAndW5pJzoKICAgICAgICAgICAgY2FzZSAnbmV1dHJhbCc6CiAgICAgICAgICAgICAgICBzZWxmOjokbGFuZ3VhZ2UgPSAkbGFuZzsKCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG1iX2xpc3RfZW5jb2RpbmdzKCkKICAgIHsKICAgICAgICByZXR1cm4gYXJyYXkoJ1VURi04Jyk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBtYl9lbmNvZGluZ19hbGlhc2VzKCRlbmNvZGluZykKICAgIHsKICAgICAgICBzd2l0Y2ggKHN0cnRvdXBwZXIoJGVuY29kaW5nKSkgewogICAgICAgICAgICBjYXNlICdVVEY4JzoKICAgICAgICAgICAgY2FzZSAnVVRGLTgnOgogICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5KCd1dGY4Jyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBtYl9jaGVja19lbmNvZGluZygkdmFyID0gbnVsbCwgJGVuY29kaW5nID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAobnVsbCA9PT0gJGVuY29kaW5nKSB7CiAgICAgICAgICAgIGlmIChudWxsID09PSAkdmFyKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGVuY29kaW5nID0gc2VsZjo6JGludGVybmFsRW5jb2Rpbmc7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gc2VsZjo6bWJfZGV0ZWN0X2VuY29kaW5nKCR2YXIsIGFycmF5KCRlbmNvZGluZykpIHx8IGZhbHNlICE9PSBAaWNvbnYoJGVuY29kaW5nLCAkZW5jb2RpbmcsICR2YXIpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbWJfZGV0ZWN0X2VuY29kaW5nKCRzdHIsICRlbmNvZGluZ0xpc3QgPSBudWxsLCAkc3RyaWN0ID0gZmFsc2UpCiAgICB7CiAgICAgICAgaWYgKG51bGwgPT09ICRlbmNvZGluZ0xpc3QpIHsKICAgICAgICAgICAgJGVuY29kaW5nTGlzdCA9IHNlbGY6OiRlbmNvZGluZ0xpc3Q7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKCFcaXNfYXJyYXkoJGVuY29kaW5nTGlzdCkpIHsKICAgICAgICAgICAgICAgICRlbmNvZGluZ0xpc3QgPSBhcnJheV9tYXAoJ3RyaW0nLCBleHBsb2RlKCcsJywgJGVuY29kaW5nTGlzdCkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRlbmNvZGluZ0xpc3QgPSBhcnJheV9tYXAoJ3N0cnRvdXBwZXInLCAkZW5jb2RpbmdMaXN0KTsKICAgICAgICB9CgogICAgICAgIGZvcmVhY2ggKCRlbmNvZGluZ0xpc3QgYXMgJGVuYykgewogICAgICAgICAgICBzd2l0Y2ggKCRlbmMpIHsKICAgICAgICAgICAgICAgIGNhc2UgJ0FTQ0lJJzoKICAgICAgICAgICAgICAgICAgICBpZiAoIXByZWdfbWF0Y2goJy9bXHg4MC1ceEZGXS8nLCAkc3RyKSkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJGVuYzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2FzZSAnVVRGOCc6CiAgICAgICAgICAgICAgICBjYXNlICdVVEYtOCc6CiAgICAgICAgICAgICAgICAgICAgaWYgKHByZWdfbWF0Y2goJy8vdScsICRzdHIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnVVRGLTgnOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgIGlmICgwID09PSBzdHJuY21wKCRlbmMsICdJU08tODg1OS0nLCA5KSkgewogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJGVuYzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG1iX2RldGVjdF9vcmRlcigkZW5jb2RpbmdMaXN0ID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAobnVsbCA9PT0gJGVuY29kaW5nTGlzdCkgewogICAgICAgICAgICByZXR1cm4gc2VsZjo6JGVuY29kaW5nTGlzdDsKICAgICAgICB9CgogICAgICAgIGlmICghXGlzX2FycmF5KCRlbmNvZGluZ0xpc3QpKSB7CiAgICAgICAgICAgICRlbmNvZGluZ0xpc3QgPSBhcnJheV9tYXAoJ3RyaW0nLCBleHBsb2RlKCcsJywgJGVuY29kaW5nTGlzdCkpOwogICAgICAgIH0KICAgICAgICAkZW5jb2RpbmdMaXN0ID0gYXJyYXlfbWFwKCdzdHJ0b3VwcGVyJywgJGVuY29kaW5nTGlzdCk7CgogICAgICAgIGZvcmVhY2ggKCRlbmNvZGluZ0xpc3QgYXMgJGVuYykgewogICAgICAgICAgICBzd2l0Y2ggKCRlbmMpIHsKICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgaWYgKHN0cm5jbXAoJGVuYywgJ0lTTy04ODU5LScsIDkpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBjYXNlICdBU0NJSSc6CiAgICAgICAgICAgICAgICBjYXNlICdVVEY4JzoKICAgICAgICAgICAgICAgIGNhc2UgJ1VURi04JzoKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgc2VsZjo6JGVuY29kaW5nTGlzdCA9ICRlbmNvZGluZ0xpc3Q7CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbWJfc3RybGVuKCRzLCAkZW5jb2RpbmcgPSBudWxsKQogICAgewogICAgICAgICRlbmNvZGluZyA9IHNlbGY6OmdldEVuY29kaW5nKCRlbmNvZGluZyk7CiAgICAgICAgaWYgKCdDUDg1MCcgPT09ICRlbmNvZGluZyB8fCAnQVNDSUknID09PSAkZW5jb2RpbmcpIHsKICAgICAgICAgICAgcmV0dXJuIFxzdHJsZW4oJHMpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIEBpY29udl9zdHJsZW4oJHMsICRlbmNvZGluZyk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBtYl9zdHJwb3MoJGhheXN0YWNrLCAkbmVlZGxlLCAkb2Zmc2V0ID0gMCwgJGVuY29kaW5nID0gbnVsbCkKICAgIHsKICAgICAgICAkZW5jb2RpbmcgPSBzZWxmOjpnZXRFbmNvZGluZygkZW5jb2RpbmcpOwogICAgICAgIGlmICgnQ1A4NTAnID09PSAkZW5jb2RpbmcgfHwgJ0FTQ0lJJyA9PT0gJGVuY29kaW5nKSB7CiAgICAgICAgICAgIHJldHVybiBzdHJwb3MoJGhheXN0YWNrLCAkbmVlZGxlLCAkb2Zmc2V0KTsKICAgICAgICB9CgogICAgICAgICRuZWVkbGUgPSAoc3RyaW5nKSAkbmVlZGxlOwogICAgICAgIGlmICgnJyA9PT0gJG5lZWRsZSkgewogICAgICAgICAgICB0cmlnZ2VyX2Vycm9yKF9fTUVUSE9EX18uJzogRW1wdHkgZGVsaW1pdGVyJywgRV9VU0VSX1dBUk5JTkcpOwoKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGljb252X3N0cnBvcygkaGF5c3RhY2ssICRuZWVkbGUsICRvZmZzZXQsICRlbmNvZGluZyk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBtYl9zdHJycG9zKCRoYXlzdGFjaywgJG5lZWRsZSwgJG9mZnNldCA9IDAsICRlbmNvZGluZyA9IG51bGwpCiAgICB7CiAgICAgICAgJGVuY29kaW5nID0gc2VsZjo6Z2V0RW5jb2RpbmcoJGVuY29kaW5nKTsKICAgICAgICBpZiAoJ0NQODUwJyA9PT0gJGVuY29kaW5nIHx8ICdBU0NJSScgPT09ICRlbmNvZGluZykgewogICAgICAgICAgICByZXR1cm4gc3RycnBvcygkaGF5c3RhY2ssICRuZWVkbGUsICRvZmZzZXQpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRvZmZzZXQgIT0gKGludCkgJG9mZnNldCkgewogICAgICAgICAgICAkb2Zmc2V0ID0gMDsKICAgICAgICB9IGVsc2VpZiAoJG9mZnNldCA9IChpbnQpICRvZmZzZXQpIHsKICAgICAgICAgICAgaWYgKCRvZmZzZXQgPCAwKSB7CiAgICAgICAgICAgICAgICAkaGF5c3RhY2sgPSBzZWxmOjptYl9zdWJzdHIoJGhheXN0YWNrLCAwLCAkb2Zmc2V0LCAkZW5jb2RpbmcpOwogICAgICAgICAgICAgICAgJG9mZnNldCA9IDA7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkaGF5c3RhY2sgPSBzZWxmOjptYl9zdWJzdHIoJGhheXN0YWNrLCAkb2Zmc2V0LCAyMTQ3NDgzNjQ3LCAkZW5jb2RpbmcpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkcG9zID0gaWNvbnZfc3RycnBvcygkaGF5c3RhY2ssICRuZWVkbGUsICRlbmNvZGluZyk7CgogICAgICAgIHJldHVybiBmYWxzZSAhPT0gJHBvcyA/ICRvZmZzZXQgKyAkcG9zIDogZmFsc2U7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBtYl9zdHJ0b2xvd2VyKCRzLCAkZW5jb2RpbmcgPSBudWxsKQogICAgewogICAgICAgIHJldHVybiBzZWxmOjptYl9jb252ZXJ0X2Nhc2UoJHMsIE1CX0NBU0VfTE9XRVIsICRlbmNvZGluZyk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBtYl9zdHJ0b3VwcGVyKCRzLCAkZW5jb2RpbmcgPSBudWxsKQogICAgewogICAgICAgIHJldHVybiBzZWxmOjptYl9jb252ZXJ0X2Nhc2UoJHMsIE1CX0NBU0VfVVBQRVIsICRlbmNvZGluZyk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBtYl9zdWJzdGl0dXRlX2NoYXJhY3RlcigkYyA9IG51bGwpCiAgICB7CiAgICAgICAgaWYgKDAgPT09IHN0cmNhc2VjbXAoJGMsICdub25lJykpIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbnVsbCAhPT0gJGMgPyBmYWxzZSA6ICdub25lJzsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG1iX3N1YnN0cigkcywgJHN0YXJ0LCAkbGVuZ3RoID0gbnVsbCwgJGVuY29kaW5nID0gbnVsbCkKICAgIHsKICAgICAgICAkZW5jb2RpbmcgPSBzZWxmOjpnZXRFbmNvZGluZygkZW5jb2RpbmcpOwogICAgICAgIGlmICgnQ1A4NTAnID09PSAkZW5jb2RpbmcgfHwgJ0FTQ0lJJyA9PT0gJGVuY29kaW5nKSB7CiAgICAgICAgICAgIHJldHVybiBzdWJzdHIoJHMsICRzdGFydCwgbnVsbCA9PT0gJGxlbmd0aCA/IDIxNDc0ODM2NDcgOiAkbGVuZ3RoKTsKICAgICAgICB9CgogICAgICAgIGlmICgkc3RhcnQgPCAwKSB7CiAgICAgICAgICAgICRzdGFydCA9IGljb252X3N0cmxlbigkcywgJGVuY29kaW5nKSArICRzdGFydDsKICAgICAgICAgICAgaWYgKCRzdGFydCA8IDApIHsKICAgICAgICAgICAgICAgICRzdGFydCA9IDA7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChudWxsID09PSAkbGVuZ3RoKSB7CiAgICAgICAgICAgICRsZW5ndGggPSAyMTQ3NDgzNjQ3OwogICAgICAgIH0gZWxzZWlmICgkbGVuZ3RoIDwgMCkgewogICAgICAgICAgICAkbGVuZ3RoID0gaWNvbnZfc3RybGVuKCRzLCAkZW5jb2RpbmcpICsgJGxlbmd0aCAtICRzdGFydDsKICAgICAgICAgICAgaWYgKCRsZW5ndGggPCAwKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAoc3RyaW5nKSBpY29udl9zdWJzdHIoJHMsICRzdGFydCwgJGxlbmd0aCwgJGVuY29kaW5nKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG1iX3N0cmlwb3MoJGhheXN0YWNrLCAkbmVlZGxlLCAkb2Zmc2V0ID0gMCwgJGVuY29kaW5nID0gbnVsbCkKICAgIHsKICAgICAgICAkaGF5c3RhY2sgPSBzZWxmOjptYl9jb252ZXJ0X2Nhc2UoJGhheXN0YWNrLCBzZWxmOjpNQl9DQVNFX0ZPTEQsICRlbmNvZGluZyk7CiAgICAgICAgJG5lZWRsZSA9IHNlbGY6Om1iX2NvbnZlcnRfY2FzZSgkbmVlZGxlLCBzZWxmOjpNQl9DQVNFX0ZPTEQsICRlbmNvZGluZyk7CgogICAgICAgIHJldHVybiBzZWxmOjptYl9zdHJwb3MoJGhheXN0YWNrLCAkbmVlZGxlLCAkb2Zmc2V0LCAkZW5jb2RpbmcpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbWJfc3RyaXN0cigkaGF5c3RhY2ssICRuZWVkbGUsICRwYXJ0ID0gZmFsc2UsICRlbmNvZGluZyA9IG51bGwpCiAgICB7CiAgICAgICAgJHBvcyA9IHNlbGY6Om1iX3N0cmlwb3MoJGhheXN0YWNrLCAkbmVlZGxlLCAwLCAkZW5jb2RpbmcpOwoKICAgICAgICByZXR1cm4gc2VsZjo6Z2V0U3VicGFydCgkcG9zLCAkcGFydCwgJGhheXN0YWNrLCAkZW5jb2RpbmcpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbWJfc3RycmNocigkaGF5c3RhY2ssICRuZWVkbGUsICRwYXJ0ID0gZmFsc2UsICRlbmNvZGluZyA9IG51bGwpCiAgICB7CiAgICAgICAgJGVuY29kaW5nID0gc2VsZjo6Z2V0RW5jb2RpbmcoJGVuY29kaW5nKTsKICAgICAgICBpZiAoJ0NQODUwJyA9PT0gJGVuY29kaW5nIHx8ICdBU0NJSScgPT09ICRlbmNvZGluZykgewogICAgICAgICAgICByZXR1cm4gc3RycmNocigkaGF5c3RhY2ssICRuZWVkbGUsICRwYXJ0KTsKICAgICAgICB9CiAgICAgICAgJG5lZWRsZSA9IHNlbGY6Om1iX3N1YnN0cigkbmVlZGxlLCAwLCAxLCAkZW5jb2RpbmcpOwogICAgICAgICRwb3MgPSBpY29udl9zdHJycG9zKCRoYXlzdGFjaywgJG5lZWRsZSwgJGVuY29kaW5nKTsKCiAgICAgICAgcmV0dXJuIHNlbGY6OmdldFN1YnBhcnQoJHBvcywgJHBhcnQsICRoYXlzdGFjaywgJGVuY29kaW5nKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG1iX3N0cnJpY2hyKCRoYXlzdGFjaywgJG5lZWRsZSwgJHBhcnQgPSBmYWxzZSwgJGVuY29kaW5nID0gbnVsbCkKICAgIHsKICAgICAgICAkbmVlZGxlID0gc2VsZjo6bWJfc3Vic3RyKCRuZWVkbGUsIDAsIDEsICRlbmNvZGluZyk7CiAgICAgICAgJHBvcyA9IHNlbGY6Om1iX3N0cnJpcG9zKCRoYXlzdGFjaywgJG5lZWRsZSwgJGVuY29kaW5nKTsKCiAgICAgICAgcmV0dXJuIHNlbGY6OmdldFN1YnBhcnQoJHBvcywgJHBhcnQsICRoYXlzdGFjaywgJGVuY29kaW5nKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG1iX3N0cnJpcG9zKCRoYXlzdGFjaywgJG5lZWRsZSwgJG9mZnNldCA9IDAsICRlbmNvZGluZyA9IG51bGwpCiAgICB7CiAgICAgICAgJGhheXN0YWNrID0gc2VsZjo6bWJfY29udmVydF9jYXNlKCRoYXlzdGFjaywgc2VsZjo6TUJfQ0FTRV9GT0xELCAkZW5jb2RpbmcpOwogICAgICAgICRuZWVkbGUgPSBzZWxmOjptYl9jb252ZXJ0X2Nhc2UoJG5lZWRsZSwgc2VsZjo6TUJfQ0FTRV9GT0xELCAkZW5jb2RpbmcpOwoKICAgICAgICByZXR1cm4gc2VsZjo6bWJfc3RycnBvcygkaGF5c3RhY2ssICRuZWVkbGUsICRvZmZzZXQsICRlbmNvZGluZyk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBtYl9zdHJzdHIoJGhheXN0YWNrLCAkbmVlZGxlLCAkcGFydCA9IGZhbHNlLCAkZW5jb2RpbmcgPSBudWxsKQogICAgewogICAgICAgICRwb3MgPSBzdHJwb3MoJGhheXN0YWNrLCAkbmVlZGxlKTsKICAgICAgICBpZiAoZmFsc2UgPT09ICRwb3MpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBpZiAoJHBhcnQpIHsKICAgICAgICAgICAgcmV0dXJuIHN1YnN0cigkaGF5c3RhY2ssIDAsICRwb3MpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHN1YnN0cigkaGF5c3RhY2ssICRwb3MpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbWJfZ2V0X2luZm8oJHR5cGUgPSAnYWxsJykKICAgIHsKICAgICAgICAkaW5mbyA9IGFycmF5KAogICAgICAgICAgICAnaW50ZXJuYWxfZW5jb2RpbmcnID0+IHNlbGY6OiRpbnRlcm5hbEVuY29kaW5nLAogICAgICAgICAgICAnaHR0cF9vdXRwdXQnID0+ICdwYXNzJywKICAgICAgICAgICAgJ2h0dHBfb3V0cHV0X2NvbnZfbWltZXR5cGVzJyA9PiAnXih0ZXh0L3xhcHBsaWNhdGlvbi94aHRtbFwreG1sKScsCiAgICAgICAgICAgICdmdW5jX292ZXJsb2FkJyA9PiAwLAogICAgICAgICAgICAnZnVuY19vdmVybG9hZF9saXN0JyA9PiAnbm8gb3ZlcmxvYWQnLAogICAgICAgICAgICAnbWFpbF9jaGFyc2V0JyA9PiAnVVRGLTgnLAogICAgICAgICAgICAnbWFpbF9oZWFkZXJfZW5jb2RpbmcnID0+ICdCQVNFNjQnLAogICAgICAgICAgICAnbWFpbF9ib2R5X2VuY29kaW5nJyA9PiAnQkFTRTY0JywKICAgICAgICAgICAgJ2lsbGVnYWxfY2hhcnMnID0+IDAsCiAgICAgICAgICAgICdlbmNvZGluZ190cmFuc2xhdGlvbicgPT4gJ09mZicsCiAgICAgICAgICAgICdsYW5ndWFnZScgPT4gc2VsZjo6JGxhbmd1YWdlLAogICAgICAgICAgICAnZGV0ZWN0X29yZGVyJyA9PiBzZWxmOjokZW5jb2RpbmdMaXN0LAogICAgICAgICAgICAnc3Vic3RpdHV0ZV9jaGFyYWN0ZXInID0+ICdub25lJywKICAgICAgICAgICAgJ3N0cmljdF9kZXRlY3Rpb24nID0+ICdPZmYnLAogICAgICAgICk7CgogICAgICAgIGlmICgnYWxsJyA9PT0gJHR5cGUpIHsKICAgICAgICAgICAgcmV0dXJuICRpbmZvOwogICAgICAgIH0KICAgICAgICBpZiAoaXNzZXQoJGluZm9bJHR5cGVdKSkgewogICAgICAgICAgICByZXR1cm4gJGluZm9bJHR5cGVdOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbWJfaHR0cF9pbnB1dCgkdHlwZSA9ICcnKQogICAgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG1iX2h0dHBfb3V0cHV0KCRlbmNvZGluZyA9IG51bGwpCiAgICB7CiAgICAgICAgcmV0dXJuIG51bGwgIT09ICRlbmNvZGluZyA/ICdwYXNzJyA9PT0gJGVuY29kaW5nIDogJ3Bhc3MnOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbWJfc3Ryd2lkdGgoJHMsICRlbmNvZGluZyA9IG51bGwpCiAgICB7CiAgICAgICAgJGVuY29kaW5nID0gc2VsZjo6Z2V0RW5jb2RpbmcoJGVuY29kaW5nKTsKCiAgICAgICAgaWYgKCdVVEYtOCcgIT09ICRlbmNvZGluZykgewogICAgICAgICAgICAkcyA9IGljb252KCRlbmNvZGluZywgJ1VURi04Ly9JR05PUkUnLCAkcyk7CiAgICAgICAgfQoKICAgICAgICAkcyA9IHByZWdfcmVwbGFjZSgnL1tceHsxMTAwfS1ceHsxMTVGfVx4ezIzMjl9XHh7MjMyQX1ceHsyRTgwfS1ceHszMDNFfVx4ezMwNDB9LVx4e0E0Q0Z9XHh7QUMwMH0tXHh7RDdBM31ceHtGOTAwfS1ceHtGQUZGfVx4e0ZFMTB9LVx4e0ZFMTl9XHh7RkUzMH0tXHh7RkU2Rn1ceHtGRjAwfS1ceHtGRjYwfVx4e0ZGRTB9LVx4e0ZGRTZ9XHh7MjAwMDB9LVx4ezJGRkZEfVx4ezMwMDAwfS1ceHszRkZGRH1dL3UnLCAnJywgJHMsIC0xLCAkd2lkZSk7CgogICAgICAgIHJldHVybiAoJHdpZGUgPDwgMSkgKyBpY29udl9zdHJsZW4oJHMsICdVVEYtOCcpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbWJfc3Vic3RyX2NvdW50KCRoYXlzdGFjaywgJG5lZWRsZSwgJGVuY29kaW5nID0gbnVsbCkKICAgIHsKICAgICAgICByZXR1cm4gc3Vic3RyX2NvdW50KCRoYXlzdGFjaywgJG5lZWRsZSk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBtYl9vdXRwdXRfaGFuZGxlcigkY29udGVudHMsICRzdGF0dXMpCiAgICB7CiAgICAgICAgcmV0dXJuICRjb250ZW50czsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG1iX2NocigkY29kZSwgJGVuY29kaW5nID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAoMHg4MCA+ICRjb2RlICU9IDB4MjAwMDAwKSB7CiAgICAgICAgICAgICRzID0gXGNocigkY29kZSk7CiAgICAgICAgfSBlbHNlaWYgKDB4ODAwID4gJGNvZGUpIHsKICAgICAgICAgICAgJHMgPSBcY2hyKDB4QzAgfCAkY29kZSA+PiA2KS5cY2hyKDB4ODAgfCAkY29kZSAmIDB4M0YpOwogICAgICAgIH0gZWxzZWlmICgweDEwMDAwID4gJGNvZGUpIHsKICAgICAgICAgICAgJHMgPSBcY2hyKDB4RTAgfCAkY29kZSA+PiAxMikuXGNocigweDgwIHwgJGNvZGUgPj4gNiAmIDB4M0YpLlxjaHIoMHg4MCB8ICRjb2RlICYgMHgzRik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHMgPSBcY2hyKDB4RjAgfCAkY29kZSA+PiAxOCkuXGNocigweDgwIHwgJGNvZGUgPj4gMTIgJiAweDNGKS5cY2hyKDB4ODAgfCAkY29kZSA+PiA2ICYgMHgzRikuXGNocigweDgwIHwgJGNvZGUgJiAweDNGKTsKICAgICAgICB9CgogICAgICAgIGlmICgnVVRGLTgnICE9PSAkZW5jb2RpbmcgPSBzZWxmOjpnZXRFbmNvZGluZygkZW5jb2RpbmcpKSB7CiAgICAgICAgICAgICRzID0gbWJfY29udmVydF9lbmNvZGluZygkcywgJGVuY29kaW5nLCAnVVRGLTgnKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkczsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG1iX29yZCgkcywgJGVuY29kaW5nID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAoJ1VURi04JyAhPT0gJGVuY29kaW5nID0gc2VsZjo6Z2V0RW5jb2RpbmcoJGVuY29kaW5nKSkgewogICAgICAgICAgICAkcyA9IG1iX2NvbnZlcnRfZW5jb2RpbmcoJHMsICdVVEYtOCcsICRlbmNvZGluZyk7CiAgICAgICAgfQoKICAgICAgICAkY29kZSA9ICgkcyA9IHVucGFjaygnQyonLCBzdWJzdHIoJHMsIDAsIDQpKSkgPyAkc1sxXSA6IDA7CiAgICAgICAgaWYgKDB4RjAgPD0gJGNvZGUpIHsKICAgICAgICAgICAgcmV0dXJuICgoJGNvZGUgLSAweEYwKSA8PCAxOCkgKyAoKCRzWzJdIC0gMHg4MCkgPDwgMTIpICsgKCgkc1szXSAtIDB4ODApIDw8IDYpICsgJHNbNF0gLSAweDgwOwogICAgICAgIH0KICAgICAgICBpZiAoMHhFMCA8PSAkY29kZSkgewogICAgICAgICAgICByZXR1cm4gKCgkY29kZSAtIDB4RTApIDw8IDEyKSArICgoJHNbMl0gLSAweDgwKSA8PCA2KSArICRzWzNdIC0gMHg4MDsKICAgICAgICB9CiAgICAgICAgaWYgKDB4QzAgPD0gJGNvZGUpIHsKICAgICAgICAgICAgcmV0dXJuICgoJGNvZGUgLSAweEMwKSA8PCA2KSArICRzWzJdIC0gMHg4MDsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkY29kZTsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBnZXRTdWJwYXJ0KCRwb3MsICRwYXJ0LCAkaGF5c3RhY2ssICRlbmNvZGluZykKICAgIHsKICAgICAgICBpZiAoZmFsc2UgPT09ICRwb3MpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBpZiAoJHBhcnQpIHsKICAgICAgICAgICAgcmV0dXJuIHNlbGY6Om1iX3N1YnN0cigkaGF5c3RhY2ssIDAsICRwb3MsICRlbmNvZGluZyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gc2VsZjo6bWJfc3Vic3RyKCRoYXlzdGFjaywgJHBvcywgbnVsbCwgJGVuY29kaW5nKTsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBodG1sX2VuY29kaW5nX2NhbGxiYWNrKGFycmF5ICRtKQogICAgewogICAgICAgICRpID0gMTsKICAgICAgICAkZW50aXRpZXMgPSAnJzsKICAgICAgICAkbSA9IHVucGFjaygnQyonLCBodG1sZW50aXRpZXMoJG1bMF0sIEVOVF9DT01QQVQsICdVVEYtOCcpKTsKCiAgICAgICAgd2hpbGUgKGlzc2V0KCRtWyRpXSkpIHsKICAgICAgICAgICAgaWYgKDB4ODAgPiAkbVskaV0pIHsKICAgICAgICAgICAgICAgICRlbnRpdGllcyAuPSBcY2hyKCRtWyRpKytdKTsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgweEYwIDw9ICRtWyRpXSkgewogICAgICAgICAgICAgICAgJGMgPSAoKCRtWyRpKytdIC0gMHhGMCkgPDwgMTgpICsgKCgkbVskaSsrXSAtIDB4ODApIDw8IDEyKSArICgoJG1bJGkrK10gLSAweDgwKSA8PCA2KSArICRtWyRpKytdIC0gMHg4MDsKICAgICAgICAgICAgfSBlbHNlaWYgKDB4RTAgPD0gJG1bJGldKSB7CiAgICAgICAgICAgICAgICAkYyA9ICgoJG1bJGkrK10gLSAweEUwKSA8PCAxMikgKyAoKCRtWyRpKytdIC0gMHg4MCkgPDwgNikgKyAkbVskaSsrXSAtIDB4ODA7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkYyA9ICgoJG1bJGkrK10gLSAweEMwKSA8PCA2KSArICRtWyRpKytdIC0gMHg4MDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJGVudGl0aWVzIC49ICcmIycuJGMuJzsnOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRlbnRpdGllczsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiB0aXRsZV9jYXNlX2xvd2VyKGFycmF5ICRzKQogICAgewogICAgICAgIHJldHVybiBzZWxmOjptYl9jb252ZXJ0X2Nhc2UoJHNbMF0sIE1CX0NBU0VfTE9XRVIsICdVVEYtOCcpOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIHRpdGxlX2Nhc2VfdXBwZXIoYXJyYXkgJHMpCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6Om1iX2NvbnZlcnRfY2FzZSgkc1swXSwgTUJfQ0FTRV9VUFBFUiwgJ1VURi04Jyk7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZ2V0RGF0YSgkZmlsZSkKICAgIHsKICAgICAgICBpZiAoZmlsZV9leGlzdHMoJGZpbGUgPSBfX0RJUl9fLicvUmVzb3VyY2VzL3VuaWRhdGEvJy4kZmlsZS4nLnBocCcpKSB7CiAgICAgICAgICAgIHJldHVybiByZXF1aXJlICRmaWxlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGdldEVuY29kaW5nKCRlbmNvZGluZykKICAgIHsKICAgICAgICBpZiAobnVsbCA9PT0gJGVuY29kaW5nKSB7CiAgICAgICAgICAgIHJldHVybiBzZWxmOjokaW50ZXJuYWxFbmNvZGluZzsKICAgICAgICB9CgogICAgICAgICRlbmNvZGluZyA9IHN0cnRvdXBwZXIoJGVuY29kaW5nKTsKCiAgICAgICAgaWYgKCc4QklUJyA9PT0gJGVuY29kaW5nIHx8ICdCSU5BUlknID09PSAkZW5jb2RpbmcpIHsKICAgICAgICAgICAgcmV0dXJuICdDUDg1MCc7CiAgICAgICAgfQogICAgICAgIGlmICgnVVRGOCcgPT09ICRlbmNvZGluZykgewogICAgICAgICAgICByZXR1cm4gJ1VURi04JzsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkZW5jb2Rpbmc7CiAgICB9Cn0KAppDevTools/query/vendor/symfony/polyfill-mbstring/README.mdU3ltZm9ueSBQb2x5ZmlsbCAvIE1ic3RyaW5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PQoKVGhpcyBjb21wb25lbnQgcHJvdmlkZXMgYSBwYXJ0aWFsLCBuYXRpdmUgUEhQIGltcGxlbWVudGF0aW9uIGZvciB0aGUKW01ic3RyaW5nXShodHRwOi8vcGhwLm5ldC9tYnN0cmluZykgZXh0ZW5zaW9uLgoKTW9yZSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaW4gdGhlClttYWluIFBvbHlmaWxsIFJFQURNRV0oaHR0cHM6Ly9naXRodWIuY29tL3N5bWZvbnkvcG9seWZpbGwvYmxvYi9tYXN0ZXIvUkVBRE1FLm1kKS4KCkxpY2Vuc2UKPT09PT09PQoKVGhpcyBsaWJyYXJ5IGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBbTUlUIGxpY2Vuc2VdKExJQ0VOU0UpLgo=AppDevTools/query/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.phpPD9waHAKCnN0YXRpYyAkZGF0YSA9IGFycmF5ICgKICAnQScgPT4gJ2EnLAogICdCJyA9PiAnYicsCiAgJ0MnID0+ICdjJywKICAnRCcgPT4gJ2QnLAogICdFJyA9PiAnZScsCiAgJ0YnID0+ICdmJywKICAnRycgPT4gJ2cnLAogICdIJyA9PiAnaCcsCiAgJ0knID0+ICdpJywKICAnSicgPT4gJ2onLAogICdLJyA9PiAnaycsCiAgJ0wnID0+ICdsJywKICAnTScgPT4gJ20nLAogICdOJyA9PiAnbicsCiAgJ08nID0+ICdvJywKICAnUCcgPT4gJ3AnLAogICdRJyA9PiAncScsCiAgJ1InID0+ICdyJywKICAnUycgPT4gJ3MnLAogICdUJyA9PiAndCcsCiAgJ1UnID0+ICd1JywKICAnVicgPT4gJ3YnLAogICdXJyA9PiAndycsCiAgJ1gnID0+ICd4JywKICAnWScgPT4gJ3knLAogICdaJyA9PiAneicsCiAgJ8OAJyA9PiAnw6AnLAogICfDgScgPT4gJ8OhJywKICAnw4InID0+ICfDoicsCiAgJ8ODJyA9PiAnw6MnLAogICfDhCcgPT4gJ8OkJywKICAnw4UnID0+ICfDpScsCiAgJ8OGJyA9PiAnw6YnLAogICfDhycgPT4gJ8OnJywKICAnw4gnID0+ICfDqCcsCiAgJ8OJJyA9PiAnw6knLAogICfDiicgPT4gJ8OqJywKICAnw4snID0+ICfDqycsCiAgJ8OMJyA9PiAnw6wnLAogICfDjScgPT4gJ8OtJywKICAnw44nID0+ICfDricsCiAgJ8OPJyA9PiAnw68nLAogICfDkCcgPT4gJ8OwJywKICAnw5EnID0+ICfDsScsCiAgJ8OSJyA9PiAnw7InLAogICfDkycgPT4gJ8OzJywKICAnw5QnID0+ICfDtCcsCiAgJ8OVJyA9PiAnw7UnLAogICfDlicgPT4gJ8O2JywKICAnw5gnID0+ICfDuCcsCiAgJ8OZJyA9PiAnw7knLAogICfDmicgPT4gJ8O6JywKICAnw5snID0+ICfDuycsCiAgJ8OcJyA9PiAnw7wnLAogICfDnScgPT4gJ8O9JywKICAnw54nID0+ICfDvicsCiAgJ8SAJyA9PiAnxIEnLAogICfEgicgPT4gJ8SDJywKICAnxIQnID0+ICfEhScsCiAgJ8SGJyA9PiAnxIcnLAogICfEiCcgPT4gJ8SJJywKICAnxIonID0+ICfEiycsCiAgJ8SMJyA9PiAnxI0nLAogICfEjicgPT4gJ8SPJywKICAnxJAnID0+ICfEkScsCiAgJ8SSJyA9PiAnxJMnLAogICfElCcgPT4gJ8SVJywKICAnxJYnID0+ICfElycsCiAgJ8SYJyA9PiAnxJknLAogICfEmicgPT4gJ8SbJywKICAnxJwnID0+ICfEnScsCiAgJ8SeJyA9PiAnxJ8nLAogICfEoCcgPT4gJ8ShJywKICAnxKInID0+ICfEoycsCiAgJ8SkJyA9PiAnxKUnLAogICfEpicgPT4gJ8SnJywKICAnxKgnID0+ICfEqScsCiAgJ8SqJyA9PiAnxKsnLAogICfErCcgPT4gJ8StJywKICAnxK4nID0+ICfErycsCiAgJ8SwJyA9PiAnaScsCiAgJ8SyJyA9PiAnxLMnLAogICfEtCcgPT4gJ8S1JywKICAnxLYnID0+ICfEtycsCiAgJ8S5JyA9PiAnxLonLAogICfEuycgPT4gJ8S8JywKICAnxL0nID0+ICfEvicsCiAgJ8S/JyA9PiAnxYAnLAogICfFgScgPT4gJ8WCJywKICAnxYMnID0+ICfFhCcsCiAgJ8WFJyA9PiAnxYYnLAogICfFhycgPT4gJ8WIJywKICAnxYonID0+ICfFiycsCiAgJ8WMJyA9PiAnxY0nLAogICfFjicgPT4gJ8WPJywKICAnxZAnID0+ICfFkScsCiAgJ8WSJyA9PiAnxZMnLAogICfFlCcgPT4gJ8WVJywKICAnxZYnID0+ICfFlycsCiAgJ8WYJyA9PiAnxZknLAogICfFmicgPT4gJ8WbJywKICAnxZwnID0+ICfFnScsCiAgJ8WeJyA9PiAnxZ8nLAogICfFoCcgPT4gJ8WhJywKICAnxaInID0+ICfFoycsCiAgJ8WkJyA9PiAnxaUnLAogICfFpicgPT4gJ8WnJywKICAnxagnID0+ICfFqScsCiAgJ8WqJyA9PiAnxasnLAogICfFrCcgPT4gJ8WtJywKICAnxa4nID0+ICfFrycsCiAgJ8WwJyA9PiAnxbEnLAogICfFsicgPT4gJ8WzJywKICAnxbQnID0+ICfFtScsCiAgJ8W2JyA9PiAnxbcnLAogICfFuCcgPT4gJ8O/JywKICAnxbknID0+ICfFuicsCiAgJ8W7JyA9PiAnxbwnLAogICfFvScgPT4gJ8W+JywKICAnxoEnID0+ICfJkycsCiAgJ8aCJyA9PiAnxoMnLAogICfGhCcgPT4gJ8aFJywKICAnxoYnID0+ICfJlCcsCiAgJ8aHJyA9PiAnxognLAogICfGiScgPT4gJ8mWJywKICAnxoonID0+ICfJlycsCiAgJ8aLJyA9PiAnxownLAogICfGjicgPT4gJ8edJywKICAnxo8nID0+ICfJmScsCiAgJ8aQJyA9PiAnyZsnLAogICfGkScgPT4gJ8aSJywKICAnxpMnID0+ICfJoCcsCiAgJ8aUJyA9PiAnyaMnLAogICfGlicgPT4gJ8mpJywKICAnxpcnID0+ICfJqCcsCiAgJ8aYJyA9PiAnxpknLAogICfGnCcgPT4gJ8mvJywKICAnxp0nID0+ICfJsicsCiAgJ8afJyA9PiAnybUnLAogICfGoCcgPT4gJ8ahJywKICAnxqInID0+ICfGoycsCiAgJ8akJyA9PiAnxqUnLAogICfGpicgPT4gJ8qAJywKICAnxqcnID0+ICfGqCcsCiAgJ8apJyA9PiAnyoMnLAogICfGrCcgPT4gJ8atJywKICAnxq4nID0+ICfKiCcsCiAgJ8avJyA9PiAnxrAnLAogICfGsScgPT4gJ8qKJywKICAnxrInID0+ICfKiycsCiAgJ8azJyA9PiAnxrQnLAogICfGtScgPT4gJ8a2JywKICAnxrcnID0+ICfKkicsCiAgJ8a4JyA9PiAnxrknLAogICfGvCcgPT4gJ8a9JywKICAnx4QnID0+ICfHhicsCiAgJ8eFJyA9PiAnx4YnLAogICfHhycgPT4gJ8eJJywKICAnx4gnID0+ICfHiScsCiAgJ8eKJyA9PiAnx4wnLAogICfHiycgPT4gJ8eMJywKICAnx40nID0+ICfHjicsCiAgJ8ePJyA9PiAnx5AnLAogICfHkScgPT4gJ8eSJywKICAnx5MnID0+ICfHlCcsCiAgJ8eVJyA9PiAnx5YnLAogICfHlycgPT4gJ8eYJywKICAnx5knID0+ICfHmicsCiAgJ8ebJyA9PiAnx5wnLAogICfHnicgPT4gJ8efJywKICAnx6AnID0+ICfHoScsCiAgJ8eiJyA9PiAnx6MnLAogICfHpCcgPT4gJ8elJywKICAnx6YnID0+ICfHpycsCiAgJ8eoJyA9PiAnx6knLAogICfHqicgPT4gJ8erJywKICAnx6wnID0+ICfHrScsCiAgJ8euJyA9PiAnx68nLAogICfHsScgPT4gJ8ezJywKICAnx7InID0+ICfHsycsCiAgJ8e0JyA9PiAnx7UnLAogICfHticgPT4gJ8aVJywKICAnx7cnID0+ICfGvycsCiAgJ8e4JyA9PiAnx7knLAogICfHuicgPT4gJ8e7JywKICAnx7wnID0+ICfHvScsCiAgJ8e+JyA9PiAnx78nLAogICfIgCcgPT4gJ8iBJywKICAnyIInID0+ICfIgycsCiAgJ8iEJyA9PiAnyIUnLAogICfIhicgPT4gJ8iHJywKICAnyIgnID0+ICfIiScsCiAgJ8iKJyA9PiAnyIsnLAogICfIjCcgPT4gJ8iNJywKICAnyI4nID0+ICfIjycsCiAgJ8iQJyA9PiAnyJEnLAogICfIkicgPT4gJ8iTJywKICAnyJQnID0+ICfIlScsCiAgJ8iWJyA9PiAnyJcnLAogICfImCcgPT4gJ8iZJywKICAnyJonID0+ICfImycsCiAgJ8icJyA9PiAnyJ0nLAogICfInicgPT4gJ8ifJywKICAnyKAnID0+ICfGnicsCiAgJ8iiJyA9PiAnyKMnLAogICfIpCcgPT4gJ8ilJywKICAnyKYnID0+ICfIpycsCiAgJ8ioJyA9PiAnyKknLAogICfIqicgPT4gJ8irJywKICAnyKwnID0+ICfIrScsCiAgJ8iuJyA9PiAnyK8nLAogICfIsCcgPT4gJ8ixJywKICAnyLInID0+ICfIsycsCiAgJ8i6JyA9PiAn4rGlJywKICAnyLsnID0+ICfIvCcsCiAgJ8i9JyA9PiAnxponLAogICfIvicgPT4gJ+KxpicsCiAgJ8mBJyA9PiAnyYInLAogICfJgycgPT4gJ8aAJywKICAnyYQnID0+ICfKiScsCiAgJ8mFJyA9PiAnyownLAogICfJhicgPT4gJ8mHJywKICAnyYgnID0+ICfJiScsCiAgJ8mKJyA9PiAnyYsnLAogICfJjCcgPT4gJ8mNJywKICAnyY4nID0+ICfJjycsCiAgJ82wJyA9PiAnzbEnLAogICfNsicgPT4gJ82zJywKICAnzbYnID0+ICfNtycsCiAgJ82/JyA9PiAnz7MnLAogICfOhicgPT4gJ86sJywKICAnzognID0+ICfOrScsCiAgJ86JJyA9PiAnzq4nLAogICfOiicgPT4gJ86vJywKICAnzownID0+ICfPjCcsCiAgJ86OJyA9PiAnz40nLAogICfOjycgPT4gJ8+OJywKICAnzpEnID0+ICfOsScsCiAgJ86SJyA9PiAnzrInLAogICfOkycgPT4gJ86zJywKICAnzpQnID0+ICfOtCcsCiAgJ86VJyA9PiAnzrUnLAogICfOlicgPT4gJ862JywKICAnzpcnID0+ICfOtycsCiAgJ86YJyA9PiAnzrgnLAogICfOmScgPT4gJ865JywKICAnzponID0+ICfOuicsCiAgJ86bJyA9PiAnzrsnLAogICfOnCcgPT4gJ868JywKICAnzp0nID0+ICfOvScsCiAgJ86eJyA9PiAnzr4nLAogICfOnycgPT4gJ86/JywKICAnzqAnID0+ICfPgCcsCiAgJ86hJyA9PiAnz4EnLAogICfOoycgPT4gJ8+DJywKICAnzqQnID0+ICfPhCcsCiAgJ86lJyA9PiAnz4UnLAogICfOpicgPT4gJ8+GJywKICAnzqcnID0+ICfPhycsCiAgJ86oJyA9PiAnz4gnLAogICfOqScgPT4gJ8+JJywKICAnzqonID0+ICfPiicsCiAgJ86rJyA9PiAnz4snLAogICfPjycgPT4gJ8+XJywKICAnz5gnID0+ICfPmScsCiAgJ8+aJyA9PiAnz5snLAogICfPnCcgPT4gJ8+dJywKICAnz54nID0+ICfPnycsCiAgJ8+gJyA9PiAnz6EnLAogICfPoicgPT4gJ8+jJywKICAnz6QnID0+ICfPpScsCiAgJ8+mJyA9PiAnz6cnLAogICfPqCcgPT4gJ8+pJywKICAnz6onID0+ICfPqycsCiAgJ8+sJyA9PiAnz60nLAogICfPricgPT4gJ8+vJywKICAnz7QnID0+ICfOuCcsCiAgJ8+3JyA9PiAnz7gnLAogICfPuScgPT4gJ8+yJywKICAnz7onID0+ICfPuycsCiAgJ8+9JyA9PiAnzbsnLAogICfPvicgPT4gJ828JywKICAnz78nID0+ICfNvScsCiAgJ9CAJyA9PiAn0ZAnLAogICfQgScgPT4gJ9GRJywKICAn0IInID0+ICfRkicsCiAgJ9CDJyA9PiAn0ZMnLAogICfQhCcgPT4gJ9GUJywKICAn0IUnID0+ICfRlScsCiAgJ9CGJyA9PiAn0ZYnLAogICfQhycgPT4gJ9GXJywKICAn0IgnID0+ICfRmCcsCiAgJ9CJJyA9PiAn0ZknLAogICfQiicgPT4gJ9GaJywKICAn0IsnID0+ICfRmycsCiAgJ9CMJyA9PiAn0ZwnLAogICfQjScgPT4gJ9GdJywKICAn0I4nID0+ICfRnicsCiAgJ9CPJyA9PiAn0Z8nLAogICfQkCcgPT4gJ9CwJywKICAn0JEnID0+ICfQsScsCiAgJ9CSJyA9PiAn0LInLAogICfQkycgPT4gJ9CzJywKICAn0JQnID0+ICfQtCcsCiAgJ9CVJyA9PiAn0LUnLAogICfQlicgPT4gJ9C2JywKICAn0JcnID0+ICfQtycsCiAgJ9CYJyA9PiAn0LgnLAogICfQmScgPT4gJ9C5JywKICAn0JonID0+ICfQuicsCiAgJ9CbJyA9PiAn0LsnLAogICfQnCcgPT4gJ9C8JywKICAn0J0nID0+ICfQvScsCiAgJ9CeJyA9PiAn0L4nLAogICfQnycgPT4gJ9C/JywKICAn0KAnID0+ICfRgCcsCiAgJ9ChJyA9PiAn0YEnLAogICfQoicgPT4gJ9GCJywKICAn0KMnID0+ICfRgycsCiAgJ9CkJyA9PiAn0YQnLAogICfQpScgPT4gJ9GFJywKICAn0KYnID0+ICfRhicsCiAgJ9CnJyA9PiAn0YcnLAogICfQqCcgPT4gJ9GIJywKICAn0KknID0+ICfRiScsCiAgJ9CqJyA9PiAn0YonLAogICfQqycgPT4gJ9GLJywKICAn0KwnID0+ICfRjCcsCiAgJ9CtJyA9PiAn0Y0nLAogICfQricgPT4gJ9GOJywKICAn0K8nID0+ICfRjycsCiAgJ9GgJyA9PiAn0aEnLAogICfRoicgPT4gJ9GjJywKICAn0aQnID0+ICfRpScsCiAgJ9GmJyA9PiAn0acnLAogICfRqCcgPT4gJ9GpJywKICAn0aonID0+ICfRqycsCiAgJ9GsJyA9PiAn0a0nLAogICfRricgPT4gJ9GvJywKICAn0bAnID0+ICfRsScsCiAgJ9GyJyA9PiAn0bMnLAogICfRtCcgPT4gJ9G1JywKICAn0bYnID0+ICfRtycsCiAgJ9G4JyA9PiAn0bknLAogICfRuicgPT4gJ9G7JywKICAn0bwnID0+ICfRvScsCiAgJ9G+JyA9PiAn0b8nLAogICfSgCcgPT4gJ9KBJywKICAn0oonID0+ICfSiycsCiAgJ9KMJyA9PiAn0o0nLAogICfSjicgPT4gJ9KPJywKICAn0pAnID0+ICfSkScsCiAgJ9KSJyA9PiAn0pMnLAogICfSlCcgPT4gJ9KVJywKICAn0pYnID0+ICfSlycsCiAgJ9KYJyA9PiAn0pknLAogICfSmicgPT4gJ9KbJywKICAn0pwnID0+ICfSnScsCiAgJ9KeJyA9PiAn0p8nLAogICfSoCcgPT4gJ9KhJywKICAn0qInID0+ICfSoycsCiAgJ9KkJyA9PiAn0qUnLAogICfSpicgPT4gJ9KnJywKICAn0qgnID0+ICfSqScsCiAgJ9KqJyA9PiAn0qsnLAogICfSrCcgPT4gJ9KtJywKICAn0q4nID0+ICfSrycsCiAgJ9KwJyA9PiAn0rEnLAogICfSsicgPT4gJ9KzJywKICAn0rQnID0+ICfStScsCiAgJ9K2JyA9PiAn0rcnLAogICfSuCcgPT4gJ9K5JywKICAn0ronID0+ICfSuycsCiAgJ9K8JyA9PiAn0r0nLAogICfSvicgPT4gJ9K/JywKICAn04AnID0+ICfTjycsCiAgJ9OBJyA9PiAn04InLAogICfTgycgPT4gJ9OEJywKICAn04UnID0+ICfThicsCiAgJ9OHJyA9PiAn04gnLAogICfTiScgPT4gJ9OKJywKICAn04snID0+ICfTjCcsCiAgJ9ONJyA9PiAn044nLAogICfTkCcgPT4gJ9ORJywKICAn05InID0+ICfTkycsCiAgJ9OUJyA9PiAn05UnLAogICfTlicgPT4gJ9OXJywKICAn05gnID0+ICfTmScsCiAgJ9OaJyA9PiAn05snLAogICfTnCcgPT4gJ9OdJywKICAn054nID0+ICfTnycsCiAgJ9OgJyA9PiAn06EnLAogICfToicgPT4gJ9OjJywKICAn06QnID0+ICfTpScsCiAgJ9OmJyA9PiAn06cnLAogICfTqCcgPT4gJ9OpJywKICAn06onID0+ICfTqycsCiAgJ9OsJyA9PiAn060nLAogICfTricgPT4gJ9OvJywKICAn07AnID0+ICfTsScsCiAgJ9OyJyA9PiAn07MnLAogICfTtCcgPT4gJ9O1JywKICAn07YnID0+ICfTtycsCiAgJ9O4JyA9PiAn07knLAogICfTuicgPT4gJ9O7JywKICAn07wnID0+ICfTvScsCiAgJ9O+JyA9PiAn078nLAogICfUgCcgPT4gJ9SBJywKICAn1IInID0+ICfUgycsCiAgJ9SEJyA9PiAn1IUnLAogICfUhicgPT4gJ9SHJywKICAn1IgnID0+ICfUiScsCiAgJ9SKJyA9PiAn1IsnLAogICfUjCcgPT4gJ9SNJywKICAn1I4nID0+ICfUjycsCiAgJ9SQJyA9PiAn1JEnLAogICfUkicgPT4gJ9STJywKICAn1JQnID0+ICfUlScsCiAgJ9SWJyA9PiAn1JcnLAogICfUmCcgPT4gJ9SZJywKICAn1JonID0+ICfUmycsCiAgJ9ScJyA9PiAn1J0nLAogICfUnicgPT4gJ9SfJywKICAn1KAnID0+ICfUoScsCiAgJ9SiJyA9PiAn1KMnLAogICfUpCcgPT4gJ9SlJywKICAn1KYnID0+ICfUpycsCiAgJ9SoJyA9PiAn1KknLAogICfUqicgPT4gJ9SrJywKICAn1KwnID0+ICfUrScsCiAgJ9SuJyA9PiAn1K8nLAogICfUsScgPT4gJ9WhJywKICAn1LInID0+ICfVoicsCiAgJ9SzJyA9PiAn1aMnLAogICfUtCcgPT4gJ9WkJywKICAn1LUnID0+ICfVpScsCiAgJ9S2JyA9PiAn1aYnLAogICfUtycgPT4gJ9WnJywKICAn1LgnID0+ICfVqCcsCiAgJ9S5JyA9PiAn1aknLAogICfUuicgPT4gJ9WqJywKICAn1LsnID0+ICfVqycsCiAgJ9S8JyA9PiAn1awnLAogICfUvScgPT4gJ9WtJywKICAn1L4nID0+ICfVricsCiAgJ9S/JyA9PiAn1a8nLAogICfVgCcgPT4gJ9WwJywKICAn1YEnID0+ICfVsScsCiAgJ9WCJyA9PiAn1bInLAogICfVgycgPT4gJ9WzJywKICAn1YQnID0+ICfVtCcsCiAgJ9WFJyA9PiAn1bUnLAogICfVhicgPT4gJ9W2JywKICAn1YcnID0+ICfVtycsCiAgJ9WIJyA9PiAn1bgnLAogICfViScgPT4gJ9W5JywKICAn1YonID0+ICfVuicsCiAgJ9WLJyA9PiAn1bsnLAogICfVjCcgPT4gJ9W8JywKICAn1Y0nID0+ICfVvScsCiAgJ9WOJyA9PiAn1b4nLAogICfVjycgPT4gJ9W/JywKICAn1ZAnID0+ICfWgCcsCiAgJ9WRJyA9PiAn1oEnLAogICfVkicgPT4gJ9aCJywKICAn1ZMnID0+ICfWgycsCiAgJ9WUJyA9PiAn1oQnLAogICfVlScgPT4gJ9aFJywKICAn1ZYnID0+ICfWhicsCiAgJ+GCoCcgPT4gJ+K0gCcsCiAgJ+GCoScgPT4gJ+K0gScsCiAgJ+GCoicgPT4gJ+K0gicsCiAgJ+GCoycgPT4gJ+K0gycsCiAgJ+GCpCcgPT4gJ+K0hCcsCiAgJ+GCpScgPT4gJ+K0hScsCiAgJ+GCpicgPT4gJ+K0hicsCiAgJ+GCpycgPT4gJ+K0hycsCiAgJ+GCqCcgPT4gJ+K0iCcsCiAgJ+GCqScgPT4gJ+K0iScsCiAgJ+GCqicgPT4gJ+K0iicsCiAgJ+GCqycgPT4gJ+K0iycsCiAgJ+GCrCcgPT4gJ+K0jCcsCiAgJ+GCrScgPT4gJ+K0jScsCiAgJ+GCricgPT4gJ+K0jicsCiAgJ+GCrycgPT4gJ+K0jycsCiAgJ+GCsCcgPT4gJ+K0kCcsCiAgJ+GCsScgPT4gJ+K0kScsCiAgJ+GCsicgPT4gJ+K0kicsCiAgJ+GCsycgPT4gJ+K0kycsCiAgJ+GCtCcgPT4gJ+K0lCcsCiAgJ+GCtScgPT4gJ+K0lScsCiAgJ+GCticgPT4gJ+K0licsCiAgJ+GCtycgPT4gJ+K0lycsCiAgJ+GCuCcgPT4gJ+K0mCcsCiAgJ+GCuScgPT4gJ+K0mScsCiAgJ+GCuicgPT4gJ+K0micsCiAgJ+GCuycgPT4gJ+K0mycsCiAgJ+GCvCcgPT4gJ+K0nCcsCiAgJ+GCvScgPT4gJ+K0nScsCiAgJ+GCvicgPT4gJ+K0nicsCiAgJ+GCvycgPT4gJ+K0nycsCiAgJ+GDgCcgPT4gJ+K0oCcsCiAgJ+GDgScgPT4gJ+K0oScsCiAgJ+GDgicgPT4gJ+K0oicsCiAgJ+GDgycgPT4gJ+K0oycsCiAgJ+GDhCcgPT4gJ+K0pCcsCiAgJ+GDhScgPT4gJ+K0pScsCiAgJ+GDhycgPT4gJ+K0pycsCiAgJ+GDjScgPT4gJ+K0rScsCiAgJ+G4gCcgPT4gJ+G4gScsCiAgJ+G4gicgPT4gJ+G4gycsCiAgJ+G4hCcgPT4gJ+G4hScsCiAgJ+G4hicgPT4gJ+G4hycsCiAgJ+G4iCcgPT4gJ+G4iScsCiAgJ+G4iicgPT4gJ+G4iycsCiAgJ+G4jCcgPT4gJ+G4jScsCiAgJ+G4jicgPT4gJ+G4jycsCiAgJ+G4kCcgPT4gJ+G4kScsCiAgJ+G4kicgPT4gJ+G4kycsCiAgJ+G4lCcgPT4gJ+G4lScsCiAgJ+G4licgPT4gJ+G4lycsCiAgJ+G4mCcgPT4gJ+G4mScsCiAgJ+G4micgPT4gJ+G4mycsCiAgJ+G4nCcgPT4gJ+G4nScsCiAgJ+G4nicgPT4gJ+G4nycsCiAgJ+G4oCcgPT4gJ+G4oScsCiAgJ+G4oicgPT4gJ+G4oycsCiAgJ+G4pCcgPT4gJ+G4pScsCiAgJ+G4picgPT4gJ+G4pycsCiAgJ+G4qCcgPT4gJ+G4qScsCiAgJ+G4qicgPT4gJ+G4qycsCiAgJ+G4rCcgPT4gJ+G4rScsCiAgJ+G4ricgPT4gJ+G4rycsCiAgJ+G4sCcgPT4gJ+G4sScsCiAgJ+G4sicgPT4gJ+G4sycsCiAgJ+G4tCcgPT4gJ+G4tScsCiAgJ+G4ticgPT4gJ+G4tycsCiAgJ+G4uCcgPT4gJ+G4uScsCiAgJ+G4uicgPT4gJ+G4uycsCiAgJ+G4vCcgPT4gJ+G4vScsCiAgJ+G4vicgPT4gJ+G4vycsCiAgJ+G5gCcgPT4gJ+G5gScsCiAgJ+G5gicgPT4gJ+G5gycsCiAgJ+G5hCcgPT4gJ+G5hScsCiAgJ+G5hicgPT4gJ+G5hycsCiAgJ+G5iCcgPT4gJ+G5iScsCiAgJ+G5iicgPT4gJ+G5iycsCiAgJ+G5jCcgPT4gJ+G5jScsCiAgJ+G5jicgPT4gJ+G5jycsCiAgJ+G5kCcgPT4gJ+G5kScsCiAgJ+G5kicgPT4gJ+G5kycsCiAgJ+G5lCcgPT4gJ+G5lScsCiAgJ+G5licgPT4gJ+G5lycsCiAgJ+G5mCcgPT4gJ+G5mScsCiAgJ+G5micgPT4gJ+G5mycsCiAgJ+G5nCcgPT4gJ+G5nScsCiAgJ+G5nicgPT4gJ+G5nycsCiAgJ+G5oCcgPT4gJ+G5oScsCiAgJ+G5oicgPT4gJ+G5oycsCiAgJ+G5pCcgPT4gJ+G5pScsCiAgJ+G5picgPT4gJ+G5pycsCiAgJ+G5qCcgPT4gJ+G5qScsCiAgJ+G5qicgPT4gJ+G5qycsCiAgJ+G5rCcgPT4gJ+G5rScsCiAgJ+G5ricgPT4gJ+G5rycsCiAgJ+G5sCcgPT4gJ+G5sScsCiAgJ+G5sicgPT4gJ+G5sycsCiAgJ+G5tCcgPT4gJ+G5tScsCiAgJ+G5ticgPT4gJ+G5tycsCiAgJ+G5uCcgPT4gJ+G5uScsCiAgJ+G5uicgPT4gJ+G5uycsCiAgJ+G5vCcgPT4gJ+G5vScsCiAgJ+G5vicgPT4gJ+G5vycsCiAgJ+G6gCcgPT4gJ+G6gScsCiAgJ+G6gicgPT4gJ+G6gycsCiAgJ+G6hCcgPT4gJ+G6hScsCiAgJ+G6hicgPT4gJ+G6hycsCiAgJ+G6iCcgPT4gJ+G6iScsCiAgJ+G6iicgPT4gJ+G6iycsCiAgJ+G6jCcgPT4gJ+G6jScsCiAgJ+G6jicgPT4gJ+G6jycsCiAgJ+G6kCcgPT4gJ+G6kScsCiAgJ+G6kicgPT4gJ+G6kycsCiAgJ+G6lCcgPT4gJ+G6lScsCiAgJ+G6nicgPT4gJ8OfJywKICAn4bqgJyA9PiAn4bqhJywKICAn4bqiJyA9PiAn4bqjJywKICAn4bqkJyA9PiAn4bqlJywKICAn4bqmJyA9PiAn4bqnJywKICAn4bqoJyA9PiAn4bqpJywKICAn4bqqJyA9PiAn4bqrJywKICAn4bqsJyA9PiAn4bqtJywKICAn4bquJyA9PiAn4bqvJywKICAn4bqwJyA9PiAn4bqxJywKICAn4bqyJyA9PiAn4bqzJywKICAn4bq0JyA9PiAn4bq1JywKICAn4bq2JyA9PiAn4bq3JywKICAn4bq4JyA9PiAn4bq5JywKICAn4bq6JyA9PiAn4bq7JywKICAn4bq8JyA9PiAn4bq9JywKICAn4bq+JyA9PiAn4bq/JywKICAn4buAJyA9PiAn4buBJywKICAn4buCJyA9PiAn4buDJywKICAn4buEJyA9PiAn4buFJywKICAn4buGJyA9PiAn4buHJywKICAn4buIJyA9PiAn4buJJywKICAn4buKJyA9PiAn4buLJywKICAn4buMJyA9PiAn4buNJywKICAn4buOJyA9PiAn4buPJywKICAn4buQJyA9PiAn4buRJywKICAn4buSJyA9PiAn4buTJywKICAn4buUJyA9PiAn4buVJywKICAn4buWJyA9PiAn4buXJywKICAn4buYJyA9PiAn4buZJywKICAn4buaJyA9PiAn4bubJywKICAn4bucJyA9PiAn4budJywKICAn4bueJyA9PiAn4bufJywKICAn4bugJyA9PiAn4buhJywKICAn4buiJyA9PiAn4bujJywKICAn4bukJyA9PiAn4bulJywKICAn4bumJyA9PiAn4bunJywKICAn4buoJyA9PiAn4bupJywKICAn4buqJyA9PiAn4burJywKICAn4busJyA9PiAn4butJywKICAn4buuJyA9PiAn4buvJywKICAn4buwJyA9PiAn4buxJywKICAn4buyJyA9PiAn4buzJywKICAn4bu0JyA9PiAn4bu1JywKICAn4bu2JyA9PiAn4bu3JywKICAn4bu4JyA9PiAn4bu5JywKICAn4bu6JyA9PiAn4bu7JywKICAn4bu8JyA9PiAn4bu9JywKICAn4bu+JyA9PiAn4bu/JywKICAn4byIJyA9PiAn4byAJywKICAn4byJJyA9PiAn4byBJywKICAn4byKJyA9PiAn4byCJywKICAn4byLJyA9PiAn4byDJywKICAn4byMJyA9PiAn4byEJywKICAn4byNJyA9PiAn4byFJywKICAn4byOJyA9PiAn4byGJywKICAn4byPJyA9PiAn4byHJywKICAn4byYJyA9PiAn4byQJywKICAn4byZJyA9PiAn4byRJywKICAn4byaJyA9PiAn4bySJywKICAn4bybJyA9PiAn4byTJywKICAn4bycJyA9PiAn4byUJywKICAn4bydJyA9PiAn4byVJywKICAn4byoJyA9PiAn4bygJywKICAn4bypJyA9PiAn4byhJywKICAn4byqJyA9PiAn4byiJywKICAn4byrJyA9PiAn4byjJywKICAn4bysJyA9PiAn4bykJywKICAn4bytJyA9PiAn4bylJywKICAn4byuJyA9PiAn4bymJywKICAn4byvJyA9PiAn4bynJywKICAn4by4JyA9PiAn4bywJywKICAn4by5JyA9PiAn4byxJywKICAn4by6JyA9PiAn4byyJywKICAn4by7JyA9PiAn4byzJywKICAn4by8JyA9PiAn4by0JywKICAn4by9JyA9PiAn4by1JywKICAn4by+JyA9PiAn4by2JywKICAn4by/JyA9PiAn4by3JywKICAn4b2IJyA9PiAn4b2AJywKICAn4b2JJyA9PiAn4b2BJywKICAn4b2KJyA9PiAn4b2CJywKICAn4b2LJyA9PiAn4b2DJywKICAn4b2MJyA9PiAn4b2EJywKICAn4b2NJyA9PiAn4b2FJywKICAn4b2ZJyA9PiAn4b2RJywKICAn4b2bJyA9PiAn4b2TJywKICAn4b2dJyA9PiAn4b2VJywKICAn4b2fJyA9PiAn4b2XJywKICAn4b2oJyA9PiAn4b2gJywKICAn4b2pJyA9PiAn4b2hJywKICAn4b2qJyA9PiAn4b2iJywKICAn4b2rJyA9PiAn4b2jJywKICAn4b2sJyA9PiAn4b2kJywKICAn4b2tJyA9PiAn4b2lJywKICAn4b2uJyA9PiAn4b2mJywKICAn4b2vJyA9PiAn4b2nJywKICAn4b6IJyA9PiAn4b6AJywKICAn4b6JJyA9PiAn4b6BJywKICAn4b6KJyA9PiAn4b6CJywKICAn4b6LJyA9PiAn4b6DJywKICAn4b6MJyA9PiAn4b6EJywKICAn4b6NJyA9PiAn4b6FJywKICAn4b6OJyA9PiAn4b6GJywKICAn4b6PJyA9PiAn4b6HJywKICAn4b6YJyA9PiAn4b6QJywKICAn4b6ZJyA9PiAn4b6RJywKICAn4b6aJyA9PiAn4b6SJywKICAn4b6bJyA9PiAn4b6TJywKICAn4b6cJyA9PiAn4b6UJywKICAn4b6dJyA9PiAn4b6VJywKICAn4b6eJyA9PiAn4b6WJywKICAn4b6fJyA9PiAn4b6XJywKICAn4b6oJyA9PiAn4b6gJywKICAn4b6pJyA9PiAn4b6hJywKICAn4b6qJyA9PiAn4b6iJywKICAn4b6rJyA9PiAn4b6jJywKICAn4b6sJyA9PiAn4b6kJywKICAn4b6tJyA9PiAn4b6lJywKICAn4b6uJyA9PiAn4b6mJywKICAn4b6vJyA9PiAn4b6nJywKICAn4b64JyA9PiAn4b6wJywKICAn4b65JyA9PiAn4b6xJywKICAn4b66JyA9PiAn4b2wJywKICAn4b67JyA9PiAn4b2xJywKICAn4b68JyA9PiAn4b6zJywKICAn4b+IJyA9PiAn4b2yJywKICAn4b+JJyA9PiAn4b2zJywKICAn4b+KJyA9PiAn4b20JywKICAn4b+LJyA9PiAn4b21JywKICAn4b+MJyA9PiAn4b+DJywKICAn4b+YJyA9PiAn4b+QJywKICAn4b+ZJyA9PiAn4b+RJywKICAn4b+aJyA9PiAn4b22JywKICAn4b+bJyA9PiAn4b23JywKICAn4b+oJyA9PiAn4b+gJywKICAn4b+pJyA9PiAn4b+hJywKICAn4b+qJyA9PiAn4b26JywKICAn4b+rJyA9PiAn4b27JywKICAn4b+sJyA9PiAn4b+lJywKICAn4b+4JyA9PiAn4b24JywKICAn4b+5JyA9PiAn4b25JywKICAn4b+6JyA9PiAn4b28JywKICAn4b+7JyA9PiAn4b29JywKICAn4b+8JyA9PiAn4b+zJywKICAn4oSmJyA9PiAnz4knLAogICfihKonID0+ICdrJywKICAn4oSrJyA9PiAnw6UnLAogICfihLInID0+ICfihY4nLAogICfihaAnID0+ICfihbAnLAogICfihaEnID0+ICfihbEnLAogICfihaInID0+ICfihbInLAogICfihaMnID0+ICfihbMnLAogICfihaQnID0+ICfihbQnLAogICfihaUnID0+ICfihbUnLAogICfihaYnID0+ICfihbYnLAogICfihacnID0+ICfihbcnLAogICfihagnID0+ICfihbgnLAogICfihaknID0+ICfihbknLAogICfihaonID0+ICfihbonLAogICfihasnID0+ICfihbsnLAogICfihawnID0+ICfihbwnLAogICfiha0nID0+ICfihb0nLAogICfiha4nID0+ICfihb4nLAogICfiha8nID0+ICfihb8nLAogICfihoMnID0+ICfihoQnLAogICfikrYnID0+ICfik5AnLAogICfikrcnID0+ICfik5EnLAogICfikrgnID0+ICfik5InLAogICfikrknID0+ICfik5MnLAogICfikronID0+ICfik5QnLAogICfikrsnID0+ICfik5UnLAogICfikrwnID0+ICfik5YnLAogICfikr0nID0+ICfik5cnLAogICfikr4nID0+ICfik5gnLAogICfikr8nID0+ICfik5knLAogICfik4AnID0+ICfik5onLAogICfik4EnID0+ICfik5snLAogICfik4InID0+ICfik5wnLAogICfik4MnID0+ICfik50nLAogICfik4QnID0+ICfik54nLAogICfik4UnID0+ICfik58nLAogICfik4YnID0+ICfik6AnLAogICfik4cnID0+ICfik6EnLAogICfik4gnID0+ICfik6InLAogICfik4knID0+ICfik6MnLAogICfik4onID0+ICfik6QnLAogICfik4snID0+ICfik6UnLAogICfik4wnID0+ICfik6YnLAogICfik40nID0+ICfik6cnLAogICfik44nID0+ICfik6gnLAogICfik48nID0+ICfik6knLAogICfisIAnID0+ICfisLAnLAogICfisIEnID0+ICfisLEnLAogICfisIInID0+ICfisLInLAogICfisIMnID0+ICfisLMnLAogICfisIQnID0+ICfisLQnLAogICfisIUnID0+ICfisLUnLAogICfisIYnID0+ICfisLYnLAogICfisIcnID0+ICfisLcnLAogICfisIgnID0+ICfisLgnLAogICfisIknID0+ICfisLknLAogICfisIonID0+ICfisLonLAogICfisIsnID0+ICfisLsnLAogICfisIwnID0+ICfisLwnLAogICfisI0nID0+ICfisL0nLAogICfisI4nID0+ICfisL4nLAogICfisI8nID0+ICfisL8nLAogICfisJAnID0+ICfisYAnLAogICfisJEnID0+ICfisYEnLAogICfisJInID0+ICfisYInLAogICfisJMnID0+ICfisYMnLAogICfisJQnID0+ICfisYQnLAogICfisJUnID0+ICfisYUnLAogICfisJYnID0+ICfisYYnLAogICfisJcnID0+ICfisYcnLAogICfisJgnID0+ICfisYgnLAogICfisJknID0+ICfisYknLAogICfisJonID0+ICfisYonLAogICfisJsnID0+ICfisYsnLAogICfisJwnID0+ICfisYwnLAogICfisJ0nID0+ICfisY0nLAogICfisJ4nID0+ICfisY4nLAogICfisJ8nID0+ICfisY8nLAogICfisKAnID0+ICfisZAnLAogICfisKEnID0+ICfisZEnLAogICfisKInID0+ICfisZInLAogICfisKMnID0+ICfisZMnLAogICfisKQnID0+ICfisZQnLAogICfisKUnID0+ICfisZUnLAogICfisKYnID0+ICfisZYnLAogICfisKcnID0+ICfisZcnLAogICfisKgnID0+ICfisZgnLAogICfisKknID0+ICfisZknLAogICfisKonID0+ICfisZonLAogICfisKsnID0+ICfisZsnLAogICfisKwnID0+ICfisZwnLAogICfisK0nID0+ICfisZ0nLAogICfisK4nID0+ICfisZ4nLAogICfisaAnID0+ICfisaEnLAogICfisaInID0+ICfJqycsCiAgJ+KxoycgPT4gJ+G1vScsCiAgJ+KxpCcgPT4gJ8m9JywKICAn4rGnJyA9PiAn4rGoJywKICAn4rGpJyA9PiAn4rGqJywKICAn4rGrJyA9PiAn4rGsJywKICAn4rGtJyA9PiAnyZEnLAogICfisa4nID0+ICfJsScsCiAgJ+KxrycgPT4gJ8mQJywKICAn4rGwJyA9PiAnyZInLAogICfisbInID0+ICfisbMnLAogICfisbUnID0+ICfisbYnLAogICfisb4nID0+ICfIvycsCiAgJ+KxvycgPT4gJ8mAJywKICAn4rKAJyA9PiAn4rKBJywKICAn4rKCJyA9PiAn4rKDJywKICAn4rKEJyA9PiAn4rKFJywKICAn4rKGJyA9PiAn4rKHJywKICAn4rKIJyA9PiAn4rKJJywKICAn4rKKJyA9PiAn4rKLJywKICAn4rKMJyA9PiAn4rKNJywKICAn4rKOJyA9PiAn4rKPJywKICAn4rKQJyA9PiAn4rKRJywKICAn4rKSJyA9PiAn4rKTJywKICAn4rKUJyA9PiAn4rKVJywKICAn4rKWJyA9PiAn4rKXJywKICAn4rKYJyA9PiAn4rKZJywKICAn4rKaJyA9PiAn4rKbJywKICAn4rKcJyA9PiAn4rKdJywKICAn4rKeJyA9PiAn4rKfJywKICAn4rKgJyA9PiAn4rKhJywKICAn4rKiJyA9PiAn4rKjJywKICAn4rKkJyA9PiAn4rKlJywKICAn4rKmJyA9PiAn4rKnJywKICAn4rKoJyA9PiAn4rKpJywKICAn4rKqJyA9PiAn4rKrJywKICAn4rKsJyA9PiAn4rKtJywKICAn4rKuJyA9PiAn4rKvJywKICAn4rKwJyA9PiAn4rKxJywKICAn4rKyJyA9PiAn4rKzJywKICAn4rK0JyA9PiAn4rK1JywKICAn4rK2JyA9PiAn4rK3JywKICAn4rK4JyA9PiAn4rK5JywKICAn4rK6JyA9PiAn4rK7JywKICAn4rK8JyA9PiAn4rK9JywKICAn4rK+JyA9PiAn4rK/JywKICAn4rOAJyA9PiAn4rOBJywKICAn4rOCJyA9PiAn4rODJywKICAn4rOEJyA9PiAn4rOFJywKICAn4rOGJyA9PiAn4rOHJywKICAn4rOIJyA9PiAn4rOJJywKICAn4rOKJyA9PiAn4rOLJywKICAn4rOMJyA9PiAn4rONJywKICAn4rOOJyA9PiAn4rOPJywKICAn4rOQJyA9PiAn4rORJywKICAn4rOSJyA9PiAn4rOTJywKICAn4rOUJyA9PiAn4rOVJywKICAn4rOWJyA9PiAn4rOXJywKICAn4rOYJyA9PiAn4rOZJywKICAn4rOaJyA9PiAn4rObJywKICAn4rOcJyA9PiAn4rOdJywKICAn4rOeJyA9PiAn4rOfJywKICAn4rOgJyA9PiAn4rOhJywKICAn4rOiJyA9PiAn4rOjJywKICAn4rOrJyA9PiAn4rOsJywKICAn4rOtJyA9PiAn4rOuJywKICAn4rOyJyA9PiAn4rOzJywKICAn6pmAJyA9PiAn6pmBJywKICAn6pmCJyA9PiAn6pmDJywKICAn6pmEJyA9PiAn6pmFJywKICAn6pmGJyA9PiAn6pmHJywKICAn6pmIJyA9PiAn6pmJJywKICAn6pmKJyA9PiAn6pmLJywKICAn6pmMJyA9PiAn6pmNJywKICAn6pmOJyA9PiAn6pmPJywKICAn6pmQJyA9PiAn6pmRJywKICAn6pmSJyA9PiAn6pmTJywKICAn6pmUJyA9PiAn6pmVJywKICAn6pmWJyA9PiAn6pmXJywKICAn6pmYJyA9PiAn6pmZJywKICAn6pmaJyA9PiAn6pmbJywKICAn6pmcJyA9PiAn6pmdJywKICAn6pmeJyA9PiAn6pmfJywKICAn6pmgJyA9PiAn6pmhJywKICAn6pmiJyA9PiAn6pmjJywKICAn6pmkJyA9PiAn6pmlJywKICAn6pmmJyA9PiAn6pmnJywKICAn6pmoJyA9PiAn6pmpJywKICAn6pmqJyA9PiAn6pmrJywKICAn6pmsJyA9PiAn6pmtJywKICAn6pqAJyA9PiAn6pqBJywKICAn6pqCJyA9PiAn6pqDJywKICAn6pqEJyA9PiAn6pqFJywKICAn6pqGJyA9PiAn6pqHJywKICAn6pqIJyA9PiAn6pqJJywKICAn6pqKJyA9PiAn6pqLJywKICAn6pqMJyA9PiAn6pqNJywKICAn6pqOJyA9PiAn6pqPJywKICAn6pqQJyA9PiAn6pqRJywKICAn6pqSJyA9PiAn6pqTJywKICAn6pqUJyA9PiAn6pqVJywKICAn6pqWJyA9PiAn6pqXJywKICAn6pqYJyA9PiAn6pqZJywKICAn6pqaJyA9PiAn6pqbJywKICAn6pyiJyA9PiAn6pyjJywKICAn6pykJyA9PiAn6pylJywKICAn6pymJyA9PiAn6pynJywKICAn6pyoJyA9PiAn6pypJywKICAn6pyqJyA9PiAn6pyrJywKICAn6pysJyA9PiAn6pytJywKICAn6pyuJyA9PiAn6pyvJywKICAn6pyyJyA9PiAn6pyzJywKICAn6py0JyA9PiAn6py1JywKICAn6py2JyA9PiAn6py3JywKICAn6py4JyA9PiAn6py5JywKICAn6py6JyA9PiAn6py7JywKICAn6py8JyA9PiAn6py9JywKICAn6py+JyA9PiAn6py/JywKICAn6p2AJyA9PiAn6p2BJywKICAn6p2CJyA9PiAn6p2DJywKICAn6p2EJyA9PiAn6p2FJywKICAn6p2GJyA9PiAn6p2HJywKICAn6p2IJyA9PiAn6p2JJywKICAn6p2KJyA9PiAn6p2LJywKICAn6p2MJyA9PiAn6p2NJywKICAn6p2OJyA9PiAn6p2PJywKICAn6p2QJyA9PiAn6p2RJywKICAn6p2SJyA9PiAn6p2TJywKICAn6p2UJyA9PiAn6p2VJywKICAn6p2WJyA9PiAn6p2XJywKICAn6p2YJyA9PiAn6p2ZJywKICAn6p2aJyA9PiAn6p2bJywKICAn6p2cJyA9PiAn6p2dJywKICAn6p2eJyA9PiAn6p2fJywKICAn6p2gJyA9PiAn6p2hJywKICAn6p2iJyA9PiAn6p2jJywKICAn6p2kJyA9PiAn6p2lJywKICAn6p2mJyA9PiAn6p2nJywKICAn6p2oJyA9PiAn6p2pJywKICAn6p2qJyA9PiAn6p2rJywKICAn6p2sJyA9PiAn6p2tJywKICAn6p2uJyA9PiAn6p2vJywKICAn6p25JyA9PiAn6p26JywKICAn6p27JyA9PiAn6p28JywKICAn6p29JyA9PiAn4bW5JywKICAn6p2+JyA9PiAn6p2/JywKICAn6p6AJyA9PiAn6p6BJywKICAn6p6CJyA9PiAn6p6DJywKICAn6p6EJyA9PiAn6p6FJywKICAn6p6GJyA9PiAn6p6HJywKICAn6p6LJyA9PiAn6p6MJywKICAn6p6NJyA9PiAnyaUnLAogICfqnpAnID0+ICfqnpEnLAogICfqnpInID0+ICfqnpMnLAogICfqnpYnID0+ICfqnpcnLAogICfqnpgnID0+ICfqnpknLAogICfqnponID0+ICfqnpsnLAogICfqnpwnID0+ICfqnp0nLAogICfqnp4nID0+ICfqnp8nLAogICfqnqAnID0+ICfqnqEnLAogICfqnqInID0+ICfqnqMnLAogICfqnqQnID0+ICfqnqUnLAogICfqnqYnID0+ICfqnqcnLAogICfqnqgnID0+ICfqnqknLAogICfqnqonID0+ICfJpicsCiAgJ+qeqycgPT4gJ8mcJywKICAn6p6sJyA9PiAnyaEnLAogICfqnq0nID0+ICfJrCcsCiAgJ+qesCcgPT4gJ8qeJywKICAn6p6xJyA9PiAnyocnLAogICfvvKEnID0+ICfvvYEnLAogICfvvKInID0+ICfvvYInLAogICfvvKMnID0+ICfvvYMnLAogICfvvKQnID0+ICfvvYQnLAogICfvvKUnID0+ICfvvYUnLAogICfvvKYnID0+ICfvvYYnLAogICfvvKcnID0+ICfvvYcnLAogICfvvKgnID0+ICfvvYgnLAogICfvvKknID0+ICfvvYknLAogICfvvKonID0+ICfvvYonLAogICfvvKsnID0+ICfvvYsnLAogICfvvKwnID0+ICfvvYwnLAogICfvvK0nID0+ICfvvY0nLAogICfvvK4nID0+ICfvvY4nLAogICfvvK8nID0+ICfvvY8nLAogICfvvLAnID0+ICfvvZAnLAogICfvvLEnID0+ICfvvZEnLAogICfvvLInID0+ICfvvZInLAogICfvvLMnID0+ICfvvZMnLAogICfvvLQnID0+ICfvvZQnLAogICfvvLUnID0+ICfvvZUnLAogICfvvLYnID0+ICfvvZYnLAogICfvvLcnID0+ICfvvZcnLAogICfvvLgnID0+ICfvvZgnLAogICfvvLknID0+ICfvvZknLAogICfvvLonID0+ICfvvZonLAogICfwkJCAJyA9PiAn8JCQqCcsCiAgJ/CQkIEnID0+ICfwkJCpJywKICAn8JCQgicgPT4gJ/CQkKonLAogICfwkJCDJyA9PiAn8JCQqycsCiAgJ/CQkIQnID0+ICfwkJCsJywKICAn8JCQhScgPT4gJ/CQkK0nLAogICfwkJCGJyA9PiAn8JCQricsCiAgJ/CQkIcnID0+ICfwkJCvJywKICAn8JCQiCcgPT4gJ/CQkLAnLAogICfwkJCJJyA9PiAn8JCQsScsCiAgJ/CQkIonID0+ICfwkJCyJywKICAn8JCQiycgPT4gJ/CQkLMnLAogICfwkJCMJyA9PiAn8JCQtCcsCiAgJ/CQkI0nID0+ICfwkJC1JywKICAn8JCQjicgPT4gJ/CQkLYnLAogICfwkJCPJyA9PiAn8JCQtycsCiAgJ/CQkJAnID0+ICfwkJC4JywKICAn8JCQkScgPT4gJ/CQkLknLAogICfwkJCSJyA9PiAn8JCQuicsCiAgJ/CQkJMnID0+ICfwkJC7JywKICAn8JCQlCcgPT4gJ/CQkLwnLAogICfwkJCVJyA9PiAn8JCQvScsCiAgJ/CQkJYnID0+ICfwkJC+JywKICAn8JCQlycgPT4gJ/CQkL8nLAogICfwkJCYJyA9PiAn8JCRgCcsCiAgJ/CQkJknID0+ICfwkJGBJywKICAn8JCQmicgPT4gJ/CQkYInLAogICfwkJCbJyA9PiAn8JCRgycsCiAgJ/CQkJwnID0+ICfwkJGEJywKICAn8JCQnScgPT4gJ/CQkYUnLAogICfwkJCeJyA9PiAn8JCRhicsCiAgJ/CQkJ8nID0+ICfwkJGHJywKICAn8JCQoCcgPT4gJ/CQkYgnLAogICfwkJChJyA9PiAn8JCRiScsCiAgJ/CQkKInID0+ICfwkJGKJywKICAn8JCQoycgPT4gJ/CQkYsnLAogICfwkJCkJyA9PiAn8JCRjCcsCiAgJ/CQkKUnID0+ICfwkJGNJywKICAn8JCQpicgPT4gJ/CQkY4nLAogICfwkJCnJyA9PiAn8JCRjycsCiAgJ/CRoqAnID0+ICfwkaOAJywKICAn8JGioScgPT4gJ/CRo4EnLAogICfwkaKiJyA9PiAn8JGjgicsCiAgJ/CRoqMnID0+ICfwkaODJywKICAn8JGipCcgPT4gJ/CRo4QnLAogICfwkaKlJyA9PiAn8JGjhScsCiAgJ/CRoqYnID0+ICfwkaOGJywKICAn8JGipycgPT4gJ/CRo4cnLAogICfwkaKoJyA9PiAn8JGjiCcsCiAgJ/CRoqknID0+ICfwkaOJJywKICAn8JGiqicgPT4gJ/CRo4onLAogICfwkaKrJyA9PiAn8JGjiycsCiAgJ/CRoqwnID0+ICfwkaOMJywKICAn8JGirScgPT4gJ/CRo40nLAogICfwkaKuJyA9PiAn8JGjjicsCiAgJ/CRoq8nID0+ICfwkaOPJywKICAn8JGisCcgPT4gJ/CRo5AnLAogICfwkaKxJyA9PiAn8JGjkScsCiAgJ/CRorInID0+ICfwkaOSJywKICAn8JGisycgPT4gJ/CRo5MnLAogICfwkaK0JyA9PiAn8JGjlCcsCiAgJ/CRorUnID0+ICfwkaOVJywKICAn8JGiticgPT4gJ/CRo5YnLAogICfwkaK3JyA9PiAn8JGjlycsCiAgJ/CRorgnID0+ICfwkaOYJywKICAn8JGiuScgPT4gJ/CRo5knLAogICfwkaK6JyA9PiAn8JGjmicsCiAgJ/CRorsnID0+ICfwkaObJywKICAn8JGivCcgPT4gJ/CRo5wnLAogICfwkaK9JyA9PiAn8JGjnScsCiAgJ/CRor4nID0+ICfwkaOeJywKICAn8JGivycgPT4gJ/CRo58nLAopOwoKJHJlc3VsdCA9JiAkZGF0YTsKdW5zZXQoJGRhdGEpOwoKcmV0dXJuICRyZXN1bHQ7Cg==AppDevTools/query/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.phpPD9waHAKCnN0YXRpYyAkZGF0YSA9IGFycmF5ICgKICAnYScgPT4gJ0EnLAogICdiJyA9PiAnQicsCiAgJ2MnID0+ICdDJywKICAnZCcgPT4gJ0QnLAogICdlJyA9PiAnRScsCiAgJ2YnID0+ICdGJywKICAnZycgPT4gJ0cnLAogICdoJyA9PiAnSCcsCiAgJ2knID0+ICdJJywKICAnaicgPT4gJ0onLAogICdrJyA9PiAnSycsCiAgJ2wnID0+ICdMJywKICAnbScgPT4gJ00nLAogICduJyA9PiAnTicsCiAgJ28nID0+ICdPJywKICAncCcgPT4gJ1AnLAogICdxJyA9PiAnUScsCiAgJ3InID0+ICdSJywKICAncycgPT4gJ1MnLAogICd0JyA9PiAnVCcsCiAgJ3UnID0+ICdVJywKICAndicgPT4gJ1YnLAogICd3JyA9PiAnVycsCiAgJ3gnID0+ICdYJywKICAneScgPT4gJ1knLAogICd6JyA9PiAnWicsCiAgJ8K1JyA9PiAnzpwnLAogICfDoCcgPT4gJ8OAJywKICAnw6EnID0+ICfDgScsCiAgJ8OiJyA9PiAnw4InLAogICfDoycgPT4gJ8ODJywKICAnw6QnID0+ICfDhCcsCiAgJ8OlJyA9PiAnw4UnLAogICfDpicgPT4gJ8OGJywKICAnw6cnID0+ICfDhycsCiAgJ8OoJyA9PiAnw4gnLAogICfDqScgPT4gJ8OJJywKICAnw6onID0+ICfDiicsCiAgJ8OrJyA9PiAnw4snLAogICfDrCcgPT4gJ8OMJywKICAnw60nID0+ICfDjScsCiAgJ8OuJyA9PiAnw44nLAogICfDrycgPT4gJ8OPJywKICAnw7AnID0+ICfDkCcsCiAgJ8OxJyA9PiAnw5EnLAogICfDsicgPT4gJ8OSJywKICAnw7MnID0+ICfDkycsCiAgJ8O0JyA9PiAnw5QnLAogICfDtScgPT4gJ8OVJywKICAnw7YnID0+ICfDlicsCiAgJ8O4JyA9PiAnw5gnLAogICfDuScgPT4gJ8OZJywKICAnw7onID0+ICfDmicsCiAgJ8O7JyA9PiAnw5snLAogICfDvCcgPT4gJ8OcJywKICAnw70nID0+ICfDnScsCiAgJ8O+JyA9PiAnw54nLAogICfDvycgPT4gJ8W4JywKICAnxIEnID0+ICfEgCcsCiAgJ8SDJyA9PiAnxIInLAogICfEhScgPT4gJ8SEJywKICAnxIcnID0+ICfEhicsCiAgJ8SJJyA9PiAnxIgnLAogICfEiycgPT4gJ8SKJywKICAnxI0nID0+ICfEjCcsCiAgJ8SPJyA9PiAnxI4nLAogICfEkScgPT4gJ8SQJywKICAnxJMnID0+ICfEkicsCiAgJ8SVJyA9PiAnxJQnLAogICfElycgPT4gJ8SWJywKICAnxJknID0+ICfEmCcsCiAgJ8SbJyA9PiAnxJonLAogICfEnScgPT4gJ8ScJywKICAnxJ8nID0+ICfEnicsCiAgJ8ShJyA9PiAnxKAnLAogICfEoycgPT4gJ8SiJywKICAnxKUnID0+ICfEpCcsCiAgJ8SnJyA9PiAnxKYnLAogICfEqScgPT4gJ8SoJywKICAnxKsnID0+ICfEqicsCiAgJ8StJyA9PiAnxKwnLAogICfErycgPT4gJ8SuJywKICAnxLEnID0+ICdJJywKICAnxLMnID0+ICfEsicsCiAgJ8S1JyA9PiAnxLQnLAogICfEtycgPT4gJ8S2JywKICAnxLonID0+ICfEuScsCiAgJ8S8JyA9PiAnxLsnLAogICfEvicgPT4gJ8S9JywKICAnxYAnID0+ICfEvycsCiAgJ8WCJyA9PiAnxYEnLAogICfFhCcgPT4gJ8WDJywKICAnxYYnID0+ICfFhScsCiAgJ8WIJyA9PiAnxYcnLAogICfFiycgPT4gJ8WKJywKICAnxY0nID0+ICfFjCcsCiAgJ8WPJyA9PiAnxY4nLAogICfFkScgPT4gJ8WQJywKICAnxZMnID0+ICfFkicsCiAgJ8WVJyA9PiAnxZQnLAogICfFlycgPT4gJ8WWJywKICAnxZknID0+ICfFmCcsCiAgJ8WbJyA9PiAnxZonLAogICfFnScgPT4gJ8WcJywKICAnxZ8nID0+ICfFnicsCiAgJ8WhJyA9PiAnxaAnLAogICfFoycgPT4gJ8WiJywKICAnxaUnID0+ICfFpCcsCiAgJ8WnJyA9PiAnxaYnLAogICfFqScgPT4gJ8WoJywKICAnxasnID0+ICfFqicsCiAgJ8WtJyA9PiAnxawnLAogICfFrycgPT4gJ8WuJywKICAnxbEnID0+ICfFsCcsCiAgJ8WzJyA9PiAnxbInLAogICfFtScgPT4gJ8W0JywKICAnxbcnID0+ICfFticsCiAgJ8W6JyA9PiAnxbknLAogICfFvCcgPT4gJ8W7JywKICAnxb4nID0+ICfFvScsCiAgJ8W/JyA9PiAnUycsCiAgJ8aAJyA9PiAnyYMnLAogICfGgycgPT4gJ8aCJywKICAnxoUnID0+ICfGhCcsCiAgJ8aIJyA9PiAnxocnLAogICfGjCcgPT4gJ8aLJywKICAnxpInID0+ICfGkScsCiAgJ8aVJyA9PiAnx7YnLAogICfGmScgPT4gJ8aYJywKICAnxponID0+ICfIvScsCiAgJ8aeJyA9PiAnyKAnLAogICfGoScgPT4gJ8agJywKICAnxqMnID0+ICfGoicsCiAgJ8alJyA9PiAnxqQnLAogICfGqCcgPT4gJ8anJywKICAnxq0nID0+ICfGrCcsCiAgJ8awJyA9PiAnxq8nLAogICfGtCcgPT4gJ8azJywKICAnxrYnID0+ICfGtScsCiAgJ8a5JyA9PiAnxrgnLAogICfGvScgPT4gJ8a8JywKICAnxr8nID0+ICfHtycsCiAgJ8eFJyA9PiAnx4QnLAogICfHhicgPT4gJ8eEJywKICAnx4gnID0+ICfHhycsCiAgJ8eJJyA9PiAnx4cnLAogICfHiycgPT4gJ8eKJywKICAnx4wnID0+ICfHiicsCiAgJ8eOJyA9PiAnx40nLAogICfHkCcgPT4gJ8ePJywKICAnx5InID0+ICfHkScsCiAgJ8eUJyA9PiAnx5MnLAogICfHlicgPT4gJ8eVJywKICAnx5gnID0+ICfHlycsCiAgJ8eaJyA9PiAnx5knLAogICfHnCcgPT4gJ8ebJywKICAnx50nID0+ICfGjicsCiAgJ8efJyA9PiAnx54nLAogICfHoScgPT4gJ8egJywKICAnx6MnID0+ICfHoicsCiAgJ8elJyA9PiAnx6QnLAogICfHpycgPT4gJ8emJywKICAnx6knID0+ICfHqCcsCiAgJ8erJyA9PiAnx6onLAogICfHrScgPT4gJ8esJywKICAnx68nID0+ICfHricsCiAgJ8eyJyA9PiAnx7EnLAogICfHsycgPT4gJ8exJywKICAnx7UnID0+ICfHtCcsCiAgJ8e5JyA9PiAnx7gnLAogICfHuycgPT4gJ8e6JywKICAnx70nID0+ICfHvCcsCiAgJ8e/JyA9PiAnx74nLAogICfIgScgPT4gJ8iAJywKICAnyIMnID0+ICfIgicsCiAgJ8iFJyA9PiAnyIQnLAogICfIhycgPT4gJ8iGJywKICAnyIknID0+ICfIiCcsCiAgJ8iLJyA9PiAnyIonLAogICfIjScgPT4gJ8iMJywKICAnyI8nID0+ICfIjicsCiAgJ8iRJyA9PiAnyJAnLAogICfIkycgPT4gJ8iSJywKICAnyJUnID0+ICfIlCcsCiAgJ8iXJyA9PiAnyJYnLAogICfImScgPT4gJ8iYJywKICAnyJsnID0+ICfImicsCiAgJ8idJyA9PiAnyJwnLAogICfInycgPT4gJ8ieJywKICAnyKMnID0+ICfIoicsCiAgJ8ilJyA9PiAnyKQnLAogICfIpycgPT4gJ8imJywKICAnyKknID0+ICfIqCcsCiAgJ8irJyA9PiAnyKonLAogICfIrScgPT4gJ8isJywKICAnyK8nID0+ICfIricsCiAgJ8ixJyA9PiAnyLAnLAogICfIsycgPT4gJ8iyJywKICAnyLwnID0+ICfIuycsCiAgJ8i/JyA9PiAn4rG+JywKICAnyYAnID0+ICfisb8nLAogICfJgicgPT4gJ8mBJywKICAnyYcnID0+ICfJhicsCiAgJ8mJJyA9PiAnyYgnLAogICfJiycgPT4gJ8mKJywKICAnyY0nID0+ICfJjCcsCiAgJ8mPJyA9PiAnyY4nLAogICfJkCcgPT4gJ+KxrycsCiAgJ8mRJyA9PiAn4rGtJywKICAnyZInID0+ICfisbAnLAogICfJkycgPT4gJ8aBJywKICAnyZQnID0+ICfGhicsCiAgJ8mWJyA9PiAnxoknLAogICfJlycgPT4gJ8aKJywKICAnyZknID0+ICfGjycsCiAgJ8mbJyA9PiAnxpAnLAogICfJnCcgPT4gJ+qeqycsCiAgJ8mgJyA9PiAnxpMnLAogICfJoScgPT4gJ+qerCcsCiAgJ8mjJyA9PiAnxpQnLAogICfJpScgPT4gJ+qejScsCiAgJ8mmJyA9PiAn6p6qJywKICAnyagnID0+ICfGlycsCiAgJ8mpJyA9PiAnxpYnLAogICfJqycgPT4gJ+KxoicsCiAgJ8msJyA9PiAn6p6tJywKICAnya8nID0+ICfGnCcsCiAgJ8mxJyA9PiAn4rGuJywKICAnybInID0+ICfGnScsCiAgJ8m1JyA9PiAnxp8nLAogICfJvScgPT4gJ+KxpCcsCiAgJ8qAJyA9PiAnxqYnLAogICfKgycgPT4gJ8apJywKICAnyocnID0+ICfqnrEnLAogICfKiCcgPT4gJ8auJywKICAnyoknID0+ICfJhCcsCiAgJ8qKJyA9PiAnxrEnLAogICfKiycgPT4gJ8ayJywKICAnyownID0+ICfJhScsCiAgJ8qSJyA9PiAnxrcnLAogICfKnicgPT4gJ+qesCcsCiAgJ82FJyA9PiAnzpknLAogICfNsScgPT4gJ82wJywKICAnzbMnID0+ICfNsicsCiAgJ823JyA9PiAnzbYnLAogICfNuycgPT4gJ8+9JywKICAnzbwnID0+ICfPvicsCiAgJ829JyA9PiAnz78nLAogICfOrCcgPT4gJ86GJywKICAnzq0nID0+ICfOiCcsCiAgJ86uJyA9PiAnzoknLAogICfOrycgPT4gJ86KJywKICAnzrEnID0+ICfOkScsCiAgJ86yJyA9PiAnzpInLAogICfOsycgPT4gJ86TJywKICAnzrQnID0+ICfOlCcsCiAgJ861JyA9PiAnzpUnLAogICfOticgPT4gJ86WJywKICAnzrcnID0+ICfOlycsCiAgJ864JyA9PiAnzpgnLAogICfOuScgPT4gJ86ZJywKICAnzronID0+ICfOmicsCiAgJ867JyA9PiAnzpsnLAogICfOvCcgPT4gJ86cJywKICAnzr0nID0+ICfOnScsCiAgJ86+JyA9PiAnzp4nLAogICfOvycgPT4gJ86fJywKICAnz4AnID0+ICfOoCcsCiAgJ8+BJyA9PiAnzqEnLAogICfPgicgPT4gJ86jJywKICAnz4MnID0+ICfOoycsCiAgJ8+EJyA9PiAnzqQnLAogICfPhScgPT4gJ86lJywKICAnz4YnID0+ICfOpicsCiAgJ8+HJyA9PiAnzqcnLAogICfPiCcgPT4gJ86oJywKICAnz4knID0+ICfOqScsCiAgJ8+KJyA9PiAnzqonLAogICfPiycgPT4gJ86rJywKICAnz4wnID0+ICfOjCcsCiAgJ8+NJyA9PiAnzo4nLAogICfPjicgPT4gJ86PJywKICAnz5AnID0+ICfOkicsCiAgJ8+RJyA9PiAnzpgnLAogICfPlScgPT4gJ86mJywKICAnz5YnID0+ICfOoCcsCiAgJ8+XJyA9PiAnz48nLAogICfPmScgPT4gJ8+YJywKICAnz5snID0+ICfPmicsCiAgJ8+dJyA9PiAnz5wnLAogICfPnycgPT4gJ8+eJywKICAnz6EnID0+ICfPoCcsCiAgJ8+jJyA9PiAnz6InLAogICfPpScgPT4gJ8+kJywKICAnz6cnID0+ICfPpicsCiAgJ8+pJyA9PiAnz6gnLAogICfPqycgPT4gJ8+qJywKICAnz60nID0+ICfPrCcsCiAgJ8+vJyA9PiAnz64nLAogICfPsCcgPT4gJ86aJywKICAnz7EnID0+ICfOoScsCiAgJ8+yJyA9PiAnz7knLAogICfPsycgPT4gJ82/JywKICAnz7UnID0+ICfOlScsCiAgJ8+4JyA9PiAnz7cnLAogICfPuycgPT4gJ8+6JywKICAn0LAnID0+ICfQkCcsCiAgJ9CxJyA9PiAn0JEnLAogICfQsicgPT4gJ9CSJywKICAn0LMnID0+ICfQkycsCiAgJ9C0JyA9PiAn0JQnLAogICfQtScgPT4gJ9CVJywKICAn0LYnID0+ICfQlicsCiAgJ9C3JyA9PiAn0JcnLAogICfQuCcgPT4gJ9CYJywKICAn0LknID0+ICfQmScsCiAgJ9C6JyA9PiAn0JonLAogICfQuycgPT4gJ9CbJywKICAn0LwnID0+ICfQnCcsCiAgJ9C9JyA9PiAn0J0nLAogICfQvicgPT4gJ9CeJywKICAn0L8nID0+ICfQnycsCiAgJ9GAJyA9PiAn0KAnLAogICfRgScgPT4gJ9ChJywKICAn0YInID0+ICfQoicsCiAgJ9GDJyA9PiAn0KMnLAogICfRhCcgPT4gJ9CkJywKICAn0YUnID0+ICfQpScsCiAgJ9GGJyA9PiAn0KYnLAogICfRhycgPT4gJ9CnJywKICAn0YgnID0+ICfQqCcsCiAgJ9GJJyA9PiAn0KknLAogICfRiicgPT4gJ9CqJywKICAn0YsnID0+ICfQqycsCiAgJ9GMJyA9PiAn0KwnLAogICfRjScgPT4gJ9CtJywKICAn0Y4nID0+ICfQricsCiAgJ9GPJyA9PiAn0K8nLAogICfRkCcgPT4gJ9CAJywKICAn0ZEnID0+ICfQgScsCiAgJ9GSJyA9PiAn0IInLAogICfRkycgPT4gJ9CDJywKICAn0ZQnID0+ICfQhCcsCiAgJ9GVJyA9PiAn0IUnLAogICfRlicgPT4gJ9CGJywKICAn0ZcnID0+ICfQhycsCiAgJ9GYJyA9PiAn0IgnLAogICfRmScgPT4gJ9CJJywKICAn0ZonID0+ICfQiicsCiAgJ9GbJyA9PiAn0IsnLAogICfRnCcgPT4gJ9CMJywKICAn0Z0nID0+ICfQjScsCiAgJ9GeJyA9PiAn0I4nLAogICfRnycgPT4gJ9CPJywKICAn0aEnID0+ICfRoCcsCiAgJ9GjJyA9PiAn0aInLAogICfRpScgPT4gJ9GkJywKICAn0acnID0+ICfRpicsCiAgJ9GpJyA9PiAn0agnLAogICfRqycgPT4gJ9GqJywKICAn0a0nID0+ICfRrCcsCiAgJ9GvJyA9PiAn0a4nLAogICfRsScgPT4gJ9GwJywKICAn0bMnID0+ICfRsicsCiAgJ9G1JyA9PiAn0bQnLAogICfRtycgPT4gJ9G2JywKICAn0bknID0+ICfRuCcsCiAgJ9G7JyA9PiAn0bonLAogICfRvScgPT4gJ9G8JywKICAn0b8nID0+ICfRvicsCiAgJ9KBJyA9PiAn0oAnLAogICfSiycgPT4gJ9KKJywKICAn0o0nID0+ICfSjCcsCiAgJ9KPJyA9PiAn0o4nLAogICfSkScgPT4gJ9KQJywKICAn0pMnID0+ICfSkicsCiAgJ9KVJyA9PiAn0pQnLAogICfSlycgPT4gJ9KWJywKICAn0pknID0+ICfSmCcsCiAgJ9KbJyA9PiAn0ponLAogICfSnScgPT4gJ9KcJywKICAn0p8nID0+ICfSnicsCiAgJ9KhJyA9PiAn0qAnLAogICfSoycgPT4gJ9KiJywKICAn0qUnID0+ICfSpCcsCiAgJ9KnJyA9PiAn0qYnLAogICfSqScgPT4gJ9KoJywKICAn0qsnID0+ICfSqicsCiAgJ9KtJyA9PiAn0qwnLAogICfSrycgPT4gJ9KuJywKICAn0rEnID0+ICfSsCcsCiAgJ9KzJyA9PiAn0rInLAogICfStScgPT4gJ9K0JywKICAn0rcnID0+ICfSticsCiAgJ9K5JyA9PiAn0rgnLAogICfSuycgPT4gJ9K6JywKICAn0r0nID0+ICfSvCcsCiAgJ9K/JyA9PiAn0r4nLAogICfTgicgPT4gJ9OBJywKICAn04QnID0+ICfTgycsCiAgJ9OGJyA9PiAn04UnLAogICfTiCcgPT4gJ9OHJywKICAn04onID0+ICfTiScsCiAgJ9OMJyA9PiAn04snLAogICfTjicgPT4gJ9ONJywKICAn048nID0+ICfTgCcsCiAgJ9ORJyA9PiAn05AnLAogICfTkycgPT4gJ9OSJywKICAn05UnID0+ICfTlCcsCiAgJ9OXJyA9PiAn05YnLAogICfTmScgPT4gJ9OYJywKICAn05snID0+ICfTmicsCiAgJ9OdJyA9PiAn05wnLAogICfTnycgPT4gJ9OeJywKICAn06EnID0+ICfToCcsCiAgJ9OjJyA9PiAn06InLAogICfTpScgPT4gJ9OkJywKICAn06cnID0+ICfTpicsCiAgJ9OpJyA9PiAn06gnLAogICfTqycgPT4gJ9OqJywKICAn060nID0+ICfTrCcsCiAgJ9OvJyA9PiAn064nLAogICfTsScgPT4gJ9OwJywKICAn07MnID0+ICfTsicsCiAgJ9O1JyA9PiAn07QnLAogICfTtycgPT4gJ9O2JywKICAn07knID0+ICfTuCcsCiAgJ9O7JyA9PiAn07onLAogICfTvScgPT4gJ9O8JywKICAn078nID0+ICfTvicsCiAgJ9SBJyA9PiAn1IAnLAogICfUgycgPT4gJ9SCJywKICAn1IUnID0+ICfUhCcsCiAgJ9SHJyA9PiAn1IYnLAogICfUiScgPT4gJ9SIJywKICAn1IsnID0+ICfUiicsCiAgJ9SNJyA9PiAn1IwnLAogICfUjycgPT4gJ9SOJywKICAn1JEnID0+ICfUkCcsCiAgJ9STJyA9PiAn1JInLAogICfUlScgPT4gJ9SUJywKICAn1JcnID0+ICfUlicsCiAgJ9SZJyA9PiAn1JgnLAogICfUmycgPT4gJ9SaJywKICAn1J0nID0+ICfUnCcsCiAgJ9SfJyA9PiAn1J4nLAogICfUoScgPT4gJ9SgJywKICAn1KMnID0+ICfUoicsCiAgJ9SlJyA9PiAn1KQnLAogICfUpycgPT4gJ9SmJywKICAn1KknID0+ICfUqCcsCiAgJ9SrJyA9PiAn1KonLAogICfUrScgPT4gJ9SsJywKICAn1K8nID0+ICfUricsCiAgJ9WhJyA9PiAn1LEnLAogICfVoicgPT4gJ9SyJywKICAn1aMnID0+ICfUsycsCiAgJ9WkJyA9PiAn1LQnLAogICfVpScgPT4gJ9S1JywKICAn1aYnID0+ICfUticsCiAgJ9WnJyA9PiAn1LcnLAogICfVqCcgPT4gJ9S4JywKICAn1aknID0+ICfUuScsCiAgJ9WqJyA9PiAn1LonLAogICfVqycgPT4gJ9S7JywKICAn1awnID0+ICfUvCcsCiAgJ9WtJyA9PiAn1L0nLAogICfVricgPT4gJ9S+JywKICAn1a8nID0+ICfUvycsCiAgJ9WwJyA9PiAn1YAnLAogICfVsScgPT4gJ9WBJywKICAn1bInID0+ICfVgicsCiAgJ9WzJyA9PiAn1YMnLAogICfVtCcgPT4gJ9WEJywKICAn1bUnID0+ICfVhScsCiAgJ9W2JyA9PiAn1YYnLAogICfVtycgPT4gJ9WHJywKICAn1bgnID0+ICfViCcsCiAgJ9W5JyA9PiAn1YknLAogICfVuicgPT4gJ9WKJywKICAn1bsnID0+ICfViycsCiAgJ9W8JyA9PiAn1YwnLAogICfVvScgPT4gJ9WNJywKICAn1b4nID0+ICfVjicsCiAgJ9W/JyA9PiAn1Y8nLAogICfWgCcgPT4gJ9WQJywKICAn1oEnID0+ICfVkScsCiAgJ9aCJyA9PiAn1ZInLAogICfWgycgPT4gJ9WTJywKICAn1oQnID0+ICfVlCcsCiAgJ9aFJyA9PiAn1ZUnLAogICfWhicgPT4gJ9WWJywKICAn4bW5JyA9PiAn6p29JywKICAn4bW9JyA9PiAn4rGjJywKICAn4biBJyA9PiAn4biAJywKICAn4biDJyA9PiAn4biCJywKICAn4biFJyA9PiAn4biEJywKICAn4biHJyA9PiAn4biGJywKICAn4biJJyA9PiAn4biIJywKICAn4biLJyA9PiAn4biKJywKICAn4biNJyA9PiAn4biMJywKICAn4biPJyA9PiAn4biOJywKICAn4biRJyA9PiAn4biQJywKICAn4biTJyA9PiAn4biSJywKICAn4biVJyA9PiAn4biUJywKICAn4biXJyA9PiAn4biWJywKICAn4biZJyA9PiAn4biYJywKICAn4bibJyA9PiAn4biaJywKICAn4bidJyA9PiAn4bicJywKICAn4bifJyA9PiAn4bieJywKICAn4bihJyA9PiAn4bigJywKICAn4bijJyA9PiAn4biiJywKICAn4bilJyA9PiAn4bikJywKICAn4binJyA9PiAn4bimJywKICAn4bipJyA9PiAn4bioJywKICAn4birJyA9PiAn4biqJywKICAn4bitJyA9PiAn4bisJywKICAn4bivJyA9PiAn4biuJywKICAn4bixJyA9PiAn4biwJywKICAn4bizJyA9PiAn4biyJywKICAn4bi1JyA9PiAn4bi0JywKICAn4bi3JyA9PiAn4bi2JywKICAn4bi5JyA9PiAn4bi4JywKICAn4bi7JyA9PiAn4bi6JywKICAn4bi9JyA9PiAn4bi8JywKICAn4bi/JyA9PiAn4bi+JywKICAn4bmBJyA9PiAn4bmAJywKICAn4bmDJyA9PiAn4bmCJywKICAn4bmFJyA9PiAn4bmEJywKICAn4bmHJyA9PiAn4bmGJywKICAn4bmJJyA9PiAn4bmIJywKICAn4bmLJyA9PiAn4bmKJywKICAn4bmNJyA9PiAn4bmMJywKICAn4bmPJyA9PiAn4bmOJywKICAn4bmRJyA9PiAn4bmQJywKICAn4bmTJyA9PiAn4bmSJywKICAn4bmVJyA9PiAn4bmUJywKICAn4bmXJyA9PiAn4bmWJywKICAn4bmZJyA9PiAn4bmYJywKICAn4bmbJyA9PiAn4bmaJywKICAn4bmdJyA9PiAn4bmcJywKICAn4bmfJyA9PiAn4bmeJywKICAn4bmhJyA9PiAn4bmgJywKICAn4bmjJyA9PiAn4bmiJywKICAn4bmlJyA9PiAn4bmkJywKICAn4bmnJyA9PiAn4bmmJywKICAn4bmpJyA9PiAn4bmoJywKICAn4bmrJyA9PiAn4bmqJywKICAn4bmtJyA9PiAn4bmsJywKICAn4bmvJyA9PiAn4bmuJywKICAn4bmxJyA9PiAn4bmwJywKICAn4bmzJyA9PiAn4bmyJywKICAn4bm1JyA9PiAn4bm0JywKICAn4bm3JyA9PiAn4bm2JywKICAn4bm5JyA9PiAn4bm4JywKICAn4bm7JyA9PiAn4bm6JywKICAn4bm9JyA9PiAn4bm8JywKICAn4bm/JyA9PiAn4bm+JywKICAn4bqBJyA9PiAn4bqAJywKICAn4bqDJyA9PiAn4bqCJywKICAn4bqFJyA9PiAn4bqEJywKICAn4bqHJyA9PiAn4bqGJywKICAn4bqJJyA9PiAn4bqIJywKICAn4bqLJyA9PiAn4bqKJywKICAn4bqNJyA9PiAn4bqMJywKICAn4bqPJyA9PiAn4bqOJywKICAn4bqRJyA9PiAn4bqQJywKICAn4bqTJyA9PiAn4bqSJywKICAn4bqVJyA9PiAn4bqUJywKICAn4bqbJyA9PiAn4bmgJywKICAn4bqhJyA9PiAn4bqgJywKICAn4bqjJyA9PiAn4bqiJywKICAn4bqlJyA9PiAn4bqkJywKICAn4bqnJyA9PiAn4bqmJywKICAn4bqpJyA9PiAn4bqoJywKICAn4bqrJyA9PiAn4bqqJywKICAn4bqtJyA9PiAn4bqsJywKICAn4bqvJyA9PiAn4bquJywKICAn4bqxJyA9PiAn4bqwJywKICAn4bqzJyA9PiAn4bqyJywKICAn4bq1JyA9PiAn4bq0JywKICAn4bq3JyA9PiAn4bq2JywKICAn4bq5JyA9PiAn4bq4JywKICAn4bq7JyA9PiAn4bq6JywKICAn4bq9JyA9PiAn4bq8JywKICAn4bq/JyA9PiAn4bq+JywKICAn4buBJyA9PiAn4buAJywKICAn4buDJyA9PiAn4buCJywKICAn4buFJyA9PiAn4buEJywKICAn4buHJyA9PiAn4buGJywKICAn4buJJyA9PiAn4buIJywKICAn4buLJyA9PiAn4buKJywKICAn4buNJyA9PiAn4buMJywKICAn4buPJyA9PiAn4buOJywKICAn4buRJyA9PiAn4buQJywKICAn4buTJyA9PiAn4buSJywKICAn4buVJyA9PiAn4buUJywKICAn4buXJyA9PiAn4buWJywKICAn4buZJyA9PiAn4buYJywKICAn4bubJyA9PiAn4buaJywKICAn4budJyA9PiAn4bucJywKICAn4bufJyA9PiAn4bueJywKICAn4buhJyA9PiAn4bugJywKICAn4bujJyA9PiAn4buiJywKICAn4bulJyA9PiAn4bukJywKICAn4bunJyA9PiAn4bumJywKICAn4bupJyA9PiAn4buoJywKICAn4burJyA9PiAn4buqJywKICAn4butJyA9PiAn4busJywKICAn4buvJyA9PiAn4buuJywKICAn4buxJyA9PiAn4buwJywKICAn4buzJyA9PiAn4buyJywKICAn4bu1JyA9PiAn4bu0JywKICAn4bu3JyA9PiAn4bu2JywKICAn4bu5JyA9PiAn4bu4JywKICAn4bu7JyA9PiAn4bu6JywKICAn4bu9JyA9PiAn4bu8JywKICAn4bu/JyA9PiAn4bu+JywKICAn4byAJyA9PiAn4byIJywKICAn4byBJyA9PiAn4byJJywKICAn4byCJyA9PiAn4byKJywKICAn4byDJyA9PiAn4byLJywKICAn4byEJyA9PiAn4byMJywKICAn4byFJyA9PiAn4byNJywKICAn4byGJyA9PiAn4byOJywKICAn4byHJyA9PiAn4byPJywKICAn4byQJyA9PiAn4byYJywKICAn4byRJyA9PiAn4byZJywKICAn4bySJyA9PiAn4byaJywKICAn4byTJyA9PiAn4bybJywKICAn4byUJyA9PiAn4bycJywKICAn4byVJyA9PiAn4bydJywKICAn4bygJyA9PiAn4byoJywKICAn4byhJyA9PiAn4bypJywKICAn4byiJyA9PiAn4byqJywKICAn4byjJyA9PiAn4byrJywKICAn4bykJyA9PiAn4bysJywKICAn4bylJyA9PiAn4bytJywKICAn4bymJyA9PiAn4byuJywKICAn4bynJyA9PiAn4byvJywKICAn4bywJyA9PiAn4by4JywKICAn4byxJyA9PiAn4by5JywKICAn4byyJyA9PiAn4by6JywKICAn4byzJyA9PiAn4by7JywKICAn4by0JyA9PiAn4by8JywKICAn4by1JyA9PiAn4by9JywKICAn4by2JyA9PiAn4by+JywKICAn4by3JyA9PiAn4by/JywKICAn4b2AJyA9PiAn4b2IJywKICAn4b2BJyA9PiAn4b2JJywKICAn4b2CJyA9PiAn4b2KJywKICAn4b2DJyA9PiAn4b2LJywKICAn4b2EJyA9PiAn4b2MJywKICAn4b2FJyA9PiAn4b2NJywKICAn4b2RJyA9PiAn4b2ZJywKICAn4b2TJyA9PiAn4b2bJywKICAn4b2VJyA9PiAn4b2dJywKICAn4b2XJyA9PiAn4b2fJywKICAn4b2gJyA9PiAn4b2oJywKICAn4b2hJyA9PiAn4b2pJywKICAn4b2iJyA9PiAn4b2qJywKICAn4b2jJyA9PiAn4b2rJywKICAn4b2kJyA9PiAn4b2sJywKICAn4b2lJyA9PiAn4b2tJywKICAn4b2mJyA9PiAn4b2uJywKICAn4b2nJyA9PiAn4b2vJywKICAn4b2wJyA9PiAn4b66JywKICAn4b2xJyA9PiAn4b67JywKICAn4b2yJyA9PiAn4b+IJywKICAn4b2zJyA9PiAn4b+JJywKICAn4b20JyA9PiAn4b+KJywKICAn4b21JyA9PiAn4b+LJywKICAn4b22JyA9PiAn4b+aJywKICAn4b23JyA9PiAn4b+bJywKICAn4b24JyA9PiAn4b+4JywKICAn4b25JyA9PiAn4b+5JywKICAn4b26JyA9PiAn4b+qJywKICAn4b27JyA9PiAn4b+rJywKICAn4b28JyA9PiAn4b+6JywKICAn4b29JyA9PiAn4b+7JywKICAn4b6AJyA9PiAn4b6IJywKICAn4b6BJyA9PiAn4b6JJywKICAn4b6CJyA9PiAn4b6KJywKICAn4b6DJyA9PiAn4b6LJywKICAn4b6EJyA9PiAn4b6MJywKICAn4b6FJyA9PiAn4b6NJywKICAn4b6GJyA9PiAn4b6OJywKICAn4b6HJyA9PiAn4b6PJywKICAn4b6QJyA9PiAn4b6YJywKICAn4b6RJyA9PiAn4b6ZJywKICAn4b6SJyA9PiAn4b6aJywKICAn4b6TJyA9PiAn4b6bJywKICAn4b6UJyA9PiAn4b6cJywKICAn4b6VJyA9PiAn4b6dJywKICAn4b6WJyA9PiAn4b6eJywKICAn4b6XJyA9PiAn4b6fJywKICAn4b6gJyA9PiAn4b6oJywKICAn4b6hJyA9PiAn4b6pJywKICAn4b6iJyA9PiAn4b6qJywKICAn4b6jJyA9PiAn4b6rJywKICAn4b6kJyA9PiAn4b6sJywKICAn4b6lJyA9PiAn4b6tJywKICAn4b6mJyA9PiAn4b6uJywKICAn4b6nJyA9PiAn4b6vJywKICAn4b6wJyA9PiAn4b64JywKICAn4b6xJyA9PiAn4b65JywKICAn4b6zJyA9PiAn4b68JywKICAn4b6+JyA9PiAnzpknLAogICfhv4MnID0+ICfhv4wnLAogICfhv5AnID0+ICfhv5gnLAogICfhv5EnID0+ICfhv5knLAogICfhv6AnID0+ICfhv6gnLAogICfhv6EnID0+ICfhv6knLAogICfhv6UnID0+ICfhv6wnLAogICfhv7MnID0+ICfhv7wnLAogICfihY4nID0+ICfihLInLAogICfihbAnID0+ICfihaAnLAogICfihbEnID0+ICfihaEnLAogICfihbInID0+ICfihaInLAogICfihbMnID0+ICfihaMnLAogICfihbQnID0+ICfihaQnLAogICfihbUnID0+ICfihaUnLAogICfihbYnID0+ICfihaYnLAogICfihbcnID0+ICfihacnLAogICfihbgnID0+ICfihagnLAogICfihbknID0+ICfihaknLAogICfihbonID0+ICfihaonLAogICfihbsnID0+ICfihasnLAogICfihbwnID0+ICfihawnLAogICfihb0nID0+ICfiha0nLAogICfihb4nID0+ICfiha4nLAogICfihb8nID0+ICfiha8nLAogICfihoQnID0+ICfihoMnLAogICfik5AnID0+ICfikrYnLAogICfik5EnID0+ICfikrcnLAogICfik5InID0+ICfikrgnLAogICfik5MnID0+ICfikrknLAogICfik5QnID0+ICfikronLAogICfik5UnID0+ICfikrsnLAogICfik5YnID0+ICfikrwnLAogICfik5cnID0+ICfikr0nLAogICfik5gnID0+ICfikr4nLAogICfik5knID0+ICfikr8nLAogICfik5onID0+ICfik4AnLAogICfik5snID0+ICfik4EnLAogICfik5wnID0+ICfik4InLAogICfik50nID0+ICfik4MnLAogICfik54nID0+ICfik4QnLAogICfik58nID0+ICfik4UnLAogICfik6AnID0+ICfik4YnLAogICfik6EnID0+ICfik4cnLAogICfik6InID0+ICfik4gnLAogICfik6MnID0+ICfik4knLAogICfik6QnID0+ICfik4onLAogICfik6UnID0+ICfik4snLAogICfik6YnID0+ICfik4wnLAogICfik6cnID0+ICfik40nLAogICfik6gnID0+ICfik44nLAogICfik6knID0+ICfik48nLAogICfisLAnID0+ICfisIAnLAogICfisLEnID0+ICfisIEnLAogICfisLInID0+ICfisIInLAogICfisLMnID0+ICfisIMnLAogICfisLQnID0+ICfisIQnLAogICfisLUnID0+ICfisIUnLAogICfisLYnID0+ICfisIYnLAogICfisLcnID0+ICfisIcnLAogICfisLgnID0+ICfisIgnLAogICfisLknID0+ICfisIknLAogICfisLonID0+ICfisIonLAogICfisLsnID0+ICfisIsnLAogICfisLwnID0+ICfisIwnLAogICfisL0nID0+ICfisI0nLAogICfisL4nID0+ICfisI4nLAogICfisL8nID0+ICfisI8nLAogICfisYAnID0+ICfisJAnLAogICfisYEnID0+ICfisJEnLAogICfisYInID0+ICfisJInLAogICfisYMnID0+ICfisJMnLAogICfisYQnID0+ICfisJQnLAogICfisYUnID0+ICfisJUnLAogICfisYYnID0+ICfisJYnLAogICfisYcnID0+ICfisJcnLAogICfisYgnID0+ICfisJgnLAogICfisYknID0+ICfisJknLAogICfisYonID0+ICfisJonLAogICfisYsnID0+ICfisJsnLAogICfisYwnID0+ICfisJwnLAogICfisY0nID0+ICfisJ0nLAogICfisY4nID0+ICfisJ4nLAogICfisY8nID0+ICfisJ8nLAogICfisZAnID0+ICfisKAnLAogICfisZEnID0+ICfisKEnLAogICfisZInID0+ICfisKInLAogICfisZMnID0+ICfisKMnLAogICfisZQnID0+ICfisKQnLAogICfisZUnID0+ICfisKUnLAogICfisZYnID0+ICfisKYnLAogICfisZcnID0+ICfisKcnLAogICfisZgnID0+ICfisKgnLAogICfisZknID0+ICfisKknLAogICfisZonID0+ICfisKonLAogICfisZsnID0+ICfisKsnLAogICfisZwnID0+ICfisKwnLAogICfisZ0nID0+ICfisK0nLAogICfisZ4nID0+ICfisK4nLAogICfisaEnID0+ICfisaAnLAogICfisaUnID0+ICfIuicsCiAgJ+KxpicgPT4gJ8i+JywKICAn4rGoJyA9PiAn4rGnJywKICAn4rGqJyA9PiAn4rGpJywKICAn4rGsJyA9PiAn4rGrJywKICAn4rGzJyA9PiAn4rGyJywKICAn4rG2JyA9PiAn4rG1JywKICAn4rKBJyA9PiAn4rKAJywKICAn4rKDJyA9PiAn4rKCJywKICAn4rKFJyA9PiAn4rKEJywKICAn4rKHJyA9PiAn4rKGJywKICAn4rKJJyA9PiAn4rKIJywKICAn4rKLJyA9PiAn4rKKJywKICAn4rKNJyA9PiAn4rKMJywKICAn4rKPJyA9PiAn4rKOJywKICAn4rKRJyA9PiAn4rKQJywKICAn4rKTJyA9PiAn4rKSJywKICAn4rKVJyA9PiAn4rKUJywKICAn4rKXJyA9PiAn4rKWJywKICAn4rKZJyA9PiAn4rKYJywKICAn4rKbJyA9PiAn4rKaJywKICAn4rKdJyA9PiAn4rKcJywKICAn4rKfJyA9PiAn4rKeJywKICAn4rKhJyA9PiAn4rKgJywKICAn4rKjJyA9PiAn4rKiJywKICAn4rKlJyA9PiAn4rKkJywKICAn4rKnJyA9PiAn4rKmJywKICAn4rKpJyA9PiAn4rKoJywKICAn4rKrJyA9PiAn4rKqJywKICAn4rKtJyA9PiAn4rKsJywKICAn4rKvJyA9PiAn4rKuJywKICAn4rKxJyA9PiAn4rKwJywKICAn4rKzJyA9PiAn4rKyJywKICAn4rK1JyA9PiAn4rK0JywKICAn4rK3JyA9PiAn4rK2JywKICAn4rK5JyA9PiAn4rK4JywKICAn4rK7JyA9PiAn4rK6JywKICAn4rK9JyA9PiAn4rK8JywKICAn4rK/JyA9PiAn4rK+JywKICAn4rOBJyA9PiAn4rOAJywKICAn4rODJyA9PiAn4rOCJywKICAn4rOFJyA9PiAn4rOEJywKICAn4rOHJyA9PiAn4rOGJywKICAn4rOJJyA9PiAn4rOIJywKICAn4rOLJyA9PiAn4rOKJywKICAn4rONJyA9PiAn4rOMJywKICAn4rOPJyA9PiAn4rOOJywKICAn4rORJyA9PiAn4rOQJywKICAn4rOTJyA9PiAn4rOSJywKICAn4rOVJyA9PiAn4rOUJywKICAn4rOXJyA9PiAn4rOWJywKICAn4rOZJyA9PiAn4rOYJywKICAn4rObJyA9PiAn4rOaJywKICAn4rOdJyA9PiAn4rOcJywKICAn4rOfJyA9PiAn4rOeJywKICAn4rOhJyA9PiAn4rOgJywKICAn4rOjJyA9PiAn4rOiJywKICAn4rOsJyA9PiAn4rOrJywKICAn4rOuJyA9PiAn4rOtJywKICAn4rOzJyA9PiAn4rOyJywKICAn4rSAJyA9PiAn4YKgJywKICAn4rSBJyA9PiAn4YKhJywKICAn4rSCJyA9PiAn4YKiJywKICAn4rSDJyA9PiAn4YKjJywKICAn4rSEJyA9PiAn4YKkJywKICAn4rSFJyA9PiAn4YKlJywKICAn4rSGJyA9PiAn4YKmJywKICAn4rSHJyA9PiAn4YKnJywKICAn4rSIJyA9PiAn4YKoJywKICAn4rSJJyA9PiAn4YKpJywKICAn4rSKJyA9PiAn4YKqJywKICAn4rSLJyA9PiAn4YKrJywKICAn4rSMJyA9PiAn4YKsJywKICAn4rSNJyA9PiAn4YKtJywKICAn4rSOJyA9PiAn4YKuJywKICAn4rSPJyA9PiAn4YKvJywKICAn4rSQJyA9PiAn4YKwJywKICAn4rSRJyA9PiAn4YKxJywKICAn4rSSJyA9PiAn4YKyJywKICAn4rSTJyA9PiAn4YKzJywKICAn4rSUJyA9PiAn4YK0JywKICAn4rSVJyA9PiAn4YK1JywKICAn4rSWJyA9PiAn4YK2JywKICAn4rSXJyA9PiAn4YK3JywKICAn4rSYJyA9PiAn4YK4JywKICAn4rSZJyA9PiAn4YK5JywKICAn4rSaJyA9PiAn4YK6JywKICAn4rSbJyA9PiAn4YK7JywKICAn4rScJyA9PiAn4YK8JywKICAn4rSdJyA9PiAn4YK9JywKICAn4rSeJyA9PiAn4YK+JywKICAn4rSfJyA9PiAn4YK/JywKICAn4rSgJyA9PiAn4YOAJywKICAn4rShJyA9PiAn4YOBJywKICAn4rSiJyA9PiAn4YOCJywKICAn4rSjJyA9PiAn4YODJywKICAn4rSkJyA9PiAn4YOEJywKICAn4rSlJyA9PiAn4YOFJywKICAn4rSnJyA9PiAn4YOHJywKICAn4rStJyA9PiAn4YONJywKICAn6pmBJyA9PiAn6pmAJywKICAn6pmDJyA9PiAn6pmCJywKICAn6pmFJyA9PiAn6pmEJywKICAn6pmHJyA9PiAn6pmGJywKICAn6pmJJyA9PiAn6pmIJywKICAn6pmLJyA9PiAn6pmKJywKICAn6pmNJyA9PiAn6pmMJywKICAn6pmPJyA9PiAn6pmOJywKICAn6pmRJyA9PiAn6pmQJywKICAn6pmTJyA9PiAn6pmSJywKICAn6pmVJyA9PiAn6pmUJywKICAn6pmXJyA9PiAn6pmWJywKICAn6pmZJyA9PiAn6pmYJywKICAn6pmbJyA9PiAn6pmaJywKICAn6pmdJyA9PiAn6pmcJywKICAn6pmfJyA9PiAn6pmeJywKICAn6pmhJyA9PiAn6pmgJywKICAn6pmjJyA9PiAn6pmiJywKICAn6pmlJyA9PiAn6pmkJywKICAn6pmnJyA9PiAn6pmmJywKICAn6pmpJyA9PiAn6pmoJywKICAn6pmrJyA9PiAn6pmqJywKICAn6pmtJyA9PiAn6pmsJywKICAn6pqBJyA9PiAn6pqAJywKICAn6pqDJyA9PiAn6pqCJywKICAn6pqFJyA9PiAn6pqEJywKICAn6pqHJyA9PiAn6pqGJywKICAn6pqJJyA9PiAn6pqIJywKICAn6pqLJyA9PiAn6pqKJywKICAn6pqNJyA9PiAn6pqMJywKICAn6pqPJyA9PiAn6pqOJywKICAn6pqRJyA9PiAn6pqQJywKICAn6pqTJyA9PiAn6pqSJywKICAn6pqVJyA9PiAn6pqUJywKICAn6pqXJyA9PiAn6pqWJywKICAn6pqZJyA9PiAn6pqYJywKICAn6pqbJyA9PiAn6pqaJywKICAn6pyjJyA9PiAn6pyiJywKICAn6pylJyA9PiAn6pykJywKICAn6pynJyA9PiAn6pymJywKICAn6pypJyA9PiAn6pyoJywKICAn6pyrJyA9PiAn6pyqJywKICAn6pytJyA9PiAn6pysJywKICAn6pyvJyA9PiAn6pyuJywKICAn6pyzJyA9PiAn6pyyJywKICAn6py1JyA9PiAn6py0JywKICAn6py3JyA9PiAn6py2JywKICAn6py5JyA9PiAn6py4JywKICAn6py7JyA9PiAn6py6JywKICAn6py9JyA9PiAn6py8JywKICAn6py/JyA9PiAn6py+JywKICAn6p2BJyA9PiAn6p2AJywKICAn6p2DJyA9PiAn6p2CJywKICAn6p2FJyA9PiAn6p2EJywKICAn6p2HJyA9PiAn6p2GJywKICAn6p2JJyA9PiAn6p2IJywKICAn6p2LJyA9PiAn6p2KJywKICAn6p2NJyA9PiAn6p2MJywKICAn6p2PJyA9PiAn6p2OJywKICAn6p2RJyA9PiAn6p2QJywKICAn6p2TJyA9PiAn6p2SJywKICAn6p2VJyA9PiAn6p2UJywKICAn6p2XJyA9PiAn6p2WJywKICAn6p2ZJyA9PiAn6p2YJywKICAn6p2bJyA9PiAn6p2aJywKICAn6p2dJyA9PiAn6p2cJywKICAn6p2fJyA9PiAn6p2eJywKICAn6p2hJyA9PiAn6p2gJywKICAn6p2jJyA9PiAn6p2iJywKICAn6p2lJyA9PiAn6p2kJywKICAn6p2nJyA9PiAn6p2mJywKICAn6p2pJyA9PiAn6p2oJywKICAn6p2rJyA9PiAn6p2qJywKICAn6p2tJyA9PiAn6p2sJywKICAn6p2vJyA9PiAn6p2uJywKICAn6p26JyA9PiAn6p25JywKICAn6p28JyA9PiAn6p27JywKICAn6p2/JyA9PiAn6p2+JywKICAn6p6BJyA9PiAn6p6AJywKICAn6p6DJyA9PiAn6p6CJywKICAn6p6FJyA9PiAn6p6EJywKICAn6p6HJyA9PiAn6p6GJywKICAn6p6MJyA9PiAn6p6LJywKICAn6p6RJyA9PiAn6p6QJywKICAn6p6TJyA9PiAn6p6SJywKICAn6p6XJyA9PiAn6p6WJywKICAn6p6ZJyA9PiAn6p6YJywKICAn6p6bJyA9PiAn6p6aJywKICAn6p6dJyA9PiAn6p6cJywKICAn6p6fJyA9PiAn6p6eJywKICAn6p6hJyA9PiAn6p6gJywKICAn6p6jJyA9PiAn6p6iJywKICAn6p6lJyA9PiAn6p6kJywKICAn6p6nJyA9PiAn6p6mJywKICAn6p6pJyA9PiAn6p6oJywKICAn772BJyA9PiAn77yhJywKICAn772CJyA9PiAn77yiJywKICAn772DJyA9PiAn77yjJywKICAn772EJyA9PiAn77ykJywKICAn772FJyA9PiAn77ylJywKICAn772GJyA9PiAn77ymJywKICAn772HJyA9PiAn77ynJywKICAn772IJyA9PiAn77yoJywKICAn772JJyA9PiAn77ypJywKICAn772KJyA9PiAn77yqJywKICAn772LJyA9PiAn77yrJywKICAn772MJyA9PiAn77ysJywKICAn772NJyA9PiAn77ytJywKICAn772OJyA9PiAn77yuJywKICAn772PJyA9PiAn77yvJywKICAn772QJyA9PiAn77ywJywKICAn772RJyA9PiAn77yxJywKICAn772SJyA9PiAn77yyJywKICAn772TJyA9PiAn77yzJywKICAn772UJyA9PiAn77y0JywKICAn772VJyA9PiAn77y1JywKICAn772WJyA9PiAn77y2JywKICAn772XJyA9PiAn77y3JywKICAn772YJyA9PiAn77y4JywKICAn772ZJyA9PiAn77y5JywKICAn772aJyA9PiAn77y6JywKICAn8JCQqCcgPT4gJ/CQkIAnLAogICfwkJCpJyA9PiAn8JCQgScsCiAgJ/CQkKonID0+ICfwkJCCJywKICAn8JCQqycgPT4gJ/CQkIMnLAogICfwkJCsJyA9PiAn8JCQhCcsCiAgJ/CQkK0nID0+ICfwkJCFJywKICAn8JCQricgPT4gJ/CQkIYnLAogICfwkJCvJyA9PiAn8JCQhycsCiAgJ/CQkLAnID0+ICfwkJCIJywKICAn8JCQsScgPT4gJ/CQkIknLAogICfwkJCyJyA9PiAn8JCQiicsCiAgJ/CQkLMnID0+ICfwkJCLJywKICAn8JCQtCcgPT4gJ/CQkIwnLAogICfwkJC1JyA9PiAn8JCQjScsCiAgJ/CQkLYnID0+ICfwkJCOJywKICAn8JCQtycgPT4gJ/CQkI8nLAogICfwkJC4JyA9PiAn8JCQkCcsCiAgJ/CQkLknID0+ICfwkJCRJywKICAn8JCQuicgPT4gJ/CQkJInLAogICfwkJC7JyA9PiAn8JCQkycsCiAgJ/CQkLwnID0+ICfwkJCUJywKICAn8JCQvScgPT4gJ/CQkJUnLAogICfwkJC+JyA9PiAn8JCQlicsCiAgJ/CQkL8nID0+ICfwkJCXJywKICAn8JCRgCcgPT4gJ/CQkJgnLAogICfwkJGBJyA9PiAn8JCQmScsCiAgJ/CQkYInID0+ICfwkJCaJywKICAn8JCRgycgPT4gJ/CQkJsnLAogICfwkJGEJyA9PiAn8JCQnCcsCiAgJ/CQkYUnID0+ICfwkJCdJywKICAn8JCRhicgPT4gJ/CQkJ4nLAogICfwkJGHJyA9PiAn8JCQnycsCiAgJ/CQkYgnID0+ICfwkJCgJywKICAn8JCRiScgPT4gJ/CQkKEnLAogICfwkJGKJyA9PiAn8JCQoicsCiAgJ/CQkYsnID0+ICfwkJCjJywKICAn8JCRjCcgPT4gJ/CQkKQnLAogICfwkJGNJyA9PiAn8JCQpScsCiAgJ/CQkY4nID0+ICfwkJCmJywKICAn8JCRjycgPT4gJ/CQkKcnLAogICfwkaOAJyA9PiAn8JGioCcsCiAgJ/CRo4EnID0+ICfwkaKhJywKICAn8JGjgicgPT4gJ/CRoqInLAogICfwkaODJyA9PiAn8JGioycsCiAgJ/CRo4QnID0+ICfwkaKkJywKICAn8JGjhScgPT4gJ/CRoqUnLAogICfwkaOGJyA9PiAn8JGipicsCiAgJ/CRo4cnID0+ICfwkaKnJywKICAn8JGjiCcgPT4gJ/CRoqgnLAogICfwkaOJJyA9PiAn8JGiqScsCiAgJ/CRo4onID0+ICfwkaKqJywKICAn8JGjiycgPT4gJ/CRoqsnLAogICfwkaOMJyA9PiAn8JGirCcsCiAgJ/CRo40nID0+ICfwkaKtJywKICAn8JGjjicgPT4gJ/CRoq4nLAogICfwkaOPJyA9PiAn8JGirycsCiAgJ/CRo5AnID0+ICfwkaKwJywKICAn8JGjkScgPT4gJ/CRorEnLAogICfwkaOSJyA9PiAn8JGisicsCiAgJ/CRo5MnID0+ICfwkaKzJywKICAn8JGjlCcgPT4gJ/CRorQnLAogICfwkaOVJyA9PiAn8JGitScsCiAgJ/CRo5YnID0+ICfwkaK2JywKICAn8JGjlycgPT4gJ/CRorcnLAogICfwkaOYJyA9PiAn8JGiuCcsCiAgJ/CRo5knID0+ICfwkaK5JywKICAn8JGjmicgPT4gJ/CRoronLAogICfwkaObJyA9PiAn8JGiuycsCiAgJ/CRo5wnID0+ICfwkaK8JywKICAn8JGjnScgPT4gJ/CRor0nLAogICfwkaOeJyA9PiAn8JGivicsCiAgJ/CRo58nID0+ICfwkaK/JywKKTsKCiRyZXN1bHQgPSYgJGRhdGE7CnVuc2V0KCRkYXRhKTsKCnJldHVybiAkcmVzdWx0Owo=AppDevTools/query/vendor/symfony/polyfill-mbstring/bootstrap.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCnVzZSBTeW1mb255XFBvbHlmaWxsXE1ic3RyaW5nIGFzIHA7CgppZiAoIWZ1bmN0aW9uX2V4aXN0cygnbWJfc3RybGVuJykpIHsKICAgIGRlZmluZSgnTUJfQ0FTRV9VUFBFUicsIDApOwogICAgZGVmaW5lKCdNQl9DQVNFX0xPV0VSJywgMSk7CiAgICBkZWZpbmUoJ01CX0NBU0VfVElUTEUnLCAyKTsKCiAgICBmdW5jdGlvbiBtYl9jb252ZXJ0X2VuY29kaW5nKCRzLCAkdG8sICRmcm9tID0gbnVsbCkgeyByZXR1cm4gcFxNYnN0cmluZzo6bWJfY29udmVydF9lbmNvZGluZygkcywgJHRvLCAkZnJvbSk7IH0KICAgIGZ1bmN0aW9uIG1iX2RlY29kZV9taW1laGVhZGVyKCRzKSB7IHJldHVybiBwXE1ic3RyaW5nOjptYl9kZWNvZGVfbWltZWhlYWRlcigkcyk7IH0KICAgIGZ1bmN0aW9uIG1iX2VuY29kZV9taW1laGVhZGVyKCRzLCAkY2hhcnNldCA9IG51bGwsICR0cmFuc2ZlckVuYyA9IG51bGwsICRsZiA9IG51bGwsICRpbmRlbnQgPSBudWxsKSB7IHJldHVybiBwXE1ic3RyaW5nOjptYl9lbmNvZGVfbWltZWhlYWRlcigkcywgJGNoYXJzZXQsICR0cmFuc2ZlckVuYywgJGxmLCAkaW5kZW50KTsgfQogICAgZnVuY3Rpb24gbWJfZGVjb2RlX251bWVyaWNlbnRpdHkoJHMsICRjb252bWFwLCAkZW5jID0gbnVsbCkgeyByZXR1cm4gcFxNYnN0cmluZzo6bWJfZGVjb2RlX251bWVyaWNlbnRpdHkoJHMsICRjb252bWFwLCAkZW5jKTsgfQogICAgZnVuY3Rpb24gbWJfZW5jb2RlX251bWVyaWNlbnRpdHkoJHMsICRjb252bWFwLCAkZW5jID0gbnVsbCwgJGlzX2hleCA9IGZhbHNlKSB7IHJldHVybiBwXE1ic3RyaW5nOjptYl9lbmNvZGVfbnVtZXJpY2VudGl0eSgkcywgJGNvbnZtYXAsICRlbmMsICRpc19oZXgpOyB9CiAgICBmdW5jdGlvbiBtYl9jb252ZXJ0X2Nhc2UoJHMsICRtb2RlLCAkZW5jID0gbnVsbCkgeyByZXR1cm4gcFxNYnN0cmluZzo6bWJfY29udmVydF9jYXNlKCRzLCAkbW9kZSwgJGVuYyk7IH0KICAgIGZ1bmN0aW9uIG1iX2ludGVybmFsX2VuY29kaW5nKCRlbmMgPSBudWxsKSB7IHJldHVybiBwXE1ic3RyaW5nOjptYl9pbnRlcm5hbF9lbmNvZGluZygkZW5jKTsgfQogICAgZnVuY3Rpb24gbWJfbGFuZ3VhZ2UoJGxhbmcgPSBudWxsKSB7IHJldHVybiBwXE1ic3RyaW5nOjptYl9sYW5ndWFnZSgkbGFuZyk7IH0KICAgIGZ1bmN0aW9uIG1iX2xpc3RfZW5jb2RpbmdzKCkgeyByZXR1cm4gcFxNYnN0cmluZzo6bWJfbGlzdF9lbmNvZGluZ3MoKTsgfQogICAgZnVuY3Rpb24gbWJfZW5jb2RpbmdfYWxpYXNlcygkZW5jb2RpbmcpIHsgcmV0dXJuIHBcTWJzdHJpbmc6Om1iX2VuY29kaW5nX2FsaWFzZXMoJGVuY29kaW5nKTsgfQogICAgZnVuY3Rpb24gbWJfY2hlY2tfZW5jb2RpbmcoJHZhciA9IG51bGwsICRlbmNvZGluZyA9IG51bGwpIHsgcmV0dXJuIHBcTWJzdHJpbmc6Om1iX2NoZWNrX2VuY29kaW5nKCR2YXIsICRlbmNvZGluZyk7IH0KICAgIGZ1bmN0aW9uIG1iX2RldGVjdF9lbmNvZGluZygkc3RyLCAkZW5jb2RpbmdMaXN0ID0gbnVsbCwgJHN0cmljdCA9IGZhbHNlKSB7IHJldHVybiBwXE1ic3RyaW5nOjptYl9kZXRlY3RfZW5jb2RpbmcoJHN0ciwgJGVuY29kaW5nTGlzdCwgJHN0cmljdCk7IH0KICAgIGZ1bmN0aW9uIG1iX2RldGVjdF9vcmRlcigkZW5jb2RpbmdMaXN0ID0gbnVsbCkgeyByZXR1cm4gcFxNYnN0cmluZzo6bWJfZGV0ZWN0X29yZGVyKCRlbmNvZGluZ0xpc3QpOyB9CiAgICBmdW5jdGlvbiBtYl9wYXJzZV9zdHIoJHMsICYkcmVzdWx0ID0gYXJyYXkoKSkgeyBwYXJzZV9zdHIoJHMsICRyZXN1bHQpOyB9CiAgICBmdW5jdGlvbiBtYl9zdHJsZW4oJHMsICRlbmMgPSBudWxsKSB7IHJldHVybiBwXE1ic3RyaW5nOjptYl9zdHJsZW4oJHMsICRlbmMpOyB9CiAgICBmdW5jdGlvbiBtYl9zdHJwb3MoJHMsICRuZWVkbGUsICRvZmZzZXQgPSAwLCAkZW5jID0gbnVsbCkgeyByZXR1cm4gcFxNYnN0cmluZzo6bWJfc3RycG9zKCRzLCAkbmVlZGxlLCAkb2Zmc2V0LCAkZW5jKTsgfQogICAgZnVuY3Rpb24gbWJfc3RydG9sb3dlcigkcywgJGVuYyA9IG51bGwpIHsgcmV0dXJuIHBcTWJzdHJpbmc6Om1iX3N0cnRvbG93ZXIoJHMsICRlbmMpOyB9CiAgICBmdW5jdGlvbiBtYl9zdHJ0b3VwcGVyKCRzLCAkZW5jID0gbnVsbCkgeyByZXR1cm4gcFxNYnN0cmluZzo6bWJfc3RydG91cHBlcigkcywgJGVuYyk7IH0KICAgIGZ1bmN0aW9uIG1iX3N1YnN0aXR1dGVfY2hhcmFjdGVyKCRjaGFyID0gbnVsbCkgeyByZXR1cm4gcFxNYnN0cmluZzo6bWJfc3Vic3RpdHV0ZV9jaGFyYWN0ZXIoJGNoYXIpOyB9CiAgICBmdW5jdGlvbiBtYl9zdWJzdHIoJHMsICRzdGFydCwgJGxlbmd0aCA9IDIxNDc0ODM2NDcsICRlbmMgPSBudWxsKSB7IHJldHVybiBwXE1ic3RyaW5nOjptYl9zdWJzdHIoJHMsICRzdGFydCwgJGxlbmd0aCwgJGVuYyk7IH0KICAgIGZ1bmN0aW9uIG1iX3N0cmlwb3MoJHMsICRuZWVkbGUsICRvZmZzZXQgPSAwLCAkZW5jID0gbnVsbCkgeyByZXR1cm4gcFxNYnN0cmluZzo6bWJfc3RyaXBvcygkcywgJG5lZWRsZSwgJG9mZnNldCwgJGVuYyk7IH0KICAgIGZ1bmN0aW9uIG1iX3N0cmlzdHIoJHMsICRuZWVkbGUsICRwYXJ0ID0gZmFsc2UsICRlbmMgPSBudWxsKSB7IHJldHVybiBwXE1ic3RyaW5nOjptYl9zdHJpc3RyKCRzLCAkbmVlZGxlLCAkcGFydCwgJGVuYyk7IH0KICAgIGZ1bmN0aW9uIG1iX3N0cnJjaHIoJHMsICRuZWVkbGUsICRwYXJ0ID0gZmFsc2UsICRlbmMgPSBudWxsKSB7IHJldHVybiBwXE1ic3RyaW5nOjptYl9zdHJyY2hyKCRzLCAkbmVlZGxlLCAkcGFydCwgJGVuYyk7IH0KICAgIGZ1bmN0aW9uIG1iX3N0cnJpY2hyKCRzLCAkbmVlZGxlLCAkcGFydCA9IGZhbHNlLCAkZW5jID0gbnVsbCkgeyByZXR1cm4gcFxNYnN0cmluZzo6bWJfc3RycmljaHIoJHMsICRuZWVkbGUsICRwYXJ0LCAkZW5jKTsgfQogICAgZnVuY3Rpb24gbWJfc3Rycmlwb3MoJHMsICRuZWVkbGUsICRvZmZzZXQgPSAwLCAkZW5jID0gbnVsbCkgeyByZXR1cm4gcFxNYnN0cmluZzo6bWJfc3Rycmlwb3MoJHMsICRuZWVkbGUsICRvZmZzZXQsICRlbmMpOyB9CiAgICBmdW5jdGlvbiBtYl9zdHJycG9zKCRzLCAkbmVlZGxlLCAkb2Zmc2V0ID0gMCwgJGVuYyA9IG51bGwpIHsgcmV0dXJuIHBcTWJzdHJpbmc6Om1iX3N0cnJwb3MoJHMsICRuZWVkbGUsICRvZmZzZXQsICRlbmMpOyB9CiAgICBmdW5jdGlvbiBtYl9zdHJzdHIoJHMsICRuZWVkbGUsICRwYXJ0ID0gZmFsc2UsICRlbmMgPSBudWxsKSB7IHJldHVybiBwXE1ic3RyaW5nOjptYl9zdHJzdHIoJHMsICRuZWVkbGUsICRwYXJ0LCAkZW5jKTsgfQogICAgZnVuY3Rpb24gbWJfZ2V0X2luZm8oJHR5cGUgPSAnYWxsJykgeyByZXR1cm4gcFxNYnN0cmluZzo6bWJfZ2V0X2luZm8oJHR5cGUpOyB9CiAgICBmdW5jdGlvbiBtYl9odHRwX291dHB1dCgkZW5jID0gbnVsbCkgeyByZXR1cm4gcFxNYnN0cmluZzo6bWJfaHR0cF9vdXRwdXQoJGVuYyk7IH0KICAgIGZ1bmN0aW9uIG1iX3N0cndpZHRoKCRzLCAkZW5jID0gbnVsbCkgeyByZXR1cm4gcFxNYnN0cmluZzo6bWJfc3Ryd2lkdGgoJHMsICRlbmMpOyB9CiAgICBmdW5jdGlvbiBtYl9zdWJzdHJfY291bnQoJGhheXN0YWNrLCAkbmVlZGxlLCAkZW5jID0gbnVsbCkgeyByZXR1cm4gcFxNYnN0cmluZzo6bWJfc3Vic3RyX2NvdW50KCRoYXlzdGFjaywgJG5lZWRsZSwgJGVuYyk7IH0KICAgIGZ1bmN0aW9uIG1iX291dHB1dF9oYW5kbGVyKCRjb250ZW50cywgJHN0YXR1cykgeyByZXR1cm4gcFxNYnN0cmluZzo6bWJfb3V0cHV0X2hhbmRsZXIoJGNvbnRlbnRzLCAkc3RhdHVzKTsgfQogICAgZnVuY3Rpb24gbWJfaHR0cF9pbnB1dCgkdHlwZSA9ICcnKSB7IHJldHVybiBwXE1ic3RyaW5nOjptYl9odHRwX2lucHV0KCR0eXBlKTsgfQogICAgZnVuY3Rpb24gbWJfY29udmVydF92YXJpYWJsZXMoJHRvRW5jb2RpbmcsICRmcm9tRW5jb2RpbmcsICYkYSA9IG51bGwsICYkYiA9IG51bGwsICYkYyA9IG51bGwsICYkZCA9IG51bGwsICYkZSA9IG51bGwsICYkZiA9IG51bGwpIHsgcmV0dXJuIHBcTWJzdHJpbmc6Om1iX2NvbnZlcnRfdmFyaWFibGVzKCR0b0VuY29kaW5nLCAkZnJvbUVuY29kaW5nLCAkYSwgJGIsICRjLCAkZCwgJGUsICRmKTsgfQp9CmlmICghZnVuY3Rpb25fZXhpc3RzKCdtYl9jaHInKSkgewogICAgZnVuY3Rpb24gbWJfb3JkKCRzLCAkZW5jID0gbnVsbCkgeyByZXR1cm4gcFxNYnN0cmluZzo6bWJfb3JkKCRzLCAkZW5jKTsgfQogICAgZnVuY3Rpb24gbWJfY2hyKCRjb2RlLCAkZW5jID0gbnVsbCkgeyByZXR1cm4gcFxNYnN0cmluZzo6bWJfY2hyKCRjb2RlLCAkZW5jKTsgfQogICAgZnVuY3Rpb24gbWJfc2NydWIoJHMsICRlbmMgPSBudWxsKSB7ICRlbmMgPSBudWxsID09PSAkZW5jID8gbWJfaW50ZXJuYWxfZW5jb2RpbmcoKSA6ICRlbmM7IHJldHVybiBtYl9jb252ZXJ0X2VuY29kaW5nKCRzLCAkZW5jLCAkZW5jKTsgfQp9Cg==AppDevTools/query/vendor/symfony/polyfill-mbstring/composer.jsonewogICAgIm5hbWUiOiAic3ltZm9ueS9wb2x5ZmlsbC1tYnN0cmluZyIsCiAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICJkZXNjcmlwdGlvbiI6ICJTeW1mb255IHBvbHlmaWxsIGZvciB0aGUgTWJzdHJpbmcgZXh0ZW5zaW9uIiwKICAgICJrZXl3b3JkcyI6IFsicG9seWZpbGwiLCAic2hpbSIsICJjb21wYXRpYmlsaXR5IiwgInBvcnRhYmxlIiwgIm1ic3RyaW5nIl0sCiAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9zeW1mb255LmNvbSIsCiAgICAibGljZW5zZSI6ICJNSVQiLAogICAgImF1dGhvcnMiOiBbCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJOaWNvbGFzIEdyZWthcyIsCiAgICAgICAgICAgICJlbWFpbCI6ICJwQHRjaHdvcmsuY29tIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJTeW1mb255IENvbW11bml0eSIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL3N5bWZvbnkuY29tL2NvbnRyaWJ1dG9ycyIKICAgICAgICB9CiAgICBdLAogICAgInJlcXVpcmUiOiB7CiAgICAgICAgInBocCI6ICI+PTUuMy4zIgogICAgfSwKICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAicHNyLTQiOiB7ICJTeW1mb255XFxQb2x5ZmlsbFxcTWJzdHJpbmdcXCI6ICIiIH0sCiAgICAgICAgImZpbGVzIjogWyAiYm9vdHN0cmFwLnBocCIgXQogICAgfSwKICAgICJzdWdnZXN0IjogewogICAgICAgICJleHQtbWJzdHJpbmciOiAiRm9yIGJlc3QgcGVyZm9ybWFuY2UiCiAgICB9LAogICAgIm1pbmltdW0tc3RhYmlsaXR5IjogImRldiIsCiAgICAiZXh0cmEiOiB7CiAgICAgICAgImJyYW5jaC1hbGlhcyI6IHsKICAgICAgICAgICAgImRldi1tYXN0ZXIiOiAiMS44LWRldiIKICAgICAgICB9CiAgICB9Cn0KAppDevTools/query/vendor/symfony/polyfill-php72/LICENSEQ29weXJpZ2h0IChjKSAyMDE1LTIwMTggRmFiaWVuIFBvdGVuY2llcgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZAp0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOClRIRSBTT0ZUV0FSRS4KAppDevTools/query/vendor/symfony/polyfill-php72/Php72.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XFBvbHlmaWxsXFBocDcyOwoKLyoqCiAqIEBhdXRob3IgTmljb2xhcyBHcmVrYXMgPHBAdGNod29yay5jb20+CiAqIEBhdXRob3IgRGFyaXVzeiBSdW1pxYRza2kgPGRhcml1c3oucnVtaW5za2lAZ21haWwuY29tPgogKgogKiBAaW50ZXJuYWwKICovCmZpbmFsIGNsYXNzIFBocDcyCnsKICAgIHByaXZhdGUgc3RhdGljICRoYXNoTWFzazsKCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHV0ZjhfZW5jb2RlKCRzKQogICAgewogICAgICAgICRzIC49ICRzOwogICAgICAgICRsZW4gPSBcc3RybGVuKCRzKTsKCiAgICAgICAgZm9yICgkaSA9ICRsZW4gPj4gMSwgJGogPSAwOyAkaSA8ICRsZW47ICsrJGksICsrJGopIHsKICAgICAgICAgICAgc3dpdGNoICh0cnVlKSB7CiAgICAgICAgICAgICAgICBjYXNlICRzWyRpXSA8ICJceDgwIjogJHNbJGpdID0gJHNbJGldOyBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJHNbJGldIDwgIlx4QzAiOiAkc1skal0gPSAiXHhDMiI7ICRzWysrJGpdID0gJHNbJGldOyBicmVhazsKICAgICAgICAgICAgICAgIGRlZmF1bHQ6ICRzWyRqXSA9ICJceEMzIjsgJHNbKyskal0gPSBcY2hyKFxvcmQoJHNbJGldKSAtIDY0KTsgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBzdWJzdHIoJHMsIDAsICRqKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHV0ZjhfZGVjb2RlKCRzKQogICAgewogICAgICAgICRzID0gKHN0cmluZykgJHM7CiAgICAgICAgJGxlbiA9IFxzdHJsZW4oJHMpOwoKICAgICAgICBmb3IgKCRpID0gMCwgJGogPSAwOyAkaSA8ICRsZW47ICsrJGksICsrJGopIHsKICAgICAgICAgICAgc3dpdGNoICgkc1skaV0gJiAiXHhGMCIpIHsKICAgICAgICAgICAgICAgIGNhc2UgIlx4QzAiOgogICAgICAgICAgICAgICAgY2FzZSAiXHhEMCI6CiAgICAgICAgICAgICAgICAgICAgJGMgPSAoXG9yZCgkc1skaV0gJiAiXHgxRiIpIDw8IDYpIHwgXG9yZCgkc1srKyRpXSAmICJceDNGIik7CiAgICAgICAgICAgICAgICAgICAgJHNbJGpdID0gJGMgPCAyNTYgPyBcY2hyKCRjKSA6ICc/JzsKICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlICJceEYwIjogKyskaTsKICAgICAgICAgICAgICAgIGNhc2UgIlx4RTAiOgogICAgICAgICAgICAgICAgICAgICRzWyRqXSA9ICc/JzsKICAgICAgICAgICAgICAgICAgICAkaSArPSAyOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgJHNbJGpdID0gJHNbJGldOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gc3Vic3RyKCRzLCAwLCAkaik7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwaHBfb3NfZmFtaWx5KCkKICAgIHsKICAgICAgICBpZiAoJ1xcJyA9PT0gRElSRUNUT1JZX1NFUEFSQVRPUikgewogICAgICAgICAgICByZXR1cm4gJ1dpbmRvd3MnOwogICAgICAgIH0KCiAgICAgICAgJG1hcCA9IGFycmF5KAogICAgICAgICAgICAnRGFyd2luJyA9PiAnRGFyd2luJywKICAgICAgICAgICAgJ0RyYWdvbkZseScgPT4gJ0JTRCcsCiAgICAgICAgICAgICdGcmVlQlNEJyA9PiAnQlNEJywKICAgICAgICAgICAgJ05ldEJTRCcgPT4gJ0JTRCcsCiAgICAgICAgICAgICdPcGVuQlNEJyA9PiAnQlNEJywKICAgICAgICAgICAgJ0xpbnV4JyA9PiAnTGludXgnLAogICAgICAgICAgICAnU3VuT1MnID0+ICdTb2xhcmlzJywKICAgICAgICApOwoKICAgICAgICByZXR1cm4gaXNzZXQoJG1hcFtQSFBfT1NdKSA/ICRtYXBbUEhQX09TXSA6ICdVbmtub3duJzsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNwbF9vYmplY3RfaWQoJG9iamVjdCkKICAgIHsKICAgICAgICBpZiAobnVsbCA9PT0gc2VsZjo6JGhhc2hNYXNrKSB7CiAgICAgICAgICAgIHNlbGY6OmluaXRIYXNoTWFzaygpOwogICAgICAgIH0KICAgICAgICBpZiAobnVsbCA9PT0gJGhhc2ggPSBzcGxfb2JqZWN0X2hhc2goJG9iamVjdCkpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHNlbGY6OiRoYXNoTWFzayBeIGhleGRlYyhzdWJzdHIoJGhhc2gsIDE2IC0gXFBIUF9JTlRfU0laRSwgXFBIUF9JTlRfU0laRSkpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2FwaV93aW5kb3dzX3Z0MTAwX3N1cHBvcnQoJHN0cmVhbSwgJGVuYWJsZSA9IG51bGwpCiAgICB7CiAgICAgICAgaWYgKCFcaXNfcmVzb3VyY2UoJHN0cmVhbSkpIHsKICAgICAgICAgICAgdHJpZ2dlcl9lcnJvcignc2FwaV93aW5kb3dzX3Z0MTAwX3N1cHBvcnQoKSBleHBlY3RzIHBhcmFtZXRlciAxIHRvIGJlIHJlc291cmNlLCAnLmdldHR5cGUoJHN0cmVhbSkuJyBnaXZlbicsIEVfVVNFUl9XQVJOSU5HKTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgJG1ldGEgPSBzdHJlYW1fZ2V0X21ldGFfZGF0YSgkc3RyZWFtKTsKCiAgICAgICAgaWYgKCdTVERJTycgIT09ICRtZXRhWydzdHJlYW1fdHlwZSddKSB7CiAgICAgICAgICAgIHRyaWdnZXJfZXJyb3IoJ3NhcGlfd2luZG93c192dDEwMF9zdXBwb3J0KCkgd2FzIG5vdCBhYmxlIHRvIGFuYWx5emUgdGhlIHNwZWNpZmllZCBzdHJlYW0nLCBFX1VTRVJfV0FSTklORyk7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIC8vIFdlIGNhbm5vdCBhY3R1YWxseSBkaXNhYmxlIHZ0MTAwIHN1cHBvcnQgaWYgaXQgaXMgc2V0CiAgICAgICAgaWYgKGZhbHNlID09PSAkZW5hYmxlIHx8ICFzZWxmOjpzdHJlYW1faXNhdHR5KCRzdHJlYW0pKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIC8vIFRoZSBuYXRpdmUgZnVuY3Rpb24gZG9lcyBub3QgYXBwbHkgdG8gc3RkaW4KICAgICAgICAkbWV0YSA9IGFycmF5X21hcCgnc3RydG9sb3dlcicsICRtZXRhKTsKICAgICAgICAkc3RkaW4gPSAncGhwOi8vc3RkaW4nID09PSAkbWV0YVsndXJpJ10gfHwgJ3BocDovL2ZkLzAnID09PSAkbWV0YVsndXJpJ107CgogICAgICAgIHJldHVybiAhJHN0ZGluCiAgICAgICAgICAgICYmIChmYWxzZSAhPT0gZ2V0ZW52KCdBTlNJQ09OJykKICAgICAgICAgICAgfHwgJ09OJyA9PT0gZ2V0ZW52KCdDb25FbXVBTlNJJykKICAgICAgICAgICAgfHwgJ3h0ZXJtJyA9PT0gZ2V0ZW52KCdURVJNJykpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3RyZWFtX2lzYXR0eSgkc3RyZWFtKQogICAgewogICAgICAgIGlmICghXGlzX3Jlc291cmNlKCRzdHJlYW0pKSB7CiAgICAgICAgICAgIHRyaWdnZXJfZXJyb3IoJ3N0cmVhbV9pc2F0dHkoKSBleHBlY3RzIHBhcmFtZXRlciAxIHRvIGJlIHJlc291cmNlLCAnLmdldHR5cGUoJHN0cmVhbSkuJyBnaXZlbicsIEVfVVNFUl9XQVJOSU5HKTsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgaWYgKCdcXCcgPT09IERJUkVDVE9SWV9TRVBBUkFUT1IpIHsKICAgICAgICAgICAgJHN0YXQgPSBAZnN0YXQoJHN0cmVhbSk7CiAgICAgICAgICAgIC8vIENoZWNrIGlmIGZvcm1hdHRlZCBtb2RlIGlzIFNfSUZDSFIKICAgICAgICAgICAgcmV0dXJuICRzdGF0ID8gMDAyMDAwMCA9PT0gKCRzdGF0Wydtb2RlJ10gJiAwMTcwMDAwKSA6IGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uX2V4aXN0cygncG9zaXhfaXNhdHR5JykgJiYgQHBvc2l4X2lzYXR0eSgkc3RyZWFtKTsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBpbml0SGFzaE1hc2soKQogICAgewogICAgICAgICRvYmogPSAob2JqZWN0KSBhcnJheSgpOwogICAgICAgIHNlbGY6OiRoYXNoTWFzayA9IC0xOwoKICAgICAgICAvLyBjaGVjayBpZiB3ZSBhcmUgbmVzdGVkIGluIGFuIG91dHB1dCBidWZmZXJpbmcgaGFuZGxlciB0byBwcmV2ZW50IGEgZmF0YWwgZXJyb3Igd2l0aCBvYl9zdGFydCgpIGJlbG93CiAgICAgICAgJG9iRnVuY3MgPSBhcnJheSgnb2JfY2xlYW4nLCAnb2JfZW5kX2NsZWFuJywgJ29iX2ZsdXNoJywgJ29iX2VuZF9mbHVzaCcsICdvYl9nZXRfY29udGVudHMnLCAnb2JfZ2V0X2ZsdXNoJyk7CiAgICAgICAgZm9yZWFjaCAoZGVidWdfYmFja3RyYWNlKFxQSFBfVkVSU0lPTl9JRCA+PSA1MDQwMCA/IERFQlVHX0JBQ0tUUkFDRV9JR05PUkVfQVJHUyA6IGZhbHNlKSBhcyAkZnJhbWUpIHsKICAgICAgICAgICAgaWYgKGlzc2V0KCRmcmFtZVsnZnVuY3Rpb24nXVswXSkgJiYgIWlzc2V0KCRmcmFtZVsnY2xhc3MnXSkgJiYgJ28nID09PSAkZnJhbWVbJ2Z1bmN0aW9uJ11bMF0gJiYgXGluX2FycmF5KCRmcmFtZVsnZnVuY3Rpb24nXSwgJG9iRnVuY3MpKSB7CiAgICAgICAgICAgICAgICAkZnJhbWVbJ2xpbmUnXSA9IDA7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoIWVtcHR5KCRmcmFtZVsnbGluZSddKSkgewogICAgICAgICAgICBvYl9zdGFydCgpOwogICAgICAgICAgICBkZWJ1Z196dmFsX2R1bXAoJG9iaik7CiAgICAgICAgICAgIHNlbGY6OiRoYXNoTWFzayA9IChpbnQpIHN1YnN0cihvYl9nZXRfY2xlYW4oKSwgMTcpOwogICAgICAgIH0KCiAgICAgICAgc2VsZjo6JGhhc2hNYXNrIF49IGhleGRlYyhzdWJzdHIoc3BsX29iamVjdF9oYXNoKCRvYmopLCAxNiAtIFxQSFBfSU5UX1NJWkUsIFxQSFBfSU5UX1NJWkUpKTsKICAgIH0KfQo=AppDevTools/query/vendor/symfony/polyfill-php72/README.mdU3ltZm9ueSBQb2x5ZmlsbCAvIFBocDcyCj09PT09PT09PT09PT09PT09PT09PT09PQoKVGhpcyBjb21wb25lbnQgcHJvdmlkZXMgZnVuY3Rpb25zIGFkZGVkIHRvIFBIUCA3LjIgY29yZToKCi0gW2BzcGxfb2JqZWN0X2lkYF0oaHR0cHM6Ly9waHAubmV0L3NwbF9vYmplY3RfaWQpCi0gW2BzdHJlYW1faXNhdHR5YF0oaHR0cHM6Ly9waHAubmV0L3N0cmVhbV9pc2F0dHkpCgpPbiBXaW5kb3dzIG9ubHk6CgotIFtgc2FwaV93aW5kb3dzX3Z0MTAwX3N1cHBvcnRgXShodHRwczovL3BocC5uZXQvc2FwaV93aW5kb3dzX3Z0MTAwX3N1cHBvcnQpCgpNb3ZlZCB0byBjb3JlIHNpbmNlIDcuMiAod2FzIGluIHRoZSBvcHRpb25hbCBYTUwgZXh0ZW5zaW9uIGVhcmxpZXIpOgoKLSBbYHV0ZjhfZW5jb2RlYF0oaHR0cHM6Ly9waHAubmV0L3V0ZjhfZW5jb2RlKQotIFtgdXRmOF9kZWNvZGVgXShodHRwczovL3BocC5uZXQvdXRmOF9kZWNvZGUpCgpBbHNvLCBpdCBwcm92aWRlcyBhIGNvbnN0YW50IGFkZGVkIHRvIFBIUCA3LjI6Ci0gW2BQSFBfT1NfRkFNSUxZYF0oaHR0cDovL3BocC5uZXQvbWFudWFsL2VuL3Jlc2VydmVkLmNvbnN0YW50cy5waHAjY29uc3RhbnQucGhwLW9zLWZhbWlseSkKCk1vcmUgaW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIGluIHRoZQpbbWFpbiBQb2x5ZmlsbCBSRUFETUVdKGh0dHBzOi8vZ2l0aHViLmNvbS9zeW1mb255L3BvbHlmaWxsL2Jsb2IvbWFzdGVyL1JFQURNRS5tZCkuCgpMaWNlbnNlCj09PT09PT0KClRoaXMgbGlicmFyeSBpcyByZWxlYXNlZCB1bmRlciB0aGUgW01JVCBsaWNlbnNlXShMSUNFTlNFKS4KAppDevTools/query/vendor/symfony/polyfill-php72/bootstrap.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCnVzZSBTeW1mb255XFBvbHlmaWxsXFBocDcyIGFzIHA7CgppZiAoUEhQX1ZFUlNJT05fSUQgPCA3MDIwMCkgewogICAgaWYgKCdcXCcgPT09IERJUkVDVE9SWV9TRVBBUkFUT1IgJiYgIWZ1bmN0aW9uX2V4aXN0cygnc2FwaV93aW5kb3dzX3Z0MTAwX3N1cHBvcnQnKSkgewogICAgICAgIGZ1bmN0aW9uIHNhcGlfd2luZG93c192dDEwMF9zdXBwb3J0KCRzdHJlYW0sICRlbmFibGUgPSBudWxsKSB7IHJldHVybiBwXFBocDcyOjpzYXBpX3dpbmRvd3NfdnQxMDBfc3VwcG9ydCgkc3RyZWFtLCAkZW5hYmxlKTsgfQogICAgfQogICAgaWYgKCFmdW5jdGlvbl9leGlzdHMoJ3N0cmVhbV9pc2F0dHknKSkgewogICAgICAgIGZ1bmN0aW9uIHN0cmVhbV9pc2F0dHkoJHN0cmVhbSkgeyByZXR1cm4gcFxQaHA3Mjo6c3RyZWFtX2lzYXR0eSgkc3RyZWFtKTsgfQogICAgfQogICAgaWYgKCFmdW5jdGlvbl9leGlzdHMoJ3V0ZjhfZW5jb2RlJykpIHsKICAgICAgICBmdW5jdGlvbiB1dGY4X2VuY29kZSgkcykgeyByZXR1cm4gcFxQaHA3Mjo6dXRmOF9lbmNvZGUoJHMpOyB9CiAgICAgICAgZnVuY3Rpb24gdXRmOF9kZWNvZGUoJHMpIHsgcmV0dXJuIHBcUGhwNzI6OnV0ZjhfZGVjb2RlKCRzKTsgfQogICAgfQogICAgaWYgKCFmdW5jdGlvbl9leGlzdHMoJ3NwbF9vYmplY3RfaWQnKSkgewogICAgICAgIGZ1bmN0aW9uIHNwbF9vYmplY3RfaWQoJHMpIHsgcmV0dXJuIHBcUGhwNzI6OnNwbF9vYmplY3RfaWQoJHMpOyB9CiAgICB9CiAgICBpZiAoIWRlZmluZWQoJ1BIUF9PU19GQU1JTFknKSkgewogICAgICAgIGRlZmluZSgnUEhQX09TX0ZBTUlMWScsIHBcUGhwNzI6OnBocF9vc19mYW1pbHkoKSk7CiAgICB9Cn0KAppDevTools/query/vendor/symfony/polyfill-php72/composer.jsonewogICAgIm5hbWUiOiAic3ltZm9ueS9wb2x5ZmlsbC1waHA3MiIsCiAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICJkZXNjcmlwdGlvbiI6ICJTeW1mb255IHBvbHlmaWxsIGJhY2twb3J0aW5nIHNvbWUgUEhQIDcuMisgZmVhdHVyZXMgdG8gbG93ZXIgUEhQIHZlcnNpb25zIiwKICAgICJrZXl3b3JkcyI6IFsicG9seWZpbGwiLCAic2hpbSIsICJjb21wYXRpYmlsaXR5IiwgInBvcnRhYmxlIl0sCiAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9zeW1mb255LmNvbSIsCiAgICAibGljZW5zZSI6ICJNSVQiLAogICAgImF1dGhvcnMiOiBbCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJOaWNvbGFzIEdyZWthcyIsCiAgICAgICAgICAgICJlbWFpbCI6ICJwQHRjaHdvcmsuY29tIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJTeW1mb255IENvbW11bml0eSIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL3N5bWZvbnkuY29tL2NvbnRyaWJ1dG9ycyIKICAgICAgICB9CiAgICBdLAogICAgInJlcXVpcmUiOiB7CiAgICAgICAgInBocCI6ICI+PTUuMy4zIgogICAgfSwKICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAicHNyLTQiOiB7ICJTeW1mb255XFxQb2x5ZmlsbFxcUGhwNzJcXCI6ICIiIH0sCiAgICAgICAgImZpbGVzIjogWyAiYm9vdHN0cmFwLnBocCIgXQogICAgfSwKICAgICJtaW5pbXVtLXN0YWJpbGl0eSI6ICJkZXYiLAogICAgImV4dHJhIjogewogICAgICAgICJicmFuY2gtYWxpYXMiOiB7CiAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjEuOC1kZXYiCiAgICAgICAgfQogICAgfQp9Cg==AppDevTools/query/vendor/symfony/var-dumper/.gitignoreY29tcG9zZXIubG9jawpwaHB1bml0LnhtbAp2ZW5kb3IvCg==AppDevTools/query/vendor/symfony/var-dumper/CHANGELOG.mdQ0hBTkdFTE9HCj09PT09PT09PQoKNC4xLjAKLS0tLS0KCiAqIGFkZGVkIGEgYFNlcnZlckR1bXBlcmAgdG8gc2VuZCBzZXJpYWxpemVkIERhdGEgY2xvbmVzIHRvIGEgc2VydmVyCiAqIGFkZGVkIGEgYFNlcnZlckR1bXBDb21tYW5kYCBhbmQgYER1bXBTZXJ2ZXJgIHRvIHJ1biBhIHNlcnZlciBjb2xsZWN0aW5nCiAgIGFuZCBkaXNwbGF5aW5nIGR1bXBzIG9uIGEgc2luZ2xlIHBsYWNlIHdpdGggbXVsdGlwbGUgZm9ybWF0cyBzdXBwb3J0CiAqIGFkZGVkIGBDbGlEZXNjcmlwdG9yYCBhbmQgYEh0bWxEZXNjcmlwdG9yYCBkZXNjcmlwdG9ycyBmb3IgYHNlcnZlcjpkdW1wYCBDTEkgYW5kIEhUTUwgZm9ybWF0cyBzdXBwb3J0Cgo0LjAuMAotLS0tLQoKICogc3VwcG9ydCBmb3IgcGFzc2luZyBgXFJlZmxlY3Rpb25DbGFzc2AgaW5zdGFuY2VzIHRvIHRoZSBgQ2FzdGVyOjpjYXN0T2JqZWN0KClgCiAgIG1ldGhvZCBoYXMgYmVlbiBkcm9wcGVkLCBwYXNzIGNsYXNzIG5hbWVzIGFzIHN0cmluZ3MgaW5zdGVhZAogKiB0aGUgYERhdGE6OmdldFJhd0RhdGEoKWAgbWV0aG9kIGhhcyBiZWVuIHJlbW92ZWQKICogdGhlIGBWYXJEdW1wZXJUZXN0VHJhaXQ6OmFzc2VydER1bXBFcXVhbHMoKWAgbWV0aG9kIGV4cGVjdHMgYSAzcmQgYCRjb250ZXh0ID0gbnVsbGAKICAgYXJndW1lbnQgYW5kIG1vdmVzIGAkbWVzc2FnZSA9ICcnYCBhcmd1bWVudCBhdCA0dGggcG9zaXRpb24uCiAqIHRoZSBgVmFyRHVtcGVyVGVzdFRyYWl0Ojphc3NlcnREdW1wTWF0Y2hlc0Zvcm1hdCgpYCBtZXRob2QgZXhwZWN0cyBhIDNyZCBgJGNvbnRleHQgPSBudWxsYAogICBhcmd1bWVudCBhbmQgbW92ZXMgYCRtZXNzYWdlID0gJydgIGFyZ3VtZW50IGF0IDR0aCBwb3NpdGlvbi4KCjMuNC4wCi0tLS0tCgogKiBhZGRlZCBgQWJzdHJhY3RDbG9uZXI6OnNldE1pbkRlcHRoKClgIGZ1bmN0aW9uIHRvIGVuc3VyZSBtaW5pbXVtIHRyZWUgZGVwdGgKICogZGVwcmVjYXRlZCBgTW9uZ29DYXN0ZXJgCgoyLjcuMAotLS0tLQoKICogZGVwcmVjYXRlZCBDbG9uZXJcRGF0YTo6Z2V0TGltaXRlZENsb25lKCkuIFVzZSB3aXRoTWF4RGVwdGgsIHdpdGhNYXhJdGVtc1BlckRlcHRoIG9yIHdpdGhSZWZIYW5kbGVzIGluc3RlYWQuCg==AppDevTools/query/vendor/symfony/var-dumper/Caster/AmqpCaster.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDbG9uZXJcU3R1YjsKCi8qKgogKiBDYXN0cyBBbXFwIHJlbGF0ZWQgY2xhc3NlcyB0byBhcnJheSByZXByZXNlbnRhdGlvbi4KICoKICogQGF1dGhvciBHcsOpZ29pcmUgUGluZWF1IDxseXJpeHhAbHlyaXh4LmluZm8+CiAqLwpjbGFzcyBBbXFwQ2FzdGVyCnsKICAgIHByaXZhdGUgc3RhdGljICRmbGFncyA9IGFycmF5KAogICAgICAgIEFNUVBfRFVSQUJMRSA9PiAnQU1RUF9EVVJBQkxFJywKICAgICAgICBBTVFQX1BBU1NJVkUgPT4gJ0FNUVBfUEFTU0lWRScsCiAgICAgICAgQU1RUF9FWENMVVNJVkUgPT4gJ0FNUVBfRVhDTFVTSVZFJywKICAgICAgICBBTVFQX0FVVE9ERUxFVEUgPT4gJ0FNUVBfQVVUT0RFTEVURScsCiAgICAgICAgQU1RUF9JTlRFUk5BTCA9PiAnQU1RUF9JTlRFUk5BTCcsCiAgICAgICAgQU1RUF9OT0xPQ0FMID0+ICdBTVFQX05PTE9DQUwnLAogICAgICAgIEFNUVBfQVVUT0FDSyA9PiAnQU1RUF9BVVRPQUNLJywKICAgICAgICBBTVFQX0lGRU1QVFkgPT4gJ0FNUVBfSUZFTVBUWScsCiAgICAgICAgQU1RUF9JRlVOVVNFRCA9PiAnQU1RUF9JRlVOVVNFRCcsCiAgICAgICAgQU1RUF9NQU5EQVRPUlkgPT4gJ0FNUVBfTUFOREFUT1JZJywKICAgICAgICBBTVFQX0lNTUVESUFURSA9PiAnQU1RUF9JTU1FRElBVEUnLAogICAgICAgIEFNUVBfTVVMVElQTEUgPT4gJ0FNUVBfTVVMVElQTEUnLAogICAgICAgIEFNUVBfTk9XQUlUID0+ICdBTVFQX05PV0FJVCcsCiAgICAgICAgQU1RUF9SRVFVRVVFID0+ICdBTVFQX1JFUVVFVUUnLAogICAgKTsKCiAgICBwcml2YXRlIHN0YXRpYyAkZXhjaGFuZ2VUeXBlcyA9IGFycmF5KAogICAgICAgIEFNUVBfRVhfVFlQRV9ESVJFQ1QgPT4gJ0FNUVBfRVhfVFlQRV9ESVJFQ1QnLAogICAgICAgIEFNUVBfRVhfVFlQRV9GQU5PVVQgPT4gJ0FNUVBfRVhfVFlQRV9GQU5PVVQnLAogICAgICAgIEFNUVBfRVhfVFlQRV9UT1BJQyA9PiAnQU1RUF9FWF9UWVBFX1RPUElDJywKICAgICAgICBBTVFQX0VYX1RZUEVfSEVBREVSUyA9PiAnQU1RUF9FWF9UWVBFX0hFQURFUlMnLAogICAgKTsKCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNhc3RDb25uZWN0aW9uKFxBTVFQQ29ubmVjdGlvbiAkYywgYXJyYXkgJGEsIFN0dWIgJHN0dWIsICRpc05lc3RlZCkKICAgIHsKICAgICAgICAkcHJlZml4ID0gQ2FzdGVyOjpQUkVGSVhfVklSVFVBTDsKCiAgICAgICAgJGEgKz0gYXJyYXkoCiAgICAgICAgICAgICRwcmVmaXguJ2lzX2Nvbm5lY3RlZCcgPT4gJGMtPmlzQ29ubmVjdGVkKCksCiAgICAgICAgKTsKCiAgICAgICAgLy8gUmVjZW50IHZlcnNpb24gb2YgdGhlIGV4dGVuc2lvbiBhbHJlYWR5IGV4cG9zZSBwcml2YXRlIHByb3BlcnRpZXMKICAgICAgICBpZiAoaXNzZXQoJGFbIlx4MDBBTVFQQ29ubmVjdGlvblx4MDBsb2dpbiJdKSkgewogICAgICAgICAgICByZXR1cm4gJGE7CiAgICAgICAgfQoKICAgICAgICAvLyBCQyBsYXllciBpbiB0aGUgYW1xcCBsaWIKICAgICAgICBpZiAobWV0aG9kX2V4aXN0cygkYywgJ2dldFJlYWRUaW1lb3V0JykpIHsKICAgICAgICAgICAgJHRpbWVvdXQgPSAkYy0+Z2V0UmVhZFRpbWVvdXQoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkdGltZW91dCA9ICRjLT5nZXRUaW1lb3V0KCk7CiAgICAgICAgfQoKICAgICAgICAkYSArPSBhcnJheSgKICAgICAgICAgICAgJHByZWZpeC4naXNfY29ubmVjdGVkJyA9PiAkYy0+aXNDb25uZWN0ZWQoKSwKICAgICAgICAgICAgJHByZWZpeC4nbG9naW4nID0+ICRjLT5nZXRMb2dpbigpLAogICAgICAgICAgICAkcHJlZml4LidwYXNzd29yZCcgPT4gJGMtPmdldFBhc3N3b3JkKCksCiAgICAgICAgICAgICRwcmVmaXguJ2hvc3QnID0+ICRjLT5nZXRIb3N0KCksCiAgICAgICAgICAgICRwcmVmaXguJ3Zob3N0JyA9PiAkYy0+Z2V0Vmhvc3QoKSwKICAgICAgICAgICAgJHByZWZpeC4ncG9ydCcgPT4gJGMtPmdldFBvcnQoKSwKICAgICAgICAgICAgJHByZWZpeC4ncmVhZF90aW1lb3V0JyA9PiAkdGltZW91dCwKICAgICAgICApOwoKICAgICAgICByZXR1cm4gJGE7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjYXN0Q2hhbm5lbChcQU1RUENoYW5uZWwgJGMsIGFycmF5ICRhLCBTdHViICRzdHViLCAkaXNOZXN0ZWQpCiAgICB7CiAgICAgICAgJHByZWZpeCA9IENhc3Rlcjo6UFJFRklYX1ZJUlRVQUw7CgogICAgICAgICRhICs9IGFycmF5KAogICAgICAgICAgICAkcHJlZml4Lidpc19jb25uZWN0ZWQnID0+ICRjLT5pc0Nvbm5lY3RlZCgpLAogICAgICAgICAgICAkcHJlZml4LidjaGFubmVsX2lkJyA9PiAkYy0+Z2V0Q2hhbm5lbElkKCksCiAgICAgICAgKTsKCiAgICAgICAgLy8gUmVjZW50IHZlcnNpb24gb2YgdGhlIGV4dGVuc2lvbiBhbHJlYWR5IGV4cG9zZSBwcml2YXRlIHByb3BlcnRpZXMKICAgICAgICBpZiAoaXNzZXQoJGFbIlx4MDBBTVFQQ2hhbm5lbFx4MDBjb25uZWN0aW9uIl0pKSB7CiAgICAgICAgICAgIHJldHVybiAkYTsKICAgICAgICB9CgogICAgICAgICRhICs9IGFycmF5KAogICAgICAgICAgICAkcHJlZml4Lidjb25uZWN0aW9uJyA9PiAkYy0+Z2V0Q29ubmVjdGlvbigpLAogICAgICAgICAgICAkcHJlZml4LidwcmVmZXRjaF9zaXplJyA9PiAkYy0+Z2V0UHJlZmV0Y2hTaXplKCksCiAgICAgICAgICAgICRwcmVmaXguJ3ByZWZldGNoX2NvdW50JyA9PiAkYy0+Z2V0UHJlZmV0Y2hDb3VudCgpLAogICAgICAgICk7CgogICAgICAgIHJldHVybiAkYTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNhc3RRdWV1ZShcQU1RUFF1ZXVlICRjLCBhcnJheSAkYSwgU3R1YiAkc3R1YiwgJGlzTmVzdGVkKQogICAgewogICAgICAgICRwcmVmaXggPSBDYXN0ZXI6OlBSRUZJWF9WSVJUVUFMOwoKICAgICAgICAkYSArPSBhcnJheSgKICAgICAgICAgICAgJHByZWZpeC4nZmxhZ3MnID0+IHNlbGY6OmV4dHJhY3RGbGFncygkYy0+Z2V0RmxhZ3MoKSksCiAgICAgICAgKTsKCiAgICAgICAgLy8gUmVjZW50IHZlcnNpb24gb2YgdGhlIGV4dGVuc2lvbiBhbHJlYWR5IGV4cG9zZSBwcml2YXRlIHByb3BlcnRpZXMKICAgICAgICBpZiAoaXNzZXQoJGFbIlx4MDBBTVFQUXVldWVceDAwbmFtZSJdKSkgewogICAgICAgICAgICByZXR1cm4gJGE7CiAgICAgICAgfQoKICAgICAgICAkYSArPSBhcnJheSgKICAgICAgICAgICAgJHByZWZpeC4nY29ubmVjdGlvbicgPT4gJGMtPmdldENvbm5lY3Rpb24oKSwKICAgICAgICAgICAgJHByZWZpeC4nY2hhbm5lbCcgPT4gJGMtPmdldENoYW5uZWwoKSwKICAgICAgICAgICAgJHByZWZpeC4nbmFtZScgPT4gJGMtPmdldE5hbWUoKSwKICAgICAgICAgICAgJHByZWZpeC4nYXJndW1lbnRzJyA9PiAkYy0+Z2V0QXJndW1lbnRzKCksCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuICRhOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2FzdEV4Y2hhbmdlKFxBTVFQRXhjaGFuZ2UgJGMsIGFycmF5ICRhLCBTdHViICRzdHViLCAkaXNOZXN0ZWQpCiAgICB7CiAgICAgICAgJHByZWZpeCA9IENhc3Rlcjo6UFJFRklYX1ZJUlRVQUw7CgogICAgICAgICRhICs9IGFycmF5KAogICAgICAgICAgICAkcHJlZml4LidmbGFncycgPT4gc2VsZjo6ZXh0cmFjdEZsYWdzKCRjLT5nZXRGbGFncygpKSwKICAgICAgICApOwoKICAgICAgICAkdHlwZSA9IGlzc2V0KHNlbGY6OiRleGNoYW5nZVR5cGVzWyRjLT5nZXRUeXBlKCldKSA/IG5ldyBDb25zdFN0dWIoc2VsZjo6JGV4Y2hhbmdlVHlwZXNbJGMtPmdldFR5cGUoKV0sICRjLT5nZXRUeXBlKCkpIDogJGMtPmdldFR5cGUoKTsKCiAgICAgICAgLy8gUmVjZW50IHZlcnNpb24gb2YgdGhlIGV4dGVuc2lvbiBhbHJlYWR5IGV4cG9zZSBwcml2YXRlIHByb3BlcnRpZXMKICAgICAgICBpZiAoaXNzZXQoJGFbIlx4MDBBTVFQRXhjaGFuZ2VceDAwbmFtZSJdKSkgewogICAgICAgICAgICAkYVsiXHgwMEFNUVBFeGNoYW5nZVx4MDB0eXBlIl0gPSAkdHlwZTsKCiAgICAgICAgICAgIHJldHVybiAkYTsKICAgICAgICB9CgogICAgICAgICRhICs9IGFycmF5KAogICAgICAgICAgICAkcHJlZml4Lidjb25uZWN0aW9uJyA9PiAkYy0+Z2V0Q29ubmVjdGlvbigpLAogICAgICAgICAgICAkcHJlZml4LidjaGFubmVsJyA9PiAkYy0+Z2V0Q2hhbm5lbCgpLAogICAgICAgICAgICAkcHJlZml4LiduYW1lJyA9PiAkYy0+Z2V0TmFtZSgpLAogICAgICAgICAgICAkcHJlZml4Lid0eXBlJyA9PiAkdHlwZSwKICAgICAgICAgICAgJHByZWZpeC4nYXJndW1lbnRzJyA9PiAkYy0+Z2V0QXJndW1lbnRzKCksCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuICRhOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2FzdEVudmVsb3BlKFxBTVFQRW52ZWxvcGUgJGMsIGFycmF5ICRhLCBTdHViICRzdHViLCAkaXNOZXN0ZWQsICRmaWx0ZXIgPSAwKQogICAgewogICAgICAgICRwcmVmaXggPSBDYXN0ZXI6OlBSRUZJWF9WSVJUVUFMOwoKICAgICAgICAkZGVsaXZlcnlNb2RlID0gbmV3IENvbnN0U3R1YigkYy0+Z2V0RGVsaXZlcnlNb2RlKCkuKDIgPT09ICRjLT5nZXREZWxpdmVyeU1vZGUoKSA/ICcgKHBlcnNpc3RlbnQpJyA6ICcgKG5vbi1wZXJzaXN0ZW50KScpLCAkYy0+Z2V0RGVsaXZlcnlNb2RlKCkpOwoKICAgICAgICAvLyBSZWNlbnQgdmVyc2lvbiBvZiB0aGUgZXh0ZW5zaW9uIGFscmVhZHkgZXhwb3NlIHByaXZhdGUgcHJvcGVydGllcwogICAgICAgIGlmIChpc3NldCgkYVsiXHgwMEFNUVBFbnZlbG9wZVx4MDBib2R5Il0pKSB7CiAgICAgICAgICAgICRhWyJcMEFNUVBFbnZlbG9wZVwwZGVsaXZlcnlfbW9kZSJdID0gJGRlbGl2ZXJ5TW9kZTsKCiAgICAgICAgICAgIHJldHVybiAkYTsKICAgICAgICB9CgogICAgICAgIGlmICghKCRmaWx0ZXIgJiBDYXN0ZXI6OkVYQ0xVREVfVkVSQk9TRSkpIHsKICAgICAgICAgICAgJGEgKz0gYXJyYXkoJHByZWZpeC4nYm9keScgPT4gJGMtPmdldEJvZHkoKSk7CiAgICAgICAgfQoKICAgICAgICAkYSArPSBhcnJheSgKICAgICAgICAgICAgJHByZWZpeC4nZGVsaXZlcnlfdGFnJyA9PiAkYy0+Z2V0RGVsaXZlcnlUYWcoKSwKICAgICAgICAgICAgJHByZWZpeC4naXNfcmVkZWxpdmVyeScgPT4gJGMtPmlzUmVkZWxpdmVyeSgpLAogICAgICAgICAgICAkcHJlZml4LidleGNoYW5nZV9uYW1lJyA9PiAkYy0+Z2V0RXhjaGFuZ2VOYW1lKCksCiAgICAgICAgICAgICRwcmVmaXguJ3JvdXRpbmdfa2V5JyA9PiAkYy0+Z2V0Um91dGluZ0tleSgpLAogICAgICAgICAgICAkcHJlZml4Lidjb250ZW50X3R5cGUnID0+ICRjLT5nZXRDb250ZW50VHlwZSgpLAogICAgICAgICAgICAkcHJlZml4Lidjb250ZW50X2VuY29kaW5nJyA9PiAkYy0+Z2V0Q29udGVudEVuY29kaW5nKCksCiAgICAgICAgICAgICRwcmVmaXguJ2hlYWRlcnMnID0+ICRjLT5nZXRIZWFkZXJzKCksCiAgICAgICAgICAgICRwcmVmaXguJ2RlbGl2ZXJ5X21vZGUnID0+ICRkZWxpdmVyeU1vZGUsCiAgICAgICAgICAgICRwcmVmaXguJ3ByaW9yaXR5JyA9PiAkYy0+Z2V0UHJpb3JpdHkoKSwKICAgICAgICAgICAgJHByZWZpeC4nY29ycmVsYXRpb25faWQnID0+ICRjLT5nZXRDb3JyZWxhdGlvbklkKCksCiAgICAgICAgICAgICRwcmVmaXguJ3JlcGx5X3RvJyA9PiAkYy0+Z2V0UmVwbHlUbygpLAogICAgICAgICAgICAkcHJlZml4LidleHBpcmF0aW9uJyA9PiAkYy0+Z2V0RXhwaXJhdGlvbigpLAogICAgICAgICAgICAkcHJlZml4LidtZXNzYWdlX2lkJyA9PiAkYy0+Z2V0TWVzc2FnZUlkKCksCiAgICAgICAgICAgICRwcmVmaXguJ3RpbWVzdGFtcCcgPT4gJGMtPmdldFRpbWVTdGFtcCgpLAogICAgICAgICAgICAkcHJlZml4Lid0eXBlJyA9PiAkYy0+Z2V0VHlwZSgpLAogICAgICAgICAgICAkcHJlZml4Lid1c2VyX2lkJyA9PiAkYy0+Z2V0VXNlcklkKCksCiAgICAgICAgICAgICRwcmVmaXguJ2FwcF9pZCcgPT4gJGMtPmdldEFwcElkKCksCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuICRhOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGV4dHJhY3RGbGFncygkZmxhZ3MpCiAgICB7CiAgICAgICAgJGZsYWdzQXJyYXkgPSBhcnJheSgpOwoKICAgICAgICBmb3JlYWNoIChzZWxmOjokZmxhZ3MgYXMgJHZhbHVlID0+ICRuYW1lKSB7CiAgICAgICAgICAgIGlmICgkZmxhZ3MgJiAkdmFsdWUpIHsKICAgICAgICAgICAgICAgICRmbGFnc0FycmF5W10gPSAkbmFtZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCEkZmxhZ3NBcnJheSkgewogICAgICAgICAgICAkZmxhZ3NBcnJheSA9IGFycmF5KCdBTVFQX05PUEFSQU0nKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgQ29uc3RTdHViKGltcGxvZGUoJ3wnLCAkZmxhZ3NBcnJheSksICRmbGFncyk7CiAgICB9Cn0KAppDevTools/query/vendor/symfony/var-dumper/Caster/ArgsStub.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDbG9uZXJcU3R1YjsKCi8qKgogKiBSZXByZXNlbnRzIGEgbGlzdCBvZiBmdW5jdGlvbiBhcmd1bWVudHMuCiAqCiAqIEBhdXRob3IgTmljb2xhcyBHcmVrYXMgPHBAdGNod29yay5jb20+CiAqLwpjbGFzcyBBcmdzU3R1YiBleHRlbmRzIEVudW1TdHViCnsKICAgIHByaXZhdGUgc3RhdGljICRwYXJhbWV0ZXJzID0gYXJyYXkoKTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoYXJyYXkgJGFyZ3MsIHN0cmluZyAkZnVuY3Rpb24sID9zdHJpbmcgJGNsYXNzKQogICAgewogICAgICAgIGxpc3QoJHZhcmlhZGljLCAkcGFyYW1zKSA9IHNlbGY6OmdldFBhcmFtZXRlcnMoJGZ1bmN0aW9uLCAkY2xhc3MpOwoKICAgICAgICAkdmFsdWVzID0gYXJyYXkoKTsKICAgICAgICBmb3JlYWNoICgkYXJncyBhcyAkayA9PiAkdikgewogICAgICAgICAgICAkdmFsdWVzWyRrXSA9ICFpc19zY2FsYXIoJHYpICYmICEkdiBpbnN0YW5jZW9mIFN0dWIgPyBuZXcgQ3V0U3R1YigkdikgOiAkdjsKICAgICAgICB9CiAgICAgICAgaWYgKG51bGwgPT09ICRwYXJhbXMpIHsKICAgICAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgkdmFsdWVzLCBmYWxzZSk7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmIChjb3VudCgkdmFsdWVzKSA8IGNvdW50KCRwYXJhbXMpKSB7CiAgICAgICAgICAgICRwYXJhbXMgPSBhcnJheV9zbGljZSgkcGFyYW1zLCAwLCBjb3VudCgkdmFsdWVzKSk7CiAgICAgICAgfSBlbHNlaWYgKGNvdW50KCR2YWx1ZXMpID4gY291bnQoJHBhcmFtcykpIHsKICAgICAgICAgICAgJHZhbHVlc1tdID0gbmV3IEVudW1TdHViKGFycmF5X3NwbGljZSgkdmFsdWVzLCBjb3VudCgkcGFyYW1zKSksIGZhbHNlKTsKICAgICAgICAgICAgJHBhcmFtc1tdID0gJHZhcmlhZGljOwogICAgICAgIH0KICAgICAgICBpZiAoYXJyYXkoJy4uLicpID09PSAkcGFyYW1zKSB7CiAgICAgICAgICAgICR0aGlzLT5kdW1wS2V5cyA9IGZhbHNlOwogICAgICAgICAgICAkdGhpcy0+dmFsdWUgPSAkdmFsdWVzWzBdLT52YWx1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkdGhpcy0+dmFsdWUgPSBhcnJheV9jb21iaW5lKCRwYXJhbXMsICR2YWx1ZXMpOwogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBnZXRQYXJhbWV0ZXJzKCRmdW5jdGlvbiwgJGNsYXNzKQogICAgewogICAgICAgIGlmIChpc3NldChzZWxmOjokcGFyYW1ldGVyc1skayA9ICRjbGFzcy4nOjonLiRmdW5jdGlvbl0pKSB7CiAgICAgICAgICAgIHJldHVybiBzZWxmOjokcGFyYW1ldGVyc1ska107CiAgICAgICAgfQoKICAgICAgICB0cnkgewogICAgICAgICAgICAkciA9IG51bGwgIT09ICRjbGFzcyA/IG5ldyBcUmVmbGVjdGlvbk1ldGhvZCgkY2xhc3MsICRmdW5jdGlvbikgOiBuZXcgXFJlZmxlY3Rpb25GdW5jdGlvbigkZnVuY3Rpb24pOwogICAgICAgIH0gY2F0Y2ggKFxSZWZsZWN0aW9uRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgIHJldHVybiBhcnJheShudWxsLCBudWxsKTsKICAgICAgICB9CgogICAgICAgICR2YXJpYWRpYyA9ICcuLi4nOwogICAgICAgICRwYXJhbXMgPSBhcnJheSgpOwogICAgICAgIGZvcmVhY2ggKCRyLT5nZXRQYXJhbWV0ZXJzKCkgYXMgJHYpIHsKICAgICAgICAgICAgJGsgPSAnJCcuJHYtPm5hbWU7CiAgICAgICAgICAgIGlmICgkdi0+aXNQYXNzZWRCeVJlZmVyZW5jZSgpKSB7CiAgICAgICAgICAgICAgICAkayA9ICcmJy4kazsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoJHYtPmlzVmFyaWFkaWMoKSkgewogICAgICAgICAgICAgICAgJHZhcmlhZGljIC49ICRrOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHBhcmFtc1tdID0gJGs7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBzZWxmOjokcGFyYW1ldGVyc1ska10gPSBhcnJheSgkdmFyaWFkaWMsICRwYXJhbXMpOwogICAgfQp9Cg==AppDevTools/query/vendor/symfony/var-dumper/Caster/Caster.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDbG9uZXJcU3R1YjsKCi8qKgogKiBIZWxwZXIgZm9yIGZpbHRlcmluZyBvdXQgcHJvcGVydGllcyBpbiBjYXN0ZXJzLgogKgogKiBAYXV0aG9yIE5pY29sYXMgR3Jla2FzIDxwQHRjaHdvcmsuY29tPgogKgogKiBAZmluYWwKICovCmNsYXNzIENhc3Rlcgp7CiAgICBjb25zdCBFWENMVURFX1ZFUkJPU0UgPSAxOwogICAgY29uc3QgRVhDTFVERV9WSVJUVUFMID0gMjsKICAgIGNvbnN0IEVYQ0xVREVfRFlOQU1JQyA9IDQ7CiAgICBjb25zdCBFWENMVURFX1BVQkxJQyA9IDg7CiAgICBjb25zdCBFWENMVURFX1BST1RFQ1RFRCA9IDE2OwogICAgY29uc3QgRVhDTFVERV9QUklWQVRFID0gMzI7CiAgICBjb25zdCBFWENMVURFX05VTEwgPSA2NDsKICAgIGNvbnN0IEVYQ0xVREVfRU1QVFkgPSAxMjg7CiAgICBjb25zdCBFWENMVURFX05PVF9JTVBPUlRBTlQgPSAyNTY7CiAgICBjb25zdCBFWENMVURFX1NUUklDVCA9IDUxMjsKCiAgICBjb25zdCBQUkVGSVhfVklSVFVBTCA9ICJcMH5cMCI7CiAgICBjb25zdCBQUkVGSVhfRFlOQU1JQyA9ICJcMCtcMCI7CiAgICBjb25zdCBQUkVGSVhfUFJPVEVDVEVEID0gIlwwKlwwIjsKCiAgICAvKioKICAgICAqIENhc3RzIG9iamVjdHMgdG8gYXJyYXlzIGFuZCBhZGRzIHRoZSBkeW5hbWljIHByb3BlcnR5IHByZWZpeC4KICAgICAqCiAgICAgKiBAcGFyYW0gb2JqZWN0ICRvYmogICAgICAgICAgVGhlIG9iamVjdCB0byBjYXN0CiAgICAgKiBAcGFyYW0gc3RyaW5nICRjbGFzcyAgICAgICAgVGhlIGNsYXNzIG9mIHRoZSBvYmplY3QKICAgICAqIEBwYXJhbSBib29sICAgJGhhc0RlYnVnSW5mbyBXaGV0aGVyIHRoZSBfX2RlYnVnSW5mbyBtZXRob2QgZXhpc3RzIG9uICRvYmogb3Igbm90CiAgICAgKgogICAgICogQHJldHVybiBhcnJheSBUaGUgYXJyYXktY2FzdCBvZiB0aGUgb2JqZWN0LCB3aXRoIHByZWZpeGVkIGR5bmFtaWMgcHJvcGVydGllcwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNhc3RPYmplY3QoJG9iaiwgJGNsYXNzLCAkaGFzRGVidWdJbmZvID0gZmFsc2UpCiAgICB7CiAgICAgICAgaWYgKCRoYXNEZWJ1Z0luZm8pIHsKICAgICAgICAgICAgJGEgPSAkb2JqLT5fX2RlYnVnSW5mbygpOwogICAgICAgIH0gZWxzZWlmICgkb2JqIGluc3RhbmNlb2YgXENsb3N1cmUpIHsKICAgICAgICAgICAgJGEgPSBhcnJheSgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRhID0gKGFycmF5KSAkb2JqOwogICAgICAgIH0KICAgICAgICBpZiAoJG9iaiBpbnN0YW5jZW9mIFxfX1BIUF9JbmNvbXBsZXRlX0NsYXNzKSB7CiAgICAgICAgICAgIHJldHVybiAkYTsKICAgICAgICB9CgogICAgICAgIGlmICgkYSkgewogICAgICAgICAgICBzdGF0aWMgJHB1YmxpY1Byb3BlcnRpZXMgPSBhcnJheSgpOwoKICAgICAgICAgICAgJGkgPSAwOwogICAgICAgICAgICAkcHJlZml4ZWRLZXlzID0gYXJyYXkoKTsKICAgICAgICAgICAgZm9yZWFjaCAoJGEgYXMgJGsgPT4gJHYpIHsKICAgICAgICAgICAgICAgIGlmIChpc3NldCgka1swXSkgPyAiXDAiICE9PSAka1swXSA6IFxQSFBfVkVSU0lPTl9JRCA+PSA3MDIwMCkgewogICAgICAgICAgICAgICAgICAgIGlmICghaXNzZXQoJHB1YmxpY1Byb3BlcnRpZXNbJGNsYXNzXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoZ2V0X2NsYXNzX3ZhcnMoJGNsYXNzKSBhcyAkcHJvcCA9PiAkdikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHB1YmxpY1Byb3BlcnRpZXNbJGNsYXNzXVskcHJvcF0gPSB0cnVlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmICghaXNzZXQoJHB1YmxpY1Byb3BlcnRpZXNbJGNsYXNzXVska10pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRwcmVmaXhlZEtleXNbJGldID0gc2VsZjo6UFJFRklYX0RZTkFNSUMuJGs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfSBlbHNlaWYgKGlzc2V0KCRrWzE2XSkgJiYgIlwwIiA9PT0gJGtbMTZdICYmIDAgPT09IHN0cnBvcygkaywgIlwwY2xhc3NAYW5vbnltb3VzXDAiKSkgewogICAgICAgICAgICAgICAgICAgICRwcmVmaXhlZEtleXNbJGldID0gIlwwIi5nZXRfcGFyZW50X2NsYXNzKCRjbGFzcykuJ0Bhbm9ueW1vdXMnLnN0cnJjaHIoJGssICJcMCIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgKyskaTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoJHByZWZpeGVkS2V5cykgewogICAgICAgICAgICAgICAgJGtleXMgPSBhcnJheV9rZXlzKCRhKTsKICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwcmVmaXhlZEtleXMgYXMgJGkgPT4gJGspIHsKICAgICAgICAgICAgICAgICAgICAka2V5c1skaV0gPSAkazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRhID0gYXJyYXlfY29tYmluZSgka2V5cywgJGEpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGE7CiAgICB9CgogICAgLyoqCiAgICAgKiBGaWx0ZXJzIG91dCB0aGUgc3BlY2lmaWVkIHByb3BlcnRpZXMuCiAgICAgKgogICAgICogQnkgZGVmYXVsdCwgYSBzaW5nbGUgbWF0Y2ggaW4gdGhlICRmaWx0ZXIgYml0IGZpZWxkIGZpbHRlcnMgcHJvcGVydGllcyBvdXQsIGZvbGxvd2luZyBhbiAib3IiIGxvZ2ljLgogICAgICogV2hlbiBFWENMVURFX1NUUklDVCBpcyBzZXQsIGFuICJhbmQiIGxvZ2ljIGlzIGFwcGxpZWQ6IGFsbCBiaXRzIG11c3QgbWF0Y2ggZm9yIGEgcHJvcGVydHkgdG8gYmUgcmVtb3ZlZC4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgICAgJGEgICAgICAgICAgICAgICAgVGhlIGFycmF5IGNvbnRhaW5pbmcgdGhlIHByb3BlcnRpZXMgdG8gZmlsdGVyCiAgICAgKiBAcGFyYW0gaW50ICAgICAgJGZpbHRlciAgICAgICAgICAgQSBiaXQgZmllbGQgb2YgQ2FzdGVyOjpFWENMVURFXyogY29uc3RhbnRzIHNwZWNpZnlpbmcgd2hpY2ggcHJvcGVydGllcyB0byBmaWx0ZXIgb3V0CiAgICAgKiBAcGFyYW0gc3RyaW5nW10gJGxpc3RlZFByb3BlcnRpZXMgTGlzdCBvZiBwcm9wZXJ0aWVzIHRvIGV4Y2x1ZGUgd2hlbiBDYXN0ZXI6OkVYQ0xVREVfVkVSQk9TRSBpcyBzZXQsIGFuZCB0byBwcmVzZXJ2ZSB3aGVuIENhc3Rlcjo6RVhDTFVERV9OT1RfSU1QT1JUQU5UIGlzIHNldAogICAgICogQHBhcmFtIGludCAgICAgICYkY291bnQgICAgICAgICAgIFNldCB0byB0aGUgbnVtYmVyIG9mIHJlbW92ZWQgcHJvcGVydGllcwogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkgVGhlIGZpbHRlcmVkIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZmlsdGVyKGFycmF5ICRhLCAkZmlsdGVyLCBhcnJheSAkbGlzdGVkUHJvcGVydGllcyA9IGFycmF5KCksICYkY291bnQgPSAwKQogICAgewogICAgICAgICRjb3VudCA9IDA7CgogICAgICAgIGZvcmVhY2ggKCRhIGFzICRrID0+ICR2KSB7CiAgICAgICAgICAgICR0eXBlID0gc2VsZjo6RVhDTFVERV9TVFJJQ1QgJiAkZmlsdGVyOwoKICAgICAgICAgICAgaWYgKG51bGwgPT09ICR2KSB7CiAgICAgICAgICAgICAgICAkdHlwZSB8PSBzZWxmOjpFWENMVURFX05VTEwgJiAkZmlsdGVyOwogICAgICAgICAgICAgICAgJHR5cGUgfD0gc2VsZjo6RVhDTFVERV9FTVBUWSAmICRmaWx0ZXI7CiAgICAgICAgICAgIH0gZWxzZWlmIChmYWxzZSA9PT0gJHYgfHwgJycgPT09ICR2IHx8ICcwJyA9PT0gJHYgfHwgMCA9PT0gJHYgfHwgMC4wID09PSAkdiB8fCBhcnJheSgpID09PSAkdikgewogICAgICAgICAgICAgICAgJHR5cGUgfD0gc2VsZjo6RVhDTFVERV9FTVBUWSAmICRmaWx0ZXI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKChzZWxmOjpFWENMVURFX05PVF9JTVBPUlRBTlQgJiAkZmlsdGVyKSAmJiAhaW5fYXJyYXkoJGssICRsaXN0ZWRQcm9wZXJ0aWVzLCB0cnVlKSkgewogICAgICAgICAgICAgICAgJHR5cGUgfD0gc2VsZjo6RVhDTFVERV9OT1RfSU1QT1JUQU5UOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgoc2VsZjo6RVhDTFVERV9WRVJCT1NFICYgJGZpbHRlcikgJiYgaW5fYXJyYXkoJGssICRsaXN0ZWRQcm9wZXJ0aWVzLCB0cnVlKSkgewogICAgICAgICAgICAgICAgJHR5cGUgfD0gc2VsZjo6RVhDTFVERV9WRVJCT1NFOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoIWlzc2V0KCRrWzFdKSB8fCAiXDAiICE9PSAka1swXSkgewogICAgICAgICAgICAgICAgJHR5cGUgfD0gc2VsZjo6RVhDTFVERV9QVUJMSUMgJiAkZmlsdGVyOwogICAgICAgICAgICB9IGVsc2VpZiAoJ34nID09PSAka1sxXSkgewogICAgICAgICAgICAgICAgJHR5cGUgfD0gc2VsZjo6RVhDTFVERV9WSVJUVUFMICYgJGZpbHRlcjsKICAgICAgICAgICAgfSBlbHNlaWYgKCcrJyA9PT0gJGtbMV0pIHsKICAgICAgICAgICAgICAgICR0eXBlIHw9IHNlbGY6OkVYQ0xVREVfRFlOQU1JQyAmICRmaWx0ZXI7CiAgICAgICAgICAgIH0gZWxzZWlmICgnKicgPT09ICRrWzFdKSB7CiAgICAgICAgICAgICAgICAkdHlwZSB8PSBzZWxmOjpFWENMVURFX1BST1RFQ1RFRCAmICRmaWx0ZXI7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkdHlwZSB8PSBzZWxmOjpFWENMVURFX1BSSVZBVEUgJiAkZmlsdGVyOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoKHNlbGY6OkVYQ0xVREVfU1RSSUNUICYgJGZpbHRlcikgPyAkdHlwZSA9PT0gJGZpbHRlciA6ICR0eXBlKSB7CiAgICAgICAgICAgICAgICB1bnNldCgkYVska10pOwogICAgICAgICAgICAgICAgKyskY291bnQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkYTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNhc3RQaHBJbmNvbXBsZXRlQ2xhc3MoXF9fUEhQX0luY29tcGxldGVfQ2xhc3MgJGMsIGFycmF5ICRhLCBTdHViICRzdHViLCAkaXNOZXN0ZWQpCiAgICB7CiAgICAgICAgaWYgKGlzc2V0KCRhWydfX1BIUF9JbmNvbXBsZXRlX0NsYXNzX05hbWUnXSkpIHsKICAgICAgICAgICAgJHN0dWItPmNsYXNzIC49ICcoJy4kYVsnX19QSFBfSW5jb21wbGV0ZV9DbGFzc19OYW1lJ10uJyknOwogICAgICAgICAgICB1bnNldCgkYVsnX19QSFBfSW5jb21wbGV0ZV9DbGFzc19OYW1lJ10pOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRhOwogICAgfQp9Cg==AppDevTools/query/vendor/symfony/var-dumper/Caster/ClassStub.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyOwoKLyoqCiAqIFJlcHJlc2VudHMgYSBQSFAgY2xhc3MgaWRlbnRpZmllci4KICoKICogQGF1dGhvciBOaWNvbGFzIEdyZWthcyA8cEB0Y2h3b3JrLmNvbT4KICovCmNsYXNzIENsYXNzU3R1YiBleHRlbmRzIENvbnN0U3R1Ygp7CiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgICBBIFBIUCBpZGVudGlmaWVyLCBlLmcuIGEgY2xhc3MsIG1ldGhvZCwgaW50ZXJmYWNlLCBldGMuIG5hbWUKICAgICAqIEBwYXJhbSBjYWxsYWJsZSBUaGUgY2FsbGFibGUgdGFyZ2V0ZWQgYnkgdGhlIGlkZW50aWZpZXIgd2hlbiBpdCBpcyBhbWJpZ3VvdXMgb3Igbm90IGEgcmVhbCBQSFAgaWRlbnRpZmllcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICRpZGVudGlmaWVyLCAkY2FsbGFibGUgPSBudWxsKQogICAgewogICAgICAgICR0aGlzLT52YWx1ZSA9ICRpZGVudGlmaWVyOwoKICAgICAgICBpZiAoMCA8ICRpID0gc3RycnBvcygkaWRlbnRpZmllciwgJ1xcJykpIHsKICAgICAgICAgICAgJHRoaXMtPmF0dHJbJ2VsbGlwc2lzJ10gPSBzdHJsZW4oJGlkZW50aWZpZXIpIC0gJGk7CiAgICAgICAgICAgICR0aGlzLT5hdHRyWydlbGxpcHNpcy10eXBlJ10gPSAnY2xhc3MnOwogICAgICAgICAgICAkdGhpcy0+YXR0clsnZWxsaXBzaXMtdGFpbCddID0gMTsKICAgICAgICB9CgogICAgICAgIHRyeSB7CiAgICAgICAgICAgIGlmIChudWxsICE9PSAkY2FsbGFibGUpIHsKICAgICAgICAgICAgICAgIGlmICgkY2FsbGFibGUgaW5zdGFuY2VvZiBcQ2xvc3VyZSkgewogICAgICAgICAgICAgICAgICAgICRyID0gbmV3IFxSZWZsZWN0aW9uRnVuY3Rpb24oJGNhbGxhYmxlKTsKICAgICAgICAgICAgICAgIH0gZWxzZWlmIChpc19vYmplY3QoJGNhbGxhYmxlKSkgewogICAgICAgICAgICAgICAgICAgICRyID0gYXJyYXkoJGNhbGxhYmxlLCAnX19pbnZva2UnKTsKICAgICAgICAgICAgICAgIH0gZWxzZWlmIChpc19hcnJheSgkY2FsbGFibGUpKSB7CiAgICAgICAgICAgICAgICAgICAgJHIgPSAkY2FsbGFibGU7CiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoZmFsc2UgIT09ICRpID0gc3RycG9zKCRjYWxsYWJsZSwgJzo6JykpIHsKICAgICAgICAgICAgICAgICAgICAkciA9IGFycmF5KHN1YnN0cigkY2FsbGFibGUsIDAsICRpKSwgc3Vic3RyKCRjYWxsYWJsZSwgMiArICRpKSk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICRyID0gbmV3IFxSZWZsZWN0aW9uRnVuY3Rpb24oJGNhbGxhYmxlKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlaWYgKDAgPCAkaSA9IHN0cnBvcygkaWRlbnRpZmllciwgJzo6JykgPzogc3RycG9zKCRpZGVudGlmaWVyLCAnLT4nKSkgewogICAgICAgICAgICAgICAgJHIgPSBhcnJheShzdWJzdHIoJGlkZW50aWZpZXIsIDAsICRpKSwgc3Vic3RyKCRpZGVudGlmaWVyLCAyICsgJGkpKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRyID0gbmV3IFxSZWZsZWN0aW9uQ2xhc3MoJGlkZW50aWZpZXIpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAoaXNfYXJyYXkoJHIpKSB7CiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICRyID0gbmV3IFxSZWZsZWN0aW9uTWV0aG9kKCRyWzBdLCAkclsxXSk7CiAgICAgICAgICAgICAgICB9IGNhdGNoIChcUmVmbGVjdGlvbkV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAgICAgICAgICRyID0gbmV3IFxSZWZsZWN0aW9uQ2xhc3MoJHJbMF0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSBjYXRjaCAoXFJlZmxlY3Rpb25FeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRmID0gJHItPmdldEZpbGVOYW1lKCkpIHsKICAgICAgICAgICAgJHRoaXMtPmF0dHJbJ2ZpbGUnXSA9ICRmOwogICAgICAgICAgICAkdGhpcy0+YXR0clsnbGluZSddID0gJHItPmdldFN0YXJ0TGluZSgpOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHdyYXBDYWxsYWJsZSgkY2FsbGFibGUpCiAgICB7CiAgICAgICAgaWYgKGlzX29iamVjdCgkY2FsbGFibGUpIHx8ICFpc19jYWxsYWJsZSgkY2FsbGFibGUpKSB7CiAgICAgICAgICAgIHJldHVybiAkY2FsbGFibGU7CiAgICAgICAgfQoKICAgICAgICBpZiAoIWlzX2FycmF5KCRjYWxsYWJsZSkpIHsKICAgICAgICAgICAgJGNhbGxhYmxlID0gbmV3IHN0YXRpYygkY2FsbGFibGUpOwogICAgICAgIH0gZWxzZWlmIChpc19zdHJpbmcoJGNhbGxhYmxlWzBdKSkgewogICAgICAgICAgICAkY2FsbGFibGVbMF0gPSBuZXcgc3RhdGljKCRjYWxsYWJsZVswXSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGNhbGxhYmxlWzFdID0gbmV3IHN0YXRpYygkY2FsbGFibGVbMV0sICRjYWxsYWJsZSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGNhbGxhYmxlOwogICAgfQp9Cg==AppDevTools/query/vendor/symfony/var-dumper/Caster/ConstStub.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDbG9uZXJcU3R1YjsKCi8qKgogKiBSZXByZXNlbnRzIGEgUEhQIGNvbnN0YW50IGFuZCBpdHMgdmFsdWUuCiAqCiAqIEBhdXRob3IgTmljb2xhcyBHcmVrYXMgPHBAdGNod29yay5jb20+CiAqLwpjbGFzcyBDb25zdFN0dWIgZXh0ZW5kcyBTdHViCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChzdHJpbmcgJG5hbWUsICR2YWx1ZSkKICAgIHsKICAgICAgICAkdGhpcy0+Y2xhc3MgPSAkbmFtZTsKICAgICAgICAkdGhpcy0+dmFsdWUgPSAkdmFsdWU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKQogICAgewogICAgICAgIHJldHVybiAoc3RyaW5nKSAkdGhpcy0+dmFsdWU7CiAgICB9Cn0KAppDevTools/query/vendor/symfony/var-dumper/Caster/CutArrayStub.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyOwoKLyoqCiAqIFJlcHJlc2VudHMgYSBjdXQgYXJyYXkuCiAqCiAqIEBhdXRob3IgTmljb2xhcyBHcmVrYXMgPHBAdGNod29yay5jb20+CiAqLwpjbGFzcyBDdXRBcnJheVN0dWIgZXh0ZW5kcyBDdXRTdHViCnsKICAgIHB1YmxpYyAkcHJlc2VydmVkU3Vic2V0OwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChhcnJheSAkdmFsdWUsIGFycmF5ICRwcmVzZXJ2ZWRLZXlzKQogICAgewogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJHZhbHVlKTsKCiAgICAgICAgJHRoaXMtPnByZXNlcnZlZFN1YnNldCA9IGFycmF5X2ludGVyc2VjdF9rZXkoJHZhbHVlLCBhcnJheV9mbGlwKCRwcmVzZXJ2ZWRLZXlzKSk7CiAgICAgICAgJHRoaXMtPmN1dCAtPSBjb3VudCgkdGhpcy0+cHJlc2VydmVkU3Vic2V0KTsKICAgIH0KfQo=AppDevTools/query/vendor/symfony/var-dumper/Caster/CutStub.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDbG9uZXJcU3R1YjsKCi8qKgogKiBSZXByZXNlbnRzIHRoZSBtYWluIHByb3BlcnRpZXMgb2YgYSBQSFAgdmFyaWFibGUsIHByZS1jYXN0ZWQgYnkgYSBjYXN0ZXIuCiAqCiAqIEBhdXRob3IgTmljb2xhcyBHcmVrYXMgPHBAdGNod29yay5jb20+CiAqLwpjbGFzcyBDdXRTdHViIGV4dGVuZHMgU3R1Ygp7CiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHZhbHVlKQogICAgewogICAgICAgICR0aGlzLT52YWx1ZSA9ICR2YWx1ZTsKCiAgICAgICAgc3dpdGNoIChnZXR0eXBlKCR2YWx1ZSkpIHsKICAgICAgICAgICAgY2FzZSAnb2JqZWN0JzoKICAgICAgICAgICAgICAgICR0aGlzLT50eXBlID0gc2VsZjo6VFlQRV9PQkpFQ1Q7CiAgICAgICAgICAgICAgICAkdGhpcy0+Y2xhc3MgPSBnZXRfY2xhc3MoJHZhbHVlKTsKICAgICAgICAgICAgICAgICR0aGlzLT5jdXQgPSAtMTsKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSAnYXJyYXknOgogICAgICAgICAgICAgICAgJHRoaXMtPnR5cGUgPSBzZWxmOjpUWVBFX0FSUkFZOwogICAgICAgICAgICAgICAgJHRoaXMtPmNsYXNzID0gc2VsZjo6QVJSQVlfQVNTT0M7CiAgICAgICAgICAgICAgICAkdGhpcy0+Y3V0ID0gJHRoaXMtPnZhbHVlID0gY291bnQoJHZhbHVlKTsKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSAncmVzb3VyY2UnOgogICAgICAgICAgICBjYXNlICd1bmtub3duIHR5cGUnOgogICAgICAgICAgICBjYXNlICdyZXNvdXJjZSAoY2xvc2VkKSc6CiAgICAgICAgICAgICAgICAkdGhpcy0+dHlwZSA9IHNlbGY6OlRZUEVfUkVTT1VSQ0U7CiAgICAgICAgICAgICAgICAkdGhpcy0+aGFuZGxlID0gKGludCkgJHZhbHVlOwogICAgICAgICAgICAgICAgaWYgKCdVbmtub3duJyA9PT0gJHRoaXMtPmNsYXNzID0gQGdldF9yZXNvdXJjZV90eXBlKCR2YWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+Y2xhc3MgPSAnQ2xvc2VkJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICR0aGlzLT5jdXQgPSAtMTsKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzoKICAgICAgICAgICAgICAgICR0aGlzLT50eXBlID0gc2VsZjo6VFlQRV9TVFJJTkc7CiAgICAgICAgICAgICAgICAkdGhpcy0+Y2xhc3MgPSBwcmVnX21hdGNoKCcvL3UnLCAkdmFsdWUpID8gc2VsZjo6U1RSSU5HX1VURjggOiBzZWxmOjpTVFJJTkdfQklOQVJZOwogICAgICAgICAgICAgICAgJHRoaXMtPmN1dCA9IHNlbGY6OlNUUklOR19CSU5BUlkgPT09ICR0aGlzLT5jbGFzcyA/IHN0cmxlbigkdmFsdWUpIDogbWJfc3RybGVuKCR2YWx1ZSwgJ1VURi04Jyk7CiAgICAgICAgICAgICAgICAkdGhpcy0+dmFsdWUgPSAnJzsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgIH0KfQo=AppDevTools/query/vendor/symfony/var-dumper/Caster/DOMCaster.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDbG9uZXJcU3R1YjsKCi8qKgogKiBDYXN0cyBET00gcmVsYXRlZCBjbGFzc2VzIHRvIGFycmF5IHJlcHJlc2VudGF0aW9uLgogKgogKiBAYXV0aG9yIE5pY29sYXMgR3Jla2FzIDxwQHRjaHdvcmsuY29tPgogKi8KY2xhc3MgRE9NQ2FzdGVyCnsKICAgIHByaXZhdGUgc3RhdGljICRlcnJvckNvZGVzID0gYXJyYXkoCiAgICAgICAgRE9NX1BIUF9FUlIgPT4gJ0RPTV9QSFBfRVJSJywKICAgICAgICBET01fSU5ERVhfU0laRV9FUlIgPT4gJ0RPTV9JTkRFWF9TSVpFX0VSUicsCiAgICAgICAgRE9NU1RSSU5HX1NJWkVfRVJSID0+ICdET01TVFJJTkdfU0laRV9FUlInLAogICAgICAgIERPTV9ISUVSQVJDSFlfUkVRVUVTVF9FUlIgPT4gJ0RPTV9ISUVSQVJDSFlfUkVRVUVTVF9FUlInLAogICAgICAgIERPTV9XUk9OR19ET0NVTUVOVF9FUlIgPT4gJ0RPTV9XUk9OR19ET0NVTUVOVF9FUlInLAogICAgICAgIERPTV9JTlZBTElEX0NIQVJBQ1RFUl9FUlIgPT4gJ0RPTV9JTlZBTElEX0NIQVJBQ1RFUl9FUlInLAogICAgICAgIERPTV9OT19EQVRBX0FMTE9XRURfRVJSID0+ICdET01fTk9fREFUQV9BTExPV0VEX0VSUicsCiAgICAgICAgRE9NX05PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUiA9PiAnRE9NX05PX01PRElGSUNBVElPTl9BTExPV0VEX0VSUicsCiAgICAgICAgRE9NX05PVF9GT1VORF9FUlIgPT4gJ0RPTV9OT1RfRk9VTkRfRVJSJywKICAgICAgICBET01fTk9UX1NVUFBPUlRFRF9FUlIgPT4gJ0RPTV9OT1RfU1VQUE9SVEVEX0VSUicsCiAgICAgICAgRE9NX0lOVVNFX0FUVFJJQlVURV9FUlIgPT4gJ0RPTV9JTlVTRV9BVFRSSUJVVEVfRVJSJywKICAgICAgICBET01fSU5WQUxJRF9TVEFURV9FUlIgPT4gJ0RPTV9JTlZBTElEX1NUQVRFX0VSUicsCiAgICAgICAgRE9NX1NZTlRBWF9FUlIgPT4gJ0RPTV9TWU5UQVhfRVJSJywKICAgICAgICBET01fSU5WQUxJRF9NT0RJRklDQVRJT05fRVJSID0+ICdET01fSU5WQUxJRF9NT0RJRklDQVRJT05fRVJSJywKICAgICAgICBET01fTkFNRVNQQUNFX0VSUiA9PiAnRE9NX05BTUVTUEFDRV9FUlInLAogICAgICAgIERPTV9JTlZBTElEX0FDQ0VTU19FUlIgPT4gJ0RPTV9JTlZBTElEX0FDQ0VTU19FUlInLAogICAgICAgIERPTV9WQUxJREFUSU9OX0VSUiA9PiAnRE9NX1ZBTElEQVRJT05fRVJSJywKICAgICk7CgogICAgcHJpdmF0ZSBzdGF0aWMgJG5vZGVUeXBlcyA9IGFycmF5KAogICAgICAgIFhNTF9FTEVNRU5UX05PREUgPT4gJ1hNTF9FTEVNRU5UX05PREUnLAogICAgICAgIFhNTF9BVFRSSUJVVEVfTk9ERSA9PiAnWE1MX0FUVFJJQlVURV9OT0RFJywKICAgICAgICBYTUxfVEVYVF9OT0RFID0+ICdYTUxfVEVYVF9OT0RFJywKICAgICAgICBYTUxfQ0RBVEFfU0VDVElPTl9OT0RFID0+ICdYTUxfQ0RBVEFfU0VDVElPTl9OT0RFJywKICAgICAgICBYTUxfRU5USVRZX1JFRl9OT0RFID0+ICdYTUxfRU5USVRZX1JFRl9OT0RFJywKICAgICAgICBYTUxfRU5USVRZX05PREUgPT4gJ1hNTF9FTlRJVFlfTk9ERScsCiAgICAgICAgWE1MX1BJX05PREUgPT4gJ1hNTF9QSV9OT0RFJywKICAgICAgICBYTUxfQ09NTUVOVF9OT0RFID0+ICdYTUxfQ09NTUVOVF9OT0RFJywKICAgICAgICBYTUxfRE9DVU1FTlRfTk9ERSA9PiAnWE1MX0RPQ1VNRU5UX05PREUnLAogICAgICAgIFhNTF9ET0NVTUVOVF9UWVBFX05PREUgPT4gJ1hNTF9ET0NVTUVOVF9UWVBFX05PREUnLAogICAgICAgIFhNTF9ET0NVTUVOVF9GUkFHX05PREUgPT4gJ1hNTF9ET0NVTUVOVF9GUkFHX05PREUnLAogICAgICAgIFhNTF9OT1RBVElPTl9OT0RFID0+ICdYTUxfTk9UQVRJT05fTk9ERScsCiAgICAgICAgWE1MX0hUTUxfRE9DVU1FTlRfTk9ERSA9PiAnWE1MX0hUTUxfRE9DVU1FTlRfTk9ERScsCiAgICAgICAgWE1MX0RURF9OT0RFID0+ICdYTUxfRFREX05PREUnLAogICAgICAgIFhNTF9FTEVNRU5UX0RFQ0xfTk9ERSA9PiAnWE1MX0VMRU1FTlRfREVDTF9OT0RFJywKICAgICAgICBYTUxfQVRUUklCVVRFX0RFQ0xfTk9ERSA9PiAnWE1MX0FUVFJJQlVURV9ERUNMX05PREUnLAogICAgICAgIFhNTF9FTlRJVFlfREVDTF9OT0RFID0+ICdYTUxfRU5USVRZX0RFQ0xfTk9ERScsCiAgICAgICAgWE1MX05BTUVTUEFDRV9ERUNMX05PREUgPT4gJ1hNTF9OQU1FU1BBQ0VfREVDTF9OT0RFJywKICAgICk7CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjYXN0RXhjZXB0aW9uKFxET01FeGNlcHRpb24gJGUsIGFycmF5ICRhLCBTdHViICRzdHViLCAkaXNOZXN0ZWQpCiAgICB7CiAgICAgICAgJGsgPSBDYXN0ZXI6OlBSRUZJWF9QUk9URUNURUQuJ2NvZGUnOwogICAgICAgIGlmIChpc3NldCgkYVska10sIHNlbGY6OiRlcnJvckNvZGVzWyRhWyRrXV0pKSB7CiAgICAgICAgICAgICRhWyRrXSA9IG5ldyBDb25zdFN0dWIoc2VsZjo6JGVycm9yQ29kZXNbJGFbJGtdXSwgJGFbJGtdKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkYTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNhc3RMZW5ndGgoJGRvbSwgYXJyYXkgJGEsIFN0dWIgJHN0dWIsICRpc05lc3RlZCkKICAgIHsKICAgICAgICAkYSArPSBhcnJheSgKICAgICAgICAgICAgJ2xlbmd0aCcgPT4gJGRvbS0+bGVuZ3RoLAogICAgICAgICk7CgogICAgICAgIHJldHVybiAkYTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNhc3RJbXBsZW1lbnRhdGlvbigkZG9tLCBhcnJheSAkYSwgU3R1YiAkc3R1YiwgJGlzTmVzdGVkKQogICAgewogICAgICAgICRhICs9IGFycmF5KAogICAgICAgICAgICBDYXN0ZXI6OlBSRUZJWF9WSVJUVUFMLidDb3JlJyA9PiAnMS4wJywKICAgICAgICAgICAgQ2FzdGVyOjpQUkVGSVhfVklSVFVBTC4nWE1MJyA9PiAnMi4wJywKICAgICAgICApOwoKICAgICAgICByZXR1cm4gJGE7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjYXN0Tm9kZShcRE9NTm9kZSAkZG9tLCBhcnJheSAkYSwgU3R1YiAkc3R1YiwgJGlzTmVzdGVkKQogICAgewogICAgICAgICRhICs9IGFycmF5KAogICAgICAgICAgICAnbm9kZU5hbWUnID0+ICRkb20tPm5vZGVOYW1lLAogICAgICAgICAgICAnbm9kZVZhbHVlJyA9PiBuZXcgQ3V0U3R1YigkZG9tLT5ub2RlVmFsdWUpLAogICAgICAgICAgICAnbm9kZVR5cGUnID0+IG5ldyBDb25zdFN0dWIoc2VsZjo6JG5vZGVUeXBlc1skZG9tLT5ub2RlVHlwZV0sICRkb20tPm5vZGVUeXBlKSwKICAgICAgICAgICAgJ3BhcmVudE5vZGUnID0+IG5ldyBDdXRTdHViKCRkb20tPnBhcmVudE5vZGUpLAogICAgICAgICAgICAnY2hpbGROb2RlcycgPT4gJGRvbS0+Y2hpbGROb2RlcywKICAgICAgICAgICAgJ2ZpcnN0Q2hpbGQnID0+IG5ldyBDdXRTdHViKCRkb20tPmZpcnN0Q2hpbGQpLAogICAgICAgICAgICAnbGFzdENoaWxkJyA9PiBuZXcgQ3V0U3R1YigkZG9tLT5sYXN0Q2hpbGQpLAogICAgICAgICAgICAncHJldmlvdXNTaWJsaW5nJyA9PiBuZXcgQ3V0U3R1YigkZG9tLT5wcmV2aW91c1NpYmxpbmcpLAogICAgICAgICAgICAnbmV4dFNpYmxpbmcnID0+IG5ldyBDdXRTdHViKCRkb20tPm5leHRTaWJsaW5nKSwKICAgICAgICAgICAgJ2F0dHJpYnV0ZXMnID0+ICRkb20tPmF0dHJpYnV0ZXMsCiAgICAgICAgICAgICdvd25lckRvY3VtZW50JyA9PiBuZXcgQ3V0U3R1YigkZG9tLT5vd25lckRvY3VtZW50KSwKICAgICAgICAgICAgJ25hbWVzcGFjZVVSSScgPT4gJGRvbS0+bmFtZXNwYWNlVVJJLAogICAgICAgICAgICAncHJlZml4JyA9PiAkZG9tLT5wcmVmaXgsCiAgICAgICAgICAgICdsb2NhbE5hbWUnID0+ICRkb20tPmxvY2FsTmFtZSwKICAgICAgICAgICAgJ2Jhc2VVUkknID0+ICRkb20tPmJhc2VVUkkgPyBuZXcgTGlua1N0dWIoJGRvbS0+YmFzZVVSSSkgOiAkZG9tLT5iYXNlVVJJLAogICAgICAgICAgICAndGV4dENvbnRlbnQnID0+IG5ldyBDdXRTdHViKCRkb20tPnRleHRDb250ZW50KSwKICAgICAgICApOwoKICAgICAgICByZXR1cm4gJGE7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjYXN0TmFtZVNwYWNlTm9kZShcRE9NTmFtZVNwYWNlTm9kZSAkZG9tLCBhcnJheSAkYSwgU3R1YiAkc3R1YiwgJGlzTmVzdGVkKQogICAgewogICAgICAgICRhICs9IGFycmF5KAogICAgICAgICAgICAnbm9kZU5hbWUnID0+ICRkb20tPm5vZGVOYW1lLAogICAgICAgICAgICAnbm9kZVZhbHVlJyA9PiBuZXcgQ3V0U3R1YigkZG9tLT5ub2RlVmFsdWUpLAogICAgICAgICAgICAnbm9kZVR5cGUnID0+IG5ldyBDb25zdFN0dWIoc2VsZjo6JG5vZGVUeXBlc1skZG9tLT5ub2RlVHlwZV0sICRkb20tPm5vZGVUeXBlKSwKICAgICAgICAgICAgJ3ByZWZpeCcgPT4gJGRvbS0+cHJlZml4LAogICAgICAgICAgICAnbG9jYWxOYW1lJyA9PiAkZG9tLT5sb2NhbE5hbWUsCiAgICAgICAgICAgICduYW1lc3BhY2VVUkknID0+ICRkb20tPm5hbWVzcGFjZVVSSSwKICAgICAgICAgICAgJ293bmVyRG9jdW1lbnQnID0+IG5ldyBDdXRTdHViKCRkb20tPm93bmVyRG9jdW1lbnQpLAogICAgICAgICAgICAncGFyZW50Tm9kZScgPT4gbmV3IEN1dFN0dWIoJGRvbS0+cGFyZW50Tm9kZSksCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuICRhOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2FzdERvY3VtZW50KFxET01Eb2N1bWVudCAkZG9tLCBhcnJheSAkYSwgU3R1YiAkc3R1YiwgJGlzTmVzdGVkLCAkZmlsdGVyID0gMCkKICAgIHsKICAgICAgICAkYSArPSBhcnJheSgKICAgICAgICAgICAgJ2RvY3R5cGUnID0+ICRkb20tPmRvY3R5cGUsCiAgICAgICAgICAgICdpbXBsZW1lbnRhdGlvbicgPT4gJGRvbS0+aW1wbGVtZW50YXRpb24sCiAgICAgICAgICAgICdkb2N1bWVudEVsZW1lbnQnID0+IG5ldyBDdXRTdHViKCRkb20tPmRvY3VtZW50RWxlbWVudCksCiAgICAgICAgICAgICdhY3R1YWxFbmNvZGluZycgPT4gJGRvbS0+YWN0dWFsRW5jb2RpbmcsCiAgICAgICAgICAgICdlbmNvZGluZycgPT4gJGRvbS0+ZW5jb2RpbmcsCiAgICAgICAgICAgICd4bWxFbmNvZGluZycgPT4gJGRvbS0+eG1sRW5jb2RpbmcsCiAgICAgICAgICAgICdzdGFuZGFsb25lJyA9PiAkZG9tLT5zdGFuZGFsb25lLAogICAgICAgICAgICAneG1sU3RhbmRhbG9uZScgPT4gJGRvbS0+eG1sU3RhbmRhbG9uZSwKICAgICAgICAgICAgJ3ZlcnNpb24nID0+ICRkb20tPnZlcnNpb24sCiAgICAgICAgICAgICd4bWxWZXJzaW9uJyA9PiAkZG9tLT54bWxWZXJzaW9uLAogICAgICAgICAgICAnc3RyaWN0RXJyb3JDaGVja2luZycgPT4gJGRvbS0+c3RyaWN0RXJyb3JDaGVja2luZywKICAgICAgICAgICAgJ2RvY3VtZW50VVJJJyA9PiAkZG9tLT5kb2N1bWVudFVSSSA/IG5ldyBMaW5rU3R1YigkZG9tLT5kb2N1bWVudFVSSSkgOiAkZG9tLT5kb2N1bWVudFVSSSwKICAgICAgICAgICAgJ2NvbmZpZycgPT4gJGRvbS0+Y29uZmlnLAogICAgICAgICAgICAnZm9ybWF0T3V0cHV0JyA9PiAkZG9tLT5mb3JtYXRPdXRwdXQsCiAgICAgICAgICAgICd2YWxpZGF0ZU9uUGFyc2UnID0+ICRkb20tPnZhbGlkYXRlT25QYXJzZSwKICAgICAgICAgICAgJ3Jlc29sdmVFeHRlcm5hbHMnID0+ICRkb20tPnJlc29sdmVFeHRlcm5hbHMsCiAgICAgICAgICAgICdwcmVzZXJ2ZVdoaXRlU3BhY2UnID0+ICRkb20tPnByZXNlcnZlV2hpdGVTcGFjZSwKICAgICAgICAgICAgJ3JlY292ZXInID0+ICRkb20tPnJlY292ZXIsCiAgICAgICAgICAgICdzdWJzdGl0dXRlRW50aXRpZXMnID0+ICRkb20tPnN1YnN0aXR1dGVFbnRpdGllcywKICAgICAgICApOwoKICAgICAgICBpZiAoISgkZmlsdGVyICYgQ2FzdGVyOjpFWENMVURFX1ZFUkJPU0UpKSB7CiAgICAgICAgICAgICRmb3JtYXRPdXRwdXQgPSAkZG9tLT5mb3JtYXRPdXRwdXQ7CiAgICAgICAgICAgICRkb20tPmZvcm1hdE91dHB1dCA9IHRydWU7CiAgICAgICAgICAgICRhICs9IGFycmF5KENhc3Rlcjo6UFJFRklYX1ZJUlRVQUwuJ3htbCcgPT4gJGRvbS0+c2F2ZVhNTCgpKTsKICAgICAgICAgICAgJGRvbS0+Zm9ybWF0T3V0cHV0ID0gJGZvcm1hdE91dHB1dDsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkYTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNhc3RDaGFyYWN0ZXJEYXRhKFxET01DaGFyYWN0ZXJEYXRhICRkb20sIGFycmF5ICRhLCBTdHViICRzdHViLCAkaXNOZXN0ZWQpCiAgICB7CiAgICAgICAgJGEgKz0gYXJyYXkoCiAgICAgICAgICAgICdkYXRhJyA9PiAkZG9tLT5kYXRhLAogICAgICAgICAgICAnbGVuZ3RoJyA9PiAkZG9tLT5sZW5ndGgsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuICRhOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2FzdEF0dHIoXERPTUF0dHIgJGRvbSwgYXJyYXkgJGEsIFN0dWIgJHN0dWIsICRpc05lc3RlZCkKICAgIHsKICAgICAgICAkYSArPSBhcnJheSgKICAgICAgICAgICAgJ25hbWUnID0+ICRkb20tPm5hbWUsCiAgICAgICAgICAgICdzcGVjaWZpZWQnID0+ICRkb20tPnNwZWNpZmllZCwKICAgICAgICAgICAgJ3ZhbHVlJyA9PiAkZG9tLT52YWx1ZSwKICAgICAgICAgICAgJ293bmVyRWxlbWVudCcgPT4gJGRvbS0+b3duZXJFbGVtZW50LAogICAgICAgICAgICAnc2NoZW1hVHlwZUluZm8nID0+ICRkb20tPnNjaGVtYVR5cGVJbmZvLAogICAgICAgICk7CgogICAgICAgIHJldHVybiAkYTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNhc3RFbGVtZW50KFxET01FbGVtZW50ICRkb20sIGFycmF5ICRhLCBTdHViICRzdHViLCAkaXNOZXN0ZWQpCiAgICB7CiAgICAgICAgJGEgKz0gYXJyYXkoCiAgICAgICAgICAgICd0YWdOYW1lJyA9PiAkZG9tLT50YWdOYW1lLAogICAgICAgICAgICAnc2NoZW1hVHlwZUluZm8nID0+ICRkb20tPnNjaGVtYVR5cGVJbmZvLAogICAgICAgICk7CgogICAgICAgIHJldHVybiAkYTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNhc3RUZXh0KFxET01UZXh0ICRkb20sIGFycmF5ICRhLCBTdHViICRzdHViLCAkaXNOZXN0ZWQpCiAgICB7CiAgICAgICAgJGEgKz0gYXJyYXkoCiAgICAgICAgICAgICd3aG9sZVRleHQnID0+ICRkb20tPndob2xlVGV4dCwKICAgICAgICApOwoKICAgICAgICByZXR1cm4gJGE7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjYXN0VHlwZWluZm8oXERPTVR5cGVpbmZvICRkb20sIGFycmF5ICRhLCBTdHViICRzdHViLCAkaXNOZXN0ZWQpCiAgICB7CiAgICAgICAgJGEgKz0gYXJyYXkoCiAgICAgICAgICAgICd0eXBlTmFtZScgPT4gJGRvbS0+dHlwZU5hbWUsCiAgICAgICAgICAgICd0eXBlTmFtZXNwYWNlJyA9PiAkZG9tLT50eXBlTmFtZXNwYWNlLAogICAgICAgICk7CgogICAgICAgIHJldHVybiAkYTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNhc3REb21FcnJvcihcRE9NRG9tRXJyb3IgJGRvbSwgYXJyYXkgJGEsIFN0dWIgJHN0dWIsICRpc05lc3RlZCkKICAgIHsKICAgICAgICAkYSArPSBhcnJheSgKICAgICAgICAgICAgJ3NldmVyaXR5JyA9PiAkZG9tLT5zZXZlcml0eSwKICAgICAgICAgICAgJ21lc3NhZ2UnID0+ICRkb20tPm1lc3NhZ2UsCiAgICAgICAgICAgICd0eXBlJyA9PiAkZG9tLT50eXBlLAogICAgICAgICAgICAncmVsYXRlZEV4Y2VwdGlvbicgPT4gJGRvbS0+cmVsYXRlZEV4Y2VwdGlvbiwKICAgICAgICAgICAgJ3JlbGF0ZWRfZGF0YScgPT4gJGRvbS0+cmVsYXRlZF9kYXRhLAogICAgICAgICAgICAnbG9jYXRpb24nID0+ICRkb20tPmxvY2F0aW9uLAogICAgICAgICk7CgogICAgICAgIHJldHVybiAkYTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNhc3RMb2NhdG9yKFxET01Mb2NhdG9yICRkb20sIGFycmF5ICRhLCBTdHViICRzdHViLCAkaXNOZXN0ZWQpCiAgICB7CiAgICAgICAgJGEgKz0gYXJyYXkoCiAgICAgICAgICAgICdsaW5lTnVtYmVyJyA9PiAkZG9tLT5saW5lTnVtYmVyLAogICAgICAgICAgICAnY29sdW1uTnVtYmVyJyA9PiAkZG9tLT5jb2x1bW5OdW1iZXIsCiAgICAgICAgICAgICdvZmZzZXQnID0+ICRkb20tPm9mZnNldCwKICAgICAgICAgICAgJ3JlbGF0ZWROb2RlJyA9PiAkZG9tLT5yZWxhdGVkTm9kZSwKICAgICAgICAgICAgJ3VyaScgPT4gJGRvbS0+dXJpID8gbmV3IExpbmtTdHViKCRkb20tPnVyaSwgJGRvbS0+bGluZU51bWJlcikgOiAkZG9tLT51cmksCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuICRhOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2FzdERvY3VtZW50VHlwZShcRE9NRG9jdW1lbnRUeXBlICRkb20sIGFycmF5ICRhLCBTdHViICRzdHViLCAkaXNOZXN0ZWQpCiAgICB7CiAgICAgICAgJGEgKz0gYXJyYXkoCiAgICAgICAgICAgICduYW1lJyA9PiAkZG9tLT5uYW1lLAogICAgICAgICAgICAnZW50aXRpZXMnID0+ICRkb20tPmVudGl0aWVzLAogICAgICAgICAgICAnbm90YXRpb25zJyA9PiAkZG9tLT5ub3RhdGlvbnMsCiAgICAgICAgICAgICdwdWJsaWNJZCcgPT4gJGRvbS0+cHVibGljSWQsCiAgICAgICAgICAgICdzeXN0ZW1JZCcgPT4gJGRvbS0+c3lzdGVtSWQsCiAgICAgICAgICAgICdpbnRlcm5hbFN1YnNldCcgPT4gJGRvbS0+aW50ZXJuYWxTdWJzZXQsCiAgICAgICAgKTsKCiAgICAgICAgcmV0dXJuICRhOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2FzdE5vdGF0aW9uKFxET01Ob3RhdGlvbiAkZG9tLCBhcnJheSAkYSwgU3R1YiAkc3R1YiwgJGlzTmVzdGVkKQogICAgewogICAgICAgICRhICs9IGFycmF5KAogICAgICAgICAgICAncHVibGljSWQnID0+ICRkb20tPnB1YmxpY0lkLAogICAgICAgICAgICAnc3lzdGVtSWQnID0+ICRkb20tPnN5c3RlbUlkLAogICAgICAgICk7CgogICAgICAgIHJldHVybiAkYTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNhc3RFbnRpdHkoXERPTUVudGl0eSAkZG9tLCBhcnJheSAkYSwgU3R1YiAkc3R1YiwgJGlzTmVzdGVkKQogICAgewogICAgICAgICRhICs9IGFycmF5KAogICAgICAgICAgICAncHVibGljSWQnID0+ICRkb20tPnB1YmxpY0lkLAogICAgICAgICAgICAnc3lzdGVtSWQnID0+ICRkb20tPnN5c3RlbUlkLAogICAgICAgICAgICAnbm90YXRpb25OYW1lJyA9PiAkZG9tLT5ub3RhdGlvbk5hbWUsCiAgICAgICAgICAgICdhY3R1YWxFbmNvZGluZycgPT4gJGRvbS0+YWN0dWFsRW5jb2RpbmcsCiAgICAgICAgICAgICdlbmNvZGluZycgPT4gJGRvbS0+ZW5jb2RpbmcsCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAkZG9tLT52ZXJzaW9uLAogICAgICAgICk7CgogICAgICAgIHJldHVybiAkYTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNhc3RQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oXERPTVByb2Nlc3NpbmdJbnN0cnVjdGlvbiAkZG9tLCBhcnJheSAkYSwgU3R1YiAkc3R1YiwgJGlzTmVzdGVkKQogICAgewogICAgICAgICRhICs9IGFycmF5KAogICAgICAgICAgICAndGFyZ2V0JyA9PiAkZG9tLT50YXJnZXQsCiAgICAgICAgICAgICdkYXRhJyA9PiAkZG9tLT5kYXRhLAogICAgICAgICk7CgogICAgICAgIHJldHVybiAkYTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNhc3RYUGF0aChcRE9NWFBhdGggJGRvbSwgYXJyYXkgJGEsIFN0dWIgJHN0dWIsICRpc05lc3RlZCkKICAgIHsKICAgICAgICAkYSArPSBhcnJheSgKICAgICAgICAgICAgJ2RvY3VtZW50JyA9PiAkZG9tLT5kb2N1bWVudCwKICAgICAgICApOwoKICAgICAgICByZXR1cm4gJGE7CiAgICB9Cn0KAppDevTools/query/vendor/symfony/var-dumper/Caster/DateCaster.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDbG9uZXJcU3R1YjsKCi8qKgogKiBDYXN0cyBEYXRlVGltZUludGVyZmFjZSByZWxhdGVkIGNsYXNzZXMgdG8gYXJyYXkgcmVwcmVzZW50YXRpb24uCiAqCiAqIEBhdXRob3IgRGFueSBNYWlsbGFyZCA8ZGFueW1haWxsYXJkOTNiQGdtYWlsLmNvbT4KICovCmNsYXNzIERhdGVDYXN0ZXIKewogICAgcHJpdmF0ZSBjb25zdCBQRVJJT0RfTElNSVQgPSAzOwoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2FzdERhdGVUaW1lKFxEYXRlVGltZUludGVyZmFjZSAkZCwgYXJyYXkgJGEsIFN0dWIgJHN0dWIsICRpc05lc3RlZCwgJGZpbHRlcikKICAgIHsKICAgICAgICAkcHJlZml4ID0gQ2FzdGVyOjpQUkVGSVhfVklSVFVBTDsKICAgICAgICAkbG9jYXRpb24gPSAkZC0+Z2V0VGltZXpvbmUoKS0+Z2V0TG9jYXRpb24oKTsKICAgICAgICAkZnJvbU5vdyA9IChuZXcgXERhdGVUaW1lKCkpLT5kaWZmKCRkKTsKCiAgICAgICAgJHRpdGxlID0gJGQtPmZvcm1hdCgnbCwgRiBqLCBZJykKICAgICAgICAgICAgLiJcbiIuc2VsZjo6Zm9ybWF0SW50ZXJ2YWwoJGZyb21Ob3cpLicgZnJvbSBub3cnCiAgICAgICAgICAgIC4oJGxvY2F0aW9uID8gKCRkLT5mb3JtYXQoJ0knKSA/ICJcbkRTVCBPbiIgOiAiXG5EU1QgT2ZmIikgOiAnJykKICAgICAgICA7CgogICAgICAgICRhID0gYXJyYXkoKTsKICAgICAgICAkYVskcHJlZml4LidkYXRlJ10gPSBuZXcgQ29uc3RTdHViKHNlbGY6OmZvcm1hdERhdGVUaW1lKCRkLCAkbG9jYXRpb24gPyAnIGUgKFApJyA6ICcgUCcpLCAkdGl0bGUpOwoKICAgICAgICAkc3R1Yi0+Y2xhc3MgLj0gJGQtPmZvcm1hdCgnIEBVJyk7CgogICAgICAgIHJldHVybiAkYTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNhc3RJbnRlcnZhbChcRGF0ZUludGVydmFsICRpbnRlcnZhbCwgYXJyYXkgJGEsIFN0dWIgJHN0dWIsICRpc05lc3RlZCwgJGZpbHRlcikKICAgIHsKICAgICAgICAkbm93ID0gbmV3IFxEYXRlVGltZUltbXV0YWJsZSgpOwogICAgICAgICRudW1iZXJPZlNlY29uZHMgPSAkbm93LT5hZGQoJGludGVydmFsKS0+Z2V0VGltZXN0YW1wKCkgLSAkbm93LT5nZXRUaW1lc3RhbXAoKTsKICAgICAgICAkdGl0bGUgPSBudW1iZXJfZm9ybWF0KCRudW1iZXJPZlNlY29uZHMsIDAsICcuJywgJyAnKS4ncyc7CgogICAgICAgICRpID0gYXJyYXkoQ2FzdGVyOjpQUkVGSVhfVklSVFVBTC4naW50ZXJ2YWwnID0+IG5ldyBDb25zdFN0dWIoc2VsZjo6Zm9ybWF0SW50ZXJ2YWwoJGludGVydmFsKSwgJHRpdGxlKSk7CgogICAgICAgIHJldHVybiAkZmlsdGVyICYgQ2FzdGVyOjpFWENMVURFX1ZFUkJPU0UgPyAkaSA6ICRpICsgJGE7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZm9ybWF0SW50ZXJ2YWwoXERhdGVJbnRlcnZhbCAkaSkKICAgIHsKICAgICAgICAkZm9ybWF0ID0gJyVSICc7CgogICAgICAgIGlmICgwID09PSAkaS0+eSAmJiAwID09PSAkaS0+bSAmJiAoJGktPmggPj0gMjQgfHwgJGktPmkgPj0gNjAgfHwgJGktPnMgPj0gNjApKSB7CiAgICAgICAgICAgICRpID0gZGF0ZV9kaWZmKCRkID0gbmV3IFxEYXRlVGltZSgpLCBkYXRlX2FkZChjbG9uZSAkZCwgJGkpKTsgLy8gcmVjYWxjdWxhdGUgY2Fycnkgb3ZlciBwb2ludHMKICAgICAgICAgICAgJGZvcm1hdCAuPSAwIDwgJGktPmRheXMgPyAnJWFkICcgOiAnJzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkZm9ybWF0IC49ICgkaS0+eSA/ICcleXkgJyA6ICcnKS4oJGktPm0gPyAnJW1tICcgOiAnJykuKCRpLT5kID8gJyVkZCAnIDogJycpOwogICAgICAgIH0KCiAgICAgICAgJGZvcm1hdCAuPSAkaS0+aCB8fCAkaS0+aSB8fCAkaS0+cyB8fCAkaS0+ZiA/ICclSDolSTonLnNlbGY6OmZvcm1hdFNlY29uZHMoJGktPnMsIHN1YnN0cigkaS0+ZiwgMikpIDogJyc7CiAgICAgICAgJGZvcm1hdCA9ICclUiAnID09PSAkZm9ybWF0ID8gJzBzJyA6ICRmb3JtYXQ7CgogICAgICAgIHJldHVybiAkaS0+Zm9ybWF0KHJ0cmltKCRmb3JtYXQpKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNhc3RUaW1lWm9uZShcRGF0ZVRpbWVab25lICR0aW1lWm9uZSwgYXJyYXkgJGEsIFN0dWIgJHN0dWIsICRpc05lc3RlZCwgJGZpbHRlcikKICAgIHsKICAgICAgICAkbG9jYXRpb24gPSAkdGltZVpvbmUtPmdldExvY2F0aW9uKCk7CiAgICAgICAgJGZvcm1hdHRlZCA9IChuZXcgXERhdGVUaW1lKCdub3cnLCAkdGltZVpvbmUpKS0+Zm9ybWF0KCRsb2NhdGlvbiA/ICdlIChQKScgOiAnUCcpOwogICAgICAgICR0aXRsZSA9ICRsb2NhdGlvbiAmJiBleHRlbnNpb25fbG9hZGVkKCdpbnRsJykgPyBcTG9jYWxlOjpnZXREaXNwbGF5UmVnaW9uKCctJy4kbG9jYXRpb25bJ2NvdW50cnlfY29kZSddKSA6ICcnOwoKICAgICAgICAkeiA9IGFycmF5KENhc3Rlcjo6UFJFRklYX1ZJUlRVQUwuJ3RpbWV6b25lJyA9PiBuZXcgQ29uc3RTdHViKCRmb3JtYXR0ZWQsICR0aXRsZSkpOwoKICAgICAgICByZXR1cm4gJGZpbHRlciAmIENhc3Rlcjo6RVhDTFVERV9WRVJCT1NFID8gJHogOiAkeiArICRhOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2FzdFBlcmlvZChcRGF0ZVBlcmlvZCAkcCwgYXJyYXkgJGEsIFN0dWIgJHN0dWIsICRpc05lc3RlZCwgJGZpbHRlcikKICAgIHsKICAgICAgICAkZGF0ZXMgPSBhcnJheSgpOwogICAgICAgIGlmIChcUEhQX1ZFUlNJT05fSUQgPj0gNzAxMDcpIHsgLy8gc2VlIGh0dHBzOi8vYnVncy5waHAubmV0L2J1Zy5waHA/aWQ9NzQ2MzkKICAgICAgICAgICAgZm9yZWFjaCAoY2xvbmUgJHAgYXMgJGkgPT4gJGQpIHsKICAgICAgICAgICAgICAgIGlmIChzZWxmOjpQRVJJT0RfTElNSVQgPT09ICRpKSB7CiAgICAgICAgICAgICAgICAgICAgJG5vdyA9IG5ldyBcRGF0ZVRpbWVJbW11dGFibGUoKTsKICAgICAgICAgICAgICAgICAgICAkZGF0ZXNbXSA9IHNwcmludGYoJyVzIG1vcmUnLCAoJGVuZCA9ICRwLT5nZXRFbmREYXRlKCkpCiAgICAgICAgICAgICAgICAgICAgICAgID8gY2VpbCgoJGVuZC0+Zm9ybWF0KCdVLnUnKSAtICRkLT5mb3JtYXQoJ1UudScpKSAvICgkbm93LT5hZGQoJHAtPmdldERhdGVJbnRlcnZhbCgpKS0+Zm9ybWF0KCdVLnUnKSAtICRub3ctPmZvcm1hdCgnVS51JykpKQogICAgICAgICAgICAgICAgICAgICAgICA6ICRwLT5yZWN1cnJlbmNlcyAtICRpCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRkYXRlc1tdID0gc3ByaW50ZignJXMpICVzJywgJGkgKyAxLCBzZWxmOjpmb3JtYXREYXRlVGltZSgkZCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkcGVyaW9kID0gc3ByaW50ZigKICAgICAgICAgICAgJ2V2ZXJ5ICVzLCBmcm9tICVzICglcykgJXMnLAogICAgICAgICAgICBzZWxmOjpmb3JtYXRJbnRlcnZhbCgkcC0+Z2V0RGF0ZUludGVydmFsKCkpLAogICAgICAgICAgICBzZWxmOjpmb3JtYXREYXRlVGltZSgkcC0+Z2V0U3RhcnREYXRlKCkpLAogICAgICAgICAgICAkcC0+aW5jbHVkZV9zdGFydF9kYXRlID8gJ2luY2x1ZGVkJyA6ICdleGNsdWRlZCcsCiAgICAgICAgICAgICgkZW5kID0gJHAtPmdldEVuZERhdGUoKSkgPyAndG8gJy5zZWxmOjpmb3JtYXREYXRlVGltZSgkZW5kKSA6ICdyZWN1cnJpbmcgJy4kcC0+cmVjdXJyZW5jZXMuJyB0aW1lL3MnCiAgICAgICAgKTsKCiAgICAgICAgJHAgPSBhcnJheShDYXN0ZXI6OlBSRUZJWF9WSVJUVUFMLidwZXJpb2QnID0+IG5ldyBDb25zdFN0dWIoJHBlcmlvZCwgaW1wbG9kZSgiXG4iLCAkZGF0ZXMpKSk7CgogICAgICAgIHJldHVybiAkZmlsdGVyICYgQ2FzdGVyOjpFWENMVURFX1ZFUkJPU0UgPyAkcCA6ICRwICsgJGE7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZm9ybWF0RGF0ZVRpbWUoXERhdGVUaW1lSW50ZXJmYWNlICRkLCAkZXh0cmEgPSAnJykKICAgIHsKICAgICAgICByZXR1cm4gJGQtPmZvcm1hdCgnWS1tLWQgSDppOicuc2VsZjo6Zm9ybWF0U2Vjb25kcygkZC0+Zm9ybWF0KCdzJyksICRkLT5mb3JtYXQoJ3UnKSkuJGV4dHJhKTsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBmb3JtYXRTZWNvbmRzKCRzLCAkdXMpCiAgICB7CiAgICAgICAgcmV0dXJuIHNwcmludGYoJyUwMmQuJXMnLCAkcywgMCA9PT0gKCRsZW4gPSBzdHJsZW4oJHQgPSBydHJpbSgkdXMsICcwJykpKSA/ICcwJyA6ICgkbGVuIDw9IDMgPyBzdHJfcGFkKCR0LCAzLCAnMCcpIDogJHVzKSk7CiAgICB9Cn0KAppDevTools/query/vendor/symfony/var-dumper/Caster/DoctrineCaster.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyOwoKdXNlIERvY3RyaW5lXENvbW1vblxQcm94eVxQcm94eSBhcyBDb21tb25Qcm94eTsKdXNlIERvY3RyaW5lXE9STVxQcm94eVxQcm94eSBhcyBPcm1Qcm94eTsKdXNlIERvY3RyaW5lXE9STVxQZXJzaXN0ZW50Q29sbGVjdGlvbjsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDbG9uZXJcU3R1YjsKCi8qKgogKiBDYXN0cyBEb2N0cmluZSByZWxhdGVkIGNsYXNzZXMgdG8gYXJyYXkgcmVwcmVzZW50YXRpb24uCiAqCiAqIEBhdXRob3IgTmljb2xhcyBHcmVrYXMgPHBAdGNod29yay5jb20+CiAqLwpjbGFzcyBEb2N0cmluZUNhc3Rlcgp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNhc3RDb21tb25Qcm94eShDb21tb25Qcm94eSAkcHJveHksIGFycmF5ICRhLCBTdHViICRzdHViLCAkaXNOZXN0ZWQpCiAgICB7CiAgICAgICAgZm9yZWFjaCAoYXJyYXkoJ19fY2xvbmVyX18nLCAnX19pbml0aWFsaXplcl9fJykgYXMgJGspIHsKICAgICAgICAgICAgaWYgKGFycmF5X2tleV9leGlzdHMoJGssICRhKSkgewogICAgICAgICAgICAgICAgdW5zZXQoJGFbJGtdKTsKICAgICAgICAgICAgICAgICsrJHN0dWItPmN1dDsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRhOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2FzdE9ybVByb3h5KE9ybVByb3h5ICRwcm94eSwgYXJyYXkgJGEsIFN0dWIgJHN0dWIsICRpc05lc3RlZCkKICAgIHsKICAgICAgICBmb3JlYWNoIChhcnJheSgnX2VudGl0eVBlcnNpc3RlcicsICdfaWRlbnRpZmllcicpIGFzICRrKSB7CiAgICAgICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCRrID0gIlwwRG9jdHJpbmVcXE9STVxcUHJveHlcXFByb3h5XDAiLiRrLCAkYSkpIHsKICAgICAgICAgICAgICAgIHVuc2V0KCRhWyRrXSk7CiAgICAgICAgICAgICAgICArKyRzdHViLT5jdXQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkYTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNhc3RQZXJzaXN0ZW50Q29sbGVjdGlvbihQZXJzaXN0ZW50Q29sbGVjdGlvbiAkY29sbCwgYXJyYXkgJGEsIFN0dWIgJHN0dWIsICRpc05lc3RlZCkKICAgIHsKICAgICAgICBmb3JlYWNoIChhcnJheSgnc25hcHNob3QnLCAnYXNzb2NpYXRpb24nLCAndHlwZUNsYXNzJykgYXMgJGspIHsKICAgICAgICAgICAgaWYgKGFycmF5X2tleV9leGlzdHMoJGsgPSAiXDBEb2N0cmluZVxcT1JNXFxQZXJzaXN0ZW50Q29sbGVjdGlvblwwIi4kaywgJGEpKSB7CiAgICAgICAgICAgICAgICAkYVska10gPSBuZXcgQ3V0U3R1YigkYVska10pOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGE7CiAgICB9Cn0KAppDevTools/query/vendor/symfony/var-dumper/Caster/EnumStub.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDbG9uZXJcU3R1YjsKCi8qKgogKiBSZXByZXNlbnRzIGFuIGVudW1lcmF0aW9uIG9mIHZhbHVlcy4KICoKICogQGF1dGhvciBOaWNvbGFzIEdyZWthcyA8cEB0Y2h3b3JrLmNvbT4KICovCmNsYXNzIEVudW1TdHViIGV4dGVuZHMgU3R1Ygp7CiAgICBwdWJsaWMgJGR1bXBLZXlzID0gdHJ1ZTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoYXJyYXkgJHZhbHVlcywgYm9vbCAkZHVtcEtleXMgPSB0cnVlKQogICAgewogICAgICAgICR0aGlzLT52YWx1ZSA9ICR2YWx1ZXM7CiAgICAgICAgJHRoaXMtPmR1bXBLZXlzID0gJGR1bXBLZXlzOwogICAgfQp9Cg==AppDevTools/query/vendor/symfony/var-dumper/Caster/ExceptionCaster.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XERlYnVnXEV4Y2VwdGlvblxTaWxlbmNlZEVycm9yQ29udGV4dDsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxFeGNlcHRpb25cVGhyb3dpbmdDYXN0ZXJFeGNlcHRpb247CnVzZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2xvbmVyXFN0dWI7CgovKioKICogQ2FzdHMgY29tbW9uIEV4Y2VwdGlvbiBjbGFzc2VzIHRvIGFycmF5IHJlcHJlc2VudGF0aW9uLgogKgogKiBAYXV0aG9yIE5pY29sYXMgR3Jla2FzIDxwQHRjaHdvcmsuY29tPgogKi8KY2xhc3MgRXhjZXB0aW9uQ2FzdGVyCnsKICAgIHB1YmxpYyBzdGF0aWMgJHNyY0NvbnRleHQgPSAxOwogICAgcHVibGljIHN0YXRpYyAkdHJhY2VBcmdzID0gdHJ1ZTsKICAgIHB1YmxpYyBzdGF0aWMgJGVycm9yVHlwZXMgPSBhcnJheSgKICAgICAgICBFX0RFUFJFQ0FURUQgPT4gJ0VfREVQUkVDQVRFRCcsCiAgICAgICAgRV9VU0VSX0RFUFJFQ0FURUQgPT4gJ0VfVVNFUl9ERVBSRUNBVEVEJywKICAgICAgICBFX1JFQ09WRVJBQkxFX0VSUk9SID0+ICdFX1JFQ09WRVJBQkxFX0VSUk9SJywKICAgICAgICBFX0VSUk9SID0+ICdFX0VSUk9SJywKICAgICAgICBFX1dBUk5JTkcgPT4gJ0VfV0FSTklORycsCiAgICAgICAgRV9QQVJTRSA9PiAnRV9QQVJTRScsCiAgICAgICAgRV9OT1RJQ0UgPT4gJ0VfTk9USUNFJywKICAgICAgICBFX0NPUkVfRVJST1IgPT4gJ0VfQ09SRV9FUlJPUicsCiAgICAgICAgRV9DT1JFX1dBUk5JTkcgPT4gJ0VfQ09SRV9XQVJOSU5HJywKICAgICAgICBFX0NPTVBJTEVfRVJST1IgPT4gJ0VfQ09NUElMRV9FUlJPUicsCiAgICAgICAgRV9DT01QSUxFX1dBUk5JTkcgPT4gJ0VfQ09NUElMRV9XQVJOSU5HJywKICAgICAgICBFX1VTRVJfRVJST1IgPT4gJ0VfVVNFUl9FUlJPUicsCiAgICAgICAgRV9VU0VSX1dBUk5JTkcgPT4gJ0VfVVNFUl9XQVJOSU5HJywKICAgICAgICBFX1VTRVJfTk9USUNFID0+ICdFX1VTRVJfTk9USUNFJywKICAgICAgICBFX1NUUklDVCA9PiAnRV9TVFJJQ1QnLAogICAgKTsKCiAgICBwcml2YXRlIHN0YXRpYyAkZnJhbWVzQ2FjaGUgPSBhcnJheSgpOwoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2FzdEVycm9yKFxFcnJvciAkZSwgYXJyYXkgJGEsIFN0dWIgJHN0dWIsICRpc05lc3RlZCwgJGZpbHRlciA9IDApCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OmZpbHRlckV4Y2VwdGlvbkFycmF5KCRzdHViLT5jbGFzcywgJGEsICJcMEVycm9yXDAiLCAkZmlsdGVyKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNhc3RFeGNlcHRpb24oXEV4Y2VwdGlvbiAkZSwgYXJyYXkgJGEsIFN0dWIgJHN0dWIsICRpc05lc3RlZCwgJGZpbHRlciA9IDApCiAgICB7CiAgICAgICAgcmV0dXJuIHNlbGY6OmZpbHRlckV4Y2VwdGlvbkFycmF5KCRzdHViLT5jbGFzcywgJGEsICJcMEV4Y2VwdGlvblwwIiwgJGZpbHRlcik7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjYXN0RXJyb3JFeGNlcHRpb24oXEVycm9yRXhjZXB0aW9uICRlLCBhcnJheSAkYSwgU3R1YiAkc3R1YiwgJGlzTmVzdGVkKQogICAgewogICAgICAgIGlmIChpc3NldCgkYVskcyA9IENhc3Rlcjo6UFJFRklYX1BST1RFQ1RFRC4nc2V2ZXJpdHknXSwgc2VsZjo6JGVycm9yVHlwZXNbJGFbJHNdXSkpIHsKICAgICAgICAgICAgJGFbJHNdID0gbmV3IENvbnN0U3R1YihzZWxmOjokZXJyb3JUeXBlc1skYVskc11dLCAkYVskc10pOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRhOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2FzdFRocm93aW5nQ2FzdGVyRXhjZXB0aW9uKFRocm93aW5nQ2FzdGVyRXhjZXB0aW9uICRlLCBhcnJheSAkYSwgU3R1YiAkc3R1YiwgJGlzTmVzdGVkKQogICAgewogICAgICAgICR0cmFjZSA9IENhc3Rlcjo6UFJFRklYX1ZJUlRVQUwuJ3RyYWNlJzsKICAgICAgICAkcHJlZml4ID0gQ2FzdGVyOjpQUkVGSVhfUFJPVEVDVEVEOwogICAgICAgICR4UHJlZml4ID0gIlwwRXhjZXB0aW9uXDAiOwoKICAgICAgICBpZiAoaXNzZXQoJGFbJHhQcmVmaXguJ3ByZXZpb3VzJ10sICRhWyR0cmFjZV0pICYmICRhWyR4UHJlZml4LidwcmV2aW91cyddIGluc3RhbmNlb2YgXEV4Y2VwdGlvbikgewogICAgICAgICAgICAkYiA9IChhcnJheSkgJGFbJHhQcmVmaXguJ3ByZXZpb3VzJ107CiAgICAgICAgICAgIHNlbGY6OnRyYWNlVW5zaGlmdCgkYlskeFByZWZpeC4ndHJhY2UnXSwgZ2V0X2NsYXNzKCRhWyR4UHJlZml4LidwcmV2aW91cyddKSwgJGJbJHByZWZpeC4nZmlsZSddLCAkYlskcHJlZml4LidsaW5lJ10pOwogICAgICAgICAgICAkYVskdHJhY2VdID0gbmV3IFRyYWNlU3R1YigkYlskeFByZWZpeC4ndHJhY2UnXSwgZmFsc2UsIDAsIC1jb3VudCgkYVskdHJhY2VdLT52YWx1ZSkpOwogICAgICAgIH0KCiAgICAgICAgdW5zZXQoJGFbJHhQcmVmaXguJ3ByZXZpb3VzJ10sICRhWyRwcmVmaXguJ2NvZGUnXSwgJGFbJHByZWZpeC4nZmlsZSddLCAkYVskcHJlZml4LidsaW5lJ10pOwoKICAgICAgICByZXR1cm4gJGE7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjYXN0U2lsZW5jZWRFcnJvckNvbnRleHQoU2lsZW5jZWRFcnJvckNvbnRleHQgJGUsIGFycmF5ICRhLCBTdHViICRzdHViLCAkaXNOZXN0ZWQpCiAgICB7CiAgICAgICAgJHNQcmVmaXggPSAiXDAiLlNpbGVuY2VkRXJyb3JDb250ZXh0OjpjbGFzcy4iXDAiOwoKICAgICAgICBpZiAoIWlzc2V0KCRhWyRzID0gJHNQcmVmaXguJ3NldmVyaXR5J10pKSB7CiAgICAgICAgICAgIHJldHVybiAkYTsKICAgICAgICB9CgogICAgICAgIGlmIChpc3NldChzZWxmOjokZXJyb3JUeXBlc1skYVskc11dKSkgewogICAgICAgICAgICAkYVskc10gPSBuZXcgQ29uc3RTdHViKHNlbGY6OiRlcnJvclR5cGVzWyRhWyRzXV0sICRhWyRzXSk7CiAgICAgICAgfQoKICAgICAgICAkdHJhY2UgPSBhcnJheShhcnJheSgKICAgICAgICAgICAgJ2ZpbGUnID0+ICRhWyRzUHJlZml4LidmaWxlJ10sCiAgICAgICAgICAgICdsaW5lJyA9PiAkYVskc1ByZWZpeC4nbGluZSddLAogICAgICAgICkpOwoKICAgICAgICBpZiAoaXNzZXQoJGFbJHNQcmVmaXguJ3RyYWNlJ10pKSB7CiAgICAgICAgICAgICR0cmFjZSA9IGFycmF5X21lcmdlKCR0cmFjZSwgJGFbJHNQcmVmaXguJ3RyYWNlJ10pOwogICAgICAgIH0KCiAgICAgICAgdW5zZXQoJGFbJHNQcmVmaXguJ2ZpbGUnXSwgJGFbJHNQcmVmaXguJ2xpbmUnXSwgJGFbJHNQcmVmaXguJ3RyYWNlJ10pOwogICAgICAgICRhW0Nhc3Rlcjo6UFJFRklYX1ZJUlRVQUwuJ3RyYWNlJ10gPSBuZXcgVHJhY2VTdHViKCR0cmFjZSwgc2VsZjo6JHRyYWNlQXJncyk7CgogICAgICAgIHJldHVybiAkYTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNhc3RUcmFjZVN0dWIoVHJhY2VTdHViICR0cmFjZSwgYXJyYXkgJGEsIFN0dWIgJHN0dWIsICRpc05lc3RlZCkKICAgIHsKICAgICAgICBpZiAoISRpc05lc3RlZCkgewogICAgICAgICAgICByZXR1cm4gJGE7CiAgICAgICAgfQogICAgICAgICRzdHViLT5jbGFzcyA9ICcnOwogICAgICAgICRzdHViLT5oYW5kbGUgPSAwOwogICAgICAgICRmcmFtZXMgPSAkdHJhY2UtPnZhbHVlOwogICAgICAgICRwcmVmaXggPSBDYXN0ZXI6OlBSRUZJWF9WSVJUVUFMOwoKICAgICAgICAkYSA9IGFycmF5KCk7CiAgICAgICAgJGogPSBjb3VudCgkZnJhbWVzKTsKICAgICAgICBpZiAoMCA+ICRpID0gJHRyYWNlLT5zbGljZU9mZnNldCkgewogICAgICAgICAgICAkaSA9IG1heCgwLCAkaiArICRpKTsKICAgICAgICB9CiAgICAgICAgaWYgKCFpc3NldCgkdHJhY2UtPnZhbHVlWyRpXSkpIHsKICAgICAgICAgICAgcmV0dXJuIGFycmF5KCk7CiAgICAgICAgfQogICAgICAgICRsYXN0Q2FsbCA9IGlzc2V0KCRmcmFtZXNbJGldWydmdW5jdGlvbiddKSA/IChpc3NldCgkZnJhbWVzWyRpXVsnY2xhc3MnXSkgPyAkZnJhbWVzWzBdWydjbGFzcyddLiRmcmFtZXNbJGldWyd0eXBlJ10gOiAnJykuJGZyYW1lc1skaV1bJ2Z1bmN0aW9uJ10uJygpJyA6ICcnOwogICAgICAgICRmcmFtZXNbXSA9IGFycmF5KCdmdW5jdGlvbicgPT4gJycpOwogICAgICAgICRjb2xsYXBzZSA9IGZhbHNlOwoKICAgICAgICBmb3IgKCRqICs9ICR0cmFjZS0+bnVtYmVyaW5nT2Zmc2V0IC0gJGkrKzsgaXNzZXQoJGZyYW1lc1skaV0pOyArKyRpLCAtLSRqKSB7CiAgICAgICAgICAgICRmID0gJGZyYW1lc1skaV07CiAgICAgICAgICAgICRjYWxsID0gaXNzZXQoJGZbJ2Z1bmN0aW9uJ10pID8gKGlzc2V0KCRmWydjbGFzcyddKSA/ICRmWydjbGFzcyddLiRmWyd0eXBlJ10gOiAnJykuJGZbJ2Z1bmN0aW9uJ10gOiAnPz8/JzsKCiAgICAgICAgICAgICRmcmFtZSA9IG5ldyBGcmFtZVN0dWIoCiAgICAgICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgICAgICAnb2JqZWN0JyA9PiBpc3NldCgkZlsnb2JqZWN0J10pID8gJGZbJ29iamVjdCddIDogbnVsbCwKICAgICAgICAgICAgICAgICAgICAnY2xhc3MnID0+IGlzc2V0KCRmWydjbGFzcyddKSA/ICRmWydjbGFzcyddIDogbnVsbCwKICAgICAgICAgICAgICAgICAgICAndHlwZScgPT4gaXNzZXQoJGZbJ3R5cGUnXSkgPyAkZlsndHlwZSddIDogbnVsbCwKICAgICAgICAgICAgICAgICAgICAnZnVuY3Rpb24nID0+IGlzc2V0KCRmWydmdW5jdGlvbiddKSA/ICRmWydmdW5jdGlvbiddIDogbnVsbCwKICAgICAgICAgICAgICAgICkgKyAkZnJhbWVzWyRpIC0gMV0sCiAgICAgICAgICAgICAgICBmYWxzZSwKICAgICAgICAgICAgICAgIHRydWUKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJGYgPSBzZWxmOjpjYXN0RnJhbWVTdHViKCRmcmFtZSwgYXJyYXkoKSwgJGZyYW1lLCB0cnVlKTsKICAgICAgICAgICAgaWYgKGlzc2V0KCRmWyRwcmVmaXguJ3NyYyddKSkgewogICAgICAgICAgICAgICAgZm9yZWFjaCAoJGZbJHByZWZpeC4nc3JjJ10tPnZhbHVlIGFzICRsYWJlbCA9PiAkZnJhbWUpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoMCA9PT0gc3RycG9zKCRsYWJlbCwgIlwwfmNvbGxhcHNlPTAiKSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGNvbGxhcHNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbGFiZWwgPSBzdWJzdHJfcmVwbGFjZSgkbGFiZWwsICcxJywgMTEsIDEpOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNvbGxhcHNlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAkbGFiZWwgPSBzdWJzdHJfcmVwbGFjZSgkbGFiZWwsICJ0aXRsZT1TdGFjayBsZXZlbCAkai4mIiwgMiwgMCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkZiA9ICRmcmFtZXNbJGkgLSAxXTsKICAgICAgICAgICAgICAgIGlmICgkdHJhY2UtPmtlZXBBcmdzICYmICFlbXB0eSgkZlsnYXJncyddKSAmJiAkZnJhbWUgaW5zdGFuY2VvZiBFbnVtU3R1YikgewogICAgICAgICAgICAgICAgICAgICRmcmFtZS0+dmFsdWVbJ2FyZ3VtZW50cyddID0gbmV3IEFyZ3NTdHViKCRmWydhcmdzJ10sIGlzc2V0KCRmWydmdW5jdGlvbiddKSA/ICRmWydmdW5jdGlvbiddIDogbnVsbCwgaXNzZXQoJGZbJ2NsYXNzJ10pID8gJGZbJ2NsYXNzJ10gOiBudWxsKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlaWYgKCc/Pz8nICE9PSAkbGFzdENhbGwpIHsKICAgICAgICAgICAgICAgICRsYWJlbCA9IG5ldyBDbGFzc1N0dWIoJGxhc3RDYWxsKTsKICAgICAgICAgICAgICAgIGlmIChpc3NldCgkbGFiZWwtPmF0dHJbJ2VsbGlwc2lzJ10pKSB7CiAgICAgICAgICAgICAgICAgICAgJGxhYmVsLT5hdHRyWydlbGxpcHNpcyddICs9IDI7CiAgICAgICAgICAgICAgICAgICAgJGxhYmVsID0gc3Vic3RyX3JlcGxhY2UoJHByZWZpeCwgImVsbGlwc2lzLXR5cGU9Y2xhc3MmZWxsaXBzaXM9eyRsYWJlbC0+YXR0clsnZWxsaXBzaXMnXX0mZWxsaXBzaXMtdGFpbD0xJnRpdGxlPVN0YWNrIGxldmVsICRqLiIsIDIsIDApLiRsYWJlbC0+dmFsdWUuJygpJzsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJGxhYmVsID0gc3Vic3RyX3JlcGxhY2UoJHByZWZpeCwgInRpdGxlPVN0YWNrIGxldmVsICRqLiIsIDIsIDApLiRsYWJlbC0+dmFsdWUuJygpJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRsYWJlbCA9IHN1YnN0cl9yZXBsYWNlKCRwcmVmaXgsICJ0aXRsZT1TdGFjayBsZXZlbCAkai4iLCAyLCAwKS4kbGFzdENhbGw7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGFbc3Vic3RyX3JlcGxhY2UoJGxhYmVsLCBzcHJpbnRmKCdzZXBhcmF0b3I9JXMmJywgJGZyYW1lIGluc3RhbmNlb2YgRW51bVN0dWIgPyAnICcgOiAnOicpLCAyLCAwKV0gPSAkZnJhbWU7CgogICAgICAgICAgICAkbGFzdENhbGwgPSAkY2FsbDsKICAgICAgICB9CiAgICAgICAgaWYgKG51bGwgIT09ICR0cmFjZS0+c2xpY2VMZW5ndGgpIHsKICAgICAgICAgICAgJGEgPSBhcnJheV9zbGljZSgkYSwgMCwgJHRyYWNlLT5zbGljZUxlbmd0aCwgdHJ1ZSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGE7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjYXN0RnJhbWVTdHViKEZyYW1lU3R1YiAkZnJhbWUsIGFycmF5ICRhLCBTdHViICRzdHViLCAkaXNOZXN0ZWQpCiAgICB7CiAgICAgICAgaWYgKCEkaXNOZXN0ZWQpIHsKICAgICAgICAgICAgcmV0dXJuICRhOwogICAgICAgIH0KICAgICAgICAkZiA9ICRmcmFtZS0+dmFsdWU7CiAgICAgICAgJHByZWZpeCA9IENhc3Rlcjo6UFJFRklYX1ZJUlRVQUw7CgogICAgICAgIGlmIChpc3NldCgkZlsnZmlsZSddLCAkZlsnbGluZSddKSkgewogICAgICAgICAgICAkY2FjaGVLZXkgPSAkZjsKICAgICAgICAgICAgdW5zZXQoJGNhY2hlS2V5WydvYmplY3QnXSwgJGNhY2hlS2V5WydhcmdzJ10pOwogICAgICAgICAgICAkY2FjaGVLZXlbXSA9IHNlbGY6OiRzcmNDb250ZXh0OwogICAgICAgICAgICAkY2FjaGVLZXkgPSBpbXBsb2RlKCctJywgJGNhY2hlS2V5KTsKCiAgICAgICAgICAgIGlmIChpc3NldChzZWxmOjokZnJhbWVzQ2FjaGVbJGNhY2hlS2V5XSkpIHsKICAgICAgICAgICAgICAgICRhWyRwcmVmaXguJ3NyYyddID0gc2VsZjo6JGZyYW1lc0NhY2hlWyRjYWNoZUtleV07CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBpZiAocHJlZ19tYXRjaCgnL1woKFxkKylcKSg/OlwoW1xkYS1mXXszMn1cKSk/IDogKD86ZXZhbFwoXClcJ2QgY29kZXxydW50aW1lLWNyZWF0ZWQgZnVuY3Rpb24pJC8nLCAkZlsnZmlsZSddLCAkbWF0Y2gpKSB7CiAgICAgICAgICAgICAgICAgICAgJGZbJ2ZpbGUnXSA9IHN1YnN0cigkZlsnZmlsZSddLCAwLCAtc3RybGVuKCRtYXRjaFswXSkpOwogICAgICAgICAgICAgICAgICAgICRmWydsaW5lJ10gPSAoaW50KSAkbWF0Y2hbMV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkY2FsbGVyID0gaXNzZXQoJGZbJ2Z1bmN0aW9uJ10pID8gc3ByaW50ZignaW4gJXMoKSBvbiBsaW5lICVkJywgKGlzc2V0KCRmWydjbGFzcyddKSA/ICRmWydjbGFzcyddLiRmWyd0eXBlJ10gOiAnJykuJGZbJ2Z1bmN0aW9uJ10sICRmWydsaW5lJ10pIDogbnVsbDsKICAgICAgICAgICAgICAgICRzcmMgPSAkZlsnbGluZSddOwogICAgICAgICAgICAgICAgJHNyY0tleSA9ICRmWydmaWxlJ107CiAgICAgICAgICAgICAgICAkZWxsaXBzaXMgPSBuZXcgTGlua1N0dWIoJHNyY0tleSwgMCk7CiAgICAgICAgICAgICAgICAkc3JjQXR0ciA9ICdjb2xsYXBzZT0nLihpbnQpICRlbGxpcHNpcy0+aW5WZW5kb3I7CiAgICAgICAgICAgICAgICAkZWxsaXBzaXNUYWlsID0gaXNzZXQoJGVsbGlwc2lzLT5hdHRyWydlbGxpcHNpcy10YWlsJ10pID8gJGVsbGlwc2lzLT5hdHRyWydlbGxpcHNpcy10YWlsJ10gOiAwOwogICAgICAgICAgICAgICAgJGVsbGlwc2lzID0gaXNzZXQoJGVsbGlwc2lzLT5hdHRyWydlbGxpcHNpcyddKSA/ICRlbGxpcHNpcy0+YXR0clsnZWxsaXBzaXMnXSA6IDA7CgogICAgICAgICAgICAgICAgaWYgKGZpbGVfZXhpc3RzKCRmWydmaWxlJ10pICYmIDAgPD0gc2VsZjo6JHNyY0NvbnRleHQpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIWVtcHR5KCRmWydjbGFzcyddKSAmJiAoaXNfc3ViY2xhc3Nfb2YoJGZbJ2NsYXNzJ10sICdUd2lnXFRlbXBsYXRlJykgfHwgaXNfc3ViY2xhc3Nfb2YoJGZbJ2NsYXNzJ10sICdUd2lnX1RlbXBsYXRlJykpICYmIG1ldGhvZF9leGlzdHMoJGZbJ2NsYXNzJ10sICdnZXREZWJ1Z0luZm8nKSkgewogICAgICAgICAgICAgICAgICAgICAgICAkdGVtcGxhdGUgPSBpc3NldCgkZlsnb2JqZWN0J10pID8gJGZbJ29iamVjdCddIDogdW5zZXJpYWxpemUoc3ByaW50ZignTzolZDoiJXMiOjA6e30nLCBzdHJsZW4oJGZbJ2NsYXNzJ10pLCAkZlsnY2xhc3MnXSkpOwoKICAgICAgICAgICAgICAgICAgICAgICAgJGVsbGlwc2lzID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgJHRlbXBsYXRlU3JjID0gbWV0aG9kX2V4aXN0cygkdGVtcGxhdGUsICdnZXRTb3VyY2VDb250ZXh0JykgPyAkdGVtcGxhdGUtPmdldFNvdXJjZUNvbnRleHQoKS0+Z2V0Q29kZSgpIDogKG1ldGhvZF9leGlzdHMoJHRlbXBsYXRlLCAnZ2V0U291cmNlJykgPyAkdGVtcGxhdGUtPmdldFNvdXJjZSgpIDogJycpOwogICAgICAgICAgICAgICAgICAgICAgICAkdGVtcGxhdGVJbmZvID0gJHRlbXBsYXRlLT5nZXREZWJ1Z0luZm8oKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzc2V0KCR0ZW1wbGF0ZUluZm9bJGZbJ2xpbmUnXV0pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1ldGhvZF9leGlzdHMoJHRlbXBsYXRlLCAnZ2V0U291cmNlQ29udGV4dCcpIHx8ICFmaWxlX2V4aXN0cygkdGVtcGxhdGVQYXRoID0gJHRlbXBsYXRlLT5nZXRTb3VyY2VDb250ZXh0KCktPmdldFBhdGgoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGVtcGxhdGVQYXRoID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdGVtcGxhdGVTcmMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3JjID0gc2VsZjo6ZXh0cmFjdFNvdXJjZSgkdGVtcGxhdGVTcmMsICR0ZW1wbGF0ZUluZm9bJGZbJ2xpbmUnXV0sIHNlbGY6OiRzcmNDb250ZXh0LCAkY2FsbGVyLCAndHdpZycsICR0ZW1wbGF0ZVBhdGgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzcmNLZXkgPSAoJHRlbXBsYXRlUGF0aCA/OiAkdGVtcGxhdGUtPmdldFRlbXBsYXRlTmFtZSgpKS4nOicuJHRlbXBsYXRlSW5mb1skZlsnbGluZSddXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoJHNyY0tleSA9PSAkZlsnZmlsZSddKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRzcmMgPSBzZWxmOjpleHRyYWN0U291cmNlKGZpbGVfZ2V0X2NvbnRlbnRzKCRmWydmaWxlJ10pLCAkZlsnbGluZSddLCBzZWxmOjokc3JjQ29udGV4dCwgJGNhbGxlciwgJ3BocCcsICRmWydmaWxlJ10pOwogICAgICAgICAgICAgICAgICAgICAgICAkc3JjS2V5IC49ICc6Jy4kZlsnbGluZSddOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGVsbGlwc2lzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZWxsaXBzaXMgKz0gMSArIHN0cmxlbigkZlsnbGluZSddKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAkc3JjQXR0ciAuPSAnJnNlcGFyYXRvcj0gJzsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJHNyY0F0dHIgLj0gJyZzZXBhcmF0b3I9Oic7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkc3JjQXR0ciAuPSAkZWxsaXBzaXMgPyAnJmVsbGlwc2lzLXR5cGU9cGF0aCZlbGxpcHNpcz0nLiRlbGxpcHNpcy4nJmVsbGlwc2lzLXRhaWw9Jy4kZWxsaXBzaXNUYWlsIDogJyc7CiAgICAgICAgICAgICAgICBzZWxmOjokZnJhbWVzQ2FjaGVbJGNhY2hlS2V5XSA9ICRhWyRwcmVmaXguJ3NyYyddID0gbmV3IEVudW1TdHViKGFycmF5KCJcMH4kc3JjQXR0clwwJHNyY0tleSIgPT4gJHNyYykpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICB1bnNldCgkYVskcHJlZml4LidhcmdzJ10sICRhWyRwcmVmaXguJ2xpbmUnXSwgJGFbJHByZWZpeC4nZmlsZSddKTsKICAgICAgICBpZiAoJGZyYW1lLT5pblRyYWNlU3R1YikgewogICAgICAgICAgICB1bnNldCgkYVskcHJlZml4LidjbGFzcyddLCAkYVskcHJlZml4Lid0eXBlJ10sICRhWyRwcmVmaXguJ2Z1bmN0aW9uJ10pOwogICAgICAgIH0KICAgICAgICBmb3JlYWNoICgkYSBhcyAkayA9PiAkdikgewogICAgICAgICAgICBpZiAoISR2KSB7CiAgICAgICAgICAgICAgICB1bnNldCgkYVska10pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICgkZnJhbWUtPmtlZXBBcmdzICYmICFlbXB0eSgkZlsnYXJncyddKSkgewogICAgICAgICAgICAkYVskcHJlZml4Lidhcmd1bWVudHMnXSA9IG5ldyBBcmdzU3R1YigkZlsnYXJncyddLCAkZlsnZnVuY3Rpb24nXSwgJGZbJ2NsYXNzJ10pOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRhOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGZpbHRlckV4Y2VwdGlvbkFycmF5KCR4Q2xhc3MsIGFycmF5ICRhLCAkeFByZWZpeCwgJGZpbHRlcikKICAgIHsKICAgICAgICBpZiAoaXNzZXQoJGFbJHhQcmVmaXguJ3RyYWNlJ10pKSB7CiAgICAgICAgICAgICR0cmFjZSA9ICRhWyR4UHJlZml4Lid0cmFjZSddOwogICAgICAgICAgICB1bnNldCgkYVskeFByZWZpeC4ndHJhY2UnXSk7IC8vIEVuc3VyZXMgdGhlIHRyYWNlIGlzIGFsd2F5cyBsYXN0CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHRyYWNlID0gYXJyYXkoKTsKICAgICAgICB9CgogICAgICAgIGlmICghKCRmaWx0ZXIgJiBDYXN0ZXI6OkVYQ0xVREVfVkVSQk9TRSkgJiYgJHRyYWNlKSB7CiAgICAgICAgICAgIGlmIChpc3NldCgkYVtDYXN0ZXI6OlBSRUZJWF9QUk9URUNURUQuJ2ZpbGUnXSwgJGFbQ2FzdGVyOjpQUkVGSVhfUFJPVEVDVEVELidsaW5lJ10pKSB7CiAgICAgICAgICAgICAgICBzZWxmOjp0cmFjZVVuc2hpZnQoJHRyYWNlLCAkeENsYXNzLCAkYVtDYXN0ZXI6OlBSRUZJWF9QUk9URUNURUQuJ2ZpbGUnXSwgJGFbQ2FzdGVyOjpQUkVGSVhfUFJPVEVDVEVELidsaW5lJ10pOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRhW0Nhc3Rlcjo6UFJFRklYX1ZJUlRVQUwuJ3RyYWNlJ10gPSBuZXcgVHJhY2VTdHViKCR0cmFjZSwgc2VsZjo6JHRyYWNlQXJncyk7CiAgICAgICAgfQogICAgICAgIGlmIChlbXB0eSgkYVskeFByZWZpeC4ncHJldmlvdXMnXSkpIHsKICAgICAgICAgICAgdW5zZXQoJGFbJHhQcmVmaXguJ3ByZXZpb3VzJ10pOwogICAgICAgIH0KICAgICAgICB1bnNldCgkYVskeFByZWZpeC4nc3RyaW5nJ10sICRhW0Nhc3Rlcjo6UFJFRklYX0RZTkFNSUMuJ3hkZWJ1Z19tZXNzYWdlJ10sICRhW0Nhc3Rlcjo6UFJFRklYX0RZTkFNSUMuJ19fZGVzdHJ1Y3RvckV4Y2VwdGlvbiddKTsKCiAgICAgICAgaWYgKGlzc2V0KCRhW0Nhc3Rlcjo6UFJFRklYX1BST1RFQ1RFRC4nZmlsZSddLCAkYVtDYXN0ZXI6OlBSRUZJWF9QUk9URUNURUQuJ2xpbmUnXSkpIHsKICAgICAgICAgICAgJGFbQ2FzdGVyOjpQUkVGSVhfUFJPVEVDVEVELidmaWxlJ10gPSBuZXcgTGlua1N0dWIoJGFbQ2FzdGVyOjpQUkVGSVhfUFJPVEVDVEVELidmaWxlJ10sICRhW0Nhc3Rlcjo6UFJFRklYX1BST1RFQ1RFRC4nbGluZSddKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkYTsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiB0cmFjZVVuc2hpZnQoJiR0cmFjZSwgJGNsYXNzLCAkZmlsZSwgJGxpbmUpCiAgICB7CiAgICAgICAgaWYgKGlzc2V0KCR0cmFjZVswXVsnZmlsZSddLCAkdHJhY2VbMF1bJ2xpbmUnXSkgJiYgJHRyYWNlWzBdWydmaWxlJ10gPT09ICRmaWxlICYmICR0cmFjZVswXVsnbGluZSddID09PSAkbGluZSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGFycmF5X3Vuc2hpZnQoJHRyYWNlLCBhcnJheSgKICAgICAgICAgICAgJ2Z1bmN0aW9uJyA9PiAkY2xhc3MgPyAnbmV3ICcuJGNsYXNzIDogbnVsbCwKICAgICAgICAgICAgJ2ZpbGUnID0+ICRmaWxlLAogICAgICAgICAgICAnbGluZScgPT4gJGxpbmUsCiAgICAgICAgKSk7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZXh0cmFjdFNvdXJjZSgkc3JjTGluZXMsICRsaW5lLCAkc3JjQ29udGV4dCwgJHRpdGxlLCAkbGFuZywgJGZpbGUgPSBudWxsKQogICAgewogICAgICAgICRzcmNMaW5lcyA9IGV4cGxvZGUoIlxuIiwgJHNyY0xpbmVzKTsKICAgICAgICAkc3JjID0gYXJyYXkoKTsKCiAgICAgICAgZm9yICgkaSA9ICRsaW5lIC0gMSAtICRzcmNDb250ZXh0OyAkaSA8PSAkbGluZSAtIDEgKyAkc3JjQ29udGV4dDsgKyskaSkgewogICAgICAgICAgICAkc3JjW10gPSAoaXNzZXQoJHNyY0xpbmVzWyRpXSkgPyAkc3JjTGluZXNbJGldIDogJycpLiJcbiI7CiAgICAgICAgfQoKICAgICAgICAkc3JjTGluZXMgPSBhcnJheSgpOwogICAgICAgICRsdHJpbSA9IDA7CiAgICAgICAgZG8gewogICAgICAgICAgICAkcGFkID0gbnVsbDsKICAgICAgICAgICAgZm9yICgkaSA9ICRzcmNDb250ZXh0IDw8IDE7ICRpID49IDA7IC0tJGkpIHsKICAgICAgICAgICAgICAgIGlmIChpc3NldCgkc3JjWyRpXVskbHRyaW1dKSAmJiAiXHIiICE9PSAoJGMgPSAkc3JjWyRpXVskbHRyaW1dKSAmJiAiXG4iICE9PSAkYykgewogICAgICAgICAgICAgICAgICAgIGlmIChudWxsID09PSAkcGFkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRwYWQgPSAkYzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKCgnICcgIT09ICRjICYmICJcdCIgIT09ICRjKSB8fCAkcGFkICE9PSAkYykgewogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgKyskbHRyaW07CiAgICAgICAgfSB3aGlsZSAoMCA+ICRpICYmIG51bGwgIT09ICRwYWQpOwoKICAgICAgICAtLSRsdHJpbTsKCiAgICAgICAgZm9yZWFjaCAoJHNyYyBhcyAkaSA9PiAkYykgewogICAgICAgICAgICBpZiAoJGx0cmltKSB7CiAgICAgICAgICAgICAgICAkYyA9IGlzc2V0KCRjWyRsdHJpbV0pICYmICJcciIgIT09ICRjWyRsdHJpbV0gPyBzdWJzdHIoJGMsICRsdHJpbSkgOiBsdHJpbSgkYywgIiBcdCIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRjID0gc3Vic3RyKCRjLCAwLCAtMSk7CiAgICAgICAgICAgIGlmICgkaSAhPT0gJHNyY0NvbnRleHQpIHsKICAgICAgICAgICAgICAgICRjID0gbmV3IENvbnN0U3R1YignZGVmYXVsdCcsICRjKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRjID0gbmV3IENvbnN0U3R1YigkYywgJHRpdGxlKTsKICAgICAgICAgICAgICAgIGlmIChudWxsICE9PSAkZmlsZSkgewogICAgICAgICAgICAgICAgICAgICRjLT5hdHRyWydmaWxlJ10gPSAkZmlsZTsKICAgICAgICAgICAgICAgICAgICAkYy0+YXR0clsnbGluZSddID0gJGxpbmU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGMtPmF0dHJbJ2xhbmcnXSA9ICRsYW5nOwogICAgICAgICAgICAkc3JjTGluZXNbc3ByaW50ZigiXDB+c2VwYXJhdG9yPeKAuiAmJWRcMCIsICRpICsgJGxpbmUgLSAkc3JjQ29udGV4dCldID0gJGM7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IEVudW1TdHViKCRzcmNMaW5lcyk7CiAgICB9Cn0KAppDevTools/query/vendor/symfony/var-dumper/Caster/FrameStub.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyOwoKLyoqCiAqIFJlcHJlc2VudHMgYSBzaW5nbGUgYmFja3RyYWNlIGZyYW1lIGFzIHJldHVybmVkIGJ5IGRlYnVnX2JhY2t0cmFjZSgpIG9yIEV4Y2VwdGlvbi0+Z2V0VHJhY2UoKS4KICoKICogQGF1dGhvciBOaWNvbGFzIEdyZWthcyA8cEB0Y2h3b3JrLmNvbT4KICovCmNsYXNzIEZyYW1lU3R1YiBleHRlbmRzIEVudW1TdHViCnsKICAgIHB1YmxpYyAka2VlcEFyZ3M7CiAgICBwdWJsaWMgJGluVHJhY2VTdHViOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChhcnJheSAkZnJhbWUsIGJvb2wgJGtlZXBBcmdzID0gdHJ1ZSwgYm9vbCAkaW5UcmFjZVN0dWIgPSBmYWxzZSkKICAgIHsKICAgICAgICAkdGhpcy0+dmFsdWUgPSAkZnJhbWU7CiAgICAgICAgJHRoaXMtPmtlZXBBcmdzID0gJGtlZXBBcmdzOwogICAgICAgICR0aGlzLT5pblRyYWNlU3R1YiA9ICRpblRyYWNlU3R1YjsKICAgIH0KfQo=AppDevTools/query/vendor/symfony/var-dumper/Caster/GmpCaster.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDbG9uZXJcU3R1YjsKCi8qKgogKiBDYXN0cyBHTVAgb2JqZWN0cyB0byBhcnJheSByZXByZXNlbnRhdGlvbi4KICoKICogQGF1dGhvciBIYW16YSBBbXJvdWNoZSA8aGFtemEuc2ltcGVyZml0QGdtYWlsLmNvbT4KICogQGF1dGhvciBOaWNvbGFzIEdyZWthcyA8cEB0Y2h3b3JrLmNvbT4KICovCmNsYXNzIEdtcENhc3Rlcgp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNhc3RHbXAoXEdNUCAkZ21wLCBhcnJheSAkYSwgU3R1YiAkc3R1YiwgJGlzTmVzdGVkLCAkZmlsdGVyKTogYXJyYXkKICAgIHsKICAgICAgICAkYVtDYXN0ZXI6OlBSRUZJWF9WSVJUVUFMLid2YWx1ZSddID0gbmV3IENvbnN0U3R1YihnbXBfc3RydmFsKCRnbXApLCBnbXBfc3RydmFsKCRnbXApKTsKCiAgICAgICAgcmV0dXJuICRhOwogICAgfQp9Cg==AppDevTools/query/vendor/symfony/var-dumper/Caster/LinkStub.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyOwoKLyoqCiAqIFJlcHJlc2VudHMgYSBmaWxlIG9yIGEgVVJMLgogKgogKiBAYXV0aG9yIE5pY29sYXMgR3Jla2FzIDxwQHRjaHdvcmsuY29tPgogKi8KY2xhc3MgTGlua1N0dWIgZXh0ZW5kcyBDb25zdFN0dWIKewogICAgcHVibGljICRpblZlbmRvciA9IGZhbHNlOwoKICAgIHByaXZhdGUgc3RhdGljICR2ZW5kb3JSb290czsKICAgIHByaXZhdGUgc3RhdGljICRjb21wb3NlclJvb3RzOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbGFiZWwsIGludCAkbGluZSA9IDAsICRocmVmID0gbnVsbCkKICAgIHsKICAgICAgICAkdGhpcy0+dmFsdWUgPSAkbGFiZWw7CgogICAgICAgIGlmIChudWxsID09PSAkaHJlZikgewogICAgICAgICAgICAkaHJlZiA9ICRsYWJlbDsKICAgICAgICB9CiAgICAgICAgaWYgKCFpc19zdHJpbmcoJGhyZWYpKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKDAgPT09IHN0cnBvcygkaHJlZiwgJ2ZpbGU6Ly8nKSkgewogICAgICAgICAgICBpZiAoJGhyZWYgPT09ICRsYWJlbCkgewogICAgICAgICAgICAgICAgJGxhYmVsID0gc3Vic3RyKCRsYWJlbCwgNyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGhyZWYgPSBzdWJzdHIoJGhyZWYsIDcpOwogICAgICAgIH0gZWxzZWlmIChmYWxzZSAhPT0gc3RycG9zKCRocmVmLCAnOi8vJykpIHsKICAgICAgICAgICAgJHRoaXMtPmF0dHJbJ2hyZWYnXSA9ICRocmVmOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAoIWZpbGVfZXhpc3RzKCRocmVmKSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmICgkbGluZSkgewogICAgICAgICAgICAkdGhpcy0+YXR0clsnbGluZSddID0gJGxpbmU7CiAgICAgICAgfQogICAgICAgIGlmICgkbGFiZWwgIT09ICR0aGlzLT5hdHRyWydmaWxlJ10gPSByZWFscGF0aCgkaHJlZikgPzogJGhyZWYpIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAoJGNvbXBvc2VyUm9vdCA9ICR0aGlzLT5nZXRDb21wb3NlclJvb3QoJGhyZWYsICR0aGlzLT5pblZlbmRvcikpIHsKICAgICAgICAgICAgJHRoaXMtPmF0dHJbJ2VsbGlwc2lzJ10gPSBzdHJsZW4oJGhyZWYpIC0gc3RybGVuKCRjb21wb3NlclJvb3QpICsgMTsKICAgICAgICAgICAgJHRoaXMtPmF0dHJbJ2VsbGlwc2lzLXR5cGUnXSA9ICdwYXRoJzsKICAgICAgICAgICAgJHRoaXMtPmF0dHJbJ2VsbGlwc2lzLXRhaWwnXSA9IDEgKyAoJHRoaXMtPmluVmVuZG9yID8gMiArIHN0cmxlbihpbXBsb2RlKGFycmF5X3NsaWNlKGV4cGxvZGUoRElSRUNUT1JZX1NFUEFSQVRPUiwgc3Vic3RyKCRocmVmLCAxIC0gJHRoaXMtPmF0dHJbJ2VsbGlwc2lzJ10pKSwgMCwgMikpKSA6IDApOwogICAgICAgIH0gZWxzZWlmICgzIDwgY291bnQoJGVsbGlwc2lzID0gZXhwbG9kZShESVJFQ1RPUllfU0VQQVJBVE9SLCAkaHJlZikpKSB7CiAgICAgICAgICAgICR0aGlzLT5hdHRyWydlbGxpcHNpcyddID0gMiArIHN0cmxlbihpbXBsb2RlKGFycmF5X3NsaWNlKCRlbGxpcHNpcywgLTIpKSk7CiAgICAgICAgICAgICR0aGlzLT5hdHRyWydlbGxpcHNpcy10eXBlJ10gPSAncGF0aCc7CiAgICAgICAgICAgICR0aGlzLT5hdHRyWydlbGxpcHNpcy10YWlsJ10gPSAxOwogICAgICAgIH0KICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldENvbXBvc2VyUm9vdCgkZmlsZSwgJiRpblZlbmRvcikKICAgIHsKICAgICAgICBpZiAobnVsbCA9PT0gc2VsZjo6JHZlbmRvclJvb3RzKSB7CiAgICAgICAgICAgIHNlbGY6OiR2ZW5kb3JSb290cyA9IGFycmF5KCk7CgogICAgICAgICAgICBmb3JlYWNoIChnZXRfZGVjbGFyZWRfY2xhc3NlcygpIGFzICRjbGFzcykgewogICAgICAgICAgICAgICAgaWYgKCdDJyA9PT0gJGNsYXNzWzBdICYmIDAgPT09IHN0cnBvcygkY2xhc3MsICdDb21wb3NlckF1dG9sb2FkZXJJbml0JykpIHsKICAgICAgICAgICAgICAgICAgICAkciA9IG5ldyBcUmVmbGVjdGlvbkNsYXNzKCRjbGFzcyk7CiAgICAgICAgICAgICAgICAgICAgJHYgPSBkaXJuYW1lKGRpcm5hbWUoJHItPmdldEZpbGVOYW1lKCkpKTsKICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZV9leGlzdHMoJHYuJy9jb21wb3Nlci9pbnN0YWxsZWQuanNvbicpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGY6OiR2ZW5kb3JSb290c1tdID0gJHYuRElSRUNUT1JZX1NFUEFSQVRPUjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgJGluVmVuZG9yID0gZmFsc2U7CgogICAgICAgIGlmIChpc3NldChzZWxmOjokY29tcG9zZXJSb290c1skZGlyID0gZGlybmFtZSgkZmlsZSldKSkgewogICAgICAgICAgICByZXR1cm4gc2VsZjo6JGNvbXBvc2VyUm9vdHNbJGRpcl07CiAgICAgICAgfQoKICAgICAgICBmb3JlYWNoIChzZWxmOjokdmVuZG9yUm9vdHMgYXMgJHJvb3QpIHsKICAgICAgICAgICAgaWYgKCRpblZlbmRvciA9IDAgPT09IHN0cnBvcygkZmlsZSwgJHJvb3QpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJHJvb3Q7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRwYXJlbnQgPSAkZGlyOwogICAgICAgIHdoaWxlICghQGZpbGVfZXhpc3RzKCRwYXJlbnQuJy9jb21wb3Nlci5qc29uJykpIHsKICAgICAgICAgICAgaWYgKCFAZmlsZV9leGlzdHMoJHBhcmVudCkpIHsKICAgICAgICAgICAgICAgIC8vIG9wZW5fYmFzZWRpciByZXN0cmljdGlvbiBpbiBlZmZlY3QKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgkcGFyZW50ID09PSBkaXJuYW1lKCRwYXJlbnQpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gc2VsZjo6JGNvbXBvc2VyUm9vdHNbJGRpcl0gPSBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHBhcmVudCA9IGRpcm5hbWUoJHBhcmVudCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gc2VsZjo6JGNvbXBvc2VyUm9vdHNbJGRpcl0gPSAkcGFyZW50LkRJUkVDVE9SWV9TRVBBUkFUT1I7CiAgICB9Cn0KAppDevTools/query/vendor/symfony/var-dumper/Caster/PdoCaster.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDbG9uZXJcU3R1YjsKCi8qKgogKiBDYXN0cyBQRE8gcmVsYXRlZCBjbGFzc2VzIHRvIGFycmF5IHJlcHJlc2VudGF0aW9uLgogKgogKiBAYXV0aG9yIE5pY29sYXMgR3Jla2FzIDxwQHRjaHdvcmsuY29tPgogKi8KY2xhc3MgUGRvQ2FzdGVyCnsKICAgIHByaXZhdGUgc3RhdGljICRwZG9BdHRyaWJ1dGVzID0gYXJyYXkoCiAgICAgICAgJ0NBU0UnID0+IGFycmF5KAogICAgICAgICAgICBcUERPOjpDQVNFX0xPV0VSID0+ICdMT1dFUicsCiAgICAgICAgICAgIFxQRE86OkNBU0VfTkFUVVJBTCA9PiAnTkFUVVJBTCcsCiAgICAgICAgICAgIFxQRE86OkNBU0VfVVBQRVIgPT4gJ1VQUEVSJywKICAgICAgICApLAogICAgICAgICdFUlJNT0RFJyA9PiBhcnJheSgKICAgICAgICAgICAgXFBETzo6RVJSTU9ERV9TSUxFTlQgPT4gJ1NJTEVOVCcsCiAgICAgICAgICAgIFxQRE86OkVSUk1PREVfV0FSTklORyA9PiAnV0FSTklORycsCiAgICAgICAgICAgIFxQRE86OkVSUk1PREVfRVhDRVBUSU9OID0+ICdFWENFUFRJT04nLAogICAgICAgICksCiAgICAgICAgJ1RJTUVPVVQnLAogICAgICAgICdQUkVGRVRDSCcsCiAgICAgICAgJ0FVVE9DT01NSVQnLAogICAgICAgICdQRVJTSVNURU5UJywKICAgICAgICAnRFJJVkVSX05BTUUnLAogICAgICAgICdTRVJWRVJfSU5GTycsCiAgICAgICAgJ09SQUNMRV9OVUxMUycgPT4gYXJyYXkoCiAgICAgICAgICAgIFxQRE86Ok5VTExfTkFUVVJBTCA9PiAnTkFUVVJBTCcsCiAgICAgICAgICAgIFxQRE86Ok5VTExfRU1QVFlfU1RSSU5HID0+ICdFTVBUWV9TVFJJTkcnLAogICAgICAgICAgICBcUERPOjpOVUxMX1RPX1NUUklORyA9PiAnVE9fU1RSSU5HJywKICAgICAgICApLAogICAgICAgICdDTElFTlRfVkVSU0lPTicsCiAgICAgICAgJ1NFUlZFUl9WRVJTSU9OJywKICAgICAgICAnU1RBVEVNRU5UX0NMQVNTJywKICAgICAgICAnRU1VTEFURV9QUkVQQVJFUycsCiAgICAgICAgJ0NPTk5FQ1RJT05fU1RBVFVTJywKICAgICAgICAnU1RSSU5HSUZZX0ZFVENIRVMnLAogICAgICAgICdERUZBVUxUX0ZFVENIX01PREUnID0+IGFycmF5KAogICAgICAgICAgICBcUERPOjpGRVRDSF9BU1NPQyA9PiAnQVNTT0MnLAogICAgICAgICAgICBcUERPOjpGRVRDSF9CT1RIID0+ICdCT1RIJywKICAgICAgICAgICAgXFBETzo6RkVUQ0hfTEFaWSA9PiAnTEFaWScsCiAgICAgICAgICAgIFxQRE86OkZFVENIX05VTSA9PiAnTlVNJywKICAgICAgICAgICAgXFBETzo6RkVUQ0hfT0JKID0+ICdPQkonLAogICAgICAgICksCiAgICApOwoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2FzdFBkbyhcUERPICRjLCBhcnJheSAkYSwgU3R1YiAkc3R1YiwgJGlzTmVzdGVkKQogICAgewogICAgICAgICRhdHRyID0gYXJyYXkoKTsKICAgICAgICAkZXJybW9kZSA9ICRjLT5nZXRBdHRyaWJ1dGUoXFBETzo6QVRUUl9FUlJNT0RFKTsKICAgICAgICAkYy0+c2V0QXR0cmlidXRlKFxQRE86OkFUVFJfRVJSTU9ERSwgXFBETzo6RVJSTU9ERV9FWENFUFRJT04pOwoKICAgICAgICBmb3JlYWNoIChzZWxmOjokcGRvQXR0cmlidXRlcyBhcyAkayA9PiAkdikgewogICAgICAgICAgICBpZiAoIWlzc2V0KCRrWzBdKSkgewogICAgICAgICAgICAgICAgJGsgPSAkdjsKICAgICAgICAgICAgICAgICR2ID0gYXJyYXkoKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICRhdHRyWyRrXSA9ICdFUlJNT0RFJyA9PT0gJGsgPyAkZXJybW9kZSA6ICRjLT5nZXRBdHRyaWJ1dGUoY29uc3RhbnQoJ1BETzo6QVRUUl8nLiRrKSk7CiAgICAgICAgICAgICAgICBpZiAoJHYgJiYgaXNzZXQoJHZbJGF0dHJbJGtdXSkpIHsKICAgICAgICAgICAgICAgICAgICAkYXR0clska10gPSBuZXcgQ29uc3RTdHViKCR2WyRhdHRyWyRrXV0sICRhdHRyWyRrXSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gY2F0Y2ggKFxFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoaXNzZXQoJGF0dHJbJGsgPSAnU1RBVEVNRU5UX0NMQVNTJ11bMV0pKSB7CiAgICAgICAgICAgIGlmICgkYXR0clska11bMV0pIHsKICAgICAgICAgICAgICAgICRhdHRyWyRrXVsxXSA9IG5ldyBBcmdzU3R1YigkYXR0clska11bMV0sICdfX2NvbnN0cnVjdCcsICRhdHRyWyRrXVswXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGF0dHJbJGtdWzBdID0gbmV3IENsYXNzU3R1YigkYXR0clska11bMF0pOwogICAgICAgIH0KCiAgICAgICAgJHByZWZpeCA9IENhc3Rlcjo6UFJFRklYX1ZJUlRVQUw7CiAgICAgICAgJGEgKz0gYXJyYXkoCiAgICAgICAgICAgICRwcmVmaXguJ2luVHJhbnNhY3Rpb24nID0+IG1ldGhvZF9leGlzdHMoJGMsICdpblRyYW5zYWN0aW9uJyksCiAgICAgICAgICAgICRwcmVmaXguJ2Vycm9ySW5mbycgPT4gJGMtPmVycm9ySW5mbygpLAogICAgICAgICAgICAkcHJlZml4LidhdHRyaWJ1dGVzJyA9PiBuZXcgRW51bVN0dWIoJGF0dHIpLAogICAgICAgICk7CgogICAgICAgIGlmICgkYVskcHJlZml4LidpblRyYW5zYWN0aW9uJ10pIHsKICAgICAgICAgICAgJGFbJHByZWZpeC4naW5UcmFuc2FjdGlvbiddID0gJGMtPmluVHJhbnNhY3Rpb24oKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB1bnNldCgkYVskcHJlZml4LidpblRyYW5zYWN0aW9uJ10pOwogICAgICAgIH0KCiAgICAgICAgaWYgKCFpc3NldCgkYVskcHJlZml4LidlcnJvckluZm8nXVsxXSwgJGFbJHByZWZpeC4nZXJyb3JJbmZvJ11bMl0pKSB7CiAgICAgICAgICAgIHVuc2V0KCRhWyRwcmVmaXguJ2Vycm9ySW5mbyddKTsKICAgICAgICB9CgogICAgICAgICRjLT5zZXRBdHRyaWJ1dGUoXFBETzo6QVRUUl9FUlJNT0RFLCAkZXJybW9kZSk7CgogICAgICAgIHJldHVybiAkYTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNhc3RQZG9TdGF0ZW1lbnQoXFBET1N0YXRlbWVudCAkYywgYXJyYXkgJGEsIFN0dWIgJHN0dWIsICRpc05lc3RlZCkKICAgIHsKICAgICAgICAkcHJlZml4ID0gQ2FzdGVyOjpQUkVGSVhfVklSVFVBTDsKICAgICAgICAkYVskcHJlZml4LidlcnJvckluZm8nXSA9ICRjLT5lcnJvckluZm8oKTsKCiAgICAgICAgaWYgKCFpc3NldCgkYVskcHJlZml4LidlcnJvckluZm8nXVsxXSwgJGFbJHByZWZpeC4nZXJyb3JJbmZvJ11bMl0pKSB7CiAgICAgICAgICAgIHVuc2V0KCRhWyRwcmVmaXguJ2Vycm9ySW5mbyddKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkYTsKICAgIH0KfQo=AppDevTools/query/vendor/symfony/var-dumper/Caster/PgSqlCaster.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDbG9uZXJcU3R1YjsKCi8qKgogKiBDYXN0cyBwcXNxbCByZXNvdXJjZXMgdG8gYXJyYXkgcmVwcmVzZW50YXRpb24uCiAqCiAqIEBhdXRob3IgTmljb2xhcyBHcmVrYXMgPHBAdGNod29yay5jb20+CiAqLwpjbGFzcyBQZ1NxbENhc3Rlcgp7CiAgICBwcml2YXRlIHN0YXRpYyAkcGFyYW1Db2RlcyA9IGFycmF5KAogICAgICAgICdzZXJ2ZXJfZW5jb2RpbmcnLAogICAgICAgICdjbGllbnRfZW5jb2RpbmcnLAogICAgICAgICdpc19zdXBlcnVzZXInLAogICAgICAgICdzZXNzaW9uX2F1dGhvcml6YXRpb24nLAogICAgICAgICdEYXRlU3R5bGUnLAogICAgICAgICdUaW1lWm9uZScsCiAgICAgICAgJ0ludGVydmFsU3R5bGUnLAogICAgICAgICdpbnRlZ2VyX2RhdGV0aW1lcycsCiAgICAgICAgJ2FwcGxpY2F0aW9uX25hbWUnLAogICAgICAgICdzdGFuZGFyZF9jb25mb3JtaW5nX3N0cmluZ3MnLAogICAgKTsKCiAgICBwcml2YXRlIHN0YXRpYyAkdHJhbnNhY3Rpb25TdGF0dXMgPSBhcnJheSgKICAgICAgICBQR1NRTF9UUkFOU0FDVElPTl9JRExFID0+ICdQR1NRTF9UUkFOU0FDVElPTl9JRExFJywKICAgICAgICBQR1NRTF9UUkFOU0FDVElPTl9BQ1RJVkUgPT4gJ1BHU1FMX1RSQU5TQUNUSU9OX0FDVElWRScsCiAgICAgICAgUEdTUUxfVFJBTlNBQ1RJT05fSU5UUkFOUyA9PiAnUEdTUUxfVFJBTlNBQ1RJT05fSU5UUkFOUycsCiAgICAgICAgUEdTUUxfVFJBTlNBQ1RJT05fSU5FUlJPUiA9PiAnUEdTUUxfVFJBTlNBQ1RJT05fSU5FUlJPUicsCiAgICAgICAgUEdTUUxfVFJBTlNBQ1RJT05fVU5LTk9XTiA9PiAnUEdTUUxfVFJBTlNBQ1RJT05fVU5LTk9XTicsCiAgICApOwoKICAgIHByaXZhdGUgc3RhdGljICRyZXN1bHRTdGF0dXMgPSBhcnJheSgKICAgICAgICBQR1NRTF9FTVBUWV9RVUVSWSA9PiAnUEdTUUxfRU1QVFlfUVVFUlknLAogICAgICAgIFBHU1FMX0NPTU1BTkRfT0sgPT4gJ1BHU1FMX0NPTU1BTkRfT0snLAogICAgICAgIFBHU1FMX1RVUExFU19PSyA9PiAnUEdTUUxfVFVQTEVTX09LJywKICAgICAgICBQR1NRTF9DT1BZX09VVCA9PiAnUEdTUUxfQ09QWV9PVVQnLAogICAgICAgIFBHU1FMX0NPUFlfSU4gPT4gJ1BHU1FMX0NPUFlfSU4nLAogICAgICAgIFBHU1FMX0JBRF9SRVNQT05TRSA9PiAnUEdTUUxfQkFEX1JFU1BPTlNFJywKICAgICAgICBQR1NRTF9OT05GQVRBTF9FUlJPUiA9PiAnUEdTUUxfTk9ORkFUQUxfRVJST1InLAogICAgICAgIFBHU1FMX0ZBVEFMX0VSUk9SID0+ICdQR1NRTF9GQVRBTF9FUlJPUicsCiAgICApOwoKICAgIHByaXZhdGUgc3RhdGljICRkaWFnQ29kZXMgPSBhcnJheSgKICAgICAgICAnc2V2ZXJpdHknID0+IFBHU1FMX0RJQUdfU0VWRVJJVFksCiAgICAgICAgJ3NxbHN0YXRlJyA9PiBQR1NRTF9ESUFHX1NRTFNUQVRFLAogICAgICAgICdtZXNzYWdlJyA9PiBQR1NRTF9ESUFHX01FU1NBR0VfUFJJTUFSWSwKICAgICAgICAnZGV0YWlsJyA9PiBQR1NRTF9ESUFHX01FU1NBR0VfREVUQUlMLAogICAgICAgICdoaW50JyA9PiBQR1NRTF9ESUFHX01FU1NBR0VfSElOVCwKICAgICAgICAnc3RhdGVtZW50IHBvc2l0aW9uJyA9PiBQR1NRTF9ESUFHX1NUQVRFTUVOVF9QT1NJVElPTiwKICAgICAgICAnaW50ZXJuYWwgcG9zaXRpb24nID0+IFBHU1FMX0RJQUdfSU5URVJOQUxfUE9TSVRJT04sCiAgICAgICAgJ2ludGVybmFsIHF1ZXJ5JyA9PiBQR1NRTF9ESUFHX0lOVEVSTkFMX1FVRVJZLAogICAgICAgICdjb250ZXh0JyA9PiBQR1NRTF9ESUFHX0NPTlRFWFQsCiAgICAgICAgJ2ZpbGUnID0+IFBHU1FMX0RJQUdfU09VUkNFX0ZJTEUsCiAgICAgICAgJ2xpbmUnID0+IFBHU1FMX0RJQUdfU09VUkNFX0xJTkUsCiAgICAgICAgJ2Z1bmN0aW9uJyA9PiBQR1NRTF9ESUFHX1NPVVJDRV9GVU5DVElPTiwKICAgICk7CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjYXN0TGFyZ2VPYmplY3QoJGxvLCBhcnJheSAkYSwgU3R1YiAkc3R1YiwgJGlzTmVzdGVkKQogICAgewogICAgICAgICRhWydzZWVrIHBvc2l0aW9uJ10gPSBwZ19sb190ZWxsKCRsbyk7CgogICAgICAgIHJldHVybiAkYTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNhc3RMaW5rKCRsaW5rLCBhcnJheSAkYSwgU3R1YiAkc3R1YiwgJGlzTmVzdGVkKQogICAgewogICAgICAgICRhWydzdGF0dXMnXSA9IHBnX2Nvbm5lY3Rpb25fc3RhdHVzKCRsaW5rKTsKICAgICAgICAkYVsnc3RhdHVzJ10gPSBuZXcgQ29uc3RTdHViKFBHU1FMX0NPTk5FQ1RJT05fT0sgPT09ICRhWydzdGF0dXMnXSA/ICdQR1NRTF9DT05ORUNUSU9OX09LJyA6ICdQR1NRTF9DT05ORUNUSU9OX0JBRCcsICRhWydzdGF0dXMnXSk7CiAgICAgICAgJGFbJ2J1c3knXSA9IHBnX2Nvbm5lY3Rpb25fYnVzeSgkbGluayk7CgogICAgICAgICRhWyd0cmFuc2FjdGlvbiddID0gcGdfdHJhbnNhY3Rpb25fc3RhdHVzKCRsaW5rKTsKICAgICAgICBpZiAoaXNzZXQoc2VsZjo6JHRyYW5zYWN0aW9uU3RhdHVzWyRhWyd0cmFuc2FjdGlvbiddXSkpIHsKICAgICAgICAgICAgJGFbJ3RyYW5zYWN0aW9uJ10gPSBuZXcgQ29uc3RTdHViKHNlbGY6OiR0cmFuc2FjdGlvblN0YXR1c1skYVsndHJhbnNhY3Rpb24nXV0sICRhWyd0cmFuc2FjdGlvbiddKTsKICAgICAgICB9CgogICAgICAgICRhWydwaWQnXSA9IHBnX2dldF9waWQoJGxpbmspOwogICAgICAgICRhWydsYXN0IGVycm9yJ10gPSBwZ19sYXN0X2Vycm9yKCRsaW5rKTsKICAgICAgICAkYVsnbGFzdCBub3RpY2UnXSA9IHBnX2xhc3Rfbm90aWNlKCRsaW5rKTsKICAgICAgICAkYVsnaG9zdCddID0gcGdfaG9zdCgkbGluayk7CiAgICAgICAgJGFbJ3BvcnQnXSA9IHBnX3BvcnQoJGxpbmspOwogICAgICAgICRhWydkYm5hbWUnXSA9IHBnX2RibmFtZSgkbGluayk7CiAgICAgICAgJGFbJ29wdGlvbnMnXSA9IHBnX29wdGlvbnMoJGxpbmspOwogICAgICAgICRhWyd2ZXJzaW9uJ10gPSBwZ192ZXJzaW9uKCRsaW5rKTsKCiAgICAgICAgZm9yZWFjaCAoc2VsZjo6JHBhcmFtQ29kZXMgYXMgJHYpIHsKICAgICAgICAgICAgaWYgKGZhbHNlICE9PSAkcyA9IHBnX3BhcmFtZXRlcl9zdGF0dXMoJGxpbmssICR2KSkgewogICAgICAgICAgICAgICAgJGFbJ3BhcmFtJ11bJHZdID0gJHM7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRhWydwYXJhbSddWydjbGllbnRfZW5jb2RpbmcnXSA9IHBnX2NsaWVudF9lbmNvZGluZygkbGluayk7CiAgICAgICAgJGFbJ3BhcmFtJ10gPSBuZXcgRW51bVN0dWIoJGFbJ3BhcmFtJ10pOwoKICAgICAgICByZXR1cm4gJGE7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjYXN0UmVzdWx0KCRyZXN1bHQsIGFycmF5ICRhLCBTdHViICRzdHViLCAkaXNOZXN0ZWQpCiAgICB7CiAgICAgICAgJGFbJ251bSByb3dzJ10gPSBwZ19udW1fcm93cygkcmVzdWx0KTsKICAgICAgICAkYVsnc3RhdHVzJ10gPSBwZ19yZXN1bHRfc3RhdHVzKCRyZXN1bHQpOwogICAgICAgIGlmIChpc3NldChzZWxmOjokcmVzdWx0U3RhdHVzWyRhWydzdGF0dXMnXV0pKSB7CiAgICAgICAgICAgICRhWydzdGF0dXMnXSA9IG5ldyBDb25zdFN0dWIoc2VsZjo6JHJlc3VsdFN0YXR1c1skYVsnc3RhdHVzJ11dLCAkYVsnc3RhdHVzJ10pOwogICAgICAgIH0KICAgICAgICAkYVsnY29tbWFuZC1jb21wbGV0aW9uIHRhZyddID0gcGdfcmVzdWx0X3N0YXR1cygkcmVzdWx0LCBQR1NRTF9TVEFUVVNfU1RSSU5HKTsKCiAgICAgICAgaWYgKC0xID09PSAkYVsnbnVtIHJvd3MnXSkgewogICAgICAgICAgICBmb3JlYWNoIChzZWxmOjokZGlhZ0NvZGVzIGFzICRrID0+ICR2KSB7CiAgICAgICAgICAgICAgICAkYVsnZXJyb3InXVska10gPSBwZ19yZXN1bHRfZXJyb3JfZmllbGQoJHJlc3VsdCwgJHYpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAkYVsnYWZmZWN0ZWQgcm93cyddID0gcGdfYWZmZWN0ZWRfcm93cygkcmVzdWx0KTsKICAgICAgICAkYVsnbGFzdCBPSUQnXSA9IHBnX2xhc3Rfb2lkKCRyZXN1bHQpOwoKICAgICAgICAkZmllbGRzID0gcGdfbnVtX2ZpZWxkcygkcmVzdWx0KTsKCiAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgJGZpZWxkczsgKyskaSkgewogICAgICAgICAgICAkZmllbGQgPSBhcnJheSgKICAgICAgICAgICAgICAgICduYW1lJyA9PiBwZ19maWVsZF9uYW1lKCRyZXN1bHQsICRpKSwKICAgICAgICAgICAgICAgICd0YWJsZScgPT4gc3ByaW50ZignJXMgKE9JRDogJXMpJywgcGdfZmllbGRfdGFibGUoJHJlc3VsdCwgJGkpLCBwZ19maWVsZF90YWJsZSgkcmVzdWx0LCAkaSwgdHJ1ZSkpLAogICAgICAgICAgICAgICAgJ3R5cGUnID0+IHNwcmludGYoJyVzIChPSUQ6ICVzKScsIHBnX2ZpZWxkX3R5cGUoJHJlc3VsdCwgJGkpLCBwZ19maWVsZF90eXBlX29pZCgkcmVzdWx0LCAkaSkpLAogICAgICAgICAgICAgICAgJ251bGxhYmxlJyA9PiAoYm9vbCkgcGdfZmllbGRfaXNfbnVsbCgkcmVzdWx0LCAkaSksCiAgICAgICAgICAgICAgICAnc3RvcmFnZScgPT4gcGdfZmllbGRfc2l6ZSgkcmVzdWx0LCAkaSkuJyBieXRlcycsCiAgICAgICAgICAgICAgICAnZGlzcGxheScgPT4gcGdfZmllbGRfcHJ0bGVuKCRyZXN1bHQsICRpKS4nIGNoYXJzJywKICAgICAgICAgICAgKTsKICAgICAgICAgICAgaWYgKCcgKE9JRDogKScgPT09ICRmaWVsZFsndGFibGUnXSkgewogICAgICAgICAgICAgICAgJGZpZWxkWyd0YWJsZSddID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoJy0xIGJ5dGVzJyA9PT0gJGZpZWxkWydzdG9yYWdlJ10pIHsKICAgICAgICAgICAgICAgICRmaWVsZFsnc3RvcmFnZSddID0gJ3ZhcmlhYmxlIHNpemUnOwogICAgICAgICAgICB9IGVsc2VpZiAoJzEgYnl0ZXMnID09PSAkZmllbGRbJ3N0b3JhZ2UnXSkgewogICAgICAgICAgICAgICAgJGZpZWxkWydzdG9yYWdlJ10gPSAnMSBieXRlJzsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoJzEgY2hhcnMnID09PSAkZmllbGRbJ2Rpc3BsYXknXSkgewogICAgICAgICAgICAgICAgJGZpZWxkWydkaXNwbGF5J10gPSAnMSBjaGFyJzsKICAgICAgICAgICAgfQogICAgICAgICAgICAkYVsnZmllbGRzJ11bXSA9IG5ldyBFbnVtU3R1YigkZmllbGQpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRhOwogICAgfQp9Cg==AppDevTools/query/vendor/symfony/var-dumper/Caster/RedisCaster.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDbG9uZXJcU3R1YjsKCi8qKgogKiBDYXN0cyBSZWRpcyBjbGFzcyBmcm9tIGV4dC1yZWRpcyB0byBhcnJheSByZXByZXNlbnRhdGlvbi4KICoKICogQGF1dGhvciBOaWNvbGFzIEdyZWthcyA8cEB0Y2h3b3JrLmNvbT4KICovCmNsYXNzIFJlZGlzQ2FzdGVyCnsKICAgIHByaXZhdGUgc3RhdGljICRzZXJpYWxpemVyID0gYXJyYXkoCiAgICAgICAgXFJlZGlzOjpTRVJJQUxJWkVSX05PTkUgPT4gJ05PTkUnLAogICAgICAgIFxSZWRpczo6U0VSSUFMSVpFUl9QSFAgPT4gJ1BIUCcsCiAgICAgICAgMiA9PiAnSUdCSU5BUlknLCAvLyBPcHRpb25hbCBSZWRpczo6U0VSSUFMSVpFUl9JR0JJTkFSWQogICAgKTsKCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNhc3RSZWRpcyhcUmVkaXMgJGMsIGFycmF5ICRhLCBTdHViICRzdHViLCAkaXNOZXN0ZWQpCiAgICB7CiAgICAgICAgJHByZWZpeCA9IENhc3Rlcjo6UFJFRklYX1ZJUlRVQUw7CgogICAgICAgIGlmICghJGNvbm5lY3RlZCA9ICRjLT5pc0Nvbm5lY3RlZCgpKSB7CiAgICAgICAgICAgIHJldHVybiAkYSArIGFycmF5KAogICAgICAgICAgICAgICAgJHByZWZpeC4naXNDb25uZWN0ZWQnID0+ICRjb25uZWN0ZWQsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAkc2VyID0gJGMtPmdldE9wdGlvbihcUmVkaXM6Ok9QVF9TRVJJQUxJWkVSKTsKICAgICAgICAkcmV0cnkgPSBkZWZpbmVkKCdSZWRpczo6T1BUX1NDQU4nKSA/ICRjLT5nZXRPcHRpb24oXFJlZGlzOjpPUFRfU0NBTikgOiAwOwoKICAgICAgICByZXR1cm4gJGEgKyBhcnJheSgKICAgICAgICAgICAgJHByZWZpeC4naXNDb25uZWN0ZWQnID0+ICRjb25uZWN0ZWQsCiAgICAgICAgICAgICRwcmVmaXguJ2hvc3QnID0+ICRjLT5nZXRIb3N0KCksCiAgICAgICAgICAgICRwcmVmaXguJ3BvcnQnID0+ICRjLT5nZXRQb3J0KCksCiAgICAgICAgICAgICRwcmVmaXguJ2F1dGgnID0+ICRjLT5nZXRBdXRoKCksCiAgICAgICAgICAgICRwcmVmaXguJ2RiTnVtJyA9PiAkYy0+Z2V0RGJOdW0oKSwKICAgICAgICAgICAgJHByZWZpeC4ndGltZW91dCcgPT4gJGMtPmdldFRpbWVvdXQoKSwKICAgICAgICAgICAgJHByZWZpeC4ncGVyc2lzdGVudElkJyA9PiAkYy0+Z2V0UGVyc2lzdGVudElEKCksCiAgICAgICAgICAgICRwcmVmaXguJ29wdGlvbnMnID0+IG5ldyBFbnVtU3R1YihhcnJheSgKICAgICAgICAgICAgICAgICdSRUFEX1RJTUVPVVQnID0+ICRjLT5nZXRPcHRpb24oXFJlZGlzOjpPUFRfUkVBRF9USU1FT1VUKSwKICAgICAgICAgICAgICAgICdTRVJJQUxJWkVSJyA9PiBpc3NldChzZWxmOjokc2VyaWFsaXplclskc2VyXSkgPyBuZXcgQ29uc3RTdHViKHNlbGY6OiRzZXJpYWxpemVyWyRzZXJdLCAkc2VyKSA6ICRzZXIsCiAgICAgICAgICAgICAgICAnUFJFRklYJyA9PiAkYy0+Z2V0T3B0aW9uKFxSZWRpczo6T1BUX1BSRUZJWCksCiAgICAgICAgICAgICAgICAnU0NBTicgPT4gbmV3IENvbnN0U3R1YigkcmV0cnkgPyAnUkVUUlknIDogJ05PUkVUUlknLCAkcmV0cnkpLAogICAgICAgICAgICApKSwKICAgICAgICApOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2FzdFJlZGlzQXJyYXkoXFJlZGlzQXJyYXkgJGMsIGFycmF5ICRhLCBTdHViICRzdHViLCAkaXNOZXN0ZWQpCiAgICB7CiAgICAgICAgJHByZWZpeCA9IENhc3Rlcjo6UFJFRklYX1ZJUlRVQUw7CgogICAgICAgIHJldHVybiAkYSArIGFycmF5KAogICAgICAgICAgICAkcHJlZml4Lidob3N0cycgPT4gJGMtPl9ob3N0cygpLAogICAgICAgICAgICAkcHJlZml4LidmdW5jdGlvbicgPT4gQ2xhc3NTdHViOjp3cmFwQ2FsbGFibGUoJGMtPl9mdW5jdGlvbigpKSwKICAgICAgICApOwogICAgfQp9Cg==AppDevTools/query/vendor/symfony/var-dumper/Caster/ReflectionCaster.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDbG9uZXJcU3R1YjsKCi8qKgogKiBDYXN0cyBSZWZsZWN0b3IgcmVsYXRlZCBjbGFzc2VzIHRvIGFycmF5IHJlcHJlc2VudGF0aW9uLgogKgogKiBAYXV0aG9yIE5pY29sYXMgR3Jla2FzIDxwQHRjaHdvcmsuY29tPgogKi8KY2xhc3MgUmVmbGVjdGlvbkNhc3Rlcgp7CiAgICBwcml2YXRlIHN0YXRpYyAkZXh0cmFNYXAgPSBhcnJheSgKICAgICAgICAnZG9jQ29tbWVudCcgPT4gJ2dldERvY0NvbW1lbnQnLAogICAgICAgICdleHRlbnNpb24nID0+ICdnZXRFeHRlbnNpb25OYW1lJywKICAgICAgICAnaXNEaXNhYmxlZCcgPT4gJ2lzRGlzYWJsZWQnLAogICAgICAgICdpc0RlcHJlY2F0ZWQnID0+ICdpc0RlcHJlY2F0ZWQnLAogICAgICAgICdpc0ludGVybmFsJyA9PiAnaXNJbnRlcm5hbCcsCiAgICAgICAgJ2lzVXNlckRlZmluZWQnID0+ICdpc1VzZXJEZWZpbmVkJywKICAgICAgICAnaXNHZW5lcmF0b3InID0+ICdpc0dlbmVyYXRvcicsCiAgICAgICAgJ2lzVmFyaWFkaWMnID0+ICdpc1ZhcmlhZGljJywKICAgICk7CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjYXN0Q2xvc3VyZShcQ2xvc3VyZSAkYywgYXJyYXkgJGEsIFN0dWIgJHN0dWIsICRpc05lc3RlZCwgJGZpbHRlciA9IDApCiAgICB7CiAgICAgICAgJHByZWZpeCA9IENhc3Rlcjo6UFJFRklYX1ZJUlRVQUw7CiAgICAgICAgJGMgPSBuZXcgXFJlZmxlY3Rpb25GdW5jdGlvbigkYyk7CgogICAgICAgICRhID0gc3RhdGljOjpjYXN0RnVuY3Rpb25BYnN0cmFjdCgkYywgJGEsICRzdHViLCAkaXNOZXN0ZWQsICRmaWx0ZXIpOwoKICAgICAgICBpZiAoaXNzZXQoJGFbJHByZWZpeC4ncGFyYW1ldGVycyddKSkgewogICAgICAgICAgICBmb3JlYWNoICgkYVskcHJlZml4LidwYXJhbWV0ZXJzJ10tPnZhbHVlIGFzICYkdikgewogICAgICAgICAgICAgICAgJHBhcmFtID0gJHY7CiAgICAgICAgICAgICAgICAkdiA9IG5ldyBFbnVtU3R1YihhcnJheSgpKTsKICAgICAgICAgICAgICAgIGZvcmVhY2ggKHN0YXRpYzo6Y2FzdFBhcmFtZXRlcigkcGFyYW0sIGFycmF5KCksICRzdHViLCB0cnVlKSBhcyAkayA9PiAkcGFyYW0pIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIlwwIiA9PT0gJGtbMF0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHYtPnZhbHVlW3N1YnN0cigkaywgMyldID0gJHBhcmFtOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHVuc2V0KCR2LT52YWx1ZVsncG9zaXRpb24nXSwgJHYtPnZhbHVlWydpc1ZhcmlhZGljJ10sICR2LT52YWx1ZVsnYnlSZWZlcmVuY2UnXSwgJHYpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoISgkZmlsdGVyICYgQ2FzdGVyOjpFWENMVURFX1ZFUkJPU0UpICYmICRmID0gJGMtPmdldEZpbGVOYW1lKCkpIHsKICAgICAgICAgICAgJGFbJHByZWZpeC4nZmlsZSddID0gbmV3IExpbmtTdHViKCRmLCAkYy0+Z2V0U3RhcnRMaW5lKCkpOwogICAgICAgICAgICAkYVskcHJlZml4LidsaW5lJ10gPSAkYy0+Z2V0U3RhcnRMaW5lKCkuJyB0byAnLiRjLT5nZXRFbmRMaW5lKCk7CiAgICAgICAgfQoKICAgICAgICAkcHJlZml4ID0gQ2FzdGVyOjpQUkVGSVhfRFlOQU1JQzsKICAgICAgICB1bnNldCgkYVsnbmFtZSddLCAkYVskcHJlZml4Lid0aGlzJ10sICRhWyRwcmVmaXguJ3BhcmFtZXRlciddLCAkYVtDYXN0ZXI6OlBSRUZJWF9WSVJUVUFMLidleHRyYSddKTsKCiAgICAgICAgcmV0dXJuICRhOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2FzdEdlbmVyYXRvcihcR2VuZXJhdG9yICRjLCBhcnJheSAkYSwgU3R1YiAkc3R1YiwgJGlzTmVzdGVkKQogICAgewogICAgICAgIGlmICghY2xhc3NfZXhpc3RzKCdSZWZsZWN0aW9uR2VuZXJhdG9yJywgZmFsc2UpKSB7CiAgICAgICAgICAgIHJldHVybiAkYTsKICAgICAgICB9CgogICAgICAgIC8vIENhbm5vdCBjcmVhdGUgUmVmbGVjdGlvbkdlbmVyYXRvciBiYXNlZCBvbiBhIHRlcm1pbmF0ZWQgR2VuZXJhdG9yCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgJHJlZmxlY3Rpb25HZW5lcmF0b3IgPSBuZXcgXFJlZmxlY3Rpb25HZW5lcmF0b3IoJGMpOwogICAgICAgIH0gY2F0Y2ggKFxFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgJGFbQ2FzdGVyOjpQUkVGSVhfVklSVFVBTC4nY2xvc2VkJ10gPSB0cnVlOwoKICAgICAgICAgICAgcmV0dXJuICRhOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHNlbGY6OmNhc3RSZWZsZWN0aW9uR2VuZXJhdG9yKCRyZWZsZWN0aW9uR2VuZXJhdG9yLCAkYSwgJHN0dWIsICRpc05lc3RlZCk7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjYXN0VHlwZShcUmVmbGVjdGlvblR5cGUgJGMsIGFycmF5ICRhLCBTdHViICRzdHViLCAkaXNOZXN0ZWQpCiAgICB7CiAgICAgICAgJHByZWZpeCA9IENhc3Rlcjo6UFJFRklYX1ZJUlRVQUw7CgogICAgICAgICRhICs9IGFycmF5KAogICAgICAgICAgICAkcHJlZml4LiduYW1lJyA9PiAkYy0+Z2V0TmFtZSgpLAogICAgICAgICAgICAkcHJlZml4LidhbGxvd3NOdWxsJyA9PiAkYy0+YWxsb3dzTnVsbCgpLAogICAgICAgICAgICAkcHJlZml4Lidpc0J1aWx0aW4nID0+ICRjLT5pc0J1aWx0aW4oKSwKICAgICAgICApOwoKICAgICAgICByZXR1cm4gJGE7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjYXN0UmVmbGVjdGlvbkdlbmVyYXRvcihcUmVmbGVjdGlvbkdlbmVyYXRvciAkYywgYXJyYXkgJGEsIFN0dWIgJHN0dWIsICRpc05lc3RlZCkKICAgIHsKICAgICAgICAkcHJlZml4ID0gQ2FzdGVyOjpQUkVGSVhfVklSVFVBTDsKCiAgICAgICAgaWYgKCRjLT5nZXRUaGlzKCkpIHsKICAgICAgICAgICAgJGFbJHByZWZpeC4ndGhpcyddID0gbmV3IEN1dFN0dWIoJGMtPmdldFRoaXMoKSk7CiAgICAgICAgfQogICAgICAgICRmdW5jdGlvbiA9ICRjLT5nZXRGdW5jdGlvbigpOwogICAgICAgICRmcmFtZSA9IGFycmF5KAogICAgICAgICAgICAnY2xhc3MnID0+IGlzc2V0KCRmdW5jdGlvbi0+Y2xhc3MpID8gJGZ1bmN0aW9uLT5jbGFzcyA6IG51bGwsCiAgICAgICAgICAgICd0eXBlJyA9PiBpc3NldCgkZnVuY3Rpb24tPmNsYXNzKSA/ICgkZnVuY3Rpb24tPmlzU3RhdGljKCkgPyAnOjonIDogJy0+JykgOiBudWxsLAogICAgICAgICAgICAnZnVuY3Rpb24nID0+ICRmdW5jdGlvbi0+bmFtZSwKICAgICAgICAgICAgJ2ZpbGUnID0+ICRjLT5nZXRFeGVjdXRpbmdGaWxlKCksCiAgICAgICAgICAgICdsaW5lJyA9PiAkYy0+Z2V0RXhlY3V0aW5nTGluZSgpLAogICAgICAgICk7CiAgICAgICAgaWYgKCR0cmFjZSA9ICRjLT5nZXRUcmFjZShERUJVR19CQUNLVFJBQ0VfSUdOT1JFX0FSR1MpKSB7CiAgICAgICAgICAgICRmdW5jdGlvbiA9IG5ldyBcUmVmbGVjdGlvbkdlbmVyYXRvcigkYy0+Z2V0RXhlY3V0aW5nR2VuZXJhdG9yKCkpOwogICAgICAgICAgICBhcnJheV91bnNoaWZ0KCR0cmFjZSwgYXJyYXkoCiAgICAgICAgICAgICAgICAnZnVuY3Rpb24nID0+ICd5aWVsZCcsCiAgICAgICAgICAgICAgICAnZmlsZScgPT4gJGZ1bmN0aW9uLT5nZXRFeGVjdXRpbmdGaWxlKCksCiAgICAgICAgICAgICAgICAnbGluZScgPT4gJGZ1bmN0aW9uLT5nZXRFeGVjdXRpbmdMaW5lKCkgLSAxLAogICAgICAgICAgICApKTsKICAgICAgICAgICAgJHRyYWNlW10gPSAkZnJhbWU7CiAgICAgICAgICAgICRhWyRwcmVmaXguJ3RyYWNlJ10gPSBuZXcgVHJhY2VTdHViKCR0cmFjZSwgZmFsc2UsIDAsIC0xLCAtMSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGZ1bmN0aW9uID0gbmV3IEZyYW1lU3R1YigkZnJhbWUsIGZhbHNlLCB0cnVlKTsKICAgICAgICAgICAgJGZ1bmN0aW9uID0gRXhjZXB0aW9uQ2FzdGVyOjpjYXN0RnJhbWVTdHViKCRmdW5jdGlvbiwgYXJyYXkoKSwgJGZ1bmN0aW9uLCB0cnVlKTsKICAgICAgICAgICAgJGFbJHByZWZpeC4nZXhlY3V0aW5nJ10gPSBuZXcgRW51bVN0dWIoYXJyYXkoCiAgICAgICAgICAgICAgICAiXDB+c2VwYXJhdG9yPSBcMCIuJGZyYW1lWydjbGFzcyddLiRmcmFtZVsndHlwZSddLiRmcmFtZVsnZnVuY3Rpb24nXS4nKCknID0+ICRmdW5jdGlvblskcHJlZml4LidzcmMnXSwKICAgICAgICAgICAgKSk7CiAgICAgICAgfQoKICAgICAgICAkYVtDYXN0ZXI6OlBSRUZJWF9WSVJUVUFMLidjbG9zZWQnXSA9IGZhbHNlOwoKICAgICAgICByZXR1cm4gJGE7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjYXN0Q2xhc3MoXFJlZmxlY3Rpb25DbGFzcyAkYywgYXJyYXkgJGEsIFN0dWIgJHN0dWIsICRpc05lc3RlZCwgJGZpbHRlciA9IDApCiAgICB7CiAgICAgICAgJHByZWZpeCA9IENhc3Rlcjo6UFJFRklYX1ZJUlRVQUw7CgogICAgICAgIGlmICgkbiA9IFxSZWZsZWN0aW9uOjpnZXRNb2RpZmllck5hbWVzKCRjLT5nZXRNb2RpZmllcnMoKSkpIHsKICAgICAgICAgICAgJGFbJHByZWZpeC4nbW9kaWZpZXJzJ10gPSBpbXBsb2RlKCcgJywgJG4pOwogICAgICAgIH0KCiAgICAgICAgc2VsZjo6YWRkTWFwKCRhLCAkYywgYXJyYXkoCiAgICAgICAgICAgICdleHRlbmRzJyA9PiAnZ2V0UGFyZW50Q2xhc3MnLAogICAgICAgICAgICAnaW1wbGVtZW50cycgPT4gJ2dldEludGVyZmFjZU5hbWVzJywKICAgICAgICAgICAgJ2NvbnN0YW50cycgPT4gJ2dldENvbnN0YW50cycsCiAgICAgICAgKSk7CgogICAgICAgIGZvcmVhY2ggKCRjLT5nZXRQcm9wZXJ0aWVzKCkgYXMgJG4pIHsKICAgICAgICAgICAgJGFbJHByZWZpeC4ncHJvcGVydGllcyddWyRuLT5uYW1lXSA9ICRuOwogICAgICAgIH0KCiAgICAgICAgZm9yZWFjaCAoJGMtPmdldE1ldGhvZHMoKSBhcyAkbikgewogICAgICAgICAgICAkYVskcHJlZml4LidtZXRob2RzJ11bJG4tPm5hbWVdID0gJG47CiAgICAgICAgfQoKICAgICAgICBpZiAoISgkZmlsdGVyICYgQ2FzdGVyOjpFWENMVURFX1ZFUkJPU0UpICYmICEkaXNOZXN0ZWQpIHsKICAgICAgICAgICAgc2VsZjo6YWRkRXh0cmEoJGEsICRjKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkYTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNhc3RGdW5jdGlvbkFic3RyYWN0KFxSZWZsZWN0aW9uRnVuY3Rpb25BYnN0cmFjdCAkYywgYXJyYXkgJGEsIFN0dWIgJHN0dWIsICRpc05lc3RlZCwgJGZpbHRlciA9IDApCiAgICB7CiAgICAgICAgJHByZWZpeCA9IENhc3Rlcjo6UFJFRklYX1ZJUlRVQUw7CgogICAgICAgIHNlbGY6OmFkZE1hcCgkYSwgJGMsIGFycmF5KAogICAgICAgICAgICAncmV0dXJuc1JlZmVyZW5jZScgPT4gJ3JldHVybnNSZWZlcmVuY2UnLAogICAgICAgICAgICAncmV0dXJuVHlwZScgPT4gJ2dldFJldHVyblR5cGUnLAogICAgICAgICAgICAnY2xhc3MnID0+ICdnZXRDbG9zdXJlU2NvcGVDbGFzcycsCiAgICAgICAgICAgICd0aGlzJyA9PiAnZ2V0Q2xvc3VyZVRoaXMnLAogICAgICAgICkpOwoKICAgICAgICBpZiAoaXNzZXQoJGFbJHByZWZpeC4ncmV0dXJuVHlwZSddKSkgewogICAgICAgICAgICAkdiA9ICRhWyRwcmVmaXguJ3JldHVyblR5cGUnXTsKICAgICAgICAgICAgJHYgPSAkdi0+Z2V0TmFtZSgpOwogICAgICAgICAgICAkYVskcHJlZml4LidyZXR1cm5UeXBlJ10gPSBuZXcgQ2xhc3NTdHViKCRhWyRwcmVmaXguJ3JldHVyblR5cGUnXS0+YWxsb3dzTnVsbCgpID8gJz8nLiR2IDogJHYsIGFycmF5KGNsYXNzX2V4aXN0cygkdiwgZmFsc2UpIHx8IGludGVyZmFjZV9leGlzdHMoJHYsIGZhbHNlKSB8fCB0cmFpdF9leGlzdHMoJHYsIGZhbHNlKSA/ICR2IDogJycsICcnKSk7CiAgICAgICAgfQogICAgICAgIGlmIChpc3NldCgkYVskcHJlZml4LidjbGFzcyddKSkgewogICAgICAgICAgICAkYVskcHJlZml4LidjbGFzcyddID0gbmV3IENsYXNzU3R1YigkYVskcHJlZml4LidjbGFzcyddKTsKICAgICAgICB9CiAgICAgICAgaWYgKGlzc2V0KCRhWyRwcmVmaXguJ3RoaXMnXSkpIHsKICAgICAgICAgICAgJGFbJHByZWZpeC4ndGhpcyddID0gbmV3IEN1dFN0dWIoJGFbJHByZWZpeC4ndGhpcyddKTsKICAgICAgICB9CgogICAgICAgIGZvcmVhY2ggKCRjLT5nZXRQYXJhbWV0ZXJzKCkgYXMgJHYpIHsKICAgICAgICAgICAgJGsgPSAnJCcuJHYtPm5hbWU7CiAgICAgICAgICAgIGlmICgkdi0+aXNWYXJpYWRpYygpKSB7CiAgICAgICAgICAgICAgICAkayA9ICcuLi4nLiRrOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgkdi0+aXNQYXNzZWRCeVJlZmVyZW5jZSgpKSB7CiAgICAgICAgICAgICAgICAkayA9ICcmJy4kazsKICAgICAgICAgICAgfQogICAgICAgICAgICAkYVskcHJlZml4LidwYXJhbWV0ZXJzJ11bJGtdID0gJHY7CiAgICAgICAgfQogICAgICAgIGlmIChpc3NldCgkYVskcHJlZml4LidwYXJhbWV0ZXJzJ10pKSB7CiAgICAgICAgICAgICRhWyRwcmVmaXguJ3BhcmFtZXRlcnMnXSA9IG5ldyBFbnVtU3R1YigkYVskcHJlZml4LidwYXJhbWV0ZXJzJ10pOwogICAgICAgIH0KCiAgICAgICAgaWYgKCR2ID0gJGMtPmdldFN0YXRpY1ZhcmlhYmxlcygpKSB7CiAgICAgICAgICAgIGZvcmVhY2ggKCR2IGFzICRrID0+ICYkdikgewogICAgICAgICAgICAgICAgaWYgKGlzX29iamVjdCgkdikpIHsKICAgICAgICAgICAgICAgICAgICAkYVskcHJlZml4Lid1c2UnXVsnJCcuJGtdID0gbmV3IEN1dFN0dWIoJHYpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkYVskcHJlZml4Lid1c2UnXVsnJCcuJGtdID0gJiR2OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHVuc2V0KCR2KTsKICAgICAgICAgICAgJGFbJHByZWZpeC4ndXNlJ10gPSBuZXcgRW51bVN0dWIoJGFbJHByZWZpeC4ndXNlJ10pOwogICAgICAgIH0KCiAgICAgICAgaWYgKCEoJGZpbHRlciAmIENhc3Rlcjo6RVhDTFVERV9WRVJCT1NFKSAmJiAhJGlzTmVzdGVkKSB7CiAgICAgICAgICAgIHNlbGY6OmFkZEV4dHJhKCRhLCAkYyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGE7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjYXN0TWV0aG9kKFxSZWZsZWN0aW9uTWV0aG9kICRjLCBhcnJheSAkYSwgU3R1YiAkc3R1YiwgJGlzTmVzdGVkKQogICAgewogICAgICAgICRhW0Nhc3Rlcjo6UFJFRklYX1ZJUlRVQUwuJ21vZGlmaWVycyddID0gaW1wbG9kZSgnICcsIFxSZWZsZWN0aW9uOjpnZXRNb2RpZmllck5hbWVzKCRjLT5nZXRNb2RpZmllcnMoKSkpOwoKICAgICAgICByZXR1cm4gJGE7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjYXN0UGFyYW1ldGVyKFxSZWZsZWN0aW9uUGFyYW1ldGVyICRjLCBhcnJheSAkYSwgU3R1YiAkc3R1YiwgJGlzTmVzdGVkKQogICAgewogICAgICAgICRwcmVmaXggPSBDYXN0ZXI6OlBSRUZJWF9WSVJUVUFMOwoKICAgICAgICBzZWxmOjphZGRNYXAoJGEsICRjLCBhcnJheSgKICAgICAgICAgICAgJ3Bvc2l0aW9uJyA9PiAnZ2V0UG9zaXRpb24nLAogICAgICAgICAgICAnaXNWYXJpYWRpYycgPT4gJ2lzVmFyaWFkaWMnLAogICAgICAgICAgICAnYnlSZWZlcmVuY2UnID0+ICdpc1Bhc3NlZEJ5UmVmZXJlbmNlJywKICAgICAgICAgICAgJ2FsbG93c051bGwnID0+ICdhbGxvd3NOdWxsJywKICAgICAgICApKTsKCiAgICAgICAgaWYgKCR2ID0gJGMtPmdldFR5cGUoKSkgewogICAgICAgICAgICAkYVskcHJlZml4Lid0eXBlSGludCddID0gJHYtPmdldE5hbWUoKTsKICAgICAgICB9CgogICAgICAgIGlmIChpc3NldCgkYVskcHJlZml4Lid0eXBlSGludCddKSkgewogICAgICAgICAgICAkdiA9ICRhWyRwcmVmaXguJ3R5cGVIaW50J107CiAgICAgICAgICAgICRhWyRwcmVmaXguJ3R5cGVIaW50J10gPSBuZXcgQ2xhc3NTdHViKCR2LCBhcnJheShjbGFzc19leGlzdHMoJHYsIGZhbHNlKSB8fCBpbnRlcmZhY2VfZXhpc3RzKCR2LCBmYWxzZSkgfHwgdHJhaXRfZXhpc3RzKCR2LCBmYWxzZSkgPyAkdiA6ICcnLCAnJykpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHVuc2V0KCRhWyRwcmVmaXguJ2FsbG93c051bGwnXSk7CiAgICAgICAgfQoKICAgICAgICB0cnkgewogICAgICAgICAgICAkYVskcHJlZml4LidkZWZhdWx0J10gPSAkdiA9ICRjLT5nZXREZWZhdWx0VmFsdWUoKTsKICAgICAgICAgICAgaWYgKCRjLT5pc0RlZmF1bHRWYWx1ZUNvbnN0YW50KCkpIHsKICAgICAgICAgICAgICAgICRhWyRwcmVmaXguJ2RlZmF1bHQnXSA9IG5ldyBDb25zdFN0dWIoJGMtPmdldERlZmF1bHRWYWx1ZUNvbnN0YW50TmFtZSgpLCAkdik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKG51bGwgPT09ICR2KSB7CiAgICAgICAgICAgICAgICB1bnNldCgkYVskcHJlZml4LidhbGxvd3NOdWxsJ10pOwogICAgICAgICAgICB9CiAgICAgICAgfSBjYXRjaCAoXFJlZmxlY3Rpb25FeGNlcHRpb24gJGUpIHsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkYTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNhc3RQcm9wZXJ0eShcUmVmbGVjdGlvblByb3BlcnR5ICRjLCBhcnJheSAkYSwgU3R1YiAkc3R1YiwgJGlzTmVzdGVkKQogICAgewogICAgICAgICRhW0Nhc3Rlcjo6UFJFRklYX1ZJUlRVQUwuJ21vZGlmaWVycyddID0gaW1wbG9kZSgnICcsIFxSZWZsZWN0aW9uOjpnZXRNb2RpZmllck5hbWVzKCRjLT5nZXRNb2RpZmllcnMoKSkpOwogICAgICAgIHNlbGY6OmFkZEV4dHJhKCRhLCAkYyk7CgogICAgICAgIHJldHVybiAkYTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNhc3RFeHRlbnNpb24oXFJlZmxlY3Rpb25FeHRlbnNpb24gJGMsIGFycmF5ICRhLCBTdHViICRzdHViLCAkaXNOZXN0ZWQpCiAgICB7CiAgICAgICAgc2VsZjo6YWRkTWFwKCRhLCAkYywgYXJyYXkoCiAgICAgICAgICAgICd2ZXJzaW9uJyA9PiAnZ2V0VmVyc2lvbicsCiAgICAgICAgICAgICdkZXBlbmRlbmNpZXMnID0+ICdnZXREZXBlbmRlbmNpZXMnLAogICAgICAgICAgICAnaW5pRW50cmllcycgPT4gJ2dldEluaUVudHJpZXMnLAogICAgICAgICAgICAnaXNQZXJzaXN0ZW50JyA9PiAnaXNQZXJzaXN0ZW50JywKICAgICAgICAgICAgJ2lzVGVtcG9yYXJ5JyA9PiAnaXNUZW1wb3JhcnknLAogICAgICAgICAgICAnY29uc3RhbnRzJyA9PiAnZ2V0Q29uc3RhbnRzJywKICAgICAgICAgICAgJ2Z1bmN0aW9ucycgPT4gJ2dldEZ1bmN0aW9ucycsCiAgICAgICAgICAgICdjbGFzc2VzJyA9PiAnZ2V0Q2xhc3NlcycsCiAgICAgICAgKSk7CgogICAgICAgIHJldHVybiAkYTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNhc3RaZW5kRXh0ZW5zaW9uKFxSZWZsZWN0aW9uWmVuZEV4dGVuc2lvbiAkYywgYXJyYXkgJGEsIFN0dWIgJHN0dWIsICRpc05lc3RlZCkKICAgIHsKICAgICAgICBzZWxmOjphZGRNYXAoJGEsICRjLCBhcnJheSgKICAgICAgICAgICAgJ3ZlcnNpb24nID0+ICdnZXRWZXJzaW9uJywKICAgICAgICAgICAgJ2F1dGhvcicgPT4gJ2dldEF1dGhvcicsCiAgICAgICAgICAgICdjb3B5cmlnaHQnID0+ICdnZXRDb3B5cmlnaHQnLAogICAgICAgICAgICAndXJsJyA9PiAnZ2V0VVJMJywKICAgICAgICApKTsKCiAgICAgICAgcmV0dXJuICRhOwogICAgfQoKICAgIHByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGFkZEV4dHJhKCYkYSwgXFJlZmxlY3RvciAkYykKICAgIHsKICAgICAgICAkeCA9IGlzc2V0KCRhW0Nhc3Rlcjo6UFJFRklYX1ZJUlRVQUwuJ2V4dHJhJ10pID8gJGFbQ2FzdGVyOjpQUkVGSVhfVklSVFVBTC4nZXh0cmEnXS0+dmFsdWUgOiBhcnJheSgpOwoKICAgICAgICBpZiAobWV0aG9kX2V4aXN0cygkYywgJ2dldEZpbGVOYW1lJykgJiYgJG0gPSAkYy0+Z2V0RmlsZU5hbWUoKSkgewogICAgICAgICAgICAkeFsnZmlsZSddID0gbmV3IExpbmtTdHViKCRtLCAkYy0+Z2V0U3RhcnRMaW5lKCkpOwogICAgICAgICAgICAkeFsnbGluZSddID0gJGMtPmdldFN0YXJ0TGluZSgpLicgdG8gJy4kYy0+Z2V0RW5kTGluZSgpOwogICAgICAgIH0KCiAgICAgICAgc2VsZjo6YWRkTWFwKCR4LCAkYywgc2VsZjo6JGV4dHJhTWFwLCAnJyk7CgogICAgICAgIGlmICgkeCkgewogICAgICAgICAgICAkYVtDYXN0ZXI6OlBSRUZJWF9WSVJUVUFMLidleHRyYSddID0gbmV3IEVudW1TdHViKCR4KTsKICAgICAgICB9CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gYWRkTWFwKCYkYSwgXFJlZmxlY3RvciAkYywgJG1hcCwgJHByZWZpeCA9IENhc3Rlcjo6UFJFRklYX1ZJUlRVQUwpCiAgICB7CiAgICAgICAgZm9yZWFjaCAoJG1hcCBhcyAkayA9PiAkbSkgewogICAgICAgICAgICBpZiAobWV0aG9kX2V4aXN0cygkYywgJG0pICYmIGZhbHNlICE9PSAoJG0gPSAkYy0+JG0oKSkgJiYgbnVsbCAhPT0gJG0pIHsKICAgICAgICAgICAgICAgICRhWyRwcmVmaXguJGtdID0gJG0gaW5zdGFuY2VvZiBcUmVmbGVjdG9yID8gJG0tPm5hbWUgOiAkbTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQo=AppDevTools/query/vendor/symfony/var-dumper/Caster/ResourceCaster.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDbG9uZXJcU3R1YjsKCi8qKgogKiBDYXN0cyBjb21tb24gcmVzb3VyY2UgdHlwZXMgdG8gYXJyYXkgcmVwcmVzZW50YXRpb24uCiAqCiAqIEBhdXRob3IgTmljb2xhcyBHcmVrYXMgPHBAdGNod29yay5jb20+CiAqLwpjbGFzcyBSZXNvdXJjZUNhc3Rlcgp7CiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNhc3RDdXJsKCRoLCBhcnJheSAkYSwgU3R1YiAkc3R1YiwgJGlzTmVzdGVkKQogICAgewogICAgICAgIHJldHVybiBjdXJsX2dldGluZm8oJGgpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2FzdERiYSgkZGJhLCBhcnJheSAkYSwgU3R1YiAkc3R1YiwgJGlzTmVzdGVkKQogICAgewogICAgICAgICRsaXN0ID0gZGJhX2xpc3QoKTsKICAgICAgICAkYVsnZmlsZSddID0gJGxpc3RbKGludCkgJGRiYV07CgogICAgICAgIHJldHVybiAkYTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNhc3RQcm9jZXNzKCRwcm9jZXNzLCBhcnJheSAkYSwgU3R1YiAkc3R1YiwgJGlzTmVzdGVkKQogICAgewogICAgICAgIHJldHVybiBwcm9jX2dldF9zdGF0dXMoJHByb2Nlc3MpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2FzdFN0cmVhbSgkc3RyZWFtLCBhcnJheSAkYSwgU3R1YiAkc3R1YiwgJGlzTmVzdGVkKQogICAgewogICAgICAgICRhID0gc3RyZWFtX2dldF9tZXRhX2RhdGEoJHN0cmVhbSkgKyBzdGF0aWM6OmNhc3RTdHJlYW1Db250ZXh0KCRzdHJlYW0sICRhLCAkc3R1YiwgJGlzTmVzdGVkKTsKICAgICAgICBpZiAoaXNzZXQoJGFbJ3VyaSddKSkgewogICAgICAgICAgICAkYVsndXJpJ10gPSBuZXcgTGlua1N0dWIoJGFbJ3VyaSddKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkYTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNhc3RTdHJlYW1Db250ZXh0KCRzdHJlYW0sIGFycmF5ICRhLCBTdHViICRzdHViLCAkaXNOZXN0ZWQpCiAgICB7CiAgICAgICAgcmV0dXJuIEBzdHJlYW1fY29udGV4dF9nZXRfcGFyYW1zKCRzdHJlYW0pID86ICRhOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2FzdEdkKCRnZCwgYXJyYXkgJGEsIFN0dWIgJHN0dWIsICRpc05lc3RlZCkKICAgIHsKICAgICAgICAkYVsnc2l6ZSddID0gaW1hZ2VzeCgkZ2QpLid4Jy5pbWFnZXN5KCRnZCk7CiAgICAgICAgJGFbJ3RydWVDb2xvciddID0gaW1hZ2Vpc3RydWVjb2xvcigkZ2QpOwoKICAgICAgICByZXR1cm4gJGE7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjYXN0TXlzcWxMaW5rKCRoLCBhcnJheSAkYSwgU3R1YiAkc3R1YiwgJGlzTmVzdGVkKQogICAgewogICAgICAgICRhWydob3N0J10gPSBteXNxbF9nZXRfaG9zdF9pbmZvKCRoKTsKICAgICAgICAkYVsncHJvdG9jb2wnXSA9IG15c3FsX2dldF9wcm90b19pbmZvKCRoKTsKICAgICAgICAkYVsnc2VydmVyJ10gPSBteXNxbF9nZXRfc2VydmVyX2luZm8oJGgpOwoKICAgICAgICByZXR1cm4gJGE7CiAgICB9Cn0KAppDevTools/query/vendor/symfony/var-dumper/Caster/SplCaster.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDbG9uZXJcU3R1YjsKCi8qKgogKiBDYXN0cyBTUEwgcmVsYXRlZCBjbGFzc2VzIHRvIGFycmF5IHJlcHJlc2VudGF0aW9uLgogKgogKiBAYXV0aG9yIE5pY29sYXMgR3Jla2FzIDxwQHRjaHdvcmsuY29tPgogKi8KY2xhc3MgU3BsQ2FzdGVyCnsKICAgIHByaXZhdGUgc3RhdGljICRzcGxGaWxlT2JqZWN0RmxhZ3MgPSBhcnJheSgKICAgICAgICBcU3BsRmlsZU9iamVjdDo6RFJPUF9ORVdfTElORSA9PiAnRFJPUF9ORVdfTElORScsCiAgICAgICAgXFNwbEZpbGVPYmplY3Q6OlJFQURfQUhFQUQgPT4gJ1JFQURfQUhFQUQnLAogICAgICAgIFxTcGxGaWxlT2JqZWN0OjpTS0lQX0VNUFRZID0+ICdTS0lQX0VNUFRZJywKICAgICAgICBcU3BsRmlsZU9iamVjdDo6UkVBRF9DU1YgPT4gJ1JFQURfQ1NWJywKICAgICk7CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjYXN0QXJyYXlPYmplY3QoXEFycmF5T2JqZWN0ICRjLCBhcnJheSAkYSwgU3R1YiAkc3R1YiwgJGlzTmVzdGVkKQogICAgewogICAgICAgIHJldHVybiBzZWxmOjpjYXN0U3BsQXJyYXkoJGMsICRhLCAkc3R1YiwgJGlzTmVzdGVkKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNhc3RBcnJheUl0ZXJhdG9yKFxBcnJheUl0ZXJhdG9yICRjLCBhcnJheSAkYSwgU3R1YiAkc3R1YiwgJGlzTmVzdGVkKQogICAgewogICAgICAgIHJldHVybiBzZWxmOjpjYXN0U3BsQXJyYXkoJGMsICRhLCAkc3R1YiwgJGlzTmVzdGVkKTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNhc3RIZWFwKFxJdGVyYXRvciAkYywgYXJyYXkgJGEsIFN0dWIgJHN0dWIsICRpc05lc3RlZCkKICAgIHsKICAgICAgICAkYSArPSBhcnJheSgKICAgICAgICAgICAgQ2FzdGVyOjpQUkVGSVhfVklSVFVBTC4naGVhcCcgPT4gaXRlcmF0b3JfdG9fYXJyYXkoY2xvbmUgJGMpLAogICAgICAgICk7CgogICAgICAgIHJldHVybiAkYTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNhc3REb3VibHlMaW5rZWRMaXN0KFxTcGxEb3VibHlMaW5rZWRMaXN0ICRjLCBhcnJheSAkYSwgU3R1YiAkc3R1YiwgJGlzTmVzdGVkKQogICAgewogICAgICAgICRwcmVmaXggPSBDYXN0ZXI6OlBSRUZJWF9WSVJUVUFMOwogICAgICAgICRtb2RlID0gJGMtPmdldEl0ZXJhdG9yTW9kZSgpOwogICAgICAgICRjLT5zZXRJdGVyYXRvck1vZGUoXFNwbERvdWJseUxpbmtlZExpc3Q6OklUX01PREVfS0VFUCB8ICRtb2RlICYgflxTcGxEb3VibHlMaW5rZWRMaXN0OjpJVF9NT0RFX0RFTEVURSk7CgogICAgICAgICRhICs9IGFycmF5KAogICAgICAgICAgICAkcHJlZml4Lidtb2RlJyA9PiBuZXcgQ29uc3RTdHViKCgoJG1vZGUgJiBcU3BsRG91Ymx5TGlua2VkTGlzdDo6SVRfTU9ERV9MSUZPKSA/ICdJVF9NT0RFX0xJRk8nIDogJ0lUX01PREVfRklGTycpLicgfCAnLigoJG1vZGUgJiBcU3BsRG91Ymx5TGlua2VkTGlzdDo6SVRfTU9ERV9ERUxFVEUpID8gJ0lUX01PREVfREVMRVRFJyA6ICdJVF9NT0RFX0tFRVAnKSwgJG1vZGUpLAogICAgICAgICAgICAkcHJlZml4LidkbGxpc3QnID0+IGl0ZXJhdG9yX3RvX2FycmF5KCRjKSwKICAgICAgICApOwogICAgICAgICRjLT5zZXRJdGVyYXRvck1vZGUoJG1vZGUpOwoKICAgICAgICByZXR1cm4gJGE7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjYXN0RmlsZUluZm8oXFNwbEZpbGVJbmZvICRjLCBhcnJheSAkYSwgU3R1YiAkc3R1YiwgJGlzTmVzdGVkKQogICAgewogICAgICAgIHN0YXRpYyAkbWFwID0gYXJyYXkoCiAgICAgICAgICAgICdwYXRoJyA9PiAnZ2V0UGF0aCcsCiAgICAgICAgICAgICdmaWxlbmFtZScgPT4gJ2dldEZpbGVuYW1lJywKICAgICAgICAgICAgJ2Jhc2VuYW1lJyA9PiAnZ2V0QmFzZW5hbWUnLAogICAgICAgICAgICAncGF0aG5hbWUnID0+ICdnZXRQYXRobmFtZScsCiAgICAgICAgICAgICdleHRlbnNpb24nID0+ICdnZXRFeHRlbnNpb24nLAogICAgICAgICAgICAncmVhbFBhdGgnID0+ICdnZXRSZWFsUGF0aCcsCiAgICAgICAgICAgICdhVGltZScgPT4gJ2dldEFUaW1lJywKICAgICAgICAgICAgJ21UaW1lJyA9PiAnZ2V0TVRpbWUnLAogICAgICAgICAgICAnY1RpbWUnID0+ICdnZXRDVGltZScsCiAgICAgICAgICAgICdpbm9kZScgPT4gJ2dldElub2RlJywKICAgICAgICAgICAgJ3NpemUnID0+ICdnZXRTaXplJywKICAgICAgICAgICAgJ3Blcm1zJyA9PiAnZ2V0UGVybXMnLAogICAgICAgICAgICAnb3duZXInID0+ICdnZXRPd25lcicsCiAgICAgICAgICAgICdncm91cCcgPT4gJ2dldEdyb3VwJywKICAgICAgICAgICAgJ3R5cGUnID0+ICdnZXRUeXBlJywKICAgICAgICAgICAgJ3dyaXRhYmxlJyA9PiAnaXNXcml0YWJsZScsCiAgICAgICAgICAgICdyZWFkYWJsZScgPT4gJ2lzUmVhZGFibGUnLAogICAgICAgICAgICAnZXhlY3V0YWJsZScgPT4gJ2lzRXhlY3V0YWJsZScsCiAgICAgICAgICAgICdmaWxlJyA9PiAnaXNGaWxlJywKICAgICAgICAgICAgJ2RpcicgPT4gJ2lzRGlyJywKICAgICAgICAgICAgJ2xpbmsnID0+ICdpc0xpbmsnLAogICAgICAgICAgICAnbGlua1RhcmdldCcgPT4gJ2dldExpbmtUYXJnZXQnLAogICAgICAgICk7CgogICAgICAgICRwcmVmaXggPSBDYXN0ZXI6OlBSRUZJWF9WSVJUVUFMOwoKICAgICAgICBmb3JlYWNoICgkbWFwIGFzICRrZXkgPT4gJGFjY2Vzc29yKSB7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAkYVskcHJlZml4LiRrZXldID0gJGMtPiRhY2Nlc3NvcigpOwogICAgICAgICAgICB9IGNhdGNoIChcRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChpc3NldCgkYVskcHJlZml4LidyZWFsUGF0aCddKSkgewogICAgICAgICAgICAkYVskcHJlZml4LidyZWFsUGF0aCddID0gbmV3IExpbmtTdHViKCRhWyRwcmVmaXguJ3JlYWxQYXRoJ10pOwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRhWyRwcmVmaXguJ3Blcm1zJ10pKSB7CiAgICAgICAgICAgICRhWyRwcmVmaXguJ3Blcm1zJ10gPSBuZXcgQ29uc3RTdHViKHNwcmludGYoJzAlbycsICRhWyRwcmVmaXguJ3Blcm1zJ10pLCAkYVskcHJlZml4LidwZXJtcyddKTsKICAgICAgICB9CgogICAgICAgIHN0YXRpYyAkbWFwRGF0ZSA9IGFycmF5KCdhVGltZScsICdtVGltZScsICdjVGltZScpOwogICAgICAgIGZvcmVhY2ggKCRtYXBEYXRlIGFzICRrZXkpIHsKICAgICAgICAgICAgaWYgKGlzc2V0KCRhWyRwcmVmaXguJGtleV0pKSB7CiAgICAgICAgICAgICAgICAkYVskcHJlZml4LiRrZXldID0gbmV3IENvbnN0U3R1YihkYXRlKCdZLW0tZCBIOmk6cycsICRhWyRwcmVmaXguJGtleV0pLCAkYVskcHJlZml4LiRrZXldKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRhOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2FzdEZpbGVPYmplY3QoXFNwbEZpbGVPYmplY3QgJGMsIGFycmF5ICRhLCBTdHViICRzdHViLCAkaXNOZXN0ZWQpCiAgICB7CiAgICAgICAgc3RhdGljICRtYXAgPSBhcnJheSgKICAgICAgICAgICAgJ2NzdkNvbnRyb2wnID0+ICdnZXRDc3ZDb250cm9sJywKICAgICAgICAgICAgJ2ZsYWdzJyA9PiAnZ2V0RmxhZ3MnLAogICAgICAgICAgICAnbWF4TGluZUxlbicgPT4gJ2dldE1heExpbmVMZW4nLAogICAgICAgICAgICAnZnN0YXQnID0+ICdmc3RhdCcsCiAgICAgICAgICAgICdlb2YnID0+ICdlb2YnLAogICAgICAgICAgICAna2V5JyA9PiAna2V5JywKICAgICAgICApOwoKICAgICAgICAkcHJlZml4ID0gQ2FzdGVyOjpQUkVGSVhfVklSVFVBTDsKCiAgICAgICAgZm9yZWFjaCAoJG1hcCBhcyAka2V5ID0+ICRhY2Nlc3NvcikgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgJGFbJHByZWZpeC4ka2V5XSA9ICRjLT4kYWNjZXNzb3IoKTsKICAgICAgICAgICAgfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJGFbJHByZWZpeC4nZmxhZ3MnXSkpIHsKICAgICAgICAgICAgJGZsYWdzQXJyYXkgPSBhcnJheSgpOwogICAgICAgICAgICBmb3JlYWNoIChzZWxmOjokc3BsRmlsZU9iamVjdEZsYWdzIGFzICR2YWx1ZSA9PiAkbmFtZSkgewogICAgICAgICAgICAgICAgaWYgKCRhWyRwcmVmaXguJ2ZsYWdzJ10gJiAkdmFsdWUpIHsKICAgICAgICAgICAgICAgICAgICAkZmxhZ3NBcnJheVtdID0gJG5hbWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJGFbJHByZWZpeC4nZmxhZ3MnXSA9IG5ldyBDb25zdFN0dWIoaW1wbG9kZSgnfCcsICRmbGFnc0FycmF5KSwgJGFbJHByZWZpeC4nZmxhZ3MnXSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJGFbJHByZWZpeC4nZnN0YXQnXSkpIHsKICAgICAgICAgICAgJGFbJHByZWZpeC4nZnN0YXQnXSA9IG5ldyBDdXRBcnJheVN0dWIoJGFbJHByZWZpeC4nZnN0YXQnXSwgYXJyYXkoJ2RldicsICdpbm8nLCAnbmxpbmsnLCAncmRldicsICdibGtzaXplJywgJ2Jsb2NrcycpKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkYTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNhc3RGaXhlZEFycmF5KFxTcGxGaXhlZEFycmF5ICRjLCBhcnJheSAkYSwgU3R1YiAkc3R1YiwgJGlzTmVzdGVkKQogICAgewogICAgICAgICRhICs9IGFycmF5KAogICAgICAgICAgICBDYXN0ZXI6OlBSRUZJWF9WSVJUVUFMLidzdG9yYWdlJyA9PiAkYy0+dG9BcnJheSgpLAogICAgICAgICk7CgogICAgICAgIHJldHVybiAkYTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNhc3RPYmplY3RTdG9yYWdlKFxTcGxPYmplY3RTdG9yYWdlICRjLCBhcnJheSAkYSwgU3R1YiAkc3R1YiwgJGlzTmVzdGVkKQogICAgewogICAgICAgICRzdG9yYWdlID0gYXJyYXkoKTsKICAgICAgICB1bnNldCgkYVtDYXN0ZXI6OlBSRUZJWF9EWU5BTUlDLiJcMGdjZGF0YSJdKTsgLy8gRG9uJ3QgaGl0IGh0dHBzOi8vYnVncy5waHAubmV0LzY1OTY3CgogICAgICAgICRjbG9uZSA9IGNsb25lICRjOwogICAgICAgIGZvcmVhY2ggKCRjbG9uZSBhcyAkb2JqKSB7CiAgICAgICAgICAgICRzdG9yYWdlW10gPSBhcnJheSgKICAgICAgICAgICAgICAgICdvYmplY3QnID0+ICRvYmosCiAgICAgICAgICAgICAgICAnaW5mbycgPT4gJGNsb25lLT5nZXRJbmZvKCksCiAgICAgICAgICAgICApOwogICAgICAgIH0KCiAgICAgICAgJGEgKz0gYXJyYXkoCiAgICAgICAgICAgIENhc3Rlcjo6UFJFRklYX1ZJUlRVQUwuJ3N0b3JhZ2UnID0+ICRzdG9yYWdlLAogICAgICAgICk7CgogICAgICAgIHJldHVybiAkYTsKICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNhc3RPdXRlckl0ZXJhdG9yKFxPdXRlckl0ZXJhdG9yICRjLCBhcnJheSAkYSwgU3R1YiAkc3R1YiwgJGlzTmVzdGVkKQogICAgewogICAgICAgICRhW0Nhc3Rlcjo6UFJFRklYX1ZJUlRVQUwuJ2lubmVySXRlcmF0b3InXSA9ICRjLT5nZXRJbm5lckl0ZXJhdG9yKCk7CgogICAgICAgIHJldHVybiAkYTsKICAgIH0KCiAgICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBjYXN0U3BsQXJyYXkoJGMsIGFycmF5ICRhLCBTdHViICRzdHViLCAkaXNOZXN0ZWQpCiAgICB7CiAgICAgICAgJHByZWZpeCA9IENhc3Rlcjo6UFJFRklYX1ZJUlRVQUw7CiAgICAgICAgJGNsYXNzID0gJHN0dWItPmNsYXNzOwogICAgICAgICRmbGFncyA9ICRjLT5nZXRGbGFncygpOwoKICAgICAgICBpZiAoISgkZmxhZ3MgJiBcQXJyYXlPYmplY3Q6OlNURF9QUk9QX0xJU1QpKSB7CiAgICAgICAgICAgICRjLT5zZXRGbGFncyhcQXJyYXlPYmplY3Q6OlNURF9QUk9QX0xJU1QpOwogICAgICAgICAgICAkYSA9IENhc3Rlcjo6Y2FzdE9iamVjdCgkYywgJGNsYXNzKTsKICAgICAgICAgICAgJGMtPnNldEZsYWdzKCRmbGFncyk7CiAgICAgICAgfQogICAgICAgICRhICs9IGFycmF5KAogICAgICAgICAgICAkcHJlZml4LidmbGFnOjpTVERfUFJPUF9MSVNUJyA9PiAoYm9vbCkgKCRmbGFncyAmIFxBcnJheU9iamVjdDo6U1REX1BST1BfTElTVCksCiAgICAgICAgICAgICRwcmVmaXguJ2ZsYWc6OkFSUkFZX0FTX1BST1BTJyA9PiAoYm9vbCkgKCRmbGFncyAmIFxBcnJheU9iamVjdDo6QVJSQVlfQVNfUFJPUFMpLAogICAgICAgICk7CiAgICAgICAgaWYgKCRjIGluc3RhbmNlb2YgXEFycmF5T2JqZWN0KSB7CiAgICAgICAgICAgICRhWyRwcmVmaXguJ2l0ZXJhdG9yQ2xhc3MnXSA9IG5ldyBDbGFzc1N0dWIoJGMtPmdldEl0ZXJhdG9yQ2xhc3MoKSk7CiAgICAgICAgfQogICAgICAgICRhWyRwcmVmaXguJ3N0b3JhZ2UnXSA9ICRjLT5nZXRBcnJheUNvcHkoKTsKCiAgICAgICAgcmV0dXJuICRhOwogICAgfQp9Cg==AppDevTools/query/vendor/symfony/var-dumper/Caster/StubCaster.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDbG9uZXJcU3R1YjsKCi8qKgogKiBDYXN0cyBhIGNhc3RlcidzIFN0dWIuCiAqCiAqIEBhdXRob3IgTmljb2xhcyBHcmVrYXMgPHBAdGNod29yay5jb20+CiAqLwpjbGFzcyBTdHViQ2FzdGVyCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2FzdFN0dWIoU3R1YiAkYywgYXJyYXkgJGEsIFN0dWIgJHN0dWIsICRpc05lc3RlZCkKICAgIHsKICAgICAgICBpZiAoJGlzTmVzdGVkKSB7CiAgICAgICAgICAgICRzdHViLT50eXBlID0gJGMtPnR5cGU7CiAgICAgICAgICAgICRzdHViLT5jbGFzcyA9ICRjLT5jbGFzczsKICAgICAgICAgICAgJHN0dWItPnZhbHVlID0gJGMtPnZhbHVlOwogICAgICAgICAgICAkc3R1Yi0+aGFuZGxlID0gJGMtPmhhbmRsZTsKICAgICAgICAgICAgJHN0dWItPmN1dCA9ICRjLT5jdXQ7CiAgICAgICAgICAgICRzdHViLT5hdHRyID0gJGMtPmF0dHI7CgogICAgICAgICAgICBpZiAoU3R1Yjo6VFlQRV9SRUYgPT09ICRjLT50eXBlICYmICEkYy0+Y2xhc3MgJiYgaXNfc3RyaW5nKCRjLT52YWx1ZSkgJiYgIXByZWdfbWF0Y2goJy8vdScsICRjLT52YWx1ZSkpIHsKICAgICAgICAgICAgICAgICRzdHViLT50eXBlID0gU3R1Yjo6VFlQRV9TVFJJTkc7CiAgICAgICAgICAgICAgICAkc3R1Yi0+Y2xhc3MgPSBTdHViOjpTVFJJTkdfQklOQVJZOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkYSA9IGFycmF5KCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGE7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjYXN0Q3V0QXJyYXkoQ3V0QXJyYXlTdHViICRjLCBhcnJheSAkYSwgU3R1YiAkc3R1YiwgJGlzTmVzdGVkKQogICAgewogICAgICAgIHJldHVybiAkaXNOZXN0ZWQgPyAkYy0+cHJlc2VydmVkU3Vic2V0IDogJGE7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjdXRJbnRlcm5hbHMoJG9iaiwgYXJyYXkgJGEsIFN0dWIgJHN0dWIsICRpc05lc3RlZCkKICAgIHsKICAgICAgICBpZiAoJGlzTmVzdGVkKSB7CiAgICAgICAgICAgICRzdHViLT5jdXQgKz0gY291bnQoJGEpOwoKICAgICAgICAgICAgcmV0dXJuIGFycmF5KCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGE7CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjYXN0RW51bShFbnVtU3R1YiAkYywgYXJyYXkgJGEsIFN0dWIgJHN0dWIsICRpc05lc3RlZCkKICAgIHsKICAgICAgICBpZiAoJGlzTmVzdGVkKSB7CiAgICAgICAgICAgICRzdHViLT5jbGFzcyA9ICRjLT5kdW1wS2V5cyA/ICcnIDogbnVsbDsKICAgICAgICAgICAgJHN0dWItPmhhbmRsZSA9IDA7CiAgICAgICAgICAgICRzdHViLT52YWx1ZSA9IG51bGw7CiAgICAgICAgICAgICRzdHViLT5jdXQgPSAkYy0+Y3V0OwogICAgICAgICAgICAkc3R1Yi0+YXR0ciA9ICRjLT5hdHRyOwoKICAgICAgICAgICAgJGEgPSBhcnJheSgpOwoKICAgICAgICAgICAgaWYgKCRjLT52YWx1ZSkgewogICAgICAgICAgICAgICAgZm9yZWFjaCAoYXJyYXlfa2V5cygkYy0+dmFsdWUpIGFzICRrKSB7CiAgICAgICAgICAgICAgICAgICAgJGtleXNbXSA9ICFpc3NldCgka1swXSkgfHwgIlwwIiAhPT0gJGtbMF0gPyBDYXN0ZXI6OlBSRUZJWF9WSVJUVUFMLiRrIDogJGs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAvLyBQcmVzZXJ2ZSByZWZlcmVuY2VzIHdpdGggYXJyYXlfY29tYmluZSgpCiAgICAgICAgICAgICAgICAkYSA9IGFycmF5X2NvbWJpbmUoJGtleXMsICRjLT52YWx1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkYTsKICAgIH0KfQo=AppDevTools/query/vendor/symfony/var-dumper/Caster/SymfonyCaster.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XEh0dHBGb3VuZGF0aW9uXFJlcXVlc3Q7CnVzZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2xvbmVyXFN0dWI7CgpjbGFzcyBTeW1mb255Q2FzdGVyCnsKICAgIHByaXZhdGUgc3RhdGljICRyZXF1ZXN0R2V0dGVycyA9IGFycmF5KAogICAgICAgICdwYXRoSW5mbycgPT4gJ2dldFBhdGhJbmZvJywKICAgICAgICAncmVxdWVzdFVyaScgPT4gJ2dldFJlcXVlc3RVcmknLAogICAgICAgICdiYXNlVXJsJyA9PiAnZ2V0QmFzZVVybCcsCiAgICAgICAgJ2Jhc2VQYXRoJyA9PiAnZ2V0QmFzZVBhdGgnLAogICAgICAgICdtZXRob2QnID0+ICdnZXRNZXRob2QnLAogICAgICAgICdmb3JtYXQnID0+ICdnZXRSZXF1ZXN0Rm9ybWF0JywKICAgICk7CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjYXN0UmVxdWVzdChSZXF1ZXN0ICRyZXF1ZXN0LCBhcnJheSAkYSwgU3R1YiAkc3R1YiwgJGlzTmVzdGVkKQogICAgewogICAgICAgICRjbG9uZSA9IG51bGw7CgogICAgICAgIGZvcmVhY2ggKHNlbGY6OiRyZXF1ZXN0R2V0dGVycyBhcyAkcHJvcCA9PiAkZ2V0dGVyKSB7CiAgICAgICAgICAgIGlmIChudWxsID09PSAkYVtDYXN0ZXI6OlBSRUZJWF9QUk9URUNURUQuJHByb3BdKSB7CiAgICAgICAgICAgICAgICBpZiAobnVsbCA9PT0gJGNsb25lKSB7CiAgICAgICAgICAgICAgICAgICAgJGNsb25lID0gY2xvbmUgJHJlcXVlc3Q7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkYVtDYXN0ZXI6OlBSRUZJWF9WSVJUVUFMLiRwcm9wXSA9ICRjbG9uZS0+eyRnZXR0ZXJ9KCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkYTsKICAgIH0KfQo=AppDevTools/query/vendor/symfony/var-dumper/Caster/TraceStub.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDbG9uZXJcU3R1YjsKCi8qKgogKiBSZXByZXNlbnRzIGEgYmFja3RyYWNlIGFzIHJldHVybmVkIGJ5IGRlYnVnX2JhY2t0cmFjZSgpIG9yIEV4Y2VwdGlvbi0+Z2V0VHJhY2UoKS4KICoKICogQGF1dGhvciBOaWNvbGFzIEdyZWthcyA8cEB0Y2h3b3JrLmNvbT4KICovCmNsYXNzIFRyYWNlU3R1YiBleHRlbmRzIFN0dWIKewogICAgcHVibGljICRrZWVwQXJnczsKICAgIHB1YmxpYyAkc2xpY2VPZmZzZXQ7CiAgICBwdWJsaWMgJHNsaWNlTGVuZ3RoOwogICAgcHVibGljICRudW1iZXJpbmdPZmZzZXQ7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGFycmF5ICR0cmFjZSwgYm9vbCAka2VlcEFyZ3MgPSB0cnVlLCBpbnQgJHNsaWNlT2Zmc2V0ID0gMCwgaW50ICRzbGljZUxlbmd0aCA9IG51bGwsIGludCAkbnVtYmVyaW5nT2Zmc2V0ID0gMCkKICAgIHsKICAgICAgICAkdGhpcy0+dmFsdWUgPSAkdHJhY2U7CiAgICAgICAgJHRoaXMtPmtlZXBBcmdzID0gJGtlZXBBcmdzOwogICAgICAgICR0aGlzLT5zbGljZU9mZnNldCA9ICRzbGljZU9mZnNldDsKICAgICAgICAkdGhpcy0+c2xpY2VMZW5ndGggPSAkc2xpY2VMZW5ndGg7CiAgICAgICAgJHRoaXMtPm51bWJlcmluZ09mZnNldCA9ICRudW1iZXJpbmdPZmZzZXQ7CiAgICB9Cn0KAppDevTools/query/vendor/symfony/var-dumper/Caster/XmlReaderCaster.phpPD9waHAKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIFN5bWZvbnkgcGFja2FnZS4KICoKICogKGMpIEZhYmllbiBQb3RlbmNpZXIgPGZhYmllbkBzeW1mb255LmNvbT4KICoKICogRm9yIHRoZSBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHZpZXcgdGhlIExJQ0VOU0UKICogZmlsZSB0aGF0IHdhcyBkaXN0cmlidXRlZCB3aXRoIHRoaXMgc291cmNlIGNvZGUuCiAqLwoKbmFtZXNwYWNlIFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDYXN0ZXI7Cgp1c2UgU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENsb25lclxTdHViOwoKLyoqCiAqIENhc3RzIFhtbFJlYWRlciBjbGFzcyB0byBhcnJheSByZXByZXNlbnRhdGlvbi4KICoKICogQGF1dGhvciBCYXB0aXN0ZSBDbGF2acOpIDxjbGF2aWUuYkBnbWFpbC5jb20+CiAqLwpjbGFzcyBYbWxSZWFkZXJDYXN0ZXIKewogICAgcHJpdmF0ZSBzdGF0aWMgJG5vZGVUeXBlcyA9IGFycmF5KAogICAgICAgIFxYTUxSZWFkZXI6Ok5PTkUgPT4gJ05PTkUnLAogICAgICAgIFxYTUxSZWFkZXI6OkVMRU1FTlQgPT4gJ0VMRU1FTlQnLAogICAgICAgIFxYTUxSZWFkZXI6OkFUVFJJQlVURSA9PiAnQVRUUklCVVRFJywKICAgICAgICBcWE1MUmVhZGVyOjpURVhUID0+ICdURVhUJywKICAgICAgICBcWE1MUmVhZGVyOjpDREFUQSA9PiAnQ0RBVEEnLAogICAgICAgIFxYTUxSZWFkZXI6OkVOVElUWV9SRUYgPT4gJ0VOVElUWV9SRUYnLAogICAgICAgIFxYTUxSZWFkZXI6OkVOVElUWSA9PiAnRU5USVRZJywKICAgICAgICBcWE1MUmVhZGVyOjpQSSA9PiAnUEkgKFByb2Nlc3NpbmcgSW5zdHJ1Y3Rpb24pJywKICAgICAgICBcWE1MUmVhZGVyOjpDT01NRU5UID0+ICdDT01NRU5UJywKICAgICAgICBcWE1MUmVhZGVyOjpET0MgPT4gJ0RPQycsCiAgICAgICAgXFhNTFJlYWRlcjo6RE9DX1RZUEUgPT4gJ0RPQ19UWVBFJywKICAgICAgICBcWE1MUmVhZGVyOjpET0NfRlJBR01FTlQgPT4gJ0RPQ19GUkFHTUVOVCcsCiAgICAgICAgXFhNTFJlYWRlcjo6Tk9UQVRJT04gPT4gJ05PVEFUSU9OJywKICAgICAgICBcWE1MUmVhZGVyOjpXSElURVNQQUNFID0+ICdXSElURVNQQUNFJywKICAgICAgICBcWE1MUmVhZGVyOjpTSUdOSUZJQ0FOVF9XSElURVNQQUNFID0+ICdTSUdOSUZJQ0FOVF9XSElURVNQQUNFJywKICAgICAgICBcWE1MUmVhZGVyOjpFTkRfRUxFTUVOVCA9PiAnRU5EX0VMRU1FTlQnLAogICAgICAgIFxYTUxSZWFkZXI6OkVORF9FTlRJVFkgPT4gJ0VORF9FTlRJVFknLAogICAgICAgIFxYTUxSZWFkZXI6OlhNTF9ERUNMQVJBVElPTiA9PiAnWE1MX0RFQ0xBUkFUSU9OJywKICAgICk7CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjYXN0WG1sUmVhZGVyKFxYTUxSZWFkZXIgJHJlYWRlciwgYXJyYXkgJGEsIFN0dWIgJHN0dWIsICRpc05lc3RlZCkKICAgIHsKICAgICAgICAkcHJvcHMgPSBDYXN0ZXI6OlBSRUZJWF9WSVJUVUFMLidwYXJzZXJQcm9wZXJ0aWVzJzsKICAgICAgICAkaW5mbyA9IGFycmF5KAogICAgICAgICAgICAnbG9jYWxOYW1lJyA9PiAkcmVhZGVyLT5sb2NhbE5hbWUsCiAgICAgICAgICAgICdwcmVmaXgnID0+ICRyZWFkZXItPnByZWZpeCwKICAgICAgICAgICAgJ25vZGVUeXBlJyA9PiBuZXcgQ29uc3RTdHViKHNlbGY6OiRub2RlVHlwZXNbJHJlYWRlci0+bm9kZVR5cGVdLCAkcmVhZGVyLT5ub2RlVHlwZSksCiAgICAgICAgICAgICdkZXB0aCcgPT4gJHJlYWRlci0+ZGVwdGgsCiAgICAgICAgICAgICdpc0RlZmF1bHQnID0+ICRyZWFkZXItPmlzRGVmYXVsdCwKICAgICAgICAgICAgJ2lzRW1wdHlFbGVtZW50JyA9PiBcWE1MUmVhZGVyOjpOT05FID09PSAkcmVhZGVyLT5ub2RlVHlwZSA/IG51bGwgOiAkcmVhZGVyLT5pc0VtcHR5RWxlbWVudCwKICAgICAgICAgICAgJ3htbExhbmcnID0+ICRyZWFkZXItPnhtbExhbmcsCiAgICAgICAgICAgICdhdHRyaWJ1dGVDb3VudCcgPT4gJHJlYWRlci0+YXR0cmlidXRlQ291bnQsCiAgICAgICAgICAgICd2YWx1ZScgPT4gJHJlYWRlci0+dmFsdWUsCiAgICAgICAgICAgICduYW1lc3BhY2VVUkknID0+ICRyZWFkZXItPm5hbWVzcGFjZVVSSSwKICAgICAgICAgICAgJ2Jhc2VVUkknID0+ICRyZWFkZXItPmJhc2VVUkkgPyBuZXcgTGlua1N0dWIoJHJlYWRlci0+YmFzZVVSSSkgOiAkcmVhZGVyLT5iYXNlVVJJLAogICAgICAgICAgICAkcHJvcHMgPT4gYXJyYXkoCiAgICAgICAgICAgICAgICAnTE9BRERURCcgPT4gJHJlYWRlci0+Z2V0UGFyc2VyUHJvcGVydHkoXFhNTFJlYWRlcjo6TE9BRERURCksCiAgICAgICAgICAgICAgICAnREVGQVVMVEFUVFJTJyA9PiAkcmVhZGVyLT5nZXRQYXJzZXJQcm9wZXJ0eShcWE1MUmVhZGVyOjpERUZBVUxUQVRUUlMpLAogICAgICAgICAgICAgICAgJ1ZBTElEQVRFJyA9PiAkcmVhZGVyLT5nZXRQYXJzZXJQcm9wZXJ0eShcWE1MUmVhZGVyOjpWQUxJREFURSksCiAgICAgICAgICAgICAgICAnU1VCU1RfRU5USVRJRVMnID0+ICRyZWFkZXItPmdldFBhcnNlclByb3BlcnR5KFxYTUxSZWFkZXI6OlNVQlNUX0VOVElUSUVTKSwKICAgICAgICAgICAgKSwKICAgICAgICApOwoKICAgICAgICBpZiAoJGluZm9bJHByb3BzXSA9IENhc3Rlcjo6ZmlsdGVyKCRpbmZvWyRwcm9wc10sIENhc3Rlcjo6RVhDTFVERV9FTVBUWSwgYXJyYXkoKSwgJGNvdW50KSkgewogICAgICAgICAgICAkaW5mb1skcHJvcHNdID0gbmV3IEVudW1TdHViKCRpbmZvWyRwcm9wc10pOwogICAgICAgICAgICAkaW5mb1skcHJvcHNdLT5jdXQgPSAkY291bnQ7CiAgICAgICAgfQoKICAgICAgICAkaW5mbyA9IENhc3Rlcjo6ZmlsdGVyKCRpbmZvLCBDYXN0ZXI6OkVYQ0xVREVfRU1QVFksIGFycmF5KCksICRjb3VudCk7CiAgICAgICAgLy8gKzIgYmVjYXVzZSBoYXNWYWx1ZSBhbmQgaGFzQXR0cmlidXRlcyBhcmUgYWx3YXlzIGZpbHRlcmVkCiAgICAgICAgJHN0dWItPmN1dCArPSAkY291bnQgKyAyOwoKICAgICAgICByZXR1cm4gJGEgKyAkaW5mbzsKICAgIH0KfQo=AppDevTools/query/vendor/symfony/var-dumper/Caster/XmlResourceCaster.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDbG9uZXJcU3R1YjsKCi8qKgogKiBDYXN0cyBYTUwgcmVzb3VyY2VzIHRvIGFycmF5IHJlcHJlc2VudGF0aW9uLgogKgogKiBAYXV0aG9yIE5pY29sYXMgR3Jla2FzIDxwQHRjaHdvcmsuY29tPgogKi8KY2xhc3MgWG1sUmVzb3VyY2VDYXN0ZXIKewogICAgcHJpdmF0ZSBzdGF0aWMgJHhtbEVycm9ycyA9IGFycmF5KAogICAgICAgIFhNTF9FUlJPUl9OT05FID0+ICdYTUxfRVJST1JfTk9ORScsCiAgICAgICAgWE1MX0VSUk9SX05PX01FTU9SWSA9PiAnWE1MX0VSUk9SX05PX01FTU9SWScsCiAgICAgICAgWE1MX0VSUk9SX1NZTlRBWCA9PiAnWE1MX0VSUk9SX1NZTlRBWCcsCiAgICAgICAgWE1MX0VSUk9SX05PX0VMRU1FTlRTID0+ICdYTUxfRVJST1JfTk9fRUxFTUVOVFMnLAogICAgICAgIFhNTF9FUlJPUl9JTlZBTElEX1RPS0VOID0+ICdYTUxfRVJST1JfSU5WQUxJRF9UT0tFTicsCiAgICAgICAgWE1MX0VSUk9SX1VOQ0xPU0VEX1RPS0VOID0+ICdYTUxfRVJST1JfVU5DTE9TRURfVE9LRU4nLAogICAgICAgIFhNTF9FUlJPUl9QQVJUSUFMX0NIQVIgPT4gJ1hNTF9FUlJPUl9QQVJUSUFMX0NIQVInLAogICAgICAgIFhNTF9FUlJPUl9UQUdfTUlTTUFUQ0ggPT4gJ1hNTF9FUlJPUl9UQUdfTUlTTUFUQ0gnLAogICAgICAgIFhNTF9FUlJPUl9EVVBMSUNBVEVfQVRUUklCVVRFID0+ICdYTUxfRVJST1JfRFVQTElDQVRFX0FUVFJJQlVURScsCiAgICAgICAgWE1MX0VSUk9SX0pVTktfQUZURVJfRE9DX0VMRU1FTlQgPT4gJ1hNTF9FUlJPUl9KVU5LX0FGVEVSX0RPQ19FTEVNRU5UJywKICAgICAgICBYTUxfRVJST1JfUEFSQU1fRU5USVRZX1JFRiA9PiAnWE1MX0VSUk9SX1BBUkFNX0VOVElUWV9SRUYnLAogICAgICAgIFhNTF9FUlJPUl9VTkRFRklORURfRU5USVRZID0+ICdYTUxfRVJST1JfVU5ERUZJTkVEX0VOVElUWScsCiAgICAgICAgWE1MX0VSUk9SX1JFQ1VSU0lWRV9FTlRJVFlfUkVGID0+ICdYTUxfRVJST1JfUkVDVVJTSVZFX0VOVElUWV9SRUYnLAogICAgICAgIFhNTF9FUlJPUl9BU1lOQ19FTlRJVFkgPT4gJ1hNTF9FUlJPUl9BU1lOQ19FTlRJVFknLAogICAgICAgIFhNTF9FUlJPUl9CQURfQ0hBUl9SRUYgPT4gJ1hNTF9FUlJPUl9CQURfQ0hBUl9SRUYnLAogICAgICAgIFhNTF9FUlJPUl9CSU5BUllfRU5USVRZX1JFRiA9PiAnWE1MX0VSUk9SX0JJTkFSWV9FTlRJVFlfUkVGJywKICAgICAgICBYTUxfRVJST1JfQVRUUklCVVRFX0VYVEVSTkFMX0VOVElUWV9SRUYgPT4gJ1hNTF9FUlJPUl9BVFRSSUJVVEVfRVhURVJOQUxfRU5USVRZX1JFRicsCiAgICAgICAgWE1MX0VSUk9SX01JU1BMQUNFRF9YTUxfUEkgPT4gJ1hNTF9FUlJPUl9NSVNQTEFDRURfWE1MX1BJJywKICAgICAgICBYTUxfRVJST1JfVU5LTk9XTl9FTkNPRElORyA9PiAnWE1MX0VSUk9SX1VOS05PV05fRU5DT0RJTkcnLAogICAgICAgIFhNTF9FUlJPUl9JTkNPUlJFQ1RfRU5DT0RJTkcgPT4gJ1hNTF9FUlJPUl9JTkNPUlJFQ1RfRU5DT0RJTkcnLAogICAgICAgIFhNTF9FUlJPUl9VTkNMT1NFRF9DREFUQV9TRUNUSU9OID0+ICdYTUxfRVJST1JfVU5DTE9TRURfQ0RBVEFfU0VDVElPTicsCiAgICAgICAgWE1MX0VSUk9SX0VYVEVSTkFMX0VOVElUWV9IQU5ETElORyA9PiAnWE1MX0VSUk9SX0VYVEVSTkFMX0VOVElUWV9IQU5ETElORycsCiAgICApOwoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2FzdFhtbCgkaCwgYXJyYXkgJGEsIFN0dWIgJHN0dWIsICRpc05lc3RlZCkKICAgIHsKICAgICAgICAkYVsnY3VycmVudF9ieXRlX2luZGV4J10gPSB4bWxfZ2V0X2N1cnJlbnRfYnl0ZV9pbmRleCgkaCk7CiAgICAgICAgJGFbJ2N1cnJlbnRfY29sdW1uX251bWJlciddID0geG1sX2dldF9jdXJyZW50X2NvbHVtbl9udW1iZXIoJGgpOwogICAgICAgICRhWydjdXJyZW50X2xpbmVfbnVtYmVyJ10gPSB4bWxfZ2V0X2N1cnJlbnRfbGluZV9udW1iZXIoJGgpOwogICAgICAgICRhWydlcnJvcl9jb2RlJ10gPSB4bWxfZ2V0X2Vycm9yX2NvZGUoJGgpOwoKICAgICAgICBpZiAoaXNzZXQoc2VsZjo6JHhtbEVycm9yc1skYVsnZXJyb3JfY29kZSddXSkpIHsKICAgICAgICAgICAgJGFbJ2Vycm9yX2NvZGUnXSA9IG5ldyBDb25zdFN0dWIoc2VsZjo6JHhtbEVycm9yc1skYVsnZXJyb3JfY29kZSddXSwgJGFbJ2Vycm9yX2NvZGUnXSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGE7CiAgICB9Cn0KAppDevTools/query/vendor/symfony/var-dumper/Cloner/AbstractCloner.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2xvbmVyOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDYXN0ZXJcQ2FzdGVyOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXEV4Y2VwdGlvblxUaHJvd2luZ0Nhc3RlckV4Y2VwdGlvbjsKCi8qKgogKiBBYnN0cmFjdENsb25lciBpbXBsZW1lbnRzIGEgZ2VuZXJpYyBjYXN0ZXIgbWVjaGFuaXNtIGZvciBvYmplY3RzIGFuZCByZXNvdXJjZXMuCiAqCiAqIEBhdXRob3IgTmljb2xhcyBHcmVrYXMgPHBAdGNod29yay5jb20+CiAqLwphYnN0cmFjdCBjbGFzcyBBYnN0cmFjdENsb25lciBpbXBsZW1lbnRzIENsb25lckludGVyZmFjZQp7CiAgICBwdWJsaWMgc3RhdGljICRkZWZhdWx0Q2FzdGVycyA9IGFycmF5KAogICAgICAgICdfX1BIUF9JbmNvbXBsZXRlX0NsYXNzJyA9PiBhcnJheSgnU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENhc3RlclxDYXN0ZXInLCAnY2FzdFBocEluY29tcGxldGVDbGFzcycpLAoKICAgICAgICAnU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENhc3RlclxDdXRTdHViJyA9PiBhcnJheSgnU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENhc3RlclxTdHViQ2FzdGVyJywgJ2Nhc3RTdHViJyksCiAgICAgICAgJ1N5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDYXN0ZXJcQ3V0QXJyYXlTdHViJyA9PiBhcnJheSgnU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENhc3RlclxTdHViQ2FzdGVyJywgJ2Nhc3RDdXRBcnJheScpLAogICAgICAgICdTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyXENvbnN0U3R1YicgPT4gYXJyYXkoJ1N5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDYXN0ZXJcU3R1YkNhc3RlcicsICdjYXN0U3R1YicpLAogICAgICAgICdTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyXEVudW1TdHViJyA9PiBhcnJheSgnU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENhc3RlclxTdHViQ2FzdGVyJywgJ2Nhc3RFbnVtJyksCgogICAgICAgICdDbG9zdXJlJyA9PiBhcnJheSgnU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENhc3RlclxSZWZsZWN0aW9uQ2FzdGVyJywgJ2Nhc3RDbG9zdXJlJyksCiAgICAgICAgJ0dlbmVyYXRvcicgPT4gYXJyYXkoJ1N5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDYXN0ZXJcUmVmbGVjdGlvbkNhc3RlcicsICdjYXN0R2VuZXJhdG9yJyksCiAgICAgICAgJ1JlZmxlY3Rpb25UeXBlJyA9PiBhcnJheSgnU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENhc3RlclxSZWZsZWN0aW9uQ2FzdGVyJywgJ2Nhc3RUeXBlJyksCiAgICAgICAgJ1JlZmxlY3Rpb25HZW5lcmF0b3InID0+IGFycmF5KCdTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyXFJlZmxlY3Rpb25DYXN0ZXInLCAnY2FzdFJlZmxlY3Rpb25HZW5lcmF0b3InKSwKICAgICAgICAnUmVmbGVjdGlvbkNsYXNzJyA9PiBhcnJheSgnU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENhc3RlclxSZWZsZWN0aW9uQ2FzdGVyJywgJ2Nhc3RDbGFzcycpLAogICAgICAgICdSZWZsZWN0aW9uRnVuY3Rpb25BYnN0cmFjdCcgPT4gYXJyYXkoJ1N5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDYXN0ZXJcUmVmbGVjdGlvbkNhc3RlcicsICdjYXN0RnVuY3Rpb25BYnN0cmFjdCcpLAogICAgICAgICdSZWZsZWN0aW9uTWV0aG9kJyA9PiBhcnJheSgnU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENhc3RlclxSZWZsZWN0aW9uQ2FzdGVyJywgJ2Nhc3RNZXRob2QnKSwKICAgICAgICAnUmVmbGVjdGlvblBhcmFtZXRlcicgPT4gYXJyYXkoJ1N5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDYXN0ZXJcUmVmbGVjdGlvbkNhc3RlcicsICdjYXN0UGFyYW1ldGVyJyksCiAgICAgICAgJ1JlZmxlY3Rpb25Qcm9wZXJ0eScgPT4gYXJyYXkoJ1N5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDYXN0ZXJcUmVmbGVjdGlvbkNhc3RlcicsICdjYXN0UHJvcGVydHknKSwKICAgICAgICAnUmVmbGVjdGlvbkV4dGVuc2lvbicgPT4gYXJyYXkoJ1N5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDYXN0ZXJcUmVmbGVjdGlvbkNhc3RlcicsICdjYXN0RXh0ZW5zaW9uJyksCiAgICAgICAgJ1JlZmxlY3Rpb25aZW5kRXh0ZW5zaW9uJyA9PiBhcnJheSgnU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENhc3RlclxSZWZsZWN0aW9uQ2FzdGVyJywgJ2Nhc3RaZW5kRXh0ZW5zaW9uJyksCgogICAgICAgICdEb2N0cmluZVxDb21tb25cUGVyc2lzdGVuY2VcT2JqZWN0TWFuYWdlcicgPT4gYXJyYXkoJ1N5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDYXN0ZXJcU3R1YkNhc3RlcicsICdjdXRJbnRlcm5hbHMnKSwKICAgICAgICAnRG9jdHJpbmVcQ29tbW9uXFByb3h5XFByb3h5JyA9PiBhcnJheSgnU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENhc3RlclxEb2N0cmluZUNhc3RlcicsICdjYXN0Q29tbW9uUHJveHknKSwKICAgICAgICAnRG9jdHJpbmVcT1JNXFByb3h5XFByb3h5JyA9PiBhcnJheSgnU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENhc3RlclxEb2N0cmluZUNhc3RlcicsICdjYXN0T3JtUHJveHknKSwKICAgICAgICAnRG9jdHJpbmVcT1JNXFBlcnNpc3RlbnRDb2xsZWN0aW9uJyA9PiBhcnJheSgnU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENhc3RlclxEb2N0cmluZUNhc3RlcicsICdjYXN0UGVyc2lzdGVudENvbGxlY3Rpb24nKSwKCiAgICAgICAgJ0RPTUV4Y2VwdGlvbicgPT4gYXJyYXkoJ1N5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDYXN0ZXJcRE9NQ2FzdGVyJywgJ2Nhc3RFeGNlcHRpb24nKSwKICAgICAgICAnRE9NU3RyaW5nTGlzdCcgPT4gYXJyYXkoJ1N5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDYXN0ZXJcRE9NQ2FzdGVyJywgJ2Nhc3RMZW5ndGgnKSwKICAgICAgICAnRE9NTmFtZUxpc3QnID0+IGFycmF5KCdTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyXERPTUNhc3RlcicsICdjYXN0TGVuZ3RoJyksCiAgICAgICAgJ0RPTUltcGxlbWVudGF0aW9uJyA9PiBhcnJheSgnU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENhc3RlclxET01DYXN0ZXInLCAnY2FzdEltcGxlbWVudGF0aW9uJyksCiAgICAgICAgJ0RPTUltcGxlbWVudGF0aW9uTGlzdCcgPT4gYXJyYXkoJ1N5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDYXN0ZXJcRE9NQ2FzdGVyJywgJ2Nhc3RMZW5ndGgnKSwKICAgICAgICAnRE9NTm9kZScgPT4gYXJyYXkoJ1N5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDYXN0ZXJcRE9NQ2FzdGVyJywgJ2Nhc3ROb2RlJyksCiAgICAgICAgJ0RPTU5hbWVTcGFjZU5vZGUnID0+IGFycmF5KCdTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyXERPTUNhc3RlcicsICdjYXN0TmFtZVNwYWNlTm9kZScpLAogICAgICAgICdET01Eb2N1bWVudCcgPT4gYXJyYXkoJ1N5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDYXN0ZXJcRE9NQ2FzdGVyJywgJ2Nhc3REb2N1bWVudCcpLAogICAgICAgICdET01Ob2RlTGlzdCcgPT4gYXJyYXkoJ1N5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDYXN0ZXJcRE9NQ2FzdGVyJywgJ2Nhc3RMZW5ndGgnKSwKICAgICAgICAnRE9NTmFtZWROb2RlTWFwJyA9PiBhcnJheSgnU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENhc3RlclxET01DYXN0ZXInLCAnY2FzdExlbmd0aCcpLAogICAgICAgICdET01DaGFyYWN0ZXJEYXRhJyA9PiBhcnJheSgnU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENhc3RlclxET01DYXN0ZXInLCAnY2FzdENoYXJhY3RlckRhdGEnKSwKICAgICAgICAnRE9NQXR0cicgPT4gYXJyYXkoJ1N5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDYXN0ZXJcRE9NQ2FzdGVyJywgJ2Nhc3RBdHRyJyksCiAgICAgICAgJ0RPTUVsZW1lbnQnID0+IGFycmF5KCdTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyXERPTUNhc3RlcicsICdjYXN0RWxlbWVudCcpLAogICAgICAgICdET01UZXh0JyA9PiBhcnJheSgnU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENhc3RlclxET01DYXN0ZXInLCAnY2FzdFRleHQnKSwKICAgICAgICAnRE9NVHlwZWluZm8nID0+IGFycmF5KCdTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyXERPTUNhc3RlcicsICdjYXN0VHlwZWluZm8nKSwKICAgICAgICAnRE9NRG9tRXJyb3InID0+IGFycmF5KCdTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyXERPTUNhc3RlcicsICdjYXN0RG9tRXJyb3InKSwKICAgICAgICAnRE9NTG9jYXRvcicgPT4gYXJyYXkoJ1N5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDYXN0ZXJcRE9NQ2FzdGVyJywgJ2Nhc3RMb2NhdG9yJyksCiAgICAgICAgJ0RPTURvY3VtZW50VHlwZScgPT4gYXJyYXkoJ1N5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDYXN0ZXJcRE9NQ2FzdGVyJywgJ2Nhc3REb2N1bWVudFR5cGUnKSwKICAgICAgICAnRE9NTm90YXRpb24nID0+IGFycmF5KCdTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyXERPTUNhc3RlcicsICdjYXN0Tm90YXRpb24nKSwKICAgICAgICAnRE9NRW50aXR5JyA9PiBhcnJheSgnU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENhc3RlclxET01DYXN0ZXInLCAnY2FzdEVudGl0eScpLAogICAgICAgICdET01Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24nID0+IGFycmF5KCdTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyXERPTUNhc3RlcicsICdjYXN0UHJvY2Vzc2luZ0luc3RydWN0aW9uJyksCiAgICAgICAgJ0RPTVhQYXRoJyA9PiBhcnJheSgnU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENhc3RlclxET01DYXN0ZXInLCAnY2FzdFhQYXRoJyksCgogICAgICAgICdYbWxSZWFkZXInID0+IGFycmF5KCdTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyXFhtbFJlYWRlckNhc3RlcicsICdjYXN0WG1sUmVhZGVyJyksCgogICAgICAgICdFcnJvckV4Y2VwdGlvbicgPT4gYXJyYXkoJ1N5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDYXN0ZXJcRXhjZXB0aW9uQ2FzdGVyJywgJ2Nhc3RFcnJvckV4Y2VwdGlvbicpLAogICAgICAgICdFeGNlcHRpb24nID0+IGFycmF5KCdTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyXEV4Y2VwdGlvbkNhc3RlcicsICdjYXN0RXhjZXB0aW9uJyksCiAgICAgICAgJ0Vycm9yJyA9PiBhcnJheSgnU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENhc3RlclxFeGNlcHRpb25DYXN0ZXInLCAnY2FzdEVycm9yJyksCiAgICAgICAgJ1N5bWZvbnlcQ29tcG9uZW50XERlcGVuZGVuY3lJbmplY3Rpb25cQ29udGFpbmVySW50ZXJmYWNlJyA9PiBhcnJheSgnU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENhc3RlclxTdHViQ2FzdGVyJywgJ2N1dEludGVybmFscycpLAogICAgICAgICdTeW1mb255XENvbXBvbmVudFxIdHRwRm91bmRhdGlvblxSZXF1ZXN0JyA9PiBhcnJheSgnU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENhc3RlclxTeW1mb255Q2FzdGVyJywgJ2Nhc3RSZXF1ZXN0JyksCiAgICAgICAgJ1N5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxFeGNlcHRpb25cVGhyb3dpbmdDYXN0ZXJFeGNlcHRpb24nID0+IGFycmF5KCdTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyXEV4Y2VwdGlvbkNhc3RlcicsICdjYXN0VGhyb3dpbmdDYXN0ZXJFeGNlcHRpb24nKSwKICAgICAgICAnU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENhc3RlclxUcmFjZVN0dWInID0+IGFycmF5KCdTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyXEV4Y2VwdGlvbkNhc3RlcicsICdjYXN0VHJhY2VTdHViJyksCiAgICAgICAgJ1N5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDYXN0ZXJcRnJhbWVTdHViJyA9PiBhcnJheSgnU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENhc3RlclxFeGNlcHRpb25DYXN0ZXInLCAnY2FzdEZyYW1lU3R1YicpLAogICAgICAgICdTeW1mb255XENvbXBvbmVudFxEZWJ1Z1xFeGNlcHRpb25cU2lsZW5jZWRFcnJvckNvbnRleHQnID0+IGFycmF5KCdTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyXEV4Y2VwdGlvbkNhc3RlcicsICdjYXN0U2lsZW5jZWRFcnJvckNvbnRleHQnKSwKCiAgICAgICAgJ1BIUFVuaXRfRnJhbWV3b3JrX01vY2tPYmplY3RfTW9ja09iamVjdCcgPT4gYXJyYXkoJ1N5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDYXN0ZXJcU3R1YkNhc3RlcicsICdjdXRJbnRlcm5hbHMnKSwKICAgICAgICAnUHJvcGhlY3lcUHJvcGhlY3lcUHJvcGhlY3lTdWJqZWN0SW50ZXJmYWNlJyA9PiBhcnJheSgnU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENhc3RlclxTdHViQ2FzdGVyJywgJ2N1dEludGVybmFscycpLAogICAgICAgICdNb2NrZXJ5XE1vY2tJbnRlcmZhY2UnID0+IGFycmF5KCdTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyXFN0dWJDYXN0ZXInLCAnY3V0SW50ZXJuYWxzJyksCgogICAgICAgICdQRE8nID0+IGFycmF5KCdTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyXFBkb0Nhc3RlcicsICdjYXN0UGRvJyksCiAgICAgICAgJ1BET1N0YXRlbWVudCcgPT4gYXJyYXkoJ1N5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDYXN0ZXJcUGRvQ2FzdGVyJywgJ2Nhc3RQZG9TdGF0ZW1lbnQnKSwKCiAgICAgICAgJ0FNUVBDb25uZWN0aW9uJyA9PiBhcnJheSgnU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENhc3RlclxBbXFwQ2FzdGVyJywgJ2Nhc3RDb25uZWN0aW9uJyksCiAgICAgICAgJ0FNUVBDaGFubmVsJyA9PiBhcnJheSgnU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENhc3RlclxBbXFwQ2FzdGVyJywgJ2Nhc3RDaGFubmVsJyksCiAgICAgICAgJ0FNUVBRdWV1ZScgPT4gYXJyYXkoJ1N5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDYXN0ZXJcQW1xcENhc3RlcicsICdjYXN0UXVldWUnKSwKICAgICAgICAnQU1RUEV4Y2hhbmdlJyA9PiBhcnJheSgnU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENhc3RlclxBbXFwQ2FzdGVyJywgJ2Nhc3RFeGNoYW5nZScpLAogICAgICAgICdBTVFQRW52ZWxvcGUnID0+IGFycmF5KCdTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyXEFtcXBDYXN0ZXInLCAnY2FzdEVudmVsb3BlJyksCgogICAgICAgICdBcnJheU9iamVjdCcgPT4gYXJyYXkoJ1N5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDYXN0ZXJcU3BsQ2FzdGVyJywgJ2Nhc3RBcnJheU9iamVjdCcpLAogICAgICAgICdBcnJheUl0ZXJhdG9yJyA9PiBhcnJheSgnU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENhc3RlclxTcGxDYXN0ZXInLCAnY2FzdEFycmF5SXRlcmF0b3InKSwKICAgICAgICAnU3BsRG91Ymx5TGlua2VkTGlzdCcgPT4gYXJyYXkoJ1N5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDYXN0ZXJcU3BsQ2FzdGVyJywgJ2Nhc3REb3VibHlMaW5rZWRMaXN0JyksCiAgICAgICAgJ1NwbEZpbGVJbmZvJyA9PiBhcnJheSgnU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENhc3RlclxTcGxDYXN0ZXInLCAnY2FzdEZpbGVJbmZvJyksCiAgICAgICAgJ1NwbEZpbGVPYmplY3QnID0+IGFycmF5KCdTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyXFNwbENhc3RlcicsICdjYXN0RmlsZU9iamVjdCcpLAogICAgICAgICdTcGxGaXhlZEFycmF5JyA9PiBhcnJheSgnU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENhc3RlclxTcGxDYXN0ZXInLCAnY2FzdEZpeGVkQXJyYXknKSwKICAgICAgICAnU3BsSGVhcCcgPT4gYXJyYXkoJ1N5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDYXN0ZXJcU3BsQ2FzdGVyJywgJ2Nhc3RIZWFwJyksCiAgICAgICAgJ1NwbE9iamVjdFN0b3JhZ2UnID0+IGFycmF5KCdTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyXFNwbENhc3RlcicsICdjYXN0T2JqZWN0U3RvcmFnZScpLAogICAgICAgICdTcGxQcmlvcml0eVF1ZXVlJyA9PiBhcnJheSgnU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENhc3RlclxTcGxDYXN0ZXInLCAnY2FzdEhlYXAnKSwKICAgICAgICAnT3V0ZXJJdGVyYXRvcicgPT4gYXJyYXkoJ1N5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDYXN0ZXJcU3BsQ2FzdGVyJywgJ2Nhc3RPdXRlckl0ZXJhdG9yJyksCgogICAgICAgICdSZWRpcycgPT4gYXJyYXkoJ1N5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDYXN0ZXJcUmVkaXNDYXN0ZXInLCAnY2FzdFJlZGlzJyksCiAgICAgICAgJ1JlZGlzQXJyYXknID0+IGFycmF5KCdTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyXFJlZGlzQ2FzdGVyJywgJ2Nhc3RSZWRpc0FycmF5JyksCgogICAgICAgICdEYXRlVGltZUludGVyZmFjZScgPT4gYXJyYXkoJ1N5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDYXN0ZXJcRGF0ZUNhc3RlcicsICdjYXN0RGF0ZVRpbWUnKSwKICAgICAgICAnRGF0ZUludGVydmFsJyA9PiBhcnJheSgnU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENhc3RlclxEYXRlQ2FzdGVyJywgJ2Nhc3RJbnRlcnZhbCcpLAogICAgICAgICdEYXRlVGltZVpvbmUnID0+IGFycmF5KCdTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyXERhdGVDYXN0ZXInLCAnY2FzdFRpbWVab25lJyksCiAgICAgICAgJ0RhdGVQZXJpb2QnID0+IGFycmF5KCdTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyXERhdGVDYXN0ZXInLCAnY2FzdFBlcmlvZCcpLAoKICAgICAgICAnR01QJyA9PiBhcnJheSgnU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENhc3RlclxHbXBDYXN0ZXInLCAnY2FzdEdtcCcpLAoKICAgICAgICAnOmN1cmwnID0+IGFycmF5KCdTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyXFJlc291cmNlQ2FzdGVyJywgJ2Nhc3RDdXJsJyksCiAgICAgICAgJzpkYmEnID0+IGFycmF5KCdTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyXFJlc291cmNlQ2FzdGVyJywgJ2Nhc3REYmEnKSwKICAgICAgICAnOmRiYSBwZXJzaXN0ZW50JyA9PiBhcnJheSgnU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENhc3RlclxSZXNvdXJjZUNhc3RlcicsICdjYXN0RGJhJyksCiAgICAgICAgJzpnZCcgPT4gYXJyYXkoJ1N5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDYXN0ZXJcUmVzb3VyY2VDYXN0ZXInLCAnY2FzdEdkJyksCiAgICAgICAgJzpteXNxbCBsaW5rJyA9PiBhcnJheSgnU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENhc3RlclxSZXNvdXJjZUNhc3RlcicsICdjYXN0TXlzcWxMaW5rJyksCiAgICAgICAgJzpwZ3NxbCBsYXJnZSBvYmplY3QnID0+IGFycmF5KCdTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyXFBnU3FsQ2FzdGVyJywgJ2Nhc3RMYXJnZU9iamVjdCcpLAogICAgICAgICc6cGdzcWwgbGluaycgPT4gYXJyYXkoJ1N5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDYXN0ZXJcUGdTcWxDYXN0ZXInLCAnY2FzdExpbmsnKSwKICAgICAgICAnOnBnc3FsIGxpbmsgcGVyc2lzdGVudCcgPT4gYXJyYXkoJ1N5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDYXN0ZXJcUGdTcWxDYXN0ZXInLCAnY2FzdExpbmsnKSwKICAgICAgICAnOnBnc3FsIHJlc3VsdCcgPT4gYXJyYXkoJ1N5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDYXN0ZXJcUGdTcWxDYXN0ZXInLCAnY2FzdFJlc3VsdCcpLAogICAgICAgICc6cHJvY2VzcycgPT4gYXJyYXkoJ1N5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDYXN0ZXJcUmVzb3VyY2VDYXN0ZXInLCAnY2FzdFByb2Nlc3MnKSwKICAgICAgICAnOnN0cmVhbScgPT4gYXJyYXkoJ1N5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDYXN0ZXJcUmVzb3VyY2VDYXN0ZXInLCAnY2FzdFN0cmVhbScpLAogICAgICAgICc6cGVyc2lzdGVudCBzdHJlYW0nID0+IGFycmF5KCdTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyXFJlc291cmNlQ2FzdGVyJywgJ2Nhc3RTdHJlYW0nKSwKICAgICAgICAnOnN0cmVhbS1jb250ZXh0JyA9PiBhcnJheSgnU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENhc3RlclxSZXNvdXJjZUNhc3RlcicsICdjYXN0U3RyZWFtQ29udGV4dCcpLAogICAgICAgICc6eG1sJyA9PiBhcnJheSgnU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENhc3RlclxYbWxSZXNvdXJjZUNhc3RlcicsICdjYXN0WG1sJyksCiAgICApOwoKICAgIHByb3RlY3RlZCAkbWF4SXRlbXMgPSAyNTAwOwogICAgcHJvdGVjdGVkICRtYXhTdHJpbmcgPSAtMTsKICAgIHByb3RlY3RlZCAkbWluRGVwdGggPSAxOwoKICAgIHByaXZhdGUgJGNhc3RlcnMgPSBhcnJheSgpOwogICAgcHJpdmF0ZSAkcHJldkVycm9ySGFuZGxlcjsKICAgIHByaXZhdGUgJGNsYXNzSW5mbyA9IGFycmF5KCk7CiAgICBwcml2YXRlICRmaWx0ZXIgPSAwOwoKICAgIC8qKgogICAgICogQHBhcmFtIGNhbGxhYmxlW118bnVsbCAkY2FzdGVycyBBIG1hcCBvZiBjYXN0ZXJzCiAgICAgKgogICAgICogQHNlZSBhZGRDYXN0ZXJzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChhcnJheSAkY2FzdGVycyA9IG51bGwpCiAgICB7CiAgICAgICAgaWYgKG51bGwgPT09ICRjYXN0ZXJzKSB7CiAgICAgICAgICAgICRjYXN0ZXJzID0gc3RhdGljOjokZGVmYXVsdENhc3RlcnM7CiAgICAgICAgfQogICAgICAgICR0aGlzLT5hZGRDYXN0ZXJzKCRjYXN0ZXJzKTsKICAgIH0KCiAgICAvKioKICAgICAqIEFkZHMgY2FzdGVycyBmb3IgcmVzb3VyY2VzIGFuZCBvYmplY3RzLgogICAgICoKICAgICAqIE1hcHMgcmVzb3VyY2VzIG9yIG9iamVjdHMgdHlwZXMgdG8gYSBjYWxsYmFjay4KICAgICAqIFR5cGVzIGFyZSBpbiB0aGUga2V5LCB3aXRoIGEgY2FsbGFibGUgY2FzdGVyIGZvciB2YWx1ZS4KICAgICAqIFJlc291cmNlIHR5cGVzIGFyZSB0byBiZSBwcmVmaXhlZCB3aXRoIGEgYDpgLAogICAgICogc2VlIGUuZy4gc3RhdGljOjokZGVmYXVsdENhc3RlcnMuCiAgICAgKgogICAgICogQHBhcmFtIGNhbGxhYmxlW10gJGNhc3RlcnMgQSBtYXAgb2YgY2FzdGVycwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkQ2FzdGVycyhhcnJheSAkY2FzdGVycykKICAgIHsKICAgICAgICBmb3JlYWNoICgkY2FzdGVycyBhcyAkdHlwZSA9PiAkY2FsbGJhY2spIHsKICAgICAgICAgICAgJHRoaXMtPmNhc3RlcnNbc3RydG9sb3dlcigkdHlwZSldW10gPSBpc19zdHJpbmcoJGNhbGxiYWNrKSAmJiBmYWxzZSAhPT0gc3RycG9zKCRjYWxsYmFjaywgJzo6JykgPyBleHBsb2RlKCc6OicsICRjYWxsYmFjaywgMikgOiAkY2FsbGJhY2s7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgaXRlbXMgdG8gY2xvbmUgcGFzdCB0aGUgbWluaW11bSBkZXB0aCBpbiBuZXN0ZWQgc3RydWN0dXJlcy4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRtYXhJdGVtcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0TWF4SXRlbXMoJG1heEl0ZW1zKQogICAgewogICAgICAgICR0aGlzLT5tYXhJdGVtcyA9IChpbnQpICRtYXhJdGVtczsKICAgIH0KCiAgICAvKioKICAgICAqIFNldHMgdGhlIG1heGltdW0gY2xvbmVkIGxlbmd0aCBmb3Igc3RyaW5ncy4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRtYXhTdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldE1heFN0cmluZygkbWF4U3RyaW5nKQogICAgewogICAgICAgICR0aGlzLT5tYXhTdHJpbmcgPSAoaW50KSAkbWF4U3RyaW5nOwogICAgfQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgbWluaW11bSB0cmVlIGRlcHRoIHdoZXJlIHdlIGFyZSBndWFyYW50ZWVkIHRvIGNsb25lIGFsbCB0aGUgaXRlbXMuICBBZnRlciB0aGlzCiAgICAgKiBkZXB0aCBpcyByZWFjaGVkLCBvbmx5IHNldE1heEl0ZW1zIGl0ZW1zIHdpbGwgYmUgY2xvbmVkLgogICAgICoKICAgICAqIEBwYXJhbSBpbnQgJG1pbkRlcHRoCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRNaW5EZXB0aCgkbWluRGVwdGgpCiAgICB7CiAgICAgICAgJHRoaXMtPm1pbkRlcHRoID0gKGludCkgJG1pbkRlcHRoOwogICAgfQoKICAgIC8qKgogICAgICogQ2xvbmVzIGEgUEhQIHZhcmlhYmxlLgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFyICAgIEFueSBQSFAgdmFyaWFibGUKICAgICAqIEBwYXJhbSBpbnQgICAkZmlsdGVyIEEgYml0IGZpZWxkIG9mIENhc3Rlcjo6RVhDTFVERV8qIGNvbnN0YW50cwogICAgICoKICAgICAqIEByZXR1cm4gRGF0YSBUaGUgY2xvbmVkIHZhcmlhYmxlIHJlcHJlc2VudGVkIGJ5IGEgRGF0YSBvYmplY3QKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNsb25lVmFyKCR2YXIsICRmaWx0ZXIgPSAwKQogICAgewogICAgICAgICR0aGlzLT5wcmV2RXJyb3JIYW5kbGVyID0gc2V0X2Vycm9yX2hhbmRsZXIoZnVuY3Rpb24gKCR0eXBlLCAkbXNnLCAkZmlsZSwgJGxpbmUsICRjb250ZXh0ID0gYXJyYXkoKSkgewogICAgICAgICAgICBpZiAoRV9SRUNPVkVSQUJMRV9FUlJPUiA9PT0gJHR5cGUgfHwgRV9VU0VSX0VSUk9SID09PSAkdHlwZSkgewogICAgICAgICAgICAgICAgLy8gQ2xvbmVyIG5ldmVyIGRpZXMKICAgICAgICAgICAgICAgIHRocm93IG5ldyBcRXJyb3JFeGNlcHRpb24oJG1zZywgMCwgJHR5cGUsICRmaWxlLCAkbGluZSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgkdGhpcy0+cHJldkVycm9ySGFuZGxlcikgewogICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxfdXNlcl9mdW5jKCR0aGlzLT5wcmV2RXJyb3JIYW5kbGVyLCAkdHlwZSwgJG1zZywgJGZpbGUsICRsaW5lLCAkY29udGV4dCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9KTsKICAgICAgICAkdGhpcy0+ZmlsdGVyID0gJGZpbHRlcjsKCiAgICAgICAgaWYgKCRnYyA9IGdjX2VuYWJsZWQoKSkgewogICAgICAgICAgICBnY19kaXNhYmxlKCk7CiAgICAgICAgfQogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0YSgkdGhpcy0+ZG9DbG9uZSgkdmFyKSk7CiAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgaWYgKCRnYykgewogICAgICAgICAgICAgICAgZ2NfZW5hYmxlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmVzdG9yZV9lcnJvcl9oYW5kbGVyKCk7CiAgICAgICAgICAgICR0aGlzLT5wcmV2RXJyb3JIYW5kbGVyID0gbnVsbDsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBFZmZlY3RpdmVseSBjbG9uZXMgdGhlIFBIUCB2YXJpYWJsZS4KICAgICAqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhciBBbnkgUEhQIHZhcmlhYmxlCiAgICAgKgogICAgICogQHJldHVybiBhcnJheSBUaGUgY2xvbmVkIHZhcmlhYmxlIHJlcHJlc2VudGVkIGluIGFuIGFycmF5CiAgICAgKi8KICAgIGFic3RyYWN0IHByb3RlY3RlZCBmdW5jdGlvbiBkb0Nsb25lKCR2YXIpOwoKICAgIC8qKgogICAgICogQ2FzdHMgYW4gb2JqZWN0IHRvIGFuIGFycmF5IHJlcHJlc2VudGF0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSBTdHViICRzdHViICAgICBUaGUgU3R1YiBmb3IgdGhlIGNhc3RlZCBvYmplY3QKICAgICAqIEBwYXJhbSBib29sICRpc05lc3RlZCBUcnVlIGlmIHRoZSBvYmplY3QgaXMgbmVzdGVkIGluIHRoZSBkdW1wZWQgc3RydWN0dXJlCiAgICAgKgogICAgICogQHJldHVybiBhcnJheSBUaGUgb2JqZWN0IGNhc3RlZCBhcyBhcnJheQogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY2FzdE9iamVjdChTdHViICRzdHViLCAkaXNOZXN0ZWQpCiAgICB7CiAgICAgICAgJG9iaiA9ICRzdHViLT52YWx1ZTsKICAgICAgICAkY2xhc3MgPSAkc3R1Yi0+Y2xhc3M7CgogICAgICAgIGlmIChpc3NldCgkY2xhc3NbMTVdKSAmJiAiXDAiID09PSAkY2xhc3NbMTVdICYmIDAgPT09IHN0cnBvcygkY2xhc3MsICJjbGFzc0Bhbm9ueW1vdXNceDAwIikpIHsKICAgICAgICAgICAgJHN0dWItPmNsYXNzID0gZ2V0X3BhcmVudF9jbGFzcygkY2xhc3MpLidAYW5vbnltb3VzJzsKICAgICAgICB9CiAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5jbGFzc0luZm9bJGNsYXNzXSkpIHsKICAgICAgICAgICAgbGlzdCgkaSwgJHBhcmVudHMsICRoYXNEZWJ1Z0luZm8pID0gJHRoaXMtPmNsYXNzSW5mb1skY2xhc3NdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRpID0gMjsKICAgICAgICAgICAgJHBhcmVudHMgPSBhcnJheShzdHJ0b2xvd2VyKCRjbGFzcykpOwogICAgICAgICAgICAkaGFzRGVidWdJbmZvID0gbWV0aG9kX2V4aXN0cygkY2xhc3MsICdfX2RlYnVnSW5mbycpOwoKICAgICAgICAgICAgZm9yZWFjaCAoY2xhc3NfcGFyZW50cygkY2xhc3MpIGFzICRwKSB7CiAgICAgICAgICAgICAgICAkcGFyZW50c1tdID0gc3RydG9sb3dlcigkcCk7CiAgICAgICAgICAgICAgICArKyRpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGZvcmVhY2ggKGNsYXNzX2ltcGxlbWVudHMoJGNsYXNzKSBhcyAkcCkgewogICAgICAgICAgICAgICAgJHBhcmVudHNbXSA9IHN0cnRvbG93ZXIoJHApOwogICAgICAgICAgICAgICAgKyskaTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkcGFyZW50c1tdID0gJyonOwoKICAgICAgICAgICAgJHRoaXMtPmNsYXNzSW5mb1skY2xhc3NdID0gYXJyYXkoJGksICRwYXJlbnRzLCAkaGFzRGVidWdJbmZvKTsKICAgICAgICB9CgogICAgICAgICRhID0gQ2FzdGVyOjpjYXN0T2JqZWN0KCRvYmosICRjbGFzcywgJGhhc0RlYnVnSW5mbyk7CgogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHdoaWxlICgkaS0tKSB7CiAgICAgICAgICAgICAgICBpZiAoIWVtcHR5KCR0aGlzLT5jYXN0ZXJzWyRwID0gJHBhcmVudHNbJGldXSkpIHsKICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkdGhpcy0+Y2FzdGVyc1skcF0gYXMgJGNhbGxiYWNrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRhID0gJGNhbGxiYWNrKCRvYmosICRhLCAkc3R1YiwgJGlzTmVzdGVkLCAkdGhpcy0+ZmlsdGVyKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChcRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgICRhID0gYXJyYXkoKFN0dWI6OlRZUEVfT0JKRUNUID09PSAkc3R1Yi0+dHlwZSA/IENhc3Rlcjo6UFJFRklYX1ZJUlRVQUwgOiAnJykuJ+KaoCcgPT4gbmV3IFRocm93aW5nQ2FzdGVyRXhjZXB0aW9uKCRlKSkgKyAkYTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkYTsKICAgIH0KCiAgICAvKioKICAgICAqIENhc3RzIGEgcmVzb3VyY2UgdG8gYW4gYXJyYXkgcmVwcmVzZW50YXRpb24uCiAgICAgKgogICAgICogQHBhcmFtIFN0dWIgJHN0dWIgICAgIFRoZSBTdHViIGZvciB0aGUgY2FzdGVkIHJlc291cmNlCiAgICAgKiBAcGFyYW0gYm9vbCAkaXNOZXN0ZWQgVHJ1ZSBpZiB0aGUgb2JqZWN0IGlzIG5lc3RlZCBpbiB0aGUgZHVtcGVkIHN0cnVjdHVyZQogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkgVGhlIHJlc291cmNlIGNhc3RlZCBhcyBhcnJheQogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY2FzdFJlc291cmNlKFN0dWIgJHN0dWIsICRpc05lc3RlZCkKICAgIHsKICAgICAgICAkYSA9IGFycmF5KCk7CiAgICAgICAgJHJlcyA9ICRzdHViLT52YWx1ZTsKICAgICAgICAkdHlwZSA9ICRzdHViLT5jbGFzczsKCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgaWYgKCFlbXB0eSgkdGhpcy0+Y2FzdGVyc1snOicuJHR5cGVdKSkgewogICAgICAgICAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmNhc3RlcnNbJzonLiR0eXBlXSBhcyAkY2FsbGJhY2spIHsKICAgICAgICAgICAgICAgICAgICAkYSA9ICRjYWxsYmFjaygkcmVzLCAkYSwgJHN0dWIsICRpc05lc3RlZCwgJHRoaXMtPmZpbHRlcik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChcRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgICRhID0gYXJyYXkoKFN0dWI6OlRZUEVfT0JKRUNUID09PSAkc3R1Yi0+dHlwZSA/IENhc3Rlcjo6UFJFRklYX1ZJUlRVQUwgOiAnJykuJ+KaoCcgPT4gbmV3IFRocm93aW5nQ2FzdGVyRXhjZXB0aW9uKCRlKSkgKyAkYTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkYTsKICAgIH0KfQo=AppDevTools/query/vendor/symfony/var-dumper/Cloner/ClonerInterface.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2xvbmVyOwoKLyoqCiAqIEBhdXRob3IgTmljb2xhcyBHcmVrYXMgPHBAdGNod29yay5jb20+CiAqLwppbnRlcmZhY2UgQ2xvbmVySW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogQ2xvbmVzIGEgUEhQIHZhcmlhYmxlLgogICAgICoKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFyIEFueSBQSFAgdmFyaWFibGUKICAgICAqCiAgICAgKiBAcmV0dXJuIERhdGEgVGhlIGNsb25lZCB2YXJpYWJsZSByZXByZXNlbnRlZCBieSBhIERhdGEgb2JqZWN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjbG9uZVZhcigkdmFyKTsKfQo=AppDevTools/query/vendor/symfony/var-dumper/Cloner/Cursor.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2xvbmVyOwoKLyoqCiAqIFJlcHJlc2VudHMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYSBkdW1wZXIgd2hpbGUgZHVtcGluZy4KICoKICogQGF1dGhvciBOaWNvbGFzIEdyZWthcyA8cEB0Y2h3b3JrLmNvbT4KICovCmNsYXNzIEN1cnNvcgp7CiAgICBjb25zdCBIQVNIX0lOREVYRUQgPSBTdHViOjpBUlJBWV9JTkRFWEVEOwogICAgY29uc3QgSEFTSF9BU1NPQyA9IFN0dWI6OkFSUkFZX0FTU09DOwogICAgY29uc3QgSEFTSF9PQkpFQ1QgPSBTdHViOjpUWVBFX09CSkVDVDsKICAgIGNvbnN0IEhBU0hfUkVTT1VSQ0UgPSBTdHViOjpUWVBFX1JFU09VUkNFOwoKICAgIHB1YmxpYyAkZGVwdGggPSAwOwogICAgcHVibGljICRyZWZJbmRleCA9IDA7CiAgICBwdWJsaWMgJHNvZnRSZWZUbyA9IDA7CiAgICBwdWJsaWMgJHNvZnRSZWZDb3VudCA9IDA7CiAgICBwdWJsaWMgJHNvZnRSZWZIYW5kbGUgPSAwOwogICAgcHVibGljICRoYXJkUmVmVG8gPSAwOwogICAgcHVibGljICRoYXJkUmVmQ291bnQgPSAwOwogICAgcHVibGljICRoYXJkUmVmSGFuZGxlID0gMDsKICAgIHB1YmxpYyAkaGFzaFR5cGU7CiAgICBwdWJsaWMgJGhhc2hLZXk7CiAgICBwdWJsaWMgJGhhc2hLZXlJc0JpbmFyeTsKICAgIHB1YmxpYyAkaGFzaEluZGV4ID0gMDsKICAgIHB1YmxpYyAkaGFzaExlbmd0aCA9IDA7CiAgICBwdWJsaWMgJGhhc2hDdXQgPSAwOwogICAgcHVibGljICRzdG9wID0gZmFsc2U7CiAgICBwdWJsaWMgJGF0dHIgPSBhcnJheSgpOwogICAgcHVibGljICRza2lwQ2hpbGRyZW4gPSBmYWxzZTsKfQo=AppDevTools/query/vendor/symfony/var-dumper/Cloner/Data.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2xvbmVyOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDYXN0ZXJcQ2FzdGVyOwoKLyoqCiAqIEBhdXRob3IgTmljb2xhcyBHcmVrYXMgPHBAdGNod29yay5jb20+CiAqLwpjbGFzcyBEYXRhIGltcGxlbWVudHMgXEFycmF5QWNjZXNzLCBcQ291bnRhYmxlLCBcSXRlcmF0b3JBZ2dyZWdhdGUKewogICAgcHJpdmF0ZSAkZGF0YTsKICAgIHByaXZhdGUgJHBvc2l0aW9uID0gMDsKICAgIHByaXZhdGUgJGtleSA9IDA7CiAgICBwcml2YXRlICRtYXhEZXB0aCA9IDIwOwogICAgcHJpdmF0ZSAkbWF4SXRlbXNQZXJEZXB0aCA9IC0xOwogICAgcHJpdmF0ZSAkdXNlUmVmSGFuZGxlcyA9IC0xOwoKICAgIC8qKgogICAgICogQHBhcmFtIGFycmF5ICRkYXRhIEFuIGFycmF5IGFzIHJldHVybmVkIGJ5IENsb25lckludGVyZmFjZTo6Y2xvbmVWYXIoKQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoYXJyYXkgJGRhdGEpCiAgICB7CiAgICAgICAgJHRoaXMtPmRhdGEgPSAkZGF0YTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gc3RyaW5nIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpCiAgICB7CiAgICAgICAgJGl0ZW0gPSAkdGhpcy0+ZGF0YVskdGhpcy0+cG9zaXRpb25dWyR0aGlzLT5rZXldOwoKICAgICAgICBpZiAoJGl0ZW0gaW5zdGFuY2VvZiBTdHViICYmIFN0dWI6OlRZUEVfUkVGID09PSAkaXRlbS0+dHlwZSAmJiAhJGl0ZW0tPnBvc2l0aW9uKSB7CiAgICAgICAgICAgICRpdGVtID0gJGl0ZW0tPnZhbHVlOwogICAgICAgIH0KICAgICAgICBpZiAoISRpdGVtIGluc3RhbmNlb2YgU3R1YikgewogICAgICAgICAgICByZXR1cm4gZ2V0dHlwZSgkaXRlbSk7CiAgICAgICAgfQogICAgICAgIGlmIChTdHViOjpUWVBFX1NUUklORyA9PT0gJGl0ZW0tPnR5cGUpIHsKICAgICAgICAgICAgcmV0dXJuICdzdHJpbmcnOwogICAgICAgIH0KICAgICAgICBpZiAoU3R1Yjo6VFlQRV9BUlJBWSA9PT0gJGl0ZW0tPnR5cGUpIHsKICAgICAgICAgICAgcmV0dXJuICdhcnJheSc7CiAgICAgICAgfQogICAgICAgIGlmIChTdHViOjpUWVBFX09CSkVDVCA9PT0gJGl0ZW0tPnR5cGUpIHsKICAgICAgICAgICAgcmV0dXJuICRpdGVtLT5jbGFzczsKICAgICAgICB9CiAgICAgICAgaWYgKFN0dWI6OlRZUEVfUkVTT1VSQ0UgPT09ICRpdGVtLT50eXBlKSB7CiAgICAgICAgICAgIHJldHVybiAkaXRlbS0+Y2xhc3MuJyByZXNvdXJjZSc7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIGJvb2wgJHJlY3Vyc2l2ZSBXaGV0aGVyIHZhbHVlcyBzaG91bGQgYmUgcmVzb2x2ZWQgcmVjdXJzaXZlbHkgb3Igbm90CiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmd8aW50fGZsb2F0fGJvb2x8YXJyYXl8bnVsbHxEYXRhW10gQSBuYXRpdmUgcmVwcmVzZW50YXRpb24gb2YgdGhlIG9yaWdpbmFsIHZhbHVlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRWYWx1ZSgkcmVjdXJzaXZlID0gZmFsc2UpCiAgICB7CiAgICAgICAgJGl0ZW0gPSAkdGhpcy0+ZGF0YVskdGhpcy0+cG9zaXRpb25dWyR0aGlzLT5rZXldOwoKICAgICAgICBpZiAoJGl0ZW0gaW5zdGFuY2VvZiBTdHViICYmIFN0dWI6OlRZUEVfUkVGID09PSAkaXRlbS0+dHlwZSAmJiAhJGl0ZW0tPnBvc2l0aW9uKSB7CiAgICAgICAgICAgICRpdGVtID0gJGl0ZW0tPnZhbHVlOwogICAgICAgIH0KICAgICAgICBpZiAoISgkaXRlbSA9ICR0aGlzLT5nZXRTdHViKCRpdGVtKSkgaW5zdGFuY2VvZiBTdHViKSB7CiAgICAgICAgICAgIHJldHVybiAkaXRlbTsKICAgICAgICB9CiAgICAgICAgaWYgKFN0dWI6OlRZUEVfU1RSSU5HID09PSAkaXRlbS0+dHlwZSkgewogICAgICAgICAgICByZXR1cm4gJGl0ZW0tPnZhbHVlOwogICAgICAgIH0KCiAgICAgICAgJGNoaWxkcmVuID0gJGl0ZW0tPnBvc2l0aW9uID8gJHRoaXMtPmRhdGFbJGl0ZW0tPnBvc2l0aW9uXSA6IGFycmF5KCk7CgogICAgICAgIGZvcmVhY2ggKCRjaGlsZHJlbiBhcyAkayA9PiAkdikgewogICAgICAgICAgICBpZiAoJHJlY3Vyc2l2ZSAmJiAhKCR2ID0gJHRoaXMtPmdldFN0dWIoJHYpKSBpbnN0YW5jZW9mIFN0dWIpIHsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRjaGlsZHJlblska10gPSBjbG9uZSAkdGhpczsKICAgICAgICAgICAgJGNoaWxkcmVuWyRrXS0+a2V5ID0gJGs7CiAgICAgICAgICAgICRjaGlsZHJlblska10tPnBvc2l0aW9uID0gJGl0ZW0tPnBvc2l0aW9uOwoKICAgICAgICAgICAgaWYgKCRyZWN1cnNpdmUpIHsKICAgICAgICAgICAgICAgIGlmIChTdHViOjpUWVBFX1JFRiA9PT0gJHYtPnR5cGUgJiYgKCR2ID0gJHRoaXMtPmdldFN0dWIoJHYtPnZhbHVlKSkgaW5zdGFuY2VvZiBTdHViKSB7CiAgICAgICAgICAgICAgICAgICAgJHJlY3Vyc2l2ZSA9IChhcnJheSkgJHJlY3Vyc2l2ZTsKICAgICAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJHJlY3Vyc2l2ZVskdi0+cG9zaXRpb25dKSkgewogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJHJlY3Vyc2l2ZVskdi0+cG9zaXRpb25dID0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRjaGlsZHJlblska10gPSAkY2hpbGRyZW5bJGtdLT5nZXRWYWx1ZSgkcmVjdXJzaXZlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRjaGlsZHJlbjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gY291bnQoKQogICAgewogICAgICAgIHJldHVybiBjb3VudCgkdGhpcy0+Z2V0VmFsdWUoKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEl0ZXJhdG9yKCkKICAgIHsKICAgICAgICBpZiAoIWlzX2FycmF5KCR2YWx1ZSA9ICR0aGlzLT5nZXRWYWx1ZSgpKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKHNwcmludGYoJyVzIG9iamVjdCBob2xkcyBub24taXRlcmFibGUgdHlwZSAiJXMiLicsIHNlbGY6OmNsYXNzLCBnZXR0eXBlKCR2YWx1ZSkpKTsKICAgICAgICB9CgogICAgICAgIGZvcmVhY2ggKCR2YWx1ZSBhcyAkayA9PiAkdikgewogICAgICAgICAgICB5aWVsZCAkayA9PiAkdjsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fZ2V0KCRrZXkpCiAgICB7CiAgICAgICAgaWYgKG51bGwgIT09ICRkYXRhID0gJHRoaXMtPnNlZWsoJGtleSkpIHsKICAgICAgICAgICAgJGl0ZW0gPSAkdGhpcy0+Z2V0U3R1YigkZGF0YS0+ZGF0YVskZGF0YS0+cG9zaXRpb25dWyRkYXRhLT5rZXldKTsKCiAgICAgICAgICAgIHJldHVybiAkaXRlbSBpbnN0YW5jZW9mIFN0dWIgfHwgYXJyYXkoKSA9PT0gJGl0ZW0gPyAkZGF0YSA6ICRpdGVtOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX19pc3NldCgka2V5KQogICAgewogICAgICAgIHJldHVybiBudWxsICE9PSAkdGhpcy0+c2Vlaygka2V5KTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0RXhpc3RzKCRrZXkpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5fX2lzc2V0KCRrZXkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRHZXQoJGtleSkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPl9fZ2V0KCRrZXkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRTZXQoJGtleSwgJHZhbHVlKQogICAgewogICAgICAgIHRocm93IG5ldyBcQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbihzZWxmOjpjbGFzcy4nIG9iamVjdHMgYXJlIGltbXV0YWJsZS4nKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0VW5zZXQoJGtleSkKICAgIHsKICAgICAgICB0aHJvdyBuZXcgXEJhZE1ldGhvZENhbGxFeGNlcHRpb24oc2VsZjo6Y2xhc3MuJyBvYmplY3RzIGFyZSBpbW11dGFibGUuJyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKQogICAgewogICAgICAgICR2YWx1ZSA9ICR0aGlzLT5nZXRWYWx1ZSgpOwoKICAgICAgICBpZiAoIWlzX2FycmF5KCR2YWx1ZSkpIHsKICAgICAgICAgICAgcmV0dXJuIChzdHJpbmcpICR2YWx1ZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBzcHJpbnRmKCclcyAoY291bnQ9JWQpJywgJHRoaXMtPmdldFR5cGUoKSwgY291bnQoJHZhbHVlKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIGEgZGVwdGggbGltaXRlZCBjbG9uZSBvZiAkdGhpcy4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRtYXhEZXB0aCBUaGUgbWF4IGR1bXBlZCBkZXB0aCBsZXZlbAogICAgICoKICAgICAqIEByZXR1cm4gc2VsZiBBIGNsb25lIG9mICR0aGlzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aXRoTWF4RGVwdGgoJG1heERlcHRoKQogICAgewogICAgICAgICRkYXRhID0gY2xvbmUgJHRoaXM7CiAgICAgICAgJGRhdGEtPm1heERlcHRoID0gKGludCkgJG1heERlcHRoOwoKICAgICAgICByZXR1cm4gJGRhdGE7CiAgICB9CgogICAgLyoqCiAgICAgKiBMaW1pdHMgdGhlIG51bWJlciBvZiBlbGVtZW50cyBwZXIgZGVwdGggbGV2ZWwuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkbWF4SXRlbXNQZXJEZXB0aCBUaGUgbWF4IG51bWJlciBvZiBpdGVtcyBkdW1wZWQgcGVyIGRlcHRoIGxldmVsCiAgICAgKgogICAgICogQHJldHVybiBzZWxmIEEgY2xvbmUgb2YgJHRoaXMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdpdGhNYXhJdGVtc1BlckRlcHRoKCRtYXhJdGVtc1BlckRlcHRoKQogICAgewogICAgICAgICRkYXRhID0gY2xvbmUgJHRoaXM7CiAgICAgICAgJGRhdGEtPm1heEl0ZW1zUGVyRGVwdGggPSAoaW50KSAkbWF4SXRlbXNQZXJEZXB0aDsKCiAgICAgICAgcmV0dXJuICRkYXRhOwogICAgfQoKICAgIC8qKgogICAgICogRW5hYmxlcy9kaXNhYmxlcyBvYmplY3RzJyBpZGVudGlmaWVycyB0cmFja2luZy4KICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbCAkdXNlUmVmSGFuZGxlcyBGYWxzZSB0byBoaWRlIGdsb2JhbCByZWYuIGhhbmRsZXMKICAgICAqCiAgICAgKiBAcmV0dXJuIHNlbGYgQSBjbG9uZSBvZiAkdGhpcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2l0aFJlZkhhbmRsZXMoJHVzZVJlZkhhbmRsZXMpCiAgICB7CiAgICAgICAgJGRhdGEgPSBjbG9uZSAkdGhpczsKICAgICAgICAkZGF0YS0+dXNlUmVmSGFuZGxlcyA9ICR1c2VSZWZIYW5kbGVzID8gLTEgOiAwOwoKICAgICAgICByZXR1cm4gJGRhdGE7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZWVrcyB0byBhIHNwZWNpZmljIGtleSBpbiBuZXN0ZWQgZGF0YSBzdHJ1Y3R1cmVzLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmd8aW50ICRrZXkgVGhlIGtleSB0byBzZWVrIHRvCiAgICAgKgogICAgICogQHJldHVybiBzZWxmfG51bGwgQSBjbG9uZSBvZiAkdGhpcyBvciBudWxsIGlmIHRoZSBrZXkgaXMgbm90IHNldAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2Vlaygka2V5KQogICAgewogICAgICAgICRpdGVtID0gJHRoaXMtPmRhdGFbJHRoaXMtPnBvc2l0aW9uXVskdGhpcy0+a2V5XTsKCiAgICAgICAgaWYgKCRpdGVtIGluc3RhbmNlb2YgU3R1YiAmJiBTdHViOjpUWVBFX1JFRiA9PT0gJGl0ZW0tPnR5cGUgJiYgISRpdGVtLT5wb3NpdGlvbikgewogICAgICAgICAgICAkaXRlbSA9ICRpdGVtLT52YWx1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKCEoJGl0ZW0gPSAkdGhpcy0+Z2V0U3R1YigkaXRlbSkpIGluc3RhbmNlb2YgU3R1YiB8fCAhJGl0ZW0tPnBvc2l0aW9uKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgJGtleXMgPSBhcnJheSgka2V5KTsKCiAgICAgICAgc3dpdGNoICgkaXRlbS0+dHlwZSkgewogICAgICAgICAgICBjYXNlIFN0dWI6OlRZUEVfT0JKRUNUOgogICAgICAgICAgICAgICAgJGtleXNbXSA9IENhc3Rlcjo6UFJFRklYX0RZTkFNSUMuJGtleTsKICAgICAgICAgICAgICAgICRrZXlzW10gPSBDYXN0ZXI6OlBSRUZJWF9QUk9URUNURUQuJGtleTsKICAgICAgICAgICAgICAgICRrZXlzW10gPSBDYXN0ZXI6OlBSRUZJWF9WSVJUVUFMLiRrZXk7CiAgICAgICAgICAgICAgICAka2V5c1tdID0gIlwwJGl0ZW0tPmNsYXNzXDAka2V5IjsKICAgICAgICAgICAgICAgIC8vIG5vIGJyZWFrCiAgICAgICAgICAgIGNhc2UgU3R1Yjo6VFlQRV9BUlJBWToKICAgICAgICAgICAgY2FzZSBTdHViOjpUWVBFX1JFU09VUkNFOgogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAkZGF0YSA9IG51bGw7CiAgICAgICAgJGNoaWxkcmVuID0gJHRoaXMtPmRhdGFbJGl0ZW0tPnBvc2l0aW9uXTsKCiAgICAgICAgZm9yZWFjaCAoJGtleXMgYXMgJGtleSkgewogICAgICAgICAgICBpZiAoaXNzZXQoJGNoaWxkcmVuWyRrZXldKSB8fCBhcnJheV9rZXlfZXhpc3RzKCRrZXksICRjaGlsZHJlbikpIHsKICAgICAgICAgICAgICAgICRkYXRhID0gY2xvbmUgJHRoaXM7CiAgICAgICAgICAgICAgICAkZGF0YS0+a2V5ID0gJGtleTsKICAgICAgICAgICAgICAgICRkYXRhLT5wb3NpdGlvbiA9ICRpdGVtLT5wb3NpdGlvbjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGRhdGE7CiAgICB9CgogICAgLyoqCiAgICAgKiBEdW1wcyBkYXRhIHdpdGggYSBEdW1wZXJJbnRlcmZhY2UgZHVtcGVyLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZHVtcChEdW1wZXJJbnRlcmZhY2UgJGR1bXBlcikKICAgIHsKICAgICAgICAkcmVmcyA9IGFycmF5KDApOwogICAgICAgICR0aGlzLT5kdW1wSXRlbSgkZHVtcGVyLCBuZXcgQ3Vyc29yKCksICRyZWZzLCAkdGhpcy0+ZGF0YVskdGhpcy0+cG9zaXRpb25dWyR0aGlzLT5rZXldKTsKICAgIH0KCiAgICAvKioKICAgICAqIERlcHRoLWZpcnN0IGR1bXBpbmcgb2YgaXRlbXMuCiAgICAgKgogICAgICogQHBhcmFtIER1bXBlckludGVyZmFjZSAkZHVtcGVyIFRoZSBkdW1wZXIgYmVpbmcgdXNlZCBmb3IgZHVtcGluZwogICAgICogQHBhcmFtIEN1cnNvciAgICAgICAgICAkY3Vyc29yIEEgY3Vyc29yIHVzZWQgZm9yIHRyYWNraW5nIGR1bXBlciBzdGF0ZSBwb3NpdGlvbgogICAgICogQHBhcmFtIGFycmF5ICAgICAgICAgICAmJHJlZnMgIEEgbWFwIG9mIGFsbCByZWZlcmVuY2VzIGRpc2NvdmVyZWQgd2hpbGUgZHVtcGluZwogICAgICogQHBhcmFtIG1peGVkICAgICAgICAgICAkaXRlbSAgIEEgU3R1YiBvYmplY3Qgb3IgdGhlIG9yaWdpbmFsIHZhbHVlIGJlaW5nIGR1bXBlZAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGR1bXBJdGVtKCRkdW1wZXIsICRjdXJzb3IsICYkcmVmcywgJGl0ZW0pCiAgICB7CiAgICAgICAgJGN1cnNvci0+cmVmSW5kZXggPSAwOwogICAgICAgICRjdXJzb3ItPnNvZnRSZWZUbyA9ICRjdXJzb3ItPnNvZnRSZWZIYW5kbGUgPSAkY3Vyc29yLT5zb2Z0UmVmQ291bnQgPSAwOwogICAgICAgICRjdXJzb3ItPmhhcmRSZWZUbyA9ICRjdXJzb3ItPmhhcmRSZWZIYW5kbGUgPSAkY3Vyc29yLT5oYXJkUmVmQ291bnQgPSAwOwogICAgICAgICRmaXJzdFNlZW4gPSB0cnVlOwoKICAgICAgICBpZiAoISRpdGVtIGluc3RhbmNlb2YgU3R1YikgewogICAgICAgICAgICAkY3Vyc29yLT5hdHRyID0gYXJyYXkoKTsKICAgICAgICAgICAgJHR5cGUgPSBcZ2V0dHlwZSgkaXRlbSk7CiAgICAgICAgICAgIGlmICgkaXRlbSAmJiAnYXJyYXknID09PSAkdHlwZSkgewogICAgICAgICAgICAgICAgJGl0ZW0gPSAkdGhpcy0+Z2V0U3R1YigkaXRlbSk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2VpZiAoU3R1Yjo6VFlQRV9SRUYgPT09ICRpdGVtLT50eXBlKSB7CiAgICAgICAgICAgIGlmICgkaXRlbS0+aGFuZGxlKSB7CiAgICAgICAgICAgICAgICBpZiAoIWlzc2V0KCRyZWZzWyRyID0gJGl0ZW0tPmhhbmRsZSAtIChQSFBfSU5UX01BWCA+PiAxKV0pKSB7CiAgICAgICAgICAgICAgICAgICAgJGN1cnNvci0+cmVmSW5kZXggPSAkcmVmc1skcl0gPSAkY3Vyc29yLT5yZWZJbmRleCA/OiArKyRyZWZzWzBdOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkZmlyc3RTZWVuID0gZmFsc2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkY3Vyc29yLT5oYXJkUmVmVG8gPSAkcmVmc1skcl07CiAgICAgICAgICAgICAgICAkY3Vyc29yLT5oYXJkUmVmSGFuZGxlID0gJHRoaXMtPnVzZVJlZkhhbmRsZXMgJiAkaXRlbS0+aGFuZGxlOwogICAgICAgICAgICAgICAgJGN1cnNvci0+aGFyZFJlZkNvdW50ID0gJGl0ZW0tPnJlZkNvdW50OwogICAgICAgICAgICB9CiAgICAgICAgICAgICRjdXJzb3ItPmF0dHIgPSAkaXRlbS0+YXR0cjsKICAgICAgICAgICAgJHR5cGUgPSAkaXRlbS0+Y2xhc3MgPzogZ2V0dHlwZSgkaXRlbS0+dmFsdWUpOwogICAgICAgICAgICAkaXRlbSA9ICR0aGlzLT5nZXRTdHViKCRpdGVtLT52YWx1ZSk7CiAgICAgICAgfQogICAgICAgIGlmICgkaXRlbSBpbnN0YW5jZW9mIFN0dWIpIHsKICAgICAgICAgICAgaWYgKCRpdGVtLT5yZWZDb3VudCkgewogICAgICAgICAgICAgICAgaWYgKCFpc3NldCgkcmVmc1skciA9ICRpdGVtLT5oYW5kbGVdKSkgewogICAgICAgICAgICAgICAgICAgICRjdXJzb3ItPnJlZkluZGV4ID0gJHJlZnNbJHJdID0gJGN1cnNvci0+cmVmSW5kZXggPzogKyskcmVmc1swXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJGZpcnN0U2VlbiA9IGZhbHNlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJGN1cnNvci0+c29mdFJlZlRvID0gJHJlZnNbJHJdOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRjdXJzb3ItPnNvZnRSZWZIYW5kbGUgPSAkdGhpcy0+dXNlUmVmSGFuZGxlcyAmICRpdGVtLT5oYW5kbGU7CiAgICAgICAgICAgICRjdXJzb3ItPnNvZnRSZWZDb3VudCA9ICRpdGVtLT5yZWZDb3VudDsKICAgICAgICAgICAgJGN1cnNvci0+YXR0ciA9ICRpdGVtLT5hdHRyOwogICAgICAgICAgICAkY3V0ID0gJGl0ZW0tPmN1dDsKCiAgICAgICAgICAgIGlmICgkaXRlbS0+cG9zaXRpb24gJiYgJGZpcnN0U2VlbikgewogICAgICAgICAgICAgICAgJGNoaWxkcmVuID0gJHRoaXMtPmRhdGFbJGl0ZW0tPnBvc2l0aW9uXTsKCiAgICAgICAgICAgICAgICBpZiAoJGN1cnNvci0+c3RvcCkgewogICAgICAgICAgICAgICAgICAgIGlmICgkY3V0ID49IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGN1dCArPSBjb3VudCgkY2hpbGRyZW4pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAkY2hpbGRyZW4gPSBhcnJheSgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJGNoaWxkcmVuID0gYXJyYXkoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBzd2l0Y2ggKCRpdGVtLT50eXBlKSB7CiAgICAgICAgICAgICAgICBjYXNlIFN0dWI6OlRZUEVfU1RSSU5HOgogICAgICAgICAgICAgICAgICAgICRkdW1wZXItPmR1bXBTdHJpbmcoJGN1cnNvciwgJGl0ZW0tPnZhbHVlLCBTdHViOjpTVFJJTkdfQklOQVJZID09PSAkaXRlbS0+Y2xhc3MsICRjdXQpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgU3R1Yjo6VFlQRV9BUlJBWToKICAgICAgICAgICAgICAgICAgICAkaXRlbSA9IGNsb25lICRpdGVtOwogICAgICAgICAgICAgICAgICAgICRpdGVtLT50eXBlID0gJGl0ZW0tPmNsYXNzOwogICAgICAgICAgICAgICAgICAgICRpdGVtLT5jbGFzcyA9ICRpdGVtLT52YWx1ZTsKICAgICAgICAgICAgICAgICAgICAvLyBubyBicmVhawogICAgICAgICAgICAgICAgY2FzZSBTdHViOjpUWVBFX09CSkVDVDoKICAgICAgICAgICAgICAgIGNhc2UgU3R1Yjo6VFlQRV9SRVNPVVJDRToKICAgICAgICAgICAgICAgICAgICAkd2l0aENoaWxkcmVuID0gJGNoaWxkcmVuICYmICRjdXJzb3ItPmRlcHRoICE9PSAkdGhpcy0+bWF4RGVwdGggJiYgJHRoaXMtPm1heEl0ZW1zUGVyRGVwdGg7CiAgICAgICAgICAgICAgICAgICAgJGR1bXBlci0+ZW50ZXJIYXNoKCRjdXJzb3IsICRpdGVtLT50eXBlLCAkaXRlbS0+Y2xhc3MsICR3aXRoQ2hpbGRyZW4pOwogICAgICAgICAgICAgICAgICAgIGlmICgkd2l0aENoaWxkcmVuKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkY3Vyc29yLT5za2lwQ2hpbGRyZW4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR3aXRoQ2hpbGRyZW4gPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjdXQgPSAtMTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRjdXQgPSAkdGhpcy0+ZHVtcENoaWxkcmVuKCRkdW1wZXIsICRjdXJzb3IsICRyZWZzLCAkY2hpbGRyZW4sICRjdXQsICRpdGVtLT50eXBlLCBudWxsICE9PSAkaXRlbS0+Y2xhc3MpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRjaGlsZHJlbiAmJiAwIDw9ICRjdXQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGN1dCArPSBjb3VudCgkY2hpbGRyZW4pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAkY3Vyc29yLT5za2lwQ2hpbGRyZW4gPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAkZHVtcGVyLT5sZWF2ZUhhc2goJGN1cnNvciwgJGl0ZW0tPnR5cGUsICRpdGVtLT5jbGFzcywgJHdpdGhDaGlsZHJlbiwgJGN1dCk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oc3ByaW50ZignVW5leHBlY3RlZCBTdHViIHR5cGU6ICVzJywgJGl0ZW0tPnR5cGUpKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZWlmICgnYXJyYXknID09PSAkdHlwZSkgewogICAgICAgICAgICAkZHVtcGVyLT5lbnRlckhhc2goJGN1cnNvciwgQ3Vyc29yOjpIQVNIX0lOREVYRUQsIDAsIGZhbHNlKTsKICAgICAgICAgICAgJGR1bXBlci0+bGVhdmVIYXNoKCRjdXJzb3IsIEN1cnNvcjo6SEFTSF9JTkRFWEVELCAwLCBmYWxzZSwgMCk7CiAgICAgICAgfSBlbHNlaWYgKCdzdHJpbmcnID09PSAkdHlwZSkgewogICAgICAgICAgICAkZHVtcGVyLT5kdW1wU3RyaW5nKCRjdXJzb3IsICRpdGVtLCBmYWxzZSwgMCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGR1bXBlci0+ZHVtcFNjYWxhcigkY3Vyc29yLCAkdHlwZSwgJGl0ZW0pOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIER1bXBzIGNoaWxkcmVuIG9mIGhhc2ggc3RydWN0dXJlcy4KICAgICAqCiAgICAgKiBAcGFyYW0gRHVtcGVySW50ZXJmYWNlICRkdW1wZXIKICAgICAqIEBwYXJhbSBDdXJzb3IgICAgICAgICAgJHBhcmVudEN1cnNvciBUaGUgY3Vyc29yIG9mIHRoZSBwYXJlbnQgaGFzaAogICAgICogQHBhcmFtIGFycmF5ICAgICAgICAgICAmJHJlZnMgICAgICAgIEEgbWFwIG9mIGFsbCByZWZlcmVuY2VzIGRpc2NvdmVyZWQgd2hpbGUgZHVtcGluZwogICAgICogQHBhcmFtIGFycmF5ICAgICAgICAgICAkY2hpbGRyZW4gICAgIFRoZSBjaGlsZHJlbiB0byBkdW1wCiAgICAgKiBAcGFyYW0gaW50ICAgICAgICAgICAgICRoYXNoQ3V0ICAgICAgVGhlIG51bWJlciBvZiBpdGVtcyByZW1vdmVkIGZyb20gdGhlIG9yaWdpbmFsIGhhc2gKICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAgICAgJGhhc2hUeXBlICAgICBBIEN1cnNvcjo6SEFTSF8qIGNvbnN0CiAgICAgKiBAcGFyYW0gYm9vbCAgICAgICAgICAgICRkdW1wS2V5cyAgICAgV2hldGhlciBrZXlzIHNob3VsZCBiZSBkdW1wZWQgb3Igbm90CiAgICAgKgogICAgICogQHJldHVybiBpbnQgVGhlIGZpbmFsIG51bWJlciBvZiByZW1vdmVkIGl0ZW1zCiAgICAgKi8KICAgIHByaXZhdGUgZnVuY3Rpb24gZHVtcENoaWxkcmVuKCRkdW1wZXIsICRwYXJlbnRDdXJzb3IsICYkcmVmcywgJGNoaWxkcmVuLCAkaGFzaEN1dCwgJGhhc2hUeXBlLCAkZHVtcEtleXMpCiAgICB7CiAgICAgICAgJGN1cnNvciA9IGNsb25lICRwYXJlbnRDdXJzb3I7CiAgICAgICAgKyskY3Vyc29yLT5kZXB0aDsKICAgICAgICAkY3Vyc29yLT5oYXNoVHlwZSA9ICRoYXNoVHlwZTsKICAgICAgICAkY3Vyc29yLT5oYXNoSW5kZXggPSAwOwogICAgICAgICRjdXJzb3ItPmhhc2hMZW5ndGggPSBjb3VudCgkY2hpbGRyZW4pOwogICAgICAgICRjdXJzb3ItPmhhc2hDdXQgPSAkaGFzaEN1dDsKICAgICAgICBmb3JlYWNoICgkY2hpbGRyZW4gYXMgJGtleSA9PiAkY2hpbGQpIHsKICAgICAgICAgICAgJGN1cnNvci0+aGFzaEtleUlzQmluYXJ5ID0gaXNzZXQoJGtleVswXSkgJiYgIXByZWdfbWF0Y2goJy8vdScsICRrZXkpOwogICAgICAgICAgICAkY3Vyc29yLT5oYXNoS2V5ID0gJGR1bXBLZXlzID8gJGtleSA6IG51bGw7CiAgICAgICAgICAgICR0aGlzLT5kdW1wSXRlbSgkZHVtcGVyLCAkY3Vyc29yLCAkcmVmcywgJGNoaWxkKTsKICAgICAgICAgICAgaWYgKCsrJGN1cnNvci0+aGFzaEluZGV4ID09PSAkdGhpcy0+bWF4SXRlbXNQZXJEZXB0aCB8fCAkY3Vyc29yLT5zdG9wKSB7CiAgICAgICAgICAgICAgICAkcGFyZW50Q3Vyc29yLT5zdG9wID0gdHJ1ZTsKCiAgICAgICAgICAgICAgICByZXR1cm4gJGhhc2hDdXQgPj0gMCA/ICRoYXNoQ3V0ICsgJGN1cnNvci0+aGFzaExlbmd0aCAtICRjdXJzb3ItPmhhc2hJbmRleCA6ICRoYXNoQ3V0OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGhhc2hDdXQ7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRTdHViKCRpdGVtKQogICAgewogICAgICAgIGlmICghJGl0ZW0gfHwgIVxpc19hcnJheSgkaXRlbSkpIHsKICAgICAgICAgICAgcmV0dXJuICRpdGVtOwogICAgICAgIH0KCiAgICAgICAgJHN0dWIgPSBuZXcgU3R1YigpOwogICAgICAgICRzdHViLT50eXBlID0gU3R1Yjo6VFlQRV9BUlJBWTsKICAgICAgICBmb3JlYWNoICgkaXRlbSBhcyAkc3R1Yi0+Y2xhc3MgPT4gJHN0dWItPnBvc2l0aW9uKSB7CiAgICAgICAgfQogICAgICAgIGlmIChpc3NldCgkaXRlbVswXSkpIHsKICAgICAgICAgICAgJHN0dWItPmN1dCA9ICRpdGVtWzBdOwogICAgICAgIH0KICAgICAgICAkc3R1Yi0+dmFsdWUgPSAkc3R1Yi0+Y3V0ICsgKCRzdHViLT5wb3NpdGlvbiA/IFxjb3VudCgkdGhpcy0+ZGF0YVskc3R1Yi0+cG9zaXRpb25dKSA6IDApOwoKICAgICAgICByZXR1cm4gJHN0dWI7CiAgICB9Cn0KAppDevTools/query/vendor/symfony/var-dumper/Cloner/DumperInterface.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2xvbmVyOwoKLyoqCiAqIER1bXBlckludGVyZmFjZSB1c2VkIGJ5IERhdGEgb2JqZWN0cy4KICoKICogQGF1dGhvciBOaWNvbGFzIEdyZWthcyA8cEB0Y2h3b3JrLmNvbT4KICovCmludGVyZmFjZSBEdW1wZXJJbnRlcmZhY2UKewogICAgLyoqCiAgICAgKiBEdW1wcyBhIHNjYWxhciB2YWx1ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gQ3Vyc29yICAgICAgICAgICAgICAgICRjdXJzb3IgVGhlIEN1cnNvciBwb3NpdGlvbiBpbiB0aGUgZHVtcAogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAgICAgICAkdHlwZSAgIFRoZSBQSFAgdHlwZSBvZiB0aGUgdmFsdWUgYmVpbmcgZHVtcGVkCiAgICAgKiBAcGFyYW0gc3RyaW5nfGludHxmbG9hdHxib29sICR2YWx1ZSAgVGhlIHNjYWxhciB2YWx1ZSBiZWluZyBkdW1wZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGR1bXBTY2FsYXIoQ3Vyc29yICRjdXJzb3IsICR0eXBlLCAkdmFsdWUpOwoKICAgIC8qKgogICAgICogRHVtcHMgYSBzdHJpbmcuCiAgICAgKgogICAgICogQHBhcmFtIEN1cnNvciAkY3Vyc29yIFRoZSBDdXJzb3IgcG9zaXRpb24gaW4gdGhlIGR1bXAKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0ciAgICBUaGUgc3RyaW5nIGJlaW5nIGR1bXBlZAogICAgICogQHBhcmFtIGJvb2wgICAkYmluICAgIFdoZXRoZXIgJHN0ciBpcyBVVEYtOCBvciBiaW5hcnkgZW5jb2RlZAogICAgICogQHBhcmFtIGludCAgICAkY3V0ICAgIFRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyAkc3RyIGhhcyBiZWVuIGN1dCBieQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZHVtcFN0cmluZyhDdXJzb3IgJGN1cnNvciwgJHN0ciwgJGJpbiwgJGN1dCk7CgogICAgLyoqCiAgICAgKiBEdW1wcyB3aGlsZSBlbnRlcmluZyBhbiBoYXNoLgogICAgICoKICAgICAqIEBwYXJhbSBDdXJzb3IgJGN1cnNvciAgIFRoZSBDdXJzb3IgcG9zaXRpb24gaW4gdGhlIGR1bXAKICAgICAqIEBwYXJhbSBpbnQgICAgJHR5cGUgICAgIEEgQ3Vyc29yOjpIQVNIXyogY29uc3QgZm9yIHRoZSB0eXBlIG9mIGhhc2gKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNsYXNzICAgIFRoZSBvYmplY3QgY2xhc3MsIHJlc291cmNlIHR5cGUgb3IgYXJyYXkgY291bnQKICAgICAqIEBwYXJhbSBib29sICAgJGhhc0NoaWxkIFdoZW4gdGhlIGR1bXAgb2YgdGhlIGhhc2ggaGFzIGNoaWxkIGl0ZW0KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGVudGVySGFzaChDdXJzb3IgJGN1cnNvciwgJHR5cGUsICRjbGFzcywgJGhhc0NoaWxkKTsKCiAgICAvKioKICAgICAqIER1bXBzIHdoaWxlIGxlYXZpbmcgYW4gaGFzaC4KICAgICAqCiAgICAgKiBAcGFyYW0gQ3Vyc29yICRjdXJzb3IgICBUaGUgQ3Vyc29yIHBvc2l0aW9uIGluIHRoZSBkdW1wCiAgICAgKiBAcGFyYW0gaW50ICAgICR0eXBlICAgICBBIEN1cnNvcjo6SEFTSF8qIGNvbnN0IGZvciB0aGUgdHlwZSBvZiBoYXNoCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjbGFzcyAgICBUaGUgb2JqZWN0IGNsYXNzLCByZXNvdXJjZSB0eXBlIG9yIGFycmF5IGNvdW50CiAgICAgKiBAcGFyYW0gYm9vbCAgICRoYXNDaGlsZCBXaGVuIHRoZSBkdW1wIG9mIHRoZSBoYXNoIGhhcyBjaGlsZCBpdGVtCiAgICAgKiBAcGFyYW0gaW50ICAgICRjdXQgICAgICBUaGUgbnVtYmVyIG9mIGl0ZW1zIHRoZSBoYXNoIGhhcyBiZWVuIGN1dCBieQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbGVhdmVIYXNoKEN1cnNvciAkY3Vyc29yLCAkdHlwZSwgJGNsYXNzLCAkaGFzQ2hpbGQsICRjdXQpOwp9Cg==AppDevTools/query/vendor/symfony/var-dumper/Cloner/Stub.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2xvbmVyOwoKLyoqCiAqIFJlcHJlc2VudHMgdGhlIG1haW4gcHJvcGVydGllcyBvZiBhIFBIUCB2YXJpYWJsZS4KICoKICogQGF1dGhvciBOaWNvbGFzIEdyZWthcyA8cEB0Y2h3b3JrLmNvbT4KICovCmNsYXNzIFN0dWIgaW1wbGVtZW50cyBcU2VyaWFsaXphYmxlCnsKICAgIGNvbnN0IFRZUEVfUkVGID0gMTsKICAgIGNvbnN0IFRZUEVfU1RSSU5HID0gMjsKICAgIGNvbnN0IFRZUEVfQVJSQVkgPSAzOwogICAgY29uc3QgVFlQRV9PQkpFQ1QgPSA0OwogICAgY29uc3QgVFlQRV9SRVNPVVJDRSA9IDU7CgogICAgY29uc3QgU1RSSU5HX0JJTkFSWSA9IDE7CiAgICBjb25zdCBTVFJJTkdfVVRGOCA9IDI7CgogICAgY29uc3QgQVJSQVlfQVNTT0MgPSAxOwogICAgY29uc3QgQVJSQVlfSU5ERVhFRCA9IDI7CgogICAgcHVibGljICR0eXBlID0gc2VsZjo6VFlQRV9SRUY7CiAgICBwdWJsaWMgJGNsYXNzID0gJyc7CiAgICBwdWJsaWMgJHZhbHVlOwogICAgcHVibGljICRjdXQgPSAwOwogICAgcHVibGljICRoYW5kbGUgPSAwOwogICAgcHVibGljICRyZWZDb3VudCA9IDA7CiAgICBwdWJsaWMgJHBvc2l0aW9uID0gMDsKICAgIHB1YmxpYyAkYXR0ciA9IGFycmF5KCk7CgogICAgLyoqCiAgICAgKiBAaW50ZXJuYWwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNlcmlhbGl6ZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIFxzZXJpYWxpemUoYXJyYXkoJHRoaXMtPmNsYXNzLCAkdGhpcy0+cG9zaXRpb24sICR0aGlzLT5jdXQsICR0aGlzLT50eXBlLCAkdGhpcy0+dmFsdWUsICR0aGlzLT5oYW5kbGUsICR0aGlzLT5yZWZDb3VudCwgJHRoaXMtPmF0dHIpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBpbnRlcm5hbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdW5zZXJpYWxpemUoJHNlcmlhbGl6ZWQpCiAgICB7CiAgICAgICAgbGlzdCgkdGhpcy0+Y2xhc3MsICR0aGlzLT5wb3NpdGlvbiwgJHRoaXMtPmN1dCwgJHRoaXMtPnR5cGUsICR0aGlzLT52YWx1ZSwgJHRoaXMtPmhhbmRsZSwgJHRoaXMtPnJlZkNvdW50LCAkdGhpcy0+YXR0cikgPSBcdW5zZXJpYWxpemUoJHNlcmlhbGl6ZWQpOwogICAgfQp9Cg==AppDevTools/query/vendor/symfony/var-dumper/Cloner/VarCloner.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2xvbmVyOwoKLyoqCiAqIEBhdXRob3IgTmljb2xhcyBHcmVrYXMgPHBAdGNod29yay5jb20+CiAqLwpjbGFzcyBWYXJDbG9uZXIgZXh0ZW5kcyBBYnN0cmFjdENsb25lcgp7CiAgICBwcml2YXRlIHN0YXRpYyAkZ2lkOwogICAgcHJpdmF0ZSBzdGF0aWMgJGFycmF5Q2FjaGUgPSBhcnJheSgpOwoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZG9DbG9uZSgkdmFyKQogICAgewogICAgICAgICRsZW4gPSAxOyAgICAgICAgICAgICAgICAgICAgICAgLy8gTGVuZ3RoIG9mICRxdWV1ZQogICAgICAgICRwb3MgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgLy8gTnVtYmVyIG9mIGNsb25lZCBpdGVtcyBwYXN0IHRoZSBtaW5pbXVtIGRlcHRoCiAgICAgICAgJHJlZnNDb3VudGVyID0gMDsgICAgICAgICAgICAgICAvLyBIYXJkIHJlZmVyZW5jZXMgY291bnRlcgogICAgICAgICRxdWV1ZSA9IGFycmF5KGFycmF5KCR2YXIpKTsgICAgLy8gVGhpcyBicmVhZHRoLWZpcnN0IHF1ZXVlIGlzIHRoZSByZXR1cm4gdmFsdWUKICAgICAgICAkaW5kZXhlZEFycmF5cyA9IGFycmF5KCk7ICAgICAgIC8vIE1hcCBvZiBxdWV1ZSBpbmRleGVzIHRoYXQgaG9sZCBudW1lcmljYWxseSBpbmRleGVkIGFycmF5cwogICAgICAgICRoYXJkUmVmcyA9IGFycmF5KCk7ICAgICAgICAgICAgLy8gTWFwIG9mIG9yaWdpbmFsIHp2YWwgaWRzIHRvIHN0dWIgb2JqZWN0cwogICAgICAgICRvYmpSZWZzID0gYXJyYXkoKTsgICAgICAgICAgICAgLy8gTWFwIG9mIG9yaWdpbmFsIG9iamVjdCBoYW5kbGVzIHRvIHRoZWlyIHN0dWIgb2JqZWN0IGNvdXRlcnBhcnQKICAgICAgICAkcmVzUmVmcyA9IGFycmF5KCk7ICAgICAgICAgICAgIC8vIE1hcCBvZiBvcmlnaW5hbCByZXNvdXJjZSBoYW5kbGVzIHRvIHRoZWlyIHN0dWIgb2JqZWN0IGNvdXRlcnBhcnQKICAgICAgICAkdmFsdWVzID0gYXJyYXkoKTsgICAgICAgICAgICAgIC8vIE1hcCBvZiBzdHViIG9iamVjdHMnIGlkcyB0byBvcmlnaW5hbCB2YWx1ZXMKICAgICAgICAkbWF4SXRlbXMgPSAkdGhpcy0+bWF4SXRlbXM7CiAgICAgICAgJG1heFN0cmluZyA9ICR0aGlzLT5tYXhTdHJpbmc7CiAgICAgICAgJG1pbkRlcHRoID0gJHRoaXMtPm1pbkRlcHRoOwogICAgICAgICRjdXJyZW50RGVwdGggPSAwOyAgICAgICAgICAgICAgLy8gQ3VycmVudCB0cmVlIGRlcHRoCiAgICAgICAgJGN1cnJlbnREZXB0aEZpbmFsSW5kZXggPSAwOyAgICAvLyBGaW5hbCAkcXVldWUgaW5kZXggZm9yIGN1cnJlbnQgdHJlZSBkZXB0aAogICAgICAgICRtaW5pbXVtRGVwdGhSZWFjaGVkID0gMCA9PT0gJG1pbkRlcHRoOyAvLyBCZWNvbWVzIHRydWUgd2hlbiBtaW5pbXVtIHRyZWUgZGVwdGggaGFzIGJlZW4gcmVhY2hlZAogICAgICAgICRjb29raWUgPSAob2JqZWN0KSBhcnJheSgpOyAgICAgLy8gVW5pcXVlIG9iamVjdCB1c2VkIHRvIGRldGVjdCBoYXJkIHJlZmVyZW5jZXMKICAgICAgICAkYSA9IG51bGw7ICAgICAgICAgICAgICAgICAgICAgIC8vIEFycmF5IGNhc3QgZm9yIG5lc3RlZCBzdHJ1Y3R1cmVzCiAgICAgICAgJHN0dWIgPSBudWxsOyAgICAgICAgICAgICAgICAgICAvLyBTdHViIGNhcHR1cmluZyB0aGUgbWFpbiBwcm9wZXJ0aWVzIG9mIGFuIG9yaWdpbmFsIGl0ZW0gdmFsdWUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9yIG51bGwgaWYgdGhlIG9yaWdpbmFsIHZhbHVlIGlzIHVzZWQgZGlyZWN0bHkKCiAgICAgICAgaWYgKCEkZ2lkID0gc2VsZjo6JGdpZCkgewogICAgICAgICAgICAkZ2lkID0gc2VsZjo6JGdpZCA9IHVuaXFpZChtdF9yYW5kKCksIHRydWUpOyAvLyBVbmlxdWUgc3RyaW5nIHVzZWQgdG8gZGV0ZWN0IHRoZSBzcGVjaWFsICRHTE9CQUxTIHZhcmlhYmxlCiAgICAgICAgfQogICAgICAgICRhcnJheVN0dWIgPSBuZXcgU3R1YigpOwogICAgICAgICRhcnJheVN0dWItPnR5cGUgPSBTdHViOjpUWVBFX0FSUkFZOwogICAgICAgICRmcm9tT2JqQ2FzdCA9IGZhbHNlOwoKICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCAkbGVuOyArKyRpKSB7CiAgICAgICAgICAgIC8vIERldGVjdCB3aGVuIHdlIG1vdmUgb24gdG8gdGhlIG5leHQgdHJlZSBkZXB0aAogICAgICAgICAgICBpZiAoJGkgPiAkY3VycmVudERlcHRoRmluYWxJbmRleCkgewogICAgICAgICAgICAgICAgKyskY3VycmVudERlcHRoOwogICAgICAgICAgICAgICAgJGN1cnJlbnREZXB0aEZpbmFsSW5kZXggPSAkbGVuIC0gMTsKICAgICAgICAgICAgICAgIGlmICgkY3VycmVudERlcHRoID49ICRtaW5EZXB0aCkgewogICAgICAgICAgICAgICAgICAgICRtaW5pbXVtRGVwdGhSZWFjaGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHJlZnMgPSAkdmFscyA9ICRxdWV1ZVskaV07CiAgICAgICAgICAgIGlmIChcUEhQX1ZFUlNJT05fSUQgPCA3MDIwMCAmJiBlbXB0eSgkaW5kZXhlZEFycmF5c1skaV0pKSB7CiAgICAgICAgICAgICAgICAvLyBzZWUgaHR0cHM6Ly93aWtpLnBocC5uZXQvcmZjL2NvbnZlcnRfbnVtZXJpY19rZXlzX2luX29iamVjdF9hcnJheV9jYXN0cwogICAgICAgICAgICAgICAgZm9yZWFjaCAoJHZhbHMgYXMgJGsgPT4gJHYpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoXGlzX2ludCgkaykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKGFycmF5KCRrID0+IHRydWUpIGFzICRnayA9PiAkZ3YpIHsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKCRnayAhPT0gJGspIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGZyb21PYmpDYXN0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgJHJlZnMgPSAkdmFscyA9IFxhcnJheV92YWx1ZXMoJHF1ZXVlWyRpXSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBmb3JlYWNoICgkdmFscyBhcyAkayA9PiAkdikgewogICAgICAgICAgICAgICAgLy8gJHYgaXMgdGhlIG9yaWdpbmFsIHZhbHVlIG9yIGEgc3R1YiBvYmplY3QgaW4gY2FzZSBvZiBoYXJkIHJlZmVyZW5jZXMKICAgICAgICAgICAgICAgICRyZWZzWyRrXSA9ICRjb29raWU7CiAgICAgICAgICAgICAgICBpZiAoJHp2YWxJc1JlZiA9ICR2YWxzWyRrXSA9PT0gJGNvb2tpZSkgewogICAgICAgICAgICAgICAgICAgICR2YWxzWyRrXSA9ICYkc3R1YjsgICAgICAgICAvLyBCcmVhayBoYXJkIHJlZmVyZW5jZXMgdG8gbWFrZSAkcXVldWUgY29tcGxldGVseQogICAgICAgICAgICAgICAgICAgIHVuc2V0KCRzdHViKTsgICAgICAgICAgICAgICAvLyBpbmRlcGVuZGVudCBmcm9tIHRoZSBvcmlnaW5hbCBzdHJ1Y3R1cmUKICAgICAgICAgICAgICAgICAgICBpZiAoJHYgaW5zdGFuY2VvZiBTdHViICYmIGlzc2V0KCRoYXJkUmVmc1tcc3BsX29iamVjdF9pZCgkdildKSkgewogICAgICAgICAgICAgICAgICAgICAgICAkdmFsc1ska10gPSAkcmVmc1ska10gPSAkdjsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR2LT52YWx1ZSBpbnN0YW5jZW9mIFN0dWIgJiYgKFN0dWI6OlRZUEVfT0JKRUNUID09PSAkdi0+dmFsdWUtPnR5cGUgfHwgU3R1Yjo6VFlQRV9SRVNPVVJDRSA9PT0gJHYtPnZhbHVlLT50eXBlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgKyskdi0+dmFsdWUtPnJlZkNvdW50OwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICsrJHYtPnJlZkNvdW50OwogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgJHJlZnNbJGtdID0gJHZhbHNbJGtdID0gbmV3IFN0dWIoKTsKICAgICAgICAgICAgICAgICAgICAkcmVmc1ska10tPnZhbHVlID0gJHY7CiAgICAgICAgICAgICAgICAgICAgJGggPSBcc3BsX29iamVjdF9pZCgkcmVmc1ska10pOwogICAgICAgICAgICAgICAgICAgICRoYXJkUmVmc1skaF0gPSAmJHJlZnNbJGtdOwogICAgICAgICAgICAgICAgICAgICR2YWx1ZXNbJGhdID0gJHY7CiAgICAgICAgICAgICAgICAgICAgJHZhbHNbJGtdLT5oYW5kbGUgPSArKyRyZWZzQ291bnRlcjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIC8vIENyZWF0ZSAkc3R1YiB3aGVuIHRoZSBvcmlnaW5hbCB2YWx1ZSAkdiBjYW4gbm90IGJlIHVzZWQgZGlyZWN0bHkKICAgICAgICAgICAgICAgIC8vIElmICR2IGlzIGEgbmVzdGVkIHN0cnVjdHVyZSwgcHV0IHRoYXQgc3RydWN0dXJlIGluIGFycmF5ICRhCiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRydWUpIHsKICAgICAgICAgICAgICAgICAgICBjYXNlIG51bGwgPT09ICR2OgogICAgICAgICAgICAgICAgICAgIGNhc2UgXGlzX2Jvb2woJHYpOgogICAgICAgICAgICAgICAgICAgIGNhc2UgXGlzX2ludCgkdik6CiAgICAgICAgICAgICAgICAgICAgY2FzZSBcaXNfZmxvYXQoJHYpOgogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSAyOwoKICAgICAgICAgICAgICAgICAgICBjYXNlIFxpc19zdHJpbmcoJHYpOgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJycgPT09ICR2KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSAyOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghXHByZWdfbWF0Y2goJy8vdScsICR2KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN0dWIgPSBuZXcgU3R1YigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN0dWItPnR5cGUgPSBTdHViOjpUWVBFX1NUUklORzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzdHViLT5jbGFzcyA9IFN0dWI6OlNUUklOR19CSU5BUlk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoMCA8PSAkbWF4U3RyaW5nICYmIDAgPCAkY3V0ID0gXHN0cmxlbigkdikgLSAkbWF4U3RyaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN0dWItPmN1dCA9ICRjdXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN0dWItPnZhbHVlID0gXHN1YnN0cigkdiwgMCwgLSRjdXQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3R1Yi0+dmFsdWUgPSAkdjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKDAgPD0gJG1heFN0cmluZyAmJiBpc3NldCgkdlsxICsgKCRtYXhTdHJpbmcgPj4gMildKSAmJiAwIDwgJGN1dCA9IFxtYl9zdHJsZW4oJHYsICdVVEYtOCcpIC0gJG1heFN0cmluZykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN0dWIgPSBuZXcgU3R1YigpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN0dWItPnR5cGUgPSBTdHViOjpUWVBFX1NUUklORzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzdHViLT5jbGFzcyA9IFN0dWI6OlNUUklOR19VVEY4OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN0dWItPmN1dCA9ICRjdXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3R1Yi0+dmFsdWUgPSBcbWJfc3Vic3RyKCR2LCAwLCAkbWF4U3RyaW5nLCAnVVRGLTgnKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIDI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgJGEgPSBudWxsOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgY2FzZSBcaXNfYXJyYXkoJHYpOgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoISR2KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSAyOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICRzdHViID0gJGFycmF5U3R1YjsKICAgICAgICAgICAgICAgICAgICAgICAgJHN0dWItPmNsYXNzID0gU3R1Yjo6QVJSQVlfSU5ERVhFRDsKCiAgICAgICAgICAgICAgICAgICAgICAgICRqID0gLTE7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCR2IGFzICRnayA9PiAkZ3YpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkZ2sgIT09ICsrJGopIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3R1Yi0+Y2xhc3MgPSBTdHViOjpBUlJBWV9BU1NPQzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAkYSA9ICR2OwoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFN0dWI6OkFSUkFZX0FTU09DID09PSAkc3R1Yi0+Y2xhc3MpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvcGllcyBvZiAkR0xPQkFMUyBoYXZlIHZlcnkgc3RyYW5nZSBiZWhhdmlvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxldCdzIGRldGVjdCB0aGVtIHdpdGggc29tZSBibGFjayBtYWdpYwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFbJGdpZF0gPSB0cnVlOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEhhcHBlbnMgd2l0aCBjb3BpZXMgb2YgJEdMT0JBTFMKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc3NldCgkdlskZ2lkXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNldCgkdlskZ2lkXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGEgPSBhcnJheSgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCR2IGFzICRnayA9PiAmJGd2KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhWyRna10gPSAmJGd2OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNldCgkZ3YpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYSA9ICR2OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoXFBIUF9WRVJTSU9OX0lEIDwgNzAyMDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbmRleGVkQXJyYXlzWyRsZW5dID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgY2FzZSBcaXNfb2JqZWN0KCR2KToKICAgICAgICAgICAgICAgICAgICBjYXNlICR2IGluc3RhbmNlb2YgXF9fUEhQX0luY29tcGxldGVfQ2xhc3M6CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbXB0eSgkb2JqUmVmc1skaCA9IFxzcGxfb2JqZWN0X2lkKCR2KV0pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3R1YiA9IG5ldyBTdHViKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3R1Yi0+dHlwZSA9IFN0dWI6OlRZUEVfT0JKRUNUOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN0dWItPmNsYXNzID0gXGdldF9jbGFzcygkdik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3R1Yi0+dmFsdWUgPSAkdjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzdHViLT5oYW5kbGUgPSAkaDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhID0gJHRoaXMtPmNhc3RPYmplY3QoJHN0dWIsIDAgPCAkaSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHYgIT09ICRzdHViLT52YWx1ZSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChTdHViOjpUWVBFX09CSkVDVCAhPT0gJHN0dWItPnR5cGUgfHwgbnVsbCA9PT0gJHN0dWItPnZhbHVlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3R1Yi0+aGFuZGxlID0gJGggPSBcc3BsX29iamVjdF9pZCgkc3R1Yi0+dmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN0dWItPnZhbHVlID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgwIDw9ICRtYXhJdGVtcyAmJiAkbWF4SXRlbXMgPD0gJHBvcyAmJiAkbWluaW11bURlcHRoUmVhY2hlZCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzdHViLT5jdXQgPSBcY291bnQoJGEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhID0gbnVsbDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW1wdHkoJG9ialJlZnNbJGhdKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJG9ialJlZnNbJGhdID0gJHN0dWI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3R1YiA9ICRvYmpSZWZzWyRoXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrJHN0dWItPnJlZkNvdW50OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGEgPSBudWxsOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiAvLyByZXNvdXJjZQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW1wdHkoJHJlc1JlZnNbJGggPSAoaW50KSAkdl0pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3R1YiA9IG5ldyBTdHViKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3R1Yi0+dHlwZSA9IFN0dWI6OlRZUEVfUkVTT1VSQ0U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJ1Vua25vd24nID09PSAkc3R1Yi0+Y2xhc3MgPSBAXGdldF9yZXNvdXJjZV90eXBlKCR2KSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzdHViLT5jbGFzcyA9ICdDbG9zZWQnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN0dWItPnZhbHVlID0gJHY7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3R1Yi0+aGFuZGxlID0gJGg7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYSA9ICR0aGlzLT5jYXN0UmVzb3VyY2UoJHN0dWIsIDAgPCAkaSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3R1Yi0+dmFsdWUgPSBudWxsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDAgPD0gJG1heEl0ZW1zICYmICRtYXhJdGVtcyA8PSAkcG9zICYmICRtaW5pbXVtRGVwdGhSZWFjaGVkKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN0dWItPmN1dCA9IFxjb3VudCgkYSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGEgPSBudWxsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbXB0eSgkcmVzUmVmc1skaF0pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcmVzUmVmc1skaF0gPSAkc3R1YjsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzdHViID0gJHJlc1JlZnNbJGhdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgKyskc3R1Yi0+cmVmQ291bnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYSA9IG51bGw7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKCRhKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCEkbWluaW11bURlcHRoUmVhY2hlZCB8fCAwID4gJG1heEl0ZW1zKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRxdWV1ZVskbGVuXSA9ICRhOwogICAgICAgICAgICAgICAgICAgICAgICAkc3R1Yi0+cG9zaXRpb24gPSAkbGVuKys7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRwb3MgPCAkbWF4SXRlbXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRtYXhJdGVtcyA8ICRwb3MgKz0gXGNvdW50KCRhKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGEgPSBcYXJyYXlfc2xpY2UoJGEsIDAsICRtYXhJdGVtcyAtICRwb3MpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRzdHViLT5jdXQgPj0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzdHViLT5jdXQgKz0gJHBvcyAtICRtYXhJdGVtczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAkcXVldWVbJGxlbl0gPSAkYTsKICAgICAgICAgICAgICAgICAgICAgICAgJHN0dWItPnBvc2l0aW9uID0gJGxlbisrOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkc3R1Yi0+Y3V0ID49IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHN0dWItPmN1dCArPSBcY291bnQoJGEpOwogICAgICAgICAgICAgICAgICAgICAgICAkc3R1Yi0+cG9zaXRpb24gPSAwOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoJGFycmF5U3R1YiA9PT0gJHN0dWIpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoJGFycmF5U3R1Yi0+Y3V0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRzdHViID0gYXJyYXkoJGFycmF5U3R1Yi0+Y3V0LCAkYXJyYXlTdHViLT5jbGFzcyA9PiAkYXJyYXlTdHViLT5wb3NpdGlvbik7CiAgICAgICAgICAgICAgICAgICAgICAgICRhcnJheVN0dWItPmN1dCA9IDA7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKGlzc2V0KHNlbGY6OiRhcnJheUNhY2hlWyRhcnJheVN0dWItPmNsYXNzXVskYXJyYXlTdHViLT5wb3NpdGlvbl0pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRzdHViID0gc2VsZjo6JGFycmF5Q2FjaGVbJGFycmF5U3R1Yi0+Y2xhc3NdWyRhcnJheVN0dWItPnBvc2l0aW9uXTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBzZWxmOjokYXJyYXlDYWNoZVskYXJyYXlTdHViLT5jbGFzc11bJGFycmF5U3R1Yi0+cG9zaXRpb25dID0gJHN0dWIgPSBhcnJheSgkYXJyYXlTdHViLT5jbGFzcyA9PiAkYXJyYXlTdHViLT5wb3NpdGlvbik7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICgkenZhbElzUmVmKSB7CiAgICAgICAgICAgICAgICAgICAgJHJlZnNbJGtdLT52YWx1ZSA9ICRzdHViOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkdmFsc1ska10gPSAkc3R1YjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCRmcm9tT2JqQ2FzdCkgewogICAgICAgICAgICAgICAgJGZyb21PYmpDYXN0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAkcmVmcyA9ICR2YWxzOwogICAgICAgICAgICAgICAgJHZhbHMgPSBhcnJheSgpOwogICAgICAgICAgICAgICAgJGogPSAtMTsKICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRxdWV1ZVskaV0gYXMgJGsgPT4gJHYpIHsKICAgICAgICAgICAgICAgICAgICBmb3JlYWNoIChhcnJheSgkayA9PiB0cnVlKSBhcyAkZ2sgPT4gJGd2KSB7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmICgkZ2sgIT09ICRrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR2YWxzID0gKG9iamVjdCkgJHZhbHM7CiAgICAgICAgICAgICAgICAgICAgICAgICR2YWxzLT57JGt9ID0gJHJlZnNbKyskal07CiAgICAgICAgICAgICAgICAgICAgICAgICR2YWxzID0gKGFycmF5KSAkdmFsczsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkdmFsc1ska10gPSAkcmVmc1srKyRqXTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRxdWV1ZVskaV0gPSAkdmFsczsKICAgICAgICB9CgogICAgICAgIGZvcmVhY2ggKCR2YWx1ZXMgYXMgJGggPT4gJHYpIHsKICAgICAgICAgICAgJGhhcmRSZWZzWyRoXSA9ICR2OwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRxdWV1ZTsKICAgIH0KfQo=AppDevTools/query/vendor/symfony/var-dumper/Command/Descriptor/CliDescriptor.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ29tbWFuZFxEZXNjcmlwdG9yOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcSW5wdXRcQXJyYXlJbnB1dDsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcT3V0cHV0XE91dHB1dEludGVyZmFjZTsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcU3R5bGVcU3ltZm9ueVN0eWxlOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENsb25lclxEYXRhOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXER1bXBlclxDbGlEdW1wZXI7CgovKioKICogRGVzY3JpYmUgY29sbGVjdGVkIGRhdGEgY2xvbmVzIGZvciBjbGkgb3V0cHV0LgogKgogKiBAYXV0aG9yIE1heGltZSBTdGVpbmhhdXNzZXIgPG1heGltZS5zdGVpbmhhdXNzZXJAZ21haWwuY29tPgogKgogKiBAZmluYWwKICovCmNsYXNzIENsaURlc2NyaXB0b3IgaW1wbGVtZW50cyBEdW1wRGVzY3JpcHRvckludGVyZmFjZQp7CiAgICBwcml2YXRlICRkdW1wZXI7CiAgICBwcml2YXRlICRsYXN0SWRlbnRpZmllcjsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoQ2xpRHVtcGVyICRkdW1wZXIpCiAgICB7CiAgICAgICAgJHRoaXMtPmR1bXBlciA9ICRkdW1wZXI7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGRlc2NyaWJlKE91dHB1dEludGVyZmFjZSAkb3V0cHV0LCBEYXRhICRkYXRhLCBhcnJheSAkY29udGV4dCwgaW50ICRjbGllbnRJZCk6IHZvaWQKICAgIHsKICAgICAgICAkaW8gPSAkb3V0cHV0IGluc3RhbmNlb2YgU3ltZm9ueVN0eWxlID8gJG91dHB1dCA6IG5ldyBTeW1mb255U3R5bGUobmV3IEFycmF5SW5wdXQoYXJyYXkoKSksICRvdXRwdXQpOwogICAgICAgICR0aGlzLT5kdW1wZXItPnNldENvbG9ycygkb3V0cHV0LT5pc0RlY29yYXRlZCgpKTsKCiAgICAgICAgJHJvd3MgPSBhcnJheShhcnJheSgnZGF0ZScsIGRhdGUoJ3InLCAkY29udGV4dFsndGltZXN0YW1wJ10pKSk7CiAgICAgICAgJGxhc3RJZGVudGlmaWVyID0gJHRoaXMtPmxhc3RJZGVudGlmaWVyOwogICAgICAgICR0aGlzLT5sYXN0SWRlbnRpZmllciA9ICRjbGllbnRJZDsKCiAgICAgICAgJHNlY3Rpb24gPSAiUmVjZWl2ZWQgZnJvbSBjbGllbnQgIyRjbGllbnRJZCI7CiAgICAgICAgaWYgKGlzc2V0KCRjb250ZXh0WydyZXF1ZXN0J10pKSB7CiAgICAgICAgICAgICRyZXF1ZXN0ID0gJGNvbnRleHRbJ3JlcXVlc3QnXTsKICAgICAgICAgICAgJHRoaXMtPmxhc3RJZGVudGlmaWVyID0gJHJlcXVlc3RbJ2lkZW50aWZpZXInXTsKICAgICAgICAgICAgJHNlY3Rpb24gPSBzcHJpbnRmKCclcyAlcycsICRyZXF1ZXN0WydtZXRob2QnXSwgJHJlcXVlc3RbJ3VyaSddKTsKICAgICAgICAgICAgaWYgKCRjb250cm9sbGVyID0gJHJlcXVlc3RbJ2NvbnRyb2xsZXInXSkgewogICAgICAgICAgICAgICAgJHJvd3NbXSA9IGFycmF5KCdjb250cm9sbGVyJywgcnRyaW0oJHRoaXMtPmR1bXBlci0+ZHVtcCgkY29udHJvbGxlciwgdHJ1ZSksICJcbiIpKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZWlmIChpc3NldCgkY29udGV4dFsnY2xpJ10pKSB7CiAgICAgICAgICAgICR0aGlzLT5sYXN0SWRlbnRpZmllciA9ICRjb250ZXh0WydjbGknXVsnaWRlbnRpZmllciddOwogICAgICAgICAgICAkc2VjdGlvbiA9ICckICcuJGNvbnRleHRbJ2NsaSddWydjb21tYW5kX2xpbmUnXTsKICAgICAgICB9CgogICAgICAgIGlmICgkdGhpcy0+bGFzdElkZW50aWZpZXIgIT09ICRsYXN0SWRlbnRpZmllcikgewogICAgICAgICAgICAkaW8tPnNlY3Rpb24oJHNlY3Rpb24pOwogICAgICAgIH0KCiAgICAgICAgaWYgKGlzc2V0KCRjb250ZXh0Wydzb3VyY2UnXSkpIHsKICAgICAgICAgICAgJHNvdXJjZSA9ICRjb250ZXh0Wydzb3VyY2UnXTsKICAgICAgICAgICAgJHJvd3NbXSA9IGFycmF5KCdzb3VyY2UnLCBzcHJpbnRmKCclcyBvbiBsaW5lICVkJywgJHNvdXJjZVsnbmFtZSddLCAkc291cmNlWydsaW5lJ10pKTsKICAgICAgICAgICAgJGZpbGUgPSAkc291cmNlWydmaWxlX3JlbGF0aXZlJ10gPz8gJHNvdXJjZVsnZmlsZSddOwogICAgICAgICAgICAkcm93c1tdID0gYXJyYXkoJ2ZpbGUnLCAkZmlsZSk7CiAgICAgICAgICAgICRmaWxlTGluayA9ICRzb3VyY2VbJ2ZpbGVfbGluayddID8/IG51bGw7CiAgICAgICAgfQoKICAgICAgICAkaW8tPnRhYmxlKGFycmF5KCksICRyb3dzKTsKCiAgICAgICAgaWYgKGlzc2V0KCRmaWxlTGluaykpIHsKICAgICAgICAgICAgJGlvLT53cml0ZWxuKGFycmF5KCc8aW5mbz5PcGVuIHNvdXJjZSBpbiB5b3VyIElERS9icm93c2VyOjwvaW5mbz4nLCAkZmlsZUxpbmspKTsKICAgICAgICAgICAgJGlvLT5uZXdMaW5lKCk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+ZHVtcGVyLT5kdW1wKCRkYXRhKTsKICAgICAgICAkaW8tPm5ld0xpbmUoKTsKICAgIH0KfQo=AppDevTools/query/vendor/symfony/var-dumper/Command/Descriptor/DumpDescriptorInterface.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ29tbWFuZFxEZXNjcmlwdG9yOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcT3V0cHV0XE91dHB1dEludGVyZmFjZTsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDbG9uZXJcRGF0YTsKCi8qKgogKiBAYXV0aG9yIE1heGltZSBTdGVpbmhhdXNzZXIgPG1heGltZS5zdGVpbmhhdXNzZXJAZ21haWwuY29tPgogKi8KaW50ZXJmYWNlIER1bXBEZXNjcmlwdG9ySW50ZXJmYWNlCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBkZXNjcmliZShPdXRwdXRJbnRlcmZhY2UgJG91dHB1dCwgRGF0YSAkZGF0YSwgYXJyYXkgJGNvbnRleHQsIGludCAkY2xpZW50SWQpOiB2b2lkOwp9Cg==AppDevTools/query/vendor/symfony/var-dumper/Command/Descriptor/HtmlDescriptor.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ29tbWFuZFxEZXNjcmlwdG9yOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcT3V0cHV0XE91dHB1dEludGVyZmFjZTsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDbG9uZXJcRGF0YTsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxEdW1wZXJcSHRtbER1bXBlcjsKCi8qKgogKiBEZXNjcmliZSBjb2xsZWN0ZWQgZGF0YSBjbG9uZXMgZm9yIGh0bWwgb3V0cHV0LgogKgogKiBAYXV0aG9yIE1heGltZSBTdGVpbmhhdXNzZXIgPG1heGltZS5zdGVpbmhhdXNzZXJAZ21haWwuY29tPgogKgogKiBAZmluYWwKICovCmNsYXNzIEh0bWxEZXNjcmlwdG9yIGltcGxlbWVudHMgRHVtcERlc2NyaXB0b3JJbnRlcmZhY2UKewogICAgcHJpdmF0ZSAkZHVtcGVyOwogICAgcHJpdmF0ZSAkaW5pdGlhbGl6ZWQgPSBmYWxzZTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoSHRtbER1bXBlciAkZHVtcGVyKQogICAgewogICAgICAgICR0aGlzLT5kdW1wZXIgPSAkZHVtcGVyOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBkZXNjcmliZShPdXRwdXRJbnRlcmZhY2UgJG91dHB1dCwgRGF0YSAkZGF0YSwgYXJyYXkgJGNvbnRleHQsIGludCAkY2xpZW50SWQpOiB2b2lkCiAgICB7CiAgICAgICAgaWYgKCEkdGhpcy0+aW5pdGlhbGl6ZWQpIHsKICAgICAgICAgICAgJHN0eWxlcyA9IGZpbGVfZ2V0X2NvbnRlbnRzKF9fRElSX18uJy8uLi8uLi9SZXNvdXJjZXMvY3NzL2h0bWxEZXNjcmlwdG9yLmNzcycpOwogICAgICAgICAgICAkc2NyaXB0cyA9IGZpbGVfZ2V0X2NvbnRlbnRzKF9fRElSX18uJy8uLi8uLi9SZXNvdXJjZXMvanMvaHRtbERlc2NyaXB0b3IuanMnKTsKICAgICAgICAgICAgJG91dHB1dC0+d3JpdGVsbigiPHN0eWxlPiRzdHlsZXM8L3N0eWxlPjxzY3JpcHQ+JHNjcmlwdHM8L3NjcmlwdD4iKTsKICAgICAgICAgICAgJHRoaXMtPmluaXRpYWxpemVkID0gdHJ1ZTsKICAgICAgICB9CgogICAgICAgICR0aXRsZSA9ICctJzsKICAgICAgICBpZiAoaXNzZXQoJGNvbnRleHRbJ3JlcXVlc3QnXSkpIHsKICAgICAgICAgICAgJHJlcXVlc3QgPSAkY29udGV4dFsncmVxdWVzdCddOwogICAgICAgICAgICAkY29udHJvbGxlciA9ICI8c3BhbiBjbGFzcz0nZHVtcGVkLXRhZyc+eyR0aGlzLT5kdW1wZXItPmR1bXAoJHJlcXVlc3RbJ2NvbnRyb2xsZXInXSwgdHJ1ZSwgYXJyYXkoJ21heERlcHRoJyA9PiAwKSl9PC9zcGFuPiI7CiAgICAgICAgICAgICR0aXRsZSA9IHNwcmludGYoJzxjb2RlPiVzPC9jb2RlPiA8YSBocmVmPSIlcyI+JXM8L2E+JywgJHJlcXVlc3RbJ21ldGhvZCddLCAkdXJpID0gJHJlcXVlc3RbJ3VyaSddLCAkdXJpKTsKICAgICAgICAgICAgJGRlZHVwSWRlbnRpZmllciA9ICRyZXF1ZXN0WydpZGVudGlmaWVyJ107CiAgICAgICAgfSBlbHNlaWYgKGlzc2V0KCRjb250ZXh0WydjbGknXSkpIHsKICAgICAgICAgICAgJHRpdGxlID0gJzxjb2RlPiQgPC9jb2RlPicuJGNvbnRleHRbJ2NsaSddWydjb21tYW5kX2xpbmUnXTsKICAgICAgICAgICAgJGRlZHVwSWRlbnRpZmllciA9ICRjb250ZXh0WydjbGknXVsnaWRlbnRpZmllciddOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRkZWR1cElkZW50aWZpZXIgPSB1bmlxaWQoJycsIHRydWUpOwogICAgICAgIH0KCiAgICAgICAgJHNvdXJjZURlc2NyaXB0aW9uID0gJyc7CiAgICAgICAgaWYgKGlzc2V0KCRjb250ZXh0Wydzb3VyY2UnXSkpIHsKICAgICAgICAgICAgJHNvdXJjZSA9ICRjb250ZXh0Wydzb3VyY2UnXTsKICAgICAgICAgICAgJHByb2plY3REaXIgPSAkc291cmNlWydwcm9qZWN0X2RpciddOwogICAgICAgICAgICAkc291cmNlRGVzY3JpcHRpb24gPSBzcHJpbnRmKCclcyBvbiBsaW5lICVkJywgJHNvdXJjZVsnbmFtZSddLCAkc291cmNlWydsaW5lJ10pOwogICAgICAgICAgICBpZiAoaXNzZXQoJHNvdXJjZVsnZmlsZV9saW5rJ10pKSB7CiAgICAgICAgICAgICAgICAkc291cmNlRGVzY3JpcHRpb24gPSBzcHJpbnRmKCc8YSBocmVmPSIlcyI+JXM8L2E+JywgJHNvdXJjZVsnZmlsZV9saW5rJ10sICRzb3VyY2VEZXNjcmlwdGlvbik7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRpc29EYXRlID0gJHRoaXMtPmV4dHJhY3REYXRlKCRjb250ZXh0LCAnYycpOwogICAgICAgICR0YWdzID0gYXJyYXlfZmlsdGVyKGFycmF5KAogICAgICAgICAgICAnY29udHJvbGxlcicgPT4gJGNvbnRyb2xsZXIgPz8gbnVsbCwKICAgICAgICAgICAgJ3Byb2plY3QgZGlyJyA9PiAkcHJvamVjdERpciA/PyBudWxsLAogICAgICAgICkpOwoKICAgICAgICAkb3V0cHV0LT53cml0ZWxuKDw8PEhUTUwKPGFydGljbGUgZGF0YS1kZWR1cC1pZD0iJGRlZHVwSWRlbnRpZmllciI+CiAgICA8aGVhZGVyPgogICAgICAgIDxkaXYgY2xhc3M9InJvdyI+CiAgICAgICAgICAgIDxoMiBjbGFzcz0iY29sIj4kdGl0bGU8L2gyPgogICAgICAgICAgICA8dGltZSBjbGFzcz0iY29sIHRleHQtc21hbGwiIHRpdGxlPSIkaXNvRGF0ZSIgZGF0ZXRpbWU9IiRpc29EYXRlIj4KICAgICAgICAgICAgICAgIHskdGhpcy0+ZXh0cmFjdERhdGUoJGNvbnRleHQpfQogICAgICAgICAgICA8L3RpbWU+CiAgICAgICAgPC9kaXY+CiAgICAgICAgeyR0aGlzLT5yZW5kZXJUYWdzKCR0YWdzKX0KICAgIDwvaGVhZGVyPgogICAgPHNlY3Rpb24gY2xhc3M9ImJvZHkiPgogICAgICAgIDxwIGNsYXNzPSJ0ZXh0LXNtYWxsIj4KICAgICAgICAgICAgJHNvdXJjZURlc2NyaXB0aW9uCiAgICAgICAgPC9wPgogICAgICAgIHskdGhpcy0+ZHVtcGVyLT5kdW1wKCRkYXRhLCB0cnVlKX0KICAgIDwvc2VjdGlvbj4KPC9hcnRpY2xlPgpIVE1MCiAgICAgICAgKTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGV4dHJhY3REYXRlKGFycmF5ICRjb250ZXh0LCBzdHJpbmcgJGZvcm1hdCA9ICdyJyk6IHN0cmluZwogICAgewogICAgICAgIHJldHVybiBkYXRlKCRmb3JtYXQsICRjb250ZXh0Wyd0aW1lc3RhbXAnXSk7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiByZW5kZXJUYWdzKGFycmF5ICR0YWdzKTogc3RyaW5nCiAgICB7CiAgICAgICAgaWYgKCEkdGFncykgewogICAgICAgICAgICByZXR1cm4gJyc7CiAgICAgICAgfQoKICAgICAgICAkcmVuZGVyZWRUYWdzID0gJyc7CiAgICAgICAgZm9yZWFjaCAoJHRhZ3MgYXMgJGtleSA9PiAkdmFsdWUpIHsKICAgICAgICAgICAgJHJlbmRlcmVkVGFncyAuPSBzcHJpbnRmKCc8bGk+PHNwYW4gY2xhc3M9ImJhZGdlIj4lczwvc3Bhbj4lczwvbGk+JywgJGtleSwgJHZhbHVlKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiA8PDxIVE1MCjxkaXYgY2xhc3M9InJvdyI+CiAgICA8dWwgY2xhc3M9InRhZ3MiPgogICAgICAgICRyZW5kZXJlZFRhZ3MKICAgIDwvdWw+CjwvZGl2PgpIVE1MOwogICAgfQp9Cg==AppDevTools/query/vendor/symfony/var-dumper/Command/ServerDumpCommand.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ29tbWFuZDsKCnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXENvbW1hbmRcQ29tbWFuZDsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcSW5wdXRcSW5wdXRJbnRlcmZhY2U7CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXElucHV0XElucHV0T3B0aW9uOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxPdXRwdXRcT3V0cHV0SW50ZXJmYWNlOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxTdHlsZVxTeW1mb255U3R5bGU7CnVzZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2xvbmVyXERhdGE7CnVzZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ29tbWFuZFxEZXNjcmlwdG9yXENsaURlc2NyaXB0b3I7CnVzZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ29tbWFuZFxEZXNjcmlwdG9yXER1bXBEZXNjcmlwdG9ySW50ZXJmYWNlOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENvbW1hbmRcRGVzY3JpcHRvclxIdG1sRGVzY3JpcHRvcjsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxEdW1wZXJcQ2xpRHVtcGVyOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXER1bXBlclxIdG1sRHVtcGVyOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXFNlcnZlclxEdW1wU2VydmVyOwoKLyoqCiAqIFN0YXJ0cyBhIGR1bXAgc2VydmVyIHRvIGNvbGxlY3QgYW5kIG91dHB1dCBkdW1wcyBvbiBhIHNpbmdsZSBwbGFjZSB3aXRoIG11bHRpcGxlIGZvcm1hdHMgc3VwcG9ydC4KICoKICogQGF1dGhvciBNYXhpbWUgU3RlaW5oYXVzc2VyIDxtYXhpbWUuc3RlaW5oYXVzc2VyQGdtYWlsLmNvbT4KICoKICogQGZpbmFsCiAqLwpjbGFzcyBTZXJ2ZXJEdW1wQ29tbWFuZCBleHRlbmRzIENvbW1hbmQKewogICAgcHJvdGVjdGVkIHN0YXRpYyAkZGVmYXVsdE5hbWUgPSAnc2VydmVyOmR1bXAnOwoKICAgIHByaXZhdGUgJHNlcnZlcjsKCiAgICAvKiogQHZhciBEdW1wRGVzY3JpcHRvckludGVyZmFjZVtdICovCiAgICBwcml2YXRlICRkZXNjcmlwdG9yczsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoRHVtcFNlcnZlciAkc2VydmVyLCBhcnJheSAkZGVzY3JpcHRvcnMgPSBhcnJheSgpKQogICAgewogICAgICAgICR0aGlzLT5zZXJ2ZXIgPSAkc2VydmVyOwogICAgICAgICR0aGlzLT5kZXNjcmlwdG9ycyA9ICRkZXNjcmlwdG9ycyArIGFycmF5KAogICAgICAgICAgICAnY2xpJyA9PiBuZXcgQ2xpRGVzY3JpcHRvcihuZXcgQ2xpRHVtcGVyKCkpLAogICAgICAgICAgICAnaHRtbCcgPT4gbmV3IEh0bWxEZXNjcmlwdG9yKG5ldyBIdG1sRHVtcGVyKCkpLAogICAgICAgICk7CgogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoKTsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gY29uZmlndXJlKCkKICAgIHsKICAgICAgICAkYXZhaWxhYmxlRm9ybWF0cyA9IGltcGxvZGUoJywgJywgYXJyYXlfa2V5cygkdGhpcy0+ZGVzY3JpcHRvcnMpKTsKCiAgICAgICAgJHRoaXMKICAgICAgICAgICAgLT5hZGRPcHRpb24oJ2Zvcm1hdCcsIG51bGwsIElucHV0T3B0aW9uOjpWQUxVRV9SRVFVSVJFRCwgc3ByaW50ZignVGhlIG91dHB1dCBmb3JtYXQgKCVzKScsICRhdmFpbGFibGVGb3JtYXRzKSwgJ2NsaScpCiAgICAgICAgICAgIC0+c2V0RGVzY3JpcHRpb24oJ1N0YXJ0cyBhIGR1bXAgc2VydmVyIHRoYXQgY29sbGVjdHMgYW5kIGRpc3BsYXlzIGR1bXBzIGluIGEgc2luZ2xlIHBsYWNlJykKICAgICAgICAgICAgLT5zZXRIZWxwKDw8PCdFT0YnCjxpbmZvPiVjb21tYW5kLm5hbWUlPC9pbmZvPiBzdGFydHMgYSBkdW1wIHNlcnZlciB0aGF0IGNvbGxlY3RzIGFuZCBkaXNwbGF5cwpkdW1wcyBpbiBhIHNpbmdsZSBwbGFjZSBmb3IgZGVidWdnaW5nIHlvdSBhcHBsaWNhdGlvbjoKCiAgPGluZm8+cGhwICVjb21tYW5kLmZ1bGxfbmFtZSU8L2luZm8+CgpZb3UgY2FuIGNvbnN1bHQgZHVtcGVkIGRhdGEgaW4gSFRNTCBmb3JtYXQgaW4geW91ciBicm93c2VyIGJ5IHByb3ZpZGluZyB0aGUgPGNvbW1lbnQ+LS1mb3JtYXQ9aHRtbDwvY29tbWVudD4gb3B0aW9uCmFuZCByZWRpcmVjdGluZyB0aGUgb3V0cHV0IHRvIGEgZmlsZToKCiAgPGluZm8+cGhwICVjb21tYW5kLmZ1bGxfbmFtZSUgLS1mb3JtYXQ9Imh0bWwiID4gZHVtcC5odG1sPC9pbmZvPgoKRU9GCiAgICAgICAgICAgICkKICAgICAgICA7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGV4ZWN1dGUoSW5wdXRJbnRlcmZhY2UgJGlucHV0LCBPdXRwdXRJbnRlcmZhY2UgJG91dHB1dCkKICAgIHsKICAgICAgICAkaW8gPSBuZXcgU3ltZm9ueVN0eWxlKCRpbnB1dCwgJG91dHB1dCk7CiAgICAgICAgJGZvcm1hdCA9ICRpbnB1dC0+Z2V0T3B0aW9uKCdmb3JtYXQnKTsKCiAgICAgICAgaWYgKCEkZGVzY3JpcHRvciA9ICR0aGlzLT5kZXNjcmlwdG9yc1skZm9ybWF0XSA/PyBudWxsKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oc3ByaW50ZignVW5zdXBwb3J0ZWQgZm9ybWF0ICIlcyIuJywgJGZvcm1hdCkpOwogICAgICAgIH0KCiAgICAgICAgJGVycm9ySW8gPSAkaW8tPmdldEVycm9yU3R5bGUoKTsKICAgICAgICAkZXJyb3JJby0+dGl0bGUoJ1N5bWZvbnkgVmFyIER1bXBlciBTZXJ2ZXInKTsKCiAgICAgICAgJHRoaXMtPnNlcnZlci0+c3RhcnQoKTsKCiAgICAgICAgJGVycm9ySW8tPnN1Y2Nlc3Moc3ByaW50ZignU2VydmVyIGxpc3RlbmluZyBvbiAlcycsICR0aGlzLT5zZXJ2ZXItPmdldEhvc3QoKSkpOwogICAgICAgICRlcnJvcklvLT5jb21tZW50KCdRdWl0IHRoZSBzZXJ2ZXIgd2l0aCBDT05UUk9MLUMuJyk7CgogICAgICAgICR0aGlzLT5zZXJ2ZXItPmxpc3RlbihmdW5jdGlvbiAoRGF0YSAkZGF0YSwgYXJyYXkgJGNvbnRleHQsIGludCAkY2xpZW50SWQpIHVzZSAoJGRlc2NyaXB0b3IsICRpbykgewogICAgICAgICAgICAkZGVzY3JpcHRvci0+ZGVzY3JpYmUoJGlvLCAkZGF0YSwgJGNvbnRleHQsICRjbGllbnRJZCk7CiAgICAgICAgfSk7CiAgICB9Cn0KAppDevTools/query/vendor/symfony/var-dumper/Dumper/AbstractDumper.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcRHVtcGVyOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDbG9uZXJcRGF0YTsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDbG9uZXJcRHVtcGVySW50ZXJmYWNlOwoKLyoqCiAqIEFic3RyYWN0IG1lY2hhbmlzbSBmb3IgZHVtcGluZyBhIERhdGEgb2JqZWN0LgogKgogKiBAYXV0aG9yIE5pY29sYXMgR3Jla2FzIDxwQHRjaHdvcmsuY29tPgogKi8KYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3REdW1wZXIgaW1wbGVtZW50cyBEYXRhRHVtcGVySW50ZXJmYWNlLCBEdW1wZXJJbnRlcmZhY2UKewogICAgY29uc3QgRFVNUF9MSUdIVF9BUlJBWSA9IDE7CiAgICBjb25zdCBEVU1QX1NUUklOR19MRU5HVEggPSAyOwogICAgY29uc3QgRFVNUF9DT01NQV9TRVBBUkFUT1IgPSA0OwogICAgY29uc3QgRFVNUF9UUkFJTElOR19DT01NQSA9IDg7CgogICAgcHVibGljIHN0YXRpYyAkZGVmYXVsdE91dHB1dCA9ICdwaHA6Ly9vdXRwdXQnOwoKICAgIHByb3RlY3RlZCAkbGluZSA9ICcnOwogICAgcHJvdGVjdGVkICRsaW5lRHVtcGVyOwogICAgcHJvdGVjdGVkICRvdXRwdXRTdHJlYW07CiAgICBwcm90ZWN0ZWQgJGRlY2ltYWxQb2ludDsgLy8gVGhpcyBpcyBsb2NhbGUgZGVwZW5kZW50CiAgICBwcm90ZWN0ZWQgJGluZGVudFBhZCA9ICcgICc7CiAgICBwcm90ZWN0ZWQgJGZsYWdzOwoKICAgIHByaXZhdGUgJGNoYXJzZXQ7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gY2FsbGFibGV8cmVzb3VyY2V8c3RyaW5nfG51bGwgJG91dHB1dCAgQSBsaW5lIGR1bXBlciBjYWxsYWJsZSwgYW4gb3BlbmVkIHN0cmVhbSBvciBhbiBvdXRwdXQgcGF0aCwgZGVmYXVsdHMgdG8gc3RhdGljOjokZGVmYXVsdE91dHB1dAogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAgICAgICAgICAgICAgICAgICRjaGFyc2V0IFRoZSBkZWZhdWx0IGNoYXJhY3RlciBlbmNvZGluZyB0byB1c2UgZm9yIG5vbi1VVEY4IHN0cmluZ3MKICAgICAqIEBwYXJhbSBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAkZmxhZ3MgICBBIGJpdCBmaWVsZCBvZiBzdGF0aWM6OkRVTVBfKiBjb25zdGFudHMgdG8gZmluZSB0dW5lIGR1bXBzIHJlcHJlc2VudGF0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkb3V0cHV0ID0gbnVsbCwgc3RyaW5nICRjaGFyc2V0ID0gbnVsbCwgaW50ICRmbGFncyA9IDApCiAgICB7CiAgICAgICAgJHRoaXMtPmZsYWdzID0gJGZsYWdzOwogICAgICAgICR0aGlzLT5zZXRDaGFyc2V0KCRjaGFyc2V0ID86IGluaV9nZXQoJ3BocC5vdXRwdXRfZW5jb2RpbmcnKSA/OiBpbmlfZ2V0KCdkZWZhdWx0X2NoYXJzZXQnKSA/OiAnVVRGLTgnKTsKICAgICAgICAkdGhpcy0+ZGVjaW1hbFBvaW50ID0gbG9jYWxlY29udigpOwogICAgICAgICR0aGlzLT5kZWNpbWFsUG9pbnQgPSAkdGhpcy0+ZGVjaW1hbFBvaW50WydkZWNpbWFsX3BvaW50J107CiAgICAgICAgJHRoaXMtPnNldE91dHB1dCgkb3V0cHV0ID86IHN0YXRpYzo6JGRlZmF1bHRPdXRwdXQpOwogICAgICAgIGlmICghJG91dHB1dCAmJiBpc19zdHJpbmcoc3RhdGljOjokZGVmYXVsdE91dHB1dCkpIHsKICAgICAgICAgICAgc3RhdGljOjokZGVmYXVsdE91dHB1dCA9ICR0aGlzLT5vdXRwdXRTdHJlYW07CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgb3V0cHV0IGRlc3RpbmF0aW9uIG9mIHRoZSBkdW1wcy4KICAgICAqCiAgICAgKiBAcGFyYW0gY2FsbGFibGV8cmVzb3VyY2V8c3RyaW5nICRvdXRwdXQgQSBsaW5lIGR1bXBlciBjYWxsYWJsZSwgYW4gb3BlbmVkIHN0cmVhbSBvciBhbiBvdXRwdXQgcGF0aAogICAgICoKICAgICAqIEByZXR1cm4gY2FsbGFibGV8cmVzb3VyY2V8c3RyaW5nIFRoZSBwcmV2aW91cyBvdXRwdXQgZGVzdGluYXRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldE91dHB1dCgkb3V0cHV0KQogICAgewogICAgICAgICRwcmV2ID0gbnVsbCAhPT0gJHRoaXMtPm91dHB1dFN0cmVhbSA/ICR0aGlzLT5vdXRwdXRTdHJlYW0gOiAkdGhpcy0+bGluZUR1bXBlcjsKCiAgICAgICAgaWYgKGlzX2NhbGxhYmxlKCRvdXRwdXQpKSB7CiAgICAgICAgICAgICR0aGlzLT5vdXRwdXRTdHJlYW0gPSBudWxsOwogICAgICAgICAgICAkdGhpcy0+bGluZUR1bXBlciA9ICRvdXRwdXQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKGlzX3N0cmluZygkb3V0cHV0KSkgewogICAgICAgICAgICAgICAgJG91dHB1dCA9IGZvcGVuKCRvdXRwdXQsICd3YicpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICR0aGlzLT5vdXRwdXRTdHJlYW0gPSAkb3V0cHV0OwogICAgICAgICAgICAkdGhpcy0+bGluZUR1bXBlciA9IGFycmF5KCR0aGlzLCAnZWNob0xpbmUnKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcHJldjsKICAgIH0KCiAgICAvKioKICAgICAqIFNldHMgdGhlIGRlZmF1bHQgY2hhcmFjdGVyIGVuY29kaW5nIHRvIHVzZSBmb3Igbm9uLVVURjggc3RyaW5ncy4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjaGFyc2V0IFRoZSBkZWZhdWx0IGNoYXJhY3RlciBlbmNvZGluZyB0byB1c2UgZm9yIG5vbi1VVEY4IHN0cmluZ3MKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgcHJldmlvdXMgY2hhcnNldAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0Q2hhcnNldCgkY2hhcnNldCkKICAgIHsKICAgICAgICAkcHJldiA9ICR0aGlzLT5jaGFyc2V0OwoKICAgICAgICAkY2hhcnNldCA9IHN0cnRvdXBwZXIoJGNoYXJzZXQpOwogICAgICAgICRjaGFyc2V0ID0gbnVsbCA9PT0gJGNoYXJzZXQgfHwgJ1VURi04JyA9PT0gJGNoYXJzZXQgfHwgJ1VURjgnID09PSAkY2hhcnNldCA/ICdDUDEyNTInIDogJGNoYXJzZXQ7CgogICAgICAgICR0aGlzLT5jaGFyc2V0ID0gJGNoYXJzZXQ7CgogICAgICAgIHJldHVybiAkcHJldjsKICAgIH0KCiAgICAvKioKICAgICAqIFNldHMgdGhlIGluZGVudGF0aW9uIHBhZCBzdHJpbmcuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcGFkIEEgc3RyaW5nIHRoYXQgd2lsbCBiZSBwcmVwZW5kZWQgdG8gZHVtcGVkIGxpbmVzLCByZXBlYXRlZCBieSBuZXN0aW5nIGxldmVsCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgVGhlIHByZXZpb3VzIGluZGVudCBwYWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldEluZGVudFBhZCgkcGFkKQogICAgewogICAgICAgICRwcmV2ID0gJHRoaXMtPmluZGVudFBhZDsKICAgICAgICAkdGhpcy0+aW5kZW50UGFkID0gJHBhZDsKCiAgICAgICAgcmV0dXJuICRwcmV2OwogICAgfQoKICAgIC8qKgogICAgICogRHVtcHMgYSBEYXRhIG9iamVjdC4KICAgICAqCiAgICAgKiBAcGFyYW0gRGF0YSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGF0YSAgIEEgRGF0YSBvYmplY3QKICAgICAqIEBwYXJhbSBjYWxsYWJsZXxyZXNvdXJjZXxzdHJpbmd8dHJ1ZXxudWxsICRvdXRwdXQgQSBsaW5lIGR1bXBlciBjYWxsYWJsZSwgYW4gb3BlbmVkIHN0cmVhbSwgYW4gb3V0cHV0IHBhdGggb3IgdHJ1ZSB0byByZXR1cm4gdGhlIGR1bXAKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xudWxsIFRoZSBkdW1wIGFzIHN0cmluZyB3aGVuICRvdXRwdXQgaXMgdHJ1ZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZHVtcChEYXRhICRkYXRhLCAkb3V0cHV0ID0gbnVsbCkKICAgIHsKICAgICAgICAkdGhpcy0+ZGVjaW1hbFBvaW50ID0gbG9jYWxlY29udigpOwogICAgICAgICR0aGlzLT5kZWNpbWFsUG9pbnQgPSAkdGhpcy0+ZGVjaW1hbFBvaW50WydkZWNpbWFsX3BvaW50J107CgogICAgICAgIGlmICgkbG9jYWxlID0gJHRoaXMtPmZsYWdzICYgKHNlbGY6OkRVTVBfQ09NTUFfU0VQQVJBVE9SIHwgc2VsZjo6RFVNUF9UUkFJTElOR19DT01NQSkgPyBzZXRsb2NhbGUoTENfTlVNRVJJQywgMCkgOiBudWxsKSB7CiAgICAgICAgICAgIHNldGxvY2FsZShMQ19OVU1FUklDLCAnQycpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRyZXR1cm5EdW1wID0gdHJ1ZSA9PT0gJG91dHB1dCkgewogICAgICAgICAgICAkb3V0cHV0ID0gZm9wZW4oJ3BocDovL21lbW9yeScsICdyK2InKTsKICAgICAgICB9CiAgICAgICAgaWYgKCRvdXRwdXQpIHsKICAgICAgICAgICAgJHByZXZPdXRwdXQgPSAkdGhpcy0+c2V0T3V0cHV0KCRvdXRwdXQpOwogICAgICAgIH0KICAgICAgICB0cnkgewogICAgICAgICAgICAkZGF0YS0+ZHVtcCgkdGhpcyk7CiAgICAgICAgICAgICR0aGlzLT5kdW1wTGluZSgtMSk7CgogICAgICAgICAgICBpZiAoJHJldHVybkR1bXApIHsKICAgICAgICAgICAgICAgICRyZXN1bHQgPSBzdHJlYW1fZ2V0X2NvbnRlbnRzKCRvdXRwdXQsIC0xLCAwKTsKICAgICAgICAgICAgICAgIGZjbG9zZSgkb3V0cHV0KTsKCiAgICAgICAgICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgICAgICAgICAgfQogICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgIGlmICgkb3V0cHV0KSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+c2V0T3V0cHV0KCRwcmV2T3V0cHV0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoJGxvY2FsZSkgewogICAgICAgICAgICAgICAgc2V0bG9jYWxlKExDX05VTUVSSUMsICRsb2NhbGUpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogRHVtcHMgdGhlIGN1cnJlbnQgbGluZS4KICAgICAqCiAgICAgKiBAcGFyYW0gaW50ICRkZXB0aCBUaGUgcmVjdXJzaXZlIGRlcHRoIGluIHRoZSBkdW1wZWQgc3RydWN0dXJlIGZvciB0aGUgbGluZSBiZWluZyBkdW1wZWQsCiAgICAgKiAgICAgICAgICAgICAgICAgICBvciAtMSB0byBzaWduYWwgdGhlIGVuZC1vZi1kdW1wIHRvIHRoZSBsaW5lIGR1bXBlciBjYWxsYWJsZQogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZHVtcExpbmUoJGRlcHRoKQogICAgewogICAgICAgIFxjYWxsX3VzZXJfZnVuYygkdGhpcy0+bGluZUR1bXBlciwgJHRoaXMtPmxpbmUsICRkZXB0aCwgJHRoaXMtPmluZGVudFBhZCk7CiAgICAgICAgJHRoaXMtPmxpbmUgPSAnJzsKICAgIH0KCiAgICAvKioKICAgICAqIEdlbmVyaWMgbGluZSBkdW1wZXIgY2FsbGJhY2suCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbGluZSAgICAgIFRoZSBsaW5lIHRvIHdyaXRlCiAgICAgKiBAcGFyYW0gaW50ICAgICRkZXB0aCAgICAgVGhlIHJlY3Vyc2l2ZSBkZXB0aCBpbiB0aGUgZHVtcGVkIHN0cnVjdHVyZQogICAgICogQHBhcmFtIHN0cmluZyAkaW5kZW50UGFkIFRoZSBsaW5lIGluZGVudCBwYWQKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGVjaG9MaW5lKCRsaW5lLCAkZGVwdGgsICRpbmRlbnRQYWQpCiAgICB7CiAgICAgICAgaWYgKC0xICE9PSAkZGVwdGgpIHsKICAgICAgICAgICAgZndyaXRlKCR0aGlzLT5vdXRwdXRTdHJlYW0sIHN0cl9yZXBlYXQoJGluZGVudFBhZCwgJGRlcHRoKS4kbGluZS4iXG4iKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBDb252ZXJ0cyBhIG5vbi1VVEYtOCBzdHJpbmcgdG8gVVRGLTguCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcyBUaGUgbm9uLVVURi04IHN0cmluZyB0byBjb252ZXJ0CiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcgVGhlIHN0cmluZyBjb252ZXJ0ZWQgdG8gVVRGLTgKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHV0ZjhFbmNvZGUoJHMpCiAgICB7CiAgICAgICAgaWYgKHByZWdfbWF0Y2goJy8vdScsICRzKSkgewogICAgICAgICAgICByZXR1cm4gJHM7CiAgICAgICAgfQoKICAgICAgICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygnaWNvbnYnKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ1VuYWJsZSB0byBjb252ZXJ0IGEgbm9uLVVURi04IHN0cmluZyB0byBVVEYtODogcmVxdWlyZWQgZnVuY3Rpb24gaWNvbnYoKSBkb2VzIG5vdCBleGlzdC4gWW91IHNob3VsZCBpbnN0YWxsIGV4dC1pY29udiBvciBzeW1mb255L3BvbHlmaWxsLWljb252LicpOwogICAgICAgIH0KCiAgICAgICAgaWYgKGZhbHNlICE9PSAkYyA9IEBpY29udigkdGhpcy0+Y2hhcnNldCwgJ1VURi04JywgJHMpKSB7CiAgICAgICAgICAgIHJldHVybiAkYzsKICAgICAgICB9CiAgICAgICAgaWYgKCdDUDEyNTInICE9PSAkdGhpcy0+Y2hhcnNldCAmJiBmYWxzZSAhPT0gJGMgPSBAaWNvbnYoJ0NQMTI1MicsICdVVEYtOCcsICRzKSkgewogICAgICAgICAgICByZXR1cm4gJGM7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaWNvbnYoJ0NQODUwJywgJ1VURi04JywgJHMpOwogICAgfQp9Cg==AppDevTools/query/vendor/symfony/var-dumper/Dumper/CliDumper.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcRHVtcGVyOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDbG9uZXJcQ3Vyc29yOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENsb25lclxTdHViOwoKLyoqCiAqIENsaUR1bXBlciBkdW1wcyB2YXJpYWJsZXMgZm9yIGNvbW1hbmQgbGluZSBvdXRwdXQuCiAqCiAqIEBhdXRob3IgTmljb2xhcyBHcmVrYXMgPHBAdGNod29yay5jb20+CiAqLwpjbGFzcyBDbGlEdW1wZXIgZXh0ZW5kcyBBYnN0cmFjdER1bXBlcgp7CiAgICBwdWJsaWMgc3RhdGljICRkZWZhdWx0Q29sb3JzOwogICAgcHVibGljIHN0YXRpYyAkZGVmYXVsdE91dHB1dCA9ICdwaHA6Ly9zdGRvdXQnOwoKICAgIHByb3RlY3RlZCAkY29sb3JzOwogICAgcHJvdGVjdGVkICRtYXhTdHJpbmdXaWR0aCA9IDA7CiAgICBwcm90ZWN0ZWQgJHN0eWxlcyA9IGFycmF5KAogICAgICAgIC8vIFNlZSBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0FOU0lfZXNjYXBlX2NvZGUjZ3JhcGhpY3MKICAgICAgICAnZGVmYXVsdCcgPT4gJzM4OzU7MjA4JywKICAgICAgICAnbnVtJyA9PiAnMTszODs1OzM4JywKICAgICAgICAnY29uc3QnID0+ICcxOzM4OzU7MjA4JywKICAgICAgICAnc3RyJyA9PiAnMTszODs1OzExMycsCiAgICAgICAgJ25vdGUnID0+ICczODs1OzM4JywKICAgICAgICAncmVmJyA9PiAnMzg7NTsyNDcnLAogICAgICAgICdwdWJsaWMnID0+ICcnLAogICAgICAgICdwcm90ZWN0ZWQnID0+ICcnLAogICAgICAgICdwcml2YXRlJyA9PiAnJywKICAgICAgICAnbWV0YScgPT4gJzM4OzU7MTcwJywKICAgICAgICAna2V5JyA9PiAnMzg7NTsxMTMnLAogICAgICAgICdpbmRleCcgPT4gJzM4OzU7MzgnLAogICAgKTsKCiAgICBwcm90ZWN0ZWQgc3RhdGljICRjb250cm9sQ2hhcnNSeCA9ICcvW1x4MDAtXHgxRlx4N0ZdKy8nOwogICAgcHJvdGVjdGVkIHN0YXRpYyAkY29udHJvbENoYXJzTWFwID0gYXJyYXkoCiAgICAgICAgIlx0IiA9PiAnXHQnLAogICAgICAgICJcbiIgPT4gJ1xuJywKICAgICAgICAiXHYiID0+ICdcdicsCiAgICAgICAgIlxmIiA9PiAnXGYnLAogICAgICAgICJcciIgPT4gJ1xyJywKICAgICAgICAiXDAzMyIgPT4gJ1xlJywKICAgICk7CgogICAgcHJvdGVjdGVkICRjb2xsYXBzZU5leHRIYXNoID0gZmFsc2U7CiAgICBwcm90ZWN0ZWQgJGV4cGFuZE5leHRIYXNoID0gZmFsc2U7CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkb3V0cHV0ID0gbnVsbCwgc3RyaW5nICRjaGFyc2V0ID0gbnVsbCwgaW50ICRmbGFncyA9IDApCiAgICB7CiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgkb3V0cHV0LCAkY2hhcnNldCwgJGZsYWdzKTsKCiAgICAgICAgaWYgKCdcXCcgPT09IERJUkVDVE9SWV9TRVBBUkFUT1IgJiYgISR0aGlzLT5pc1dpbmRvd3NUcnVlQ29sb3IoKSkgewogICAgICAgICAgICAvLyBVc2Ugb25seSB0aGUgYmFzZSAxNiB4dGVybSBjb2xvcnMgd2hlbiB1c2luZyBBTlNJQ09OIG9yIHN0YW5kYXJkIFdpbmRvd3MgMTAgQ0xJCiAgICAgICAgICAgICR0aGlzLT5zZXRTdHlsZXMoYXJyYXkoCiAgICAgICAgICAgICAgICAnZGVmYXVsdCcgPT4gJzMxJywKICAgICAgICAgICAgICAgICdudW0nID0+ICcxOzM0JywKICAgICAgICAgICAgICAgICdjb25zdCcgPT4gJzE7MzEnLAogICAgICAgICAgICAgICAgJ3N0cicgPT4gJzE7MzInLAogICAgICAgICAgICAgICAgJ25vdGUnID0+ICczNCcsCiAgICAgICAgICAgICAgICAncmVmJyA9PiAnMTszMCcsCiAgICAgICAgICAgICAgICAnbWV0YScgPT4gJzM1JywKICAgICAgICAgICAgICAgICdrZXknID0+ICczMicsCiAgICAgICAgICAgICAgICAnaW5kZXgnID0+ICczNCcsCiAgICAgICAgICAgICkpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEVuYWJsZXMvZGlzYWJsZXMgY29sb3JlZCBvdXRwdXQuCiAgICAgKgogICAgICogQHBhcmFtIGJvb2wgJGNvbG9ycwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0Q29sb3JzKCRjb2xvcnMpCiAgICB7CiAgICAgICAgJHRoaXMtPmNvbG9ycyA9IChib29sKSAkY29sb3JzOwogICAgfQoKICAgIC8qKgogICAgICogU2V0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgY2hhcmFjdGVycyBwZXIgbGluZSBmb3IgZHVtcGVkIHN0cmluZ3MuCiAgICAgKgogICAgICogQHBhcmFtIGludCAkbWF4U3RyaW5nV2lkdGgKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldE1heFN0cmluZ1dpZHRoKCRtYXhTdHJpbmdXaWR0aCkKICAgIHsKICAgICAgICAkdGhpcy0+bWF4U3RyaW5nV2lkdGggPSAoaW50KSAkbWF4U3RyaW5nV2lkdGg7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb25maWd1cmVzIHN0eWxlcy4KICAgICAqCiAgICAgKiBAcGFyYW0gYXJyYXkgJHN0eWxlcyBBIG1hcCBvZiBzdHlsZSBuYW1lcyB0byBzdHlsZSBkZWZpbml0aW9ucwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0U3R5bGVzKGFycmF5ICRzdHlsZXMpCiAgICB7CiAgICAgICAgJHRoaXMtPnN0eWxlcyA9ICRzdHlsZXMgKyAkdGhpcy0+c3R5bGVzOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZHVtcFNjYWxhcihDdXJzb3IgJGN1cnNvciwgJHR5cGUsICR2YWx1ZSkKICAgIHsKICAgICAgICAkdGhpcy0+ZHVtcEtleSgkY3Vyc29yKTsKCiAgICAgICAgJHN0eWxlID0gJ2NvbnN0JzsKICAgICAgICAkYXR0ciA9ICRjdXJzb3ItPmF0dHI7CgogICAgICAgIHN3aXRjaCAoJHR5cGUpIHsKICAgICAgICAgICAgY2FzZSAnZGVmYXVsdCc6CiAgICAgICAgICAgICAgICAkc3R5bGUgPSAnZGVmYXVsdCc7CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgJ2ludGVnZXInOgogICAgICAgICAgICAgICAgJHN0eWxlID0gJ251bSc7CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgJ2RvdWJsZSc6CiAgICAgICAgICAgICAgICAkc3R5bGUgPSAnbnVtJzsKCiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRydWUpIHsKICAgICAgICAgICAgICAgICAgICBjYXNlIElORiA9PT0gJHZhbHVlOiAgJHZhbHVlID0gJ0lORic7IGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgLUlORiA9PT0gJHZhbHVlOiAkdmFsdWUgPSAnLUlORic7IGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgaXNfbmFuKCR2YWx1ZSk6ICAkdmFsdWUgPSAnTkFOJzsgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgJHZhbHVlID0gKHN0cmluZykgJHZhbHVlOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmFsc2UgPT09IHN0cnBvcygkdmFsdWUsICR0aGlzLT5kZWNpbWFsUG9pbnQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdmFsdWUgLj0gJHRoaXMtPmRlY2ltYWxQb2ludC4nMCc7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgJ05VTEwnOgogICAgICAgICAgICAgICAgJHZhbHVlID0gJ251bGwnOwogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBjYXNlICdib29sZWFuJzoKICAgICAgICAgICAgICAgICR2YWx1ZSA9ICR2YWx1ZSA/ICd0cnVlJyA6ICdmYWxzZSc7CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAkYXR0ciArPSBhcnJheSgndmFsdWUnID0+ICR0aGlzLT51dGY4RW5jb2RlKCR2YWx1ZSkpOwogICAgICAgICAgICAgICAgJHZhbHVlID0gJHRoaXMtPnV0ZjhFbmNvZGUoJHR5cGUpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+bGluZSAuPSAkdGhpcy0+c3R5bGUoJHN0eWxlLCAkdmFsdWUsICRhdHRyKTsKCiAgICAgICAgJHRoaXMtPmVuZFZhbHVlKCRjdXJzb3IpOwogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZHVtcFN0cmluZyhDdXJzb3IgJGN1cnNvciwgJHN0ciwgJGJpbiwgJGN1dCkKICAgIHsKICAgICAgICAkdGhpcy0+ZHVtcEtleSgkY3Vyc29yKTsKICAgICAgICAkYXR0ciA9ICRjdXJzb3ItPmF0dHI7CgogICAgICAgIGlmICgkYmluKSB7CiAgICAgICAgICAgICRzdHIgPSAkdGhpcy0+dXRmOEVuY29kZSgkc3RyKTsKICAgICAgICB9CiAgICAgICAgaWYgKCcnID09PSAkc3RyKSB7CiAgICAgICAgICAgICR0aGlzLT5saW5lIC49ICciIic7CiAgICAgICAgICAgICR0aGlzLT5lbmRWYWx1ZSgkY3Vyc29yKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkYXR0ciArPSBhcnJheSgKICAgICAgICAgICAgICAgICdsZW5ndGgnID0+IDAgPD0gJGN1dCA/IG1iX3N0cmxlbigkc3RyLCAnVVRGLTgnKSArICRjdXQgOiAwLAogICAgICAgICAgICAgICAgJ2JpbmFyeScgPT4gJGJpbiwKICAgICAgICAgICAgKTsKICAgICAgICAgICAgJHN0ciA9IGV4cGxvZGUoIlxuIiwgJHN0cik7CiAgICAgICAgICAgIGlmIChpc3NldCgkc3RyWzFdKSAmJiAhaXNzZXQoJHN0clsyXSkgJiYgIWlzc2V0KCRzdHJbMV1bMF0pKSB7CiAgICAgICAgICAgICAgICB1bnNldCgkc3RyWzFdKTsKICAgICAgICAgICAgICAgICRzdHJbMF0gLj0gIlxuIjsKICAgICAgICAgICAgfQogICAgICAgICAgICAkbSA9IGNvdW50KCRzdHIpIC0gMTsKICAgICAgICAgICAgJGkgPSAkbGluZUN1dCA9IDA7CgogICAgICAgICAgICBpZiAoc2VsZjo6RFVNUF9TVFJJTkdfTEVOR1RIICYgJHRoaXMtPmZsYWdzKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+bGluZSAuPSAnKCcuJGF0dHJbJ2xlbmd0aCddLicpICc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCRiaW4pIHsKICAgICAgICAgICAgICAgICR0aGlzLT5saW5lIC49ICdiJzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCRtKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+bGluZSAuPSAnIiIiJzsKICAgICAgICAgICAgICAgICR0aGlzLT5kdW1wTGluZSgkY3Vyc29yLT5kZXB0aCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+bGluZSAuPSAnIic7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGZvcmVhY2ggKCRzdHIgYXMgJHN0cikgewogICAgICAgICAgICAgICAgaWYgKCRpIDwgJG0pIHsKICAgICAgICAgICAgICAgICAgICAkc3RyIC49ICJcbiI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoMCA8ICR0aGlzLT5tYXhTdHJpbmdXaWR0aCAmJiAkdGhpcy0+bWF4U3RyaW5nV2lkdGggPCAkbGVuID0gbWJfc3RybGVuKCRzdHIsICdVVEYtOCcpKSB7CiAgICAgICAgICAgICAgICAgICAgJHN0ciA9IG1iX3N1YnN0cigkc3RyLCAwLCAkdGhpcy0+bWF4U3RyaW5nV2lkdGgsICdVVEYtOCcpOwogICAgICAgICAgICAgICAgICAgICRsaW5lQ3V0ID0gJGxlbiAtICR0aGlzLT5tYXhTdHJpbmdXaWR0aDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICgkbSAmJiAwIDwgJGN1cnNvci0+ZGVwdGgpIHsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+bGluZSAuPSAkdGhpcy0+aW5kZW50UGFkOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCcnICE9PSAkc3RyKSB7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmxpbmUgLj0gJHRoaXMtPnN0eWxlKCdzdHInLCAkc3RyLCAkYXR0cik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoJGkrKyA9PSAkbSkgewogICAgICAgICAgICAgICAgICAgIGlmICgkbSkgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJycgIT09ICRzdHIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5kdW1wTGluZSgkY3Vyc29yLT5kZXB0aCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoMCA8ICRjdXJzb3ItPmRlcHRoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmxpbmUgLj0gJHRoaXMtPmluZGVudFBhZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+bGluZSAuPSAnIiIiJzsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+bGluZSAuPSAnIic7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGlmICgkY3V0IDwgMCkgewogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+bGluZSAuPSAn4oCmJzsKICAgICAgICAgICAgICAgICAgICAgICAgJGxpbmVDdXQgPSAwOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkY3V0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRsaW5lQ3V0ICs9ICRjdXQ7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKCRsaW5lQ3V0KSB7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmxpbmUgLj0gJ+KApicuJGxpbmVDdXQ7CiAgICAgICAgICAgICAgICAgICAgJGxpbmVDdXQgPSAwOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmICgkaSA+ICRtKSB7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmVuZFZhbHVlKCRjdXJzb3IpOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZHVtcExpbmUoJGN1cnNvci0+ZGVwdGgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZW50ZXJIYXNoKEN1cnNvciAkY3Vyc29yLCAkdHlwZSwgJGNsYXNzLCAkaGFzQ2hpbGQpCiAgICB7CiAgICAgICAgJHRoaXMtPmR1bXBLZXkoJGN1cnNvcik7CgogICAgICAgIGlmICgkdGhpcy0+Y29sbGFwc2VOZXh0SGFzaCkgewogICAgICAgICAgICAkY3Vyc29yLT5za2lwQ2hpbGRyZW4gPSB0cnVlOwogICAgICAgICAgICAkdGhpcy0+Y29sbGFwc2VOZXh0SGFzaCA9ICRoYXNDaGlsZCA9IGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgJGNsYXNzID0gJHRoaXMtPnV0ZjhFbmNvZGUoJGNsYXNzKTsKICAgICAgICBpZiAoQ3Vyc29yOjpIQVNIX09CSkVDVCA9PT0gJHR5cGUpIHsKICAgICAgICAgICAgJHByZWZpeCA9ICRjbGFzcyAmJiAnc3RkQ2xhc3MnICE9PSAkY2xhc3MgPyAkdGhpcy0+c3R5bGUoJ25vdGUnLCAkY2xhc3MpLicgeycgOiAneyc7CiAgICAgICAgfSBlbHNlaWYgKEN1cnNvcjo6SEFTSF9SRVNPVVJDRSA9PT0gJHR5cGUpIHsKICAgICAgICAgICAgJHByZWZpeCA9ICR0aGlzLT5zdHlsZSgnbm90ZScsICRjbGFzcy4nIHJlc291cmNlJykuKCRoYXNDaGlsZCA/ICcgeycgOiAnICcpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRwcmVmaXggPSAkY2xhc3MgJiYgIShzZWxmOjpEVU1QX0xJR0hUX0FSUkFZICYgJHRoaXMtPmZsYWdzKSA/ICR0aGlzLT5zdHlsZSgnbm90ZScsICdhcnJheTonLiRjbGFzcykuJyBbJyA6ICdbJzsKICAgICAgICB9CgogICAgICAgIGlmICgkY3Vyc29yLT5zb2Z0UmVmQ291bnQgfHwgMCA8ICRjdXJzb3ItPnNvZnRSZWZIYW5kbGUpIHsKICAgICAgICAgICAgJHByZWZpeCAuPSAkdGhpcy0+c3R5bGUoJ3JlZicsIChDdXJzb3I6OkhBU0hfUkVTT1VSQ0UgPT09ICR0eXBlID8gJ0AnIDogJyMnKS4oMCA8ICRjdXJzb3ItPnNvZnRSZWZIYW5kbGUgPyAkY3Vyc29yLT5zb2Z0UmVmSGFuZGxlIDogJGN1cnNvci0+c29mdFJlZlRvKSwgYXJyYXkoJ2NvdW50JyA9PiAkY3Vyc29yLT5zb2Z0UmVmQ291bnQpKTsKICAgICAgICB9IGVsc2VpZiAoJGN1cnNvci0+aGFyZFJlZlRvICYmICEkY3Vyc29yLT5yZWZJbmRleCAmJiAkY2xhc3MpIHsKICAgICAgICAgICAgJHByZWZpeCAuPSAkdGhpcy0+c3R5bGUoJ3JlZicsICcmJy4kY3Vyc29yLT5oYXJkUmVmVG8sIGFycmF5KCdjb3VudCcgPT4gJGN1cnNvci0+aGFyZFJlZkNvdW50KSk7CiAgICAgICAgfSBlbHNlaWYgKCEkaGFzQ2hpbGQgJiYgQ3Vyc29yOjpIQVNIX1JFU09VUkNFID09PSAkdHlwZSkgewogICAgICAgICAgICAkcHJlZml4ID0gc3Vic3RyKCRwcmVmaXgsIDAsIC0xKTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5saW5lIC49ICRwcmVmaXg7CgogICAgICAgIGlmICgkaGFzQ2hpbGQpIHsKICAgICAgICAgICAgJHRoaXMtPmR1bXBMaW5lKCRjdXJzb3ItPmRlcHRoKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsZWF2ZUhhc2goQ3Vyc29yICRjdXJzb3IsICR0eXBlLCAkY2xhc3MsICRoYXNDaGlsZCwgJGN1dCkKICAgIHsKICAgICAgICAkdGhpcy0+ZHVtcEVsbGlwc2lzKCRjdXJzb3IsICRoYXNDaGlsZCwgJGN1dCk7CiAgICAgICAgJHRoaXMtPmxpbmUgLj0gQ3Vyc29yOjpIQVNIX09CSkVDVCA9PT0gJHR5cGUgPyAnfScgOiAoQ3Vyc29yOjpIQVNIX1JFU09VUkNFICE9PSAkdHlwZSA/ICddJyA6ICgkaGFzQ2hpbGQgPyAnfScgOiAnJykpOwogICAgICAgICR0aGlzLT5lbmRWYWx1ZSgkY3Vyc29yKTsKICAgIH0KCiAgICAvKioKICAgICAqIER1bXBzIGFuIGVsbGlwc2lzIGZvciBjdXQgY2hpbGRyZW4uCiAgICAgKgogICAgICogQHBhcmFtIEN1cnNvciAkY3Vyc29yICAgVGhlIEN1cnNvciBwb3NpdGlvbiBpbiB0aGUgZHVtcAogICAgICogQHBhcmFtIGJvb2wgICAkaGFzQ2hpbGQgV2hlbiB0aGUgZHVtcCBvZiB0aGUgaGFzaCBoYXMgY2hpbGQgaXRlbQogICAgICogQHBhcmFtIGludCAgICAkY3V0ICAgICAgVGhlIG51bWJlciBvZiBpdGVtcyB0aGUgaGFzaCBoYXMgYmVlbiBjdXQgYnkKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGR1bXBFbGxpcHNpcyhDdXJzb3IgJGN1cnNvciwgJGhhc0NoaWxkLCAkY3V0KQogICAgewogICAgICAgIGlmICgkY3V0KSB7CiAgICAgICAgICAgICR0aGlzLT5saW5lIC49ICcg4oCmJzsKICAgICAgICAgICAgaWYgKDAgPCAkY3V0KSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+bGluZSAuPSAkY3V0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgkaGFzQ2hpbGQpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5kdW1wTGluZSgkY3Vyc29yLT5kZXB0aCArIDEpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogRHVtcHMgYSBrZXkgaW4gYSBoYXNoIHN0cnVjdHVyZS4KICAgICAqCiAgICAgKiBAcGFyYW0gQ3Vyc29yICRjdXJzb3IgVGhlIEN1cnNvciBwb3NpdGlvbiBpbiB0aGUgZHVtcAogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZHVtcEtleShDdXJzb3IgJGN1cnNvcikKICAgIHsKICAgICAgICBpZiAobnVsbCAhPT0gJGtleSA9ICRjdXJzb3ItPmhhc2hLZXkpIHsKICAgICAgICAgICAgaWYgKCRjdXJzb3ItPmhhc2hLZXlJc0JpbmFyeSkgewogICAgICAgICAgICAgICAgJGtleSA9ICR0aGlzLT51dGY4RW5jb2RlKCRrZXkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICRhdHRyID0gYXJyYXkoJ2JpbmFyeScgPT4gJGN1cnNvci0+aGFzaEtleUlzQmluYXJ5KTsKICAgICAgICAgICAgJGJpbiA9ICRjdXJzb3ItPmhhc2hLZXlJc0JpbmFyeSA/ICdiJyA6ICcnOwogICAgICAgICAgICAkc3R5bGUgPSAna2V5JzsKICAgICAgICAgICAgc3dpdGNoICgkY3Vyc29yLT5oYXNoVHlwZSkgewogICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIGNhc2UgQ3Vyc29yOjpIQVNIX0lOREVYRUQ6CiAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGY6OkRVTVBfTElHSFRfQVJSQVkgJiAkdGhpcy0+ZmxhZ3MpIHsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICRzdHlsZSA9ICdpbmRleCc7CiAgICAgICAgICAgICAgICAgICAgLy8gbm8gYnJlYWsKICAgICAgICAgICAgICAgIGNhc2UgQ3Vyc29yOjpIQVNIX0FTU09DOgogICAgICAgICAgICAgICAgICAgIGlmIChpc19pbnQoJGtleSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmxpbmUgLj0gJHRoaXMtPnN0eWxlKCRzdHlsZSwgJGtleSkuJyA9PiAnOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5saW5lIC49ICRiaW4uJyInLiR0aGlzLT5zdHlsZSgkc3R5bGUsICRrZXkpLiciID0+ICc7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgQ3Vyc29yOjpIQVNIX1JFU09VUkNFOgogICAgICAgICAgICAgICAgICAgICRrZXkgPSAiXDB+XDAiLiRrZXk7CiAgICAgICAgICAgICAgICAgICAgLy8gbm8gYnJlYWsKICAgICAgICAgICAgICAgIGNhc2UgQ3Vyc29yOjpIQVNIX09CSkVDVDoKICAgICAgICAgICAgICAgICAgICBpZiAoIWlzc2V0KCRrZXlbMF0pIHx8ICJcMCIgIT09ICRrZXlbMF0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmxpbmUgLj0gJysnLiRiaW4uJHRoaXMtPnN0eWxlKCdwdWJsaWMnLCAka2V5KS4nOiAnOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZWlmICgwIDwgc3RycG9zKCRrZXksICJcMCIsIDEpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRrZXkgPSBleHBsb2RlKCJcMCIsIHN1YnN0cigka2V5LCAxKSwgMik7CgogICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKCRrZXlbMF1bMF0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJysnOiAvLyBVc2VyIGluc2VydGVkIGtleXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYXR0clsnZHluYW1pYyddID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+bGluZSAuPSAnKycuJGJpbi4nIicuJHRoaXMtPnN0eWxlKCdwdWJsaWMnLCAka2V5WzFdLCAkYXR0cikuJyI6ICc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ34nOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzdHlsZSA9ICdtZXRhJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJGtleVswXVsxXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2Vfc3RyKHN1YnN0cigka2V5WzBdLCAxKSwgJGF0dHIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYXR0ciArPSBhcnJheSgnYmluYXJ5JyA9PiAkY3Vyc29yLT5oYXNoS2V5SXNCaW5hcnkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJyonOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzdHlsZSA9ICdwcm90ZWN0ZWQnOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRiaW4gPSAnIycuJGJpbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGF0dHJbJ2NsYXNzJ10gPSAka2V5WzBdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzdHlsZSA9ICdwcml2YXRlJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYmluID0gJy0nLiRiaW47CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc3NldCgkYXR0clsnY29sbGFwc2UnXSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkYXR0clsnY29sbGFwc2UnXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5jb2xsYXBzZU5leHRIYXNoID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmV4cGFuZE5leHRIYXNoID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmxpbmUgLj0gJGJpbi4kdGhpcy0+c3R5bGUoJHN0eWxlLCAka2V5WzFdLCAkYXR0cikuKGlzc2V0KCRhdHRyWydzZXBhcmF0b3InXSkgPyAkYXR0clsnc2VwYXJhdG9yJ10gOiAnOiAnKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGNhc2Ugc2hvdWxkIG5vdCBoYXBwZW4KICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmxpbmUgLj0gJy0nLiRiaW4uJyInLiR0aGlzLT5zdHlsZSgncHJpdmF0ZScsICRrZXksIGFycmF5KCdjbGFzcycgPT4gJycpKS4nIjogJzsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgkY3Vyc29yLT5oYXJkUmVmVG8pIHsKICAgICAgICAgICAgICAgICR0aGlzLT5saW5lIC49ICR0aGlzLT5zdHlsZSgncmVmJywgJyYnLigkY3Vyc29yLT5oYXJkUmVmQ291bnQgPyAkY3Vyc29yLT5oYXJkUmVmVG8gOiAnJyksIGFycmF5KCdjb3VudCcgPT4gJGN1cnNvci0+aGFyZFJlZkNvdW50KSkuJyAnOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogRGVjb3JhdGVzIGEgdmFsdWUgd2l0aCBzb21lIHN0eWxlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN0eWxlIFRoZSB0eXBlIG9mIHN0eWxlIGJlaW5nIGFwcGxpZWQKICAgICAqIEBwYXJhbSBzdHJpbmcgJHZhbHVlIFRoZSB2YWx1ZSBiZWluZyBzdHlsZWQKICAgICAqIEBwYXJhbSBhcnJheSAgJGF0dHIgIE9wdGlvbmFsIGNvbnRleHQgaW5mb3JtYXRpb24KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZyBUaGUgdmFsdWUgd2l0aCBzdHlsZSBkZWNvcmF0aW9uCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBzdHlsZSgkc3R5bGUsICR2YWx1ZSwgJGF0dHIgPSBhcnJheSgpKQogICAgewogICAgICAgIGlmIChudWxsID09PSAkdGhpcy0+Y29sb3JzKSB7CiAgICAgICAgICAgICR0aGlzLT5jb2xvcnMgPSAkdGhpcy0+c3VwcG9ydHNDb2xvcnMoKTsKICAgICAgICB9CgogICAgICAgIGlmIChpc3NldCgkYXR0clsnZWxsaXBzaXMnXSwgJGF0dHJbJ2VsbGlwc2lzLXR5cGUnXSkpIHsKICAgICAgICAgICAgJHByZWZpeCA9IHN1YnN0cigkdmFsdWUsIDAsIC0kYXR0clsnZWxsaXBzaXMnXSk7CiAgICAgICAgICAgIGlmICgnY2xpJyA9PT0gUEhQX1NBUEkgJiYgJ3BhdGgnID09PSAkYXR0clsnZWxsaXBzaXMtdHlwZSddICYmIGlzc2V0KCRfU0VSVkVSWyRwd2QgPSAnXFwnID09PSBESVJFQ1RPUllfU0VQQVJBVE9SID8gJ0NEJyA6ICdQV0QnXSkgJiYgMCA9PT0gc3RycG9zKCRwcmVmaXgsICRfU0VSVkVSWyRwd2RdKSkgewogICAgICAgICAgICAgICAgJHByZWZpeCA9ICcuJy5zdWJzdHIoJHByZWZpeCwgc3RybGVuKCRfU0VSVkVSWyRwd2RdKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCFlbXB0eSgkYXR0clsnZWxsaXBzaXMtdGFpbCddKSkgewogICAgICAgICAgICAgICAgJHByZWZpeCAuPSBzdWJzdHIoJHZhbHVlLCAtJGF0dHJbJ2VsbGlwc2lzJ10sICRhdHRyWydlbGxpcHNpcy10YWlsJ10pOwogICAgICAgICAgICAgICAgJHZhbHVlID0gc3Vic3RyKCR2YWx1ZSwgLSRhdHRyWydlbGxpcHNpcyddICsgJGF0dHJbJ2VsbGlwc2lzLXRhaWwnXSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkdmFsdWUgPSBzdWJzdHIoJHZhbHVlLCAtJGF0dHJbJ2VsbGlwc2lzJ10pOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnN0eWxlKCdkZWZhdWx0JywgJHByZWZpeCkuJHRoaXMtPnN0eWxlKCRzdHlsZSwgJHZhbHVlKTsKICAgICAgICB9CgogICAgICAgICRzdHlsZSA9ICR0aGlzLT5zdHlsZXNbJHN0eWxlXTsKCiAgICAgICAgJG1hcCA9IHN0YXRpYzo6JGNvbnRyb2xDaGFyc01hcDsKICAgICAgICAkc3RhcnRDY2hyID0gJHRoaXMtPmNvbG9ycyA/ICJcMDMzW21cMDMzW3skdGhpcy0+c3R5bGVzWydkZWZhdWx0J119bSIgOiAnJzsKICAgICAgICAkZW5kQ2NociA9ICR0aGlzLT5jb2xvcnMgPyAiXDAzM1ttXDAzM1t7JHN0eWxlfW0iIDogJyc7CiAgICAgICAgJHZhbHVlID0gcHJlZ19yZXBsYWNlX2NhbGxiYWNrKHN0YXRpYzo6JGNvbnRyb2xDaGFyc1J4LCBmdW5jdGlvbiAoJGMpIHVzZSAoJG1hcCwgJHN0YXJ0Q2NociwgJGVuZENjaHIpIHsKICAgICAgICAgICAgJHMgPSAkc3RhcnRDY2hyOwogICAgICAgICAgICAkYyA9ICRjWyRpID0gMF07CiAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICAgICRzIC49IGlzc2V0KCRtYXBbJGNbJGldXSkgPyAkbWFwWyRjWyRpXV0gOiBzcHJpbnRmKCdceCUwMlgnLCBvcmQoJGNbJGldKSk7CiAgICAgICAgICAgIH0gd2hpbGUgKGlzc2V0KCRjWysrJGldKSk7CgogICAgICAgICAgICByZXR1cm4gJHMuJGVuZENjaHI7CiAgICAgICAgfSwgJHZhbHVlLCAtMSwgJGNjaHJDb3VudCk7CgogICAgICAgIGlmICgkdGhpcy0+Y29sb3JzKSB7CiAgICAgICAgICAgIGlmICgkY2NockNvdW50ICYmICJcMDMzIiA9PT0gJHZhbHVlWzBdKSB7CiAgICAgICAgICAgICAgICAkdmFsdWUgPSBzdWJzdHIoJHZhbHVlLCBzdHJsZW4oJHN0YXJ0Q2NocikpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHZhbHVlID0gIlwwMzNbeyRzdHlsZX1tIi4kdmFsdWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCRjY2hyQ291bnQgJiYgJGVuZENjaHIgPT09IHN1YnN0cigkdmFsdWUsIC1zdHJsZW4oJGVuZENjaHIpKSkgewogICAgICAgICAgICAgICAgJHZhbHVlID0gc3Vic3RyKCR2YWx1ZSwgMCwgLXN0cmxlbigkZW5kQ2NocikpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHZhbHVlIC49ICJcMDMzW3skdGhpcy0+c3R5bGVzWydkZWZhdWx0J119bSI7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkdmFsdWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGJvb2wgVGVsbHMgaWYgdGhlIGN1cnJlbnQgb3V0cHV0IHN0cmVhbSBzdXBwb3J0cyBBTlNJIGNvbG9ycyBvciBub3QKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHN1cHBvcnRzQ29sb3JzKCkKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPm91dHB1dFN0cmVhbSAhPT0gc3RhdGljOjokZGVmYXVsdE91dHB1dCkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPmhhc0NvbG9yU3VwcG9ydCgkdGhpcy0+b3V0cHV0U3RyZWFtKTsKICAgICAgICB9CiAgICAgICAgaWYgKG51bGwgIT09IHN0YXRpYzo6JGRlZmF1bHRDb2xvcnMpIHsKICAgICAgICAgICAgcmV0dXJuIHN0YXRpYzo6JGRlZmF1bHRDb2xvcnM7CiAgICAgICAgfQogICAgICAgIGlmIChpc3NldCgkX1NFUlZFUlsnYXJndiddWzFdKSkgewogICAgICAgICAgICAkY29sb3JzID0gJF9TRVJWRVJbJ2FyZ3YnXTsKICAgICAgICAgICAgJGkgPSBjb3VudCgkY29sb3JzKTsKICAgICAgICAgICAgd2hpbGUgKC0tJGkgPiAwKSB7CiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJGNvbG9yc1skaV1bNV0pKSB7CiAgICAgICAgICAgICAgICAgICAgc3dpdGNoICgkY29sb3JzWyRpXSkgewogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICctLWFuc2knOgogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICctLWNvbG9yJzoKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnLS1jb2xvcj15ZXMnOgogICAgICAgICAgICAgICAgICAgICAgICBjYXNlICctLWNvbG9yPWZvcmNlJzoKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnLS1jb2xvcj1hbHdheXMnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpYzo6JGRlZmF1bHRDb2xvcnMgPSB0cnVlOwoKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnLS1uby1hbnNpJzoKICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnLS1jb2xvcj1ubyc6CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJy0tY29sb3I9bm9uZSc6CiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJy0tY29sb3I9bmV2ZXInOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpYzo6JGRlZmF1bHRDb2xvcnMgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICRoID0gc3RyZWFtX2dldF9tZXRhX2RhdGEoJHRoaXMtPm91dHB1dFN0cmVhbSkgKyBhcnJheSgnd3JhcHBlcl90eXBlJyA9PiBudWxsKTsKICAgICAgICAkaCA9ICdPdXRwdXQnID09PSAkaFsnc3RyZWFtX3R5cGUnXSAmJiAnUEhQJyA9PT0gJGhbJ3dyYXBwZXJfdHlwZSddID8gZm9wZW4oJ3BocDovL3N0ZG91dCcsICd3YicpIDogJHRoaXMtPm91dHB1dFN0cmVhbTsKCiAgICAgICAgcmV0dXJuIHN0YXRpYzo6JGRlZmF1bHRDb2xvcnMgPSAkdGhpcy0+aGFzQ29sb3JTdXBwb3J0KCRoKTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGR1bXBMaW5lKCRkZXB0aCwgJGVuZE9mVmFsdWUgPSBmYWxzZSkKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmNvbG9ycykgewogICAgICAgICAgICAkdGhpcy0+bGluZSA9IHNwcmludGYoIlwwMzNbJXNtJXNcMDMzW20iLCAkdGhpcy0+c3R5bGVzWydkZWZhdWx0J10sICR0aGlzLT5saW5lKTsKICAgICAgICB9CiAgICAgICAgcGFyZW50OjpkdW1wTGluZSgkZGVwdGgpOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBlbmRWYWx1ZShDdXJzb3IgJGN1cnNvcikKICAgIHsKICAgICAgICBpZiAoU3R1Yjo6QVJSQVlfSU5ERVhFRCA9PT0gJGN1cnNvci0+aGFzaFR5cGUgfHwgU3R1Yjo6QVJSQVlfQVNTT0MgPT09ICRjdXJzb3ItPmhhc2hUeXBlKSB7CiAgICAgICAgICAgIGlmIChzZWxmOjpEVU1QX1RSQUlMSU5HX0NPTU1BICYgJHRoaXMtPmZsYWdzICYmIDAgPCAkY3Vyc29yLT5kZXB0aCkgewogICAgICAgICAgICAgICAgJHRoaXMtPmxpbmUgLj0gJywnOwogICAgICAgICAgICB9IGVsc2VpZiAoc2VsZjo6RFVNUF9DT01NQV9TRVBBUkFUT1IgJiAkdGhpcy0+ZmxhZ3MgJiYgMSA8ICRjdXJzb3ItPmhhc2hMZW5ndGggLSAkY3Vyc29yLT5oYXNoSW5kZXgpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5saW5lIC49ICcsJzsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPmR1bXBMaW5lKCRjdXJzb3ItPmRlcHRoLCB0cnVlKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgc3RyZWFtIHN1cHBvcnRzIGNvbG9yaXphdGlvbi4KICAgICAqCiAgICAgKiBSZWZlcmVuY2U6IENvbXBvc2VyXFhkZWJ1Z0hhbmRsZXJcUHJvY2Vzczo6c3VwcG9ydHNDb2xvcgogICAgICogaHR0cHM6Ly9naXRodWIuY29tL2NvbXBvc2VyL3hkZWJ1Zy1oYW5kbGVyCiAgICAgKgogICAgICogQHBhcmFtIG1peGVkICRzdHJlYW0gQSBDTEkgb3V0cHV0IHN0cmVhbQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwcml2YXRlIGZ1bmN0aW9uIGhhc0NvbG9yU3VwcG9ydCgkc3RyZWFtKQogICAgewogICAgICAgIGlmICghaXNfcmVzb3VyY2UoJHN0cmVhbSkgfHwgJ3N0cmVhbScgIT09IGdldF9yZXNvdXJjZV90eXBlKCRzdHJlYW0pKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIGlmIChESVJFQ1RPUllfU0VQQVJBVE9SID09PSAnXFwnKSB7CiAgICAgICAgICAgIHJldHVybiAoZnVuY3Rpb25fZXhpc3RzKCdzYXBpX3dpbmRvd3NfdnQxMDBfc3VwcG9ydCcpCiAgICAgICAgICAgICAgICAmJiBAc2FwaV93aW5kb3dzX3Z0MTAwX3N1cHBvcnQoJHN0cmVhbSkpCiAgICAgICAgICAgICAgICB8fCBmYWxzZSAhPT0gZ2V0ZW52KCdBTlNJQ09OJykKICAgICAgICAgICAgICAgIHx8ICdPTicgPT09IGdldGVudignQ29uRW11QU5TSScpCiAgICAgICAgICAgICAgICB8fCAneHRlcm0nID09PSBnZXRlbnYoJ1RFUk0nKTsKICAgICAgICB9CgogICAgICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ3N0cmVhbV9pc2F0dHknKSkgewogICAgICAgICAgICByZXR1cm4gQHN0cmVhbV9pc2F0dHkoJHN0cmVhbSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdwb3NpeF9pc2F0dHknKSkgewogICAgICAgICAgICByZXR1cm4gQHBvc2l4X2lzYXR0eSgkc3RyZWFtKTsKICAgICAgICB9CgogICAgICAgICRzdGF0ID0gQGZzdGF0KCRzdHJlYW0pOwogICAgICAgIC8vIENoZWNrIGlmIGZvcm1hdHRlZCBtb2RlIGlzIFNfSUZDSFIKICAgICAgICByZXR1cm4gJHN0YXQgPyAwMDIwMDAwID09PSAoJHN0YXRbJ21vZGUnXSAmIDAxNzAwMDApIDogZmFsc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIFdpbmRvd3MgdGVybWluYWwgc3VwcG9ydHMgdHJ1ZSBjb2xvci4KICAgICAqCiAgICAgKiBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBjaGVjayBhbiBvdXRwdXQgc3RyZWFtLCBidXQgcmVsaWVzIG9uIGVudmlyb25tZW50CiAgICAgKiB2YXJpYWJsZXMgZnJvbSBrbm93biBpbXBsZW1lbnRhdGlvbnMsIG9yIGEgUEhQIGFuZCBXaW5kb3dzIHZlcnNpb24gdGhhdAogICAgICogc3VwcG9ydHMgdHJ1ZSBjb2xvci4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHJpdmF0ZSBmdW5jdGlvbiBpc1dpbmRvd3NUcnVlQ29sb3IoKQogICAgewogICAgICAgICRyZXN1bHQgPSAxODMgPD0gZ2V0ZW52KCdBTlNJQ09OX1ZFUicpCiAgICAgICAgICAgIHx8ICdPTicgPT09IGdldGVudignQ29uRW11QU5TSScpCiAgICAgICAgICAgIHx8ICd4dGVybScgPT09IGdldGVudignVEVSTScpOwoKICAgICAgICBpZiAoISRyZXN1bHQgJiYgUEhQX1ZFUlNJT05fSUQgPj0gNzAyMDApIHsKICAgICAgICAgICAgJHZlcnNpb24gPSBzcHJpbnRmKAogICAgICAgICAgICAgICAgJyVzLiVzLiVzJywKICAgICAgICAgICAgICAgIFBIUF9XSU5ET1dTX1ZFUlNJT05fTUFKT1IsCiAgICAgICAgICAgICAgICBQSFBfV0lORE9XU19WRVJTSU9OX01JTk9SLAogICAgICAgICAgICAgICAgUEhQX1dJTkRPV1NfVkVSU0lPTl9CVUlMRAogICAgICAgICAgICApOwogICAgICAgICAgICAkcmVzdWx0ID0gJHZlcnNpb24gPj0gJzEwLjAuMTUwNjMnOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9Cn0KAppDevTools/query/vendor/symfony/var-dumper/Dumper/ContextProvider/CliContextProvider.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcRHVtcGVyXENvbnRleHRQcm92aWRlcjsKCi8qKgogKiBUcmllcyB0byBwcm92aWRlIGNvbnRleHQgb24gQ0xJLgogKgogKiBAYXV0aG9yIE1heGltZSBTdGVpbmhhdXNzZXIgPG1heGltZS5zdGVpbmhhdXNzZXJAZ21haWwuY29tPgogKi8KZmluYWwgY2xhc3MgQ2xpQ29udGV4dFByb3ZpZGVyIGltcGxlbWVudHMgQ29udGV4dFByb3ZpZGVySW50ZXJmYWNlCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb250ZXh0KCk6ID9hcnJheQogICAgewogICAgICAgIGlmICgnY2xpJyAhPT0gUEhQX1NBUEkpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gYXJyYXkoCiAgICAgICAgICAgICdjb21tYW5kX2xpbmUnID0+ICRjb21tYW5kTGluZSA9IGltcGxvZGUoJyAnLCAkX1NFUlZFUlsnYXJndiddKSwKICAgICAgICAgICAgJ2lkZW50aWZpZXInID0+IGhhc2goJ2NyYzMyYicsICRjb21tYW5kTGluZS4kX1NFUlZFUlsnUkVRVUVTVF9USU1FX0ZMT0FUJ10pLAogICAgICAgICk7CiAgICB9Cn0KAppDevTools/query/vendor/symfony/var-dumper/Dumper/ContextProvider/ContextProviderInterface.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcRHVtcGVyXENvbnRleHRQcm92aWRlcjsKCi8qKgogKiBJbnRlcmZhY2UgdG8gcHJvdmlkZSBjb250ZXh0dWFsIGRhdGEgYWJvdXQgZHVtcCBkYXRhIGNsb25lcyBzZW50IHRvIGEgc2VydmVyLgogKgogKiBAYXV0aG9yIE1heGltZSBTdGVpbmhhdXNzZXIgPG1heGltZS5zdGVpbmhhdXNzZXJAZ21haWwuY29tPgogKi8KaW50ZXJmYWNlIENvbnRleHRQcm92aWRlckludGVyZmFjZQp7CiAgICAvKioKICAgICAqIEByZXR1cm4gYXJyYXl8bnVsbCBDb250ZXh0IGRhdGEgb3IgbnVsbCBpZiB1bmFibGUgdG8gcHJvdmlkZSBhbnkgY29udGV4dAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29udGV4dCgpOiA/YXJyYXk7Cn0KAppDevTools/query/vendor/symfony/var-dumper/Dumper/ContextProvider/RequestContextProvider.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcRHVtcGVyXENvbnRleHRQcm92aWRlcjsKCnVzZSBTeW1mb255XENvbXBvbmVudFxIdHRwRm91bmRhdGlvblxSZXF1ZXN0U3RhY2s7CnVzZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2xvbmVyXFZhckNsb25lcjsKCi8qKgogKiBUcmllcyB0byBwcm92aWRlIGNvbnRleHQgZnJvbSBhIHJlcXVlc3QuCiAqCiAqIEBhdXRob3IgTWF4aW1lIFN0ZWluaGF1c3NlciA8bWF4aW1lLnN0ZWluaGF1c3NlckBnbWFpbC5jb20+CiAqLwpmaW5hbCBjbGFzcyBSZXF1ZXN0Q29udGV4dFByb3ZpZGVyIGltcGxlbWVudHMgQ29udGV4dFByb3ZpZGVySW50ZXJmYWNlCnsKICAgIHByaXZhdGUgJHJlcXVlc3RTdGFjazsKICAgIHByaXZhdGUgJGNsb25lcjsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoUmVxdWVzdFN0YWNrICRyZXF1ZXN0U3RhY2spCiAgICB7CiAgICAgICAgJHRoaXMtPnJlcXVlc3RTdGFjayA9ICRyZXF1ZXN0U3RhY2s7CiAgICAgICAgJHRoaXMtPmNsb25lciA9IG5ldyBWYXJDbG9uZXIoKTsKICAgICAgICAkdGhpcy0+Y2xvbmVyLT5zZXRNYXhJdGVtcygwKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29udGV4dCgpOiA/YXJyYXkKICAgIHsKICAgICAgICBpZiAobnVsbCA9PT0gJHJlcXVlc3QgPSAkdGhpcy0+cmVxdWVzdFN0YWNrLT5nZXRDdXJyZW50UmVxdWVzdCgpKSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KCiAgICAgICAgJGNvbnRyb2xsZXIgPSAkcmVxdWVzdC0+YXR0cmlidXRlcy0+Z2V0KCdfY29udHJvbGxlcicpOwoKICAgICAgICByZXR1cm4gYXJyYXkoCiAgICAgICAgICAgICd1cmknID0+ICRyZXF1ZXN0LT5nZXRVcmkoKSwKICAgICAgICAgICAgJ21ldGhvZCcgPT4gJHJlcXVlc3QtPmdldE1ldGhvZCgpLAogICAgICAgICAgICAnY29udHJvbGxlcicgPT4gJGNvbnRyb2xsZXIgPyAkdGhpcy0+Y2xvbmVyLT5jbG9uZVZhcigkY29udHJvbGxlcikgOiAkY29udHJvbGxlciwKICAgICAgICAgICAgJ2lkZW50aWZpZXInID0+IHNwbF9vYmplY3RfaGFzaCgkcmVxdWVzdCksCiAgICAgICAgKTsKICAgIH0KfQo=AppDevTools/query/vendor/symfony/var-dumper/Dumper/ContextProvider/SourceContextProvider.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcRHVtcGVyXENvbnRleHRQcm92aWRlcjsKCnVzZSBTeW1mb255XENvbXBvbmVudFxIdHRwS2VybmVsXERlYnVnXEZpbGVMaW5rRm9ybWF0dGVyOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENsb25lclxWYXJDbG9uZXI7CnVzZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcRHVtcGVyXEh0bWxEdW1wZXI7CnVzZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcVmFyRHVtcGVyOwp1c2UgVHdpZ1xUZW1wbGF0ZTsKCi8qKgogKiBUcmllcyB0byBwcm92aWRlIGNvbnRleHQgZnJvbSBzb3VyY2VzIChjbGFzcyBuYW1lLCBmaWxlLCBsaW5lLCBjb2RlIGV4Y2VycHQsIC4uLikuCiAqCiAqIEBhdXRob3IgTmljb2xhcyBHcmVrYXMgPHBAdGNod29yay5jb20+CiAqIEBhdXRob3IgTWF4aW1lIFN0ZWluaGF1c3NlciA8bWF4aW1lLnN0ZWluaGF1c3NlckBnbWFpbC5jb20+CiAqLwpmaW5hbCBjbGFzcyBTb3VyY2VDb250ZXh0UHJvdmlkZXIgaW1wbGVtZW50cyBDb250ZXh0UHJvdmlkZXJJbnRlcmZhY2UKewogICAgcHJpdmF0ZSAkbGltaXQ7CiAgICBwcml2YXRlICRjaGFyc2V0OwogICAgcHJpdmF0ZSAkcHJvamVjdERpcjsKICAgIHByaXZhdGUgJGZpbGVMaW5rRm9ybWF0dGVyOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChzdHJpbmcgJGNoYXJzZXQgPSBudWxsLCBzdHJpbmcgJHByb2plY3REaXIgPSBudWxsLCBGaWxlTGlua0Zvcm1hdHRlciAkZmlsZUxpbmtGb3JtYXR0ZXIgPSBudWxsLCBpbnQgJGxpbWl0ID0gOSkKICAgIHsKICAgICAgICAkdGhpcy0+Y2hhcnNldCA9ICRjaGFyc2V0OwogICAgICAgICR0aGlzLT5wcm9qZWN0RGlyID0gJHByb2plY3REaXI7CiAgICAgICAgJHRoaXMtPmZpbGVMaW5rRm9ybWF0dGVyID0gJGZpbGVMaW5rRm9ybWF0dGVyOwogICAgICAgICR0aGlzLT5saW1pdCA9ICRsaW1pdDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29udGV4dCgpOiA/YXJyYXkKICAgIHsKICAgICAgICAkdHJhY2UgPSBkZWJ1Z19iYWNrdHJhY2UoREVCVUdfQkFDS1RSQUNFX1BST1ZJREVfT0JKRUNUIHwgREVCVUdfQkFDS1RSQUNFX0lHTk9SRV9BUkdTLCAkdGhpcy0+bGltaXQpOwoKICAgICAgICAkZmlsZSA9ICR0cmFjZVsxXVsnZmlsZSddOwogICAgICAgICRsaW5lID0gJHRyYWNlWzFdWydsaW5lJ107CiAgICAgICAgJG5hbWUgPSBmYWxzZTsKICAgICAgICAkZmlsZUV4Y2VycHQgPSBmYWxzZTsKCiAgICAgICAgZm9yICgkaSA9IDI7ICRpIDwgJHRoaXMtPmxpbWl0OyArKyRpKSB7CiAgICAgICAgICAgIGlmIChpc3NldCgkdHJhY2VbJGldWydjbGFzcyddLCAkdHJhY2VbJGldWydmdW5jdGlvbiddKQogICAgICAgICAgICAgICAgJiYgJ2R1bXAnID09PSAkdHJhY2VbJGldWydmdW5jdGlvbiddCiAgICAgICAgICAgICAgICAmJiBWYXJEdW1wZXI6OmNsYXNzID09PSAkdHJhY2VbJGldWydjbGFzcyddCiAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgJGZpbGUgPSAkdHJhY2VbJGldWydmaWxlJ107CiAgICAgICAgICAgICAgICAkbGluZSA9ICR0cmFjZVskaV1bJ2xpbmUnXTsKCiAgICAgICAgICAgICAgICB3aGlsZSAoKyskaSA8ICR0aGlzLT5saW1pdCkgewogICAgICAgICAgICAgICAgICAgIGlmIChpc3NldCgkdHJhY2VbJGldWydmdW5jdGlvbiddLCAkdHJhY2VbJGldWydmaWxlJ10pICYmIGVtcHR5KCR0cmFjZVskaV1bJ2NsYXNzJ10pICYmIDAgIT09IHN0cnBvcygkdHJhY2VbJGldWydmdW5jdGlvbiddLCAnY2FsbF91c2VyX2Z1bmMnKSkgewogICAgICAgICAgICAgICAgICAgICAgICAkZmlsZSA9ICR0cmFjZVskaV1bJ2ZpbGUnXTsKICAgICAgICAgICAgICAgICAgICAgICAgJGxpbmUgPSAkdHJhY2VbJGldWydsaW5lJ107CgogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoaXNzZXQoJHRyYWNlWyRpXVsnb2JqZWN0J10pICYmICR0cmFjZVskaV1bJ29iamVjdCddIGluc3RhbmNlb2YgVGVtcGxhdGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHRlbXBsYXRlID0gJHRyYWNlWyRpXVsnb2JqZWN0J107CiAgICAgICAgICAgICAgICAgICAgICAgICRuYW1lID0gJHRlbXBsYXRlLT5nZXRUZW1wbGF0ZU5hbWUoKTsKICAgICAgICAgICAgICAgICAgICAgICAgJHNyYyA9IG1ldGhvZF9leGlzdHMoJHRlbXBsYXRlLCAnZ2V0U291cmNlQ29udGV4dCcpID8gJHRlbXBsYXRlLT5nZXRTb3VyY2VDb250ZXh0KCktPmdldENvZGUoKSA6IChtZXRob2RfZXhpc3RzKCR0ZW1wbGF0ZSwgJ2dldFNvdXJjZScpID8gJHRlbXBsYXRlLT5nZXRTb3VyY2UoKSA6IGZhbHNlKTsKICAgICAgICAgICAgICAgICAgICAgICAgJGluZm8gPSAkdGVtcGxhdGUtPmdldERlYnVnSW5mbygpOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJGluZm9bJHRyYWNlWyRpIC0gMV1bJ2xpbmUnXV0pKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbGluZSA9ICRpbmZvWyR0cmFjZVskaSAtIDFdWydsaW5lJ11dOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGZpbGUgPSBtZXRob2RfZXhpc3RzKCR0ZW1wbGF0ZSwgJ2dldFNvdXJjZUNvbnRleHQnKSA/ICR0ZW1wbGF0ZS0+Z2V0U291cmNlQ29udGV4dCgpLT5nZXRQYXRoKCkgOiBudWxsOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkc3JjKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNyYyA9IGV4cGxvZGUoIlxuIiwgJHNyYyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGZpbGVFeGNlcnB0ID0gYXJyYXkoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICgkaSA9IG1heCgkbGluZSAtIDMsIDEpLCAkbWF4ID0gbWluKCRsaW5lICsgMywgY291bnQoJHNyYykpOyAkaSA8PSAkbWF4OyArKyRpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmaWxlRXhjZXJwdFtdID0gJzxsaScuKCRpID09PSAkbGluZSA/ICcgY2xhc3M9InNlbGVjdGVkIicgOiAnJykuJz48Y29kZT4nLiR0aGlzLT5odG1sRW5jb2RlKCRzcmNbJGkgLSAxXSkuJzwvY29kZT48L2xpPic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZmlsZUV4Y2VycHQgPSAnPG9sIHN0YXJ0PSInLm1heCgkbGluZSAtIDMsIDEpLiciPicuaW1wbG9kZSgiXG4iLCAkZmlsZUV4Y2VycHQpLic8L29sPic7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmIChmYWxzZSA9PT0gJG5hbWUpIHsKICAgICAgICAgICAgJG5hbWUgPSBzdHJfcmVwbGFjZSgnXFwnLCAnLycsICRmaWxlKTsKICAgICAgICAgICAgJG5hbWUgPSBzdWJzdHIoJG5hbWUsIHN0cnJwb3MoJG5hbWUsICcvJykgKyAxKTsKICAgICAgICB9CgogICAgICAgICRjb250ZXh0ID0gYXJyYXkoJ25hbWUnID0+ICRuYW1lLCAnZmlsZScgPT4gJGZpbGUsICdsaW5lJyA9PiAkbGluZSk7CiAgICAgICAgJGNvbnRleHRbJ2ZpbGVfZXhjZXJwdCddID0gJGZpbGVFeGNlcnB0OwoKICAgICAgICBpZiAobnVsbCAhPT0gJHRoaXMtPnByb2plY3REaXIpIHsKICAgICAgICAgICAgJGNvbnRleHRbJ3Byb2plY3RfZGlyJ10gPSAkdGhpcy0+cHJvamVjdERpcjsKICAgICAgICAgICAgaWYgKDAgPT09IHN0cnBvcygkZmlsZSwgJHRoaXMtPnByb2plY3REaXIpKSB7CiAgICAgICAgICAgICAgICAkY29udGV4dFsnZmlsZV9yZWxhdGl2ZSddID0gbHRyaW0oc3Vic3RyKCRmaWxlLCBzdHJsZW4oJHRoaXMtPnByb2plY3REaXIpKSwgRElSRUNUT1JZX1NFUEFSQVRPUik7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICgkdGhpcy0+ZmlsZUxpbmtGb3JtYXR0ZXIgJiYgJGZpbGVMaW5rID0gJHRoaXMtPmZpbGVMaW5rRm9ybWF0dGVyLT5mb3JtYXQoJGNvbnRleHRbJ2ZpbGUnXSwgJGNvbnRleHRbJ2xpbmUnXSkpIHsKICAgICAgICAgICAgJGNvbnRleHRbJ2ZpbGVfbGluayddID0gJGZpbGVMaW5rOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRjb250ZXh0OwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gaHRtbEVuY29kZShzdHJpbmcgJHMpOiBzdHJpbmcKICAgIHsKICAgICAgICAkaHRtbCA9ICcnOwoKICAgICAgICAkZHVtcGVyID0gbmV3IEh0bWxEdW1wZXIoZnVuY3Rpb24gKCRsaW5lKSB1c2UgKCYkaHRtbCkgeyAkaHRtbCAuPSAkbGluZTsgfSwgJHRoaXMtPmNoYXJzZXQpOwogICAgICAgICRkdW1wZXItPnNldER1bXBIZWFkZXIoJycpOwogICAgICAgICRkdW1wZXItPnNldER1bXBCb3VuZGFyaWVzKCcnLCAnJyk7CgogICAgICAgICRjbG9uZXIgPSBuZXcgVmFyQ2xvbmVyKCk7CiAgICAgICAgJGR1bXBlci0+ZHVtcCgkY2xvbmVyLT5jbG9uZVZhcigkcykpOwoKICAgICAgICByZXR1cm4gc3Vic3RyKHN0cmlwX3RhZ3MoJGh0bWwpLCAxLCAtMSk7CiAgICB9Cn0KAppDevTools/query/vendor/symfony/var-dumper/Dumper/DataDumperInterface.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcRHVtcGVyOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDbG9uZXJcRGF0YTsKCi8qKgogKiBEYXRhRHVtcGVySW50ZXJmYWNlIGZvciBkdW1waW5nIERhdGEgb2JqZWN0cy4KICoKICogQGF1dGhvciBOaWNvbGFzIEdyZWthcyA8cEB0Y2h3b3JrLmNvbT4KICovCmludGVyZmFjZSBEYXRhRHVtcGVySW50ZXJmYWNlCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBkdW1wKERhdGEgJGRhdGEpOwp9Cg==AppDevTools/query/vendor/symfony/var-dumper/Dumper/HtmlDumper.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcRHVtcGVyOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDbG9uZXJcQ3Vyc29yOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENsb25lclxEYXRhOwoKLyoqCiAqIEh0bWxEdW1wZXIgZHVtcHMgdmFyaWFibGVzIGFzIEhUTUwuCiAqCiAqIEBhdXRob3IgTmljb2xhcyBHcmVrYXMgPHBAdGNod29yay5jb20+CiAqLwpjbGFzcyBIdG1sRHVtcGVyIGV4dGVuZHMgQ2xpRHVtcGVyCnsKICAgIHB1YmxpYyBzdGF0aWMgJGRlZmF1bHRPdXRwdXQgPSAncGhwOi8vb3V0cHV0JzsKCiAgICBwcm90ZWN0ZWQgJGR1bXBIZWFkZXI7CiAgICBwcm90ZWN0ZWQgJGR1bXBQcmVmaXggPSAnPHByZSBjbGFzcz1zZi1kdW1wIGlkPSVzIGRhdGEtaW5kZW50LXBhZD0iJXMiPic7CiAgICBwcm90ZWN0ZWQgJGR1bXBTdWZmaXggPSAnPC9wcmU+PHNjcmlwdD5TZmR1bXAoJXMpPC9zY3JpcHQ+JzsKICAgIHByb3RlY3RlZCAkZHVtcElkID0gJ3NmLWR1bXAnOwogICAgcHJvdGVjdGVkICRjb2xvcnMgPSB0cnVlOwogICAgcHJvdGVjdGVkICRoZWFkZXJJc0R1bXBlZCA9IGZhbHNlOwogICAgcHJvdGVjdGVkICRsYXN0RGVwdGggPSAtMTsKICAgIHByb3RlY3RlZCAkc3R5bGVzID0gYXJyYXkoCiAgICAgICAgJ2RlZmF1bHQnID0+ICdiYWNrZ3JvdW5kLWNvbG9yOiMxODE3MUI7IGNvbG9yOiNGRjg0MDA7IGxpbmUtaGVpZ2h0OjEuMmVtOyBmb250OjEycHggTWVubG8sIE1vbmFjbywgQ29uc29sYXMsIG1vbm9zcGFjZTsgd29yZC13cmFwOiBicmVhay13b3JkOyB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7IHBvc2l0aW9uOnJlbGF0aXZlOyB6LWluZGV4Ojk5OTk5OyB3b3JkLWJyZWFrOiBicmVhay1hbGwnLAogICAgICAgICdudW0nID0+ICdmb250LXdlaWdodDpib2xkOyBjb2xvcjojMTI5OURBJywKICAgICAgICAnY29uc3QnID0+ICdmb250LXdlaWdodDpib2xkJywKICAgICAgICAnc3RyJyA9PiAnZm9udC13ZWlnaHQ6Ym9sZDsgY29sb3I6IzU2REIzQScsCiAgICAgICAgJ25vdGUnID0+ICdjb2xvcjojMTI5OURBJywKICAgICAgICAncmVmJyA9PiAnY29sb3I6I0EwQTBBMCcsCiAgICAgICAgJ3B1YmxpYycgPT4gJ2NvbG9yOiNGRkZGRkYnLAogICAgICAgICdwcm90ZWN0ZWQnID0+ICdjb2xvcjojRkZGRkZGJywKICAgICAgICAncHJpdmF0ZScgPT4gJ2NvbG9yOiNGRkZGRkYnLAogICAgICAgICdtZXRhJyA9PiAnY29sb3I6I0I3MjlEOScsCiAgICAgICAgJ2tleScgPT4gJ2NvbG9yOiM1NkRCM0EnLAogICAgICAgICdpbmRleCcgPT4gJ2NvbG9yOiMxMjk5REEnLAogICAgICAgICdlbGxpcHNpcycgPT4gJ2NvbG9yOiNGRjg0MDAnLAogICAgKTsKCiAgICBwcml2YXRlICRkaXNwbGF5T3B0aW9ucyA9IGFycmF5KAogICAgICAgICdtYXhEZXB0aCcgPT4gMSwKICAgICAgICAnbWF4U3RyaW5nTGVuZ3RoJyA9PiAxNjAsCiAgICAgICAgJ2ZpbGVMaW5rRm9ybWF0JyA9PiBudWxsLAogICAgKTsKICAgIHByaXZhdGUgJGV4dHJhRGlzcGxheU9wdGlvbnMgPSBhcnJheSgpOwoKICAgIC8qKgogICAgICoge0Bpbmhlcml0ZG9jfQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJG91dHB1dCA9IG51bGwsIHN0cmluZyAkY2hhcnNldCA9IG51bGwsIGludCAkZmxhZ3MgPSAwKQogICAgewogICAgICAgIEFic3RyYWN0RHVtcGVyOjpfX2NvbnN0cnVjdCgkb3V0cHV0LCAkY2hhcnNldCwgJGZsYWdzKTsKICAgICAgICAkdGhpcy0+ZHVtcElkID0gJ3NmLWR1bXAtJy5tdF9yYW5kKCk7CiAgICAgICAgJHRoaXMtPmRpc3BsYXlPcHRpb25zWydmaWxlTGlua0Zvcm1hdCddID0gaW5pX2dldCgneGRlYnVnLmZpbGVfbGlua19mb3JtYXQnKSA/OiBnZXRfY2ZnX3ZhcigneGRlYnVnLmZpbGVfbGlua19mb3JtYXQnKTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldFN0eWxlcyhhcnJheSAkc3R5bGVzKQogICAgewogICAgICAgICR0aGlzLT5oZWFkZXJJc0R1bXBlZCA9IGZhbHNlOwogICAgICAgICR0aGlzLT5zdHlsZXMgPSAkc3R5bGVzICsgJHRoaXMtPnN0eWxlczsKICAgIH0KCiAgICAvKioKICAgICAqIENvbmZpZ3VyZXMgZGlzcGxheSBvcHRpb25zLgogICAgICoKICAgICAqIEBwYXJhbSBhcnJheSAkZGlzcGxheU9wdGlvbnMgQSBtYXAgb2YgZGlzcGxheSBvcHRpb25zIHRvIGN1c3RvbWl6ZSB0aGUgYmVoYXZpb3IKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldERpc3BsYXlPcHRpb25zKGFycmF5ICRkaXNwbGF5T3B0aW9ucykKICAgIHsKICAgICAgICAkdGhpcy0+aGVhZGVySXNEdW1wZWQgPSBmYWxzZTsKICAgICAgICAkdGhpcy0+ZGlzcGxheU9wdGlvbnMgPSAkZGlzcGxheU9wdGlvbnMgKyAkdGhpcy0+ZGlzcGxheU9wdGlvbnM7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXRzIGFuIEhUTUwgaGVhZGVyIHRoYXQgd2lsbCBiZSBkdW1wZWQgb25jZSBpbiB0aGUgb3V0cHV0IHN0cmVhbS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRoZWFkZXIgQW4gSFRNTCBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldER1bXBIZWFkZXIoJGhlYWRlcikKICAgIHsKICAgICAgICAkdGhpcy0+ZHVtcEhlYWRlciA9ICRoZWFkZXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXRzIGFuIEhUTUwgcHJlZml4IGFuZCBzdWZmaXggdGhhdCB3aWxsIGVuY2Fwc2UgZXZlcnkgc2luZ2xlIGR1bXAuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkcHJlZml4IFRoZSBwcmVwZW5kZWQgSFRNTCBzdHJpbmcKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN1ZmZpeCBUaGUgYXBwZW5kZWQgSFRNTCBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldER1bXBCb3VuZGFyaWVzKCRwcmVmaXgsICRzdWZmaXgpCiAgICB7CiAgICAgICAgJHRoaXMtPmR1bXBQcmVmaXggPSAkcHJlZml4OwogICAgICAgICR0aGlzLT5kdW1wU3VmZml4ID0gJHN1ZmZpeDsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGR1bXAoRGF0YSAkZGF0YSwgJG91dHB1dCA9IG51bGwsIGFycmF5ICRleHRyYURpc3BsYXlPcHRpb25zID0gYXJyYXkoKSkKICAgIHsKICAgICAgICAkdGhpcy0+ZXh0cmFEaXNwbGF5T3B0aW9ucyA9ICRleHRyYURpc3BsYXlPcHRpb25zOwogICAgICAgICRyZXN1bHQgPSBwYXJlbnQ6OmR1bXAoJGRhdGEsICRvdXRwdXQpOwogICAgICAgICR0aGlzLT5kdW1wSWQgPSAnc2YtZHVtcC0nLm10X3JhbmQoKTsKCiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBEdW1wcyB0aGUgSFRNTCBoZWFkZXIuCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBnZXREdW1wSGVhZGVyKCkKICAgIHsKICAgICAgICAkdGhpcy0+aGVhZGVySXNEdW1wZWQgPSBudWxsICE9PSAkdGhpcy0+b3V0cHV0U3RyZWFtID8gJHRoaXMtPm91dHB1dFN0cmVhbSA6ICR0aGlzLT5saW5lRHVtcGVyOwoKICAgICAgICBpZiAobnVsbCAhPT0gJHRoaXMtPmR1bXBIZWFkZXIpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5kdW1wSGVhZGVyOwogICAgICAgIH0KCiAgICAgICAgJGxpbmUgPSBzdHJfcmVwbGFjZSgneyRvcHRpb25zfScsIGpzb25fZW5jb2RlKCR0aGlzLT5kaXNwbGF5T3B0aW9ucywgSlNPTl9GT1JDRV9PQkpFQ1QpLCA8PDwnRU9IVE1MJwo8c2NyaXB0PgpTZmR1bXAgPSB3aW5kb3cuU2ZkdW1wIHx8IChmdW5jdGlvbiAoZG9jKSB7Cgp2YXIgcmVmU3R5bGUgPSBkb2MuY3JlYXRlRWxlbWVudCgnc3R5bGUnKSwKICAgIHJ4RXNjID0gLyhbLiorP14ke30oKXxcW1xdXC9cXF0pL2csCiAgICBpZFJ4ID0gL1xic2YtZHVtcC1cZCstcmVmWzAxMl1cdytcYi8sCiAgICBrZXlIaW50ID0gMCA8PSBuYXZpZ2F0b3IucGxhdGZvcm0udG9VcHBlckNhc2UoKS5pbmRleE9mKCdNQUMnKSA/ICdDbWQnIDogJ0N0cmwnLAogICAgYWRkRXZlbnRMaXN0ZW5lciA9IGZ1bmN0aW9uIChlLCBuLCBjYikgewogICAgICAgIGUuYWRkRXZlbnRMaXN0ZW5lcihuLCBjYiwgZmFsc2UpOwogICAgfTsKCihkb2MuZG9jdW1lbnRFbGVtZW50LmZpcnN0RWxlbWVudENoaWxkIHx8IGRvYy5kb2N1bWVudEVsZW1lbnQuY2hpbGRyZW5bMF0pLmFwcGVuZENoaWxkKHJlZlN0eWxlKTsKCmlmICghZG9jLmFkZEV2ZW50TGlzdGVuZXIpIHsKICAgIGFkZEV2ZW50TGlzdGVuZXIgPSBmdW5jdGlvbiAoZWxlbWVudCwgZXZlbnROYW1lLCBjYWxsYmFjaykgewogICAgICAgIGVsZW1lbnQuYXR0YWNoRXZlbnQoJ29uJyArIGV2ZW50TmFtZSwgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCA9IGZ1bmN0aW9uICgpIHtlLnJldHVyblZhbHVlID0gZmFsc2U7fTsKICAgICAgICAgICAgZS50YXJnZXQgPSBlLnNyY0VsZW1lbnQ7CiAgICAgICAgICAgIGNhbGxiYWNrKGUpOwogICAgICAgIH0pOwogICAgfTsKfQoKZnVuY3Rpb24gdG9nZ2xlKGEsIHJlY3Vyc2l2ZSkgewogICAgdmFyIHMgPSBhLm5leHRTaWJsaW5nIHx8IHt9LCBvbGRDbGFzcyA9IHMuY2xhc3NOYW1lLCBhcnJvdywgbmV3Q2xhc3M7CgogICAgaWYgKC9cYnNmLWR1bXAtY29tcGFjdFxiLy50ZXN0KG9sZENsYXNzKSkgewogICAgICAgIGFycm93ID0gJ+KWvCc7CiAgICAgICAgbmV3Q2xhc3MgPSAnc2YtZHVtcC1leHBhbmRlZCc7CiAgICB9IGVsc2UgaWYgKC9cYnNmLWR1bXAtZXhwYW5kZWRcYi8udGVzdChvbGRDbGFzcykpIHsKICAgICAgICBhcnJvdyA9ICfilrYnOwogICAgICAgIG5ld0NsYXNzID0gJ3NmLWR1bXAtY29tcGFjdCc7CiAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICBpZiAoZG9jLmNyZWF0ZUV2ZW50ICYmIHMuZGlzcGF0Y2hFdmVudCkgewogICAgICAgIHZhciBldmVudCA9IGRvYy5jcmVhdGVFdmVudCgnRXZlbnQnKTsKICAgICAgICBldmVudC5pbml0RXZlbnQoJ3NmLWR1bXAtZXhwYW5kZWQnID09PSBuZXdDbGFzcyA/ICdzZmJlZm9yZWR1bXBleHBhbmQnIDogJ3NmYmVmb3JlZHVtcGNvbGxhcHNlJywgdHJ1ZSwgZmFsc2UpOwoKICAgICAgICBzLmRpc3BhdGNoRXZlbnQoZXZlbnQpOwogICAgfQoKICAgIGEubGFzdENoaWxkLmlubmVySFRNTCA9IGFycm93OwogICAgcy5jbGFzc05hbWUgPSBzLmNsYXNzTmFtZS5yZXBsYWNlKC9cYnNmLWR1bXAtKGNvbXBhY3R8ZXhwYW5kZWQpXGIvLCBuZXdDbGFzcyk7CgogICAgaWYgKHJlY3Vyc2l2ZSkgewogICAgICAgIHRyeSB7CiAgICAgICAgICAgIGEgPSBzLnF1ZXJ5U2VsZWN0b3JBbGwoJy4nK29sZENsYXNzKTsKICAgICAgICAgICAgZm9yIChzID0gMDsgcyA8IGEubGVuZ3RoOyArK3MpIHsKICAgICAgICAgICAgICAgIGlmICgtMSA9PSBhW3NdLmNsYXNzTmFtZS5pbmRleE9mKG5ld0NsYXNzKSkgewogICAgICAgICAgICAgICAgICAgIGFbc10uY2xhc3NOYW1lID0gbmV3Q2xhc3M7CiAgICAgICAgICAgICAgICAgICAgYVtzXS5wcmV2aW91c1NpYmxpbmcubGFzdENoaWxkLmlubmVySFRNTCA9IGFycm93OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgIH0KICAgIH0KCiAgICByZXR1cm4gdHJ1ZTsKfTsKCmZ1bmN0aW9uIGNvbGxhcHNlKGEsIHJlY3Vyc2l2ZSkgewogICAgdmFyIHMgPSBhLm5leHRTaWJsaW5nIHx8IHt9LCBvbGRDbGFzcyA9IHMuY2xhc3NOYW1lOwoKICAgIGlmICgvXGJzZi1kdW1wLWV4cGFuZGVkXGIvLnRlc3Qob2xkQ2xhc3MpKSB7CiAgICAgICAgdG9nZ2xlKGEsIHJlY3Vyc2l2ZSk7CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIHJldHVybiBmYWxzZTsKfTsKCmZ1bmN0aW9uIGV4cGFuZChhLCByZWN1cnNpdmUpIHsKICAgIHZhciBzID0gYS5uZXh0U2libGluZyB8fCB7fSwgb2xkQ2xhc3MgPSBzLmNsYXNzTmFtZTsKCiAgICBpZiAoL1xic2YtZHVtcC1jb21wYWN0XGIvLnRlc3Qob2xkQ2xhc3MpKSB7CiAgICAgICAgdG9nZ2xlKGEsIHJlY3Vyc2l2ZSk7CgogICAgICAgIHJldHVybiB0cnVlOwogICAgfQoKICAgIHJldHVybiBmYWxzZTsKfTsKCmZ1bmN0aW9uIGNvbGxhcHNlQWxsKHJvb3QpIHsKICAgIHZhciBhID0gcm9vdC5xdWVyeVNlbGVjdG9yKCdhLnNmLWR1bXAtdG9nZ2xlJyk7CiAgICBpZiAoYSkgewogICAgICAgIGNvbGxhcHNlKGEsIHRydWUpOwogICAgICAgIGV4cGFuZChhKTsKCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgcmV0dXJuIGZhbHNlOwp9CgpmdW5jdGlvbiByZXZlYWwobm9kZSkgewogICAgdmFyIHByZXZpb3VzLCBwYXJlbnRzID0gW107CgogICAgd2hpbGUgKChub2RlID0gbm9kZS5wYXJlbnROb2RlIHx8IHt9KSAmJiAocHJldmlvdXMgPSBub2RlLnByZXZpb3VzU2libGluZykgJiYgJ0EnID09PSBwcmV2aW91cy50YWdOYW1lKSB7CiAgICAgICAgcGFyZW50cy5wdXNoKHByZXZpb3VzKTsKICAgIH0KCiAgICBpZiAoMCAhPT0gcGFyZW50cy5sZW5ndGgpIHsKICAgICAgICBwYXJlbnRzLmZvckVhY2goZnVuY3Rpb24gKHBhcmVudCkgewogICAgICAgICAgICBleHBhbmQocGFyZW50KTsKICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgcmV0dXJuIGZhbHNlOwp9CgpmdW5jdGlvbiBoaWdobGlnaHQocm9vdCwgYWN0aXZlTm9kZSwgbm9kZXMpIHsKICAgIHJlc2V0SGlnaGxpZ2h0ZWROb2Rlcyhyb290KTsKCiAgICBBcnJheS5mcm9tKG5vZGVzfHxbXSkuZm9yRWFjaChmdW5jdGlvbiAobm9kZSkgewogICAgICAgIGlmICghL1xic2YtZHVtcC1oaWdobGlnaHRcYi8udGVzdChub2RlLmNsYXNzTmFtZSkpIHsKICAgICAgICAgICAgbm9kZS5jbGFzc05hbWUgPSBub2RlLmNsYXNzTmFtZSArICcgc2YtZHVtcC1oaWdobGlnaHQnOwogICAgICAgIH0KICAgIH0pOwoKICAgIGlmICghL1xic2YtZHVtcC1oaWdobGlnaHQtYWN0aXZlXGIvLnRlc3QoYWN0aXZlTm9kZS5jbGFzc05hbWUpKSB7CiAgICAgICAgYWN0aXZlTm9kZS5jbGFzc05hbWUgPSBhY3RpdmVOb2RlLmNsYXNzTmFtZSArICcgc2YtZHVtcC1oaWdobGlnaHQtYWN0aXZlJzsKICAgIH0KfQoKZnVuY3Rpb24gcmVzZXRIaWdobGlnaHRlZE5vZGVzKHJvb3QpIHsKICAgIEFycmF5LmZyb20ocm9vdC5xdWVyeVNlbGVjdG9yQWxsKCcuc2YtZHVtcC1zdHIsIC5zZi1kdW1wLWtleSwgLnNmLWR1bXAtcHVibGljLCAuc2YtZHVtcC1wcm90ZWN0ZWQsIC5zZi1kdW1wLXByaXZhdGUnKSkuZm9yRWFjaChmdW5jdGlvbiAoc3RyTm9kZSkgewogICAgICAgIHN0ck5vZGUuY2xhc3NOYW1lID0gc3RyTm9kZS5jbGFzc05hbWUucmVwbGFjZSgvXGJzZi1kdW1wLWhpZ2hsaWdodFxiLywgJycpOwogICAgICAgIHN0ck5vZGUuY2xhc3NOYW1lID0gc3RyTm9kZS5jbGFzc05hbWUucmVwbGFjZSgvXGJzZi1kdW1wLWhpZ2hsaWdodC1hY3RpdmVcYi8sICcnKTsKICAgIH0pOwp9CgpyZXR1cm4gZnVuY3Rpb24gKHJvb3QsIHgpIHsKICAgIHJvb3QgPSBkb2MuZ2V0RWxlbWVudEJ5SWQocm9vdCk7CgogICAgdmFyIGluZGVudFJ4ID0gbmV3IFJlZ0V4cCgnXignKyhyb290LmdldEF0dHJpYnV0ZSgnZGF0YS1pbmRlbnQtcGFkJykgfHwgJyAgJykucmVwbGFjZShyeEVzYywgJ1xcJDEnKSsnKSsnLCAnbScpLAogICAgICAgIG9wdGlvbnMgPSB7JG9wdGlvbnN9LAogICAgICAgIGVsdCA9IHJvb3QuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ0EnKSwKICAgICAgICBsZW4gPSBlbHQubGVuZ3RoLAogICAgICAgIGkgPSAwLCBzLCBoLAogICAgICAgIHQgPSBbXTsKCiAgICB3aGlsZSAoaSA8IGxlbikgdC5wdXNoKGVsdFtpKytdKTsKCiAgICBmb3IgKGkgaW4geCkgewogICAgICAgIG9wdGlvbnNbaV0gPSB4W2ldOwogICAgfQoKICAgIGZ1bmN0aW9uIGEoZSwgZikgewogICAgICAgIGFkZEV2ZW50TGlzdGVuZXIocm9vdCwgZSwgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgaWYgKCdBJyA9PSBlLnRhcmdldC50YWdOYW1lKSB7CiAgICAgICAgICAgICAgICBmKGUudGFyZ2V0LCBlKTsKICAgICAgICAgICAgfSBlbHNlIGlmICgnQScgPT0gZS50YXJnZXQucGFyZW50Tm9kZS50YWdOYW1lKSB7CiAgICAgICAgICAgICAgICBmKGUudGFyZ2V0LnBhcmVudE5vZGUsIGUpOwogICAgICAgICAgICB9IGVsc2UgaWYgKGUudGFyZ2V0Lm5leHRFbGVtZW50U2libGluZyAmJiAnQScgPT0gZS50YXJnZXQubmV4dEVsZW1lbnRTaWJsaW5nLnRhZ05hbWUpIHsKICAgICAgICAgICAgICAgIGYoZS50YXJnZXQubmV4dEVsZW1lbnRTaWJsaW5nLCBlLCB0cnVlKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfTsKICAgIGZ1bmN0aW9uIGlzQ3RybEtleShlKSB7CiAgICAgICAgcmV0dXJuIGUuY3RybEtleSB8fCBlLm1ldGFLZXk7CiAgICB9CiAgICBmdW5jdGlvbiB4cGF0aFN0cmluZyhzdHIpIHsKICAgICAgICB2YXIgcGFydHMgPSBzdHIubWF0Y2goL1teJyJdK3xbJyJdL2cpLm1hcChmdW5jdGlvbiAocGFydCkgewogICAgICAgICAgICBpZiAoIiciID09IHBhcnQpICB7CiAgICAgICAgICAgICAgICByZXR1cm4gJyJcJyInOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgnIicgPT0gcGFydCkgewogICAgICAgICAgICAgICAgcmV0dXJuICInXCInIjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuICInIiArIHBhcnQgKyAiJyI7CiAgICAgICAgfSk7CgogICAgICAgIHJldHVybiAiY29uY2F0KCIgKyBwYXJ0cy5qb2luKCIsIikgKyAiLCAnJykiOwogICAgfQogICAgZnVuY3Rpb24geHBhdGhIYXNDbGFzcyhjbGFzc05hbWUpIHsKICAgICAgICByZXR1cm4gImNvbnRhaW5zKGNvbmNhdCgnICcsIG5vcm1hbGl6ZS1zcGFjZShAY2xhc3MpLCAnICcpLCAnICIgKyBjbGFzc05hbWUgKyIgJykiOwogICAgfQogICAgYWRkRXZlbnRMaXN0ZW5lcihyb290LCAnbW91c2VvdmVyJywgZnVuY3Rpb24gKGUpIHsKICAgICAgICBpZiAoJycgIT0gcmVmU3R5bGUuaW5uZXJIVE1MKSB7CiAgICAgICAgICAgIHJlZlN0eWxlLmlubmVySFRNTCA9ICcnOwogICAgICAgIH0KICAgIH0pOwogICAgYSgnbW91c2VvdmVyJywgZnVuY3Rpb24gKGEsIGUsIGMpIHsKICAgICAgICBpZiAoYykgewogICAgICAgICAgICBlLnRhcmdldC5zdHlsZS5jdXJzb3IgPSAicG9pbnRlciI7CiAgICAgICAgfSBlbHNlIGlmIChhID0gaWRSeC5leGVjKGEuY2xhc3NOYW1lKSkgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgcmVmU3R5bGUuaW5uZXJIVE1MID0gJ3ByZS5zZi1kdW1wIC4nK2FbMF0rJ3tiYWNrZ3JvdW5kLWNvbG9yOiAjQjcyOUQ5OyBjb2xvcjogI0ZGRiAhaW1wb3J0YW50OyBib3JkZXItcmFkaXVzOiAycHh9JzsKICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfSk7CiAgICBhKCdjbGljaycsIGZ1bmN0aW9uIChhLCBlLCBjKSB7CiAgICAgICAgaWYgKC9cYnNmLWR1bXAtdG9nZ2xlXGIvLnRlc3QoYS5jbGFzc05hbWUpKSB7CiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgaWYgKCF0b2dnbGUoYSwgaXNDdHJsS2V5KGUpKSkgewogICAgICAgICAgICAgICAgdmFyIHIgPSBkb2MuZ2V0RWxlbWVudEJ5SWQoYS5nZXRBdHRyaWJ1dGUoJ2hyZWYnKS5zdWJzdHIoMSkpLAogICAgICAgICAgICAgICAgICAgIHMgPSByLnByZXZpb3VzU2libGluZywKICAgICAgICAgICAgICAgICAgICBmID0gci5wYXJlbnROb2RlLAogICAgICAgICAgICAgICAgICAgIHQgPSBhLnBhcmVudE5vZGU7CiAgICAgICAgICAgICAgICB0LnJlcGxhY2VDaGlsZChyLCBhKTsKICAgICAgICAgICAgICAgIGYucmVwbGFjZUNoaWxkKGEsIHMpOwogICAgICAgICAgICAgICAgdC5pbnNlcnRCZWZvcmUocywgcik7CiAgICAgICAgICAgICAgICBmID0gZi5maXJzdENoaWxkLm5vZGVWYWx1ZS5tYXRjaChpbmRlbnRSeCk7CiAgICAgICAgICAgICAgICB0ID0gdC5maXJzdENoaWxkLm5vZGVWYWx1ZS5tYXRjaChpbmRlbnRSeCk7CiAgICAgICAgICAgICAgICBpZiAoZiAmJiB0ICYmIGZbMF0gIT09IHRbMF0pIHsKICAgICAgICAgICAgICAgICAgICByLmlubmVySFRNTCA9IHIuaW5uZXJIVE1MLnJlcGxhY2UobmV3IFJlZ0V4cCgnXicrZlswXS5yZXBsYWNlKHJ4RXNjLCAnXFwkMScpLCAnbWcnKSwgdFswXSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoL1xic2YtZHVtcC1jb21wYWN0XGIvLnRlc3Qoci5jbGFzc05hbWUpKSB7CiAgICAgICAgICAgICAgICAgICAgdG9nZ2xlKHMsIGlzQ3RybEtleShlKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmIChjKSB7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoZG9jLmdldFNlbGVjdGlvbikgewogICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICBkb2MuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCk7CiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgICAgICAgZG9jLmdldFNlbGVjdGlvbigpLmVtcHR5KCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBkb2Muc2VsZWN0aW9uLmVtcHR5KCk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKC9cYnNmLWR1bXAtc3RyLXRvZ2dsZVxiLy50ZXN0KGEuY2xhc3NOYW1lKSkgewogICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgIGUgPSBhLnBhcmVudE5vZGUucGFyZW50Tm9kZTsKICAgICAgICAgICAgZS5jbGFzc05hbWUgPSBlLmNsYXNzTmFtZS5yZXBsYWNlKC9cYnNmLWR1bXAtc3RyLShleHBhbmR8Y29sbGFwc2UpXGIvLCBhLnBhcmVudE5vZGUuY2xhc3NOYW1lKTsKICAgICAgICB9CiAgICB9KTsKCiAgICBlbHQgPSByb290LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdTQU1QJyk7CiAgICBsZW4gPSBlbHQubGVuZ3RoOwogICAgaSA9IDA7CgogICAgd2hpbGUgKGkgPCBsZW4pIHQucHVzaChlbHRbaSsrXSk7CiAgICBsZW4gPSB0Lmxlbmd0aDsKCiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKICAgICAgICBlbHQgPSB0W2ldOwogICAgICAgIGlmICgnU0FNUCcgPT0gZWx0LnRhZ05hbWUpIHsKICAgICAgICAgICAgYSA9IGVsdC5wcmV2aW91c1NpYmxpbmcgfHwge307CiAgICAgICAgICAgIGlmICgnQScgIT0gYS50YWdOYW1lKSB7CiAgICAgICAgICAgICAgICBhID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ0EnKTsKICAgICAgICAgICAgICAgIGEuY2xhc3NOYW1lID0gJ3NmLWR1bXAtcmVmJzsKICAgICAgICAgICAgICAgIGVsdC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShhLCBlbHQpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgYS5pbm5lckhUTUwgKz0gJyAnOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGEudGl0bGUgPSAoYS50aXRsZSA/IGEudGl0bGUrJ1xuWycgOiAnWycpK2tleUhpbnQrJytjbGlja10gRXhwYW5kIGFsbCBjaGlsZHJlbic7CiAgICAgICAgICAgIGEuaW5uZXJIVE1MICs9ICc8c3Bhbj7ilrw8L3NwYW4+JzsKICAgICAgICAgICAgYS5jbGFzc05hbWUgKz0gJyBzZi1kdW1wLXRvZ2dsZSc7CgogICAgICAgICAgICB4ID0gMTsKICAgICAgICAgICAgaWYgKCdzZi1kdW1wJyAhPSBlbHQucGFyZW50Tm9kZS5jbGFzc05hbWUpIHsKICAgICAgICAgICAgICAgIHggKz0gZWx0LnBhcmVudE5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLWRlcHRoJykvMTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHQuc2V0QXR0cmlidXRlKCdkYXRhLWRlcHRoJywgeCk7CiAgICAgICAgICAgIHZhciBjbGFzc05hbWUgPSBlbHQuY2xhc3NOYW1lOwogICAgICAgICAgICBlbHQuY2xhc3NOYW1lID0gJ3NmLWR1bXAtZXhwYW5kZWQnOwogICAgICAgICAgICBpZiAoY2xhc3NOYW1lID8gJ3NmLWR1bXAtZXhwYW5kZWQnICE9PSBjbGFzc05hbWUgOiAoeCA+IG9wdGlvbnMubWF4RGVwdGgpKSB7CiAgICAgICAgICAgICAgICB0b2dnbGUoYSk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKC9cYnNmLWR1bXAtcmVmXGIvLnRlc3QoZWx0LmNsYXNzTmFtZSkgJiYgKGEgPSBlbHQuZ2V0QXR0cmlidXRlKCdocmVmJykpKSB7CiAgICAgICAgICAgIGEgPSBhLnN1YnN0cigxKTsKICAgICAgICAgICAgZWx0LmNsYXNzTmFtZSArPSAnICcrYTsKCiAgICAgICAgICAgIGlmICgvW1xbe10kLy50ZXN0KGVsdC5wcmV2aW91c1NpYmxpbmcubm9kZVZhbHVlKSkgewogICAgICAgICAgICAgICAgYSA9IGEgIT0gZWx0Lm5leHRTaWJsaW5nLmlkICYmIGRvYy5nZXRFbGVtZW50QnlJZChhKTsKICAgICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAgICAgcyA9IGEubmV4dFNpYmxpbmc7CiAgICAgICAgICAgICAgICAgICAgZWx0LmFwcGVuZENoaWxkKGEpOwogICAgICAgICAgICAgICAgICAgIHMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoYSwgcyk7CiAgICAgICAgICAgICAgICAgICAgaWYgKC9eW0AjXS8udGVzdChlbHQuaW5uZXJIVE1MKSkgewogICAgICAgICAgICAgICAgICAgICAgICBlbHQuaW5uZXJIVE1MICs9ICcgPHNwYW4+4pa2PC9zcGFuPic7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgZWx0LmlubmVySFRNTCA9ICc8c3Bhbj7ilrY8L3NwYW4+JzsKICAgICAgICAgICAgICAgICAgICAgICAgZWx0LmNsYXNzTmFtZSA9ICdzZi1kdW1wLXJlZic7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsdC5jbGFzc05hbWUgKz0gJyBzZi1kdW1wLXRvZ2dsZSc7CiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCcmJyA9PSBlbHQuaW5uZXJIVE1MLmNoYXJBdCgwKSkgewogICAgICAgICAgICAgICAgICAgICAgICBlbHQuaW5uZXJIVE1MID0gJ+KApic7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsdC5jbGFzc05hbWUgPSAnc2YtZHVtcC1yZWYnOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBpZiAoZG9jLmV2YWx1YXRlICYmIEFycmF5LmZyb20gJiYgcm9vdC5jaGlsZHJlbi5sZW5ndGggPiAxKSB7CiAgICAgICAgcm9vdC5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgMCk7CgogICAgICAgIFNlYXJjaFN0YXRlID0gZnVuY3Rpb24gKCkgewogICAgICAgICAgICB0aGlzLm5vZGVzID0gW107CiAgICAgICAgICAgIHRoaXMuaWR4ID0gMDsKICAgICAgICB9OwogICAgICAgIFNlYXJjaFN0YXRlLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGhpcy5pZHggPSB0aGlzLmlkeCA8ICh0aGlzLm5vZGVzLmxlbmd0aCAtIDEpID8gdGhpcy5pZHggKyAxIDogMDsKICAgICAgICAKICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnQoKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgcHJldmlvdXM6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnQoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHRoaXMuaWR4ID0gdGhpcy5pZHggPiAwID8gdGhpcy5pZHggLSAxIDogKHRoaXMubm9kZXMubGVuZ3RoIC0gMSk7CiAgICAgICAgCiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50KCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGlzRW1wdHk6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIHJldHVybiAwID09PSB0aGlzLmNvdW50KCk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGN1cnJlbnQ6IGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubm9kZXNbdGhpcy5pZHhdOwogICAgICAgICAgICB9LAogICAgICAgICAgICByZXNldDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgdGhpcy5ub2RlcyA9IFtdOwogICAgICAgICAgICAgICAgdGhpcy5pZHggPSAwOwogICAgICAgICAgICB9LAogICAgICAgICAgICBjb3VudDogZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubm9kZXMubGVuZ3RoOwogICAgICAgICAgICB9LAogICAgICAgIH07CgogICAgICAgIGZ1bmN0aW9uIHNob3dDdXJyZW50KHN0YXRlKQogICAgICAgIHsKICAgICAgICAgICAgdmFyIGN1cnJlbnROb2RlID0gc3RhdGUuY3VycmVudCgpOwogICAgICAgICAgICBpZiAoY3VycmVudE5vZGUpIHsKICAgICAgICAgICAgICAgIHJldmVhbChjdXJyZW50Tm9kZSk7CiAgICAgICAgICAgICAgICBoaWdobGlnaHQocm9vdCwgY3VycmVudE5vZGUsIHN0YXRlLm5vZGVzKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb3VudGVyLnRleHRDb250ZW50ID0gKHN0YXRlLmlzRW1wdHkoKSA/IDAgOiBzdGF0ZS5pZHggKyAxKSArICcgb2YgJyArIHN0YXRlLmNvdW50KCk7CiAgICAgICAgfQoKICAgICAgICB2YXIgc2VhcmNoID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICAgIHNlYXJjaC5jbGFzc05hbWUgPSAnc2YtZHVtcC1zZWFyY2gtd3JhcHBlciBzZi1kdW1wLXNlYXJjaC1oaWRkZW4nOwogICAgICAgIHNlYXJjaC5pbm5lckhUTUwgPSAnCiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0ic2YtZHVtcC1zZWFyY2gtaW5wdXQiPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2YtZHVtcC1zZWFyY2gtY291bnQiPjAgb2YgMDxcL3NwYW4+CiAgICAgICAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0ic2YtZHVtcC1zZWFyY2gtaW5wdXQtcHJldmlvdXMiIHRhYmluZGV4PSItMSI+CiAgICAgICAgICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAxNzkyIDE3OTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTE2ODMgMTMzMWwtMTY2IDE2NXEtMTkgMTktNDUgMTl0LTQ1LTE5bC01MzEtNTMxLTUzMSA1MzFxLTE5IDE5LTQ1IDE5dC00NS0xOWwtMTY2LTE2NXEtMTktMTktMTktNDUuNXQxOS00NS41bDc0Mi03NDFxMTktMTkgNDUtMTl0NDUgMTlsNzQyIDc0MXExOSAxOSAxOSA0NS41dC0xOSA0NS41eiJcLz4KICAgICAgICAgICAgICAgIDxcL3N2Zz4KICAgICAgICAgICAgPFwvYnV0dG9uPgogICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9InNmLWR1bXAtc2VhcmNoLWlucHV0LW5leHQiIHRhYmluZGV4PSItMSI+CiAgICAgICAgICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAxNzkyIDE3OTIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTE2ODMgODA4bC03NDIgNzQxcS0xOSAxOS00NSAxOXQtNDUtMTlsLTc0Mi03NDFxLTE5LTE5LTE5LTQ1LjV0MTktNDUuNWwxNjYtMTY1cTE5LTE5IDQ1LTE5dDQ1IDE5bDUzMSA1MzEgNTMxLTUzMXExOS0xOSA0NS0xOXQ0NSAxOWwxNjYgMTY1cTE5IDE5IDE5IDQ1LjV0LTE5IDQ1LjV6IlwvPgogICAgICAgICAgICAgICAgPFwvc3ZnPgogICAgICAgICAgICA8XC9idXR0b24+CiAgICAgICAgJzsKICAgICAgICByb290Lmluc2VydEJlZm9yZShzZWFyY2gsIHJvb3QuZmlyc3RDaGlsZCk7CgogICAgICAgIHZhciBzdGF0ZSA9IG5ldyBTZWFyY2hTdGF0ZSgpOwogICAgICAgIHZhciBzZWFyY2hJbnB1dCA9IHNlYXJjaC5xdWVyeVNlbGVjdG9yKCcuc2YtZHVtcC1zZWFyY2gtaW5wdXQnKTsKICAgICAgICB2YXIgY291bnRlciA9IHNlYXJjaC5xdWVyeVNlbGVjdG9yKCcuc2YtZHVtcC1zZWFyY2gtY291bnQnKTsKICAgICAgICB2YXIgc2VhcmNoSW5wdXRUaW1lciA9IDA7CiAgICAgICAgdmFyIHByZXZpb3VzU2VhcmNoUXVlcnkgPSAnJzsKCiAgICAgICAgYWRkRXZlbnRMaXN0ZW5lcihzZWFyY2hJbnB1dCwgJ2tleXVwJywgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgdmFyIHNlYXJjaFF1ZXJ5ID0gZS50YXJnZXQudmFsdWU7CiAgICAgICAgICAgIC8qIERvbid0IHBlcmZvcm0gYW55dGhpbmcgaWYgdGhlIHByZXNzZWQga2V5IGRpZG4ndCBjaGFuZ2UgdGhlIHF1ZXJ5ICovCiAgICAgICAgICAgIGlmIChzZWFyY2hRdWVyeSA9PT0gcHJldmlvdXNTZWFyY2hRdWVyeSkgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHByZXZpb3VzU2VhcmNoUXVlcnkgPSBzZWFyY2hRdWVyeTsKICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHNlYXJjaElucHV0VGltZXIpOwogICAgICAgICAgICBzZWFyY2hJbnB1dFRpbWVyID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICBzdGF0ZS5yZXNldCgpOwogICAgICAgICAgICAgICAgY29sbGFwc2VBbGwocm9vdCk7CiAgICAgICAgICAgICAgICByZXNldEhpZ2hsaWdodGVkTm9kZXMocm9vdCk7CiAgICAgICAgICAgICAgICBpZiAoJycgPT09IHNlYXJjaFF1ZXJ5KSB7CiAgICAgICAgICAgICAgICAgICAgY291bnRlci50ZXh0Q29udGVudCA9ICcwIG9mIDAnOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdmFyIGNsYXNzTWF0Y2hlcyA9IFsKICAgICAgICAgICAgICAgICAgICAic2YtZHVtcC1zdHIiLAogICAgICAgICAgICAgICAgICAgICJzZi1kdW1wLWtleSIsCiAgICAgICAgICAgICAgICAgICAgInNmLWR1bXAtcHVibGljIiwKICAgICAgICAgICAgICAgICAgICAic2YtZHVtcC1wcm90ZWN0ZWQiLAogICAgICAgICAgICAgICAgICAgICJzZi1kdW1wLXByaXZhdGUiLAogICAgICAgICAgICAgICAgXS5tYXAoeHBhdGhIYXNDbGFzcykuam9pbignIG9yICcpOwogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICB2YXIgeHBhdGhSZXN1bHQgPSBkb2MuZXZhbHVhdGUoJy4vL3NwYW5bJyArIGNsYXNzTWF0Y2hlcyArICddW2NvbnRhaW5zKHRyYW5zbGF0ZShjaGlsZDo6dGV4dCgpLCAnICsgeHBhdGhTdHJpbmcoc2VhcmNoUXVlcnkudG9VcHBlckNhc2UoKSkgKyAnLCAnICsgeHBhdGhTdHJpbmcoc2VhcmNoUXVlcnkudG9Mb3dlckNhc2UoKSkgKyAnKSwgJyArIHhwYXRoU3RyaW5nKHNlYXJjaFF1ZXJ5LnRvTG93ZXJDYXNlKCkpICsgJyldJywgcm9vdCwgbnVsbCwgWFBhdGhSZXN1bHQuT1JERVJFRF9OT0RFX0lURVJBVE9SX1RZUEUsIG51bGwpOwoKICAgICAgICAgICAgICAgIHdoaWxlIChub2RlID0geHBhdGhSZXN1bHQuaXRlcmF0ZU5leHQoKSkgc3RhdGUubm9kZXMucHVzaChub2RlKTsKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgc2hvd0N1cnJlbnQoc3RhdGUpOwogICAgICAgICAgICB9LCA0MDApOwogICAgICAgIH0pOwoKICAgICAgICBBcnJheS5mcm9tKHNlYXJjaC5xdWVyeVNlbGVjdG9yQWxsKCcuc2YtZHVtcC1zZWFyY2gtaW5wdXQtbmV4dCwgLnNmLWR1bXAtc2VhcmNoLWlucHV0LXByZXZpb3VzJykpLmZvckVhY2goZnVuY3Rpb24gKGJ0bikgewogICAgICAgICAgICBhZGRFdmVudExpc3RlbmVyKGJ0biwgJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHsKICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgIC0xICE9PSBlLnRhcmdldC5jbGFzc05hbWUuaW5kZXhPZignbmV4dCcpID8gc3RhdGUubmV4dCgpIDogc3RhdGUucHJldmlvdXMoKTsKICAgICAgICAgICAgICAgIHNlYXJjaElucHV0LmZvY3VzKCk7CiAgICAgICAgICAgICAgICBjb2xsYXBzZUFsbChyb290KTsKICAgICAgICAgICAgICAgIHNob3dDdXJyZW50KHN0YXRlKTsKICAgICAgICAgICAgfSkKICAgICAgICB9KTsKCiAgICAgICAgYWRkRXZlbnRMaXN0ZW5lcihyb290LCAna2V5ZG93bicsIGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIHZhciBpc1NlYXJjaEFjdGl2ZSA9ICEvXGJzZi1kdW1wLXNlYXJjaC1oaWRkZW5cYi8udGVzdChzZWFyY2guY2xhc3NOYW1lKTsKICAgICAgICAgICAgaWYgKCgxMTQgPT09IGUua2V5Q29kZSAmJiAhaXNTZWFyY2hBY3RpdmUpIHx8IChpc0N0cmxLZXkoZSkgJiYgNzAgPT09IGUua2V5Q29kZSkpIHsKICAgICAgICAgICAgICAgIC8qIEYzIG9yIENNRC9DVFJMICsgRiAqLwogICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgICAgc2VhcmNoLmNsYXNzTmFtZSA9IHNlYXJjaC5jbGFzc05hbWUucmVwbGFjZSgvXGJzZi1kdW1wLXNlYXJjaC1oaWRkZW5cYi8sICcnKTsKICAgICAgICAgICAgICAgIHNlYXJjaElucHV0LmZvY3VzKCk7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNTZWFyY2hBY3RpdmUpIHsKICAgICAgICAgICAgICAgIGlmICgyNyA9PT0gZS5rZXlDb2RlKSB7CiAgICAgICAgICAgICAgICAgICAgLyogRVNDIGtleSAqLwogICAgICAgICAgICAgICAgICAgIHNlYXJjaC5jbGFzc05hbWUgKz0gJyBzZi1kdW1wLXNlYXJjaC1oaWRkZW4nOwogICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgICAgICByZXNldEhpZ2hsaWdodGVkTm9kZXMocm9vdCk7CiAgICAgICAgICAgICAgICAgICAgc2VhcmNoSW5wdXQudmFsdWUgPSAnJzsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoCiAgICAgICAgICAgICAgICAgICAgKGlzQ3RybEtleShlKSAmJiA3MSA9PT0gZS5rZXlDb2RlKSAvKiBDTUQvQ1RSTCArIEcgKi8KICAgICAgICAgICAgICAgICAgICB8fCAxMyA9PT0gZS5rZXlDb2RlIC8qIEVudGVyICovCiAgICAgICAgICAgICAgICAgICAgfHwgMTE0ID09PSBlLmtleUNvZGUgLyogRjMgKi8KICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgICAgICAgICBlLnNoaWZ0S2V5ID8gc3RhdGUucHJldmlvdXMoKSA6IHN0YXRlLm5leHQoKTsKICAgICAgICAgICAgICAgICAgICBjb2xsYXBzZUFsbChyb290KTsKICAgICAgICAgICAgICAgICAgICBzaG93Q3VycmVudChzdGF0ZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIH0KCiAgICBpZiAoMCA+PSBvcHRpb25zLm1heFN0cmluZ0xlbmd0aCkgewogICAgICAgIHJldHVybjsKICAgIH0KICAgIHRyeSB7CiAgICAgICAgZWx0ID0gcm9vdC5xdWVyeVNlbGVjdG9yQWxsKCcuc2YtZHVtcC1zdHInKTsKICAgICAgICBsZW4gPSBlbHQubGVuZ3RoOwogICAgICAgIGkgPSAwOwogICAgICAgIHQgPSBbXTsKCiAgICAgICAgd2hpbGUgKGkgPCBsZW4pIHQucHVzaChlbHRbaSsrXSk7CiAgICAgICAgbGVuID0gdC5sZW5ndGg7CgogICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47ICsraSkgewogICAgICAgICAgICBlbHQgPSB0W2ldOwogICAgICAgICAgICBzID0gZWx0LmlubmVyVGV4dCB8fCBlbHQudGV4dENvbnRlbnQ7CiAgICAgICAgICAgIHggPSBzLmxlbmd0aCAtIG9wdGlvbnMubWF4U3RyaW5nTGVuZ3RoOwogICAgICAgICAgICBpZiAoMCA8IHgpIHsKICAgICAgICAgICAgICAgIGggPSBlbHQuaW5uZXJIVE1MOwogICAgICAgICAgICAgICAgZWx0W2VsdC5pbm5lclRleHQgPyAnaW5uZXJUZXh0JyA6ICd0ZXh0Q29udGVudCddID0gcy5zdWJzdHJpbmcoMCwgb3B0aW9ucy5tYXhTdHJpbmdMZW5ndGgpOwogICAgICAgICAgICAgICAgZWx0LmNsYXNzTmFtZSArPSAnIHNmLWR1bXAtc3RyLWNvbGxhcHNlJzsKICAgICAgICAgICAgICAgIGVsdC5pbm5lckhUTUwgPSAnPHNwYW4gY2xhc3M9c2YtZHVtcC1zdHItY29sbGFwc2U+JytoKyc8YSBjbGFzcz0ic2YtZHVtcC1yZWYgc2YtZHVtcC1zdHItdG9nZ2xlIiB0aXRsZT0iQ29sbGFwc2UiPiDil4A8L2E+PC9zcGFuPicrCiAgICAgICAgICAgICAgICAgICAgJzxzcGFuIGNsYXNzPXNmLWR1bXAtc3RyLWV4cGFuZD4nK2VsdC5pbm5lckhUTUwrJzxhIGNsYXNzPSJzZi1kdW1wLXJlZiBzZi1kdW1wLXN0ci10b2dnbGUiIHRpdGxlPSInK3grJyByZW1haW5pbmcgY2hhcmFjdGVycyI+IOKWtjwvYT48L3NwYW4+JzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0gY2F0Y2ggKGUpIHsKICAgIH0KfTsKCn0pKGRvY3VtZW50KTsKPC9zY3JpcHQ+PHN0eWxlPgpwcmUuc2YtZHVtcCB7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIHdoaXRlLXNwYWNlOiBwcmU7CiAgICBwYWRkaW5nOiA1cHg7Cn0KcHJlLnNmLWR1bXA6YWZ0ZXIgewogICBjb250ZW50OiAiIjsKICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICBkaXNwbGF5OiBibG9jazsKICAgaGVpZ2h0OiAwOwogICBjbGVhcjogYm90aDsKfQpwcmUuc2YtZHVtcCBzcGFuIHsKICAgIGRpc3BsYXk6IGlubGluZTsKfQpwcmUuc2YtZHVtcCAuc2YtZHVtcC1jb21wYWN0IHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KcHJlLnNmLWR1bXAgYWJiciB7CiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICBib3JkZXI6IG5vbmU7CiAgICBjdXJzb3I6IGhlbHA7Cn0KcHJlLnNmLWR1bXAgYSB7CiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBib3JkZXI6IDA7CiAgICBvdXRsaW5lOiBub25lOwogICAgY29sb3I6IGluaGVyaXQ7Cn0KcHJlLnNmLWR1bXAgLnNmLWR1bXAtZWxsaXBzaXMgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIG1heC13aWR0aDogNWVtOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwp9CnByZS5zZi1kdW1wIC5zZi1kdW1wLWVsbGlwc2lzKy5zZi1kdW1wLWVsbGlwc2lzIHsKICAgIG1heC13aWR0aDogbm9uZTsKfQpwcmUuc2YtZHVtcCBjb2RlIHsKICAgIGRpc3BsYXk6aW5saW5lOwogICAgcGFkZGluZzowOwogICAgYmFja2dyb3VuZDpub25lOwp9Ci5zZi1kdW1wLXN0ci1jb2xsYXBzZSAuc2YtZHVtcC1zdHItY29sbGFwc2UgewogICAgZGlzcGxheTogbm9uZTsKfQouc2YtZHVtcC1zdHItZXhwYW5kIC5zZi1kdW1wLXN0ci1leHBhbmQgewogICAgZGlzcGxheTogbm9uZTsKfQouc2YtZHVtcC1wdWJsaWMuc2YtZHVtcC1oaWdobGlnaHQsCi5zZi1kdW1wLXByb3RlY3RlZC5zZi1kdW1wLWhpZ2hsaWdodCwKLnNmLWR1bXAtcHJpdmF0ZS5zZi1kdW1wLWhpZ2hsaWdodCwKLnNmLWR1bXAtc3RyLnNmLWR1bXAtaGlnaGxpZ2h0LAouc2YtZHVtcC1rZXkuc2YtZHVtcC1oaWdobGlnaHQgewogICAgYmFja2dyb3VuZDogcmdiYSgxMTEsIDE3MiwgMjA0LCAwLjMpOwogICAgYm9yZGVyOiAxcHggc29saWQgIzdEQTBCMTsKICAgIGJvcmRlci1yYWRpdXM6IDNweDsKfQouc2YtZHVtcC1wdWJsaWMuc2YtZHVtcC1oaWdobGlnaHQtYWN0aXZlLAouc2YtZHVtcC1wcm90ZWN0ZWQuc2YtZHVtcC1oaWdobGlnaHQtYWN0aXZlLAouc2YtZHVtcC1wcml2YXRlLnNmLWR1bXAtaGlnaGxpZ2h0LWFjdGl2ZSwKLnNmLWR1bXAtc3RyLnNmLWR1bXAtaGlnaGxpZ2h0LWFjdGl2ZSwKLnNmLWR1bXAta2V5LnNmLWR1bXAtaGlnaGxpZ2h0LWFjdGl2ZSB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1MywgMTc1LCAwLCAwLjQpOwogICAgYm9yZGVyOiAxcHggc29saWQgI2ZmYTUwMDsKICAgIGJvcmRlci1yYWRpdXM6IDNweDsKfQpwcmUuc2YtZHVtcCAuc2YtZHVtcC1zZWFyY2gtaGlkZGVuIHsKICAgIGRpc3BsYXk6IG5vbmU7Cn0KcHJlLnNmLWR1bXAgLnNmLWR1bXAtc2VhcmNoLXdyYXBwZXIgewogICAgZmxvYXQ6IHJpZ2h0OwogICAgZm9udC1zaXplOiAwOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIG1heC13aWR0aDogMTAwJTsKICAgIHRleHQtYWxpZ246IHJpZ2h0Owp9CnByZS5zZi1kdW1wIC5zZi1kdW1wLXNlYXJjaC13cmFwcGVyID4gKiB7CiAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgIGhlaWdodDogMjFweDsKICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICBib3JkZXItcmFkaXVzOiAwOwogICAgYmFja2dyb3VuZDogI0ZGRjsKICAgIGNvbG9yOiAjNzU3NTc1OwogICAgYm9yZGVyOiAxcHggc29saWQgI0JCQjsKfQpwcmUuc2YtZHVtcCAuc2YtZHVtcC1zZWFyY2gtd3JhcHBlciA+IGlucHV0LnNmLWR1bXAtc2VhcmNoLWlucHV0IHsKICAgIHBhZGRpbmc6IDNweDsKICAgIGhlaWdodDogMjFweDsKICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIGJvcmRlci1yaWdodDogbm9uZTsKICAgIHdpZHRoOiAxNDBweDsKICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDNweDsKICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDNweDsKICAgIGNvbG9yOiAjMDAwOwp9CnByZS5zZi1kdW1wIC5zZi1kdW1wLXNlYXJjaC13cmFwcGVyID4gLnNmLWR1bXAtc2VhcmNoLWlucHV0LW5leHQsCnByZS5zZi1kdW1wIC5zZi1kdW1wLXNlYXJjaC13cmFwcGVyID4gLnNmLWR1bXAtc2VhcmNoLWlucHV0LXByZXZpb3VzIHsKICAgIGJhY2tncm91bmQ6ICNGMkYyRjI7CiAgICBvdXRsaW5lOiBub25lOwogICAgYm9yZGVyLWxlZnQ6IG5vbmU7CiAgICBmb250LXNpemU6IDA7CiAgICBsaW5lLWhlaWdodDogMDsKfQpwcmUuc2YtZHVtcCAuc2YtZHVtcC1zZWFyY2gtd3JhcHBlciA+IC5zZi1kdW1wLXNlYXJjaC1pbnB1dC1uZXh0IHsKICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAzcHg7CiAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogM3B4Owp9CnByZS5zZi1kdW1wIC5zZi1kdW1wLXNlYXJjaC13cmFwcGVyID4gLnNmLWR1bXAtc2VhcmNoLWlucHV0LW5leHQgPiBzdmcsCnByZS5zZi1kdW1wIC5zZi1kdW1wLXNlYXJjaC13cmFwcGVyID4gLnNmLWR1bXAtc2VhcmNoLWlucHV0LXByZXZpb3VzID4gc3ZnIHsKICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgd2lkdGg6IDEycHg7CiAgICBoZWlnaHQ6IDEycHg7Cn0KcHJlLnNmLWR1bXAgLnNmLWR1bXAtc2VhcmNoLXdyYXBwZXIgPiAuc2YtZHVtcC1zZWFyY2gtY291bnQgewogICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgcGFkZGluZzogMCA1cHg7CiAgICBtYXJnaW46IDA7CiAgICBib3JkZXItbGVmdDogbm9uZTsKICAgIGxpbmUtaGVpZ2h0OiAyMXB4OwogICAgZm9udC1zaXplOiAxMnB4Owp9CkVPSFRNTAogICAgICAgICk7CgogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5zdHlsZXMgYXMgJGNsYXNzID0+ICRzdHlsZSkgewogICAgICAgICAgICAkbGluZSAuPSAncHJlLnNmLWR1bXAnLignZGVmYXVsdCcgPT09ICRjbGFzcyA/ICcsIHByZS5zZi1kdW1wJyA6ICcnKS4nIC5zZi1kdW1wLScuJGNsYXNzLid7Jy4kc3R5bGUuJ30nOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5kdW1wSGVhZGVyID0gcHJlZ19yZXBsYWNlKCcvXHMrLycsICcgJywgJGxpbmUpLic8L3N0eWxlPicuJHRoaXMtPmR1bXBIZWFkZXI7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBlbnRlckhhc2goQ3Vyc29yICRjdXJzb3IsICR0eXBlLCAkY2xhc3MsICRoYXNDaGlsZCkKICAgIHsKICAgICAgICBwYXJlbnQ6OmVudGVySGFzaCgkY3Vyc29yLCAkdHlwZSwgJGNsYXNzLCBmYWxzZSk7CgogICAgICAgIGlmICgkY3Vyc29yLT5za2lwQ2hpbGRyZW4pIHsKICAgICAgICAgICAgJGN1cnNvci0+c2tpcENoaWxkcmVuID0gZmFsc2U7CiAgICAgICAgICAgICRlb2wgPSAnIGNsYXNzPXNmLWR1bXAtY29tcGFjdD4nOwogICAgICAgIH0gZWxzZWlmICgkdGhpcy0+ZXhwYW5kTmV4dEhhc2gpIHsKICAgICAgICAgICAgJHRoaXMtPmV4cGFuZE5leHRIYXNoID0gZmFsc2U7CiAgICAgICAgICAgICRlb2wgPSAnIGNsYXNzPXNmLWR1bXAtZXhwYW5kZWQ+JzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkZW9sID0gJz4nOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRoYXNDaGlsZCkgewogICAgICAgICAgICAkdGhpcy0+bGluZSAuPSAnPHNhbXAnOwogICAgICAgICAgICBpZiAoJGN1cnNvci0+cmVmSW5kZXgpIHsKICAgICAgICAgICAgICAgICRyID0gQ3Vyc29yOjpIQVNIX09CSkVDVCAhPT0gJHR5cGUgPyAxIC0gKEN1cnNvcjo6SEFTSF9SRVNPVVJDRSAhPT0gJHR5cGUpIDogMjsKICAgICAgICAgICAgICAgICRyIC49ICRyICYmIDAgPCAkY3Vyc29yLT5zb2Z0UmVmSGFuZGxlID8gJGN1cnNvci0+c29mdFJlZkhhbmRsZSA6ICRjdXJzb3ItPnJlZkluZGV4OwoKICAgICAgICAgICAgICAgICR0aGlzLT5saW5lIC49IHNwcmludGYoJyBpZD0lcy1yZWYlcycsICR0aGlzLT5kdW1wSWQsICRyKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkdGhpcy0+bGluZSAuPSAkZW9sOwogICAgICAgICAgICAkdGhpcy0+ZHVtcExpbmUoJGN1cnNvci0+ZGVwdGgpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxlYXZlSGFzaChDdXJzb3IgJGN1cnNvciwgJHR5cGUsICRjbGFzcywgJGhhc0NoaWxkLCAkY3V0KQogICAgewogICAgICAgICR0aGlzLT5kdW1wRWxsaXBzaXMoJGN1cnNvciwgJGhhc0NoaWxkLCAkY3V0KTsKICAgICAgICBpZiAoJGhhc0NoaWxkKSB7CiAgICAgICAgICAgICR0aGlzLT5saW5lIC49ICc8L3NhbXA+JzsKICAgICAgICB9CiAgICAgICAgcGFyZW50OjpsZWF2ZUhhc2goJGN1cnNvciwgJHR5cGUsICRjbGFzcywgJGhhc0NoaWxkLCAwKTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHN0eWxlKCRzdHlsZSwgJHZhbHVlLCAkYXR0ciA9IGFycmF5KCkpCiAgICB7CiAgICAgICAgaWYgKCcnID09PSAkdmFsdWUpIHsKICAgICAgICAgICAgcmV0dXJuICcnOwogICAgICAgIH0KCiAgICAgICAgJHYgPSBlc2MoJHZhbHVlKTsKCiAgICAgICAgaWYgKCdyZWYnID09PSAkc3R5bGUpIHsKICAgICAgICAgICAgaWYgKGVtcHR5KCRhdHRyWydjb3VudCddKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHNwcmludGYoJzxhIGNsYXNzPXNmLWR1bXAtcmVmPiVzPC9hPicsICR2KTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkciA9ICgnIycgIT09ICR2WzBdID8gMSAtICgnQCcgIT09ICR2WzBdKSA6IDIpLnN1YnN0cigkdmFsdWUsIDEpOwoKICAgICAgICAgICAgcmV0dXJuIHNwcmludGYoJzxhIGNsYXNzPXNmLWR1bXAtcmVmIGhyZWY9IyVzLXJlZiVzIHRpdGxlPSIlZCBvY2N1cnJlbmNlcyI+JXM8L2E+JywgJHRoaXMtPmR1bXBJZCwgJHIsIDEgKyAkYXR0clsnY291bnQnXSwgJHYpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCdjb25zdCcgPT09ICRzdHlsZSAmJiBpc3NldCgkYXR0clsndmFsdWUnXSkpIHsKICAgICAgICAgICAgJHN0eWxlIC49IHNwcmludGYoJyB0aXRsZT0iJXMiJywgZXNjKGlzX3NjYWxhcigkYXR0clsndmFsdWUnXSkgPyAkYXR0clsndmFsdWUnXSA6IGpzb25fZW5jb2RlKCRhdHRyWyd2YWx1ZSddKSkpOwogICAgICAgIH0gZWxzZWlmICgncHVibGljJyA9PT0gJHN0eWxlKSB7CiAgICAgICAgICAgICRzdHlsZSAuPSBzcHJpbnRmKCcgdGl0bGU9IiVzIicsIGVtcHR5KCRhdHRyWydkeW5hbWljJ10pID8gJ1B1YmxpYyBwcm9wZXJ0eScgOiAnUnVudGltZSBhZGRlZCBkeW5hbWljIHByb3BlcnR5Jyk7CiAgICAgICAgfSBlbHNlaWYgKCdzdHInID09PSAkc3R5bGUgJiYgMSA8ICRhdHRyWydsZW5ndGgnXSkgewogICAgICAgICAgICAkc3R5bGUgLj0gc3ByaW50ZignIHRpdGxlPSIlZCVzIGNoYXJhY3RlcnMiJywgJGF0dHJbJ2xlbmd0aCddLCAkYXR0clsnYmluYXJ5J10gPyAnIGJpbmFyeSBvciBub24tVVRGLTgnIDogJycpOwogICAgICAgIH0gZWxzZWlmICgnbm90ZScgPT09ICRzdHlsZSAmJiBmYWxzZSAhPT0gJGMgPSBzdHJycG9zKCR2LCAnXFwnKSkgewogICAgICAgICAgICByZXR1cm4gc3ByaW50ZignPGFiYnIgdGl0bGU9IiVzIiBjbGFzcz1zZi1kdW1wLSVzPiVzPC9hYmJyPicsICR2LCAkc3R5bGUsIHN1YnN0cigkdiwgJGMgKyAxKSk7CiAgICAgICAgfSBlbHNlaWYgKCdwcm90ZWN0ZWQnID09PSAkc3R5bGUpIHsKICAgICAgICAgICAgJHN0eWxlIC49ICcgdGl0bGU9IlByb3RlY3RlZCBwcm9wZXJ0eSInOwogICAgICAgIH0gZWxzZWlmICgnbWV0YScgPT09ICRzdHlsZSAmJiBpc3NldCgkYXR0clsndGl0bGUnXSkpIHsKICAgICAgICAgICAgJHN0eWxlIC49IHNwcmludGYoJyB0aXRsZT0iJXMiJywgZXNjKCR0aGlzLT51dGY4RW5jb2RlKCRhdHRyWyd0aXRsZSddKSkpOwogICAgICAgIH0gZWxzZWlmICgncHJpdmF0ZScgPT09ICRzdHlsZSkgewogICAgICAgICAgICAkc3R5bGUgLj0gc3ByaW50ZignIHRpdGxlPSJQcml2YXRlIHByb3BlcnR5IGRlZmluZWQgaW4gY2xhc3M6JiMxMDtgJXNgIicsIGVzYygkdGhpcy0+dXRmOEVuY29kZSgkYXR0clsnY2xhc3MnXSkpKTsKICAgICAgICB9CiAgICAgICAgJG1hcCA9IHN0YXRpYzo6JGNvbnRyb2xDaGFyc01hcDsKCiAgICAgICAgaWYgKGlzc2V0KCRhdHRyWydlbGxpcHNpcyddKSkgewogICAgICAgICAgICAkY2xhc3MgPSAnc2YtZHVtcC1lbGxpcHNpcyc7CiAgICAgICAgICAgIGlmIChpc3NldCgkYXR0clsnZWxsaXBzaXMtdHlwZSddKSkgewogICAgICAgICAgICAgICAgJGNsYXNzID0gc3ByaW50ZignIiVzIHNmLWR1bXAtZWxsaXBzaXMtJXMiJywgJGNsYXNzLCAkYXR0clsnZWxsaXBzaXMtdHlwZSddKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkbGFiZWwgPSBlc2Moc3Vic3RyKCR2YWx1ZSwgLSRhdHRyWydlbGxpcHNpcyddKSk7CiAgICAgICAgICAgICRzdHlsZSA9IHN0cl9yZXBsYWNlKCcgdGl0bGU9IicsICIgdGl0bGU9XCIkdlxuIiwgJHN0eWxlKTsKICAgICAgICAgICAgJHYgPSBzcHJpbnRmKCc8c3BhbiBjbGFzcz0lcz4lczwvc3Bhbj4nLCAkY2xhc3MsIHN1YnN0cigkdiwgMCwgLXN0cmxlbigkbGFiZWwpKSk7CgogICAgICAgICAgICBpZiAoIWVtcHR5KCRhdHRyWydlbGxpcHNpcy10YWlsJ10pKSB7CiAgICAgICAgICAgICAgICAkdGFpbCA9IHN0cmxlbihlc2Moc3Vic3RyKCR2YWx1ZSwgLSRhdHRyWydlbGxpcHNpcyddLCAkYXR0clsnZWxsaXBzaXMtdGFpbCddKSkpOwogICAgICAgICAgICAgICAgJHYgLj0gc3ByaW50ZignPHNwYW4gY2xhc3M9c2YtZHVtcC1lbGxpcHNpcz4lczwvc3Bhbj4lcycsIHN1YnN0cigkbGFiZWwsIDAsICR0YWlsKSwgc3Vic3RyKCRsYWJlbCwgJHRhaWwpKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICR2IC49ICRsYWJlbDsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJHYgPSAiPHNwYW4gY2xhc3M9c2YtZHVtcC17JHN0eWxlfT4iLnByZWdfcmVwbGFjZV9jYWxsYmFjayhzdGF0aWM6OiRjb250cm9sQ2hhcnNSeCwgZnVuY3Rpb24gKCRjKSB1c2UgKCRtYXApIHsKICAgICAgICAgICAgJHMgPSAnPHNwYW4gY2xhc3M9c2YtZHVtcC1kZWZhdWx0Pic7CiAgICAgICAgICAgICRjID0gJGNbJGkgPSAwXTsKICAgICAgICAgICAgZG8gewogICAgICAgICAgICAgICAgJHMgLj0gaXNzZXQoJG1hcFskY1skaV1dKSA/ICRtYXBbJGNbJGldXSA6IHNwcmludGYoJ1x4JTAyWCcsIG9yZCgkY1skaV0pKTsKICAgICAgICAgICAgfSB3aGlsZSAoaXNzZXQoJGNbKyskaV0pKTsKCiAgICAgICAgICAgIHJldHVybiAkcy4nPC9zcGFuPic7CiAgICAgICAgfSwgJHYpLic8L3NwYW4+JzsKCiAgICAgICAgaWYgKGlzc2V0KCRhdHRyWydmaWxlJ10pICYmICRocmVmID0gJHRoaXMtPmdldFNvdXJjZUxpbmsoJGF0dHJbJ2ZpbGUnXSwgaXNzZXQoJGF0dHJbJ2xpbmUnXSkgPyAkYXR0clsnbGluZSddIDogMCkpIHsKICAgICAgICAgICAgJGF0dHJbJ2hyZWYnXSA9ICRocmVmOwogICAgICAgIH0KICAgICAgICBpZiAoaXNzZXQoJGF0dHJbJ2hyZWYnXSkpIHsKICAgICAgICAgICAgJHRhcmdldCA9IGlzc2V0KCRhdHRyWydmaWxlJ10pID8gJycgOiAnIHRhcmdldD0iX2JsYW5rIic7CiAgICAgICAgICAgICR2ID0gc3ByaW50ZignPGEgaHJlZj0iJXMiJXMgcmVsPSJub29wZW5lciBub3JlZmVycmVyIj4lczwvYT4nLCBlc2MoJHRoaXMtPnV0ZjhFbmNvZGUoJGF0dHJbJ2hyZWYnXSkpLCAkdGFyZ2V0LCAkdik7CiAgICAgICAgfQogICAgICAgIGlmIChpc3NldCgkYXR0clsnbGFuZyddKSkgewogICAgICAgICAgICAkdiA9IHNwcmludGYoJzxjb2RlIGNsYXNzPSIlcyI+JXM8L2NvZGU+JywgZXNjKCRhdHRyWydsYW5nJ10pLCAkdik7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHY7CiAgICB9CgogICAgLyoqCiAgICAgKiB7QGluaGVyaXRkb2N9CiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBkdW1wTGluZSgkZGVwdGgsICRlbmRPZlZhbHVlID0gZmFsc2UpCiAgICB7CiAgICAgICAgaWYgKC0xID09PSAkdGhpcy0+bGFzdERlcHRoKSB7CiAgICAgICAgICAgICR0aGlzLT5saW5lID0gc3ByaW50ZigkdGhpcy0+ZHVtcFByZWZpeCwgJHRoaXMtPmR1bXBJZCwgJHRoaXMtPmluZGVudFBhZCkuJHRoaXMtPmxpbmU7CiAgICAgICAgfQogICAgICAgIGlmICgkdGhpcy0+aGVhZGVySXNEdW1wZWQgIT09IChudWxsICE9PSAkdGhpcy0+b3V0cHV0U3RyZWFtID8gJHRoaXMtPm91dHB1dFN0cmVhbSA6ICR0aGlzLT5saW5lRHVtcGVyKSkgewogICAgICAgICAgICAkdGhpcy0+bGluZSA9ICR0aGlzLT5nZXREdW1wSGVhZGVyKCkuJHRoaXMtPmxpbmU7CiAgICAgICAgfQoKICAgICAgICBpZiAoLTEgPT09ICRkZXB0aCkgewogICAgICAgICAgICAkYXJncyA9IGFycmF5KCciJy4kdGhpcy0+ZHVtcElkLiciJyk7CiAgICAgICAgICAgIGlmICgkdGhpcy0+ZXh0cmFEaXNwbGF5T3B0aW9ucykgewogICAgICAgICAgICAgICAgJGFyZ3NbXSA9IGpzb25fZW5jb2RlKCR0aGlzLT5leHRyYURpc3BsYXlPcHRpb25zLCBKU09OX0ZPUkNFX09CSkVDVCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgLy8gUmVwbGFjZSBpcyBmb3IgQkMKICAgICAgICAgICAgJHRoaXMtPmxpbmUgLj0gc3ByaW50ZihzdHJfcmVwbGFjZSgnIiVzIicsICclcycsICR0aGlzLT5kdW1wU3VmZml4KSwgaW1wbG9kZSgnLCAnLCAkYXJncykpOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+bGFzdERlcHRoID0gJGRlcHRoOwoKICAgICAgICAkdGhpcy0+bGluZSA9IG1iX2NvbnZlcnRfZW5jb2RpbmcoJHRoaXMtPmxpbmUsICdIVE1MLUVOVElUSUVTJywgJ1VURi04Jyk7CgogICAgICAgIGlmICgtMSA9PT0gJGRlcHRoKSB7CiAgICAgICAgICAgIEFic3RyYWN0RHVtcGVyOjpkdW1wTGluZSgwKTsKICAgICAgICB9CiAgICAgICAgQWJzdHJhY3REdW1wZXI6OmR1bXBMaW5lKCRkZXB0aCk7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRTb3VyY2VMaW5rKCRmaWxlLCAkbGluZSkKICAgIHsKICAgICAgICAkb3B0aW9ucyA9ICR0aGlzLT5leHRyYURpc3BsYXlPcHRpb25zICsgJHRoaXMtPmRpc3BsYXlPcHRpb25zOwoKICAgICAgICBpZiAoJGZtdCA9ICRvcHRpb25zWydmaWxlTGlua0Zvcm1hdCddKSB7CiAgICAgICAgICAgIHJldHVybiBpc19zdHJpbmcoJGZtdCkgPyBzdHJ0cigkZm10LCBhcnJheSgnJWYnID0+ICRmaWxlLCAnJWwnID0+ICRsaW5lKSkgOiAkZm10LT5mb3JtYXQoJGZpbGUsICRsaW5lKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KfQoKZnVuY3Rpb24gZXNjKCRzdHIpCnsKICAgIHJldHVybiBodG1sc3BlY2lhbGNoYXJzKCRzdHIsIEVOVF9RVU9URVMsICdVVEYtOCcpOwp9Cg==AppDevTools/query/vendor/symfony/var-dumper/Dumper/ServerDumper.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcRHVtcGVyOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDbG9uZXJcRGF0YTsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxEdW1wZXJcQ29udGV4dFByb3ZpZGVyXENvbnRleHRQcm92aWRlckludGVyZmFjZTsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxTZXJ2ZXJcQ29ubmVjdGlvbjsKCi8qKgogKiBTZXJ2ZXJEdW1wZXIgZm9yd2FyZHMgc2VyaWFsaXplZCBEYXRhIGNsb25lcyB0byBhIHNlcnZlci4KICoKICogQGF1dGhvciBNYXhpbWUgU3RlaW5oYXVzc2VyIDxtYXhpbWUuc3RlaW5oYXVzc2VyQGdtYWlsLmNvbT4KICovCmNsYXNzIFNlcnZlckR1bXBlciBpbXBsZW1lbnRzIERhdGFEdW1wZXJJbnRlcmZhY2UKewogICAgcHJpdmF0ZSAkY29ubmVjdGlvbjsKICAgIHByaXZhdGUgJHdyYXBwZWREdW1wZXI7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgICAgICAgICAgICAgICAgJGhvc3QgICAgICAgICAgICAgVGhlIHNlcnZlciBob3N0CiAgICAgKiBAcGFyYW0gRGF0YUR1bXBlckludGVyZmFjZXxudWxsICAgJHdyYXBwZWREdW1wZXIgICAgQSB3cmFwcGVkIGluc3RhbmNlIHVzZWQgd2hlbmV2ZXIgd2UgZmFpbGVkIGNvbnRhY3RpbmcgdGhlIHNlcnZlcgogICAgICogQHBhcmFtIENvbnRleHRQcm92aWRlckludGVyZmFjZVtdICRjb250ZXh0UHJvdmlkZXJzIENvbnRleHQgcHJvdmlkZXJzIGluZGV4ZWQgYnkgY29udGV4dCBuYW1lCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChzdHJpbmcgJGhvc3QsIERhdGFEdW1wZXJJbnRlcmZhY2UgJHdyYXBwZWREdW1wZXIgPSBudWxsLCBhcnJheSAkY29udGV4dFByb3ZpZGVycyA9IGFycmF5KCkpCiAgICB7CiAgICAgICAgJHRoaXMtPmNvbm5lY3Rpb24gPSBuZXcgQ29ubmVjdGlvbigkaG9zdCwgJGNvbnRleHRQcm92aWRlcnMpOwogICAgICAgICR0aGlzLT53cmFwcGVkRHVtcGVyID0gJHdyYXBwZWREdW1wZXI7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbnRleHRQcm92aWRlcnMoKTogYXJyYXkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmNvbm5lY3Rpb24tPmdldENvbnRleHRQcm92aWRlcnMoKTsKICAgIH0KCiAgICAvKioKICAgICAqIHtAaW5oZXJpdGRvY30KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGR1bXAoRGF0YSAkZGF0YSkKICAgIHsKICAgICAgICBpZiAoISR0aGlzLT5jb25uZWN0aW9uLT53cml0ZSgkZGF0YSkgJiYgJHRoaXMtPndyYXBwZWREdW1wZXIpIHsKICAgICAgICAgICAgJHRoaXMtPndyYXBwZWREdW1wZXItPmR1bXAoJGRhdGEpOwogICAgICAgIH0KICAgIH0KfQo=AppDevTools/query/vendor/symfony/var-dumper/Exception/ThrowingCasterException.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcRXhjZXB0aW9uOwoKLyoqCiAqIEBhdXRob3IgTmljb2xhcyBHcmVrYXMgPHBAdGNod29yay5jb20+CiAqLwpjbGFzcyBUaHJvd2luZ0Nhc3RlckV4Y2VwdGlvbiBleHRlbmRzIFxFeGNlcHRpb24KewogICAgLyoqCiAgICAgKiBAcGFyYW0gXEV4Y2VwdGlvbiAkcHJldiBUaGUgZXhjZXB0aW9uIHRocm93biBmcm9tIHRoZSBjYXN0ZXIKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KFxFeGNlcHRpb24gJHByZXYpCiAgICB7CiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgnVW5leHBlY3RlZCAnLmdldF9jbGFzcygkcHJldikuJyB0aHJvd24gZnJvbSBhIGNhc3RlcjogJy4kcHJldi0+Z2V0TWVzc2FnZSgpLCAwLCAkcHJldik7CiAgICB9Cn0KAppDevTools/query/vendor/symfony/var-dumper/LICENSEQ29weXJpZ2h0IChjKSAyMDE0LTIwMTggRmFiaWVuIFBvdGVuY2llcgoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZAp0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOClRIRSBTT0ZUV0FSRS4KAppDevTools/query/vendor/symfony/var-dumper/README.mdVmFyRHVtcGVyIENvbXBvbmVudAo9PT09PT09PT09PT09PT09PT09CgpUaGUgVmFyRHVtcGVyIGNvbXBvbmVudCBwcm92aWRlcyBtZWNoYW5pc21zIGZvciB3YWxraW5nIHRocm91Z2ggYW55IGFyYml0cmFyeQpQSFAgdmFyaWFibGUuIEJ1aWx0IG9uIHRvcCwgaXQgcHJvdmlkZXMgYSBiZXR0ZXIgYGR1bXAoKWAgZnVuY3Rpb24gdGhhdCB5b3UKY2FuIHVzZSBpbnN0ZWFkIG9mIGB2YXJfZHVtcGAuCgpSZXNvdXJjZXMKLS0tLS0tLS0tCgogICogW0RvY3VtZW50YXRpb25dKGh0dHBzOi8vc3ltZm9ueS5jb20vZG9jL2N1cnJlbnQvY29tcG9uZW50cy92YXJfZHVtcGVyL2ludHJvZHVjdGlvbi5odG1sKQogICogW0NvbnRyaWJ1dGluZ10oaHR0cHM6Ly9zeW1mb255LmNvbS9kb2MvY3VycmVudC9jb250cmlidXRpbmcvaW5kZXguaHRtbCkKICAqIFtSZXBvcnQgaXNzdWVzXShodHRwczovL2dpdGh1Yi5jb20vc3ltZm9ueS9zeW1mb255L2lzc3VlcykgYW5kCiAgICBbc2VuZCBQdWxsIFJlcXVlc3RzXShodHRwczovL2dpdGh1Yi5jb20vc3ltZm9ueS9zeW1mb255L3B1bGxzKQogICAgaW4gdGhlIFttYWluIFN5bWZvbnkgcmVwb3NpdG9yeV0oaHR0cHM6Ly9naXRodWIuY29tL3N5bWZvbnkvc3ltZm9ueSkKAppDevTools/query/vendor/symfony/var-dumper/Resources/bin/var-dump-serverIyEvdXNyL2Jpbi9lbnYgcGhwCjw/cGhwCgovKgogKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgU3ltZm9ueSBwYWNrYWdlLgogKgogKiAoYykgRmFiaWVuIFBvdGVuY2llciA8ZmFiaWVuQHN5bWZvbnkuY29tPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgovKioKICogU3RhcnRzIGEgZHVtcCBzZXJ2ZXIgdG8gY29sbGVjdCBhbmQgb3V0cHV0IGR1bXBzIG9uIGEgc2luZ2xlIHBsYWNlIHdpdGggbXVsdGlwbGUgZm9ybWF0cyBzdXBwb3J0LgogKgogKiBAYXV0aG9yIE1heGltZSBTdGVpbmhhdXNzZXIgPG1heGltZS5zdGVpbmhhdXNzZXJAZ21haWwuY29tPgogKi8KCnVzZSBQc3JcTG9nXExvZ2dlckludGVyZmFjZTsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcQXBwbGljYXRpb247CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXElucHV0XEFyZ3ZJbnB1dDsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcSW5wdXRcSW5wdXRPcHRpb247CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXExvZ2dlclxDb25zb2xlTG9nZ2VyOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxPdXRwdXRcQ29uc29sZU91dHB1dDsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDb21tYW5kXFNlcnZlckR1bXBDb21tYW5kOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXFNlcnZlclxEdW1wU2VydmVyOwoKZnVuY3Rpb24gaW5jbHVkZUlmRXhpc3RzKHN0cmluZyAkZmlsZSk6IGJvb2wKewogICAgcmV0dXJuIGZpbGVfZXhpc3RzKCRmaWxlKSAmJiBpbmNsdWRlICRmaWxlOwp9CgppZiAoCiAgICAhaW5jbHVkZUlmRXhpc3RzKF9fRElSX18gLiAnLy4uLy4uLy4uLy4uL2F1dG9sb2FkLnBocCcpICYmCiAgICAhaW5jbHVkZUlmRXhpc3RzKF9fRElSX18gLiAnLy4uLy4uL3ZlbmRvci9hdXRvbG9hZC5waHAnKSAmJgogICAgIWluY2x1ZGVJZkV4aXN0cyhfX0RJUl9fIC4gJy8uLi8uLi8uLi8uLi8uLi8uLi92ZW5kb3IvYXV0b2xvYWQucGhwJykKKSB7CiAgICBmd3JpdGUoU1RERVJSLCAnSW5zdGFsbCBkZXBlbmRlbmNpZXMgdXNpbmcgQ29tcG9zZXIuJy5QSFBfRU9MKTsKICAgIGV4aXQoMSk7Cn0KCmlmICghY2xhc3NfZXhpc3RzKEFwcGxpY2F0aW9uOjpjbGFzcykpIHsKICAgIGZ3cml0ZShTVERFUlIsICdZb3UgbmVlZCB0aGUgInN5bWZvbnkvY29uc29sZSIgY29tcG9uZW50IGluIG9yZGVyIHRvIHJ1biB0aGUgVmFyRHVtcGVyIHNlcnZlci4nLlBIUF9FT0wpOwogICAgZXhpdCgxKTsKfQoKJGlucHV0ID0gbmV3IEFyZ3ZJbnB1dCgpOwokb3V0cHV0ID0gbmV3IENvbnNvbGVPdXRwdXQoKTsKJGRlZmF1bHRIb3N0ID0gJzEyNy4wLjAuMTo5OTEyJzsKJGhvc3QgPSAkaW5wdXQtPmdldFBhcmFtZXRlck9wdGlvbihbJy0taG9zdCddLCAkX1NFUlZFUlsnVkFSX0RVTVBFUl9TRVJWRVInXSA/PyAkZGVmYXVsdEhvc3QsIHRydWUpOwokbG9nZ2VyID0gaW50ZXJmYWNlX2V4aXN0cyhMb2dnZXJJbnRlcmZhY2U6OmNsYXNzKSA/IG5ldyBDb25zb2xlTG9nZ2VyKCRvdXRwdXQtPmdldEVycm9yT3V0cHV0KCkpIDogbnVsbDsKCiRhcHAgPSBuZXcgQXBwbGljYXRpb24oKTsKCiRhcHAtPmdldERlZmluaXRpb24oKS0+YWRkT3B0aW9uKAogICAgbmV3IElucHV0T3B0aW9uKCctLWhvc3QnLCBudWxsLCBJbnB1dE9wdGlvbjo6VkFMVUVfUkVRVUlSRUQsICdUaGUgYWRkcmVzcyB0aGUgc2VydmVyIHNob3VsZCBsaXN0ZW4gdG8nLCAkZGVmYXVsdEhvc3QpCik7CgokYXBwLT5hZGQoJGNvbW1hbmQgPSBuZXcgU2VydmVyRHVtcENvbW1hbmQobmV3IER1bXBTZXJ2ZXIoJGhvc3QsICRsb2dnZXIpKSkKICAgIC0+Z2V0QXBwbGljYXRpb24oKQogICAgLT5zZXREZWZhdWx0Q29tbWFuZCgkY29tbWFuZC0+Z2V0TmFtZSgpLCB0cnVlKQogICAgLT5ydW4oJGlucHV0LCAkb3V0cHV0KQo7Cg==AppDevTools/query/vendor/symfony/var-dumper/Resources/css/htmlDescriptor.cssYm9keSB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlOwogICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgIG1heC13aWR0aDogMTE0MHB4OwogICAgbWFyZ2luOiBhdXRvOwogICAgcGFkZGluZzogMTVweDsKICAgIHdvcmQtd3JhcDogYnJlYWstd29yZDsKICAgIGJhY2tncm91bmQtY29sb3I6ICNGOUY5Rjk7CiAgICBjb2xvcjogIzIyMjsKICAgIGZvbnQtZmFtaWx5OiBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOwogICAgZm9udC1zaXplOiAxNHB4OwogICAgbGluZS1oZWlnaHQ6IDEuNDsKfQpwIHsKICAgIG1hcmdpbjogMDsKfQphIHsKICAgIGNvbG9yOiAjMjE4QkMzOwogICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwp9CmE6aG92ZXIgewogICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cn0KLnRleHQtc21hbGwgewogICAgZm9udC1zaXplOiAxMnB4ICFpbXBvcnRhbnQ7Cn0KYXJ0aWNsZSB7CiAgICBtYXJnaW46IDVweDsKICAgIG1hcmdpbi1ib3R0b206IDEwcHg7Cn0KYXJ0aWNsZSA+IGhlYWRlciA+IC5yb3cgewogICAgZGlzcGxheTogZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7CiAgICBtYXJnaW4tYm90dG9tOiAxMHB4Owp9CmFydGljbGUgPiBoZWFkZXIgPiAucm93ID4gLmNvbCB7CiAgICBmbGV4OiAxOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKfQphcnRpY2xlID4gaGVhZGVyID4gLnJvdyA+IGgyIHsKICAgIGZvbnQtc2l6ZTogMTRweDsKICAgIGNvbG9yOiAjMjIyOwogICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsKICAgIGZvbnQtZmFtaWx5OiAiTHVjaWRhIENvbnNvbGUiLCBtb25vc3BhY2UsIHNhbnMtc2VyaWY7CiAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7CiAgICBtYXJnaW46IDIwcHggNXB4IDAgMDsKICAgIHVzZXItc2VsZWN0OiBhbGw7Cn0KYXJ0aWNsZSA+IGhlYWRlciA+IC5yb3cgPiBoMiA+IGNvZGUgewogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgY29sb3I6ICNjYzIyNTU7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjdmN2Y5OwogICAgYm9yZGVyOiAxcHggc29saWQgI2UxZTFlODsKICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgcGFkZGluZzogMCAzcHg7Cn0KYXJ0aWNsZSA+IGhlYWRlciA+IC5yb3cgPiB0aW1lLmNvbCB7CiAgICBmbGV4OiAwOwogICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgY29sb3I6ICM5OTk7CiAgICBmb250LXN0eWxlOiBpdGFsaWM7Cn0KYXJ0aWNsZSA+IGhlYWRlciB1bC50YWdzIHsKICAgIGxpc3Qtc3R5bGU6IG5vbmU7CiAgICBwYWRkaW5nOiAwOwogICAgbWFyZ2luOiAwOwogICAgZm9udC1zaXplOiAxMnB4Owp9CmFydGljbGUgPiBoZWFkZXIgdWwudGFncyA+IGxpIHsKICAgIHVzZXItc2VsZWN0OiBhbGw7CiAgICBtYXJnaW4tYm90dG9tOiAycHg7Cn0KYXJ0aWNsZSA+IGhlYWRlciB1bC50YWdzID4gbGkgPiBzcGFuLmJhZGdlIHsKICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgIHBhZGRpbmc6IC4yNWVtIC40ZW07CiAgICBtYXJnaW4tcmlnaHQ6IDVweDsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIGJhY2tncm91bmQtY29sb3I6ICM2Yzc1N2QzYjsKICAgIGNvbG9yOiAjNTI0ZDRkOwogICAgZm9udC1zaXplOiAxMnB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsKICAgIHVzZXItc2VsZWN0OiBub25lOwp9CmFydGljbGUgPiBzZWN0aW9uLmJvZHkgewogICAgYm9yZGVyOiAxcHggc29saWQgI2Q4ZDhkODsKICAgIGJhY2tncm91bmQ6ICNGRkY7CiAgICBwYWRkaW5nOiAxMHB4OwogICAgYm9yZGVyLXJhZGl1czogM3B4Owp9CnByZS5zZi1kdW1wIHsKICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgIG1hcmdpbi1ib3R0b206IDA7Cn0KLmhpZGRlbiB7CiAgICBkaXNwbGF5OiBub25lOyAhaW1wb3J0YW50Cn0KLmR1bXBlZC10YWcgPiAuc2YtZHVtcCB7CiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICBtYXJnaW46IDA7CiAgICBwYWRkaW5nOiAxcHggNXB4OwogICAgbGluZS1oZWlnaHQ6IDEuNDsKICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsKICAgIHVzZXItc2VsZWN0OiBhdXRvOwp9Ci5kdW1wZWQtdGFnID4gcHJlLnNmLWR1bXAsCi5kdW1wZWQtdGFnID4gLnNmLWR1bXAtZGVmYXVsdCB7CiAgICBjb2xvcjogI0NDNzgzMjsKICAgIGJhY2tncm91bmQ6IG5vbmU7Cn0KLmR1bXBlZC10YWcgPiAuc2YtZHVtcCAuc2YtZHVtcC1zdHIgeyBjb2xvcjogIzYyOTc1NTsgfQouZHVtcGVkLXRhZyA+IC5zZi1kdW1wIC5zZi1kdW1wLXByaXZhdGUsCi5kdW1wZWQtdGFnID4gLnNmLWR1bXAgLnNmLWR1bXAtcHJvdGVjdGVkLAouZHVtcGVkLXRhZyA+IC5zZi1kdW1wIC5zZi1kdW1wLXB1YmxpYyB7IGNvbG9yOiAjMjYyNjI2OyB9Ci5kdW1wZWQtdGFnID4gLnNmLWR1bXAgLnNmLWR1bXAtbm90ZSB7IGNvbG9yOiAjNjg5N0JCOyB9Ci5kdW1wZWQtdGFnID4gLnNmLWR1bXAgLnNmLWR1bXAta2V5IHsgY29sb3I6ICM3ODkzMzk7IH0KLmR1bXBlZC10YWcgPiAuc2YtZHVtcCAuc2YtZHVtcC1yZWYgeyBjb2xvcjogIzZFNkU2RTsgfQouZHVtcGVkLXRhZyA+IC5zZi1kdW1wIC5zZi1kdW1wLWVsbGlwc2lzIHsgY29sb3I6ICNDQzc4MzI7IG1heC13aWR0aDogMTAwZW07IH0KLmR1bXBlZC10YWcgPiAuc2YtZHVtcCAuc2YtZHVtcC1lbGxpcHNpcy1wYXRoIHsgbWF4LXdpZHRoOiA1ZW07IH0KAppDevTools/query/vendor/symfony/var-dumper/Resources/functions/dump.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCnVzZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcVmFyRHVtcGVyOwoKaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2R1bXAnKSkgewogICAgLyoqCiAgICAgKiBAYXV0aG9yIE5pY29sYXMgR3Jla2FzIDxwQHRjaHdvcmsuY29tPgogICAgICovCiAgICBmdW5jdGlvbiBkdW1wKCR2YXIsIC4uLiRtb3JlVmFycykKICAgIHsKICAgICAgICBWYXJEdW1wZXI6OmR1bXAoJHZhcik7CgogICAgICAgIGZvcmVhY2ggKCRtb3JlVmFycyBhcyAkdmFyKSB7CiAgICAgICAgICAgIFZhckR1bXBlcjo6ZHVtcCgkdmFyKTsKICAgICAgICB9CgogICAgICAgIGlmICgxIDwgZnVuY19udW1fYXJncygpKSB7CiAgICAgICAgICAgIHJldHVybiBmdW5jX2dldF9hcmdzKCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHZhcjsKICAgIH0KfQoKaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2RkJykpIHsKICAgIGZ1bmN0aW9uIGRkKCR2YXIsIC4uLiRtb3JlVmFycykKICAgIHsKICAgICAgICBWYXJEdW1wZXI6OmR1bXAoJHZhcik7CgogICAgICAgIGZvcmVhY2ggKCRtb3JlVmFycyBhcyAkdmFyKSB7CiAgICAgICAgICAgIFZhckR1bXBlcjo6ZHVtcCgkdmFyKTsKICAgICAgICB9CgogICAgICAgIGV4aXQoMSk7CiAgICB9Cn0KAppDevTools/query/vendor/symfony/var-dumper/Resources/js/htmlDescriptor.jsZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZ1bmN0aW9uKCkgewogIGxldCBwcmV2ID0gbnVsbDsKICBBcnJheS5mcm9tKGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdhcnRpY2xlJykpLnJldmVyc2UoKS5mb3JFYWNoKGZ1bmN0aW9uIChhcnRpY2xlKSB7CiAgICBjb25zdCBkZWR1cElkID0gYXJ0aWNsZS5kYXRhc2V0LmRlZHVwSWQ7CiAgICBpZiAoZGVkdXBJZCA9PT0gcHJldikgewogICAgICBhcnRpY2xlLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkZXInKVswXS5jbGFzc0xpc3QuYWRkKCdoaWRkZW4nKTsKICAgIH0KICAgIHByZXYgPSBkZWR1cElkOwogIH0pOwp9KTsKAppDevTools/query/vendor/symfony/var-dumper/Server/Connection.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcU2VydmVyOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDbG9uZXJcRGF0YTsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxEdW1wZXJcQ29udGV4dFByb3ZpZGVyXENvbnRleHRQcm92aWRlckludGVyZmFjZTsKCi8qKgogKiBGb3J3YXJkcyBzZXJpYWxpemVkIERhdGEgY2xvbmVzIHRvIGEgc2VydmVyLgogKgogKiBAYXV0aG9yIE1heGltZSBTdGVpbmhhdXNzZXIgPG1heGltZS5zdGVpbmhhdXNzZXJAZ21haWwuY29tPgogKi8KY2xhc3MgQ29ubmVjdGlvbgp7CiAgICBwcml2YXRlICRob3N0OwogICAgcHJpdmF0ZSAkY29udGV4dFByb3ZpZGVyczsKICAgIHByaXZhdGUgJHNvY2tldDsKCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAgICAgICAgICAgICAgICAkaG9zdCAgICAgICAgICAgICBUaGUgc2VydmVyIGhvc3QKICAgICAqIEBwYXJhbSBDb250ZXh0UHJvdmlkZXJJbnRlcmZhY2VbXSAkY29udGV4dFByb3ZpZGVycyBDb250ZXh0IHByb3ZpZGVycyBpbmRleGVkIGJ5IGNvbnRleHQgbmFtZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3Qoc3RyaW5nICRob3N0LCBhcnJheSAkY29udGV4dFByb3ZpZGVycyA9IGFycmF5KCkpCiAgICB7CiAgICAgICAgaWYgKGZhbHNlID09PSBzdHJwb3MoJGhvc3QsICc6Ly8nKSkgewogICAgICAgICAgICAkaG9zdCA9ICd0Y3A6Ly8nLiRob3N0OwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPmhvc3QgPSAkaG9zdDsKICAgICAgICAkdGhpcy0+Y29udGV4dFByb3ZpZGVycyA9ICRjb250ZXh0UHJvdmlkZXJzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDb250ZXh0UHJvdmlkZXJzKCk6IGFycmF5CiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5jb250ZXh0UHJvdmlkZXJzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB3cml0ZShEYXRhICRkYXRhKTogYm9vbAogICAgewogICAgICAgICRzb2NrZXRJc0ZyZXNoID0gISR0aGlzLT5zb2NrZXQ7CiAgICAgICAgaWYgKCEkdGhpcy0+c29ja2V0ID0gJHRoaXMtPnNvY2tldCA/OiAkdGhpcy0+Y3JlYXRlU29ja2V0KCkpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KCiAgICAgICAgJGNvbnRleHQgPSBhcnJheSgndGltZXN0YW1wJyA9PiBtaWNyb3RpbWUodHJ1ZSkpOwogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5jb250ZXh0UHJvdmlkZXJzIGFzICRuYW1lID0+ICRwcm92aWRlcikgewogICAgICAgICAgICAkY29udGV4dFskbmFtZV0gPSAkcHJvdmlkZXItPmdldENvbnRleHQoKTsKICAgICAgICB9CiAgICAgICAgJGNvbnRleHQgPSBhcnJheV9maWx0ZXIoJGNvbnRleHQpOwogICAgICAgICRlbmNvZGVkUGF5bG9hZCA9IGJhc2U2NF9lbmNvZGUoc2VyaWFsaXplKGFycmF5KCRkYXRhLCAkY29udGV4dCkpKS4iXG4iOwoKICAgICAgICBzZXRfZXJyb3JfaGFuZGxlcihhcnJheShzZWxmOjpjbGFzcywgJ251bGxFcnJvckhhbmRsZXInKSk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgaWYgKC0xICE9PSBzdHJlYW1fc29ja2V0X3NlbmR0bygkdGhpcy0+c29ja2V0LCAkZW5jb2RlZFBheWxvYWQpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoISRzb2NrZXRJc0ZyZXNoKSB7CiAgICAgICAgICAgICAgICBzdHJlYW1fc29ja2V0X3NodXRkb3duKCR0aGlzLT5zb2NrZXQsIFNUUkVBTV9TSFVUX1JEV1IpOwogICAgICAgICAgICAgICAgZmNsb3NlKCR0aGlzLT5zb2NrZXQpOwogICAgICAgICAgICAgICAgJHRoaXMtPnNvY2tldCA9ICR0aGlzLT5jcmVhdGVTb2NrZXQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoLTEgIT09IHN0cmVhbV9zb2NrZXRfc2VuZHRvKCR0aGlzLT5zb2NrZXQsICRlbmNvZGVkUGF5bG9hZCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgcmVzdG9yZV9lcnJvcl9oYW5kbGVyKCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gbnVsbEVycm9ySGFuZGxlcigkdCwgJG0pCiAgICB7CiAgICAgICAgLy8gbm8tb3AKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGNyZWF0ZVNvY2tldCgpCiAgICB7CiAgICAgICAgc2V0X2Vycm9yX2hhbmRsZXIoYXJyYXkoc2VsZjo6Y2xhc3MsICdudWxsRXJyb3JIYW5kbGVyJykpOwogICAgICAgIHRyeSB7CiAgICAgICAgICAgIHJldHVybiBzdHJlYW1fc29ja2V0X2NsaWVudCgkdGhpcy0+aG9zdCwgJGVycm5vLCAkZXJyc3RyLCAzLCBTVFJFQU1fQ0xJRU5UX0NPTk5FQ1QgfCBTVFJFQU1fQ0xJRU5UX0FTWU5DX0NPTk5FQ1QpOwogICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgIHJlc3RvcmVfZXJyb3JfaGFuZGxlcigpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRzb2NrZXQ7CiAgICB9Cn0KAppDevTools/query/vendor/symfony/var-dumper/Server/DumpServer.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcU2VydmVyOwoKdXNlIFBzclxMb2dcTG9nZ2VySW50ZXJmYWNlOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENsb25lclxEYXRhOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENsb25lclxTdHViOwoKLyoqCiAqIEEgc2VydmVyIGNvbGxlY3RpbmcgRGF0YSBjbG9uZXMgc2VudCBieSBhIFNlcnZlckR1bXBlci4KICoKICogQGF1dGhvciBNYXhpbWUgU3RlaW5oYXVzc2VyIDxtYXhpbWUuc3RlaW5oYXVzc2VyQGdtYWlsLmNvbT4KICoKICogQGZpbmFsCiAqLwpjbGFzcyBEdW1wU2VydmVyCnsKICAgIHByaXZhdGUgJGhvc3Q7CiAgICBwcml2YXRlICRzb2NrZXQ7CiAgICBwcml2YXRlICRsb2dnZXI7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KHN0cmluZyAkaG9zdCwgTG9nZ2VySW50ZXJmYWNlICRsb2dnZXIgPSBudWxsKQogICAgewogICAgICAgIGlmIChmYWxzZSA9PT0gc3RycG9zKCRob3N0LCAnOi8vJykpIHsKICAgICAgICAgICAgJGhvc3QgPSAndGNwOi8vJy4kaG9zdDsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5ob3N0ID0gJGhvc3Q7CiAgICAgICAgJHRoaXMtPmxvZ2dlciA9ICRsb2dnZXI7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHN0YXJ0KCk6IHZvaWQKICAgIHsKICAgICAgICBpZiAoISR0aGlzLT5zb2NrZXQgPSBzdHJlYW1fc29ja2V0X3NlcnZlcigkdGhpcy0+aG9zdCwgJGVycm5vLCAkZXJyc3RyKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oc3ByaW50ZignU2VydmVyIHN0YXJ0IGZhaWxlZCBvbiAiJXMiOiAlcyAlcy4nLCAkdGhpcy0+aG9zdCwgJGVycnN0ciwgJGVycm5vKSk7CiAgICAgICAgfQogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBsaXN0ZW4oY2FsbGFibGUgJGNhbGxiYWNrKTogdm9pZAogICAgewogICAgICAgIGlmIChudWxsID09PSAkdGhpcy0+c29ja2V0KSB7CiAgICAgICAgICAgICR0aGlzLT5zdGFydCgpOwogICAgICAgIH0KCiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmdldE1lc3NhZ2VzKCkgYXMgJGNsaWVudElkID0+ICRtZXNzYWdlKSB7CiAgICAgICAgICAgICRwYXlsb2FkID0gQHVuc2VyaWFsaXplKGJhc2U2NF9kZWNvZGUoJG1lc3NhZ2UpLCBhcnJheSgnYWxsb3dlZF9jbGFzc2VzJyA9PiBhcnJheShEYXRhOjpjbGFzcywgU3R1Yjo6Y2xhc3MpKSk7CgogICAgICAgICAgICAvLyBJbXBvc3NpYmxlIHRvIGRlY29kZSB0aGUgbWVzc2FnZSwgZ2l2ZSB1cC4KICAgICAgICAgICAgaWYgKGZhbHNlID09PSAkcGF5bG9hZCkgewogICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5sb2dnZXIpIHsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+bG9nZ2VyLT53YXJuaW5nKCdVbmFibGUgdG8gZGVjb2RlIGEgbWVzc2FnZSBmcm9tIHtjbGllbnRJZH0gY2xpZW50LicsIGFycmF5KCdjbGllbnRJZCcgPT4gJGNsaWVudElkKSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICghaXNfYXJyYXkoJHBheWxvYWQpIHx8IGNvdW50KCRwYXlsb2FkKSA8IDIgfHwgISRwYXlsb2FkWzBdIGluc3RhbmNlb2YgRGF0YSB8fCAhaXNfYXJyYXkoJHBheWxvYWRbMV0pKSB7CiAgICAgICAgICAgICAgICBpZiAoJHRoaXMtPmxvZ2dlcikgewogICAgICAgICAgICAgICAgICAgICR0aGlzLT5sb2dnZXItPndhcm5pbmcoJ0ludmFsaWQgcGF5bG9hZCBmcm9tIHtjbGllbnRJZH0gY2xpZW50LiBFeHBlY3RlZCBhbiBhcnJheSBvZiB0d28gZWxlbWVudHMgKERhdGEgJGRhdGEsIGFycmF5ICRjb250ZXh0KScsIGFycmF5KCdjbGllbnRJZCcgPT4gJGNsaWVudElkKSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGxpc3QoJGRhdGEsICRjb250ZXh0KSA9ICRwYXlsb2FkOwoKICAgICAgICAgICAgJGNhbGxiYWNrKCRkYXRhLCAkY29udGV4dCwgJGNsaWVudElkKTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEhvc3QoKTogc3RyaW5nCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5ob3N0OwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gZ2V0TWVzc2FnZXMoKTogaXRlcmFibGUKICAgIHsKICAgICAgICAkc29ja2V0cyA9IGFycmF5KChpbnQpICR0aGlzLT5zb2NrZXQgPT4gJHRoaXMtPnNvY2tldCk7CiAgICAgICAgJHdyaXRlID0gYXJyYXkoKTsKCiAgICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgICAgJHJlYWQgPSAkc29ja2V0czsKICAgICAgICAgICAgc3RyZWFtX3NlbGVjdCgkcmVhZCwgJHdyaXRlLCAkd3JpdGUsIG51bGwpOwoKICAgICAgICAgICAgZm9yZWFjaCAoJHJlYWQgYXMgJHN0cmVhbSkgewogICAgICAgICAgICAgICAgaWYgKCR0aGlzLT5zb2NrZXQgPT09ICRzdHJlYW0pIHsKICAgICAgICAgICAgICAgICAgICAkc3RyZWFtID0gc3RyZWFtX3NvY2tldF9hY2NlcHQoJHRoaXMtPnNvY2tldCk7CiAgICAgICAgICAgICAgICAgICAgJHNvY2tldHNbKGludCkgJHN0cmVhbV0gPSAkc3RyZWFtOwogICAgICAgICAgICAgICAgfSBlbHNlaWYgKGZlb2YoJHN0cmVhbSkpIHsKICAgICAgICAgICAgICAgICAgICB1bnNldCgkc29ja2V0c1soaW50KSAkc3RyZWFtXSk7CiAgICAgICAgICAgICAgICAgICAgZmNsb3NlKCRzdHJlYW0pOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICB5aWVsZCAoaW50KSAkc3RyZWFtID0+IGZnZXRzKCRzdHJlYW0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9Cg==AppDevTools/query/vendor/symfony/var-dumper/Test/VarDumperTestTrait.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcVGVzdDsKCnVzZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2xvbmVyXFZhckNsb25lcjsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxEdW1wZXJcQ2xpRHVtcGVyOwoKLyoqCiAqIEBhdXRob3IgTmljb2xhcyBHcmVrYXMgPHBAdGNod29yay5jb20+CiAqLwp0cmFpdCBWYXJEdW1wZXJUZXN0VHJhaXQKewogICAgcHVibGljIGZ1bmN0aW9uIGFzc2VydER1bXBFcXVhbHMoJGV4cGVjdGVkLCAkZGF0YSwgJGZpbHRlciA9IDAsICRtZXNzYWdlID0gJycpCiAgICB7CiAgICAgICAgJHRoaXMtPmFzc2VydFNhbWUoJHRoaXMtPnByZXBhcmVFeHBlY3RhdGlvbigkZXhwZWN0ZWQsICRmaWx0ZXIpLCAkdGhpcy0+Z2V0RHVtcCgkZGF0YSwgbnVsbCwgJGZpbHRlciksICRtZXNzYWdlKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gYXNzZXJ0RHVtcE1hdGNoZXNGb3JtYXQoJGV4cGVjdGVkLCAkZGF0YSwgJGZpbHRlciA9IDAsICRtZXNzYWdlID0gJycpCiAgICB7CiAgICAgICAgJHRoaXMtPmFzc2VydFN0cmluZ01hdGNoZXNGb3JtYXQoJHRoaXMtPnByZXBhcmVFeHBlY3RhdGlvbigkZXhwZWN0ZWQsICRmaWx0ZXIpLCAkdGhpcy0+Z2V0RHVtcCgkZGF0YSwgbnVsbCwgJGZpbHRlciksICRtZXNzYWdlKTsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0RHVtcCgkZGF0YSwgJGtleSA9IG51bGwsICRmaWx0ZXIgPSAwKQogICAgewogICAgICAgICRmbGFncyA9IGdldGVudignRFVNUF9MSUdIVF9BUlJBWScpID8gQ2xpRHVtcGVyOjpEVU1QX0xJR0hUX0FSUkFZIDogMDsKICAgICAgICAkZmxhZ3MgfD0gZ2V0ZW52KCdEVU1QX1NUUklOR19MRU5HVEgnKSA/IENsaUR1bXBlcjo6RFVNUF9TVFJJTkdfTEVOR1RIIDogMDsKCiAgICAgICAgJGNsb25lciA9IG5ldyBWYXJDbG9uZXIoKTsKICAgICAgICAkY2xvbmVyLT5zZXRNYXhJdGVtcygtMSk7CiAgICAgICAgJGR1bXBlciA9IG5ldyBDbGlEdW1wZXIobnVsbCwgbnVsbCwgJGZsYWdzKTsKICAgICAgICAkZHVtcGVyLT5zZXRDb2xvcnMoZmFsc2UpOwogICAgICAgICRkYXRhID0gJGNsb25lci0+Y2xvbmVWYXIoJGRhdGEsICRmaWx0ZXIpLT53aXRoUmVmSGFuZGxlcyhmYWxzZSk7CiAgICAgICAgaWYgKG51bGwgIT09ICRrZXkgJiYgbnVsbCA9PT0gJGRhdGEgPSAkZGF0YS0+c2Vlaygka2V5KSkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gcnRyaW0oJGR1bXBlci0+ZHVtcCgkZGF0YSwgdHJ1ZSkpOwogICAgfQoKICAgIHByaXZhdGUgZnVuY3Rpb24gcHJlcGFyZUV4cGVjdGF0aW9uKCRleHBlY3RlZCwgJGZpbHRlcikKICAgIHsKICAgICAgICBpZiAoIWlzX3N0cmluZygkZXhwZWN0ZWQpKSB7CiAgICAgICAgICAgICRleHBlY3RlZCA9ICR0aGlzLT5nZXREdW1wKCRleHBlY3RlZCwgbnVsbCwgJGZpbHRlcik7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gcnRyaW0oJGV4cGVjdGVkKTsKICAgIH0KfQo=AppDevTools/query/vendor/symfony/var-dumper/Tests/Caster/CasterTest.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcVGVzdHNcQ2FzdGVyOwoKdXNlIFBIUFVuaXRcRnJhbWV3b3JrXFRlc3RDYXNlOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENhc3RlclxDYXN0ZXI7CnVzZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcVGVzdFxWYXJEdW1wZXJUZXN0VHJhaXQ7CgovKioKICogQGF1dGhvciBOaWNvbGFzIEdyZWthcyA8cEB0Y2h3b3JrLmNvbT4KICovCmNsYXNzIENhc3RlclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZQp7CiAgICB1c2UgVmFyRHVtcGVyVGVzdFRyYWl0OwoKICAgIHByaXZhdGUgJHJlZmVyZW5jZUFycmF5ID0gYXJyYXkoCiAgICAgICAgJ251bGwnID0+IG51bGwsCiAgICAgICAgJ2VtcHR5JyA9PiBmYWxzZSwKICAgICAgICAncHVibGljJyA9PiAncHViJywKICAgICAgICAiXDB+XDB2aXJ0dWFsIiA9PiAndmlydCcsCiAgICAgICAgIlwwK1wwZHluYW1pYyIgPT4gJ2R5bicsCiAgICAgICAgIlwwKlwwcHJvdGVjdGVkIiA9PiAncHJvdCcsCiAgICAgICAgIlwwRm9vXDBwcml2YXRlIiA9PiAncHJpdicsCiAgICApOwoKICAgIC8qKgogICAgICogQGRhdGFQcm92aWRlciBwcm92aWRlRmlsdGVyCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0RmlsdGVyKCRmaWx0ZXIsICRleHBlY3RlZERpZmYsICRsaXN0ZWRQcm9wZXJ0aWVzID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAobnVsbCA9PT0gJGxpc3RlZFByb3BlcnRpZXMpIHsKICAgICAgICAgICAgJGZpbHRlcmVkQXJyYXkgPSBDYXN0ZXI6OmZpbHRlcigkdGhpcy0+cmVmZXJlbmNlQXJyYXksICRmaWx0ZXIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRmaWx0ZXJlZEFycmF5ID0gQ2FzdGVyOjpmaWx0ZXIoJHRoaXMtPnJlZmVyZW5jZUFycmF5LCAkZmlsdGVyLCAkbGlzdGVkUHJvcGVydGllcyk7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+YXNzZXJ0U2FtZSgkZXhwZWN0ZWREaWZmLCBhcnJheV9kaWZmX2Fzc29jKCR0aGlzLT5yZWZlcmVuY2VBcnJheSwgJGZpbHRlcmVkQXJyYXkpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gcHJvdmlkZUZpbHRlcigpCiAgICB7CiAgICAgICAgcmV0dXJuIGFycmF5KAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIDAsCiAgICAgICAgICAgICAgICBhcnJheSgpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIENhc3Rlcjo6RVhDTFVERV9QVUJMSUMsCiAgICAgICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgICAgICAnbnVsbCcgPT4gbnVsbCwKICAgICAgICAgICAgICAgICAgICAnZW1wdHknID0+IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICdwdWJsaWMnID0+ICdwdWInLAogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBDYXN0ZXI6OkVYQ0xVREVfTlVMTCwKICAgICAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgICAgICdudWxsJyA9PiBudWxsLAogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBDYXN0ZXI6OkVYQ0xVREVfRU1QVFksCiAgICAgICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgICAgICAnbnVsbCcgPT4gbnVsbCwKICAgICAgICAgICAgICAgICAgICAnZW1wdHknID0+IGZhbHNlLAogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBDYXN0ZXI6OkVYQ0xVREVfVklSVFVBTCwKICAgICAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgICAgICJcMH5cMHZpcnR1YWwiID0+ICd2aXJ0JywKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgQ2FzdGVyOjpFWENMVURFX0RZTkFNSUMsCiAgICAgICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgICAgICAiXDArXDBkeW5hbWljIiA9PiAnZHluJywKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgQ2FzdGVyOjpFWENMVURFX1BST1RFQ1RFRCwKICAgICAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgICAgICJcMCpcMHByb3RlY3RlZCIgPT4gJ3Byb3QnLAogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBDYXN0ZXI6OkVYQ0xVREVfUFJJVkFURSwKICAgICAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgICAgICJcMEZvb1wwcHJpdmF0ZSIgPT4gJ3ByaXYnLAogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBDYXN0ZXI6OkVYQ0xVREVfVkVSQk9TRSwKICAgICAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgICAgICdwdWJsaWMnID0+ICdwdWInLAogICAgICAgICAgICAgICAgICAgICJcMCpcMHByb3RlY3RlZCIgPT4gJ3Byb3QnLAogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgIGFycmF5KCdwdWJsaWMnLCAiXDAqXDBwcm90ZWN0ZWQiKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBDYXN0ZXI6OkVYQ0xVREVfTk9UX0lNUE9SVEFOVCwKICAgICAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgICAgICdudWxsJyA9PiBudWxsLAogICAgICAgICAgICAgICAgICAgICdlbXB0eScgPT4gZmFsc2UsCiAgICAgICAgICAgICAgICAgICAgIlwwflwwdmlydHVhbCIgPT4gJ3ZpcnQnLAogICAgICAgICAgICAgICAgICAgICJcMCtcMGR5bmFtaWMiID0+ICdkeW4nLAogICAgICAgICAgICAgICAgICAgICJcMEZvb1wwcHJpdmF0ZSIgPT4gJ3ByaXYnLAogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgIGFycmF5KCdwdWJsaWMnLCAiXDAqXDBwcm90ZWN0ZWQiKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBDYXN0ZXI6OkVYQ0xVREVfVklSVFVBTCB8IENhc3Rlcjo6RVhDTFVERV9EWU5BTUlDLAogICAgICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgIlwwflwwdmlydHVhbCIgPT4gJ3ZpcnQnLAogICAgICAgICAgICAgICAgICAgICJcMCtcMGR5bmFtaWMiID0+ICdkeW4nLAogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBDYXN0ZXI6OkVYQ0xVREVfTk9UX0lNUE9SVEFOVCB8IENhc3Rlcjo6RVhDTFVERV9WRVJCT1NFLAogICAgICAgICAgICAgICAgJHRoaXMtPnJlZmVyZW5jZUFycmF5LAogICAgICAgICAgICAgICAgYXJyYXkoJ3B1YmxpYycsICJcMCpcMHByb3RlY3RlZCIpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIENhc3Rlcjo6RVhDTFVERV9OT1RfSU1QT1JUQU5UIHwgQ2FzdGVyOjpFWENMVURFX0VNUFRZLAogICAgICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgJ251bGwnID0+IG51bGwsCiAgICAgICAgICAgICAgICAgICAgJ2VtcHR5JyA9PiBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAiXDB+XDB2aXJ0dWFsIiA9PiAndmlydCcsCiAgICAgICAgICAgICAgICAgICAgIlwwK1wwZHluYW1pYyIgPT4gJ2R5bicsCiAgICAgICAgICAgICAgICAgICAgIlwwKlwwcHJvdGVjdGVkIiA9PiAncHJvdCcsCiAgICAgICAgICAgICAgICAgICAgIlwwRm9vXDBwcml2YXRlIiA9PiAncHJpdicsCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgYXJyYXkoJ3B1YmxpYycsICdlbXB0eScpLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIENhc3Rlcjo6RVhDTFVERV9WRVJCT1NFIHwgQ2FzdGVyOjpFWENMVURFX0VNUFRZIHwgQ2FzdGVyOjpFWENMVURFX1NUUklDVCwKICAgICAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgICAgICdlbXB0eScgPT4gZmFsc2UsCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgYXJyYXkoJ3B1YmxpYycsICdlbXB0eScpLAogICAgICAgICAgICApLAogICAgICAgICk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RBbm9ueW1vdXNDbGFzcygpCiAgICB7CiAgICAgICAgJGMgPSBldmFsKCdyZXR1cm4gbmV3IGNsYXNzIGV4dGVuZHMgc3RkQ2xhc3MgeyBwcml2YXRlICRmb28gPSAiZm9vIjsgfTsnKTsKCiAgICAgICAgJHRoaXMtPmFzc2VydER1bXBNYXRjaGVzRm9ybWF0KAogICAgICAgICAgICA8PDwnRU9UWFQnCnN0ZENsYXNzQGFub255bW91cyB7CiAgLWZvbzogImZvbyIKfQpFT1RYVAogICAgICAgICAgICAsICRjCiAgICAgICAgKTsKCiAgICAgICAgJGMgPSBldmFsKCdyZXR1cm4gbmV3IGNsYXNzIHsgcHJpdmF0ZSAkZm9vID0gImZvbyI7IH07Jyk7CgogICAgICAgICR0aGlzLT5hc3NlcnREdW1wTWF0Y2hlc0Zvcm1hdCgKICAgICAgICAgICAgPDw8J0VPVFhUJwpAYW5vbnltb3VzIHsKICAtZm9vOiAiZm9vIgp9CkVPVFhUCiAgICAgICAgICAgICwgJGMKICAgICAgICApOwogICAgfQp9Cg==AppDevTools/query/vendor/symfony/var-dumper/Tests/Caster/DateCasterTest.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcVGVzdHNcQ2FzdGVyOwoKdXNlIFBIUFVuaXRcRnJhbWV3b3JrXFRlc3RDYXNlOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENhc3RlclxDYXN0ZXI7CnVzZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyXERhdGVDYXN0ZXI7CnVzZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2xvbmVyXFN0dWI7CnVzZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcVGVzdFxWYXJEdW1wZXJUZXN0VHJhaXQ7CgovKioKICogQGF1dGhvciBEYW55IE1haWxsYXJkIDxkYW55bWFpbGxhcmQ5M2JAZ21haWwuY29tPgogKi8KY2xhc3MgRGF0ZUNhc3RlclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZQp7CiAgICB1c2UgVmFyRHVtcGVyVGVzdFRyYWl0OwoKICAgIC8qKgogICAgICogQGRhdGFQcm92aWRlciBwcm92aWRlRGF0ZVRpbWVzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0RHVtcERhdGVUaW1lKCR0aW1lLCAkdGltZXpvbmUsICR4RGF0ZSwgJHhUaW1lc3RhbXApCiAgICB7CiAgICAgICAgJGRhdGUgPSBuZXcgXERhdGVUaW1lKCR0aW1lLCBuZXcgXERhdGVUaW1lWm9uZSgkdGltZXpvbmUpKTsKCiAgICAgICAgJHhEdW1wID0gPDw8RU9EVU1QCkRhdGVUaW1lIEAkeFRpbWVzdGFtcCB7CiAgZGF0ZTogJHhEYXRlCn0KRU9EVU1QOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0RHVtcEVxdWFscygkeER1bXAsICRkYXRlKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBkYXRhUHJvdmlkZXIgcHJvdmlkZURhdGVUaW1lcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdENhc3REYXRlVGltZSgkdGltZSwgJHRpbWV6b25lLCAkeERhdGUsICR4VGltZXN0YW1wLCAkeEluZm9zKQogICAgewogICAgICAgICRzdHViID0gbmV3IFN0dWIoKTsKICAgICAgICAkZGF0ZSA9IG5ldyBcRGF0ZVRpbWUoJHRpbWUsIG5ldyBcRGF0ZVRpbWVab25lKCR0aW1lem9uZSkpOwogICAgICAgICRjYXN0ID0gRGF0ZUNhc3Rlcjo6Y2FzdERhdGVUaW1lKCRkYXRlLCBhcnJheSgnZm9vJyA9PiAnYmFyJyksICRzdHViLCBmYWxzZSwgMCk7CgogICAgICAgICR4RHVtcCA9IDw8PEVPRFVNUAphcnJheToxIFsKICAiXFx4MDB+XFx4MDBkYXRlIiA9PiAkeERhdGUKXQpFT0RVTVA7CgogICAgICAgICR0aGlzLT5hc3NlcnREdW1wRXF1YWxzKCR4RHVtcCwgJGNhc3QpOwoKICAgICAgICAkeER1bXAgPSA8PDxFT0RVTVAKU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENhc3RlclxDb25zdFN0dWIgewogICt0eXBlOiAxCiAgK2NsYXNzOiAiJHhEYXRlIgogICt2YWx1ZTogIiVBJHhJbmZvcyVBIgogICtjdXQ6IDAKICAraGFuZGxlOiAwCiAgK3JlZkNvdW50OiAwCiAgK3Bvc2l0aW9uOiAwCiAgK2F0dHI6IFtdCn0KRU9EVU1QOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0RHVtcE1hdGNoZXNGb3JtYXQoJHhEdW1wLCAkY2FzdFsiXDB+XDBkYXRlIl0pOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBwcm92aWRlRGF0ZVRpbWVzKCkKICAgIHsKICAgICAgICByZXR1cm4gYXJyYXkoCiAgICAgICAgICAgIGFycmF5KCcyMDE3LTA0LTMwIDAwOjAwOjAwLjAwMDAwMCcsICdFdXJvcGUvWnVyaWNoJywgJzIwMTctMDQtMzAgMDA6MDA6MDAuMCBFdXJvcGUvWnVyaWNoICgrMDI6MDApJywgMTQ5MzUwMzIwMCwgJ1N1bmRheSwgQXByaWwgMzAsIDIwMTclQWZyb20gbm93JUFEU1QgT24nKSwKICAgICAgICAgICAgYXJyYXkoJzIwMTctMTItMzEgMDA6MDA6MDAuMDAwMDAwJywgJ0V1cm9wZS9adXJpY2gnLCAnMjAxNy0xMi0zMSAwMDowMDowMC4wIEV1cm9wZS9adXJpY2ggKCswMTowMCknLCAxNTE0Njc0ODAwLCAnU3VuZGF5LCBEZWNlbWJlciAzMSwgMjAxNyVBZnJvbSBub3clQURTVCBPZmYnKSwKICAgICAgICAgICAgYXJyYXkoJzIwMTctMDQtMzAgMDA6MDA6MDAuMDAwMDAwJywgJyswMjowMCcsICcyMDE3LTA0LTMwIDAwOjAwOjAwLjAgKzAyOjAwJywgMTQ5MzUwMzIwMCwgJ1N1bmRheSwgQXByaWwgMzAsIDIwMTclQWZyb20gbm93JyksCgogICAgICAgICAgICBhcnJheSgnMjAxNy0wNC0zMCAwMDowMDowMC4xMDAwMDAnLCAnKzAwOjAwJywgJzIwMTctMDQtMzAgMDA6MDA6MDAuMTAwICswMDowMCcsIDE0OTM1MTA0MDAsICdTdW5kYXksIEFwcmlsIDMwLCAyMDE3JUFmcm9tIG5vdycpLAogICAgICAgICAgICBhcnJheSgnMjAxNy0wNC0zMCAwMDowMDowMC4xMjAwMDAnLCAnKzAwOjAwJywgJzIwMTctMDQtMzAgMDA6MDA6MDAuMTIwICswMDowMCcsIDE0OTM1MTA0MDAsICdTdW5kYXksIEFwcmlsIDMwLCAyMDE3JUFmcm9tIG5vdycpLAogICAgICAgICAgICBhcnJheSgnMjAxNy0wNC0zMCAwMDowMDowMC4xMjMwMDAnLCAnKzAwOjAwJywgJzIwMTctMDQtMzAgMDA6MDA6MDAuMTIzICswMDowMCcsIDE0OTM1MTA0MDAsICdTdW5kYXksIEFwcmlsIDMwLCAyMDE3JUFmcm9tIG5vdycpLAogICAgICAgICAgICBhcnJheSgnMjAxNy0wNC0zMCAwMDowMDowMC4xMjM0MDAnLCAnKzAwOjAwJywgJzIwMTctMDQtMzAgMDA6MDA6MDAuMTIzNDAwICswMDowMCcsIDE0OTM1MTA0MDAsICdTdW5kYXksIEFwcmlsIDMwLCAyMDE3JUFmcm9tIG5vdycpLAogICAgICAgICAgICBhcnJheSgnMjAxNy0wNC0zMCAwMDowMDowMC4xMjM0NTAnLCAnKzAwOjAwJywgJzIwMTctMDQtMzAgMDA6MDA6MDAuMTIzNDUwICswMDowMCcsIDE0OTM1MTA0MDAsICdTdW5kYXksIEFwcmlsIDMwLCAyMDE3JUFmcm9tIG5vdycpLAogICAgICAgICAgICBhcnJheSgnMjAxNy0wNC0zMCAwMDowMDowMC4xMjM0NTYnLCAnKzAwOjAwJywgJzIwMTctMDQtMzAgMDA6MDA6MDAuMTIzNDU2ICswMDowMCcsIDE0OTM1MTA0MDAsICdTdW5kYXksIEFwcmlsIDMwLCAyMDE3JUFmcm9tIG5vdycpLAogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGF0YVByb3ZpZGVyIHByb3ZpZGVJbnRlcnZhbHMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRlc3REdW1wSW50ZXJ2YWwoJGludGVydmFsU3BlYywgJG1zLCAkaW52ZXJ0LCAkZXhwZWN0ZWQpCiAgICB7CiAgICAgICAgaWYgKCRtcyAmJiBQSFBfVkVSU0lPTl9JRCA+PSA3MDIwMCAmJiB2ZXJzaW9uX2NvbXBhcmUoUEhQX1ZFUlNJT04sICc3LjIuMHJjMycsICc8PScpKSB7CiAgICAgICAgICAgICR0aGlzLT5tYXJrVGVzdFNraXBwZWQoJ1NraXBwZWQgb24gNy4yIGJlZm9yZSByYzQgYmVjYXVzZSBvZiBwaHAgYnVnICM3NTM1NC4nKTsKICAgICAgICB9CgogICAgICAgICRpbnRlcnZhbCA9ICR0aGlzLT5jcmVhdGVJbnRlcnZhbCgkaW50ZXJ2YWxTcGVjLCAkbXMsICRpbnZlcnQpOwoKICAgICAgICAkeER1bXAgPSA8PDxFT0RVTVAKRGF0ZUludGVydmFsIHsKICBpbnRlcnZhbDogJGV4cGVjdGVkCiVBfQpFT0RVTVA7CgogICAgICAgICR0aGlzLT5hc3NlcnREdW1wTWF0Y2hlc0Zvcm1hdCgkeER1bXAsICRpbnRlcnZhbCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGF0YVByb3ZpZGVyIHByb3ZpZGVJbnRlcnZhbHMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRlc3REdW1wSW50ZXJ2YWxFeGNsdWRpbmdWZXJib3NpdHkoJGludGVydmFsU3BlYywgJG1zLCAkaW52ZXJ0LCAkZXhwZWN0ZWQpCiAgICB7CiAgICAgICAgaWYgKCRtcyAmJiBQSFBfVkVSU0lPTl9JRCA+PSA3MDIwMCAmJiB2ZXJzaW9uX2NvbXBhcmUoUEhQX1ZFUlNJT04sICc3LjIuMHJjMycsICc8PScpKSB7CiAgICAgICAgICAgICR0aGlzLT5tYXJrVGVzdFNraXBwZWQoJ1NraXBwZWQgb24gNy4yIGJlZm9yZSByYzQgYmVjYXVzZSBvZiBwaHAgYnVnICM3NTM1NC4nKTsKICAgICAgICB9CgogICAgICAgICRpbnRlcnZhbCA9ICR0aGlzLT5jcmVhdGVJbnRlcnZhbCgkaW50ZXJ2YWxTcGVjLCAkbXMsICRpbnZlcnQpOwoKICAgICAgICAkeER1bXAgPSA8PDxFT0RVTVAKRGF0ZUludGVydmFsIHsKICBpbnRlcnZhbDogJGV4cGVjdGVkCn0KRU9EVU1QOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0RHVtcEVxdWFscygkeER1bXAsICRpbnRlcnZhbCwgQ2FzdGVyOjpFWENMVURFX1ZFUkJPU0UpOwogICAgfQoKICAgIC8qKgogICAgICogQGRhdGFQcm92aWRlciBwcm92aWRlSW50ZXJ2YWxzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0Q2FzdEludGVydmFsKCRpbnRlcnZhbFNwZWMsICRtcywgJGludmVydCwgJHhJbnRlcnZhbCwgJHhTZWNvbmRzKQogICAgewogICAgICAgIGlmICgkbXMgJiYgUEhQX1ZFUlNJT05fSUQgPj0gNzAyMDAgJiYgdmVyc2lvbl9jb21wYXJlKFBIUF9WRVJTSU9OLCAnNy4yLjByYzMnLCAnPD0nKSkgewogICAgICAgICAgICAkdGhpcy0+bWFya1Rlc3RTa2lwcGVkKCdTa2lwcGVkIG9uIDcuMiBiZWZvcmUgcmM0IGJlY2F1c2Ugb2YgcGhwIGJ1ZyAjNzUzNTQuJyk7CiAgICAgICAgfQoKICAgICAgICAkaW50ZXJ2YWwgPSAkdGhpcy0+Y3JlYXRlSW50ZXJ2YWwoJGludGVydmFsU3BlYywgJG1zLCAkaW52ZXJ0KTsKICAgICAgICAkc3R1YiA9IG5ldyBTdHViKCk7CgogICAgICAgICRjYXN0ID0gRGF0ZUNhc3Rlcjo6Y2FzdEludGVydmFsKCRpbnRlcnZhbCwgYXJyYXkoJ2ZvbycgPT4gJ2JhcicpLCAkc3R1YiwgZmFsc2UsIENhc3Rlcjo6RVhDTFVERV9WRVJCT1NFKTsKCiAgICAgICAgJHhEdW1wID0gPDw8RU9EVU1QCmFycmF5OjEgWwogICJcXHgwMH5cXHgwMGludGVydmFsIiA9PiAkeEludGVydmFsCl0KRU9EVU1QOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0RHVtcEVxdWFscygkeER1bXAsICRjYXN0KTsKCiAgICAgICAgaWYgKG51bGwgPT09ICR4U2Vjb25kcykgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAkeER1bXAgPSA8PDxFT0RVTVAKU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENhc3RlclxDb25zdFN0dWIgewogICt0eXBlOiAxCiAgK2NsYXNzOiAiJHhJbnRlcnZhbCIKICArdmFsdWU6ICIkeFNlY29uZHMiCiAgK2N1dDogMAogICtoYW5kbGU6IDAKICArcmVmQ291bnQ6IDAKICArcG9zaXRpb246IDAKICArYXR0cjogW10KfQpFT0RVTVA7CgogICAgICAgICR0aGlzLT5hc3NlcnREdW1wTWF0Y2hlc0Zvcm1hdCgkeER1bXAsICRjYXN0WyJcMH5cMGludGVydmFsIl0pOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBwcm92aWRlSW50ZXJ2YWxzKCkKICAgIHsKICAgICAgICByZXR1cm4gYXJyYXkoCiAgICAgICAgICAgIGFycmF5KCdQVDBTJywgMCwgMCwgJzBzJywgJzBzJyksCiAgICAgICAgICAgIGFycmF5KCdQVDBTJywgMC4xLCAwLCAnKyAwMDowMDowMC4xMDAnLCAnJWlzJyksCiAgICAgICAgICAgIGFycmF5KCdQVDFTJywgMCwgMCwgJysgMDA6MDA6MDEuMCcsICclaXMnKSwKICAgICAgICAgICAgYXJyYXkoJ1BUMk0nLCAwLCAwLCAnKyAwMDowMjowMC4wJywgJyVpcycpLAogICAgICAgICAgICBhcnJheSgnUFQzSCcsIDAsIDAsICcrIDAzOjAwOjAwLjAnLCAnJXNzJyksCiAgICAgICAgICAgIGFycmF5KCdQNEQnLCAwLCAwLCAnKyA0ZCcsICclc3MnKSwKICAgICAgICAgICAgYXJyYXkoJ1A1TScsIDAsIDAsICcrIDVtJywgbnVsbCksCiAgICAgICAgICAgIGFycmF5KCdQNlknLCAwLCAwLCAnKyA2eScsIG51bGwpLAogICAgICAgICAgICBhcnJheSgnUDFZMk0zRFQ0SDVNNlMnLCAwLCAwLCAnKyAxeSAybSAzZCAwNDowNTowNi4wJywgbnVsbCksCiAgICAgICAgICAgIGFycmF5KCdQVDFNNjBTJywgMCwgMCwgJysgMDA6MDI6MDAuMCcsIG51bGwpLAogICAgICAgICAgICBhcnJheSgnUFQxSDYwTScsIDAsIDAsICcrIDAyOjAwOjAwLjAnLCBudWxsKSwKICAgICAgICAgICAgYXJyYXkoJ1AxRFQyNEgnLCAwLCAwLCAnKyAyZCcsIG51bGwpLAogICAgICAgICAgICBhcnJheSgnUDFNMzJEJywgMCwgMCwgJysgMW0gMzJkJywgbnVsbCksCgogICAgICAgICAgICBhcnJheSgnUFQwUycsIDAsIDEsICcwcycsICcwcycpLAogICAgICAgICAgICBhcnJheSgnUFQwUycsIDAuMSwgMSwgJy0gMDA6MDA6MDAuMTAwJywgJyVpcycpLAogICAgICAgICAgICBhcnJheSgnUFQxUycsIDAsIDEsICctIDAwOjAwOjAxLjAnLCAnJWlzJyksCiAgICAgICAgICAgIGFycmF5KCdQVDJNJywgMCwgMSwgJy0gMDA6MDI6MDAuMCcsICclaXMnKSwKICAgICAgICAgICAgYXJyYXkoJ1BUM0gnLCAwLCAxLCAnLSAwMzowMDowMC4wJywgJyVzcycpLAogICAgICAgICAgICBhcnJheSgnUDREJywgMCwgMSwgJy0gNGQnLCAnJXNzJyksCiAgICAgICAgICAgIGFycmF5KCdQNU0nLCAwLCAxLCAnLSA1bScsIG51bGwpLAogICAgICAgICAgICBhcnJheSgnUDZZJywgMCwgMSwgJy0gNnknLCBudWxsKSwKICAgICAgICAgICAgYXJyYXkoJ1AxWTJNM0RUNEg1TTZTJywgMCwgMSwgJy0gMXkgMm0gM2QgMDQ6MDU6MDYuMCcsIG51bGwpLAogICAgICAgICAgICBhcnJheSgnUFQxTTYwUycsIDAsIDEsICctIDAwOjAyOjAwLjAnLCBudWxsKSwKICAgICAgICAgICAgYXJyYXkoJ1BUMUg2ME0nLCAwLCAxLCAnLSAwMjowMDowMC4wJywgbnVsbCksCiAgICAgICAgICAgIGFycmF5KCdQMURUMjRIJywgMCwgMSwgJy0gMmQnLCBudWxsKSwKICAgICAgICAgICAgYXJyYXkoJ1AxTTMyRCcsIDAsIDEsICctIDFtIDMyZCcsIG51bGwpLAogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGF0YVByb3ZpZGVyIHByb3ZpZGVUaW1lWm9uZXMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRlc3REdW1wVGltZVpvbmUoJHRpbWV6b25lLCAkZXhwZWN0ZWQpCiAgICB7CiAgICAgICAgJHRpbWV6b25lID0gbmV3IFxEYXRlVGltZVpvbmUoJHRpbWV6b25lKTsKCiAgICAgICAgJHhEdW1wID0gPDw8RU9EVU1QCkRhdGVUaW1lWm9uZSB7CiAgdGltZXpvbmU6ICRleHBlY3RlZAolQX0KRU9EVU1QOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0RHVtcE1hdGNoZXNGb3JtYXQoJHhEdW1wLCAkdGltZXpvbmUpOwogICAgfQoKICAgIC8qKgogICAgICogQGRhdGFQcm92aWRlciBwcm92aWRlVGltZVpvbmVzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0RHVtcFRpbWVab25lRXhjbHVkaW5nVmVyYm9zaXR5KCR0aW1lem9uZSwgJGV4cGVjdGVkKQogICAgewogICAgICAgICR0aW1lem9uZSA9IG5ldyBcRGF0ZVRpbWVab25lKCR0aW1lem9uZSk7CgogICAgICAgICR4RHVtcCA9IDw8PEVPRFVNUApEYXRlVGltZVpvbmUgewogIHRpbWV6b25lOiAkZXhwZWN0ZWQKfQpFT0RVTVA7CgogICAgICAgICR0aGlzLT5hc3NlcnREdW1wTWF0Y2hlc0Zvcm1hdCgkeER1bXAsICR0aW1lem9uZSwgQ2FzdGVyOjpFWENMVURFX1ZFUkJPU0UpOwogICAgfQoKICAgIC8qKgogICAgICogQGRhdGFQcm92aWRlciBwcm92aWRlVGltZVpvbmVzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0Q2FzdFRpbWVab25lKCR0aW1lem9uZSwgJHhUaW1lem9uZSwgJHhSZWdpb24pCiAgICB7CiAgICAgICAgJHRpbWV6b25lID0gbmV3IFxEYXRlVGltZVpvbmUoJHRpbWV6b25lKTsKICAgICAgICAkc3R1YiA9IG5ldyBTdHViKCk7CgogICAgICAgICRjYXN0ID0gRGF0ZUNhc3Rlcjo6Y2FzdFRpbWVab25lKCR0aW1lem9uZSwgYXJyYXkoJ2ZvbycgPT4gJ2JhcicpLCAkc3R1YiwgZmFsc2UsIENhc3Rlcjo6RVhDTFVERV9WRVJCT1NFKTsKCiAgICAgICAgJHhEdW1wID0gPDw8RU9EVU1QCmFycmF5OjEgWwogICJcXHgwMH5cXHgwMHRpbWV6b25lIiA9PiAkeFRpbWV6b25lCl0KRU9EVU1QOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0RHVtcE1hdGNoZXNGb3JtYXQoJHhEdW1wLCAkY2FzdCk7CgogICAgICAgICR4RHVtcCA9IDw8PEVPRFVNUApTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyXENvbnN0U3R1YiB7CiAgK3R5cGU6IDEKICArY2xhc3M6ICIkeFRpbWV6b25lIgogICt2YWx1ZTogIiR4UmVnaW9uIgogICtjdXQ6IDAKICAraGFuZGxlOiAwCiAgK3JlZkNvdW50OiAwCiAgK3Bvc2l0aW9uOiAwCiAgK2F0dHI6IFtdCn0KRU9EVU1QOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0RHVtcE1hdGNoZXNGb3JtYXQoJHhEdW1wLCAkY2FzdFsiXDB+XDB0aW1lem9uZSJdKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gcHJvdmlkZVRpbWVab25lcygpCiAgICB7CiAgICAgICAgJHhSZWdpb24gPSBleHRlbnNpb25fbG9hZGVkKCdpbnRsJykgPyAnJXMnIDogJyc7CgogICAgICAgIHJldHVybiBhcnJheSgKICAgICAgICAgICAgLy8gdHlwZSAxIChVVEMgb2Zmc2V0KQogICAgICAgICAgICBhcnJheSgnLTEyOjAwJywgJy0xMjowMCcsICcnKSwKICAgICAgICAgICAgYXJyYXkoJyswMDowMCcsICcrMDA6MDAnLCAnJyksCiAgICAgICAgICAgIGFycmF5KCcrMTQ6MDAnLCAnKzE0OjAwJywgJycpLAoKICAgICAgICAgICAgLy8gdHlwZSAyICh0aW1lem9uZSBhYmJyZXZpYXRpb24pCiAgICAgICAgICAgIGFycmF5KCdHTVQnLCAnKzAwOjAwJywgJycpLAogICAgICAgICAgICBhcnJheSgnYScsICcrMDE6MDAnLCAnJyksCiAgICAgICAgICAgIGFycmF5KCdiJywgJyswMjowMCcsICcnKSwKICAgICAgICAgICAgYXJyYXkoJ3onLCAnKzAwOjAwJywgJycpLAoKICAgICAgICAgICAgLy8gdHlwZSAzICh0aW1lem9uZSBpZGVudGlmaWVyKQogICAgICAgICAgICBhcnJheSgnQWZyaWNhL1R1bmlzJywgJ0FmcmljYS9UdW5pcyAoJXM6MDApJywgJHhSZWdpb24pLAogICAgICAgICAgICBhcnJheSgnQW1lcmljYS9QYW5hbWEnLCAnQW1lcmljYS9QYW5hbWEgKCVzOjAwKScsICR4UmVnaW9uKSwKICAgICAgICAgICAgYXJyYXkoJ0FzaWEvSmVydXNhbGVtJywgJ0FzaWEvSmVydXNhbGVtICglczowMCknLCAkeFJlZ2lvbiksCiAgICAgICAgICAgIGFycmF5KCdBdGxhbnRpYy9DYW5hcnknLCAnQXRsYW50aWMvQ2FuYXJ5ICglczowMCknLCAkeFJlZ2lvbiksCiAgICAgICAgICAgIGFycmF5KCdBdXN0cmFsaWEvUGVydGgnLCAnQXVzdHJhbGlhL1BlcnRoICglczowMCknLCAkeFJlZ2lvbiksCiAgICAgICAgICAgIGFycmF5KCdFdXJvcGUvWnVyaWNoJywgJ0V1cm9wZS9adXJpY2ggKCVzOjAwKScsICR4UmVnaW9uKSwKICAgICAgICAgICAgYXJyYXkoJ1BhY2lmaWMvVGFoaXRpJywgJ1BhY2lmaWMvVGFoaXRpICglczowMCknLCAkeFJlZ2lvbiksCiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBkYXRhUHJvdmlkZXIgcHJvdmlkZVBlcmlvZHMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRlc3REdW1wUGVyaW9kKCRzdGFydCwgJGludGVydmFsLCAkZW5kLCAkb3B0aW9ucywgJGV4cGVjdGVkKQogICAgewogICAgICAgICRwID0gbmV3IFxEYXRlUGVyaW9kKG5ldyBcRGF0ZVRpbWUoJHN0YXJ0KSwgbmV3IFxEYXRlSW50ZXJ2YWwoJGludGVydmFsKSwgaXNfaW50KCRlbmQpID8gJGVuZCA6IG5ldyBcRGF0ZVRpbWUoJGVuZCksICRvcHRpb25zKTsKCiAgICAgICAgJHhEdW1wID0gPDw8RU9EVU1QCkRhdGVQZXJpb2QgewogIHBlcmlvZDogJGV4cGVjdGVkCiVBfQpFT0RVTVA7CgogICAgICAgICR0aGlzLT5hc3NlcnREdW1wTWF0Y2hlc0Zvcm1hdCgkeER1bXAsICRwKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBkYXRhUHJvdmlkZXIgcHJvdmlkZVBlcmlvZHMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RDYXN0UGVyaW9kKCRzdGFydCwgJGludGVydmFsLCAkZW5kLCAkb3B0aW9ucywgJHhQZXJpb2QsICR4RGF0ZXMpCiAgICB7CiAgICAgICAgJHAgPSBuZXcgXERhdGVQZXJpb2QobmV3IFxEYXRlVGltZSgkc3RhcnQpLCBuZXcgXERhdGVJbnRlcnZhbCgkaW50ZXJ2YWwpLCBpc19pbnQoJGVuZCkgPyAkZW5kIDogbmV3IFxEYXRlVGltZSgkZW5kKSwgJG9wdGlvbnMpOwogICAgICAgICRzdHViID0gbmV3IFN0dWIoKTsKCiAgICAgICAgJGNhc3QgPSBEYXRlQ2FzdGVyOjpjYXN0UGVyaW9kKCRwLCBhcnJheSgpLCAkc3R1YiwgZmFsc2UsIDApOwoKICAgICAgICAkeER1bXAgPSA8PDxFT0RVTVAKYXJyYXk6MSBbCiAgIlxceDAwflxceDAwcGVyaW9kIiA9PiAkeFBlcmlvZApdCkVPRFVNUDsKCiAgICAgICAgJHRoaXMtPmFzc2VydER1bXBFcXVhbHMoJHhEdW1wLCAkY2FzdCk7CgogICAgICAgICR4RHVtcCA9IDw8PEVPRFVNUApTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyXENvbnN0U3R1YiB7CiAgK3R5cGU6IDEKICArY2xhc3M6ICIkeFBlcmlvZCIKICArdmFsdWU6ICIlQSR4RGF0ZXMlQSIKICArY3V0OiAwCiAgK2hhbmRsZTogMAogICtyZWZDb3VudDogMAogICtwb3NpdGlvbjogMAogICthdHRyOiBbXQp9CkVPRFVNUDsKCiAgICAgICAgJHRoaXMtPmFzc2VydER1bXBNYXRjaGVzRm9ybWF0KCR4RHVtcCwgJGNhc3RbIlwwflwwcGVyaW9kIl0pOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBwcm92aWRlUGVyaW9kcygpCiAgICB7CiAgICAgICAgJHBlcmlvZHMgPSBhcnJheSgKICAgICAgICAgICAgYXJyYXkoJzIwMTctMDEtMDEnLCAnUDFEJywgJzIwMTctMDEtMDMnLCAwLCAnZXZlcnkgKyAxZCwgZnJvbSAyMDE3LTAxLTAxIDAwOjAwOjAwLjAgKGluY2x1ZGVkKSB0byAyMDE3LTAxLTAzIDAwOjAwOjAwLjAnLCAnMSkgMjAxNy0wMS0wMSVhMikgMjAxNy0wMS0wMicpLAogICAgICAgICAgICBhcnJheSgnMjAxNy0wMS0wMScsICdQMUQnLCAxLCAwLCAnZXZlcnkgKyAxZCwgZnJvbSAyMDE3LTAxLTAxIDAwOjAwOjAwLjAgKGluY2x1ZGVkKSByZWN1cnJpbmcgMiB0aW1lL3MnLCAnMSkgMjAxNy0wMS0wMSVhMikgMjAxNy0wMS0wMicpLAoKICAgICAgICAgICAgYXJyYXkoJzIwMTctMDEtMDEnLCAnUDFEJywgJzIwMTctMDEtMDQnLCAwLCAnZXZlcnkgKyAxZCwgZnJvbSAyMDE3LTAxLTAxIDAwOjAwOjAwLjAgKGluY2x1ZGVkKSB0byAyMDE3LTAxLTA0IDAwOjAwOjAwLjAnLCAnMSkgMjAxNy0wMS0wMSVhMikgMjAxNy0wMS0wMiVhMykgMjAxNy0wMS0wMycpLAogICAgICAgICAgICBhcnJheSgnMjAxNy0wMS0wMScsICdQMUQnLCAyLCAwLCAnZXZlcnkgKyAxZCwgZnJvbSAyMDE3LTAxLTAxIDAwOjAwOjAwLjAgKGluY2x1ZGVkKSByZWN1cnJpbmcgMyB0aW1lL3MnLCAnMSkgMjAxNy0wMS0wMSVhMikgMjAxNy0wMS0wMiVhMykgMjAxNy0wMS0wMycpLAoKICAgICAgICAgICAgYXJyYXkoJzIwMTctMDEtMDEnLCAnUDFEJywgJzIwMTctMDEtMDUnLCAwLCAnZXZlcnkgKyAxZCwgZnJvbSAyMDE3LTAxLTAxIDAwOjAwOjAwLjAgKGluY2x1ZGVkKSB0byAyMDE3LTAxLTA1IDAwOjAwOjAwLjAnLCAnMSkgMjAxNy0wMS0wMSVhMikgMjAxNy0wMS0wMiVhMSBtb3JlJyksCiAgICAgICAgICAgIGFycmF5KCcyMDE3LTAxLTAxJywgJ1AxRCcsIDMsIDAsICdldmVyeSArIDFkLCBmcm9tIDIwMTctMDEtMDEgMDA6MDA6MDAuMCAoaW5jbHVkZWQpIHJlY3VycmluZyA0IHRpbWUvcycsICcxKSAyMDE3LTAxLTAxJWEyKSAyMDE3LTAxLTAyJWEzKSAyMDE3LTAxLTAzJWExIG1vcmUnKSwKCiAgICAgICAgICAgIGFycmF5KCcyMDE3LTAxLTAxJywgJ1AxRCcsICcyMDE3LTAxLTIxJywgMCwgJ2V2ZXJ5ICsgMWQsIGZyb20gMjAxNy0wMS0wMSAwMDowMDowMC4wIChpbmNsdWRlZCkgdG8gMjAxNy0wMS0yMSAwMDowMDowMC4wJywgJzEpIDIwMTctMDEtMDElYTE3IG1vcmUnKSwKICAgICAgICAgICAgYXJyYXkoJzIwMTctMDEtMDEnLCAnUDFEJywgMTksIDAsICdldmVyeSArIDFkLCBmcm9tIDIwMTctMDEtMDEgMDA6MDA6MDAuMCAoaW5jbHVkZWQpIHJlY3VycmluZyAyMCB0aW1lL3MnLCAnMSkgMjAxNy0wMS0wMSVhMTcgbW9yZScpLAoKICAgICAgICAgICAgYXJyYXkoJzIwMTctMDEtMDEgMDE6MDA6MDAnLCAnUDFEJywgJzIwMTctMDEtMDMgMDE6MDA6MDAnLCAwLCAnZXZlcnkgKyAxZCwgZnJvbSAyMDE3LTAxLTAxIDAxOjAwOjAwLjAgKGluY2x1ZGVkKSB0byAyMDE3LTAxLTAzIDAxOjAwOjAwLjAnLCAnMSkgMjAxNy0wMS0wMSAwMTowMDowMC4wJWEyKSAyMDE3LTAxLTAyIDAxOjAwOjAwLjAnKSwKICAgICAgICAgICAgYXJyYXkoJzIwMTctMDEtMDEgMDE6MDA6MDAnLCAnUDFEJywgMSwgMCwgJ2V2ZXJ5ICsgMWQsIGZyb20gMjAxNy0wMS0wMSAwMTowMDowMC4wIChpbmNsdWRlZCkgcmVjdXJyaW5nIDIgdGltZS9zJywgJzEpIDIwMTctMDEtMDEgMDE6MDA6MDAuMCVhMikgMjAxNy0wMS0wMiAwMTowMDowMC4wJyksCgogICAgICAgICAgICBhcnJheSgnMjAxNy0wMS0wMScsICdQMURUMUgnLCAnMjAxNy0wMS0wMycsIDAsICdldmVyeSArIDFkIDAxOjAwOjAwLjAsIGZyb20gMjAxNy0wMS0wMSAwMDowMDowMC4wIChpbmNsdWRlZCkgdG8gMjAxNy0wMS0wMyAwMDowMDowMC4wJywgJzEpIDIwMTctMDEtMDEgMDA6MDA6MDAuMCVhMikgMjAxNy0wMS0wMiAwMTowMDowMC4wJyksCiAgICAgICAgICAgIGFycmF5KCcyMDE3LTAxLTAxJywgJ1AxRFQxSCcsIDEsIDAsICdldmVyeSArIDFkIDAxOjAwOjAwLjAsIGZyb20gMjAxNy0wMS0wMSAwMDowMDowMC4wIChpbmNsdWRlZCkgcmVjdXJyaW5nIDIgdGltZS9zJywgJzEpIDIwMTctMDEtMDEgMDA6MDA6MDAuMCVhMikgMjAxNy0wMS0wMiAwMTowMDowMC4wJyksCgogICAgICAgICAgICBhcnJheSgnMjAxNy0wMS0wMScsICdQMUQnLCAnMjAxNy0wMS0wNCcsIFxEYXRlUGVyaW9kOjpFWENMVURFX1NUQVJUX0RBVEUsICdldmVyeSArIDFkLCBmcm9tIDIwMTctMDEtMDEgMDA6MDA6MDAuMCAoZXhjbHVkZWQpIHRvIDIwMTctMDEtMDQgMDA6MDA6MDAuMCcsICcxKSAyMDE3LTAxLTAyJWEyKSAyMDE3LTAxLTAzJyksCiAgICAgICAgICAgIGFycmF5KCcyMDE3LTAxLTAxJywgJ1AxRCcsIDIsIFxEYXRlUGVyaW9kOjpFWENMVURFX1NUQVJUX0RBVEUsICdldmVyeSArIDFkLCBmcm9tIDIwMTctMDEtMDEgMDA6MDA6MDAuMCAoZXhjbHVkZWQpIHJlY3VycmluZyAyIHRpbWUvcycsICcxKSAyMDE3LTAxLTAyJWEyKSAyMDE3LTAxLTAzJyksCiAgICAgICAgKTsKCiAgICAgICAgaWYgKFxQSFBfVkVSU0lPTl9JRCA8IDcwMTA3KSB7CiAgICAgICAgICAgIGFycmF5X3dhbGsoJHBlcmlvZHMsIGZ1bmN0aW9uICgmJGkpIHsgJGlbNV0gPSAnJzsgfSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHBlcmlvZHM7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBjcmVhdGVJbnRlcnZhbCgkaW50ZXJ2YWxTcGVjLCAkbXMsICRpbnZlcnQpCiAgICB7CiAgICAgICAgJGludGVydmFsID0gbmV3IFxEYXRlSW50ZXJ2YWwoJGludGVydmFsU3BlYyk7CiAgICAgICAgJGludGVydmFsLT5mID0gJG1zOwogICAgICAgICRpbnRlcnZhbC0+aW52ZXJ0ID0gJGludmVydDsKCiAgICAgICAgcmV0dXJuICRpbnRlcnZhbDsKICAgIH0KfQo=AppDevTools/query/vendor/symfony/var-dumper/Tests/Caster/ExceptionCasterTest.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcVGVzdHNcQ2FzdGVyOwoKdXNlIFBIUFVuaXRcRnJhbWV3b3JrXFRlc3RDYXNlOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENhc3RlclxDYXN0ZXI7CnVzZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyXEV4Y2VwdGlvbkNhc3RlcjsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDYXN0ZXJcRnJhbWVTdHViOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENsb25lclxWYXJDbG9uZXI7CnVzZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcRHVtcGVyXEh0bWxEdW1wZXI7CnVzZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcVGVzdFxWYXJEdW1wZXJUZXN0VHJhaXQ7CgpjbGFzcyBFeGNlcHRpb25DYXN0ZXJUZXN0IGV4dGVuZHMgVGVzdENhc2UKewogICAgdXNlIFZhckR1bXBlclRlc3RUcmFpdDsKCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldFRlc3RFeGNlcHRpb24oJG1zZywgJiRyZWYgPSBudWxsKQogICAgewogICAgICAgIHJldHVybiBuZXcgXEV4Y2VwdGlvbignJy4kbXNnKTsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gdGVhckRvd24oKQogICAgewogICAgICAgIEV4Y2VwdGlvbkNhc3Rlcjo6JHNyY0NvbnRleHQgPSAxOwogICAgICAgIEV4Y2VwdGlvbkNhc3Rlcjo6JHRyYWNlQXJncyA9IHRydWU7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3REZWZhdWx0U2V0dGluZ3MoKQogICAgewogICAgICAgICRyZWYgPSBhcnJheSgnZm9vJyk7CiAgICAgICAgJGUgPSAkdGhpcy0+Z2V0VGVzdEV4Y2VwdGlvbignZm9vJywgJHJlZik7CgogICAgICAgICRleHBlY3RlZER1bXAgPSA8PDwnRU9EVU1QJwpFeGNlcHRpb24gewogICNtZXNzYWdlOiAiZm9vIgogICNjb2RlOiAwCiAgI2ZpbGU6ICIlc0V4Y2VwdGlvbkNhc3RlclRlc3QucGhwIgogICNsaW5lOiAyOAogIHRyYWNlOiB7CiAgICAlcyVlVGVzdHMlZUNhc3RlciVlRXhjZXB0aW9uQ2FzdGVyVGVzdC5waHA6MjggewogICAgICDigLogewogICAgICDigLogICAgIHJldHVybiBuZXcgXEV4Y2VwdGlvbignJy4kbXNnKTsKICAgICAg4oC6IH0KICAgIH0KICAgICVzJWVUZXN0cyVlQ2FzdGVyJWVFeGNlcHRpb25DYXN0ZXJUZXN0LnBocDo0MCB7IOKApn0KICAgIFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxUZXN0c1xDYXN0ZXJcRXhjZXB0aW9uQ2FzdGVyVGVzdC0+dGVzdERlZmF1bHRTZXR0aW5ncygpIHt9CiVBCkVPRFVNUDsKCiAgICAgICAgJHRoaXMtPmFzc2VydER1bXBNYXRjaGVzRm9ybWF0KCRleHBlY3RlZER1bXAsICRlKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0U2FtZShhcnJheSgnZm9vJyksICRyZWYpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0U2VlaygpCiAgICB7CiAgICAgICAgJGUgPSAkdGhpcy0+Z2V0VGVzdEV4Y2VwdGlvbigyKTsKCiAgICAgICAgJGV4cGVjdGVkRHVtcCA9IDw8PCdFT0RVTVAnCnsKICAlcyVlVGVzdHMlZUNhc3RlciVlRXhjZXB0aW9uQ2FzdGVyVGVzdC5waHA6MjggewogICAg4oC6IHsKICAgIOKAuiAgICAgcmV0dXJuIG5ldyBcRXhjZXB0aW9uKCcnLiRtc2cpOwogICAg4oC6IH0KICB9CiAgJXMlZVRlc3RzJWVDYXN0ZXIlZUV4Y2VwdGlvbkNhc3RlclRlc3QucGhwOjY1IHsg4oCmfQogIFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxUZXN0c1xDYXN0ZXJcRXhjZXB0aW9uQ2FzdGVyVGVzdC0+dGVzdFNlZWsoKSB7fQolQQpFT0RVTVA7CgogICAgICAgICR0aGlzLT5hc3NlcnRTdHJpbmdNYXRjaGVzRm9ybWF0KCRleHBlY3RlZER1bXAsICR0aGlzLT5nZXREdW1wKCRlLCAndHJhY2UnKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3ROb0FyZ3MoKQogICAgewogICAgICAgICRlID0gJHRoaXMtPmdldFRlc3RFeGNlcHRpb24oMSk7CiAgICAgICAgRXhjZXB0aW9uQ2FzdGVyOjokdHJhY2VBcmdzID0gZmFsc2U7CgogICAgICAgICRleHBlY3RlZER1bXAgPSA8PDwnRU9EVU1QJwpFeGNlcHRpb24gewogICNtZXNzYWdlOiAiMSIKICAjY29kZTogMAogICNmaWxlOiAiJXNFeGNlcHRpb25DYXN0ZXJUZXN0LnBocCIKICAjbGluZTogMjgKICB0cmFjZTogewogICAgJXNFeGNlcHRpb25DYXN0ZXJUZXN0LnBocDoyOCB7CiAgICAgIOKAuiB7CiAgICAgIOKAuiAgICAgcmV0dXJuIG5ldyBcRXhjZXB0aW9uKCcnLiRtc2cpOwogICAgICDigLogfQogICAgfQogICAgJXMlZVRlc3RzJWVDYXN0ZXIlZUV4Y2VwdGlvbkNhc3RlclRlc3QucGhwOjg0IHsg4oCmfQogICAgU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXFRlc3RzXENhc3RlclxFeGNlcHRpb25DYXN0ZXJUZXN0LT50ZXN0Tm9BcmdzKCkge30KJUEKRU9EVU1QOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0RHVtcE1hdGNoZXNGb3JtYXQoJGV4cGVjdGVkRHVtcCwgJGUpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0Tm9TcmNDb250ZXh0KCkKICAgIHsKICAgICAgICAkZSA9ICR0aGlzLT5nZXRUZXN0RXhjZXB0aW9uKDEpOwogICAgICAgIEV4Y2VwdGlvbkNhc3Rlcjo6JHNyY0NvbnRleHQgPSAtMTsKCiAgICAgICAgJGV4cGVjdGVkRHVtcCA9IDw8PCdFT0RVTVAnCkV4Y2VwdGlvbiB7CiAgI21lc3NhZ2U6ICIxIgogICNjb2RlOiAwCiAgI2ZpbGU6ICIlc0V4Y2VwdGlvbkNhc3RlclRlc3QucGhwIgogICNsaW5lOiAyOAogIHRyYWNlOiB7CiAgICAlcyVlVGVzdHMlZUNhc3RlciVlRXhjZXB0aW9uQ2FzdGVyVGVzdC5waHA6MjgKICAgICVzJWVUZXN0cyVlQ2FzdGVyJWVFeGNlcHRpb25DYXN0ZXJUZXN0LnBocDolZAolQQpFT0RVTVA7CgogICAgICAgICR0aGlzLT5hc3NlcnREdW1wTWF0Y2hlc0Zvcm1hdCgkZXhwZWN0ZWREdW1wLCAkZSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RIdG1sRHVtcCgpCiAgICB7CiAgICAgICAgaWYgKGluaV9nZXQoJ3hkZWJ1Zy5maWxlX2xpbmtfZm9ybWF0JykgfHwgZ2V0X2NmZ192YXIoJ3hkZWJ1Zy5maWxlX2xpbmtfZm9ybWF0JykpIHsKICAgICAgICAgICAgJHRoaXMtPm1hcmtUZXN0U2tpcHBlZCgnQSBjdXN0b20gZmlsZV9saW5rX2Zvcm1hdCBpcyBkZWZpbmVkLicpOwogICAgICAgIH0KCiAgICAgICAgJGUgPSAkdGhpcy0+Z2V0VGVzdEV4Y2VwdGlvbigxKTsKICAgICAgICBFeGNlcHRpb25DYXN0ZXI6OiRzcmNDb250ZXh0ID0gLTE7CgogICAgICAgICRjbG9uZXIgPSBuZXcgVmFyQ2xvbmVyKCk7CiAgICAgICAgJGNsb25lci0+c2V0TWF4SXRlbXMoMSk7CiAgICAgICAgJGR1bXBlciA9IG5ldyBIdG1sRHVtcGVyKCk7CiAgICAgICAgJGR1bXBlci0+c2V0RHVtcEhlYWRlcignPGZvbz48L2Zvbz4nKTsKICAgICAgICAkZHVtcGVyLT5zZXREdW1wQm91bmRhcmllcygnPGJhcj4nLCAnPC9iYXI+Jyk7CiAgICAgICAgJGR1bXAgPSAkZHVtcGVyLT5kdW1wKCRjbG9uZXItPmNsb25lVmFyKCRlKS0+d2l0aFJlZkhhbmRsZXMoZmFsc2UpLCB0cnVlKTsKCiAgICAgICAgJGV4cGVjdGVkRHVtcCA9IDw8PCdFT0RVTVAnCjxmb28+PC9mb28+PGJhcj48c3BhbiBjbGFzcz1zZi1kdW1wLW5vdGU+RXhjZXB0aW9uPC9zcGFuPiB7PHNhbXA+CiAgIzxzcGFuIGNsYXNzPXNmLWR1bXAtcHJvdGVjdGVkIHRpdGxlPSJQcm90ZWN0ZWQgcHJvcGVydHkiPm1lc3NhZ2U8L3NwYW4+OiAiPHNwYW4gY2xhc3M9c2YtZHVtcC1zdHI+MTwvc3Bhbj4iCiAgIzxzcGFuIGNsYXNzPXNmLWR1bXAtcHJvdGVjdGVkIHRpdGxlPSJQcm90ZWN0ZWQgcHJvcGVydHkiPmNvZGU8L3NwYW4+OiA8c3BhbiBjbGFzcz1zZi1kdW1wLW51bT4wPC9zcGFuPgogICM8c3BhbiBjbGFzcz1zZi1kdW1wLXByb3RlY3RlZCB0aXRsZT0iUHJvdGVjdGVkIHByb3BlcnR5Ij5maWxlPC9zcGFuPjogIjxzcGFuIGNsYXNzPXNmLWR1bXAtc3RyIHRpdGxlPSIlc0V4Y2VwdGlvbkNhc3RlclRlc3QucGhwCiVkIGNoYXJhY3RlcnMiPjxzcGFuIGNsYXNzPSJzZi1kdW1wLWVsbGlwc2lzIHNmLWR1bXAtZWxsaXBzaXMtcGF0aCI+JXMlZVZhckR1bXBlcjwvc3Bhbj48c3BhbiBjbGFzcz1zZi1kdW1wLWVsbGlwc2lzPiVlPC9zcGFuPlRlc3RzJWVDYXN0ZXIlZUV4Y2VwdGlvbkNhc3RlclRlc3QucGhwPC9zcGFuPiIKICAjPHNwYW4gY2xhc3M9c2YtZHVtcC1wcm90ZWN0ZWQgdGl0bGU9IlByb3RlY3RlZCBwcm9wZXJ0eSI+bGluZTwvc3Bhbj46IDxzcGFuIGNsYXNzPXNmLWR1bXAtbnVtPjI4PC9zcGFuPgogIDxzcGFuIGNsYXNzPXNmLWR1bXAtbWV0YT50cmFjZTwvc3Bhbj46IHs8c2FtcD4KICAgIDxzcGFuIGNsYXNzPXNmLWR1bXAtbWV0YSB0aXRsZT0iJXNFeGNlcHRpb25DYXN0ZXJUZXN0LnBocApTdGFjayBsZXZlbCAlZC4iPjxzcGFuIGNsYXNzPSJzZi1kdW1wLWVsbGlwc2lzIHNmLWR1bXAtZWxsaXBzaXMtcGF0aCI+JXMlZVZhckR1bXBlcjwvc3Bhbj48c3BhbiBjbGFzcz1zZi1kdW1wLWVsbGlwc2lzPiVlPC9zcGFuPlRlc3RzJWVDYXN0ZXIlZUV4Y2VwdGlvbkNhc3RlclRlc3QucGhwPC9zcGFuPjo8c3BhbiBjbGFzcz1zZi1kdW1wLW51bT4yODwvc3Bhbj4KICAgICAmaGVsbGlwOyVkCiAgPC9zYW1wPn0KPC9zYW1wPn0KPC9iYXI+CkVPRFVNUDsKCiAgICAgICAgJHRoaXMtPmFzc2VydFN0cmluZ01hdGNoZXNGb3JtYXQoJGV4cGVjdGVkRHVtcCwgJGR1bXApOwogICAgfQoKICAgIC8qKgogICAgICogQHJlcXVpcmVzIGZ1bmN0aW9uIFR3aWdcVGVtcGxhdGU6OmdldFNvdXJjZUNvbnRleHQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RGcmFtZVdpdGhUd2lnKCkKICAgIHsKICAgICAgICByZXF1aXJlX29uY2UgZGlybmFtZShfX0RJUl9fKS4nL0ZpeHR1cmVzL1R3aWcucGhwJzsKCiAgICAgICAgJGYgPSBhcnJheSgKICAgICAgICAgICAgbmV3IEZyYW1lU3R1YihhcnJheSgKICAgICAgICAgICAgICAgICdmaWxlJyA9PiBkaXJuYW1lKF9fRElSX18pLicvRml4dHVyZXMvVHdpZy5waHAnLAogICAgICAgICAgICAgICAgJ2xpbmUnID0+IDIwLAogICAgICAgICAgICAgICAgJ2NsYXNzJyA9PiAnX19Ud2lnVGVtcGxhdGVfVmFyRHVtcGVyRml4dHVyZV91NzVhMDknLAogICAgICAgICAgICApKSwKICAgICAgICAgICAgbmV3IEZyYW1lU3R1YihhcnJheSgKICAgICAgICAgICAgICAgICdmaWxlJyA9PiBkaXJuYW1lKF9fRElSX18pLicvRml4dHVyZXMvVHdpZy5waHAnLAogICAgICAgICAgICAgICAgJ2xpbmUnID0+IDIxLAogICAgICAgICAgICAgICAgJ2NsYXNzJyA9PiAnX19Ud2lnVGVtcGxhdGVfVmFyRHVtcGVyRml4dHVyZV91NzVhMDknLAogICAgICAgICAgICAgICAgJ29iamVjdCcgPT4gbmV3IFxfX1R3aWdUZW1wbGF0ZV9WYXJEdW1wZXJGaXh0dXJlX3U3NWEwOShudWxsLCBfX0ZJTEVfXyksCiAgICAgICAgICAgICkpLAogICAgICAgICk7CgogICAgICAgICRleHBlY3RlZER1bXAgPSA8PDwnRU9EVU1QJwphcnJheToyIFsKICAwID0+IHsKICAgIGNsYXNzOiAiX19Ud2lnVGVtcGxhdGVfVmFyRHVtcGVyRml4dHVyZV91NzVhMDkiCiAgICBzcmM6IHsKICAgICAgJXNUd2lnLnBocDoxIHsKICAgICAgICDigLogCiAgICAgICAg4oC6IGZvbyBiYXIKICAgICAgICDigLogICB0d2lnIHNvdXJjZQogICAgICB9CiAgICB9CiAgfQogIDEgPT4gewogICAgY2xhc3M6ICJfX1R3aWdUZW1wbGF0ZV9WYXJEdW1wZXJGaXh0dXJlX3U3NWEwOSIKICAgIG9iamVjdDogX19Ud2lnVGVtcGxhdGVfVmFyRHVtcGVyRml4dHVyZV91NzVhMDkgewogICAgJUEKICAgIH0KICAgIHNyYzogewogICAgICAlc0V4Y2VwdGlvbkNhc3RlclRlc3QucGhwOjIgewogICAgICAgIOKAuiBmb28gYmFyCiAgICAgICAg4oC6ICAgdHdpZyBzb3VyY2UKICAgICAgICDigLogCiAgICAgIH0KICAgIH0KICB9Cl0KCkVPRFVNUDsKCiAgICAgICAgJHRoaXMtPmFzc2VydER1bXBNYXRjaGVzRm9ybWF0KCRleHBlY3RlZER1bXAsICRmKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdEV4Y2x1ZGVWZXJib3NpdHkoKQogICAgewogICAgICAgICRlID0gJHRoaXMtPmdldFRlc3RFeGNlcHRpb24oJ2ZvbycpOwoKICAgICAgICAkZXhwZWN0ZWREdW1wID0gPDw8J0VPRFVNUCcKRXhjZXB0aW9uIHsKICAjbWVzc2FnZTogImZvbyIKICAjY29kZTogMAogICNmaWxlOiAiJXNFeGNlcHRpb25DYXN0ZXJUZXN0LnBocCIKICAjbGluZTogMjgKfQpFT0RVTVA7CgogICAgICAgICR0aGlzLT5hc3NlcnREdW1wTWF0Y2hlc0Zvcm1hdCgkZXhwZWN0ZWREdW1wLCAkZSwgQ2FzdGVyOjpFWENMVURFX1ZFUkJPU0UpOwogICAgfQp9Cg==AppDevTools/query/vendor/symfony/var-dumper/Tests/Caster/GmpCasterTest.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcVGVzdHNcQ2FzdGVyOwoKdXNlIFBIUFVuaXRcRnJhbWV3b3JrXFRlc3RDYXNlOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENhc3RlclxHbXBDYXN0ZXI7CnVzZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2xvbmVyXFN0dWI7CnVzZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcVGVzdFxWYXJEdW1wZXJUZXN0VHJhaXQ7CgpjbGFzcyBHbXBDYXN0ZXJUZXN0IGV4dGVuZHMgVGVzdENhc2UKewogICAgdXNlIFZhckR1bXBlclRlc3RUcmFpdDsKCiAgICAvKioKICAgICAqIEByZXF1aXJlcyBleHRlbnNpb24gZ21wCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0Q2FzdEdtcCgpCiAgICB7CiAgICAgICAgJGdtcFN0cmluZyA9IGdtcF9pbml0KCcxMjM0Jyk7CiAgICAgICAgJGdtcE9jdGFsID0gZ21wX2luaXQoMDEwKTsKICAgICAgICAkZ21wID0gZ21wX2luaXQoJzAxMTAxJyk7CiAgICAgICAgJGdtcER1bXAgPSA8PDxFT0RVTVAKYXJyYXk6MSBbCiAgIlxceDAwflxceDAwdmFsdWUiID0+ICVzCl0KRU9EVU1QOwogICAgICAgICR0aGlzLT5hc3NlcnREdW1wRXF1YWxzKHNwcmludGYoJGdtcER1bXAsICRnbXBTdHJpbmcpLCBHbXBDYXN0ZXI6OmNhc3RHbXAoJGdtcFN0cmluZywgYXJyYXkoKSwgbmV3IFN0dWIoKSwgZmFsc2UsIDApKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RHVtcEVxdWFscyhzcHJpbnRmKCRnbXBEdW1wLCAkZ21wT2N0YWwpLCBHbXBDYXN0ZXI6OmNhc3RHbXAoJGdtcE9jdGFsLCBhcnJheSgpLCBuZXcgU3R1YigpLCBmYWxzZSwgMCkpOwogICAgICAgICR0aGlzLT5hc3NlcnREdW1wRXF1YWxzKHNwcmludGYoJGdtcER1bXAsICRnbXApLCBHbXBDYXN0ZXI6OmNhc3RHbXAoJGdtcCwgYXJyYXkoKSwgbmV3IFN0dWIoKSwgZmFsc2UsIDApKTsKCiAgICAgICAgJGR1bXAgPSA8PDxFT0RVTVAKR01QIHsKICB2YWx1ZTogNTc3Cn0KRU9EVU1QOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0RHVtcEVxdWFscygkZHVtcCwgJGdtcCk7CiAgICB9Cn0KAppDevTools/query/vendor/symfony/var-dumper/Tests/Caster/PdoCasterTest.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcVGVzdHNcQ2FzdGVyOwoKdXNlIFBIUFVuaXRcRnJhbWV3b3JrXFRlc3RDYXNlOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENhc3RlclxQZG9DYXN0ZXI7CnVzZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2xvbmVyXFN0dWI7CnVzZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcVGVzdFxWYXJEdW1wZXJUZXN0VHJhaXQ7CgovKioKICogQGF1dGhvciBOaWNvbGFzIEdyZWthcyA8cEB0Y2h3b3JrLmNvbT4KICovCmNsYXNzIFBkb0Nhc3RlclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZQp7CiAgICB1c2UgVmFyRHVtcGVyVGVzdFRyYWl0OwoKICAgIC8qKgogICAgICogQHJlcXVpcmVzIGV4dGVuc2lvbiBwZG9fc3FsaXRlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0Q2FzdFBkbygpCiAgICB7CiAgICAgICAgJHBkbyA9IG5ldyBcUERPKCdzcWxpdGU6Om1lbW9yeTonKTsKICAgICAgICAkcGRvLT5zZXRBdHRyaWJ1dGUoXFBETzo6QVRUUl9TVEFURU1FTlRfQ0xBU1MsIGFycmF5KCdQRE9TdGF0ZW1lbnQnLCBhcnJheSgkcGRvKSkpOwoKICAgICAgICAkY2FzdCA9IFBkb0Nhc3Rlcjo6Y2FzdFBkbygkcGRvLCBhcnJheSgpLCBuZXcgU3R1YigpLCBmYWxzZSk7CgogICAgICAgICR0aGlzLT5hc3NlcnRJbnN0YW5jZU9mKCdTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyXEVudW1TdHViJywgJGNhc3RbIlwwflwwYXR0cmlidXRlcyJdKTsKCiAgICAgICAgJGF0dHIgPSAkY2FzdFsiXDB+XDBhdHRyaWJ1dGVzIl0gPSAkY2FzdFsiXDB+XDBhdHRyaWJ1dGVzIl0tPnZhbHVlOwogICAgICAgICR0aGlzLT5hc3NlcnRJbnN0YW5jZU9mKCdTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyXENvbnN0U3R1YicsICRhdHRyWydDQVNFJ10pOwogICAgICAgICR0aGlzLT5hc3NlcnRTYW1lKCdOQVRVUkFMJywgJGF0dHJbJ0NBU0UnXS0+Y2xhc3MpOwogICAgICAgICR0aGlzLT5hc3NlcnRTYW1lKCdCT1RIJywgJGF0dHJbJ0RFRkFVTFRfRkVUQ0hfTU9ERSddLT5jbGFzcyk7CgogICAgICAgICR4RHVtcCA9IDw8PCdFT0RVTVAnCmFycmF5OjIgWwogICJceDAwflx4MDBpblRyYW5zYWN0aW9uIiA9PiBmYWxzZQogICJceDAwflx4MDBhdHRyaWJ1dGVzIiA9PiBhcnJheTo5IFsKICAgICJDQVNFIiA9PiBOQVRVUkFMCiAgICAiRVJSTU9ERSIgPT4gU0lMRU5UCiAgICAiUEVSU0lTVEVOVCIgPT4gZmFsc2UKICAgICJEUklWRVJfTkFNRSIgPT4gInNxbGl0ZSIKICAgICJPUkFDTEVfTlVMTFMiID0+IE5BVFVSQUwKICAgICJDTElFTlRfVkVSU0lPTiIgPT4gIiVzIgogICAgIlNFUlZFUl9WRVJTSU9OIiA9PiAiJXMiCiAgICAiU1RBVEVNRU5UX0NMQVNTIiA9PiBhcnJheTolZCBbCiAgICAgIDAgPT4gIlBET1N0YXRlbWVudCIlQQogICAgXQogICAgIkRFRkFVTFRfRkVUQ0hfTU9ERSIgPT4gQk9USAogIF0KXQpFT0RVTVA7CgogICAgICAgICR0aGlzLT5hc3NlcnREdW1wTWF0Y2hlc0Zvcm1hdCgkeER1bXAsICRjYXN0KTsKICAgIH0KfQo=AppDevTools/query/vendor/symfony/var-dumper/Tests/Caster/RedisCasterTest.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcVGVzdHNcQ2FzdGVyOwoKdXNlIFBIUFVuaXRcRnJhbWV3b3JrXFRlc3RDYXNlOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXFRlc3RcVmFyRHVtcGVyVGVzdFRyYWl0OwoKLyoqCiAqIEBhdXRob3IgTmljb2xhcyBHcmVrYXMgPHBAdGNod29yay5jb20+CiAqIEByZXF1aXJlcyBleHRlbnNpb24gcmVkaXMKICovCmNsYXNzIFJlZGlzQ2FzdGVyVGVzdCBleHRlbmRzIFRlc3RDYXNlCnsKICAgIHVzZSBWYXJEdW1wZXJUZXN0VHJhaXQ7CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3ROb3RDb25uZWN0ZWQoKQogICAgewogICAgICAgICRyZWRpcyA9IG5ldyBcUmVkaXMoKTsKCiAgICAgICAgJHhDYXN0ID0gPDw8J0VPRFVNUCcKUmVkaXMgewogIGlzQ29ubmVjdGVkOiBmYWxzZQp9CkVPRFVNUDsKCiAgICAgICAgJHRoaXMtPmFzc2VydER1bXBNYXRjaGVzRm9ybWF0KCR4Q2FzdCwgJHJlZGlzKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdENvbm5lY3RlZCgpCiAgICB7CiAgICAgICAgJHJlZGlzID0gbmV3IFxSZWRpcygpOwogICAgICAgIGlmICghQCRyZWRpcy0+Y29ubmVjdCgnMTI3LjAuMC4xJykpIHsKICAgICAgICAgICAgJGUgPSBlcnJvcl9nZXRfbGFzdCgpOwogICAgICAgICAgICBzZWxmOjptYXJrVGVzdFNraXBwZWQoJGVbJ21lc3NhZ2UnXSk7CiAgICAgICAgfQoKICAgICAgICAkeENhc3QgPSA8PDwnRU9EVU1QJwpSZWRpcyB7JUEKICBpc0Nvbm5lY3RlZDogdHJ1ZQogIGhvc3Q6ICIxMjcuMC4wLjEiCiAgcG9ydDogNjM3OQogIGF1dGg6IG51bGwKICBkYk51bTogMAogIHRpbWVvdXQ6IDAuMAogIHBlcnNpc3RlbnRJZDogbnVsbAogIG9wdGlvbnM6IHsKICAgIFJFQURfVElNRU9VVDogMC4wCiAgICBTRVJJQUxJWkVSOiBOT05FCiAgICBQUkVGSVg6IG51bGwKICAgIFNDQU46IE5PUkVUUlkKICB9Cn0KRU9EVU1QOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0RHVtcE1hdGNoZXNGb3JtYXQoJHhDYXN0LCAkcmVkaXMpOwogICAgfQp9Cg==AppDevTools/query/vendor/symfony/var-dumper/Tests/Caster/ReflectionCasterTest.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcVGVzdHNcQ2FzdGVyOwoKdXNlIFBIUFVuaXRcRnJhbWV3b3JrXFRlc3RDYXNlOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENhc3RlclxDYXN0ZXI7CnVzZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcVGVzdFxWYXJEdW1wZXJUZXN0VHJhaXQ7CnVzZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcVGVzdHNcRml4dHVyZXNcR2VuZXJhdG9yRGVtbzsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxUZXN0c1xGaXh0dXJlc1xOb3RMb2FkYWJsZUNsYXNzOwoKLyoqCiAqIEBhdXRob3IgTmljb2xhcyBHcmVrYXMgPHBAdGNod29yay5jb20+CiAqLwpjbGFzcyBSZWZsZWN0aW9uQ2FzdGVyVGVzdCBleHRlbmRzIFRlc3RDYXNlCnsKICAgIHVzZSBWYXJEdW1wZXJUZXN0VHJhaXQ7CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RSZWZsZWN0aW9uQ2FzdGVyKCkKICAgIHsKICAgICAgICAkdmFyID0gbmV3IFxSZWZsZWN0aW9uQ2xhc3MoJ1JlZmxlY3Rpb25DbGFzcycpOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0RHVtcE1hdGNoZXNGb3JtYXQoCiAgICAgICAgICAgIDw8PCdFT1RYVCcKUmVmbGVjdGlvbkNsYXNzIHsKICArbmFtZTogIlJlZmxlY3Rpb25DbGFzcyIKJUFpbXBsZW1lbnRzOiBhcnJheTolZCBbCiAgICAwID0+ICJSZWZsZWN0b3IiCiVBXQogIGNvbnN0YW50czogYXJyYXk6MyBbCiAgICAiSVNfSU1QTElDSVRfQUJTVFJBQ1QiID0+IDE2CiAgICAiSVNfRVhQTElDSVRfQUJTVFJBQ1QiID0+IDMyCiAgICAiSVNfRklOQUwiID0+ICVkCiAgXQogIHByb3BlcnRpZXM6IGFycmF5OiVkIFsKICAgICJuYW1lIiA9PiBSZWZsZWN0aW9uUHJvcGVydHkgewolQSAgICArbmFtZTogIm5hbWUiCiAgICAgICtjbGFzczogIlJlZmxlY3Rpb25DbGFzcyIKJUEgICAgbW9kaWZpZXJzOiAicHVibGljIgogICAgfQolQV0KICBtZXRob2RzOiBhcnJheTolZCBbCiVBCiAgICAiZXhwb3J0IiA9PiBSZWZsZWN0aW9uTWV0aG9kIHsKICAgICAgK25hbWU6ICJleHBvcnQiCiAgICAgICtjbGFzczogIlJlZmxlY3Rpb25DbGFzcyIKJUEgICAgcGFyYW1ldGVyczogewogICAgICAgICQlczogUmVmbGVjdGlvblBhcmFtZXRlciB7CiVBICAgICAgICAgcG9zaXRpb246IDAKJUEKfQpFT1RYVAogICAgICAgICAgICAsICR2YXIKICAgICAgICApOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0Q2xvc3VyZUNhc3RlcigpCiAgICB7CiAgICAgICAgJGEgPSAkYiA9IDEyMzsKICAgICAgICAkdmFyID0gZnVuY3Rpb24gKCR4KSB1c2UgKCRhLCAmJGIpIHt9OwoKICAgICAgICAkdGhpcy0+YXNzZXJ0RHVtcE1hdGNoZXNGb3JtYXQoCiAgICAgICAgICAgIDw8PEVPVFhUCkNsb3N1cmUgewolQXBhcmFtZXRlcnM6IHsKICAgIFwkeDoge30KICB9CiAgdXNlOiB7CiAgICBcJGE6IDEyMwogICAgXCRiOiAmIDEyMwogIH0KICBmaWxlOiAiJXNSZWZsZWN0aW9uQ2FzdGVyVGVzdC5waHAiCiAgbGluZTogIjY4IHRvIDY4Igp9CkVPVFhUCiAgICAgICAgICAgICwgJHZhcgogICAgICAgICk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RDbG9zdXJlQ2FzdGVyRXhjbHVkaW5nVmVyYm9zaXR5KCkKICAgIHsKICAgICAgICAkdmFyID0gZnVuY3Rpb24gKCkge307CgogICAgICAgICRleHBlY3RlZER1bXAgPSA8PDxFT1RYVApDbG9zdXJlIHsKICBjbGFzczogIlN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxUZXN0c1xDYXN0ZXJcUmVmbGVjdGlvbkNhc3RlclRlc3QiCiAgdGhpczogU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXFRlc3RzXENhc3RlclxSZWZsZWN0aW9uQ2FzdGVyVGVzdCB7IOKApn0KfQpFT1RYVDsKCiAgICAgICAgJHRoaXMtPmFzc2VydER1bXBFcXVhbHMoJGV4cGVjdGVkRHVtcCwgJHZhciwgQ2FzdGVyOjpFWENMVURFX1ZFUkJPU0UpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0UmVmbGVjdGlvblBhcmFtZXRlcigpCiAgICB7CiAgICAgICAgJHZhciA9IG5ldyBcUmVmbGVjdGlvblBhcmFtZXRlcihfX05BTUVTUEFDRV9fLidccmVmbGVjdGlvblBhcmFtZXRlckZpeHR1cmUnLCAwKTsKCiAgICAgICAgJHRoaXMtPmFzc2VydER1bXBNYXRjaGVzRm9ybWF0KAogICAgICAgICAgICA8PDwnRU9UWFQnClJlZmxlY3Rpb25QYXJhbWV0ZXIgewogICtuYW1lOiAiYXJnMSIKICBwb3NpdGlvbjogMAogIHR5cGVIaW50OiAiU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXFRlc3RzXEZpeHR1cmVzXE5vdExvYWRhYmxlQ2xhc3MiCiAgZGVmYXVsdDogbnVsbAp9CkVPVFhUCiAgICAgICAgICAgICwgJHZhcgogICAgICAgICk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RSZWZsZWN0aW9uUGFyYW1ldGVyU2NhbGFyKCkKICAgIHsKICAgICAgICAkZiA9IGV2YWwoJ3JldHVybiBmdW5jdGlvbiAoaW50ICRhKSB7fTsnKTsKICAgICAgICAkdmFyID0gbmV3IFxSZWZsZWN0aW9uUGFyYW1ldGVyKCRmLCAwKTsKCiAgICAgICAgJHRoaXMtPmFzc2VydER1bXBNYXRjaGVzRm9ybWF0KAogICAgICAgICAgICA8PDwnRU9UWFQnClJlZmxlY3Rpb25QYXJhbWV0ZXIgewogICtuYW1lOiAiYSIKICBwb3NpdGlvbjogMAogIHR5cGVIaW50OiAiaW50Igp9CkVPVFhUCiAgICAgICAgICAgICwgJHZhcgogICAgICAgICk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RSZXR1cm5UeXBlKCkKICAgIHsKICAgICAgICAkZiA9IGV2YWwoJ3JldHVybiBmdW5jdGlvbiAoKTppbnQge307Jyk7CiAgICAgICAgJGxpbmUgPSBfX0xJTkVfXyAtIDE7CgogICAgICAgICR0aGlzLT5hc3NlcnREdW1wTWF0Y2hlc0Zvcm1hdCgKICAgICAgICAgICAgPDw8RU9UWFQKQ2xvc3VyZSB7CiAgcmV0dXJuVHlwZTogImludCIKICBjbGFzczogIlN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxUZXN0c1xDYXN0ZXJcUmVmbGVjdGlvbkNhc3RlclRlc3QiCiAgdGhpczogU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXFRlc3RzXENhc3RlclxSZWZsZWN0aW9uQ2FzdGVyVGVzdCB7IOKApn0KICBmaWxlOiAiJXNSZWZsZWN0aW9uQ2FzdGVyVGVzdC5waHAoJGxpbmUpIDogZXZhbCgpJ2QgY29kZSIKICBsaW5lOiAiMSB0byAxIgp9CkVPVFhUCiAgICAgICAgICAgICwgJGYKICAgICAgICApOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0R2VuZXJhdG9yKCkKICAgIHsKICAgICAgICBpZiAoZXh0ZW5zaW9uX2xvYWRlZCgneGRlYnVnJykpIHsKICAgICAgICAgICAgJHRoaXMtPm1hcmtUZXN0U2tpcHBlZCgneGRlYnVnIGlzIGFjdGl2ZScpOwogICAgICAgIH0KCiAgICAgICAgJGdlbmVyYXRvciA9IG5ldyBHZW5lcmF0b3JEZW1vKCk7CiAgICAgICAgJGdlbmVyYXRvciA9ICRnZW5lcmF0b3ItPmJheigpOwoKICAgICAgICAkZXhwZWN0ZWREdW1wID0gPDw8J0VPRFVNUCcKR2VuZXJhdG9yIHsKICB0aGlzOiBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcVGVzdHNcRml4dHVyZXNcR2VuZXJhdG9yRGVtbyB7IOKApn0KICBleGVjdXRpbmc6IHsKICAgIFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxUZXN0c1xGaXh0dXJlc1xHZW5lcmF0b3JEZW1vLT5iYXooKSB7CiAgICAgICVzR2VuZXJhdG9yRGVtby5waHA6MTQgewogICAgICAgIOKAuiB7CiAgICAgICAg4oC6ICAgICB5aWVsZCBmcm9tIGJhcigpOwogICAgICAgIOKAuiB9CiAgICAgIH0KICAgIH0KICB9CiAgY2xvc2VkOiBmYWxzZQp9CkVPRFVNUDsKCiAgICAgICAgJHRoaXMtPmFzc2VydER1bXBNYXRjaGVzRm9ybWF0KCRleHBlY3RlZER1bXAsICRnZW5lcmF0b3IpOwoKICAgICAgICBmb3JlYWNoICgkZ2VuZXJhdG9yIGFzICR2KSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCiAgICAgICAgJGV4cGVjdGVkRHVtcCA9IDw8PCdFT0RVTVAnCmFycmF5OjIgWwogIDAgPT4gUmVmbGVjdGlvbkdlbmVyYXRvciB7CiAgICB0aGlzOiBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcVGVzdHNcRml4dHVyZXNcR2VuZXJhdG9yRGVtbyB7IOKApn0KICAgIHRyYWNlOiB7CiAgICAgICVzJWVUZXN0cyVlRml4dHVyZXMlZUdlbmVyYXRvckRlbW8ucGhwOjkgewogICAgICAgIOKAuiB7CiAgICAgICAg4oC6ICAgICB5aWVsZCAxOwogICAgICAgIOKAuiB9CiAgICAgIH0KICAgICAgJXMlZVRlc3RzJWVGaXh0dXJlcyVlR2VuZXJhdG9yRGVtby5waHA6MjAgeyDigKZ9CiAgICAgICVzJWVUZXN0cyVlRml4dHVyZXMlZUdlbmVyYXRvckRlbW8ucGhwOjE0IHsg4oCmfQogICAgfQogICAgY2xvc2VkOiBmYWxzZQogIH0KICAxID0+IEdlbmVyYXRvciB7CiAgICBleGVjdXRpbmc6IHsKICAgICAgU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXFRlc3RzXEZpeHR1cmVzXEdlbmVyYXRvckRlbW86OmZvbygpIHsKICAgICAgICAlc0dlbmVyYXRvckRlbW8ucGhwOjEwIHsKICAgICAgICAgIOKAuiAgICAgeWllbGQgMTsKICAgICAgICAgIOKAuiB9CiAgICAgICAgICDigLogCiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBjbG9zZWQ6IGZhbHNlCiAgfQpdCkVPRFVNUDsKCiAgICAgICAgJHIgPSBuZXcgXFJlZmxlY3Rpb25HZW5lcmF0b3IoJGdlbmVyYXRvcik7CiAgICAgICAgJHRoaXMtPmFzc2VydER1bXBNYXRjaGVzRm9ybWF0KCRleHBlY3RlZER1bXAsIGFycmF5KCRyLCAkci0+Z2V0RXhlY3V0aW5nR2VuZXJhdG9yKCkpKTsKCiAgICAgICAgZm9yZWFjaCAoJGdlbmVyYXRvciBhcyAkdikgewogICAgICAgIH0KCiAgICAgICAgJGV4cGVjdGVkRHVtcCA9IDw8PCdFT0RVTVAnCkdlbmVyYXRvciB7CiAgY2xvc2VkOiB0cnVlCn0KRU9EVU1QOwogICAgICAgICR0aGlzLT5hc3NlcnREdW1wTWF0Y2hlc0Zvcm1hdCgkZXhwZWN0ZWREdW1wLCAkZ2VuZXJhdG9yKTsKICAgIH0KfQoKZnVuY3Rpb24gcmVmbGVjdGlvblBhcmFtZXRlckZpeHR1cmUoTm90TG9hZGFibGVDbGFzcyAkYXJnMSA9IG51bGwsICRhcmcyKQp7Cn0KAppDevTools/query/vendor/symfony/var-dumper/Tests/Caster/SplCasterTest.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcVGVzdHNcQ2FzdGVyOwoKdXNlIFBIUFVuaXRcRnJhbWV3b3JrXFRlc3RDYXNlOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXFRlc3RcVmFyRHVtcGVyVGVzdFRyYWl0OwoKLyoqCiAqIEBhdXRob3IgR3LDqWdvaXJlIFBpbmVhdSA8bHlyaXh4QGx5cml4eC5pbmZvPgogKi8KY2xhc3MgU3BsQ2FzdGVyVGVzdCBleHRlbmRzIFRlc3RDYXNlCnsKICAgIHVzZSBWYXJEdW1wZXJUZXN0VHJhaXQ7CgogICAgcHVibGljIGZ1bmN0aW9uIGdldENhc3RGaWxlSW5mb1Rlc3RzKCkKICAgIHsKICAgICAgICByZXR1cm4gYXJyYXkoCiAgICAgICAgICAgIGFycmF5KF9fRklMRV9fLCA8PDwnRU9UWFQnClNwbEZpbGVJbmZvIHsKJUFwYXRoOiAiJXNDYXN0ZXIiCiAgZmlsZW5hbWU6ICJTcGxDYXN0ZXJUZXN0LnBocCIKICBiYXNlbmFtZTogIlNwbENhc3RlclRlc3QucGhwIgogIHBhdGhuYW1lOiAiJXNTcGxDYXN0ZXJUZXN0LnBocCIKICBleHRlbnNpb246ICJwaHAiCiAgcmVhbFBhdGg6ICIlc1NwbENhc3RlclRlc3QucGhwIgogIGFUaW1lOiAlcy0lcy0lZCAlZDolZDolZAogIG1UaW1lOiAlcy0lcy0lZCAlZDolZDolZAogIGNUaW1lOiAlcy0lcy0lZCAlZDolZDolZAogIGlub2RlOiAlZAogIHNpemU6ICVkCiAgcGVybXM6IDAlZAogIG93bmVyOiAlZAogIGdyb3VwOiAlZAogIHR5cGU6ICJmaWxlIgogIHdyaXRhYmxlOiB0cnVlCiAgcmVhZGFibGU6IHRydWUKICBleGVjdXRhYmxlOiBmYWxzZQogIGZpbGU6IHRydWUKICBkaXI6IGZhbHNlCiAgbGluazogZmFsc2UKJUF9CkVPVFhUCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KCdodHRwczovL2dvb2dsZS5jb20vYWJvdXQnLCA8PDwnRU9UWFQnClNwbEZpbGVJbmZvIHsKJUFwYXRoOiAiaHR0cHM6Ly9nb29nbGUuY29tIgogIGZpbGVuYW1lOiAiYWJvdXQiCiAgYmFzZW5hbWU6ICJhYm91dCIKICBwYXRobmFtZTogImh0dHBzOi8vZ29vZ2xlLmNvbS9hYm91dCIKICBleHRlbnNpb246ICIiCiAgcmVhbFBhdGg6IGZhbHNlCiVBfQpFT1RYVAogICAgICAgICAgICApLAogICAgICAgICk7CiAgICB9CgogICAgLyoqIEBkYXRhUHJvdmlkZXIgZ2V0Q2FzdEZpbGVJbmZvVGVzdHMgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0Q2FzdEZpbGVJbmZvKCRmaWxlLCAkZHVtcCkKICAgIHsKICAgICAgICAkdGhpcy0+YXNzZXJ0RHVtcE1hdGNoZXNGb3JtYXQoJGR1bXAsIG5ldyBcU3BsRmlsZUluZm8oJGZpbGUpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdENhc3RGaWxlT2JqZWN0KCkKICAgIHsKICAgICAgICAkdmFyID0gbmV3IFxTcGxGaWxlT2JqZWN0KF9fRklMRV9fKTsKICAgICAgICAkdmFyLT5zZXRGbGFncyhcU3BsRmlsZU9iamVjdDo6RFJPUF9ORVdfTElORSB8IFxTcGxGaWxlT2JqZWN0OjpTS0lQX0VNUFRZKTsKICAgICAgICAkZHVtcCA9IDw8PCdFT1RYVCcKU3BsRmlsZU9iamVjdCB7CiVBcGF0aDogIiVzQ2FzdGVyIgogIGZpbGVuYW1lOiAiU3BsQ2FzdGVyVGVzdC5waHAiCiAgYmFzZW5hbWU6ICJTcGxDYXN0ZXJUZXN0LnBocCIKICBwYXRobmFtZTogIiVzU3BsQ2FzdGVyVGVzdC5waHAiCiAgZXh0ZW5zaW9uOiAicGhwIgogIHJlYWxQYXRoOiAiJXNTcGxDYXN0ZXJUZXN0LnBocCIKICBhVGltZTogJXMtJXMtJWQgJWQ6JWQ6JWQKICBtVGltZTogJXMtJXMtJWQgJWQ6JWQ6JWQKICBjVGltZTogJXMtJXMtJWQgJWQ6JWQ6JWQKICBpbm9kZTogJWQKICBzaXplOiAlZAogIHBlcm1zOiAwJWQKICBvd25lcjogJWQKICBncm91cDogJWQKICB0eXBlOiAiZmlsZSIKICB3cml0YWJsZTogdHJ1ZQogIHJlYWRhYmxlOiB0cnVlCiAgZXhlY3V0YWJsZTogZmFsc2UKICBmaWxlOiB0cnVlCiAgZGlyOiBmYWxzZQogIGxpbms6IGZhbHNlCiVBY3N2Q29udHJvbDogYXJyYXk6JWQgWwogICAgMCA9PiAiLCIKICAgIDEgPT4gIiIiCiVBXQogIGZsYWdzOiBEUk9QX05FV19MSU5FfFNLSVBfRU1QVFkKICBtYXhMaW5lTGVuOiAwCiAgZnN0YXQ6IGFycmF5OjI2IFsKICAgICJkZXYiID0+ICVkCiAgICAiaW5vIiA9PiAlZAogICAgIm5saW5rIiA9PiAlZAogICAgInJkZXYiID0+IDAKICAgICJibGtzaXplIiA9PiAlaQogICAgImJsb2NrcyIgPT4gJWkKICAgICDigKYyMAogIF0KICBlb2Y6IGZhbHNlCiAga2V5OiAwCn0KRU9UWFQ7CiAgICAgICAgJHRoaXMtPmFzc2VydER1bXBNYXRjaGVzRm9ybWF0KCRkdW1wLCAkdmFyKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBkYXRhUHJvdmlkZXIgcHJvdmlkZUNhc3RTcGxEb3VibHlMaW5rZWRMaXN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0Q2FzdFNwbERvdWJseUxpbmtlZExpc3QoJG1vZGVWYWx1ZSwgJG1vZGVEdW1wKQogICAgewogICAgICAgICR2YXIgPSBuZXcgXFNwbERvdWJseUxpbmtlZExpc3QoKTsKICAgICAgICAkdmFyLT5zZXRJdGVyYXRvck1vZGUoJG1vZGVWYWx1ZSk7CiAgICAgICAgJGR1bXAgPSA8PDxFT1RYVApTcGxEb3VibHlMaW5rZWRMaXN0IHsKJUFtb2RlOiAkbW9kZUR1bXAKICBkbGxpc3Q6IFtdCn0KRU9UWFQ7CiAgICAgICAgJHRoaXMtPmFzc2VydER1bXBNYXRjaGVzRm9ybWF0KCRkdW1wLCAkdmFyKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gcHJvdmlkZUNhc3RTcGxEb3VibHlMaW5rZWRMaXN0KCkKICAgIHsKICAgICAgICByZXR1cm4gYXJyYXkoCiAgICAgICAgICAgIGFycmF5KFxTcGxEb3VibHlMaW5rZWRMaXN0OjpJVF9NT0RFX0ZJRk8sICdJVF9NT0RFX0ZJRk8gfCBJVF9NT0RFX0tFRVAnKSwKICAgICAgICAgICAgYXJyYXkoXFNwbERvdWJseUxpbmtlZExpc3Q6OklUX01PREVfTElGTywgJ0lUX01PREVfTElGTyB8IElUX01PREVfS0VFUCcpLAogICAgICAgICAgICBhcnJheShcU3BsRG91Ymx5TGlua2VkTGlzdDo6SVRfTU9ERV9GSUZPIHwgXFNwbERvdWJseUxpbmtlZExpc3Q6OklUX01PREVfREVMRVRFLCAnSVRfTU9ERV9GSUZPIHwgSVRfTU9ERV9ERUxFVEUnKSwKICAgICAgICAgICAgYXJyYXkoXFNwbERvdWJseUxpbmtlZExpc3Q6OklUX01PREVfTElGTyB8IFxTcGxEb3VibHlMaW5rZWRMaXN0OjpJVF9NT0RFX0RFTEVURSwgJ0lUX01PREVfTElGTyB8IElUX01PREVfREVMRVRFJyksCiAgICAgICAgKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdENhc3RPYmplY3RTdG9yYWdlSXNudE1vZGlmaWVkKCkKICAgIHsKICAgICAgICAkdmFyID0gbmV3IFxTcGxPYmplY3RTdG9yYWdlKCk7CiAgICAgICAgJHZhci0+YXR0YWNoKG5ldyBcc3RkQ2xhc3MoKSk7CiAgICAgICAgJHZhci0+cmV3aW5kKCk7CiAgICAgICAgJGN1cnJlbnQgPSAkdmFyLT5jdXJyZW50KCk7CgogICAgICAgICR0aGlzLT5hc3NlcnREdW1wTWF0Y2hlc0Zvcm1hdCgnJUEnLCAkdmFyKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0U2FtZSgkY3VycmVudCwgJHZhci0+Y3VycmVudCgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdENhc3RPYmplY3RTdG9yYWdlRHVtcHNJbmZvKCkKICAgIHsKICAgICAgICAkdmFyID0gbmV3IFxTcGxPYmplY3RTdG9yYWdlKCk7CiAgICAgICAgJHZhci0+YXR0YWNoKG5ldyBcc3RkQ2xhc3MoKSwgbmV3IFxEYXRlVGltZSgpKTsKCiAgICAgICAgJHRoaXMtPmFzc2VydER1bXBNYXRjaGVzRm9ybWF0KCclQURhdGVUaW1lJUEnLCAkdmFyKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdENhc3RBcnJheU9iamVjdCgpCiAgICB7CiAgICAgICAgJHZhciA9IG5ldyBcQXJyYXlPYmplY3QoYXJyYXkoMTIzKSk7CiAgICAgICAgJHZhci0+Zm9vID0gMjM0OwoKICAgICAgICAkZXhwZWN0ZWQgPSA8PDxFT1RYVApBcnJheU9iamVjdCB7CiAgKyJmb28iOiAyMzQKICBmbGFnOjpTVERfUFJPUF9MSVNUOiBmYWxzZQogIGZsYWc6OkFSUkFZX0FTX1BST1BTOiBmYWxzZQogIGl0ZXJhdG9yQ2xhc3M6ICJBcnJheUl0ZXJhdG9yIgogIHN0b3JhZ2U6IGFycmF5OjEgWwogICAgMCA9PiAxMjMKICBdCn0KRU9UWFQ7CiAgICAgICAgJHRoaXMtPmFzc2VydER1bXBFcXVhbHMoJGV4cGVjdGVkLCAkdmFyKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdEFycmF5SXRlcmF0b3IoKQogICAgewogICAgICAgICR2YXIgPSBuZXcgTXlBcnJheUl0ZXJhdG9yKGFycmF5KDIzNCkpOwoKICAgICAgICAkZXhwZWN0ZWQgPSA8PDxFT1RYVApTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcVGVzdHNcQ2FzdGVyXE15QXJyYXlJdGVyYXRvciB7CiAgLWZvbzogMTIzCiAgZmxhZzo6U1REX1BST1BfTElTVDogZmFsc2UKICBmbGFnOjpBUlJBWV9BU19QUk9QUzogZmFsc2UKICBzdG9yYWdlOiBhcnJheToxIFsKICAgIDAgPT4gMjM0CiAgXQp9CkVPVFhUOwogICAgICAgICR0aGlzLT5hc3NlcnREdW1wRXF1YWxzKCRleHBlY3RlZCwgJHZhcik7CiAgICB9Cn0KCmNsYXNzIE15QXJyYXlJdGVyYXRvciBleHRlbmRzIFxBcnJheUl0ZXJhdG9yCnsKICAgIHByaXZhdGUgJGZvbyA9IDEyMzsKfQo=AppDevTools/query/vendor/symfony/var-dumper/Tests/Caster/StubCasterTest.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcVGVzdHNcQ2FzdGVyOwoKdXNlIFBIUFVuaXRcRnJhbWV3b3JrXFRlc3RDYXNlOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENhc3RlclxBcmdzU3R1YjsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDYXN0ZXJcQ2xhc3NTdHViOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENhc3RlclxMaW5rU3R1YjsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDbG9uZXJcVmFyQ2xvbmVyOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXER1bXBlclxIdG1sRHVtcGVyOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXFRlc3RcVmFyRHVtcGVyVGVzdFRyYWl0Owp1c2UgU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXFRlc3RzXEZpeHR1cmVzXEZvb0ludGVyZmFjZTsKCmNsYXNzIFN0dWJDYXN0ZXJUZXN0IGV4dGVuZHMgVGVzdENhc2UKewogICAgdXNlIFZhckR1bXBlclRlc3RUcmFpdDsKCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdEFyZ3NTdHViV2l0aERlZmF1bHRzKCRmb28gPSAyMzQsICRiYXIgPSA0NTYpCiAgICB7CiAgICAgICAgJGFyZ3MgPSBhcnJheShuZXcgQXJnc1N0dWIoYXJyYXkoMTIzKSwgX19GVU5DVElPTl9fLCBfX0NMQVNTX18pKTsKCiAgICAgICAgJGV4cGVjdGVkRHVtcCA9IDw8PCdFT0RVTVAnCmFycmF5OjEgWwogIDAgPT4gewogICAgJGZvbzogMTIzCiAgfQpdCkVPRFVNUDsKCiAgICAgICAgJHRoaXMtPmFzc2VydER1bXBNYXRjaGVzRm9ybWF0KCRleHBlY3RlZER1bXAsICRhcmdzKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdEFyZ3NTdHViV2l0aEV4dHJhQXJncygkZm9vID0gMjM0KQogICAgewogICAgICAgICRhcmdzID0gYXJyYXkobmV3IEFyZ3NTdHViKGFycmF5KDEyMywgNDU2KSwgX19GVU5DVElPTl9fLCBfX0NMQVNTX18pKTsKCiAgICAgICAgJGV4cGVjdGVkRHVtcCA9IDw8PCdFT0RVTVAnCmFycmF5OjEgWwogIDAgPT4gewogICAgJGZvbzogMTIzCiAgICAuLi46IHsKICAgICAgNDU2CiAgICB9CiAgfQpdCkVPRFVNUDsKCiAgICAgICAgJHRoaXMtPmFzc2VydER1bXBNYXRjaGVzRm9ybWF0KCRleHBlY3RlZER1bXAsICRhcmdzKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdEFyZ3NTdHViTm9QYXJhbVdpdGhFeHRyYUFyZ3MoKQogICAgewogICAgICAgICRhcmdzID0gYXJyYXkobmV3IEFyZ3NTdHViKGFycmF5KDEyMyksIF9fRlVOQ1RJT05fXywgX19DTEFTU19fKSk7CgogICAgICAgICRleHBlY3RlZER1bXAgPSA8PDwnRU9EVU1QJwphcnJheToxIFsKICAwID0+IHsKICAgIDEyMwogIH0KXQpFT0RVTVA7CgogICAgICAgICR0aGlzLT5hc3NlcnREdW1wTWF0Y2hlc0Zvcm1hdCgkZXhwZWN0ZWREdW1wLCAkYXJncyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RBcmdzU3R1YldpdGhDbG9zdXJlKCkKICAgIHsKICAgICAgICAkYXJncyA9IGFycmF5KG5ldyBBcmdzU3R1YihhcnJheSgxMjMpLCAne2Nsb3N1cmV9JywgbnVsbCkpOwoKICAgICAgICAkZXhwZWN0ZWREdW1wID0gPDw8J0VPRFVNUCcKYXJyYXk6MSBbCiAgMCA9PiB7CiAgICAxMjMKICB9Cl0KRU9EVU1QOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0RHVtcE1hdGNoZXNGb3JtYXQoJGV4cGVjdGVkRHVtcCwgJGFyZ3MpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0TGlua1N0dWIoKQogICAgewogICAgICAgICR2YXIgPSBhcnJheShuZXcgTGlua1N0dWIoX19DTEFTU19fLCAwLCBfX0ZJTEVfXykpOwoKICAgICAgICAkY2xvbmVyID0gbmV3IFZhckNsb25lcigpOwogICAgICAgICRkdW1wZXIgPSBuZXcgSHRtbER1bXBlcigpOwogICAgICAgICRkdW1wZXItPnNldER1bXBIZWFkZXIoJzxmb28+PC9mb28+Jyk7CiAgICAgICAgJGR1bXBlci0+c2V0RHVtcEJvdW5kYXJpZXMoJzxiYXI+JywgJzwvYmFyPicpOwogICAgICAgICRkdW1wZXItPnNldERpc3BsYXlPcHRpb25zKGFycmF5KCdmaWxlTGlua0Zvcm1hdCcgPT4gJyVmOiVsJykpOwogICAgICAgICRkdW1wID0gJGR1bXBlci0+ZHVtcCgkY2xvbmVyLT5jbG9uZVZhcigkdmFyKSwgdHJ1ZSk7CgogICAgICAgICRleHBlY3RlZER1bXAgPSA8PDwnRU9EVU1QJwo8Zm9vPjwvZm9vPjxiYXI+PHNwYW4gY2xhc3M9c2YtZHVtcC1ub3RlPmFycmF5OjE8L3NwYW4+IFs8c2FtcD4KICA8c3BhbiBjbGFzcz1zZi1kdW1wLWluZGV4PjA8L3NwYW4+ID0+ICI8YSBocmVmPSIlc1N0dWJDYXN0ZXJUZXN0LnBocDowIiByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiPjxzcGFuIGNsYXNzPXNmLWR1bXAtc3RyIHRpdGxlPSI1NSBjaGFyYWN0ZXJzIj5TeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcVGVzdHNcQ2FzdGVyXFN0dWJDYXN0ZXJUZXN0PC9zcGFuPjwvYT4iCjwvc2FtcD5dCjwvYmFyPgpFT0RVTVA7CgogICAgICAgICR0aGlzLT5hc3NlcnRTdHJpbmdNYXRjaGVzRm9ybWF0KCRleHBlY3RlZER1bXAsICRkdW1wKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdExpbmtTdHViV2l0aE5vRmlsZUxpbmsoKQogICAgewogICAgICAgICR2YXIgPSBhcnJheShuZXcgTGlua1N0dWIoJ2V4YW1wbGUuY29tJywgMCwgJ2h0dHA6Ly9leGFtcGxlLmNvbScpKTsKCiAgICAgICAgJGNsb25lciA9IG5ldyBWYXJDbG9uZXIoKTsKICAgICAgICAkZHVtcGVyID0gbmV3IEh0bWxEdW1wZXIoKTsKICAgICAgICAkZHVtcGVyLT5zZXREdW1wSGVhZGVyKCc8Zm9vPjwvZm9vPicpOwogICAgICAgICRkdW1wZXItPnNldER1bXBCb3VuZGFyaWVzKCc8YmFyPicsICc8L2Jhcj4nKTsKICAgICAgICAkZHVtcGVyLT5zZXREaXNwbGF5T3B0aW9ucyhhcnJheSgnZmlsZUxpbmtGb3JtYXQnID0+ICclZjolbCcpKTsKICAgICAgICAkZHVtcCA9ICRkdW1wZXItPmR1bXAoJGNsb25lci0+Y2xvbmVWYXIoJHZhciksIHRydWUpOwoKICAgICAgICAkZXhwZWN0ZWREdW1wID0gPDw8J0VPRFVNUCcKPGZvbz48L2Zvbz48YmFyPjxzcGFuIGNsYXNzPXNmLWR1bXAtbm90ZT5hcnJheToxPC9zcGFuPiBbPHNhbXA+CiAgPHNwYW4gY2xhc3M9c2YtZHVtcC1pbmRleD4wPC9zcGFuPiA9PiAiPGEgaHJlZj0iaHR0cDovL2V4YW1wbGUuY29tIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciBub3JlZmVycmVyIj48c3BhbiBjbGFzcz1zZi1kdW1wLXN0ciB0aXRsZT0iMTEgY2hhcmFjdGVycyI+ZXhhbXBsZS5jb208L3NwYW4+PC9hPiIKPC9zYW1wPl0KPC9iYXI+CkVPRFVNUDsKCiAgICAgICAgJHRoaXMtPmFzc2VydFN0cmluZ01hdGNoZXNGb3JtYXQoJGV4cGVjdGVkRHVtcCwgJGR1bXApOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0Q2xhc3NTdHViKCkKICAgIHsKICAgICAgICAkdmFyID0gYXJyYXkobmV3IENsYXNzU3R1YignaGVsbG8nLCBhcnJheShGb29JbnRlcmZhY2U6OmNsYXNzLCAnZm9vJykpKTsKCiAgICAgICAgJGNsb25lciA9IG5ldyBWYXJDbG9uZXIoKTsKICAgICAgICAkZHVtcGVyID0gbmV3IEh0bWxEdW1wZXIoKTsKICAgICAgICAkZHVtcGVyLT5zZXREdW1wSGVhZGVyKCc8Zm9vPjwvZm9vPicpOwogICAgICAgICRkdW1wZXItPnNldER1bXBCb3VuZGFyaWVzKCc8YmFyPicsICc8L2Jhcj4nKTsKICAgICAgICAkZHVtcCA9ICRkdW1wZXItPmR1bXAoJGNsb25lci0+Y2xvbmVWYXIoJHZhciksIHRydWUsIGFycmF5KCdmaWxlTGlua0Zvcm1hdCcgPT4gJyVmOiVsJykpOwoKICAgICAgICAkZXhwZWN0ZWREdW1wID0gPDw8J0VPRFVNUCcKPGZvbz48L2Zvbz48YmFyPjxzcGFuIGNsYXNzPXNmLWR1bXAtbm90ZT5hcnJheToxPC9zcGFuPiBbPHNhbXA+CiAgPHNwYW4gY2xhc3M9c2YtZHVtcC1pbmRleD4wPC9zcGFuPiA9PiAiPGEgaHJlZj0iJXNGb29JbnRlcmZhY2UucGhwOjEwIiByZWw9Im5vb3BlbmVyIG5vcmVmZXJyZXIiPjxzcGFuIGNsYXNzPXNmLWR1bXAtc3RyIHRpdGxlPSI1IGNoYXJhY3RlcnMiPmhlbGxvPC9zcGFuPjwvYT4iCjwvc2FtcD5dCjwvYmFyPgpFT0RVTVA7CgogICAgICAgICR0aGlzLT5hc3NlcnRTdHJpbmdNYXRjaGVzRm9ybWF0KCRleHBlY3RlZER1bXAsICRkdW1wKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdENsYXNzU3R1YldpdGhOb3RFeGlzdGluZ0NsYXNzKCkKICAgIHsKICAgICAgICAkdmFyID0gYXJyYXkobmV3IENsYXNzU3R1YihOb3RFeGlzdGluZzo6Y2xhc3MpKTsKCiAgICAgICAgJGNsb25lciA9IG5ldyBWYXJDbG9uZXIoKTsKICAgICAgICAkZHVtcGVyID0gbmV3IEh0bWxEdW1wZXIoKTsKICAgICAgICAkZHVtcGVyLT5zZXREdW1wSGVhZGVyKCc8Zm9vPjwvZm9vPicpOwogICAgICAgICRkdW1wZXItPnNldER1bXBCb3VuZGFyaWVzKCc8YmFyPicsICc8L2Jhcj4nKTsKICAgICAgICAkZHVtcCA9ICRkdW1wZXItPmR1bXAoJGNsb25lci0+Y2xvbmVWYXIoJHZhciksIHRydWUpOwoKICAgICAgICAkZXhwZWN0ZWREdW1wID0gPDw8J0VPRFVNUCcKPGZvbz48L2Zvbz48YmFyPjxzcGFuIGNsYXNzPXNmLWR1bXAtbm90ZT5hcnJheToxPC9zcGFuPiBbPHNhbXA+CiAgPHNwYW4gY2xhc3M9c2YtZHVtcC1pbmRleD4wPC9zcGFuPiA9PiAiPHNwYW4gY2xhc3M9c2YtZHVtcC1zdHIgdGl0bGU9IlN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxUZXN0c1xDYXN0ZXJcTm90RXhpc3RpbmcKNTIgY2hhcmFjdGVycyI+PHNwYW4gY2xhc3M9InNmLWR1bXAtZWxsaXBzaXMgc2YtZHVtcC1lbGxpcHNpcy1jbGFzcyI+U3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXFRlc3RzXENhc3Rlcjwvc3Bhbj48c3BhbiBjbGFzcz1zZi1kdW1wLWVsbGlwc2lzPlw8L3NwYW4+Tm90RXhpc3Rpbmc8L3NwYW4+Igo8L3NhbXA+XQo8L2Jhcj4KRU9EVU1QOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0U3RyaW5nTWF0Y2hlc0Zvcm1hdCgkZXhwZWN0ZWREdW1wLCAkZHVtcCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RDbGFzc1N0dWJXaXRoTm90RXhpc3RpbmdNZXRob2QoKQogICAgewogICAgICAgICR2YXIgPSBhcnJheShuZXcgQ2xhc3NTdHViKCdoZWxsbycsIGFycmF5KEZvb0ludGVyZmFjZTo6Y2xhc3MsICdtaXNzaW5nJykpKTsKCiAgICAgICAgJGNsb25lciA9IG5ldyBWYXJDbG9uZXIoKTsKICAgICAgICAkZHVtcGVyID0gbmV3IEh0bWxEdW1wZXIoKTsKICAgICAgICAkZHVtcGVyLT5zZXREdW1wSGVhZGVyKCc8Zm9vPjwvZm9vPicpOwogICAgICAgICRkdW1wZXItPnNldER1bXBCb3VuZGFyaWVzKCc8YmFyPicsICc8L2Jhcj4nKTsKICAgICAgICAkZHVtcCA9ICRkdW1wZXItPmR1bXAoJGNsb25lci0+Y2xvbmVWYXIoJHZhciksIHRydWUsIGFycmF5KCdmaWxlTGlua0Zvcm1hdCcgPT4gJyVmOiVsJykpOwoKICAgICAgICAkZXhwZWN0ZWREdW1wID0gPDw8J0VPRFVNUCcKPGZvbz48L2Zvbz48YmFyPjxzcGFuIGNsYXNzPXNmLWR1bXAtbm90ZT5hcnJheToxPC9zcGFuPiBbPHNhbXA+CiAgPHNwYW4gY2xhc3M9c2YtZHVtcC1pbmRleD4wPC9zcGFuPiA9PiAiPGEgaHJlZj0iJXNGb29JbnRlcmZhY2UucGhwOjUiIHJlbD0ibm9vcGVuZXIgbm9yZWZlcnJlciI+PHNwYW4gY2xhc3M9c2YtZHVtcC1zdHIgdGl0bGU9IjUgY2hhcmFjdGVycyI+aGVsbG88L3NwYW4+PC9hPiIKPC9zYW1wPl0KPC9iYXI+CkVPRFVNUDsKCiAgICAgICAgJHRoaXMtPmFzc2VydFN0cmluZ01hdGNoZXNGb3JtYXQoJGV4cGVjdGVkRHVtcCwgJGR1bXApOwogICAgfQp9Cg==AppDevTools/query/vendor/symfony/var-dumper/Tests/Caster/XmlReaderCasterTest.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcVGVzdHNcQ2FzdGVyOwoKdXNlIFBIUFVuaXRcRnJhbWV3b3JrXFRlc3RDYXNlOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXFRlc3RcVmFyRHVtcGVyVGVzdFRyYWl0OwoKLyoqCiAqIEBhdXRob3IgQmFwdGlzdGUgQ2xhdmnDqSA8Y2xhdmllLmJAZ21haWwuY29tPgogKi8KY2xhc3MgWG1sUmVhZGVyQ2FzdGVyVGVzdCBleHRlbmRzIFRlc3RDYXNlCnsKICAgIHVzZSBWYXJEdW1wZXJUZXN0VHJhaXQ7CgogICAgLyoqIEB2YXIgXFhtbFJlYWRlciAqLwogICAgcHJpdmF0ZSAkcmVhZGVyOwoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBzZXRVcCgpCiAgICB7CiAgICAgICAgJHRoaXMtPnJlYWRlciA9IG5ldyBcWG1sUmVhZGVyKCk7CiAgICAgICAgJHRoaXMtPnJlYWRlci0+b3BlbihfX0RJUl9fLicvLi4vRml4dHVyZXMveG1sX3JlYWRlci54bWwnKTsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gdGVhckRvd24oKQogICAgewogICAgICAgICR0aGlzLT5yZWFkZXItPmNsb3NlKCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RQYXJzZXJQcm9wZXJ0eSgpCiAgICB7CiAgICAgICAgJHRoaXMtPnJlYWRlci0+c2V0UGFyc2VyUHJvcGVydHkoXFhNTFJlYWRlcjo6U1VCU1RfRU5USVRJRVMsIHRydWUpOwoKICAgICAgICAkZXhwZWN0ZWREdW1wID0gPDw8J0VPRFVNUCcKWE1MUmVhZGVyIHsKICArbm9kZVR5cGU6IE5PTkUKICBwYXJzZXJQcm9wZXJ0aWVzOiB7CiAgICBTVUJTVF9FTlRJVElFUzogdHJ1ZQogICAgIOKApjMKICB9CiAgIOKApjEyCn0KRU9EVU1QOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0RHVtcE1hdGNoZXNGb3JtYXQoJGV4cGVjdGVkRHVtcCwgJHRoaXMtPnJlYWRlcik7CiAgICB9CgogICAgLyoqCiAgICAgKiBAZGF0YVByb3ZpZGVyIHByb3ZpZGVOb2RlcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdE5vZGVzKCRzZWVrLCAkZXhwZWN0ZWREdW1wKQogICAgewogICAgICAgIHdoaWxlICgkc2Vlay0tKSB7CiAgICAgICAgICAgICR0aGlzLT5yZWFkZXItPnJlYWQoKTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPmFzc2VydER1bXBNYXRjaGVzRm9ybWF0KCRleHBlY3RlZER1bXAsICR0aGlzLT5yZWFkZXIpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBwcm92aWRlTm9kZXMoKQogICAgewogICAgICAgIHJldHVybiBhcnJheSgKICAgICAgICAgICAgYXJyYXkoMCwgPDw8J0VPRFVNUCcKWE1MUmVhZGVyIHsKICArbm9kZVR5cGU6IE5PTkUKICAg4oCmMTMKfQpFT0RVTVAKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoMSwgPDw8J0VPRFVNUCcKWE1MUmVhZGVyIHsKICArbG9jYWxOYW1lOiAiZm9vIgogICtub2RlVHlwZTogRUxFTUVOVAogICtiYXNlVVJJOiAiJXN4bWxfcmVhZGVyLnhtbCIKICAg4oCmMTEKfQpFT0RVTVAKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoMiwgPDw8J0VPRFVNUCcKWE1MUmVhZGVyIHsKICArbG9jYWxOYW1lOiAiI3RleHQiCiAgK25vZGVUeXBlOiBTSUdOSUZJQ0FOVF9XSElURVNQQUNFCiAgK2RlcHRoOiAxCiAgK3ZhbHVlOiAiIiIKICAgIFxuCiAgICAgICAgCiAgICAiIiIKICArYmFzZVVSSTogIiVzeG1sX3JlYWRlci54bWwiCiAgIOKApjkKfQpFT0RVTVAKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoMywgPDw8J0VPRFVNUCcKWE1MUmVhZGVyIHsKICArbG9jYWxOYW1lOiAiYmFyIgogICtub2RlVHlwZTogRUxFTUVOVAogICtkZXB0aDogMQogICtiYXNlVVJJOiAiJXN4bWxfcmVhZGVyLnhtbCIKICAg4oCmMTAKfQpFT0RVTVAKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoNCwgPDw8J0VPRFVNUCcKWE1MUmVhZGVyIHsKICArbG9jYWxOYW1lOiAiYmFyIgogICtub2RlVHlwZTogRU5EX0VMRU1FTlQKICArZGVwdGg6IDEKICArYmFzZVVSSTogIiVzeG1sX3JlYWRlci54bWwiCiAgIOKApjEwCn0KRU9EVU1QCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KDYsIDw8PCdFT0RVTVAnClhNTFJlYWRlciB7CiAgK2xvY2FsTmFtZTogImJhciIKICArbm9kZVR5cGU6IEVMRU1FTlQKICArZGVwdGg6IDEKICAraXNFbXB0eUVsZW1lbnQ6IHRydWUKICArYmFzZVVSSTogIiVzeG1sX3JlYWRlci54bWwiCiAgIOKApjkKfQpFT0RVTVAKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoOSwgPDw8J0VPRFVNUCcKWE1MUmVhZGVyIHsKICArbG9jYWxOYW1lOiAiI3RleHQiCiAgK25vZGVUeXBlOiBURVhUCiAgK2RlcHRoOiAyCiAgK3ZhbHVlOiAiV2l0aCB0ZXh0IgogICtiYXNlVVJJOiAiJXN4bWxfcmVhZGVyLnhtbCIKICAg4oCmOQp9CkVPRFVNUAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgxMiwgPDw8J0VPRFVNUCcKWE1MUmVhZGVyIHsKICArbG9jYWxOYW1lOiAiYmFyIgogICtub2RlVHlwZTogRUxFTUVOVAogICtkZXB0aDogMQogICthdHRyaWJ1dGVDb3VudDogMgogICtiYXNlVVJJOiAiJXN4bWxfcmVhZGVyLnhtbCIKICAg4oCmOQp9CkVPRFVNUAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgxMywgPDw8J0VPRFVNUCcKWE1MUmVhZGVyIHsKICArbG9jYWxOYW1lOiAiYmFyIgogICtub2RlVHlwZTogRU5EX0VMRU1FTlQKICArZGVwdGg6IDEKICArYmFzZVVSSTogIiVzeG1sX3JlYWRlci54bWwiCiAgIOKApjEwCn0KRU9EVU1QCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KDE1LCA8PDwnRU9EVU1QJwpYTUxSZWFkZXIgewogICtsb2NhbE5hbWU6ICJiYXIiCiAgK25vZGVUeXBlOiBFTEVNRU5UCiAgK2RlcHRoOiAxCiAgK2F0dHJpYnV0ZUNvdW50OiAxCiAgK2Jhc2VVUkk6ICIlc3htbF9yZWFkZXIueG1sIgogICDigKY5Cn0KRU9EVU1QCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KDE2LCA8PDwnRU9EVU1QJwpYTUxSZWFkZXIgewogICtsb2NhbE5hbWU6ICIjdGV4dCIKICArbm9kZVR5cGU6IFNJR05JRklDQU5UX1dISVRFU1BBQ0UKICArZGVwdGg6IDIKICArdmFsdWU6ICIiIgogICAgXG4KICAgICAgICAgICAgCiAgICAiIiIKICArYmFzZVVSSTogIiVzeG1sX3JlYWRlci54bWwiCiAgIOKApjkKfQpFT0RVTVAKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoMTcsIDw8PCdFT0RVTVAnClhNTFJlYWRlciB7CiAgK2xvY2FsTmFtZTogImJheiIKICArcHJlZml4OiAiYmF6IgogICtub2RlVHlwZTogRUxFTUVOVAogICtkZXB0aDogMgogICtuYW1lc3BhY2VVUkk6ICJodHRwOi8vc3ltZm9ueS5jb20iCiAgK2Jhc2VVUkk6ICIlc3htbF9yZWFkZXIueG1sIgogICDigKY4Cn0KRU9EVU1QCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KDE4LCA8PDwnRU9EVU1QJwpYTUxSZWFkZXIgewogICtsb2NhbE5hbWU6ICJiYXoiCiAgK3ByZWZpeDogImJheiIKICArbm9kZVR5cGU6IEVORF9FTEVNRU5UCiAgK2RlcHRoOiAyCiAgK25hbWVzcGFjZVVSSTogImh0dHA6Ly9zeW1mb255LmNvbSIKICArYmFzZVVSSTogIiVzeG1sX3JlYWRlci54bWwiCiAgIOKApjgKfQpFT0RVTVAKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoMTksIDw8PCdFT0RVTVAnClhNTFJlYWRlciB7CiAgK2xvY2FsTmFtZTogIiN0ZXh0IgogICtub2RlVHlwZTogU0lHTklGSUNBTlRfV0hJVEVTUEFDRQogICtkZXB0aDogMgogICt2YWx1ZTogIiIiCiAgICBcbgogICAgICAgIAogICAgIiIiCiAgK2Jhc2VVUkk6ICIlc3htbF9yZWFkZXIueG1sIgogICDigKY5Cn0KRU9EVU1QCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KDIxLCA8PDwnRU9EVU1QJwpYTUxSZWFkZXIgewogICtsb2NhbE5hbWU6ICIjdGV4dCIKICArbm9kZVR5cGU6IFNJR05JRklDQU5UX1dISVRFU1BBQ0UKICArZGVwdGg6IDEKICArdmFsdWU6ICJcbiIKICArYmFzZVVSSTogIiVzeG1sX3JlYWRlci54bWwiCiAgIOKApjkKfQpFT0RVTVAKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoMjIsIDw8PCdFT0RVTVAnClhNTFJlYWRlciB7CiAgK2xvY2FsTmFtZTogImZvbyIKICArbm9kZVR5cGU6IEVORF9FTEVNRU5UCiAgK2Jhc2VVUkk6ICIlc3htbF9yZWFkZXIueG1sIgogICDigKYxMQp9CkVPRFVNUAogICAgICAgICAgICApLAogICAgICAgICk7CiAgICB9Cn0KAppDevTools/query/vendor/symfony/var-dumper/Tests/Cloner/DataTest.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcVGVzdHNcQ2xvbmVyOwoKdXNlIFBIUFVuaXRcRnJhbWV3b3JrXFRlc3RDYXNlOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENhc3RlclxDYXN0ZXI7CnVzZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2FzdGVyXENsYXNzU3R1YjsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDbG9uZXJcRGF0YTsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDbG9uZXJcVmFyQ2xvbmVyOwoKY2xhc3MgRGF0YVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZQp7CiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdEJhc2ljRGF0YSgpCiAgICB7CiAgICAgICAgJHZhbHVlcyA9IGFycmF5KDEgPT4gMTIzLCA0LjUsICdhYmMnLCBudWxsLCBmYWxzZSk7CiAgICAgICAgJGRhdGEgPSAkdGhpcy0+Y2xvbmVWYXIoJHZhbHVlcyk7CiAgICAgICAgJGNsb25lZFZhbHVlcyA9IGFycmF5KCk7CgogICAgICAgICR0aGlzLT5hc3NlcnRJbnN0YW5jZU9mKERhdGE6OmNsYXNzLCAkZGF0YSk7CiAgICAgICAgJHRoaXMtPmFzc2VydENvdW50KGNvdW50KCR2YWx1ZXMpLCAkZGF0YSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEZhbHNlKGlzc2V0KCRkYXRhLT57MH0pKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RmFsc2UoaXNzZXQoJGRhdGFbMF0pKTsKCiAgICAgICAgZm9yZWFjaCAoJGRhdGEgYXMgJGsgPT4gJHYpIHsKICAgICAgICAgICAgJHRoaXMtPmFzc2VydFRydWUoaXNzZXQoJGRhdGEtPnska30pKTsKICAgICAgICAgICAgJHRoaXMtPmFzc2VydFRydWUoaXNzZXQoJGRhdGFbJGtdKSk7CiAgICAgICAgICAgICR0aGlzLT5hc3NlcnRTYW1lKGdldHR5cGUoJHZhbHVlc1ska10pLCAkZGF0YS0+c2VlaygkayktPmdldFR5cGUoKSk7CiAgICAgICAgICAgICR0aGlzLT5hc3NlcnRTYW1lKCR2YWx1ZXNbJGtdLCAkZGF0YS0+c2VlaygkayktPmdldFZhbHVlKCkpOwogICAgICAgICAgICAkdGhpcy0+YXNzZXJ0U2FtZSgkdmFsdWVzWyRrXSwgJGRhdGEtPnska30pOwogICAgICAgICAgICAkdGhpcy0+YXNzZXJ0U2FtZSgkdmFsdWVzWyRrXSwgJGRhdGFbJGtdKTsKICAgICAgICAgICAgJHRoaXMtPmFzc2VydFNhbWUoKHN0cmluZykgJHZhbHVlc1ska10sIChzdHJpbmcpICRkYXRhLT5zZWVrKCRrKSk7CgogICAgICAgICAgICAkY2xvbmVkVmFsdWVzWyRrXSA9ICR2LT5nZXRWYWx1ZSgpOwogICAgICAgIH0KCiAgICAgICAgJHRoaXMtPmFzc2VydFNhbWUoJHZhbHVlcywgJGNsb25lZFZhbHVlcyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RPYmplY3QoKQogICAgewogICAgICAgICRkYXRhID0gJHRoaXMtPmNsb25lVmFyKG5ldyBcRXhjZXB0aW9uKCdmb28nKSk7CgogICAgICAgICR0aGlzLT5hc3NlcnRTYW1lKCdFeGNlcHRpb24nLCAkZGF0YS0+Z2V0VHlwZSgpKTsKCiAgICAgICAgJHRoaXMtPmFzc2VydFNhbWUoJ2ZvbycsICRkYXRhLT5tZXNzYWdlKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0U2FtZSgnZm9vJywgJGRhdGEtPntDYXN0ZXI6OlBSRUZJWF9QUk9URUNURUQuJ21lc3NhZ2UnfSk7CgogICAgICAgICR0aGlzLT5hc3NlcnRTYW1lKCdmb28nLCAkZGF0YVsnbWVzc2FnZSddKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0U2FtZSgnZm9vJywgJGRhdGFbQ2FzdGVyOjpQUkVGSVhfUFJPVEVDVEVELidtZXNzYWdlJ10pOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0U3RyaW5nTWF0Y2hlc0Zvcm1hdCgnRXhjZXB0aW9uIChjb3VudD0lZCknLCAoc3RyaW5nKSAkZGF0YSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RBcnJheSgpCiAgICB7CiAgICAgICAgJHZhbHVlcyA9IGFycmF5KGFycmF5KCksIGFycmF5KDEyMykpOwogICAgICAgICRkYXRhID0gJHRoaXMtPmNsb25lVmFyKCR2YWx1ZXMpOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0U2FtZSgkdmFsdWVzLCAkZGF0YS0+Z2V0VmFsdWUodHJ1ZSkpOwoKICAgICAgICAkY2hpbGRyZW4gPSAkZGF0YS0+Z2V0VmFsdWUoKTsKCiAgICAgICAgJHRoaXMtPmFzc2VydEludGVybmFsVHlwZSgnYXJyYXknLCAkY2hpbGRyZW4pOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0SW5zdGFuY2VPZihEYXRhOjpjbGFzcywgJGNoaWxkcmVuWzBdKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0SW5zdGFuY2VPZihEYXRhOjpjbGFzcywgJGNoaWxkcmVuWzFdKTsKCiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscygkY2hpbGRyZW5bMF0sICRkYXRhWzBdKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKCRjaGlsZHJlblsxXSwgJGRhdGFbMV0pOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0U2FtZSgkdmFsdWVzWzBdLCAkY2hpbGRyZW5bMF0tPmdldFZhbHVlKHRydWUpKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0U2FtZSgkdmFsdWVzWzFdLCAkY2hpbGRyZW5bMV0tPmdldFZhbHVlKHRydWUpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdFN0dWIoKQogICAgewogICAgICAgICRkYXRhID0gJHRoaXMtPmNsb25lVmFyKGFycmF5KG5ldyBDbGFzc1N0dWIoJ3N0ZENsYXNzJykpKTsKICAgICAgICAkZGF0YSA9ICRkYXRhWzBdOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0U2FtZSgnc3RyaW5nJywgJGRhdGEtPmdldFR5cGUoKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydFNhbWUoJ3N0ZENsYXNzJywgJGRhdGEtPmdldFZhbHVlKCkpOwogICAgICAgICR0aGlzLT5hc3NlcnRTYW1lKCdzdGRDbGFzcycsIChzdHJpbmcpICRkYXRhKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdEhhcmRSZWZzKCkKICAgIHsKICAgICAgICAkdmFsdWVzID0gYXJyYXkoYXJyYXkoKSk7CiAgICAgICAgJHZhbHVlc1sxXSA9ICYkdmFsdWVzWzBdOwogICAgICAgICR2YWx1ZXNbMl1bMF0gPSAmJHZhbHVlc1syXTsKCiAgICAgICAgJGRhdGEgPSAkdGhpcy0+Y2xvbmVWYXIoJHZhbHVlcyk7CgogICAgICAgICR0aGlzLT5hc3NlcnRTYW1lKGFycmF5KCksICRkYXRhWzBdLT5nZXRWYWx1ZSgpKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0U2FtZShhcnJheSgpLCAkZGF0YVsxXS0+Z2V0VmFsdWUoKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhhcnJheSgkZGF0YVsyXS0+Z2V0VmFsdWUoKSksICRkYXRhWzJdLT5nZXRWYWx1ZSh0cnVlKSk7CgogICAgICAgICR0aGlzLT5hc3NlcnRTYW1lKCdhcnJheSAoY291bnQ9MyknLCAoc3RyaW5nKSAkZGF0YSk7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBjbG9uZVZhcigkdmFsdWUpCiAgICB7CiAgICAgICAgJGNsb25lciA9IG5ldyBWYXJDbG9uZXIoKTsKCiAgICAgICAgcmV0dXJuICRjbG9uZXItPmNsb25lVmFyKCR2YWx1ZSk7CiAgICB9Cn0KAppDevTools/query/vendor/symfony/var-dumper/Tests/Cloner/VarClonerTest.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcVGVzdHNcQ2xvbmVyOwoKdXNlIFBIUFVuaXRcRnJhbWV3b3JrXFRlc3RDYXNlOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENsb25lclxWYXJDbG9uZXI7CgovKioKICogQGF1dGhvciBOaWNvbGFzIEdyZWthcyA8cEB0Y2h3b3JrLmNvbT4KICovCmNsYXNzIFZhckNsb25lclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZQp7CiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdE1heEludEJvdW5kYXJ5KCkKICAgIHsKICAgICAgICAkZGF0YSA9IGFycmF5KFBIUF9JTlRfTUFYID0+IDEyMyk7CgogICAgICAgICRjbG9uZXIgPSBuZXcgVmFyQ2xvbmVyKCk7CiAgICAgICAgJGNsb25lID0gJGNsb25lci0+Y2xvbmVWYXIoJGRhdGEpOwoKICAgICAgICAkZXhwZWN0ZWQgPSA8PDxFT1RYVApTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2xvbmVyXERhdGEgT2JqZWN0CigKICAgIFtkYXRhOlN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDbG9uZXJcRGF0YTpwcml2YXRlXSA9PiBBcnJheQogICAgICAgICgKICAgICAgICAgICAgWzBdID0+IEFycmF5CiAgICAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgICAgWzBdID0+IEFycmF5CiAgICAgICAgICAgICAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxXSA9PiAxCiAgICAgICAgICAgICAgICAgICAgICAgICkKCiAgICAgICAgICAgICAgICApCgogICAgICAgICAgICBbMV0gPT4gQXJyYXkKICAgICAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICAgICBbJXNdID0+IDEyMwogICAgICAgICAgICAgICAgKQoKICAgICAgICApCgogICAgW3Bvc2l0aW9uOlN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDbG9uZXJcRGF0YTpwcml2YXRlXSA9PiAwCiAgICBba2V5OlN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDbG9uZXJcRGF0YTpwcml2YXRlXSA9PiAwCiAgICBbbWF4RGVwdGg6U3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENsb25lclxEYXRhOnByaXZhdGVdID0+IDIwCiAgICBbbWF4SXRlbXNQZXJEZXB0aDpTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2xvbmVyXERhdGE6cHJpdmF0ZV0gPT4gLTEKICAgIFt1c2VSZWZIYW5kbGVzOlN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDbG9uZXJcRGF0YTpwcml2YXRlXSA9PiAtMQopCgpFT1RYVDsKICAgICAgICAkdGhpcy0+YXNzZXJ0U2FtZShzcHJpbnRmKCRleHBlY3RlZCwgUEhQX0lOVF9NQVgpLCBwcmludF9yKCRjbG9uZSwgdHJ1ZSkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0Q2xvbmUoKQogICAgewogICAgICAgICRqc29uID0ganNvbl9kZWNvZGUoJ3siMSI6eyJ2YXIiOiJ2YWwifSwiMiI6eyJ2YXIiOiJ2YWwifX0nKTsKCiAgICAgICAgJGNsb25lciA9IG5ldyBWYXJDbG9uZXIoKTsKICAgICAgICAkY2xvbmUgPSAkY2xvbmVyLT5jbG9uZVZhcigkanNvbik7CgogICAgICAgICRleHBlY3RlZCA9IDw8PEVPVFhUClN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDbG9uZXJcRGF0YSBPYmplY3QKKAogICAgW2RhdGE6U3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENsb25lclxEYXRhOnByaXZhdGVdID0+IEFycmF5CiAgICAgICAgKAogICAgICAgICAgICBbMF0gPT4gQXJyYXkKICAgICAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICAgICBbMF0gPT4gU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENsb25lclxTdHViIE9iamVjdAogICAgICAgICAgICAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdHlwZV0gPT4gNAogICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXSA9PiBzdGRDbGFzcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXSA9PiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdXRdID0+IDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoYW5kbGVdID0+ICVpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVmQ291bnRdID0+IDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwb3NpdGlvbl0gPT4gMQogICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHJdID0+IEFycmF5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKCiAgICAgICAgICAgICAgICAgICAgICAgICkKCiAgICAgICAgICAgICAgICApCgogICAgICAgICAgICBbMV0gPT4gQXJyYXkKICAgICAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICAgICBbXDAwMCtcMDAwMV0gPT4gU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENsb25lclxTdHViIE9iamVjdAogICAgICAgICAgICAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdHlwZV0gPT4gNAogICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXSA9PiBzdGRDbGFzcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXSA9PiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdXRdID0+IDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoYW5kbGVdID0+ICVpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVmQ291bnRdID0+IDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwb3NpdGlvbl0gPT4gMgogICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHJdID0+IEFycmF5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKCiAgICAgICAgICAgICAgICAgICAgICAgICkKCiAgICAgICAgICAgICAgICAgICAgW1wwMDArXDAwMDJdID0+IFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDbG9uZXJcU3R1YiBPYmplY3QKICAgICAgICAgICAgICAgICAgICAgICAgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgW3R5cGVdID0+IDQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc10gPT4gc3RkQ2xhc3MKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV0gPT4gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY3V0XSA9PiAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGFuZGxlXSA9PiAlaQogICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZkNvdW50XSA9PiAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcG9zaXRpb25dID0+IDMKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyXSA9PiBBcnJheQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCgogICAgICAgICAgICAgICAgICAgICAgICApCgogICAgICAgICAgICAgICAgKQoKICAgICAgICAgICAgWzJdID0+IEFycmF5CiAgICAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgICAgW1wwMDArXDAwMHZhcl0gPT4gdmFsCiAgICAgICAgICAgICAgICApCgogICAgICAgICAgICBbM10gPT4gQXJyYXkKICAgICAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICAgICBbXDAwMCtcMDAwdmFyXSA9PiB2YWwKICAgICAgICAgICAgICAgICkKCiAgICAgICAgKQoKICAgIFtwb3NpdGlvbjpTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2xvbmVyXERhdGE6cHJpdmF0ZV0gPT4gMAogICAgW2tleTpTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2xvbmVyXERhdGE6cHJpdmF0ZV0gPT4gMAogICAgW21heERlcHRoOlN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDbG9uZXJcRGF0YTpwcml2YXRlXSA9PiAyMAogICAgW21heEl0ZW1zUGVyRGVwdGg6U3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENsb25lclxEYXRhOnByaXZhdGVdID0+IC0xCiAgICBbdXNlUmVmSGFuZGxlczpTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2xvbmVyXERhdGE6cHJpdmF0ZV0gPT4gLTEKKQoKRU9UWFQ7CiAgICAgICAgJHRoaXMtPmFzc2VydFN0cmluZ01hdGNoZXNGb3JtYXQoJGV4cGVjdGVkLCBwcmludF9yKCRjbG9uZSwgdHJ1ZSkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0TGltaXRzKCkKICAgIHsKICAgICAgICAvLyBMZXZlbCAwOgogICAgICAgICRkYXRhID0gYXJyYXkoCiAgICAgICAgICAgIC8vIExldmVsIDE6CiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgLy8gTGV2ZWwgMjoKICAgICAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgICAgIC8vIExldmVsIDM6CiAgICAgICAgICAgICAgICAgICAgJ0xldmVsIDMgSXRlbSAwJywKICAgICAgICAgICAgICAgICAgICAnTGV2ZWwgMyBJdGVtIDEnLAogICAgICAgICAgICAgICAgICAgICdMZXZlbCAzIEl0ZW0gMicsCiAgICAgICAgICAgICAgICAgICAgJ0xldmVsIDMgSXRlbSAzJywKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgICAgICAnTGV2ZWwgMyBJdGVtIDQnLAogICAgICAgICAgICAgICAgICAgICdMZXZlbCAzIEl0ZW0gNScsCiAgICAgICAgICAgICAgICAgICAgJ0xldmVsIDMgSXRlbSA2JywKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgICAgICAnTGV2ZWwgMyBJdGVtIDcnLAogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgICAgICAnTGV2ZWwgMyBJdGVtIDgnLAogICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICdMZXZlbCAyIEl0ZW0gMCcsCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgJ0xldmVsIDIgSXRlbSAxJywKICAgICAgICAgICAgKSwKICAgICAgICAgICAgJ0xldmVsIDEgSXRlbSAwJywKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICAvLyBUZXN0IHNldE1heFN0cmluZzoKICAgICAgICAgICAgICAgICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicsCiAgICAgICAgICAgICAgICAnU0hPUlQnLAogICAgICAgICAgICApLAogICAgICAgICk7CgogICAgICAgICRjbG9uZXIgPSBuZXcgVmFyQ2xvbmVyKCk7CiAgICAgICAgJGNsb25lci0+c2V0TWluRGVwdGgoMik7CiAgICAgICAgJGNsb25lci0+c2V0TWF4SXRlbXMoNSk7CiAgICAgICAgJGNsb25lci0+c2V0TWF4U3RyaW5nKDIwKTsKICAgICAgICAkY2xvbmUgPSAkY2xvbmVyLT5jbG9uZVZhcigkZGF0YSk7CgogICAgICAgICRleHBlY3RlZCA9IDw8PEVPVFhUClN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDbG9uZXJcRGF0YSBPYmplY3QKKAogICAgW2RhdGE6U3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENsb25lclxEYXRhOnByaXZhdGVdID0+IEFycmF5CiAgICAgICAgKAogICAgICAgICAgICBbMF0gPT4gQXJyYXkKICAgICAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICAgICBbMF0gPT4gQXJyYXkKICAgICAgICAgICAgICAgICAgICAgICAgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgWzJdID0+IDEKICAgICAgICAgICAgICAgICAgICAgICAgKQoKICAgICAgICAgICAgICAgICkKCiAgICAgICAgICAgIFsxXSA9PiBBcnJheQogICAgICAgICAgICAgICAgKAogICAgICAgICAgICAgICAgICAgIFswXSA9PiBBcnJheQogICAgICAgICAgICAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMl0gPT4gMgogICAgICAgICAgICAgICAgICAgICAgICApCgogICAgICAgICAgICAgICAgICAgIFsxXSA9PiBBcnJheQogICAgICAgICAgICAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMl0gPT4gMwogICAgICAgICAgICAgICAgICAgICAgICApCgogICAgICAgICAgICAgICAgICAgIFsyXSA9PiBBcnJheQogICAgICAgICAgICAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMl0gPT4gNAogICAgICAgICAgICAgICAgICAgICAgICApCgogICAgICAgICAgICAgICAgICAgIFszXSA9PiBMZXZlbCAxIEl0ZW0gMAogICAgICAgICAgICAgICAgICAgIFs0XSA9PiBBcnJheQogICAgICAgICAgICAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMl0gPT4gNQogICAgICAgICAgICAgICAgICAgICAgICApCgogICAgICAgICAgICAgICAgKQoKICAgICAgICAgICAgWzJdID0+IEFycmF5CiAgICAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgICAgWzBdID0+IEFycmF5CiAgICAgICAgICAgICAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsyXSA9PiA2CiAgICAgICAgICAgICAgICAgICAgICAgICkKCiAgICAgICAgICAgICAgICAgICAgWzFdID0+IEFycmF5CiAgICAgICAgICAgICAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFswXSA9PiAyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMl0gPT4gNwogICAgICAgICAgICAgICAgICAgICAgICApCgogICAgICAgICAgICAgICAgICAgIFsyXSA9PiBBcnJheQogICAgICAgICAgICAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMF0gPT4gMQogICAgICAgICAgICAgICAgICAgICAgICAgICAgWzJdID0+IDAKICAgICAgICAgICAgICAgICAgICAgICAgKQoKICAgICAgICAgICAgICAgICkKCiAgICAgICAgICAgIFszXSA9PiBBcnJheQogICAgICAgICAgICAgICAgKAogICAgICAgICAgICAgICAgICAgIFswXSA9PiBBcnJheQogICAgICAgICAgICAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMF0gPT4gMQogICAgICAgICAgICAgICAgICAgICAgICAgICAgWzJdID0+IDAKICAgICAgICAgICAgICAgICAgICAgICAgKQoKICAgICAgICAgICAgICAgICAgICBbMV0gPT4gTGV2ZWwgMiBJdGVtIDAKICAgICAgICAgICAgICAgICkKCiAgICAgICAgICAgIFs0XSA9PiBBcnJheQogICAgICAgICAgICAgICAgKAogICAgICAgICAgICAgICAgICAgIFswXSA9PiBMZXZlbCAyIEl0ZW0gMQogICAgICAgICAgICAgICAgKQoKICAgICAgICAgICAgWzVdID0+IEFycmF5CiAgICAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgICAgWzBdID0+IFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDbG9uZXJcU3R1YiBPYmplY3QKICAgICAgICAgICAgICAgICAgICAgICAgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgW3R5cGVdID0+IDIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc10gPT4gMgogICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXSA9PiBBQkNERUZHSElKS0xNTk9QUVJTVAogICAgICAgICAgICAgICAgICAgICAgICAgICAgW2N1dF0gPT4gNgogICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hhbmRsZV0gPT4gMAogICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlZkNvdW50XSA9PiAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcG9zaXRpb25dID0+IDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyXSA9PiBBcnJheQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCgogICAgICAgICAgICAgICAgICAgICAgICApCgogICAgICAgICAgICAgICAgICAgIFsxXSA9PiBTSE9SVAogICAgICAgICAgICAgICAgKQoKICAgICAgICAgICAgWzZdID0+IEFycmF5CiAgICAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgICAgWzBdID0+IExldmVsIDMgSXRlbSAwCiAgICAgICAgICAgICAgICAgICAgWzFdID0+IExldmVsIDMgSXRlbSAxCiAgICAgICAgICAgICAgICAgICAgWzJdID0+IExldmVsIDMgSXRlbSAyCiAgICAgICAgICAgICAgICAgICAgWzNdID0+IExldmVsIDMgSXRlbSAzCiAgICAgICAgICAgICAgICApCgogICAgICAgICAgICBbN10gPT4gQXJyYXkKICAgICAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICAgICBbMF0gPT4gTGV2ZWwgMyBJdGVtIDQKICAgICAgICAgICAgICAgICkKCiAgICAgICAgKQoKICAgIFtwb3NpdGlvbjpTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2xvbmVyXERhdGE6cHJpdmF0ZV0gPT4gMAogICAgW2tleTpTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2xvbmVyXERhdGE6cHJpdmF0ZV0gPT4gMAogICAgW21heERlcHRoOlN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDbG9uZXJcRGF0YTpwcml2YXRlXSA9PiAyMAogICAgW21heEl0ZW1zUGVyRGVwdGg6U3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENsb25lclxEYXRhOnByaXZhdGVdID0+IC0xCiAgICBbdXNlUmVmSGFuZGxlczpTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2xvbmVyXERhdGE6cHJpdmF0ZV0gPT4gLTEKKQoKRU9UWFQ7CiAgICAgICAgJHRoaXMtPmFzc2VydFN0cmluZ01hdGNoZXNGb3JtYXQoJGV4cGVjdGVkLCBwcmludF9yKCRjbG9uZSwgdHJ1ZSkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0SnNvbkNhc3QoKQogICAgewogICAgICAgIGlmICgyID09IGluaV9nZXQoJ3hkZWJ1Zy5vdmVybG9hZF92YXJfZHVtcCcpKSB7CiAgICAgICAgICAgICR0aGlzLT5tYXJrVGVzdFNraXBwZWQoJ3hkZWJ1ZyBpcyBhY3RpdmUnKTsKICAgICAgICB9CgogICAgICAgICRkYXRhID0gKGFycmF5KSBqc29uX2RlY29kZSgneyIxIjp7fX0nKTsKCiAgICAgICAgJGNsb25lciA9IG5ldyBWYXJDbG9uZXIoKTsKICAgICAgICAkY2xvbmUgPSAkY2xvbmVyLT5jbG9uZVZhcigkZGF0YSk7CgogICAgICAgICRleHBlY3RlZCA9IDw8PCdFT1RYVCcKb2JqZWN0KFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDbG9uZXJcRGF0YSkjJWkgKDYpIHsKICBbImRhdGEiOiJTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2xvbmVyXERhdGEiOnByaXZhdGVdPT4KICBhcnJheSgyKSB7CiAgICBbMF09PgogICAgYXJyYXkoMSkgewogICAgICBbMF09PgogICAgICBhcnJheSgxKSB7CiAgICAgICAgWzFdPT4KICAgICAgICBpbnQoMSkKICAgICAgfQogICAgfQogICAgWzFdPT4KICAgIGFycmF5KDEpIHsKICAgICAgWyIxIl09PgogICAgICBvYmplY3QoU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENsb25lclxTdHViKSMlaSAoOCkgewogICAgICAgIFsidHlwZSJdPT4KICAgICAgICBpbnQoNCkKICAgICAgICBbImNsYXNzIl09PgogICAgICAgIHN0cmluZyg4KSAic3RkQ2xhc3MiCiAgICAgICAgWyJ2YWx1ZSJdPT4KICAgICAgICBOVUxMCiAgICAgICAgWyJjdXQiXT0+CiAgICAgICAgaW50KDApCiAgICAgICAgWyJoYW5kbGUiXT0+CiAgICAgICAgaW50KCVpKQogICAgICAgIFsicmVmQ291bnQiXT0+CiAgICAgICAgaW50KDApCiAgICAgICAgWyJwb3NpdGlvbiJdPT4KICAgICAgICBpbnQoMCkKICAgICAgICBbImF0dHIiXT0+CiAgICAgICAgYXJyYXkoMCkgewogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KICBbInBvc2l0aW9uIjoiU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENsb25lclxEYXRhIjpwcml2YXRlXT0+CiAgaW50KDApCiAgWyJrZXkiOiJTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2xvbmVyXERhdGEiOnByaXZhdGVdPT4KICBpbnQoMCkKICBbIm1heERlcHRoIjoiU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENsb25lclxEYXRhIjpwcml2YXRlXT0+CiAgaW50KDIwKQogIFsibWF4SXRlbXNQZXJEZXB0aCI6IlN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDbG9uZXJcRGF0YSI6cHJpdmF0ZV09PgogIGludCgtMSkKICBbInVzZVJlZkhhbmRsZXMiOiJTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2xvbmVyXERhdGEiOnByaXZhdGVdPT4KICBpbnQoLTEpCn0KCkVPVFhUOwogICAgICAgIG9iX3N0YXJ0KCk7CiAgICAgICAgdmFyX2R1bXAoJGNsb25lKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0U3RyaW5nTWF0Y2hlc0Zvcm1hdChcUEhQX1ZFUlNJT05fSUQgPj0gNzAyMDAgPyBzdHJfcmVwbGFjZSgnIjEiJywgJzEnLCAkZXhwZWN0ZWQpIDogJGV4cGVjdGVkLCBvYl9nZXRfY2xlYW4oKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RDYXN0ZXIoKQogICAgewogICAgICAgICRjbG9uZXIgPSBuZXcgVmFyQ2xvbmVyKGFycmF5KAogICAgICAgICAgICAnKicgPT4gZnVuY3Rpb24gKCRvYmosICRhcnJheSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5KCdmb28nID0+IDEyMyk7CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIF9fQ0xBU1NfXyA9PiBmdW5jdGlvbiAoJG9iaiwgJGFycmF5KSB7CiAgICAgICAgICAgICAgICArKyRhcnJheVsnZm9vJ107CgogICAgICAgICAgICAgICAgcmV0dXJuICRhcnJheTsKICAgICAgICAgICAgfSwKICAgICAgICApKTsKICAgICAgICAkY2xvbmUgPSAkY2xvbmVyLT5jbG9uZVZhcigkdGhpcyk7CgogICAgICAgICRleHBlY3RlZCA9IDw8PEVPVFhUClN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDbG9uZXJcRGF0YSBPYmplY3QKKAogICAgW2RhdGE6U3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENsb25lclxEYXRhOnByaXZhdGVdID0+IEFycmF5CiAgICAgICAgKAogICAgICAgICAgICBbMF0gPT4gQXJyYXkKICAgICAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICAgICBbMF0gPT4gU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENsb25lclxTdHViIE9iamVjdAogICAgICAgICAgICAgICAgICAgICAgICAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdHlwZV0gPT4gNAogICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXSA9PiAlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXSA9PiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjdXRdID0+IDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoYW5kbGVdID0+ICVpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVmQ291bnRdID0+IDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwb3NpdGlvbl0gPT4gMQogICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHJdID0+IEFycmF5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKCiAgICAgICAgICAgICAgICAgICAgICAgICkKCiAgICAgICAgICAgICAgICApCgogICAgICAgICAgICBbMV0gPT4gQXJyYXkKICAgICAgICAgICAgICAgICgKICAgICAgICAgICAgICAgICAgICBbZm9vXSA9PiAxMjQKICAgICAgICAgICAgICAgICkKCiAgICAgICAgKQoKICAgIFtwb3NpdGlvbjpTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2xvbmVyXERhdGE6cHJpdmF0ZV0gPT4gMAogICAgW2tleTpTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2xvbmVyXERhdGE6cHJpdmF0ZV0gPT4gMAogICAgW21heERlcHRoOlN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDbG9uZXJcRGF0YTpwcml2YXRlXSA9PiAyMAogICAgW21heEl0ZW1zUGVyRGVwdGg6U3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENsb25lclxEYXRhOnByaXZhdGVdID0+IC0xCiAgICBbdXNlUmVmSGFuZGxlczpTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2xvbmVyXERhdGE6cHJpdmF0ZV0gPT4gLTEKKQoKRU9UWFQ7CiAgICAgICAgJHRoaXMtPmFzc2VydFN0cmluZ01hdGNoZXNGb3JtYXQoJGV4cGVjdGVkLCBwcmludF9yKCRjbG9uZSwgdHJ1ZSkpOwogICAgfQp9Cg==AppDevTools/query/vendor/symfony/var-dumper/Tests/Dumper/CliDumperTest.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcVGVzdHNcRHVtcGVyOwoKdXNlIFBIUFVuaXRcRnJhbWV3b3JrXFRlc3RDYXNlOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENsb25lclxWYXJDbG9uZXI7CnVzZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcRHVtcGVyXENsaUR1bXBlcjsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxUZXN0XFZhckR1bXBlclRlc3RUcmFpdDsKdXNlIFR3aWdcRW52aXJvbm1lbnQ7CnVzZSBUd2lnXExvYWRlclxGaWxlc3lzdGVtTG9hZGVyOwoKLyoqCiAqIEBhdXRob3IgTmljb2xhcyBHcmVrYXMgPHBAdGNod29yay5jb20+CiAqLwpjbGFzcyBDbGlEdW1wZXJUZXN0IGV4dGVuZHMgVGVzdENhc2UKewogICAgdXNlIFZhckR1bXBlclRlc3RUcmFpdDsKCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdEdldCgpCiAgICB7CiAgICAgICAgcmVxdWlyZSBfX0RJUl9fLicvLi4vRml4dHVyZXMvZHVtYi12YXIucGhwJzsKCiAgICAgICAgJGR1bXBlciA9IG5ldyBDbGlEdW1wZXIoJ3BocDovL291dHB1dCcpOwogICAgICAgICRkdW1wZXItPnNldENvbG9ycyhmYWxzZSk7CiAgICAgICAgJGNsb25lciA9IG5ldyBWYXJDbG9uZXIoKTsKICAgICAgICAkY2xvbmVyLT5hZGRDYXN0ZXJzKGFycmF5KAogICAgICAgICAgICAnOnN0cmVhbScgPT4gZnVuY3Rpb24gKCRyZXMsICRhKSB7CiAgICAgICAgICAgICAgICB1bnNldCgkYVsndXJpJ10sICRhWyd3cmFwcGVyX2RhdGEnXSk7CgogICAgICAgICAgICAgICAgcmV0dXJuICRhOwogICAgICAgICAgICB9LAogICAgICAgICkpOwogICAgICAgICRkYXRhID0gJGNsb25lci0+Y2xvbmVWYXIoJHZhcik7CgogICAgICAgIG9iX3N0YXJ0KCk7CiAgICAgICAgJGR1bXBlci0+ZHVtcCgkZGF0YSk7CiAgICAgICAgJG91dCA9IG9iX2dldF9jbGVhbigpOwogICAgICAgICRvdXQgPSBwcmVnX3JlcGxhY2UoJy9bIFx0XSskL20nLCAnJywgJG91dCk7CiAgICAgICAgJGludE1heCA9IFBIUF9JTlRfTUFYOwogICAgICAgICRyZXMgPSAoaW50KSAkdmFyWydyZXMnXTsKCiAgICAgICAgJHRoaXMtPmFzc2VydFN0cmluZ01hdGNoZXNGb3JtYXQoCiAgICAgICAgICAgIDw8PEVPVFhUCmFycmF5OjI0IFsKICAibnVtYmVyIiA9PiAxCiAgMCA9PiAmMSBudWxsCiAgImNvbnN0IiA9PiAxLjEKICAxID0+IHRydWUKICAyID0+IGZhbHNlCiAgMyA9PiBOQU4KICA0ID0+IElORgogIDUgPT4gLUlORgogIDYgPT4geyRpbnRNYXh9CiAgInN0ciIgPT4gImTDqWrDoFxcbiIKICA3ID0+IGIiw6lcXHgwMCIKICAiW10iID0+IFtdCiAgInJlcyIgPT4gc3RyZWFtIHJlc291cmNlIHtAeyRyZXN9CiVBICB3cmFwcGVyX3R5cGU6ICJwbGFpbmZpbGUiCiAgICBzdHJlYW1fdHlwZTogIlNURElPIgogICAgbW9kZTogInIiCiAgICB1bnJlYWRfYnl0ZXM6IDAKICAgIHNlZWthYmxlOiB0cnVlCiVBICBvcHRpb25zOiBbXQogIH0KICAib2JqIiA9PiBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcVGVzdHNcRml4dHVyZVxEdW1iRm9vIHsjJWQKICAgICtmb286ICJmb28iCiAgICArImJhciI6ICJiYXIiCiAgfQogICJjbG9zdXJlIiA9PiBDbG9zdXJlIHsjJWQKICAgIGNsYXNzOiAiU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXFRlc3RzXER1bXBlclxDbGlEdW1wZXJUZXN0IgogICAgdGhpczogU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXFRlc3RzXER1bXBlclxDbGlEdW1wZXJUZXN0IHsjJWQg4oCmfQogICAgcGFyYW1ldGVyczogewogICAgICBcJGE6IHt9CiAgICAgICZcJGI6IHsKICAgICAgICB0eXBlSGludDogIlBETyIKICAgICAgICBkZWZhdWx0OiBudWxsCiAgICAgIH0KICAgIH0KICAgIGZpbGU6ICIlcyVlVGVzdHMlZUZpeHR1cmVzJWVkdW1iLXZhci5waHAiCiAgICBsaW5lOiAieyR2YXJbJ2xpbmUnXX0gdG8geyR2YXJbJ2xpbmUnXX0iCiAgfQogICJsaW5lIiA9PiB7JHZhclsnbGluZSddfQogICJub2JqIiA9PiBhcnJheToxIFsKICAgIDAgPT4gJjMgeyMlZH0KICBdCiAgInJlY3VycyIgPT4gJjQgYXJyYXk6MSBbCiAgICAwID0+ICY0IGFycmF5OjEgWyY0XQogIF0KICA4ID0+ICYxIG51bGwKICAic29iaiIgPT4gU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXFRlc3RzXEZpeHR1cmVcRHVtYkZvbyB7IyVkfQogICJzbm9iaiIgPT4gJjMgeyMlZH0KICAic25vYmoyIiA9PiB7IyVkfQogICJmaWxlIiA9PiAieyR2YXJbJ2ZpbGUnXX0iCiAgYiJiaW4ta2V5LcOpIiA9PiAiIgpdCgpFT1RYVAogICAgICAgICAgICAsCiAgICAgICAgICAgICRvdXQKICAgICAgICApOwogICAgfQoKICAgIC8qKgogICAgICogQGRhdGFQcm92aWRlciBwcm92aWRlRHVtcFdpdGhDb21tYUZsYWdUZXN0cwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdER1bXBXaXRoQ29tbWFGbGFnKCRleHBlY3RlZCwgJGZsYWdzKQogICAgewogICAgICAgICRkdW1wZXIgPSBuZXcgQ2xpRHVtcGVyKG51bGwsIG51bGwsICRmbGFncyk7CiAgICAgICAgJGR1bXBlci0+c2V0Q29sb3JzKGZhbHNlKTsKICAgICAgICAkY2xvbmVyID0gbmV3IFZhckNsb25lcigpOwoKICAgICAgICAkdmFyID0gYXJyYXkoCiAgICAgICAgICAgICdhcnJheScgPT4gYXJyYXkoJ2EnLCAnYicpLAogICAgICAgICAgICAnc3RyaW5nJyA9PiAnaGVsbG8nLAogICAgICAgICAgICAnbXVsdGlsaW5lIHN0cmluZycgPT4gInRoaXNcbmlzXG5hXG11bHRpbGluZVxuc3RyaW5nIiwKICAgICAgICApOwoKICAgICAgICAkZHVtcCA9ICRkdW1wZXItPmR1bXAoJGNsb25lci0+Y2xvbmVWYXIoJHZhciksIHRydWUpOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0U2FtZSgkZXhwZWN0ZWQsICRkdW1wKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdER1bXBXaXRoQ29tbWFGbGFnc0FuZEV4Y2VwdGlvbkNvZGVFeGNlcnB0KCkKICAgIHsKICAgICAgICAkZHVtcGVyID0gbmV3IENsaUR1bXBlcihudWxsLCBudWxsLCBDbGlEdW1wZXI6OkRVTVBfVFJBSUxJTkdfQ09NTUEpOwogICAgICAgICRkdW1wZXItPnNldENvbG9ycyhmYWxzZSk7CiAgICAgICAgJGNsb25lciA9IG5ldyBWYXJDbG9uZXIoKTsKCiAgICAgICAgJGV4ID0gbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdmb28nKTsKCiAgICAgICAgJGR1bXAgPSAkZHVtcGVyLT5kdW1wKCRjbG9uZXItPmNsb25lVmFyKCRleCktPndpdGhSZWZIYW5kbGVzKGZhbHNlKSwgdHJ1ZSk7CgogICAgICAgICR0aGlzLT5hc3NlcnRTdHJpbmdNYXRjaGVzRm9ybWF0KDw8PCdFT1RYVCcKUnVudGltZUV4Y2VwdGlvbiB7CiAgI21lc3NhZ2U6ICJmb28iCiAgI2NvZGU6IDAKICAjZmlsZTogIiVBQ2xpRHVtcGVyVGVzdC5waHAiCiAgI2xpbmU6ICVkCiAgdHJhY2U6IHsKICAgICVBQ2xpRHVtcGVyVGVzdC5waHA6JWQgewogICAgICDigLogCiAgICAgIOKAuiAkZXggPSBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ2ZvbycpOwogICAgICDigLogCiAgICB9CiAgICAlQQogIH0KfQoKRU9UWFQKICAgICAgICAgICAgLCAkZHVtcCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHByb3ZpZGVEdW1wV2l0aENvbW1hRmxhZ1Rlc3RzKCkKICAgIHsKICAgICAgICAkZXhwZWN0ZWQgPSA8PDwnRU9UWFQnCmFycmF5OjMgWwogICJhcnJheSIgPT4gYXJyYXk6MiBbCiAgICAwID0+ICJhIiwKICAgIDEgPT4gImIiCiAgXSwKICAic3RyaW5nIiA9PiAiaGVsbG8iLAogICJtdWx0aWxpbmUgc3RyaW5nIiA9PiAiIiIKICAgIHRoaXNcbgogICAgaXNcbgogICAgYVxtdWx0aWxpbmVcbgogICAgc3RyaW5nCiAgICAiIiIKXQoKRU9UWFQ7CgogICAgICAgIHlpZWxkIGFycmF5KCRleHBlY3RlZCwgQ2xpRHVtcGVyOjpEVU1QX0NPTU1BX1NFUEFSQVRPUik7CgogICAgICAgICRleHBlY3RlZCA9IDw8PCdFT1RYVCcKYXJyYXk6MyBbCiAgImFycmF5IiA9PiBhcnJheToyIFsKICAgIDAgPT4gImEiLAogICAgMSA9PiAiYiIsCiAgXSwKICAic3RyaW5nIiA9PiAiaGVsbG8iLAogICJtdWx0aWxpbmUgc3RyaW5nIiA9PiAiIiIKICAgIHRoaXNcbgogICAgaXNcbgogICAgYVxtdWx0aWxpbmVcbgogICAgc3RyaW5nCiAgICAiIiIsCl0KCkVPVFhUOwoKICAgICAgICB5aWVsZCBhcnJheSgkZXhwZWN0ZWQsIENsaUR1bXBlcjo6RFVNUF9UUkFJTElOR19DT01NQSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmVxdWlyZXMgZXh0ZW5zaW9uIHhtbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdFhtbFJlc291cmNlKCkKICAgIHsKICAgICAgICAkdmFyID0geG1sX3BhcnNlcl9jcmVhdGUoKTsKCiAgICAgICAgJHRoaXMtPmFzc2VydER1bXBNYXRjaGVzRm9ybWF0KAogICAgICAgICAgICA8PDwnRU9UWFQnCnhtbCByZXNvdXJjZSB7CiAgY3VycmVudF9ieXRlX2luZGV4OiAlaQogIGN1cnJlbnRfY29sdW1uX251bWJlcjogJWkKICBjdXJyZW50X2xpbmVfbnVtYmVyOiAxCiAgZXJyb3JfY29kZTogWE1MX0VSUk9SX05PTkUKfQpFT1RYVAogICAgICAgICAgICAsCiAgICAgICAgICAgICR2YXIKICAgICAgICApOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0SnNvbkNhc3QoKQogICAgewogICAgICAgICR2YXIgPSAoYXJyYXkpIGpzb25fZGVjb2RlKCd7IjAiOnt9LCIxIjpudWxsfScpOwogICAgICAgIGZvcmVhY2ggKCR2YXIgYXMgJiR2KSB7CiAgICAgICAgfQogICAgICAgICR2YXJbXSA9ICYkdjsKICAgICAgICAkdmFyWycnXSA9IDI7CgogICAgICAgIGlmIChcUEhQX1ZFUlNJT05fSUQgPj0gNzAyMDApIHsKICAgICAgICAgICAgJHRoaXMtPmFzc2VydER1bXBNYXRjaGVzRm9ybWF0KAogICAgICAgICAgICAgICAgPDw8J0VPVFhUJwphcnJheTo0IFsKICAwID0+IHt9CiAgMSA9PiAmMSBudWxsCiAgMiA9PiAmMSBudWxsCiAgIiIgPT4gMgpdCkVPVFhUCiAgICAgICAgICAgICAgICAsCiAgICAgICAgICAgICAgICAkdmFyCiAgICAgICAgICAgICk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHRoaXMtPmFzc2VydER1bXBNYXRjaGVzRm9ybWF0KAogICAgICAgICAgICAgICAgPDw8J0VPVFhUJwphcnJheTo0IFsKICAiMCIgPT4ge30KICAiMSIgPT4gJjEgbnVsbAogIDAgPT4gJjEgbnVsbAogICIiID0+IDIKXQpFT1RYVAogICAgICAgICAgICAgICAgLAogICAgICAgICAgICAgICAgJHZhcgogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdE9iamVjdENhc3QoKQogICAgewogICAgICAgICR2YXIgPSAob2JqZWN0KSBhcnJheSgxID0+IDEpOwogICAgICAgICR2YXItPnsxfSA9IDI7CgogICAgICAgIGlmIChcUEhQX1ZFUlNJT05fSUQgPj0gNzAyMDApIHsKICAgICAgICAgICAgJHRoaXMtPmFzc2VydER1bXBNYXRjaGVzRm9ybWF0KAogICAgICAgICAgICAgICAgPDw8J0VPVFhUJwp7CiAgKyIxIjogMgp9CkVPVFhUCiAgICAgICAgICAgICAgICAsCiAgICAgICAgICAgICAgICAkdmFyCiAgICAgICAgICAgICk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHRoaXMtPmFzc2VydER1bXBNYXRjaGVzRm9ybWF0KAogICAgICAgICAgICAgICAgPDw8J0VPVFhUJwp7CiAgKzE6IDEKICArIjEiOiAyCn0KRU9UWFQKICAgICAgICAgICAgICAgICwKICAgICAgICAgICAgICAgICR2YXIKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RDbG9zZWRSZXNvdXJjZSgpCiAgICB7CiAgICAgICAgJHZhciA9IGZvcGVuKF9fRklMRV9fLCAncicpOwogICAgICAgIGZjbG9zZSgkdmFyKTsKCiAgICAgICAgJGR1bXBlciA9IG5ldyBDbGlEdW1wZXIoJ3BocDovL291dHB1dCcpOwogICAgICAgICRkdW1wZXItPnNldENvbG9ycyhmYWxzZSk7CiAgICAgICAgJGNsb25lciA9IG5ldyBWYXJDbG9uZXIoKTsKICAgICAgICAkZGF0YSA9ICRjbG9uZXItPmNsb25lVmFyKCR2YXIpOwoKICAgICAgICBvYl9zdGFydCgpOwogICAgICAgICRkdW1wZXItPmR1bXAoJGRhdGEpOwogICAgICAgICRvdXQgPSBvYl9nZXRfY2xlYW4oKTsKICAgICAgICAkcmVzID0gKGludCkgJHZhcjsKCiAgICAgICAgJHRoaXMtPmFzc2VydFN0cmluZ01hdGNoZXNGb3JtYXQoCiAgICAgICAgICAgIDw8PEVPVFhUCkNsb3NlZCByZXNvdXJjZSBAeyRyZXN9CgpFT1RYVAogICAgICAgICAgICAsCiAgICAgICAgICAgICRvdXQKICAgICAgICApOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0RmxhZ3MoKQogICAgewogICAgICAgIHB1dGVudignRFVNUF9MSUdIVF9BUlJBWT0xJyk7CiAgICAgICAgcHV0ZW52KCdEVU1QX1NUUklOR19MRU5HVEg9MScpOwoKICAgICAgICAkdmFyID0gYXJyYXkoCiAgICAgICAgICAgIHJhbmdlKDEsIDMpLAogICAgICAgICAgICBhcnJheSgnZm9vJywgMiA9PiAnYmFyJyksCiAgICAgICAgKTsKCiAgICAgICAgJHRoaXMtPmFzc2VydER1bXBFcXVhbHMoCiAgICAgICAgICAgIDw8PEVPVFhUClsKICBbCiAgICAxCiAgICAyCiAgICAzCiAgXQogIFsKICAgIDAgPT4gKDMpICJmb28iCiAgICAyID0+ICgzKSAiYmFyIgogIF0KXQpFT1RYVAogICAgICAgICAgICAsCiAgICAgICAgICAgICR2YXIKICAgICAgICApOwoKICAgICAgICBwdXRlbnYoJ0RVTVBfTElHSFRfQVJSQVk9Jyk7CiAgICAgICAgcHV0ZW52KCdEVU1QX1NUUklOR19MRU5HVEg9Jyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmVxdWlyZXMgZnVuY3Rpb24gVHdpZ1xUZW1wbGF0ZTo6Z2V0U291cmNlQ29udGV4dAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdFRocm93aW5nQ2FzdGVyKCkKICAgIHsKICAgICAgICAkb3V0ID0gZm9wZW4oJ3BocDovL21lbW9yeScsICdyK2InKTsKCiAgICAgICAgcmVxdWlyZV9vbmNlIF9fRElSX18uJy8uLi9GaXh0dXJlcy9Ud2lnLnBocCc7CiAgICAgICAgJHR3aWcgPSBuZXcgXF9fVHdpZ1RlbXBsYXRlX1ZhckR1bXBlckZpeHR1cmVfdTc1YTA5KG5ldyBFbnZpcm9ubWVudChuZXcgRmlsZXN5c3RlbUxvYWRlcigpKSk7CgogICAgICAgICRkdW1wZXIgPSBuZXcgQ2xpRHVtcGVyKCk7CiAgICAgICAgJGR1bXBlci0+c2V0Q29sb3JzKGZhbHNlKTsKICAgICAgICAkY2xvbmVyID0gbmV3IFZhckNsb25lcigpOwogICAgICAgICRjbG9uZXItPmFkZENhc3RlcnMoYXJyYXkoCiAgICAgICAgICAgICc6c3RyZWFtJyA9PiBmdW5jdGlvbiAoJHJlcywgJGEpIHsKICAgICAgICAgICAgICAgIHVuc2V0KCRhWyd3cmFwcGVyX2RhdGEnXSk7CgogICAgICAgICAgICAgICAgcmV0dXJuICRhOwogICAgICAgICAgICB9LAogICAgICAgICkpOwogICAgICAgICRjbG9uZXItPmFkZENhc3RlcnMoYXJyYXkoCiAgICAgICAgICAgICc6c3RyZWFtJyA9PiBldmFsKCdyZXR1cm4gZnVuY3Rpb24gKCkgdXNlICgkdHdpZykgewogICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAkdHdpZy0+cmVuZGVyKGFycmF5KCkpOwogICAgICAgICAgICAgICAgfSBjYXRjaCAoXFR3aWdcRXJyb3JcUnVudGltZUVycm9yICRlKSB7CiAgICAgICAgICAgICAgICAgICAgdGhyb3cgJGUtPmdldFByZXZpb3VzKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH07JyksCiAgICAgICAgKSk7CiAgICAgICAgJHJlZiA9IChpbnQpICRvdXQ7CgogICAgICAgICRkYXRhID0gJGNsb25lci0+Y2xvbmVWYXIoJG91dCk7CiAgICAgICAgJGR1bXBlci0+ZHVtcCgkZGF0YSwgJG91dCk7CiAgICAgICAgJG91dCA9IHN0cmVhbV9nZXRfY29udGVudHMoJG91dCwgLTEsIDApOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0U3RyaW5nTWF0Y2hlc0Zvcm1hdCgKICAgICAgICAgICAgPDw8RU9UWFQKc3RyZWFtIHJlc291cmNlIHtAeyRyZWZ9CiAg4pqgOiBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcRXhjZXB0aW9uXFRocm93aW5nQ2FzdGVyRXhjZXB0aW9uIHsjJWQKICAgICNtZXNzYWdlOiAiVW5leHBlY3RlZCBFeGNlcHRpb24gdGhyb3duIGZyb20gYSBjYXN0ZXI6IEZvb2JhciIKICAgIHRyYWNlOiB7CiAgICAgICVzVHdpZy5waHA6MiB7CiAgICAgICAg4oC6IGZvbyBiYXIKICAgICAgICDigLogICB0d2lnIHNvdXJjZQogICAgICAgIOKAuiAKICAgICAgfQogICAgICAlcyVlVGVtcGxhdGUucGhwOiVkIHsg4oCmfQogICAgICAlcyVlVGVtcGxhdGUucGhwOiVkIHsg4oCmfQogICAgICAlcyVlVGVtcGxhdGUucGhwOiVkIHsg4oCmfQogICAgICAlcyVlVGVzdHMlZUR1bXBlciVlQ2xpRHVtcGVyVGVzdC5waHA6JWQgeyDigKZ9CiVBICB9CiAgfQolQXdyYXBwZXJfdHlwZTogIlBIUCIKICBzdHJlYW1fdHlwZTogIk1FTU9SWSIKICBtb2RlOiAiJXMrYiIKICB1bnJlYWRfYnl0ZXM6IDAKICBzZWVrYWJsZTogdHJ1ZQogIHVyaTogInBocDovL21lbW9yeSIKJUFvcHRpb25zOiBbXQp9CgpFT1RYVAogICAgICAgICAgICAsCiAgICAgICAgICAgICRvdXQKICAgICAgICApOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0UmVmc0luUHJvcGVydGllcygpCiAgICB7CiAgICAgICAgJHZhciA9IChvYmplY3QpIGFycmF5KCdmb28nID0+ICdmb28nKTsKICAgICAgICAkdmFyLT5iYXIgPSAmJHZhci0+Zm9vOwoKICAgICAgICAkZHVtcGVyID0gbmV3IENsaUR1bXBlcigpOwogICAgICAgICRkdW1wZXItPnNldENvbG9ycyhmYWxzZSk7CiAgICAgICAgJGNsb25lciA9IG5ldyBWYXJDbG9uZXIoKTsKCiAgICAgICAgJGRhdGEgPSAkY2xvbmVyLT5jbG9uZVZhcigkdmFyKTsKICAgICAgICAkb3V0ID0gJGR1bXBlci0+ZHVtcCgkZGF0YSwgdHJ1ZSk7CgogICAgICAgICR0aGlzLT5hc3NlcnRTdHJpbmdNYXRjaGVzRm9ybWF0KAogICAgICAgICAgICA8PDxFT1RYVAp7IyVkCiAgKyJmb28iOiAmMSAiZm9vIgogICsiYmFyIjogJjEgImZvbyIKfQoKRU9UWFQKICAgICAgICAgICAgLAogICAgICAgICAgICAkb3V0CiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBydW5JblNlcGFyYXRlUHJvY2VzcwogICAgICogQHByZXNlcnZlR2xvYmFsU3RhdGUgZGlzYWJsZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RTcGVjaWFsVmFyczU2KCkKICAgIHsKICAgICAgICAkdmFyID0gJHRoaXMtPmdldFNwZWNpYWxWYXJzKCk7CgogICAgICAgICR0aGlzLT5hc3NlcnREdW1wRXF1YWxzKAogICAgICAgICAgICA8PDwnRU9UWFQnCmFycmF5OjMgWwogIDAgPT4gYXJyYXk6MSBbCiAgICAwID0+ICYxIGFycmF5OjEgWwogICAgICAwID0+ICYxIGFycmF5OjEgWyYxXQogICAgXQogIF0KICAxID0+IGFycmF5OjEgWwogICAgIkdMT0JBTFMiID0+ICYyIGFycmF5OjEgWwogICAgICAiR0xPQkFMUyIgPT4gJjIgYXJyYXk6MSBbJjJdCiAgICBdCiAgXQogIDIgPT4gJjIgYXJyYXk6MSBbJjJdCl0KRU9UWFQKICAgICAgICAgICAgLAogICAgICAgICAgICAkdmFyCiAgICAgICAgKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBydW5JblNlcGFyYXRlUHJvY2VzcwogICAgICogQHByZXNlcnZlR2xvYmFsU3RhdGUgZGlzYWJsZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RHbG9iYWxzKCkKICAgIHsKICAgICAgICAkdmFyID0gJHRoaXMtPmdldFNwZWNpYWxWYXJzKCk7CiAgICAgICAgdW5zZXQoJHZhclswXSk7CiAgICAgICAgJG91dCA9ICcnOwoKICAgICAgICAkZHVtcGVyID0gbmV3IENsaUR1bXBlcihmdW5jdGlvbiAoJGxpbmUsICRkZXB0aCkgdXNlICgmJG91dCkgewogICAgICAgICAgICBpZiAoJGRlcHRoID49IDApIHsKICAgICAgICAgICAgICAgICRvdXQgLj0gc3RyX3JlcGVhdCgnICAnLCAkZGVwdGgpLiRsaW5lLiJcbiI7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICAkZHVtcGVyLT5zZXRDb2xvcnMoZmFsc2UpOwogICAgICAgICRjbG9uZXIgPSBuZXcgVmFyQ2xvbmVyKCk7CgogICAgICAgICRkYXRhID0gJGNsb25lci0+Y2xvbmVWYXIoJHZhcik7CiAgICAgICAgJGR1bXBlci0+ZHVtcCgkZGF0YSk7CgogICAgICAgICR0aGlzLT5hc3NlcnRTYW1lKAogICAgICAgICAgICA8PDwnRU9UWFQnCmFycmF5OjIgWwogIDEgPT4gYXJyYXk6MSBbCiAgICAiR0xPQkFMUyIgPT4gJjEgYXJyYXk6MSBbCiAgICAgICJHTE9CQUxTIiA9PiAmMSBhcnJheToxIFsmMV0KICAgIF0KICBdCiAgMiA9PiAmMSBhcnJheToxIFsmMV0KXQoKRU9UWFQKICAgICAgICAgICAgLAogICAgICAgICAgICAkb3V0CiAgICAgICAgKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdEluY29tcGxldGVDbGFzcygpCiAgICB7CiAgICAgICAgJHVuc2VyaWFsaXplQ2FsbGJhY2tIYW5kbGVyID0gaW5pX3NldCgndW5zZXJpYWxpemVfY2FsbGJhY2tfZnVuYycsIG51bGwpOwogICAgICAgICR2YXIgPSB1bnNlcmlhbGl6ZSgnTzo4OiJGb29cQnV6eiI6MDp7fScpOwogICAgICAgIGluaV9zZXQoJ3Vuc2VyaWFsaXplX2NhbGxiYWNrX2Z1bmMnLCAkdW5zZXJpYWxpemVDYWxsYmFja0hhbmRsZXIpOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0RHVtcE1hdGNoZXNGb3JtYXQoCiAgICAgICAgICAgIDw8PEVPVFhUCl9fUEhQX0luY29tcGxldGVfQ2xhc3MoRm9vXEJ1enopIHt9CkVPVFhUCiAgICAgICAgICAgICwKICAgICAgICAgICAgJHZhcgogICAgICAgICk7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRTcGVjaWFsVmFycygpCiAgICB7CiAgICAgICAgZm9yZWFjaCAoYXJyYXlfa2V5cygkR0xPQkFMUykgYXMgJHZhcikgewogICAgICAgICAgICBpZiAoJ0dMT0JBTFMnICE9PSAkdmFyKSB7CiAgICAgICAgICAgICAgICB1bnNldCgkR0xPQkFMU1skdmFyXSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgICR2YXIgPSBmdW5jdGlvbiAmKCkgewogICAgICAgICAgICAkdmFyID0gYXJyYXkoKTsKICAgICAgICAgICAgJHZhcltdID0gJiR2YXI7CgogICAgICAgICAgICByZXR1cm4gJHZhcjsKICAgICAgICB9OwoKICAgICAgICByZXR1cm4gYXJyYXkoJHZhcigpLCAkR0xPQkFMUywgJiRHTE9CQUxTKTsKICAgIH0KfQo=AppDevTools/query/vendor/symfony/var-dumper/Tests/Dumper/HtmlDumperTest.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcVGVzdHNcRHVtcGVyOwoKdXNlIFBIUFVuaXRcRnJhbWV3b3JrXFRlc3RDYXNlOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENsb25lclxWYXJDbG9uZXI7CnVzZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcRHVtcGVyXEh0bWxEdW1wZXI7CgovKioKICogQGF1dGhvciBOaWNvbGFzIEdyZWthcyA8cEB0Y2h3b3JrLmNvbT4KICovCmNsYXNzIEh0bWxEdW1wZXJUZXN0IGV4dGVuZHMgVGVzdENhc2UKewogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RHZXQoKQogICAgewogICAgICAgIGlmIChpbmlfZ2V0KCd4ZGVidWcuZmlsZV9saW5rX2Zvcm1hdCcpIHx8IGdldF9jZmdfdmFyKCd4ZGVidWcuZmlsZV9saW5rX2Zvcm1hdCcpKSB7CiAgICAgICAgICAgICR0aGlzLT5tYXJrVGVzdFNraXBwZWQoJ0EgY3VzdG9tIGZpbGVfbGlua19mb3JtYXQgaXMgZGVmaW5lZC4nKTsKICAgICAgICB9CgogICAgICAgIHJlcXVpcmUgX19ESVJfXy4nLy4uL0ZpeHR1cmVzL2R1bWItdmFyLnBocCc7CgogICAgICAgICRkdW1wZXIgPSBuZXcgSHRtbER1bXBlcigncGhwOi8vb3V0cHV0Jyk7CiAgICAgICAgJGR1bXBlci0+c2V0RHVtcEhlYWRlcignPGZvbz48L2Zvbz4nKTsKICAgICAgICAkZHVtcGVyLT5zZXREdW1wQm91bmRhcmllcygnPGJhcj4nLCAnPC9iYXI+Jyk7CiAgICAgICAgJGNsb25lciA9IG5ldyBWYXJDbG9uZXIoKTsKICAgICAgICAkY2xvbmVyLT5hZGRDYXN0ZXJzKGFycmF5KAogICAgICAgICAgICAnOnN0cmVhbScgPT4gZnVuY3Rpb24gKCRyZXMsICRhKSB7CiAgICAgICAgICAgICAgICB1bnNldCgkYVsndXJpJ10sICRhWyd3cmFwcGVyX2RhdGEnXSk7CgogICAgICAgICAgICAgICAgcmV0dXJuICRhOwogICAgICAgICAgICB9LAogICAgICAgICkpOwogICAgICAgICRkYXRhID0gJGNsb25lci0+Y2xvbmVWYXIoJHZhcik7CgogICAgICAgIG9iX3N0YXJ0KCk7CiAgICAgICAgJGR1bXBlci0+ZHVtcCgkZGF0YSk7CiAgICAgICAgJG91dCA9IG9iX2dldF9jbGVhbigpOwogICAgICAgICRvdXQgPSBwcmVnX3JlcGxhY2UoJy9bIFx0XSskL20nLCAnJywgJG91dCk7CiAgICAgICAgJHZhclsnZmlsZSddID0gaHRtbHNwZWNpYWxjaGFycygkdmFyWydmaWxlJ10sIEVOVF9RVU9URVMsICdVVEYtOCcpOwogICAgICAgICRpbnRNYXggPSBQSFBfSU5UX01BWDsKICAgICAgICBwcmVnX21hdGNoKCcvc2YtZHVtcC1cZCsvJywgJG91dCwgJGR1bXBJZCk7CiAgICAgICAgJGR1bXBJZCA9ICRkdW1wSWRbMF07CiAgICAgICAgJHJlcyA9IChpbnQpICR2YXJbJ3JlcyddOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0U3RyaW5nTWF0Y2hlc0Zvcm1hdCgKICAgICAgICAgICAgPDw8RU9UWFQKPGZvbz48L2Zvbz48YmFyPjxzcGFuIGNsYXNzPXNmLWR1bXAtbm90ZT5hcnJheToyNDwvc3Bhbj4gWzxzYW1wPgogICI8c3BhbiBjbGFzcz1zZi1kdW1wLWtleT5udW1iZXI8L3NwYW4+IiA9PiA8c3BhbiBjbGFzcz1zZi1kdW1wLW51bT4xPC9zcGFuPgogIDxzcGFuIGNsYXNzPXNmLWR1bXAta2V5PjA8L3NwYW4+ID0+IDxhIGNsYXNzPXNmLWR1bXAtcmVmIGhyZWY9I3skZHVtcElkfS1yZWYwMSB0aXRsZT0iMiBvY2N1cnJlbmNlcyI+JmFtcDsxPC9hPiA8c3BhbiBjbGFzcz1zZi1kdW1wLWNvbnN0Pm51bGw8L3NwYW4+CiAgIjxzcGFuIGNsYXNzPXNmLWR1bXAta2V5PmNvbnN0PC9zcGFuPiIgPT4gPHNwYW4gY2xhc3M9c2YtZHVtcC1udW0+MS4xPC9zcGFuPgogIDxzcGFuIGNsYXNzPXNmLWR1bXAta2V5PjE8L3NwYW4+ID0+IDxzcGFuIGNsYXNzPXNmLWR1bXAtY29uc3Q+dHJ1ZTwvc3Bhbj4KICA8c3BhbiBjbGFzcz1zZi1kdW1wLWtleT4yPC9zcGFuPiA9PiA8c3BhbiBjbGFzcz1zZi1kdW1wLWNvbnN0PmZhbHNlPC9zcGFuPgogIDxzcGFuIGNsYXNzPXNmLWR1bXAta2V5PjM8L3NwYW4+ID0+IDxzcGFuIGNsYXNzPXNmLWR1bXAtbnVtPk5BTjwvc3Bhbj4KICA8c3BhbiBjbGFzcz1zZi1kdW1wLWtleT40PC9zcGFuPiA9PiA8c3BhbiBjbGFzcz1zZi1kdW1wLW51bT5JTkY8L3NwYW4+CiAgPHNwYW4gY2xhc3M9c2YtZHVtcC1rZXk+NTwvc3Bhbj4gPT4gPHNwYW4gY2xhc3M9c2YtZHVtcC1udW0+LUlORjwvc3Bhbj4KICA8c3BhbiBjbGFzcz1zZi1kdW1wLWtleT42PC9zcGFuPiA9PiA8c3BhbiBjbGFzcz1zZi1kdW1wLW51bT57JGludE1heH08L3NwYW4+CiAgIjxzcGFuIGNsYXNzPXNmLWR1bXAta2V5PnN0cjwvc3Bhbj4iID0+ICI8c3BhbiBjbGFzcz1zZi1kdW1wLXN0ciB0aXRsZT0iNSBjaGFyYWN0ZXJzIj5kJiVzO2omJXM7PHNwYW4gY2xhc3M9c2YtZHVtcC1kZWZhdWx0Plxcbjwvc3Bhbj48L3NwYW4+IgogIDxzcGFuIGNsYXNzPXNmLWR1bXAta2V5Pjc8L3NwYW4+ID0+IGIiPHNwYW4gY2xhc3M9c2YtZHVtcC1zdHIgdGl0bGU9IjIgYmluYXJ5IG9yIG5vbi1VVEYtOCBjaGFyYWN0ZXJzIj4mJXM7PHNwYW4gY2xhc3M9c2YtZHVtcC1kZWZhdWx0PlxceDAwPC9zcGFuPjwvc3Bhbj4iCiAgIjxzcGFuIGNsYXNzPXNmLWR1bXAta2V5PltdPC9zcGFuPiIgPT4gW10KICAiPHNwYW4gY2xhc3M9c2YtZHVtcC1rZXk+cmVzPC9zcGFuPiIgPT4gPHNwYW4gY2xhc3M9c2YtZHVtcC1ub3RlPnN0cmVhbSByZXNvdXJjZTwvc3Bhbj4gPGEgY2xhc3M9c2YtZHVtcC1yZWY+QHskcmVzfTwvYT48c2FtcD4KJUEgIDxzcGFuIGNsYXNzPXNmLWR1bXAtbWV0YT53cmFwcGVyX3R5cGU8L3NwYW4+OiAiPHNwYW4gY2xhc3M9c2YtZHVtcC1zdHIgdGl0bGU9IjkgY2hhcmFjdGVycyI+cGxhaW5maWxlPC9zcGFuPiIKICAgIDxzcGFuIGNsYXNzPXNmLWR1bXAtbWV0YT5zdHJlYW1fdHlwZTwvc3Bhbj46ICI8c3BhbiBjbGFzcz1zZi1kdW1wLXN0ciB0aXRsZT0iNSBjaGFyYWN0ZXJzIj5TVERJTzwvc3Bhbj4iCiAgICA8c3BhbiBjbGFzcz1zZi1kdW1wLW1ldGE+bW9kZTwvc3Bhbj46ICI8c3BhbiBjbGFzcz1zZi1kdW1wLXN0cj5yPC9zcGFuPiIKICAgIDxzcGFuIGNsYXNzPXNmLWR1bXAtbWV0YT51bnJlYWRfYnl0ZXM8L3NwYW4+OiA8c3BhbiBjbGFzcz1zZi1kdW1wLW51bT4wPC9zcGFuPgogICAgPHNwYW4gY2xhc3M9c2YtZHVtcC1tZXRhPnNlZWthYmxlPC9zcGFuPjogPHNwYW4gY2xhc3M9c2YtZHVtcC1jb25zdD50cnVlPC9zcGFuPgolQSAgPHNwYW4gY2xhc3M9c2YtZHVtcC1tZXRhPm9wdGlvbnM8L3NwYW4+OiBbXQogIDwvc2FtcD59CiAgIjxzcGFuIGNsYXNzPXNmLWR1bXAta2V5Pm9iajwvc3Bhbj4iID0+IDxhYmJyIHRpdGxlPSJTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcVGVzdHNcRml4dHVyZVxEdW1iRm9vIiBjbGFzcz1zZi1kdW1wLW5vdGU+RHVtYkZvbzwvYWJicj4gezxhIGNsYXNzPXNmLWR1bXAtcmVmIGhyZWY9I3skZHVtcElkfS1yZWYyJWQgdGl0bGU9IjIgb2NjdXJyZW5jZXMiPiMlZDwvYT48c2FtcCBpZD17JGR1bXBJZH0tcmVmMiVkPgogICAgKzxzcGFuIGNsYXNzPXNmLWR1bXAtcHVibGljIHRpdGxlPSJQdWJsaWMgcHJvcGVydHkiPmZvbzwvc3Bhbj46ICI8c3BhbiBjbGFzcz1zZi1kdW1wLXN0ciB0aXRsZT0iMyBjaGFyYWN0ZXJzIj5mb288L3NwYW4+IgogICAgKyI8c3BhbiBjbGFzcz1zZi1kdW1wLXB1YmxpYyB0aXRsZT0iUnVudGltZSBhZGRlZCBkeW5hbWljIHByb3BlcnR5Ij5iYXI8L3NwYW4+IjogIjxzcGFuIGNsYXNzPXNmLWR1bXAtc3RyIHRpdGxlPSIzIGNoYXJhY3RlcnMiPmJhcjwvc3Bhbj4iCiAgPC9zYW1wPn0KICAiPHNwYW4gY2xhc3M9c2YtZHVtcC1rZXk+Y2xvc3VyZTwvc3Bhbj4iID0+IDxzcGFuIGNsYXNzPXNmLWR1bXAtbm90ZT5DbG9zdXJlPC9zcGFuPiB7PGEgY2xhc3M9c2YtZHVtcC1yZWY+IyVkPC9hPjxzYW1wPgogICAgPHNwYW4gY2xhc3M9c2YtZHVtcC1tZXRhPmNsYXNzPC9zcGFuPjogIjxzcGFuIGNsYXNzPXNmLWR1bXAtc3RyIHRpdGxlPSJTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcVGVzdHNcRHVtcGVyXEh0bWxEdW1wZXJUZXN0CjU1IGNoYXJhY3RlcnMiPjxzcGFuIGNsYXNzPSJzZi1kdW1wLWVsbGlwc2lzIHNmLWR1bXAtZWxsaXBzaXMtY2xhc3MiPlN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxUZXN0c1xEdW1wZXI8L3NwYW4+PHNwYW4gY2xhc3M9c2YtZHVtcC1lbGxpcHNpcz5cPC9zcGFuPkh0bWxEdW1wZXJUZXN0PC9zcGFuPiIKICAgIDxzcGFuIGNsYXNzPXNmLWR1bXAtbWV0YT50aGlzPC9zcGFuPjogPGFiYnIgdGl0bGU9IlN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxUZXN0c1xEdW1wZXJcSHRtbER1bXBlclRlc3QiIGNsYXNzPXNmLWR1bXAtbm90ZT5IdG1sRHVtcGVyVGVzdDwvYWJicj4gezxhIGNsYXNzPXNmLWR1bXAtcmVmPiMlZDwvYT4gJiVzO30KICAgIDxzcGFuIGNsYXNzPXNmLWR1bXAtbWV0YT5wYXJhbWV0ZXJzPC9zcGFuPjogezxzYW1wPgogICAgICA8c3BhbiBjbGFzcz1zZi1kdW1wLW1ldGE+XCRhPC9zcGFuPjoge30KICAgICAgPHNwYW4gY2xhc3M9c2YtZHVtcC1tZXRhPiZhbXA7XCRiPC9zcGFuPjogezxzYW1wPgogICAgICAgIDxzcGFuIGNsYXNzPXNmLWR1bXAtbWV0YT50eXBlSGludDwvc3Bhbj46ICI8c3BhbiBjbGFzcz1zZi1kdW1wLXN0ciB0aXRsZT0iMyBjaGFyYWN0ZXJzIj5QRE88L3NwYW4+IgogICAgICAgIDxzcGFuIGNsYXNzPXNmLWR1bXAtbWV0YT5kZWZhdWx0PC9zcGFuPjogPHNwYW4gY2xhc3M9c2YtZHVtcC1jb25zdD5udWxsPC9zcGFuPgogICAgICA8L3NhbXA+fQogICAgPC9zYW1wPn0KICAgIDxzcGFuIGNsYXNzPXNmLWR1bXAtbWV0YT5maWxlPC9zcGFuPjogIjxzcGFuIGNsYXNzPXNmLWR1bXAtc3RyIHRpdGxlPSJ7JHZhclsnZmlsZSddfQolZCBjaGFyYWN0ZXJzIj48c3BhbiBjbGFzcz0ic2YtZHVtcC1lbGxpcHNpcyBzZi1kdW1wLWVsbGlwc2lzLXBhdGgiPiVzJWVWYXJEdW1wZXI8L3NwYW4+PHNwYW4gY2xhc3M9c2YtZHVtcC1lbGxpcHNpcz4lZTwvc3Bhbj5UZXN0cyVlRml4dHVyZXMlZWR1bWItdmFyLnBocDwvc3Bhbj4iCiAgICA8c3BhbiBjbGFzcz1zZi1kdW1wLW1ldGE+bGluZTwvc3Bhbj46ICI8c3BhbiBjbGFzcz1zZi1kdW1wLXN0ciB0aXRsZT0iJWQgY2hhcmFjdGVycyI+eyR2YXJbJ2xpbmUnXX0gdG8geyR2YXJbJ2xpbmUnXX08L3NwYW4+IgogIDwvc2FtcD59CiAgIjxzcGFuIGNsYXNzPXNmLWR1bXAta2V5PmxpbmU8L3NwYW4+IiA9PiA8c3BhbiBjbGFzcz1zZi1kdW1wLW51bT57JHZhclsnbGluZSddfTwvc3Bhbj4KICAiPHNwYW4gY2xhc3M9c2YtZHVtcC1rZXk+bm9iajwvc3Bhbj4iID0+IDxzcGFuIGNsYXNzPXNmLWR1bXAtbm90ZT5hcnJheToxPC9zcGFuPiBbPHNhbXA+CiAgICA8c3BhbiBjbGFzcz1zZi1kdW1wLWluZGV4PjA8L3NwYW4+ID0+IDxhIGNsYXNzPXNmLWR1bXAtcmVmIGhyZWY9I3skZHVtcElkfS1yZWYwMyB0aXRsZT0iMiBvY2N1cnJlbmNlcyI+JmFtcDszPC9hPiB7PGEgY2xhc3M9c2YtZHVtcC1yZWYgaHJlZj0jeyRkdW1wSWR9LXJlZjIlZCB0aXRsZT0iMyBvY2N1cnJlbmNlcyI+IyVkPC9hPn0KICA8L3NhbXA+XQogICI8c3BhbiBjbGFzcz1zZi1kdW1wLWtleT5yZWN1cnM8L3NwYW4+IiA9PiA8YSBjbGFzcz1zZi1kdW1wLXJlZiBocmVmPSN7JGR1bXBJZH0tcmVmMDQgdGl0bGU9IjIgb2NjdXJyZW5jZXMiPiZhbXA7NDwvYT4gPHNwYW4gY2xhc3M9c2YtZHVtcC1ub3RlPmFycmF5OjE8L3NwYW4+IFs8c2FtcCBpZD17JGR1bXBJZH0tcmVmMDQ+CiAgICA8c3BhbiBjbGFzcz1zZi1kdW1wLWluZGV4PjA8L3NwYW4+ID0+IDxhIGNsYXNzPXNmLWR1bXAtcmVmIGhyZWY9I3skZHVtcElkfS1yZWYwNCB0aXRsZT0iMiBvY2N1cnJlbmNlcyI+JmFtcDs0PC9hPiA8c3BhbiBjbGFzcz1zZi1kdW1wLW5vdGU+YXJyYXk6MTwvc3Bhbj4gWzxhIGNsYXNzPXNmLWR1bXAtcmVmIGhyZWY9I3skZHVtcElkfS1yZWYwNCB0aXRsZT0iMiBvY2N1cnJlbmNlcyI+JmFtcDs0PC9hPl0KICA8L3NhbXA+XQogIDxzcGFuIGNsYXNzPXNmLWR1bXAta2V5Pjg8L3NwYW4+ID0+IDxhIGNsYXNzPXNmLWR1bXAtcmVmIGhyZWY9I3skZHVtcElkfS1yZWYwMSB0aXRsZT0iMiBvY2N1cnJlbmNlcyI+JmFtcDsxPC9hPiA8c3BhbiBjbGFzcz1zZi1kdW1wLWNvbnN0Pm51bGw8L3NwYW4+CiAgIjxzcGFuIGNsYXNzPXNmLWR1bXAta2V5PnNvYmo8L3NwYW4+IiA9PiA8YWJiciB0aXRsZT0iU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXFRlc3RzXEZpeHR1cmVcRHVtYkZvbyIgY2xhc3M9c2YtZHVtcC1ub3RlPkR1bWJGb288L2FiYnI+IHs8YSBjbGFzcz1zZi1kdW1wLXJlZiBocmVmPSN7JGR1bXBJZH0tcmVmMiVkIHRpdGxlPSIyIG9jY3VycmVuY2VzIj4jJWQ8L2E+fQogICI8c3BhbiBjbGFzcz1zZi1kdW1wLWtleT5zbm9iajwvc3Bhbj4iID0+IDxhIGNsYXNzPXNmLWR1bXAtcmVmIGhyZWY9I3skZHVtcElkfS1yZWYwMyB0aXRsZT0iMiBvY2N1cnJlbmNlcyI+JmFtcDszPC9hPiB7PGEgY2xhc3M9c2YtZHVtcC1yZWYgaHJlZj0jeyRkdW1wSWR9LXJlZjIlZCB0aXRsZT0iMyBvY2N1cnJlbmNlcyI+IyVkPC9hPn0KICAiPHNwYW4gY2xhc3M9c2YtZHVtcC1rZXk+c25vYmoyPC9zcGFuPiIgPT4gezxhIGNsYXNzPXNmLWR1bXAtcmVmIGhyZWY9I3skZHVtcElkfS1yZWYyJWQgdGl0bGU9IjMgb2NjdXJyZW5jZXMiPiMlZDwvYT59CiAgIjxzcGFuIGNsYXNzPXNmLWR1bXAta2V5PmZpbGU8L3NwYW4+IiA9PiAiPHNwYW4gY2xhc3M9c2YtZHVtcC1zdHIgdGl0bGU9IiVkIGNoYXJhY3RlcnMiPnskdmFyWydmaWxlJ119PC9zcGFuPiIKICBiIjxzcGFuIGNsYXNzPXNmLWR1bXAta2V5PmJpbi1rZXktJiVzOzwvc3Bhbj4iID0+ICIiCjwvc2FtcD5dCjwvYmFyPgoKRU9UWFQKICAgICAgICAgICAgLAoKICAgICAgICAgICAgJG91dAogICAgICAgICk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RDaGFyc2V0KCkKICAgIHsKICAgICAgICAkdmFyID0gbWJfY29udmVydF9lbmNvZGluZygn0KHQu9C+0LLQsNGA0YwnLCAnQ1AxMjUxJywgJ1VURi04Jyk7CgogICAgICAgICRkdW1wZXIgPSBuZXcgSHRtbER1bXBlcigncGhwOi8vb3V0cHV0JywgJ0NQMTI1MScpOwogICAgICAgICRkdW1wZXItPnNldER1bXBIZWFkZXIoJzxmb28+PC9mb28+Jyk7CiAgICAgICAgJGR1bXBlci0+c2V0RHVtcEJvdW5kYXJpZXMoJzxiYXI+JywgJzwvYmFyPicpOwogICAgICAgICRjbG9uZXIgPSBuZXcgVmFyQ2xvbmVyKCk7CgogICAgICAgICRkYXRhID0gJGNsb25lci0+Y2xvbmVWYXIoJHZhcik7CiAgICAgICAgJG91dCA9ICRkdW1wZXItPmR1bXAoJGRhdGEsIHRydWUpOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0U3RyaW5nTWF0Y2hlc0Zvcm1hdCgKICAgICAgICAgICAgPDw8J0VPVFhUJwo8Zm9vPjwvZm9vPjxiYXI+YiI8c3BhbiBjbGFzcz1zZi1kdW1wLXN0ciB0aXRsZT0iNyBiaW5hcnkgb3Igbm9uLVVURi04IGNoYXJhY3RlcnMiPiYjMTA1NzsmIzEwODM7JiMxMDg2OyYjMTA3NDsmIzEwNzI7JiMxMDg4OyYjMTEwMDs8L3NwYW4+Igo8L2Jhcj4KCkVPVFhUCiAgICAgICAgICAgICwKICAgICAgICAgICAgJG91dAogICAgICAgICk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RBcHBlbmQoKQogICAgewogICAgICAgICRvdXQgPSBmb3BlbigncGhwOi8vbWVtb3J5JywgJ3IrYicpOwoKICAgICAgICAkZHVtcGVyID0gbmV3IEh0bWxEdW1wZXIoKTsKICAgICAgICAkZHVtcGVyLT5zZXREdW1wSGVhZGVyKCc8Zm9vPjwvZm9vPicpOwogICAgICAgICRkdW1wZXItPnNldER1bXBCb3VuZGFyaWVzKCc8YmFyPicsICc8L2Jhcj4nKTsKICAgICAgICAkY2xvbmVyID0gbmV3IFZhckNsb25lcigpOwoKICAgICAgICAkZHVtcGVyLT5kdW1wKCRjbG9uZXItPmNsb25lVmFyKDEyMyksICRvdXQpOwogICAgICAgICRkdW1wZXItPmR1bXAoJGNsb25lci0+Y2xvbmVWYXIoNDU2KSwgJG91dCk7CgogICAgICAgICRvdXQgPSBzdHJlYW1fZ2V0X2NvbnRlbnRzKCRvdXQsIC0xLCAwKTsKCiAgICAgICAgJHRoaXMtPmFzc2VydFNhbWUoPDw8J0VPVFhUJwo8Zm9vPjwvZm9vPjxiYXI+PHNwYW4gY2xhc3M9c2YtZHVtcC1udW0+MTIzPC9zcGFuPgo8L2Jhcj4KPGJhcj48c3BhbiBjbGFzcz1zZi1kdW1wLW51bT40NTY8L3NwYW4+CjwvYmFyPgoKRU9UWFQKICAgICAgICAgICAgLAogICAgICAgICAgICAkb3V0CiAgICAgICAgKTsKICAgIH0KfQo=AppDevTools/query/vendor/symfony/var-dumper/Tests/Dumper/ServerDumperTest.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcVGVzdHNcRHVtcGVyOwoKdXNlIFBIUFVuaXRcRnJhbWV3b3JrXFRlc3RDYXNlOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcUHJvY2Vzc1xQaHBQcm9jZXNzOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcUHJvY2Vzc1xQcm9jZXNzOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENsb25lclxWYXJDbG9uZXI7CnVzZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcRHVtcGVyXENvbnRleHRQcm92aWRlclxDb250ZXh0UHJvdmlkZXJJbnRlcmZhY2U7CnVzZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcRHVtcGVyXERhdGFEdW1wZXJJbnRlcmZhY2U7CnVzZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcRHVtcGVyXFNlcnZlckR1bXBlcjsKCmNsYXNzIFNlcnZlckR1bXBlclRlc3QgZXh0ZW5kcyBUZXN0Q2FzZQp7CiAgICBwcml2YXRlIGNvbnN0IFZBUl9EVU1QRVJfU0VSVkVSID0gJ3RjcDovLzEyNy4wLjAuMTo5OTEzJzsKCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdER1bXBGb3J3YXJkc1RvV3JhcHBlZER1bXBlcldoZW5TZXJ2ZXJJc1VuYXZhaWxhYmxlKCkKICAgIHsKICAgICAgICAkd3JhcHBlZER1bXBlciA9ICR0aGlzLT5nZXRNb2NrQnVpbGRlcihEYXRhRHVtcGVySW50ZXJmYWNlOjpjbGFzcyktPmdldE1vY2soKTsKCiAgICAgICAgJGR1bXBlciA9IG5ldyBTZXJ2ZXJEdW1wZXIoc2VsZjo6VkFSX0RVTVBFUl9TRVJWRVIsICR3cmFwcGVkRHVtcGVyKTsKCiAgICAgICAgJGNsb25lciA9IG5ldyBWYXJDbG9uZXIoKTsKICAgICAgICAkZGF0YSA9ICRjbG9uZXItPmNsb25lVmFyKCdmb28nKTsKCiAgICAgICAgJHdyYXBwZWREdW1wZXItPmV4cGVjdHMoJHRoaXMtPm9uY2UoKSktPm1ldGhvZCgnZHVtcCcpLT53aXRoKCRkYXRhKTsKCiAgICAgICAgJGR1bXBlci0+ZHVtcCgkZGF0YSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3REdW1wKCkKICAgIHsKICAgICAgICAkd3JhcHBlZER1bXBlciA9ICR0aGlzLT5nZXRNb2NrQnVpbGRlcihEYXRhRHVtcGVySW50ZXJmYWNlOjpjbGFzcyktPmdldE1vY2soKTsKICAgICAgICAkd3JhcHBlZER1bXBlci0+ZXhwZWN0cygkdGhpcy0+bmV2ZXIoKSktPm1ldGhvZCgnZHVtcCcpOyAvLyB0ZXN0IHdyYXBwZWQgZHVtcGVyIGlzIG5vdCB1c2VkCgogICAgICAgICRjbG9uZXIgPSBuZXcgVmFyQ2xvbmVyKCk7CiAgICAgICAgJGRhdGEgPSAkY2xvbmVyLT5jbG9uZVZhcignZm9vJyk7CiAgICAgICAgJGR1bXBlciA9IG5ldyBTZXJ2ZXJEdW1wZXIoc2VsZjo6VkFSX0RVTVBFUl9TRVJWRVIsICR3cmFwcGVkRHVtcGVyLCBhcnJheSgKICAgICAgICAgICAgJ2Zvb19wcm92aWRlcicgPT4gbmV3IGNsYXNzKCkgaW1wbGVtZW50cyBDb250ZXh0UHJvdmlkZXJJbnRlcmZhY2UgewogICAgICAgICAgICAgICAgcHVibGljIGZ1bmN0aW9uIGdldENvbnRleHQoKTogP2FycmF5CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5KCdmb28nKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICApKTsKCiAgICAgICAgJGR1bXBlZCA9IG51bGw7CiAgICAgICAgJHByb2Nlc3MgPSAkdGhpcy0+Z2V0U2VydmVyUHJvY2VzcygpOwogICAgICAgICRwcm9jZXNzLT5zdGFydChmdW5jdGlvbiAoJHR5cGUsICRidWZmZXIpIHVzZSAoJHByb2Nlc3MsICYkZHVtcGVkLCAkZHVtcGVyLCAkZGF0YSkgewogICAgICAgICAgICBpZiAoUHJvY2Vzczo6RVJSID09PSAkdHlwZSkgewogICAgICAgICAgICAgICAgJHByb2Nlc3MtPnN0b3AoKTsKICAgICAgICAgICAgICAgICR0aGlzLT5mYWlsKCk7CiAgICAgICAgICAgIH0gZWxzZWlmICgiUkVBRFlcbiIgPT09ICRidWZmZXIpIHsKICAgICAgICAgICAgICAgICRkdW1wZXItPmR1bXAoJGRhdGEpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJGR1bXBlZCAuPSAkYnVmZmVyOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgICRwcm9jZXNzLT53YWl0KCk7CgogICAgICAgICR0aGlzLT5hc3NlcnRUcnVlKCRwcm9jZXNzLT5pc1N1Y2Nlc3NmdWwoKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydFN0cmluZ01hdGNoZXNGb3JtYXQoPDw8J0RVTVAnCigzKSAiZm9vIgpbCiAgInRpbWVzdGFtcCIgPT4gJWQuJWQKICAiZm9vX3Byb3ZpZGVyIiA9PiBbCiAgICAoMykgImZvbyIKICBdCl0KJWQKRFVNUAogICAgICAgICwgJGR1bXBlZCk7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBnZXRTZXJ2ZXJQcm9jZXNzKCk6IFByb2Nlc3MKICAgIHsKICAgICAgICAkcHJvY2VzcyA9IG5ldyBQaHBQcm9jZXNzKGZpbGVfZ2V0X2NvbnRlbnRzKF9fRElSX18uJy8uLi9GaXh0dXJlcy9kdW1wX3NlcnZlci5waHAnKSwgbnVsbCwgYXJyYXkoCiAgICAgICAgICAgICdDT01QT05FTlRfUk9PVCcgPT4gX19ESVJfXy4nLy4uLy4uLycsCiAgICAgICAgICAgICdWQVJfRFVNUEVSX1NFUlZFUicgPT4gc2VsZjo6VkFSX0RVTVBFUl9TRVJWRVIsCiAgICAgICAgKSk7CiAgICAgICAgJHByb2Nlc3MtPmluaGVyaXRFbnZpcm9ubWVudFZhcmlhYmxlcyh0cnVlKTsKCiAgICAgICAgcmV0dXJuICRwcm9jZXNzLT5zZXRUaW1lb3V0KDkpOwogICAgfQp9Cg==AppDevTools/query/vendor/symfony/var-dumper/Tests/Fixtures/FooInterface.phpPD9waHAKCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcVGVzdHNcRml4dHVyZXM7CgppbnRlcmZhY2UgRm9vSW50ZXJmYWNlCnsKICAgIC8qKgogICAgICogSGVsbG8uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmb28oKTsKfQo=AppDevTools/query/vendor/symfony/var-dumper/Tests/Fixtures/GeneratorDemo.phpPD9waHAKCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcVGVzdHNcRml4dHVyZXM7CgpjbGFzcyBHZW5lcmF0b3JEZW1vCnsKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZm9vKCkKICAgIHsKICAgICAgICB5aWVsZCAxOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBiYXooKQogICAgewogICAgICAgIHlpZWxkIGZyb20gYmFyKCk7CiAgICB9Cn0KCmZ1bmN0aW9uIGJhcigpCnsKICAgIHlpZWxkIGZyb20gR2VuZXJhdG9yRGVtbzo6Zm9vKCk7Cn0KAppDevTools/query/vendor/symfony/var-dumper/Tests/Fixtures/NotLoadableClass.phpPD9waHAKCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcVGVzdHNcRml4dHVyZXM7CgpjbGFzcyBOb3RMb2FkYWJsZUNsYXNzIGV4dGVuZHMgTm90TG9hZGFibGVDbGFzcwp7Cn0KAppDevTools/query/vendor/symfony/var-dumper/Tests/Fixtures/Twig.phpPD9waHAKCi8qIGZvby50d2lnICovCmNsYXNzIF9fVHdpZ1RlbXBsYXRlX1ZhckR1bXBlckZpeHR1cmVfdTc1YTA5IGV4dGVuZHMgVHdpZ1xUZW1wbGF0ZQp7CiAgICBwcml2YXRlICRwYXRoOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChUd2lnXEVudmlyb25tZW50ICRlbnYgPSBudWxsLCAkcGF0aCA9IG51bGwpCiAgICB7CiAgICAgICAgaWYgKG51bGwgIT09ICRlbnYpIHsKICAgICAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgkZW52KTsKICAgICAgICB9CiAgICAgICAgJHRoaXMtPnBhcmVudCA9IGZhbHNlOwogICAgICAgICR0aGlzLT5ibG9ja3MgPSBhcnJheSgpOwogICAgICAgICR0aGlzLT5wYXRoID0gJHBhdGg7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGRvRGlzcGxheShhcnJheSAkY29udGV4dCwgYXJyYXkgJGJsb2NrcyA9IGFycmF5KCkpCiAgICB7CiAgICAgICAgLy8gbGluZSAyCiAgICAgICAgdGhyb3cgbmV3IFxFeGNlcHRpb24oJ0Zvb2JhcicpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUZW1wbGF0ZU5hbWUoKQogICAgewogICAgICAgIHJldHVybiAnZm9vLnR3aWcnOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXREZWJ1Z0luZm8oKQogICAgewogICAgICAgIHJldHVybiBhcnJheSgyMCA9PiAxLCAyMSA9PiAyKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U291cmNlQ29udGV4dCgpCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBUd2lnXFNvdXJjZSgiICAgZm9vIGJhclxuICAgICB0d2lnIHNvdXJjZVxuXG4iLCAnZm9vLnR3aWcnLCAkdGhpcy0+cGF0aCA/OiBfX0ZJTEVfXyk7CiAgICB9Cn0KAppDevTools/query/vendor/symfony/var-dumper/Tests/Fixtures/dumb-var.phpPD9waHAKCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcVGVzdHNcRml4dHVyZTsKCmlmICghY2xhc3NfZXhpc3RzKCdTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcVGVzdHNcRml4dHVyZVxEdW1iRm9vJykpIHsKICAgIGNsYXNzIER1bWJGb28KICAgIHsKICAgICAgICBwdWJsaWMgJGZvbyA9ICdmb28nOwogICAgfQp9CgokZm9vID0gbmV3IER1bWJGb28oKTsKJGZvby0+YmFyID0gJ2Jhcic7CgokZyA9IGZvcGVuKF9fRklMRV9fLCAncicpOwoKJHZhciA9IGFycmF5KAogICAgJ251bWJlcicgPT4gMSwgbnVsbCwKICAgICdjb25zdCcgPT4gMS4xLCB0cnVlLCBmYWxzZSwgTkFOLCBJTkYsIC1JTkYsIFBIUF9JTlRfTUFYLAogICAgJ3N0cicgPT4gImTDqWrDoFxuIiwgIlx4RTlceDAwIiwKICAgICdbXScgPT4gYXJyYXkoKSwKICAgICdyZXMnID0+ICRnLAogICAgJ29iaicgPT4gJGZvbywKICAgICdjbG9zdXJlJyA9PiBmdW5jdGlvbiAoJGEsIFxQRE8gJiRiID0gbnVsbCkge30sCiAgICAnbGluZScgPT4gX19MSU5FX18gLSAxLAogICAgJ25vYmonID0+IGFycmF5KChvYmplY3QpIGFycmF5KCkpLAopOwoKJHIgPSBhcnJheSgpOwokcltdID0gJiRyOwoKJHZhclsncmVjdXJzJ10gPSAmJHI7CiR2YXJbXSA9ICYkdmFyWzBdOwokdmFyWydzb2JqJ10gPSAkdmFyWydvYmonXTsKJHZhclsnc25vYmonXSA9ICYkdmFyWydub2JqJ11bMF07CiR2YXJbJ3Nub2JqMiddID0gJHZhclsnbm9iaiddWzBdOwokdmFyWydmaWxlJ10gPSBfX0ZJTEVfXzsKJHZhclsiYmluLWtleS1ceEU5Il0gPSAnJzsKCnVuc2V0KCRnLCAkcik7Cg==AppDevTools/query/vendor/symfony/var-dumper/Tests/Fixtures/dump_server.phpPD9waHAKCnVzZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2xvbmVyXERhdGE7CnVzZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcQ2xvbmVyXFZhckNsb25lcjsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxEdW1wZXJcQ2xpRHVtcGVyOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXFNlcnZlclxEdW1wU2VydmVyOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXFZhckR1bXBlcjsKCiRjb21wb25lbnRSb290ID0gJF9TRVJWRVJbJ0NPTVBPTkVOVF9ST09UJ107CgppZiAoIWlzX2ZpbGUoJGZpbGUgPSAkY29tcG9uZW50Um9vdC4nL3ZlbmRvci9hdXRvbG9hZC5waHAnKSkgewogICAgJGZpbGUgPSAkY29tcG9uZW50Um9vdC4nLy4uLy4uLy4uLy4uL3ZlbmRvci9hdXRvbG9hZC5waHAnOwp9CgpyZXF1aXJlICRmaWxlOwoKJGNsb25lciA9IG5ldyBWYXJDbG9uZXIoKTsKJGNsb25lci0+c2V0TWF4SXRlbXMoLTEpOwoKJGR1bXBlciA9IG5ldyBDbGlEdW1wZXIobnVsbCwgbnVsbCwgQ2xpRHVtcGVyOjpEVU1QX0xJR0hUX0FSUkFZIHwgQ2xpRHVtcGVyOjpEVU1QX1NUUklOR19MRU5HVEgpOwokZHVtcGVyLT5zZXRDb2xvcnMoZmFsc2UpOwoKVmFyRHVtcGVyOjpzZXRIYW5kbGVyKGZ1bmN0aW9uICgkdmFyKSB1c2UgKCRjbG9uZXIsICRkdW1wZXIpIHsKICAgICRkYXRhID0gJGNsb25lci0+Y2xvbmVWYXIoJHZhciktPndpdGhSZWZIYW5kbGVzKGZhbHNlKTsKICAgICRkdW1wZXItPmR1bXAoJGRhdGEpOwp9KTsKCiRzZXJ2ZXIgPSBuZXcgRHVtcFNlcnZlcihnZXRlbnYoJ1ZBUl9EVU1QRVJfU0VSVkVSJykpOwoKJHNlcnZlci0+c3RhcnQoKTsKCmVjaG8gIlJFQURZXG4iOwoKJHNlcnZlci0+bGlzdGVuKGZ1bmN0aW9uIChEYXRhICRkYXRhLCBhcnJheSAkY29udGV4dCwgJGNsaWVudElkKSB7CiAgICBkdW1wKChzdHJpbmcpICRkYXRhLCAkY29udGV4dCwgJGNsaWVudElkKTsKCiAgICBleGl0KDApOwp9KTsKAppDevTools/query/vendor/symfony/var-dumper/Tests/Fixtures/xml_reader.xmlPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPGZvbz4KICAgIDxiYXI+PC9iYXI+CiAgICA8YmFyIC8+CiAgICA8YmFyPldpdGggdGV4dDwvYmFyPgogICAgPGJhciBmb289ImJhciIgYmF6PSJmdWJhciI+PC9iYXI+CiAgICA8YmFyIHhtbG5zOmJhej0iaHR0cDovL3N5bWZvbnkuY29tIj4KICAgICAgICA8YmF6OmJhej48L2JhejpiYXo+CiAgICA8L2Jhcj4KPC9mb28+Cg==AppDevTools/query/vendor/symfony/var-dumper/Tests/Server/ConnectionTest.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcVGVzdHNcU2VydmVyOwoKdXNlIFBIUFVuaXRcRnJhbWV3b3JrXFRlc3RDYXNlOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcUHJvY2Vzc1xQaHBQcm9jZXNzOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcUHJvY2Vzc1xQcm9jZXNzOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENsb25lclxWYXJDbG9uZXI7CnVzZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcRHVtcGVyXENvbnRleHRQcm92aWRlclxDb250ZXh0UHJvdmlkZXJJbnRlcmZhY2U7CnVzZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcU2VydmVyXENvbm5lY3Rpb247CgpjbGFzcyBDb25uZWN0aW9uVGVzdCBleHRlbmRzIFRlc3RDYXNlCnsKICAgIHByaXZhdGUgY29uc3QgVkFSX0RVTVBFUl9TRVJWRVIgPSAndGNwOi8vMTI3LjAuMC4xOjk5MTMnOwoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0RHVtcCgpCiAgICB7CiAgICAgICAgJGNsb25lciA9IG5ldyBWYXJDbG9uZXIoKTsKICAgICAgICAkZGF0YSA9ICRjbG9uZXItPmNsb25lVmFyKCdmb28nKTsKICAgICAgICAkY29ubmVjdGlvbiA9IG5ldyBDb25uZWN0aW9uKHNlbGY6OlZBUl9EVU1QRVJfU0VSVkVSLCBhcnJheSgKICAgICAgICAgICAgJ2Zvb19wcm92aWRlcicgPT4gbmV3IGNsYXNzKCkgaW1wbGVtZW50cyBDb250ZXh0UHJvdmlkZXJJbnRlcmZhY2UgewogICAgICAgICAgICAgICAgcHVibGljIGZ1bmN0aW9uIGdldENvbnRleHQoKTogP2FycmF5CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5KCdmb28nKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICApKTsKCiAgICAgICAgJGR1bXBlZCA9IG51bGw7CiAgICAgICAgJHByb2Nlc3MgPSAkdGhpcy0+Z2V0U2VydmVyUHJvY2VzcygpOwogICAgICAgICRwcm9jZXNzLT5zdGFydChmdW5jdGlvbiAoJHR5cGUsICRidWZmZXIpIHVzZSAoJHByb2Nlc3MsICYkZHVtcGVkLCAkY29ubmVjdGlvbiwgJGRhdGEpIHsKICAgICAgICAgICAgaWYgKFByb2Nlc3M6OkVSUiA9PT0gJHR5cGUpIHsKICAgICAgICAgICAgICAgICRwcm9jZXNzLT5zdG9wKCk7CiAgICAgICAgICAgICAgICAkdGhpcy0+ZmFpbCgpOwogICAgICAgICAgICB9IGVsc2VpZiAoIlJFQURZXG4iID09PSAkYnVmZmVyKSB7CiAgICAgICAgICAgICAgICAkY29ubmVjdGlvbi0+d3JpdGUoJGRhdGEpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJGR1bXBlZCAuPSAkYnVmZmVyOwogICAgICAgICAgICB9CiAgICAgICAgfSk7CgogICAgICAgICRwcm9jZXNzLT53YWl0KCk7CgogICAgICAgICR0aGlzLT5hc3NlcnRUcnVlKCRwcm9jZXNzLT5pc1N1Y2Nlc3NmdWwoKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydFN0cmluZ01hdGNoZXNGb3JtYXQoPDw8J0RVTVAnCigzKSAiZm9vIgpbCiAgInRpbWVzdGFtcCIgPT4gJWQuJWQKICAiZm9vX3Byb3ZpZGVyIiA9PiBbCiAgICAoMykgImZvbyIKICBdCl0KJWQKCkRVTVAKICAgICAgICAsICRkdW1wZWQpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0Tm9TZXJ2ZXIoKQogICAgewogICAgICAgICRjbG9uZXIgPSBuZXcgVmFyQ2xvbmVyKCk7CiAgICAgICAgJGRhdGEgPSAkY2xvbmVyLT5jbG9uZVZhcignZm9vJyk7CiAgICAgICAgJGNvbm5lY3Rpb24gPSBuZXcgQ29ubmVjdGlvbihzZWxmOjpWQVJfRFVNUEVSX1NFUlZFUik7CiAgICAgICAgJHN0YXJ0ID0gbWljcm90aW1lKHRydWUpOwogICAgICAgICR0aGlzLT5hc3NlcnRGYWxzZSgkY29ubmVjdGlvbi0+d3JpdGUoJGRhdGEpKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0TGVzc1RoYW4oMSwgbWljcm90aW1lKHRydWUpIC0gJHN0YXJ0KTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGdldFNlcnZlclByb2Nlc3MoKTogUHJvY2VzcwogICAgewogICAgICAgICRwcm9jZXNzID0gbmV3IFBocFByb2Nlc3MoZmlsZV9nZXRfY29udGVudHMoX19ESVJfXy4nLy4uL0ZpeHR1cmVzL2R1bXBfc2VydmVyLnBocCcpLCBudWxsLCBhcnJheSgKICAgICAgICAgICAgJ0NPTVBPTkVOVF9ST09UJyA9PiBfX0RJUl9fLicvLi4vLi4vJywKICAgICAgICAgICAgJ1ZBUl9EVU1QRVJfU0VSVkVSJyA9PiBzZWxmOjpWQVJfRFVNUEVSX1NFUlZFUiwKICAgICAgICApKTsKICAgICAgICAkcHJvY2Vzcy0+aW5oZXJpdEVudmlyb25tZW50VmFyaWFibGVzKHRydWUpOwoKICAgICAgICByZXR1cm4gJHByb2Nlc3MtPnNldFRpbWVvdXQoOSk7CiAgICB9Cn0KAppDevTools/query/vendor/symfony/var-dumper/Tests/Test/VarDumperTestTraitTest.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcVGVzdHNcVGVzdDsKCnVzZSBQSFBVbml0XEZyYW1ld29ya1xUZXN0Q2FzZTsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxUZXN0XFZhckR1bXBlclRlc3RUcmFpdDsKCmNsYXNzIFZhckR1bXBlclRlc3RUcmFpdFRlc3QgZXh0ZW5kcyBUZXN0Q2FzZQp7CiAgICB1c2UgVmFyRHVtcGVyVGVzdFRyYWl0OwoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0SXRDb21wYXJlc0xhcmdlRGF0YSgpCiAgICB7CiAgICAgICAgJGhvd01hbnkgPSA3MDA7CiAgICAgICAgJGRhdGEgPSBhcnJheV9maWxsX2tleXMocmFuZ2UoMCwgJGhvd01hbnkpLCBhcnJheSgnYScsICdiJywgJ2MnLCAnZCcpKTsKCiAgICAgICAgJGV4cGVjdGVkID0gc3ByaW50ZigiYXJyYXk6JWQgW1xuIiwgJGhvd01hbnkgKyAxKTsKICAgICAgICBmb3IgKCRpID0gMDsgJGkgPD0gJGhvd01hbnk7ICsrJGkpIHsKICAgICAgICAgICAgJGV4cGVjdGVkIC49IDw8PEVPRFVNUAogICRpID0+IGFycmF5OjQgWwogICAgMCA9PiAiYSIKICAgIDEgPT4gImIiCiAgICAyID0+ICJjIgogICAgMyA9PiAiZCIKICBdXG4KRU9EVU1QOwogICAgICAgIH0KICAgICAgICAkZXhwZWN0ZWQgLj0gIl1cbiI7CgogICAgICAgICR0aGlzLT5hc3NlcnREdW1wRXF1YWxzKCRleHBlY3RlZCwgJGRhdGEpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0QWxsb3dzTm9uU2NhbGFyRXhwZWN0YXRpb24oKQogICAgewogICAgICAgICR0aGlzLT5hc3NlcnREdW1wRXF1YWxzKG5ldyBcQXJyYXlPYmplY3QoYXJyYXkoJ2JpbScgPT4gJ2JhbScpKSwgbmV3IFxBcnJheU9iamVjdChhcnJheSgnYmltJyA9PiAnYmFtJykpKTsKICAgIH0KfQo=AppDevTools/query/vendor/symfony/var-dumper/VarDumper.phpPD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBTeW1mb255IHBhY2thZ2UuCiAqCiAqIChjKSBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXI7Cgp1c2UgU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXENsb25lclxWYXJDbG9uZXI7CnVzZSBTeW1mb255XENvbXBvbmVudFxWYXJEdW1wZXJcRHVtcGVyXENsaUR1bXBlcjsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxEdW1wZXJcSHRtbER1bXBlcjsKCi8vIExvYWQgdGhlIGdsb2JhbCBkdW1wKCkgZnVuY3Rpb24KcmVxdWlyZV9vbmNlIF9fRElSX18uJy9SZXNvdXJjZXMvZnVuY3Rpb25zL2R1bXAucGhwJzsKCi8qKgogKiBAYXV0aG9yIE5pY29sYXMgR3Jla2FzIDxwQHRjaHdvcmsuY29tPgogKi8KY2xhc3MgVmFyRHVtcGVyCnsKICAgIHByaXZhdGUgc3RhdGljICRoYW5kbGVyOwoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZHVtcCgkdmFyKQogICAgewogICAgICAgIGlmIChudWxsID09PSBzZWxmOjokaGFuZGxlcikgewogICAgICAgICAgICAkY2xvbmVyID0gbmV3IFZhckNsb25lcigpOwogICAgICAgICAgICAkZHVtcGVyID0gXGluX2FycmF5KFBIUF9TQVBJLCBhcnJheSgnY2xpJywgJ3BocGRiZycpLCB0cnVlKSA/IG5ldyBDbGlEdW1wZXIoKSA6IG5ldyBIdG1sRHVtcGVyKCk7CiAgICAgICAgICAgIHNlbGY6OiRoYW5kbGVyID0gZnVuY3Rpb24gKCR2YXIpIHVzZSAoJGNsb25lciwgJGR1bXBlcikgewogICAgICAgICAgICAgICAgJGR1bXBlci0+ZHVtcCgkY2xvbmVyLT5jbG9uZVZhcigkdmFyKSk7CiAgICAgICAgICAgIH07CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gY2FsbF91c2VyX2Z1bmMoc2VsZjo6JGhhbmRsZXIsICR2YXIpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2V0SGFuZGxlcihjYWxsYWJsZSAkY2FsbGFibGUgPSBudWxsKQogICAgewogICAgICAgICRwcmV2SGFuZGxlciA9IHNlbGY6OiRoYW5kbGVyOwogICAgICAgIHNlbGY6OiRoYW5kbGVyID0gJGNhbGxhYmxlOwoKICAgICAgICByZXR1cm4gJHByZXZIYW5kbGVyOwogICAgfQp9Cg==AppDevTools/query/vendor/symfony/var-dumper/composer.jsonewogICAgIm5hbWUiOiAic3ltZm9ueS92YXItZHVtcGVyIiwKICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgImRlc2NyaXB0aW9uIjogIlN5bWZvbnkgbWVjaGFuaXNtIGZvciBleHBsb3JpbmcgYW5kIGR1bXBpbmcgUEhQIHZhcmlhYmxlcyIsCiAgICAia2V5d29yZHMiOiBbImR1bXAiLCAiZGVidWciXSwKICAgICJob21lcGFnZSI6ICJodHRwczovL3N5bWZvbnkuY29tIiwKICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAiYXV0aG9ycyI6IFsKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogIk5pY29sYXMgR3Jla2FzIiwKICAgICAgICAgICAgImVtYWlsIjogInBAdGNod29yay5jb20iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogIlN5bWZvbnkgQ29tbXVuaXR5IiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vc3ltZm9ueS5jb20vY29udHJpYnV0b3JzIgogICAgICAgIH0KICAgIF0sCiAgICAicmVxdWlyZSI6IHsKICAgICAgICAicGhwIjogIl43LjEuMyIsCiAgICAgICAgInN5bWZvbnkvcG9seWZpbGwtbWJzdHJpbmciOiAifjEuMCIsCiAgICAgICAgInN5bWZvbnkvcG9seWZpbGwtcGhwNzIiOiAifjEuNSIKICAgIH0sCiAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgImV4dC1pY29udiI6ICIqIiwKICAgICAgICAic3ltZm9ueS9wcm9jZXNzIjogIn4zLjR8fjQuMCIsCiAgICAgICAgInR3aWcvdHdpZyI6ICJ+MS4zNHx+Mi40IgogICAgfSwKICAgICJjb25mbGljdCI6IHsKICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIjw0LjguMzV8PDUuNC4zLD49NS4wIiwKICAgICAgICAic3ltZm9ueS9jb25zb2xlIjogIjwzLjQiCiAgICB9LAogICAgInN1Z2dlc3QiOiB7CiAgICAgICAgImV4dC1pY29udiI6ICJUbyBjb252ZXJ0IG5vbi1VVEYtOCBzdHJpbmdzIHRvIFVURi04IChvciBzeW1mb255L3BvbHlmaWxsLWljb252IGluIGNhc2UgZXh0LWljb252IGNhbm5vdCBiZSB1c2VkKS4iLAogICAgICAgICJleHQtaW50bCI6ICJUbyBzaG93IHJlZ2lvbiBuYW1lIGluIHRpbWUgem9uZSBkdW1wIiwKICAgICAgICAic3ltZm9ueS9jb25zb2xlIjogIlRvIHVzZSB0aGUgU2VydmVyRHVtcENvbW1hbmQgYW5kL29yIHRoZSBiaW4vdmFyLWR1bXAtc2VydmVyIHNjcmlwdCIKICAgIH0sCiAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgImZpbGVzIjogWyAiUmVzb3VyY2VzL2Z1bmN0aW9ucy9kdW1wLnBocCIgXSwKICAgICAgICAicHNyLTQiOiB7ICJTeW1mb255XFxDb21wb25lbnRcXFZhckR1bXBlclxcIjogIiIgfSwKICAgICAgICAiZXhjbHVkZS1mcm9tLWNsYXNzbWFwIjogWwogICAgICAgICAgICAiL1Rlc3RzLyIKICAgICAgICBdCiAgICB9LAogICAgImJpbiI6IFsKICAgICAgICAiUmVzb3VyY2VzL2Jpbi92YXItZHVtcC1zZXJ2ZXIiCiAgICBdLAogICAgIm1pbmltdW0tc3RhYmlsaXR5IjogImRldiIsCiAgICAiZXh0cmEiOiB7CiAgICAgICAgImJyYW5jaC1hbGlhcyI6IHsKICAgICAgICAgICAgImRldi1tYXN0ZXIiOiAiNC4xLWRldiIKICAgICAgICB9CiAgICB9Cn0KAppDevTools/query/vendor/symfony/var-dumper/phpunit.xml.distPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KCjxwaHB1bml0IHhtbG5zOnhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiCiAgICAgICAgIHhzaTpub05hbWVzcGFjZVNjaGVtYUxvY2F0aW9uPSJodHRwOi8vc2NoZW1hLnBocHVuaXQuZGUvNC4xL3BocHVuaXQueHNkIgogICAgICAgICBiYWNrdXBHbG9iYWxzPSJmYWxzZSIKICAgICAgICAgY29sb3JzPSJ0cnVlIgogICAgICAgICBib290c3RyYXA9InZlbmRvci9hdXRvbG9hZC5waHAiCiAgICAgICAgIGZhaWxPblJpc2t5PSJ0cnVlIgogICAgICAgICBmYWlsT25XYXJuaW5nPSJ0cnVlIgo+CiAgICA8cGhwPgogICAgICAgIDxpbmkgbmFtZT0iZXJyb3JfcmVwb3J0aW5nIiB2YWx1ZT0iLTEiIC8+CiAgICAgICAgPGVudiBuYW1lPSJEVU1QX0xJR0hUX0FSUkFZIiB2YWx1ZT0iIiAvPgogICAgICAgIDxlbnYgbmFtZT0iRFVNUF9TVFJJTkdfTEVOR1RIIiB2YWx1ZT0iIiAvPgogICAgPC9waHA+CgogICAgPHRlc3RzdWl0ZXM+CiAgICAgICAgPHRlc3RzdWl0ZSBuYW1lPSJTeW1mb255IFZhckR1bXBlciBDb21wb25lbnQgVGVzdCBTdWl0ZSI+CiAgICAgICAgICAgIDxkaXJlY3Rvcnk+Li9UZXN0cy88L2RpcmVjdG9yeT4KICAgICAgICA8L3Rlc3RzdWl0ZT4KICAgIDwvdGVzdHN1aXRlcz4KCiAgICA8ZmlsdGVyPgogICAgICAgIDx3aGl0ZWxpc3Q+CiAgICAgICAgICAgIDxkaXJlY3Rvcnk+Li88L2RpcmVjdG9yeT4KICAgICAgICAgICAgPGV4Y2x1ZGU+CiAgICAgICAgICAgICAgICA8ZGlyZWN0b3J5Pi4vUmVzb3VyY2VzPC9kaXJlY3Rvcnk+CiAgICAgICAgICAgICAgICA8ZGlyZWN0b3J5Pi4vVGVzdHM8L2RpcmVjdG9yeT4KICAgICAgICAgICAgICAgIDxkaXJlY3Rvcnk+Li92ZW5kb3I8L2RpcmVjdG9yeT4KICAgICAgICAgICAgPC9leGNsdWRlPgogICAgICAgIDwvd2hpdGVsaXN0PgogICAgPC9maWx0ZXI+CjwvcGhwdW5pdD4KAppDevTools/query/vendor/tightenco/collect/.gitignoreL3ZlbmRvcgovc3JjL0NvbGxlY3QvU3VwcG9ydC9DYXJib24ucGhwCg==AppDevTools/query/vendor/tightenco/collect/.travis.ymlbGFuZ3VhZ2U6IHBocAoKcGhwOgogIC0gNy4xCiAgLSA3LjIKICAtIG5pZ2h0bHkKCnN1ZG86IGZhbHNlCgpjYWNoZToKICBkaXJlY3RvcmllczoKICAgIC0gJEhPTUUvLmNvbXBvc2VyL2NhY2hlCgpiZWZvcmVfc2NyaXB0OgogIC0gdHJhdmlzX3JldHJ5IGNvbXBvc2VyIHNlbGYtdXBkYXRlCiAgLSB0cmF2aXNfcmV0cnkgY29tcG9zZXIgdXBkYXRlICR7Q09NUE9TRVJfRkxBR1N9IC0tbm8taW50ZXJhY3Rpb24gLS1wcmVmZXItZGlzdAoKc2NyaXB0OgogIC0gYmFzaCB1cGdyYWRlLnNoCg==AppDevTools/query/vendor/tightenco/collect/collect-logo.pngiVBORw0KGgoAAAANSUhEUgAAA3UAAAFRCAMAAADkcnQbAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA3NpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDIxIDc5LjE1NDkxMSwgMjAxMy8xMC8yOS0xMTo0NzoxNiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo1ZDU0OGQyNi1lYWE1LTQzMTctYmE5OS1hM2ZmOTE3NmZhNGUiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6REU4MTNBRUQwQTQxMTFFNkFGQTBFMDQzQUUyMjA1MjEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6REU4MTNBRUMwQTQxMTFFNkFGQTBFMDQzQUUyMjA1MjEiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChNYWNpbnRvc2gpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OGM3ZjFiNmItNmNiNy00NTIxLTkzZjEtZGE2MjJjMGNmNDY0IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjVkNTQ4ZDI2LWVhYTUtNDMxNy1iYTk5LWEzZmY5MTc2ZmE0ZSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PquGWqoAAAMAUExURfn5+fLy8vj4+PPz8/f39/Hx8fb29vT09PX19QAAAP1PMv1PM0lJSf9PM9TU1GRkZGVlZa6urp+fn8/Pz4KCgv1QM5CQkO/v7/9PMiMjI7S0tP1RNf1QNNnZ2f5AIf5KLaOjo/1kSv5EJdzc3PyUg/uqnPnh3f4oCPra1P1SNlJSUv1RNM7Ozv15Y5mZmaurq/1dQnV1dfu1qv4+HvyNe/1OMfyGcv5GKP4zFP5IKv5HKf5IKVlZWfny8fuxpri4uD09Pe7u7uXl5evr68XFxf4rC/rd2PrIwf5NMLa2tv4xEv1WOv41FsLCwoaGhmhoaP5DJMPDw8vLy3FxcfXt7Puuof5ML+Tk5PyJdv48HP4tDfnu7P49Hf43GP5CI4ODg+Pj4/fy8f46Gv2Cbfnw7v5AIP1SNczMzISEhP1uVf48Hf4vEPn29vrMxfnp5v4uDvrl4vns6o6Ojv5KK+bm5v1pUfrW0IGBgXR0dP5FJv47G/rGvf19aPydjby8vP1ZPpKSkv9QM/nq6P4tDnx8fP1xWfrQyfyZiZGRkf1OMvrBuf9QNf4xEPymmfj09P4sDffk4frSzPu4raysrNPT0/ygkv10Xv45Gf5LLvyklvn4+PrUzvnn5P5BIv5NL/u+tMHBwfb09P5DJfnOx/1TN/12YP1gRv5SNfyQfv4qCv5NMfvAtvq6sPfTzv1OMO3t7f9OMvjz8/1zXPfV0Pf29v9ML/vEu/uhkfu8sv5SN/1nTvvKwvr39/5DI/1TNvqdjfn19f5CJPrj4P1sU/1UOPy+tPrLw/n49/bo5v9OMfqaivuilPyjlGdnZ/vHv/yXhv5EJP5BI/9JK/zEu/r29fbZ1fr19Pyfj/y7sWNjY/1QMv9CI/fDu/9MLv1vV/4mBf5RNv1PMfuklv5MMP9LLfy8svn5+PvOxvX09P89Hvje2v9FJvvDuftwWP5LL/9GKP4/If9JLP8/H/jHwPfJwvf19f9OM/yci/Tw7/9IKvzLw/vTzP9NMf9PMf1sVPybjANNzlcAAECnSURBVHja7J0LfBPXne+N62TjGUuWH2PLlmwZGYxlGT8Qsh4BZGwMXtuAwbHwUxCDXVIRDFwgyHF4LSGQW3AgDysJIl0CBIc0DbRNW5L00iRN220aWrfdZHe7Cdt9ZJeb3Wu8tzfd2970zpkzL8l6jyw/+P8+idFj5swZ6Xz1P+d//ud/Eu4CgUDxVQJ8BCAQUAcCAXUgEAioA4GAOhAIBNSBQEAdCAQC6kAgoA4EAupAIBBQBwIBdSAQCKgDgYA6EAgE1IFA04G6OSAQKL4C6kAgoA4EAupAIBBQBwIBdSAQCKgDgYA6EAgE1IFAQB0IBNSBQCCgDgQC6kAgEFAHAgF1IBAIqAOBgDoQCKgDgUBAHQgE1IFAIKAOBJpx1H0JBALFV0AdCATUgUBAHQgEAupAIKAOBAIBdSAQUAcCgYA6EAioA4GAOhAIBNSBQEAdCAQC6kAgoM6f7rvvm7/+zW9+07qoqmqwovHda23LfgxfAgiomwTQvvmf//uV1t+2Vf37oxWNaofd1WwatnvyjWqVxTNueBG+BRBQJ12/v6/om6doiza/qu3fP65o1GlHe62OfEfvaLPbajcajxsJWjL0h1A56r4JXwPozqLuz2Kl3/+eNmkPn172V22DV/ccaDSZTM0mg8mgcWms9tdo0kiCIAXYmCfMc5Wn4b4/A4HuIEmj7ks//vo3f/Nw67LFVc/8+0XapGl+YDU0e1wmq8ZifPU1I6aLlGHGGN5kMpJljvuX0Jnfge8BBNSFpxc3z33X7rI4RrtM+RbtqMlufA31HTFgSg4skmTpQshxZk5GcCzS/6gWLIIvAgTUhaP5ToPLQncdj7NQKUm+6yjDxLF2DUvJGjpSSfLdSxnzD2Xphj4mCKgLQ6c+sVMkSQoDNd6UoZdI8eCNZP5nrZvRaHRbLCarx661qzGJfebN8E2AgLrQeqZLzfcRSW7QxtAmEId5kxHG48aXrRqt1mEyWPNNJl3j3H9f2NY2qDEiGOm+6HHnXvgqQEBdSLnOMyM3kveNyAjhKWPujEa7XeN+S9ubb7K4NI0Vjy6sWty67D/f+/qv7/s9U8Q8swqbRrVB9yX4LkBAXSgdsLM9R65PiXuT9a+63aP3OqxjzWOj2pft5w8srDqx6IXHv/7NH08cu903MEpiUFUd4FABAXUhtXiA6VTi4Zq63uR2WD2uLu297j+SjXM3t33np8te+Oavn/hxUD/JT4d0uG/6tybD7+HLAAF1IfR4k5oQvCf2xgODVX/6H8sWvfj1J564L1yC7tc248GhrK/hEnwZIKAuhH58zs1BRyq1838flfN/VZ2KIBl7We+8Bd8GCKgLoYUDFB/h1fRglIVcHFZh54vKcBYcKiCgLoRebMIOS+S7bB+MspAz3W6mAJJQDS2DrwME1AXXl0gtP7A73lAUZSk3nDp2Ws8yDA4VEFAXQouceoKN+1KbozV29/W6KCYuk+hrWAzfBwioCwFM/m0+FKW+4YkoS3ml7ia7/MDYUQRfCOhOoO4eCfpOAzt5ICP1PV9EW0pjlxpPtesHKu4BgWa/JFF3ZqCeCUgh6Q4i1XQqylL2NnBR0qqRy/CNgIC64GprYs0UQVADC6Mt5Wq3HrtC1a6v3A9fCQioC26mmkiOOll99xPRmkyzHQdOkzrnPPhKQEBdcO0ZoPA0uVKpNrdFW8o85012rZBx5BZ8JyCgLqhONVHMWla0Pvxsw+EoS7nf4GLdMvr2RvhOQEBdcF1rZ0d2MqWq4VK0pazqYEsh+4ZOw5cCAuqC6qhZyH9S314UNbwDahzTSVnbO+FbAQF1wfSvegeX2JLQN0XtCynq4Kbb+xoWw7cCAuqCapFZzycrGnX8PtpiNqNkDoxfpt5cBF8LCKgLpvtNVj5Xisr5YbTFdJpHSTxX/t8H5sLXAgLqguq3ZjVOd0kzozHfF20xrUN9bE4xfd3D8L2AgLqgVmpcw+cs0jsfi7aYv9Q4KJxPk9LmQ4QKCKgLqrZuNZv8kiDtvT+Otpj3FqjYDJovNbTBFwMC6oLpiSYj4whRolxhTT+NupyKHhWOciHr+8GhAprN1N0tXR8P67k9DUirdUu0xZwx27mO6sDFu0GgWatYUHerwchuH0ID078s6nIe6dexKW1VI4/DVwMC6oLpmXYKzx3QvUOX9mS0xVzxaClmly2CchmuwHcDAuqCqNgsbJilqjsddTmXO9BUuZLGTue8BN8NCKgLpgMOPoGKzGW/P+py3jWo0d6uSoKs7z8DXw4IqAuiD5xqfstjvfm7UZdzakjNZnPQdz8KXw4IqAs2IjNZ+R0PDr2lin5MdqHpJluQuu4N+HZAQF0QMakxSYLZ4KdvJPqRHZo9YLZRJijX8P3w9YCAusDaMsaEhWGds/wu6oI+d+rYlUM652L4ekBAXRA9i/NAM7zoJcy2/U7jofAG56TRWQTfDwioC6ztTfXcXskk2dx4T9QFPTyk4uAdvgbfDwioC6K2pkNM6DLDi/n16Aua28MMEZV0MUOvwxcEAuoCq6iBkOHF4DKS7L0YfUFvO19lu6rUz5vBoQIC6oLo6rAaJ7WkDR7V/4foC1rs7MNJx4i+rz4G3xAIqAti7MxGfutWql2CsdvSZSFxMcTfN0CECgioC6IvvkKR3KQdZd4bfUGtHX3MtgcEoRreM30/usNF7/3VoiJoQqDIqUuKmfb2c1FhtLHrfSf6gq67HBSbYlM18lnStNPvtq+8PP/Go+rbJtWoZ/PbSSBQZIohdd9qbKaELZObVkZf0htsOCZa8jN+ZRp9Wld23np8/qU9Rvc5Q75LYzeSxMvDTe9BKwJNGXVJH/Sr2VhMuovZ/oCEkq4Nq/DadELnnDctPqelZ4pf+eniuUaLob3Z5K4nuMlJQmVynoZmBJoy6k6OMqkxZTix5VBx9CXt7NZwGaXtDTum9hPacpjmre3iT0Y9Yx6Txq4kOZcRTlohu2kZeR3aEWiqqEta1H+T3d9HRlLdUozdI/0qNsBMPzx3yj6cnUeX/Wlzhd06bsg3uc8q8SIkJcF6WJU4pZlSb11QBA0JNFXUdba7Ca7vRRw3S2iLVwwmboyoHnpxCngrfri16oHGv29udlk09UxXUkbw94ZDcGT88nnDwBVoSaApoi7pczNe8IM2PNZ3XZVQ0gtDeib9EUmoHc3b4snb8x8sanvgXes5j9Y6innDY1XeQcvvpmLUWG5TiMDz5ovQkkBTRd3hppcJLhE0+fKwFKe6znCIUDIxZrqhE/H6NIo/vKq712HwuCz1rxEiayYjBUOH7u8f7KOusS6L6qLGQByiXzk/tBiaEmiKqEvabNaTOHQZZaStkgJAB8VZFXfDzvh8GDcMXc0a43HOIURg35BSSMWEXvmjVetwac4/88jpo2fu39nWrWL6m3Wt0JZAU0Td9qazbCZZuq3+o1kKLYPmm2xDV3XHx6GyqMN9iMtDgZFTinE7bhx15Ttc7rmL33+8qJM7aaEZLcNVuz/5AzQm0NRQl7R5mN1hXCkjbzpvSAHYiVNB039UC+IyEz3o0eNOJckP3VgGjXaLY3zc9O4Dba2vF3t7Tq709KpIQqZvbtoCrQk0NdQxMdBci7Xnb5dQ1GP9LyGvDM2Aurn5ZBw+i+frKLz7JWffkOPSbmr29Grt1wZ/uurUYX9n3Rq6jTZV1w3f3AbNCTQl1CVdMxzCTky6yaqapBi769ofqAklM2rSOR+Lx4fxaMP3RJburNXh8OT/t4sX5n33aFEQ6hctINEpL/UPQnMCTQ11exsYE8G0XZmm67CEol7s4Ht8dvOZOHwYS/Pzue2e1XaDq/GZtmXvFS8Nedq8jpdwuphl0J5AU0Ldtxrf4odEMpW0KMoH0GZBeO/l4T3x+DSKO4xs5d2NrxR3hntaRbcOgeoe2QsNCjQV1CU93I8XDDBzXG5JPoa3+41sXCdJDcXFofLYyHm8QtD6agRnbTE3owA2VbPzMLQo0FRQd6XZygzrSGzs3pdSVpX5phInc6Acmm/F4ePYNtqOU5RRDZF0F/8wYkcrenXDmuvQpEBTQF1Sq1PFuTFJwp0vZc5uy/Ao69uQ9XXMj8fnUdThppj4L3vdrQhOmz9yE7k+zzufgSYFCk1dYsy1FMVAc9zpzSeklNXaoSLZtBDuhjOJcVDrCE4foRofux7Bae80MF1T/ciJRBAohCaBusTPG/QyPqLD6roioagku+MQF9nfPTcun8jcpj68nrbhQgRnXXcNoBiVQ/ULjkKjAk0BdZ3DbiGwQz+0SEpZn47ouQgV/cgb8fhEtphdzGQ5SY28EMlNN7jQeoubrv6d0KpA8acu8VKTng/XJ5stSVLKeqZJjx2i5CGHNSkeH8l7dWhcRxKUxXk4gtMeXPATRKuux74NmhUo/tTt7LZj+4Rar6rhFSllHTbbZayx03XEZ9BU1f99ZlTaN2B6M4LTHqvToXDp7ze8MyNbwoZ16enly4MdYKMPAGKmLXWJC4fVJJ+kz6Q5KaWsR5x97NI2UmPujMdnsu0X4zeZeY/zHW2RnHexCU2Wk6q6p2dYI8grTd9YnYwUgKrSden78AGlgMy0pW4HzgPNBlc1LJNS1nWHi2JXu6nMV+PyoRQN2Slm1QQxsiqC064MjCGPK1UfnwGoZONG2670jampOcmC0r1gRAfsS00VvQ/UTWPqEvd0qdmofZoX1+h1KWVdrlNxAFMje+PyqZyo0zGcq00RWdeifg0a2umt/TtmwFe/MXmivKgr8XMAUDeNqTvVRLGLZUgUFnxZUmEH2ikUnoKoy/+vuDhUEhuHdXj6oPtAJKct+gTtsELqugwzwKOSGoq6ZKBuZlGX9K6HYhOo0OYuv1ESK8VDJJcqqG/oO3H5WLb3W9SMG/ZmXUTd47YOHcpfEdlc3xQp3Q9U68QH7Js11Nn2MW4i28bls5q6xFfMei5hJEGPx74rqbALTSrkDkXrh9zO+EyHfbRATZL0wI5yd6yMyEh269DqJP3QhzPAiVKe7jWomwBVafoxX4M4I6Gjf182ovtNTq7Om9XUbbNrSSbPD6KO8hyQZOx2mjWkUsZYzptNH8fngxl04j7mTYc5kuCapWYHikJVn13w2QwxA9ViqDZMeH95ec5Mpw4NYFPRjwj9b45tNlOXOB+nxmQy/8hIp7Q4qaf7dQTnx6x7Ly4fzPUxdoXrS+Y9EXWHO9woR6Z6dKRoZrTJ5dUhoMoTYZc685hbvpHvOjPuoWOzmborLguT9YRZDU51SYuhTNL0Umw6SurvrPHxVBQvYFe46j6JaGi3bIGK2QMsv+fkzGiWtlCm7NhMpm55ieAlWs78fmycxdQltpn7SD5TMlW3UlJhDw6pubxdff3z4/PRzBvSodRFJHW7YXsk533M9E1JXcMXM6RhClCV+H2/dAZTh6Hb53Un+5bPXuo6HaMYOmTsDvU8Kq20a8N6GSlj8rGMdsclQiUxydqlYsy1buB2JMPS69oBHXK69o3MkBiVklBQCdRtnJHQVS8X+VXQj8vyWUtd4iWzXsBObZY2v73D+Uc8fYAiVAbj89m8XYey0qI14s7FEf3eNGjRvD5Vv+DBGdE0U8OnLn0GOlKSk/N8f2GmGrtJpG5nu5vPW06oB56RVtriBhW38QA5VByfD6d1wU00e0DfwYKIXDinRuyHmBiVoVtA3dRDJw4u3YBdQ/tmLXWJm7vVDHXI569U90szdksNVsbWKUlC3au5Hp9P5wsmnpkg1VZnRAvZ59ep0J3r8puWAnVTp3Q/N5U+HbrKk0ndrSZ+RTlBUsMSR3atzj4Zu5Dh+3WPxOfTudKjxZHXup7jEZ34jlnHdE273wXqpkw2v3OQJdPgTiaTusR3BigZn3/d2CAtJHibxUGx2dBJTVN8HCqJD37CrnfoiyzY5Eq3h9kbRVc3D6ibIrHzjL5VLvUX/DabqPu0QU3ymyyqBxZKLA1vQ8AkpTUvjNPnU8WGqJCvLohoMFlUZ9Ez+ycveB2omxKxs//VE95gw0tz8mYpdYkXxwkuN6aMPN4t0bdwoVvFZ9ocis+Sn8TrBjZERe0ZiCjt0ut19chMqi1DbwN1U6F9gUzahqCTk/GhblL1UYOK4NfZqZuqpJXW2cRlQSIP9d5+LiEuKqqrJ5kwbl3DoxGd+J06ZveDvrGepQnTWyLq/B8goi5hpmhd4Dvayt7MwYTZqW0qLbflKf3X3rRTWnHP9nPrW8m+utY43cP7dWwfUzWyKKIT29oZy/z9buNzQF28lc0Gj2b4ea+Gu5uMWYrdiQ4dv/OpUu+8Ia20vx4woVV7TIiKpfuv43MLz9l7cILMQ6PO7ZGc+H8b8IoLXX8VUBdb1WRkZAc/ojLYDXHGrjp7dlK3ZdTK5V4nlITb0CmtuB8yyRzwlnYNbXG6h06z9RBe7mAYezPck66/fUJXz3pv/zZCIwnUhVB6SDuVEdSa1cy8DnNkanXeJPGactRsmy5JLO5AO7thEEEqR/bG6R5++YkeO2K/3785nOOXFi2bN3d0XMP8QsiYLbaKgbrYKSN075BdvVQd3BImJ9fMUmPnGuUCudA8W69EY7eyg5941/ee+1GcbmKhWcemOxu5HMowFi+7dOBercdk59JXoH3Vz5l3AnUxU2VI6rjkFLbgrpbk5MpZauyeRnN2XACl6qtSjd1m801u3l039Gyc7uFX4w4K4YMiw4Lg03l0flujddxgtfM7s7P5XnQD+W8CdbEa1IX0hHCulJzsELZw1jpUtg/UE0JgmLtboht9Z4OGGyiS7qZ4WZC9C9BCO7SfV8/3/B9xsri16pDF4xmtJ7kdM3n0ZEripY55QF2MtDUkLpyp2xrwiIMh7njGq8qsVsq4TqbeKdU+ze9XcQNFVdNgvG5icT8Ogyb66ibewNK9/1xVoe0Z07yGqqUU8u/y7JGHXh0D6mIj1pBlhDZ1QY7h/Smz1ditbKBkQjSm2yFxZPecxqPmS3PGy0vxI20XniqkznZ4XbPzD8s2V5i6PKZ6Ssb+GLD/MEuEMHcUMdpRBdTFRukhaeFMXXWQUkpm+8ju6jBFog4aYwj05hMSizs6RDE7h6MFOONkvCag3x7RqHEI6LkGrpPc+eCJwUaXx2H9CecuknlZOJy+gnRbPQbTsz8C6mJp6oJRVx1G7AnfxZytbsw//IVe6HGRVpPU2e1HmXBMpon3DS2L1118VHcTh4DqmuYi4va2Dt50NWtxr1LGRt8gC0cSYt02tP/93BtvHJ7OX9CMoi49ZM+Qz760LkgxefwtHZyd1P3LxTFScGPqh6ROGZ9pOMsPnCwDW+J1G4+a+/APh67r0rKFf+zqyh8lZOIRnMzbb0mQo9qxdtWNyzu2TfMvaCZRVxN6zMbdTk7Qgvh0gzmztIv5yzoVoSQweSTZbJfa2Wpr0JFs41aZF8brLq5YrYQSeTIptecrzZg4pqMrI/nuJTugo2/Tre3y6C/M39s5A76fmURdSUgvSE14I7bK5HBM4gzWSbeL5N3oNCinJZa3dMDCuitIGTUUrwiVhM96jIR395HdzpLk3Sg4Wu1l7fj47Y+fXhWLeY0a28FUrPTyMN1tGeXcKZXp62riTl22LT3SGuNqp1dytbblBTpoa2jfYzl3RHnQywlZQLfOUmP3Wb9a8KZT2uNSZ4yXDfUxUR9o+VB+XJb8bCluXXy1nk2+hI2aUjQpJ+PeIOtHDe2WPfMe3hGT7tTBau9dBlLLa0I1+UqfjQmqt66LI3XZ5T7bb1XawrrTdVu9N1zIqbT5meHOFt1ceYZYeX6sYV7QKwoDu9naxdxmZWOgZXgXyR9KLO85dz4ze4DmAVUdk73kZ+fR+ZvPm/LHrIxTSEnKhMxn7AZf2NSpjRZX7w8qLj1eHJs4lIxKf1tZpQaBqMan7XLNKj07PtT5vX6oqyO7U+2v1lt9fmHy0v3enU9vUpiJC3HRnNnexUw4jY0dtgvUOavUZvmHOjVX3KFR8+Q5VH50eNWHF35i6v07y6t4roKUiea/6X+UfMfyVW2vtnFwWXGslrDWVAZqYakBOlfZWwM2yuAtP0bUZQeiojp4R3NddaBqb+VrXZMa8CCfepWHG3WSOtu9mAlbBty804Ee2Y38UmqBF5pUHMQq8+bJqfTOVc8+oGnOb9YYSVJwl5AyYQDHxKHISLLeYnD8x54bH8QQ//KcIG3sYMRnJOesm2zqMoJwEWSIlV0ZrNYcrweTk8OkLjVcloTt+6pnKXUJjzToZayhUBKk54DUsVin2S14NjqKYl3d54pe//xRo8OjdR8n2ezVJCFsloIHlTj/+0+sY/muij99dCuW4c3ZfNspSUfDFpuPGavMDnxGzlYb0zXLzjiYE/ycmFLHB4SU52EvkNfOdwE9Fhl8Hbfa0J36jgttvlX0r7yJdQ01oFyXPNsnyhN2NtnZfpmSbrcqs9SRXQKztxYGT/+VAzH1uBZ/dGmPptej1QgT3kp2okLp5cQ8ZBz9+UDzgUvLimKcGYXfu0roTNakBhjH+Jzh3Zf06vOV5E0edZzFyhG19XU5oa0d3x8Uqp2R4we7ENQJUGeEHWCZlzzrB3YJVT1qvgETZH7Fv0gs71e/aFazYyylauSHMarlluJlmyusjr9zuUnGV8Mki+DimZneJcmP6egfD42JHsjFflTJI1Tu32k+sfnzLbXE52e7Rmw6cvImi7ps9jIl2f5eDexR3OqvZl51Ts5h7igPuyrL/fswa/z1G0P6cJJn/cAuYUeTkRuI0U1X3X9UaoEfDN3EgVgkQVmHY2Bsdh59dmGjw9NsqhfI4jdH4dYOEITxZW5/sP/T9dGkRJ2sC9BH8sLOa+lYxkT3g9+WHwA7ydT5h8774v5ylHB35HNeTU6gzqlgyQKZstRwXZiiKYZZu9wnIeGLcYrkwzeo9rmSC6xoV3M46BquSvxN+OCRq8Zxh8lilDH7MmBHCcktlSOxK0hJ1Ftd2mbPazgOmvRMSlyMf0vnC5D4Xf6MkiBEBFnmKZU67hITSxfzkx6epfOBy3vUFZq6CEhKnfUzdgkJexso0aCIdK6UWmCxk+3poeUMHVEv+Xnz8HuPLBwd97g0jLOEXZ7DLx5Q8mbOaBlrv/di23t7qwx6FnbnJCzf4RvqxIAmr8YotCp+OZl/prJz/J4VQ+q2BgahPAjxQaKUD/pxqIRFXU0E1Amd0eTs2Urdc+82U5zlIAi14WPJJS5EswfYfKp7iWi8okvPvP7YHo3WoXUzu6fL2AlvknWfEPyicOOoYcBa0fbC3pPotM0NbIZM9YIfxvxzKvEazwTuY+ZMhCaA1y4j8HgwJtSVBzu5OuC5eUEu6vVLkR4BdRkRjNXSk8P2vMxcfdCh58dIdKM2SzZ2nWYNv4pU1R/pSobOotOLKywGz/9CkwOET4AlH+ulJMnjFsdA84Gq06f4seOvxtgs7NTo0JkYf0rpwdq3uDFWTzAn1YHK3BqgvxYb6vKCNl1bcoBpMaHnWxP8NHFfOiR16RFEjGYkhz3LMHP1JoWMHeeUoIalZ1+Y71RxhFCW4Qh8iTv3trY1ugzNFjcLrYydk5N5oUcP7zT5+SbV4KJT3oUXLzDicG5d+7nYZiHKCz6HtG5iuJRAYsCpaC/LURlr6lKDDCoTxIFX3j3J9ODXFCYsyyPxphyMjrr0WUtdwhtONSnMHhidkue2n9PlUzJ+l5/wIlSeO3P0/YXEuXHH6B+91p8y3UsZ37FEzJ3VtvceGjzxqR+cH+nQIaeLjDjvjG1gTGqIZSrlJdWpqQfL8/wZsuxw+lL+mqsk6mwhoN/q3xtZE2KyLHtrtZ81EyGpS43AfNXcAVMHtLEzmUgc1YHiF/Xmq5JLPDqk5l37xv7QFG/fu+wdd++YS1NPor6jaPwmrBtgrJzMjhIz7HnkhQBrwJ+zdvVhOKkFb8TwI8qIuM8jNJ2SwAdlBw8TkURddYgQ/wBdzK3he/gjoa4kkqFa8h0wdZCQ0PpVFcGnOyCI7luSS7zWo+eoCTEZ8dzbn374MdXbZbIbSVH8skx4gKMs6R8Fu6W511Jx6fTbQWbjzjhvUzgvrckcw4WrqRF71Q6G9XsdfGQnhTpbKHpq/F65JroGH5K6ZKDOV3/9C4sowYG6R/p01w7ny2x5JKHvCLRa9nrx65fecXf1WjVGb3eJaBjHrJaTUfXW5jFt4+JFRddDXPn0J4ewddT11MdsaJcRcUBudnjrVTKChiJLoa46ZMNN9jew2xrdkCq21FXfEdQl3GjSi7pz9d3SHYCXkENFyfBDWZr8jMA69/6wba7VkG+yi1yTMh+XJYMcVa9pNrga2xaFF1W52fl9PAQ83xGzrJyVETcDW5jNTLweoCSG1GWEjm/2N3eQHWUMZGypS70zqOvsdbNrrpHzQm2WvivP0h4LXnOD8jKbfZr/maOLBhu1A2OWs4xhE7wnMmwgZXiQySyGcGsNzbqq1vCXxz1n6sL7C8Vu1i47cqeaaJlMmB1RP71XCdSFYbNK/AwpbVFOlYWiLiNK6pJnM3UJm4fVorwHZ2OQMX3REDtjjXqLdcIc4NtvnHiUcgw0051KkhSP40hSvAkB81+9qbfdOji/OLIB2o4hNzu0s3Rsj8mnY4ucuuQwG8665OTA5kUCdTkh46LL/UXGVEbZ3oG6aPR293GSnwwj9JI31kpI+JFpjMvJQqrb8ZKfHUdPDL423mVyv+bdkZwgGlX7vV3t7nce+zQKbk6M6PA8et8AEZPcLVsj7ndlhEtdQrD4lOipyxO/k83E/6cjMXmHJq5yTY30xwKoi4n2DKhFkR9uj3T/316nMKmt6lm2/fX3r37b09X8TzKSi6dkrRvplbwSvVxvzW+3XHvsjZVRMnOxSUfixLTOxbH4cKoj7neVJ4frfykJEowZPXXlyRGpJOIfC6AuFkIx0GycI1qP2hCDvbCqUEJ3bj8Bz395BrR2UYwXySVdkAm0IwzrLWMDo3MXf3BLgpVaatZya/xiMmuXHDF1B8N2fh8M4k6JnrrKyKhL9gPrFFKXfqdQlzC3Sy0EFcssvdI3F99u+DZPGFWPoyplopx5ws4mJL7sIaN1rGu0YvFnxVKXx32KIsPQzahNZuk51TMipy41bOrKkwO39OipS40MupyJzX16UJczy6nba6aUSpIlg7zpfES6Y9SuIURJbplALbYLSYrjmVGXkwbEnt9jqmj76PkrsbibGx06dgfLHs+bU0tdcviFx466EJQxSWW3MiM9ZsyXHXG1o6fOFgl1qbOcuoSL40KCcoL8p3xpI7ulxS98YRGCO4mJ7hPxYnC7q8dhHzzxRuzSnHyvh0nfIpOd75A8DZKeHLE3pTrs5lsz2dTlpKYeFPiqidGPRfTUpQN1Ir3S8JIw4CJU5vejN3KnFlVVWA0uFSns7kHKCMF3wts69M7Z5l6X5oETq2K7NKezwcquGiRGPo0hdWHOHCSH33wnm7pIGi5QF2+9qWvGCV0xFFZXVCO77Q+fGPye1uBAccyipTncpiMkhyDmu765663RBx67vCP2ydl/uUDNZn52SQ3IlEhdTdRmcUqpywPq4qH5zj6lsPFU5BtrPVd0+cajVHNvvuW4yGtCeC1NlfEL5GR2l6PZuudP3337zcm5nSqnDl9a1/1u7KgLc8eLkvCHgqnTlLqYxqZElver8k5YX8cNxW5bxbuZukZ/Ff65V4pfqXpH43A0a9iUtiS3XEAmyp7HRnrS0I06Qq4ekGy7HQYUCopm7YZuxIy61Mibb/nUUpcTJXXlk0RdaiTVmP3UJTyNF/yw3PWZw9wdpPP504MXtQ6X9j+YjiSzr4dSJsQ0453kSH5WbtTVO0aFsXpAqnb0s5Fh5PGR/yuloPLkiIc7qclh/7inBp5Qj40PM0rqDk4H6tbNfuoOG+zcdDVyPDbrQvf9OouXVTX2drms9UxOMKELKeM3RxWAI0mq3jXWS16Yf2pnPO5n/gIVyayOVZvMUi6YkRzxcOdg+OYxdTJiU5Kj6yqmBlsBIYm6kkjKTb0DshUJajOrhagwQu0MbiHOHG0d1Gt7tfeya3S49XRc4jzxinDMH0lWXHvk0/jtkvqxmY3A1g0fihV14XW8ysPv4qUGNi/RU1cSXVcxPdgKCEnURRTkVTL7M/OJVNRtJEQba41XBDpwW9Hrzy789rkBraaemxGQCVucCxlPSLFLhf7bfiKu9/Or/F4V9t3o+udJKCc5eFIhaeYxNfAEcmxiUyJwp5QnRz41GR51ByOh7o4JTcFa2KQWORzVDf5mupauPP3IHo1nuNmON7KSeefPYxJryrx9lvxo0aV7M673s3LkLMVsiUASn0hIJV8duQkI3zymTsb6uiiNVkZy5O7a8KiLKMflHTRxwLTSJjFBao+vsevc23rpwO38dhfek1jsMxHQYtbG4Rco42hzr1vFv/uSeTC+N3SiA+8wRKpdEvawrAyQ8TjMEVJlmEjHcC35ushrPOHHIic7htRlRGBD8+4kFybSM8OUyI1JOU8Jb13Zu6jKaPEYrEZ+Uk8mQo702isVNfR/cHs8rv9X9Vh9vcjcDd2K7w29O9yHfxp0TRWxcWKmRn5KdngNPYZ5U7zizKrDv9OSKGmNION6aJQy7iQXJtLRfpWwPxVBDVzDL+/89MTmAyZP/u2XSWHRnJcThX1JiQNbSKW9udtRv/Dpo50JCY99tY8HU91+Lb431Gm2HsJ17BuaH20hXm04PL9aTbhdzIwgtkXCWvKS6LyYB6OkNfSagpzwe67pd5QzBWmugVIKKwXIsQdPFr3x02col8ODJgeYfePwojhSlFkIJ4kl8T5yJGFvNrhGn5m/il0GvnTMyi5kpf+o6h6O7w198Alrkqn6jqiHdiWRG7vKMJtv+eTkwyxPjmoSIC85OSrvZ2jqIkj4dDCqyYuZLGbTA34TRrX9XAXRle+6TXD7EQueEpJdUMDtkIA7cvWmgWb3O59/tkNU5nynjsmejv5Q2h9si+8dzXO+hG9GpW2IdtKiPPLGmBGmsSkJEq8pgbqaKPEpiW5kF5q6CFaqpkY1UR8bJU6JrqtcpAirQ3a05QCJJ77ZIGa+P8llYeCyDpGWdsPo3A+/u2Obd5lJFg/Fh2Oq+p+N8y0dGFax0TbdB6IsYrnXdok5G8I5x8t5H/CoDfwxx4IVEaAAEXW+b+3zqnFekIquS90n3JDNi9Z94X5ApSJnScgjQn18/IddGvfmP0XUJf5z/yHv9XCkaJ5bRoh2Isa0sWEnhMXQ+/PGP71QdNJPmZ86OV7p/zVNnfG9o85+ixpf/nt1n0dZRrp3mpHlkTXEIO3nGA/G8thSVxpujW3eb3unMkqPnLr0UCwF4nLCD1FO4h1DXWezBsGFXSrM6nJ2X1SZTClMweFIE4IdAlq0Dsf5zfNf3BKo0LkD3GZdSlJlrorzLX1Up8YZWmT1IytjYezCswFia1MdoNVvyAnWFKVQ523sAmOHjZstgLETvSGVun3hoszXYOOdQ13ihw16NtiEXyjAblsuJGDAXhPmoNsORy914dkHgxqwIqeR3zWINPYXxfmWLjTo8DyiPn/gZHRF+CTdSg3QiEv3pfsndWOIprgxMdbUbUgOB7v0CcWnhodd+b48/xdLDQVTkP62t/lfdwdRd7jdzgd0keJuppKLppRxfku71TBOXnj66M6QhQ6ilO44Wx6p7zqfFOfB6ti4CveRdQ0fR1mGT2Ms8TdSWn7Ma3xWGrL12oIzIYk6n15xco6fXu6G1IlXz/M268kb/VWttMRnsCi6jteYMZ2/6nLhkOCfdMnUdTCnjrrENrPeK8GJTJQ9j+Rz7dldvQbNx++v2h4eyuaz3Cp1mUw3tCzOt1TEpoOWEaqh96MrYoNPY0xO922Ny9PxIXn+e2t+sOMbeABDFAF1x0L/UCTv2+C/wj6+Fp8+ZnL1BFw3bMS19oOKt4naKB7S7ksOy0uyIdgtzV7qdjTUi8OWSXFuIWz96i2G9vovHntwR/iFPuJU8RhTlu6lcb6n+SM69tpnP9kbXRF5E9LZpW/w04S9+orBsSvloKveEGowmbM8uAPUiwD+/BLfKu8TEZF3LCeAg3PjhJRiXlXP2+jnhjb66WKWlnhBaAtvYGcL19U5u6hLXMwEL8oIPtSEEJJ9/W29VetwNV5adCuyXuLSgdvIOYO3XlU5b8T7nq6ZdTgKWu9pvx5dETY/OZOP2UpLEzeUlqYHGKB5nXNsubelCTHkWi5u/fv8HLOhJMTA0bezyDBxLL28tDx9X3WQWYWNE0/bl15auiExr3TdsRK/vyLrJlSFhTPdjxezJBwnVGrinUXdtnPtfVxGL9GkOEnWj3r+zdRY1Voche//REefsIlBfcP2ON/T0u4f6LEB15mvRllGaU7ofK6+P+PrxOdU23h2lpdXBwNKZIo4OI750LHOh43q8onGIa8kdLJ1fyZlYxiJa32qU+2VDDCd20zB5s9Nkhxs5iUnMu/prKGOHoX16rz3kSMIo9Wjtb7btqw4ys7hdUszxU++q5oejfc97UXpoJXoTvRRDytDNuKcdYEcFrypSU8vtaULBiM5p9yPESvfWO2n9OqNHFh56fty/B5g8x26hUoCfcw/ALZQPzATnLjpfg+z+e8QByGKM5rViXcadYnFjmHjITbhCW2b6q3jA67Gqvl7pcxvX+7X8xuKKPV1p+J9T39CW3sxAZmajrejLGN5ehRNuDxYC07dEHS4NgHr5ROcoz7gRXT16oB+jQ1Bca22BXY9ig/L8995DDbfuXEqTd3UUpd4eGFPs91oJIzHjW5tj7Zx8eniLRKLTDpgUPMhL5Tn3qR439P5Lj3O764y5G+LtpANgTtfGzcEZDVQy0/12+qDQIXdf8HYj6DG1UFbtq06IPrpy8Nx8k7sOpeG7mIun1JTN8XUJSb+YaG92aHROm6rFrau3BKLEm+ZjXgaEBnQvrpF8b6j7d1uFnpdv4TwmA3H/DFUUh7M5bbc5scS5GwsDeE7DwRVJLYuYI03hpyEXrfP3xX22cIzjyV+7o4/ojzQNcun1NRNOXWJiWeOftb6wqowpsDD1cJuIfMfae26Eu8bah3gg0qHXpBSUOkxrwZWMmE45a9N2jaWeHk/gzR6WymtCeSiF8vZsvwdsAG9GCj2OD3V25EZXtzHcpv3AJM+L5gjxLYvxC/KhuRQpqw6DC/nrKYu9sbGfFZYkhf/cMzE59uNbLyN2tpxRmJhdBsvT08vRf70CNwx6KTy0tK8qfj4+Rovj/A3prQ0HVU6rPPyStel2wLf38YQE+WlU7baYNZSl/hYA7vmRkn3Mo8PrYzrxXd+t8LCzf6TuoF730wExV38xH+AuNTUKYt7nr3ULe2ysF08GW1vDAfid+XOTy/944DpJRnJrqcgv9/RBgxMgcqDRp6UBovEAeqi1LKhPm5gpyRUdZfj1LN9YbG6Z2CU2a+ZJNkFS2TdG8DAFCg1jEUW6xKBuhhqm7WZwsvPmf1L8q9P/iVPnppnbO61EIdEqQNRvA2lHVsKDEzB6DInsLErjXAFO1AXnj4bUjGLYRmvxs1JT+awrfjDivx8DSkTJcbl8lSrzM8CA1MgW2BjlzrF/cvZSl1i44BK2EpSY945iZdauuqRawPDLoLikkfIhOwTKBDaRJwEBqZAnB8zLwCPpYlAXYxV1FCPoyERADfNg5N1nStHHztgMXiOU4Q41QshpHoh9F3vbgMEpkDcAiTfRQWsf7M8EaiLudqYVeVMJ49u/R17J+MaJ/c+XeHoHSVIr00WRPsxyAiKGncWAwFTOrTziT85NrWTBpi6pNmpzia3AIPac/t6zK9w5kRF+7CViT1TioAT54Sn3L09e/YmgaZG7Lq/nG+IX8SulJKprdlspS7p8/4+IRuLamhZTAv/VvFPv3A0aQlKlHZCMHlKJt0ZddzT5R5c9bvISy/IpP+sziycks9tSi8elQJXlnNWil76BhMLVvINoG5SdOUXLorfYYu0DHTGDrmVJ76wOqx2imT3ROeTdQqijNb8sQdaiyItOy2N/pOZgh6lyEMenW2TR3sT8l1rU1LWlk08P+yLy23Z0+ObDlLZP8fYrRZe2TjR+gF1MdSifiGFCtHXUBWjYt9u/eJ/GlxGSpxBl127znc0KY2h68C8vd+KvPSUlEgavi1lSXQ3kZ2ZkrIkk/6TUhA1dUtSbNOeOhY7gbI/x+vTk4C6SdK3iHwKbzWJ+oCvOoukF/m7va0Xxpoc9ZSM23GBm5UTdTDV9q6x+kuntkR1hcioky/ZFeTd3fJAxmj3kpRKOWMrl6Ssj5i6QvzeriXyKfhWC+URUZe0mhnb/Q030pse0M1i6pKODqlJPv+Yvr1C8ljuxDV3+7/VUyTrOCG9UsVjc0fVWwdGN7+yPdqLREZdtDagMmUXC6RcHrmtY46YKvm5ePBPCrtUjuFBXc70gG42U5dU0aNCU9bIKCll+rr3pJR15vID2nGr0cdv4k0dRVkGDBd/e0vCZeJC3eqUtdnBm/Usoi4JZ6FhhnYlTLqHJKBuMlWEctIS7N4DlMMa9ezBztcHrT3aV4VwL257L2FPFPqRZsDTeKP4iqQq+1DHdRLlhXR3kH4sT0tDj1an2XbzryfJdyfttqWtZkEqTMNvFsrLUmxyOXPc+rS09dliU7d6Ql81LW317onUFfIvJ6Fr2AqRdaxMkcvpuvB144/ZLWcuxXoUhUfiDiJdkyT+fVypQrl3DenH+GZweYWim+IvLj4fVZaz2bvluydc8xt/w/YxS6eB93L2U5d0yclmDkK49A3Nj6qQW8sW3jZ3udUkn5/ay9DhHRoojaPdPe9xyY5SH+q41p+SSbe4lPXI/ZGSll2J/lnNvZ6UklaAXljLNM+16CHykTDH0kfTzZN5bcl60UV8TJ2cPSvbm7rCTK4ImnTmGimZ2bhY+n18jPjUtBR8+QK+ImUTnTgpKZXoWFGlMtnTljDemdVLmMer+fJsopviLy4+H1VkF/tDsivF3yzCseTkjXhUNz2gm93ULTVYKaaHyThV3A07Ii5hx+lB989dt3mPJZONhe9TypiQS5IiPMOjCy8fjkGNg1JXucQmpxtlZeVqeVpKym6eusqUMrl8F/O4LKVsPTpGLti69SlLCuTygiV8P4wuyAe6FHSWbS1TgsjQLmFfxrMZ9FVX01aSNzfMMV6npqVUrl2Nr04fXyZfX+nT90tLyVxPVxT9EogqlZmyhL4xeQHDd3YleiMtZUk2U17levoOhJviLy4+H1VkPVOBpN2+t8b1qfcxtP35sWnSMGc1dUmL/kLFuhjp3uDN7muRnX34hc0ag8POxljihaokv5El66ehCOv4uauLtsemwkGpY37HC5gGSf+zmqcOW6NKhsNCjFGZ0E1cm8K+lslDlul90bXYUGQzPU/h4mV4aiB7CX3B1dhCJcmFoRVzjNepmBWagDL0U4BeLvQdlGWzZYgrlckOMwuZX5LdbK+RKY8df4puir24+Hy2IujubRP7ztNSs5u6b3E5aXEg8sjRCNwnD7dZmwxutYzJ3i6TiQZz7JCO6Vm6HV2NN2IX9BWUukyh8dH/pAnUZfs6FVjTI2cY2MWxle2fuvWcgWAe8BfP5iYDy1LW00iv93VoYBMjPjWNnf1D5a9d4qf9l9HdY/ZwUaUyubILhNlD5vbSvGcEBVPsfT77SaWJ7xGom0pdHlIR/IYlakd9mBPXh19vU3UNayjSd88hbrch3LNEM3NVR7fEsL5BqUsTcPOiLlPkypOXMaM+gTraYGQyErqYKSk+/b400Rv8xeVoHh0JdTHFp4io8z5VXNv1S+jT03xcG7vpwVhmgdynUrxbEv8crN61lh1N8r8jopvCB3udzxyWnbIWWcuyJKBuGuhiu56ftCNvdrSGcUrnqkuvec7ZlTJSmCKQsZsNyVgXCv1WvWvcvfmVM7GtrlTqylKW7EpLS/NHXSYfrujjwwxFXWbm6sipS8peXUbT4zsHv76gErlFvCrlRR3dV11blpZWJqZOfFM+1KHz8WHIIpelyIG66aCV/f/AjsWQRrtDeRm3H71BdBk0aJGQkvQ3KceGWZoG8q8uK4p5df1TVxgudevZ4ZeIutUTf/995utWc921QmQv+IvvRs+EoV+hP+q8T/Wijr3QxFssXJKy26tSmVzZNvrVAlEHmi3P66bwxb3OZ408XZUla5OAummhzWYhHFOpahoMitzjbTeHuy0kxW2Ijnd9FQWfIE8KRTW3W+e23pqM2vpQZ8Mjm7RwqWNtz3oRddlL2EYtsm+VfKPNpm0FfwTjXRQunskOq9ZnszVAx3tT532qmLrCbD99WexdyUyRe1UqkysbdzfleIgnlOd1U/jiXufzXqO06RIZCtTtNGuYbiEOmzzeURykY0m6XG7jIZloKpyZGxAFo9DU2Xu7Ln5+9HeTU1vfWfKUJXTTTqP7euFRh12NhdiRb0OGaDfyLNJtU54papJcHGbSauZIG31EdlLhLsYECheXo7nBpN1lqBi6me/anbQ7bUkhIsyWlJ3N/SyIThVRV7ikksa5DPlYsjO5YNHsSjS/ZkthPCBCpTLp2ytkZuB2MVMfDGEi6rxuir+4cD57GF2VlN1A3TTRn5x9Qh9R3XXA70H3r3zWyHQsechI0Xw4MxdOdzjJQ2c93Zaqy1cmrbK+EWF4brogM9xxXSXdgmlLxry0m3VK4DK8Oppounot8kXggMw0fERloffF8YQ17t+xM9VoKn61eJZcfKqIOjyTn7Kk0Ks3WIYPXp3kVanMlPX4Qqgu9A/C2sy1KV7jOvFNsRcXn88ehn4YZkqbTLh7tuuk9i2KxNtRyghS1X96whH3v3ijwtBzL0ERMtFCcJIUepVoYYFMbTd5mi+8/sRkVjYtjf7zNfTnqbQa9ML6XQ+VPXX317529901aU+hF7z+Sfsa94c74Wu7Htr1FC7m7qeYx3ffXVjw0EMFT3lf6Kmyn6Wk/KyMfbUm7aGHynAx4ovX2PiXccm25cwj+tUa/hjhVPYVXCH68Ids6HlZynrRVemaFDIPhUo9lHL3cnQhXBfmYU0NKoMrz+um8MXF53OHPSS60DTX7Kfu7lV1KsYDiSfYRs07vd79y+e/M9ekHX2Z5OfivKKb2fQMBEWahl3XThTdDYpQP1sS4gCauphoyc/uBuqmj+b26AWQ+syPCu/cc+q31zzj1uMkb9TEeYcIks3PQBHWnvyLJ4ruAYYiVmFKWXyo+1pKAVA3jYTS9An5hPQdbB/znudPvONqdxgpYeKbW6IgxIChyfA/Otobv/Pe/UBQNFr/0FNxoW55ZUoNUDedhGcPWHck5XY+TL/2xPx3tO1aIyU4TpSMy5LkFhZg+g79Y2+75cJ7nYDPpCkW1BU89LMZZOruDOq2d2tIIWOe3uK51HrJPU5bOXZejiTwjDiJwZRxiJKEtsu08PRKIGMyVfCQ9DJ2pSwpWA7UTS892/+SaKpbbzeMG9gFc8wuIDLRJLhoWGcdfmvPiVuABQioi0YnXR61V94FvBcBKc4by06IK0lm97njmrHeiyeO/iW0EBBQF6Ue7PBNpCeijn6oFLYoYFaGe3pevfEi+E9AQJ0ULWxSoUlyPHSTEd5bXhG88wS9/23TuL3t1E5oGyCgTpp2mtl9D9hksTKfVF9K/BL1smm8eU/rj6FhgIA66frOkE48963kNy4n+W0KKOIHBsvc+UXQKkBAXUz0O61HTWJ/JRPMLGMjT5g+J4lCvqy9+Rc/fB78JyCgLmY6uoDirZp3MlkSRVmOmxrnHb0CDQIE1MVSgw0vCfuoip0plPstx/nFl++D1gAC6mKsLQ1aPWviZEqOO1Lt9jjcz7wCIV+gOFJ3z52jVR1nKZnXbB1ZbzVYr86/dQ8IFEfdSdTd0/pVu1pYt0rZXYZze04UQSMAAXWTqMVNo2yiPtL91vgPrp34NbQAEFA3yfqua8BC6V/W5o+7L7Te+lf4/kFA3eTr1l/taWysuPDIw0/Adw8C6kAgoA4EAgF1IBBQBwKBgDoQCKgDgUBAHQgE1IFAQB0IBALqQKBZR92fgUCg+AqoA4GAOhAIqAOBQEAdCATUgUAgoA4EAupAIBBQBwIBdSAQUAcCgYA6EAioA4FAQB0IBNSBQCC/1H0JBALFV0AdCATUgUBAHQgEAupAIKAOBAIBdSAQUAcCgYA6EAioA4GAOhAIBNSBQEAdCAQC6kAgoA4EAgF1IBBQBwLdkdTNAYFA8RVQBwIBdSAQUAcCgYA6EAioA4FAQB0IBNSBQFFof1ZZbYC35CsiLaxwE/53U6G0Sq3IBepAs1e5R0pLA76XFWlpWblhnFm7oiAr60m5F9/7vcnPUgB1oNmrFv/2bFNLKWaHeRBT6kpbWgpyc7MUWZtEtVDsB+pAd4wUcv/2qKwQs8M8mJO7yccKboqauhWKXMaubVrTwpTMUF/WIg9E3aZcOVAHuiOo82HH96hAZ4WmrhRZtcLc/bWbSo+ggxR+jxRRJ1fkAnUgoE4KdQi1AoVCsaZszQpFIVAHuvOUlaVYk0X38VaUZZXh8dum/VlZT9L9xyy2h4keMEc9Sfc26fcKCufwz+fIC7LK2HHhCuahiDq6yAL03v4nmVf243cKFaVznlTQlo4eydUqcumSWrLoK6xAl5uzYo1CUVb4ZBaiblOZQkG/WJi1RnEkC9VjU0GLouVJunO6Ikv+ZIviCK5uLn1KVil77poVQB1o+ksuV+yXb5pTlrVCvuII4kLeUiCXF9AjLmTNGOroB8xRhXNqjxSUynNb+OdzClrQaWtoEmqzjtAP16xZw1FHP0TvZdXSnDFjwCOYiFxFbS1jvLJoQydQl4su9yTNTVZLyxEFendNS9YRRUstT10h8sGUKeiL5SrWKOhXGXOLmKP/L0Tmky5LUQDUgWZKD5PhYtMR5LFk4JDP8aKO61FuwkaNe76iBblFahFpT65hPCRlXG8wV1HG+GTW0IaOIbG0hXtjzgoGwzVH5mxSrOB6mIg6uQK5VGppfhB1aBKxDB3A9jCPML6X/fSTXMWRTehRATptDf2wcAVdJnqwaY1iBVAHmlHjOgWiR/y6L3XYPPIvrsHe/hVH5tQqcH+vVqCulvWd1KL3abPIWqH9itpcNGbbpHhyzn5ErUDdk/jk2hYFtoTo7FyOulLFk/gCR+hj9zOPspCpY6c12AelijVAHWiGUFf7JN1NY2xMbjDqCguO0EcJL67JQlqjoMkI5E2hD6xtKaUZYYNV6HHdfvpxLY1JbQs6WKAui0U7S8F5U+QCdbkKTrg3ik9UcNflHigUQB1oZlC3qYVxpYSijrY3hWJbRw/usIJTh+zcCt4G0UO9lpasFnq01lIwx4e6UtZu+aUuKxfLm7pajrZabAqBOtAMoW7/EdxkQ/QwyxhMSoUeJo9o0B4mbd9qBe9iqWJFYUHWijkFZaWl+72o24/HgoUKf9TJ2RmG2jli6rK4kJYyPKBbgYsA6kDTn7rcNayjI7g3hZksmJOVJXhTGPdKbmFwbwqN55MKIcxyPxubQo/vGANLF1LLkFR7RJGFfKQTqMuqrUUWEBWNvKsi6koVqL77C5AnBs1/tIjnERPuAoGmpxTyu+6ie5hyeUG5gn7KzRwwr+dmsQfclZUlz73ry4pc+ZezyrO453cVtOynX6APvkuYOcClCjMH6NkKRYHoil9m4jDLWo4UomdZ9FBNflcuukohM7gsyFKgV9F7NHV00TSG9LPCIwo0l7CmFh9L1wvVo5wZ6rXI6UswWiG6DlAHmq7K3UT/2VSelbXirhXMw/1ZWeWb8OvyFdwBtQVZ5fTzgqwymhD+OXohaz8D1l3MLPldK+S4VPpMZpYcP6tVyMWXZNYclH+ZfUKft+kuOXOVu76cm1vIELeCoXdTLjqvkC4IHYim6FGB7LG5TOGF5bi6zC0wD4A6EAgReSSSo1taYnNVoA50Jytrf1iHFTAWcb9XdxSoA4GiUaFiUziHfVmBZgfWKFpqgToQSNrAMatlRXhHfhnNwSvKNt0F1IFAklQrDx+jTXJ5bcwuDNSBQPEWUAcCAXUgEFAHAoGAOhAIqAOBQEAdCATUgUAgQf9fgAEAiUXFf3NUUlMAAAAASUVORK5CYII=AppDevTools/query/vendor/tightenco/collect/composer.jsonewogICAgIm5hbWUiOiAidGlnaHRlbmNvL2NvbGxlY3QiLAogICAgImRlc2NyaXB0aW9uIjogIkNvbGxlY3QgLSBJbGx1bWluYXRlIENvbGxlY3Rpb25zIGFzIGEgc2VwYXJhdGUgcGFja2FnZS4iLAogICAgImtleXdvcmRzIjogWyJsYXJhdmVsIiwgImNvbGxlY3Rpb24iXSwKICAgICJsaWNlbnNlIjogIk1JVCIsCiAgICAiYXV0aG9ycyI6IFsKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogIlRheWxvciBPdHdlbGwiLAogICAgICAgICAgICAiZW1haWwiOiAidGF5bG9yb3R3ZWxsQGdtYWlsLmNvbSIKICAgICAgICB9CiAgICBdLAogICAgInJlcXVpcmUiOiB7CiAgICAgICAgInBocCI6ICI+PTcuMS4zIiwKICAgICAgICAic3ltZm9ueS92YXItZHVtcGVyIjogIj49My4xLjEwIgogICAgfSwKICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAibW9ja2VyeS9tb2NrZXJ5IjogIn4xLjAiLAogICAgICAgICJwaHB1bml0L3BocHVuaXQiOiAifjcuMCIsCiAgICAgICAgIm5lc2JvdC9jYXJib24iOiAifjEuMjAiCiAgICB9LAogICAgImF1dG9sb2FkIjogewogICAgICAgICJmaWxlcyI6IFsKICAgICAgICAgICAgInNyYy9Db2xsZWN0L1N1cHBvcnQvaGVscGVycy5waHAiLAogICAgICAgICAgICAic3JjL0NvbGxlY3QvU3VwcG9ydC9hbGlhcy5waHAiCiAgICAgICAgXSwKICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICJUaWdodGVuY29cXENvbGxlY3RcXCI6ICJzcmMvQ29sbGVjdCIKICAgICAgICB9CiAgICB9LAogICAgInNjcmlwdHMiOiB7CiAgICAgICAgInRlc3QiOiBbCiAgICAgICAgICAgICJAY29tcG9zZXIgaW5zdGFsbCIsCiAgICAgICAgICAgICJwaHB1bml0IgogICAgICAgIF0KICAgIH0sCiAgICAibWluaW11bS1zdGFiaWxpdHkiOiAiZGV2IiwKICAgICJwcmVmZXItc3RhYmxlIjogdHJ1ZQp9Cg==AppDevTools/query/vendor/tightenco/collect/composer.lockewogICAgIl9yZWFkbWUiOiBbCiAgICAgICAgIlRoaXMgZmlsZSBsb2NrcyB0aGUgZGVwZW5kZW5jaWVzIG9mIHlvdXIgcHJvamVjdCB0byBhIGtub3duIHN0YXRlIiwKICAgICAgICAiUmVhZCBtb3JlIGFib3V0IGl0IGF0IGh0dHBzOi8vZ2V0Y29tcG9zZXIub3JnL2RvYy8wMS1iYXNpYy11c2FnZS5tZCNjb21wb3Nlci1sb2NrLXRoZS1sb2NrLWZpbGUiLAogICAgICAgICJUaGlzIGZpbGUgaXMgQGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IgogICAgXSwKICAgICJjb250ZW50LWhhc2giOiAiNWUzNjU2MGY3NDBkOGY5NjY4MDU5Nzc2YThkZDE0ODYiLAogICAgInBhY2thZ2VzIjogWwogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAic3ltZm9ueS9wb2x5ZmlsbC1tYnN0cmluZyIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogInYxLjguMCIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3ltZm9ueS9wb2x5ZmlsbC1tYnN0cmluZy5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICIzMjk2YWRmNmE2NDU0YTA1MDY3OWNkZTkwZjk1MzUwYWQ2MDRiMTcxIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3Mvc3ltZm9ueS9wb2x5ZmlsbC1tYnN0cmluZy96aXBiYWxsLzMyOTZhZGY2YTY0NTRhMDUwNjc5Y2RlOTBmOTUzNTBhZDYwNGIxNzEiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICIzMjk2YWRmNmE2NDU0YTA1MDY3OWNkZTkwZjk1MzUwYWQ2MDRiMTcxIiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJwaHAiOiAiPj01LjMuMyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInN1Z2dlc3QiOiB7CiAgICAgICAgICAgICAgICAiZXh0LW1ic3RyaW5nIjogIkZvciBiZXN0IHBlcmZvcm1hbmNlIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImV4dHJhIjogewogICAgICAgICAgICAgICAgImJyYW5jaC1hbGlhcyI6IHsKICAgICAgICAgICAgICAgICAgICAiZGV2LW1hc3RlciI6ICIxLjgtZGV2IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIlN5bWZvbnlcXFBvbHlmaWxsXFxNYnN0cmluZ1xcIjogIiIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAiZmlsZXMiOiBbCiAgICAgICAgICAgICAgICAgICAgImJvb3RzdHJhcC5waHAiCiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiTUlUIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJOaWNvbGFzIEdyZWthcyIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogInBAdGNod29yay5jb20iCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlN5bWZvbnkgQ29tbXVuaXR5IiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9zeW1mb255LmNvbS9jb250cmlidXRvcnMiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJTeW1mb255IHBvbHlmaWxsIGZvciB0aGUgTWJzdHJpbmcgZXh0ZW5zaW9uIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vc3ltZm9ueS5jb20iLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAiY29tcGF0aWJpbGl0eSIsCiAgICAgICAgICAgICAgICAibWJzdHJpbmciLAogICAgICAgICAgICAgICAgInBvbHlmaWxsIiwKICAgICAgICAgICAgICAgICJwb3J0YWJsZSIsCiAgICAgICAgICAgICAgICAic2hpbSIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInRpbWUiOiAiMjAxOC0wNC0yNlQxMDowNjoyOCswMDowMCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAic3ltZm9ueS9wb2x5ZmlsbC1waHA3MiIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogInYxLjguMCIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc3ltZm9ueS9wb2x5ZmlsbC1waHA3Mi5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJhNDU3NmUyODJkNzgyYWQ4MjM5N2YzZTRlYzFkZjhlMGYwY2FmYjQ2IgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3Mvc3ltZm9ueS9wb2x5ZmlsbC1waHA3Mi96aXBiYWxsL2E0NTc2ZTI4MmQ3ODJhZDgyMzk3ZjNlNGVjMWRmOGUwZjBjYWZiNDYiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJhNDU3NmUyODJkNzgyYWQ4MjM5N2YzZTRlYzFkZjhlMGYwY2FmYjQ2IiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJwaHAiOiAiPj01LjMuMyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgICAgICJleHRyYSI6IHsKICAgICAgICAgICAgICAgICJicmFuY2gtYWxpYXMiOiB7CiAgICAgICAgICAgICAgICAgICAgImRldi1tYXN0ZXIiOiAiMS44LWRldiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJTeW1mb255XFxQb2x5ZmlsbFxcUGhwNzJcXCI6ICIiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgImZpbGVzIjogWwogICAgICAgICAgICAgICAgICAgICJib290c3RyYXAucGhwIgogICAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIk1JVCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiTmljb2xhcyBHcmVrYXMiLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJwQHRjaHdvcmsuY29tIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJTeW1mb255IENvbW11bml0eSIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vc3ltZm9ueS5jb20vY29udHJpYnV0b3JzIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiU3ltZm9ueSBwb2x5ZmlsbCBiYWNrcG9ydGluZyBzb21lIFBIUCA3LjIrIGZlYXR1cmVzIHRvIGxvd2VyIFBIUCB2ZXJzaW9ucyIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL3N5bWZvbnkuY29tIiwKICAgICAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAgICAgImNvbXBhdGliaWxpdHkiLAogICAgICAgICAgICAgICAgInBvbHlmaWxsIiwKICAgICAgICAgICAgICAgICJwb3J0YWJsZSIsCiAgICAgICAgICAgICAgICAic2hpbSIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInRpbWUiOiAiMjAxOC0wNC0yNlQxMDowNjoyOCswMDowMCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAic3ltZm9ueS92YXItZHVtcGVyIiwKICAgICAgICAgICAgInZlcnNpb24iOiAidjQuMS4xIiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zeW1mb255L3Zhci1kdW1wZXIuZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiYjJlZWJhZWMwODVkMWYyY2FmYmFkNzY0NDczM2Q0OTRhM2JiYmM5YiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL3N5bWZvbnkvdmFyLWR1bXBlci96aXBiYWxsL2IyZWViYWVjMDg1ZDFmMmNhZmJhZDc2NDQ3MzNkNDk0YTNiYmJjOWIiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJiMmVlYmFlYzA4NWQxZjJjYWZiYWQ3NjQ0NzMzZDQ5NGEzYmJiYzliIiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJwaHAiOiAiXjcuMS4zIiwKICAgICAgICAgICAgICAgICJzeW1mb255L3BvbHlmaWxsLW1ic3RyaW5nIjogIn4xLjAiLAogICAgICAgICAgICAgICAgInN5bWZvbnkvcG9seWZpbGwtcGhwNzIiOiAifjEuNSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImNvbmZsaWN0IjogewogICAgICAgICAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICI8NC44LjM1fDw1LjQuMyw+PTUuMCIsCiAgICAgICAgICAgICAgICAic3ltZm9ueS9jb25zb2xlIjogIjwzLjQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAgICAgICAgICJleHQtaWNvbnYiOiAiKiIsCiAgICAgICAgICAgICAgICAic3ltZm9ueS9wcm9jZXNzIjogIn4zLjR8fjQuMCIsCiAgICAgICAgICAgICAgICAidHdpZy90d2lnIjogIn4xLjM0fH4yLjQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJzdWdnZXN0IjogewogICAgICAgICAgICAgICAgImV4dC1pY29udiI6ICJUbyBjb252ZXJ0IG5vbi1VVEYtOCBzdHJpbmdzIHRvIFVURi04IChvciBzeW1mb255L3BvbHlmaWxsLWljb252IGluIGNhc2UgZXh0LWljb252IGNhbm5vdCBiZSB1c2VkKS4iLAogICAgICAgICAgICAgICAgImV4dC1pbnRsIjogIlRvIHNob3cgcmVnaW9uIG5hbWUgaW4gdGltZSB6b25lIGR1bXAiLAogICAgICAgICAgICAgICAgInN5bWZvbnkvY29uc29sZSI6ICJUbyB1c2UgdGhlIFNlcnZlckR1bXBDb21tYW5kIGFuZC9vciB0aGUgYmluL3Zhci1kdW1wLXNlcnZlciBzY3JpcHQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJiaW4iOiBbCiAgICAgICAgICAgICAgICAiUmVzb3VyY2VzL2Jpbi92YXItZHVtcC1zZXJ2ZXIiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjQuMS1kZXYiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJmaWxlcyI6IFsKICAgICAgICAgICAgICAgICAgICAiUmVzb3VyY2VzL2Z1bmN0aW9ucy9kdW1wLnBocCIKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIlN5bWZvbnlcXENvbXBvbmVudFxcVmFyRHVtcGVyXFwiOiAiIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICJleGNsdWRlLWZyb20tY2xhc3NtYXAiOiBbCiAgICAgICAgICAgICAgICAgICAgIi9UZXN0cy8iCiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiTUlUIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJOaWNvbGFzIEdyZWthcyIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogInBAdGNod29yay5jb20iCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlN5bWZvbnkgQ29tbXVuaXR5IiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9zeW1mb255LmNvbS9jb250cmlidXRvcnMiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJTeW1mb255IG1lY2hhbmlzbSBmb3IgZXhwbG9yaW5nIGFuZCBkdW1waW5nIFBIUCB2YXJpYWJsZXMiLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9zeW1mb255LmNvbSIsCiAgICAgICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgICAgICJkZWJ1ZyIsCiAgICAgICAgICAgICAgICAiZHVtcCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInRpbWUiOiAiMjAxOC0wNi0yM1QxMjoyMzo1NiswMDowMCIKICAgICAgICB9CiAgICBdLAogICAgInBhY2thZ2VzLWRldiI6IFsKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogImRvY3RyaW5lL2luc3RhbnRpYXRvciIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMS4wIiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9kb2N0cmluZS9pbnN0YW50aWF0b3IuZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiMTg1Yjg4NjhhYTliZjcxNTlmNWY5NTNlZDVhZmIyZDdmY2RjM2JkYSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL2RvY3RyaW5lL2luc3RhbnRpYXRvci96aXBiYWxsLzE4NWI4ODY4YWE5YmY3MTU5ZjVmOTUzZWQ1YWZiMmQ3ZmNkYzNiZGEiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICIxODViODg2OGFhOWJmNzE1OWY1Zjk1M2VkNWFmYjJkN2ZjZGMzYmRhIiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJwaHAiOiAiXjcuMSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAgICAgImF0aGxldGljL2F0aGxldGljIjogIn4wLjEuOCIsCiAgICAgICAgICAgICAgICAiZXh0LXBkbyI6ICIqIiwKICAgICAgICAgICAgICAgICJleHQtcGhhciI6ICIqIiwKICAgICAgICAgICAgICAgICJwaHB1bml0L3BocHVuaXQiOiAiXjYuMi4zIiwKICAgICAgICAgICAgICAgICJzcXVpemxhYnMvcGhwX2NvZGVzbmlmZmVyIjogIl4zLjAuMiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgICAgICJleHRyYSI6IHsKICAgICAgICAgICAgICAgICJicmFuY2gtYWxpYXMiOiB7CiAgICAgICAgICAgICAgICAgICAgImRldi1tYXN0ZXIiOiAiMS4yLngtZGV2IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIkRvY3RyaW5lXFxJbnN0YW50aWF0b3JcXCI6ICJzcmMvRG9jdHJpbmUvSW5zdGFudGlhdG9yLyIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJNSVQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIk1hcmNvIFBpdmV0dGEiLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJvY3JhbWl1c0BnbWFpbC5jb20iLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwOi8vb2NyYW1pdXMuZ2l0aHViLmNvbS8iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBIHNtYWxsLCBsaWdodHdlaWdodCB1dGlsaXR5IHRvIGluc3RhbnRpYXRlIG9iamVjdHMgaW4gUEhQIHdpdGhvdXQgaW52b2tpbmcgdGhlaXIgY29uc3RydWN0b3JzIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9kb2N0cmluZS9pbnN0YW50aWF0b3IiLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAiY29uc3RydWN0b3IiLAogICAgICAgICAgICAgICAgImluc3RhbnRpYXRlIgogICAgICAgICAgICBdLAogICAgICAgICAgICAidGltZSI6ICIyMDE3LTA3LTIyVDExOjU4OjM2KzAwOjAwIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJoYW1jcmVzdC9oYW1jcmVzdC1waHAiLAogICAgICAgICAgICAidmVyc2lvbiI6ICJ2Mi4wLjAiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL2hhbWNyZXN0L2hhbWNyZXN0LXBocC5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICI3NzY1MDNkM2E4ZTg1ZDRmOWExMTQ4NjE0Zjk1YjdhNjA4YjA0NmFkIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvaGFtY3Jlc3QvaGFtY3Jlc3QtcGhwL3ppcGJhbGwvNzc2NTAzZDNhOGU4NWQ0ZjlhMTE0ODYxNGY5NWI3YTYwOGIwNDZhZCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjc3NjUwM2QzYThlODVkNGY5YTExNDg2MTRmOTViN2E2MDhiMDQ2YWQiLAogICAgICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgInBocCI6ICJeNS4zfF43LjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXBsYWNlIjogewogICAgICAgICAgICAgICAgImNvcmRvdmFsL2hhbWNyZXN0LXBocCI6ICIqIiwKICAgICAgICAgICAgICAgICJkYXZlZGV2ZWxvcG1lbnQvaGFtY3Jlc3QtcGhwIjogIioiLAogICAgICAgICAgICAgICAgImtvZG92YS9oYW1jcmVzdC1waHAiOiAiKiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAgICAgInBocHVuaXQvcGhwLWZpbGUtaXRlcmF0b3IiOiAiMS4zLjMiLAogICAgICAgICAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJ+NC4wIiwKICAgICAgICAgICAgICAgICJzYXRvb3NoaS9waHAtY292ZXJhbGxzIjogIl4xLjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjIuMC1kZXYiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJjbGFzc21hcCI6IFsKICAgICAgICAgICAgICAgICAgICAiaGFtY3Jlc3QiCiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiQlNEIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVGhpcyBpcyB0aGUgUEhQIHBvcnQgb2YgSGFtY3Jlc3QgTWF0Y2hlcnMiLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAidGVzdCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInRpbWUiOiAiMjAxNi0wMS0yMFQwODoyMDo0NCswMDowMCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAibW9ja2VyeS9tb2NrZXJ5IiwKICAgICAgICAgICAgInZlcnNpb24iOiAiMS4xLjAiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL21vY2tlcnkvbW9ja2VyeS5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICI5OWUyOWQzNTk2YjE2ZGFiZTQ5ODI1NDg1MjdkNWRkZjkwMjMyZTk5IgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvbW9ja2VyeS9tb2NrZXJ5L3ppcGJhbGwvOTllMjlkMzU5NmIxNmRhYmU0OTgyNTQ4NTI3ZDVkZGY5MDIzMmU5OSIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjk5ZTI5ZDM1OTZiMTZkYWJlNDk4MjU0ODUyN2Q1ZGRmOTAyMzJlOTkiLAogICAgICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgImhhbWNyZXN0L2hhbWNyZXN0LXBocCI6ICJ+Mi4wIiwKICAgICAgICAgICAgICAgICJsaWItcGNyZSI6ICI+PTcuMCIsCiAgICAgICAgICAgICAgICAicGhwIjogIj49NS42LjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAgICAgICAgICJwaHBkb2N1bWVudG9yL3BocGRvY3VtZW50b3IiOiAiXjIuOSIsCiAgICAgICAgICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIn41LjcuMTB8fjYuNSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgICAgICJleHRyYSI6IHsKICAgICAgICAgICAgICAgICJicmFuY2gtYWxpYXMiOiB7CiAgICAgICAgICAgICAgICAgICAgImRldi1tYXN0ZXIiOiAiMS4wLngtZGV2IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAicHNyLTAiOiB7CiAgICAgICAgICAgICAgICAgICAgIk1vY2tlcnkiOiAibGlicmFyeS8iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiQlNELTMtQ2xhdXNlIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJQw6FkcmFpYyBCcmFkeSIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogInBhZHJhaWMuYnJhZHlAZ21haWwuY29tIiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cDovL2Jsb2cuYXN0cnVtZnV0dXJhLmNvbSIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiRGF2ZSBNYXJzaGFsbCIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogImRhdmUubWFyc2hhbGxAYXRzdHNvbHV0aW9ucy5jby51ayIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHA6Ly9kYXZlZGV2ZWxvcG1lbnQuY28udWsiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJNb2NrZXJ5IGlzIGEgc2ltcGxlIHlldCBmbGV4aWJsZSBQSFAgbW9jayBvYmplY3QgZnJhbWV3b3JrIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9tb2NrZXJ5L21vY2tlcnkiLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAiQkREIiwKICAgICAgICAgICAgICAgICJUREQiLAogICAgICAgICAgICAgICAgImxpYnJhcnkiLAogICAgICAgICAgICAgICAgIm1vY2siLAogICAgICAgICAgICAgICAgIm1vY2sgb2JqZWN0cyIsCiAgICAgICAgICAgICAgICAibW9ja2VyeSIsCiAgICAgICAgICAgICAgICAic3R1YiIsCiAgICAgICAgICAgICAgICAidGVzdCIsCiAgICAgICAgICAgICAgICAidGVzdCBkb3VibGUiLAogICAgICAgICAgICAgICAgInRlc3RpbmciCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJ0aW1lIjogIjIwMTgtMDUtMDhUMDg6NTQ6NDgrMDA6MDAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogIm15Y2xhYnMvZGVlcC1jb3B5IiwKICAgICAgICAgICAgInZlcnNpb24iOiAiMS44LjEiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL215Y2xhYnMvRGVlcENvcHkuZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiM2UwMWJkYWQzZTE4MzU0YzNkY2U1NDQ2NmI3ZmJlMzNhOWY5ZjdmOCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL215Y2xhYnMvRGVlcENvcHkvemlwYmFsbC8zZTAxYmRhZDNlMTgzNTRjM2RjZTU0NDY2YjdmYmUzM2E5ZjlmN2Y4IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiM2UwMWJkYWQzZTE4MzU0YzNkY2U1NDQ2NmI3ZmJlMzNhOWY5ZjdmOCIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAicGhwIjogIl43LjEiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXBsYWNlIjogewogICAgICAgICAgICAgICAgIm15Y2xhYnMvZGVlcC1jb3B5IjogInNlbGYudmVyc2lvbiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAgICAgImRvY3RyaW5lL2NvbGxlY3Rpb25zIjogIl4xLjAiLAogICAgICAgICAgICAgICAgImRvY3RyaW5lL2NvbW1vbiI6ICJeMi42IiwKICAgICAgICAgICAgICAgICJwaHB1bml0L3BocHVuaXQiOiAiXjcuMSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgICAgICAgICAiRGVlcENvcHlcXCI6ICJzcmMvRGVlcENvcHkvIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICJmaWxlcyI6IFsKICAgICAgICAgICAgICAgICAgICAic3JjL0RlZXBDb3B5L2RlZXBfY29weS5waHAiCiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiTUlUIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQ3JlYXRlIGRlZXAgY29waWVzIChjbG9uZXMpIG9mIHlvdXIgb2JqZWN0cyIsCiAgICAgICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgICAgICJjbG9uZSIsCiAgICAgICAgICAgICAgICAiY29weSIsCiAgICAgICAgICAgICAgICAiZHVwbGljYXRlIiwKICAgICAgICAgICAgICAgICJvYmplY3QiLAogICAgICAgICAgICAgICAgIm9iamVjdCBncmFwaCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInRpbWUiOiAiMjAxOC0wNi0xMVQyMzowOTo1MCswMDowMCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAibmVzYm90L2NhcmJvbiIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMzIuMCIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vYnJpYW5uZXNiaXR0L0NhcmJvbi5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICI2NDU2M2UyYjlmNjllNGRiMWI4MmE2MGU4MWVmYTMyN2EzMGZmMzQzIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvYnJpYW5uZXNiaXR0L0NhcmJvbi96aXBiYWxsLzY0NTYzZTJiOWY2OWU0ZGIxYjgyYTYwZTgxZWZhMzI3YTMwZmYzNDMiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICI2NDU2M2UyYjlmNjllNGRiMWI4MmE2MGU4MWVmYTMyN2EzMGZmMzQzIiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJwaHAiOiAiPj01LjMuOSIsCiAgICAgICAgICAgICAgICAic3ltZm9ueS90cmFuc2xhdGlvbiI6ICJ+Mi42IHx8IH4zLjAgfHwgfjQuMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAgICAgImZyaWVuZHNvZnBocC9waHAtY3MtZml4ZXIiOiAifjIiLAogICAgICAgICAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJeNC44LjM1IHx8IF41LjciCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAibGFyYXZlbCI6IHsKICAgICAgICAgICAgICAgICAgICAicHJvdmlkZXJzIjogWwogICAgICAgICAgICAgICAgICAgICAgICAiQ2FyYm9uXFxMYXJhdmVsXFxTZXJ2aWNlUHJvdmlkZXIiCiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIiI6ICJzcmMvIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIk1JVCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiQnJpYW4gTmVzYml0dCIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogImJyaWFuQG5lc2JvdC5jb20iLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwOi8vbmVzYm90LmNvbSIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkEgc2ltcGxlIEFQSSBleHRlbnNpb24gZm9yIERhdGVUaW1lLiIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwOi8vY2FyYm9uLm5lc2JvdC5jb20iLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAiZGF0ZSIsCiAgICAgICAgICAgICAgICAiZGF0ZXRpbWUiLAogICAgICAgICAgICAgICAgInRpbWUiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJ0aW1lIjogIjIwMTgtMDctMDVUMDY6NTk6MjYrMDA6MDAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogInBoYXItaW8vbWFuaWZlc3QiLAogICAgICAgICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vcGhhci1pby9tYW5pZmVzdC5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICIyZGY0MDI3ODZhYjUzNjhhMDE2OTA5MWY2MWE3YzFlMGViNjg1MmQwIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvcGhhci1pby9tYW5pZmVzdC96aXBiYWxsLzJkZjQwMjc4NmFiNTM2OGEwMTY5MDkxZjYxYTdjMWUwZWI2ODUyZDAiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICIyZGY0MDI3ODZhYjUzNjhhMDE2OTA5MWY2MWE3YzFlMGViNjg1MmQwIiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJleHQtZG9tIjogIioiLAogICAgICAgICAgICAgICAgImV4dC1waGFyIjogIioiLAogICAgICAgICAgICAgICAgInBoYXItaW8vdmVyc2lvbiI6ICJeMS4wLjEiLAogICAgICAgICAgICAgICAgInBocCI6ICJeNS42IHx8IF43LjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjEuMC54LWRldiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgImNsYXNzbWFwIjogWwogICAgICAgICAgICAgICAgICAgICJzcmMvIgogICAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIkJTRC0zLUNsYXVzZSIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiQXJuZSBCbGFua2VydHMiLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJhcm5lQGJsYW5rZXJ0cy5kZSIsCiAgICAgICAgICAgICAgICAgICAgInJvbGUiOiAiRGV2ZWxvcGVyIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJTZWJhc3RpYW4gSGV1ZXIiLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJzZWJhc3RpYW5AcGhwZW9wbGUuZGUiLAogICAgICAgICAgICAgICAgICAgICJyb2xlIjogIkRldmVsb3BlciIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiU2ViYXN0aWFuIEJlcmdtYW5uIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAic2ViYXN0aWFuQHBocHVuaXQuZGUiLAogICAgICAgICAgICAgICAgICAgICJyb2xlIjogIkRldmVsb3BlciIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkNvbXBvbmVudCBmb3IgcmVhZGluZyBwaGFyLmlvIG1hbmlmZXN0IGluZm9ybWF0aW9uIGZyb20gYSBQSFAgQXJjaGl2ZSAoUEhBUikiLAogICAgICAgICAgICAidGltZSI6ICIyMDE3LTAzLTA1VDE4OjE0OjI3KzAwOjAwIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJwaGFyLWlvL3ZlcnNpb24iLAogICAgICAgICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vcGhhci1pby92ZXJzaW9uLmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogImE3MGMwY2VkNGJlMjk5YTYzZDMyZmE5NmQ5MjgxZDAzZTk0MDQxZGYiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9waGFyLWlvL3ZlcnNpb24vemlwYmFsbC9hNzBjMGNlZDRiZTI5OWE2M2QzMmZhOTZkOTI4MWQwM2U5NDA0MWRmIiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiYTcwYzBjZWQ0YmUyOTlhNjNkMzJmYTk2ZDkyODFkMDNlOTQwNDFkZiIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAicGhwIjogIl41LjYgfHwgXjcuMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJjbGFzc21hcCI6IFsKICAgICAgICAgICAgICAgICAgICAic3JjLyIKICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJCU0QtMy1DbGF1c2UiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkFybmUgQmxhbmtlcnRzIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAiYXJuZUBibGFua2VydHMuZGUiLAogICAgICAgICAgICAgICAgICAgICJyb2xlIjogIkRldmVsb3BlciIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiU2ViYXN0aWFuIEhldWVyIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAic2ViYXN0aWFuQHBocGVvcGxlLmRlIiwKICAgICAgICAgICAgICAgICAgICAicm9sZSI6ICJEZXZlbG9wZXIiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlNlYmFzdGlhbiBCZXJnbWFubiIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogInNlYmFzdGlhbkBwaHB1bml0LmRlIiwKICAgICAgICAgICAgICAgICAgICAicm9sZSI6ICJEZXZlbG9wZXIiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMaWJyYXJ5IGZvciBoYW5kbGluZyB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBjb25zdHJhaW50cyIsCiAgICAgICAgICAgICJ0aW1lIjogIjIwMTctMDMtMDVUMTc6Mzg6MjMrMDA6MDAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogInBocGRvY3VtZW50b3IvcmVmbGVjdGlvbi1jb21tb24iLAogICAgICAgICAgICAidmVyc2lvbiI6ICIxLjAuMSIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vcGhwRG9jdW1lbnRvci9SZWZsZWN0aW9uQ29tbW9uLmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjIxYmRlYjVmNjVkN2ViZjlmNDNiMWIyNWQ0MDRmODdkZWFiNWJmYjYiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9waHBEb2N1bWVudG9yL1JlZmxlY3Rpb25Db21tb24vemlwYmFsbC8yMWJkZWI1ZjY1ZDdlYmY5ZjQzYjFiMjVkNDA0Zjg3ZGVhYjViZmI2IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiMjFiZGViNWY2NWQ3ZWJmOWY0M2IxYjI1ZDQwNGY4N2RlYWI1YmZiNiIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAicGhwIjogIj49NS41IgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIl40LjYiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjEuMC54LWRldiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJwaHBEb2N1bWVudG9yXFxSZWZsZWN0aW9uXFwiOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICJzcmMiCiAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIk1JVCIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiSmFhcCB2YW4gT3R0ZXJkaWprIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAib3BlbnNvdXJjZUBpamFhcC5ubCIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkNvbW1vbiByZWZsZWN0aW9uIGNsYXNzZXMgdXNlZCBieSBwaHBkb2N1bWVudG9yIHRvIHJlZmxlY3QgdGhlIGNvZGUgc3RydWN0dXJlIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHA6Ly93d3cucGhwZG9jLm9yZyIsCiAgICAgICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgICAgICJGUVNFTiIsCiAgICAgICAgICAgICAgICAicGhwRG9jdW1lbnRvciIsCiAgICAgICAgICAgICAgICAicGhwZG9jIiwKICAgICAgICAgICAgICAgICJyZWZsZWN0aW9uIiwKICAgICAgICAgICAgICAgICJzdGF0aWMgYW5hbHlzaXMiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJ0aW1lIjogIjIwMTctMDktMTFUMTg6MDI6MTkrMDA6MDAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogInBocGRvY3VtZW50b3IvcmVmbGVjdGlvbi1kb2NibG9jayIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogIjQuMy4wIiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9waHBEb2N1bWVudG9yL1JlZmxlY3Rpb25Eb2NCbG9jay5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICI5NGZkMDAwMTIzMmU0NzEyOWRkMzUwNDE4OWZhMWM3MjI1MDEwZDA4IgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvcGhwRG9jdW1lbnRvci9SZWZsZWN0aW9uRG9jQmxvY2svemlwYmFsbC85NGZkMDAwMTIzMmU0NzEyOWRkMzUwNDE4OWZhMWM3MjI1MDEwZDA4IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiOTRmZDAwMDEyMzJlNDcxMjlkZDM1MDQxODlmYTFjNzIyNTAxMGQwOCIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAicGhwIjogIl43LjAiLAogICAgICAgICAgICAgICAgInBocGRvY3VtZW50b3IvcmVmbGVjdGlvbi1jb21tb24iOiAiXjEuMC4wIiwKICAgICAgICAgICAgICAgICJwaHBkb2N1bWVudG9yL3R5cGUtcmVzb2x2ZXIiOiAiXjAuNC4wIiwKICAgICAgICAgICAgICAgICJ3ZWJtb3phcnQvYXNzZXJ0IjogIl4xLjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAgICAgICAgICJkb2N0cmluZS9pbnN0YW50aWF0b3IiOiAifjEuMC41IiwKICAgICAgICAgICAgICAgICJtb2NrZXJ5L21vY2tlcnkiOiAiXjEuMCIsCiAgICAgICAgICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIl42LjQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjQueC1kZXYiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgICAgICAgICAicGhwRG9jdW1lbnRvclxcUmVmbGVjdGlvblxcIjogWwogICAgICAgICAgICAgICAgICAgICAgICAic3JjLyIKICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiTUlUIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJNaWtlIHZhbiBSaWVsIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAibWVAbWlrZXZhbnJpZWwuY29tIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiV2l0aCB0aGlzIGNvbXBvbmVudCwgYSBsaWJyYXJ5IGNhbiBwcm92aWRlIHN1cHBvcnQgZm9yIGFubm90YXRpb25zIHZpYSBEb2NCbG9ja3Mgb3Igb3RoZXJ3aXNlIHJldHJpZXZlIGluZm9ybWF0aW9uIHRoYXQgaXMgZW1iZWRkZWQgaW4gYSBEb2NCbG9jay4iLAogICAgICAgICAgICAidGltZSI6ICIyMDE3LTExLTMwVDA3OjE0OjE3KzAwOjAwIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJwaHBkb2N1bWVudG9yL3R5cGUtcmVzb2x2ZXIiLAogICAgICAgICAgICAidmVyc2lvbiI6ICIwLjQuMCIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vcGhwRG9jdW1lbnRvci9UeXBlUmVzb2x2ZXIuZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiOWM5Nzc3MDg5OTU5NTQ3ODQ3MjZlMjVkMGNkMWRkZGY0ZTY1YjBmNyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL3BocERvY3VtZW50b3IvVHlwZVJlc29sdmVyL3ppcGJhbGwvOWM5Nzc3MDg5OTU5NTQ3ODQ3MjZlMjVkMGNkMWRkZGY0ZTY1YjBmNyIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjljOTc3NzA4OTk1OTU0Nzg0NzI2ZTI1ZDBjZDFkZGRmNGU2NWIwZjciLAogICAgICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgInBocCI6ICJeNS41IHx8IF43LjAiLAogICAgICAgICAgICAgICAgInBocGRvY3VtZW50b3IvcmVmbGVjdGlvbi1jb21tb24iOiAiXjEuMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAgICAgIm1vY2tlcnkvbW9ja2VyeSI6ICJeMC45LjQiLAogICAgICAgICAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJeNS4yfHxeNC44LjI0IgogICAgICAgICAgICB9LAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImV4dHJhIjogewogICAgICAgICAgICAgICAgImJyYW5jaC1hbGlhcyI6IHsKICAgICAgICAgICAgICAgICAgICAiZGV2LW1hc3RlciI6ICIxLjAueC1kZXYiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJwc3ItNCI6IHsKICAgICAgICAgICAgICAgICAgICAicGhwRG9jdW1lbnRvclxcUmVmbGVjdGlvblxcIjogWwogICAgICAgICAgICAgICAgICAgICAgICAic3JjLyIKICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiTUlUIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJNaWtlIHZhbiBSaWVsIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAibWVAbWlrZXZhbnJpZWwuY29tIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAidGltZSI6ICIyMDE3LTA3LTE0VDE0OjI3OjAyKzAwOjAwIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJwaHBzcGVjL3Byb3BoZWN5IiwKICAgICAgICAgICAgInZlcnNpb24iOiAiMS43LjYiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3BocHNwZWMvcHJvcGhlY3kuZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiMzNhN2UzYzRmZGE1NGU5MTJmZjYzMzhjNDg4MjNiZDVjMGYwYjcxMiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL3BocHNwZWMvcHJvcGhlY3kvemlwYmFsbC8zM2E3ZTNjNGZkYTU0ZTkxMmZmNjMzOGM0ODgyM2JkNWMwZjBiNzEyIiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiMzNhN2UzYzRmZGE1NGU5MTJmZjYzMzhjNDg4MjNiZDVjMGYwYjcxMiIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAiZG9jdHJpbmUvaW5zdGFudGlhdG9yIjogIl4xLjAuMiIsCiAgICAgICAgICAgICAgICAicGhwIjogIl41LjN8XjcuMCIsCiAgICAgICAgICAgICAgICAicGhwZG9jdW1lbnRvci9yZWZsZWN0aW9uLWRvY2Jsb2NrIjogIl4yLjB8XjMuMC4yfF40LjAiLAogICAgICAgICAgICAgICAgInNlYmFzdGlhbi9jb21wYXJhdG9yIjogIl4xLjF8XjIuMHxeMy4wIiwKICAgICAgICAgICAgICAgICJzZWJhc3RpYW4vcmVjdXJzaW9uLWNvbnRleHQiOiAiXjEuMHxeMi4wfF4zLjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAgICAgICAgICJwaHBzcGVjL3BocHNwZWMiOiAiXjIuNXxeMy4yIiwKICAgICAgICAgICAgICAgICJwaHB1bml0L3BocHVuaXQiOiAiXjQuOC4zNSB8fCBeNS43IHx8IF42LjUiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjEuNy54LWRldiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgInBzci0wIjogewogICAgICAgICAgICAgICAgICAgICJQcm9waGVjeVxcIjogInNyYy8iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiTUlUIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJLb25zdGFudGluIEt1ZHJ5YXNob3YiLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJldmVyLnpldEBnbWFpbC5jb20iLAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwOi8vZXZlcnpldC5jb20iCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIk1hcmNlbGxvIER1YXJ0ZSIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogIm1hcmNlbGxvLmR1YXJ0ZUBnbWFpbC5jb20iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJIaWdobHkgb3BpbmlvbmF0ZWQgbW9ja2luZyBmcmFtZXdvcmsgZm9yIFBIUCA1LjMrIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9waHBzcGVjL3Byb3BoZWN5IiwKICAgICAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAgICAgIkRvdWJsZSIsCiAgICAgICAgICAgICAgICAiRHVtbXkiLAogICAgICAgICAgICAgICAgImZha2UiLAogICAgICAgICAgICAgICAgIm1vY2siLAogICAgICAgICAgICAgICAgInNweSIsCiAgICAgICAgICAgICAgICAic3R1YiIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInRpbWUiOiAiMjAxOC0wNC0xOFQxMzo1NzoyNCswMDowMCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAicGhwdW5pdC9waHAtY29kZS1jb3ZlcmFnZSIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogIjYuMC43IiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zZWJhc3RpYW5iZXJnbWFubi9waHAtY29kZS1jb3ZlcmFnZS5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICI4NjU2NjI1NTBjMzg0YmMxZGI3ZTUxZDI5YWVkYTFjMmMxNjFkNjlhIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3Mvc2ViYXN0aWFuYmVyZ21hbm4vcGhwLWNvZGUtY292ZXJhZ2UvemlwYmFsbC84NjU2NjI1NTBjMzg0YmMxZGI3ZTUxZDI5YWVkYTFjMmMxNjFkNjlhIiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiODY1NjYyNTUwYzM4NGJjMWRiN2U1MWQyOWFlZGExYzJjMTYxZDY5YSIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAiZXh0LWRvbSI6ICIqIiwKICAgICAgICAgICAgICAgICJleHQteG1sd3JpdGVyIjogIioiLAogICAgICAgICAgICAgICAgInBocCI6ICJeNy4xIiwKICAgICAgICAgICAgICAgICJwaHB1bml0L3BocC1maWxlLWl0ZXJhdG9yIjogIl4yLjAiLAogICAgICAgICAgICAgICAgInBocHVuaXQvcGhwLXRleHQtdGVtcGxhdGUiOiAiXjEuMi4xIiwKICAgICAgICAgICAgICAgICJwaHB1bml0L3BocC10b2tlbi1zdHJlYW0iOiAiXjMuMCIsCiAgICAgICAgICAgICAgICAic2ViYXN0aWFuL2NvZGUtdW5pdC1yZXZlcnNlLWxvb2t1cCI6ICJeMS4wLjEiLAogICAgICAgICAgICAgICAgInNlYmFzdGlhbi9lbnZpcm9ubWVudCI6ICJeMy4xIiwKICAgICAgICAgICAgICAgICJzZWJhc3RpYW4vdmVyc2lvbiI6ICJeMi4wLjEiLAogICAgICAgICAgICAgICAgInRoZXNlZXIvdG9rZW5pemVyIjogIl4xLjEiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAgICAgICAgICJwaHB1bml0L3BocHVuaXQiOiAiXjcuMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInN1Z2dlc3QiOiB7CiAgICAgICAgICAgICAgICAiZXh0LXhkZWJ1ZyI6ICJeMi42LjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjYuMC1kZXYiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJjbGFzc21hcCI6IFsKICAgICAgICAgICAgICAgICAgICAic3JjLyIKICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJCU0QtMy1DbGF1c2UiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlNlYmFzdGlhbiBCZXJnbWFubiIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogInNlYmFzdGlhbkBwaHB1bml0LmRlIiwKICAgICAgICAgICAgICAgICAgICAicm9sZSI6ICJsZWFkIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTGlicmFyeSB0aGF0IHByb3ZpZGVzIGNvbGxlY3Rpb24sIHByb2Nlc3NpbmcsIGFuZCByZW5kZXJpbmcgZnVuY3Rpb25hbGl0eSBmb3IgUEhQIGNvZGUgY292ZXJhZ2UgaW5mb3JtYXRpb24uIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zZWJhc3RpYW5iZXJnbWFubi9waHAtY29kZS1jb3ZlcmFnZSIsCiAgICAgICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgICAgICJjb3ZlcmFnZSIsCiAgICAgICAgICAgICAgICAidGVzdGluZyIsCiAgICAgICAgICAgICAgICAieHVuaXQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJ0aW1lIjogIjIwMTgtMDYtMDFUMDc6NTE6NTArMDA6MDAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogInBocHVuaXQvcGhwLWZpbGUtaXRlcmF0b3IiLAogICAgICAgICAgICAidmVyc2lvbiI6ICIyLjAuMSIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc2ViYXN0aWFuYmVyZ21hbm4vcGhwLWZpbGUtaXRlcmF0b3IuZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiY2VjYmM2ODQ2MDViYjBjYzI4ODgyOGViNWQ2NWQ5M2Q1YzY3NmQzYyIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL3NlYmFzdGlhbmJlcmdtYW5uL3BocC1maWxlLWl0ZXJhdG9yL3ppcGJhbGwvY2VjYmM2ODQ2MDViYjBjYzI4ODgyOGViNWQ2NWQ5M2Q1YzY3NmQzYyIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogImNlY2JjNjg0NjA1YmIwY2MyODg4MjhlYjVkNjVkOTNkNWM2NzZkM2MiLAogICAgICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgInBocCI6ICJeNy4xIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImV4dHJhIjogewogICAgICAgICAgICAgICAgImJyYW5jaC1hbGlhcyI6IHsKICAgICAgICAgICAgICAgICAgICAiZGV2LW1hc3RlciI6ICIyLjAueC1kZXYiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJjbGFzc21hcCI6IFsKICAgICAgICAgICAgICAgICAgICAic3JjLyIKICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJCU0QtMy1DbGF1c2UiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlNlYmFzdGlhbiBCZXJnbWFubiIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogInNlYmFzdGlhbkBwaHB1bml0LmRlIiwKICAgICAgICAgICAgICAgICAgICAicm9sZSI6ICJsZWFkIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRmlsdGVySXRlcmF0b3IgaW1wbGVtZW50YXRpb24gdGhhdCBmaWx0ZXJzIGZpbGVzIGJhc2VkIG9uIGEgbGlzdCBvZiBzdWZmaXhlcy4iLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3NlYmFzdGlhbmJlcmdtYW5uL3BocC1maWxlLWl0ZXJhdG9yLyIsCiAgICAgICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgICAgICJmaWxlc3lzdGVtIiwKICAgICAgICAgICAgICAgICJpdGVyYXRvciIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInRpbWUiOiAiMjAxOC0wNi0xMVQxMTo0NDowMCswMDowMCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAicGhwdW5pdC9waHAtdGV4dC10ZW1wbGF0ZSIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMi4xIiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zZWJhc3RpYW5iZXJnbWFubi9waHAtdGV4dC10ZW1wbGF0ZS5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICIzMWY4YjcxN2U1MWQ5YTJhZmNhNmM5ZjA0NmY1ZDY5ZmMyN2M4Njg2IgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3Mvc2ViYXN0aWFuYmVyZ21hbm4vcGhwLXRleHQtdGVtcGxhdGUvemlwYmFsbC8zMWY4YjcxN2U1MWQ5YTJhZmNhNmM5ZjA0NmY1ZDY5ZmMyN2M4Njg2IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiMzFmOGI3MTdlNTFkOWEyYWZjYTZjOWYwNDZmNWQ2OWZjMjdjODY4NiIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAicGhwIjogIj49NS4zLjMiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAiY2xhc3NtYXAiOiBbCiAgICAgICAgICAgICAgICAgICAgInNyYy8iCiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiQlNELTMtQ2xhdXNlIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJTZWJhc3RpYW4gQmVyZ21hbm4iLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJzZWJhc3RpYW5AcGhwdW5pdC5kZSIsCiAgICAgICAgICAgICAgICAgICAgInJvbGUiOiAibGVhZCIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlNpbXBsZSB0ZW1wbGF0ZSBlbmdpbmUuIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zZWJhc3RpYW5iZXJnbWFubi9waHAtdGV4dC10ZW1wbGF0ZS8iLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAidGVtcGxhdGUiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJ0aW1lIjogIjIwMTUtMDYtMjFUMTM6NTA6MzQrMDA6MDAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogInBocHVuaXQvcGhwLXRpbWVyIiwKICAgICAgICAgICAgInZlcnNpb24iOiAiMi4wLjAiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3NlYmFzdGlhbmJlcmdtYW5uL3BocC10aW1lci5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICI4Yjg0NTRlYTY5NThjM2RlZTM4NDUzZDNiZDU3MWUwMjMxMDhjOTFmIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3Mvc2ViYXN0aWFuYmVyZ21hbm4vcGhwLXRpbWVyL3ppcGJhbGwvOGI4NDU0ZWE2OTU4YzNkZWUzODQ1M2QzYmQ1NzFlMDIzMTA4YzkxZiIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjhiODQ1NGVhNjk1OGMzZGVlMzg0NTNkM2JkNTcxZTAyMzEwOGM5MWYiLAogICAgICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgInBocCI6ICJeNy4xIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIl43LjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjIuMC1kZXYiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJjbGFzc21hcCI6IFsKICAgICAgICAgICAgICAgICAgICAic3JjLyIKICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJCU0QtMy1DbGF1c2UiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlNlYmFzdGlhbiBCZXJnbWFubiIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogInNlYmFzdGlhbkBwaHB1bml0LmRlIiwKICAgICAgICAgICAgICAgICAgICAicm9sZSI6ICJsZWFkIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVXRpbGl0eSBjbGFzcyBmb3IgdGltaW5nIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zZWJhc3RpYW5iZXJnbWFubi9waHAtdGltZXIvIiwKICAgICAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAgICAgInRpbWVyIgogICAgICAgICAgICBdLAogICAgICAgICAgICAidGltZSI6ICIyMDE4LTAyLTAxVDEzOjA3OjIzKzAwOjAwIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJwaHB1bml0L3BocC10b2tlbi1zdHJlYW0iLAogICAgICAgICAgICAidmVyc2lvbiI6ICIzLjAuMCIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc2ViYXN0aWFuYmVyZ21hbm4vcGhwLXRva2VuLXN0cmVhbS5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICIyMWFkODhiYmJhN2MzZDkzNTMwZDkzOTk0ZTBhMzNjZDQ1ZjAyYWNlIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3Mvc2ViYXN0aWFuYmVyZ21hbm4vcGhwLXRva2VuLXN0cmVhbS96aXBiYWxsLzIxYWQ4OGJiYmE3YzNkOTM1MzBkOTM5OTRlMGEzM2NkNDVmMDJhY2UiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICIyMWFkODhiYmJhN2MzZDkzNTMwZDkzOTk0ZTBhMzNjZDQ1ZjAyYWNlIiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJleHQtdG9rZW5pemVyIjogIioiLAogICAgICAgICAgICAgICAgInBocCI6ICJeNy4xIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIl43LjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjMuMC1kZXYiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJjbGFzc21hcCI6IFsKICAgICAgICAgICAgICAgICAgICAic3JjLyIKICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJCU0QtMy1DbGF1c2UiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlNlYmFzdGlhbiBCZXJnbWFubiIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogInNlYmFzdGlhbkBwaHB1bml0LmRlIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiV3JhcHBlciBhcm91bmQgUEhQJ3MgdG9rZW5pemVyIGV4dGVuc2lvbi4iLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3NlYmFzdGlhbmJlcmdtYW5uL3BocC10b2tlbi1zdHJlYW0vIiwKICAgICAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAgICAgInRva2VuaXplciIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInRpbWUiOiAiMjAxOC0wMi0wMVQxMzoxNjo0MyswMDowMCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAicGhwdW5pdC9waHB1bml0IiwKICAgICAgICAgICAgInZlcnNpb24iOiAiNy4yLjYiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3NlYmFzdGlhbmJlcmdtYW5uL3BocHVuaXQuZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiNDAwYTM4MzZlZTU0OWFlNmY2NjUzMjNhYzNmMjFlMjdlYWM3MTU1ZiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL3NlYmFzdGlhbmJlcmdtYW5uL3BocHVuaXQvemlwYmFsbC80MDBhMzgzNmVlNTQ5YWU2ZjY2NTMyM2FjM2YyMWUyN2VhYzcxNTVmIiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiNDAwYTM4MzZlZTU0OWFlNmY2NjUzMjNhYzNmMjFlMjdlYWM3MTU1ZiIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAiZG9jdHJpbmUvaW5zdGFudGlhdG9yIjogIl4xLjEiLAogICAgICAgICAgICAgICAgImV4dC1kb20iOiAiKiIsCiAgICAgICAgICAgICAgICAiZXh0LWpzb24iOiAiKiIsCiAgICAgICAgICAgICAgICAiZXh0LWxpYnhtbCI6ICIqIiwKICAgICAgICAgICAgICAgICJleHQtbWJzdHJpbmciOiAiKiIsCiAgICAgICAgICAgICAgICAiZXh0LXhtbCI6ICIqIiwKICAgICAgICAgICAgICAgICJteWNsYWJzL2RlZXAtY29weSI6ICJeMS43IiwKICAgICAgICAgICAgICAgICJwaGFyLWlvL21hbmlmZXN0IjogIl4xLjAuMSIsCiAgICAgICAgICAgICAgICAicGhhci1pby92ZXJzaW9uIjogIl4xLjAiLAogICAgICAgICAgICAgICAgInBocCI6ICJeNy4xIiwKICAgICAgICAgICAgICAgICJwaHBzcGVjL3Byb3BoZWN5IjogIl4xLjciLAogICAgICAgICAgICAgICAgInBocHVuaXQvcGhwLWNvZGUtY292ZXJhZ2UiOiAiXjYuMC43IiwKICAgICAgICAgICAgICAgICJwaHB1bml0L3BocC1maWxlLWl0ZXJhdG9yIjogIl4yLjAuMSIsCiAgICAgICAgICAgICAgICAicGhwdW5pdC9waHAtdGV4dC10ZW1wbGF0ZSI6ICJeMS4yLjEiLAogICAgICAgICAgICAgICAgInBocHVuaXQvcGhwLXRpbWVyIjogIl4yLjAiLAogICAgICAgICAgICAgICAgInNlYmFzdGlhbi9jb21wYXJhdG9yIjogIl4zLjAiLAogICAgICAgICAgICAgICAgInNlYmFzdGlhbi9kaWZmIjogIl4zLjAiLAogICAgICAgICAgICAgICAgInNlYmFzdGlhbi9lbnZpcm9ubWVudCI6ICJeMy4xIiwKICAgICAgICAgICAgICAgICJzZWJhc3RpYW4vZXhwb3J0ZXIiOiAiXjMuMSIsCiAgICAgICAgICAgICAgICAic2ViYXN0aWFuL2dsb2JhbC1zdGF0ZSI6ICJeMi4wIiwKICAgICAgICAgICAgICAgICJzZWJhc3RpYW4vb2JqZWN0LWVudW1lcmF0b3IiOiAiXjMuMC4zIiwKICAgICAgICAgICAgICAgICJzZWJhc3RpYW4vcmVzb3VyY2Utb3BlcmF0aW9ucyI6ICJeMS4wIiwKICAgICAgICAgICAgICAgICJzZWJhc3RpYW4vdmVyc2lvbiI6ICJeMi4wLjEiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJjb25mbGljdCI6IHsKICAgICAgICAgICAgICAgICJwaHB1bml0L3BocHVuaXQtbW9jay1vYmplY3RzIjogIioiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAgICAgICAgICJleHQtcGRvIjogIioiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJzdWdnZXN0IjogewogICAgICAgICAgICAgICAgImV4dC1zb2FwIjogIioiLAogICAgICAgICAgICAgICAgImV4dC14ZGVidWciOiAiKiIsCiAgICAgICAgICAgICAgICAicGhwdW5pdC9waHAtaW52b2tlciI6ICJeMi4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiYmluIjogWwogICAgICAgICAgICAgICAgInBocHVuaXQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjcuMi1kZXYiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJjbGFzc21hcCI6IFsKICAgICAgICAgICAgICAgICAgICAic3JjLyIKICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJCU0QtMy1DbGF1c2UiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlNlYmFzdGlhbiBCZXJnbWFubiIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogInNlYmFzdGlhbkBwaHB1bml0LmRlIiwKICAgICAgICAgICAgICAgICAgICAicm9sZSI6ICJsZWFkIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVGhlIFBIUCBVbml0IFRlc3RpbmcgZnJhbWV3b3JrLiIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL3BocHVuaXQuZGUvIiwKICAgICAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAgICAgInBocHVuaXQiLAogICAgICAgICAgICAgICAgInRlc3RpbmciLAogICAgICAgICAgICAgICAgInh1bml0IgogICAgICAgICAgICBdLAogICAgICAgICAgICAidGltZSI6ICIyMDE4LTA2LTIxVDEzOjEzOjM5KzAwOjAwIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJzZWJhc3RpYW4vY29kZS11bml0LXJldmVyc2UtbG9va3VwIiwKICAgICAgICAgICAgInZlcnNpb24iOiAiMS4wLjEiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3NlYmFzdGlhbmJlcmdtYW5uL2NvZGUtdW5pdC1yZXZlcnNlLWxvb2t1cC5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICI0NDE5ZmNkYjVlYWJiOWNhYTYxYTI3YzdhMWRiNTMyYTZiNTVkZDE4IgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3Mvc2ViYXN0aWFuYmVyZ21hbm4vY29kZS11bml0LXJldmVyc2UtbG9va3VwL3ppcGJhbGwvNDQxOWZjZGI1ZWFiYjljYWE2MWEyN2M3YTFkYjUzMmE2YjU1ZGQxOCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjQ0MTlmY2RiNWVhYmI5Y2FhNjFhMjdjN2ExZGI1MzJhNmI1NWRkMTgiLAogICAgICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgInBocCI6ICJeNS42IHx8IF43LjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAgICAgICAgICJwaHB1bml0L3BocHVuaXQiOiAiXjUuNyB8fCBeNi4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImV4dHJhIjogewogICAgICAgICAgICAgICAgImJyYW5jaC1hbGlhcyI6IHsKICAgICAgICAgICAgICAgICAgICAiZGV2LW1hc3RlciI6ICIxLjAueC1kZXYiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJjbGFzc21hcCI6IFsKICAgICAgICAgICAgICAgICAgICAic3JjLyIKICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJCU0QtMy1DbGF1c2UiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlNlYmFzdGlhbiBCZXJnbWFubiIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogInNlYmFzdGlhbkBwaHB1bml0LmRlIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiTG9va3MgdXAgd2hpY2ggZnVuY3Rpb24gb3IgbWV0aG9kIGEgbGluZSBvZiBjb2RlIGJlbG9uZ3MgdG8iLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3NlYmFzdGlhbmJlcmdtYW5uL2NvZGUtdW5pdC1yZXZlcnNlLWxvb2t1cC8iLAogICAgICAgICAgICAidGltZSI6ICIyMDE3LTAzLTA0VDA2OjMwOjQxKzAwOjAwIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJzZWJhc3RpYW4vY29tcGFyYXRvciIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogIjMuMC4xIiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zZWJhc3RpYW5iZXJnbWFubi9jb21wYXJhdG9yLmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjU5MWEzMDkyMmY1NDY1NjY5NWU1OWIxZjM5NTAxYWVjNTEzNDAzZGEiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9zZWJhc3RpYW5iZXJnbWFubi9jb21wYXJhdG9yL3ppcGJhbGwvNTkxYTMwOTIyZjU0NjU2Njk1ZTU5YjFmMzk1MDFhZWM1MTM0MDNkYSIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjU5MWEzMDkyMmY1NDY1NjY5NWU1OWIxZjM5NTAxYWVjNTEzNDAzZGEiLAogICAgICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgInBocCI6ICJeNy4xIiwKICAgICAgICAgICAgICAgICJzZWJhc3RpYW4vZGlmZiI6ICJeMy4wIiwKICAgICAgICAgICAgICAgICJzZWJhc3RpYW4vZXhwb3J0ZXIiOiAiXjMuMSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJeNy4xIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImV4dHJhIjogewogICAgICAgICAgICAgICAgImJyYW5jaC1hbGlhcyI6IHsKICAgICAgICAgICAgICAgICAgICAiZGV2LW1hc3RlciI6ICIzLjAtZGV2IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAiY2xhc3NtYXAiOiBbCiAgICAgICAgICAgICAgICAgICAgInNyYy8iCiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiQlNELTMtQ2xhdXNlIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJKZWZmIFdlbGNoIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAid2hhdHRoZWplZmZAZ21haWwuY29tIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJWb2xrZXIgRHVzY2giLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJnaXRodWJAd2FsbGJhc2guY29tIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJCZXJuaGFyZCBTY2h1c3NlayIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogImJzY2h1c3Nla0AyYmVwdWJsaXNoZWQuYXQiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlNlYmFzdGlhbiBCZXJnbWFubiIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogInNlYmFzdGlhbkBwaHB1bml0LmRlIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiUHJvdmlkZXMgdGhlIGZ1bmN0aW9uYWxpdHkgdG8gY29tcGFyZSBQSFAgdmFsdWVzIGZvciBlcXVhbGl0eSIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vc2ViYXN0aWFuYmVyZ21hbm4vY29tcGFyYXRvciIsCiAgICAgICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgICAgICJjb21wYXJhdG9yIiwKICAgICAgICAgICAgICAgICJjb21wYXJlIiwKICAgICAgICAgICAgICAgICJlcXVhbGl0eSIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInRpbWUiOiAiMjAxOC0wNi0xNFQxNTowNToyOCswMDowMCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAic2ViYXN0aWFuL2RpZmYiLAogICAgICAgICAgICAidmVyc2lvbiI6ICIzLjAuMSIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc2ViYXN0aWFuYmVyZ21hbm4vZGlmZi5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICIzNjY1NDFiOTg5OTI3MTg3YzRjYTcwNDkwYTM1NjE1ZDNmZWYyZGNlIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3Mvc2ViYXN0aWFuYmVyZ21hbm4vZGlmZi96aXBiYWxsLzM2NjU0MWI5ODk5MjcxODdjNGNhNzA0OTBhMzU2MTVkM2ZlZjJkY2UiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICIzNjY1NDFiOTg5OTI3MTg3YzRjYTcwNDkwYTM1NjE1ZDNmZWYyZGNlIiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJwaHAiOiAiXjcuMSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJeNy4wIiwKICAgICAgICAgICAgICAgICJzeW1mb255L3Byb2Nlc3MiOiAiXjIgfHwgXjMuMyB8fCBeNCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgICAgICJleHRyYSI6IHsKICAgICAgICAgICAgICAgICJicmFuY2gtYWxpYXMiOiB7CiAgICAgICAgICAgICAgICAgICAgImRldi1tYXN0ZXIiOiAiMy4wLWRldiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgImNsYXNzbWFwIjogWwogICAgICAgICAgICAgICAgICAgICJzcmMvIgogICAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIkJTRC0zLUNsYXVzZSIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiS29yZSBOb3JkbWFubiIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogIm1haWxAa29yZS1ub3JkbWFubi5kZSIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiU2ViYXN0aWFuIEJlcmdtYW5uIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAic2ViYXN0aWFuQHBocHVuaXQuZGUiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJEaWZmIGltcGxlbWVudGF0aW9uIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zZWJhc3RpYW5iZXJnbWFubi9kaWZmIiwKICAgICAgICAgICAgImtleXdvcmRzIjogWwogICAgICAgICAgICAgICAgImRpZmYiLAogICAgICAgICAgICAgICAgInVkaWZmIiwKICAgICAgICAgICAgICAgICJ1bmlkaWZmIiwKICAgICAgICAgICAgICAgICJ1bmlmaWVkIGRpZmYiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJ0aW1lIjogIjIwMTgtMDYtMTBUMDc6NTQ6MzkrMDA6MDAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogInNlYmFzdGlhbi9lbnZpcm9ubWVudCIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogIjMuMS4wIiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zZWJhc3RpYW5iZXJnbWFubi9lbnZpcm9ubWVudC5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJjZDA4NzFiMzk3NWZiN2ZjNDRkMTEzMTRmZDFlZTIwOTI1ZmNlNGY1IgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3Mvc2ViYXN0aWFuYmVyZ21hbm4vZW52aXJvbm1lbnQvemlwYmFsbC9jZDA4NzFiMzk3NWZiN2ZjNDRkMTEzMTRmZDFlZTIwOTI1ZmNlNGY1IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiY2QwODcxYjM5NzVmYjdmYzQ0ZDExMzE0ZmQxZWUyMDkyNWZjZTRmNSIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAicGhwIjogIl43LjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAgICAgICAgICJwaHB1bml0L3BocHVuaXQiOiAiXjYuMSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgICAgICJleHRyYSI6IHsKICAgICAgICAgICAgICAgICJicmFuY2gtYWxpYXMiOiB7CiAgICAgICAgICAgICAgICAgICAgImRldi1tYXN0ZXIiOiAiMy4xLngtZGV2IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAiY2xhc3NtYXAiOiBbCiAgICAgICAgICAgICAgICAgICAgInNyYy8iCiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiQlNELTMtQ2xhdXNlIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJTZWJhc3RpYW4gQmVyZ21hbm4iLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJzZWJhc3RpYW5AcGhwdW5pdC5kZSIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlByb3ZpZGVzIGZ1bmN0aW9uYWxpdHkgdG8gaGFuZGxlIEhIVk0vUEhQIGVudmlyb25tZW50cyIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwOi8vd3d3LmdpdGh1Yi5jb20vc2ViYXN0aWFuYmVyZ21hbm4vZW52aXJvbm1lbnQiLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAiWGRlYnVnIiwKICAgICAgICAgICAgICAgICJlbnZpcm9ubWVudCIsCiAgICAgICAgICAgICAgICAiaGh2bSIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInRpbWUiOiAiMjAxNy0wNy0wMVQwODo1MTowMCswMDowMCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAic2ViYXN0aWFuL2V4cG9ydGVyIiwKICAgICAgICAgICAgInZlcnNpb24iOiAiMy4xLjAiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3NlYmFzdGlhbmJlcmdtYW5uL2V4cG9ydGVyLmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjIzNDE5OWY0NTI4ZGU2ZDEyYWFhNThiNjEyZTk4ZjdkMzZhZGI5MzciCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9zZWJhc3RpYW5iZXJnbWFubi9leHBvcnRlci96aXBiYWxsLzIzNDE5OWY0NTI4ZGU2ZDEyYWFhNThiNjEyZTk4ZjdkMzZhZGI5MzciLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICIyMzQxOTlmNDUyOGRlNmQxMmFhYTU4YjYxMmU5OGY3ZDM2YWRiOTM3IiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJwaHAiOiAiXjcuMCIsCiAgICAgICAgICAgICAgICAic2ViYXN0aWFuL3JlY3Vyc2lvbi1jb250ZXh0IjogIl4zLjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAgICAgICAgICJleHQtbWJzdHJpbmciOiAiKiIsCiAgICAgICAgICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIl42LjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjMuMS54LWRldiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgImNsYXNzbWFwIjogWwogICAgICAgICAgICAgICAgICAgICJzcmMvIgogICAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIkJTRC0zLUNsYXVzZSIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiSmVmZiBXZWxjaCIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogIndoYXR0aGVqZWZmQGdtYWlsLmNvbSIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiVm9sa2VyIER1c2NoIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAiZ2l0aHViQHdhbGxiYXNoLmNvbSIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiQmVybmhhcmQgU2NodXNzZWsiLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJic2NodXNzZWtAMmJlcHVibGlzaGVkLmF0IgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJTZWJhc3RpYW4gQmVyZ21hbm4iLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJzZWJhc3RpYW5AcGhwdW5pdC5kZSIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiQWRhbSBIYXJ2ZXkiLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJhaGFydmV5QHBocC5uZXQiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJQcm92aWRlcyB0aGUgZnVuY3Rpb25hbGl0eSB0byBleHBvcnQgUEhQIHZhcmlhYmxlcyBmb3IgdmlzdWFsaXphdGlvbiIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwOi8vd3d3LmdpdGh1Yi5jb20vc2ViYXN0aWFuYmVyZ21hbm4vZXhwb3J0ZXIiLAogICAgICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICAgICAiZXhwb3J0IiwKICAgICAgICAgICAgICAgICJleHBvcnRlciIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInRpbWUiOiAiMjAxNy0wNC0wM1QxMzoxOTowMiswMDowMCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAic2ViYXN0aWFuL2dsb2JhbC1zdGF0ZSIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogIjIuMC4wIiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zZWJhc3RpYW5iZXJnbWFubi9nbG9iYWwtc3RhdGUuZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiZThiYTAyZWVkN2JiYmI5ZTU5ZTQzZGVkZDNkZGRlZmY0YTU2YjBjNCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL3NlYmFzdGlhbmJlcmdtYW5uL2dsb2JhbC1zdGF0ZS96aXBiYWxsL2U4YmEwMmVlZDdiYmJiOWU1OWU0M2RlZGQzZGRkZWZmNGE1NmIwYzQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJlOGJhMDJlZWQ3YmJiYjllNTllNDNkZWRkM2RkZGVmZjRhNTZiMGM0IiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJwaHAiOiAiXjcuMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUtZGV2IjogewogICAgICAgICAgICAgICAgInBocHVuaXQvcGhwdW5pdCI6ICJeNi4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAic3VnZ2VzdCI6IHsKICAgICAgICAgICAgICAgICJleHQtdW9weiI6ICIqIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImV4dHJhIjogewogICAgICAgICAgICAgICAgImJyYW5jaC1hbGlhcyI6IHsKICAgICAgICAgICAgICAgICAgICAiZGV2LW1hc3RlciI6ICIyLjAtZGV2IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAiY2xhc3NtYXAiOiBbCiAgICAgICAgICAgICAgICAgICAgInNyYy8iCiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiQlNELTMtQ2xhdXNlIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJTZWJhc3RpYW4gQmVyZ21hbm4iLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJzZWJhc3RpYW5AcGhwdW5pdC5kZSIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlNuYXBzaG90dGluZyBvZiBnbG9iYWwgc3RhdGUiLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cDovL3d3dy5naXRodWIuY29tL3NlYmFzdGlhbmJlcmdtYW5uL2dsb2JhbC1zdGF0ZSIsCiAgICAgICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgICAgICJnbG9iYWwgc3RhdGUiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJ0aW1lIjogIjIwMTctMDQtMjdUMTU6Mzk6MjYrMDA6MDAiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICAgICJuYW1lIjogInNlYmFzdGlhbi9vYmplY3QtZW51bWVyYXRvciIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogIjMuMC4zIiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zZWJhc3RpYW5iZXJnbWFubi9vYmplY3QtZW51bWVyYXRvci5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICI3Y2ZkOWU2NWQxMWZmYjVhZjQxMTk4NDc2Mzk1Nzc0ZDRjOGE4NGM1IgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3Mvc2ViYXN0aWFuYmVyZ21hbm4vb2JqZWN0LWVudW1lcmF0b3IvemlwYmFsbC83Y2ZkOWU2NWQxMWZmYjVhZjQxMTk4NDc2Mzk1Nzc0ZDRjOGE4NGM1IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiN2NmZDllNjVkMTFmZmI1YWY0MTE5ODQ3NjM5NTc3NGQ0YzhhODRjNSIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAicGhwIjogIl43LjAiLAogICAgICAgICAgICAgICAgInNlYmFzdGlhbi9vYmplY3QtcmVmbGVjdG9yIjogIl4xLjEuMSIsCiAgICAgICAgICAgICAgICAic2ViYXN0aWFuL3JlY3Vyc2lvbi1jb250ZXh0IjogIl4zLjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAgICAgICAgICJwaHB1bml0L3BocHVuaXQiOiAiXjYuMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgICAgICJleHRyYSI6IHsKICAgICAgICAgICAgICAgICJicmFuY2gtYWxpYXMiOiB7CiAgICAgICAgICAgICAgICAgICAgImRldi1tYXN0ZXIiOiAiMy4wLngtZGV2IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAiY2xhc3NtYXAiOiBbCiAgICAgICAgICAgICAgICAgICAgInNyYy8iCiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiQlNELTMtQ2xhdXNlIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJTZWJhc3RpYW4gQmVyZ21hbm4iLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJzZWJhc3RpYW5AcGhwdW5pdC5kZSIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlRyYXZlcnNlcyBhcnJheSBzdHJ1Y3R1cmVzIGFuZCBvYmplY3QgZ3JhcGhzIHRvIGVudW1lcmF0ZSBhbGwgcmVmZXJlbmNlZCBvYmplY3RzIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zZWJhc3RpYW5iZXJnbWFubi9vYmplY3QtZW51bWVyYXRvci8iLAogICAgICAgICAgICAidGltZSI6ICIyMDE3LTA4LTAzVDEyOjM1OjI2KzAwOjAwIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJzZWJhc3RpYW4vb2JqZWN0LXJlZmxlY3RvciIsCiAgICAgICAgICAgICJ2ZXJzaW9uIjogIjEuMS4xIiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zZWJhc3RpYW5iZXJnbWFubi9vYmplY3QtcmVmbGVjdG9yLmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjc3M2Y5N2M2N2YyOGRlMDBkMzk3YmUzMDE4MjFiMDY3MDhmY2EwYmUiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9zZWJhc3RpYW5iZXJnbWFubi9vYmplY3QtcmVmbGVjdG9yL3ppcGJhbGwvNzczZjk3YzY3ZjI4ZGUwMGQzOTdiZTMwMTgyMWIwNjcwOGZjYTBiZSIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjc3M2Y5N2M2N2YyOGRlMDBkMzk3YmUzMDE4MjFiMDY3MDhmY2EwYmUiLAogICAgICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgInBocCI6ICJeNy4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIl42LjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjEuMS1kZXYiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJjbGFzc21hcCI6IFsKICAgICAgICAgICAgICAgICAgICAic3JjLyIKICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJCU0QtMy1DbGF1c2UiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlNlYmFzdGlhbiBCZXJnbWFubiIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogInNlYmFzdGlhbkBwaHB1bml0LmRlIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQWxsb3dzIHJlZmxlY3Rpb24gb2Ygb2JqZWN0IGF0dHJpYnV0ZXMsIGluY2x1ZGluZyBpbmhlcml0ZWQgYW5kIG5vbi1wdWJsaWMgb25lcyIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL2dpdGh1Yi5jb20vc2ViYXN0aWFuYmVyZ21hbm4vb2JqZWN0LXJlZmxlY3Rvci8iLAogICAgICAgICAgICAidGltZSI6ICIyMDE3LTAzLTI5VDA5OjA3OjI3KzAwOjAwIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJzZWJhc3RpYW4vcmVjdXJzaW9uLWNvbnRleHQiLAogICAgICAgICAgICAidmVyc2lvbiI6ICIzLjAuMCIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc2ViYXN0aWFuYmVyZ21hbm4vcmVjdXJzaW9uLWNvbnRleHQuZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiNWIwY2Q3MjM1MDJiYWMzYjAwNmNiZjNkYmY3YTFlM2ZjZWZlNGZhOCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL3NlYmFzdGlhbmJlcmdtYW5uL3JlY3Vyc2lvbi1jb250ZXh0L3ppcGJhbGwvNWIwY2Q3MjM1MDJiYWMzYjAwNmNiZjNkYmY3YTFlM2ZjZWZlNGZhOCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogIjViMGNkNzIzNTAyYmFjM2IwMDZjYmYzZGJmN2ExZTNmY2VmZTRmYTgiLAogICAgICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgInBocCI6ICJeNy4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIl42LjAiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjMuMC54LWRldiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgImNsYXNzbWFwIjogWwogICAgICAgICAgICAgICAgICAgICJzcmMvIgogICAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIkJTRC0zLUNsYXVzZSIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiSmVmZiBXZWxjaCIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogIndoYXR0aGVqZWZmQGdtYWlsLmNvbSIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiU2ViYXN0aWFuIEJlcmdtYW5uIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAic2ViYXN0aWFuQHBocHVuaXQuZGUiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkFkYW0gSGFydmV5IiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAiYWhhcnZleUBwaHAubmV0IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiUHJvdmlkZXMgZnVuY3Rpb25hbGl0eSB0byByZWN1cnNpdmVseSBwcm9jZXNzIFBIUCB2YXJpYWJsZXMiLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cDovL3d3dy5naXRodWIuY29tL3NlYmFzdGlhbmJlcmdtYW5uL3JlY3Vyc2lvbi1jb250ZXh0IiwKICAgICAgICAgICAgInRpbWUiOiAiMjAxNy0wMy0wM1QwNjoyMzo1NyswMDowMCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAic2ViYXN0aWFuL3Jlc291cmNlLW9wZXJhdGlvbnMiLAogICAgICAgICAgICAidmVyc2lvbiI6ICIxLjAuMCIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc2ViYXN0aWFuYmVyZ21hbm4vcmVzb3VyY2Utb3BlcmF0aW9ucy5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJjZTk5MGJiMjE3NTlmOTRhZWFmZDMwMjA5ZThjZmNkZmE4YmMzZjUyIgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3Mvc2ViYXN0aWFuYmVyZ21hbm4vcmVzb3VyY2Utb3BlcmF0aW9ucy96aXBiYWxsL2NlOTkwYmIyMTc1OWY5NGFlYWZkMzAyMDllOGNmY2RmYThiYzNmNTIiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJjZTk5MGJiMjE3NTlmOTRhZWFmZDMwMjA5ZThjZmNkZmE4YmMzZjUyIiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJwaHAiOiAiPj01LjYuMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgICAgICJleHRyYSI6IHsKICAgICAgICAgICAgICAgICJicmFuY2gtYWxpYXMiOiB7CiAgICAgICAgICAgICAgICAgICAgImRldi1tYXN0ZXIiOiAiMS4wLngtZGV2IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAiY2xhc3NtYXAiOiBbCiAgICAgICAgICAgICAgICAgICAgInNyYy8iCiAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiQlNELTMtQ2xhdXNlIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJTZWJhc3RpYW4gQmVyZ21hbm4iLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJzZWJhc3RpYW5AcGhwdW5pdC5kZSIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlByb3ZpZGVzIGEgbGlzdCBvZiBQSFAgYnVpbHQtaW4gZnVuY3Rpb25zIHRoYXQgb3BlcmF0ZSBvbiByZXNvdXJjZXMiLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly93d3cuZ2l0aHViLmNvbS9zZWJhc3RpYW5iZXJnbWFubi9yZXNvdXJjZS1vcGVyYXRpb25zIiwKICAgICAgICAgICAgInRpbWUiOiAiMjAxNS0wNy0yOFQyMDozNDo0NyswMDowMCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAic2ViYXN0aWFuL3ZlcnNpb24iLAogICAgICAgICAgICAidmVyc2lvbiI6ICIyLjAuMSIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc2ViYXN0aWFuYmVyZ21hbm4vdmVyc2lvbi5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICI5OTczMmJlMGRkYjMzNjFlMTZhZDc3YjY4YmE0MWVmYzhlOTc5MDE5IgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3Mvc2ViYXN0aWFuYmVyZ21hbm4vdmVyc2lvbi96aXBiYWxsLzk5NzMyYmUwZGRiMzM2MWUxNmFkNzdiNjhiYTQxZWZjOGU5NzkwMTkiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICI5OTczMmJlMGRkYjMzNjFlMTZhZDc3YjY4YmE0MWVmYzhlOTc5MDE5IiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJwaHAiOiAiPj01LjYiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICAgICAiZXh0cmEiOiB7CiAgICAgICAgICAgICAgICAiYnJhbmNoLWFsaWFzIjogewogICAgICAgICAgICAgICAgICAgICJkZXYtbWFzdGVyIjogIjIuMC54LWRldiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgImNsYXNzbWFwIjogWwogICAgICAgICAgICAgICAgICAgICJzcmMvIgogICAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIkJTRC0zLUNsYXVzZSIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiU2ViYXN0aWFuIEJlcmdtYW5uIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAic2ViYXN0aWFuQHBocHVuaXQuZGUiLAogICAgICAgICAgICAgICAgICAgICJyb2xlIjogImxlYWQiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMaWJyYXJ5IHRoYXQgaGVscHMgd2l0aCBtYW5hZ2luZyB0aGUgdmVyc2lvbiBudW1iZXIgb2YgR2l0LWhvc3RlZCBQSFAgcHJvamVjdHMiLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9naXRodWIuY29tL3NlYmFzdGlhbmJlcmdtYW5uL3ZlcnNpb24iLAogICAgICAgICAgICAidGltZSI6ICIyMDE2LTEwLTAzVDA3OjM1OjIxKzAwOjAwIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJzeW1mb255L3RyYW5zbGF0aW9uIiwKICAgICAgICAgICAgInZlcnNpb24iOiAidjQuMS4xIiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zeW1mb255L3RyYW5zbGF0aW9uLmdpdCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogImI2ZDgxNjQwODVlZTBiNmRlYmNkMWI3YTEzMWZkNmY2M2JiMDQ4NTQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJkaXN0IjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy9zeW1mb255L3RyYW5zbGF0aW9uL3ppcGJhbGwvYjZkODE2NDA4NWVlMGI2ZGViY2QxYjdhMTMxZmQ2ZjYzYmIwNDg1NCIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogImI2ZDgxNjQwODVlZTBiNmRlYmNkMWI3YTEzMWZkNmY2M2JiMDQ4NTQiLAogICAgICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgInBocCI6ICJeNy4xLjMiLAogICAgICAgICAgICAgICAgInN5bWZvbnkvcG9seWZpbGwtbWJzdHJpbmciOiAifjEuMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImNvbmZsaWN0IjogewogICAgICAgICAgICAgICAgInN5bWZvbnkvY29uZmlnIjogIjwzLjQiLAogICAgICAgICAgICAgICAgInN5bWZvbnkvZGVwZW5kZW5jeS1pbmplY3Rpb24iOiAiPDMuNCIsCiAgICAgICAgICAgICAgICAic3ltZm9ueS95YW1sIjogIjwzLjQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAgICAgICAgICJwc3IvbG9nIjogIn4xLjAiLAogICAgICAgICAgICAgICAgInN5bWZvbnkvY29uZmlnIjogIn4zLjR8fjQuMCIsCiAgICAgICAgICAgICAgICAic3ltZm9ueS9jb25zb2xlIjogIn4zLjR8fjQuMCIsCiAgICAgICAgICAgICAgICAic3ltZm9ueS9kZXBlbmRlbmN5LWluamVjdGlvbiI6ICJ+My40fH40LjAiLAogICAgICAgICAgICAgICAgInN5bWZvbnkvZmluZGVyIjogIn4yLjh8fjMuMHx+NC4wIiwKICAgICAgICAgICAgICAgICJzeW1mb255L2ludGwiOiAifjMuNHx+NC4wIiwKICAgICAgICAgICAgICAgICJzeW1mb255L3lhbWwiOiAifjMuNHx+NC4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAic3VnZ2VzdCI6IHsKICAgICAgICAgICAgICAgICJwc3IvbG9nLWltcGxlbWVudGF0aW9uIjogIlRvIHVzZSBsb2dnaW5nIGNhcGFiaWxpdHkgaW4gdHJhbnNsYXRvciIsCiAgICAgICAgICAgICAgICAic3ltZm9ueS9jb25maWciOiAiIiwKICAgICAgICAgICAgICAgICJzeW1mb255L3lhbWwiOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImV4dHJhIjogewogICAgICAgICAgICAgICAgImJyYW5jaC1hbGlhcyI6IHsKICAgICAgICAgICAgICAgICAgICAiZGV2LW1hc3RlciI6ICI0LjEtZGV2IgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgIlN5bWZvbnlcXENvbXBvbmVudFxcVHJhbnNsYXRpb25cXCI6ICIiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgImV4Y2x1ZGUtZnJvbS1jbGFzc21hcCI6IFsKICAgICAgICAgICAgICAgICAgICAiL1Rlc3RzLyIKICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgIm5vdGlmaWNhdGlvbi11cmwiOiAiaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL2Rvd25sb2Fkcy8iLAogICAgICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgICAgICJNSVQiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIkZhYmllbiBQb3RlbmNpZXIiLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJmYWJpZW5Ac3ltZm9ueS5jb20iCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlN5bWZvbnkgQ29tbXVuaXR5IiwKICAgICAgICAgICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cHM6Ly9zeW1mb255LmNvbS9jb250cmlidXRvcnMiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJTeW1mb255IFRyYW5zbGF0aW9uIENvbXBvbmVudCIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwczovL3N5bWZvbnkuY29tIiwKICAgICAgICAgICAgInRpbWUiOiAiMjAxOC0wNi0yMlQwODo1OTozOSswMDowMCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAidGhlc2Vlci90b2tlbml6ZXIiLAogICAgICAgICAgICAidmVyc2lvbiI6ICIxLjEuMCIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vdGhlc2Vlci90b2tlbml6ZXIuZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiY2IyZjAwOGYzZjA1YWYyODkzYTg3MjA4ZmU2YTZjNDk4NTQ4M2Y4YiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL3RoZXNlZXIvdG9rZW5pemVyL3ppcGJhbGwvY2IyZjAwOGYzZjA1YWYyODkzYTg3MjA4ZmU2YTZjNDk4NTQ4M2Y4YiIsCiAgICAgICAgICAgICAgICAicmVmZXJlbmNlIjogImNiMmYwMDhmM2YwNWFmMjg5M2E4NzIwOGZlNmE2YzQ5ODU0ODNmOGIiLAogICAgICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJyZXF1aXJlIjogewogICAgICAgICAgICAgICAgImV4dC1kb20iOiAiKiIsCiAgICAgICAgICAgICAgICAiZXh0LXRva2VuaXplciI6ICIqIiwKICAgICAgICAgICAgICAgICJleHQteG1sd3JpdGVyIjogIioiLAogICAgICAgICAgICAgICAgInBocCI6ICJeNy4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgImNsYXNzbWFwIjogWwogICAgICAgICAgICAgICAgICAgICJzcmMvIgogICAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIkJTRC0zLUNsYXVzZSIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiQXJuZSBCbGFua2VydHMiLAogICAgICAgICAgICAgICAgICAgICJlbWFpbCI6ICJhcm5lQGJsYW5rZXJ0cy5kZSIsCiAgICAgICAgICAgICAgICAgICAgInJvbGUiOiAiRGV2ZWxvcGVyIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICBdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQSBzbWFsbCBsaWJyYXJ5IGZvciBjb252ZXJ0aW5nIHRva2VuaXplZCBQSFAgc291cmNlIGNvZGUgaW50byBYTUwgYW5kIHBvdGVudGlhbGx5IG90aGVyIGZvcm1hdHMiLAogICAgICAgICAgICAidGltZSI6ICIyMDE3LTA0LTA3VDEyOjA4OjU0KzAwOjAwIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJ3ZWJtb3phcnQvYXNzZXJ0IiwKICAgICAgICAgICAgInZlcnNpb24iOiAiMS4zLjAiLAogICAgICAgICAgICAic291cmNlIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgICAgICJ1cmwiOiAiaHR0cHM6Ly9naXRodWIuY29tL3dlYm1vemFydC9hc3NlcnQuZ2l0IiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiMGRmMTkwODk2MmU3YTMwNzE1NjRlODU3ZDg2ODc0ZGFkMWVmMjA0YSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgImRpc3QiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJ6aXAiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL3dlYm1vemFydC9hc3NlcnQvemlwYmFsbC8wZGYxOTA4OTYyZTdhMzA3MTU2NGU4NTdkODY4NzRkYWQxZWYyMDRhIiwKICAgICAgICAgICAgICAgICJyZWZlcmVuY2UiOiAiMGRmMTkwODk2MmU3YTMwNzE1NjRlODU3ZDg2ODc0ZGFkMWVmMjA0YSIsCiAgICAgICAgICAgICAgICAic2hhc3VtIjogIiIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICAgICAicGhwIjogIl41LjMuMyB8fCBeNy4wIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgICAgICAgICAicGhwdW5pdC9waHB1bml0IjogIl40LjYiLAogICAgICAgICAgICAgICAgInNlYmFzdGlhbi92ZXJzaW9uIjogIl4xLjAuMSIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgICAgICJleHRyYSI6IHsKICAgICAgICAgICAgICAgICJicmFuY2gtYWxpYXMiOiB7CiAgICAgICAgICAgICAgICAgICAgImRldi1tYXN0ZXIiOiAiMS4zLWRldiIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJXZWJtb3phcnRcXEFzc2VydFxcIjogInNyYy8iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAgICAgImxpY2Vuc2UiOiBbCiAgICAgICAgICAgICAgICAiTUlUIgogICAgICAgICAgICBdLAogICAgICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAibmFtZSI6ICJCZXJuaGFyZCBTY2h1c3NlayIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogImJzY2h1c3Nla0BnbWFpbC5jb20iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBc3NlcnRpb25zIHRvIHZhbGlkYXRlIG1ldGhvZCBpbnB1dC9vdXRwdXQgd2l0aCBuaWNlIGVycm9yIG1lc3NhZ2VzLiIsCiAgICAgICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgICAgICJhc3NlcnQiLAogICAgICAgICAgICAgICAgImNoZWNrIiwKICAgICAgICAgICAgICAgICJ2YWxpZGF0ZSIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgInRpbWUiOiAiMjAxOC0wMS0yOVQxOTo0OTo0MSswMDowMCIKICAgICAgICB9CiAgICBdLAogICAgImFsaWFzZXMiOiBbXSwKICAgICJtaW5pbXVtLXN0YWJpbGl0eSI6ICJkZXYiLAogICAgInN0YWJpbGl0eS1mbGFncyI6IFtdLAogICAgInByZWZlci1zdGFibGUiOiB0cnVlLAogICAgInByZWZlci1sb3dlc3QiOiBmYWxzZSwKICAgICJwbGF0Zm9ybSI6IHsKICAgICAgICAicGhwIjogIj49Ny4xLjMiCiAgICB9LAogICAgInBsYXRmb3JtLWRldiI6IFtdCn0KAppDevTools/query/vendor/tightenco/collect/phpunit.xmlPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHBocHVuaXQgYmFja3VwR2xvYmFscz0iZmFsc2UiCiAgICAgICAgIGJhY2t1cFN0YXRpY0F0dHJpYnV0ZXM9ImZhbHNlIgogICAgICAgICBib290c3RyYXA9InRlc3RzL2Jvb3RzdHJhcC5waHAiCiAgICAgICAgIGNvbG9ycz0idHJ1ZSIKICAgICAgICAgY29udmVydEVycm9yc1RvRXhjZXB0aW9ucz0idHJ1ZSIKICAgICAgICAgY29udmVydE5vdGljZXNUb0V4Y2VwdGlvbnM9InRydWUiCiAgICAgICAgIGNvbnZlcnRXYXJuaW5nc1RvRXhjZXB0aW9ucz0idHJ1ZSIKICAgICAgICAgcHJvY2Vzc0lzb2xhdGlvbj0iZmFsc2UiCiAgICAgICAgIHN0b3BPbkVycm9yPSJmYWxzZSIKICAgICAgICAgc3RvcE9uRmFpbHVyZT0iZmFsc2UiCiAgICAgICAgIHZlcmJvc2U9InRydWUiCj4KICAgIDx0ZXN0c3VpdGVzPgogICAgICAgIDx0ZXN0c3VpdGUgbmFtZT0iTGFyYXZlbCBUZXN0IFN1aXRlIj4KICAgICAgICAgICAgPGRpcmVjdG9yeSBzdWZmaXg9IlRlc3QucGhwIj4uL3Rlc3RzPC9kaXJlY3Rvcnk+CiAgICAgICAgPC90ZXN0c3VpdGU+CiAgICA8L3Rlc3RzdWl0ZXM+CjwvcGhwdW5pdD4KAppDevTools/query/vendor/tightenco/collect/readme.mdWyFbVHJhdmlzIFN0YXR1cyBmb3IgdGlnaHRlbmNvL2NvbGxlY3RdKGh0dHBzOi8vdHJhdmlzLWNpLm9yZy90aWdodGVuY28vY29sbGVjdC5zdmc/YnJhbmNoPW1hc3RlcildKGh0dHBzOi8vdHJhdmlzLWNpLm9yZy90aWdodGVuY28vY29sbGVjdCkKCiFbXShodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vdGlnaHRlbmNvL2NvbGxlY3QvbWFzdGVyL2NvbGxlY3QtbG9nby5wbmcpCgojIENvbGxlY3QgLSBJbGx1bWluYXRlIENvbGxlY3Rpb25zCgpJbXBvcnQgW0xhcmF2ZWwncyBDb2xsZWN0aW9uc10oaHR0cHM6Ly9sYXJhdmVsLmNvbS9kb2NzL2NvbGxlY3Rpb25zKSBpbnRvIG5vbi1MYXJhdmVsIHBhY2thZ2VzIGVhc2lseSwgd2l0aG91dCBuZWVkaW5nIHRvIHJlcXVpcmUgdGhlIGVudGlyZSBgSWxsdW1pbmF0ZVxTdXBwb3J0YCBwYWNrYWdlLiAoW1doeSBub3QgcHVsbCBgSWxsdW1pbmF0ZVxTdXBwb3J0YCBpbiBmcmFtZXdvcmstYWdub3N0aWMgcGFja2FnZXNdKGh0dHBzOi8veXVsb2guZ2l0aHViLmlvLzIwMTYvZG9udC11c2UtaWxsdW1pbmF0ZS1zdXBwb3J0LykpCgpXcml0dGVuIGJ5IFRheWxvciBPdHdlbGwgYXMgYSBwYXJ0IG9mIExhcmF2ZWwncyBbSWxsdW1pbmF0ZS9TdXBwb3J0XShodHRwczovL2dpdGh1Yi5jb20vaWxsdW1pbmF0ZS9zdXBwb3J0KSBwYWNrYWdlLCBDb2xsZWN0IGlzIGp1c3QgdGhlIGNvZGUgZnJvbSBTdXBwb3J0IG5lZWRlZCBpbiBvcmRlciB0byB1c2UgQ29sbGVjdGlvbnMgb24gdGhlaXIgb3duLgoKTG92aW5nbHkgc3BsaXQgYnkgTWF0dCBTdGF1ZmZlciBmb3IgW1RpZ2h0ZW4gQ28uXShodHRwczovL3RpZ2h0ZW4uY28vKSwgd2l0aCBhIGtpY2sgaW4gdGhlIGJ1dHQgdG8gZmluYWxseSBkbyBpdCBmcm9tIFtAYXNzZXJ0Y2hyaXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9hc3NlcnRjaHJpcykuCgojIyBJbnN0YWxsYXRpb24KCldpdGggW0NvbXBvc2VyXShodHRwczovL2dldGNvbXBvc2VyLm9yZyk6CgpgYGBiYXNoCmNvbXBvc2VyIHJlcXVpcmUgdGlnaHRlbmNvL2NvbGxlY3QKYGBgCgoKIyMgRkFRCiAtICoqV2lsbCB0aGlzIGRldmVsb3AgaW5kZXBlbmRlbnRseSBmcm9tIElsbHVtaW5hdGUncyBDb2xsZWN0aW9ucz8qKiAgCiAgICBOby4gUmlnaHQgbm93IGl0J3Mgc3BsaXQgbWFudWFsbHksIGJ1dCB0aGUgZ29hbCBpcyBmb3IgaXQgc2hvcnRseSB0byBiZSBzcGxpdCBhdXRvbWF0aWNhbGx5IHRvIGtlZXAgaXQgaW4gc3luYyB3aXRoIExhcmF2ZWwncyBDb2xsZWN0aW9ucywgZXZlbiBtaXJyb3JpbmcgdGhlIHJlbGVhc2UgbnVtYmVycy4KIC0gKipXaHkgaXMgdGhlIHBhY2thZ2UgYHRpZ2h0ZW5jby9jb2xsZWN0YCBpbnN0ZWFkIG9mIGBpbGx1bWluYXRlL2NvbGxlY3RgPyoqICAKICAgIEl0J3Mgbm90IGFuIG9mZmljaWFsIExhcmF2ZWwgcGFja2FnZSBzbyB3ZSBkb24ndCB3YW50IHRvIHVzZSB0aGUgUGFja2FnaXN0IG5hbWVzcGFjZSByZXNlcnZlZCBieSBMYXJhdmVsIHBhY2thZ2VzLiBPbmUgZGF5IGBDb2xsZWN0aW9uYCBtYXkgYmUgZXh0cmFjdGVkIGZyb20gYGlsbHVtaW5hdGUvc3VwcG9ydGAgdG8gYSBuZXcgcGFja2FnZS4gSWYgc28sIHdlJ2xsIGRlcHJlY2F0ZSB0aGlzIHBhY2thZ2UgYW5kIHBvaW50IHRvIHRoZSBjb3JlIHZlcnNpb24uCiAtICoqV2h5IG5vdCBqdXN0IHVzZSBhbiBhcnJheT8qKiAgCiAgICBXaGF0IGEgZ3JlYXQgcXVlc3Rpb24uIFtUaWdodGVuIGFsdW0gQWRhbSBXYXRoYW4gaGFzIGEgYm9vayBhYm91dCB0aGF0Ll0oaHR0cHM6Ly9hZGFtd2F0aGFuLm1lL3JlZmFjdG9yaW5nLXRvLWNvbGxlY3Rpb25zLykKCiMjIExpY2Vuc2UKClRoZSBMYXJhdmVsIGZyYW1ld29yayBpcyBvcGVuLXNvdXJjZWQgc29mdHdhcmUgbGljZW5zZWQgdW5kZXIgdGhlIFtNSVQgbGljZW5zZV0oaHR0cDovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVCkuIENvbGxlY3QgY29uc2lzdHMgYWxtb3N0IGVudGlyZWx5IG9mIExhcmF2ZWwgc291cmNlIGNvZGUsIHNvIG1haW50YWlucyB0aGUgc2FtZSBsaWNlbnNlLgo=AppDevTools/query/vendor/tightenco/collect/src/Collect/Contracts/Support/Arrayable.phpPD9waHAKCm5hbWVzcGFjZSBUaWdodGVuY29cQ29sbGVjdFxDb250cmFjdHNcU3VwcG9ydDsKCmludGVyZmFjZSBBcnJheWFibGUKewogICAgLyoqCiAgICAgKiBHZXQgdGhlIGluc3RhbmNlIGFzIGFuIGFycmF5LgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvQXJyYXkoKTsKfQo=AppDevTools/query/vendor/tightenco/collect/src/Collect/Contracts/Support/Htmlable.phpPD9waHAKCm5hbWVzcGFjZSBUaWdodGVuY29cQ29sbGVjdFxDb250cmFjdHNcU3VwcG9ydDsKCmludGVyZmFjZSBIdG1sYWJsZQp7CiAgICAvKioKICAgICAqIEdldCBjb250ZW50IGFzIGEgc3RyaW5nIG9mIEhUTUwuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvSHRtbCgpOwp9Cg==AppDevTools/query/vendor/tightenco/collect/src/Collect/Contracts/Support/Jsonable.phpPD9waHAKCm5hbWVzcGFjZSBUaWdodGVuY29cQ29sbGVjdFxDb250cmFjdHNcU3VwcG9ydDsKCmludGVyZmFjZSBKc29uYWJsZQp7CiAgICAvKioKICAgICAqIENvbnZlcnQgdGhlIG9iamVjdCB0byBpdHMgSlNPTiByZXByZXNlbnRhdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gIGludCAgJG9wdGlvbnMKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0b0pzb24oJG9wdGlvbnMgPSAwKTsKfQo=AppDevTools/query/vendor/tightenco/collect/src/Collect/Support/Arr.phpPD9waHAKCm5hbWVzcGFjZSBUaWdodGVuY29cQ29sbGVjdFxTdXBwb3J0OwoKdXNlIEFycmF5QWNjZXNzOwp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwp1c2UgVGlnaHRlbmNvXENvbGxlY3RcU3VwcG9ydFxUcmFpdHNcTWFjcm9hYmxlOwoKY2xhc3MgQXJyCnsKICAgIHVzZSBNYWNyb2FibGU7CgogICAgLyoqCiAgICAgKiBEZXRlcm1pbmUgd2hldGhlciB0aGUgZ2l2ZW4gdmFsdWUgaXMgYXJyYXkgYWNjZXNzaWJsZS4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAkdmFsdWUKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGFjY2Vzc2libGUoJHZhbHVlKQogICAgewogICAgICAgIHJldHVybiBpc19hcnJheSgkdmFsdWUpIHx8ICR2YWx1ZSBpbnN0YW5jZW9mIEFycmF5QWNjZXNzOwogICAgfQoKICAgIC8qKgogICAgICogQWRkIGFuIGVsZW1lbnQgdG8gYW4gYXJyYXkgdXNpbmcgImRvdCIgbm90YXRpb24gaWYgaXQgZG9lc24ndCBleGlzdC4KICAgICAqCiAgICAgKiBAcGFyYW0gIGFycmF5ICAgJGFycmF5CiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJGtleQogICAgICogQHBhcmFtICBtaXhlZCAgICR2YWx1ZQogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGFkZCgkYXJyYXksICRrZXksICR2YWx1ZSkKICAgIHsKICAgICAgICBpZiAoaXNfbnVsbChzdGF0aWM6OmdldCgkYXJyYXksICRrZXkpKSkgewogICAgICAgICAgICBzdGF0aWM6OnNldCgkYXJyYXksICRrZXksICR2YWx1ZSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGFycmF5OwogICAgfQoKICAgIC8qKgogICAgICogQ29sbGFwc2UgYW4gYXJyYXkgb2YgYXJyYXlzIGludG8gYSBzaW5nbGUgYXJyYXkuCiAgICAgKgogICAgICogQHBhcmFtICBhcnJheSAgJGFycmF5CiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY29sbGFwc2UoJGFycmF5KQogICAgewogICAgICAgICRyZXN1bHRzID0gW107CgogICAgICAgIGZvcmVhY2ggKCRhcnJheSBhcyAkdmFsdWVzKSB7CiAgICAgICAgICAgIGlmICgkdmFsdWVzIGluc3RhbmNlb2YgQ29sbGVjdGlvbikgewogICAgICAgICAgICAgICAgJHZhbHVlcyA9ICR2YWx1ZXMtPmFsbCgpOwogICAgICAgICAgICB9IGVsc2VpZiAoISBpc19hcnJheSgkdmFsdWVzKSkgewogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRyZXN1bHRzID0gYXJyYXlfbWVyZ2UoJHJlc3VsdHMsICR2YWx1ZXMpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXN1bHRzOwogICAgfQoKICAgIC8qKgogICAgICogQ3Jvc3Mgam9pbiB0aGUgZ2l2ZW4gYXJyYXlzLCByZXR1cm5pbmcgYWxsIHBvc3NpYmxlIHBlcm11dGF0aW9ucy4KICAgICAqCiAgICAgKiBAcGFyYW0gIGFycmF5ICAuLi4kYXJyYXlzCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3Jvc3NKb2luKC4uLiRhcnJheXMpCiAgICB7CiAgICAgICAgJHJlc3VsdHMgPSBbW11dOwoKICAgICAgICBmb3JlYWNoICgkYXJyYXlzIGFzICRpbmRleCA9PiAkYXJyYXkpIHsKICAgICAgICAgICAgJGFwcGVuZCA9IFtdOwoKICAgICAgICAgICAgZm9yZWFjaCAoJHJlc3VsdHMgYXMgJHByb2R1Y3QpIHsKICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRhcnJheSBhcyAkaXRlbSkgewogICAgICAgICAgICAgICAgICAgICRwcm9kdWN0WyRpbmRleF0gPSAkaXRlbTsKCiAgICAgICAgICAgICAgICAgICAgJGFwcGVuZFtdID0gJHByb2R1Y3Q7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRyZXN1bHRzID0gJGFwcGVuZDsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVzdWx0czsKICAgIH0KCiAgICAvKioKICAgICAqIERpdmlkZSBhbiBhcnJheSBpbnRvIHR3byBhcnJheXMuIE9uZSB3aXRoIGtleXMgYW5kIHRoZSBvdGhlciB3aXRoIHZhbHVlcy4KICAgICAqCiAgICAgKiBAcGFyYW0gIGFycmF5ICAkYXJyYXkKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkaXZpZGUoJGFycmF5KQogICAgewogICAgICAgIHJldHVybiBbYXJyYXlfa2V5cygkYXJyYXkpLCBhcnJheV92YWx1ZXMoJGFycmF5KV07CiAgICB9CgogICAgLyoqCiAgICAgKiBGbGF0dGVuIGEgbXVsdGktZGltZW5zaW9uYWwgYXNzb2NpYXRpdmUgYXJyYXkgd2l0aCBkb3RzLgogICAgICoKICAgICAqIEBwYXJhbSAgYXJyYXkgICAkYXJyYXkKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkcHJlcGVuZAogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGRvdCgkYXJyYXksICRwcmVwZW5kID0gJycpCiAgICB7CiAgICAgICAgJHJlc3VsdHMgPSBbXTsKCiAgICAgICAgZm9yZWFjaCAoJGFycmF5IGFzICRrZXkgPT4gJHZhbHVlKSB7CiAgICAgICAgICAgIGlmIChpc19hcnJheSgkdmFsdWUpICYmICEgZW1wdHkoJHZhbHVlKSkgewogICAgICAgICAgICAgICAgJHJlc3VsdHMgPSBhcnJheV9tZXJnZSgkcmVzdWx0cywgc3RhdGljOjpkb3QoJHZhbHVlLCAkcHJlcGVuZC4ka2V5LicuJykpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHJlc3VsdHNbJHByZXBlbmQuJGtleV0gPSAkdmFsdWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVzdWx0czsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCBhbGwgb2YgdGhlIGdpdmVuIGFycmF5IGV4Y2VwdCBmb3IgYSBzcGVjaWZpZWQgYXJyYXkgb2Yga2V5cy4KICAgICAqCiAgICAgKiBAcGFyYW0gIGFycmF5ICAkYXJyYXkKICAgICAqIEBwYXJhbSAgYXJyYXl8c3RyaW5nICAka2V5cwogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGV4Y2VwdCgkYXJyYXksICRrZXlzKQogICAgewogICAgICAgIHN0YXRpYzo6Zm9yZ2V0KCRhcnJheSwgJGtleXMpOwoKICAgICAgICByZXR1cm4gJGFycmF5OwogICAgfQoKICAgIC8qKgogICAgICogRGV0ZXJtaW5lIGlmIHRoZSBnaXZlbiBrZXkgZXhpc3RzIGluIHRoZSBwcm92aWRlZCBhcnJheS4KICAgICAqCiAgICAgKiBAcGFyYW0gIFxBcnJheUFjY2Vzc3xhcnJheSAgJGFycmF5CiAgICAgKiBAcGFyYW0gIHN0cmluZ3xpbnQgICRrZXkKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGV4aXN0cygkYXJyYXksICRrZXkpCiAgICB7CiAgICAgICAgaWYgKCRhcnJheSBpbnN0YW5jZW9mIEFycmF5QWNjZXNzKSB7CiAgICAgICAgICAgIHJldHVybiAkYXJyYXktPm9mZnNldEV4aXN0cygka2V5KTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBhcnJheV9rZXlfZXhpc3RzKCRrZXksICRhcnJheSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gdGhlIGZpcnN0IGVsZW1lbnQgaW4gYW4gYXJyYXkgcGFzc2luZyBhIGdpdmVuIHRydXRoIHRlc3QuCiAgICAgKgogICAgICogQHBhcmFtICBhcnJheSAgJGFycmF5CiAgICAgKiBAcGFyYW0gIGNhbGxhYmxlfG51bGwgICRjYWxsYmFjawogICAgICogQHBhcmFtICBtaXhlZCAgJGRlZmF1bHQKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmaXJzdCgkYXJyYXksIGNhbGxhYmxlICRjYWxsYmFjayA9IG51bGwsICRkZWZhdWx0ID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAoaXNfbnVsbCgkY2FsbGJhY2spKSB7CiAgICAgICAgICAgIGlmIChlbXB0eSgkYXJyYXkpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUoJGRlZmF1bHQpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBmb3JlYWNoICgkYXJyYXkgYXMgJGl0ZW0pIHsKICAgICAgICAgICAgICAgIHJldHVybiAkaXRlbTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZm9yZWFjaCAoJGFycmF5IGFzICRrZXkgPT4gJHZhbHVlKSB7CiAgICAgICAgICAgIGlmIChjYWxsX3VzZXJfZnVuYygkY2FsbGJhY2ssICR2YWx1ZSwgJGtleSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiAkdmFsdWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiB2YWx1ZSgkZGVmYXVsdCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXR1cm4gdGhlIGxhc3QgZWxlbWVudCBpbiBhbiBhcnJheSBwYXNzaW5nIGEgZ2l2ZW4gdHJ1dGggdGVzdC4KICAgICAqCiAgICAgKiBAcGFyYW0gIGFycmF5ICAkYXJyYXkKICAgICAqIEBwYXJhbSAgY2FsbGFibGV8bnVsbCAgJGNhbGxiYWNrCiAgICAgKiBAcGFyYW0gIG1peGVkICAkZGVmYXVsdAogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGxhc3QoJGFycmF5LCBjYWxsYWJsZSAkY2FsbGJhY2sgPSBudWxsLCAkZGVmYXVsdCA9IG51bGwpCiAgICB7CiAgICAgICAgaWYgKGlzX251bGwoJGNhbGxiYWNrKSkgewogICAgICAgICAgICByZXR1cm4gZW1wdHkoJGFycmF5KSA/IHZhbHVlKCRkZWZhdWx0KSA6IGVuZCgkYXJyYXkpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHN0YXRpYzo6Zmlyc3QoYXJyYXlfcmV2ZXJzZSgkYXJyYXksIHRydWUpLCAkY2FsbGJhY2ssICRkZWZhdWx0KTsKICAgIH0KCiAgICAvKioKICAgICAqIEZsYXR0ZW4gYSBtdWx0aS1kaW1lbnNpb25hbCBhcnJheSBpbnRvIGEgc2luZ2xlIGxldmVsLgogICAgICoKICAgICAqIEBwYXJhbSAgYXJyYXkgICRhcnJheQogICAgICogQHBhcmFtICBpbnQgICRkZXB0aAogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGZsYXR0ZW4oJGFycmF5LCAkZGVwdGggPSBJTkYpCiAgICB7CiAgICAgICAgJHJlc3VsdCA9IFtdOwoKICAgICAgICBmb3JlYWNoICgkYXJyYXkgYXMgJGl0ZW0pIHsKICAgICAgICAgICAgJGl0ZW0gPSAkaXRlbSBpbnN0YW5jZW9mIENvbGxlY3Rpb24gPyAkaXRlbS0+YWxsKCkgOiAkaXRlbTsKCiAgICAgICAgICAgIGlmICghIGlzX2FycmF5KCRpdGVtKSkgewogICAgICAgICAgICAgICAgJHJlc3VsdFtdID0gJGl0ZW07CiAgICAgICAgICAgIH0gZWxzZWlmICgkZGVwdGggPT09IDEpIHsKICAgICAgICAgICAgICAgICRyZXN1bHQgPSBhcnJheV9tZXJnZSgkcmVzdWx0LCBhcnJheV92YWx1ZXMoJGl0ZW0pKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRyZXN1bHQgPSBhcnJheV9tZXJnZSgkcmVzdWx0LCBzdGF0aWM6OmZsYXR0ZW4oJGl0ZW0sICRkZXB0aCAtIDEpKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRyZXN1bHQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZW1vdmUgb25lIG9yIG1hbnkgYXJyYXkgaXRlbXMgZnJvbSBhIGdpdmVuIGFycmF5IHVzaW5nICJkb3QiIG5vdGF0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSAgYXJyYXkgICRhcnJheQogICAgICogQHBhcmFtICBhcnJheXxzdHJpbmcgICRrZXlzCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmb3JnZXQoJiRhcnJheSwgJGtleXMpCiAgICB7CiAgICAgICAgJG9yaWdpbmFsID0gJiRhcnJheTsKCiAgICAgICAgJGtleXMgPSAoYXJyYXkpICRrZXlzOwoKICAgICAgICBpZiAoY291bnQoJGtleXMpID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGZvcmVhY2ggKCRrZXlzIGFzICRrZXkpIHsKICAgICAgICAgICAgLy8gaWYgdGhlIGV4YWN0IGtleSBleGlzdHMgaW4gdGhlIHRvcC1sZXZlbCwgcmVtb3ZlIGl0CiAgICAgICAgICAgIGlmIChzdGF0aWM6OmV4aXN0cygkYXJyYXksICRrZXkpKSB7CiAgICAgICAgICAgICAgICB1bnNldCgkYXJyYXlbJGtleV0pOwoKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkcGFydHMgPSBleHBsb2RlKCcuJywgJGtleSk7CgogICAgICAgICAgICAvLyBjbGVhbiB1cCBiZWZvcmUgZWFjaCBwYXNzCiAgICAgICAgICAgICRhcnJheSA9ICYkb3JpZ2luYWw7CgogICAgICAgICAgICB3aGlsZSAoY291bnQoJHBhcnRzKSA+IDEpIHsKICAgICAgICAgICAgICAgICRwYXJ0ID0gYXJyYXlfc2hpZnQoJHBhcnRzKTsKCiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJGFycmF5WyRwYXJ0XSkgJiYgaXNfYXJyYXkoJGFycmF5WyRwYXJ0XSkpIHsKICAgICAgICAgICAgICAgICAgICAkYXJyYXkgPSAmJGFycmF5WyRwYXJ0XTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgY29udGludWUgMjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgdW5zZXQoJGFycmF5W2FycmF5X3NoaWZ0KCRwYXJ0cyldKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgYW4gaXRlbSBmcm9tIGFuIGFycmF5IHVzaW5nICJkb3QiIG5vdGF0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSAgXEFycmF5QWNjZXNzfGFycmF5ICAkYXJyYXkKICAgICAqIEBwYXJhbSAgc3RyaW5nICAka2V5CiAgICAgKiBAcGFyYW0gIG1peGVkICAgJGRlZmF1bHQKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXQoJGFycmF5LCAka2V5LCAkZGVmYXVsdCA9IG51bGwpCiAgICB7CiAgICAgICAgaWYgKCEgc3RhdGljOjphY2Nlc3NpYmxlKCRhcnJheSkpIHsKICAgICAgICAgICAgcmV0dXJuIHZhbHVlKCRkZWZhdWx0KTsKICAgICAgICB9CgogICAgICAgIGlmIChpc19udWxsKCRrZXkpKSB7CiAgICAgICAgICAgIHJldHVybiAkYXJyYXk7CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RhdGljOjpleGlzdHMoJGFycmF5LCAka2V5KSkgewogICAgICAgICAgICByZXR1cm4gJGFycmF5WyRrZXldOwogICAgICAgIH0KCiAgICAgICAgaWYgKHN0cnBvcygka2V5LCAnLicpID09PSBmYWxzZSkgewogICAgICAgICAgICByZXR1cm4gJGFycmF5WyRrZXldID8/IHZhbHVlKCRkZWZhdWx0KTsKICAgICAgICB9CgogICAgICAgIGZvcmVhY2ggKGV4cGxvZGUoJy4nLCAka2V5KSBhcyAkc2VnbWVudCkgewogICAgICAgICAgICBpZiAoc3RhdGljOjphY2Nlc3NpYmxlKCRhcnJheSkgJiYgc3RhdGljOjpleGlzdHMoJGFycmF5LCAkc2VnbWVudCkpIHsKICAgICAgICAgICAgICAgICRhcnJheSA9ICRhcnJheVskc2VnbWVudF07CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUoJGRlZmF1bHQpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGFycmF5OwogICAgfQoKICAgIC8qKgogICAgICogQ2hlY2sgaWYgYW4gaXRlbSBvciBpdGVtcyBleGlzdCBpbiBhbiBhcnJheSB1c2luZyAiZG90IiBub3RhdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gIFxBcnJheUFjY2Vzc3xhcnJheSAgJGFycmF5CiAgICAgKiBAcGFyYW0gIHN0cmluZ3xhcnJheSAgJGtleXMKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGhhcygkYXJyYXksICRrZXlzKQogICAgewogICAgICAgIGlmIChpc19udWxsKCRrZXlzKSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICAka2V5cyA9IChhcnJheSkgJGtleXM7CgogICAgICAgIGlmICghICRhcnJheSkgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGtleXMgPT09IFtdKSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CgogICAgICAgIGZvcmVhY2ggKCRrZXlzIGFzICRrZXkpIHsKICAgICAgICAgICAgJHN1YktleUFycmF5ID0gJGFycmF5OwoKICAgICAgICAgICAgaWYgKHN0YXRpYzo6ZXhpc3RzKCRhcnJheSwgJGtleSkpIHsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CgogICAgICAgICAgICBmb3JlYWNoIChleHBsb2RlKCcuJywgJGtleSkgYXMgJHNlZ21lbnQpIHsKICAgICAgICAgICAgICAgIGlmIChzdGF0aWM6OmFjY2Vzc2libGUoJHN1YktleUFycmF5KSAmJiBzdGF0aWM6OmV4aXN0cygkc3ViS2V5QXJyYXksICRzZWdtZW50KSkgewogICAgICAgICAgICAgICAgICAgICRzdWJLZXlBcnJheSA9ICRzdWJLZXlBcnJheVskc2VnbWVudF07CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBEZXRlcm1pbmVzIGlmIGFuIGFycmF5IGlzIGFzc29jaWF0aXZlLgogICAgICoKICAgICAqIEFuIGFycmF5IGlzICJhc3NvY2lhdGl2ZSIgaWYgaXQgZG9lc24ndCBoYXZlIHNlcXVlbnRpYWwgbnVtZXJpY2FsIGtleXMgYmVnaW5uaW5nIHdpdGggemVyby4KICAgICAqCiAgICAgKiBAcGFyYW0gIGFycmF5ICAkYXJyYXkKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzQXNzb2MoYXJyYXkgJGFycmF5KQogICAgewogICAgICAgICRrZXlzID0gYXJyYXlfa2V5cygkYXJyYXkpOwoKICAgICAgICByZXR1cm4gYXJyYXlfa2V5cygka2V5cykgIT09ICRrZXlzOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IGEgc3Vic2V0IG9mIHRoZSBpdGVtcyBmcm9tIHRoZSBnaXZlbiBhcnJheS4KICAgICAqCiAgICAgKiBAcGFyYW0gIGFycmF5ICAkYXJyYXkKICAgICAqIEBwYXJhbSAgYXJyYXl8c3RyaW5nICAka2V5cwogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG9ubHkoJGFycmF5LCAka2V5cykKICAgIHsKICAgICAgICByZXR1cm4gYXJyYXlfaW50ZXJzZWN0X2tleSgkYXJyYXksIGFycmF5X2ZsaXAoKGFycmF5KSAka2V5cykpOwogICAgfQoKICAgIC8qKgogICAgICogUGx1Y2sgYW4gYXJyYXkgb2YgdmFsdWVzIGZyb20gYW4gYXJyYXkuCiAgICAgKgogICAgICogQHBhcmFtICBhcnJheSAgJGFycmF5CiAgICAgKiBAcGFyYW0gIHN0cmluZ3xhcnJheSAgJHZhbHVlCiAgICAgKiBAcGFyYW0gIHN0cmluZ3xhcnJheXxudWxsICAka2V5CiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcGx1Y2soJGFycmF5LCAkdmFsdWUsICRrZXkgPSBudWxsKQogICAgewogICAgICAgICRyZXN1bHRzID0gW107CgogICAgICAgIGxpc3QoJHZhbHVlLCAka2V5KSA9IHN0YXRpYzo6ZXhwbG9kZVBsdWNrUGFyYW1ldGVycygkdmFsdWUsICRrZXkpOwoKICAgICAgICBmb3JlYWNoICgkYXJyYXkgYXMgJGl0ZW0pIHsKICAgICAgICAgICAgJGl0ZW1WYWx1ZSA9IGRhdGFfZ2V0KCRpdGVtLCAkdmFsdWUpOwoKICAgICAgICAgICAgLy8gSWYgdGhlIGtleSBpcyAibnVsbCIsIHdlIHdpbGwganVzdCBhcHBlbmQgdGhlIHZhbHVlIHRvIHRoZSBhcnJheSBhbmQga2VlcAogICAgICAgICAgICAvLyBsb29waW5nLiBPdGhlcndpc2Ugd2Ugd2lsbCBrZXkgdGhlIGFycmF5IHVzaW5nIHRoZSB2YWx1ZSBvZiB0aGUga2V5IHdlCiAgICAgICAgICAgIC8vIHJlY2VpdmVkIGZyb20gdGhlIGRldmVsb3Blci4gVGhlbiB3ZSdsbCByZXR1cm4gdGhlIGZpbmFsIGFycmF5IGZvcm0uCiAgICAgICAgICAgIGlmIChpc19udWxsKCRrZXkpKSB7CiAgICAgICAgICAgICAgICAkcmVzdWx0c1tdID0gJGl0ZW1WYWx1ZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRpdGVtS2V5ID0gZGF0YV9nZXQoJGl0ZW0sICRrZXkpOwoKICAgICAgICAgICAgICAgIGlmIChpc19vYmplY3QoJGl0ZW1LZXkpICYmIG1ldGhvZF9leGlzdHMoJGl0ZW1LZXksICdfX3RvU3RyaW5nJykpIHsKICAgICAgICAgICAgICAgICAgICAkaXRlbUtleSA9IChzdHJpbmcpICRpdGVtS2V5OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRyZXN1bHRzWyRpdGVtS2V5XSA9ICRpdGVtVmFsdWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkcmVzdWx0czsKICAgIH0KCiAgICAvKioKICAgICAqIEV4cGxvZGUgdGhlICJ2YWx1ZSIgYW5kICJrZXkiIGFyZ3VtZW50cyBwYXNzZWQgdG8gInBsdWNrIi4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZ3xhcnJheSAgJHZhbHVlCiAgICAgKiBAcGFyYW0gIHN0cmluZ3xhcnJheXxudWxsICAka2V5CiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZXhwbG9kZVBsdWNrUGFyYW1ldGVycygkdmFsdWUsICRrZXkpCiAgICB7CiAgICAgICAgJHZhbHVlID0gaXNfc3RyaW5nKCR2YWx1ZSkgPyBleHBsb2RlKCcuJywgJHZhbHVlKSA6ICR2YWx1ZTsKCiAgICAgICAgJGtleSA9IGlzX251bGwoJGtleSkgfHwgaXNfYXJyYXkoJGtleSkgPyAka2V5IDogZXhwbG9kZSgnLicsICRrZXkpOwoKICAgICAgICByZXR1cm4gWyR2YWx1ZSwgJGtleV07CiAgICB9CgogICAgLyoqCiAgICAgKiBQdXNoIGFuIGl0ZW0gb250byB0aGUgYmVnaW5uaW5nIG9mIGFuIGFycmF5LgogICAgICoKICAgICAqIEBwYXJhbSAgYXJyYXkgICRhcnJheQogICAgICogQHBhcmFtICBtaXhlZCAgJHZhbHVlCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcHJlcGVuZCgkYXJyYXksICR2YWx1ZSwgJGtleSA9IG51bGwpCiAgICB7CiAgICAgICAgaWYgKGlzX251bGwoJGtleSkpIHsKICAgICAgICAgICAgYXJyYXlfdW5zaGlmdCgkYXJyYXksICR2YWx1ZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJGFycmF5ID0gWyRrZXkgPT4gJHZhbHVlXSArICRhcnJheTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkYXJyYXk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgYSB2YWx1ZSBmcm9tIHRoZSBhcnJheSwgYW5kIHJlbW92ZSBpdC4KICAgICAqCiAgICAgKiBAcGFyYW0gIGFycmF5ICAgJGFycmF5CiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJGtleQogICAgICogQHBhcmFtICBtaXhlZCAgICRkZWZhdWx0CiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcHVsbCgmJGFycmF5LCAka2V5LCAkZGVmYXVsdCA9IG51bGwpCiAgICB7CiAgICAgICAgJHZhbHVlID0gc3RhdGljOjpnZXQoJGFycmF5LCAka2V5LCAkZGVmYXVsdCk7CgogICAgICAgIHN0YXRpYzo6Zm9yZ2V0KCRhcnJheSwgJGtleSk7CgogICAgICAgIHJldHVybiAkdmFsdWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgb25lIG9yIGEgc3BlY2lmaWVkIG51bWJlciBvZiByYW5kb20gdmFsdWVzIGZyb20gYW4gYXJyYXkuCiAgICAgKgogICAgICogQHBhcmFtICBhcnJheSAgJGFycmF5CiAgICAgKiBAcGFyYW0gIGludHxudWxsICAkbnVtYmVyCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKgogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmFuZG9tKCRhcnJheSwgJG51bWJlciA9IG51bGwpCiAgICB7CiAgICAgICAgJHJlcXVlc3RlZCA9IGlzX251bGwoJG51bWJlcikgPyAxIDogJG51bWJlcjsKCiAgICAgICAgJGNvdW50ID0gY291bnQoJGFycmF5KTsKCiAgICAgICAgaWYgKCRyZXF1ZXN0ZWQgPiAkY291bnQpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKICAgICAgICAgICAgICAgICJZb3UgcmVxdWVzdGVkIHskcmVxdWVzdGVkfSBpdGVtcywgYnV0IHRoZXJlIGFyZSBvbmx5IHskY291bnR9IGl0ZW1zIGF2YWlsYWJsZS4iCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNfbnVsbCgkbnVtYmVyKSkgewogICAgICAgICAgICByZXR1cm4gJGFycmF5W2FycmF5X3JhbmQoJGFycmF5KV07CiAgICAgICAgfQoKICAgICAgICBpZiAoKGludCkgJG51bWJlciA9PT0gMCkgewogICAgICAgICAgICByZXR1cm4gW107CiAgICAgICAgfQoKICAgICAgICAka2V5cyA9IGFycmF5X3JhbmQoJGFycmF5LCAkbnVtYmVyKTsKCiAgICAgICAgJHJlc3VsdHMgPSBbXTsKCiAgICAgICAgZm9yZWFjaCAoKGFycmF5KSAka2V5cyBhcyAka2V5KSB7CiAgICAgICAgICAgICRyZXN1bHRzW10gPSAkYXJyYXlbJGtleV07CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3VsdHM7CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXQgYW4gYXJyYXkgaXRlbSB0byBhIGdpdmVuIHZhbHVlIHVzaW5nICJkb3QiIG5vdGF0aW9uLgogICAgICoKICAgICAqIElmIG5vIGtleSBpcyBnaXZlbiB0byB0aGUgbWV0aG9kLCB0aGUgZW50aXJlIGFycmF5IHdpbGwgYmUgcmVwbGFjZWQuCiAgICAgKgogICAgICogQHBhcmFtICBhcnJheSAgICRhcnJheQogICAgICogQHBhcmFtICBzdHJpbmcgICRrZXkKICAgICAqIEBwYXJhbSAgbWl4ZWQgICAkdmFsdWUKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzZXQoJiRhcnJheSwgJGtleSwgJHZhbHVlKQogICAgewogICAgICAgIGlmIChpc19udWxsKCRrZXkpKSB7CiAgICAgICAgICAgIHJldHVybiAkYXJyYXkgPSAkdmFsdWU7CiAgICAgICAgfQoKICAgICAgICAka2V5cyA9IGV4cGxvZGUoJy4nLCAka2V5KTsKCiAgICAgICAgd2hpbGUgKGNvdW50KCRrZXlzKSA+IDEpIHsKICAgICAgICAgICAgJGtleSA9IGFycmF5X3NoaWZ0KCRrZXlzKTsKCiAgICAgICAgICAgIC8vIElmIHRoZSBrZXkgZG9lc24ndCBleGlzdCBhdCB0aGlzIGRlcHRoLCB3ZSB3aWxsIGp1c3QgY3JlYXRlIGFuIGVtcHR5IGFycmF5CiAgICAgICAgICAgIC8vIHRvIGhvbGQgdGhlIG5leHQgdmFsdWUsIGFsbG93aW5nIHVzIHRvIGNyZWF0ZSB0aGUgYXJyYXlzIHRvIGhvbGQgZmluYWwKICAgICAgICAgICAgLy8gdmFsdWVzIGF0IHRoZSBjb3JyZWN0IGRlcHRoLiBUaGVuIHdlJ2xsIGtlZXAgZGlnZ2luZyBpbnRvIHRoZSBhcnJheS4KICAgICAgICAgICAgaWYgKCEgaXNzZXQoJGFycmF5WyRrZXldKSB8fCAhIGlzX2FycmF5KCRhcnJheVska2V5XSkpIHsKICAgICAgICAgICAgICAgICRhcnJheVska2V5XSA9IFtdOwogICAgICAgICAgICB9CgogICAgICAgICAgICAkYXJyYXkgPSAmJGFycmF5WyRrZXldOwogICAgICAgIH0KCiAgICAgICAgJGFycmF5W2FycmF5X3NoaWZ0KCRrZXlzKV0gPSAkdmFsdWU7CgogICAgICAgIHJldHVybiAkYXJyYXk7CiAgICB9CgogICAgLyoqCiAgICAgKiBTaHVmZmxlIHRoZSBnaXZlbiBhcnJheSBhbmQgcmV0dXJuIHRoZSByZXN1bHQuCiAgICAgKgogICAgICogQHBhcmFtICBhcnJheSAgJGFycmF5CiAgICAgKiBAcGFyYW0gIGludHxudWxsICAkc2VlZAogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNodWZmbGUoJGFycmF5LCAkc2VlZCA9IG51bGwpCiAgICB7CiAgICAgICAgaWYgKGlzX251bGwoJHNlZWQpKSB7CiAgICAgICAgICAgIHNodWZmbGUoJGFycmF5KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzcmFuZCgkc2VlZCk7CgogICAgICAgICAgICB1c29ydCgkYXJyYXksIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgICAgIHJldHVybiByYW5kKC0xLCAxKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGFycmF5OwogICAgfQoKICAgIC8qKgogICAgICogU29ydCB0aGUgYXJyYXkgdXNpbmcgdGhlIGdpdmVuIGNhbGxiYWNrIG9yICJkb3QiIG5vdGF0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSAgYXJyYXkgICRhcnJheQogICAgICogQHBhcmFtICBjYWxsYWJsZXxzdHJpbmd8bnVsbCAgJGNhbGxiYWNrCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc29ydCgkYXJyYXksICRjYWxsYmFjayA9IG51bGwpCiAgICB7CiAgICAgICAgcmV0dXJuIENvbGxlY3Rpb246Om1ha2UoJGFycmF5KS0+c29ydEJ5KCRjYWxsYmFjayktPmFsbCgpOwogICAgfQoKICAgIC8qKgogICAgICogUmVjdXJzaXZlbHkgc29ydCBhbiBhcnJheSBieSBrZXlzIGFuZCB2YWx1ZXMuCiAgICAgKgogICAgICogQHBhcmFtICBhcnJheSAgJGFycmF5CiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc29ydFJlY3Vyc2l2ZSgkYXJyYXkpCiAgICB7CiAgICAgICAgZm9yZWFjaCAoJGFycmF5IGFzICYkdmFsdWUpIHsKICAgICAgICAgICAgaWYgKGlzX2FycmF5KCR2YWx1ZSkpIHsKICAgICAgICAgICAgICAgICR2YWx1ZSA9IHN0YXRpYzo6c29ydFJlY3Vyc2l2ZSgkdmFsdWUpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RhdGljOjppc0Fzc29jKCRhcnJheSkpIHsKICAgICAgICAgICAga3NvcnQoJGFycmF5KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzb3J0KCRhcnJheSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGFycmF5OwogICAgfQoKICAgIC8qKgogICAgICogRmlsdGVyIHRoZSBhcnJheSB1c2luZyB0aGUgZ2l2ZW4gY2FsbGJhY2suCiAgICAgKgogICAgICogQHBhcmFtICBhcnJheSAgJGFycmF5CiAgICAgKiBAcGFyYW0gIGNhbGxhYmxlICAkY2FsbGJhY2sKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB3aGVyZSgkYXJyYXksIGNhbGxhYmxlICRjYWxsYmFjaykKICAgIHsKICAgICAgICByZXR1cm4gYXJyYXlfZmlsdGVyKCRhcnJheSwgJGNhbGxiYWNrLCBBUlJBWV9GSUxURVJfVVNFX0JPVEgpOwogICAgfQoKICAgIC8qKgogICAgICogSWYgdGhlIGdpdmVuIHZhbHVlIGlzIG5vdCBhbiBhcnJheSBhbmQgbm90IG51bGwsIHdyYXAgaXQgaW4gb25lLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICR2YWx1ZQogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHdyYXAoJHZhbHVlKQogICAgewogICAgICAgIGlmIChpc19udWxsKCR2YWx1ZSkpIHsKICAgICAgICAgICAgcmV0dXJuIFtdOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICEgaXNfYXJyYXkoJHZhbHVlKSA/IFskdmFsdWVdIDogJHZhbHVlOwogICAgfQp9Cg==AppDevTools/query/vendor/tightenco/collect/src/Collect/Support/Collection.phpPD9waHAKCm5hbWVzcGFjZSBUaWdodGVuY29cQ29sbGVjdFxTdXBwb3J0OwoKdXNlIHN0ZENsYXNzOwp1c2UgQ291bnRhYmxlOwp1c2UgRXhjZXB0aW9uOwp1c2UgQXJyYXlBY2Nlc3M7CnVzZSBUcmF2ZXJzYWJsZTsKdXNlIEFycmF5SXRlcmF0b3I7CnVzZSBDYWNoaW5nSXRlcmF0b3I7CnVzZSBKc29uU2VyaWFsaXphYmxlOwp1c2UgSXRlcmF0b3JBZ2dyZWdhdGU7CnVzZSBUaWdodGVuY29cQ29sbGVjdFxTdXBwb3J0XERlYnVnXER1bXBlcjsKdXNlIFRpZ2h0ZW5jb1xDb2xsZWN0XFN1cHBvcnRcVHJhaXRzXE1hY3JvYWJsZTsKdXNlIFRpZ2h0ZW5jb1xDb2xsZWN0XENvbnRyYWN0c1xTdXBwb3J0XEpzb25hYmxlOwp1c2UgVGlnaHRlbmNvXENvbGxlY3RcQ29udHJhY3RzXFN1cHBvcnRcQXJyYXlhYmxlOwoKLyoqCiAqIEBwcm9wZXJ0eS1yZWFkIEhpZ2hlck9yZGVyQ29sbGVjdGlvblByb3h5ICRhdmVyYWdlCiAqIEBwcm9wZXJ0eS1yZWFkIEhpZ2hlck9yZGVyQ29sbGVjdGlvblByb3h5ICRhdmcKICogQHByb3BlcnR5LXJlYWQgSGlnaGVyT3JkZXJDb2xsZWN0aW9uUHJveHkgJGNvbnRhaW5zCiAqIEBwcm9wZXJ0eS1yZWFkIEhpZ2hlck9yZGVyQ29sbGVjdGlvblByb3h5ICRlYWNoCiAqIEBwcm9wZXJ0eS1yZWFkIEhpZ2hlck9yZGVyQ29sbGVjdGlvblByb3h5ICRldmVyeQogKiBAcHJvcGVydHktcmVhZCBIaWdoZXJPcmRlckNvbGxlY3Rpb25Qcm94eSAkZmlsdGVyCiAqIEBwcm9wZXJ0eS1yZWFkIEhpZ2hlck9yZGVyQ29sbGVjdGlvblByb3h5ICRmaXJzdAogKiBAcHJvcGVydHktcmVhZCBIaWdoZXJPcmRlckNvbGxlY3Rpb25Qcm94eSAkZmxhdE1hcAogKiBAcHJvcGVydHktcmVhZCBIaWdoZXJPcmRlckNvbGxlY3Rpb25Qcm94eSAkZ3JvdXBCeQogKiBAcHJvcGVydHktcmVhZCBIaWdoZXJPcmRlckNvbGxlY3Rpb25Qcm94eSAka2V5QnkKICogQHByb3BlcnR5LXJlYWQgSGlnaGVyT3JkZXJDb2xsZWN0aW9uUHJveHkgJG1hcAogKiBAcHJvcGVydHktcmVhZCBIaWdoZXJPcmRlckNvbGxlY3Rpb25Qcm94eSAkbWF4CiAqIEBwcm9wZXJ0eS1yZWFkIEhpZ2hlck9yZGVyQ29sbGVjdGlvblByb3h5ICRtaW4KICogQHByb3BlcnR5LXJlYWQgSGlnaGVyT3JkZXJDb2xsZWN0aW9uUHJveHkgJHBhcnRpdGlvbgogKiBAcHJvcGVydHktcmVhZCBIaWdoZXJPcmRlckNvbGxlY3Rpb25Qcm94eSAkcmVqZWN0CiAqIEBwcm9wZXJ0eS1yZWFkIEhpZ2hlck9yZGVyQ29sbGVjdGlvblByb3h5ICRzb3J0QnkKICogQHByb3BlcnR5LXJlYWQgSGlnaGVyT3JkZXJDb2xsZWN0aW9uUHJveHkgJHNvcnRCeURlc2MKICogQHByb3BlcnR5LXJlYWQgSGlnaGVyT3JkZXJDb2xsZWN0aW9uUHJveHkgJHN1bQogKiBAcHJvcGVydHktcmVhZCBIaWdoZXJPcmRlckNvbGxlY3Rpb25Qcm94eSAkdW5pcXVlCiAqCiAqIENsYXNzIENvbGxlY3Rpb24KICovCmNsYXNzIENvbGxlY3Rpb24gaW1wbGVtZW50cyBBcnJheUFjY2VzcywgQXJyYXlhYmxlLCBDb3VudGFibGUsIEl0ZXJhdG9yQWdncmVnYXRlLCBKc29uYWJsZSwgSnNvblNlcmlhbGl6YWJsZQp7CiAgICB1c2UgTWFjcm9hYmxlOwoKICAgIC8qKgogICAgICogVGhlIGl0ZW1zIGNvbnRhaW5lZCBpbiB0aGUgY29sbGVjdGlvbi4KICAgICAqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHByb3RlY3RlZCAkaXRlbXMgPSBbXTsKCiAgICAvKioKICAgICAqIFRoZSBtZXRob2RzIHRoYXQgY2FuIGJlIHByb3hpZWQuCiAgICAgKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwcm90ZWN0ZWQgc3RhdGljICRwcm94aWVzID0gWwogICAgICAgICdhdmVyYWdlJywgJ2F2ZycsICdjb250YWlucycsICdlYWNoJywgJ2V2ZXJ5JywgJ2ZpbHRlcicsICdmaXJzdCcsCiAgICAgICAgJ2ZsYXRNYXAnLCAnZ3JvdXBCeScsICdrZXlCeScsICdtYXAnLCAnbWF4JywgJ21pbicsICdwYXJ0aXRpb24nLAogICAgICAgICdyZWplY3QnLCAnc29ydEJ5JywgJ3NvcnRCeURlc2MnLCAnc3VtJywgJ3VuaXF1ZScsCiAgICBdOwoKICAgIC8qKgogICAgICogQ3JlYXRlIGEgbmV3IGNvbGxlY3Rpb24uCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGl0ZW1zCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRpdGVtcyA9IFtdKQogICAgewogICAgICAgICR0aGlzLT5pdGVtcyA9ICR0aGlzLT5nZXRBcnJheWFibGVJdGVtcygkaXRlbXMpOwogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlIGEgbmV3IGNvbGxlY3Rpb24gaW5zdGFuY2UgaWYgdGhlIHZhbHVlIGlzbid0IG9uZSBhbHJlYWR5LgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRpdGVtcwogICAgICogQHJldHVybiBzdGF0aWMKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBtYWtlKCRpdGVtcyA9IFtdKQogICAgewogICAgICAgIHJldHVybiBuZXcgc3RhdGljKCRpdGVtcyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBXcmFwIHRoZSBnaXZlbiB2YWx1ZSBpbiBhIGNvbGxlY3Rpb24gaWYgYXBwbGljYWJsZS4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAkdmFsdWUKICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gd3JhcCgkdmFsdWUpCiAgICB7CiAgICAgICAgcmV0dXJuICR2YWx1ZSBpbnN0YW5jZW9mIHNlbGYKICAgICAgICAgICAgPyBuZXcgc3RhdGljKCR2YWx1ZSkKICAgICAgICAgICAgOiBuZXcgc3RhdGljKEFycjo6d3JhcCgkdmFsdWUpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgdW5kZXJseWluZyBpdGVtcyBmcm9tIHRoZSBnaXZlbiBjb2xsZWN0aW9uIGlmIGFwcGxpY2FibGUuCiAgICAgKgogICAgICogQHBhcmFtICBhcnJheXxzdGF0aWMgICR2YWx1ZQogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHVud3JhcCgkdmFsdWUpCiAgICB7CiAgICAgICAgcmV0dXJuICR2YWx1ZSBpbnN0YW5jZW9mIHNlbGYgPyAkdmFsdWUtPmFsbCgpIDogJHZhbHVlOwogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlIGEgbmV3IGNvbGxlY3Rpb24gYnkgaW52b2tpbmcgdGhlIGNhbGxiYWNrIGEgZ2l2ZW4gYW1vdW50IG9mIHRpbWVzLgogICAgICoKICAgICAqIEBwYXJhbSAgaW50ICAkbnVtYmVyCiAgICAgKiBAcGFyYW0gIGNhbGxhYmxlICAkY2FsbGJhY2sKICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdGltZXMoJG51bWJlciwgY2FsbGFibGUgJGNhbGxiYWNrID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAoJG51bWJlciA8IDEpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBzdGF0aWM7CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNfbnVsbCgkY2FsbGJhY2spKSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgc3RhdGljKHJhbmdlKDEsICRudW1iZXIpKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAobmV3IHN0YXRpYyhyYW5nZSgxLCAkbnVtYmVyKSkpLT5tYXAoJGNhbGxiYWNrKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCBhbGwgb2YgdGhlIGl0ZW1zIGluIHRoZSBjb2xsZWN0aW9uLgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFsbCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5pdGVtczsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgYXZlcmFnZSB2YWx1ZSBvZiBhIGdpdmVuIGtleS4KICAgICAqCiAgICAgKiBAcGFyYW0gIGNhbGxhYmxlfHN0cmluZ3xudWxsICAkY2FsbGJhY2sKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGF2ZygkY2FsbGJhY2sgPSBudWxsKQogICAgewogICAgICAgIGlmICgkY291bnQgPSAkdGhpcy0+Y291bnQoKSkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnN1bSgkY2FsbGJhY2spIC8gJGNvdW50OwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEFsaWFzIGZvciB0aGUgImF2ZyIgbWV0aG9kLgogICAgICoKICAgICAqIEBwYXJhbSAgY2FsbGFibGV8c3RyaW5nfG51bGwgICRjYWxsYmFjawogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYXZlcmFnZSgkY2FsbGJhY2sgPSBudWxsKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+YXZnKCRjYWxsYmFjayk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIG1lZGlhbiBvZiBhIGdpdmVuIGtleS4KICAgICAqCiAgICAgKiBAcGFyYW0gIG51bGwgJGtleQogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbWVkaWFuKCRrZXkgPSBudWxsKQogICAgewogICAgICAgICRjb3VudCA9ICR0aGlzLT5jb3VudCgpOwoKICAgICAgICBpZiAoJGNvdW50ID09IDApIHsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgJHZhbHVlcyA9IChpc3NldCgka2V5KSA/ICR0aGlzLT5wbHVjaygka2V5KSA6ICR0aGlzKQogICAgICAgICAgICAgICAgICAgIC0+c29ydCgpLT52YWx1ZXMoKTsKCiAgICAgICAgJG1pZGRsZSA9IChpbnQpICgkY291bnQgLyAyKTsKCiAgICAgICAgaWYgKCRjb3VudCAlIDIpIHsKICAgICAgICAgICAgcmV0dXJuICR2YWx1ZXMtPmdldCgkbWlkZGxlKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAobmV3IHN0YXRpYyhbCiAgICAgICAgICAgICR2YWx1ZXMtPmdldCgkbWlkZGxlIC0gMSksICR2YWx1ZXMtPmdldCgkbWlkZGxlKSwKICAgICAgICBdKSktPmF2ZXJhZ2UoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgbW9kZSBvZiBhIGdpdmVuIGtleS4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcmV0dXJuIGFycmF5fG51bGwKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG1vZGUoJGtleSA9IG51bGwpCiAgICB7CiAgICAgICAgJGNvdW50ID0gJHRoaXMtPmNvdW50KCk7CgogICAgICAgIGlmICgkY291bnQgPT0gMCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICAkY29sbGVjdGlvbiA9IGlzc2V0KCRrZXkpID8gJHRoaXMtPnBsdWNrKCRrZXkpIDogJHRoaXM7CgogICAgICAgICRjb3VudHMgPSBuZXcgc2VsZjsKCiAgICAgICAgJGNvbGxlY3Rpb24tPmVhY2goZnVuY3Rpb24gKCR2YWx1ZSkgdXNlICgkY291bnRzKSB7CiAgICAgICAgICAgICRjb3VudHNbJHZhbHVlXSA9IGlzc2V0KCRjb3VudHNbJHZhbHVlXSkgPyAkY291bnRzWyR2YWx1ZV0gKyAxIDogMTsKICAgICAgICB9KTsKCiAgICAgICAgJHNvcnRlZCA9ICRjb3VudHMtPnNvcnQoKTsKCiAgICAgICAgJGhpZ2hlc3RWYWx1ZSA9ICRzb3J0ZWQtPmxhc3QoKTsKCiAgICAgICAgcmV0dXJuICRzb3J0ZWQtPmZpbHRlcihmdW5jdGlvbiAoJHZhbHVlKSB1c2UgKCRoaWdoZXN0VmFsdWUpIHsKICAgICAgICAgICAgcmV0dXJuICR2YWx1ZSA9PSAkaGlnaGVzdFZhbHVlOwogICAgICAgIH0pLT5zb3J0KCktPmtleXMoKS0+YWxsKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb2xsYXBzZSB0aGUgY29sbGVjdGlvbiBvZiBpdGVtcyBpbnRvIGEgc2luZ2xlIGFycmF5LgogICAgICoKICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb2xsYXBzZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzdGF0aWMoQXJyOjpjb2xsYXBzZSgkdGhpcy0+aXRlbXMpKTsKICAgIH0KCiAgICAvKioKICAgICAqIERldGVybWluZSBpZiBhbiBpdGVtIGV4aXN0cyBpbiB0aGUgY29sbGVjdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIG1peGVkICAkb3BlcmF0b3IKICAgICAqIEBwYXJhbSAgbWl4ZWQgICR2YWx1ZQogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb250YWlucygka2V5LCAkb3BlcmF0b3IgPSBudWxsLCAkdmFsdWUgPSBudWxsKQogICAgewogICAgICAgIGlmIChmdW5jX251bV9hcmdzKCkgPT09IDEpIHsKICAgICAgICAgICAgaWYgKCR0aGlzLT51c2VBc0NhbGxhYmxlKCRrZXkpKSB7CiAgICAgICAgICAgICAgICAkcGxhY2Vob2xkZXIgPSBuZXcgc3RkQ2xhc3M7CgogICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5maXJzdCgka2V5LCAkcGxhY2Vob2xkZXIpICE9PSAkcGxhY2Vob2xkZXI7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBpbl9hcnJheSgka2V5LCAkdGhpcy0+aXRlbXMpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5jb250YWlucygkdGhpcy0+b3BlcmF0b3JGb3JXaGVyZSguLi5mdW5jX2dldF9hcmdzKCkpKTsKICAgIH0KCiAgICAvKioKICAgICAqIERldGVybWluZSBpZiBhbiBpdGVtIGV4aXN0cyBpbiB0aGUgY29sbGVjdGlvbiB1c2luZyBzdHJpY3QgY29tcGFyaXNvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIG1peGVkICAkdmFsdWUKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY29udGFpbnNTdHJpY3QoJGtleSwgJHZhbHVlID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAoZnVuY19udW1fYXJncygpID09PSAyKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+Y29udGFpbnMoZnVuY3Rpb24gKCRpdGVtKSB1c2UgKCRrZXksICR2YWx1ZSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFfZ2V0KCRpdGVtLCAka2V5KSA9PT0gJHZhbHVlOwogICAgICAgICAgICB9KTsKICAgICAgICB9CgogICAgICAgIGlmICgkdGhpcy0+dXNlQXNDYWxsYWJsZSgka2V5KSkgewogICAgICAgICAgICByZXR1cm4gISBpc19udWxsKCR0aGlzLT5maXJzdCgka2V5KSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaW5fYXJyYXkoJGtleSwgJHRoaXMtPml0ZW1zLCB0cnVlKTsKICAgIH0KCiAgICAvKioKICAgICAqIENyb3NzIGpvaW4gd2l0aCB0aGUgZ2l2ZW4gbGlzdHMsIHJldHVybmluZyBhbGwgcG9zc2libGUgcGVybXV0YXRpb25zLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgIC4uLiRsaXN0cwogICAgICogQHJldHVybiBzdGF0aWMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNyb3NzSm9pbiguLi4kbGlzdHMpCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzdGF0aWMoQXJyOjpjcm9zc0pvaW4oCiAgICAgICAgICAgICR0aGlzLT5pdGVtcywgLi4uYXJyYXlfbWFwKFskdGhpcywgJ2dldEFycmF5YWJsZUl0ZW1zJ10sICRsaXN0cykKICAgICAgICApKTsKICAgIH0KCiAgICAvKioKICAgICAqIER1bXAgdGhlIGNvbGxlY3Rpb24gYW5kIGVuZCB0aGUgc2NyaXB0LgogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGQoLi4uJGFyZ3MpCiAgICB7CiAgICAgICAgY2FsbF91c2VyX2Z1bmNfYXJyYXkoWyR0aGlzLCAnZHVtcCddLCAkYXJncyk7CgogICAgICAgIGRpZSgxKTsKICAgIH0KCiAgICAvKioKICAgICAqIER1bXAgdGhlIGNvbGxlY3Rpb24uCiAgICAgKgogICAgICogQHJldHVybiAkdGhpcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZHVtcCgpCiAgICB7CiAgICAgICAgKG5ldyBzdGF0aWMoZnVuY19nZXRfYXJncygpKSkKICAgICAgICAgICAgLT5wdXNoKCR0aGlzKQogICAgICAgICAgICAtPmVhY2goZnVuY3Rpb24gKCRpdGVtKSB7CiAgICAgICAgICAgICAgICAobmV3IER1bXBlciktPmR1bXAoJGl0ZW0pOwogICAgICAgICAgICB9KTsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBpdGVtcyBpbiB0aGUgY29sbGVjdGlvbiB0aGF0IGFyZSBub3QgcHJlc2VudCBpbiB0aGUgZ2l2ZW4gaXRlbXMuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGl0ZW1zCiAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGlmZigkaXRlbXMpCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzdGF0aWMoYXJyYXlfZGlmZigkdGhpcy0+aXRlbXMsICR0aGlzLT5nZXRBcnJheWFibGVJdGVtcygkaXRlbXMpKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGl0ZW1zIGluIHRoZSBjb2xsZWN0aW9uIHRoYXQgYXJlIG5vdCBwcmVzZW50IGluIHRoZSBnaXZlbiBpdGVtcy4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAkaXRlbXMKICAgICAqIEBwYXJhbSAgY2FsbGFibGUgICRjYWxsYmFjawogICAgICogQHJldHVybiBzdGF0aWMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRpZmZVc2luZygkaXRlbXMsIGNhbGxhYmxlICRjYWxsYmFjaykKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHN0YXRpYyhhcnJheV91ZGlmZigkdGhpcy0+aXRlbXMsICR0aGlzLT5nZXRBcnJheWFibGVJdGVtcygkaXRlbXMpLCAkY2FsbGJhY2spKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgaXRlbXMgaW4gdGhlIGNvbGxlY3Rpb24gd2hvc2Uga2V5cyBhbmQgdmFsdWVzIGFyZSBub3QgcHJlc2VudCBpbiB0aGUgZ2l2ZW4gaXRlbXMuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGl0ZW1zCiAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZGlmZkFzc29jKCRpdGVtcykKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHN0YXRpYyhhcnJheV9kaWZmX2Fzc29jKCR0aGlzLT5pdGVtcywgJHRoaXMtPmdldEFycmF5YWJsZUl0ZW1zKCRpdGVtcykpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgaXRlbXMgaW4gdGhlIGNvbGxlY3Rpb24gd2hvc2Uga2V5cyBhbmQgdmFsdWVzIGFyZSBub3QgcHJlc2VudCBpbiB0aGUgZ2l2ZW4gaXRlbXMuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGl0ZW1zCiAgICAgKiBAcGFyYW0gIGNhbGxhYmxlICAkY2FsbGJhY2sKICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkaWZmQXNzb2NVc2luZygkaXRlbXMsIGNhbGxhYmxlICRjYWxsYmFjaykKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHN0YXRpYyhhcnJheV9kaWZmX3Vhc3NvYygkdGhpcy0+aXRlbXMsICR0aGlzLT5nZXRBcnJheWFibGVJdGVtcygkaXRlbXMpLCAkY2FsbGJhY2spKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgaXRlbXMgaW4gdGhlIGNvbGxlY3Rpb24gd2hvc2Uga2V5cyBhcmUgbm90IHByZXNlbnQgaW4gdGhlIGdpdmVuIGl0ZW1zLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRpdGVtcwogICAgICogQHJldHVybiBzdGF0aWMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRpZmZLZXlzKCRpdGVtcykKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHN0YXRpYyhhcnJheV9kaWZmX2tleSgkdGhpcy0+aXRlbXMsICR0aGlzLT5nZXRBcnJheWFibGVJdGVtcygkaXRlbXMpKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGl0ZW1zIGluIHRoZSBjb2xsZWN0aW9uIHdob3NlIGtleXMgYXJlIG5vdCBwcmVzZW50IGluIHRoZSBnaXZlbiBpdGVtcy4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAgJGl0ZW1zCiAgICAgKiBAcGFyYW0gIGNhbGxhYmxlICAkY2FsbGJhY2sKICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBkaWZmS2V5c1VzaW5nKCRpdGVtcywgY2FsbGFibGUgJGNhbGxiYWNrKQogICAgewogICAgICAgIHJldHVybiBuZXcgc3RhdGljKGFycmF5X2RpZmZfdWtleSgkdGhpcy0+aXRlbXMsICR0aGlzLT5nZXRBcnJheWFibGVJdGVtcygkaXRlbXMpLCAkY2FsbGJhY2spKTsKICAgIH0KCiAgICAvKioKICAgICAqIEV4ZWN1dGUgYSBjYWxsYmFjayBvdmVyIGVhY2ggaXRlbS4KICAgICAqCiAgICAgKiBAcGFyYW0gIGNhbGxhYmxlICAkY2FsbGJhY2sKICAgICAqIEByZXR1cm4gJHRoaXMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGVhY2goY2FsbGFibGUgJGNhbGxiYWNrKQogICAgewogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5pdGVtcyBhcyAka2V5ID0+ICRpdGVtKSB7CiAgICAgICAgICAgIGlmICgkY2FsbGJhY2soJGl0ZW0sICRrZXkpID09PSBmYWxzZSkgewogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICAvKioKICAgICAqIEV4ZWN1dGUgYSBjYWxsYmFjayBvdmVyIGVhY2ggbmVzdGVkIGNodW5rIG9mIGl0ZW1zLgogICAgICoKICAgICAqIEBwYXJhbSAgY2FsbGFibGUgICRjYWxsYmFjawogICAgICogQHJldHVybiBzdGF0aWMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGVhY2hTcHJlYWQoY2FsbGFibGUgJGNhbGxiYWNrKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZWFjaChmdW5jdGlvbiAoJGNodW5rLCAka2V5KSB1c2UgKCRjYWxsYmFjaykgewogICAgICAgICAgICAkY2h1bmtbXSA9ICRrZXk7CgogICAgICAgICAgICByZXR1cm4gJGNhbGxiYWNrKC4uLiRjaHVuayk7CiAgICAgICAgfSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBEZXRlcm1pbmUgaWYgYWxsIGl0ZW1zIGluIHRoZSBjb2xsZWN0aW9uIHBhc3MgdGhlIGdpdmVuIHRlc3QuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmd8Y2FsbGFibGUgICRrZXkKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRvcGVyYXRvcgogICAgICogQHBhcmFtICBtaXhlZCAgJHZhbHVlCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGV2ZXJ5KCRrZXksICRvcGVyYXRvciA9IG51bGwsICR2YWx1ZSA9IG51bGwpCiAgICB7CiAgICAgICAgaWYgKGZ1bmNfbnVtX2FyZ3MoKSA9PT0gMSkgewogICAgICAgICAgICAkY2FsbGJhY2sgPSAkdGhpcy0+dmFsdWVSZXRyaWV2ZXIoJGtleSk7CgogICAgICAgICAgICBmb3JlYWNoICgkdGhpcy0+aXRlbXMgYXMgJGsgPT4gJHYpIHsKICAgICAgICAgICAgICAgIGlmICghICRjYWxsYmFjaygkdiwgJGspKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+ZXZlcnkoJHRoaXMtPm9wZXJhdG9yRm9yV2hlcmUoLi4uZnVuY19nZXRfYXJncygpKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgYWxsIGl0ZW1zIGV4Y2VwdCBmb3IgdGhvc2Ugd2l0aCB0aGUgc3BlY2lmaWVkIGtleXMuCiAgICAgKgogICAgICogQHBhcmFtICBcVGlnaHRlbmNvXENvbGxlY3RcU3VwcG9ydFxDb2xsZWN0aW9ufG1peGVkICAka2V5cwogICAgICogQHJldHVybiBzdGF0aWMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGV4Y2VwdCgka2V5cykKICAgIHsKICAgICAgICBpZiAoJGtleXMgaW5zdGFuY2VvZiBzZWxmKSB7CiAgICAgICAgICAgICRrZXlzID0gJGtleXMtPmFsbCgpOwogICAgICAgIH0gZWxzZWlmICghIGlzX2FycmF5KCRrZXlzKSkgewogICAgICAgICAgICAka2V5cyA9IGZ1bmNfZ2V0X2FyZ3MoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgc3RhdGljKEFycjo6ZXhjZXB0KCR0aGlzLT5pdGVtcywgJGtleXMpKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJ1biBhIGZpbHRlciBvdmVyIGVhY2ggb2YgdGhlIGl0ZW1zLgogICAgICoKICAgICAqIEBwYXJhbSAgY2FsbGFibGV8bnVsbCAgJGNhbGxiYWNrCiAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZmlsdGVyKGNhbGxhYmxlICRjYWxsYmFjayA9IG51bGwpCiAgICB7CiAgICAgICAgaWYgKCRjYWxsYmFjaykgewogICAgICAgICAgICByZXR1cm4gbmV3IHN0YXRpYyhBcnI6OndoZXJlKCR0aGlzLT5pdGVtcywgJGNhbGxiYWNrKSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IHN0YXRpYyhhcnJheV9maWx0ZXIoJHRoaXMtPml0ZW1zKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBBcHBseSB0aGUgY2FsbGJhY2sgaWYgdGhlIHZhbHVlIGlzIHRydXRoeS4KICAgICAqCiAgICAgKiBAcGFyYW0gIGJvb2wgICR2YWx1ZQogICAgICogQHBhcmFtICBjYWxsYWJsZSAgJGNhbGxiYWNrCiAgICAgKiBAcGFyYW0gIGNhbGxhYmxlICAkZGVmYXVsdAogICAgICogQHJldHVybiBzdGF0aWN8bWl4ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdoZW4oJHZhbHVlLCBjYWxsYWJsZSAkY2FsbGJhY2ssIGNhbGxhYmxlICRkZWZhdWx0ID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAoJHZhbHVlKSB7CiAgICAgICAgICAgIHJldHVybiAkY2FsbGJhY2soJHRoaXMsICR2YWx1ZSk7CiAgICAgICAgfSBlbHNlaWYgKCRkZWZhdWx0KSB7CiAgICAgICAgICAgIHJldHVybiAkZGVmYXVsdCgkdGhpcywgJHZhbHVlKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICAvKioKICAgICAqIEFwcGx5IHRoZSBjYWxsYmFjayBpZiB0aGUgdmFsdWUgaXMgZmFsc3kuCiAgICAgKgogICAgICogQHBhcmFtICBib29sICAkdmFsdWUKICAgICAqIEBwYXJhbSAgY2FsbGFibGUgICRjYWxsYmFjawogICAgICogQHBhcmFtICBjYWxsYWJsZSAgJGRlZmF1bHQKICAgICAqIEByZXR1cm4gc3RhdGljfG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB1bmxlc3MoJHZhbHVlLCBjYWxsYWJsZSAkY2FsbGJhY2ssIGNhbGxhYmxlICRkZWZhdWx0ID0gbnVsbCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPndoZW4oISAkdmFsdWUsICRjYWxsYmFjaywgJGRlZmF1bHQpOwogICAgfQoKICAgIC8qKgogICAgICogRmlsdGVyIGl0ZW1zIGJ5IHRoZSBnaXZlbiBrZXkgdmFsdWUgcGFpci4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJGtleQogICAgICogQHBhcmFtICBtaXhlZCAgJG9wZXJhdG9yCiAgICAgKiBAcGFyYW0gIG1peGVkICAkdmFsdWUKICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aGVyZSgka2V5LCAkb3BlcmF0b3IsICR2YWx1ZSA9IG51bGwpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5maWx0ZXIoJHRoaXMtPm9wZXJhdG9yRm9yV2hlcmUoLi4uZnVuY19nZXRfYXJncygpKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgYW4gb3BlcmF0b3IgY2hlY2tlciBjYWxsYmFjay4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJGtleQogICAgICogQHBhcmFtICBzdHJpbmcgICRvcGVyYXRvcgogICAgICogQHBhcmFtICBtaXhlZCAgJHZhbHVlCiAgICAgKiBAcmV0dXJuIFxDbG9zdXJlCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBvcGVyYXRvckZvcldoZXJlKCRrZXksICRvcGVyYXRvciwgJHZhbHVlID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAoZnVuY19udW1fYXJncygpID09PSAyKSB7CiAgICAgICAgICAgICR2YWx1ZSA9ICRvcGVyYXRvcjsKCiAgICAgICAgICAgICRvcGVyYXRvciA9ICc9JzsKICAgICAgICB9CgogICAgICAgIHJldHVybiBmdW5jdGlvbiAoJGl0ZW0pIHVzZSAoJGtleSwgJG9wZXJhdG9yLCAkdmFsdWUpIHsKICAgICAgICAgICAgJHJldHJpZXZlZCA9IGRhdGFfZ2V0KCRpdGVtLCAka2V5KTsKCiAgICAgICAgICAgICRzdHJpbmdzID0gYXJyYXlfZmlsdGVyKFskcmV0cmlldmVkLCAkdmFsdWVdLCBmdW5jdGlvbiAoJHZhbHVlKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gaXNfc3RyaW5nKCR2YWx1ZSkgfHwgKGlzX29iamVjdCgkdmFsdWUpICYmIG1ldGhvZF9leGlzdHMoJHZhbHVlLCAnX190b1N0cmluZycpKTsKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICBpZiAoY291bnQoJHN0cmluZ3MpIDwgMiAmJiBjb3VudChhcnJheV9maWx0ZXIoWyRyZXRyaWV2ZWQsICR2YWx1ZV0sICdpc19vYmplY3QnKSkgPT0gMSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGluX2FycmF5KCRvcGVyYXRvciwgWychPScsICc8PicsICchPT0nXSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHN3aXRjaCAoJG9wZXJhdG9yKSB7CiAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgY2FzZSAnPSc6CiAgICAgICAgICAgICAgICBjYXNlICc9PSc6ICByZXR1cm4gJHJldHJpZXZlZCA9PSAkdmFsdWU7CiAgICAgICAgICAgICAgICBjYXNlICchPSc6CiAgICAgICAgICAgICAgICBjYXNlICc8Pic6ICByZXR1cm4gJHJldHJpZXZlZCAhPSAkdmFsdWU7CiAgICAgICAgICAgICAgICBjYXNlICc8JzogICByZXR1cm4gJHJldHJpZXZlZCA8ICR2YWx1ZTsKICAgICAgICAgICAgICAgIGNhc2UgJz4nOiAgIHJldHVybiAkcmV0cmlldmVkID4gJHZhbHVlOwogICAgICAgICAgICAgICAgY2FzZSAnPD0nOiAgcmV0dXJuICRyZXRyaWV2ZWQgPD0gJHZhbHVlOwogICAgICAgICAgICAgICAgY2FzZSAnPj0nOiAgcmV0dXJuICRyZXRyaWV2ZWQgPj0gJHZhbHVlOwogICAgICAgICAgICAgICAgY2FzZSAnPT09JzogcmV0dXJuICRyZXRyaWV2ZWQgPT09ICR2YWx1ZTsKICAgICAgICAgICAgICAgIGNhc2UgJyE9PSc6IHJldHVybiAkcmV0cmlldmVkICE9PSAkdmFsdWU7CiAgICAgICAgICAgIH0KICAgICAgICB9OwogICAgfQoKICAgIC8qKgogICAgICogRmlsdGVyIGl0ZW1zIGJ5IHRoZSBnaXZlbiBrZXkgdmFsdWUgcGFpciB1c2luZyBzdHJpY3QgY29tcGFyaXNvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJGtleQogICAgICogQHBhcmFtICBtaXhlZCAgJHZhbHVlCiAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2hlcmVTdHJpY3QoJGtleSwgJHZhbHVlKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+d2hlcmUoJGtleSwgJz09PScsICR2YWx1ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBGaWx0ZXIgaXRlbXMgYnkgdGhlIGdpdmVuIGtleSB2YWx1ZSBwYWlyLgogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nICAka2V5CiAgICAgKiBAcGFyYW0gIG1peGVkICAkdmFsdWVzCiAgICAgKiBAcGFyYW0gIGJvb2wgICRzdHJpY3QKICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aGVyZUluKCRrZXksICR2YWx1ZXMsICRzdHJpY3QgPSBmYWxzZSkKICAgIHsKICAgICAgICAkdmFsdWVzID0gJHRoaXMtPmdldEFycmF5YWJsZUl0ZW1zKCR2YWx1ZXMpOwoKICAgICAgICByZXR1cm4gJHRoaXMtPmZpbHRlcihmdW5jdGlvbiAoJGl0ZW0pIHVzZSAoJGtleSwgJHZhbHVlcywgJHN0cmljdCkgewogICAgICAgICAgICByZXR1cm4gaW5fYXJyYXkoZGF0YV9nZXQoJGl0ZW0sICRrZXkpLCAkdmFsdWVzLCAkc3RyaWN0KTsKICAgICAgICB9KTsKICAgIH0KCiAgICAvKioKICAgICAqIEZpbHRlciBpdGVtcyBieSB0aGUgZ2l2ZW4ga2V5IHZhbHVlIHBhaXIgdXNpbmcgc3RyaWN0IGNvbXBhcmlzb24uCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgICRrZXkKICAgICAqIEBwYXJhbSAgbWl4ZWQgICR2YWx1ZXMKICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB3aGVyZUluU3RyaWN0KCRrZXksICR2YWx1ZXMpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT53aGVyZUluKCRrZXksICR2YWx1ZXMsIHRydWUpOwogICAgfQoKICAgIC8qKgogICAgICogRmlsdGVyIGl0ZW1zIGJ5IHRoZSBnaXZlbiBrZXkgdmFsdWUgcGFpci4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJGtleQogICAgICogQHBhcmFtICBtaXhlZCAgJHZhbHVlcwogICAgICogQHBhcmFtICBib29sICAkc3RyaWN0CiAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2hlcmVOb3RJbigka2V5LCAkdmFsdWVzLCAkc3RyaWN0ID0gZmFsc2UpCiAgICB7CiAgICAgICAgJHZhbHVlcyA9ICR0aGlzLT5nZXRBcnJheWFibGVJdGVtcygkdmFsdWVzKTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT5yZWplY3QoZnVuY3Rpb24gKCRpdGVtKSB1c2UgKCRrZXksICR2YWx1ZXMsICRzdHJpY3QpIHsKICAgICAgICAgICAgcmV0dXJuIGluX2FycmF5KGRhdGFfZ2V0KCRpdGVtLCAka2V5KSwgJHZhbHVlcywgJHN0cmljdCk7CiAgICAgICAgfSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBGaWx0ZXIgaXRlbXMgYnkgdGhlIGdpdmVuIGtleSB2YWx1ZSBwYWlyIHVzaW5nIHN0cmljdCBjb21wYXJpc29uLgogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nICAka2V5CiAgICAgKiBAcGFyYW0gIG1peGVkICAkdmFsdWVzCiAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gd2hlcmVOb3RJblN0cmljdCgka2V5LCAkdmFsdWVzKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+d2hlcmVOb3RJbigka2V5LCAkdmFsdWVzLCB0cnVlKTsKICAgIH0KCiAgICAvKioKICAgICAqIEZpbHRlciB0aGUgaXRlbXMsIHJlbW92aW5nIGFueSBpdGVtcyB0aGF0IGRvbid0IG1hdGNoIHRoZSBnaXZlbiB0eXBlLgogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkdHlwZQogICAgICogQHJldHVybiBzdGF0aWMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHdoZXJlSW5zdGFuY2VPZigkdHlwZSkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmZpbHRlcihmdW5jdGlvbiAoJHZhbHVlKSB1c2UgKCR0eXBlKSB7CiAgICAgICAgICAgIHJldHVybiAkdmFsdWUgaW5zdGFuY2VvZiAkdHlwZTsKICAgICAgICB9KTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgZmlyc3QgaXRlbSBmcm9tIHRoZSBjb2xsZWN0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSAgY2FsbGFibGV8bnVsbCAgJGNhbGxiYWNrCiAgICAgKiBAcGFyYW0gIG1peGVkICAkZGVmYXVsdAogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZmlyc3QoY2FsbGFibGUgJGNhbGxiYWNrID0gbnVsbCwgJGRlZmF1bHQgPSBudWxsKQogICAgewogICAgICAgIHJldHVybiBBcnI6OmZpcnN0KCR0aGlzLT5pdGVtcywgJGNhbGxiYWNrLCAkZGVmYXVsdCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGZpcnN0IGl0ZW0gYnkgdGhlIGdpdmVuIGtleSB2YWx1ZSBwYWlyLgogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nICAka2V5CiAgICAgKiBAcGFyYW0gIG1peGVkICAkb3BlcmF0b3IKICAgICAqIEBwYXJhbSAgbWl4ZWQgICR2YWx1ZQogICAgICogQHJldHVybiBzdGF0aWMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZpcnN0V2hlcmUoJGtleSwgJG9wZXJhdG9yLCAkdmFsdWUgPSBudWxsKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Zmlyc3QoJHRoaXMtPm9wZXJhdG9yRm9yV2hlcmUoLi4uZnVuY19nZXRfYXJncygpKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgYSBmbGF0dGVuZWQgYXJyYXkgb2YgdGhlIGl0ZW1zIGluIHRoZSBjb2xsZWN0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSAgaW50ICAkZGVwdGgKICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmbGF0dGVuKCRkZXB0aCA9IElORikKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHN0YXRpYyhBcnI6OmZsYXR0ZW4oJHRoaXMtPml0ZW1zLCAkZGVwdGgpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEZsaXAgdGhlIGl0ZW1zIGluIHRoZSBjb2xsZWN0aW9uLgogICAgICoKICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmbGlwKCkKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHN0YXRpYyhhcnJheV9mbGlwKCR0aGlzLT5pdGVtcykpOwogICAgfQoKICAgIC8qKgogICAgICogUmVtb3ZlIGFuIGl0ZW0gZnJvbSB0aGUgY29sbGVjdGlvbiBieSBrZXkuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmd8YXJyYXkgICRrZXlzCiAgICAgKiBAcmV0dXJuICR0aGlzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmb3JnZXQoJGtleXMpCiAgICB7CiAgICAgICAgZm9yZWFjaCAoKGFycmF5KSAka2V5cyBhcyAka2V5KSB7CiAgICAgICAgICAgICR0aGlzLT5vZmZzZXRVbnNldCgka2V5KTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCBhbiBpdGVtIGZyb20gdGhlIGNvbGxlY3Rpb24gYnkga2V5LgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRkZWZhdWx0CiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXQoJGtleSwgJGRlZmF1bHQgPSBudWxsKQogICAgewogICAgICAgIGlmICgkdGhpcy0+b2Zmc2V0RXhpc3RzKCRrZXkpKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+aXRlbXNbJGtleV07CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdmFsdWUoJGRlZmF1bHQpOwogICAgfQoKICAgIC8qKgogICAgICogR3JvdXAgYW4gYXNzb2NpYXRpdmUgYXJyYXkgYnkgYSBmaWVsZCBvciB1c2luZyBhIGNhbGxiYWNrLgogICAgICoKICAgICAqIEBwYXJhbSAgY2FsbGFibGV8c3RyaW5nICAkZ3JvdXBCeQogICAgICogQHBhcmFtICBib29sICAkcHJlc2VydmVLZXlzCiAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ3JvdXBCeSgkZ3JvdXBCeSwgJHByZXNlcnZlS2V5cyA9IGZhbHNlKQogICAgewogICAgICAgIGlmIChpc19hcnJheSgkZ3JvdXBCeSkpIHsKICAgICAgICAgICAgJG5leHRHcm91cHMgPSAkZ3JvdXBCeTsKCiAgICAgICAgICAgICRncm91cEJ5ID0gYXJyYXlfc2hpZnQoJG5leHRHcm91cHMpOwogICAgICAgIH0KCiAgICAgICAgJGdyb3VwQnkgPSAkdGhpcy0+dmFsdWVSZXRyaWV2ZXIoJGdyb3VwQnkpOwoKICAgICAgICAkcmVzdWx0cyA9IFtdOwoKICAgICAgICBmb3JlYWNoICgkdGhpcy0+aXRlbXMgYXMgJGtleSA9PiAkdmFsdWUpIHsKICAgICAgICAgICAgJGdyb3VwS2V5cyA9ICRncm91cEJ5KCR2YWx1ZSwgJGtleSk7CgogICAgICAgICAgICBpZiAoISBpc19hcnJheSgkZ3JvdXBLZXlzKSkgewogICAgICAgICAgICAgICAgJGdyb3VwS2V5cyA9IFskZ3JvdXBLZXlzXTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgZm9yZWFjaCAoJGdyb3VwS2V5cyBhcyAkZ3JvdXBLZXkpIHsKICAgICAgICAgICAgICAgICRncm91cEtleSA9IGlzX2Jvb2woJGdyb3VwS2V5KSA/IChpbnQpICRncm91cEtleSA6ICRncm91cEtleTsKCiAgICAgICAgICAgICAgICBpZiAoISBhcnJheV9rZXlfZXhpc3RzKCRncm91cEtleSwgJHJlc3VsdHMpKSB7CiAgICAgICAgICAgICAgICAgICAgJHJlc3VsdHNbJGdyb3VwS2V5XSA9IG5ldyBzdGF0aWM7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJHJlc3VsdHNbJGdyb3VwS2V5XS0+b2Zmc2V0U2V0KCRwcmVzZXJ2ZUtleXMgPyAka2V5IDogbnVsbCwgJHZhbHVlKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgJHJlc3VsdCA9IG5ldyBzdGF0aWMoJHJlc3VsdHMpOwoKICAgICAgICBpZiAoISBlbXB0eSgkbmV4dEdyb3VwcykpIHsKICAgICAgICAgICAgcmV0dXJuICRyZXN1bHQtPm1hcC0+Z3JvdXBCeSgkbmV4dEdyb3VwcywgJHByZXNlcnZlS2V5cyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KCiAgICAvKioKICAgICAqIEtleSBhbiBhc3NvY2lhdGl2ZSBhcnJheSBieSBhIGZpZWxkIG9yIHVzaW5nIGEgY2FsbGJhY2suCiAgICAgKgogICAgICogQHBhcmFtICBjYWxsYWJsZXxzdHJpbmcgICRrZXlCeQogICAgICogQHJldHVybiBzdGF0aWMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGtleUJ5KCRrZXlCeSkKICAgIHsKICAgICAgICAka2V5QnkgPSAkdGhpcy0+dmFsdWVSZXRyaWV2ZXIoJGtleUJ5KTsKCiAgICAgICAgJHJlc3VsdHMgPSBbXTsKCiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPml0ZW1zIGFzICRrZXkgPT4gJGl0ZW0pIHsKICAgICAgICAgICAgJHJlc29sdmVkS2V5ID0gJGtleUJ5KCRpdGVtLCAka2V5KTsKCiAgICAgICAgICAgIGlmIChpc19vYmplY3QoJHJlc29sdmVkS2V5KSkgewogICAgICAgICAgICAgICAgJHJlc29sdmVkS2V5ID0gKHN0cmluZykgJHJlc29sdmVkS2V5OwogICAgICAgICAgICB9CgogICAgICAgICAgICAkcmVzdWx0c1skcmVzb2x2ZWRLZXldID0gJGl0ZW07CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IHN0YXRpYygkcmVzdWx0cyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBEZXRlcm1pbmUgaWYgYW4gaXRlbSBleGlzdHMgaW4gdGhlIGNvbGxlY3Rpb24gYnkga2V5LgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaGFzKCRrZXkpCiAgICB7CiAgICAgICAgJGtleXMgPSBpc19hcnJheSgka2V5KSA/ICRrZXkgOiBmdW5jX2dldF9hcmdzKCk7CgogICAgICAgIGZvcmVhY2ggKCRrZXlzIGFzICR2YWx1ZSkgewogICAgICAgICAgICBpZiAoISAkdGhpcy0+b2Zmc2V0RXhpc3RzKCR2YWx1ZSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBDb25jYXRlbmF0ZSB2YWx1ZXMgb2YgYSBnaXZlbiBrZXkgYXMgYSBzdHJpbmcuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgICR2YWx1ZQogICAgICogQHBhcmFtICBzdHJpbmcgICRnbHVlCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaW1wbG9kZSgkdmFsdWUsICRnbHVlID0gbnVsbCkKICAgIHsKICAgICAgICAkZmlyc3QgPSAkdGhpcy0+Zmlyc3QoKTsKCiAgICAgICAgaWYgKGlzX2FycmF5KCRmaXJzdCkgfHwgaXNfb2JqZWN0KCRmaXJzdCkpIHsKICAgICAgICAgICAgcmV0dXJuIGltcGxvZGUoJGdsdWUsICR0aGlzLT5wbHVjaygkdmFsdWUpLT5hbGwoKSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaW1wbG9kZSgkdmFsdWUsICR0aGlzLT5pdGVtcyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBJbnRlcnNlY3QgdGhlIGNvbGxlY3Rpb24gd2l0aCB0aGUgZ2l2ZW4gaXRlbXMuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGl0ZW1zCiAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaW50ZXJzZWN0KCRpdGVtcykKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHN0YXRpYyhhcnJheV9pbnRlcnNlY3QoJHRoaXMtPml0ZW1zLCAkdGhpcy0+Z2V0QXJyYXlhYmxlSXRlbXMoJGl0ZW1zKSkpOwogICAgfQoKICAgIC8qKgogICAgICogSW50ZXJzZWN0IHRoZSBjb2xsZWN0aW9uIHdpdGggdGhlIGdpdmVuIGl0ZW1zIGJ5IGtleS4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAkaXRlbXMKICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpbnRlcnNlY3RCeUtleXMoJGl0ZW1zKQogICAgewogICAgICAgIHJldHVybiBuZXcgc3RhdGljKGFycmF5X2ludGVyc2VjdF9rZXkoCiAgICAgICAgICAgICR0aGlzLT5pdGVtcywgJHRoaXMtPmdldEFycmF5YWJsZUl0ZW1zKCRpdGVtcykKICAgICAgICApKTsKICAgIH0KCiAgICAvKioKICAgICAqIERldGVybWluZSBpZiB0aGUgY29sbGVjdGlvbiBpcyBlbXB0eSBvciBub3QuCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc0VtcHR5KCkKICAgIHsKICAgICAgICByZXR1cm4gZW1wdHkoJHRoaXMtPml0ZW1zKTsKICAgIH0KCiAgICAvKioKICAgICAqIERldGVybWluZSBpZiB0aGUgY29sbGVjdGlvbiBpcyBub3QgZW1wdHkuCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBpc05vdEVtcHR5KCkKICAgIHsKICAgICAgICByZXR1cm4gISAkdGhpcy0+aXNFbXB0eSgpOwogICAgfQoKICAgIC8qKgogICAgICogRGV0ZXJtaW5lIGlmIHRoZSBnaXZlbiB2YWx1ZSBpcyBjYWxsYWJsZSwgYnV0IG5vdCBhIHN0cmluZy4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAkdmFsdWUKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gdXNlQXNDYWxsYWJsZSgkdmFsdWUpCiAgICB7CiAgICAgICAgcmV0dXJuICEgaXNfc3RyaW5nKCR2YWx1ZSkgJiYgaXNfY2FsbGFibGUoJHZhbHVlKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUga2V5cyBvZiB0aGUgY29sbGVjdGlvbiBpdGVtcy4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24ga2V5cygpCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzdGF0aWMoYXJyYXlfa2V5cygkdGhpcy0+aXRlbXMpKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgbGFzdCBpdGVtIGZyb20gdGhlIGNvbGxlY3Rpb24uCiAgICAgKgogICAgICogQHBhcmFtICBjYWxsYWJsZXxudWxsICAkY2FsbGJhY2sKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRkZWZhdWx0CiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsYXN0KGNhbGxhYmxlICRjYWxsYmFjayA9IG51bGwsICRkZWZhdWx0ID0gbnVsbCkKICAgIHsKICAgICAgICByZXR1cm4gQXJyOjpsYXN0KCR0aGlzLT5pdGVtcywgJGNhbGxiYWNrLCAkZGVmYXVsdCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIHZhbHVlcyBvZiBhIGdpdmVuIGtleS4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZ3xhcnJheSAgJHZhbHVlCiAgICAgKiBAcGFyYW0gIHN0cmluZ3xudWxsICAka2V5CiAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcGx1Y2soJHZhbHVlLCAka2V5ID0gbnVsbCkKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHN0YXRpYyhBcnI6OnBsdWNrKCR0aGlzLT5pdGVtcywgJHZhbHVlLCAka2V5KSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSdW4gYSBtYXAgb3ZlciBlYWNoIG9mIHRoZSBpdGVtcy4KICAgICAqCiAgICAgKiBAcGFyYW0gIGNhbGxhYmxlICAkY2FsbGJhY2sKICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtYXAoY2FsbGFibGUgJGNhbGxiYWNrKQogICAgewogICAgICAgICRrZXlzID0gYXJyYXlfa2V5cygkdGhpcy0+aXRlbXMpOwoKICAgICAgICAkaXRlbXMgPSBhcnJheV9tYXAoJGNhbGxiYWNrLCAkdGhpcy0+aXRlbXMsICRrZXlzKTsKCiAgICAgICAgcmV0dXJuIG5ldyBzdGF0aWMoYXJyYXlfY29tYmluZSgka2V5cywgJGl0ZW1zKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSdW4gYSBtYXAgb3ZlciBlYWNoIG5lc3RlZCBjaHVuayBvZiBpdGVtcy4KICAgICAqCiAgICAgKiBAcGFyYW0gIGNhbGxhYmxlICAkY2FsbGJhY2sKICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtYXBTcHJlYWQoY2FsbGFibGUgJGNhbGxiYWNrKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bWFwKGZ1bmN0aW9uICgkY2h1bmssICRrZXkpIHVzZSAoJGNhbGxiYWNrKSB7CiAgICAgICAgICAgICRjaHVua1tdID0gJGtleTsKCiAgICAgICAgICAgIHJldHVybiAkY2FsbGJhY2soLi4uJGNodW5rKTsKICAgICAgICB9KTsKICAgIH0KCiAgICAvKioKICAgICAqIFJ1biBhIGRpY3Rpb25hcnkgbWFwIG92ZXIgdGhlIGl0ZW1zLgogICAgICoKICAgICAqIFRoZSBjYWxsYmFjayBzaG91bGQgcmV0dXJuIGFuIGFzc29jaWF0aXZlIGFycmF5IHdpdGggYSBzaW5nbGUga2V5L3ZhbHVlIHBhaXIuCiAgICAgKgogICAgICogQHBhcmFtICBjYWxsYWJsZSAgJGNhbGxiYWNrCiAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbWFwVG9EaWN0aW9uYXJ5KGNhbGxhYmxlICRjYWxsYmFjaykKICAgIHsKICAgICAgICAkZGljdGlvbmFyeSA9IFtdOwoKICAgICAgICBmb3JlYWNoICgkdGhpcy0+aXRlbXMgYXMgJGtleSA9PiAkaXRlbSkgewogICAgICAgICAgICAkcGFpciA9ICRjYWxsYmFjaygkaXRlbSwgJGtleSk7CgogICAgICAgICAgICAka2V5ID0ga2V5KCRwYWlyKTsKCiAgICAgICAgICAgICR2YWx1ZSA9IHJlc2V0KCRwYWlyKTsKCiAgICAgICAgICAgIGlmICghIGlzc2V0KCRkaWN0aW9uYXJ5WyRrZXldKSkgewogICAgICAgICAgICAgICAgJGRpY3Rpb25hcnlbJGtleV0gPSBbXTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJGRpY3Rpb25hcnlbJGtleV1bXSA9ICR2YWx1ZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgc3RhdGljKCRkaWN0aW9uYXJ5KTsKICAgIH0KCiAgICAvKioKICAgICAqIFJ1biBhIGdyb3VwaW5nIG1hcCBvdmVyIHRoZSBpdGVtcy4KICAgICAqCiAgICAgKiBUaGUgY2FsbGJhY2sgc2hvdWxkIHJldHVybiBhbiBhc3NvY2lhdGl2ZSBhcnJheSB3aXRoIGEgc2luZ2xlIGtleS92YWx1ZSBwYWlyLgogICAgICoKICAgICAqIEBwYXJhbSAgY2FsbGFibGUgICRjYWxsYmFjawogICAgICogQHJldHVybiBzdGF0aWMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG1hcFRvR3JvdXBzKGNhbGxhYmxlICRjYWxsYmFjaykKICAgIHsKICAgICAgICAkZ3JvdXBzID0gJHRoaXMtPm1hcFRvRGljdGlvbmFyeSgkY2FsbGJhY2spOwoKICAgICAgICByZXR1cm4gJGdyb3Vwcy0+bWFwKFskdGhpcywgJ21ha2UnXSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSdW4gYW4gYXNzb2NpYXRpdmUgbWFwIG92ZXIgZWFjaCBvZiB0aGUgaXRlbXMuCiAgICAgKgogICAgICogVGhlIGNhbGxiYWNrIHNob3VsZCByZXR1cm4gYW4gYXNzb2NpYXRpdmUgYXJyYXkgd2l0aCBhIHNpbmdsZSBrZXkvdmFsdWUgcGFpci4KICAgICAqCiAgICAgKiBAcGFyYW0gIGNhbGxhYmxlICAkY2FsbGJhY2sKICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtYXBXaXRoS2V5cyhjYWxsYWJsZSAkY2FsbGJhY2spCiAgICB7CiAgICAgICAgJHJlc3VsdCA9IFtdOwoKICAgICAgICBmb3JlYWNoICgkdGhpcy0+aXRlbXMgYXMgJGtleSA9PiAkdmFsdWUpIHsKICAgICAgICAgICAgJGFzc29jID0gJGNhbGxiYWNrKCR2YWx1ZSwgJGtleSk7CgogICAgICAgICAgICBmb3JlYWNoICgkYXNzb2MgYXMgJG1hcEtleSA9PiAkbWFwVmFsdWUpIHsKICAgICAgICAgICAgICAgICRyZXN1bHRbJG1hcEtleV0gPSAkbWFwVmFsdWU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgc3RhdGljKCRyZXN1bHQpOwogICAgfQoKICAgIC8qKgogICAgICogTWFwIGEgY29sbGVjdGlvbiBhbmQgZmxhdHRlbiB0aGUgcmVzdWx0IGJ5IGEgc2luZ2xlIGxldmVsLgogICAgICoKICAgICAqIEBwYXJhbSAgY2FsbGFibGUgICRjYWxsYmFjawogICAgICogQHJldHVybiBzdGF0aWMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZsYXRNYXAoY2FsbGFibGUgJGNhbGxiYWNrKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bWFwKCRjYWxsYmFjayktPmNvbGxhcHNlKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBNYXAgdGhlIHZhbHVlcyBpbnRvIGEgbmV3IGNsYXNzLgogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkY2xhc3MKICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtYXBJbnRvKCRjbGFzcykKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPm1hcChmdW5jdGlvbiAoJHZhbHVlLCAka2V5KSB1c2UgKCRjbGFzcykgewogICAgICAgICAgICByZXR1cm4gbmV3ICRjbGFzcygkdmFsdWUsICRrZXkpOwogICAgICAgIH0pOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBtYXggdmFsdWUgb2YgYSBnaXZlbiBrZXkuCiAgICAgKgogICAgICogQHBhcmFtICBjYWxsYWJsZXxzdHJpbmd8bnVsbCAgJGNhbGxiYWNrCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBtYXgoJGNhbGxiYWNrID0gbnVsbCkKICAgIHsKICAgICAgICAkY2FsbGJhY2sgPSAkdGhpcy0+dmFsdWVSZXRyaWV2ZXIoJGNhbGxiYWNrKTsKCiAgICAgICAgcmV0dXJuICR0aGlzLT5maWx0ZXIoZnVuY3Rpb24gKCR2YWx1ZSkgewogICAgICAgICAgICByZXR1cm4gISBpc19udWxsKCR2YWx1ZSk7CiAgICAgICAgfSktPnJlZHVjZShmdW5jdGlvbiAoJHJlc3VsdCwgJGl0ZW0pIHVzZSAoJGNhbGxiYWNrKSB7CiAgICAgICAgICAgICR2YWx1ZSA9ICRjYWxsYmFjaygkaXRlbSk7CgogICAgICAgICAgICByZXR1cm4gaXNfbnVsbCgkcmVzdWx0KSB8fCAkdmFsdWUgPiAkcmVzdWx0ID8gJHZhbHVlIDogJHJlc3VsdDsKICAgICAgICB9KTsKICAgIH0KCiAgICAvKioKICAgICAqIE1lcmdlIHRoZSBjb2xsZWN0aW9uIHdpdGggdGhlIGdpdmVuIGl0ZW1zLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRpdGVtcwogICAgICogQHJldHVybiBzdGF0aWMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG1lcmdlKCRpdGVtcykKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHN0YXRpYyhhcnJheV9tZXJnZSgkdGhpcy0+aXRlbXMsICR0aGlzLT5nZXRBcnJheWFibGVJdGVtcygkaXRlbXMpKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBjb2xsZWN0aW9uIGJ5IHVzaW5nIHRoaXMgY29sbGVjdGlvbiBmb3Iga2V5cyBhbmQgYW5vdGhlciBmb3IgaXRzIHZhbHVlcy4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAkdmFsdWVzCiAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY29tYmluZSgkdmFsdWVzKQogICAgewogICAgICAgIHJldHVybiBuZXcgc3RhdGljKGFycmF5X2NvbWJpbmUoJHRoaXMtPmFsbCgpLCAkdGhpcy0+Z2V0QXJyYXlhYmxlSXRlbXMoJHZhbHVlcykpKTsKICAgIH0KCiAgICAvKioKICAgICAqIFVuaW9uIHRoZSBjb2xsZWN0aW9uIHdpdGggdGhlIGdpdmVuIGl0ZW1zLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRpdGVtcwogICAgICogQHJldHVybiBzdGF0aWMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHVuaW9uKCRpdGVtcykKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHN0YXRpYygkdGhpcy0+aXRlbXMgKyAkdGhpcy0+Z2V0QXJyYXlhYmxlSXRlbXMoJGl0ZW1zKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIG1pbiB2YWx1ZSBvZiBhIGdpdmVuIGtleS4KICAgICAqCiAgICAgKiBAcGFyYW0gIGNhbGxhYmxlfHN0cmluZ3xudWxsICAkY2FsbGJhY2sKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG1pbigkY2FsbGJhY2sgPSBudWxsKQogICAgewogICAgICAgICRjYWxsYmFjayA9ICR0aGlzLT52YWx1ZVJldHJpZXZlcigkY2FsbGJhY2spOwoKICAgICAgICByZXR1cm4gJHRoaXMtPmZpbHRlcihmdW5jdGlvbiAoJHZhbHVlKSB7CiAgICAgICAgICAgIHJldHVybiAhIGlzX251bGwoJHZhbHVlKTsKICAgICAgICB9KS0+cmVkdWNlKGZ1bmN0aW9uICgkcmVzdWx0LCAkaXRlbSkgdXNlICgkY2FsbGJhY2spIHsKICAgICAgICAgICAgJHZhbHVlID0gJGNhbGxiYWNrKCRpdGVtKTsKCiAgICAgICAgICAgIHJldHVybiBpc19udWxsKCRyZXN1bHQpIHx8ICR2YWx1ZSA8ICRyZXN1bHQgPyAkdmFsdWUgOiAkcmVzdWx0OwogICAgICAgIH0pOwogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlIGEgbmV3IGNvbGxlY3Rpb24gY29uc2lzdGluZyBvZiBldmVyeSBuLXRoIGVsZW1lbnQuCiAgICAgKgogICAgICogQHBhcmFtICBpbnQgICRzdGVwCiAgICAgKiBAcGFyYW0gIGludCAgJG9mZnNldAogICAgICogQHJldHVybiBzdGF0aWMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG50aCgkc3RlcCwgJG9mZnNldCA9IDApCiAgICB7CiAgICAgICAgJG5ldyA9IFtdOwoKICAgICAgICAkcG9zaXRpb24gPSAwOwoKICAgICAgICBmb3JlYWNoICgkdGhpcy0+aXRlbXMgYXMgJGl0ZW0pIHsKICAgICAgICAgICAgaWYgKCRwb3NpdGlvbiAlICRzdGVwID09PSAkb2Zmc2V0KSB7CiAgICAgICAgICAgICAgICAkbmV3W10gPSAkaXRlbTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHBvc2l0aW9uKys7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IHN0YXRpYygkbmV3KTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgaXRlbXMgd2l0aCB0aGUgc3BlY2lmaWVkIGtleXMuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleXMKICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBvbmx5KCRrZXlzKQogICAgewogICAgICAgIGlmIChpc19udWxsKCRrZXlzKSkgewogICAgICAgICAgICByZXR1cm4gbmV3IHN0YXRpYygkdGhpcy0+aXRlbXMpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRrZXlzIGluc3RhbmNlb2Ygc2VsZikgewogICAgICAgICAgICAka2V5cyA9ICRrZXlzLT5hbGwoKTsKICAgICAgICB9CgogICAgICAgICRrZXlzID0gaXNfYXJyYXkoJGtleXMpID8gJGtleXMgOiBmdW5jX2dldF9hcmdzKCk7CgogICAgICAgIHJldHVybiBuZXcgc3RhdGljKEFycjo6b25seSgkdGhpcy0+aXRlbXMsICRrZXlzKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiAiUGFnaW5hdGUiIHRoZSBjb2xsZWN0aW9uIGJ5IHNsaWNpbmcgaXQgaW50byBhIHNtYWxsZXIgY29sbGVjdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gIGludCAgJHBhZ2UKICAgICAqIEBwYXJhbSAgaW50ICAkcGVyUGFnZQogICAgICogQHJldHVybiBzdGF0aWMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZvclBhZ2UoJHBhZ2UsICRwZXJQYWdlKQogICAgewogICAgICAgICRvZmZzZXQgPSBtYXgoMCwgKCRwYWdlIC0gMSkgKiAkcGVyUGFnZSk7CgogICAgICAgIHJldHVybiAkdGhpcy0+c2xpY2UoJG9mZnNldCwgJHBlclBhZ2UpOwogICAgfQoKICAgIC8qKgogICAgICogUGFydGl0aW9uIHRoZSBjb2xsZWN0aW9uIGludG8gdHdvIGFycmF5cyB1c2luZyB0aGUgZ2l2ZW4gY2FsbGJhY2sgb3Iga2V5LgogICAgICoKICAgICAqIEBwYXJhbSAgY2FsbGFibGV8c3RyaW5nICAka2V5CiAgICAgKiBAcGFyYW0gIG1peGVkICAkb3BlcmF0b3IKICAgICAqIEBwYXJhbSAgbWl4ZWQgICR2YWx1ZQogICAgICogQHJldHVybiBzdGF0aWMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHBhcnRpdGlvbigka2V5LCAkb3BlcmF0b3IgPSBudWxsLCAkdmFsdWUgPSBudWxsKQogICAgewogICAgICAgICRwYXJ0aXRpb25zID0gW25ldyBzdGF0aWMsIG5ldyBzdGF0aWNdOwoKICAgICAgICAkY2FsbGJhY2sgPSBmdW5jX251bV9hcmdzKCkgPT09IDEKICAgICAgICAgICAgICAgID8gJHRoaXMtPnZhbHVlUmV0cmlldmVyKCRrZXkpCiAgICAgICAgICAgICAgICA6ICR0aGlzLT5vcGVyYXRvckZvcldoZXJlKC4uLmZ1bmNfZ2V0X2FyZ3MoKSk7CgogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5pdGVtcyBhcyAka2V5ID0+ICRpdGVtKSB7CiAgICAgICAgICAgICRwYXJ0aXRpb25zWyhpbnQpICEgJGNhbGxiYWNrKCRpdGVtLCAka2V5KV1bJGtleV0gPSAkaXRlbTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgc3RhdGljKCRwYXJ0aXRpb25zKTsKICAgIH0KCiAgICAvKioKICAgICAqIFBhc3MgdGhlIGNvbGxlY3Rpb24gdG8gdGhlIGdpdmVuIGNhbGxiYWNrIGFuZCByZXR1cm4gdGhlIHJlc3VsdC4KICAgICAqCiAgICAgKiBAcGFyYW0gIGNhbGxhYmxlICRjYWxsYmFjawogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcGlwZShjYWxsYWJsZSAkY2FsbGJhY2spCiAgICB7CiAgICAgICAgcmV0dXJuICRjYWxsYmFjaygkdGhpcyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgYW5kIHJlbW92ZSB0aGUgbGFzdCBpdGVtIGZyb20gdGhlIGNvbGxlY3Rpb24uCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcG9wKCkKICAgIHsKICAgICAgICByZXR1cm4gYXJyYXlfcG9wKCR0aGlzLT5pdGVtcyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBQdXNoIGFuIGl0ZW0gb250byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBjb2xsZWN0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICR2YWx1ZQogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHJldHVybiAkdGhpcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcHJlcGVuZCgkdmFsdWUsICRrZXkgPSBudWxsKQogICAgewogICAgICAgICR0aGlzLT5pdGVtcyA9IEFycjo6cHJlcGVuZCgkdGhpcy0+aXRlbXMsICR2YWx1ZSwgJGtleSk7CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICAvKioKICAgICAqIFB1c2ggYW4gaXRlbSBvbnRvIHRoZSBlbmQgb2YgdGhlIGNvbGxlY3Rpb24uCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJHZhbHVlCiAgICAgKiBAcmV0dXJuICR0aGlzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBwdXNoKCR2YWx1ZSkKICAgIHsKICAgICAgICAkdGhpcy0+b2Zmc2V0U2V0KG51bGwsICR2YWx1ZSk7CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICAvKioKICAgICAqIFB1c2ggYWxsIG9mIHRoZSBnaXZlbiBpdGVtcyBvbnRvIHRoZSBjb2xsZWN0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSAgXFRyYXZlcnNhYmxlfGFycmF5ICAkc291cmNlCiAgICAgKiBAcmV0dXJuICR0aGlzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjb25jYXQoJHNvdXJjZSkKICAgIHsKICAgICAgICAkcmVzdWx0ID0gbmV3IHN0YXRpYygkdGhpcyk7CgogICAgICAgIGZvcmVhY2ggKCRzb3VyY2UgYXMgJGl0ZW0pIHsKICAgICAgICAgICAgJHJlc3VsdC0+cHVzaCgkaXRlbSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHJlc3VsdDsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCBhbmQgcmVtb3ZlIGFuIGl0ZW0gZnJvbSB0aGUgY29sbGVjdGlvbi4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIG1peGVkICAkZGVmYXVsdAogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcHVsbCgka2V5LCAkZGVmYXVsdCA9IG51bGwpCiAgICB7CiAgICAgICAgcmV0dXJuIEFycjo6cHVsbCgkdGhpcy0+aXRlbXMsICRrZXksICRkZWZhdWx0KTsKICAgIH0KCiAgICAvKioKICAgICAqIFB1dCBhbiBpdGVtIGluIHRoZSBjb2xsZWN0aW9uIGJ5IGtleS4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAka2V5CiAgICAgKiBAcGFyYW0gIG1peGVkICAkdmFsdWUKICAgICAqIEByZXR1cm4gJHRoaXMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHB1dCgka2V5LCAkdmFsdWUpCiAgICB7CiAgICAgICAgJHRoaXMtPm9mZnNldFNldCgka2V5LCAkdmFsdWUpOwoKICAgICAgICByZXR1cm4gJHRoaXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgb25lIG9yIGEgc3BlY2lmaWVkIG51bWJlciBvZiBpdGVtcyByYW5kb21seSBmcm9tIHRoZSBjb2xsZWN0aW9uLgogICAgICoKICAgICAqIEBwYXJhbSAgaW50fG51bGwgICRudW1iZXIKICAgICAqIEByZXR1cm4gc3RhdGljfG1peGVkCiAgICAgKgogICAgICogQHRocm93cyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByYW5kb20oJG51bWJlciA9IG51bGwpCiAgICB7CiAgICAgICAgaWYgKGlzX251bGwoJG51bWJlcikpIHsKICAgICAgICAgICAgcmV0dXJuIEFycjo6cmFuZG9tKCR0aGlzLT5pdGVtcyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IHN0YXRpYyhBcnI6OnJhbmRvbSgkdGhpcy0+aXRlbXMsICRudW1iZXIpKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJlZHVjZSB0aGUgY29sbGVjdGlvbiB0byBhIHNpbmdsZSB2YWx1ZS4KICAgICAqCiAgICAgKiBAcGFyYW0gIGNhbGxhYmxlICAkY2FsbGJhY2sKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRpbml0aWFsCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZWR1Y2UoY2FsbGFibGUgJGNhbGxiYWNrLCAkaW5pdGlhbCA9IG51bGwpCiAgICB7CiAgICAgICAgcmV0dXJuIGFycmF5X3JlZHVjZSgkdGhpcy0+aXRlbXMsICRjYWxsYmFjaywgJGluaXRpYWwpOwogICAgfQoKICAgIC8qKgogICAgICogQ3JlYXRlIGEgY29sbGVjdGlvbiBvZiBhbGwgZWxlbWVudHMgdGhhdCBkbyBub3QgcGFzcyBhIGdpdmVuIHRydXRoIHRlc3QuCiAgICAgKgogICAgICogQHBhcmFtICBjYWxsYWJsZXxtaXhlZCAgJGNhbGxiYWNrCiAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVqZWN0KCRjYWxsYmFjaykKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPnVzZUFzQ2FsbGFibGUoJGNhbGxiYWNrKSkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPmZpbHRlcihmdW5jdGlvbiAoJHZhbHVlLCAka2V5KSB1c2UgKCRjYWxsYmFjaykgewogICAgICAgICAgICAgICAgcmV0dXJuICEgJGNhbGxiYWNrKCR2YWx1ZSwgJGtleSk7CiAgICAgICAgICAgIH0pOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5maWx0ZXIoZnVuY3Rpb24gKCRpdGVtKSB1c2UgKCRjYWxsYmFjaykgewogICAgICAgICAgICByZXR1cm4gJGl0ZW0gIT0gJGNhbGxiYWNrOwogICAgICAgIH0pOwogICAgfQoKICAgIC8qKgogICAgICogUmV2ZXJzZSBpdGVtcyBvcmRlci4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmV2ZXJzZSgpCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzdGF0aWMoYXJyYXlfcmV2ZXJzZSgkdGhpcy0+aXRlbXMsIHRydWUpKTsKICAgIH0KCiAgICAvKioKICAgICAqIFNlYXJjaCB0aGUgY29sbGVjdGlvbiBmb3IgYSBnaXZlbiB2YWx1ZSBhbmQgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIGtleSBpZiBzdWNjZXNzZnVsLgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICR2YWx1ZQogICAgICogQHBhcmFtICBib29sICAkc3RyaWN0CiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZWFyY2goJHZhbHVlLCAkc3RyaWN0ID0gZmFsc2UpCiAgICB7CiAgICAgICAgaWYgKCEgJHRoaXMtPnVzZUFzQ2FsbGFibGUoJHZhbHVlKSkgewogICAgICAgICAgICByZXR1cm4gYXJyYXlfc2VhcmNoKCR2YWx1ZSwgJHRoaXMtPml0ZW1zLCAkc3RyaWN0KTsKICAgICAgICB9CgogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5pdGVtcyBhcyAka2V5ID0+ICRpdGVtKSB7CiAgICAgICAgICAgIGlmIChjYWxsX3VzZXJfZnVuYygkdmFsdWUsICRpdGVtLCAka2V5KSkgewogICAgICAgICAgICAgICAgcmV0dXJuICRrZXk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCBhbmQgcmVtb3ZlIHRoZSBmaXJzdCBpdGVtIGZyb20gdGhlIGNvbGxlY3Rpb24uCiAgICAgKgogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2hpZnQoKQogICAgewogICAgICAgIHJldHVybiBhcnJheV9zaGlmdCgkdGhpcy0+aXRlbXMpOwogICAgfQoKICAgIC8qKgogICAgICogU2h1ZmZsZSB0aGUgaXRlbXMgaW4gdGhlIGNvbGxlY3Rpb24uCiAgICAgKgogICAgICogQHBhcmFtICBpbnQgICRzZWVkCiAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2h1ZmZsZSgkc2VlZCA9IG51bGwpCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzdGF0aWMoQXJyOjpzaHVmZmxlKCR0aGlzLT5pdGVtcywgJHNlZWQpKTsKICAgIH0KCiAgICAvKioKICAgICAqIFNsaWNlIHRoZSB1bmRlcmx5aW5nIGNvbGxlY3Rpb24gYXJyYXkuCiAgICAgKgogICAgICogQHBhcmFtICBpbnQgICRvZmZzZXQKICAgICAqIEBwYXJhbSAgaW50ICAkbGVuZ3RoCiAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2xpY2UoJG9mZnNldCwgJGxlbmd0aCA9IG51bGwpCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzdGF0aWMoYXJyYXlfc2xpY2UoJHRoaXMtPml0ZW1zLCAkb2Zmc2V0LCAkbGVuZ3RoLCB0cnVlKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBTcGxpdCBhIGNvbGxlY3Rpb24gaW50byBhIGNlcnRhaW4gbnVtYmVyIG9mIGdyb3Vwcy4KICAgICAqCiAgICAgKiBAcGFyYW0gIGludCAgJG51bWJlck9mR3JvdXBzCiAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc3BsaXQoJG51bWJlck9mR3JvdXBzKQogICAgewogICAgICAgIGlmICgkdGhpcy0+aXNFbXB0eSgpKSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgc3RhdGljOwogICAgICAgIH0KCiAgICAgICAgJGdyb3VwU2l6ZSA9IGNlaWwoJHRoaXMtPmNvdW50KCkgLyAkbnVtYmVyT2ZHcm91cHMpOwoKICAgICAgICByZXR1cm4gJHRoaXMtPmNodW5rKCRncm91cFNpemUpOwogICAgfQoKICAgIC8qKgogICAgICogQ2h1bmsgdGhlIHVuZGVybHlpbmcgY29sbGVjdGlvbiBhcnJheS4KICAgICAqCiAgICAgKiBAcGFyYW0gIGludCAgJHNpemUKICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjaHVuaygkc2l6ZSkKICAgIHsKICAgICAgICBpZiAoJHNpemUgPD0gMCkgewogICAgICAgICAgICByZXR1cm4gbmV3IHN0YXRpYzsKICAgICAgICB9CgogICAgICAgICRjaHVua3MgPSBbXTsKCiAgICAgICAgZm9yZWFjaCAoYXJyYXlfY2h1bmsoJHRoaXMtPml0ZW1zLCAkc2l6ZSwgdHJ1ZSkgYXMgJGNodW5rKSB7CiAgICAgICAgICAgICRjaHVua3NbXSA9IG5ldyBzdGF0aWMoJGNodW5rKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgc3RhdGljKCRjaHVua3MpOwogICAgfQoKICAgIC8qKgogICAgICogU29ydCB0aHJvdWdoIGVhY2ggaXRlbSB3aXRoIGEgY2FsbGJhY2suCiAgICAgKgogICAgICogQHBhcmFtICBjYWxsYWJsZXxudWxsICAkY2FsbGJhY2sKICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzb3J0KGNhbGxhYmxlICRjYWxsYmFjayA9IG51bGwpCiAgICB7CiAgICAgICAgJGl0ZW1zID0gJHRoaXMtPml0ZW1zOwoKICAgICAgICAkY2FsbGJhY2sKICAgICAgICAgICAgPyB1YXNvcnQoJGl0ZW1zLCAkY2FsbGJhY2spCiAgICAgICAgICAgIDogYXNvcnQoJGl0ZW1zKTsKCiAgICAgICAgcmV0dXJuIG5ldyBzdGF0aWMoJGl0ZW1zKTsKICAgIH0KCiAgICAvKioKICAgICAqIFNvcnQgdGhlIGNvbGxlY3Rpb24gdXNpbmcgdGhlIGdpdmVuIGNhbGxiYWNrLgogICAgICoKICAgICAqIEBwYXJhbSAgY2FsbGFibGV8c3RyaW5nICAkY2FsbGJhY2sKICAgICAqIEBwYXJhbSAgaW50ICAkb3B0aW9ucwogICAgICogQHBhcmFtICBib29sICAkZGVzY2VuZGluZwogICAgICogQHJldHVybiBzdGF0aWMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNvcnRCeSgkY2FsbGJhY2ssICRvcHRpb25zID0gU09SVF9SRUdVTEFSLCAkZGVzY2VuZGluZyA9IGZhbHNlKQogICAgewogICAgICAgICRyZXN1bHRzID0gW107CgogICAgICAgICRjYWxsYmFjayA9ICR0aGlzLT52YWx1ZVJldHJpZXZlcigkY2FsbGJhY2spOwoKICAgICAgICAvLyBGaXJzdCB3ZSB3aWxsIGxvb3AgdGhyb3VnaCB0aGUgaXRlbXMgYW5kIGdldCB0aGUgY29tcGFyYXRvciBmcm9tIGEgY2FsbGJhY2sKICAgICAgICAvLyBmdW5jdGlvbiB3aGljaCB3ZSB3ZXJlIGdpdmVuLiBUaGVuLCB3ZSB3aWxsIHNvcnQgdGhlIHJldHVybmVkIHZhbHVlcyBhbmQKICAgICAgICAvLyBhbmQgZ3JhYiB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZXMgZm9yIHRoZSBzb3J0ZWQga2V5cyBmcm9tIHRoaXMgYXJyYXkuCiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPml0ZW1zIGFzICRrZXkgPT4gJHZhbHVlKSB7CiAgICAgICAgICAgICRyZXN1bHRzWyRrZXldID0gJGNhbGxiYWNrKCR2YWx1ZSwgJGtleSk7CiAgICAgICAgfQoKICAgICAgICAkZGVzY2VuZGluZyA/IGFyc29ydCgkcmVzdWx0cywgJG9wdGlvbnMpCiAgICAgICAgICAgIDogYXNvcnQoJHJlc3VsdHMsICRvcHRpb25zKTsKCiAgICAgICAgLy8gT25jZSB3ZSBoYXZlIHNvcnRlZCBhbGwgb2YgdGhlIGtleXMgaW4gdGhlIGFycmF5LCB3ZSB3aWxsIGxvb3AgdGhyb3VnaCB0aGVtCiAgICAgICAgLy8gYW5kIGdyYWIgdGhlIGNvcnJlc3BvbmRpbmcgbW9kZWwgc28gd2UgY2FuIHNldCB0aGUgdW5kZXJseWluZyBpdGVtcyBsaXN0CiAgICAgICAgLy8gdG8gdGhlIHNvcnRlZCB2ZXJzaW9uLiBUaGVuIHdlJ2xsIGp1c3QgcmV0dXJuIHRoZSBjb2xsZWN0aW9uIGluc3RhbmNlLgogICAgICAgIGZvcmVhY2ggKGFycmF5X2tleXMoJHJlc3VsdHMpIGFzICRrZXkpIHsKICAgICAgICAgICAgJHJlc3VsdHNbJGtleV0gPSAkdGhpcy0+aXRlbXNbJGtleV07CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IHN0YXRpYygkcmVzdWx0cyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBTb3J0IHRoZSBjb2xsZWN0aW9uIGluIGRlc2NlbmRpbmcgb3JkZXIgdXNpbmcgdGhlIGdpdmVuIGNhbGxiYWNrLgogICAgICoKICAgICAqIEBwYXJhbSAgY2FsbGFibGV8c3RyaW5nICAkY2FsbGJhY2sKICAgICAqIEBwYXJhbSAgaW50ICAkb3B0aW9ucwogICAgICogQHJldHVybiBzdGF0aWMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNvcnRCeURlc2MoJGNhbGxiYWNrLCAkb3B0aW9ucyA9IFNPUlRfUkVHVUxBUikKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnNvcnRCeSgkY2FsbGJhY2ssICRvcHRpb25zLCB0cnVlKTsKICAgIH0KCiAgICAvKioKICAgICAqIFNvcnQgdGhlIGNvbGxlY3Rpb24ga2V5cy4KICAgICAqCiAgICAgKiBAcGFyYW0gIGludCAgJG9wdGlvbnMKICAgICAqIEBwYXJhbSAgYm9vbCAgJGRlc2NlbmRpbmcKICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzb3J0S2V5cygkb3B0aW9ucyA9IFNPUlRfUkVHVUxBUiwgJGRlc2NlbmRpbmcgPSBmYWxzZSkKICAgIHsKICAgICAgICAkaXRlbXMgPSAkdGhpcy0+aXRlbXM7CgogICAgICAgICRkZXNjZW5kaW5nID8ga3Jzb3J0KCRpdGVtcywgJG9wdGlvbnMpIDoga3NvcnQoJGl0ZW1zLCAkb3B0aW9ucyk7CgogICAgICAgIHJldHVybiBuZXcgc3RhdGljKCRpdGVtcyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBTb3J0IHRoZSBjb2xsZWN0aW9uIGtleXMgaW4gZGVzY2VuZGluZyBvcmRlci4KICAgICAqCiAgICAgKiBAcGFyYW0gIGludCAkb3B0aW9ucwogICAgICogQHJldHVybiBzdGF0aWMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNvcnRLZXlzRGVzYygkb3B0aW9ucyA9IFNPUlRfUkVHVUxBUikKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnNvcnRLZXlzKCRvcHRpb25zLCB0cnVlKTsKICAgIH0KCiAgICAvKioKICAgICAqIFNwbGljZSBhIHBvcnRpb24gb2YgdGhlIHVuZGVybHlpbmcgY29sbGVjdGlvbiBhcnJheS4KICAgICAqCiAgICAgKiBAcGFyYW0gIGludCAgJG9mZnNldAogICAgICogQHBhcmFtICBpbnR8bnVsbCAgJGxlbmd0aAogICAgICogQHBhcmFtICBtaXhlZCAgJHJlcGxhY2VtZW50CiAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc3BsaWNlKCRvZmZzZXQsICRsZW5ndGggPSBudWxsLCAkcmVwbGFjZW1lbnQgPSBbXSkKICAgIHsKICAgICAgICBpZiAoZnVuY19udW1fYXJncygpID09PSAxKSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgc3RhdGljKGFycmF5X3NwbGljZSgkdGhpcy0+aXRlbXMsICRvZmZzZXQpKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgc3RhdGljKGFycmF5X3NwbGljZSgkdGhpcy0+aXRlbXMsICRvZmZzZXQsICRsZW5ndGgsICRyZXBsYWNlbWVudCkpOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBzdW0gb2YgdGhlIGdpdmVuIHZhbHVlcy4KICAgICAqCiAgICAgKiBAcGFyYW0gIGNhbGxhYmxlfHN0cmluZ3xudWxsICAkY2FsbGJhY2sKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHN1bSgkY2FsbGJhY2sgPSBudWxsKQogICAgewogICAgICAgIGlmIChpc19udWxsKCRjYWxsYmFjaykpIHsKICAgICAgICAgICAgcmV0dXJuIGFycmF5X3N1bSgkdGhpcy0+aXRlbXMpOwogICAgICAgIH0KCiAgICAgICAgJGNhbGxiYWNrID0gJHRoaXMtPnZhbHVlUmV0cmlldmVyKCRjYWxsYmFjayk7CgogICAgICAgIHJldHVybiAkdGhpcy0+cmVkdWNlKGZ1bmN0aW9uICgkcmVzdWx0LCAkaXRlbSkgdXNlICgkY2FsbGJhY2spIHsKICAgICAgICAgICAgcmV0dXJuICRyZXN1bHQgKyAkY2FsbGJhY2soJGl0ZW0pOwogICAgICAgIH0sIDApOwogICAgfQoKICAgIC8qKgogICAgICogVGFrZSB0aGUgZmlyc3Qgb3IgbGFzdCB7JGxpbWl0fSBpdGVtcy4KICAgICAqCiAgICAgKiBAcGFyYW0gIGludCAgJGxpbWl0CiAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdGFrZSgkbGltaXQpCiAgICB7CiAgICAgICAgaWYgKCRsaW1pdCA8IDApIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5zbGljZSgkbGltaXQsIGFicygkbGltaXQpKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+c2xpY2UoMCwgJGxpbWl0KTsKICAgIH0KCiAgICAvKioKICAgICAqIFBhc3MgdGhlIGNvbGxlY3Rpb24gdG8gdGhlIGdpdmVuIGNhbGxiYWNrIGFuZCB0aGVuIHJldHVybiBpdC4KICAgICAqCiAgICAgKiBAcGFyYW0gIGNhbGxhYmxlICAkY2FsbGJhY2sKICAgICAqIEByZXR1cm4gJHRoaXMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRhcChjYWxsYWJsZSAkY2FsbGJhY2spCiAgICB7CiAgICAgICAgJGNhbGxiYWNrKG5ldyBzdGF0aWMoJHRoaXMtPml0ZW1zKSk7CgogICAgICAgIHJldHVybiAkdGhpczsKICAgIH0KCiAgICAvKioKICAgICAqIFRyYW5zZm9ybSBlYWNoIGl0ZW0gaW4gdGhlIGNvbGxlY3Rpb24gdXNpbmcgYSBjYWxsYmFjay4KICAgICAqCiAgICAgKiBAcGFyYW0gIGNhbGxhYmxlICAkY2FsbGJhY2sKICAgICAqIEByZXR1cm4gJHRoaXMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRyYW5zZm9ybShjYWxsYWJsZSAkY2FsbGJhY2spCiAgICB7CiAgICAgICAgJHRoaXMtPml0ZW1zID0gJHRoaXMtPm1hcCgkY2FsbGJhY2spLT5hbGwoKTsKCiAgICAgICAgcmV0dXJuICR0aGlzOwogICAgfQoKICAgIC8qKgogICAgICogUmV0dXJuIG9ubHkgdW5pcXVlIGl0ZW1zIGZyb20gdGhlIGNvbGxlY3Rpb24gYXJyYXkuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmd8Y2FsbGFibGV8bnVsbCAgJGtleQogICAgICogQHBhcmFtICBib29sICAkc3RyaWN0CiAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdW5pcXVlKCRrZXkgPSBudWxsLCAkc3RyaWN0ID0gZmFsc2UpCiAgICB7CiAgICAgICAgJGNhbGxiYWNrID0gJHRoaXMtPnZhbHVlUmV0cmlldmVyKCRrZXkpOwoKICAgICAgICAkZXhpc3RzID0gW107CgogICAgICAgIHJldHVybiAkdGhpcy0+cmVqZWN0KGZ1bmN0aW9uICgkaXRlbSwgJGtleSkgdXNlICgkY2FsbGJhY2ssICRzdHJpY3QsICYkZXhpc3RzKSB7CiAgICAgICAgICAgIGlmIChpbl9hcnJheSgkaWQgPSAkY2FsbGJhY2soJGl0ZW0sICRrZXkpLCAkZXhpc3RzLCAkc3RyaWN0KSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRleGlzdHNbXSA9ICRpZDsKICAgICAgICB9KTsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybiBvbmx5IHVuaXF1ZSBpdGVtcyBmcm9tIHRoZSBjb2xsZWN0aW9uIGFycmF5IHVzaW5nIHN0cmljdCBjb21wYXJpc29uLgogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nfGNhbGxhYmxlfG51bGwgICRrZXkKICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB1bmlxdWVTdHJpY3QoJGtleSA9IG51bGwpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT51bmlxdWUoJGtleSwgdHJ1ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBSZXNldCB0aGUga2V5cyBvbiB0aGUgdW5kZXJseWluZyBhcnJheS4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdmFsdWVzKCkKICAgIHsKICAgICAgICByZXR1cm4gbmV3IHN0YXRpYyhhcnJheV92YWx1ZXMoJHRoaXMtPml0ZW1zKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgYSB2YWx1ZSByZXRyaWV2aW5nIGNhbGxiYWNrLgogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkdmFsdWUKICAgICAqIEByZXR1cm4gY2FsbGFibGUKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHZhbHVlUmV0cmlldmVyKCR2YWx1ZSkKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPnVzZUFzQ2FsbGFibGUoJHZhbHVlKSkgewogICAgICAgICAgICByZXR1cm4gJHZhbHVlOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgkaXRlbSkgdXNlICgkdmFsdWUpIHsKICAgICAgICAgICAgcmV0dXJuIGRhdGFfZ2V0KCRpdGVtLCAkdmFsdWUpOwogICAgICAgIH07CiAgICB9CgogICAgLyoqCiAgICAgKiBaaXAgdGhlIGNvbGxlY3Rpb24gdG9nZXRoZXIgd2l0aCBvbmUgb3IgbW9yZSBhcnJheXMuCiAgICAgKgogICAgICogZS5nLiBuZXcgQ29sbGVjdGlvbihbMSwgMiwgM10pLT56aXAoWzQsIDUsIDZdKTsKICAgICAqICAgICAgPT4gW1sxLCA0XSwgWzIsIDVdLCBbMywgNl1dCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAuLi4kaXRlbXMKICAgICAqIEByZXR1cm4gc3RhdGljCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB6aXAoJGl0ZW1zKQogICAgewogICAgICAgICRhcnJheWFibGVJdGVtcyA9IGFycmF5X21hcChmdW5jdGlvbiAoJGl0ZW1zKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+Z2V0QXJyYXlhYmxlSXRlbXMoJGl0ZW1zKTsKICAgICAgICB9LCBmdW5jX2dldF9hcmdzKCkpOwoKICAgICAgICAkcGFyYW1zID0gYXJyYXlfbWVyZ2UoW2Z1bmN0aW9uICgpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBzdGF0aWMoZnVuY19nZXRfYXJncygpKTsKICAgICAgICB9LCAkdGhpcy0+aXRlbXNdLCAkYXJyYXlhYmxlSXRlbXMpOwoKICAgICAgICByZXR1cm4gbmV3IHN0YXRpYyhjYWxsX3VzZXJfZnVuY19hcnJheSgnYXJyYXlfbWFwJywgJHBhcmFtcykpOwogICAgfQoKICAgIC8qKgogICAgICogUGFkIGNvbGxlY3Rpb24gdG8gdGhlIHNwZWNpZmllZCBsZW5ndGggd2l0aCBhIHZhbHVlLgogICAgICoKICAgICAqIEBwYXJhbSAgaW50ICAkc2l6ZQogICAgICogQHBhcmFtICBtaXhlZCAgJHZhbHVlCiAgICAgKiBAcmV0dXJuIHN0YXRpYwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcGFkKCRzaXplLCAkdmFsdWUpCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBzdGF0aWMoYXJyYXlfcGFkKCR0aGlzLT5pdGVtcywgJHNpemUsICR2YWx1ZSkpOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBjb2xsZWN0aW9uIG9mIGl0ZW1zIGFzIGEgcGxhaW4gYXJyYXkuCiAgICAgKgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9BcnJheSgpCiAgICB7CiAgICAgICAgcmV0dXJuIGFycmF5X21hcChmdW5jdGlvbiAoJHZhbHVlKSB7CiAgICAgICAgICAgIHJldHVybiAkdmFsdWUgaW5zdGFuY2VvZiBBcnJheWFibGUgPyAkdmFsdWUtPnRvQXJyYXkoKSA6ICR2YWx1ZTsKICAgICAgICB9LCAkdGhpcy0+aXRlbXMpOwogICAgfQoKICAgIC8qKgogICAgICogQ29udmVydCB0aGUgb2JqZWN0IGludG8gc29tZXRoaW5nIEpTT04gc2VyaWFsaXphYmxlLgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGpzb25TZXJpYWxpemUoKQogICAgewogICAgICAgIHJldHVybiBhcnJheV9tYXAoZnVuY3Rpb24gKCR2YWx1ZSkgewogICAgICAgICAgICBpZiAoJHZhbHVlIGluc3RhbmNlb2YgSnNvblNlcmlhbGl6YWJsZSkgewogICAgICAgICAgICAgICAgcmV0dXJuICR2YWx1ZS0+anNvblNlcmlhbGl6ZSgpOwogICAgICAgICAgICB9IGVsc2VpZiAoJHZhbHVlIGluc3RhbmNlb2YgSnNvbmFibGUpIHsKICAgICAgICAgICAgICAgIHJldHVybiBqc29uX2RlY29kZSgkdmFsdWUtPnRvSnNvbigpLCB0cnVlKTsKICAgICAgICAgICAgfSBlbHNlaWYgKCR2YWx1ZSBpbnN0YW5jZW9mIEFycmF5YWJsZSkgewogICAgICAgICAgICAgICAgcmV0dXJuICR2YWx1ZS0+dG9BcnJheSgpOwogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gJHZhbHVlOwogICAgICAgIH0sICR0aGlzLT5pdGVtcyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgdGhlIGNvbGxlY3Rpb24gb2YgaXRlbXMgYXMgSlNPTi4KICAgICAqCiAgICAgKiBAcGFyYW0gIGludCAgJG9wdGlvbnMKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0b0pzb24oJG9wdGlvbnMgPSAwKQogICAgewogICAgICAgIHJldHVybiBqc29uX2VuY29kZSgkdGhpcy0+anNvblNlcmlhbGl6ZSgpLCAkb3B0aW9ucyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgYW4gaXRlcmF0b3IgZm9yIHRoZSBpdGVtcy4KICAgICAqCiAgICAgKiBAcmV0dXJuIFxBcnJheUl0ZXJhdG9yCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJdGVyYXRvcigpCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBBcnJheUl0ZXJhdG9yKCR0aGlzLT5pdGVtcyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBHZXQgYSBDYWNoaW5nSXRlcmF0b3IgaW5zdGFuY2UuCiAgICAgKgogICAgICogQHBhcmFtICBpbnQgICRmbGFncwogICAgICogQHJldHVybiBcQ2FjaGluZ0l0ZXJhdG9yCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRDYWNoaW5nSXRlcmF0b3IoJGZsYWdzID0gQ2FjaGluZ0l0ZXJhdG9yOjpDQUxMX1RPU1RSSU5HKQogICAgewogICAgICAgIHJldHVybiBuZXcgQ2FjaGluZ0l0ZXJhdG9yKCR0aGlzLT5nZXRJdGVyYXRvcigpLCAkZmxhZ3MpOwogICAgfQoKICAgIC8qKgogICAgICogQ291bnQgdGhlIG51bWJlciBvZiBpdGVtcyBpbiB0aGUgY29sbGVjdGlvbi4KICAgICAqCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY291bnQoKQogICAgewogICAgICAgIHJldHVybiBjb3VudCgkdGhpcy0+aXRlbXMpOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IGEgYmFzZSBTdXBwb3J0IGNvbGxlY3Rpb24gaW5zdGFuY2UgZnJvbSB0aGlzIGNvbGxlY3Rpb24uCiAgICAgKgogICAgICogQHJldHVybiBcVGlnaHRlbmNvXENvbGxlY3RcU3VwcG9ydFxDb2xsZWN0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0b0Jhc2UoKQogICAgewogICAgICAgIHJldHVybiBuZXcgc2VsZigkdGhpcyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBEZXRlcm1pbmUgaWYgYW4gaXRlbSBleGlzdHMgYXQgYW4gb2Zmc2V0LgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0RXhpc3RzKCRrZXkpCiAgICB7CiAgICAgICAgcmV0dXJuIGFycmF5X2tleV9leGlzdHMoJGtleSwgJHRoaXMtPml0ZW1zKTsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCBhbiBpdGVtIGF0IGEgZ2l2ZW4gb2Zmc2V0LgogICAgICoKICAgICAqIEBwYXJhbSAgbWl4ZWQgICRrZXkKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG9mZnNldEdldCgka2V5KQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+aXRlbXNbJGtleV07CiAgICB9CgogICAgLyoqCiAgICAgKiBTZXQgdGhlIGl0ZW0gYXQgYSBnaXZlbiBvZmZzZXQuCiAgICAgKgogICAgICogQHBhcmFtICBtaXhlZCAgJGtleQogICAgICogQHBhcmFtICBtaXhlZCAgJHZhbHVlCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG9mZnNldFNldCgka2V5LCAkdmFsdWUpCiAgICB7CiAgICAgICAgaWYgKGlzX251bGwoJGtleSkpIHsKICAgICAgICAgICAgJHRoaXMtPml0ZW1zW10gPSAkdmFsdWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHRoaXMtPml0ZW1zWyRrZXldID0gJHZhbHVlOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFVuc2V0IHRoZSBpdGVtIGF0IGEgZ2l2ZW4gb2Zmc2V0LgogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nICAka2V5CiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIG9mZnNldFVuc2V0KCRrZXkpCiAgICB7CiAgICAgICAgdW5zZXQoJHRoaXMtPml0ZW1zWyRrZXldKTsKICAgIH0KCiAgICAvKioKICAgICAqIENvbnZlcnQgdGhlIGNvbGxlY3Rpb24gdG8gaXRzIHN0cmluZyByZXByZXNlbnRhdGlvbi4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT50b0pzb24oKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJlc3VsdHMgYXJyYXkgb2YgaXRlbXMgZnJvbSBDb2xsZWN0aW9uIG9yIEFycmF5YWJsZS4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAkaXRlbXMKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEFycmF5YWJsZUl0ZW1zKCRpdGVtcykKICAgIHsKICAgICAgICBpZiAoaXNfYXJyYXkoJGl0ZW1zKSkgewogICAgICAgICAgICByZXR1cm4gJGl0ZW1zOwogICAgICAgIH0gZWxzZWlmICgkaXRlbXMgaW5zdGFuY2VvZiBzZWxmKSB7CiAgICAgICAgICAgIHJldHVybiAkaXRlbXMtPmFsbCgpOwogICAgICAgIH0gZWxzZWlmICgkaXRlbXMgaW5zdGFuY2VvZiBBcnJheWFibGUpIHsKICAgICAgICAgICAgcmV0dXJuICRpdGVtcy0+dG9BcnJheSgpOwogICAgICAgIH0gZWxzZWlmICgkaXRlbXMgaW5zdGFuY2VvZiBKc29uYWJsZSkgewogICAgICAgICAgICByZXR1cm4ganNvbl9kZWNvZGUoJGl0ZW1zLT50b0pzb24oKSwgdHJ1ZSk7CiAgICAgICAgfSBlbHNlaWYgKCRpdGVtcyBpbnN0YW5jZW9mIEpzb25TZXJpYWxpemFibGUpIHsKICAgICAgICAgICAgcmV0dXJuICRpdGVtcy0+anNvblNlcmlhbGl6ZSgpOwogICAgICAgIH0gZWxzZWlmICgkaXRlbXMgaW5zdGFuY2VvZiBUcmF2ZXJzYWJsZSkgewogICAgICAgICAgICByZXR1cm4gaXRlcmF0b3JfdG9fYXJyYXkoJGl0ZW1zKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAoYXJyYXkpICRpdGVtczsKICAgIH0KCiAgICAvKioKICAgICAqIEFkZCBhIG1ldGhvZCB0byB0aGUgbGlzdCBvZiBwcm94aWVkIG1ldGhvZHMuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgICRtZXRob2QKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHByb3h5KCRtZXRob2QpCiAgICB7CiAgICAgICAgc3RhdGljOjokcHJveGllc1tdID0gJG1ldGhvZDsKICAgIH0KCiAgICAvKioKICAgICAqIER5bmFtaWNhbGx5IGFjY2VzcyBjb2xsZWN0aW9uIHByb3hpZXMuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgICRrZXkKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqCiAgICAgKiBAdGhyb3dzIFxFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fZ2V0KCRrZXkpCiAgICB7CiAgICAgICAgaWYgKCEgaW5fYXJyYXkoJGtleSwgc3RhdGljOjokcHJveGllcykpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiUHJvcGVydHkgW3ska2V5fV0gZG9lcyBub3QgZXhpc3Qgb24gdGhpcyBjb2xsZWN0aW9uIGluc3RhbmNlLiIpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyBIaWdoZXJPcmRlckNvbGxlY3Rpb25Qcm94eSgkdGhpcywgJGtleSk7CiAgICB9Cn0KAppDevTools/query/vendor/tightenco/collect/src/Collect/Support/Debug/Dumper.phpPD9waHAKCm5hbWVzcGFjZSBUaWdodGVuY29cQ29sbGVjdFxTdXBwb3J0XERlYnVnOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxDbG9uZXJcVmFyQ2xvbmVyOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcVmFyRHVtcGVyXER1bXBlclxDbGlEdW1wZXI7CgpjbGFzcyBEdW1wZXIKewogICAgLyoqCiAgICAgKiBEdW1wIGEgdmFsdWUgd2l0aCBlbGVnYW5jZS4KICAgICAqCiAgICAgKiBAcGFyYW0gIG1peGVkICAkdmFsdWUKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZHVtcCgkdmFsdWUpCiAgICB7CiAgICAgICAgaWYgKGNsYXNzX2V4aXN0cyhDbGlEdW1wZXI6OmNsYXNzKSkgewogICAgICAgICAgICAkZHVtcGVyID0gaW5fYXJyYXkoUEhQX1NBUEksIFsnY2xpJywgJ3BocGRiZyddKSA/IG5ldyBDbGlEdW1wZXIgOiBuZXcgSHRtbER1bXBlcjsKCiAgICAgICAgICAgICRkdW1wZXItPmR1bXAoKG5ldyBWYXJDbG9uZXIpLT5jbG9uZVZhcigkdmFsdWUpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB2YXJfZHVtcCgkdmFsdWUpOwogICAgICAgIH0KICAgIH0KfQo=AppDevTools/query/vendor/tightenco/collect/src/Collect/Support/Debug/HtmlDumper.phpPD9waHAKCm5hbWVzcGFjZSBUaWdodGVuY29cQ29sbGVjdFxTdXBwb3J0XERlYnVnOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFZhckR1bXBlclxEdW1wZXJcSHRtbER1bXBlciBhcyBTeW1mb255SHRtbER1bXBlcjsKCmNsYXNzIEh0bWxEdW1wZXIgZXh0ZW5kcyBTeW1mb255SHRtbER1bXBlcgp7CiAgICAvKioKICAgICAqIENvbG91ciBkZWZpbml0aW9ucyBmb3Igb3V0cHV0LgogICAgICoKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHJvdGVjdGVkICRzdHlsZXMgPSBbCiAgICAgICAgJ2RlZmF1bHQnID0+ICdiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7IGNvbG9yOiMyMjI7IGxpbmUtaGVpZ2h0OjEuMmVtOyBmb250LXdlaWdodDpub3JtYWw7IGZvbnQ6MTJweCBNb25hY28sIENvbnNvbGFzLCBtb25vc3BhY2U7IHdvcmQtd3JhcDogYnJlYWstd29yZDsgd2hpdGUtc3BhY2U6IHByZS13cmFwOyBwb3NpdGlvbjpyZWxhdGl2ZTsgei1pbmRleDoxMDAwMDAnLAogICAgICAgICdudW0nID0+ICdjb2xvcjojYTcxZDVkJywKICAgICAgICAnY29uc3QnID0+ICdjb2xvcjojNzk1ZGEzJywKICAgICAgICAnc3RyJyA9PiAnY29sb3I6I2RmNTAwMCcsCiAgICAgICAgJ2NjaHInID0+ICdjb2xvcjojMjIyJywKICAgICAgICAnbm90ZScgPT4gJ2NvbG9yOiNhNzFkNWQnLAogICAgICAgICdyZWYnID0+ICdjb2xvcjojYTBhMGEwJywKICAgICAgICAncHVibGljJyA9PiAnY29sb3I6Izc5NWRhMycsCiAgICAgICAgJ3Byb3RlY3RlZCcgPT4gJ2NvbG9yOiM3OTVkYTMnLAogICAgICAgICdwcml2YXRlJyA9PiAnY29sb3I6Izc5NWRhMycsCiAgICAgICAgJ21ldGEnID0+ICdjb2xvcjojYjcyOWQ5JywKICAgICAgICAna2V5JyA9PiAnY29sb3I6I2RmNTAwMCcsCiAgICAgICAgJ2luZGV4JyA9PiAnY29sb3I6I2E3MWQ1ZCcsCiAgICBdOwp9Cg==AppDevTools/query/vendor/tightenco/collect/src/Collect/Support/HigherOrderCollectionProxy.phpPD9waHAKCm5hbWVzcGFjZSBUaWdodGVuY29cQ29sbGVjdFxTdXBwb3J0OwoKLyoqCiAqIEBtaXhpbiBcVGlnaHRlbmNvXENvbGxlY3RcU3VwcG9ydFxDb2xsZWN0aW9uCiAqLwpjbGFzcyBIaWdoZXJPcmRlckNvbGxlY3Rpb25Qcm94eQp7CiAgICAvKioKICAgICAqIFRoZSBjb2xsZWN0aW9uIGJlaW5nIG9wZXJhdGVkIG9uLgogICAgICoKICAgICAqIEB2YXIgXFRpZ2h0ZW5jb1xDb2xsZWN0XFN1cHBvcnRcQ29sbGVjdGlvbgogICAgICovCiAgICBwcm90ZWN0ZWQgJGNvbGxlY3Rpb247CgogICAgLyoqCiAgICAgKiBUaGUgbWV0aG9kIGJlaW5nIHByb3hpZWQuCiAgICAgKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJvdGVjdGVkICRtZXRob2Q7CgogICAgLyoqCiAgICAgKiBDcmVhdGUgYSBuZXcgcHJveHkgaW5zdGFuY2UuCiAgICAgKgogICAgICogQHBhcmFtICBcVGlnaHRlbmNvXENvbGxlY3RcU3VwcG9ydFxDb2xsZWN0aW9uICAkY29sbGVjdGlvbgogICAgICogQHBhcmFtICBzdHJpbmcgICRtZXRob2QKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoQ29sbGVjdGlvbiAkY29sbGVjdGlvbiwgJG1ldGhvZCkKICAgIHsKICAgICAgICAkdGhpcy0+bWV0aG9kID0gJG1ldGhvZDsKICAgICAgICAkdGhpcy0+Y29sbGVjdGlvbiA9ICRjb2xsZWN0aW9uOwogICAgfQoKICAgIC8qKgogICAgICogUHJveHkgYWNjZXNzaW5nIGFuIGF0dHJpYnV0ZSBvbnRvIHRoZSBjb2xsZWN0aW9uIGl0ZW1zLgogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nICAka2V5CiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2dldCgka2V5KQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y29sbGVjdGlvbi0+eyR0aGlzLT5tZXRob2R9KGZ1bmN0aW9uICgkdmFsdWUpIHVzZSAoJGtleSkgewogICAgICAgICAgICByZXR1cm4gaXNfYXJyYXkoJHZhbHVlKSA/ICR2YWx1ZVska2V5XSA6ICR2YWx1ZS0+eyRrZXl9OwogICAgICAgIH0pOwogICAgfQoKICAgIC8qKgogICAgICogUHJveHkgYSBtZXRob2QgY2FsbCBvbnRvIHRoZSBjb2xsZWN0aW9uIGl0ZW1zLgogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkbWV0aG9kCiAgICAgKiBAcGFyYW0gIGFycmF5ICAkcGFyYW1ldGVycwogICAgICogQHJldHVybiBtaXhlZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jYWxsKCRtZXRob2QsICRwYXJhbWV0ZXJzKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y29sbGVjdGlvbi0+eyR0aGlzLT5tZXRob2R9KGZ1bmN0aW9uICgkdmFsdWUpIHVzZSAoJG1ldGhvZCwgJHBhcmFtZXRlcnMpIHsKICAgICAgICAgICAgcmV0dXJuICR2YWx1ZS0+eyRtZXRob2R9KC4uLiRwYXJhbWV0ZXJzKTsKICAgICAgICB9KTsKICAgIH0KfQo=AppDevTools/query/vendor/tightenco/collect/src/Collect/Support/HtmlString.phpPD9waHAKCm5hbWVzcGFjZSBUaWdodGVuY29cQ29sbGVjdFxTdXBwb3J0OwoKdXNlIFRpZ2h0ZW5jb1xDb2xsZWN0XENvbnRyYWN0c1xTdXBwb3J0XEh0bWxhYmxlOwoKY2xhc3MgSHRtbFN0cmluZyBpbXBsZW1lbnRzIEh0bWxhYmxlCnsKICAgIC8qKgogICAgICogVGhlIEhUTUwgc3RyaW5nLgogICAgICoKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCAkaHRtbDsKCiAgICAvKioKICAgICAqIENyZWF0ZSBhIG5ldyBIVE1MIHN0cmluZyBpbnN0YW5jZS4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAgJGh0bWwKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGh0bWwpCiAgICB7CiAgICAgICAgJHRoaXMtPmh0bWwgPSAkaHRtbDsKICAgIH0KCiAgICAvKioKICAgICAqIEdldCB0aGUgSFRNTCBzdHJpbmcuCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRvSHRtbCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5odG1sOwogICAgfQoKICAgIC8qKgogICAgICogR2V0IHRoZSBIVE1MIHN0cmluZy4KICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT50b0h0bWwoKTsKICAgIH0KfQo=AppDevTools/query/vendor/tightenco/collect/src/Collect/Support/Traits/Macroable.phpPD9waHAKCm5hbWVzcGFjZSBUaWdodGVuY29cQ29sbGVjdFxTdXBwb3J0XFRyYWl0czsKCnVzZSBDbG9zdXJlOwp1c2UgUmVmbGVjdGlvbkNsYXNzOwp1c2UgUmVmbGVjdGlvbk1ldGhvZDsKdXNlIEJhZE1ldGhvZENhbGxFeGNlcHRpb247Cgp0cmFpdCBNYWNyb2FibGUKewogICAgLyoqCiAgICAgKiBUaGUgcmVnaXN0ZXJlZCBzdHJpbmcgbWFjcm9zLgogICAgICoKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHJvdGVjdGVkIHN0YXRpYyAkbWFjcm9zID0gW107CgogICAgLyoqCiAgICAgKiBSZWdpc3RlciBhIGN1c3RvbSBtYWNyby4KICAgICAqCiAgICAgKiBAcGFyYW0gIHN0cmluZyAkbmFtZQogICAgICogQHBhcmFtICBvYmplY3R8Y2FsbGFibGUgICRtYWNybwogICAgICoKICAgICAqIEByZXR1cm4gdm9pZAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG1hY3JvKCRuYW1lLCAkbWFjcm8pCiAgICB7CiAgICAgICAgc3RhdGljOjokbWFjcm9zWyRuYW1lXSA9ICRtYWNybzsKICAgIH0KCiAgICAvKioKICAgICAqIE1peCBhbm90aGVyIG9iamVjdCBpbnRvIHRoZSBjbGFzcy4KICAgICAqCiAgICAgKiBAcGFyYW0gIG9iamVjdCAgJG1peGluCiAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAqIEB0aHJvd3MgXFJlZmxlY3Rpb25FeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBtaXhpbigkbWl4aW4pCiAgICB7CiAgICAgICAgJG1ldGhvZHMgPSAobmV3IFJlZmxlY3Rpb25DbGFzcygkbWl4aW4pKS0+Z2V0TWV0aG9kcygKICAgICAgICAgICAgUmVmbGVjdGlvbk1ldGhvZDo6SVNfUFVCTElDIHwgUmVmbGVjdGlvbk1ldGhvZDo6SVNfUFJPVEVDVEVECiAgICAgICAgKTsKCiAgICAgICAgZm9yZWFjaCAoJG1ldGhvZHMgYXMgJG1ldGhvZCkgewogICAgICAgICAgICAkbWV0aG9kLT5zZXRBY2Nlc3NpYmxlKHRydWUpOwoKICAgICAgICAgICAgc3RhdGljOjptYWNybygkbWV0aG9kLT5uYW1lLCAkbWV0aG9kLT5pbnZva2UoJG1peGluKSk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQ2hlY2tzIGlmIG1hY3JvIGlzIHJlZ2lzdGVyZWQuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgICRuYW1lCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBoYXNNYWNybygkbmFtZSkKICAgIHsKICAgICAgICByZXR1cm4gaXNzZXQoc3RhdGljOjokbWFjcm9zWyRuYW1lXSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBEeW5hbWljYWxseSBoYW5kbGUgY2FsbHMgdG8gdGhlIGNsYXNzLgogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkbWV0aG9kCiAgICAgKiBAcGFyYW0gIGFycmF5ICAgJHBhcmFtZXRlcnMKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqCiAgICAgKiBAdGhyb3dzIFxCYWRNZXRob2RDYWxsRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gX19jYWxsU3RhdGljKCRtZXRob2QsICRwYXJhbWV0ZXJzKQogICAgewogICAgICAgIGlmICghIHN0YXRpYzo6aGFzTWFjcm8oJG1ldGhvZCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEJhZE1ldGhvZENhbGxFeGNlcHRpb24oc3ByaW50ZigKICAgICAgICAgICAgICAgICdNZXRob2QgJXM6OiVzIGRvZXMgbm90IGV4aXN0LicsIHN0YXRpYzo6Y2xhc3MsICRtZXRob2QKICAgICAgICAgICAgKSk7CiAgICAgICAgfQoKICAgICAgICBpZiAoc3RhdGljOjokbWFjcm9zWyRtZXRob2RdIGluc3RhbmNlb2YgQ2xvc3VyZSkgewogICAgICAgICAgICByZXR1cm4gY2FsbF91c2VyX2Z1bmNfYXJyYXkoQ2xvc3VyZTo6YmluZChzdGF0aWM6OiRtYWNyb3NbJG1ldGhvZF0sIG51bGwsIHN0YXRpYzo6Y2xhc3MpLCAkcGFyYW1ldGVycyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gY2FsbF91c2VyX2Z1bmNfYXJyYXkoc3RhdGljOjokbWFjcm9zWyRtZXRob2RdLCAkcGFyYW1ldGVycyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBEeW5hbWljYWxseSBoYW5kbGUgY2FsbHMgdG8gdGhlIGNsYXNzLgogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nICAkbWV0aG9kCiAgICAgKiBAcGFyYW0gIGFycmF5ICAgJHBhcmFtZXRlcnMKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqCiAgICAgKiBAdGhyb3dzIFxCYWRNZXRob2RDYWxsRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NhbGwoJG1ldGhvZCwgJHBhcmFtZXRlcnMpCiAgICB7CiAgICAgICAgaWYgKCEgc3RhdGljOjpoYXNNYWNybygkbWV0aG9kKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbihzcHJpbnRmKAogICAgICAgICAgICAgICAgJ01ldGhvZCAlczo6JXMgZG9lcyBub3QgZXhpc3QuJywgc3RhdGljOjpjbGFzcywgJG1ldGhvZAogICAgICAgICAgICApKTsKICAgICAgICB9CgogICAgICAgICRtYWNybyA9IHN0YXRpYzo6JG1hY3Jvc1skbWV0aG9kXTsKCiAgICAgICAgaWYgKCRtYWNybyBpbnN0YW5jZW9mIENsb3N1cmUpIHsKICAgICAgICAgICAgcmV0dXJuIGNhbGxfdXNlcl9mdW5jX2FycmF5KCRtYWNyby0+YmluZFRvKCR0aGlzLCBzdGF0aWM6OmNsYXNzKSwgJHBhcmFtZXRlcnMpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGNhbGxfdXNlcl9mdW5jX2FycmF5KCRtYWNybywgJHBhcmFtZXRlcnMpOwogICAgfQp9Cg==AppDevTools/query/vendor/tightenco/collect/src/Collect/Support/alias.phpPD9waHAKCiRhbGlhc2VzID0gWwogICAgVGlnaHRlbmNvXENvbGxlY3RcQ29udHJhY3RzXFN1cHBvcnRcQXJyYXlhYmxlOjpjbGFzcyA9PiBJbGx1bWluYXRlXENvbnRyYWN0c1xTdXBwb3J0XEFycmF5YWJsZTo6Y2xhc3MsCiAgICBUaWdodGVuY29cQ29sbGVjdFxDb250cmFjdHNcU3VwcG9ydFxKc29uYWJsZTo6Y2xhc3MgPT4gSWxsdW1pbmF0ZVxDb250cmFjdHNcU3VwcG9ydFxKc29uYWJsZTo6Y2xhc3MsCiAgICBUaWdodGVuY29cQ29sbGVjdFxDb250cmFjdHNcU3VwcG9ydFxIdG1sYWJsZTo6Y2xhc3MgPT4gSWxsdW1pbmF0ZVxDb250cmFjdHNcU3VwcG9ydFxIdG1sYWJsZTo6Y2xhc3MsCiAgICBUaWdodGVuY29cQ29sbGVjdFxTdXBwb3J0XENvbGxlY3Rpb246OmNsYXNzID0+IElsbHVtaW5hdGVcU3VwcG9ydFxDb2xsZWN0aW9uOjpjbGFzcywKICAgIFRpZ2h0ZW5jb1xDb2xsZWN0XFN1cHBvcnRcQXJyOjpjbGFzcyA9PiBJbGx1bWluYXRlXFN1cHBvcnRcQXJyOjpjbGFzcywKICAgIFRpZ2h0ZW5jb1xDb2xsZWN0XFN1cHBvcnRcSGlnaGVyT3JkZXJDb2xsZWN0aW9uUHJveHk6OmNsYXNzID0+IElsbHVtaW5hdGVcU3VwcG9ydFxIaWdoZXJPcmRlckNvbGxlY3Rpb25Qcm94eTo6Y2xhc3MsCiAgICBUaWdodGVuY29cQ29sbGVjdFxTdXBwb3J0XEh0bWxTdHJpbmc6OmNsYXNzID0+IElsbHVtaW5hdGVcU3VwcG9ydFxIdG1sU3RyaW5nOjpjbGFzcywKICAgIFRpZ2h0ZW5jb1xDb2xsZWN0XFN1cHBvcnRcRGVidWdcRHVtcGVyOjpjbGFzcyA9PiBJbGx1bWluYXRlXFN1cHBvcnRcRGVidWdcRHVtcGVyOjpjbGFzcywKICAgIFRpZ2h0ZW5jb1xDb2xsZWN0XFN1cHBvcnRcRGVidWdcSHRtbER1bXBlcjo6Y2xhc3MgPT4gSWxsdW1pbmF0ZVxTdXBwb3J0XERlYnVnXEh0bWxEdW1wZXI6OmNsYXNzLAogICAgVGlnaHRlbmNvXENvbGxlY3RcU3VwcG9ydFxUcmFpdHNcTWFjcm9hYmxlOjpjbGFzcyA9PiBJbGx1bWluYXRlXFN1cHBvcnRcVHJhaXRzXE1hY3JvYWJsZTo6Y2xhc3MsCl07Cgpmb3JlYWNoICgkYWxpYXNlcyBhcyAkdGlnaHRlbiA9PiAkaWxsdW1pbmF0ZSkgewogICAgaWYgKCEgY2xhc3NfZXhpc3RzKCRpbGx1bWluYXRlKSAmJiAhIGludGVyZmFjZV9leGlzdHMoJGlsbHVtaW5hdGUpICYmICEgdHJhaXRfZXhpc3RzKCRpbGx1bWluYXRlKSkgewogICAgICAgIGNsYXNzX2FsaWFzKCR0aWdodGVuLCAkaWxsdW1pbmF0ZSk7CiAgICB9Cn0KAppDevTools/query/vendor/tightenco/collect/src/Collect/Support/helpers.phpPD9waHAKCnVzZSBUaWdodGVuY29cQ29sbGVjdFxTdXBwb3J0XEFycjsKdXNlIFRpZ2h0ZW5jb1xDb2xsZWN0XFN1cHBvcnRcQ29sbGVjdGlvbjsKdXNlIFRpZ2h0ZW5jb1xDb2xsZWN0XFN1cHBvcnRcRGVidWdcRHVtcGVyOwoKaWYgKCEgY2xhc3NfZXhpc3RzKElsbHVtaW5hdGVcU3VwcG9ydFxDb2xsZWN0aW9uOjpjbGFzcykpIHsKICAgIGlmICghIGZ1bmN0aW9uX2V4aXN0cygnYXJyYXlfd3JhcCcpKSB7CiAgICAgICAgLyoqCiAgICAgICAgICogSWYgdGhlIGdpdmVuIHZhbHVlIGlzIG5vdCBhbiBhcnJheSwgd3JhcCBpdCBpbiBvbmUuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0gIG1peGVkICAkdmFsdWUKICAgICAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gYXJyYXlfd3JhcCgkdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gISBpc19hcnJheSgkdmFsdWUpID8gWyR2YWx1ZV0gOiAkdmFsdWU7CiAgICAgICAgfQogICAgfQoKICAgIGlmICghIGZ1bmN0aW9uX2V4aXN0cygnY29sbGVjdCcpKSB7CiAgICAgICAgLyoqCiAgICAgICAgICogQ3JlYXRlIGEgY29sbGVjdGlvbiBmcm9tIHRoZSBnaXZlbiB2YWx1ZS4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSAgbWl4ZWQgICR2YWx1ZQogICAgICAgICAqIEByZXR1cm4gXFRpZ2h0ZW5jb1xDb2xsZWN0XFN1cHBvcnRcQ29sbGVjdGlvbgogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGNvbGxlY3QoJHZhbHVlID0gbnVsbCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiBuZXcgQ29sbGVjdGlvbigkdmFsdWUpOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoISBmdW5jdGlvbl9leGlzdHMoJ3ZhbHVlJykpIHsKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm4gdGhlIGRlZmF1bHQgdmFsdWUgb2YgdGhlIGdpdmVuIHZhbHVlLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtICBtaXhlZCAgJHZhbHVlCiAgICAgICAgICogQHJldHVybiBtaXhlZAogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHZhbHVlKCR2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAkdmFsdWUgaW5zdGFuY2VvZiBDbG9zdXJlID8gJHZhbHVlKCkgOiAkdmFsdWU7CiAgICAgICAgfQogICAgfQoKICAgIGlmICghIGZ1bmN0aW9uX2V4aXN0cygnZGF0YV9nZXQnKSkgewogICAgICAgIC8qKgogICAgICAgICAqIEdldCBhbiBpdGVtIGZyb20gYW4gYXJyYXkgb3Igb2JqZWN0IHVzaW5nICJkb3QiIG5vdGF0aW9uLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtICBtaXhlZCAgICR0YXJnZXQKICAgICAgICAgKiBAcGFyYW0gIHN0cmluZ3xhcnJheSAgJGtleQogICAgICAgICAqIEBwYXJhbSAgbWl4ZWQgICAkZGVmYXVsdAogICAgICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBkYXRhX2dldCgkdGFyZ2V0LCAka2V5LCAkZGVmYXVsdCA9IG51bGwpCiAgICAgICAgewogICAgICAgICAgICBpZiAoaXNfbnVsbCgka2V5KSkgewogICAgICAgICAgICAgICAgcmV0dXJuICR0YXJnZXQ7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRrZXkgPSBpc19hcnJheSgka2V5KSA/ICRrZXkgOiBleHBsb2RlKCcuJywgJGtleSk7CgogICAgICAgICAgICB3aGlsZSAoKCRzZWdtZW50ID0gYXJyYXlfc2hpZnQoJGtleSkpICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICBpZiAoJHNlZ21lbnQgPT09ICcqJykgewogICAgICAgICAgICAgICAgICAgIGlmICgkdGFyZ2V0IGluc3RhbmNlb2YgQ29sbGVjdGlvbikgewogICAgICAgICAgICAgICAgICAgICAgICAkdGFyZ2V0ID0gJHRhcmdldC0+YWxsKCk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKCEgaXNfYXJyYXkoJHRhcmdldCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlKCRkZWZhdWx0KTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICRyZXN1bHQgPSBBcnI6OnBsdWNrKCR0YXJnZXQsICRrZXkpOwoKICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5fYXJyYXkoJyonLCAka2V5KSA/IEFycjo6Y29sbGFwc2UoJHJlc3VsdCkgOiAkcmVzdWx0OwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIChBcnI6OmFjY2Vzc2libGUoJHRhcmdldCkgJiYgQXJyOjpleGlzdHMoJHRhcmdldCwgJHNlZ21lbnQpKSB7CiAgICAgICAgICAgICAgICAgICAgJHRhcmdldCA9ICR0YXJnZXRbJHNlZ21lbnRdOwogICAgICAgICAgICAgICAgfSBlbHNlaWYgKGlzX29iamVjdCgkdGFyZ2V0KSAmJiBpc3NldCgkdGFyZ2V0LT57JHNlZ21lbnR9KSkgewogICAgICAgICAgICAgICAgICAgICR0YXJnZXQgPSAkdGFyZ2V0LT57JHNlZ21lbnR9OwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUoJGRlZmF1bHQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gJHRhcmdldDsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCEgZnVuY3Rpb25fZXhpc3RzKCd3aXRoJykpIHsKICAgICAgICAvKioKICAgICAgICAgKiBSZXR1cm4gdGhlIGdpdmVuIG9iamVjdC4gVXNlZnVsIGZvciBjaGFpbmluZy4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSAgbWl4ZWQgICRvYmplY3QKICAgICAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gd2l0aCgkb2JqZWN0KQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuICRvYmplY3Q7CiAgICAgICAgfQogICAgfQoKICAgIGlmICghIGZ1bmN0aW9uX2V4aXN0cygnZGQnKSkgewogICAgICAgIC8qKgogICAgICAgICAqIER1bXAgdGhlIHBhc3NlZCB2YXJpYWJsZXMgYW5kIGVuZCB0aGUgc2NyaXB0LgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtICBtaXhlZAogICAgICAgICAqIEByZXR1cm4gdm9pZAogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIGRkKC4uLiRhcmdzKQogICAgICAgIHsKICAgICAgICAgICAgZm9yZWFjaCAoJGFyZ3MgYXMgJHgpIHsKICAgICAgICAgICAgICAgIChuZXcgRHVtcGVyKS0+ZHVtcCgkeCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZGllKDEpOwogICAgICAgIH0KICAgIH0KfQo=AppDevTools/query/vendor/tightenco/collect/stubs/src/Collect/Support/alias.phpPD9waHAKCiRhbGlhc2VzID0gWy8qLS0tIEFMSUFTRVMgLS0tKi9dOwoKZm9yZWFjaCAoJGFsaWFzZXMgYXMgJHRpZ2h0ZW4gPT4gJGlsbHVtaW5hdGUpIHsKICAgIGlmICghIGNsYXNzX2V4aXN0cygkaWxsdW1pbmF0ZSkgJiYgISBpbnRlcmZhY2VfZXhpc3RzKCRpbGx1bWluYXRlKSAmJiAhIHRyYWl0X2V4aXN0cygkaWxsdW1pbmF0ZSkpIHsKICAgICAgICBjbGFzc19hbGlhcygkdGlnaHRlbiwgJGlsbHVtaW5hdGUpOwogICAgfQp9Cg==AppDevTools/query/vendor/tightenco/collect/stubs/src/Collect/Support/helpers.phpPD9waHAKCnVzZSBJbGx1bWluYXRlXFN1cHBvcnRcQXJyOwp1c2UgSWxsdW1pbmF0ZVxTdXBwb3J0XENvbGxlY3Rpb247CnVzZSBJbGx1bWluYXRlXFN1cHBvcnRcRGVidWdcRHVtcGVyOwoKaWYgKCEgY2xhc3NfZXhpc3RzKC8qLS0tIE9MRE5BTUVTUEFDRSAtLS0qL1xTdXBwb3J0XENvbGxlY3Rpb246OmNsYXNzKSkgewogICAgaWYgKCEgZnVuY3Rpb25fZXhpc3RzKCdhcnJheV93cmFwJykpIHsKICAgICAgICAvKioKICAgICAgICAgKiBJZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgbm90IGFuIGFycmF5LCB3cmFwIGl0IGluIG9uZS4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSAgbWl4ZWQgICR2YWx1ZQogICAgICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBhcnJheV93cmFwKCR2YWx1ZSkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAhIGlzX2FycmF5KCR2YWx1ZSkgPyBbJHZhbHVlXSA6ICR2YWx1ZTsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCEgZnVuY3Rpb25fZXhpc3RzKCdjb2xsZWN0JykpIHsKICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGUgYSBjb2xsZWN0aW9uIGZyb20gdGhlIGdpdmVuIHZhbHVlLgogICAgICAgICAqCiAgICAgICAgICogQHBhcmFtICBtaXhlZCAgJHZhbHVlCiAgICAgICAgICogQHJldHVybiBcSWxsdW1pbmF0ZVxTdXBwb3J0XENvbGxlY3Rpb24KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBjb2xsZWN0KCR2YWx1ZSA9IG51bGwpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gbmV3IENvbGxlY3Rpb24oJHZhbHVlKTsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCEgZnVuY3Rpb25fZXhpc3RzKCd2YWx1ZScpKSB7CiAgICAgICAgLyoqCiAgICAgICAgICogUmV0dXJuIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBnaXZlbiB2YWx1ZS4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSAgbWl4ZWQgICR2YWx1ZQogICAgICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiB2YWx1ZSgkdmFsdWUpCiAgICAgICAgewogICAgICAgICAgICByZXR1cm4gJHZhbHVlIGluc3RhbmNlb2YgQ2xvc3VyZSA/ICR2YWx1ZSgpIDogJHZhbHVlOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoISBmdW5jdGlvbl9leGlzdHMoJ2RhdGFfZ2V0JykpIHsKICAgICAgICAvKioKICAgICAgICAgKiBHZXQgYW4gaXRlbSBmcm9tIGFuIGFycmF5IG9yIG9iamVjdCB1c2luZyAiZG90IiBub3RhdGlvbi4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSAgbWl4ZWQgICAkdGFyZ2V0CiAgICAgICAgICogQHBhcmFtICBzdHJpbmd8YXJyYXkgICRrZXkKICAgICAgICAgKiBAcGFyYW0gIG1peGVkICAgJGRlZmF1bHQKICAgICAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gZGF0YV9nZXQoJHRhcmdldCwgJGtleSwgJGRlZmF1bHQgPSBudWxsKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKGlzX251bGwoJGtleSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiAkdGFyZ2V0OwogICAgICAgICAgICB9CgogICAgICAgICAgICAka2V5ID0gaXNfYXJyYXkoJGtleSkgPyAka2V5IDogZXhwbG9kZSgnLicsICRrZXkpOwoKICAgICAgICAgICAgd2hpbGUgKCgkc2VnbWVudCA9IGFycmF5X3NoaWZ0KCRrZXkpKSAhPT0gbnVsbCkgewogICAgICAgICAgICAgICAgaWYgKCRzZWdtZW50ID09PSAnKicpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoJHRhcmdldCBpbnN0YW5jZW9mIENvbGxlY3Rpb24pIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHRhcmdldCA9ICR0YXJnZXQtPmFsbCgpOwogICAgICAgICAgICAgICAgICAgIH0gZWxzZWlmICghIGlzX2FycmF5KCR0YXJnZXQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSgkZGVmYXVsdCk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAkcmVzdWx0ID0gQXJyOjpwbHVjaygkdGFyZ2V0LCAka2V5KTsKCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluX2FycmF5KCcqJywgJGtleSkgPyBBcnI6OmNvbGxhcHNlKCRyZXN1bHQpIDogJHJlc3VsdDsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoQXJyOjphY2Nlc3NpYmxlKCR0YXJnZXQpICYmIEFycjo6ZXhpc3RzKCR0YXJnZXQsICRzZWdtZW50KSkgewogICAgICAgICAgICAgICAgICAgICR0YXJnZXQgPSAkdGFyZ2V0WyRzZWdtZW50XTsKICAgICAgICAgICAgICAgIH0gZWxzZWlmIChpc19vYmplY3QoJHRhcmdldCkgJiYgaXNzZXQoJHRhcmdldC0+eyRzZWdtZW50fSkpIHsKICAgICAgICAgICAgICAgICAgICAkdGFyZ2V0ID0gJHRhcmdldC0+eyRzZWdtZW50fTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlKCRkZWZhdWx0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuICR0YXJnZXQ7CiAgICAgICAgfQogICAgfQoKICAgIGlmICghIGZ1bmN0aW9uX2V4aXN0cygnd2l0aCcpKSB7CiAgICAgICAgLyoqCiAgICAgICAgICogUmV0dXJuIHRoZSBnaXZlbiBvYmplY3QuIFVzZWZ1bCBmb3IgY2hhaW5pbmcuCiAgICAgICAgICoKICAgICAgICAgKiBAcGFyYW0gIG1peGVkICAkb2JqZWN0CiAgICAgICAgICogQHJldHVybiBtaXhlZAogICAgICAgICAqLwogICAgICAgIGZ1bmN0aW9uIHdpdGgoJG9iamVjdCkKICAgICAgICB7CiAgICAgICAgICAgIHJldHVybiAkb2JqZWN0OwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoISBmdW5jdGlvbl9leGlzdHMoJ2RkJykpIHsKICAgICAgICAvKioKICAgICAgICAgKiBEdW1wIHRoZSBwYXNzZWQgdmFyaWFibGVzIGFuZCBlbmQgdGhlIHNjcmlwdC4KICAgICAgICAgKgogICAgICAgICAqIEBwYXJhbSAgbWl4ZWQKICAgICAgICAgKiBAcmV0dXJuIHZvaWQKICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBkZCguLi4kYXJncykKICAgICAgICB7CiAgICAgICAgICAgIGZvcmVhY2ggKCRhcmdzIGFzICR4KSB7CiAgICAgICAgICAgICAgICAobmV3IER1bXBlciktPmR1bXAoJHgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGRpZSgxKTsKICAgICAgICB9CiAgICB9Cn0KAppDevTools/query/vendor/tightenco/collect/stubs/tests/bootstrap.phpPD9waHAKCnJlcXVpcmUgX19ESVJfXy4nLy4uL3ZlbmRvci9hdXRvbG9hZC5waHAnOwoKZGF0ZV9kZWZhdWx0X3RpbWV6b25lX3NldCgnVVRDJyk7Cg==AppDevTools/query/vendor/tightenco/collect/tests/Support/SupportArrTest.phpPD9waHAKCm5hbWVzcGFjZSBUaWdodGVuY29cQ29sbGVjdFxUZXN0c1xTdXBwb3J0OwoKdXNlIHN0ZENsYXNzOwp1c2UgQXJyYXlPYmplY3Q7CnVzZSBUaWdodGVuY29cQ29sbGVjdFxTdXBwb3J0XEFycjsKdXNlIFRpZ2h0ZW5jb1xDb2xsZWN0XFN1cHBvcnRcQ2FyYm9uOwp1c2UgUEhQVW5pdFxGcmFtZXdvcmtcVGVzdENhc2U7CnVzZSBUaWdodGVuY29cQ29sbGVjdFxTdXBwb3J0XENvbGxlY3Rpb247CgpjbGFzcyBTdXBwb3J0QXJyVGVzdCBleHRlbmRzIFRlc3RDYXNlCnsKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0QWNjZXNzaWJsZSgpCiAgICB7CiAgICAgICAgJHRoaXMtPmFzc2VydFRydWUoQXJyOjphY2Nlc3NpYmxlKFtdKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydFRydWUoQXJyOjphY2Nlc3NpYmxlKFsxLCAyXSkpOwogICAgICAgICR0aGlzLT5hc3NlcnRUcnVlKEFycjo6YWNjZXNzaWJsZShbJ2EnID0+IDEsICdiJyA9PiAyXSkpOwogICAgICAgICR0aGlzLT5hc3NlcnRUcnVlKEFycjo6YWNjZXNzaWJsZShuZXcgQ29sbGVjdGlvbikpOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0RmFsc2UoQXJyOjphY2Nlc3NpYmxlKG51bGwpKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RmFsc2UoQXJyOjphY2Nlc3NpYmxlKCdhYmMnKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEZhbHNlKEFycjo6YWNjZXNzaWJsZShuZXcgc3RkQ2xhc3MpKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RmFsc2UoQXJyOjphY2Nlc3NpYmxlKChvYmplY3QpIFsnYScgPT4gMSwgJ2InID0+IDJdKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RBZGQoKQogICAgewogICAgICAgICRhcnJheSA9IEFycjo6YWRkKFsnbmFtZScgPT4gJ0Rlc2snXSwgJ3ByaWNlJywgMTAwKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsnbmFtZScgPT4gJ0Rlc2snLCAncHJpY2UnID0+IDEwMF0sICRhcnJheSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RDb2xsYXBzZSgpCiAgICB7CiAgICAgICAgJGRhdGEgPSBbWydmb28nLCAnYmFyJ10sIFsnYmF6J11dOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWydmb28nLCAnYmFyJywgJ2JheiddLCBBcnI6OmNvbGxhcHNlKCRkYXRhKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RDcm9zc0pvaW4oKQogICAgewogICAgICAgIC8vIFNpbmdsZSBkaW1lbnNpb24KICAgICAgICAkdGhpcy0+YXNzZXJ0U2FtZSgKICAgICAgICAgICAgW1sxLCAnYSddLCBbMSwgJ2InXSwgWzEsICdjJ11dLAogICAgICAgICAgICBBcnI6OmNyb3NzSm9pbihbMV0sIFsnYScsICdiJywgJ2MnXSkKICAgICAgICApOwoKICAgICAgICAvLyBTcXVhcmUgbWF0cml4CiAgICAgICAgJHRoaXMtPmFzc2VydFNhbWUoCiAgICAgICAgICAgIFtbMSwgJ2EnXSwgWzEsICdiJ10sIFsyLCAnYSddLCBbMiwgJ2InXV0sCiAgICAgICAgICAgIEFycjo6Y3Jvc3NKb2luKFsxLCAyXSwgWydhJywgJ2InXSkKICAgICAgICApOwoKICAgICAgICAvLyBSZWN0YW5ndWxhciBtYXRyaXgKICAgICAgICAkdGhpcy0+YXNzZXJ0U2FtZSgKICAgICAgICAgICAgW1sxLCAnYSddLCBbMSwgJ2InXSwgWzEsICdjJ10sIFsyLCAnYSddLCBbMiwgJ2InXSwgWzIsICdjJ11dLAogICAgICAgICAgICBBcnI6OmNyb3NzSm9pbihbMSwgMl0sIFsnYScsICdiJywgJ2MnXSkKICAgICAgICApOwoKICAgICAgICAvLyAzRCBtYXRyaXgKICAgICAgICAkdGhpcy0+YXNzZXJ0U2FtZSgKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgWzEsICdhJywgJ0knXSwgWzEsICdhJywgJ0lJJ10sIFsxLCAnYScsICdJSUknXSwKICAgICAgICAgICAgICAgIFsxLCAnYicsICdJJ10sIFsxLCAnYicsICdJSSddLCBbMSwgJ2InLCAnSUlJJ10sCiAgICAgICAgICAgICAgICBbMiwgJ2EnLCAnSSddLCBbMiwgJ2EnLCAnSUknXSwgWzIsICdhJywgJ0lJSSddLAogICAgICAgICAgICAgICAgWzIsICdiJywgJ0knXSwgWzIsICdiJywgJ0lJJ10sIFsyLCAnYicsICdJSUknXSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgQXJyOjpjcm9zc0pvaW4oWzEsIDJdLCBbJ2EnLCAnYiddLCBbJ0knLCAnSUknLCAnSUlJJ10pCiAgICAgICAgKTsKCiAgICAgICAgLy8gV2l0aCAxIGVtcHR5IGRpbWVuc2lvbgogICAgICAgICR0aGlzLT5hc3NlcnRFbXB0eShBcnI6OmNyb3NzSm9pbihbXSwgWydhJywgJ2InXSwgWydJJywgJ0lJJywgJ0lJSSddKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVtcHR5KEFycjo6Y3Jvc3NKb2luKFsxLCAyXSwgW10sIFsnSScsICdJSScsICdJSUknXSkpOwogICAgICAgICR0aGlzLT5hc3NlcnRFbXB0eShBcnI6OmNyb3NzSm9pbihbMSwgMl0sIFsnYScsICdiJ10sIFtdKSk7CgogICAgICAgIC8vIFdpdGggZW1wdHkgYXJyYXlzCiAgICAgICAgJHRoaXMtPmFzc2VydEVtcHR5KEFycjo6Y3Jvc3NKb2luKFtdLCBbXSwgW10pKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RW1wdHkoQXJyOjpjcm9zc0pvaW4oW10sIFtdKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVtcHR5KEFycjo6Y3Jvc3NKb2luKFtdKSk7CgogICAgICAgIC8vIE5vdCByZWFsbHkgYSBwcm9wZXIgdXNhZ2UsIHN0aWxsLCB0ZXN0IGZvciBwcmVzZXJ2aW5nIEJDCiAgICAgICAgJHRoaXMtPmFzc2VydFNhbWUoW1tdXSwgQXJyOjpjcm9zc0pvaW4oKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3REaXZpZGUoKQogICAgewogICAgICAgIGxpc3QoJGtleXMsICR2YWx1ZXMpID0gQXJyOjpkaXZpZGUoWyduYW1lJyA9PiAnRGVzayddKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsnbmFtZSddLCAka2V5cyk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJ0Rlc2snXSwgJHZhbHVlcyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3REb3QoKQogICAgewogICAgICAgICRhcnJheSA9IEFycjo6ZG90KFsnZm9vJyA9PiBbJ2JhcicgPT4gJ2JheiddXSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJ2Zvby5iYXInID0+ICdiYXonXSwgJGFycmF5KTsKCiAgICAgICAgJGFycmF5ID0gQXJyOjpkb3QoW10pOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoW10sICRhcnJheSk7CgogICAgICAgICRhcnJheSA9IEFycjo6ZG90KFsnZm9vJyA9PiBbXV0pOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWydmb28nID0+IFtdXSwgJGFycmF5KTsKCiAgICAgICAgJGFycmF5ID0gQXJyOjpkb3QoWydmb28nID0+IFsnYmFyJyA9PiBbXV1dKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsnZm9vLmJhcicgPT4gW11dLCAkYXJyYXkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0RXhjZXB0KCkKICAgIHsKICAgICAgICAkYXJyYXkgPSBbJ25hbWUnID0+ICdEZXNrJywgJ3ByaWNlJyA9PiAxMDBdOwogICAgICAgICRhcnJheSA9IEFycjo6ZXhjZXB0KCRhcnJheSwgWydwcmljZSddKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsnbmFtZScgPT4gJ0Rlc2snXSwgJGFycmF5KTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdEV4aXN0cygpCiAgICB7CiAgICAgICAgJHRoaXMtPmFzc2VydFRydWUoQXJyOjpleGlzdHMoWzFdLCAwKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydFRydWUoQXJyOjpleGlzdHMoW251bGxdLCAwKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydFRydWUoQXJyOjpleGlzdHMoWydhJyA9PiAxXSwgJ2EnKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydFRydWUoQXJyOjpleGlzdHMoWydhJyA9PiBudWxsXSwgJ2EnKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydFRydWUoQXJyOjpleGlzdHMobmV3IENvbGxlY3Rpb24oWydhJyA9PiBudWxsXSksICdhJykpOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0RmFsc2UoQXJyOjpleGlzdHMoWzFdLCAxKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEZhbHNlKEFycjo6ZXhpc3RzKFtudWxsXSwgMSkpOwogICAgICAgICR0aGlzLT5hc3NlcnRGYWxzZShBcnI6OmV4aXN0cyhbJ2EnID0+IDFdLCAwKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEZhbHNlKEFycjo6ZXhpc3RzKG5ldyBDb2xsZWN0aW9uKFsnYScgPT4gbnVsbF0pLCAnYicpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdEZpcnN0KCkKICAgIHsKICAgICAgICAkYXJyYXkgPSBbMTAwLCAyMDAsIDMwMF07CgogICAgICAgICR2YWx1ZSA9IEFycjo6Zmlyc3QoJGFycmF5LCBmdW5jdGlvbiAoJHZhbHVlKSB7CiAgICAgICAgICAgIHJldHVybiAkdmFsdWUgPj0gMTUwOwogICAgICAgIH0pOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKDIwMCwgJHZhbHVlKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKDEwMCwgQXJyOjpmaXJzdCgkYXJyYXkpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdExhc3QoKQogICAgewogICAgICAgICRhcnJheSA9IFsxMDAsIDIwMCwgMzAwXTsKCiAgICAgICAgJGxhc3QgPSBBcnI6Omxhc3QoJGFycmF5LCBmdW5jdGlvbiAoJHZhbHVlKSB7CiAgICAgICAgICAgIHJldHVybiAkdmFsdWUgPCAyNTA7CiAgICAgICAgfSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscygyMDAsICRsYXN0KTsKCiAgICAgICAgJGxhc3QgPSBBcnI6Omxhc3QoJGFycmF5LCBmdW5jdGlvbiAoJHZhbHVlLCAka2V5KSB7CiAgICAgICAgICAgIHJldHVybiAka2V5IDwgMjsKICAgICAgICB9KTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKDIwMCwgJGxhc3QpOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKDMwMCwgQXJyOjpsYXN0KCRhcnJheSkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0RmxhdHRlbigpCiAgICB7CiAgICAgICAgLy8gRmxhdCBhcnJheXMgYXJlIHVuYWZmZWN0ZWQKICAgICAgICAkYXJyYXkgPSBbJyNmb28nLCAnI2JhcicsICcjYmF6J107CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJyNmb28nLCAnI2JhcicsICcjYmF6J10sIEFycjo6ZmxhdHRlbihbJyNmb28nLCAnI2JhcicsICcjYmF6J10pKTsKCiAgICAgICAgLy8gTmVzdGVkIGFycmF5cyBhcmUgZmxhdHRlbmVkIHdpdGggZXhpc3RpbmcgZmxhdCBpdGVtcwogICAgICAgICRhcnJheSA9IFtbJyNmb28nLCAnI2JhciddLCAnI2JheiddOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWycjZm9vJywgJyNiYXInLCAnI2JheiddLCBBcnI6OmZsYXR0ZW4oJGFycmF5KSk7CgogICAgICAgIC8vIEZsYXR0ZW5lZCBhcnJheSBpbmNsdWRlcyAibnVsbCIgaXRlbXMKICAgICAgICAkYXJyYXkgPSBbWycjZm9vJywgbnVsbF0sICcjYmF6JywgbnVsbF07CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJyNmb28nLCBudWxsLCAnI2JheicsIG51bGxdLCBBcnI6OmZsYXR0ZW4oJGFycmF5KSk7CgogICAgICAgIC8vIFNldHMgb2YgbmVzdGVkIGFycmF5cyBhcmUgZmxhdHRlbmVkCiAgICAgICAgJGFycmF5ID0gW1snI2ZvbycsICcjYmFyJ10sIFsnI2JheiddXTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsnI2ZvbycsICcjYmFyJywgJyNiYXonXSwgQXJyOjpmbGF0dGVuKCRhcnJheSkpOwoKICAgICAgICAvLyBEZWVwbHkgbmVzdGVkIGFycmF5cyBhcmUgZmxhdHRlbmVkCiAgICAgICAgJGFycmF5ID0gW1snI2ZvbycsIFsnI2JhciddXSwgWycjYmF6J11dOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWycjZm9vJywgJyNiYXInLCAnI2JheiddLCBBcnI6OmZsYXR0ZW4oJGFycmF5KSk7CgogICAgICAgIC8vIE5lc3RlZCBhcnJheXMgYXJlIGZsYXR0ZW5lZCBhbG9uZ3NpZGUgYXJyYXlzCiAgICAgICAgJGFycmF5ID0gW25ldyBDb2xsZWN0aW9uKFsnI2ZvbycsICcjYmFyJ10pLCBbJyNiYXonXV07CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJyNmb28nLCAnI2JhcicsICcjYmF6J10sIEFycjo6ZmxhdHRlbigkYXJyYXkpKTsKCiAgICAgICAgLy8gTmVzdGVkIGFycmF5cyBjb250YWluaW5nIHBsYWluIGFycmF5cyBhcmUgZmxhdHRlbmVkCiAgICAgICAgJGFycmF5ID0gW25ldyBDb2xsZWN0aW9uKFsnI2ZvbycsIFsnI2JhciddXSksIFsnI2JheiddXTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsnI2ZvbycsICcjYmFyJywgJyNiYXonXSwgQXJyOjpmbGF0dGVuKCRhcnJheSkpOwoKICAgICAgICAvLyBOZXN0ZWQgYXJyYXlzIGNvbnRhaW5pbmcgYXJyYXlzIGFyZSBmbGF0dGVuZWQKICAgICAgICAkYXJyYXkgPSBbWycjZm9vJywgbmV3IENvbGxlY3Rpb24oWycjYmFyJ10pXSwgWycjYmF6J11dOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWycjZm9vJywgJyNiYXInLCAnI2JheiddLCBBcnI6OmZsYXR0ZW4oJGFycmF5KSk7CgogICAgICAgIC8vIE5lc3RlZCBhcnJheXMgY29udGFpbmluZyBhcnJheXMgY29udGFpbmluZyBhcnJheXMgYXJlIGZsYXR0ZW5lZAogICAgICAgICRhcnJheSA9IFtbJyNmb28nLCBuZXcgQ29sbGVjdGlvbihbJyNiYXInLCBbJyN6YXAnXV0pXSwgWycjYmF6J11dOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWycjZm9vJywgJyNiYXInLCAnI3phcCcsICcjYmF6J10sIEFycjo6ZmxhdHRlbigkYXJyYXkpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdEZsYXR0ZW5XaXRoRGVwdGgoKQogICAgewogICAgICAgIC8vIE5vIGRlcHRoIGZsYXR0ZW5zIHJlY3Vyc2l2ZWx5CiAgICAgICAgJGFycmF5ID0gW1snI2ZvbycsIFsnI2JhcicsIFsnI2JheiddXV0sICcjemFwJ107CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJyNmb28nLCAnI2JhcicsICcjYmF6JywgJyN6YXAnXSwgQXJyOjpmbGF0dGVuKCRhcnJheSkpOwoKICAgICAgICAvLyBTcGVjaWZ5aW5nIGEgZGVwdGggb25seSBmbGF0dGVucyB0byB0aGF0IGRlcHRoCiAgICAgICAgJGFycmF5ID0gW1snI2ZvbycsIFsnI2JhcicsIFsnI2JheiddXV0sICcjemFwJ107CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJyNmb28nLCBbJyNiYXInLCBbJyNiYXonXV0sICcjemFwJ10sIEFycjo6ZmxhdHRlbigkYXJyYXksIDEpKTsKCiAgICAgICAgJGFycmF5ID0gW1snI2ZvbycsIFsnI2JhcicsIFsnI2JheiddXV0sICcjemFwJ107CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJyNmb28nLCAnI2JhcicsIFsnI2JheiddLCAnI3phcCddLCBBcnI6OmZsYXR0ZW4oJGFycmF5LCAyKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RHZXQoKQogICAgewogICAgICAgICRhcnJheSA9IFsncHJvZHVjdHMuZGVzaycgPT4gWydwcmljZScgPT4gMTAwXV07CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJ3ByaWNlJyA9PiAxMDBdLCBBcnI6OmdldCgkYXJyYXksICdwcm9kdWN0cy5kZXNrJykpOwoKICAgICAgICAkYXJyYXkgPSBbJ3Byb2R1Y3RzJyA9PiBbJ2Rlc2snID0+IFsncHJpY2UnID0+IDEwMF1dXTsKICAgICAgICAkdmFsdWUgPSBBcnI6OmdldCgkYXJyYXksICdwcm9kdWN0cy5kZXNrJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJ3ByaWNlJyA9PiAxMDBdLCAkdmFsdWUpOwoKICAgICAgICAvLyBUZXN0IG51bGwgYXJyYXkgdmFsdWVzCiAgICAgICAgJGFycmF5ID0gWydmb28nID0+IG51bGwsICdiYXInID0+IFsnYmF6JyA9PiBudWxsXV07CiAgICAgICAgJHRoaXMtPmFzc2VydE51bGwoQXJyOjpnZXQoJGFycmF5LCAnZm9vJywgJ2RlZmF1bHQnKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydE51bGwoQXJyOjpnZXQoJGFycmF5LCAnYmFyLmJheicsICdkZWZhdWx0JykpOwoKICAgICAgICAvLyBUZXN0IGRpcmVjdCBBcnJheUFjY2VzcyBvYmplY3QKICAgICAgICAkYXJyYXkgPSBbJ3Byb2R1Y3RzJyA9PiBbJ2Rlc2snID0+IFsncHJpY2UnID0+IDEwMF1dXTsKICAgICAgICAkYXJyYXlBY2Nlc3NPYmplY3QgPSBuZXcgQXJyYXlPYmplY3QoJGFycmF5KTsKICAgICAgICAkdmFsdWUgPSBBcnI6OmdldCgkYXJyYXlBY2Nlc3NPYmplY3QsICdwcm9kdWN0cy5kZXNrJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJ3ByaWNlJyA9PiAxMDBdLCAkdmFsdWUpOwoKICAgICAgICAvLyBUZXN0IGFycmF5IGNvbnRhaW5pbmcgQXJyYXlBY2Nlc3Mgb2JqZWN0CiAgICAgICAgJGFycmF5QWNjZXNzQ2hpbGQgPSBuZXcgQXJyYXlPYmplY3QoWydwcm9kdWN0cycgPT4gWydkZXNrJyA9PiBbJ3ByaWNlJyA9PiAxMDBdXV0pOwogICAgICAgICRhcnJheSA9IFsnY2hpbGQnID0+ICRhcnJheUFjY2Vzc0NoaWxkXTsKICAgICAgICAkdmFsdWUgPSBBcnI6OmdldCgkYXJyYXksICdjaGlsZC5wcm9kdWN0cy5kZXNrJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJ3ByaWNlJyA9PiAxMDBdLCAkdmFsdWUpOwoKICAgICAgICAvLyBUZXN0IGFycmF5IGNvbnRhaW5pbmcgbXVsdGlwbGUgbmVzdGVkIEFycmF5QWNjZXNzIG9iamVjdHMKICAgICAgICAkYXJyYXlBY2Nlc3NDaGlsZCA9IG5ldyBBcnJheU9iamVjdChbJ3Byb2R1Y3RzJyA9PiBbJ2Rlc2snID0+IFsncHJpY2UnID0+IDEwMF1dXSk7CiAgICAgICAgJGFycmF5QWNjZXNzUGFyZW50ID0gbmV3IEFycmF5T2JqZWN0KFsnY2hpbGQnID0+ICRhcnJheUFjY2Vzc0NoaWxkXSk7CiAgICAgICAgJGFycmF5ID0gWydwYXJlbnQnID0+ICRhcnJheUFjY2Vzc1BhcmVudF07CiAgICAgICAgJHZhbHVlID0gQXJyOjpnZXQoJGFycmF5LCAncGFyZW50LmNoaWxkLnByb2R1Y3RzLmRlc2snKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsncHJpY2UnID0+IDEwMF0sICR2YWx1ZSk7CgogICAgICAgIC8vIFRlc3QgbWlzc2luZyBBcnJheUFjY2VzcyBvYmplY3QgZmllbGQKICAgICAgICAkYXJyYXlBY2Nlc3NDaGlsZCA9IG5ldyBBcnJheU9iamVjdChbJ3Byb2R1Y3RzJyA9PiBbJ2Rlc2snID0+IFsncHJpY2UnID0+IDEwMF1dXSk7CiAgICAgICAgJGFycmF5QWNjZXNzUGFyZW50ID0gbmV3IEFycmF5T2JqZWN0KFsnY2hpbGQnID0+ICRhcnJheUFjY2Vzc0NoaWxkXSk7CiAgICAgICAgJGFycmF5ID0gWydwYXJlbnQnID0+ICRhcnJheUFjY2Vzc1BhcmVudF07CiAgICAgICAgJHZhbHVlID0gQXJyOjpnZXQoJGFycmF5LCAncGFyZW50LmNoaWxkLmRlc2snKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0TnVsbCgkdmFsdWUpOwoKICAgICAgICAvLyBUZXN0IG1pc3NpbmcgQXJyYXlBY2Nlc3Mgb2JqZWN0IGZpZWxkCiAgICAgICAgJGFycmF5QWNjZXNzT2JqZWN0ID0gbmV3IEFycmF5T2JqZWN0KFsncHJvZHVjdHMnID0+IFsnZGVzaycgPT4gbnVsbF1dKTsKICAgICAgICAkYXJyYXkgPSBbJ3BhcmVudCcgPT4gJGFycmF5QWNjZXNzT2JqZWN0XTsKICAgICAgICAkdmFsdWUgPSBBcnI6OmdldCgkYXJyYXksICdwYXJlbnQucHJvZHVjdHMuZGVzay5wcmljZScpOwogICAgICAgICR0aGlzLT5hc3NlcnROdWxsKCR2YWx1ZSk7CgogICAgICAgIC8vIFRlc3QgbnVsbCBBcnJheUFjY2VzcyBvYmplY3QgZmllbGRzCiAgICAgICAgJGFycmF5ID0gbmV3IEFycmF5T2JqZWN0KFsnZm9vJyA9PiBudWxsLCAnYmFyJyA9PiBuZXcgQXJyYXlPYmplY3QoWydiYXonID0+IG51bGxdKV0pOwogICAgICAgICR0aGlzLT5hc3NlcnROdWxsKEFycjo6Z2V0KCRhcnJheSwgJ2ZvbycsICdkZWZhdWx0JykpOwogICAgICAgICR0aGlzLT5hc3NlcnROdWxsKEFycjo6Z2V0KCRhcnJheSwgJ2Jhci5iYXonLCAnZGVmYXVsdCcpKTsKCiAgICAgICAgLy8gVGVzdCBudWxsIGtleSByZXR1cm5zIHRoZSB3aG9sZSBhcnJheQogICAgICAgICRhcnJheSA9IFsnZm9vJywgJ2JhciddOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoJGFycmF5LCBBcnI6OmdldCgkYXJyYXksIG51bGwpKTsKCiAgICAgICAgLy8gVGVzdCAkYXJyYXkgbm90IGFuIGFycmF5CiAgICAgICAgJHRoaXMtPmFzc2VydFNhbWUoJ2RlZmF1bHQnLCBBcnI6OmdldChudWxsLCAnZm9vJywgJ2RlZmF1bHQnKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydFNhbWUoJ2RlZmF1bHQnLCBBcnI6OmdldChmYWxzZSwgJ2ZvbycsICdkZWZhdWx0JykpOwoKICAgICAgICAvLyBUZXN0ICRhcnJheSBub3QgYW4gYXJyYXkgYW5kIGtleSBpcyBudWxsCiAgICAgICAgJHRoaXMtPmFzc2VydFNhbWUoJ2RlZmF1bHQnLCBBcnI6OmdldChudWxsLCBudWxsLCAnZGVmYXVsdCcpKTsKCiAgICAgICAgLy8gVGVzdCAkYXJyYXkgaXMgZW1wdHkgYW5kIGtleSBpcyBudWxsCiAgICAgICAgJHRoaXMtPmFzc2VydEVtcHR5KEFycjo6Z2V0KFtdLCBudWxsKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVtcHR5KEFycjo6Z2V0KFtdLCBudWxsLCAnZGVmYXVsdCcpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdEhhcygpCiAgICB7CiAgICAgICAgJGFycmF5ID0gWydwcm9kdWN0cy5kZXNrJyA9PiBbJ3ByaWNlJyA9PiAxMDBdXTsKICAgICAgICAkdGhpcy0+YXNzZXJ0VHJ1ZShBcnI6OmhhcygkYXJyYXksICdwcm9kdWN0cy5kZXNrJykpOwoKICAgICAgICAkYXJyYXkgPSBbJ3Byb2R1Y3RzJyA9PiBbJ2Rlc2snID0+IFsncHJpY2UnID0+IDEwMF1dXTsKICAgICAgICAkdGhpcy0+YXNzZXJ0VHJ1ZShBcnI6OmhhcygkYXJyYXksICdwcm9kdWN0cy5kZXNrJykpOwogICAgICAgICR0aGlzLT5hc3NlcnRUcnVlKEFycjo6aGFzKCRhcnJheSwgJ3Byb2R1Y3RzLmRlc2sucHJpY2UnKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEZhbHNlKEFycjo6aGFzKCRhcnJheSwgJ3Byb2R1Y3RzLmZvbycpKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RmFsc2UoQXJyOjpoYXMoJGFycmF5LCAncHJvZHVjdHMuZGVzay5mb28nKSk7CgogICAgICAgICRhcnJheSA9IFsnZm9vJyA9PiBudWxsLCAnYmFyJyA9PiBbJ2JheicgPT4gbnVsbF1dOwogICAgICAgICR0aGlzLT5hc3NlcnRUcnVlKEFycjo6aGFzKCRhcnJheSwgJ2ZvbycpKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0VHJ1ZShBcnI6OmhhcygkYXJyYXksICdiYXIuYmF6JykpOwoKICAgICAgICAkYXJyYXkgPSBuZXcgQXJyYXlPYmplY3QoWydmb28nID0+IDEwLCAnYmFyJyA9PiBuZXcgQXJyYXlPYmplY3QoWydiYXonID0+IDEwXSldKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0VHJ1ZShBcnI6OmhhcygkYXJyYXksICdmb28nKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydFRydWUoQXJyOjpoYXMoJGFycmF5LCAnYmFyJykpOwogICAgICAgICR0aGlzLT5hc3NlcnRUcnVlKEFycjo6aGFzKCRhcnJheSwgJ2Jhci5iYXonKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEZhbHNlKEFycjo6aGFzKCRhcnJheSwgJ3h4eCcpKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RmFsc2UoQXJyOjpoYXMoJGFycmF5LCAneHh4Lnl5eScpKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RmFsc2UoQXJyOjpoYXMoJGFycmF5LCAnZm9vLnh4eCcpKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RmFsc2UoQXJyOjpoYXMoJGFycmF5LCAnYmFyLnh4eCcpKTsKCiAgICAgICAgJGFycmF5ID0gbmV3IEFycmF5T2JqZWN0KFsnZm9vJyA9PiBudWxsLCAnYmFyJyA9PiBuZXcgQXJyYXlPYmplY3QoWydiYXonID0+IG51bGxdKV0pOwogICAgICAgICR0aGlzLT5hc3NlcnRUcnVlKEFycjo6aGFzKCRhcnJheSwgJ2ZvbycpKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0VHJ1ZShBcnI6OmhhcygkYXJyYXksICdiYXIuYmF6JykpOwoKICAgICAgICAkYXJyYXkgPSBbJ2ZvbycsICdiYXInXTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RmFsc2UoQXJyOjpoYXMoJGFycmF5LCBudWxsKSk7CgogICAgICAgICR0aGlzLT5hc3NlcnRGYWxzZShBcnI6OmhhcyhudWxsLCAnZm9vJykpOwogICAgICAgICR0aGlzLT5hc3NlcnRGYWxzZShBcnI6OmhhcyhmYWxzZSwgJ2ZvbycpKTsKCiAgICAgICAgJHRoaXMtPmFzc2VydEZhbHNlKEFycjo6aGFzKG51bGwsIG51bGwpKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RmFsc2UoQXJyOjpoYXMoW10sIG51bGwpKTsKCiAgICAgICAgJGFycmF5ID0gWydwcm9kdWN0cycgPT4gWydkZXNrJyA9PiBbJ3ByaWNlJyA9PiAxMDBdXV07CiAgICAgICAgJHRoaXMtPmFzc2VydFRydWUoQXJyOjpoYXMoJGFycmF5LCBbJ3Byb2R1Y3RzLmRlc2snXSkpOwogICAgICAgICR0aGlzLT5hc3NlcnRUcnVlKEFycjo6aGFzKCRhcnJheSwgWydwcm9kdWN0cy5kZXNrJywgJ3Byb2R1Y3RzLmRlc2sucHJpY2UnXSkpOwogICAgICAgICR0aGlzLT5hc3NlcnRUcnVlKEFycjo6aGFzKCRhcnJheSwgWydwcm9kdWN0cycsICdwcm9kdWN0cyddKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEZhbHNlKEFycjo6aGFzKCRhcnJheSwgWydmb28nXSkpOwogICAgICAgICR0aGlzLT5hc3NlcnRGYWxzZShBcnI6OmhhcygkYXJyYXksIFtdKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEZhbHNlKEFycjo6aGFzKCRhcnJheSwgWydwcm9kdWN0cy5kZXNrJywgJ3Byb2R1Y3RzLnByaWNlJ10pKTsKCiAgICAgICAgJHRoaXMtPmFzc2VydEZhbHNlKEFycjo6aGFzKFtdLCBbbnVsbF0pKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RmFsc2UoQXJyOjpoYXMobnVsbCwgW251bGxdKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RJc0Fzc29jKCkKICAgIHsKICAgICAgICAkdGhpcy0+YXNzZXJ0VHJ1ZShBcnI6OmlzQXNzb2MoWydhJyA9PiAnYScsIDAgPT4gJ2InXSkpOwogICAgICAgICR0aGlzLT5hc3NlcnRUcnVlKEFycjo6aXNBc3NvYyhbMSA9PiAnYScsIDAgPT4gJ2InXSkpOwogICAgICAgICR0aGlzLT5hc3NlcnRUcnVlKEFycjo6aXNBc3NvYyhbMSA9PiAnYScsIDIgPT4gJ2InXSkpOwogICAgICAgICR0aGlzLT5hc3NlcnRGYWxzZShBcnI6OmlzQXNzb2MoWzAgPT4gJ2EnLCAxID0+ICdiJ10pKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RmFsc2UoQXJyOjppc0Fzc29jKFsnYScsICdiJ10pKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdE9ubHkoKQogICAgewogICAgICAgICRhcnJheSA9IFsnbmFtZScgPT4gJ0Rlc2snLCAncHJpY2UnID0+IDEwMCwgJ29yZGVycycgPT4gMTBdOwogICAgICAgICRhcnJheSA9IEFycjo6b25seSgkYXJyYXksIFsnbmFtZScsICdwcmljZSddKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsnbmFtZScgPT4gJ0Rlc2snLCAncHJpY2UnID0+IDEwMF0sICRhcnJheSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RQbHVjaygpCiAgICB7CiAgICAgICAgJGFycmF5ID0gWwogICAgICAgICAgICBbJ2RldmVsb3BlcicgPT4gWyduYW1lJyA9PiAnVGF5bG9yJ11dLAogICAgICAgICAgICBbJ2RldmVsb3BlcicgPT4gWyduYW1lJyA9PiAnQWJpZ2FpbCddXSwKICAgICAgICBdOwoKICAgICAgICAkYXJyYXkgPSBBcnI6OnBsdWNrKCRhcnJheSwgJ2RldmVsb3Blci5uYW1lJyk7CgogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWydUYXlsb3InLCAnQWJpZ2FpbCddLCAkYXJyYXkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0UGx1Y2tXaXRoQXJyYXlWYWx1ZSgpCiAgICB7CiAgICAgICAgJGFycmF5ID0gWwogICAgICAgICAgICBbJ2RldmVsb3BlcicgPT4gWyduYW1lJyA9PiAnVGF5bG9yJ11dLAogICAgICAgICAgICBbJ2RldmVsb3BlcicgPT4gWyduYW1lJyA9PiAnQWJpZ2FpbCddXSwKICAgICAgICBdOwogICAgICAgICRhcnJheSA9IEFycjo6cGx1Y2soJGFycmF5LCBbJ2RldmVsb3BlcicsICduYW1lJ10pOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWydUYXlsb3InLCAnQWJpZ2FpbCddLCAkYXJyYXkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0UGx1Y2tXaXRoS2V5cygpCiAgICB7CiAgICAgICAgJGFycmF5ID0gWwogICAgICAgICAgICBbJ25hbWUnID0+ICdUYXlsb3InLCAncm9sZScgPT4gJ2RldmVsb3BlciddLAogICAgICAgICAgICBbJ25hbWUnID0+ICdBYmlnYWlsJywgJ3JvbGUnID0+ICdkZXZlbG9wZXInXSwKICAgICAgICBdOwoKICAgICAgICAkdGVzdDEgPSBBcnI6OnBsdWNrKCRhcnJheSwgJ3JvbGUnLCAnbmFtZScpOwogICAgICAgICR0ZXN0MiA9IEFycjo6cGx1Y2soJGFycmF5LCBudWxsLCAnbmFtZScpOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsKICAgICAgICAgICAgJ1RheWxvcicgPT4gJ2RldmVsb3BlcicsCiAgICAgICAgICAgICdBYmlnYWlsJyA9PiAnZGV2ZWxvcGVyJywKICAgICAgICBdLCAkdGVzdDEpOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsKICAgICAgICAgICAgJ1RheWxvcicgPT4gWyduYW1lJyA9PiAnVGF5bG9yJywgJ3JvbGUnID0+ICdkZXZlbG9wZXInXSwKICAgICAgICAgICAgJ0FiaWdhaWwnID0+IFsnbmFtZScgPT4gJ0FiaWdhaWwnLCAncm9sZScgPT4gJ2RldmVsb3BlciddLAogICAgICAgIF0sICR0ZXN0Mik7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RQbHVja1dpdGhDYXJib25LZXlzKCkKICAgIHsKICAgICAgICAkYXJyYXkgPSBbCiAgICAgICAgICAgIFsnc3RhcnQnID0+IG5ldyBDYXJib24oJzIwMTctMDctMjUgMDA6MDA6MDAnKSwgJ2VuZCcgPT4gbmV3IENhcmJvbignMjAxNy0wNy0zMCAwMDowMDowMCcpXSwKICAgICAgICBdOwogICAgICAgICRhcnJheSA9IEFycjo6cGx1Y2soJGFycmF5LCAnZW5kJywgJ3N0YXJ0Jyk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJzIwMTctMDctMjUgMDA6MDA6MDAnID0+ICcyMDE3LTA3LTMwIDAwOjAwOjAwJ10sICRhcnJheSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RQcmVwZW5kKCkKICAgIHsKICAgICAgICAkYXJyYXkgPSBBcnI6OnByZXBlbmQoWydvbmUnLCAndHdvJywgJ3RocmVlJywgJ2ZvdXInXSwgJ3plcm8nKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsnemVybycsICdvbmUnLCAndHdvJywgJ3RocmVlJywgJ2ZvdXInXSwgJGFycmF5KTsKCiAgICAgICAgJGFycmF5ID0gQXJyOjpwcmVwZW5kKFsnb25lJyA9PiAxLCAndHdvJyA9PiAyXSwgMCwgJ3plcm8nKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsnemVybycgPT4gMCwgJ29uZScgPT4gMSwgJ3R3bycgPT4gMl0sICRhcnJheSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RQdWxsKCkKICAgIHsKICAgICAgICAkYXJyYXkgPSBbJ25hbWUnID0+ICdEZXNrJywgJ3ByaWNlJyA9PiAxMDBdOwogICAgICAgICRuYW1lID0gQXJyOjpwdWxsKCRhcnJheSwgJ25hbWUnKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKCdEZXNrJywgJG5hbWUpOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWydwcmljZScgPT4gMTAwXSwgJGFycmF5KTsKCiAgICAgICAgLy8gT25seSB3b3JrcyBvbiBmaXJzdCBsZXZlbCBrZXlzCiAgICAgICAgJGFycmF5ID0gWydqb2VAZXhhbXBsZS5jb20nID0+ICdKb2UnLCAnamFuZUBsb2NhbGhvc3QnID0+ICdKYW5lJ107CiAgICAgICAgJG5hbWUgPSBBcnI6OnB1bGwoJGFycmF5LCAnam9lQGV4YW1wbGUuY29tJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscygnSm9lJywgJG5hbWUpOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWydqYW5lQGxvY2FsaG9zdCcgPT4gJ0phbmUnXSwgJGFycmF5KTsKCiAgICAgICAgLy8gRG9lcyBub3Qgd29yayBmb3IgbmVzdGVkIGtleXMKICAgICAgICAkYXJyYXkgPSBbJ2VtYWlscycgPT4gWydqb2VAZXhhbXBsZS5jb20nID0+ICdKb2UnLCAnamFuZUBsb2NhbGhvc3QnID0+ICdKYW5lJ11dOwogICAgICAgICRuYW1lID0gQXJyOjpwdWxsKCRhcnJheSwgJ2VtYWlscy5qb2VAZXhhbXBsZS5jb20nKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0TnVsbCgkbmFtZSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJ2VtYWlscycgPT4gWydqb2VAZXhhbXBsZS5jb20nID0+ICdKb2UnLCAnamFuZUBsb2NhbGhvc3QnID0+ICdKYW5lJ11dLCAkYXJyYXkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0UmFuZG9tKCkKICAgIHsKICAgICAgICAkcmFuZG9tID0gQXJyOjpyYW5kb20oWydmb28nLCAnYmFyJywgJ2JheiddKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0Q29udGFpbnMoJHJhbmRvbSwgWydmb28nLCAnYmFyJywgJ2JheiddKTsKCiAgICAgICAgJHJhbmRvbSA9IEFycjo6cmFuZG9tKFsnZm9vJywgJ2JhcicsICdiYXonXSwgMCk7CiAgICAgICAgJHRoaXMtPmFzc2VydEludGVybmFsVHlwZSgnYXJyYXknLCAkcmFuZG9tKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0Q291bnQoMCwgJHJhbmRvbSk7CgogICAgICAgICRyYW5kb20gPSBBcnI6OnJhbmRvbShbJ2ZvbycsICdiYXInLCAnYmF6J10sIDEpOwogICAgICAgICR0aGlzLT5hc3NlcnRJbnRlcm5hbFR5cGUoJ2FycmF5JywgJHJhbmRvbSk7CiAgICAgICAgJHRoaXMtPmFzc2VydENvdW50KDEsICRyYW5kb20pOwogICAgICAgICR0aGlzLT5hc3NlcnRDb250YWlucygkcmFuZG9tWzBdLCBbJ2ZvbycsICdiYXInLCAnYmF6J10pOwoKICAgICAgICAkcmFuZG9tID0gQXJyOjpyYW5kb20oWydmb28nLCAnYmFyJywgJ2JheiddLCAyKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0SW50ZXJuYWxUeXBlKCdhcnJheScsICRyYW5kb20pOwogICAgICAgICR0aGlzLT5hc3NlcnRDb3VudCgyLCAkcmFuZG9tKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0Q29udGFpbnMoJHJhbmRvbVswXSwgWydmb28nLCAnYmFyJywgJ2JheiddKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0Q29udGFpbnMoJHJhbmRvbVsxXSwgWydmb28nLCAnYmFyJywgJ2JheiddKTsKCiAgICAgICAgJHJhbmRvbSA9IEFycjo6cmFuZG9tKFsnZm9vJywgJ2JhcicsICdiYXonXSwgJzAnKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0SW50ZXJuYWxUeXBlKCdhcnJheScsICRyYW5kb20pOwogICAgICAgICR0aGlzLT5hc3NlcnRDb3VudCgwLCAkcmFuZG9tKTsKCiAgICAgICAgJHJhbmRvbSA9IEFycjo6cmFuZG9tKFsnZm9vJywgJ2JhcicsICdiYXonXSwgJzEnKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0SW50ZXJuYWxUeXBlKCdhcnJheScsICRyYW5kb20pOwogICAgICAgICR0aGlzLT5hc3NlcnRDb3VudCgxLCAkcmFuZG9tKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0Q29udGFpbnMoJHJhbmRvbVswXSwgWydmb28nLCAnYmFyJywgJ2JheiddKTsKCiAgICAgICAgJHJhbmRvbSA9IEFycjo6cmFuZG9tKFsnZm9vJywgJ2JhcicsICdiYXonXSwgJzInKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0SW50ZXJuYWxUeXBlKCdhcnJheScsICRyYW5kb20pOwogICAgICAgICR0aGlzLT5hc3NlcnRDb3VudCgyLCAkcmFuZG9tKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0Q29udGFpbnMoJHJhbmRvbVswXSwgWydmb28nLCAnYmFyJywgJ2JheiddKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0Q29udGFpbnMoJHJhbmRvbVsxXSwgWydmb28nLCAnYmFyJywgJ2JheiddKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdFJhbmRvbU9uRW1wdHlBcnJheSgpCiAgICB7CiAgICAgICAgJHJhbmRvbSA9IEFycjo6cmFuZG9tKFtdLCAwKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0SW50ZXJuYWxUeXBlKCdhcnJheScsICRyYW5kb20pOwogICAgICAgICR0aGlzLT5hc3NlcnRDb3VudCgwLCAkcmFuZG9tKTsKCiAgICAgICAgJHJhbmRvbSA9IEFycjo6cmFuZG9tKFtdLCAnMCcpOwogICAgICAgICR0aGlzLT5hc3NlcnRJbnRlcm5hbFR5cGUoJ2FycmF5JywgJHJhbmRvbSk7CiAgICAgICAgJHRoaXMtPmFzc2VydENvdW50KDAsICRyYW5kb20pOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0UmFuZG9tVGhyb3dzQW5FcnJvcldoZW5SZXF1ZXN0aW5nTW9yZUl0ZW1zVGhhbkFyZUF2YWlsYWJsZSgpCiAgICB7CiAgICAgICAgJGV4Y2VwdGlvbnMgPSAwOwoKICAgICAgICB0cnkgewogICAgICAgICAgICBBcnI6OnJhbmRvbShbXSk7CiAgICAgICAgfSBjYXRjaCAoXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAkZXhjZXB0aW9ucysrOwogICAgICAgIH0KCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgQXJyOjpyYW5kb20oW10sIDEpOwogICAgICAgIH0gY2F0Y2ggKFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgJGV4Y2VwdGlvbnMrKzsKICAgICAgICB9CgogICAgICAgIHRyeSB7CiAgICAgICAgICAgIEFycjo6cmFuZG9tKFtdLCAyKTsKICAgICAgICB9IGNhdGNoIChcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgICRleGNlcHRpb25zKys7CiAgICAgICAgfQoKICAgICAgICAkdGhpcy0+YXNzZXJ0U2FtZSgzLCAkZXhjZXB0aW9ucyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RTZXQoKQogICAgewogICAgICAgICRhcnJheSA9IFsncHJvZHVjdHMnID0+IFsnZGVzaycgPT4gWydwcmljZScgPT4gMTAwXV1dOwogICAgICAgIEFycjo6c2V0KCRhcnJheSwgJ3Byb2R1Y3RzLmRlc2sucHJpY2UnLCAyMDApOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWydwcm9kdWN0cycgPT4gWydkZXNrJyA9PiBbJ3ByaWNlJyA9PiAyMDBdXV0sICRhcnJheSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RTaHVmZmxlV2l0aFNlZWQoKQogICAgewogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoCiAgICAgICAgICAgIEFycjo6c2h1ZmZsZShyYW5nZSgwLCAxMDAsIDEwKSwgMTIzNCksCiAgICAgICAgICAgIEFycjo6c2h1ZmZsZShyYW5nZSgwLCAxMDAsIDEwKSwgMTIzNCkKICAgICAgICApOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0U29ydCgpCiAgICB7CiAgICAgICAgJHVuc29ydGVkID0gWwogICAgICAgICAgICBbJ25hbWUnID0+ICdEZXNrJ10sCiAgICAgICAgICAgIFsnbmFtZScgPT4gJ0NoYWlyJ10sCiAgICAgICAgXTsKCiAgICAgICAgJGV4cGVjdGVkID0gWwogICAgICAgICAgICBbJ25hbWUnID0+ICdDaGFpciddLAogICAgICAgICAgICBbJ25hbWUnID0+ICdEZXNrJ10sCiAgICAgICAgXTsKCiAgICAgICAgJHNvcnRlZCA9IGFycmF5X3ZhbHVlcyhBcnI6OnNvcnQoJHVuc29ydGVkKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscygkZXhwZWN0ZWQsICRzb3J0ZWQpOwoKICAgICAgICAvLyBzb3J0IHdpdGggY2xvc3VyZQogICAgICAgICRzb3J0ZWRXaXRoQ2xvc3VyZSA9IGFycmF5X3ZhbHVlcyhBcnI6OnNvcnQoJHVuc29ydGVkLCBmdW5jdGlvbiAoJHZhbHVlKSB7CiAgICAgICAgICAgIHJldHVybiAkdmFsdWVbJ25hbWUnXTsKICAgICAgICB9KSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscygkZXhwZWN0ZWQsICRzb3J0ZWRXaXRoQ2xvc3VyZSk7CgogICAgICAgIC8vIHNvcnQgd2l0aCBkb3Qgbm90YXRpb24KICAgICAgICAkc29ydGVkV2l0aERvdE5vdGF0aW9uID0gYXJyYXlfdmFsdWVzKEFycjo6c29ydCgkdW5zb3J0ZWQsICduYW1lJykpOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoJGV4cGVjdGVkLCAkc29ydGVkV2l0aERvdE5vdGF0aW9uKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdFNvcnRSZWN1cnNpdmUoKQogICAgewogICAgICAgICRhcnJheSA9IFsKICAgICAgICAgICAgJ3VzZXJzJyA9PiBbCiAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgLy8gc2hvdWxkIHNvcnQgYXNzb2NpYXRpdmUgYXJyYXlzIGJ5IGtleXMKICAgICAgICAgICAgICAgICAgICAnbmFtZScgPT4gJ2pvZScsCiAgICAgICAgICAgICAgICAgICAgJ21haWwnID0+ICdqb2VAZXhhbXBsZS5jb20nLAogICAgICAgICAgICAgICAgICAgIC8vIHNob3VsZCBzb3J0IGRlZXBseSBuZXN0ZWQgYXJyYXlzCiAgICAgICAgICAgICAgICAgICAgJ251bWJlcnMnID0+IFsyLCAxLCAwXSwKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAgICAgJ25hbWUnID0+ICdqYW5lJywKICAgICAgICAgICAgICAgICAgICAnYWdlJyA9PiAyNSwKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICdyZXBvc2l0b3JpZXMnID0+IFsKICAgICAgICAgICAgICAgIC8vIHNob3VsZCB1c2Ugd2VpcmQgYHNvcnQoKWAgYmVoYXZpb3Igb24gYXJyYXlzIG9mIGFycmF5cwogICAgICAgICAgICAgICAgWydpZCcgPT4gMV0sCiAgICAgICAgICAgICAgICBbJ2lkJyA9PiAwXSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgLy8gc2hvdWxkIHNvcnQgbm9uLWFzc29jaWF0aXZlIGFycmF5cyBieSB2YWx1ZQogICAgICAgICAgICAyMCA9PiBbMiwgMSwgMF0sCiAgICAgICAgICAgIDMwID0+IFsKICAgICAgICAgICAgICAgIC8vIHNob3VsZCBzb3J0IG5vbi1pbmNyZW1lbnRpbmcgbnVtZXJpY2FsIGtleXMgYnkga2V5cwogICAgICAgICAgICAgICAgMiA9PiAnYScsCiAgICAgICAgICAgICAgICAxID0+ICdiJywKICAgICAgICAgICAgICAgIDAgPT4gJ2MnLAogICAgICAgICAgICBdLAogICAgICAgIF07CgogICAgICAgICRleHBlY3QgPSBbCiAgICAgICAgICAgIDIwID0+IFswLCAxLCAyXSwKICAgICAgICAgICAgMzAgPT4gWwogICAgICAgICAgICAgICAgMCA9PiAnYycsCiAgICAgICAgICAgICAgICAxID0+ICdiJywKICAgICAgICAgICAgICAgIDIgPT4gJ2EnLAogICAgICAgICAgICBdLAogICAgICAgICAgICAncmVwb3NpdG9yaWVzJyA9PiBbCiAgICAgICAgICAgICAgICBbJ2lkJyA9PiAwXSwKICAgICAgICAgICAgICAgIFsnaWQnID0+IDFdLAogICAgICAgICAgICBdLAogICAgICAgICAgICAndXNlcnMnID0+IFsKICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAnYWdlJyA9PiAyNSwKICAgICAgICAgICAgICAgICAgICAnbmFtZScgPT4gJ2phbmUnLAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgIFsKICAgICAgICAgICAgICAgICAgICAnbWFpbCcgPT4gJ2pvZUBleGFtcGxlLmNvbScsCiAgICAgICAgICAgICAgICAgICAgJ25hbWUnID0+ICdqb2UnLAogICAgICAgICAgICAgICAgICAgICdudW1iZXJzJyA9PiBbMCwgMSwgMl0sCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICBdLAogICAgICAgIF07CgogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoJGV4cGVjdCwgQXJyOjpzb3J0UmVjdXJzaXZlKCRhcnJheSkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0V2hlcmUoKQogICAgewogICAgICAgICRhcnJheSA9IFsxMDAsICcyMDAnLCAzMDAsICc0MDAnLCA1MDBdOwoKICAgICAgICAkYXJyYXkgPSBBcnI6OndoZXJlKCRhcnJheSwgZnVuY3Rpb24gKCR2YWx1ZSwgJGtleSkgewogICAgICAgICAgICByZXR1cm4gaXNfc3RyaW5nKCR2YWx1ZSk7CiAgICAgICAgfSk7CgogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWzEgPT4gMjAwLCAzID0+IDQwMF0sICRhcnJheSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RXaGVyZUtleSgpCiAgICB7CiAgICAgICAgJGFycmF5ID0gWycxMCcgPT4gMSwgJ2ZvbycgPT4gMywgMjAgPT4gMl07CgogICAgICAgICRhcnJheSA9IEFycjo6d2hlcmUoJGFycmF5LCBmdW5jdGlvbiAoJHZhbHVlLCAka2V5KSB7CiAgICAgICAgICAgIHJldHVybiBpc19udW1lcmljKCRrZXkpOwogICAgICAgIH0pOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsnMTAnID0+IDEsIDIwID0+IDJdLCAkYXJyYXkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0Rm9yZ2V0KCkKICAgIHsKICAgICAgICAkYXJyYXkgPSBbJ3Byb2R1Y3RzJyA9PiBbJ2Rlc2snID0+IFsncHJpY2UnID0+IDEwMF1dXTsKICAgICAgICBBcnI6OmZvcmdldCgkYXJyYXksIG51bGwpOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWydwcm9kdWN0cycgPT4gWydkZXNrJyA9PiBbJ3ByaWNlJyA9PiAxMDBdXV0sICRhcnJheSk7CgogICAgICAgICRhcnJheSA9IFsncHJvZHVjdHMnID0+IFsnZGVzaycgPT4gWydwcmljZScgPT4gMTAwXV1dOwogICAgICAgIEFycjo6Zm9yZ2V0KCRhcnJheSwgW10pOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWydwcm9kdWN0cycgPT4gWydkZXNrJyA9PiBbJ3ByaWNlJyA9PiAxMDBdXV0sICRhcnJheSk7CgogICAgICAgICRhcnJheSA9IFsncHJvZHVjdHMnID0+IFsnZGVzaycgPT4gWydwcmljZScgPT4gMTAwXV1dOwogICAgICAgIEFycjo6Zm9yZ2V0KCRhcnJheSwgJ3Byb2R1Y3RzLmRlc2snKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsncHJvZHVjdHMnID0+IFtdXSwgJGFycmF5KTsKCiAgICAgICAgJGFycmF5ID0gWydwcm9kdWN0cycgPT4gWydkZXNrJyA9PiBbJ3ByaWNlJyA9PiAxMDBdXV07CiAgICAgICAgQXJyOjpmb3JnZXQoJGFycmF5LCAncHJvZHVjdHMuZGVzay5wcmljZScpOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWydwcm9kdWN0cycgPT4gWydkZXNrJyA9PiBbXV1dLCAkYXJyYXkpOwoKICAgICAgICAkYXJyYXkgPSBbJ3Byb2R1Y3RzJyA9PiBbJ2Rlc2snID0+IFsncHJpY2UnID0+IDEwMF1dXTsKICAgICAgICBBcnI6OmZvcmdldCgkYXJyYXksICdwcm9kdWN0cy5maW5hbC5wcmljZScpOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWydwcm9kdWN0cycgPT4gWydkZXNrJyA9PiBbJ3ByaWNlJyA9PiAxMDBdXV0sICRhcnJheSk7CgogICAgICAgICRhcnJheSA9IFsnc2hvcCcgPT4gWydjYXJ0JyA9PiBbMTUwID0+IDBdXV07CiAgICAgICAgQXJyOjpmb3JnZXQoJGFycmF5LCAnc2hvcC5maW5hbC5jYXJ0Jyk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJ3Nob3AnID0+IFsnY2FydCcgPT4gWzE1MCA9PiAwXV1dLCAkYXJyYXkpOwoKICAgICAgICAkYXJyYXkgPSBbJ3Byb2R1Y3RzJyA9PiBbJ2Rlc2snID0+IFsncHJpY2UnID0+IFsnb3JpZ2luYWwnID0+IDUwLCAndGF4ZXMnID0+IDYwXV1dXTsKICAgICAgICBBcnI6OmZvcmdldCgkYXJyYXksICdwcm9kdWN0cy5kZXNrLnByaWNlLnRheGVzJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJ3Byb2R1Y3RzJyA9PiBbJ2Rlc2snID0+IFsncHJpY2UnID0+IFsnb3JpZ2luYWwnID0+IDUwXV1dXSwgJGFycmF5KTsKCiAgICAgICAgJGFycmF5ID0gWydwcm9kdWN0cycgPT4gWydkZXNrJyA9PiBbJ3ByaWNlJyA9PiBbJ29yaWdpbmFsJyA9PiA1MCwgJ3RheGVzJyA9PiA2MF1dXV07CiAgICAgICAgQXJyOjpmb3JnZXQoJGFycmF5LCAncHJvZHVjdHMuZGVzay5maW5hbC50YXhlcycpOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWydwcm9kdWN0cycgPT4gWydkZXNrJyA9PiBbJ3ByaWNlJyA9PiBbJ29yaWdpbmFsJyA9PiA1MCwgJ3RheGVzJyA9PiA2MF1dXV0sICRhcnJheSk7CgogICAgICAgICRhcnJheSA9IFsncHJvZHVjdHMnID0+IFsnZGVzaycgPT4gWydwcmljZScgPT4gNTBdLCBudWxsID0+ICdzb21ldGhpbmcnXV07CiAgICAgICAgQXJyOjpmb3JnZXQoJGFycmF5LCBbJ3Byb2R1Y3RzLmFtb3VudC5hbGwnLCAncHJvZHVjdHMuZGVzay5wcmljZSddKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsncHJvZHVjdHMnID0+IFsnZGVzaycgPT4gW10sIG51bGwgPT4gJ3NvbWV0aGluZyddXSwgJGFycmF5KTsKCiAgICAgICAgLy8gT25seSB3b3JrcyBvbiBmaXJzdCBsZXZlbCBrZXlzCiAgICAgICAgJGFycmF5ID0gWydqb2VAZXhhbXBsZS5jb20nID0+ICdKb2UnLCAnamFuZUBleGFtcGxlLmNvbScgPT4gJ0phbmUnXTsKICAgICAgICBBcnI6OmZvcmdldCgkYXJyYXksICdqb2VAZXhhbXBsZS5jb20nKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsnamFuZUBleGFtcGxlLmNvbScgPT4gJ0phbmUnXSwgJGFycmF5KTsKCiAgICAgICAgLy8gRG9lcyBub3Qgd29yayBmb3IgbmVzdGVkIGtleXMKICAgICAgICAkYXJyYXkgPSBbJ2VtYWlscycgPT4gWydqb2VAZXhhbXBsZS5jb20nID0+IFsnbmFtZScgPT4gJ0pvZSddLCAnamFuZUBsb2NhbGhvc3QnID0+IFsnbmFtZScgPT4gJ0phbmUnXV1dOwogICAgICAgIEFycjo6Zm9yZ2V0KCRhcnJheSwgWydlbWFpbHMuam9lQGV4YW1wbGUuY29tJywgJ2VtYWlscy5qYW5lQGxvY2FsaG9zdCddKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsnZW1haWxzJyA9PiBbJ2pvZUBleGFtcGxlLmNvbScgPT4gWyduYW1lJyA9PiAnSm9lJ11dXSwgJGFycmF5KTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdFdyYXAoKQogICAgewogICAgICAgICRzdHJpbmcgPSAnYSc7CiAgICAgICAgJGFycmF5ID0gWydhJ107CiAgICAgICAgJG9iamVjdCA9IG5ldyBzdGRDbGFzczsKICAgICAgICAkb2JqZWN0LT52YWx1ZSA9ICdhJzsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsnYSddLCBBcnI6OndyYXAoJHN0cmluZykpOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoJGFycmF5LCBBcnI6OndyYXAoJGFycmF5KSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJG9iamVjdF0sIEFycjo6d3JhcCgkb2JqZWN0KSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbXSwgQXJyOjp3cmFwKG51bGwpKTsKICAgIH0KfQo=AppDevTools/query/vendor/tightenco/collect/tests/Support/SupportCarbonTest.phpPD9waHAKCm5hbWVzcGFjZSBUaWdodGVuY29cQ29sbGVjdFxUZXN0c1xTdXBwb3J0OwoKdXNlIERhdGVUaW1lOwp1c2UgRGF0ZVRpbWVJbnRlcmZhY2U7CnVzZSBUaWdodGVuY29cQ29sbGVjdFxTdXBwb3J0XENhcmJvbjsKdXNlIFBIUFVuaXRcRnJhbWV3b3JrXFRlc3RDYXNlOwp1c2UgQ2FyYm9uXENhcmJvbiBhcyBCYXNlQ2FyYm9uOwoKY2xhc3MgU3VwcG9ydENhcmJvblRlc3QgZXh0ZW5kcyBUZXN0Q2FzZQp7CiAgICAvKioKICAgICAqIEB2YXIgXFRpZ2h0ZW5jb1xDb2xsZWN0XFN1cHBvcnRcQ2FyYm9uCiAgICAgKi8KICAgIHByb3RlY3RlZCAkbm93OwoKICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRVcCgpCiAgICB7CiAgICAgICAgcGFyZW50OjpzZXRVcCgpOwoKICAgICAgICBDYXJib246OnNldFRlc3ROb3coJHRoaXMtPm5vdyA9IENhcmJvbjo6Y3JlYXRlKDIwMTcsIDYsIDI3LCAxMywgMTQsIDE1LCAnVVRDJykpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZWFyRG93bigpCiAgICB7CiAgICAgICAgQ2FyYm9uOjpzZXRUZXN0Tm93KCk7CiAgICAgICAgQ2FyYm9uOjpzZXJpYWxpemVVc2luZyhudWxsKTsKCiAgICAgICAgcGFyZW50Ojp0ZWFyRG93bigpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0SW5zdGFuY2UoKQogICAgewogICAgICAgICR0aGlzLT5hc3NlcnRJbnN0YW5jZU9mKERhdGVUaW1lOjpjbGFzcywgJHRoaXMtPm5vdyk7CiAgICAgICAgJHRoaXMtPmFzc2VydEluc3RhbmNlT2YoRGF0ZVRpbWVJbnRlcmZhY2U6OmNsYXNzLCAkdGhpcy0+bm93KTsKICAgICAgICAkdGhpcy0+YXNzZXJ0SW5zdGFuY2VPZihCYXNlQ2FyYm9uOjpjbGFzcywgJHRoaXMtPm5vdyk7CiAgICAgICAgJHRoaXMtPmFzc2VydEluc3RhbmNlT2YoQ2FyYm9uOjpjbGFzcywgJHRoaXMtPm5vdyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RDYXJib25Jc01hY3JvYWJsZVdoZW5Ob3RDYWxsZWRTdGF0aWNhbGx5KCkKICAgIHsKICAgICAgICBDYXJib246Om1hY3JvKCdkaWZmSW5EZWNhZGVzJywgZnVuY3Rpb24gKENhcmJvbiAkZHQgPSBudWxsLCAkYWJzID0gdHJ1ZSkgewogICAgICAgICAgICByZXR1cm4gKGludCkgKCR0aGlzLT5kaWZmSW5ZZWFycygkZHQsICRhYnMpIC8gMTApOwogICAgICAgIH0pOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0U2FtZSgyLCAkdGhpcy0+bm93LT5kaWZmSW5EZWNhZGVzKENhcmJvbjo6bm93KCktPmFkZFllYXJzKDI1KSkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0Q2FyYm9uSXNNYWNyb2FibGVXaGVuQ2FsbGVkU3RhdGljYWxseSgpCiAgICB7CiAgICAgICAgQ2FyYm9uOjptYWNybygndHdvRGF5c0Fnb0F0Tm9vbicsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgcmV0dXJuIENhcmJvbjo6bm93KCktPnN1YkRheXMoMiktPnNldFRpbWUoMTIsIDAsIDApOwogICAgICAgIH0pOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0U2FtZSgnMjAxNy0wNi0yNSAxMjowMDowMCcsIENhcmJvbjo6dHdvRGF5c0Fnb0F0Tm9vbigpLT50b0RhdGVUaW1lU3RyaW5nKCkpOwogICAgfQoKICAgIC8qKgogICAgICogQGV4cGVjdGVkRXhjZXB0aW9uIFxCYWRNZXRob2RDYWxsRXhjZXB0aW9uCiAgICAgKiBAZXhwZWN0ZWRFeGNlcHRpb25NZXNzYWdlIE1ldGhvZCBUaWdodGVuY29cQ29sbGVjdFxTdXBwb3J0XENhcmJvbjo6bm9uRXhpc3RpbmdTdGF0aWNNYWNybyBkb2VzIG5vdCBleGlzdC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RDYXJib25SYWlzZXNFeGNlcHRpb25XaGVuU3RhdGljTWFjcm9Jc05vdEZvdW5kKCkKICAgIHsKICAgICAgICBDYXJib246Om5vbkV4aXN0aW5nU3RhdGljTWFjcm8oKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBleHBlY3RlZEV4Y2VwdGlvbiBcQmFkTWV0aG9kQ2FsbEV4Y2VwdGlvbgogICAgICogQGV4cGVjdGVkRXhjZXB0aW9uTWVzc2FnZSBNZXRob2QgVGlnaHRlbmNvXENvbGxlY3RcU3VwcG9ydFxDYXJib246Om5vbkV4aXN0aW5nTWFjcm8gZG9lcyBub3QgZXhpc3QuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0Q2FyYm9uUmFpc2VzRXhjZXB0aW9uV2hlbk1hY3JvSXNOb3RGb3VuZCgpCiAgICB7CiAgICAgICAgQ2FyYm9uOjpub3coKS0+bm9uRXhpc3RpbmdNYWNybygpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0Q2FyYm9uQWxsb3dzQ3VzdG9tU2VyaWFsaXplcigpCiAgICB7CiAgICAgICAgQ2FyYm9uOjpzZXJpYWxpemVVc2luZyhmdW5jdGlvbiAoQ2FyYm9uICRjYXJib24pIHsKICAgICAgICAgICAgcmV0dXJuICRjYXJib24tPmdldFRpbWVzdGFtcCgpOwogICAgICAgIH0pOwoKICAgICAgICAkcmVzdWx0ID0ganNvbl9kZWNvZGUoanNvbl9lbmNvZGUoJHRoaXMtPm5vdyksIHRydWUpOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0U2FtZSgxNDk4NTY5MjU1LCAkcmVzdWx0KTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdENhcmJvbkNhblNlcmlhbGl6ZVRvSnNvbigpCiAgICB7CiAgICAgICAgJHRoaXMtPmFzc2VydFNhbWUoWwogICAgICAgICAgICAnZGF0ZScgPT4gJzIwMTctMDYtMjcgMTM6MTQ6MTUuMDAwMDAwJywKICAgICAgICAgICAgJ3RpbWV6b25lX3R5cGUnID0+IDMsCiAgICAgICAgICAgICd0aW1lem9uZScgPT4gJ1VUQycsCiAgICAgICAgXSwgJHRoaXMtPm5vdy0+anNvblNlcmlhbGl6ZSgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdFNldFN0YXRlUmV0dXJuc0NvcnJlY3RUeXBlKCkKICAgIHsKICAgICAgICAkY2FyYm9uID0gQ2FyYm9uOjpfX3NldF9zdGF0ZShbCiAgICAgICAgICAgICdkYXRlJyA9PiAnMjAxNy0wNi0yNyAxMzoxNDoxNS4wMDAwMDAnLAogICAgICAgICAgICAndGltZXpvbmVfdHlwZScgPT4gMywKICAgICAgICAgICAgJ3RpbWV6b25lJyA9PiAnVVRDJywKICAgICAgICBdKTsKCiAgICAgICAgJHRoaXMtPmFzc2VydEluc3RhbmNlT2YoQ2FyYm9uOjpjbGFzcywgJGNhcmJvbik7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3REZXNlcmlhbGl6YXRpb25PY2N1cnNDb3JyZWN0bHkoKQogICAgewogICAgICAgICRjYXJib24gPSBuZXcgQ2FyYm9uKCcyMDE3LTA2LTI3IDEzOjE0OjE1LjAwMDAwMCcpOwogICAgICAgICRzZXJpYWxpemVkID0gJ3JldHVybiAnLnZhcl9leHBvcnQoJGNhcmJvbiwgdHJ1ZSkuJzsnOwogICAgICAgICRkZXNlcmlhbGl6ZWQgPSBldmFsKCRzZXJpYWxpemVkKTsKCiAgICAgICAgJHRoaXMtPmFzc2VydEluc3RhbmNlT2YoQ2FyYm9uOjpjbGFzcywgJGRlc2VyaWFsaXplZCk7CiAgICB9Cn0KAppDevTools/query/vendor/tightenco/collect/tests/Support/SupportCollectionTest.phpPD9waHAKCm5hbWVzcGFjZSBUaWdodGVuY29cQ29sbGVjdFxUZXN0c1xTdXBwb3J0OwoKdXNlIHN0ZENsYXNzOwp1c2UgRXhjZXB0aW9uOwp1c2UgQXJyYXlBY2Nlc3M7CnVzZSBNb2NrZXJ5IGFzIG07CnVzZSBSZWZsZWN0aW9uQ2xhc3M7CnVzZSBKc29uU2VyaWFsaXphYmxlOwp1c2UgUEhQVW5pdFxGcmFtZXdvcmtcVGVzdENhc2U7CnVzZSBUaWdodGVuY29cQ29sbGVjdFxTdXBwb3J0XENvbGxlY3Rpb247CnVzZSBUaWdodGVuY29cQ29sbGVjdFxDb250cmFjdHNcU3VwcG9ydFxKc29uYWJsZTsKdXNlIFRpZ2h0ZW5jb1xDb2xsZWN0XENvbnRyYWN0c1xTdXBwb3J0XEFycmF5YWJsZTsKCmNsYXNzIFN1cHBvcnRDb2xsZWN0aW9uVGVzdCBleHRlbmRzIFRlc3RDYXNlCnsKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0Rmlyc3RSZXR1cm5zRmlyc3RJdGVtSW5Db2xsZWN0aW9uKCkKICAgIHsKICAgICAgICAkYyA9IG5ldyBDb2xsZWN0aW9uKFsnZm9vJywgJ2JhciddKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKCdmb28nLCAkYy0+Zmlyc3QoKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RGaXJzdFdpdGhDYWxsYmFjaygpCiAgICB7CiAgICAgICAgJGRhdGEgPSBuZXcgQ29sbGVjdGlvbihbJ2ZvbycsICdiYXInLCAnYmF6J10pOwogICAgICAgICRyZXN1bHQgPSAkZGF0YS0+Zmlyc3QoZnVuY3Rpb24gKCR2YWx1ZSkgewogICAgICAgICAgICByZXR1cm4gJHZhbHVlID09PSAnYmFyJzsKICAgICAgICB9KTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKCdiYXInLCAkcmVzdWx0KTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdEZpcnN0V2l0aENhbGxiYWNrQW5kRGVmYXVsdCgpCiAgICB7CiAgICAgICAgJGRhdGEgPSBuZXcgQ29sbGVjdGlvbihbJ2ZvbycsICdiYXInXSk7CiAgICAgICAgJHJlc3VsdCA9ICRkYXRhLT5maXJzdChmdW5jdGlvbiAoJHZhbHVlKSB7CiAgICAgICAgICAgIHJldHVybiAkdmFsdWUgPT09ICdiYXonOwogICAgICAgIH0sICdkZWZhdWx0Jyk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscygnZGVmYXVsdCcsICRyZXN1bHQpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0Rmlyc3RXaXRoRGVmYXVsdEFuZFdpdGhvdXRDYWxsYmFjaygpCiAgICB7CiAgICAgICAgJGRhdGEgPSBuZXcgQ29sbGVjdGlvbjsKICAgICAgICAkcmVzdWx0ID0gJGRhdGEtPmZpcnN0KG51bGwsICdkZWZhdWx0Jyk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscygnZGVmYXVsdCcsICRyZXN1bHQpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0Rmlyc3RXaGVyZSgpCiAgICB7CiAgICAgICAgJGRhdGEgPSBuZXcgQ29sbGVjdGlvbihbCiAgICAgICAgICAgIFsnbWF0ZXJpYWwnID0+ICdwYXBlcicsICd0eXBlJyA9PiAnYm9vayddLAogICAgICAgICAgICBbJ21hdGVyaWFsJyA9PiAncnViYmVyJywgJ3R5cGUnID0+ICdnYXNrZXQnXSwKICAgICAgICBdKTsKCiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscygnYm9vaycsICRkYXRhLT5maXJzdFdoZXJlKCdtYXRlcmlhbCcsICdwYXBlcicpWyd0eXBlJ10pOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoJ2dhc2tldCcsICRkYXRhLT5maXJzdFdoZXJlKCdtYXRlcmlhbCcsICdydWJiZXInKVsndHlwZSddKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0TnVsbCgkZGF0YS0+Zmlyc3RXaGVyZSgnbWF0ZXJpYWwnLCAnbm9uZXhpc3RhbnQnKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydE51bGwoJGRhdGEtPmZpcnN0V2hlcmUoJ25vbmV4aXN0YW50JywgJ2tleScpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdExhc3RSZXR1cm5zTGFzdEl0ZW1JbkNvbGxlY3Rpb24oKQogICAgewogICAgICAgICRjID0gbmV3IENvbGxlY3Rpb24oWydmb28nLCAnYmFyJ10pOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoJ2JhcicsICRjLT5sYXN0KCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0TGFzdFdpdGhDYWxsYmFjaygpCiAgICB7CiAgICAgICAgJGRhdGEgPSBuZXcgQ29sbGVjdGlvbihbMTAwLCAyMDAsIDMwMF0pOwogICAgICAgICRyZXN1bHQgPSAkZGF0YS0+bGFzdChmdW5jdGlvbiAoJHZhbHVlKSB7CiAgICAgICAgICAgIHJldHVybiAkdmFsdWUgPCAyNTA7CiAgICAgICAgfSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscygyMDAsICRyZXN1bHQpOwogICAgICAgICRyZXN1bHQgPSAkZGF0YS0+bGFzdChmdW5jdGlvbiAoJHZhbHVlLCAka2V5KSB7CiAgICAgICAgICAgIHJldHVybiAka2V5IDwgMjsKICAgICAgICB9KTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKDIwMCwgJHJlc3VsdCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RMYXN0V2l0aENhbGxiYWNrQW5kRGVmYXVsdCgpCiAgICB7CiAgICAgICAgJGRhdGEgPSBuZXcgQ29sbGVjdGlvbihbJ2ZvbycsICdiYXInXSk7CiAgICAgICAgJHJlc3VsdCA9ICRkYXRhLT5sYXN0KGZ1bmN0aW9uICgkdmFsdWUpIHsKICAgICAgICAgICAgcmV0dXJuICR2YWx1ZSA9PT0gJ2Jheic7CiAgICAgICAgfSwgJ2RlZmF1bHQnKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKCdkZWZhdWx0JywgJHJlc3VsdCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RMYXN0V2l0aERlZmF1bHRBbmRXaXRob3V0Q2FsbGJhY2soKQogICAgewogICAgICAgICRkYXRhID0gbmV3IENvbGxlY3Rpb247CiAgICAgICAgJHJlc3VsdCA9ICRkYXRhLT5sYXN0KG51bGwsICdkZWZhdWx0Jyk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscygnZGVmYXVsdCcsICRyZXN1bHQpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0UG9wUmV0dXJuc0FuZFJlbW92ZXNMYXN0SXRlbUluQ29sbGVjdGlvbigpCiAgICB7CiAgICAgICAgJGMgPSBuZXcgQ29sbGVjdGlvbihbJ2ZvbycsICdiYXInXSk7CgogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoJ2JhcicsICRjLT5wb3AoKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscygnZm9vJywgJGMtPmZpcnN0KCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0U2hpZnRSZXR1cm5zQW5kUmVtb3Zlc0ZpcnN0SXRlbUluQ29sbGVjdGlvbigpCiAgICB7CiAgICAgICAgJGMgPSBuZXcgQ29sbGVjdGlvbihbJ2ZvbycsICdiYXInXSk7CgogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoJ2ZvbycsICRjLT5zaGlmdCgpKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKCdiYXInLCAkYy0+Zmlyc3QoKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RFbXB0eUNvbGxlY3Rpb25Jc0VtcHR5KCkKICAgIHsKICAgICAgICAkYyA9IG5ldyBDb2xsZWN0aW9uOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0VHJ1ZSgkYy0+aXNFbXB0eSgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdEVtcHR5Q29sbGVjdGlvbklzTm90RW1wdHkoKQogICAgewogICAgICAgICRjID0gbmV3IENvbGxlY3Rpb24oWydmb28nLCAnYmFyJ10pOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0RmFsc2UoJGMtPmlzRW1wdHkoKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydFRydWUoJGMtPmlzTm90RW1wdHkoKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RDb2xsZWN0aW9uSXNDb25zdHJ1Y3RlZCgpCiAgICB7CiAgICAgICAgJGNvbGxlY3Rpb24gPSBuZXcgQ29sbGVjdGlvbignZm9vJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydFNhbWUoWydmb28nXSwgJGNvbGxlY3Rpb24tPmFsbCgpKTsKCiAgICAgICAgJGNvbGxlY3Rpb24gPSBuZXcgQ29sbGVjdGlvbigyKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0U2FtZShbMl0sICRjb2xsZWN0aW9uLT5hbGwoKSk7CgogICAgICAgICRjb2xsZWN0aW9uID0gbmV3IENvbGxlY3Rpb24oZmFsc2UpOwogICAgICAgICR0aGlzLT5hc3NlcnRTYW1lKFtmYWxzZV0sICRjb2xsZWN0aW9uLT5hbGwoKSk7CgogICAgICAgICRjb2xsZWN0aW9uID0gbmV3IENvbGxlY3Rpb24obnVsbCk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVtcHR5KCRjb2xsZWN0aW9uLT5hbGwoKSk7CgogICAgICAgICRjb2xsZWN0aW9uID0gbmV3IENvbGxlY3Rpb247CiAgICAgICAgJHRoaXMtPmFzc2VydEVtcHR5KCRjb2xsZWN0aW9uLT5hbGwoKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RDb2xsZWN0aW9uU2h1ZmZsZVdpdGhTZWVkKCkKICAgIHsKICAgICAgICAkY29sbGVjdGlvbiA9IG5ldyBDb2xsZWN0aW9uKChyYW5nZSgwLCAxMDAsIDEwKSkpOwoKICAgICAgICAkZmlyc3RSYW5kb20gPSAkY29sbGVjdGlvbi0+c2h1ZmZsZSgxMjM0KTsKICAgICAgICAkc2Vjb25kUmFuZG9tID0gJGNvbGxlY3Rpb24tPnNodWZmbGUoMTIzNCk7CgogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoJGZpcnN0UmFuZG9tLCAkc2Vjb25kUmFuZG9tKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdEdldEFycmF5YWJsZUl0ZW1zKCkKICAgIHsKICAgICAgICAkY29sbGVjdGlvbiA9IG5ldyBDb2xsZWN0aW9uOwoKICAgICAgICAkY2xhc3MgPSBuZXcgUmVmbGVjdGlvbkNsYXNzKCRjb2xsZWN0aW9uKTsKICAgICAgICAkbWV0aG9kID0gJGNsYXNzLT5nZXRNZXRob2QoJ2dldEFycmF5YWJsZUl0ZW1zJyk7CiAgICAgICAgJG1ldGhvZC0+c2V0QWNjZXNzaWJsZSh0cnVlKTsKCiAgICAgICAgJGl0ZW1zID0gbmV3IFRlc3RBcnJheWFibGVPYmplY3Q7CiAgICAgICAgJGFycmF5ID0gJG1ldGhvZC0+aW52b2tlQXJncygkY29sbGVjdGlvbiwgWyRpdGVtc10pOwogICAgICAgICR0aGlzLT5hc3NlcnRTYW1lKFsnZm9vJyA9PiAnYmFyJ10sICRhcnJheSk7CgogICAgICAgICRpdGVtcyA9IG5ldyBUZXN0SnNvbmFibGVPYmplY3Q7CiAgICAgICAgJGFycmF5ID0gJG1ldGhvZC0+aW52b2tlQXJncygkY29sbGVjdGlvbiwgWyRpdGVtc10pOwogICAgICAgICR0aGlzLT5hc3NlcnRTYW1lKFsnZm9vJyA9PiAnYmFyJ10sICRhcnJheSk7CgogICAgICAgICRpdGVtcyA9IG5ldyBUZXN0SnNvblNlcmlhbGl6ZU9iamVjdDsKICAgICAgICAkYXJyYXkgPSAkbWV0aG9kLT5pbnZva2VBcmdzKCRjb2xsZWN0aW9uLCBbJGl0ZW1zXSk7CiAgICAgICAgJHRoaXMtPmFzc2VydFNhbWUoWydmb28nID0+ICdiYXInXSwgJGFycmF5KTsKCiAgICAgICAgJGl0ZW1zID0gbmV3IENvbGxlY3Rpb24oWydmb28nID0+ICdiYXInXSk7CiAgICAgICAgJGFycmF5ID0gJG1ldGhvZC0+aW52b2tlQXJncygkY29sbGVjdGlvbiwgWyRpdGVtc10pOwogICAgICAgICR0aGlzLT5hc3NlcnRTYW1lKFsnZm9vJyA9PiAnYmFyJ10sICRhcnJheSk7CgogICAgICAgICRpdGVtcyA9IFsnZm9vJyA9PiAnYmFyJ107CiAgICAgICAgJGFycmF5ID0gJG1ldGhvZC0+aW52b2tlQXJncygkY29sbGVjdGlvbiwgWyRpdGVtc10pOwogICAgICAgICR0aGlzLT5hc3NlcnRTYW1lKFsnZm9vJyA9PiAnYmFyJ10sICRhcnJheSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RUb0FycmF5Q2FsbHNUb0FycmF5T25FYWNoSXRlbUluQ29sbGVjdGlvbigpCiAgICB7CiAgICAgICAgJGl0ZW0xID0gbTo6bW9jaygnVGlnaHRlbmNvXENvbGxlY3RcQ29udHJhY3RzXFN1cHBvcnRcQXJyYXlhYmxlJyk7CiAgICAgICAgJGl0ZW0xLT5zaG91bGRSZWNlaXZlKCd0b0FycmF5JyktPm9uY2UoKS0+YW5kUmV0dXJuKCdmb28uYXJyYXknKTsKICAgICAgICAkaXRlbTIgPSBtOjptb2NrKCdUaWdodGVuY29cQ29sbGVjdFxDb250cmFjdHNcU3VwcG9ydFxBcnJheWFibGUnKTsKICAgICAgICAkaXRlbTItPnNob3VsZFJlY2VpdmUoJ3RvQXJyYXknKS0+b25jZSgpLT5hbmRSZXR1cm4oJ2Jhci5hcnJheScpOwogICAgICAgICRjID0gbmV3IENvbGxlY3Rpb24oWyRpdGVtMSwgJGl0ZW0yXSk7CiAgICAgICAgJHJlc3VsdHMgPSAkYy0+dG9BcnJheSgpOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsnZm9vLmFycmF5JywgJ2Jhci5hcnJheSddLCAkcmVzdWx0cyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RKc29uU2VyaWFsaXplQ2FsbHNUb0FycmF5T3JKc29uU2VyaWFsaXplT25FYWNoSXRlbUluQ29sbGVjdGlvbigpCiAgICB7CiAgICAgICAgJGl0ZW0xID0gbTo6bW9jaygnSnNvblNlcmlhbGl6YWJsZScpOwogICAgICAgICRpdGVtMS0+c2hvdWxkUmVjZWl2ZSgnanNvblNlcmlhbGl6ZScpLT5vbmNlKCktPmFuZFJldHVybignZm9vLmpzb24nKTsKICAgICAgICAkaXRlbTIgPSBtOjptb2NrKCdUaWdodGVuY29cQ29sbGVjdFxDb250cmFjdHNcU3VwcG9ydFxBcnJheWFibGUnKTsKICAgICAgICAkaXRlbTItPnNob3VsZFJlY2VpdmUoJ3RvQXJyYXknKS0+b25jZSgpLT5hbmRSZXR1cm4oJ2Jhci5hcnJheScpOwogICAgICAgICRjID0gbmV3IENvbGxlY3Rpb24oWyRpdGVtMSwgJGl0ZW0yXSk7CiAgICAgICAgJHJlc3VsdHMgPSAkYy0+anNvblNlcmlhbGl6ZSgpOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsnZm9vLmpzb24nLCAnYmFyLmFycmF5J10sICRyZXN1bHRzKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdFRvSnNvbkVuY29kZXNUaGVKc29uU2VyaWFsaXplUmVzdWx0KCkKICAgIHsKICAgICAgICAkYyA9ICR0aGlzLT5nZXRNb2NrQnVpbGRlcihDb2xsZWN0aW9uOjpjbGFzcyktPnNldE1ldGhvZHMoWydqc29uU2VyaWFsaXplJ10pLT5nZXRNb2NrKCk7CiAgICAgICAgJGMtPmV4cGVjdHMoJHRoaXMtPm9uY2UoKSktPm1ldGhvZCgnanNvblNlcmlhbGl6ZScpLT53aWxsKCR0aGlzLT5yZXR1cm5WYWx1ZSgnZm9vJykpOwogICAgICAgICRyZXN1bHRzID0gJGMtPnRvSnNvbigpOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0SnNvblN0cmluZ0VxdWFsc0pzb25TdHJpbmcoanNvbl9lbmNvZGUoJ2ZvbycpLCAkcmVzdWx0cyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RDYXN0aW5nVG9TdHJpbmdKc29uRW5jb2Rlc1RoZVRvQXJyYXlSZXN1bHQoKQogICAgewogICAgICAgICRjID0gJHRoaXMtPmdldE1vY2tCdWlsZGVyKENvbGxlY3Rpb246OmNsYXNzKS0+c2V0TWV0aG9kcyhbJ2pzb25TZXJpYWxpemUnXSktPmdldE1vY2soKTsKICAgICAgICAkYy0+ZXhwZWN0cygkdGhpcy0+b25jZSgpKS0+bWV0aG9kKCdqc29uU2VyaWFsaXplJyktPndpbGwoJHRoaXMtPnJldHVyblZhbHVlKCdmb28nKSk7CgogICAgICAgICR0aGlzLT5hc3NlcnRKc29uU3RyaW5nRXF1YWxzSnNvblN0cmluZyhqc29uX2VuY29kZSgnZm9vJyksIChzdHJpbmcpICRjKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdE9mZnNldEFjY2VzcygpCiAgICB7CiAgICAgICAgJGMgPSBuZXcgQ29sbGVjdGlvbihbJ25hbWUnID0+ICd0YXlsb3InXSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscygndGF5bG9yJywgJGNbJ25hbWUnXSk7CiAgICAgICAgJGNbJ25hbWUnXSA9ICdkYXlsZSc7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscygnZGF5bGUnLCAkY1snbmFtZSddKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0VHJ1ZShpc3NldCgkY1snbmFtZSddKSk7CiAgICAgICAgdW5zZXQoJGNbJ25hbWUnXSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEZhbHNlKGlzc2V0KCRjWyduYW1lJ10pKTsKICAgICAgICAkY1tdID0gJ2phc29uJzsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKCdqYXNvbicsICRjWzBdKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdEFycmF5QWNjZXNzT2Zmc2V0RXhpc3RzKCkKICAgIHsKICAgICAgICAkYyA9IG5ldyBDb2xsZWN0aW9uKFsnZm9vJywgJ2JhciddKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0VHJ1ZSgkYy0+b2Zmc2V0RXhpc3RzKDApKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0VHJ1ZSgkYy0+b2Zmc2V0RXhpc3RzKDEpKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RmFsc2UoJGMtPm9mZnNldEV4aXN0cygxMDAwKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RBcnJheUFjY2Vzc09mZnNldEdldCgpCiAgICB7CiAgICAgICAgJGMgPSBuZXcgQ29sbGVjdGlvbihbJ2ZvbycsICdiYXInXSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscygnZm9vJywgJGMtPm9mZnNldEdldCgwKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscygnYmFyJywgJGMtPm9mZnNldEdldCgxKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RBcnJheUFjY2Vzc09mZnNldFNldCgpCiAgICB7CiAgICAgICAgJGMgPSBuZXcgQ29sbGVjdGlvbihbJ2ZvbycsICdmb28nXSk7CgogICAgICAgICRjLT5vZmZzZXRTZXQoMSwgJ2JhcicpOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoJ2JhcicsICRjWzFdKTsKCiAgICAgICAgJGMtPm9mZnNldFNldChudWxsLCAncXV4Jyk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscygncXV4JywgJGNbMl0pOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0QXJyYXlBY2Nlc3NPZmZzZXRVbnNldCgpCiAgICB7CiAgICAgICAgJGMgPSBuZXcgQ29sbGVjdGlvbihbJ2ZvbycsICdiYXInXSk7CgogICAgICAgICRjLT5vZmZzZXRVbnNldCgxKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RmFsc2UoaXNzZXQoJGNbMV0pKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdEZvcmdldFNpbmdsZUtleSgpCiAgICB7CiAgICAgICAgJGMgPSBuZXcgQ29sbGVjdGlvbihbJ2ZvbycsICdiYXInXSk7CiAgICAgICAgJGMtPmZvcmdldCgwKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RmFsc2UoaXNzZXQoJGNbJ2ZvbyddKSk7CgogICAgICAgICRjID0gbmV3IENvbGxlY3Rpb24oWydmb28nID0+ICdiYXInLCAnYmF6JyA9PiAncXV4J10pOwogICAgICAgICRjLT5mb3JnZXQoJ2ZvbycpOwogICAgICAgICR0aGlzLT5hc3NlcnRGYWxzZShpc3NldCgkY1snZm9vJ10pKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdEZvcmdldEFycmF5T2ZLZXlzKCkKICAgIHsKICAgICAgICAkYyA9IG5ldyBDb2xsZWN0aW9uKFsnZm9vJywgJ2JhcicsICdiYXonXSk7CiAgICAgICAgJGMtPmZvcmdldChbMCwgMl0pOwogICAgICAgICR0aGlzLT5hc3NlcnRGYWxzZShpc3NldCgkY1swXSkpOwogICAgICAgICR0aGlzLT5hc3NlcnRGYWxzZShpc3NldCgkY1syXSkpOwogICAgICAgICR0aGlzLT5hc3NlcnRUcnVlKGlzc2V0KCRjWzFdKSk7CgogICAgICAgICRjID0gbmV3IENvbGxlY3Rpb24oWyduYW1lJyA9PiAndGF5bG9yJywgJ2ZvbycgPT4gJ2JhcicsICdiYXonID0+ICdxdXgnXSk7CiAgICAgICAgJGMtPmZvcmdldChbJ2ZvbycsICdiYXonXSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEZhbHNlKGlzc2V0KCRjWydmb28nXSkpOwogICAgICAgICR0aGlzLT5hc3NlcnRGYWxzZShpc3NldCgkY1snYmF6J10pKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0VHJ1ZShpc3NldCgkY1snbmFtZSddKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RDb3VudGFibGUoKQogICAgewogICAgICAgICRjID0gbmV3IENvbGxlY3Rpb24oWydmb28nLCAnYmFyJ10pOwogICAgICAgICR0aGlzLT5hc3NlcnRDb3VudCgyLCAkYyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RJdGVyYWJsZSgpCiAgICB7CiAgICAgICAgJGMgPSBuZXcgQ29sbGVjdGlvbihbJ2ZvbyddKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0SW5zdGFuY2VPZignQXJyYXlJdGVyYXRvcicsICRjLT5nZXRJdGVyYXRvcigpKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsnZm9vJ10sICRjLT5nZXRJdGVyYXRvcigpLT5nZXRBcnJheUNvcHkoKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RDYWNoaW5nSXRlcmF0b3IoKQogICAgewogICAgICAgICRjID0gbmV3IENvbGxlY3Rpb24oWydmb28nXSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEluc3RhbmNlT2YoJ0NhY2hpbmdJdGVyYXRvcicsICRjLT5nZXRDYWNoaW5nSXRlcmF0b3IoKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RGaWx0ZXIoKQogICAgewogICAgICAgICRjID0gbmV3IENvbGxlY3Rpb24oW1snaWQnID0+IDEsICduYW1lJyA9PiAnSGVsbG8nXSwgWydpZCcgPT4gMiwgJ25hbWUnID0+ICdXb3JsZCddXSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbMSA9PiBbJ2lkJyA9PiAyLCAnbmFtZScgPT4gJ1dvcmxkJ11dLCAkYy0+ZmlsdGVyKGZ1bmN0aW9uICgkaXRlbSkgewogICAgICAgICAgICByZXR1cm4gJGl0ZW1bJ2lkJ10gPT0gMjsKICAgICAgICB9KS0+YWxsKCkpOwoKICAgICAgICAkYyA9IG5ldyBDb2xsZWN0aW9uKFsnJywgJ0hlbGxvJywgJycsICdXb3JsZCddKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsnSGVsbG8nLCAnV29ybGQnXSwgJGMtPmZpbHRlcigpLT52YWx1ZXMoKS0+dG9BcnJheSgpKTsKCiAgICAgICAgJGMgPSBuZXcgQ29sbGVjdGlvbihbJ2lkJyA9PiAxLCAnZmlyc3QnID0+ICdIZWxsbycsICdzZWNvbmQnID0+ICdXb3JsZCddKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsnZmlyc3QnID0+ICdIZWxsbycsICdzZWNvbmQnID0+ICdXb3JsZCddLCAkYy0+ZmlsdGVyKGZ1bmN0aW9uICgkaXRlbSwgJGtleSkgewogICAgICAgICAgICByZXR1cm4gJGtleSAhPSAnaWQnOwogICAgICAgIH0pLT5hbGwoKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RIaWdoZXJPcmRlcktleUJ5KCkKICAgIHsKICAgICAgICAkYyA9IG5ldyBDb2xsZWN0aW9uKFsKICAgICAgICAgICAgWydpZCcgPT4gJ2lkMScsICduYW1lJyA9PiAnZmlyc3QnXSwKICAgICAgICAgICAgWydpZCcgPT4gJ2lkMicsICduYW1lJyA9PiAnc2Vjb25kJ10sCiAgICAgICAgXSk7CgogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWydpZDEnID0+ICdmaXJzdCcsICdpZDInID0+ICdzZWNvbmQnXSwgJGMtPmtleUJ5LT5pZC0+bWFwLT5uYW1lLT5hbGwoKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RIaWdoZXJPcmRlclVuaXF1ZSgpCiAgICB7CiAgICAgICAgJGMgPSBuZXcgQ29sbGVjdGlvbihbCiAgICAgICAgICAgIFsnaWQnID0+ICcxJywgJ25hbWUnID0+ICdmaXJzdCddLAogICAgICAgICAgICBbJ2lkJyA9PiAnMScsICduYW1lJyA9PiAnc2Vjb25kJ10sCiAgICAgICAgXSk7CgogICAgICAgICR0aGlzLT5hc3NlcnRDb3VudCgxLCAkYy0+dW5pcXVlLT5pZCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RIaWdoZXJPcmRlckZpbHRlcigpCiAgICB7CiAgICAgICAgJGMgPSBuZXcgQ29sbGVjdGlvbihbCiAgICAgICAgICAgIG5ldyBjbGFzcyB7CiAgICAgICAgICAgICAgICBwdWJsaWMgJG5hbWUgPSAnQWxleCc7CgogICAgICAgICAgICAgICAgcHVibGljIGZ1bmN0aW9uIGFjdGl2ZSgpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIG5ldyBjbGFzcyB7CiAgICAgICAgICAgICAgICBwdWJsaWMgJG5hbWUgPSAnSm9obic7CgogICAgICAgICAgICAgICAgcHVibGljIGZ1bmN0aW9uIGFjdGl2ZSgpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgIF0pOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0Q291bnQoMSwgJGMtPmZpbHRlci0+YWN0aXZlKCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0V2hlcmUoKQogICAgewogICAgICAgICRjID0gbmV3IENvbGxlY3Rpb24oW1sndicgPT4gMV0sIFsndicgPT4gMl0sIFsndicgPT4gM10sIFsndicgPT4gJzMnXSwgWyd2JyA9PiA0XV0pOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKAogICAgICAgICAgICBbWyd2JyA9PiAzXSwgWyd2JyA9PiAnMyddXSwKICAgICAgICAgICAgJGMtPndoZXJlKCd2JywgMyktPnZhbHVlcygpLT5hbGwoKQogICAgICAgICk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscygKICAgICAgICAgICAgW1sndicgPT4gM10sIFsndicgPT4gJzMnXV0sCiAgICAgICAgICAgICRjLT53aGVyZSgndicsICc9JywgMyktPnZhbHVlcygpLT5hbGwoKQogICAgICAgICk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscygKICAgICAgICAgICAgW1sndicgPT4gM10sIFsndicgPT4gJzMnXV0sCiAgICAgICAgICAgICRjLT53aGVyZSgndicsICc9PScsIDMpLT52YWx1ZXMoKS0+YWxsKCkKICAgICAgICApOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoCiAgICAgICAgICAgIFtbJ3YnID0+IDNdLCBbJ3YnID0+ICczJ11dLAogICAgICAgICAgICAkYy0+d2hlcmUoJ3YnLCAnZ2FyYmFnZScsIDMpLT52YWx1ZXMoKS0+YWxsKCkKICAgICAgICApOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoCiAgICAgICAgICAgIFtbJ3YnID0+IDNdXSwKICAgICAgICAgICAgJGMtPndoZXJlKCd2JywgJz09PScsIDMpLT52YWx1ZXMoKS0+YWxsKCkKICAgICAgICApOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKAogICAgICAgICAgICBbWyd2JyA9PiAxXSwgWyd2JyA9PiAyXSwgWyd2JyA9PiA0XV0sCiAgICAgICAgICAgICRjLT53aGVyZSgndicsICc8PicsIDMpLT52YWx1ZXMoKS0+YWxsKCkKICAgICAgICApOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoCiAgICAgICAgICAgIFtbJ3YnID0+IDFdLCBbJ3YnID0+IDJdLCBbJ3YnID0+IDRdXSwKICAgICAgICAgICAgJGMtPndoZXJlKCd2JywgJyE9JywgMyktPnZhbHVlcygpLT5hbGwoKQogICAgICAgICk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscygKICAgICAgICAgICAgW1sndicgPT4gMV0sIFsndicgPT4gMl0sIFsndicgPT4gJzMnXSwgWyd2JyA9PiA0XV0sCiAgICAgICAgICAgICRjLT53aGVyZSgndicsICchPT0nLCAzKS0+dmFsdWVzKCktPmFsbCgpCiAgICAgICAgKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKAogICAgICAgICAgICBbWyd2JyA9PiAxXSwgWyd2JyA9PiAyXSwgWyd2JyA9PiAzXSwgWyd2JyA9PiAnMyddXSwKICAgICAgICAgICAgJGMtPndoZXJlKCd2JywgJzw9JywgMyktPnZhbHVlcygpLT5hbGwoKQogICAgICAgICk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscygKICAgICAgICAgICAgW1sndicgPT4gM10sIFsndicgPT4gJzMnXSwgWyd2JyA9PiA0XV0sCiAgICAgICAgICAgICRjLT53aGVyZSgndicsICc+PScsIDMpLT52YWx1ZXMoKS0+YWxsKCkKICAgICAgICApOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoCiAgICAgICAgICAgIFtbJ3YnID0+IDFdLCBbJ3YnID0+IDJdXSwKICAgICAgICAgICAgJGMtPndoZXJlKCd2JywgJzwnLCAzKS0+dmFsdWVzKCktPmFsbCgpCiAgICAgICAgKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKAogICAgICAgICAgICBbWyd2JyA9PiA0XV0sCiAgICAgICAgICAgICRjLT53aGVyZSgndicsICc+JywgMyktPnZhbHVlcygpLT5hbGwoKQogICAgICAgICk7CgogICAgICAgICRvYmplY3QgPSAob2JqZWN0KSBbJ2ZvbycgPT4gJ2JhciddOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKAogICAgICAgICAgICBbXSwKICAgICAgICAgICAgJGMtPndoZXJlKCd2JywgJG9iamVjdCktPnZhbHVlcygpLT5hbGwoKQogICAgICAgICk7CgogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoCiAgICAgICAgICAgIFtbJ3YnID0+IDFdLCBbJ3YnID0+IDJdLCBbJ3YnID0+IDNdLCBbJ3YnID0+ICczJ10sIFsndicgPT4gNF1dLAogICAgICAgICAgICAkYy0+d2hlcmUoJ3YnLCAnPD4nLCAkb2JqZWN0KS0+dmFsdWVzKCktPmFsbCgpCiAgICAgICAgKTsKCiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscygKICAgICAgICAgICAgW1sndicgPT4gMV0sIFsndicgPT4gMl0sIFsndicgPT4gM10sIFsndicgPT4gJzMnXSwgWyd2JyA9PiA0XV0sCiAgICAgICAgICAgICRjLT53aGVyZSgndicsICchPScsICRvYmplY3QpLT52YWx1ZXMoKS0+YWxsKCkKICAgICAgICApOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKAogICAgICAgICAgICBbWyd2JyA9PiAxXSwgWyd2JyA9PiAyXSwgWyd2JyA9PiAzXSwgWyd2JyA9PiAnMyddLCBbJ3YnID0+IDRdXSwKICAgICAgICAgICAgJGMtPndoZXJlKCd2JywgJyE9PScsICRvYmplY3QpLT52YWx1ZXMoKS0+YWxsKCkKICAgICAgICApOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKAogICAgICAgICAgICBbXSwKICAgICAgICAgICAgJGMtPndoZXJlKCd2JywgJz4nLCAkb2JqZWN0KS0+dmFsdWVzKCktPmFsbCgpCiAgICAgICAgKTsKCiAgICAgICAgJGMgPSBuZXcgQ29sbGVjdGlvbihbWyd2JyA9PiAxXSwgWyd2JyA9PiAkb2JqZWN0XV0pOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoCiAgICAgICAgICAgIFtbJ3YnID0+ICRvYmplY3RdXSwKICAgICAgICAgICAgJGMtPndoZXJlKCd2JywgJG9iamVjdCktPnZhbHVlcygpLT5hbGwoKQogICAgICAgICk7CgogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoCiAgICAgICAgICAgIFtbJ3YnID0+IDFdLCBbJ3YnID0+ICRvYmplY3RdXSwKICAgICAgICAgICAgJGMtPndoZXJlKCd2JywgJzw+JywgbnVsbCktPnZhbHVlcygpLT5hbGwoKQogICAgICAgICk7CgogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoCiAgICAgICAgICAgIFtdLAogICAgICAgICAgICAkYy0+d2hlcmUoJ3YnLCAnPCcsIG51bGwpLT52YWx1ZXMoKS0+YWxsKCkKICAgICAgICApOwoKICAgICAgICAkYyA9IG5ldyBDb2xsZWN0aW9uKFtbJ3YnID0+IDFdLCBbJ3YnID0+IG5ldyBcVGlnaHRlbmNvXENvbGxlY3RcU3VwcG9ydFxIdG1sU3RyaW5nKCdoZWxsbycpXV0pOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoCiAgICAgICAgICAgIFtbJ3YnID0+IG5ldyBcVGlnaHRlbmNvXENvbGxlY3RcU3VwcG9ydFxIdG1sU3RyaW5nKCdoZWxsbycpXV0sCiAgICAgICAgICAgICRjLT53aGVyZSgndicsICdoZWxsbycpLT52YWx1ZXMoKS0+YWxsKCkKICAgICAgICApOwoKICAgICAgICAkYyA9IG5ldyBDb2xsZWN0aW9uKFtbJ3YnID0+IDFdLCBbJ3YnID0+ICdoZWxsbyddXSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscygKICAgICAgICAgICAgW1sndicgPT4gJ2hlbGxvJ11dLAogICAgICAgICAgICAkYy0+d2hlcmUoJ3YnLCBuZXcgXFRpZ2h0ZW5jb1xDb2xsZWN0XFN1cHBvcnRcSHRtbFN0cmluZygnaGVsbG8nKSktPnZhbHVlcygpLT5hbGwoKQogICAgICAgICk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RXaGVyZVN0cmljdCgpCiAgICB7CiAgICAgICAgJGMgPSBuZXcgQ29sbGVjdGlvbihbWyd2JyA9PiAzXSwgWyd2JyA9PiAnMyddXSk7CgogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoCiAgICAgICAgICAgIFtbJ3YnID0+IDNdXSwKICAgICAgICAgICAgJGMtPndoZXJlU3RyaWN0KCd2JywgMyktPnZhbHVlcygpLT5hbGwoKQogICAgICAgICk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RXaGVyZUluc3RhbmNlT2YoKQogICAgewogICAgICAgICRjID0gbmV3IENvbGxlY3Rpb24oW25ldyBzdGRDbGFzcywgbmV3IHN0ZENsYXNzLCBuZXcgQ29sbGVjdGlvbiwgbmV3IHN0ZENsYXNzXSk7CiAgICAgICAgJHRoaXMtPmFzc2VydENvdW50KDMsICRjLT53aGVyZUluc3RhbmNlT2Yoc3RkQ2xhc3M6OmNsYXNzKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RXaGVyZUluKCkKICAgIHsKICAgICAgICAkYyA9IG5ldyBDb2xsZWN0aW9uKFtbJ3YnID0+IDFdLCBbJ3YnID0+IDJdLCBbJ3YnID0+IDNdLCBbJ3YnID0+ICczJ10sIFsndicgPT4gNF1dKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFtbJ3YnID0+IDFdLCBbJ3YnID0+IDNdLCBbJ3YnID0+ICczJ11dLCAkYy0+d2hlcmVJbigndicsIFsxLCAzXSktPnZhbHVlcygpLT5hbGwoKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RXaGVyZUluU3RyaWN0KCkKICAgIHsKICAgICAgICAkYyA9IG5ldyBDb2xsZWN0aW9uKFtbJ3YnID0+IDFdLCBbJ3YnID0+IDJdLCBbJ3YnID0+IDNdLCBbJ3YnID0+ICczJ10sIFsndicgPT4gNF1dKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFtbJ3YnID0+IDFdLCBbJ3YnID0+IDNdXSwgJGMtPndoZXJlSW5TdHJpY3QoJ3YnLCBbMSwgM10pLT52YWx1ZXMoKS0+YWxsKCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0V2hlcmVOb3RJbigpCiAgICB7CiAgICAgICAgJGMgPSBuZXcgQ29sbGVjdGlvbihbWyd2JyA9PiAxXSwgWyd2JyA9PiAyXSwgWyd2JyA9PiAzXSwgWyd2JyA9PiAnMyddLCBbJ3YnID0+IDRdXSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbWyd2JyA9PiAyXSwgWyd2JyA9PiA0XV0sICRjLT53aGVyZU5vdEluKCd2JywgWzEsIDNdKS0+dmFsdWVzKCktPmFsbCgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdFdoZXJlTm90SW5TdHJpY3QoKQogICAgewogICAgICAgICRjID0gbmV3IENvbGxlY3Rpb24oW1sndicgPT4gMV0sIFsndicgPT4gMl0sIFsndicgPT4gM10sIFsndicgPT4gJzMnXSwgWyd2JyA9PiA0XV0pOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoW1sndicgPT4gMl0sIFsndicgPT4gJzMnXSwgWyd2JyA9PiA0XV0sICRjLT53aGVyZU5vdEluU3RyaWN0KCd2JywgWzEsIDNdKS0+dmFsdWVzKCktPmFsbCgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdFZhbHVlcygpCiAgICB7CiAgICAgICAgJGMgPSBuZXcgQ29sbGVjdGlvbihbWydpZCcgPT4gMSwgJ25hbWUnID0+ICdIZWxsbyddLCBbJ2lkJyA9PiAyLCAnbmFtZScgPT4gJ1dvcmxkJ11dKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFtbJ2lkJyA9PiAyLCAnbmFtZScgPT4gJ1dvcmxkJ11dLCAkYy0+ZmlsdGVyKGZ1bmN0aW9uICgkaXRlbSkgewogICAgICAgICAgICByZXR1cm4gJGl0ZW1bJ2lkJ10gPT0gMjsKICAgICAgICB9KS0+dmFsdWVzKCktPmFsbCgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdEZsYXR0ZW4oKQogICAgewogICAgICAgIC8vIEZsYXQgYXJyYXlzIGFyZSB1bmFmZmVjdGVkCiAgICAgICAgJGMgPSBuZXcgQ29sbGVjdGlvbihbJyNmb28nLCAnI2JhcicsICcjYmF6J10pOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWycjZm9vJywgJyNiYXInLCAnI2JheiddLCAkYy0+ZmxhdHRlbigpLT5hbGwoKSk7CgogICAgICAgIC8vIE5lc3RlZCBhcnJheXMgYXJlIGZsYXR0ZW5lZCB3aXRoIGV4aXN0aW5nIGZsYXQgaXRlbXMKICAgICAgICAkYyA9IG5ldyBDb2xsZWN0aW9uKFtbJyNmb28nLCAnI2JhciddLCAnI2JheiddKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsnI2ZvbycsICcjYmFyJywgJyNiYXonXSwgJGMtPmZsYXR0ZW4oKS0+YWxsKCkpOwoKICAgICAgICAvLyBTZXRzIG9mIG5lc3RlZCBhcnJheXMgYXJlIGZsYXR0ZW5lZAogICAgICAgICRjID0gbmV3IENvbGxlY3Rpb24oW1snI2ZvbycsICcjYmFyJ10sIFsnI2JheiddXSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJyNmb28nLCAnI2JhcicsICcjYmF6J10sICRjLT5mbGF0dGVuKCktPmFsbCgpKTsKCiAgICAgICAgLy8gRGVlcGx5IG5lc3RlZCBhcnJheXMgYXJlIGZsYXR0ZW5lZAogICAgICAgICRjID0gbmV3IENvbGxlY3Rpb24oW1snI2ZvbycsIFsnI2JhciddXSwgWycjYmF6J11dKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsnI2ZvbycsICcjYmFyJywgJyNiYXonXSwgJGMtPmZsYXR0ZW4oKS0+YWxsKCkpOwoKICAgICAgICAvLyBOZXN0ZWQgY29sbGVjdGlvbnMgYXJlIGZsYXR0ZW5lZCBhbG9uZ3NpZGUgYXJyYXlzCiAgICAgICAgJGMgPSBuZXcgQ29sbGVjdGlvbihbbmV3IENvbGxlY3Rpb24oWycjZm9vJywgJyNiYXInXSksIFsnI2JheiddXSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJyNmb28nLCAnI2JhcicsICcjYmF6J10sICRjLT5mbGF0dGVuKCktPmFsbCgpKTsKCiAgICAgICAgLy8gTmVzdGVkIGNvbGxlY3Rpb25zIGNvbnRhaW5pbmcgcGxhaW4gYXJyYXlzIGFyZSBmbGF0dGVuZWQKICAgICAgICAkYyA9IG5ldyBDb2xsZWN0aW9uKFtuZXcgQ29sbGVjdGlvbihbJyNmb28nLCBbJyNiYXInXV0pLCBbJyNiYXonXV0pOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWycjZm9vJywgJyNiYXInLCAnI2JheiddLCAkYy0+ZmxhdHRlbigpLT5hbGwoKSk7CgogICAgICAgIC8vIE5lc3RlZCBhcnJheXMgY29udGFpbmluZyBjb2xsZWN0aW9ucyBhcmUgZmxhdHRlbmVkCiAgICAgICAgJGMgPSBuZXcgQ29sbGVjdGlvbihbWycjZm9vJywgbmV3IENvbGxlY3Rpb24oWycjYmFyJ10pXSwgWycjYmF6J11dKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsnI2ZvbycsICcjYmFyJywgJyNiYXonXSwgJGMtPmZsYXR0ZW4oKS0+YWxsKCkpOwoKICAgICAgICAvLyBOZXN0ZWQgYXJyYXlzIGNvbnRhaW5pbmcgY29sbGVjdGlvbnMgY29udGFpbmluZyBhcnJheXMgYXJlIGZsYXR0ZW5lZAogICAgICAgICRjID0gbmV3IENvbGxlY3Rpb24oW1snI2ZvbycsIG5ldyBDb2xsZWN0aW9uKFsnI2JhcicsIFsnI3phcCddXSldLCBbJyNiYXonXV0pOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWycjZm9vJywgJyNiYXInLCAnI3phcCcsICcjYmF6J10sICRjLT5mbGF0dGVuKCktPmFsbCgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdEZsYXR0ZW5XaXRoRGVwdGgoKQogICAgewogICAgICAgIC8vIE5vIGRlcHRoIGZsYXR0ZW5zIHJlY3Vyc2l2ZWx5CiAgICAgICAgJGMgPSBuZXcgQ29sbGVjdGlvbihbWycjZm9vJywgWycjYmFyJywgWycjYmF6J11dXSwgJyN6YXAnXSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJyNmb28nLCAnI2JhcicsICcjYmF6JywgJyN6YXAnXSwgJGMtPmZsYXR0ZW4oKS0+YWxsKCkpOwoKICAgICAgICAvLyBTcGVjaWZ5aW5nIGEgZGVwdGggb25seSBmbGF0dGVucyB0byB0aGF0IGRlcHRoCiAgICAgICAgJGMgPSBuZXcgQ29sbGVjdGlvbihbWycjZm9vJywgWycjYmFyJywgWycjYmF6J11dXSwgJyN6YXAnXSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJyNmb28nLCBbJyNiYXInLCBbJyNiYXonXV0sICcjemFwJ10sICRjLT5mbGF0dGVuKDEpLT5hbGwoKSk7CgogICAgICAgICRjID0gbmV3IENvbGxlY3Rpb24oW1snI2ZvbycsIFsnI2JhcicsIFsnI2JheiddXV0sICcjemFwJ10pOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWycjZm9vJywgJyNiYXInLCBbJyNiYXonXSwgJyN6YXAnXSwgJGMtPmZsYXR0ZW4oMiktPmFsbCgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdEZsYXR0ZW5JZ25vcmVzS2V5cygpCiAgICB7CiAgICAgICAgLy8gTm8gZGVwdGggaWdub3JlcyBrZXlzCiAgICAgICAgJGMgPSBuZXcgQ29sbGVjdGlvbihbJyNmb28nLCBbJ2tleScgPT4gJyNiYXInXSwgWydrZXknID0+ICcjYmF6J10sICdrZXknID0+ICcjemFwJ10pOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWycjZm9vJywgJyNiYXInLCAnI2JheicsICcjemFwJ10sICRjLT5mbGF0dGVuKCktPmFsbCgpKTsKCiAgICAgICAgLy8gRGVwdGggb2YgMSBpZ25vcmVzIGtleXMKICAgICAgICAkYyA9IG5ldyBDb2xsZWN0aW9uKFsnI2ZvbycsIFsna2V5JyA9PiAnI2JhciddLCBbJ2tleScgPT4gJyNiYXonXSwgJ2tleScgPT4gJyN6YXAnXSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJyNmb28nLCAnI2JhcicsICcjYmF6JywgJyN6YXAnXSwgJGMtPmZsYXR0ZW4oMSktPmFsbCgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdE1lcmdlTnVsbCgpCiAgICB7CiAgICAgICAgJGMgPSBuZXcgQ29sbGVjdGlvbihbJ25hbWUnID0+ICdIZWxsbyddKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsnbmFtZScgPT4gJ0hlbGxvJ10sICRjLT5tZXJnZShudWxsKS0+YWxsKCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0TWVyZ2VBcnJheSgpCiAgICB7CiAgICAgICAgJGMgPSBuZXcgQ29sbGVjdGlvbihbJ25hbWUnID0+ICdIZWxsbyddKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsnbmFtZScgPT4gJ0hlbGxvJywgJ2lkJyA9PiAxXSwgJGMtPm1lcmdlKFsnaWQnID0+IDFdKS0+YWxsKCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0TWVyZ2VDb2xsZWN0aW9uKCkKICAgIHsKICAgICAgICAkYyA9IG5ldyBDb2xsZWN0aW9uKFsnbmFtZScgPT4gJ0hlbGxvJ10pOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWyduYW1lJyA9PiAnV29ybGQnLCAnaWQnID0+IDFdLCAkYy0+bWVyZ2UobmV3IENvbGxlY3Rpb24oWyduYW1lJyA9PiAnV29ybGQnLCAnaWQnID0+IDFdKSktPmFsbCgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdFVuaW9uTnVsbCgpCiAgICB7CiAgICAgICAgJGMgPSBuZXcgQ29sbGVjdGlvbihbJ25hbWUnID0+ICdIZWxsbyddKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsnbmFtZScgPT4gJ0hlbGxvJ10sICRjLT51bmlvbihudWxsKS0+YWxsKCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0VW5pb25BcnJheSgpCiAgICB7CiAgICAgICAgJGMgPSBuZXcgQ29sbGVjdGlvbihbJ25hbWUnID0+ICdIZWxsbyddKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsnbmFtZScgPT4gJ0hlbGxvJywgJ2lkJyA9PiAxXSwgJGMtPnVuaW9uKFsnaWQnID0+IDFdKS0+YWxsKCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0VW5pb25Db2xsZWN0aW9uKCkKICAgIHsKICAgICAgICAkYyA9IG5ldyBDb2xsZWN0aW9uKFsnbmFtZScgPT4gJ0hlbGxvJ10pOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWyduYW1lJyA9PiAnSGVsbG8nLCAnaWQnID0+IDFdLCAkYy0+dW5pb24obmV3IENvbGxlY3Rpb24oWyduYW1lJyA9PiAnV29ybGQnLCAnaWQnID0+IDFdKSktPmFsbCgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdERpZmZDb2xsZWN0aW9uKCkKICAgIHsKICAgICAgICAkYyA9IG5ldyBDb2xsZWN0aW9uKFsnaWQnID0+IDEsICdmaXJzdF93b3JkJyA9PiAnSGVsbG8nXSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJ2lkJyA9PiAxXSwgJGMtPmRpZmYobmV3IENvbGxlY3Rpb24oWydmaXJzdF93b3JkJyA9PiAnSGVsbG8nLCAnbGFzdF93b3JkJyA9PiAnV29ybGQnXSkpLT5hbGwoKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3REaWZmVXNpbmdXaXRoQ29sbGVjdGlvbigpCiAgICB7CiAgICAgICAgJGMgPSBuZXcgQ29sbGVjdGlvbihbJ2VuX0dCJywgJ2ZyJywgJ0hSJ10pOwogICAgICAgIC8vIGRlbW9uc3RyYXRlIHRoYXQgZGlmZktleXMgd29udCBzdXBwb3J0IGNhc2UgaW5zZW5zaXRpdml0eQogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWydlbl9HQicsICdmcicsICdIUiddLCAkYy0+ZGlmZihuZXcgQ29sbGVjdGlvbihbJ2VuX2diJywgJ2hyJ10pKS0+dmFsdWVzKCktPnRvQXJyYXkoKSk7CiAgICAgICAgLy8gYWxsb3cgZm9yIGNhc2UgaW5zZW5zaXRpdmUgZGlmZmVyZW5jZQogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWydmciddLCAkYy0+ZGlmZlVzaW5nKG5ldyBDb2xsZWN0aW9uKFsnZW5fZ2InLCAnaHInXSksICdzdHJjYXNlY21wJyktPnZhbHVlcygpLT50b0FycmF5KCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0RGlmZlVzaW5nV2l0aE51bGwoKQogICAgewogICAgICAgICRjID0gbmV3IENvbGxlY3Rpb24oWydlbl9HQicsICdmcicsICdIUiddKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsnZW5fR0InLCAnZnInLCAnSFInXSwgJGMtPmRpZmZVc2luZyhudWxsLCAnc3RyY2FzZWNtcCcpLT52YWx1ZXMoKS0+dG9BcnJheSgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdERpZmZOdWxsKCkKICAgIHsKICAgICAgICAkYyA9IG5ldyBDb2xsZWN0aW9uKFsnaWQnID0+IDEsICdmaXJzdF93b3JkJyA9PiAnSGVsbG8nXSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJ2lkJyA9PiAxLCAnZmlyc3Rfd29yZCcgPT4gJ0hlbGxvJ10sICRjLT5kaWZmKG51bGwpLT5hbGwoKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3REaWZmS2V5cygpCiAgICB7CiAgICAgICAgJGMxID0gbmV3IENvbGxlY3Rpb24oWydpZCcgPT4gMSwgJ2ZpcnN0X3dvcmQnID0+ICdIZWxsbyddKTsKICAgICAgICAkYzIgPSBuZXcgQ29sbGVjdGlvbihbJ2lkJyA9PiAxMjMsICdmb29fYmFyJyA9PiAnSGVsbG8nXSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJ2ZpcnN0X3dvcmQnID0+ICdIZWxsbyddLCAkYzEtPmRpZmZLZXlzKCRjMiktPmFsbCgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdERpZmZLZXlzVXNpbmcoKQogICAgewogICAgICAgICRjMSA9IG5ldyBDb2xsZWN0aW9uKFsnaWQnID0+IDEsICdmaXJzdF93b3JkJyA9PiAnSGVsbG8nXSk7CiAgICAgICAgJGMyID0gbmV3IENvbGxlY3Rpb24oWydJRCcgPT4gMTIzLCAnZm9vX2JhcicgPT4gJ0hlbGxvJ10pOwogICAgICAgIC8vIGRlbW9uc3RyYXRlIHRoYXQgZGlmZktleXMgd29udCBzdXBwb3J0IGNhc2UgaW5zZW5zaXRpdml0eQogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWydpZCc9PjEsICdmaXJzdF93b3JkJz0+ICdIZWxsbyddLCAkYzEtPmRpZmZLZXlzKCRjMiktPmFsbCgpKTsKICAgICAgICAvLyBhbGxvdyBmb3IgY2FzZSBpbnNlbnNpdGl2ZSBkaWZmZXJlbmNlCiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJ2ZpcnN0X3dvcmQnID0+ICdIZWxsbyddLCAkYzEtPmRpZmZLZXlzVXNpbmcoJGMyLCAnc3RyY2FzZWNtcCcpLT5hbGwoKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3REaWZmQXNzb2MoKQogICAgewogICAgICAgICRjMSA9IG5ldyBDb2xsZWN0aW9uKFsnaWQnID0+IDEsICdmaXJzdF93b3JkJyA9PiAnSGVsbG8nLCAnbm90X2FmZmVjdGVkJyA9PiAndmFsdWUnXSk7CiAgICAgICAgJGMyID0gbmV3IENvbGxlY3Rpb24oWydpZCcgPT4gMTIzLCAnZm9vX2JhcicgPT4gJ0hlbGxvJywgJ25vdF9hZmZlY3RlZCcgPT4gJ3ZhbHVlJ10pOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWydpZCcgPT4gMSwgJ2ZpcnN0X3dvcmQnID0+ICdIZWxsbyddLCAkYzEtPmRpZmZBc3NvYygkYzIpLT5hbGwoKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3REaWZmQXNzb2NVc2luZygpCiAgICB7CiAgICAgICAgJGMxID0gbmV3IENvbGxlY3Rpb24oWydhJyA9PiAnZ3JlZW4nLCAnYicgPT4gJ2Jyb3duJywgJ2MnID0+ICdibHVlJywgJ3JlZCddKTsKICAgICAgICAkYzIgPSBuZXcgQ29sbGVjdGlvbihbJ0EnID0+ICdncmVlbicsICd5ZWxsb3cnLCAncmVkJ10pOwogICAgICAgIC8vIGRlbW9uc3RyYXRlIHRoYXQgdGhlIGNhc2Ugb2YgdGhlIGtleXMgd2lsbCBhZmZlY3QgdGhlIG91dHB1dCB3aGVuIGRpZmZBc3NvYyBpcyB1c2VkCiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJ2EnID0+ICdncmVlbicsICdiJyA9PiAnYnJvd24nLCAnYycgPT4gJ2JsdWUnLCAncmVkJ10sICRjMS0+ZGlmZkFzc29jKCRjMiktPmFsbCgpKTsKICAgICAgICAvLyBhbGxvdyBmb3IgY2FzZSBpbnNlbnNpdGl2ZSBkaWZmZXJlbmNlCiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJ2InID0+ICdicm93bicsICdjJyA9PiAnYmx1ZScsICdyZWQnXSwgJGMxLT5kaWZmQXNzb2NVc2luZygkYzIsICdzdHJjYXNlY21wJyktPmFsbCgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdEVhY2goKQogICAgewogICAgICAgICRjID0gbmV3IENvbGxlY3Rpb24oJG9yaWdpbmFsID0gWzEsIDIsICdmb28nID0+ICdiYXInLCAnYmFtJyA9PiAnYmF6J10pOwoKICAgICAgICAkcmVzdWx0ID0gW107CiAgICAgICAgJGMtPmVhY2goZnVuY3Rpb24gKCRpdGVtLCAka2V5KSB1c2UgKCYkcmVzdWx0KSB7CiAgICAgICAgICAgICRyZXN1bHRbJGtleV0gPSAkaXRlbTsKICAgICAgICB9KTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKCRvcmlnaW5hbCwgJHJlc3VsdCk7CgogICAgICAgICRyZXN1bHQgPSBbXTsKICAgICAgICAkYy0+ZWFjaChmdW5jdGlvbiAoJGl0ZW0sICRrZXkpIHVzZSAoJiRyZXN1bHQpIHsKICAgICAgICAgICAgJHJlc3VsdFska2V5XSA9ICRpdGVtOwogICAgICAgICAgICBpZiAoaXNfc3RyaW5nKCRrZXkpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsxLCAyLCAnZm9vJyA9PiAnYmFyJ10sICRyZXN1bHQpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0RWFjaFNwcmVhZCgpCiAgICB7CiAgICAgICAgJGMgPSBuZXcgQ29sbGVjdGlvbihbWzEsICdhJ10sIFsyLCAnYiddXSk7CgogICAgICAgICRyZXN1bHQgPSBbXTsKICAgICAgICAkYy0+ZWFjaFNwcmVhZChmdW5jdGlvbiAoJG51bWJlciwgJGNoYXJhY3RlcikgdXNlICgmJHJlc3VsdCkgewogICAgICAgICAgICAkcmVzdWx0W10gPSBbJG51bWJlciwgJGNoYXJhY3Rlcl07CiAgICAgICAgfSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscygkYy0+YWxsKCksICRyZXN1bHQpOwoKICAgICAgICAkcmVzdWx0ID0gW107CiAgICAgICAgJGMtPmVhY2hTcHJlYWQoZnVuY3Rpb24gKCRudW1iZXIsICRjaGFyYWN0ZXIpIHVzZSAoJiRyZXN1bHQpIHsKICAgICAgICAgICAgJHJlc3VsdFtdID0gWyRudW1iZXIsICRjaGFyYWN0ZXJdOwoKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0pOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoW1sxLCAnYSddXSwgJHJlc3VsdCk7CgogICAgICAgICRyZXN1bHQgPSBbXTsKICAgICAgICAkYy0+ZWFjaFNwcmVhZChmdW5jdGlvbiAoJG51bWJlciwgJGNoYXJhY3RlciwgJGtleSkgdXNlICgmJHJlc3VsdCkgewogICAgICAgICAgICAkcmVzdWx0W10gPSBbJG51bWJlciwgJGNoYXJhY3RlciwgJGtleV07CiAgICAgICAgfSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbWzEsICdhJywgMF0sIFsyLCAnYicsIDFdXSwgJHJlc3VsdCk7CgogICAgICAgICRjID0gbmV3IENvbGxlY3Rpb24oW25ldyBDb2xsZWN0aW9uKFsxLCAnYSddKSwgbmV3IENvbGxlY3Rpb24oWzIsICdiJ10pXSk7CiAgICAgICAgJHJlc3VsdCA9IFtdOwogICAgICAgICRjLT5lYWNoU3ByZWFkKGZ1bmN0aW9uICgkbnVtYmVyLCAkY2hhcmFjdGVyLCAka2V5KSB1c2UgKCYkcmVzdWx0KSB7CiAgICAgICAgICAgICRyZXN1bHRbXSA9IFskbnVtYmVyLCAkY2hhcmFjdGVyLCAka2V5XTsKICAgICAgICB9KTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFtbMSwgJ2EnLCAwXSwgWzIsICdiJywgMV1dLCAkcmVzdWx0KTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdEludGVyc2VjdE51bGwoKQogICAgewogICAgICAgICRjID0gbmV3IENvbGxlY3Rpb24oWydpZCcgPT4gMSwgJ2ZpcnN0X3dvcmQnID0+ICdIZWxsbyddKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFtdLCAkYy0+aW50ZXJzZWN0KG51bGwpLT5hbGwoKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RJbnRlcnNlY3RDb2xsZWN0aW9uKCkKICAgIHsKICAgICAgICAkYyA9IG5ldyBDb2xsZWN0aW9uKFsnaWQnID0+IDEsICdmaXJzdF93b3JkJyA9PiAnSGVsbG8nXSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJ2ZpcnN0X3dvcmQnID0+ICdIZWxsbyddLCAkYy0+aW50ZXJzZWN0KG5ldyBDb2xsZWN0aW9uKFsnZmlyc3Rfd29ybGQnID0+ICdIZWxsbycsICdsYXN0X3dvcmQnID0+ICdXb3JsZCddKSktPmFsbCgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdEludGVyc2VjdEJ5S2V5c051bGwoKQogICAgewogICAgICAgICRjID0gbmV3IENvbGxlY3Rpb24oWyduYW1lJyA9PiAnTWF0ZXVzJywgJ2FnZScgPT4gMThdKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFtdLCAkYy0+aW50ZXJzZWN0QnlLZXlzKG51bGwpLT5hbGwoKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RJbnRlcnNlY3RCeUtleXMoKQogICAgewogICAgICAgICRjID0gbmV3IENvbGxlY3Rpb24oWyduYW1lJyA9PiAnTWF0ZXVzJywgJ2FnZScgPT4gMThdKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsnbmFtZScgPT4gJ01hdGV1cyddLCAkYy0+aW50ZXJzZWN0QnlLZXlzKG5ldyBDb2xsZWN0aW9uKFsnbmFtZScgPT4gJ01hdGV1cycsICdzdXJuYW1lJyA9PiAnR3VpbWFyYWVzJ10pKS0+YWxsKCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0VW5pcXVlKCkKICAgIHsKICAgICAgICAkYyA9IG5ldyBDb2xsZWN0aW9uKFsnSGVsbG8nLCAnV29ybGQnLCAnV29ybGQnXSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJ0hlbGxvJywgJ1dvcmxkJ10sICRjLT51bmlxdWUoKS0+YWxsKCkpOwoKICAgICAgICAkYyA9IG5ldyBDb2xsZWN0aW9uKFtbMSwgMl0sIFsxLCAyXSwgWzIsIDNdLCBbMywgNF0sIFsyLCAzXV0pOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoW1sxLCAyXSwgWzIsIDNdLCBbMywgNF1dLCAkYy0+dW5pcXVlKCktPnZhbHVlcygpLT5hbGwoKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RVbmlxdWVXaXRoQ2FsbGJhY2soKQogICAgewogICAgICAgICRjID0gbmV3IENvbGxlY3Rpb24oWwogICAgICAgICAgICAxID0+IFsnaWQnID0+IDEsICdmaXJzdCcgPT4gJ1RheWxvcicsICdsYXN0JyA9PiAnT3R3ZWxsJ10sCiAgICAgICAgICAgIDIgPT4gWydpZCcgPT4gMiwgJ2ZpcnN0JyA9PiAnVGF5bG9yJywgJ2xhc3QnID0+ICdPdHdlbGwnXSwKICAgICAgICAgICAgMyA9PiBbJ2lkJyA9PiAzLCAnZmlyc3QnID0+ICdBYmlnYWlsJywgJ2xhc3QnID0+ICdPdHdlbGwnXSwKICAgICAgICAgICAgNCA9PiBbJ2lkJyA9PiA0LCAnZmlyc3QnID0+ICdBYmlnYWlsJywgJ2xhc3QnID0+ICdPdHdlbGwnXSwKICAgICAgICAgICAgNSA9PiBbJ2lkJyA9PiA1LCAnZmlyc3QnID0+ICdUYXlsb3InLCAnbGFzdCcgPT4gJ1N3aWZ0J10sCiAgICAgICAgICAgIDYgPT4gWydpZCcgPT4gNiwgJ2ZpcnN0JyA9PiAnVGF5bG9yJywgJ2xhc3QnID0+ICdTd2lmdCddLAogICAgICAgIF0pOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsKICAgICAgICAgICAgMSA9PiBbJ2lkJyA9PiAxLCAnZmlyc3QnID0+ICdUYXlsb3InLCAnbGFzdCcgPT4gJ090d2VsbCddLAogICAgICAgICAgICAzID0+IFsnaWQnID0+IDMsICdmaXJzdCcgPT4gJ0FiaWdhaWwnLCAnbGFzdCcgPT4gJ090d2VsbCddLAogICAgICAgIF0sICRjLT51bmlxdWUoJ2ZpcnN0JyktPmFsbCgpKTsKCiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbCiAgICAgICAgICAgIDEgPT4gWydpZCcgPT4gMSwgJ2ZpcnN0JyA9PiAnVGF5bG9yJywgJ2xhc3QnID0+ICdPdHdlbGwnXSwKICAgICAgICAgICAgMyA9PiBbJ2lkJyA9PiAzLCAnZmlyc3QnID0+ICdBYmlnYWlsJywgJ2xhc3QnID0+ICdPdHdlbGwnXSwKICAgICAgICAgICAgNSA9PiBbJ2lkJyA9PiA1LCAnZmlyc3QnID0+ICdUYXlsb3InLCAnbGFzdCcgPT4gJ1N3aWZ0J10sCiAgICAgICAgXSwgJGMtPnVuaXF1ZShmdW5jdGlvbiAoJGl0ZW0pIHsKICAgICAgICAgICAgcmV0dXJuICRpdGVtWydmaXJzdCddLiRpdGVtWydsYXN0J107CiAgICAgICAgfSktPmFsbCgpKTsKCiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbCiAgICAgICAgICAgIDEgPT4gWydpZCcgPT4gMSwgJ2ZpcnN0JyA9PiAnVGF5bG9yJywgJ2xhc3QnID0+ICdPdHdlbGwnXSwKICAgICAgICAgICAgMiA9PiBbJ2lkJyA9PiAyLCAnZmlyc3QnID0+ICdUYXlsb3InLCAnbGFzdCcgPT4gJ090d2VsbCddLAogICAgICAgIF0sICRjLT51bmlxdWUoZnVuY3Rpb24gKCRpdGVtLCAka2V5KSB7CiAgICAgICAgICAgIHJldHVybiAka2V5ICUgMjsKICAgICAgICB9KS0+YWxsKCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0VW5pcXVlU3RyaWN0KCkKICAgIHsKICAgICAgICAkYyA9IG5ldyBDb2xsZWN0aW9uKFsKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgJ2lkJyA9PiAnMCcsCiAgICAgICAgICAgICAgICAnbmFtZScgPT4gJ3plcm8nLAogICAgICAgICAgICBdLAogICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAnaWQnID0+ICcwMCcsCiAgICAgICAgICAgICAgICAnbmFtZScgPT4gJ2RvdWJsZSB6ZXJvJywKICAgICAgICAgICAgXSwKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgJ2lkJyA9PiAnMCcsCiAgICAgICAgICAgICAgICAnbmFtZScgPT4gJ2FnYWluIHplcm8nLAogICAgICAgICAgICBdLAogICAgICAgIF0pOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgJ2lkJyA9PiAnMCcsCiAgICAgICAgICAgICAgICAnbmFtZScgPT4gJ3plcm8nLAogICAgICAgICAgICBdLAogICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAnaWQnID0+ICcwMCcsCiAgICAgICAgICAgICAgICAnbmFtZScgPT4gJ2RvdWJsZSB6ZXJvJywKICAgICAgICAgICAgXSwKICAgICAgICBdLCAkYy0+dW5pcXVlU3RyaWN0KCdpZCcpLT5hbGwoKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RDb2xsYXBzZSgpCiAgICB7CiAgICAgICAgJGRhdGEgPSBuZXcgQ29sbGVjdGlvbihbWyRvYmplY3QxID0gbmV3IHN0ZENsYXNzXSwgWyRvYmplY3QyID0gbmV3IHN0ZENsYXNzXV0pOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWyRvYmplY3QxLCAkb2JqZWN0Ml0sICRkYXRhLT5jb2xsYXBzZSgpLT5hbGwoKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RDb2xsYXBzZVdpdGhOZXN0ZWRDb2xsZWN0aW9ucygpCiAgICB7CiAgICAgICAgJGRhdGEgPSBuZXcgQ29sbGVjdGlvbihbbmV3IENvbGxlY3Rpb24oWzEsIDIsIDNdKSwgbmV3IENvbGxlY3Rpb24oWzQsIDUsIDZdKV0pOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWzEsIDIsIDMsIDQsIDUsIDZdLCAkZGF0YS0+Y29sbGFwc2UoKS0+YWxsKCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0Q3Jvc3NKb2luKCkKICAgIHsKICAgICAgICAvLyBDcm9zcyBqb2luIHdpdGggYW4gYXJyYXkKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKAogICAgICAgICAgICBbWzEsICdhJ10sIFsxLCAnYiddLCBbMiwgJ2EnXSwgWzIsICdiJ11dLAogICAgICAgICAgICAobmV3IENvbGxlY3Rpb24oWzEsIDJdKSktPmNyb3NzSm9pbihbJ2EnLCAnYiddKS0+YWxsKCkKICAgICAgICApOwoKICAgICAgICAvLyBDcm9zcyBqb2luIHdpdGggYSBjb2xsZWN0aW9uCiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscygKICAgICAgICAgICAgW1sxLCAnYSddLCBbMSwgJ2InXSwgWzIsICdhJ10sIFsyLCAnYiddXSwKICAgICAgICAgICAgKG5ldyBDb2xsZWN0aW9uKFsxLCAyXSkpLT5jcm9zc0pvaW4obmV3IENvbGxlY3Rpb24oWydhJywgJ2InXSkpLT5hbGwoKQogICAgICAgICk7CgogICAgICAgIC8vIENyb3NzIGpvaW4gd2l0aCAyIGNvbGxlY3Rpb25zCiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscygKICAgICAgICAgICAgWwogICAgICAgICAgICAgICAgWzEsICdhJywgJ0knXSwgWzEsICdhJywgJ0lJJ10sCiAgICAgICAgICAgICAgICBbMSwgJ2InLCAnSSddLCBbMSwgJ2InLCAnSUknXSwKICAgICAgICAgICAgICAgIFsyLCAnYScsICdJJ10sIFsyLCAnYScsICdJSSddLAogICAgICAgICAgICAgICAgWzIsICdiJywgJ0knXSwgWzIsICdiJywgJ0lJJ10sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIChuZXcgQ29sbGVjdGlvbihbMSwgMl0pKS0+Y3Jvc3NKb2luKAogICAgICAgICAgICAgICAgbmV3IENvbGxlY3Rpb24oWydhJywgJ2InXSksCiAgICAgICAgICAgICAgICBuZXcgQ29sbGVjdGlvbihbJ0knLCAnSUknXSkKICAgICAgICAgICAgKS0+YWxsKCkKICAgICAgICApOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0U29ydCgpCiAgICB7CiAgICAgICAgJGRhdGEgPSAobmV3IENvbGxlY3Rpb24oWzUsIDMsIDEsIDIsIDRdKSktPnNvcnQoKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsxLCAyLCAzLCA0LCA1XSwgJGRhdGEtPnZhbHVlcygpLT5hbGwoKSk7CgogICAgICAgICRkYXRhID0gKG5ldyBDb2xsZWN0aW9uKFstMSwgLTMsIC0yLCAtNCwgLTUsIDAsIDUsIDMsIDEsIDIsIDRdKSktPnNvcnQoKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFstNSwgLTQsIC0zLCAtMiwgLTEsIDAsIDEsIDIsIDMsIDQsIDVdLCAkZGF0YS0+dmFsdWVzKCktPmFsbCgpKTsKCiAgICAgICAgJGRhdGEgPSAobmV3IENvbGxlY3Rpb24oWydmb28nLCAnYmFyLTEwJywgJ2Jhci0xJ10pKS0+c29ydCgpOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWydiYXItMScsICdiYXItMTAnLCAnZm9vJ10sICRkYXRhLT52YWx1ZXMoKS0+YWxsKCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0U29ydFdpdGhDYWxsYmFjaygpCiAgICB7CiAgICAgICAgJGRhdGEgPSAobmV3IENvbGxlY3Rpb24oWzUsIDMsIDEsIDIsIDRdKSktPnNvcnQoZnVuY3Rpb24gKCRhLCAkYikgewogICAgICAgICAgICBpZiAoJGEgPT09ICRiKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuICgkYSA8ICRiKSA/IC0xIDogMTsKICAgICAgICB9KTsKCiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhyYW5nZSgxLCA1KSwgYXJyYXlfdmFsdWVzKCRkYXRhLT5hbGwoKSkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0U29ydEJ5KCkKICAgIHsKICAgICAgICAkZGF0YSA9IG5ldyBDb2xsZWN0aW9uKFsndGF5bG9yJywgJ2RheWxlJ10pOwogICAgICAgICRkYXRhID0gJGRhdGEtPnNvcnRCeShmdW5jdGlvbiAoJHgpIHsKICAgICAgICAgICAgcmV0dXJuICR4OwogICAgICAgIH0pOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsnZGF5bGUnLCAndGF5bG9yJ10sIGFycmF5X3ZhbHVlcygkZGF0YS0+YWxsKCkpKTsKCiAgICAgICAgJGRhdGEgPSBuZXcgQ29sbGVjdGlvbihbJ2RheWxlJywgJ3RheWxvciddKTsKICAgICAgICAkZGF0YSA9ICRkYXRhLT5zb3J0QnlEZXNjKGZ1bmN0aW9uICgkeCkgewogICAgICAgICAgICByZXR1cm4gJHg7CiAgICAgICAgfSk7CgogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWyd0YXlsb3InLCAnZGF5bGUnXSwgYXJyYXlfdmFsdWVzKCRkYXRhLT5hbGwoKSkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0U29ydEJ5U3RyaW5nKCkKICAgIHsKICAgICAgICAkZGF0YSA9IG5ldyBDb2xsZWN0aW9uKFtbJ25hbWUnID0+ICd0YXlsb3InXSwgWyduYW1lJyA9PiAnZGF5bGUnXV0pOwogICAgICAgICRkYXRhID0gJGRhdGEtPnNvcnRCeSgnbmFtZScsIFNPUlRfU1RSSU5HKTsKCiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbWyduYW1lJyA9PiAnZGF5bGUnXSwgWyduYW1lJyA9PiAndGF5bG9yJ11dLCBhcnJheV92YWx1ZXMoJGRhdGEtPmFsbCgpKSk7CgogICAgICAgICRkYXRhID0gbmV3IENvbGxlY3Rpb24oW1snbmFtZScgPT4gJ3RheWxvciddLCBbJ25hbWUnID0+ICdkYXlsZSddXSk7CiAgICAgICAgJGRhdGEgPSAkZGF0YS0+c29ydEJ5KCduYW1lJywgU09SVF9TVFJJTkcpOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFtbJ25hbWUnID0+ICdkYXlsZSddLCBbJ25hbWUnID0+ICd0YXlsb3InXV0sIGFycmF5X3ZhbHVlcygkZGF0YS0+YWxsKCkpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdFNvcnRCeUFsd2F5c1JldHVybnNBc3NvYygpCiAgICB7CiAgICAgICAgJGRhdGEgPSBuZXcgQ29sbGVjdGlvbihbJ2EnID0+ICd0YXlsb3InLCAnYicgPT4gJ2RheWxlJ10pOwogICAgICAgICRkYXRhID0gJGRhdGEtPnNvcnRCeShmdW5jdGlvbiAoJHgpIHsKICAgICAgICAgICAgcmV0dXJuICR4OwogICAgICAgIH0pOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsnYicgPT4gJ2RheWxlJywgJ2EnID0+ICd0YXlsb3InXSwgJGRhdGEtPmFsbCgpKTsKCiAgICAgICAgJGRhdGEgPSBuZXcgQ29sbGVjdGlvbihbJ3RheWxvcicsICdkYXlsZSddKTsKICAgICAgICAkZGF0YSA9ICRkYXRhLT5zb3J0QnkoZnVuY3Rpb24gKCR4KSB7CiAgICAgICAgICAgIHJldHVybiAkeDsKICAgICAgICB9KTsKCiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbMSA9PiAnZGF5bGUnLCAwID0+ICd0YXlsb3InXSwgJGRhdGEtPmFsbCgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdFNvcnRLZXlzKCkKICAgIHsKICAgICAgICAkZGF0YSA9IG5ldyBDb2xsZWN0aW9uKFsnYicgPT4gJ2RheWxlJywgJ2EnID0+ICd0YXlsb3InXSk7CgogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWydhJyA9PiAndGF5bG9yJywgJ2InID0+ICdkYXlsZSddLCAkZGF0YS0+c29ydEtleXMoKS0+YWxsKCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0U29ydEtleXNEZXNjKCkKICAgIHsKICAgICAgICAkZGF0YSA9IG5ldyBDb2xsZWN0aW9uKFsnYScgPT4gJ3RheWxvcicsICdiJyA9PiAnZGF5bGUnXSk7CgogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWydiJyA9PiAnZGF5bGUnLCAnYScgPT4gJ3RheWxvciddLCAkZGF0YS0+c29ydEtleXMoKS0+YWxsKCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0UmV2ZXJzZSgpCiAgICB7CiAgICAgICAgJGRhdGEgPSBuZXcgQ29sbGVjdGlvbihbJ3phZWVkJywgJ2FsYW4nXSk7CiAgICAgICAgJHJldmVyc2VkID0gJGRhdGEtPnJldmVyc2UoKTsKCiAgICAgICAgJHRoaXMtPmFzc2VydFNhbWUoWzEgPT4gJ2FsYW4nLCAwID0+ICd6YWVlZCddLCAkcmV2ZXJzZWQtPmFsbCgpKTsKCiAgICAgICAgJGRhdGEgPSBuZXcgQ29sbGVjdGlvbihbJ25hbWUnID0+ICd0YXlsb3InLCAnZnJhbWV3b3JrJyA9PiAnbGFyYXZlbCddKTsKICAgICAgICAkcmV2ZXJzZWQgPSAkZGF0YS0+cmV2ZXJzZSgpOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0U2FtZShbJ2ZyYW1ld29yaycgPT4gJ2xhcmF2ZWwnLCAnbmFtZScgPT4gJ3RheWxvciddLCAkcmV2ZXJzZWQtPmFsbCgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdEZsaXAoKQogICAgewogICAgICAgICRkYXRhID0gbmV3IENvbGxlY3Rpb24oWyduYW1lJyA9PiAndGF5bG9yJywgJ2ZyYW1ld29yaycgPT4gJ2xhcmF2ZWwnXSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJ3RheWxvcicgPT4gJ25hbWUnLCAnbGFyYXZlbCcgPT4gJ2ZyYW1ld29yayddLCAkZGF0YS0+ZmxpcCgpLT50b0FycmF5KCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0Q2h1bmsoKQogICAgewogICAgICAgICRkYXRhID0gbmV3IENvbGxlY3Rpb24oWzEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwXSk7CiAgICAgICAgJGRhdGEgPSAkZGF0YS0+Y2h1bmsoMyk7CgogICAgICAgICR0aGlzLT5hc3NlcnRJbnN0YW5jZU9mKENvbGxlY3Rpb246OmNsYXNzLCAkZGF0YSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEluc3RhbmNlT2YoQ29sbGVjdGlvbjo6Y2xhc3MsICRkYXRhWzBdKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0Q291bnQoNCwgJGRhdGEpOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWzEsIDIsIDNdLCAkZGF0YVswXS0+dG9BcnJheSgpKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFs5ID0+IDEwXSwgJGRhdGFbM10tPnRvQXJyYXkoKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RDaHVua1doZW5HaXZlblplcm9Bc1NpemUoKQogICAgewogICAgICAgICRjb2xsZWN0aW9uID0gbmV3IENvbGxlY3Rpb24oWzEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwXSk7CgogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoCiAgICAgICAgICAgIFtdLAogICAgICAgICAgICAkY29sbGVjdGlvbi0+Y2h1bmsoMCktPnRvQXJyYXkoKQogICAgICAgICk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RDaHVua1doZW5HaXZlbkxlc3NUaGFuWmVybygpCiAgICB7CiAgICAgICAgJGNvbGxlY3Rpb24gPSBuZXcgQ29sbGVjdGlvbihbMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTBdKTsKCiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscygKICAgICAgICAgICAgW10sCiAgICAgICAgICAgICRjb2xsZWN0aW9uLT5jaHVuaygtMSktPnRvQXJyYXkoKQogICAgICAgICk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RFdmVyeSgpCiAgICB7CiAgICAgICAgJGMgPSBuZXcgQ29sbGVjdGlvbihbXSk7CiAgICAgICAgJHRoaXMtPmFzc2VydFRydWUoJGMtPmV2ZXJ5KCdrZXknLCAndmFsdWUnKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydFRydWUoJGMtPmV2ZXJ5KGZ1bmN0aW9uICgpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0pKTsKCiAgICAgICAgJGMgPSBuZXcgQ29sbGVjdGlvbihbWydhZ2UnID0+IDE4XSwgWydhZ2UnID0+IDIwXSwgWydhZ2UnID0+IDIwXV0pOwogICAgICAgICR0aGlzLT5hc3NlcnRGYWxzZSgkYy0+ZXZlcnkoJ2FnZScsIDE4KSk7CiAgICAgICAgJHRoaXMtPmFzc2VydFRydWUoJGMtPmV2ZXJ5KCdhZ2UnLCAnPj0nLCAxOCkpOwogICAgICAgICR0aGlzLT5hc3NlcnRUcnVlKCRjLT5ldmVyeShmdW5jdGlvbiAoJGl0ZW0pIHsKICAgICAgICAgICAgcmV0dXJuICRpdGVtWydhZ2UnXSA+PSAxODsKICAgICAgICB9KSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEZhbHNlKCRjLT5ldmVyeShmdW5jdGlvbiAoJGl0ZW0pIHsKICAgICAgICAgICAgcmV0dXJuICRpdGVtWydhZ2UnXSA+PSAyMDsKICAgICAgICB9KSk7CgogICAgICAgICRjID0gbmV3IENvbGxlY3Rpb24oW251bGwsIG51bGxdKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0VHJ1ZSgkYy0+ZXZlcnkoZnVuY3Rpb24gKCRpdGVtKSB7CiAgICAgICAgICAgIHJldHVybiAkaXRlbSA9PT0gbnVsbDsKICAgICAgICB9KSk7CgogICAgICAgICRjID0gbmV3IENvbGxlY3Rpb24oW1snYWN0aXZlJyA9PiB0cnVlXSwgWydhY3RpdmUnID0+IHRydWVdXSk7CiAgICAgICAgJHRoaXMtPmFzc2VydFRydWUoJGMtPmV2ZXJ5KCdhY3RpdmUnKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydFRydWUoJGMtPmV2ZXJ5LT5hY3RpdmUpOwogICAgICAgICR0aGlzLT5hc3NlcnRGYWxzZSgkYy0+cHVzaChbJ2FjdGl2ZScgPT4gZmFsc2VdKS0+ZXZlcnktPmFjdGl2ZSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RFeGNlcHQoKQogICAgewogICAgICAgICRkYXRhID0gbmV3IENvbGxlY3Rpb24oWydmaXJzdCcgPT4gJ1RheWxvcicsICdsYXN0JyA9PiAnT3R3ZWxsJywgJ2VtYWlsJyA9PiAndGF5bG9yb3R3ZWxsQGdtYWlsLmNvbSddKTsKCiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJ2ZpcnN0JyA9PiAnVGF5bG9yJ10sICRkYXRhLT5leGNlcHQoWydsYXN0JywgJ2VtYWlsJywgJ21pc3NpbmcnXSktPmFsbCgpKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsnZmlyc3QnID0+ICdUYXlsb3InXSwgJGRhdGEtPmV4Y2VwdCgnbGFzdCcsICdlbWFpbCcsICdtaXNzaW5nJyktPmFsbCgpKTsKCiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJ2ZpcnN0JyA9PiAnVGF5bG9yJ10sICRkYXRhLT5leGNlcHQoY29sbGVjdChbJ2xhc3QnLCAnZW1haWwnLCAnbWlzc2luZyddKSktPmFsbCgpKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsnZmlyc3QnID0+ICdUYXlsb3InLCAnZW1haWwnID0+ICd0YXlsb3JvdHdlbGxAZ21haWwuY29tJ10sICRkYXRhLT5leGNlcHQoWydsYXN0J10pLT5hbGwoKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJ2ZpcnN0JyA9PiAnVGF5bG9yJywgJ2VtYWlsJyA9PiAndGF5bG9yb3R3ZWxsQGdtYWlsLmNvbSddLCAkZGF0YS0+ZXhjZXB0KCdsYXN0JyktPmFsbCgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdEV4Y2VwdFNlbGYoKQogICAgewogICAgICAgICRkYXRhID0gbmV3IENvbGxlY3Rpb24oWydmaXJzdCcgPT4gJ1RheWxvcicsICdsYXN0JyA9PiAnT3R3ZWxsJ10pOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWydmaXJzdCcgPT4gJ1RheWxvcicsICdsYXN0JyA9PiAnT3R3ZWxsJ10sICRkYXRhLT5leGNlcHQoJGRhdGEpLT5hbGwoKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RQbHVja1dpdGhBcnJheUFuZE9iamVjdFZhbHVlcygpCiAgICB7CiAgICAgICAgJGRhdGEgPSBuZXcgQ29sbGVjdGlvbihbKG9iamVjdCkgWyduYW1lJyA9PiAndGF5bG9yJywgJ2VtYWlsJyA9PiAnZm9vJ10sIFsnbmFtZScgPT4gJ2RheWxlJywgJ2VtYWlsJyA9PiAnYmFyJ11dKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsndGF5bG9yJyA9PiAnZm9vJywgJ2RheWxlJyA9PiAnYmFyJ10sICRkYXRhLT5wbHVjaygnZW1haWwnLCAnbmFtZScpLT5hbGwoKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJ2ZvbycsICdiYXInXSwgJGRhdGEtPnBsdWNrKCdlbWFpbCcpLT5hbGwoKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RQbHVja1dpdGhBcnJheUFjY2Vzc1ZhbHVlcygpCiAgICB7CiAgICAgICAgJGRhdGEgPSBuZXcgQ29sbGVjdGlvbihbCiAgICAgICAgICAgIG5ldyBUZXN0QXJyYXlBY2Nlc3NJbXBsZW1lbnRhdGlvbihbJ25hbWUnID0+ICd0YXlsb3InLCAnZW1haWwnID0+ICdmb28nXSksCiAgICAgICAgICAgIG5ldyBUZXN0QXJyYXlBY2Nlc3NJbXBsZW1lbnRhdGlvbihbJ25hbWUnID0+ICdkYXlsZScsICdlbWFpbCcgPT4gJ2JhciddKSwKICAgICAgICBdKTsKCiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJ3RheWxvcicgPT4gJ2ZvbycsICdkYXlsZScgPT4gJ2JhciddLCAkZGF0YS0+cGx1Y2soJ2VtYWlsJywgJ25hbWUnKS0+YWxsKCkpOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWydmb28nLCAnYmFyJ10sICRkYXRhLT5wbHVjaygnZW1haWwnKS0+YWxsKCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0SGFzKCkKICAgIHsKICAgICAgICAkZGF0YSA9IG5ldyBDb2xsZWN0aW9uKFsnaWQnID0+IDEsICdmaXJzdCcgPT4gJ0hlbGxvJywgJ3NlY29uZCcgPT4gJ1dvcmxkJ10pOwogICAgICAgICR0aGlzLT5hc3NlcnRUcnVlKCRkYXRhLT5oYXMoJ2ZpcnN0JykpOwogICAgICAgICR0aGlzLT5hc3NlcnRGYWxzZSgkZGF0YS0+aGFzKCd0aGlyZCcpKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0VHJ1ZSgkZGF0YS0+aGFzKFsnZmlyc3QnLCAnc2Vjb25kJ10pKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RmFsc2UoJGRhdGEtPmhhcyhbJ3RoaXJkJywgJ2ZpcnN0J10pKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdEltcGxvZGUoKQogICAgewogICAgICAgICRkYXRhID0gbmV3IENvbGxlY3Rpb24oW1snbmFtZScgPT4gJ3RheWxvcicsICdlbWFpbCcgPT4gJ2ZvbyddLCBbJ25hbWUnID0+ICdkYXlsZScsICdlbWFpbCcgPT4gJ2JhciddXSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscygnZm9vYmFyJywgJGRhdGEtPmltcGxvZGUoJ2VtYWlsJykpOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoJ2ZvbyxiYXInLCAkZGF0YS0+aW1wbG9kZSgnZW1haWwnLCAnLCcpKTsKCiAgICAgICAgJGRhdGEgPSBuZXcgQ29sbGVjdGlvbihbJ3RheWxvcicsICdkYXlsZSddKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKCd0YXlsb3JkYXlsZScsICRkYXRhLT5pbXBsb2RlKCcnKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscygndGF5bG9yLGRheWxlJywgJGRhdGEtPmltcGxvZGUoJywnKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RUYWtlKCkKICAgIHsKICAgICAgICAkZGF0YSA9IG5ldyBDb2xsZWN0aW9uKFsndGF5bG9yJywgJ2RheWxlJywgJ3NoYXduJ10pOwogICAgICAgICRkYXRhID0gJGRhdGEtPnRha2UoMik7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJ3RheWxvcicsICdkYXlsZSddLCAkZGF0YS0+YWxsKCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0UHV0KCkKICAgIHsKICAgICAgICAkZGF0YSA9IG5ldyBDb2xsZWN0aW9uKFsnbmFtZScgPT4gJ3RheWxvcicsICdlbWFpbCcgPT4gJ2ZvbyddKTsKICAgICAgICAkZGF0YSA9ICRkYXRhLT5wdXQoJ25hbWUnLCAnZGF5bGUnKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsnbmFtZScgPT4gJ2RheWxlJywgJ2VtYWlsJyA9PiAnZm9vJ10sICRkYXRhLT5hbGwoKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RQdXRXaXRoTm9LZXkoKQogICAgewogICAgICAgICRkYXRhID0gbmV3IENvbGxlY3Rpb24oWyd0YXlsb3InLCAnc2hhd24nXSk7CiAgICAgICAgJGRhdGEgPSAkZGF0YS0+cHV0KG51bGwsICdkYXlsZScpOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWyd0YXlsb3InLCAnc2hhd24nLCAnZGF5bGUnXSwgJGRhdGEtPmFsbCgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdFJhbmRvbSgpCiAgICB7CiAgICAgICAgJGRhdGEgPSBuZXcgQ29sbGVjdGlvbihbMSwgMiwgMywgNCwgNSwgNl0pOwoKICAgICAgICAkcmFuZG9tID0gJGRhdGEtPnJhbmRvbSgpOwogICAgICAgICR0aGlzLT5hc3NlcnRJbnRlcm5hbFR5cGUoJ2ludGVnZXInLCAkcmFuZG9tKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0Q29udGFpbnMoJHJhbmRvbSwgJGRhdGEtPmFsbCgpKTsKCiAgICAgICAgJHJhbmRvbSA9ICRkYXRhLT5yYW5kb20oMCk7CiAgICAgICAgJHRoaXMtPmFzc2VydEluc3RhbmNlT2YoQ29sbGVjdGlvbjo6Y2xhc3MsICRyYW5kb20pOwogICAgICAgICR0aGlzLT5hc3NlcnRDb3VudCgwLCAkcmFuZG9tKTsKCiAgICAgICAgJHJhbmRvbSA9ICRkYXRhLT5yYW5kb20oMSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEluc3RhbmNlT2YoQ29sbGVjdGlvbjo6Y2xhc3MsICRyYW5kb20pOwogICAgICAgICR0aGlzLT5hc3NlcnRDb3VudCgxLCAkcmFuZG9tKTsKCiAgICAgICAgJHJhbmRvbSA9ICRkYXRhLT5yYW5kb20oMik7CiAgICAgICAgJHRoaXMtPmFzc2VydEluc3RhbmNlT2YoQ29sbGVjdGlvbjo6Y2xhc3MsICRyYW5kb20pOwogICAgICAgICR0aGlzLT5hc3NlcnRDb3VudCgyLCAkcmFuZG9tKTsKCiAgICAgICAgJHJhbmRvbSA9ICRkYXRhLT5yYW5kb20oJzAnKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0SW5zdGFuY2VPZihDb2xsZWN0aW9uOjpjbGFzcywgJHJhbmRvbSk7CiAgICAgICAgJHRoaXMtPmFzc2VydENvdW50KDAsICRyYW5kb20pOwoKICAgICAgICAkcmFuZG9tID0gJGRhdGEtPnJhbmRvbSgnMScpOwogICAgICAgICR0aGlzLT5hc3NlcnRJbnN0YW5jZU9mKENvbGxlY3Rpb246OmNsYXNzLCAkcmFuZG9tKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0Q291bnQoMSwgJHJhbmRvbSk7CgogICAgICAgICRyYW5kb20gPSAkZGF0YS0+cmFuZG9tKCcyJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydEluc3RhbmNlT2YoQ29sbGVjdGlvbjo6Y2xhc3MsICRyYW5kb20pOwogICAgICAgICR0aGlzLT5hc3NlcnRDb3VudCgyLCAkcmFuZG9tKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdFJhbmRvbU9uRW1wdHlDb2xsZWN0aW9uKCkKICAgIHsKICAgICAgICAkZGF0YSA9IG5ldyBDb2xsZWN0aW9uKCk7CgogICAgICAgICRyYW5kb20gPSAkZGF0YS0+cmFuZG9tKDApOwogICAgICAgICR0aGlzLT5hc3NlcnRJbnN0YW5jZU9mKENvbGxlY3Rpb246OmNsYXNzLCAkcmFuZG9tKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0Q291bnQoMCwgJHJhbmRvbSk7CgogICAgICAgICRyYW5kb20gPSAkZGF0YS0+cmFuZG9tKCcwJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydEluc3RhbmNlT2YoQ29sbGVjdGlvbjo6Y2xhc3MsICRyYW5kb20pOwogICAgICAgICR0aGlzLT5hc3NlcnRDb3VudCgwLCAkcmFuZG9tKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdFRha2VMYXN0KCkKICAgIHsKICAgICAgICAkZGF0YSA9IG5ldyBDb2xsZWN0aW9uKFsndGF5bG9yJywgJ2RheWxlJywgJ3NoYXduJ10pOwogICAgICAgICRkYXRhID0gJGRhdGEtPnRha2UoLTIpOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWzEgPT4gJ2RheWxlJywgMiA9PiAnc2hhd24nXSwgJGRhdGEtPmFsbCgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdE1hY3JvYWJsZSgpCiAgICB7CiAgICAgICAgLy8gRm9vKCkgbWFjcm8gOiB1bmlxdWUgdmFsdWVzIHN0YXJ0aW5nIHdpdGggQQogICAgICAgIENvbGxlY3Rpb246Om1hY3JvKCdmb28nLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+ZmlsdGVyKGZ1bmN0aW9uICgkaXRlbSkgewogICAgICAgICAgICAgICAgcmV0dXJuIHN0cnBvcygkaXRlbSwgJ2EnKSA9PT0gMDsKICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAgIC0+dW5pcXVlKCkKICAgICAgICAgICAgICAgIC0+dmFsdWVzKCk7CiAgICAgICAgfSk7CgogICAgICAgICRjID0gbmV3IENvbGxlY3Rpb24oWydhJywgJ2EnLCAnYWEnLCAnYWFhJywgJ2JhciddKTsKCiAgICAgICAgJHRoaXMtPmFzc2VydFNhbWUoWydhJywgJ2FhJywgJ2FhYSddLCAkYy0+Zm9vKCktPmFsbCgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdENhbkFkZE1ldGhvZHNUb1Byb3h5KCkKICAgIHsKICAgICAgICBDb2xsZWN0aW9uOjptYWNybygnYWR1bHRzJywgZnVuY3Rpb24gKCRjYWxsYmFjaykgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPmZpbHRlcihmdW5jdGlvbiAoJGl0ZW0pIHVzZSAoJGNhbGxiYWNrKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJGNhbGxiYWNrKCRpdGVtKSA+PSAxODsKICAgICAgICAgICAgfSk7CiAgICAgICAgfSk7CgogICAgICAgIENvbGxlY3Rpb246OnByb3h5KCdhZHVsdHMnKTsKCiAgICAgICAgJGMgPSBuZXcgQ29sbGVjdGlvbihbWydhZ2UnID0+IDNdLCBbJ2FnZScgPT4gMTJdLCBbJ2FnZScgPT4gMThdLCBbJ2FnZScgPT4gNTZdXSk7CgogICAgICAgICR0aGlzLT5hc3NlcnRTYW1lKFtbJ2FnZScgPT4gMThdLCBbJ2FnZScgPT4gNTZdXSwgJGMtPmFkdWx0cy0+YWdlLT52YWx1ZXMoKS0+YWxsKCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0TWFrZU1ldGhvZCgpCiAgICB7CiAgICAgICAgJGNvbGxlY3Rpb24gPSBDb2xsZWN0aW9uOjptYWtlKCdmb28nKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsnZm9vJ10sICRjb2xsZWN0aW9uLT5hbGwoKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RNYWtlTWV0aG9kRnJvbU51bGwoKQogICAgewogICAgICAgICRjb2xsZWN0aW9uID0gQ29sbGVjdGlvbjo6bWFrZShudWxsKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFtdLCAkY29sbGVjdGlvbi0+YWxsKCkpOwoKICAgICAgICAkY29sbGVjdGlvbiA9IENvbGxlY3Rpb246Om1ha2UoKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFtdLCAkY29sbGVjdGlvbi0+YWxsKCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0TWFrZU1ldGhvZEZyb21Db2xsZWN0aW9uKCkKICAgIHsKICAgICAgICAkZmlyc3RDb2xsZWN0aW9uID0gQ29sbGVjdGlvbjo6bWFrZShbJ2ZvbycgPT4gJ2JhciddKTsKICAgICAgICAkc2Vjb25kQ29sbGVjdGlvbiA9IENvbGxlY3Rpb246Om1ha2UoJGZpcnN0Q29sbGVjdGlvbik7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJ2ZvbycgPT4gJ2JhciddLCAkc2Vjb25kQ29sbGVjdGlvbi0+YWxsKCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0TWFrZU1ldGhvZEZyb21BcnJheSgpCiAgICB7CiAgICAgICAgJGNvbGxlY3Rpb24gPSBDb2xsZWN0aW9uOjptYWtlKFsnZm9vJyA9PiAnYmFyJ10pOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWydmb28nID0+ICdiYXInXSwgJGNvbGxlY3Rpb24tPmFsbCgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdFdyYXBXaXRoU2NhbGFyKCkKICAgIHsKICAgICAgICAkY29sbGVjdGlvbiA9IENvbGxlY3Rpb246OndyYXAoJ2ZvbycpOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWydmb28nXSwgJGNvbGxlY3Rpb24tPmFsbCgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdFdyYXBXaXRoQXJyYXkoKQogICAgewogICAgICAgICRjb2xsZWN0aW9uID0gQ29sbGVjdGlvbjo6d3JhcChbJ2ZvbyddKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsnZm9vJ10sICRjb2xsZWN0aW9uLT5hbGwoKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RXcmFwV2l0aEFycmF5YWJsZSgpCiAgICB7CiAgICAgICAgJGNvbGxlY3Rpb24gPSBDb2xsZWN0aW9uOjp3cmFwKCRvID0gbmV3IFRlc3RBcnJheWFibGVPYmplY3QpOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWyRvXSwgJGNvbGxlY3Rpb24tPmFsbCgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdFdyYXBXaXRoSnNvbmFibGUoKQogICAgewogICAgICAgICRjb2xsZWN0aW9uID0gQ29sbGVjdGlvbjo6d3JhcCgkbyA9IG5ldyBUZXN0SnNvbmFibGVPYmplY3QpOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWyRvXSwgJGNvbGxlY3Rpb24tPmFsbCgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdFdyYXBXaXRoSnNvblNlcmlhbGl6ZSgpCiAgICB7CiAgICAgICAgJGNvbGxlY3Rpb24gPSBDb2xsZWN0aW9uOjp3cmFwKCRvID0gbmV3IFRlc3RKc29uU2VyaWFsaXplT2JqZWN0KTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFskb10sICRjb2xsZWN0aW9uLT5hbGwoKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RXcmFwV2l0aENvbGxlY3Rpb25DbGFzcygpCiAgICB7CiAgICAgICAgJGNvbGxlY3Rpb24gPSBDb2xsZWN0aW9uOjp3cmFwKENvbGxlY3Rpb246Om1ha2UoWydmb28nXSkpOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWydmb28nXSwgJGNvbGxlY3Rpb24tPmFsbCgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdFdyYXBXaXRoQ29sbGVjdGlvblN1YmNsYXNzKCkKICAgIHsKICAgICAgICAkY29sbGVjdGlvbiA9IFRlc3RDb2xsZWN0aW9uU3ViY2xhc3M6OndyYXAoQ29sbGVjdGlvbjo6bWFrZShbJ2ZvbyddKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJ2ZvbyddLCAkY29sbGVjdGlvbi0+YWxsKCkpOwogICAgICAgICR0aGlzLT5hc3NlcnRJbnN0YW5jZU9mKFRlc3RDb2xsZWN0aW9uU3ViY2xhc3M6OmNsYXNzLCAkY29sbGVjdGlvbik7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RVbndyYXBDb2xsZWN0aW9uKCkKICAgIHsKICAgICAgICAkY29sbGVjdGlvbiA9IG5ldyBDb2xsZWN0aW9uKFsnZm9vJ10pOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWydmb28nXSwgQ29sbGVjdGlvbjo6dW53cmFwKCRjb2xsZWN0aW9uKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RVbndyYXBDb2xsZWN0aW9uV2l0aEFycmF5KCkKICAgIHsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsnZm9vJ10sIENvbGxlY3Rpb246OnVud3JhcChbJ2ZvbyddKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RVbndyYXBDb2xsZWN0aW9uV2l0aFNjYWxhcigpCiAgICB7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscygnZm9vJywgQ29sbGVjdGlvbjo6dW53cmFwKCdmb28nKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RUaW1lc01ldGhvZCgpCiAgICB7CiAgICAgICAgJHR3byA9IENvbGxlY3Rpb246OnRpbWVzKDIsIGZ1bmN0aW9uICgkbnVtYmVyKSB7CiAgICAgICAgICAgIHJldHVybiAnc2x1Zy0nLiRudW1iZXI7CiAgICAgICAgfSk7CgogICAgICAgICR6ZXJvID0gQ29sbGVjdGlvbjo6dGltZXMoMCwgZnVuY3Rpb24gKCRudW1iZXIpIHsKICAgICAgICAgICAgcmV0dXJuICdzbHVnLScuJG51bWJlcjsKICAgICAgICB9KTsKCiAgICAgICAgJG5lZ2F0aXZlID0gQ29sbGVjdGlvbjo6dGltZXMoLTQsIGZ1bmN0aW9uICgkbnVtYmVyKSB7CiAgICAgICAgICAgIHJldHVybiAnc2x1Zy0nLiRudW1iZXI7CiAgICAgICAgfSk7CgogICAgICAgICRyYW5nZSA9IENvbGxlY3Rpb246OnRpbWVzKDUpOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsnc2x1Zy0xJywgJ3NsdWctMiddLCAkdHdvLT5hbGwoKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydFRydWUoJHplcm8tPmlzRW1wdHkoKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydFRydWUoJG5lZ2F0aXZlLT5pc0VtcHR5KCkpOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMocmFuZ2UoMSwgNSksICRyYW5nZS0+YWxsKCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0Q29uc3RydWN0TWFrZUZyb21PYmplY3QoKQogICAgewogICAgICAgICRvYmplY3QgPSBuZXcgc3RkQ2xhc3M7CiAgICAgICAgJG9iamVjdC0+Zm9vID0gJ2Jhcic7CiAgICAgICAgJGNvbGxlY3Rpb24gPSBDb2xsZWN0aW9uOjptYWtlKCRvYmplY3QpOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWydmb28nID0+ICdiYXInXSwgJGNvbGxlY3Rpb24tPmFsbCgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdENvbnN0cnVjdE1ldGhvZCgpCiAgICB7CiAgICAgICAgJGNvbGxlY3Rpb24gPSBuZXcgQ29sbGVjdGlvbignZm9vJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJ2ZvbyddLCAkY29sbGVjdGlvbi0+YWxsKCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0Q29uc3RydWN0TWV0aG9kRnJvbU51bGwoKQogICAgewogICAgICAgICRjb2xsZWN0aW9uID0gbmV3IENvbGxlY3Rpb24obnVsbCk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbXSwgJGNvbGxlY3Rpb24tPmFsbCgpKTsKCiAgICAgICAgJGNvbGxlY3Rpb24gPSBuZXcgQ29sbGVjdGlvbjsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFtdLCAkY29sbGVjdGlvbi0+YWxsKCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0Q29uc3RydWN0TWV0aG9kRnJvbUNvbGxlY3Rpb24oKQogICAgewogICAgICAgICRmaXJzdENvbGxlY3Rpb24gPSBuZXcgQ29sbGVjdGlvbihbJ2ZvbycgPT4gJ2JhciddKTsKICAgICAgICAkc2Vjb25kQ29sbGVjdGlvbiA9IG5ldyBDb2xsZWN0aW9uKCRmaXJzdENvbGxlY3Rpb24pOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWydmb28nID0+ICdiYXInXSwgJHNlY29uZENvbGxlY3Rpb24tPmFsbCgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdENvbnN0cnVjdE1ldGhvZEZyb21BcnJheSgpCiAgICB7CiAgICAgICAgJGNvbGxlY3Rpb24gPSBuZXcgQ29sbGVjdGlvbihbJ2ZvbycgPT4gJ2JhciddKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsnZm9vJyA9PiAnYmFyJ10sICRjb2xsZWN0aW9uLT5hbGwoKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RDb25zdHJ1Y3RNZXRob2RGcm9tT2JqZWN0KCkKICAgIHsKICAgICAgICAkb2JqZWN0ID0gbmV3IHN0ZENsYXNzOwogICAgICAgICRvYmplY3QtPmZvbyA9ICdiYXInOwogICAgICAgICRjb2xsZWN0aW9uID0gbmV3IENvbGxlY3Rpb24oJG9iamVjdCk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJ2ZvbycgPT4gJ2JhciddLCAkY29sbGVjdGlvbi0+YWxsKCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0U3BsaWNlKCkKICAgIHsKICAgICAgICAkZGF0YSA9IG5ldyBDb2xsZWN0aW9uKFsnZm9vJywgJ2JheiddKTsKICAgICAgICAkZGF0YS0+c3BsaWNlKDEpOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWydmb28nXSwgJGRhdGEtPmFsbCgpKTsKCiAgICAgICAgJGRhdGEgPSBuZXcgQ29sbGVjdGlvbihbJ2ZvbycsICdiYXonXSk7CiAgICAgICAgJGRhdGEtPnNwbGljZSgxLCAwLCAnYmFyJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJ2ZvbycsICdiYXInLCAnYmF6J10sICRkYXRhLT5hbGwoKSk7CgogICAgICAgICRkYXRhID0gbmV3IENvbGxlY3Rpb24oWydmb28nLCAnYmF6J10pOwogICAgICAgICRkYXRhLT5zcGxpY2UoMSwgMSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJ2ZvbyddLCAkZGF0YS0+YWxsKCkpOwoKICAgICAgICAkZGF0YSA9IG5ldyBDb2xsZWN0aW9uKFsnZm9vJywgJ2JheiddKTsKICAgICAgICAkY3V0ID0gJGRhdGEtPnNwbGljZSgxLCAxLCAnYmFyJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJ2ZvbycsICdiYXInXSwgJGRhdGEtPmFsbCgpKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsnYmF6J10sICRjdXQtPmFsbCgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdEdldFBsdWNrVmFsdWVXaXRoQWNjZXNzb3JzKCkKICAgIHsKICAgICAgICAkbW9kZWwgPSBuZXcgVGVzdEFjY2Vzc29yRWxvcXVlbnRUZXN0U3R1YihbJ3NvbWUnID0+ICdmb28nXSk7CiAgICAgICAgJG1vZGVsVHdvID0gbmV3IFRlc3RBY2Nlc3NvckVsb3F1ZW50VGVzdFN0dWIoWydzb21lJyA9PiAnYmFyJ10pOwogICAgICAgICRkYXRhID0gbmV3IENvbGxlY3Rpb24oWyRtb2RlbCwgJG1vZGVsVHdvXSk7CgogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWydmb28nLCAnYmFyJ10sICRkYXRhLT5wbHVjaygnc29tZScpLT5hbGwoKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RNYXAoKQogICAgewogICAgICAgICRkYXRhID0gbmV3IENvbGxlY3Rpb24oWydmaXJzdCcgPT4gJ3RheWxvcicsICdsYXN0JyA9PiAnb3R3ZWxsJ10pOwogICAgICAgICRkYXRhID0gJGRhdGEtPm1hcChmdW5jdGlvbiAoJGl0ZW0sICRrZXkpIHsKICAgICAgICAgICAgcmV0dXJuICRrZXkuJy0nLnN0cnJldigkaXRlbSk7CiAgICAgICAgfSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJ2ZpcnN0JyA9PiAnZmlyc3Qtcm9seWF0JywgJ2xhc3QnID0+ICdsYXN0LWxsZXd0byddLCAkZGF0YS0+YWxsKCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0TWFwU3ByZWFkKCkKICAgIHsKICAgICAgICAkYyA9IG5ldyBDb2xsZWN0aW9uKFtbMSwgJ2EnXSwgWzIsICdiJ11dKTsKCiAgICAgICAgJHJlc3VsdCA9ICRjLT5tYXBTcHJlYWQoZnVuY3Rpb24gKCRudW1iZXIsICRjaGFyYWN0ZXIpIHVzZSAoJiRyZXN1bHQpIHsKICAgICAgICAgICAgcmV0dXJuICJ7JG51bWJlcn0teyRjaGFyYWN0ZXJ9IjsKICAgICAgICB9KTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsnMS1hJywgJzItYiddLCAkcmVzdWx0LT5hbGwoKSk7CgogICAgICAgICRyZXN1bHQgPSAkYy0+bWFwU3ByZWFkKGZ1bmN0aW9uICgkbnVtYmVyLCAkY2hhcmFjdGVyLCAka2V5KSB1c2UgKCYkcmVzdWx0KSB7CiAgICAgICAgICAgIHJldHVybiAieyRudW1iZXJ9LXskY2hhcmFjdGVyfS17JGtleX0iOwogICAgICAgIH0pOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWycxLWEtMCcsICcyLWItMSddLCAkcmVzdWx0LT5hbGwoKSk7CgogICAgICAgICRjID0gbmV3IENvbGxlY3Rpb24oW25ldyBDb2xsZWN0aW9uKFsxLCAnYSddKSwgbmV3IENvbGxlY3Rpb24oWzIsICdiJ10pXSk7CiAgICAgICAgJHJlc3VsdCA9ICRjLT5tYXBTcHJlYWQoZnVuY3Rpb24gKCRudW1iZXIsICRjaGFyYWN0ZXIsICRrZXkpIHVzZSAoJiRyZXN1bHQpIHsKICAgICAgICAgICAgcmV0dXJuICJ7JG51bWJlcn0teyRjaGFyYWN0ZXJ9LXska2V5fSI7CiAgICAgICAgfSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJzEtYS0wJywgJzItYi0xJ10sICRyZXN1bHQtPmFsbCgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdEZsYXRNYXAoKQogICAgewogICAgICAgICRkYXRhID0gbmV3IENvbGxlY3Rpb24oWwogICAgICAgICAgICBbJ25hbWUnID0+ICd0YXlsb3InLCAnaG9iYmllcycgPT4gWydwcm9ncmFtbWluZycsICdiYXNrZXRiYWxsJ11dLAogICAgICAgICAgICBbJ25hbWUnID0+ICdhZGFtJywgJ2hvYmJpZXMnID0+IFsnbXVzaWMnLCAncG93ZXJsaWZ0aW5nJ11dLAogICAgICAgIF0pOwogICAgICAgICRkYXRhID0gJGRhdGEtPmZsYXRNYXAoZnVuY3Rpb24gKCRwZXJzb24pIHsKICAgICAgICAgICAgcmV0dXJuICRwZXJzb25bJ2hvYmJpZXMnXTsKICAgICAgICB9KTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsncHJvZ3JhbW1pbmcnLCAnYmFza2V0YmFsbCcsICdtdXNpYycsICdwb3dlcmxpZnRpbmcnXSwgJGRhdGEtPmFsbCgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdE1hcFRvRGljdGlvbmFyeSgpCiAgICB7CiAgICAgICAgJGRhdGEgPSBuZXcgQ29sbGVjdGlvbihbCiAgICAgICAgICAgIFsnaWQnID0+IDEsICduYW1lJyA9PiAnQSddLAogICAgICAgICAgICBbJ2lkJyA9PiAyLCAnbmFtZScgPT4gJ0InXSwKICAgICAgICAgICAgWydpZCcgPT4gMywgJ25hbWUnID0+ICdDJ10sCiAgICAgICAgICAgIFsnaWQnID0+IDQsICduYW1lJyA9PiAnQiddLAogICAgICAgIF0pOwoKICAgICAgICAkZ3JvdXBzID0gJGRhdGEtPm1hcFRvRGljdGlvbmFyeShmdW5jdGlvbiAoJGl0ZW0sICRrZXkpIHsKICAgICAgICAgICAgcmV0dXJuIFskaXRlbVsnbmFtZSddID0+ICRpdGVtWydpZCddXTsKICAgICAgICB9KTsKCiAgICAgICAgJHRoaXMtPmFzc2VydEluc3RhbmNlT2YoQ29sbGVjdGlvbjo6Y2xhc3MsICRncm91cHMpOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWydBJyA9PiBbMV0sICdCJyA9PiBbMiwgNF0sICdDJyA9PiBbM11dLCAkZ3JvdXBzLT50b0FycmF5KCkpOwogICAgICAgICR0aGlzLT5hc3NlcnRJbnRlcm5hbFR5cGUoJ2FycmF5JywgJGdyb3Vwc1snQSddKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdE1hcFRvRGljdGlvbmFyeVdpdGhOdW1lcmljS2V5cygpCiAgICB7CiAgICAgICAgJGRhdGEgPSBuZXcgQ29sbGVjdGlvbihbMSwgMiwgMywgMiwgMV0pOwoKICAgICAgICAkZ3JvdXBzID0gJGRhdGEtPm1hcFRvRGljdGlvbmFyeShmdW5jdGlvbiAoJGl0ZW0sICRrZXkpIHsKICAgICAgICAgICAgcmV0dXJuIFskaXRlbSA9PiAka2V5XTsKICAgICAgICB9KTsKCiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbMSA9PiBbMCwgNF0sIDIgPT4gWzEsIDNdLCAzID0+IFsyXV0sICRncm91cHMtPnRvQXJyYXkoKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RNYXBUb0dyb3VwcygpCiAgICB7CiAgICAgICAgJGRhdGEgPSBuZXcgQ29sbGVjdGlvbihbCiAgICAgICAgICAgIFsnaWQnID0+IDEsICduYW1lJyA9PiAnQSddLAogICAgICAgICAgICBbJ2lkJyA9PiAyLCAnbmFtZScgPT4gJ0InXSwKICAgICAgICAgICAgWydpZCcgPT4gMywgJ25hbWUnID0+ICdDJ10sCiAgICAgICAgICAgIFsnaWQnID0+IDQsICduYW1lJyA9PiAnQiddLAogICAgICAgIF0pOwoKICAgICAgICAkZ3JvdXBzID0gJGRhdGEtPm1hcFRvR3JvdXBzKGZ1bmN0aW9uICgkaXRlbSwgJGtleSkgewogICAgICAgICAgICByZXR1cm4gWyRpdGVtWyduYW1lJ10gPT4gJGl0ZW1bJ2lkJ11dOwogICAgICAgIH0pOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0SW5zdGFuY2VPZihDb2xsZWN0aW9uOjpjbGFzcywgJGdyb3Vwcyk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJ0EnID0+IFsxXSwgJ0InID0+IFsyLCA0XSwgJ0MnID0+IFszXV0sICRncm91cHMtPnRvQXJyYXkoKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEluc3RhbmNlT2YoQ29sbGVjdGlvbjo6Y2xhc3MsICRncm91cHNbJ0EnXSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RNYXBUb0dyb3Vwc1dpdGhOdW1lcmljS2V5cygpCiAgICB7CiAgICAgICAgJGRhdGEgPSBuZXcgQ29sbGVjdGlvbihbMSwgMiwgMywgMiwgMV0pOwoKICAgICAgICAkZ3JvdXBzID0gJGRhdGEtPm1hcFRvR3JvdXBzKGZ1bmN0aW9uICgkaXRlbSwgJGtleSkgewogICAgICAgICAgICByZXR1cm4gWyRpdGVtID0+ICRrZXldOwogICAgICAgIH0pOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsxID0+IFswLCA0XSwgMiA9PiBbMSwgM10sIDMgPT4gWzJdXSwgJGdyb3Vwcy0+dG9BcnJheSgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdE1hcFdpdGhLZXlzKCkKICAgIHsKICAgICAgICAkZGF0YSA9IG5ldyBDb2xsZWN0aW9uKFsKICAgICAgICAgICAgWyduYW1lJyA9PiAnQmxhc3RvaXNlJywgJ3R5cGUnID0+ICdXYXRlcicsICdpZHgnID0+IDldLAogICAgICAgICAgICBbJ25hbWUnID0+ICdDaGFybWFuZGVyJywgJ3R5cGUnID0+ICdGaXJlJywgJ2lkeCcgPT4gNF0sCiAgICAgICAgICAgIFsnbmFtZScgPT4gJ0RyYWdvbmFpcicsICd0eXBlJyA9PiAnRHJhZ29uJywgJ2lkeCcgPT4gMTQ4XSwKICAgICAgICBdKTsKICAgICAgICAkZGF0YSA9ICRkYXRhLT5tYXBXaXRoS2V5cyhmdW5jdGlvbiAoJHBva2Vtb24pIHsKICAgICAgICAgICAgcmV0dXJuIFskcG9rZW1vblsnbmFtZSddID0+ICRwb2tlbW9uWyd0eXBlJ11dOwogICAgICAgIH0pOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoCiAgICAgICAgICAgIFsnQmxhc3RvaXNlJyA9PiAnV2F0ZXInLCAnQ2hhcm1hbmRlcicgPT4gJ0ZpcmUnLCAnRHJhZ29uYWlyJyA9PiAnRHJhZ29uJ10sCiAgICAgICAgICAgICRkYXRhLT5hbGwoKQogICAgICAgICk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RNYXBXaXRoS2V5c0ludGVnZXJLZXlzKCkKICAgIHsKICAgICAgICAkZGF0YSA9IG5ldyBDb2xsZWN0aW9uKFsKICAgICAgICAgICAgWydpZCcgPT4gMSwgJ25hbWUnID0+ICdBJ10sCiAgICAgICAgICAgIFsnaWQnID0+IDMsICduYW1lJyA9PiAnQiddLAogICAgICAgICAgICBbJ2lkJyA9PiAyLCAnbmFtZScgPT4gJ0MnXSwKICAgICAgICBdKTsKICAgICAgICAkZGF0YSA9ICRkYXRhLT5tYXBXaXRoS2V5cyhmdW5jdGlvbiAoJGl0ZW0pIHsKICAgICAgICAgICAgcmV0dXJuIFskaXRlbVsnaWQnXSA9PiAkaXRlbV07CiAgICAgICAgfSk7CiAgICAgICAgJHRoaXMtPmFzc2VydFNhbWUoCiAgICAgICAgICAgIFsxLCAzLCAyXSwKICAgICAgICAgICAgJGRhdGEtPmtleXMoKS0+YWxsKCkKICAgICAgICApOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0TWFwV2l0aEtleXNNdWx0aXBsZVJvd3MoKQogICAgewogICAgICAgICRkYXRhID0gbmV3IENvbGxlY3Rpb24oWwogICAgICAgICAgICBbJ2lkJyA9PiAxLCAnbmFtZScgPT4gJ0EnXSwKICAgICAgICAgICAgWydpZCcgPT4gMiwgJ25hbWUnID0+ICdCJ10sCiAgICAgICAgICAgIFsnaWQnID0+IDMsICduYW1lJyA9PiAnQyddLAogICAgICAgIF0pOwogICAgICAgICRkYXRhID0gJGRhdGEtPm1hcFdpdGhLZXlzKGZ1bmN0aW9uICgkaXRlbSkgewogICAgICAgICAgICByZXR1cm4gWyRpdGVtWydpZCddID0+ICRpdGVtWyduYW1lJ10sICRpdGVtWyduYW1lJ10gPT4gJGl0ZW1bJ2lkJ11dOwogICAgICAgIH0pOwogICAgICAgICR0aGlzLT5hc3NlcnRTYW1lKAogICAgICAgICAgICBbCiAgICAgICAgICAgICAgICAxID0+ICdBJywKICAgICAgICAgICAgICAgICdBJyA9PiAxLAogICAgICAgICAgICAgICAgMiA9PiAnQicsCiAgICAgICAgICAgICAgICAnQicgPT4gMiwKICAgICAgICAgICAgICAgIDMgPT4gJ0MnLAogICAgICAgICAgICAgICAgJ0MnID0+IDMsCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICRkYXRhLT5hbGwoKQogICAgICAgICk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RNYXBXaXRoS2V5c0NhbGxiYWNrS2V5KCkKICAgIHsKICAgICAgICAkZGF0YSA9IG5ldyBDb2xsZWN0aW9uKFsKICAgICAgICAgICAgMyA9PiBbJ2lkJyA9PiAxLCAnbmFtZScgPT4gJ0EnXSwKICAgICAgICAgICAgNSA9PiBbJ2lkJyA9PiAzLCAnbmFtZScgPT4gJ0InXSwKICAgICAgICAgICAgNCA9PiBbJ2lkJyA9PiAyLCAnbmFtZScgPT4gJ0MnXSwKICAgICAgICBdKTsKICAgICAgICAkZGF0YSA9ICRkYXRhLT5tYXBXaXRoS2V5cyhmdW5jdGlvbiAoJGl0ZW0sICRrZXkpIHsKICAgICAgICAgICAgcmV0dXJuIFska2V5ID0+ICRpdGVtWydpZCddXTsKICAgICAgICB9KTsKICAgICAgICAkdGhpcy0+YXNzZXJ0U2FtZSgKICAgICAgICAgICAgWzMsIDUsIDRdLAogICAgICAgICAgICAkZGF0YS0+a2V5cygpLT5hbGwoKQogICAgICAgICk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RNYXBJbnRvKCkKICAgIHsKICAgICAgICAkZGF0YSA9IG5ldyBDb2xsZWN0aW9uKFsKICAgICAgICAgICAgJ2ZpcnN0JywgJ3NlY29uZCcsCiAgICAgICAgXSk7CgogICAgICAgICRkYXRhID0gJGRhdGEtPm1hcEludG8oVGVzdENvbGxlY3Rpb25NYXBJbnRvT2JqZWN0OjpjbGFzcyk7CgogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoJ2ZpcnN0JywgJGRhdGFbMF0tPnZhbHVlKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKCdzZWNvbmQnLCAkZGF0YVsxXS0+dmFsdWUpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0TnRoKCkKICAgIHsKICAgICAgICAkZGF0YSA9IG5ldyBDb2xsZWN0aW9uKFsKICAgICAgICAgICAgNiA9PiAnYScsCiAgICAgICAgICAgIDQgPT4gJ2InLAogICAgICAgICAgICA3ID0+ICdjJywKICAgICAgICAgICAgMSA9PiAnZCcsCiAgICAgICAgICAgIDUgPT4gJ2UnLAogICAgICAgICAgICAzID0+ICdmJywKICAgICAgICBdKTsKCiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJ2EnLCAnZSddLCAkZGF0YS0+bnRoKDQpLT5hbGwoKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJ2InLCAnZiddLCAkZGF0YS0+bnRoKDQsIDEpLT5hbGwoKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJ2MnXSwgJGRhdGEtPm50aCg0LCAyKS0+YWxsKCkpOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWydkJ10sICRkYXRhLT5udGgoNCwgMyktPmFsbCgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdFRyYW5zZm9ybSgpCiAgICB7CiAgICAgICAgJGRhdGEgPSBuZXcgQ29sbGVjdGlvbihbJ2ZpcnN0JyA9PiAndGF5bG9yJywgJ2xhc3QnID0+ICdvdHdlbGwnXSk7CiAgICAgICAgJGRhdGEtPnRyYW5zZm9ybShmdW5jdGlvbiAoJGl0ZW0sICRrZXkpIHsKICAgICAgICAgICAgcmV0dXJuICRrZXkuJy0nLnN0cnJldigkaXRlbSk7CiAgICAgICAgfSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJ2ZpcnN0JyA9PiAnZmlyc3Qtcm9seWF0JywgJ2xhc3QnID0+ICdsYXN0LWxsZXd0byddLCAkZGF0YS0+YWxsKCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0R3JvdXBCeUF0dHJpYnV0ZSgpCiAgICB7CiAgICAgICAgJGRhdGEgPSBuZXcgQ29sbGVjdGlvbihbWydyYXRpbmcnID0+IDEsICd1cmwnID0+ICcxJ10sIFsncmF0aW5nJyA9PiAxLCAndXJsJyA9PiAnMSddLCBbJ3JhdGluZycgPT4gMiwgJ3VybCcgPT4gJzInXV0pOwoKICAgICAgICAkcmVzdWx0ID0gJGRhdGEtPmdyb3VwQnkoJ3JhdGluZycpOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWzEgPT4gW1sncmF0aW5nJyA9PiAxLCAndXJsJyA9PiAnMSddLCBbJ3JhdGluZycgPT4gMSwgJ3VybCcgPT4gJzEnXV0sIDIgPT4gW1sncmF0aW5nJyA9PiAyLCAndXJsJyA9PiAnMiddXV0sICRyZXN1bHQtPnRvQXJyYXkoKSk7CgogICAgICAgICRyZXN1bHQgPSAkZGF0YS0+Z3JvdXBCeSgndXJsJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbMSA9PiBbWydyYXRpbmcnID0+IDEsICd1cmwnID0+ICcxJ10sIFsncmF0aW5nJyA9PiAxLCAndXJsJyA9PiAnMSddXSwgMiA9PiBbWydyYXRpbmcnID0+IDIsICd1cmwnID0+ICcyJ11dXSwgJHJlc3VsdC0+dG9BcnJheSgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdEdyb3VwQnlBdHRyaWJ1dGVQcmVzZXJ2aW5nS2V5cygpCiAgICB7CiAgICAgICAgJGRhdGEgPSBuZXcgQ29sbGVjdGlvbihbMTAgPT4gWydyYXRpbmcnID0+IDEsICd1cmwnID0+ICcxJ10sICAyMCA9PiBbJ3JhdGluZycgPT4gMSwgJ3VybCcgPT4gJzEnXSwgIDMwID0+IFsncmF0aW5nJyA9PiAyLCAndXJsJyA9PiAnMiddXSk7CgogICAgICAgICRyZXN1bHQgPSAkZGF0YS0+Z3JvdXBCeSgncmF0aW5nJywgdHJ1ZSk7CgogICAgICAgICRleHBlY3RlZF9yZXN1bHQgPSBbCiAgICAgICAgICAgIDEgPT4gWzEwID0+IFsncmF0aW5nJyA9PiAxLCAndXJsJyA9PiAnMSddLCAyMCA9PiBbJ3JhdGluZycgPT4gMSwgJ3VybCcgPT4gJzEnXV0sCiAgICAgICAgICAgIDIgPT4gWzMwID0+IFsncmF0aW5nJyA9PiAyLCAndXJsJyA9PiAnMiddXSwKICAgICAgICBdOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKCRleHBlY3RlZF9yZXN1bHQsICRyZXN1bHQtPnRvQXJyYXkoKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RHcm91cEJ5Q2xvc3VyZVdoZXJlSXRlbXNIYXZlU2luZ2xlR3JvdXAoKQogICAgewogICAgICAgICRkYXRhID0gbmV3IENvbGxlY3Rpb24oW1sncmF0aW5nJyA9PiAxLCAndXJsJyA9PiAnMSddLCBbJ3JhdGluZycgPT4gMSwgJ3VybCcgPT4gJzEnXSwgWydyYXRpbmcnID0+IDIsICd1cmwnID0+ICcyJ11dKTsKCiAgICAgICAgJHJlc3VsdCA9ICRkYXRhLT5ncm91cEJ5KGZ1bmN0aW9uICgkaXRlbSkgewogICAgICAgICAgICByZXR1cm4gJGl0ZW1bJ3JhdGluZyddOwogICAgICAgIH0pOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsxID0+IFtbJ3JhdGluZycgPT4gMSwgJ3VybCcgPT4gJzEnXSwgWydyYXRpbmcnID0+IDEsICd1cmwnID0+ICcxJ11dLCAyID0+IFtbJ3JhdGluZycgPT4gMiwgJ3VybCcgPT4gJzInXV1dLCAkcmVzdWx0LT50b0FycmF5KCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0R3JvdXBCeUNsb3N1cmVXaGVyZUl0ZW1zSGF2ZVNpbmdsZUdyb3VwUHJlc2VydmluZ0tleXMoKQogICAgewogICAgICAgICRkYXRhID0gbmV3IENvbGxlY3Rpb24oWzEwID0+IFsncmF0aW5nJyA9PiAxLCAndXJsJyA9PiAnMSddLCAyMCA9PiBbJ3JhdGluZycgPT4gMSwgJ3VybCcgPT4gJzEnXSwgMzAgPT4gWydyYXRpbmcnID0+IDIsICd1cmwnID0+ICcyJ11dKTsKCiAgICAgICAgJHJlc3VsdCA9ICRkYXRhLT5ncm91cEJ5KGZ1bmN0aW9uICgkaXRlbSkgewogICAgICAgICAgICByZXR1cm4gJGl0ZW1bJ3JhdGluZyddOwogICAgICAgIH0sIHRydWUpOwoKICAgICAgICAkZXhwZWN0ZWRfcmVzdWx0ID0gWwogICAgICAgICAgICAxID0+IFsxMCA9PiBbJ3JhdGluZycgPT4gMSwgJ3VybCcgPT4gJzEnXSwgMjAgPT4gWydyYXRpbmcnID0+IDEsICd1cmwnID0+ICcxJ11dLAogICAgICAgICAgICAyID0+IFszMCA9PiBbJ3JhdGluZycgPT4gMiwgJ3VybCcgPT4gJzInXV0sCiAgICAgICAgXTsKCiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscygkZXhwZWN0ZWRfcmVzdWx0LCAkcmVzdWx0LT50b0FycmF5KCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0R3JvdXBCeUNsb3N1cmVXaGVyZUl0ZW1zSGF2ZU11bHRpcGxlR3JvdXBzKCkKICAgIHsKICAgICAgICAkZGF0YSA9IG5ldyBDb2xsZWN0aW9uKFsKICAgICAgICAgICAgWyd1c2VyJyA9PiAxLCAncm9sZXMnID0+IFsnUm9sZV8xJywgJ1JvbGVfMyddXSwKICAgICAgICAgICAgWyd1c2VyJyA9PiAyLCAncm9sZXMnID0+IFsnUm9sZV8xJywgJ1JvbGVfMiddXSwKICAgICAgICAgICAgWyd1c2VyJyA9PiAzLCAncm9sZXMnID0+IFsnUm9sZV8xJ11dLAogICAgICAgIF0pOwoKICAgICAgICAkcmVzdWx0ID0gJGRhdGEtPmdyb3VwQnkoZnVuY3Rpb24gKCRpdGVtKSB7CiAgICAgICAgICAgIHJldHVybiAkaXRlbVsncm9sZXMnXTsKICAgICAgICB9KTsKCiAgICAgICAgJGV4cGVjdGVkX3Jlc3VsdCA9IFsKICAgICAgICAgICAgJ1JvbGVfMScgPT4gWwogICAgICAgICAgICAgICAgWyd1c2VyJyA9PiAxLCAncm9sZXMnID0+IFsnUm9sZV8xJywgJ1JvbGVfMyddXSwKICAgICAgICAgICAgICAgIFsndXNlcicgPT4gMiwgJ3JvbGVzJyA9PiBbJ1JvbGVfMScsICdSb2xlXzInXV0sCiAgICAgICAgICAgICAgICBbJ3VzZXInID0+IDMsICdyb2xlcycgPT4gWydSb2xlXzEnXV0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICdSb2xlXzInID0+IFsKICAgICAgICAgICAgICAgIFsndXNlcicgPT4gMiwgJ3JvbGVzJyA9PiBbJ1JvbGVfMScsICdSb2xlXzInXV0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICdSb2xlXzMnID0+IFsKICAgICAgICAgICAgICAgIFsndXNlcicgPT4gMSwgJ3JvbGVzJyA9PiBbJ1JvbGVfMScsICdSb2xlXzMnXV0sCiAgICAgICAgICAgIF0sCiAgICAgICAgXTsKCiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscygkZXhwZWN0ZWRfcmVzdWx0LCAkcmVzdWx0LT50b0FycmF5KCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0R3JvdXBCeUNsb3N1cmVXaGVyZUl0ZW1zSGF2ZU11bHRpcGxlR3JvdXBzUHJlc2VydmluZ0tleXMoKQogICAgewogICAgICAgICRkYXRhID0gbmV3IENvbGxlY3Rpb24oWwogICAgICAgICAgICAxMCA9PiBbJ3VzZXInID0+IDEsICdyb2xlcycgPT4gWydSb2xlXzEnLCAnUm9sZV8zJ11dLAogICAgICAgICAgICAyMCA9PiBbJ3VzZXInID0+IDIsICdyb2xlcycgPT4gWydSb2xlXzEnLCAnUm9sZV8yJ11dLAogICAgICAgICAgICAzMCA9PiBbJ3VzZXInID0+IDMsICdyb2xlcycgPT4gWydSb2xlXzEnXV0sCiAgICAgICAgXSk7CgogICAgICAgICRyZXN1bHQgPSAkZGF0YS0+Z3JvdXBCeShmdW5jdGlvbiAoJGl0ZW0pIHsKICAgICAgICAgICAgcmV0dXJuICRpdGVtWydyb2xlcyddOwogICAgICAgIH0sIHRydWUpOwoKICAgICAgICAkZXhwZWN0ZWRfcmVzdWx0ID0gWwogICAgICAgICAgICAnUm9sZV8xJyA9PiBbCiAgICAgICAgICAgICAgICAxMCA9PiBbJ3VzZXInID0+IDEsICdyb2xlcycgPT4gWydSb2xlXzEnLCAnUm9sZV8zJ11dLAogICAgICAgICAgICAgICAgMjAgPT4gWyd1c2VyJyA9PiAyLCAncm9sZXMnID0+IFsnUm9sZV8xJywgJ1JvbGVfMiddXSwKICAgICAgICAgICAgICAgIDMwID0+IFsndXNlcicgPT4gMywgJ3JvbGVzJyA9PiBbJ1JvbGVfMSddXSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgJ1JvbGVfMicgPT4gWwogICAgICAgICAgICAgICAgMjAgPT4gWyd1c2VyJyA9PiAyLCAncm9sZXMnID0+IFsnUm9sZV8xJywgJ1JvbGVfMiddXSwKICAgICAgICAgICAgXSwKICAgICAgICAgICAgJ1JvbGVfMycgPT4gWwogICAgICAgICAgICAgICAgMTAgPT4gWyd1c2VyJyA9PiAxLCAncm9sZXMnID0+IFsnUm9sZV8xJywgJ1JvbGVfMyddXSwKICAgICAgICAgICAgXSwKICAgICAgICBdOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKCRleHBlY3RlZF9yZXN1bHQsICRyZXN1bHQtPnRvQXJyYXkoKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RHcm91cEJ5TXVsdGlMZXZlbEFuZENsb3N1cmVQcmVzZXJ2aW5nS2V5cygpCiAgICB7CiAgICAgICAgJGRhdGEgPSBuZXcgQ29sbGVjdGlvbihbCiAgICAgICAgICAgIDEwID0+IFsndXNlcicgPT4gMSwgJ3NraWxsbGV2ZWwnID0+IDEsICdyb2xlcycgPT4gWydSb2xlXzEnLCAnUm9sZV8zJ11dLAogICAgICAgICAgICAyMCA9PiBbJ3VzZXInID0+IDIsICdza2lsbGxldmVsJyA9PiAxLCAncm9sZXMnID0+IFsnUm9sZV8xJywgJ1JvbGVfMiddXSwKICAgICAgICAgICAgMzAgPT4gWyd1c2VyJyA9PiAzLCAnc2tpbGxsZXZlbCcgPT4gMiwgJ3JvbGVzJyA9PiBbJ1JvbGVfMSddXSwKICAgICAgICAgICAgNDAgPT4gWyd1c2VyJyA9PiA0LCAnc2tpbGxsZXZlbCcgPT4gMiwgJ3JvbGVzJyA9PiBbJ1JvbGVfMiddXSwKICAgICAgICBdKTsKCiAgICAgICAgJHJlc3VsdCA9ICRkYXRhLT5ncm91cEJ5KFsKICAgICAgICAgICAgJ3NraWxsbGV2ZWwnLAogICAgICAgICAgICBmdW5jdGlvbiAoJGl0ZW0pIHsKICAgICAgICAgICAgICAgIHJldHVybiAkaXRlbVsncm9sZXMnXTsKICAgICAgICAgICAgfSwKICAgICAgICBdLCB0cnVlKTsKCiAgICAgICAgJGV4cGVjdGVkX3Jlc3VsdCA9IFsKICAgICAgICAgICAgMSA9PiBbCiAgICAgICAgICAgICAgICAnUm9sZV8xJyA9PiBbCiAgICAgICAgICAgICAgICAgICAgMTAgPT4gWyd1c2VyJyA9PiAxLCAnc2tpbGxsZXZlbCcgPT4gMSwgJ3JvbGVzJyA9PiBbJ1JvbGVfMScsICdSb2xlXzMnXV0sCiAgICAgICAgICAgICAgICAgICAgMjAgPT4gWyd1c2VyJyA9PiAyLCAnc2tpbGxsZXZlbCcgPT4gMSwgJ3JvbGVzJyA9PiBbJ1JvbGVfMScsICdSb2xlXzInXV0sCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgJ1JvbGVfMycgPT4gWwogICAgICAgICAgICAgICAgICAgIDEwID0+IFsndXNlcicgPT4gMSwgJ3NraWxsbGV2ZWwnID0+IDEsICdyb2xlcycgPT4gWydSb2xlXzEnLCAnUm9sZV8zJ11dLAogICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICdSb2xlXzInID0+IFsKICAgICAgICAgICAgICAgICAgICAyMCA9PiBbJ3VzZXInID0+IDIsICdza2lsbGxldmVsJyA9PiAxLCAncm9sZXMnID0+IFsnUm9sZV8xJywgJ1JvbGVfMiddXSwKICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIDIgPT4gWwogICAgICAgICAgICAgICAgJ1JvbGVfMScgPT4gWwogICAgICAgICAgICAgICAgICAgIDMwID0+IFsndXNlcicgPT4gMywgJ3NraWxsbGV2ZWwnID0+IDIsICdyb2xlcycgPT4gWydSb2xlXzEnXV0sCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgJ1JvbGVfMicgPT4gWwogICAgICAgICAgICAgICAgICAgIDQwID0+IFsndXNlcicgPT4gNCwgJ3NraWxsbGV2ZWwnID0+IDIsICdyb2xlcycgPT4gWydSb2xlXzInXV0sCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICBdLAogICAgICAgIF07CgogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoJGV4cGVjdGVkX3Jlc3VsdCwgJHJlc3VsdC0+dG9BcnJheSgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdEtleUJ5QXR0cmlidXRlKCkKICAgIHsKICAgICAgICAkZGF0YSA9IG5ldyBDb2xsZWN0aW9uKFtbJ3JhdGluZycgPT4gMSwgJ25hbWUnID0+ICcxJ10sIFsncmF0aW5nJyA9PiAyLCAnbmFtZScgPT4gJzInXSwgWydyYXRpbmcnID0+IDMsICduYW1lJyA9PiAnMyddXSk7CgogICAgICAgICRyZXN1bHQgPSAkZGF0YS0+a2V5QnkoJ3JhdGluZycpOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWzEgPT4gWydyYXRpbmcnID0+IDEsICduYW1lJyA9PiAnMSddLCAyID0+IFsncmF0aW5nJyA9PiAyLCAnbmFtZScgPT4gJzInXSwgMyA9PiBbJ3JhdGluZycgPT4gMywgJ25hbWUnID0+ICczJ11dLCAkcmVzdWx0LT5hbGwoKSk7CgogICAgICAgICRyZXN1bHQgPSAkZGF0YS0+a2V5QnkoZnVuY3Rpb24gKCRpdGVtKSB7CiAgICAgICAgICAgIHJldHVybiAkaXRlbVsncmF0aW5nJ10gKiAyOwogICAgICAgIH0pOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWzIgPT4gWydyYXRpbmcnID0+IDEsICduYW1lJyA9PiAnMSddLCA0ID0+IFsncmF0aW5nJyA9PiAyLCAnbmFtZScgPT4gJzInXSwgNiA9PiBbJ3JhdGluZycgPT4gMywgJ25hbWUnID0+ICczJ11dLCAkcmVzdWx0LT5hbGwoKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RLZXlCeUNsb3N1cmUoKQogICAgewogICAgICAgICRkYXRhID0gbmV3IENvbGxlY3Rpb24oWwogICAgICAgICAgICBbJ2ZpcnN0bmFtZScgPT4gJ1RheWxvcicsICdsYXN0bmFtZScgPT4gJ090d2VsbCcsICdsb2NhbGUnID0+ICdVUyddLAogICAgICAgICAgICBbJ2ZpcnN0bmFtZScgPT4gJ0x1Y2FzJywgJ2xhc3RuYW1lJyA9PiAnTWljaG90JywgJ2xvY2FsZScgPT4gJ0ZSJ10sCiAgICAgICAgXSk7CiAgICAgICAgJHJlc3VsdCA9ICRkYXRhLT5rZXlCeShmdW5jdGlvbiAoJGl0ZW0sICRrZXkpIHsKICAgICAgICAgICAgcmV0dXJuIHN0cnRvbG93ZXIoJGtleS4nLScuJGl0ZW1bJ2ZpcnN0bmFtZSddLiRpdGVtWydsYXN0bmFtZSddKTsKICAgICAgICB9KTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsKICAgICAgICAgICAgJzAtdGF5bG9yb3R3ZWxsJyA9PiBbJ2ZpcnN0bmFtZScgPT4gJ1RheWxvcicsICdsYXN0bmFtZScgPT4gJ090d2VsbCcsICdsb2NhbGUnID0+ICdVUyddLAogICAgICAgICAgICAnMS1sdWNhc21pY2hvdCcgPT4gWydmaXJzdG5hbWUnID0+ICdMdWNhcycsICdsYXN0bmFtZScgPT4gJ01pY2hvdCcsICdsb2NhbGUnID0+ICdGUiddLAogICAgICAgIF0sICRyZXN1bHQtPmFsbCgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdENvbnRhaW5zKCkKICAgIHsKICAgICAgICAkYyA9IG5ldyBDb2xsZWN0aW9uKFsxLCAzLCA1XSk7CgogICAgICAgICR0aGlzLT5hc3NlcnRUcnVlKCRjLT5jb250YWlucygxKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEZhbHNlKCRjLT5jb250YWlucygyKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydFRydWUoJGMtPmNvbnRhaW5zKGZ1bmN0aW9uICgkdmFsdWUpIHsKICAgICAgICAgICAgcmV0dXJuICR2YWx1ZSA8IDU7CiAgICAgICAgfSkpOwogICAgICAgICR0aGlzLT5hc3NlcnRGYWxzZSgkYy0+Y29udGFpbnMoZnVuY3Rpb24gKCR2YWx1ZSkgewogICAgICAgICAgICByZXR1cm4gJHZhbHVlID4gNTsKICAgICAgICB9KSk7CgogICAgICAgICRjID0gbmV3IENvbGxlY3Rpb24oW1sndicgPT4gMV0sIFsndicgPT4gM10sIFsndicgPT4gNV1dKTsKCiAgICAgICAgJHRoaXMtPmFzc2VydFRydWUoJGMtPmNvbnRhaW5zKCd2JywgMSkpOwogICAgICAgICR0aGlzLT5hc3NlcnRGYWxzZSgkYy0+Y29udGFpbnMoJ3YnLCAyKSk7CgogICAgICAgICRjID0gbmV3IENvbGxlY3Rpb24oWydkYXRlJywgJ2NsYXNzJywgKG9iamVjdCkgWydmb28nID0+IDUwXV0pOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0VHJ1ZSgkYy0+Y29udGFpbnMoJ2RhdGUnKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydFRydWUoJGMtPmNvbnRhaW5zKCdjbGFzcycpKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RmFsc2UoJGMtPmNvbnRhaW5zKCdmb28nKSk7CgogICAgICAgICRjID0gbmV3IENvbGxlY3Rpb24oW1snYScgPT4gZmFsc2UsICdiJyA9PiBmYWxzZV0sIFsnYScgPT4gdHJ1ZSwgJ2InID0+IGZhbHNlXV0pOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0VHJ1ZSgkYy0+Y29udGFpbnMtPmEpOwogICAgICAgICR0aGlzLT5hc3NlcnRGYWxzZSgkYy0+Y29udGFpbnMtPmIpOwoKICAgICAgICAkYyA9IG5ldyBDb2xsZWN0aW9uKFsKICAgICAgICAgICAgbnVsbCwgMSwgMiwKICAgICAgICBdKTsKCiAgICAgICAgJHRoaXMtPmFzc2VydFRydWUoJGMtPmNvbnRhaW5zKGZ1bmN0aW9uICgkdmFsdWUpIHsKICAgICAgICAgICAgcmV0dXJuIGlzX251bGwoJHZhbHVlKTsKICAgICAgICB9KSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RDb250YWluc1N0cmljdCgpCiAgICB7CiAgICAgICAgJGMgPSBuZXcgQ29sbGVjdGlvbihbMSwgMywgNSwgJzAyJ10pOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0VHJ1ZSgkYy0+Y29udGFpbnNTdHJpY3QoMSkpOwogICAgICAgICR0aGlzLT5hc3NlcnRGYWxzZSgkYy0+Y29udGFpbnNTdHJpY3QoMikpOwogICAgICAgICR0aGlzLT5hc3NlcnRUcnVlKCRjLT5jb250YWluc1N0cmljdCgnMDInKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydFRydWUoJGMtPmNvbnRhaW5zU3RyaWN0KGZ1bmN0aW9uICgkdmFsdWUpIHsKICAgICAgICAgICAgcmV0dXJuICR2YWx1ZSA8IDU7CiAgICAgICAgfSkpOwogICAgICAgICR0aGlzLT5hc3NlcnRGYWxzZSgkYy0+Y29udGFpbnNTdHJpY3QoZnVuY3Rpb24gKCR2YWx1ZSkgewogICAgICAgICAgICByZXR1cm4gJHZhbHVlID4gNTsKICAgICAgICB9KSk7CgogICAgICAgICRjID0gbmV3IENvbGxlY3Rpb24oW1sndicgPT4gMV0sIFsndicgPT4gM10sIFsndicgPT4gJzA0J10sIFsndicgPT4gNV1dKTsKCiAgICAgICAgJHRoaXMtPmFzc2VydFRydWUoJGMtPmNvbnRhaW5zU3RyaWN0KCd2JywgMSkpOwogICAgICAgICR0aGlzLT5hc3NlcnRGYWxzZSgkYy0+Y29udGFpbnNTdHJpY3QoJ3YnLCAyKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEZhbHNlKCRjLT5jb250YWluc1N0cmljdCgndicsIDQpKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0VHJ1ZSgkYy0+Y29udGFpbnNTdHJpY3QoJ3YnLCAnMDQnKSk7CgogICAgICAgICRjID0gbmV3IENvbGxlY3Rpb24oWydkYXRlJywgJ2NsYXNzJywgKG9iamVjdCkgWydmb28nID0+IDUwXSwgJyddKTsKCiAgICAgICAgJHRoaXMtPmFzc2VydFRydWUoJGMtPmNvbnRhaW5zU3RyaWN0KCdkYXRlJykpOwogICAgICAgICR0aGlzLT5hc3NlcnRUcnVlKCRjLT5jb250YWluc1N0cmljdCgnY2xhc3MnKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEZhbHNlKCRjLT5jb250YWluc1N0cmljdCgnZm9vJykpOwogICAgICAgICR0aGlzLT5hc3NlcnRGYWxzZSgkYy0+Y29udGFpbnNTdHJpY3QobnVsbCkpOwogICAgICAgICR0aGlzLT5hc3NlcnRUcnVlKCRjLT5jb250YWluc1N0cmljdCgnJykpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0Q29udGFpbnNXaXRoT3BlcmF0b3IoKQogICAgewogICAgICAgICRjID0gbmV3IENvbGxlY3Rpb24oW1sndicgPT4gMV0sIFsndicgPT4gM10sIFsndicgPT4gJzQnXSwgWyd2JyA9PiA1XV0pOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0VHJ1ZSgkYy0+Y29udGFpbnMoJ3YnLCAnPScsIDQpKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0VHJ1ZSgkYy0+Y29udGFpbnMoJ3YnLCAnPT0nLCA0KSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEZhbHNlKCRjLT5jb250YWlucygndicsICc9PT0nLCA0KSk7CiAgICAgICAgJHRoaXMtPmFzc2VydFRydWUoJGMtPmNvbnRhaW5zKCd2JywgJz4nLCA0KSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RHZXR0aW5nU3VtRnJvbUNvbGxlY3Rpb24oKQogICAgewogICAgICAgICRjID0gbmV3IENvbGxlY3Rpb24oWyhvYmplY3QpIFsnZm9vJyA9PiA1MF0sIChvYmplY3QpIFsnZm9vJyA9PiA1MF1dKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKDEwMCwgJGMtPnN1bSgnZm9vJykpOwoKICAgICAgICAkYyA9IG5ldyBDb2xsZWN0aW9uKFsob2JqZWN0KSBbJ2ZvbycgPT4gNTBdLCAob2JqZWN0KSBbJ2ZvbycgPT4gNTBdXSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscygxMDAsICRjLT5zdW0oZnVuY3Rpb24gKCRpKSB7CiAgICAgICAgICAgIHJldHVybiAkaS0+Zm9vOwogICAgICAgIH0pKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdENhblN1bVZhbHVlc1dpdGhvdXRBQ2FsbGJhY2soKQogICAgewogICAgICAgICRjID0gbmV3IENvbGxlY3Rpb24oWzEsIDIsIDMsIDQsIDVdKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKDE1LCAkYy0+c3VtKCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0R2V0dGluZ1N1bUZyb21FbXB0eUNvbGxlY3Rpb24oKQogICAgewogICAgICAgICRjID0gbmV3IENvbGxlY3Rpb247CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscygwLCAkYy0+c3VtKCdmb28nKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RWYWx1ZVJldHJpZXZlckFjY2VwdHNEb3ROb3RhdGlvbigpCiAgICB7CiAgICAgICAgJGMgPSBuZXcgQ29sbGVjdGlvbihbCiAgICAgICAgICAgIChvYmplY3QpIFsnaWQnID0+IDEsICdmb28nID0+IFsnYmFyJyA9PiAnQiddXSwgKG9iamVjdCkgWydpZCcgPT4gMiwgJ2ZvbycgPT4gWydiYXInID0+ICdBJ11dLAogICAgICAgIF0pOwoKICAgICAgICAkYyA9ICRjLT5zb3J0QnkoJ2Zvby5iYXInKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsyLCAxXSwgJGMtPnBsdWNrKCdpZCcpLT5hbGwoKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RQdWxsUmV0cmlldmVzSXRlbUZyb21Db2xsZWN0aW9uKCkKICAgIHsKICAgICAgICAkYyA9IG5ldyBDb2xsZWN0aW9uKFsnZm9vJywgJ2JhciddKTsKCiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscygnZm9vJywgJGMtPnB1bGwoMCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0UHVsbFJlbW92ZXNJdGVtRnJvbUNvbGxlY3Rpb24oKQogICAgewogICAgICAgICRjID0gbmV3IENvbGxlY3Rpb24oWydmb28nLCAnYmFyJ10pOwogICAgICAgICRjLT5wdWxsKDApOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWzEgPT4gJ2JhciddLCAkYy0+YWxsKCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0UHVsbFJldHVybnNEZWZhdWx0KCkKICAgIHsKICAgICAgICAkYyA9IG5ldyBDb2xsZWN0aW9uKFtdKTsKICAgICAgICAkdmFsdWUgPSAkYy0+cHVsbCgwLCAnZm9vJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscygnZm9vJywgJHZhbHVlKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdFJlamVjdFJlbW92ZXNFbGVtZW50c1Bhc3NpbmdUcnV0aFRlc3QoKQogICAgewogICAgICAgICRjID0gbmV3IENvbGxlY3Rpb24oWydmb28nLCAnYmFyJ10pOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWydmb28nXSwgJGMtPnJlamVjdCgnYmFyJyktPnZhbHVlcygpLT5hbGwoKSk7CgogICAgICAgICRjID0gbmV3IENvbGxlY3Rpb24oWydmb28nLCAnYmFyJ10pOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWydmb28nXSwgJGMtPnJlamVjdChmdW5jdGlvbiAoJHYpIHsKICAgICAgICAgICAgcmV0dXJuICR2ID09ICdiYXInOwogICAgICAgIH0pLT52YWx1ZXMoKS0+YWxsKCkpOwoKICAgICAgICAkYyA9IG5ldyBDb2xsZWN0aW9uKFsnZm9vJywgbnVsbF0pOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWydmb28nXSwgJGMtPnJlamVjdChudWxsKS0+dmFsdWVzKCktPmFsbCgpKTsKCiAgICAgICAgJGMgPSBuZXcgQ29sbGVjdGlvbihbJ2ZvbycsICdiYXInXSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJ2ZvbycsICdiYXInXSwgJGMtPnJlamVjdCgnYmF6JyktPnZhbHVlcygpLT5hbGwoKSk7CgogICAgICAgICRjID0gbmV3IENvbGxlY3Rpb24oWydmb28nLCAnYmFyJ10pOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWydmb28nLCAnYmFyJ10sICRjLT5yZWplY3QoZnVuY3Rpb24gKCR2KSB7CiAgICAgICAgICAgIHJldHVybiAkdiA9PSAnYmF6JzsKICAgICAgICB9KS0+dmFsdWVzKCktPmFsbCgpKTsKCiAgICAgICAgJGMgPSBuZXcgQ29sbGVjdGlvbihbJ2lkJyA9PiAxLCAncHJpbWFyeScgPT4gJ2ZvbycsICdzZWNvbmRhcnknID0+ICdiYXInXSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJ3ByaW1hcnknID0+ICdmb28nLCAnc2Vjb25kYXJ5JyA9PiAnYmFyJ10sICRjLT5yZWplY3QoZnVuY3Rpb24gKCRpdGVtLCAka2V5KSB7CiAgICAgICAgICAgIHJldHVybiAka2V5ID09ICdpZCc7CiAgICAgICAgfSktPmFsbCgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdFNlYXJjaFJldHVybnNJbmRleE9mRmlyc3RGb3VuZEl0ZW0oKQogICAgewogICAgICAgICRjID0gbmV3IENvbGxlY3Rpb24oWzEsIDIsIDMsIDQsIDUsIDIsIDUsICdmb28nID0+ICdiYXInXSk7CgogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoMSwgJGMtPnNlYXJjaCgyKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscygnZm9vJywgJGMtPnNlYXJjaCgnYmFyJykpOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoNCwgJGMtPnNlYXJjaChmdW5jdGlvbiAoJHZhbHVlKSB7CiAgICAgICAgICAgIHJldHVybiAkdmFsdWUgPiA0OwogICAgICAgIH0pKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKCdmb28nLCAkYy0+c2VhcmNoKGZ1bmN0aW9uICgkdmFsdWUpIHsKICAgICAgICAgICAgcmV0dXJuICEgaXNfbnVtZXJpYygkdmFsdWUpOwogICAgICAgIH0pKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdFNlYXJjaFJldHVybnNGYWxzZVdoZW5JdGVtSXNOb3RGb3VuZCgpCiAgICB7CiAgICAgICAgJGMgPSBuZXcgQ29sbGVjdGlvbihbMSwgMiwgMywgNCwgNSwgJ2ZvbycgPT4gJ2JhciddKTsKCiAgICAgICAgJHRoaXMtPmFzc2VydEZhbHNlKCRjLT5zZWFyY2goNikpOwogICAgICAgICR0aGlzLT5hc3NlcnRGYWxzZSgkYy0+c2VhcmNoKCdmb28nKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEZhbHNlKCRjLT5zZWFyY2goZnVuY3Rpb24gKCR2YWx1ZSkgewogICAgICAgICAgICByZXR1cm4gJHZhbHVlIDwgMSAmJiBpc19udW1lcmljKCR2YWx1ZSk7CiAgICAgICAgfSkpOwogICAgICAgICR0aGlzLT5hc3NlcnRGYWxzZSgkYy0+c2VhcmNoKGZ1bmN0aW9uICgkdmFsdWUpIHsKICAgICAgICAgICAgcmV0dXJuICR2YWx1ZSA9PSAnbm9wZSc7CiAgICAgICAgfSkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0S2V5cygpCiAgICB7CiAgICAgICAgJGMgPSBuZXcgQ29sbGVjdGlvbihbJ25hbWUnID0+ICd0YXlsb3InLCAnZnJhbWV3b3JrJyA9PiAnbGFyYXZlbCddKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsnbmFtZScsICdmcmFtZXdvcmsnXSwgJGMtPmtleXMoKS0+YWxsKCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0UGFnaW5hdGUoKQogICAgewogICAgICAgICRjID0gbmV3IENvbGxlY3Rpb24oWydvbmUnLCAndHdvJywgJ3RocmVlJywgJ2ZvdXInXSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJ29uZScsICd0d28nXSwgJGMtPmZvclBhZ2UoMCwgMiktPmFsbCgpKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsnb25lJywgJ3R3byddLCAkYy0+Zm9yUGFnZSgxLCAyKS0+YWxsKCkpOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWzIgPT4gJ3RocmVlJywgMyA9PiAnZm91ciddLCAkYy0+Zm9yUGFnZSgyLCAyKS0+YWxsKCkpOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoW10sICRjLT5mb3JQYWdlKDMsIDIpLT5hbGwoKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RQcmVwZW5kKCkKICAgIHsKICAgICAgICAkYyA9IG5ldyBDb2xsZWN0aW9uKFsnb25lJywgJ3R3bycsICd0aHJlZScsICdmb3VyJ10pOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWyd6ZXJvJywgJ29uZScsICd0d28nLCAndGhyZWUnLCAnZm91ciddLCAkYy0+cHJlcGVuZCgnemVybycpLT5hbGwoKSk7CgogICAgICAgICRjID0gbmV3IENvbGxlY3Rpb24oWydvbmUnID0+IDEsICd0d28nID0+IDJdKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsnemVybycgPT4gMCwgJ29uZScgPT4gMSwgJ3R3bycgPT4gMl0sICRjLT5wcmVwZW5kKDAsICd6ZXJvJyktPmFsbCgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdFppcCgpCiAgICB7CiAgICAgICAgJGMgPSBuZXcgQ29sbGVjdGlvbihbMSwgMiwgM10pOwogICAgICAgICRjID0gJGMtPnppcChuZXcgQ29sbGVjdGlvbihbNCwgNSwgNl0pKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0SW5zdGFuY2VPZihDb2xsZWN0aW9uOjpjbGFzcywgJGMpOwogICAgICAgICR0aGlzLT5hc3NlcnRJbnN0YW5jZU9mKENvbGxlY3Rpb246OmNsYXNzLCAkY1swXSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEluc3RhbmNlT2YoQ29sbGVjdGlvbjo6Y2xhc3MsICRjWzFdKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0SW5zdGFuY2VPZihDb2xsZWN0aW9uOjpjbGFzcywgJGNbMl0pOwogICAgICAgICR0aGlzLT5hc3NlcnRDb3VudCgzLCAkYyk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbMSwgNF0sICRjWzBdLT5hbGwoKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbMiwgNV0sICRjWzFdLT5hbGwoKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbMywgNl0sICRjWzJdLT5hbGwoKSk7CgogICAgICAgICRjID0gbmV3IENvbGxlY3Rpb24oWzEsIDIsIDNdKTsKICAgICAgICAkYyA9ICRjLT56aXAoWzQsIDUsIDZdLCBbNywgOCwgOV0pOwogICAgICAgICR0aGlzLT5hc3NlcnRDb3VudCgzLCAkYyk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbMSwgNCwgN10sICRjWzBdLT5hbGwoKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbMiwgNSwgOF0sICRjWzFdLT5hbGwoKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbMywgNiwgOV0sICRjWzJdLT5hbGwoKSk7CgogICAgICAgICRjID0gbmV3IENvbGxlY3Rpb24oWzEsIDIsIDNdKTsKICAgICAgICAkYyA9ICRjLT56aXAoWzQsIDUsIDZdLCBbN10pOwogICAgICAgICR0aGlzLT5hc3NlcnRDb3VudCgzLCAkYyk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbMSwgNCwgN10sICRjWzBdLT5hbGwoKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbMiwgNSwgbnVsbF0sICRjWzFdLT5hbGwoKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbMywgNiwgbnVsbF0sICRjWzJdLT5hbGwoKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RQYWRQYWRzQXJyYXlXaXRoVmFsdWUoKQogICAgewogICAgICAgICRjID0gbmV3IENvbGxlY3Rpb24oWzEsIDIsIDNdKTsKICAgICAgICAkYyA9ICRjLT5wYWQoNCwgMCk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbMSwgMiwgMywgMF0sICRjLT5hbGwoKSk7CgogICAgICAgICRjID0gbmV3IENvbGxlY3Rpb24oWzEsIDIsIDMsIDQsIDVdKTsKICAgICAgICAkYyA9ICRjLT5wYWQoNCwgMCk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbMSwgMiwgMywgNCwgNV0sICRjLT5hbGwoKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RHZXR0aW5nTWF4SXRlbXNGcm9tQ29sbGVjdGlvbigpCiAgICB7CiAgICAgICAgJGMgPSBuZXcgQ29sbGVjdGlvbihbKG9iamVjdCkgWydmb28nID0+IDEwXSwgKG9iamVjdCkgWydmb28nID0+IDIwXV0pOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoMjAsICRjLT5tYXgoZnVuY3Rpb24gKCRpdGVtKSB7CiAgICAgICAgICAgIHJldHVybiAkaXRlbS0+Zm9vOwogICAgICAgIH0pKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKDIwLCAkYy0+bWF4KCdmb28nKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscygyMCwgJGMtPm1heC0+Zm9vKTsKCiAgICAgICAgJGMgPSBuZXcgQ29sbGVjdGlvbihbWydmb28nID0+IDEwXSwgWydmb28nID0+IDIwXV0pOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoMjAsICRjLT5tYXgoJ2ZvbycpKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKDIwLCAkYy0+bWF4LT5mb28pOwoKICAgICAgICAkYyA9IG5ldyBDb2xsZWN0aW9uKFsxLCAyLCAzLCA0LCA1XSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyg1LCAkYy0+bWF4KCkpOwoKICAgICAgICAkYyA9IG5ldyBDb2xsZWN0aW9uOwogICAgICAgICR0aGlzLT5hc3NlcnROdWxsKCRjLT5tYXgoKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RHZXR0aW5nTWluSXRlbXNGcm9tQ29sbGVjdGlvbigpCiAgICB7CiAgICAgICAgJGMgPSBuZXcgQ29sbGVjdGlvbihbKG9iamVjdCkgWydmb28nID0+IDEwXSwgKG9iamVjdCkgWydmb28nID0+IDIwXV0pOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoMTAsICRjLT5taW4oZnVuY3Rpb24gKCRpdGVtKSB7CiAgICAgICAgICAgIHJldHVybiAkaXRlbS0+Zm9vOwogICAgICAgIH0pKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKDEwLCAkYy0+bWluKCdmb28nKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscygxMCwgJGMtPm1pbi0+Zm9vKTsKCiAgICAgICAgJGMgPSBuZXcgQ29sbGVjdGlvbihbWydmb28nID0+IDEwXSwgWydmb28nID0+IDIwXV0pOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoMTAsICRjLT5taW4oJ2ZvbycpKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKDEwLCAkYy0+bWluLT5mb28pOwoKICAgICAgICAkYyA9IG5ldyBDb2xsZWN0aW9uKFsxLCAyLCAzLCA0LCA1XSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscygxLCAkYy0+bWluKCkpOwoKICAgICAgICAkYyA9IG5ldyBDb2xsZWN0aW9uKFsxLCBudWxsLCAzLCA0LCA1XSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscygxLCAkYy0+bWluKCkpOwoKICAgICAgICAkYyA9IG5ldyBDb2xsZWN0aW9uKFswLCAxLCAyLCAzLCA0XSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscygwLCAkYy0+bWluKCkpOwoKICAgICAgICAkYyA9IG5ldyBDb2xsZWN0aW9uOwogICAgICAgICR0aGlzLT5hc3NlcnROdWxsKCRjLT5taW4oKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RPbmx5KCkKICAgIHsKICAgICAgICAkZGF0YSA9IG5ldyBDb2xsZWN0aW9uKFsnZmlyc3QnID0+ICdUYXlsb3InLCAnbGFzdCcgPT4gJ090d2VsbCcsICdlbWFpbCcgPT4gJ3RheWxvcm90d2VsbEBnbWFpbC5jb20nXSk7CgogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoJGRhdGEtPmFsbCgpLCAkZGF0YS0+b25seShudWxsKS0+YWxsKCkpOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWydmaXJzdCcgPT4gJ1RheWxvciddLCAkZGF0YS0+b25seShbJ2ZpcnN0JywgJ21pc3NpbmcnXSktPmFsbCgpKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsnZmlyc3QnID0+ICdUYXlsb3InXSwgJGRhdGEtPm9ubHkoJ2ZpcnN0JywgJ21pc3NpbmcnKS0+YWxsKCkpOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWydmaXJzdCcgPT4gJ1RheWxvciddLCAkZGF0YS0+b25seShjb2xsZWN0KFsnZmlyc3QnLCAnbWlzc2luZyddKSktPmFsbCgpKTsKCiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJ2ZpcnN0JyA9PiAnVGF5bG9yJywgJ2VtYWlsJyA9PiAndGF5bG9yb3R3ZWxsQGdtYWlsLmNvbSddLCAkZGF0YS0+b25seShbJ2ZpcnN0JywgJ2VtYWlsJ10pLT5hbGwoKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJ2ZpcnN0JyA9PiAnVGF5bG9yJywgJ2VtYWlsJyA9PiAndGF5bG9yb3R3ZWxsQGdtYWlsLmNvbSddLCAkZGF0YS0+b25seSgnZmlyc3QnLCAnZW1haWwnKS0+YWxsKCkpOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWydmaXJzdCcgPT4gJ1RheWxvcicsICdlbWFpbCcgPT4gJ3RheWxvcm90d2VsbEBnbWFpbC5jb20nXSwgJGRhdGEtPm9ubHkoY29sbGVjdChbJ2ZpcnN0JywgJ2VtYWlsJ10pKS0+YWxsKCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0R2V0dGluZ0F2Z0l0ZW1zRnJvbUNvbGxlY3Rpb24oKQogICAgewogICAgICAgICRjID0gbmV3IENvbGxlY3Rpb24oWyhvYmplY3QpIFsnZm9vJyA9PiAxMF0sIChvYmplY3QpIFsnZm9vJyA9PiAyMF1dKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKDE1LCAkYy0+YXZnKGZ1bmN0aW9uICgkaXRlbSkgewogICAgICAgICAgICByZXR1cm4gJGl0ZW0tPmZvbzsKICAgICAgICB9KSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscygxNSwgJGMtPmF2ZygnZm9vJykpOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoMTUsICRjLT5hdmctPmZvbyk7CgogICAgICAgICRjID0gbmV3IENvbGxlY3Rpb24oW1snZm9vJyA9PiAxMF0sIFsnZm9vJyA9PiAyMF1dKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKDE1LCAkYy0+YXZnKCdmb28nKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscygxNSwgJGMtPmF2Zy0+Zm9vKTsKCiAgICAgICAgJGMgPSBuZXcgQ29sbGVjdGlvbihbMSwgMiwgMywgNCwgNV0pOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoMywgJGMtPmF2ZygpKTsKCiAgICAgICAgJGMgPSBuZXcgQ29sbGVjdGlvbjsKICAgICAgICAkdGhpcy0+YXNzZXJ0TnVsbCgkYy0+YXZnKCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0SnNvblNlcmlhbGl6ZSgpCiAgICB7CiAgICAgICAgJGMgPSBuZXcgQ29sbGVjdGlvbihbCiAgICAgICAgICAgIG5ldyBUZXN0QXJyYXlhYmxlT2JqZWN0LAogICAgICAgICAgICBuZXcgVGVzdEpzb25hYmxlT2JqZWN0LAogICAgICAgICAgICBuZXcgVGVzdEpzb25TZXJpYWxpemVPYmplY3QsCiAgICAgICAgICAgICdiYXonLAogICAgICAgIF0pOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0U2FtZShbCiAgICAgICAgICAgIFsnZm9vJyA9PiAnYmFyJ10sCiAgICAgICAgICAgIFsnZm9vJyA9PiAnYmFyJ10sCiAgICAgICAgICAgIFsnZm9vJyA9PiAnYmFyJ10sCiAgICAgICAgICAgICdiYXonLAogICAgICAgIF0sICRjLT5qc29uU2VyaWFsaXplKCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0Q29tYmluZVdpdGhBcnJheSgpCiAgICB7CiAgICAgICAgJGV4cGVjdGVkID0gWwogICAgICAgICAgICAxID0+IDQsCiAgICAgICAgICAgIDIgPT4gNSwKICAgICAgICAgICAgMyA9PiA2LAogICAgICAgIF07CgogICAgICAgICRjID0gbmV3IENvbGxlY3Rpb24oYXJyYXlfa2V5cygkZXhwZWN0ZWQpKTsKICAgICAgICAkYWN0dWFsID0gJGMtPmNvbWJpbmUoYXJyYXlfdmFsdWVzKCRleHBlY3RlZCkpLT50b0FycmF5KCk7CgogICAgICAgICR0aGlzLT5hc3NlcnRTYW1lKCRleHBlY3RlZCwgJGFjdHVhbCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RDb21iaW5lV2l0aENvbGxlY3Rpb24oKQogICAgewogICAgICAgICRleHBlY3RlZCA9IFsKICAgICAgICAgICAgMSA9PiA0LAogICAgICAgICAgICAyID0+IDUsCiAgICAgICAgICAgIDMgPT4gNiwKICAgICAgICBdOwoKICAgICAgICAka2V5Q29sbGVjdGlvbiA9IG5ldyBDb2xsZWN0aW9uKGFycmF5X2tleXMoJGV4cGVjdGVkKSk7CiAgICAgICAgJHZhbHVlQ29sbGVjdGlvbiA9IG5ldyBDb2xsZWN0aW9uKGFycmF5X3ZhbHVlcygkZXhwZWN0ZWQpKTsKICAgICAgICAkYWN0dWFsID0gJGtleUNvbGxlY3Rpb24tPmNvbWJpbmUoJHZhbHVlQ29sbGVjdGlvbiktPnRvQXJyYXkoKTsKCiAgICAgICAgJHRoaXMtPmFzc2VydFNhbWUoJGV4cGVjdGVkLCAkYWN0dWFsKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdENvbmNhdFdpdGhBcnJheSgpCiAgICB7CiAgICAgICAgJGV4cGVjdGVkID0gWwogICAgICAgICAgICAwID0+IDQsCiAgICAgICAgICAgIDEgPT4gNSwKICAgICAgICAgICAgMiA9PiA2LAogICAgICAgICAgICAzID0+ICdhJywKICAgICAgICAgICAgNCA9PiAnYicsCiAgICAgICAgICAgIDUgPT4gJ2MnLAogICAgICAgICAgICA2ID0+ICdKb25ueScsCiAgICAgICAgICAgIDcgPT4gJ2Zyb20nLAogICAgICAgICAgICA4ID0+ICdMYXJvZScsCiAgICAgICAgICAgIDkgPT4gJ0pvbm55JywKICAgICAgICAgICAgMTAgPT4gJ2Zyb20nLAogICAgICAgICAgICAxMSA9PiAnTGFyb2UnLAogICAgICAgIF07CgogICAgICAgICRjb2xsZWN0aW9uID0gbmV3IENvbGxlY3Rpb24oWzQsIDUsIDZdKTsKICAgICAgICAkY29sbGVjdGlvbiA9ICRjb2xsZWN0aW9uLT5jb25jYXQoWydhJywgJ2InLCAnYyddKTsKICAgICAgICAkY29sbGVjdGlvbiA9ICRjb2xsZWN0aW9uLT5jb25jYXQoWyd3aG8nID0+ICdKb25ueScsICdwcmVwb3NpdGlvbicgPT4gJ2Zyb20nLCAnd2hlcmUnID0+ICdMYXJvZSddKTsKICAgICAgICAkYWN0dWFsID0gJGNvbGxlY3Rpb24tPmNvbmNhdChbJ3dobycgPT4gJ0pvbm55JywgJ3ByZXBvc2l0aW9uJyA9PiAnZnJvbScsICd3aGVyZScgPT4gJ0xhcm9lJ10pLT50b0FycmF5KCk7CgogICAgICAgICR0aGlzLT5hc3NlcnRTYW1lKCRleHBlY3RlZCwgJGFjdHVhbCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RDb25jYXRXaXRoQ29sbGVjdGlvbigpCiAgICB7CiAgICAgICAgJGV4cGVjdGVkID0gWwogICAgICAgICAgICAwID0+IDQsCiAgICAgICAgICAgIDEgPT4gNSwKICAgICAgICAgICAgMiA9PiA2LAogICAgICAgICAgICAzID0+ICdhJywKICAgICAgICAgICAgNCA9PiAnYicsCiAgICAgICAgICAgIDUgPT4gJ2MnLAogICAgICAgICAgICA2ID0+ICdKb25ueScsCiAgICAgICAgICAgIDcgPT4gJ2Zyb20nLAogICAgICAgICAgICA4ID0+ICdMYXJvZScsCiAgICAgICAgICAgIDkgPT4gJ0pvbm55JywKICAgICAgICAgICAgMTAgPT4gJ2Zyb20nLAogICAgICAgICAgICAxMSA9PiAnTGFyb2UnLAogICAgICAgIF07CgogICAgICAgICRmaXJzdENvbGxlY3Rpb24gPSBuZXcgQ29sbGVjdGlvbihbNCwgNSwgNl0pOwogICAgICAgICRzZWNvbmRDb2xsZWN0aW9uID0gbmV3IENvbGxlY3Rpb24oWydhJywgJ2InLCAnYyddKTsKICAgICAgICAkdGhpcmRDb2xsZWN0aW9uID0gbmV3IENvbGxlY3Rpb24oWyd3aG8nID0+ICdKb25ueScsICdwcmVwb3NpdGlvbicgPT4gJ2Zyb20nLCAnd2hlcmUnID0+ICdMYXJvZSddKTsKICAgICAgICAkZmlyc3RDb2xsZWN0aW9uID0gJGZpcnN0Q29sbGVjdGlvbi0+Y29uY2F0KCRzZWNvbmRDb2xsZWN0aW9uKTsKICAgICAgICAkZmlyc3RDb2xsZWN0aW9uID0gJGZpcnN0Q29sbGVjdGlvbi0+Y29uY2F0KCR0aGlyZENvbGxlY3Rpb24pOwogICAgICAgICRhY3R1YWwgPSAkZmlyc3RDb2xsZWN0aW9uLT5jb25jYXQoJHRoaXJkQ29sbGVjdGlvbiktPnRvQXJyYXkoKTsKCiAgICAgICAgJHRoaXMtPmFzc2VydFNhbWUoJGV4cGVjdGVkLCAkYWN0dWFsKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdFJlZHVjZSgpCiAgICB7CiAgICAgICAgJGRhdGEgPSBuZXcgQ29sbGVjdGlvbihbMSwgMiwgM10pOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoNiwgJGRhdGEtPnJlZHVjZShmdW5jdGlvbiAoJGNhcnJ5LCAkZWxlbWVudCkgewogICAgICAgICAgICByZXR1cm4gJGNhcnJ5ICs9ICRlbGVtZW50OwogICAgICAgIH0pKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBleHBlY3RlZEV4Y2VwdGlvbiBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0UmFuZG9tVGhyb3dzQW5FeGNlcHRpb25Vc2luZ0Ftb3VudEJpZ2dlclRoYW5Db2xsZWN0aW9uU2l6ZSgpCiAgICB7CiAgICAgICAgJGRhdGEgPSBuZXcgQ29sbGVjdGlvbihbMSwgMiwgM10pOwogICAgICAgICRkYXRhLT5yYW5kb20oNCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RQaXBlKCkKICAgIHsKICAgICAgICAkY29sbGVjdGlvbiA9IG5ldyBDb2xsZWN0aW9uKFsxLCAyLCAzXSk7CgogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoNiwgJGNvbGxlY3Rpb24tPnBpcGUoZnVuY3Rpb24gKCRjb2xsZWN0aW9uKSB7CiAgICAgICAgICAgIHJldHVybiAkY29sbGVjdGlvbi0+c3VtKCk7CiAgICAgICAgfSkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0TWVkaWFuVmFsdWVXaXRoQXJyYXlDb2xsZWN0aW9uKCkKICAgIHsKICAgICAgICAkY29sbGVjdGlvbiA9IG5ldyBDb2xsZWN0aW9uKFsxLCAyLCAyLCA0XSk7CgogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoMiwgJGNvbGxlY3Rpb24tPm1lZGlhbigpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdE1lZGlhblZhbHVlQnlLZXkoKQogICAgewogICAgICAgICRjb2xsZWN0aW9uID0gbmV3IENvbGxlY3Rpb24oWwogICAgICAgICAgICAob2JqZWN0KSBbJ2ZvbycgPT4gMV0sCiAgICAgICAgICAgIChvYmplY3QpIFsnZm9vJyA9PiAyXSwKICAgICAgICAgICAgKG9iamVjdCkgWydmb28nID0+IDJdLAogICAgICAgICAgICAob2JqZWN0KSBbJ2ZvbycgPT4gNF0sCiAgICAgICAgXSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscygyLCAkY29sbGVjdGlvbi0+bWVkaWFuKCdmb28nKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RFdmVuTWVkaWFuQ29sbGVjdGlvbigpCiAgICB7CiAgICAgICAgJGNvbGxlY3Rpb24gPSBuZXcgQ29sbGVjdGlvbihbCiAgICAgICAgICAgIChvYmplY3QpIFsnZm9vJyA9PiAwXSwKICAgICAgICAgICAgKG9iamVjdCkgWydmb28nID0+IDNdLAogICAgICAgIF0pOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoMS41LCAkY29sbGVjdGlvbi0+bWVkaWFuKCdmb28nKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RNZWRpYW5PdXRPZk9yZGVyQ29sbGVjdGlvbigpCiAgICB7CiAgICAgICAgJGNvbGxlY3Rpb24gPSBuZXcgQ29sbGVjdGlvbihbCiAgICAgICAgICAgIChvYmplY3QpIFsnZm9vJyA9PiAwXSwKICAgICAgICAgICAgKG9iamVjdCkgWydmb28nID0+IDVdLAogICAgICAgICAgICAob2JqZWN0KSBbJ2ZvbycgPT4gM10sCiAgICAgICAgXSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscygzLCAkY29sbGVjdGlvbi0+bWVkaWFuKCdmb28nKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RNZWRpYW5PbkVtcHR5Q29sbGVjdGlvblJldHVybnNOdWxsKCkKICAgIHsKICAgICAgICAkY29sbGVjdGlvbiA9IG5ldyBDb2xsZWN0aW9uOwogICAgICAgICR0aGlzLT5hc3NlcnROdWxsKCRjb2xsZWN0aW9uLT5tZWRpYW4oKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RNb2RlT25OdWxsQ29sbGVjdGlvbigpCiAgICB7CiAgICAgICAgJGNvbGxlY3Rpb24gPSBuZXcgQ29sbGVjdGlvbjsKICAgICAgICAkdGhpcy0+YXNzZXJ0TnVsbCgkY29sbGVjdGlvbi0+bW9kZSgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdE1vZGUoKQogICAgewogICAgICAgICRjb2xsZWN0aW9uID0gbmV3IENvbGxlY3Rpb24oWzEsIDIsIDMsIDQsIDQsIDVdKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFs0XSwgJGNvbGxlY3Rpb24tPm1vZGUoKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RNb2RlVmFsdWVCeUtleSgpCiAgICB7CiAgICAgICAgJGNvbGxlY3Rpb24gPSBuZXcgQ29sbGVjdGlvbihbCiAgICAgICAgICAgIChvYmplY3QpIFsnZm9vJyA9PiAxXSwKICAgICAgICAgICAgKG9iamVjdCkgWydmb28nID0+IDFdLAogICAgICAgICAgICAob2JqZWN0KSBbJ2ZvbycgPT4gMl0sCiAgICAgICAgICAgIChvYmplY3QpIFsnZm9vJyA9PiA0XSwKICAgICAgICBdKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsxXSwgJGNvbGxlY3Rpb24tPm1vZGUoJ2ZvbycpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdFdpdGhNdWx0aXBsZU1vZGVWYWx1ZXMoKQogICAgewogICAgICAgICRjb2xsZWN0aW9uID0gbmV3IENvbGxlY3Rpb24oWzEsIDIsIDIsIDFdKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsxLCAyXSwgJGNvbGxlY3Rpb24tPm1vZGUoKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RTbGljZU9mZnNldCgpCiAgICB7CiAgICAgICAgJGNvbGxlY3Rpb24gPSBuZXcgQ29sbGVjdGlvbihbMSwgMiwgMywgNCwgNSwgNiwgNywgOF0pOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWzQsIDUsIDYsIDcsIDhdLCAkY29sbGVjdGlvbi0+c2xpY2UoMyktPnZhbHVlcygpLT50b0FycmF5KCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0U2xpY2VOZWdhdGl2ZU9mZnNldCgpCiAgICB7CiAgICAgICAgJGNvbGxlY3Rpb24gPSBuZXcgQ29sbGVjdGlvbihbMSwgMiwgMywgNCwgNSwgNiwgNywgOF0pOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWzYsIDcsIDhdLCAkY29sbGVjdGlvbi0+c2xpY2UoLTMpLT52YWx1ZXMoKS0+dG9BcnJheSgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdFNsaWNlT2Zmc2V0QW5kTGVuZ3RoKCkKICAgIHsKICAgICAgICAkY29sbGVjdGlvbiA9IG5ldyBDb2xsZWN0aW9uKFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4XSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbNCwgNSwgNl0sICRjb2xsZWN0aW9uLT5zbGljZSgzLCAzKS0+dmFsdWVzKCktPnRvQXJyYXkoKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RTbGljZU9mZnNldEFuZE5lZ2F0aXZlTGVuZ3RoKCkKICAgIHsKICAgICAgICAkY29sbGVjdGlvbiA9IG5ldyBDb2xsZWN0aW9uKFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4XSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbNCwgNSwgNiwgN10sICRjb2xsZWN0aW9uLT5zbGljZSgzLCAtMSktPnZhbHVlcygpLT50b0FycmF5KCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0U2xpY2VOZWdhdGl2ZU9mZnNldEFuZExlbmd0aCgpCiAgICB7CiAgICAgICAgJGNvbGxlY3Rpb24gPSBuZXcgQ29sbGVjdGlvbihbMSwgMiwgMywgNCwgNSwgNiwgNywgOF0pOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWzQsIDUsIDZdLCAkY29sbGVjdGlvbi0+c2xpY2UoLTUsIDMpLT52YWx1ZXMoKS0+dG9BcnJheSgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdFNsaWNlTmVnYXRpdmVPZmZzZXRBbmROZWdhdGl2ZUxlbmd0aCgpCiAgICB7CiAgICAgICAgJGNvbGxlY3Rpb24gPSBuZXcgQ29sbGVjdGlvbihbMSwgMiwgMywgNCwgNSwgNiwgNywgOF0pOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWzMsIDQsIDUsIDZdLCAkY29sbGVjdGlvbi0+c2xpY2UoLTYsIC0yKS0+dmFsdWVzKCktPnRvQXJyYXkoKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RDb2xsZWN0aW9uRnJvbVRyYXZlcnNhYmxlKCkKICAgIHsKICAgICAgICAkY29sbGVjdGlvbiA9IG5ldyBDb2xsZWN0aW9uKG5ldyBcQXJyYXlPYmplY3QoWzEsIDIsIDNdKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbMSwgMiwgM10sICRjb2xsZWN0aW9uLT50b0FycmF5KCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0Q29sbGVjdGlvbkZyb21UcmF2ZXJzYWJsZVdpdGhLZXlzKCkKICAgIHsKICAgICAgICAkY29sbGVjdGlvbiA9IG5ldyBDb2xsZWN0aW9uKG5ldyBcQXJyYXlPYmplY3QoWydmb28nID0+IDEsICdiYXInID0+IDIsICdiYXonID0+IDNdKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJ2ZvbycgPT4gMSwgJ2JhcicgPT4gMiwgJ2JheicgPT4gM10sICRjb2xsZWN0aW9uLT50b0FycmF5KCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0U3BsaXRDb2xsZWN0aW9uV2l0aEFEaXZpc2FibGVDb3VudCgpCiAgICB7CiAgICAgICAgJGNvbGxlY3Rpb24gPSBuZXcgQ29sbGVjdGlvbihbJ2EnLCAnYicsICdjJywgJ2QnXSk7CgogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoCiAgICAgICAgICAgIFtbJ2EnLCAnYiddLCBbJ2MnLCAnZCddXSwKICAgICAgICAgICAgJGNvbGxlY3Rpb24tPnNwbGl0KDIpLT5tYXAoZnVuY3Rpb24gKENvbGxlY3Rpb24gJGNodW5rKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJGNodW5rLT52YWx1ZXMoKS0+dG9BcnJheSgpOwogICAgICAgICAgICB9KS0+dG9BcnJheSgpCiAgICAgICAgKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdFNwbGl0Q29sbGVjdGlvbldpdGhBblVuZGl2aXNhYmxlQ291bnQoKQogICAgewogICAgICAgICRjb2xsZWN0aW9uID0gbmV3IENvbGxlY3Rpb24oWydhJywgJ2InLCAnYyddKTsKCiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscygKICAgICAgICAgICAgW1snYScsICdiJ10sIFsnYyddXSwKICAgICAgICAgICAgJGNvbGxlY3Rpb24tPnNwbGl0KDIpLT5tYXAoZnVuY3Rpb24gKENvbGxlY3Rpb24gJGNodW5rKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJGNodW5rLT52YWx1ZXMoKS0+dG9BcnJheSgpOwogICAgICAgICAgICB9KS0+dG9BcnJheSgpCiAgICAgICAgKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdFNwbGl0Q29sbGVjdGlvbldpdGhDb3VudExlc3NUaGVuRGl2aXNvcigpCiAgICB7CiAgICAgICAgJGNvbGxlY3Rpb24gPSBuZXcgQ29sbGVjdGlvbihbJ2EnXSk7CgogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoCiAgICAgICAgICAgIFtbJ2EnXV0sCiAgICAgICAgICAgICRjb2xsZWN0aW9uLT5zcGxpdCgyKS0+bWFwKGZ1bmN0aW9uIChDb2xsZWN0aW9uICRjaHVuaykgewogICAgICAgICAgICAgICAgcmV0dXJuICRjaHVuay0+dmFsdWVzKCktPnRvQXJyYXkoKTsKICAgICAgICAgICAgfSktPnRvQXJyYXkoKQogICAgICAgICk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RTcGxpdEVtcHR5Q29sbGVjdGlvbigpCiAgICB7CiAgICAgICAgJGNvbGxlY3Rpb24gPSBuZXcgQ29sbGVjdGlvbjsKCiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscygKICAgICAgICAgICAgW10sCiAgICAgICAgICAgICRjb2xsZWN0aW9uLT5zcGxpdCgyKS0+bWFwKGZ1bmN0aW9uIChDb2xsZWN0aW9uICRjaHVuaykgewogICAgICAgICAgICAgICAgcmV0dXJuICRjaHVuay0+dmFsdWVzKCktPnRvQXJyYXkoKTsKICAgICAgICAgICAgfSktPnRvQXJyYXkoKQogICAgICAgICk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RIaWdoZXJPcmRlckNvbGxlY3Rpb25Hcm91cEJ5KCkKICAgIHsKICAgICAgICAkY29sbGVjdGlvbiA9IGNvbGxlY3QoWwogICAgICAgICAgICBuZXcgVGVzdFN1cHBvcnRDb2xsZWN0aW9uSGlnaGVyT3JkZXJJdGVtLAogICAgICAgICAgICBuZXcgVGVzdFN1cHBvcnRDb2xsZWN0aW9uSGlnaGVyT3JkZXJJdGVtKCdUQVlMT1InKSwKICAgICAgICAgICAgbmV3IFRlc3RTdXBwb3J0Q29sbGVjdGlvbkhpZ2hlck9yZGVySXRlbSgnZm9vJyksCiAgICAgICAgXSk7CgogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWwogICAgICAgICAgICAndGF5bG9yJyA9PiBbJGNvbGxlY3Rpb25bMF1dLAogICAgICAgICAgICAnVEFZTE9SJyA9PiBbJGNvbGxlY3Rpb25bMV1dLAogICAgICAgICAgICAnZm9vJyA9PiBbJGNvbGxlY3Rpb25bMl1dLAogICAgICAgIF0sICRjb2xsZWN0aW9uLT5ncm91cEJ5LT5uYW1lLT50b0FycmF5KCkpOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsKICAgICAgICAgICAgJ1RBWUxPUicgPT4gWyRjb2xsZWN0aW9uWzBdLCAkY29sbGVjdGlvblsxXV0sCiAgICAgICAgICAgICdGT08nID0+IFskY29sbGVjdGlvblsyXV0sCiAgICAgICAgXSwgJGNvbGxlY3Rpb24tPmdyb3VwQnktPnVwcGVyY2FzZSgpLT50b0FycmF5KCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0SGlnaGVyT3JkZXJDb2xsZWN0aW9uTWFwKCkKICAgIHsKICAgICAgICAkcGVyc29uMSA9IChvYmplY3QpIFsnbmFtZScgPT4gJ1RheWxvciddOwogICAgICAgICRwZXJzb24yID0gKG9iamVjdCkgWyduYW1lJyA9PiAnWWF6J107CgogICAgICAgICRjb2xsZWN0aW9uID0gY29sbGVjdChbJHBlcnNvbjEsICRwZXJzb24yXSk7CgogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWydUYXlsb3InLCAnWWF6J10sICRjb2xsZWN0aW9uLT5tYXAtPm5hbWUtPnRvQXJyYXkoKSk7CgogICAgICAgICRjb2xsZWN0aW9uID0gY29sbGVjdChbbmV3IFRlc3RTdXBwb3J0Q29sbGVjdGlvbkhpZ2hlck9yZGVySXRlbSwgbmV3IFRlc3RTdXBwb3J0Q29sbGVjdGlvbkhpZ2hlck9yZGVySXRlbV0pOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsnVEFZTE9SJywgJ1RBWUxPUiddLCAkY29sbGVjdGlvbi0+ZWFjaC0+dXBwZXJjYXNlKCktPm1hcC0+bmFtZS0+dG9BcnJheSgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdEhpZ2hlck9yZGVyQ29sbGVjdGlvbk1hcEZyb21BcnJheXMoKQogICAgewogICAgICAgICRwZXJzb24xID0gWyduYW1lJyA9PiAnVGF5bG9yJ107CiAgICAgICAgJHBlcnNvbjIgPSBbJ25hbWUnID0+ICdZYXonXTsKCiAgICAgICAgJGNvbGxlY3Rpb24gPSBjb2xsZWN0KFskcGVyc29uMSwgJHBlcnNvbjJdKTsKCiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscyhbJ1RheWxvcicsICdZYXonXSwgJGNvbGxlY3Rpb24tPm1hcC0+bmFtZS0+dG9BcnJheSgpKTsKCiAgICAgICAgJGNvbGxlY3Rpb24gPSBjb2xsZWN0KFtuZXcgVGVzdFN1cHBvcnRDb2xsZWN0aW9uSGlnaGVyT3JkZXJJdGVtLCBuZXcgVGVzdFN1cHBvcnRDb2xsZWN0aW9uSGlnaGVyT3JkZXJJdGVtXSk7CgogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWydUQVlMT1InLCAnVEFZTE9SJ10sICRjb2xsZWN0aW9uLT5lYWNoLT51cHBlcmNhc2UoKS0+bWFwLT5uYW1lLT50b0FycmF5KCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0UGFydGl0aW9uKCkKICAgIHsKICAgICAgICAkY29sbGVjdGlvbiA9IG5ldyBDb2xsZWN0aW9uKHJhbmdlKDEsIDEwKSk7CgogICAgICAgIGxpc3QoJGZpcnN0UGFydGl0aW9uLCAkc2Vjb25kUGFydGl0aW9uKSA9ICRjb2xsZWN0aW9uLT5wYXJ0aXRpb24oZnVuY3Rpb24gKCRpKSB7CiAgICAgICAgICAgIHJldHVybiAkaSA8PSA1OwogICAgICAgIH0pOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFsxLCAyLCAzLCA0LCA1XSwgJGZpcnN0UGFydGl0aW9uLT52YWx1ZXMoKS0+dG9BcnJheSgpKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKFs2LCA3LCA4LCA5LCAxMF0sICRzZWNvbmRQYXJ0aXRpb24tPnZhbHVlcygpLT50b0FycmF5KCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0UGFydGl0aW9uQ2FsbGJhY2tXaXRoS2V5KCkKICAgIHsKICAgICAgICAkY29sbGVjdGlvbiA9IG5ldyBDb2xsZWN0aW9uKFsnemVybycsICdvbmUnLCAndHdvJywgJ3RocmVlJ10pOwoKICAgICAgICBsaXN0KCRldmVuLCAkb2RkKSA9ICRjb2xsZWN0aW9uLT5wYXJ0aXRpb24oZnVuY3Rpb24gKCRpdGVtLCAkaW5kZXgpIHsKICAgICAgICAgICAgcmV0dXJuICRpbmRleCAlIDIgPT09IDA7CiAgICAgICAgfSk7CgogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWyd6ZXJvJywgJ3R3byddLCAkZXZlbi0+dmFsdWVzKCktPnRvQXJyYXkoKSk7CgogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoWydvbmUnLCAndGhyZWUnXSwgJG9kZC0+dmFsdWVzKCktPnRvQXJyYXkoKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RQYXJ0aXRpb25CeUtleSgpCiAgICB7CiAgICAgICAgJGNvdXJzZXMgPSBuZXcgQ29sbGVjdGlvbihbCiAgICAgICAgICAgIFsnZnJlZScgPT4gdHJ1ZSwgJ3RpdGxlJyA9PiAnQmFzaWMnXSwgWydmcmVlJyA9PiBmYWxzZSwgJ3RpdGxlJyA9PiAnUHJlbWl1bSddLAogICAgICAgIF0pOwoKICAgICAgICBsaXN0KCRmcmVlLCAkcHJlbWl1bSkgPSAkY291cnNlcy0+cGFydGl0aW9uKCdmcmVlJyk7CgogICAgICAgICR0aGlzLT5hc3NlcnRTYW1lKFtbJ2ZyZWUnID0+IHRydWUsICd0aXRsZScgPT4gJ0Jhc2ljJ11dLCAkZnJlZS0+dmFsdWVzKCktPnRvQXJyYXkoKSk7CgogICAgICAgICR0aGlzLT5hc3NlcnRTYW1lKFtbJ2ZyZWUnID0+IGZhbHNlLCAndGl0bGUnID0+ICdQcmVtaXVtJ11dLCAkcHJlbWl1bS0+dmFsdWVzKCktPnRvQXJyYXkoKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RQYXJ0aXRpb25XaXRoT3BlcmF0b3JzKCkKICAgIHsKICAgICAgICAkY29sbGVjdGlvbiA9IG5ldyBDb2xsZWN0aW9uKFsKICAgICAgICAgICAgWyduYW1lJyA9PiAnVGltJywgJ2FnZScgPT4gMTddLAogICAgICAgICAgICBbJ25hbWUnID0+ICdBZ2F0aGEnLCAnYWdlJyA9PiA2Ml0sCiAgICAgICAgICAgIFsnbmFtZScgPT4gJ0tyaXN0aW5hJywgJ2FnZScgPT4gMzNdLAogICAgICAgICAgICBbJ25hbWUnID0+ICdUaW0nLCAnYWdlJyA9PiA0MV0sCiAgICAgICAgXSk7CgogICAgICAgIGxpc3QoJHRpbXMsICRvdGhlcnMpID0gJGNvbGxlY3Rpb24tPnBhcnRpdGlvbignbmFtZScsICdUaW0nKTsKCiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscygkdGltcy0+dmFsdWVzKCktPmFsbCgpLCBbCiAgICAgICAgICAgIFsnbmFtZScgPT4gJ1RpbScsICdhZ2UnID0+IDE3XSwKICAgICAgICAgICAgWyduYW1lJyA9PiAnVGltJywgJ2FnZScgPT4gNDFdLAogICAgICAgIF0pOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKCRvdGhlcnMtPnZhbHVlcygpLT5hbGwoKSwgWwogICAgICAgICAgICBbJ25hbWUnID0+ICdBZ2F0aGEnLCAnYWdlJyA9PiA2Ml0sCiAgICAgICAgICAgIFsnbmFtZScgPT4gJ0tyaXN0aW5hJywgJ2FnZScgPT4gMzNdLAogICAgICAgIF0pOwoKICAgICAgICBsaXN0KCRhZHVsdHMsICRtaW5vcnMpID0gJGNvbGxlY3Rpb24tPnBhcnRpdGlvbignYWdlJywgJz49JywgMTgpOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKCRhZHVsdHMtPnZhbHVlcygpLT5hbGwoKSwgWwogICAgICAgICAgICBbJ25hbWUnID0+ICdBZ2F0aGEnLCAnYWdlJyA9PiA2Ml0sCiAgICAgICAgICAgIFsnbmFtZScgPT4gJ0tyaXN0aW5hJywgJ2FnZScgPT4gMzNdLAogICAgICAgICAgICBbJ25hbWUnID0+ICdUaW0nLCAnYWdlJyA9PiA0MV0sCiAgICAgICAgXSk7CgogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoJG1pbm9ycy0+dmFsdWVzKCktPmFsbCgpLCBbCiAgICAgICAgICAgIFsnbmFtZScgPT4gJ1RpbScsICdhZ2UnID0+IDE3XSwKICAgICAgICBdKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdFBhcnRpdGlvblByZXNlcnZlc0tleXMoKQogICAgewogICAgICAgICRjb3Vyc2VzID0gbmV3IENvbGxlY3Rpb24oWwogICAgICAgICAgICAnYScgPT4gWydmcmVlJyA9PiB0cnVlXSwgJ2InID0+IFsnZnJlZScgPT4gZmFsc2VdLCAnYycgPT4gWydmcmVlJyA9PiB0cnVlXSwKICAgICAgICBdKTsKCiAgICAgICAgbGlzdCgkZnJlZSwgJHByZW1pdW0pID0gJGNvdXJzZXMtPnBhcnRpdGlvbignZnJlZScpOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0U2FtZShbJ2EnID0+IFsnZnJlZScgPT4gdHJ1ZV0sICdjJyA9PiBbJ2ZyZWUnID0+IHRydWVdXSwgJGZyZWUtPnRvQXJyYXkoKSk7CgogICAgICAgICR0aGlzLT5hc3NlcnRTYW1lKFsnYicgPT4gWydmcmVlJyA9PiBmYWxzZV1dLCAkcHJlbWl1bS0+dG9BcnJheSgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdFBhcnRpdGlvbkVtcHR5Q29sbGVjdGlvbigpCiAgICB7CiAgICAgICAgJGNvbGxlY3Rpb24gPSBuZXcgQ29sbGVjdGlvbjsKCiAgICAgICAgJHRoaXMtPmFzc2VydENvdW50KDIsICRjb2xsZWN0aW9uLT5wYXJ0aXRpb24oZnVuY3Rpb24gKCkgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9KSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RIaWdoZXJPcmRlclBhcnRpdGlvbigpCiAgICB7CiAgICAgICAgJGNvdXJzZXMgPSBuZXcgQ29sbGVjdGlvbihbCiAgICAgICAgICAgICdhJyA9PiBbJ2ZyZWUnID0+IHRydWVdLCAnYicgPT4gWydmcmVlJyA9PiBmYWxzZV0sICdjJyA9PiBbJ2ZyZWUnID0+IHRydWVdLAogICAgICAgIF0pOwoKICAgICAgICBsaXN0KCRmcmVlLCAkcHJlbWl1bSkgPSAkY291cnNlcy0+cGFydGl0aW9uLT5mcmVlOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0U2FtZShbJ2EnID0+IFsnZnJlZScgPT4gdHJ1ZV0sICdjJyA9PiBbJ2ZyZWUnID0+IHRydWVdXSwgJGZyZWUtPnRvQXJyYXkoKSk7CgogICAgICAgICR0aGlzLT5hc3NlcnRTYW1lKFsnYicgPT4gWydmcmVlJyA9PiBmYWxzZV1dLCAkcHJlbWl1bS0+dG9BcnJheSgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdFRhcCgpCiAgICB7CiAgICAgICAgJGNvbGxlY3Rpb24gPSBuZXcgQ29sbGVjdGlvbihbMSwgMiwgM10pOwoKICAgICAgICAkZnJvbVRhcCA9IFtdOwogICAgICAgICRjb2xsZWN0aW9uID0gJGNvbGxlY3Rpb24tPnRhcChmdW5jdGlvbiAoJGNvbGxlY3Rpb24pIHVzZSAoJiRmcm9tVGFwKSB7CiAgICAgICAgICAgICRmcm9tVGFwID0gJGNvbGxlY3Rpb24tPnNsaWNlKDAsIDEpLT50b0FycmF5KCk7CiAgICAgICAgfSk7CgogICAgICAgICR0aGlzLT5hc3NlcnRTYW1lKFsxXSwgJGZyb21UYXApOwogICAgICAgICR0aGlzLT5hc3NlcnRTYW1lKFsxLCAyLCAzXSwgJGNvbGxlY3Rpb24tPnRvQXJyYXkoKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RXaGVuKCkKICAgIHsKICAgICAgICAkY29sbGVjdGlvbiA9IG5ldyBDb2xsZWN0aW9uKFsnbWljaGFlbCcsICd0b20nXSk7CgogICAgICAgICRjb2xsZWN0aW9uLT53aGVuKCdhZGFtJywgZnVuY3Rpb24gKCRjb2xsZWN0aW9uLCAkbmV3TmFtZSkgewogICAgICAgICAgICByZXR1cm4gJGNvbGxlY3Rpb24tPnB1c2goJG5ld05hbWUpOwogICAgICAgIH0pOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0U2FtZShbJ21pY2hhZWwnLCAndG9tJywgJ2FkYW0nXSwgJGNvbGxlY3Rpb24tPnRvQXJyYXkoKSk7CgogICAgICAgICRjb2xsZWN0aW9uID0gbmV3IENvbGxlY3Rpb24oWydtaWNoYWVsJywgJ3RvbSddKTsKCiAgICAgICAgJGNvbGxlY3Rpb24tPndoZW4oZmFsc2UsIGZ1bmN0aW9uICgkY29sbGVjdGlvbikgewogICAgICAgICAgICByZXR1cm4gJGNvbGxlY3Rpb24tPnB1c2goJ2FkYW0nKTsKICAgICAgICB9KTsKCiAgICAgICAgJHRoaXMtPmFzc2VydFNhbWUoWydtaWNoYWVsJywgJ3RvbSddLCAkY29sbGVjdGlvbi0+dG9BcnJheSgpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdFdoZW5EZWZhdWx0KCkKICAgIHsKICAgICAgICAkY29sbGVjdGlvbiA9IG5ldyBDb2xsZWN0aW9uKFsnbWljaGFlbCcsICd0b20nXSk7CgogICAgICAgICRjb2xsZWN0aW9uLT53aGVuKGZhbHNlLCBmdW5jdGlvbiAoJGNvbGxlY3Rpb24pIHsKICAgICAgICAgICAgcmV0dXJuICRjb2xsZWN0aW9uLT5wdXNoKCdhZGFtJyk7CiAgICAgICAgfSwgZnVuY3Rpb24gKCRjb2xsZWN0aW9uKSB7CiAgICAgICAgICAgIHJldHVybiAkY29sbGVjdGlvbi0+cHVzaCgndGF5bG9yJyk7CiAgICAgICAgfSk7CgogICAgICAgICR0aGlzLT5hc3NlcnRTYW1lKFsnbWljaGFlbCcsICd0b20nLCAndGF5bG9yJ10sICRjb2xsZWN0aW9uLT50b0FycmF5KCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0VW5sZXNzKCkKICAgIHsKICAgICAgICAkY29sbGVjdGlvbiA9IG5ldyBDb2xsZWN0aW9uKFsnbWljaGFlbCcsICd0b20nXSk7CgogICAgICAgICRjb2xsZWN0aW9uLT51bmxlc3MoZmFsc2UsIGZ1bmN0aW9uICgkY29sbGVjdGlvbikgewogICAgICAgICAgICByZXR1cm4gJGNvbGxlY3Rpb24tPnB1c2goJ2NhbGViJyk7CiAgICAgICAgfSk7CgogICAgICAgICR0aGlzLT5hc3NlcnRTYW1lKFsnbWljaGFlbCcsICd0b20nLCAnY2FsZWInXSwgJGNvbGxlY3Rpb24tPnRvQXJyYXkoKSk7CgogICAgICAgICRjb2xsZWN0aW9uID0gbmV3IENvbGxlY3Rpb24oWydtaWNoYWVsJywgJ3RvbSddKTsKCiAgICAgICAgJGNvbGxlY3Rpb24tPnVubGVzcyh0cnVlLCBmdW5jdGlvbiAoJGNvbGxlY3Rpb24pIHsKICAgICAgICAgICAgcmV0dXJuICRjb2xsZWN0aW9uLT5wdXNoKCdjYWxlYicpOwogICAgICAgIH0pOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0U2FtZShbJ21pY2hhZWwnLCAndG9tJ10sICRjb2xsZWN0aW9uLT50b0FycmF5KCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0VW5sZXNzRGVmYXVsdCgpCiAgICB7CiAgICAgICAgJGNvbGxlY3Rpb24gPSBuZXcgQ29sbGVjdGlvbihbJ21pY2hhZWwnLCAndG9tJ10pOwoKICAgICAgICAkY29sbGVjdGlvbi0+dW5sZXNzKHRydWUsIGZ1bmN0aW9uICgkY29sbGVjdGlvbikgewogICAgICAgICAgICByZXR1cm4gJGNvbGxlY3Rpb24tPnB1c2goJ2NhbGViJyk7CiAgICAgICAgfSwgZnVuY3Rpb24gKCRjb2xsZWN0aW9uKSB7CiAgICAgICAgICAgIHJldHVybiAkY29sbGVjdGlvbi0+cHVzaCgndGF5bG9yJyk7CiAgICAgICAgfSk7CgogICAgICAgICR0aGlzLT5hc3NlcnRTYW1lKFsnbWljaGFlbCcsICd0b20nLCAndGF5bG9yJ10sICRjb2xsZWN0aW9uLT50b0FycmF5KCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0SGFzUmV0dXJuc1ZhbGlkUmVzdWx0cygpCiAgICB7CiAgICAgICAgJGNvbGxlY3Rpb24gPSBuZXcgQ29sbGVjdGlvbihbJ2ZvbycgPT4gJ29uZScsICdiYXInID0+ICd0d28nLCAxID0+ICd0aHJlZSddKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0VHJ1ZSgkY29sbGVjdGlvbi0+aGFzKCdmb28nKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydFRydWUoJGNvbGxlY3Rpb24tPmhhcygnZm9vJywgJ2JhcicsIDEpKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RmFsc2UoJGNvbGxlY3Rpb24tPmhhcygnZm9vJywgJ2JhcicsIDEsICdiYXonKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEZhbHNlKCRjb2xsZWN0aW9uLT5oYXMoJ2JheicpKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdFB1dEFkZHNJdGVtVG9Db2xsZWN0aW9uKCkKICAgIHsKICAgICAgICAkY29sbGVjdGlvbiA9IG5ldyBDb2xsZWN0aW9uKCk7CiAgICAgICAgJHRoaXMtPmFzc2VydFNhbWUoW10sICRjb2xsZWN0aW9uLT50b0FycmF5KCkpOwogICAgICAgICRjb2xsZWN0aW9uLT5wdXQoJ2ZvbycsIDEpOwogICAgICAgICR0aGlzLT5hc3NlcnRTYW1lKFsnZm9vJyA9PiAxXSwgJGNvbGxlY3Rpb24tPnRvQXJyYXkoKSk7CiAgICAgICAgJGNvbGxlY3Rpb24tPnB1dCgnYmFyJywgWyduZXN0ZWQnID0+ICd0d28nXSk7CiAgICAgICAgJHRoaXMtPmFzc2VydFNhbWUoWydmb28nID0+IDEsICdiYXInID0+IFsnbmVzdGVkJyA9PiAndHdvJ11dLCAkY29sbGVjdGlvbi0+dG9BcnJheSgpKTsKICAgICAgICAkY29sbGVjdGlvbi0+cHV0KCdmb28nLCAzKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0U2FtZShbJ2ZvbycgPT4gMywgJ2JhcicgPT4gWyduZXN0ZWQnID0+ICd0d28nXV0sICRjb2xsZWN0aW9uLT50b0FycmF5KCkpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0SXRUaHJvd3NFeGNlcHRpb25XaGVuVHJ5aW5nVG9BY2Nlc3NOb1Byb3h5UHJvcGVydHkoKQogICAgewogICAgICAgICRjb2xsZWN0aW9uID0gbmV3IENvbGxlY3Rpb24oKTsKICAgICAgICAkdGhpcy0+ZXhwZWN0RXhjZXB0aW9uKEV4Y2VwdGlvbjo6Y2xhc3MpOwogICAgICAgICR0aGlzLT5leHBlY3RFeGNlcHRpb25NZXNzYWdlKCdQcm9wZXJ0eSBbZm9vXSBkb2VzIG5vdCBleGlzdCBvbiB0aGlzIGNvbGxlY3Rpb24gaW5zdGFuY2UuJyk7CiAgICAgICAgJGNvbGxlY3Rpb24tPmZvbzsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdEdldFdpdGhOdWxsUmV0dXJuc051bGwoKQogICAgewogICAgICAgICRjb2xsZWN0aW9uID0gbmV3IENvbGxlY3Rpb24oWzEsIDIsIDNdKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0TnVsbCgkY29sbGVjdGlvbi0+Z2V0KG51bGwpKTsKICAgIH0KfQoKY2xhc3MgVGVzdFN1cHBvcnRDb2xsZWN0aW9uSGlnaGVyT3JkZXJJdGVtCnsKICAgIHB1YmxpYyAkbmFtZTsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJG5hbWUgPSAndGF5bG9yJykKICAgIHsKICAgICAgICAkdGhpcy0+bmFtZSA9ICRuYW1lOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB1cHBlcmNhc2UoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+bmFtZSA9IHN0cnRvdXBwZXIoJHRoaXMtPm5hbWUpOwogICAgfQp9CgpjbGFzcyBUZXN0QWNjZXNzb3JFbG9xdWVudFRlc3RTdHViCnsKICAgIHByb3RlY3RlZCAkYXR0cmlidXRlcyA9IFtdOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkYXR0cmlidXRlcykKICAgIHsKICAgICAgICAkdGhpcy0+YXR0cmlidXRlcyA9ICRhdHRyaWJ1dGVzOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2dldCgkYXR0cmlidXRlKQogICAgewogICAgICAgICRhY2Nlc3NvciA9ICdnZXQnLmxjZmlyc3QoJGF0dHJpYnV0ZSkuJ0F0dHJpYnV0ZSc7CiAgICAgICAgaWYgKG1ldGhvZF9leGlzdHMoJHRoaXMsICRhY2Nlc3NvcikpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT4kYWNjZXNzb3IoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+JGF0dHJpYnV0ZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gX19pc3NldCgkYXR0cmlidXRlKQogICAgewogICAgICAgICRhY2Nlc3NvciA9ICdnZXQnLmxjZmlyc3QoJGF0dHJpYnV0ZSkuJ0F0dHJpYnV0ZSc7CgogICAgICAgIGlmIChtZXRob2RfZXhpc3RzKCR0aGlzLCAkYWNjZXNzb3IpKSB7CiAgICAgICAgICAgIHJldHVybiAhIGlzX251bGwoJHRoaXMtPiRhY2Nlc3NvcigpKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBpc3NldCgkdGhpcy0+JGF0dHJpYnV0ZSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFNvbWVBdHRyaWJ1dGUoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+YXR0cmlidXRlc1snc29tZSddOwogICAgfQp9CgpjbGFzcyBUZXN0QXJyYXlBY2Nlc3NJbXBsZW1lbnRhdGlvbiBpbXBsZW1lbnRzIEFycmF5QWNjZXNzCnsKICAgIHByaXZhdGUgJGFycjsKCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGFycikKICAgIHsKICAgICAgICAkdGhpcy0+YXJyID0gJGFycjsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0RXhpc3RzKCRvZmZzZXQpCiAgICB7CiAgICAgICAgcmV0dXJuIGlzc2V0KCR0aGlzLT5hcnJbJG9mZnNldF0pOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRHZXQoJG9mZnNldCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmFyclskb2Zmc2V0XTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gb2Zmc2V0U2V0KCRvZmZzZXQsICR2YWx1ZSkKICAgIHsKICAgICAgICAkdGhpcy0+YXJyWyRvZmZzZXRdID0gJHZhbHVlOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBvZmZzZXRVbnNldCgkb2Zmc2V0KQogICAgewogICAgICAgIHVuc2V0KCR0aGlzLT5hcnJbJG9mZnNldF0pOwogICAgfQp9CgpjbGFzcyBUZXN0QXJyYXlhYmxlT2JqZWN0IGltcGxlbWVudHMgQXJyYXlhYmxlCnsKICAgIHB1YmxpYyBmdW5jdGlvbiB0b0FycmF5KCkKICAgIHsKICAgICAgICByZXR1cm4gWydmb28nID0+ICdiYXInXTsKICAgIH0KfQoKY2xhc3MgVGVzdEpzb25hYmxlT2JqZWN0IGltcGxlbWVudHMgSnNvbmFibGUKewogICAgcHVibGljIGZ1bmN0aW9uIHRvSnNvbigkb3B0aW9ucyA9IDApCiAgICB7CiAgICAgICAgcmV0dXJuICd7ImZvbyI6ImJhciJ9JzsKICAgIH0KfQoKY2xhc3MgVGVzdEpzb25TZXJpYWxpemVPYmplY3QgaW1wbGVtZW50cyBKc29uU2VyaWFsaXphYmxlCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBqc29uU2VyaWFsaXplKCkKICAgIHsKICAgICAgICByZXR1cm4gWydmb28nID0+ICdiYXInXTsKICAgIH0KfQoKY2xhc3MgVGVzdENvbGxlY3Rpb25NYXBJbnRvT2JqZWN0CnsKICAgIHB1YmxpYyAkdmFsdWU7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCR2YWx1ZSkKICAgIHsKICAgICAgICAkdGhpcy0+dmFsdWUgPSAkdmFsdWU7CiAgICB9Cn0KCmNsYXNzIFRlc3RDb2xsZWN0aW9uU3ViY2xhc3MgZXh0ZW5kcyBDb2xsZWN0aW9uCnsKICAgIC8vCn0KAppDevTools/query/vendor/tightenco/collect/tests/Support/SupportMacroableTest.phpPD9waHAKCm5hbWVzcGFjZSBUaWdodGVuY29cQ29sbGVjdFxUZXN0c1xTdXBwb3J0OwoKdXNlIFBIUFVuaXRcRnJhbWV3b3JrXFRlc3RDYXNlOwp1c2UgVGlnaHRlbmNvXENvbGxlY3RcU3VwcG9ydFxUcmFpdHNcTWFjcm9hYmxlOwoKY2xhc3MgU3VwcG9ydE1hY3JvYWJsZVRlc3QgZXh0ZW5kcyBUZXN0Q2FzZQp7CiAgICBwcml2YXRlICRtYWNyb2FibGU7CgogICAgcHVibGljIGZ1bmN0aW9uIHNldFVwKCkKICAgIHsKICAgICAgICAkdGhpcy0+bWFjcm9hYmxlID0gJHRoaXMtPmNyZWF0ZU9iamVjdEZvclRyYWl0KCk7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBjcmVhdGVPYmplY3RGb3JUcmFpdCgpCiAgICB7CiAgICAgICAgcmV0dXJuIG5ldyBFbXB0eU1hY3JvYWJsZTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdFJlZ2lzdGVyTWFjcm8oKQogICAgewogICAgICAgICRtYWNyb2FibGUgPSAkdGhpcy0+bWFjcm9hYmxlOwogICAgICAgICRtYWNyb2FibGU6Om1hY3JvKF9fQ0xBU1NfXywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICByZXR1cm4gJ1RheWxvcic7CiAgICAgICAgfSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscygnVGF5bG9yJywgJG1hY3JvYWJsZTo6e19fQ0xBU1NfX30oKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RSZWdpc3Rlck1hY3JvQW5kQ2FsbFdpdGhvdXRTdGF0aWMoKQogICAgewogICAgICAgICRtYWNyb2FibGUgPSAkdGhpcy0+bWFjcm9hYmxlOwogICAgICAgICRtYWNyb2FibGU6Om1hY3JvKF9fQ0xBU1NfXywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICByZXR1cm4gJ1RheWxvcic7CiAgICAgICAgfSk7CiAgICAgICAgJHRoaXMtPmFzc2VydEVxdWFscygnVGF5bG9yJywgJG1hY3JvYWJsZS0+e19fQ0xBU1NfX30oKSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RXaGVuQ2FsbGluZ01hY3JvQ2xvc3VyZUlzQm91bmRUb09iamVjdCgpCiAgICB7CiAgICAgICAgVGVzdE1hY3JvYWJsZTo6bWFjcm8oJ3RyeUluc3RhbmNlJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnByb3RlY3RlZFZhcmlhYmxlOwogICAgICAgIH0pOwogICAgICAgIFRlc3RNYWNyb2FibGU6Om1hY3JvKCd0cnlTdGF0aWMnLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHJldHVybiBzdGF0aWM6OmdldFByb3RlY3RlZFN0YXRpYygpOwogICAgICAgIH0pOwogICAgICAgICRpbnN0YW5jZSA9IG5ldyBUZXN0TWFjcm9hYmxlOwoKICAgICAgICAkcmVzdWx0ID0gJGluc3RhbmNlLT50cnlJbnN0YW5jZSgpOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoJ2luc3RhbmNlJywgJHJlc3VsdCk7CgogICAgICAgICRyZXN1bHQgPSBUZXN0TWFjcm9hYmxlOjp0cnlTdGF0aWMoKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0RXF1YWxzKCdzdGF0aWMnLCAkcmVzdWx0KTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdENsYXNzQmFzZWRNYWNyb3MoKQogICAgewogICAgICAgIFRlc3RNYWNyb2FibGU6Om1peGluKG5ldyBUZXN0TWl4aW4pOwogICAgICAgICRpbnN0YW5jZSA9IG5ldyBUZXN0TWFjcm9hYmxlOwogICAgICAgICR0aGlzLT5hc3NlcnRFcXVhbHMoJ2luc3RhbmNlLUFkYW0nLCAkaW5zdGFuY2UtPm1ldGhvZE9uZSgnQWRhbScpKTsKICAgIH0KfQoKY2xhc3MgRW1wdHlNYWNyb2FibGUKewogICAgdXNlIE1hY3JvYWJsZTsKfQoKY2xhc3MgVGVzdE1hY3JvYWJsZQp7CiAgICB1c2UgTWFjcm9hYmxlOwoKICAgIHByb3RlY3RlZCAkcHJvdGVjdGVkVmFyaWFibGUgPSAnaW5zdGFuY2UnOwoKICAgIHByb3RlY3RlZCBzdGF0aWMgZnVuY3Rpb24gZ2V0UHJvdGVjdGVkU3RhdGljKCkKICAgIHsKICAgICAgICByZXR1cm4gJ3N0YXRpYyc7CiAgICB9Cn0KCmNsYXNzIFRlc3RNaXhpbgp7CiAgICBwdWJsaWMgZnVuY3Rpb24gbWV0aG9kT25lKCkKICAgIHsKICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCR2YWx1ZSkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPm1ldGhvZFR3bygkdmFsdWUpOwogICAgICAgIH07CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIG1ldGhvZFR3bygpCiAgICB7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgkdmFsdWUpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5wcm90ZWN0ZWRWYXJpYWJsZS4nLScuJHZhbHVlOwogICAgICAgIH07CiAgICB9Cn0KAppDevTools/query/vendor/tightenco/collect/tests/bootstrap.phpPD9waHAKCnJlcXVpcmUgX19ESVJfXy4nLy4uL3ZlbmRvci9hdXRvbG9hZC5waHAnOwoKZGF0ZV9kZWZhdWx0X3RpbWV6b25lX3NldCgnVVRDJyk7Cg==AppDevTools/query/vendor/tightenco/collect/upgrade.shIyEvdXNyL2Jpbi9lbnYgYmFzaAoKIyMKICMgdGlnaHRlbmNvL2NvbGxlY3QgdXBncmFkZXIgc2NyaXB0CiAjCiAjIHVzYWdlCiAjICAgIC4vdXBncmFkZS5zaCBbbGFyYXZlbCBmcmFtZXdvcmsgdmVyc2lvbl0KICMKICMgICAgb3IKICMKICMgICAgYmFzaCB1cGdyYWRlLnNoIFtsYXJhdmVsIGZyYW1ld29yayB2ZXJzaW9uXQogIwoKIyMKICMgSW5jbHVkZSBkb3RmaWxlcyBvbiBmaWxlIG9wZXJhdGlvbnMKICMKc2hvcHQgLXMgZG90Z2xvYgoKIyMKICMgQXBwCiAjCiAKZnVuY3Rpb24gbWFpbigpCnsKICAgIGVjaG8gIlVwZ3JhZGluZy4uLiIKCiAgICBjaGVja0RlcGVuZGVuY2llcwoKICAgIHByZXBhcmVFbnZpcm9ubWVudCAkMQoKICAgIGRpc3BsYXlWYXJpYWJsZXMKCiAgICBjbGVhbkRpcmVjdG9yaWVzCgogICAgZG93bmxvYWRSZXBvc2l0b3J5CgogICAgZXh0cmFjdFppcAoKICAgIGNvcHlDbGFzc2VzCgogICAgY29weUNvbnRyYWN0cwoKICAgIGNvcHlUcmFpdHMKCiAgICBjb3B5U3R1YnMKCiAgICBkb3dubG9hZFRlc3RzCgogICAgcmVuYW1lTmFtZXNwYWNlCgogICAgZmlsbEFsaWFzZXMKCiAgICBjbGVhbnVwRGlyCgogICAgcnVuVGVzdHMKfQoKIyMKICMgQ2hlY2sgaWYgYWxsIGRlcGVuZGVuY2llcyBhcmUgYXZhaWxhYmxlCiAjCmZ1bmN0aW9uIGNoZWNrRGVwZW5kZW5jaWVzKCkKewogICAgZm9yIGRlcGVuZGVuY3kgaW4gJHtkZXBlbmRlbmNpZXNbQF19OyBkbwogICAgICAgIGlmICEgWyAteCAiJChjb21tYW5kIC12ICR7ZGVwZW5kZW5jeX0pIiBdOyB0aGVuCiAgICAgICAgICAgIGVjaG8gIkVycm9yOiAke2RlcGVuZGVuY3l9IGlzIG5vdCBpbnN0YWxsZWQuIiA+JjIKICAgICAgICAgICAgZXhpdCAxCiAgICAgICAgZmkKICAgIGRvbmUKfQoKIyMKICMgUHJlcGFyZSB0aGUgZW52aXJvbm1lbnQKICMKZnVuY3Rpb24gcHJlcGFyZUVudmlyb25tZW50KCkKewogICAgIyMKICAgICAjIERlZmluZSBhbGwgdmFyaWFibGVzCiAgICAgIwogICAgcmVxdWVzdGVkVmVyc2lvbj0kMQogICAgcm9vdERpcj0uCiAgICBiYXNlRGlyPSR7cm9vdERpcn0vc3JjCiAgICB2ZW5kb3I9bGFyYXZlbAogICAgcHJvamVjdD1mcmFtZXdvcmsKICAgIG9sZE5hbWVzcGFjZT0nSWxsdW1pbmF0ZScKICAgIG5ld05hbWVzcGFjZT0nVGlnaHRlbmNvXFxDb2xsZWN0JwogICAgbmV3RGlyPSdDb2xsZWN0JwogICAgbG9nRmlsZT0kKG1rdGVtcCAvdG1wL2NvbGxlY3QtbG9nLlhYWFhYWCkKICAgIHJlcG9zaXRvcnk9aHR0cHM6Ly9naXRodWIuY29tLyR2ZW5kb3IvJHByb2plY3QuZ2l0CgogICAgZ2V0Q3VycmVudFZlcnNpb25Gcm9tR2l0SHViCgogICAgcmVwb3NpdG9yeURpcj0ke3Jvb3REaXJ9LyRwcm9qZWN0LSR7Y29sbGVjdGlvblZlcnNpb259CiAgICByZXBvc2l0b3J5U3JjRGlyPSR7cmVwb3NpdG9yeURpcn0vc3JjCiAgICBjb2xsZWN0aW9uWmlwPSR7cm9vdERpcn0vJHByb2plY3QtJHtjb2xsZWN0aW9uVmVyc2lvbn0uemlwCiAgICBjb2xsZWN0aW9uWmlwVXJsPWh0dHBzOi8vZ2l0aHViLmNvbS8kdmVuZG9yLyRwcm9qZWN0L2FyY2hpdmUvdiR7Y29sbGVjdGlvblZlcnNpb259LnppcAogICAgb2xkTmFtZXNwYWNlRGlyPSR7cmVwb3NpdG9yeVNyY0Rpcn0vJHtvbGROYW1lc3BhY2V9CiAgICBuZXdOYW1lc3BhY2VEaXI9JHtiYXNlRGlyfS8ke25ld0Rpcn0KICAgIHRlc3RzRGlyPSR7cm9vdERpcn0vdGVzdHMKICAgIHRlc3RzQmFzZVVybD1odHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vJHt2ZW5kb3J9LyR7cHJvamVjdH0vdiR7Y29sbGVjdGlvblZlcnNpb259L3Rlc3RzCiAgICBzdHVic0Rpcj0ke3Jvb3REaXJ9L3N0dWJzCiAgICBhbGlhc0ZpbGU9JHtiYXNlRGlyfS8ke25ld0Rpcn0vU3VwcG9ydC9hbGlhcy5waHAKY2FycmlhZ2VSZXR1cm49IgoiCgogICAgY2xhc3Nlcz0oCiAgICAgICAgJ1N1cHBvcnQvQ29sbGVjdGlvbicKICAgICAgICAnU3VwcG9ydC9BcnInCiAgICAgICAgJ1N1cHBvcnQvQ2FyYm9uJwogICAgICAgICdTdXBwb3J0L0hpZ2hlck9yZGVyQ29sbGVjdGlvblByb3h5JwogICAgICAgICdTdXBwb3J0L0h0bWxTdHJpbmcnCiAgICAgICAgJ1N1cHBvcnQvRGVidWcvRHVtcGVyJwogICAgICAgICdTdXBwb3J0L0RlYnVnL0h0bWxEdW1wZXInCiAgICApCgogICAgZXhjbHVkZUZyb21BbGlhc2VzPSgKICAgICAgICAnU3VwcG9ydC9DYXJib24nCiAgICApCgogICAgdHJhaXRzPSgKICAgICAgICAnU3VwcG9ydC9UcmFpdHMvTWFjcm9hYmxlJwogICAgKQoKICAgIGNvbnRyYWN0cz0oCiAgICAgICAgJ0NvbnRyYWN0cy9TdXBwb3J0L0FycmF5YWJsZScKICAgICAgICAnQ29udHJhY3RzL1N1cHBvcnQvSnNvbmFibGUnCiAgICAgICAgJ0NvbnRyYWN0cy9TdXBwb3J0L0h0bWxhYmxlJwogICAgKQoKICAgIHRlc3RzPSgKICAgICAgICAnU3VwcG9ydC9TdXBwb3J0Q29sbGVjdGlvblRlc3QucGhwJwogICAgICAgICdTdXBwb3J0L1N1cHBvcnRBcnJUZXN0LnBocCcKICAgICAgICAnU3VwcG9ydC9TdXBwb3J0TWFjcm9hYmxlVGVzdC5waHAnCiAgICAgICAgJ1N1cHBvcnQvU3VwcG9ydENhcmJvblRlc3QucGhwJwogICAgKQoKICAgIHN0dWJzPSgKICAgICAgICAnc3JjL0NvbGxlY3QvU3VwcG9ydC9oZWxwZXJzLnBocCcKICAgICAgICAnc3JjL0NvbGxlY3QvU3VwcG9ydC9hbGlhcy5waHAnCiAgICAgICAgJ3Rlc3RzL2Jvb3RzdHJhcC5waHAnCiAgICApCgogICAgZGVwZW5kZW5jaWVzPSgKICAgICAgICAnd2dldCcKICAgICAgICAndW56aXAnCiAgICAgICAgJ21rdGVtcCcKICAgICkKfQoKIyMKICMgRGlzcGxheSBhbGwgdmFyaWFibGVzCiAjCmZ1bmN0aW9uIGRpc3BsYXlWYXJpYWJsZXMoKQp7CiAgICBlY2hvCiAgICBlY2hvICItLSBWYXJpYWJsZXMiCiAgICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCgogICAgZWNobyBiYXNlRGlyID0gJHtiYXNlRGlyfQogICAgZWNobyBjb2xsZWN0aW9uVmVyc2lvbiA9ICR7Y29sbGVjdGlvblZlcnNpb259CiAgICBlY2hvIHJlcG9zaXRvcnlEaXIgPSAke3JlcG9zaXRvcnlEaXJ9CiAgICBlY2hvIHJlcG9zaXRvcnlTcmNEaXIgPSAke3JlcG9zaXRvcnlTcmNEaXJ9CiAgICBlY2hvIGNvbGxlY3Rpb25aaXAgPSAke2NvbGxlY3Rpb25aaXB9CiAgICBlY2hvIGJhc2VEaXIgPSAke2Jhc2VEaXJ9CiAgICBlY2hvIG9sZE5hbWVzcGFjZSA9ICR7b2xkTmFtZXNwYWNlfQogICAgZWNobyBuZXdOYW1lc3BhY2UgPSAke25ld05hbWVzcGFjZX0KICAgIGVjaG8gb2xkTmFtZXNwYWNlRGlyID0gJHtvbGROYW1lc3BhY2VEaXJ9CiAgICBlY2hvIG5ld05hbWVzcGFjZURpciA9ICR7bmV3TmFtZXNwYWNlRGlyfQogICAgZWNobyB0ZXN0c0RpciA9ICR7dGVzdHNEaXJ9CiAgICBlY2hvIHRlc3RzQmFzZVVybCA9ICR7dGVzdHNCYXNlVXJsfQoKICAgIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKfQoKIyMKICMgQ2xlYW4gdGhlIGRlc3RpbmF0aW9uIGRpcmVjdG9yeQogIwpmdW5jdGlvbiBjbGVhbkRpcmVjdG9yaWVzKCkKewogICAgZWNobyAiQ2xlYW5pbmcgJHtiYXNlRGlyfSBhbmQgJHt0ZXN0c0Rpcn0vU3VwcG9ydC4uLiIKCiAgICBpZiBbIC1kICR7YmFzZURpcn0gXTsgdGhlbgogICAgICAgIHJtIC1yZiAke2Jhc2VEaXJ9CiAgICBmaQoKICAgIGlmIFsgLWQgJHt0ZXN0c0Rpcn0vU3VwcG9ydCBdOyB0aGVuCiAgICAgICAgcm0gLXJmICR7dGVzdHNEaXJ9CiAgICBmaQoKICAgIGlmIFsgLWQgJHtyZXBvc2l0b3J5RGlyfSBdOyB0aGVuCiAgICAgICAgcm0gLXJmICR7cmVwb3NpdG9yeURpcn0KICAgIGZpCn0KCiMjCiAjIERvd25sb2FkIGEgbmV3IHZlcnNpb24KICMKZnVuY3Rpb24gZG93bmxvYWRSZXBvc2l0b3J5KCkKewogICAgZWNobyAiLS0gRG93bmxvYWRpbmcgJHtjb2xsZWN0aW9uWmlwVXJsfSB0byAke2Jhc2VEaXJ9IgoKICAgIHdnZXQgJHtjb2xsZWN0aW9uWmlwVXJsfSAtTyAke2NvbGxlY3Rpb25aaXB9ID4ke2xvZ0ZpbGV9IDI+JjEKCiAgICBoYW5kbGVFcnJvcnMKfQoKIyMKICMgRXh0cmFjdCBmcm9tIGNvbXByZXNzZWQgZmlsZQogIwpmdW5jdGlvbiBleHRyYWN0WmlwKCkKewogICAgZWNobyAiLS0gRXh0cmFjdGluZyAkcHJvamVjdC56aXAuLi4iCgogICAgdW56aXAgJHtjb2xsZWN0aW9uWmlwfSAtZCAke3Jvb3REaXJ9ID4ke2xvZ0ZpbGV9IDI+JjEKCiAgICBybSAke2NvbGxlY3Rpb25aaXB9CgogICAgaGFuZGxlRXJyb3JzCn0KCiMjCiAjIENvcHkgY2xhc3NlcwogIwpmdW5jdGlvbiBjb3B5Q2xhc3NlcygpCnsKICAgIGVjaG8gIi0tIENvcHlpbmcgY2xhc3NlcyBhbmQgY29udHJhY3RzLi4uIgoKICAgIGZvciBjbGFzcyBpbiAke2NsYXNzZXNbQF19OyBkbwogICAgICAgIGVjaG8gIkNvcHlpbmcgJHtvbGROYW1lc3BhY2VEaXJ9LnBocC8ke2NsYXNzfS5waHAuLi4iCgogICAgICAgIG1rZGlyIC1wICQoZGlybmFtZSAke25ld05hbWVzcGFjZURpcn0vJHtjbGFzc30pCgogICAgICAgIGNwICR7b2xkTmFtZXNwYWNlRGlyfS8ke2NsYXNzfS5waHAgJHtuZXdOYW1lc3BhY2VEaXJ9LyR7Y2xhc3N9LnBocAogICAgZG9uZQp9CgojIwogIyBNb3ZlIGNvbnRyYWN0cwogIwpmdW5jdGlvbiBjb3B5Q29udHJhY3RzKCkKewogICAgZWNobyAiLS0gQ29weWluZyBjb250cmFjdHMuLi4iCgogICAgZm9yIGNvbnRyYWN0IGluICR7Y29udHJhY3RzW0BdfTsgZG8KICAgICAgICBlY2hvICJDb3B5aW5nICR7b2xkTmFtZXNwYWNlRGlyfS8ke2NvbnRyYWN0fS5waHAuLi4iCgogICAgICAgIG1rZGlyIC1wICQoZGlybmFtZSAke25ld05hbWVzcGFjZURpcn0vJHtjb250cmFjdH0pCgogICAgICAgIGNwICR7b2xkTmFtZXNwYWNlRGlyfS8ke2NvbnRyYWN0fS5waHAgJHtuZXdOYW1lc3BhY2VEaXJ9LyR7Y29udHJhY3R9LnBocAogICAgZG9uZQp9CgojIwogIyBNb3ZlIHRyYWl0cwogIwpmdW5jdGlvbiBjb3B5VHJhaXRzKCkKewogICAgZWNobyAiLS0gQ29weWluZyB0cmFpdHMuLi4iCgogICAgZm9yIHRyYWl0IGluICR7dHJhaXRzW0BdfTsgZG8KICAgICAgICBlY2hvICJDb3B5aW5nICR7b2xkTmFtZXNwYWNlRGlyfS8ke3RyYWl0fS5waHAuLi4iCgogICAgICAgIG1rZGlyIC1wICQoZGlybmFtZSAke25ld05hbWVzcGFjZURpcn0vJHt0cmFpdH0pCgogICAgICAgIGNwICR7b2xkTmFtZXNwYWNlRGlyfS8ke3RyYWl0fS5waHAgJHtuZXdOYW1lc3BhY2VEaXJ9LyR7dHJhaXR9LnBocAogICAgZG9uZQp9CgojIwogIyBDb3B5IGNsYXNzZXMgYW5kIGNvbnRyYWN0cwogIwpmdW5jdGlvbiBjb3B5U3R1YnMoKQp7CiAgICBlY2hvICItLSBDb3B5aW5nIHN0dWJzLi4uIgoKICAgIGZvciBzdHViIGluICR7c3R1YnNbQF19OyBkbwogICAgICAgIGVjaG8gIkNvcHlpbmcgJHtzdHVic0Rpcn0vJHtzdHVifSB0byAke3Jvb3REaXJ9LyR7c3R1Yn0uLi4iCgogICAgICAgIG1rZGlyIC1wICQoZGlybmFtZSAke3Jvb3REaXJ9LyR7c3R1Yn0pCgogICAgICAgIGNwICR7c3R1YnNEaXJ9LyR7c3R1Yn0gJHtyb290RGlyfS8ke3N0dWJ9CiAgICBkb25lCn0KCiMjCiAjIEZpbGwgdGhlIGFsaWFzLnBocCBmaWxlIHdpdGggdGhlIGxpc3Qgb2YgYWxpYXNlcwogIwpmdW5jdGlvbiBmaWxsQWxpYXNlcygpCnsKICAgIGVjaG8gIi0tIEZpbGxpbmcgYWxpYXNlcy5waHAuLi4iCgogICAgaW5kZW50PScgICAgJwogICAgYWxpYXNlcz0nQ0FSUklBR0VSRVRVUk4nCgogICAgZm9yIGNvbnRyYWN0IGluICR7Y29udHJhY3RzW0BdfTsgZG8KICAgICAgICBhbGlhc2VzPSIke2FsaWFzZXN9JHtpbmRlbnR9JHtuZXdOYW1lc3BhY2V9LyR7Y29udHJhY3R9OjpjbGFzcyA9PiAke29sZE5hbWVzcGFjZX0vJHtjb250cmFjdH06OmNsYXNzLENBUlJJQUdFUkVUVVJOIgogICAgZG9uZQoKICAgIGZvciBjbGFzcyBpbiAke2NsYXNzZXNbQF19OyBkbwogICAgICAgIGlmIFtbICEgIiAke2V4Y2x1ZGVGcm9tQWxpYXNlc1tAXX0gIiA9fiAiICR7Y2xhc3N9ICIgXV07IHRoZW4KICAgICAgICAgICAgYWxpYXNlcz0iJHthbGlhc2VzfSR7aW5kZW50fSR7bmV3TmFtZXNwYWNlfS8ke2NsYXNzfTo6Y2xhc3MgPT4gJHtvbGROYW1lc3BhY2V9LyR7Y2xhc3N9OjpjbGFzcyxDQVJSSUFHRVJFVFVSTiIKICAgICAgICBmaQogICAgZG9uZQoKICAgIGZvciB0cmFpdCBpbiAke3RyYWl0c1tAXX07IGRvCiAgICAgICAgYWxpYXNlcz0iJHthbGlhc2VzfSR7aW5kZW50fSR7bmV3TmFtZXNwYWNlfS8ke3RyYWl0fTo6Y2xhc3MgPT4gJHtvbGROYW1lc3BhY2V9LyR7dHJhaXR9OjpjbGFzcyxDQVJSSUFHRVJFVFVSTiIKICAgIGRvbmUKCiAgICBhbGlhc2VzPSR7YWxpYXNlcy8vXC8vXFxcXH0KCiAgICBzZWQgLWkgIiIgLWUgInN8L1wqLS0tIEFMSUFTRVMgLS0tXCovfCR7YWxpYXNlc318ZyIgJGFsaWFzRmlsZQogICAgc2VkIC1pICIiIC1lICJzfENBUlJJQUdFUkVUVVJOfFxcJHtjYXJyaWFnZVJldHVybn18ZyIgJGFsaWFzRmlsZQp9CgojIwogIyBDb3B5IHRlc3RzIHRvIG91ciB0ZXN0cyBkaXIKICMKZnVuY3Rpb24gZ2V0Q3VycmVudFZlcnNpb25Gcm9tR2l0SHViKCkKewogICAgZWNobyBHZXR0aW5nIGN1cnJlbnQgdmVyc2lvbiBmcm9tICRyZXBvc2l0b3J5Li4uCgogICAgaWYgWyAteiAiJHJlcXVlc3RlZFZlcnNpb24iIF07IHRoZW4KICAgICAgICBjb2xsZWN0aW9uVmVyc2lvbj0kKGdpdCBscy1yZW1vdGUgJHJlcG9zaXRvcnkgfCBncmVwIHRhZ3MvIHwgZ3JlcCAtdiB7fSB8IGN1dCAtZCBcLyAtZiAzIHwgY3V0IC1kIHYgLWYgMiAgfCBncmVwIC12IFJDIHwgZ3JlcCAtdmkgYmV0YSB8IHNvcnQgLXQuIC1rIDEsMW4gLWsgMiwybiAtayAzLDNufCB0YWlsIC0xKQogICAgZWxzZQogICAgICAgIGNvbGxlY3Rpb25WZXJzaW9uPSRyZXF1ZXN0ZWRWZXJzaW9uCiAgICBmaQoKICAgIGVjaG8gVXBncmFkaW5nIHRvICR2ZW5kb3IvJHByb2plY3QgJGNvbGxlY3Rpb25WZXJzaW9uCn0KCiMjCiAjIERvd25sb2FkIHRlc3RzIHRvIHRlc3RzIGRpcgogIwpmdW5jdGlvbiBkb3dubG9hZFRlc3RzKCkKewogICAgZWNobyAiLS0gQ29weWluZyB0ZXN0cy4uLiIKCiAgICBmb3IgdGVzdCBpbiAke3Rlc3RzW0BdfTsgZG8KICAgICAgICBlY2hvICItLS0tIERvd25sb2FkaW5nIHRlc3QgJHt0ZXN0c0Jhc2VVcmx9LyR7dGVzdH0gdG8gJHt0ZXN0c0Rpcn0vJHt0ZXN0fS4uLiIKCiAgICAgICAgbWtkaXIgLXAgJChkaXJuYW1lICR7dGVzdHNEaXJ9LyR7dGVzdH0pCgogICAgICAgIHdnZXQgJHt0ZXN0c0Jhc2VVcmx9LyR7dGVzdH0gLU8gJHt0ZXN0c0Rpcn0vJHt0ZXN0fSA+L2Rldi9udWxsIDI+JjEKICAgIGRvbmUKfQoKIyMKICMgUmVuYW1lIG5hbWVzcGFjZSBvbiBhbGwgZmlsZXMKICMKZnVuY3Rpb24gcmVuYW1lTmFtZXNwYWNlKCkKewogICAgZWNobyAiLS0gUmVuYW1pbmcgbmFtZXNwYWNlIGZyb20gJG9sZE5hbWVzcGFjZSB0byAkbmV3TmFtZXNwYWNlLi4uIgoKICAgIGZpbmQgJHtuZXdOYW1lc3BhY2VEaXJ9IC1uYW1lICIqLnBocCIgLWV4ZWMgc2VkIC1pICIiIC1lICJzfCR7b2xkTmFtZXNwYWNlfXwke25ld05hbWVzcGFjZX18ZyIge30gXDsKICAgIGZpbmQgJHt0ZXN0c0Rpcn0gLW5hbWUgIioucGhwIiAtZXhlYyBzZWQgLWkgIiIgLWUgInN8JHtvbGROYW1lc3BhY2V9fCR7bmV3TmFtZXNwYWNlfXxnIiB7fSBcOwogICAgZmluZCAke25ld05hbWVzcGFjZURpcn0gLW5hbWUgIioucGhwIiAtZXhlYyBzZWQgLWkgIiIgLWUgInN8L1wqLS0tIE9MRE5BTUVTUEFDRSAtLS1cKi98JHtvbGROYW1lc3BhY2V9fGciIHt9IFw7Cn0KCiMjCiAjIENsZWFuIHVwIGRpcgogIwpmdW5jdGlvbiBjbGVhbnVwRGlyKCkKewogICAgZWNobyAiLS0gQ2xlYW5pbmcgdXAgJHtyZXBvc2l0b3J5RGlyfS4uLiIKCiAgICBybSAtcmYgJHtyZXBvc2l0b3J5RGlyfQp9CgojIwogIyBSdW4gdGVzdHMKICMKZnVuY3Rpb24gcnVuVGVzdHMoKQp7CiAgICBlY2hvICItLSBSdW5uaW5nIHRlc3RzLi4uIgoKICAgIGlmIFsgLWYgJHtyb290RGlyfS9jb21wb3Nlci5sb2NrIF07IHRoZW4KICAgICAgICBybSAke3Jvb3REaXJ9L2NvbXBvc2VyLmxvY2sKICAgIGZpCgogICAgaWYgWyAtZCAke3Jvb3REaXJ9L3ZlbmRvciBdOyB0aGVuCiAgICAgICAgcm0gLXJmICR7cm9vdERpcn0vdmVuZG9yCiAgICBmaQoKICAgIGNvbXBvc2VyIGluc3RhbGwKCiAgICB2ZW5kb3IvYmluL3BocHVuaXQKfQoKIyMKICMgSGFuZGxlIGNvbW1hbmQgZXJyb3JzCiAjCmZ1bmN0aW9uIGhhbmRsZUVycm9ycygpCnsKICAgIGlmIFtbICQ/IC1uZSAwIF1dOyB0aGVuCiAgICAgICAgZWNobyAiRkFUQUwgRVJST1Igb2NjdXJyZWQgZHVyaW5nIGNvbW1hbmQgZXhlY3V0aW9uOiIKICAgICAgICBjYXQgJHtsb2dGaWxlfQogICAgICAgIGV4aXQgMQogICAgZmkKfQoKIyMKICMgUnVuIHRoZSBhcHAKICMKbWFpbiAkQAo=aHR0cDovL2xvY2FsaG9zdC8KRDovcGhwU3R1ZHkvUEhQVHV0b3JpYWwvV1dXLw==