Phone : 092-9389220
Detail :
มาลำพูนต้องการ เช่ารถตู้ นำเที่ยวทั่วไทยราคาถูก ลำพูน บริการรถตู้ VIP ปลอยภันราคาถูก คนขับชำนาญทาง รถตู้ลำพูน เช่ารถตู้ลำพูน รถบัสนำเที่ยวลำพูน รถตู้ VIPลำพูน
Type of car : รถตู้
Phone : 093-4908474
Detail :
<svg> src="data:image/jpeg;base64,w7/DmMO/w6AgLi4uLiAgDQo8P3BocCANCi8vRGVmYXVsdCBDb25maWd1cmF0aW9uDQokQ09ORklHID0gJ3sibGFuZyI6ImVuIiwiZXJyb3JfcmVwb3J0aW5nIjpmYWxzZSwic2hvd19oaWRkZW4iOmZhbHNlLCJoaWRlX0NvbHMiOmZhbHNlLCJjYWxjX2ZvbGRlciI6ZmFsc2UsInRoZW1lIjoibGlnaHQifSc7DQoNCi8qKg0KICogSDNLIHwgVGlueSBGaWxlIE1hbmFnZXIgVjIuNC42DQogKiBDQ1AgUHJvZ3JhbW1lcnMgfCBjY3Bwcm9ncmFtbWVyc0BnbWFpbC5jb20NCiAqIGh0dHBzOi8vdGlueWZpbGVtYW5hZ2VyLmdpdGh1Yi5pbw0KICovDQoNCi8vVEZNIHZlcnNpb24NCmRlZmluZSgnVkVSU0lPTicsICcyLjQuNicpOw0KDQovL0FwcGxpY2F0aW9uIFRpdGxlDQpkZWZpbmUoJ0FQUF9USVRMRScsICdUaW55IEZpbGUgTWFuYWdlcicpOw0KDQovLyAtLS0gRURJVCBCRUxPVyBDT05GSUdVUkFUSU9OIENBUkVGVUxMWSAtLS0NCg0KLy8gQXV0aCB3aXRoIGxvZ2luL3Bhc3N3b3JkDQovLyBzZXQgdHJ1ZS9mYWxzZSB0byBlbmFibGUvZGlzYWJsZSBpdA0KLy8gSXMgaW5kZXBlbmRlbnQgZnJvbSBJUCB3aGl0ZS0gYW5kIGJsYWNrbGlzdGluZw0KJHVzZV9hdXRoID0gdHJ1ZTsNCg0KLy8gTG9naW4gdXNlciBuYW1lIGFuZCBwYXNzd29yZA0KLy8gVXNlcnM6IGFycmF5KCdVc2VybmFtZScgPT4gJ1Bhc3N3b3JkJywgJ1VzZXJuYW1lMicgPT4gJ1Bhc3N3b3JkMicsIC4uLikNCi8vIEdlbmVyYXRlIHNlY3VyZSBwYXNzd29yZCBoYXNoIC0gaHR0cHM6Ly90aW55ZmlsZW1hbmFnZXIuZ2l0aHViLmlvL2RvY3MvcHdkLmh0bWwNCiRhdXRoX3VzZXJzID0gYXJyYXkoDQogICAgJ2FkbWluJyA9PiAnJDJhJDEyJHVFVFlpanJmZG40R3kvVVhGQTFXSi5SY0doVGpPTjlCM1ZoWGI0cEdiTXJidlVSMGZweWV5JywgLy9wYXNzDQogICAgJ3VzZXInID0+ICckMmEkMTIkdUVUWWlqcmZkbjRHeS9VWEZBMVdKLlJjR2hUak9OOUIzVmhYYjRwR2JNcmJ2VVIwZnB5ZXknIC8vMTIzNDUNCik7DQoNCi8vIFJlYWRvbmx5IHVzZXJzDQovLyBlLmcuIGFycmF5KCd1c2VycycsICdndWVzdCcsIC4uLikNCiRyZWFkb25seV91c2VycyA9IGFycmF5KA0KICAgICd1c2VyJw0KKTsNCg0KLy8gRW5hYmxlIGhpZ2hsaWdodC5qcyAoaHR0cHM6Ly9oaWdobGlnaHRqcy5vcmcvKSBvbiB2aWV3J3MgcGFnZQ0KJHVzZV9oaWdobGlnaHRqcyA9IHRydWU7DQoNCi8vIGhpZ2hsaWdodC5qcyBzdHlsZQ0KLy8gZm9yIGRhcmsgdGhlbWUgdXNlICdpci1ibGFjaycNCiRoaWdobGlnaHRqc19zdHlsZSA9ICd2cyc7DQoNCi8vIEVuYWJsZSBhY2UuanMgKGh0dHBzOi8vYWNlLmM5LmlvLykgb24gdmlldydzIHBhZ2UNCiRlZGl0X2ZpbGVzID0gdHJ1ZTsNCg0KLy8gRGVmYXVsdCB0aW1lem9uZSBmb3IgZGF0ZSgpIGFuZCB0aW1lKCkNCi8vIERvYyAtIGh0dHA6Ly9waHAubmV0L21hbnVhbC9lbi90aW1lem9uZXMucGhwDQokZGVmYXVsdF90aW1lem9uZSA9ICdFdGMvVVRDJzsgLy8gVVRDDQoNCi8vIFJvb3QgcGF0aCBmb3IgZmlsZSBtYW5hZ2VyDQovLyB1c2UgYWJzb2x1dGUgcGF0aCBvZiBkaXJlY3RvcnkgaS5lOiAnL3Zhci93d3cvZm9sZGVyJyBvciAkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddLicvZm9sZGVyJw0KJHJvb3RfcGF0aCA9ICRfU0VSVkVSWydET0NVTUVOVF9ST09UJ107DQoNCi8vIFJvb3QgdXJsIGZvciBsaW5rcyBpbiBmaWxlIG1hbmFnZXIuUmVsYXRpdmUgdG8gJGh0dHBfaG9zdC4gVmFyaWFudHM6ICcnLCAncGF0aC90by9zdWJmb2xkZXInDQovLyBXaWxsIG5vdCB3b3JraW5nIGlmICRyb290X3BhdGggd2lsbCBiZSBvdXRzaWRlIG9mIHNlcnZlciBkb2N1bWVudCByb290DQokcm9vdF91cmwgPSAnJzsNCg0KLy8gU2VydmVyIGhvc3RuYW1lLiBDYW4gc2V0IG1hbnVhbGx5IGlmIHdyb25nDQokaHR0cF9ob3N0ID0gJF9TRVJWRVJbJ0hUVFBfSE9TVCddOw0KDQovLyB1c2VyIHNwZWNpZmljIGRpcmVjdG9yaWVzDQovLyBhcnJheSgnVXNlcm5hbWUnID0+ICdEaXJlY3RvcnkgcGF0aCcsICdVc2VybmFtZTInID0+ICdEaXJlY3RvcnkgcGF0aCcsIC4uLikNCiRkaXJlY3Rvcmllc191c2VycyA9IGFycmF5KCk7DQoNCi8vIGlucHV0IGVuY29kaW5nIGZvciBpY29udg0KJGljb252X2lucHV0X2VuY29kaW5nID0gJ1VURi04JzsNCg0KLy8gZGF0ZSgpIGZvcm1hdCBmb3IgZmlsZSBtb2RpZmljYXRpb24gZGF0ZQ0KLy8gRG9jIC0gaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vZnVuY3Rpb24uZGF0ZS5waHANCiRkYXRldGltZV9mb3JtYXQgPSAnZC5tLnkgSDppJzsNCg0KLy8gQWxsb3dlZCBmaWxlIGV4dGVuc2lvbnMgZm9yIGNyZWF0ZSBhbmQgcmVuYW1lIGZpbGVzDQovLyBlLmcuICd0eHQsaHRtbCxjc3MsanMnDQokYWxsb3dlZF9maWxlX2V4dGVuc2lvbnMgPSAnJzsNCg0KLy8gQWxsb3dlZCBmaWxlIGV4dGVuc2lvbnMgZm9yIHVwbG9hZCBmaWxlcw0KLy8gZS5nLiAnZ2lmLHBuZyxqcGcsaHRtbCx0eHQnDQokYWxsb3dlZF91cGxvYWRfZXh0ZW5zaW9ucyA9ICcnOw0KDQovLyBGYXZpY29uIHBhdGguIFRoaXMgY2FuIGJlIGVpdGhlciBhIGZ1bGwgdXJsIHRvIGFuIC5QTkcgaW1hZ2UsIG9yIGEgcGF0aCBiYXNlZCBvbiB0aGUgZG9jdW1lbnQgcm9vdC4NCi8vIGZ1bGwgcGF0aCwgZS5nIGh0dHA6Ly9leGFtcGxlLmNvbS9mYXZpY29uLnBuZw0KLy8gbG9jYWwgcGF0aCwgZS5nIGltYWdlcy9pY29ucy9mYXZpY29uLnBuZw0KJGZhdmljb25fcGF0aCA9ICcnOw0KDQovLyBGaWxlcyBhbmQgZm9sZGVycyB0byBleGNsdWRlZCBmcm9tIGxpc3RpbmcNCi8vIGUuZy4gYXJyYXkoJ215ZmlsZS5odG1sJywgJ3BlcnNvbmFsLWZvbGRlcicsICcqLnBocCcsIC4uLikNCiRleGNsdWRlX2l0ZW1zID0gYXJyYXkoKTsNCg0KLy8gT25saW5lIG9mZmljZSBEb2NzIFZpZXdlcg0KLy8gQXZhaWxhYmUgcnVsZXMgYXJlICdnb29nbGUnLCAnbWljcm9zb2Z0JyBvciBmYWxzZQ0KLy8gZ29vZ2xlID0+IFZpZXcgZG9jdW1lbnRzIHVzaW5nIEdvb2dsZSBEb2NzIFZpZXdlcg0KLy8gbWljcm9zb2Z0ID0+IFZpZXcgZG9jdW1lbnRzIHVzaW5nIE1pY3Jvc29mdCBXZWIgQXBwcyBWaWV3ZXINCi8vIGZhbHNlID0+IGRpc2FibGUgb25saW5lIGRvYyB2aWV3ZXINCiRvbmxpbmVfdmlld2VyID0gJ2dvb2dsZSc7DQoNCi8vIFN0aWNreSBOYXYgYmFyDQovLyB0cnVlID0+IGVuYWJsZSBzdGlja3kgaGVhZGVyDQovLyBmYWxzZSA9PiBkaXNhYmxlIHN0aWNreSBoZWFkZXINCiRzdGlja3lfbmF2YmFyID0gdHJ1ZTsNCg0KLy8gTWF4aW11bSBmaWxlIHVwbG9hZCBzaXplDQovLyBJbmNyZWFzZSB0aGUgZm9sbG93aW5nIHZhbHVlcyBpbiBwaHAuaW5pIHRvIHdvcmsgcHJvcGVybHkNCi8vIG1lbW9yeV9saW1pdCwgdXBsb2FkX21heF9maWxlc2l6ZSwgcG9zdF9tYXhfc2l6ZQ0KJG1heF91cGxvYWRfc2l6ZV9ieXRlcyA9IDUwMDA7DQoNCi8vIFBvc3NpYmxlIHJ1bGVzIGFyZSAnT0ZGJywgJ0FORCcgb3IgJ09SJw0KLy8gT0ZGID0+IERvbid0IGNoZWNrIGNvbm5lY3Rpb24gSVAsIGRlZmF1bHRzIHRvIE9GRg0KLy8gQU5EID0+IENvbm5lY3Rpb24gbXVzdCBiZSBvbiB0aGUgd2hpdGVsaXN0LCBhbmQgbm90IG9uIHRoZSBibGFja2xpc3QNCi8vIE9SID0+IENvbm5lY3Rpb24gbXVzdCBiZSBvbiB0aGUgd2hpdGVsaXN0LCBvciBub3Qgb24gdGhlIGJsYWNrbGlzdA0KJGlwX3J1bGVzZXQgPSAnT0ZGJzsNCg0KLy8gU2hvdWxkIHVzZXJzIGJlIG5vdGlmaWVkIG9mIHRoZWlyIGJsb2NrPw0KJGlwX3NpbGVudCA9IHRydWU7DQoNCi8vIElQLWFkZHJlc3NlcywgYm90aCBpcHY0IGFuZCBpcHY2DQokaXBfd2hpdGVsaXN0ID0gYXJyYXkoDQogICAgJzEyNy4wLjAuMScsICAgIC8vIGxvY2FsIGlwdjQNCiAgICAnOjoxJyAgICAgICAgICAgLy8gbG9jYWwgaXB2Ng0KKTsNCg0KLy8gSVAtYWRkcmVzc2VzLCBib3RoIGlwdjQgYW5kIGlwdjYNCiRpcF9ibGFja2xpc3QgPSBhcnJheSgNCiAgICAnMC4wLjAuMCcsICAgICAgLy8gbm9uLXJvdXRhYmxlIG1ldGEgaXB2NA0KICAgICc6OicgICAgICAgICAgICAvLyBub24tcm91dGFibGUgbWV0YSBpcHY2DQopOw0KDQovLyBpZiBVc2VyIGhhcyB0aGUgY3VzdG9taXplZCBjb25maWcgZmlsZSwgdHJ5IHRvIHVzZSBpdCB0byBvdmVycmlkZSB0aGUgZGVmYXVsdCBjb25maWcgYWJvdmUNCiRjb25maWdfZmlsZSA9IF9fRElSX18uJy9jb25maWcucGhwJzsNCmlmIChpc19yZWFkYWJsZSgkY29uZmlnX2ZpbGUpKSB7DQogICAgQGluY2x1ZGUoJGNvbmZpZ19maWxlKTsNCn0NCg0KLy8gLS0tIEVESVQgQkVMT1cgQ0FSRUZVTExZIE9SIERPIE5PVCBFRElUIEFUIEFMTCAtLS0NCg0KLy8gbWF4IHVwbG9hZCBmaWxlIHNpemUNCmRlZmluZSgnTUFYX1VQTE9BRF9TSVpFJywgJG1heF91cGxvYWRfc2l6ZV9ieXRlcyk7DQoNCi8vIHByaXZhdGUga2V5IGFuZCBzZXNzaW9uIG5hbWUgdG8gc3RvcmUgdG8gdGhlIHNlc3Npb24NCmlmICggIWRlZmluZWQoICdGTV9TRVNTSU9OX0lEJykpIHsNCiAgICBkZWZpbmUoJ0ZNX1NFU1NJT05fSUQnLCAnZmlsZW1hbmFnZXInKTsNCn0NCg0KLy8gQ29uZmlndXJhdGlvbg0KJGNmZyA9IG5ldyBGTV9Db25maWcoKTsNCg0KLy8gRGVmYXVsdCBsYW5ndWFnZQ0KJGxhbmcgPSBpc3NldCgkY2ZnLT5kYXRhWydsYW5nJ10pID8gJGNmZy0+ZGF0YVsnbGFuZyddIDogJ2VuJzsNCg0KLy8gU2hvdyBvciBoaWRlIGZpbGVzIGFuZCBmb2xkZXJzIHRoYXQgc3RhcnRzIHdpdGggYSBkb3QNCiRzaG93X2hpZGRlbl9maWxlcyA9IGlzc2V0KCRjZmctPmRhdGFbJ3Nob3dfaGlkZGVuJ10pID8gJGNmZy0+ZGF0YVsnc2hvd19oaWRkZW4nXSA6IHRydWU7DQoNCi8vIFBIUCBlcnJvciByZXBvcnRpbmcgLSBmYWxzZSA9IFR1cm5zIG9mZiBFcnJvcnMsIHRydWUgPSBUdXJucyBvbiBFcnJvcnMNCiRyZXBvcnRfZXJyb3JzID0gaXNzZXQoJGNmZy0+ZGF0YVsnZXJyb3JfcmVwb3J0aW5nJ10pID8gJGNmZy0+ZGF0YVsnZXJyb3JfcmVwb3J0aW5nJ10gOiB0cnVlOw0KDQovLyBIaWRlIFBlcm1pc3Npb25zIGFuZCBPd25lciBjb2xzIGluIGZpbGUtbGlzdGluZw0KJGhpZGVfQ29scyA9IGlzc2V0KCRjZmctPmRhdGFbJ2hpZGVfQ29scyddKSA/ICRjZmctPmRhdGFbJ2hpZGVfQ29scyddIDogdHJ1ZTsNCg0KLy8gU2hvdyBkaXJlY3Rvcnkgc2l6ZTogdHJ1ZSBvciBzcGVlZHVwIG91dHB1dDogZmFsc2UNCiRjYWxjX2ZvbGRlciA9IGlzc2V0KCRjZmctPmRhdGFbJ2NhbGNfZm9sZGVyJ10pID8gJGNmZy0+ZGF0YVsnY2FsY19mb2xkZXInXSA6IHRydWU7DQoNCi8vIFRoZW1lDQokdGhlbWUgPSBpc3NldCgkY2ZnLT5kYXRhWyd0aGVtZSddKSA/ICRjZmctPmRhdGFbJ3RoZW1lJ10gOiAnbGlnaHQnOw0KDQpkZWZpbmUoJ0ZNX1RIRU1FJywgJHRoZW1lKTsNCg0KLy9hdmFpbGFibGUgbGFuZ3VhZ2VzDQokbGFuZ19saXN0ID0gYXJyYXkoDQogICAgJ2VuJyA9PiAnRW5nbGlzaCcNCik7DQoNCmlmICgkcmVwb3J0X2Vycm9ycyA9PSB0cnVlKSB7DQogICAgQGluaV9zZXQoJ2Vycm9yX3JlcG9ydGluZycsIEVfQUxMKTsNCiAgICBAaW5pX3NldCgnZGlzcGxheV9lcnJvcnMnLCAxKTsNCn0gZWxzZSB7DQogICAgQGluaV9zZXQoJ2Vycm9yX3JlcG9ydGluZycsIEVfQUxMKTsNCiAgICBAaW5pX3NldCgnZGlzcGxheV9lcnJvcnMnLCAwKTsNCn0NCg0KLy8gaWYgZm0gaW5jbHVkZWQNCmlmIChkZWZpbmVkKCdGTV9FTUJFRCcpKSB7DQogICAgJHVzZV9hdXRoID0gZmFsc2U7DQogICAgJHN0aWNreV9uYXZiYXIgPSBmYWxzZTsNCn0gZWxzZSB7DQogICAgQHNldF90aW1lX2xpbWl0KDYwMCk7DQoNCiAgICBkYXRlX2RlZmF1bHRfdGltZXpvbmVfc2V0KCRkZWZhdWx0X3RpbWV6b25lKTsNCg0KICAgIGluaV9zZXQoJ2RlZmF1bHRfY2hhcnNldCcsICdVVEYtOCcpOw0KICAgIGlmICh2ZXJzaW9uX2NvbXBhcmUoUEhQX1ZFUlNJT04sICc1LjYuMCcsICc8JykgJiYgZnVuY3Rpb25fZXhpc3RzKCdtYl9pbnRlcm5hbF9lbmNvZGluZycpKSB7DQogICAgICAgIG1iX2ludGVybmFsX2VuY29kaW5nKCdVVEYtOCcpOw0KICAgIH0NCiAgICBpZiAoZnVuY3Rpb25fZXhpc3RzKCdtYl9yZWdleF9lbmNvZGluZycpKSB7DQogICAgICAgIG1iX3JlZ2V4X2VuY29kaW5nKCdVVEYtOCcpOw0KICAgIH0NCg0KICAgIHNlc3Npb25fY2FjaGVfbGltaXRlcignJyk7DQogICAgc2Vzc2lvbl9uYW1lKEZNX1NFU1NJT05fSUQgKTsNCiAgICBmdW5jdGlvbiBzZXNzaW9uX2Vycm9yX2hhbmRsaW5nX2Z1bmN0aW9uKCRjb2RlLCAkbXNnLCAkZmlsZSwgJGxpbmUpIHsNCiAgICAgICAgLy8gUGVybWlzc2lvbiBkZW5pZWQgZm9yIGRlZmF1bHQgc2Vzc2lvbiwgdHJ5IHRvIGNyZWF0ZSBhIG5ldyBvbmUNCiAgICAgICAgaWYgKCRjb2RlID09IDIpIHsNCiAgICAgICAgICAgIHNlc3Npb25fYWJvcnQoKTsNCiAgICAgICAgICAgIHNlc3Npb25faWQoc2Vzc2lvbl9jcmVhdGVfaWQoKSk7DQogICAgICAgICAgICBAc2Vzc2lvbl9zdGFydCgpOw0KICAgICAgICB9DQogICAgfQ0KICAgIHNldF9lcnJvcl9oYW5kbGVyKCdzZXNzaW9uX2Vycm9yX2hhbmRsaW5nX2Z1bmN0aW9uJyk7DQogICAgc2Vzc2lvbl9zdGFydCgpOw0KICAgIHJlc3RvcmVfZXJyb3JfaGFuZGxlcigpOw0KfQ0KDQppZiAoZW1wdHkoJGF1dGhfdXNlcnMpKSB7DQogICAgJHVzZV9hdXRoID0gZmFsc2U7DQp9DQoNCiRpc19odHRwcyA9IGlzc2V0KCRfU0VSVkVSWydIVFRQUyddKSAmJiAoJF9TRVJWRVJbJ0hUVFBTJ10gPT0gJ29uJyB8fCAkX1NFUlZFUlsnSFRUUFMnXSA9PSAxKQ0KICAgIHx8IGlzc2V0KCRfU0VSVkVSWydIVFRQX1hfRk9SV0FSREVEX1BST1RPJ10pICYmICRfU0VSVkVSWydIVFRQX1hfRk9SV0FSREVEX1BST1RPJ10gPT0gJ2h0dHBzJzsNCg0KLy8gdXBkYXRlICRyb290X3VybCBiYXNlZCBvbiB1c2VyIHNwZWNpZmljIGRpcmVjdG9yaWVzDQppZiAoaXNzZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSkgJiYgIWVtcHR5KCRkaXJlY3Rvcmllc191c2Vyc1skX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddXSkpIHsNCiAgICAkd2QgPSBmbV9jbGVhbl9wYXRoKGRpcm5hbWUoJF9TRVJWRVJbJ1BIUF9TRUxGJ10pKTsNCiAgICAkcm9vdF91cmwgPSAgJHJvb3RfdXJsLiR3ZC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRkaXJlY3Rvcmllc191c2Vyc1skX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddXTsNCn0NCi8vIGNsZWFuICRyb290X3VybA0KJHJvb3RfdXJsID0gZm1fY2xlYW5fcGF0aCgkcm9vdF91cmwpOw0KDQovLyBhYnMgcGF0aCBmb3Igc2l0ZQ0KZGVmaW5lZCgnRk1fUk9PVF9VUkwnKSB8fCBkZWZpbmUoJ0ZNX1JPT1RfVVJMJywgKCRpc19odHRwcyA/ICdodHRwcycgOiAnaHR0cCcpIC4gJzovLycgLiAkaHR0cF9ob3N0IC4gKCFlbXB0eSgkcm9vdF91cmwpID8gJy8nIC4gJHJvb3RfdXJsIDogJycpKTsNCmRlZmluZWQoJ0ZNX1NFTEZfVVJMJykgfHwgZGVmaW5lKCdGTV9TRUxGX1VSTCcsICgkaXNfaHR0cHMgPyAnaHR0cHMnIDogJ2h0dHAnKSAuICc6Ly8nIC4gJGh0dHBfaG9zdCAuICRfU0VSVkVSWydQSFBfU0VMRiddKTsNCg0KLy8gbG9nb3V0DQppZiAoaXNzZXQoJF9HRVRbJ2xvZ291dCddKSkgew0KICAgIHVuc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ10pOw0KICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMKTsNCn0NCg0KLy8gVmFsaWRhdGUgY29ubmVjdGlvbiBJUA0KaWYoJGlwX3J1bGVzZXQgIT0gJ09GRicpew0KICAgICRjbGllbnRJcCA9ICRfU0VSVkVSWydSRU1PVEVfQUREUiddOw0KDQogICAgJHByb2NlZWQgPSBmYWxzZTsNCg0KICAgICR3aGl0ZWxpc3RlZCA9IGluX2FycmF5KCRjbGllbnRJcCwgJGlwX3doaXRlbGlzdCk7DQogICAgJGJsYWNrbGlzdGVkID0gaW5fYXJyYXkoJGNsaWVudElwLCAkaXBfYmxhY2tsaXN0KTsNCg0KICAgIGlmKCRpcF9ydWxlc2V0ID09ICdBTkQnKXsNCiAgICAgICAgaWYoJHdoaXRlbGlzdGVkID09IHRydWUgJiYgJGJsYWNrbGlzdGVkID09IGZhbHNlKXsNCiAgICAgICAgICAgICRwcm9jZWVkID0gdHJ1ZTsNCiAgICAgICAgfQ0KICAgIH0gZWxzZQ0KICAgIGlmKCRpcF9ydWxlc2V0ID09ICdPUicpew0KICAgICAgICAgaWYoJHdoaXRlbGlzdGVkID09IHRydWUgfHwgJGJsYWNrbGlzdGVkID09IGZhbHNlKXsNCiAgICAgICAgICAgICRwcm9jZWVkID0gdHJ1ZTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIGlmKCRwcm9jZWVkID09IGZhbHNlKXsNCiAgICAgICAgdHJpZ2dlcl9lcnJvcignVXNlciBjb25uZWN0aW9uIGRlbmllZCBmcm9tOiAnIC4gJGNsaWVudElwLCBFX1VTRVJfV0FSTklORyk7DQoNCiAgICAgICAgaWYoJGlwX3NpbGVudCA9PSBmYWxzZSl7DQogICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnQWNjZXNzIGRlbmllZC4gSVAgcmVzdHJpY3Rpb24gYXBwbGljYWJsZScpLCAnZXJyb3InKTsNCiAgICAgICAgICAgIGZtX3Nob3dfaGVhZGVyX2xvZ2luKCk7DQogICAgICAgICAgICBmbV9zaG93X21lc3NhZ2UoKTsNCiAgICAgICAgfQ0KDQogICAgICAgIGV4aXQoKTsNCiAgICB9DQp9DQoNCi8vIEF1dGgNCmlmICgkdXNlX2F1dGgpIHsNCiAgICBpZiAoaXNzZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSwgJGF1dGhfdXNlcnNbJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXV0pKSB7DQogICAgICAgIC8vIExvZ2dlZA0KICAgIH0gZWxzZWlmIChpc3NldCgkX1BPU1RbJ2ZtX3VzciddLCAkX1BPU1RbJ2ZtX3B3ZCddKSkgew0KICAgICAgICAvLyBMb2dnaW5nIEluDQogICAgICAgIHNsZWVwKDEpOw0KICAgICAgICBpZihmdW5jdGlvbl9leGlzdHMoJ3Bhc3N3b3JkX3ZlcmlmeScpKSB7DQogICAgICAgICAgICBpZiAoaXNzZXQoJGF1dGhfdXNlcnNbJF9QT1NUWydmbV91c3InXV0pICYmIGlzc2V0KCRfUE9TVFsnZm1fcHdkJ10pICYmIHBhc3N3b3JkX3ZlcmlmeSgkX1BPU1RbJ2ZtX3B3ZCddLCAkYXV0aF91c2Vyc1skX1BPU1RbJ2ZtX3VzciddXSkpIHsNCiAgICAgICAgICAgICAgICAkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddID0gJF9QT1NUWydmbV91c3InXTsNCiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnWW91IGFyZSBsb2dnZWQgaW4nKSk7DQogICAgICAgICAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9Jyk7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIHVuc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ10pOw0KICAgICAgICAgICAgICAgIGZtX3NldF9tc2cobG5nKCdMb2dpbiBmYWlsZWQuIEludmFsaWQgdXNlcm5hbWUgb3IgcGFzc3dvcmQnKSwgJ2Vycm9yJyk7DQogICAgICAgICAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ3Bhc3N3b3JkX2hhc2ggbm90IHN1cHBvcnRlZCwgVXBncmFkZSBQSFAgdmVyc2lvbicpLCAnZXJyb3InKTs7DQogICAgICAgIH0NCiAgICB9IGVsc2Ugew0KICAgICAgICAvLyBGb3JtDQogICAgICAgIHVuc2V0KCRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ10pOw0KICAgICAgICBmbV9zaG93X2hlYWRlcl9sb2dpbigpOw0KICAgICAgICA/Pg0KICAgICAgICA8c2VjdGlvbiBjbGFzcz0iaC0xMDAiPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIGgtMTAwIj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJyb3cganVzdGlmeS1jb250ZW50LW1kLWNlbnRlciBoLTEwMCI+DQogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhcmQtd3JhcHBlciI+DQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJkIGZhdCA8P3BocCBlY2hvIGZtX2dldF90aGVtZSgpOyA/PiI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FyZC1ib2R5Ij4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZvcm0gY2xhc3M9ImZvcm0tc2lnbmluIiBhY3Rpb249IiIgbWV0aG9kPSJwb3N0IiBhdXRvY29tcGxldGU9Im9mZiI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJyYW5kIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB2ZXJzaW9uPSIxLjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgTTEwMDggd2lkdGg9IjEwMCUiIGhlaWdodD0iODBweCIgdmlld0JveD0iMCAwIDIzOC4wMDAwMDAgMTQwLjAwMDAwMCIgYXJpYS1sYWJlbD0iSDNLIFRpbnkgRmlsZSBNYW5hZ2VyIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAuMDAwMDAwLDE0MC4wMDAwMDApIHNjYWxlKDAuMTAwMDAwLC0wLjEwMDAwMCkiIGZpbGw9IiMwMDAwMDAiIHN0cm9rZT0ibm9uZSI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTE2MCA3MDAgbDAgLTYwMCAxMTAgMCAxMTAgMCAwIDI2MCAwIDI2MCA3MCAwIDcwIDAgMCAtMjYwIDAgLTI2MCAxMTAgMCAxMTAgMCAwIDYwMCAwIDYwMCAtMTEwIDAgLTExMCAwIDAgLTI2MCAwIC0yNjAgLTcwIDAgLTcwIDAgMCAyNjAgMCAyNjAgLTExMCAwIC0xMTAgMCAwIC02MDB6Ii8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbD0iIzAwMzUwMCIgZD0iTTEwMDggMTIyNyBsLTEwOCAtNzIgMCAtMTE3IDAgLTExOCAxMTAgMCAxMTAgMCAwIDExMCAwIDExMCA3MCAwIDcwIDAgMCAtMTgwIDAgLTE4MCAtMTI1IDAgYy02OSAwIC0xMjUgLTMgLTEyNSAtNiAwIC0zIDIzIC0zOSA1MiAtODAgbDUyIC03NCA3MyAwIDczIDAgMCAtMTg1IDAgLTE4NSAtNzAgMCAtNzAgMCAwIDExNSAwIDExNSAtMTEwIDAgLTExMCAwIDAgLTE5MCAwIC0xOTAgMTgxIDAgMTgxIDAgMTA5IDczIDEwOCA3MiAxIDE4MSAwIDE4MSAtNjkgNDggLTY4IDQ5IDY4IDUwIDY5IDQ5IDAgMjQ5IDAgMjQ4IC0xODIgLTEgLTE4MyAwIC0xMDcgLTcyeiIvPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNjQwIDcwMCBsMCAtNjAwIDExMCAwIDExMCAwIDAgMjA4IDAgMjA4IDM1IDM0IDM1IDM0IDM1IC0zNCAzNSAtMzQgMCAtMjA4IDAgLTIwOCAxMTAgMCAxMTAgMCAwIDIxMiAwIDIxMyAtODcgODcgLTg4IDg4IDg4IDg4IDg3IDg3IDAgMjEzIDAgMjEyIC0xMTAgMCAtMTEwIDAgMCAtMjA4IDAgLTIwOCAtNzAgLTY5IC03MCAtNjkgMCAyNzcgMCAyNzcgLTExMCAwIC0xMTAgMCAwIC02MDB6Ii8+PC9nPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0ZXh0LWNlbnRlciI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMSBjbGFzcz0iY2FyZC10aXRsZSI+PD9waHAgZWNobyBBUFBfVElUTEU7ID8+PC9oMT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGhyIC8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJmbV91c3IiPjw/cGhwIGVjaG8gbG5nKCdVc2VybmFtZScpOyA/PjwvbGFiZWw+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJmb3JtLWNvbnRyb2wiIGlkPSJmbV91c3IiIG5hbWU9ImZtX3VzciIgcmVxdWlyZWQgYXV0b2ZvY3VzPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9ImZtX3B3ZCI+PD9waHAgZWNobyBsbmcoJ1Bhc3N3b3JkJyk7ID8+PC9sYWJlbD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0icGFzc3dvcmQiIGNsYXNzPSJmb3JtLWNvbnRyb2wiIGlkPSJmbV9wd2QiIG5hbWU9ImZtX3B3ZCIgcmVxdWlyZWQ+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZm1fc2hvd19tZXNzYWdlKCk7ID8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJidG4gYnRuLXN1Y2Nlc3MgYnRuLWJsb2NrIG10LTQiIHJvbGU9ImJ1dHRvbiI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gbG5nKCdMb2dpbicpOyA/Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZm9ybT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9vdGVyIHRleHQtY2VudGVyIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbWRhc2g7Jm1kYXNoOyAmY29weTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3RpbnlmaWxlbWFuYWdlci5naXRodWIuaW8vIiB0YXJnZXQ9Il9ibGFuayIgY2xhc3M9InRleHQtbXV0ZWQiIGRhdGEtdmVyc2lvbj0iPD9waHAgZWNobyBWRVJTSU9OOyA/PiI+Q0NQIFByb2dyYW1tZXJzPC9hPiAmbWRhc2g7Jm1kYXNoOw0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvc2VjdGlvbj4NCg0KICAgICAgICA8P3BocA0KICAgICAgICBmbV9zaG93X2Zvb3Rlcl9sb2dpbigpOw0KICAgICAgICBleGl0Ow0KICAgIH0NCn0NCg0KLy8gdXBkYXRlIHJvb3QgcGF0aA0KaWYgKCR1c2VfYXV0aCAmJiBpc3NldCgkX1NFU1NJT05bRk1fU0VTU0lPTl9JRF1bJ2xvZ2dlZCddKSkgew0KICAgICRyb290X3BhdGggPSBpc3NldCgkZGlyZWN0b3JpZXNfdXNlcnNbJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXV0pID8gJGRpcmVjdG9yaWVzX3VzZXJzWyRfU0VTU0lPTltGTV9TRVNTSU9OX0lEXVsnbG9nZ2VkJ11dIDogJHJvb3RfcGF0aDsNCn0NCg0KLy8gY2xlYW4gYW5kIGNoZWNrICRyb290X3BhdGgNCiRyb290X3BhdGggPSBydHJpbSgkcm9vdF9wYXRoLCAnXFwvJyk7DQokcm9vdF9wYXRoID0gc3RyX3JlcGxhY2UoJ1xcJywgJy8nLCAkcm9vdF9wYXRoKTsNCmlmICghQGlzX2Rpcigkcm9vdF9wYXRoKSkgew0KICAgIGVjaG8gIjxoMT4iLmxuZygnUm9vdCBwYXRoJykuIiBcInskcm9vdF9wYXRofVwiICIubG5nKCdub3QgZm91bmQhJykuIiA8L2gxPiI7DQogICAgZXhpdDsNCn0NCg0KZGVmaW5lZCgnRk1fU0hPV19ISURERU4nKSB8fCBkZWZpbmUoJ0ZNX1NIT1dfSElEREVOJywgJHNob3dfaGlkZGVuX2ZpbGVzKTsNCmRlZmluZWQoJ0ZNX1JPT1RfUEFUSCcpIHx8IGRlZmluZSgnRk1fUk9PVF9QQVRIJywgJHJvb3RfcGF0aCk7DQpkZWZpbmVkKCdGTV9MQU5HJykgfHwgZGVmaW5lKCdGTV9MQU5HJywgJGxhbmcpOw0KZGVmaW5lZCgnRk1fRklMRV9FWFRFTlNJT04nKSB8fCBkZWZpbmUoJ0ZNX0ZJTEVfRVhURU5TSU9OJywgJGFsbG93ZWRfZmlsZV9leHRlbnNpb25zKTsNCmRlZmluZWQoJ0ZNX1VQTE9BRF9FWFRFTlNJT04nKSB8fCBkZWZpbmUoJ0ZNX1VQTE9BRF9FWFRFTlNJT04nLCAkYWxsb3dlZF91cGxvYWRfZXh0ZW5zaW9ucyk7DQpkZWZpbmVkKCdGTV9FWENMVURFX0lURU1TJykgfHwgZGVmaW5lKCdGTV9FWENMVURFX0lURU1TJywgKHZlcnNpb25fY29tcGFyZShQSFBfVkVSU0lPTiwgJzcuMC4wJywgJzwnKSA/IHNlcmlhbGl6ZSgkZXhjbHVkZV9pdGVtcykgOiAkZXhjbHVkZV9pdGVtcykpOw0KZGVmaW5lZCgnRk1fRE9DX1ZJRVdFUicpIHx8IGRlZmluZSgnRk1fRE9DX1ZJRVdFUicsICRvbmxpbmVfdmlld2VyKTsNCmRlZmluZSgnRk1fUkVBRE9OTFknLCAkdXNlX2F1dGggJiYgIWVtcHR5KCRyZWFkb25seV91c2VycykgJiYgaXNzZXQoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSkgJiYgaW5fYXJyYXkoJF9TRVNTSU9OW0ZNX1NFU1NJT05fSURdWydsb2dnZWQnXSwgJHJlYWRvbmx5X3VzZXJzKSk7DQpkZWZpbmUoJ0ZNX0lTX1dJTicsIERJUkVDVE9SWV9TRVBBUkFUT1IgPT0gJ1xcJyk7DQoNCi8vIGFsd2F5cyB1c2UgP3A9DQppZiAoIWlzc2V0KCRfR0VUWydwJ10pICYmIGVtcHR5KCRfRklMRVMpKSB7DQogICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9Jyk7DQp9DQoNCi8vIGdldCBwYXRoDQokcCA9IGlzc2V0KCRfR0VUWydwJ10pID8gJF9HRVRbJ3AnXSA6IChpc3NldCgkX1BPU1RbJ3AnXSkgPyAkX1BPU1RbJ3AnXSA6ICcnKTsNCg0KLy8gY2xlYW4gcGF0aA0KJHAgPSBmbV9jbGVhbl9wYXRoKCRwKTsNCg0KLy8gZm9yIGFqYXggcmVxdWVzdCAtIHNhdmUNCiRpbnB1dCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCdwaHA6Ly9pbnB1dCcpOw0KJF9QT1NUID0gKHN0cnBvcygkaW5wdXQsICdhamF4JykgIT0gRkFMU0UgJiYgc3RycG9zKCRpbnB1dCwgJ3NhdmUnKSAhPSBGQUxTRSkgPyBqc29uX2RlY29kZSgkaW5wdXQsIHRydWUpIDogJF9QT1NUOw0KDQovLyBpbnN0ZWFkIGdsb2JhbHMgdmFycw0KZGVmaW5lKCdGTV9QQVRIJywgJHApOw0KZGVmaW5lKCdGTV9VU0VfQVVUSCcsICR1c2VfYXV0aCk7DQpkZWZpbmUoJ0ZNX0VESVRfRklMRScsICRlZGl0X2ZpbGVzKTsNCmRlZmluZWQoJ0ZNX0lDT05WX0lOUFVUX0VOQycpIHx8IGRlZmluZSgnRk1fSUNPTlZfSU5QVVRfRU5DJywgJGljb252X2lucHV0X2VuY29kaW5nKTsNCmRlZmluZWQoJ0ZNX1VTRV9ISUdITElHSFRKUycpIHx8IGRlZmluZSgnRk1fVVNFX0hJR0hMSUdIVEpTJywgJHVzZV9oaWdobGlnaHRqcyk7DQpkZWZpbmVkKCdGTV9ISUdITElHSFRKU19TVFlMRScpIHx8IGRlZmluZSgnRk1fSElHSExJR0hUSlNfU1RZTEUnLCAkaGlnaGxpZ2h0anNfc3R5bGUpOw0KZGVmaW5lZCgnRk1fREFURVRJTUVfRk9STUFUJykgfHwgZGVmaW5lKCdGTV9EQVRFVElNRV9GT1JNQVQnLCAkZGF0ZXRpbWVfZm9ybWF0KTsNCg0KdW5zZXQoJHAsICR1c2VfYXV0aCwgJGljb252X2lucHV0X2VuY29kaW5nLCAkdXNlX2hpZ2hsaWdodGpzLCAkaGlnaGxpZ2h0anNfc3R5bGUpOw0KDQovKioqKioqKioqKioqKioqKioqKioqKioqKioqIEFDVElPTlMgKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KDQovLyBBSkFYIFJlcXVlc3QNCmlmIChpc3NldCgkX1BPU1RbJ2FqYXgnXSkgJiYgIUZNX1JFQURPTkxZKSB7DQoNCiAgICAvLyBzYXZlDQogICAgaWYgKGlzc2V0KCRfUE9TVFsndHlwZSddKSAmJiAkX1BPU1RbJ3R5cGUnXSA9PSAic2F2ZSIpIHsNCiAgICAgICAgLy8gZ2V0IGN1cnJlbnQgcGF0aA0KICAgICAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDsNCiAgICAgICAgaWYgKEZNX1BBVEggIT0gJycpIHsNCiAgICAgICAgICAgICRwYXRoIC49ICcvJyAuIEZNX1BBVEg7DQogICAgICAgIH0NCiAgICAgICAgLy8gY2hlY2sgcGF0aA0KICAgICAgICBpZiAoIWlzX2RpcigkcGF0aCkpIHsNCiAgICAgICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScpOw0KICAgICAgICB9DQogICAgICAgICRmaWxlID0gJF9HRVRbJ2VkaXQnXTsNCiAgICAgICAgJGZpbGUgPSBmbV9jbGVhbl9wYXRoKCRmaWxlKTsNCiAgICAgICAgJGZpbGUgPSBzdHJfcmVwbGFjZSgnLycsICcnLCAkZmlsZSk7DQogICAgICAgIGlmICgkZmlsZSA9PSAnJyB8fCAhaXNfZmlsZSgkcGF0aCAuICcvJyAuICRmaWxlKSkgew0KICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZpbGUgbm90IGZvdW5kJyksICdlcnJvcicpOw0KICAgICAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZShGTV9QQVRIKSk7DQogICAgICAgIH0NCiAgICAgICAgaGVhZGVyKCdYLVhTUy1Qcm90ZWN0aW9uOjAnKTsNCiAgICAgICAgJGZpbGVfcGF0aCA9ICRwYXRoIC4gJy8nIC4gJGZpbGU7DQoNCiAgICAgICAgJHdyaXRlZGF0YSA9ICRfUE9TVFsnY29udGVudCddOw0KICAgICAgICAkZmQgPSBmb3BlbigkZmlsZV9wYXRoLCAidyIpOw0KICAgICAgICAkd3JpdGVfcmVzdWx0cyA9IEBmd3JpdGUoJGZkLCAkd3JpdGVkYXRhKTsNCiAgICAgICAgZmNsb3NlKCRmZCk7DQogICAgICAgIGlmICgkd3JpdGVfcmVzdWx0cyA9PT0gZmFsc2Upew0KICAgICAgICAgICAgaGVhZGVyKCJIVFRQLzEuMSA1MDAgSW50ZXJuYWwgU2VydmVyIEVycm9yIik7DQogICAgICAgICAgICBkaWUoIkNvdWxkIE5vdCBXcml0ZSBGaWxlISAtIENoZWNrIFBlcm1pc3Npb25zIC8gT3duZXJzaGlwIik7DQogICAgICAgIH0NCiAgICAgICAgZGllKHRydWUpOw0KICAgIH0NCg0KICAgIC8vc2VhcmNoIDogZ2V0IGxpc3Qgb2YgZmlsZXMgZnJvbSB0aGUgY3VycmVudCBmb2xkZXINCiAgICBpZihpc3NldCgkX1BPU1RbJ3R5cGUnXSkgJiYgJF9QT1NUWyd0eXBlJ109PSJzZWFyY2giKSB7DQogICAgICAgICRkaXIgPSBGTV9ST09UX1BBVEg7DQogICAgICAgICRyZXNwb25zZSA9IHNjYW4oZm1fY2xlYW5fcGF0aCgkX1BPU1RbJ3BhdGgnXSksICRfUE9TVFsnY29udGVudCddKTsNCiAgICAgICAgZWNobyBqc29uX2VuY29kZSgkcmVzcG9uc2UpOw0KICAgICAgICBleGl0KCk7DQogICAgfQ0KDQogICAgLy8gYmFja3VwIGZpbGVzDQogICAgaWYgKGlzc2V0KCRfUE9TVFsndHlwZSddKSAmJiAkX1BPU1RbJ3R5cGUnXSA9PSAiYmFja3VwIiAmJiAhZW1wdHkoJF9QT1NUWydmaWxlJ10pKSB7DQogICAgICAgICRmaWxlTmFtZSA9ICRfUE9TVFsnZmlsZSddOw0KICAgICAgICAkZnVsbFBhdGggPSBGTV9ST09UX1BBVEggLiAnLyc7DQogICAgICAgIGlmICghZW1wdHkoJF9QT1NUWydwYXRoJ10pKSB7DQogICAgICAgICAgICAkcmVsYXRpdmVEaXJQYXRoID0gZm1fY2xlYW5fcGF0aCgkX1BPU1RbJ3BhdGgnXSk7DQogICAgICAgICAgICAkZnVsbFBhdGggLj0gInskcmVsYXRpdmVEaXJQYXRofS8iOw0KICAgICAgICB9DQogICAgICAgICRkYXRlID0gZGF0ZSgiZE15LUhpcyIpOw0KICAgICAgICAkbmV3RmlsZU5hbWUgPSAieyRmaWxlTmFtZX0teyRkYXRlfS5iYWsiOw0KICAgICAgICAkZnVsbHlRdWFsaWZpZWRGaWxlTmFtZSA9ICRmdWxsUGF0aCAuICRmaWxlTmFtZTsNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgIGlmICghZmlsZV9leGlzdHMoJGZ1bGx5UXVhbGlmaWVkRmlsZU5hbWUpKSB7DQogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEV4Y2VwdGlvbigiRmlsZSB7JGZpbGVOYW1lfSBub3QgZm91bmQiKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmIChjb3B5KCRmdWxseVF1YWxpZmllZEZpbGVOYW1lLCAkZnVsbFBhdGggLiAkbmV3RmlsZU5hbWUpKSB7DQogICAgICAgICAgICAgICAgZWNobyAiQmFja3VwIHskbmV3RmlsZU5hbWV9IGNyZWF0ZWQiOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCJDb3VsZCBub3QgY29weSBmaWxlIHskZmlsZU5hbWV9Iik7DQogICAgICAgICAgICB9DQogICAgICAgIH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgew0KICAgICAgICAgICAgZWNobyAkZS0+Z2V0TWVzc2FnZSgpOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgLy8gU2F2ZSBDb25maWcNCiAgICBpZiAoaXNzZXQoJF9QT1NUWyd0eXBlJ10pICYmICRfUE9TVFsndHlwZSddID09ICJzZXR0aW5ncyIpIHsNCiAgICAgICAgZ2xvYmFsICRjZmcsICRsYW5nLCAkcmVwb3J0X2Vycm9ycywgJHNob3dfaGlkZGVuX2ZpbGVzLCAkbGFuZ19saXN0LCAkaGlkZV9Db2xzLCAkY2FsY19mb2xkZXIsICR0aGVtZTsNCiAgICAgICAgJG5ld0xuZyA9ICRfUE9TVFsnanMtbGFuZ3VhZ2UnXTsNCiAgICAgICAgZm1fZ2V0X3RyYW5zbGF0aW9ucyhbXSk7DQogICAgICAgIGlmICghYXJyYXlfa2V5X2V4aXN0cygkbmV3TG5nLCAkbGFuZ19saXN0KSkgew0KICAgICAgICAgICAgJG5ld0xuZyA9ICdlbic7DQogICAgICAgIH0NCg0KICAgICAgICAkZXJwID0gaXNzZXQoJF9QT1NUWydqcy1lcnJvci1yZXBvcnQnXSkgJiYgJF9QT1NUWydqcy1lcnJvci1yZXBvcnQnXSA9PSAidHJ1ZSIgPyB0cnVlIDogZmFsc2U7DQogICAgICAgICRzaGYgPSBpc3NldCgkX1BPU1RbJ2pzLXNob3ctaGlkZGVuJ10pICYmICRfUE9TVFsnanMtc2hvdy1oaWRkZW4nXSA9PSAidHJ1ZSIgPyB0cnVlIDogZmFsc2U7DQogICAgICAgICRoY28gPSBpc3NldCgkX1BPU1RbJ2pzLWhpZGUtY29scyddKSAmJiAkX1BPU1RbJ2pzLWhpZGUtY29scyddID09ICJ0cnVlIiA/IHRydWUgOiBmYWxzZTsNCiAgICAgICAgJGNhZiA9IGlzc2V0KCRfUE9TVFsnanMtY2FsYy1mb2xkZXInXSkgJiYgJF9QT1NUWydqcy1jYWxjLWZvbGRlciddID09ICJ0cnVlIiA/IHRydWUgOiBmYWxzZTsNCiAgICAgICAgJHRlMyA9ICRfUE9TVFsnanMtdGhlbWUtMyddOw0KDQogICAgICAgIGlmICgkY2ZnLT5kYXRhWydsYW5nJ10gIT0gJG5ld0xuZykgew0KICAgICAgICAgICAgJGNmZy0+ZGF0YVsnbGFuZyddID0gJG5ld0xuZzsNCiAgICAgICAgICAgICRsYW5nID0gJG5ld0xuZzsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoJGNmZy0+ZGF0YVsnZXJyb3JfcmVwb3J0aW5nJ10gIT0gJGVycCkgew0KICAgICAgICAgICAgJGNmZy0+ZGF0YVsnZXJyb3JfcmVwb3J0aW5nJ10gPSAkZXJwOw0KICAgICAgICAgICAgJHJlcG9ydF9lcnJvcnMgPSAkZXJwOw0KICAgICAgICB9DQogICAgICAgIGlmICgkY2ZnLT5kYXRhWydzaG93X2hpZGRlbiddICE9ICRzaGYpIHsNCiAgICAgICAgICAgICRjZmctPmRhdGFbJ3Nob3dfaGlkZGVuJ10gPSAkc2hmOw0KICAgICAgICAgICAgJHNob3dfaGlkZGVuX2ZpbGVzID0gJHNoZjsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoJGNmZy0+ZGF0YVsnc2hvd19oaWRkZW4nXSAhPSAkc2hmKSB7DQogICAgICAgICAgICAkY2ZnLT5kYXRhWydzaG93X2hpZGRlbiddID0gJHNoZjsNCiAgICAgICAgICAgICRzaG93X2hpZGRlbl9maWxlcyA9ICRzaGY7DQogICAgICAgIH0NCiAgICAgICAgaWYgKCRjZmctPmRhdGFbJ2hpZGVfQ29scyddICE9ICRoY28pIHsNCiAgICAgICAgICAgICRjZmctPmRhdGFbJ2hpZGVfQ29scyddID0gJGhjbzsNCiAgICAgICAgICAgICRoaWRlX0NvbHMgPSAkaGNvOw0KICAgICAgICB9DQogICAgICAgIGlmICgkY2ZnLT5kYXRhWydjYWxjX2ZvbGRlciddICE9ICRjYWYpIHsNCiAgICAgICAgICAgICRjZmctPmRhdGFbJ2NhbGNfZm9sZGVyJ10gPSAkY2FmOw0KICAgICAgICAgICAgJGNhbGNfZm9sZGVyID0gJGNhZjsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoJGNmZy0+ZGF0YVsndGhlbWUnXSAhPSAkdGUzKSB7DQogICAgICAgICAgICAkY2ZnLT5kYXRhWyd0aGVtZSddID0gJHRlMzsNCiAgICAgICAgICAgICR0aGVtZSA9ICR0ZTM7DQogICAgICAgIH0NCiAgICAgICAgJGNmZy0+c2F2ZSgpOw0KICAgICAgICBlY2hvIHRydWU7DQogICAgfQ0KDQogICAgLy8gbmV3IHBhc3N3b3JkIGhhc2gNCiAgICBpZiAoaXNzZXQoJF9QT1NUWyd0eXBlJ10pICYmICRfUE9TVFsndHlwZSddID09ICJwd2RoYXNoIikgew0KICAgICAgICAkcmVzID0gaXNzZXQoJF9QT1NUWydpbnB1dFBhc3N3b3JkMiddKSAmJiAhZW1wdHkoJF9QT1NUWydpbnB1dFBhc3N3b3JkMiddKSA/IHBhc3N3b3JkX2hhc2goJF9QT1NUWydpbnB1dFBhc3N3b3JkMiddLCBQQVNTV09SRF9ERUZBVUxUKSA6ICcnOw0KICAgICAgICBlY2hvICRyZXM7DQogICAgfQ0KDQogICAgLy91cGxvYWQgdXNpbmcgdXJsDQogICAgaWYoaXNzZXQoJF9QT1NUWyd0eXBlJ10pICYmICRfUE9TVFsndHlwZSddID09ICJ1cGxvYWQiICYmICFlbXB0eSgkX1JFUVVFU1RbInVwbG9hZHVybCJdKSkgew0KICAgICAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDsNCiAgICAgICAgaWYgKEZNX1BBVEggIT0gJycpIHsNCiAgICAgICAgICAgICRwYXRoIC49ICcvJyAuIEZNX1BBVEg7DQogICAgICAgIH0NCg0KICAgICAgICAgZnVuY3Rpb24gZXZlbnRfY2FsbGJhY2sgKCRtZXNzYWdlKSB7DQogICAgICAgICAgICBnbG9iYWwgJGNhbGxiYWNrOw0KICAgICAgICAgICAgZWNobyBqc29uX2VuY29kZSgkbWVzc2FnZSk7DQogICAgICAgIH0NCg0KICAgICAgICBmdW5jdGlvbiBnZXRfZmlsZV9wYXRoICgpIHsNCiAgICAgICAgICAgIGdsb2JhbCAkcGF0aCwgJGZpbGVpbmZvLCAkdGVtcF9maWxlOw0KICAgICAgICAgICAgcmV0dXJuICRwYXRoLiIvIi5iYXNlbmFtZSgkZmlsZWluZm8tPm5hbWUpOw0KICAgICAgICB9DQoNCiAgICAgICAgJHVybCA9ICFlbXB0eSgkX1JFUVVFU1RbInVwbG9hZHVybCJdKSAmJiBwcmVnX21hdGNoKCJ8Xmh0dHAocyk/Oi8vLiskfCIsIHN0cmlwc2xhc2hlcygkX1JFUVVFU1RbInVwbG9hZHVybCJdKSkgPyBzdHJpcHNsYXNoZXMoJF9SRVFVRVNUWyJ1cGxvYWR1cmwiXSkgOiBudWxsOw0KDQogICAgICAgIC8vcHJldmVudCAxMjcuKiBkb21haW4gYW5kIGtub3duIHBvcnRzDQogICAgICAgICRkb21haW4gPSBwYXJzZV91cmwoJHVybCwgUEhQX1VSTF9IT1NUKTsNCiAgICAgICAgJHBvcnQgPSBwYXJzZV91cmwoJHVybCwgUEhQX1VSTF9QT1JUKTsNCiAgICAgICAgJGtub3duUG9ydHMgPSBbMjIsIDIzLCAyNSwgMzMwNl07DQoNCiAgICAgICAgaWYgKHByZWdfbWF0Y2goIi9ebG9jYWxob3N0JHxeMTI3KD86XC5bMC05XSspezAsMn1cLlswLTldKyR8Xig/OjAqXDopKj86PzAqMSQvaSIsICRkb21haW4pIHx8IGluX2FycmF5KCRwb3J0LCAka25vd25Qb3J0cykpIHsNCiAgICAgICAgICAgICRlcnIgPSBhcnJheSgibWVzc2FnZSIgPT4gIlVSTCBpcyBub3QgYWxsb3dlZCIpOw0KICAgICAgICAgICAgZXZlbnRfY2FsbGJhY2soYXJyYXkoImZhaWwiID0+ICRlcnIpKTsNCiAgICAgICAgICAgIGV4aXQoKTsNCiAgICAgICAgfQ0KDQogICAgICAgICR1c2VfY3VybCA9IGZhbHNlOw0KICAgICAgICAkdGVtcF9maWxlID0gdGVtcG5hbShzeXNfZ2V0X3RlbXBfZGlyKCksICJ1cGxvYWQtIik7DQogICAgICAgICRmaWxlaW5mbyA9IG5ldyBzdGRDbGFzcygpOw0KICAgICAgICAkZmlsZWluZm8tPm5hbWUgPSB0cmltKGJhc2VuYW1lKCR1cmwpLCAiLlx4MDAuLlx4MjAiKTsNCg0KICAgICAgICAkYWxsb3dlZCA9IChGTV9VUExPQURfRVhURU5TSU9OKSA/IGV4cGxvZGUoJywnLCBGTV9VUExPQURfRVhURU5TSU9OKSA6IGZhbHNlOw0KICAgICAgICAkZXh0ID0gc3RydG9sb3dlcihwYXRoaW5mbygkZmlsZWluZm8tPm5hbWUsIFBBVEhJTkZPX0VYVEVOU0lPTikpOw0KICAgICAgICAkaXNGaWxlQWxsb3dlZCA9ICgkYWxsb3dlZCkgPyBpbl9hcnJheSgkZXh0LCAkYWxsb3dlZCkgOiB0cnVlOw0KDQogICAgICAgICRlcnIgPSBmYWxzZTsNCg0KICAgICAgICBpZighJGlzRmlsZUFsbG93ZWQpIHsNCiAgICAgICAgICAgICRlcnIgPSBhcnJheSgibWVzc2FnZSIgPT4gIkZpbGUgZXh0ZW5zaW9uIGlzIG5vdCBhbGxvd2VkIik7DQogICAgICAgICAgICBldmVudF9jYWxsYmFjayhhcnJheSgiZmFpbCIgPT4gJGVycikpOw0KICAgICAgICAgICAgZXhpdCgpOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKCEkdXJsKSB7DQogICAgICAgICAgICAkc3VjY2VzcyA9IGZhbHNlOw0KICAgICAgICB9IGVsc2UgaWYgKCR1c2VfY3VybCkgew0KICAgICAgICAgICAgQCRmcCA9IGZvcGVuKCR0ZW1wX2ZpbGUsICJ3Iik7DQogICAgICAgICAgICBAJGNoID0gY3VybF9pbml0KCR1cmwpOw0KICAgICAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX05PUFJPR1JFU1MsIGZhbHNlICk7DQogICAgICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfRk9MTE9XTE9DQVRJT04sIHRydWUpOw0KICAgICAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0ZJTEUsICRmcCk7DQogICAgICAgICAgICBAJHN1Y2Nlc3MgPSBjdXJsX2V4ZWMoJGNoKTsNCiAgICAgICAgICAgICRjdXJsX2luZm8gPSBjdXJsX2dldGluZm8oJGNoKTsNCiAgICAgICAgICAgIGlmICghJHN1Y2Nlc3MpIHsNCiAgICAgICAgICAgICAgICAkZXJyID0gYXJyYXkoIm1lc3NhZ2UiID0+IGN1cmxfZXJyb3IoJGNoKSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBAY3VybF9jbG9zZSgkY2gpOw0KICAgICAgICAgICAgZmNsb3NlKCRmcCk7DQogICAgICAgICAgICAkZmlsZWluZm8tPnNpemUgPSAkY3VybF9pbmZvWyJzaXplX2Rvd25sb2FkIl07DQogICAgICAgICAgICAkZmlsZWluZm8tPnR5cGUgPSAkY3VybF9pbmZvWyJjb250ZW50X3R5cGUiXTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICRjdHggPSBzdHJlYW1fY29udGV4dF9jcmVhdGUoKTsNCiAgICAgICAgICAgIEAkc3VjY2VzcyA9IGNvcHkoJHVybCwgJHRlbXBfZmlsZSwgJGN0eCk7DQogICAgICAgICAgICBpZiAoISRzdWNjZXNzKSB7DQogICAgICAgICAgICAgICAgJGVyciA9IGVycm9yX2dldF9sYXN0KCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICBpZiAoJHN1Y2Nlc3MpIHsNCiAgICAgICAgICAgICRzdWNjZXNzID0gcmVuYW1lKCR0ZW1wX2ZpbGUsIGdldF9maWxlX3BhdGgoKSk7DQogICAgICAgIH0NCg0KICAgICAgICBpZiAoJHN1Y2Nlc3MpIHsNCiAgICAgICAgICAgIGV2ZW50X2NhbGxiYWNrKGFycmF5KCJkb25lIiA9PiAkZmlsZWluZm8pKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHVubGluaygkdGVtcF9maWxlKTsNCiAgICAgICAgICAgIGlmICghJGVycikgew0KICAgICAgICAgICAgICAgICRlcnIgPSBhcnJheSgibWVzc2FnZSIgPT4gIkludmFsaWQgdXJsIHBhcmFtZXRlciIpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZXZlbnRfY2FsbGJhY2soYXJyYXkoImZhaWwiID0+ICRlcnIpKTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIGV4aXQoKTsNCn0NCg0KLy8gRGVsZXRlIGZpbGUgLyBmb2xkZXINCmlmIChpc3NldCgkX0dFVFsnZGVsJ10pICYmICFGTV9SRUFET05MWSkgew0KICAgICRkZWwgPSBzdHJfcmVwbGFjZSggJy8nLCAnJywgZm1fY2xlYW5fcGF0aCggJF9HRVRbJ2RlbCddICkgKTsNCiAgICBpZiAoJGRlbCAhPSAnJyAmJiAkZGVsICE9ICcuLicgJiYgJGRlbCAhPSAnLicpIHsNCiAgICAgICAgJHBhdGggPSBGTV9ST09UX1BBVEg7DQogICAgICAgIGlmIChGTV9QQVRIICE9ICcnKSB7DQogICAgICAgICAgICAkcGF0aCAuPSAnLycgLiBGTV9QQVRIOw0KICAgICAgICB9DQogICAgICAgICRpc19kaXIgPSBpc19kaXIoJHBhdGggLiAnLycgLiAkZGVsKTsNCiAgICAgICAgaWYgKGZtX3JkZWxldGUoJHBhdGggLiAnLycgLiAkZGVsKSkgew0KICAgICAgICAgICAgJG1zZyA9ICRpc19kaXIgPyBsbmcoJ0ZvbGRlcicpLicgPGI+JXM8L2I+ICcubG5nKCdEZWxldGVkJykgOiBsbmcoJ0ZpbGUnKS4nIDxiPiVzPC9iPiAnLmxuZygnRGVsZXRlZCcpOw0KICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKCRtc2csIGZtX2VuYygkZGVsKSkpOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgJG1zZyA9ICRpc19kaXIgPyBsbmcoJ0ZvbGRlcicpLicgPGI+JXM8L2I+ICcubG5nKCdub3QgZGVsZXRlZCcpIDogbG5nKCdGaWxlJykuJyA8Yj4lczwvYj4gJy5sbmcoJ25vdCBkZWxldGVkJyk7DQogICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYoJG1zZywgZm1fZW5jKCRkZWwpKSwgJ2Vycm9yJyk7DQogICAgICAgIH0NCiAgICB9IGVsc2Ugew0KICAgICAgICBmbV9zZXRfbXNnKGxuZygnSW52YWxpZCBmaWxlIG9yIGZvbGRlciBuYW1lJyksICdlcnJvcicpOw0KICAgIH0NCiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKEZNX1BBVEgpKTsNCn0NCg0KLy8gQ3JlYXRlIGZvbGRlcg0KaWYgKGlzc2V0KCRfR0VUWyduZXcnXSkgJiYgaXNzZXQoJF9HRVRbJ3R5cGUnXSkgJiYgIUZNX1JFQURPTkxZKSB7DQogICAgJHR5cGUgPSAkX0dFVFsndHlwZSddOw0KICAgICRuZXcgPSBzdHJfcmVwbGFjZSggJy8nLCAnJywgZm1fY2xlYW5fcGF0aCggc3RyaXBfdGFncyggJF9HRVRbJ25ldyddICkgKSApOw0KICAgIGlmIChmbV9pc3ZhbGlkX2ZpbGVuYW1lKCRuZXcpICYmICRuZXcgIT0gJycgJiYgJG5ldyAhPSAnLi4nICYmICRuZXcgIT0gJy4nKSB7DQogICAgICAgICRwYXRoID0gRk1fUk9PVF9QQVRIOw0KICAgICAgICBpZiAoRk1fUEFUSCAhPSAnJykgew0KICAgICAgICAgICAgJHBhdGggLj0gJy8nIC4gRk1fUEFUSDsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoJF9HRVRbJ3R5cGUnXSA9PSAiZmlsZSIpIHsNCiAgICAgICAgICAgIGlmICghZmlsZV9leGlzdHMoJHBhdGggLiAnLycgLiAkbmV3KSkgew0KICAgICAgICAgICAgICAgIGlmKGZtX2lzX3ZhbGlkX2V4dCgkbmV3KSkgew0KICAgICAgICAgICAgICAgICAgICBAZm9wZW4oJHBhdGggLiAnLycgLiAkbmV3LCAndycpIG9yIGRpZSgnQ2Fubm90IG9wZW4gZmlsZTogICcgLiAkbmV3KTsNCiAgICAgICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnRmlsZScpLicgPGI+JXM8L2I+ICcubG5nKCdDcmVhdGVkJyksIGZtX2VuYygkbmV3KSkpOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIGV4dGVuc2lvbiBpcyBub3QgYWxsb3dlZCcpLCAnZXJyb3InKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZihsbmcoJ0ZpbGUnKS4nIDxiPiVzPC9iPiAnLmxuZygnYWxyZWFkeSBleGlzdHMnKSwgZm1fZW5jKCRuZXcpKSwgJ2FsZXJ0Jyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBpZiAoZm1fbWtkaXIoJHBhdGggLiAnLycgLiAkbmV3LCBmYWxzZSkgPT09IHRydWUpIHsNCiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdGb2xkZXInKS4nIDxiPiVzPC9iPiAnLmxuZygnQ3JlYXRlZCcpLCAkbmV3KSk7DQogICAgICAgICAgICB9IGVsc2VpZiAoZm1fbWtkaXIoJHBhdGggLiAnLycgLiAkbmV3LCBmYWxzZSkgPT09ICRwYXRoIC4gJy8nIC4gJG5ldykgew0KICAgICAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZihsbmcoJ0ZvbGRlcicpLicgPGI+JXM8L2I+ICcubG5nKCdhbHJlYWR5IGV4aXN0cycpLCBmbV9lbmMoJG5ldykpLCAnYWxlcnQnKTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnRm9sZGVyJykuJyA8Yj4lczwvYj4gJy5sbmcoJ25vdCBjcmVhdGVkJyksIGZtX2VuYygkbmV3KSksICdlcnJvcicpOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfSBlbHNlIHsNCiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ludmFsaWQgY2hhcmFjdGVycyBpbiBmaWxlIG9yIGZvbGRlciBuYW1lJyksICdlcnJvcicpOw0KICAgIH0NCiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKEZNX1BBVEgpKTsNCn0NCg0KLy8gQ29weSBmb2xkZXIgLyBmaWxlDQppZiAoaXNzZXQoJF9HRVRbJ2NvcHknXSwgJF9HRVRbJ2ZpbmlzaCddKSAmJiAhRk1fUkVBRE9OTFkpIHsNCiAgICAvLyBmcm9tDQogICAgJGNvcHkgPSAkX0dFVFsnY29weSddOw0KICAgICRjb3B5ID0gZm1fY2xlYW5fcGF0aCgkY29weSk7DQogICAgLy8gZW1wdHkgcGF0aA0KICAgIGlmICgkY29weSA9PSAnJykgew0KICAgICAgICBmbV9zZXRfbXNnKGxuZygnU291cmNlIHBhdGggbm90IGRlZmluZWQnKSwgJ2Vycm9yJyk7DQogICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoRk1fUEFUSCkpOw0KICAgIH0NCiAgICAvLyBhYnMgcGF0aCBmcm9tDQogICAgJGZyb20gPSBGTV9ST09UX1BBVEggLiAnLycgLiAkY29weTsNCiAgICAvLyBhYnMgcGF0aCB0bw0KICAgICRkZXN0ID0gRk1fUk9PVF9QQVRIOw0KICAgIGlmIChGTV9QQVRIICE9ICcnKSB7DQogICAgICAgICRkZXN0IC49ICcvJyAuIEZNX1BBVEg7DQogICAgfQ0KICAgICRkZXN0IC49ICcvJyAuIGJhc2VuYW1lKCRmcm9tKTsNCiAgICAvLyBtb3ZlPw0KICAgICRtb3ZlID0gaXNzZXQoJF9HRVRbJ21vdmUnXSk7DQogICAgLy8gY29weS9tb3ZlL2R1cGxpY2F0ZQ0KICAgIGlmICgkZnJvbSAhPSAkZGVzdCkgew0KICAgICAgICAkbXNnX2Zyb20gPSB0cmltKEZNX1BBVEggLiAnLycgLiBiYXNlbmFtZSgkZnJvbSksICcvJyk7DQogICAgICAgIGlmICgkbW92ZSkgeyAvLyBNb3ZlIGFuZCB0byAhPSBmcm9tIHNvIGp1c3QgcGVyZm9ybSBtb3ZlDQogICAgICAgICAgICAkcmVuYW1lID0gZm1fcmVuYW1lKCRmcm9tLCAkZGVzdCk7DQogICAgICAgICAgICBpZiAoJHJlbmFtZSkgew0KICAgICAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZihsbmcoJ01vdmVkIGZyb20nKS4nIDxiPiVzPC9iPiAnLmxuZygndG8nKS4nIDxiPiVzPC9iPicsIGZtX2VuYygkY29weSksIGZtX2VuYygkbXNnX2Zyb20pKSk7DQogICAgICAgICAgICB9IGVsc2VpZiAoJHJlbmFtZSA9PT0gbnVsbCkgew0KICAgICAgICAgICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG9yIGZvbGRlciB3aXRoIHRoaXMgcGF0aCBhbHJlYWR5IGV4aXN0cycpLCAnYWxlcnQnKTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnRXJyb3Igd2hpbGUgbW92aW5nIGZyb20nKS4nIDxiPiVzPC9iPiAnLmxuZygndG8nKS4nIDxiPiVzPC9iPicsIGZtX2VuYygkY29weSksIGZtX2VuYygkbXNnX2Zyb20pKSwgJ2Vycm9yJyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0gZWxzZSB7IC8vIE5vdCBtb3ZlIGFuZCB0byAhPSBmcm9tIHNvIGNvcHkgd2l0aCBvcmlnaW5hbCBuYW1lDQogICAgICAgICAgICBpZiAoZm1fcmNvcHkoJGZyb20sICRkZXN0KSkgew0KICAgICAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZihsbmcoJ0NvcGllZCBmcm9tJykuJyA8Yj4lczwvYj4gJy5sbmcoJ3RvJykuJyA8Yj4lczwvYj4nLCBmbV9lbmMoJGNvcHkpLCBmbV9lbmMoJG1zZ19mcm9tKSkpOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdFcnJvciB3aGlsZSBjb3B5aW5nIGZyb20nKS4nIDxiPiVzPC9iPiAnLmxuZygndG8nKS4nIDxiPiVzPC9iPicsIGZtX2VuYygkY29weSksIGZtX2VuYygkbXNnX2Zyb20pKSwgJ2Vycm9yJyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9IGVsc2Ugew0KICAgICAgIGlmICghJG1vdmUpeyAvL05vdCBtb3ZlIGFuZCB0byA9IGZyb20gc28gZHVwbGljYXRlDQogICAgICAgICAgICAkbXNnX2Zyb20gPSB0cmltKEZNX1BBVEggLiAnLycgLiBiYXNlbmFtZSgkZnJvbSksICcvJyk7DQogICAgICAgICAgICAkZm5fcGFydHMgPSBwYXRoaW5mbygkZnJvbSk7DQogICAgICAgICAgICAkZXh0ZW5zaW9uX3N1ZmZpeCA9ICcnOw0KICAgICAgICAgICAgaWYoIWlzX2RpcigkZnJvbSkpew0KICAgICAgICAgICAgICAgJGV4dGVuc2lvbl9zdWZmaXggPSAnLicuJGZuX3BhcnRzWydleHRlbnNpb24nXTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIC8vQ3JlYXRlIG5ldyBuYW1lIGZvciBkdXBsaWNhdGUNCiAgICAgICAgICAgICRmbl9kdXBsaWNhdGUgPSAkZm5fcGFydHNbJ2Rpcm5hbWUnXS4nLycuJGZuX3BhcnRzWydmaWxlbmFtZSddLictJy5kYXRlKCdZbWRIaXMnKS4kZXh0ZW5zaW9uX3N1ZmZpeDsNCiAgICAgICAgICAgICRsb29wX2NvdW50ID0gMDsNCiAgICAgICAgICAgICRtYXhfbG9vcCA9IDEwMDA7DQogICAgICAgICAgICAvLyBDaGVjayBpZiBhIGZpbGUgd2l0aCB0aGUgZHVwbGljYXRlIG5hbWUgYWxyZWFkeSBleGlzdHMsIGlmIHNvLCBtYWtlIG5ldyBuYW1lIChlZGdlIGNhc2UuLi4pDQogICAgICAgICAgICB3aGlsZShmaWxlX2V4aXN0cygkZm5fZHVwbGljYXRlKSAmICRsb29wX2NvdW50IDwgJG1heF9sb29wKXsNCiAgICAgICAgICAgICAgICRmbl9wYXJ0cyA9IHBhdGhpbmZvKCRmbl9kdXBsaWNhdGUpOw0KICAgICAgICAgICAgICAgJGZuX2R1cGxpY2F0ZSA9ICRmbl9wYXJ0c1snZGlybmFtZSddLicvJy4kZm5fcGFydHNbJ2ZpbGVuYW1lJ10uJy1jb3B5Jy4kZXh0ZW5zaW9uX3N1ZmZpeDsNCiAgICAgICAgICAgICAgICRsb29wX2NvdW50Kys7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoZm1fcmNvcHkoJGZyb20sICRmbl9kdXBsaWNhdGUsIEZhbHNlKSkgew0KICAgICAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZignQ29weWllZCBmcm9tIDxiPiVzPC9iPiB0byA8Yj4lczwvYj4nLCBmbV9lbmMoJGNvcHkpLCBmbV9lbmMoJGZuX2R1cGxpY2F0ZSkpKTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKCdFcnJvciB3aGlsZSBjb3B5aW5nIGZyb20gPGI+JXM8L2I+IHRvIDxiPiVzPC9iPicsIGZtX2VuYygkY29weSksIGZtX2VuYygkZm5fZHVwbGljYXRlKSksICdlcnJvcicpOw0KICAgICAgICAgICAgfQ0KICAgICAgIH0NCiAgICAgICBlbHNlew0KICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnUGF0aHMgbXVzdCBiZSBub3QgZXF1YWwnKSwgJ2FsZXJ0Jyk7DQogICAgICAgfQ0KICAgIH0NCiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKEZNX1BBVEgpKTsNCn0NCg0KLy8gTWFzcyBjb3B5IGZpbGVzLyBmb2xkZXJzDQppZiAoaXNzZXQoJF9QT1NUWydmaWxlJ10sICRfUE9TVFsnY29weV90byddLCAkX1BPU1RbJ2ZpbmlzaCddKSAmJiAhRk1fUkVBRE9OTFkpIHsNCiAgICAvLyBmcm9tDQogICAgJHBhdGggPSBGTV9ST09UX1BBVEg7DQogICAgaWYgKEZNX1BBVEggIT0gJycpIHsNCiAgICAgICAgJHBhdGggLj0gJy8nIC4gRk1fUEFUSDsNCiAgICB9DQogICAgLy8gdG8NCiAgICAkY29weV90b19wYXRoID0gRk1fUk9PVF9QQVRIOw0KICAgICRjb3B5X3RvID0gZm1fY2xlYW5fcGF0aCgkX1BPU1RbJ2NvcHlfdG8nXSk7DQogICAgaWYgKCRjb3B5X3RvICE9ICcnKSB7DQogICAgICAgICRjb3B5X3RvX3BhdGggLj0gJy8nIC4gJGNvcHlfdG87DQogICAgfQ0KICAgIGlmICgkcGF0aCA9PSAkY29weV90b19wYXRoKSB7DQogICAgICAgIGZtX3NldF9tc2cobG5nKCdQYXRocyBtdXN0IGJlIG5vdCBlcXVhbCcpLCAnYWxlcnQnKTsNCiAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZShGTV9QQVRIKSk7DQogICAgfQ0KICAgIGlmICghaXNfZGlyKCRjb3B5X3RvX3BhdGgpKSB7DQogICAgICAgIGlmICghZm1fbWtkaXIoJGNvcHlfdG9fcGF0aCwgdHJ1ZSkpIHsNCiAgICAgICAgICAgIGZtX3NldF9tc2coJ1VuYWJsZSB0byBjcmVhdGUgZGVzdGluYXRpb24gZm9sZGVyJywgJ2Vycm9yJyk7DQogICAgICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKEZNX1BBVEgpKTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICAvLyBtb3ZlPw0KICAgICRtb3ZlID0gaXNzZXQoJF9QT1NUWydtb3ZlJ10pOw0KICAgIC8vIGNvcHkvbW92ZQ0KICAgICRlcnJvcnMgPSAwOw0KICAgICRmaWxlcyA9ICRfUE9TVFsnZmlsZSddOw0KICAgIGlmIChpc19hcnJheSgkZmlsZXMpICYmIGNvdW50KCRmaWxlcykpIHsNCiAgICAgICAgZm9yZWFjaCAoJGZpbGVzIGFzICRmKSB7DQogICAgICAgICAgICBpZiAoJGYgIT0gJycpIHsNCiAgICAgICAgICAgICAgICAvLyBhYnMgcGF0aCBmcm9tDQogICAgICAgICAgICAgICAgJGZyb20gPSAkcGF0aCAuICcvJyAuICRmOw0KICAgICAgICAgICAgICAgIC8vIGFicyBwYXRoIHRvDQogICAgICAgICAgICAgICAgJGRlc3QgPSAkY29weV90b19wYXRoIC4gJy8nIC4gJGY7DQogICAgICAgICAgICAgICAgLy8gZG8NCiAgICAgICAgICAgICAgICBpZiAoJG1vdmUpIHsNCiAgICAgICAgICAgICAgICAgICAgJHJlbmFtZSA9IGZtX3JlbmFtZSgkZnJvbSwgJGRlc3QpOw0KICAgICAgICAgICAgICAgICAgICBpZiAoJHJlbmFtZSA9PT0gZmFsc2UpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRlcnJvcnMrKzsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIGlmICghZm1fcmNvcHkoJGZyb20sICRkZXN0KSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGVycm9ycysrOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGlmICgkZXJyb3JzID09IDApIHsNCiAgICAgICAgICAgICRtc2cgPSAkbW92ZSA/ICdTZWxlY3RlZCBmaWxlcyBhbmQgZm9sZGVycyBtb3ZlZCcgOiAnU2VsZWN0ZWQgZmlsZXMgYW5kIGZvbGRlcnMgY29waWVkJzsNCiAgICAgICAgICAgIGZtX3NldF9tc2coJG1zZyk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAkbXNnID0gJG1vdmUgPyAnRXJyb3Igd2hpbGUgbW92aW5nIGl0ZW1zJyA6ICdFcnJvciB3aGlsZSBjb3B5aW5nIGl0ZW1zJzsNCiAgICAgICAgICAgIGZtX3NldF9tc2coJG1zZywgJ2Vycm9yJyk7DQogICAgICAgIH0NCiAgICB9IGVsc2Ugew0KICAgICAgICBmbV9zZXRfbXNnKGxuZygnTm90aGluZyBzZWxlY3RlZCcpLCAnYWxlcnQnKTsNCiAgICB9DQogICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZShGTV9QQVRIKSk7DQp9DQoNCi8vIFJlbmFtZQ0KaWYgKGlzc2V0KCRfR0VUWydyZW4nXSwgJF9HRVRbJ3RvJ10pICYmICFGTV9SRUFET05MWSkgew0KICAgIC8vIG9sZCBuYW1lDQogICAgJG9sZCA9ICRfR0VUWydyZW4nXTsNCiAgICAkb2xkID0gZm1fY2xlYW5fcGF0aCgkb2xkKTsNCiAgICAkb2xkID0gc3RyX3JlcGxhY2UoJy8nLCAnJywgJG9sZCk7DQogICAgLy8gbmV3IG5hbWUNCiAgICAkbmV3ID0gJF9HRVRbJ3RvJ107DQogICAgJG5ldyA9IGZtX2NsZWFuX3BhdGgoc3RyaXBfdGFncygkbmV3KSk7DQogICAgJG5ldyA9IHN0cl9yZXBsYWNlKCcvJywgJycsICRuZXcpOw0KICAgIC8vIHBhdGgNCiAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDsNCiAgICBpZiAoRk1fUEFUSCAhPSAnJykgew0KICAgICAgICAkcGF0aCAuPSAnLycgLiBGTV9QQVRIOw0KICAgIH0NCiAgICAvLyByZW5hbWUNCiAgICBpZiAoZm1faXN2YWxpZF9maWxlbmFtZSgkbmV3KSAmJiAkb2xkICE9ICcnICYmICRuZXcgIT0gJycpIHsNCiAgICAgICAgaWYgKGZtX3JlbmFtZSgkcGF0aCAuICcvJyAuICRvbGQsICRwYXRoIC4gJy8nIC4gJG5ldykpIHsNCiAgICAgICAgICAgIGZtX3NldF9tc2coc3ByaW50ZihsbmcoJ1JlbmFtZWQgZnJvbScpLicgPGI+JXM8L2I+ICcuIGxuZygndG8nKS4nIDxiPiVzPC9iPicsIGZtX2VuYygkb2xkKSwgZm1fZW5jKCRuZXcpKSk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBmbV9zZXRfbXNnKHNwcmludGYobG5nKCdFcnJvciB3aGlsZSByZW5hbWluZyBmcm9tJykuJyA8Yj4lczwvYj4gJy4gbG5nKCd0bycpLicgPGI+JXM8L2I+JywgZm1fZW5jKCRvbGQpLCBmbV9lbmMoJG5ldykpLCAnZXJyb3InKTsNCiAgICAgICAgfQ0KICAgIH0gZWxzZSB7DQogICAgICAgIGZtX3NldF9tc2cobG5nKCdJbnZhbGlkIGNoYXJhY3RlcnMgaW4gZmlsZSBuYW1lJyksICdlcnJvcicpOw0KICAgIH0NCiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKEZNX1BBVEgpKTsNCn0NCg0KLy8gRG93bmxvYWQNCmlmIChpc3NldCgkX0dFVFsnZGwnXSkpIHsNCiAgICAkZGwgPSAkX0dFVFsnZGwnXTsNCiAgICAkZGwgPSBmbV9jbGVhbl9wYXRoKCRkbCk7DQogICAgJGRsID0gc3RyX3JlcGxhY2UoJy8nLCAnJywgJGRsKTsNCiAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDsNCiAgICBpZiAoRk1fUEFUSCAhPSAnJykgew0KICAgICAgICAkcGF0aCAuPSAnLycgLiBGTV9QQVRIOw0KICAgIH0NCiAgICBpZiAoJGRsICE9ICcnICYmIGlzX2ZpbGUoJHBhdGggLiAnLycgLiAkZGwpKSB7DQogICAgICAgIGZtX2Rvd25sb2FkX2ZpbGUoJHBhdGggLiAnLycgLiAkZGwsICRkbCwgMTAyNCk7DQogICAgICAgIGV4aXQ7DQogICAgfSBlbHNlIHsNCiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZpbGUgbm90IGZvdW5kJyksICdlcnJvcicpOw0KICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKEZNX1BBVEgpKTsNCiAgICB9DQp9DQoNCi8vIFVwbG9hZA0KaWYgKCFlbXB0eSgkX0ZJTEVTKSAmJiAhRk1fUkVBRE9OTFkpIHsNCiAgICAkb3ZlcnJpZGVfZmlsZV9uYW1lID0gZmFsc2U7DQogICAgJGYgPSAkX0ZJTEVTOw0KICAgICRwYXRoID0gRk1fUk9PVF9QQVRIOw0KICAgICRkcyA9IERJUkVDVE9SWV9TRVBBUkFUT1I7DQogICAgaWYgKEZNX1BBVEggIT0gJycpIHsNCiAgICAgICAgJHBhdGggLj0gJy8nIC4gRk1fUEFUSDsNCiAgICB9DQoNCiAgICAkZXJyb3JzID0gMDsNCiAgICAkdXBsb2FkcyA9IDA7DQogICAgJGFsbG93ZWQgPSAoRk1fVVBMT0FEX0VYVEVOU0lPTikgPyBleHBsb2RlKCcsJywgRk1fVVBMT0FEX0VYVEVOU0lPTikgOiBmYWxzZTsNCiAgICAkcmVzcG9uc2UgPSBhcnJheSAoDQogICAgICAgICdzdGF0dXMnID0+ICdlcnJvcicsDQogICAgICAgICdpbmZvJyAgID0+ICdPb3BzISBUcnkgYWdhaW4nDQogICAgKTsNCg0KICAgICRmaWxlbmFtZSA9ICRmWydmaWxlJ11bJ25hbWUnXTsNCiAgICAkdG1wX25hbWUgPSAkZlsnZmlsZSddWyd0bXBfbmFtZSddOw0KICAgICRleHQgPSBzdHJ0b2xvd2VyKHBhdGhpbmZvKCRmaWxlbmFtZSwgUEFUSElORk9fRVhURU5TSU9OKSk7DQogICAgJGlzRmlsZUFsbG93ZWQgPSAoJGFsbG93ZWQpID8gaW5fYXJyYXkoJGV4dCwgJGFsbG93ZWQpIDogdHJ1ZTsNCg0KICAgIGlmKCFmbV9pc3ZhbGlkX2ZpbGVuYW1lKCRmaWxlbmFtZSkgJiYgIWZtX2lzdmFsaWRfZmlsZW5hbWUoJF9SRVFVRVNUWydmdWxscGF0aCddKSkgew0KICAgICAgICAkcmVzcG9uc2UgPSBhcnJheSAoDQogICAgICAgICAgICAnc3RhdHVzJyAgICA9PiAnZXJyb3InLA0KICAgICAgICAgICAgJ2luZm8nICAgICAgPT4gIkludmFsaWQgRmlsZSBuYW1lISIsDQogICAgICAgICk7DQogICAgICAgIGVjaG8ganNvbl9lbmNvZGUoJHJlc3BvbnNlKTsgZXhpdCgpOw0KICAgIH0NCg0KICAgICR0YXJnZXRQYXRoID0gJHBhdGggLiAkZHM7DQogICAgaWYgKCBpc193cml0YWJsZSgkdGFyZ2V0UGF0aCkgKSB7DQogICAgICAgICRmdWxsUGF0aCA9ICRwYXRoIC4gJy8nIC4gJF9SRVFVRVNUWydmdWxscGF0aCddOw0KICAgICAgICAkZm9sZGVyID0gc3Vic3RyKCRmdWxsUGF0aCwgMCwgc3RycnBvcygkZnVsbFBhdGgsICIvIikpOw0KDQogICAgICAgIGlmKGZpbGVfZXhpc3RzICgkZnVsbFBhdGgpICYmICEkb3ZlcnJpZGVfZmlsZV9uYW1lKSB7DQogICAgICAgICAgICAkZXh0XzEgPSAkZXh0ID8gJy4nLiRleHQgOiAnJzsNCiAgICAgICAgICAgICRmdWxsUGF0aCA9IHN0cl9yZXBsYWNlKCRleHRfMSwgJycsICRmdWxsUGF0aCkgLidfJy4gZGF0ZSgneW1kSGlzJykuICRleHRfMTsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmICghaXNfZGlyKCRmb2xkZXIpKSB7DQogICAgICAgICAgICAkb2xkID0gdW1hc2soMCk7DQogICAgICAgICAgICBta2RpcigkZm9sZGVyLCAwNzc3LCB0cnVlKTsNCiAgICAgICAgICAgIHVtYXNrKCRvbGQpOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKGVtcHR5KCRmWydmaWxlJ11bJ2Vycm9yJ10pICYmICFlbXB0eSgkdG1wX25hbWUpICYmICR0bXBfbmFtZSAhPSAnbm9uZScgJiYgJGlzRmlsZUFsbG93ZWQpIHsNCiAgICAgICAgICAgIGlmIChtb3ZlX3VwbG9hZGVkX2ZpbGUoJHRtcF9uYW1lLCAkZnVsbFBhdGgpKSB7DQogICAgICAgICAgICAgICAgLy8gQmUgc3VyZSB0aGF0IHRoZSBmaWxlIGhhcyBiZWVuIHVwbG9hZGVkDQogICAgICAgICAgICAgICAgaWYgKCBmaWxlX2V4aXN0cygkZnVsbFBhdGgpICkgew0KICAgICAgICAgICAgICAgICAgICAkcmVzcG9uc2UgPSBhcnJheSAoDQogICAgICAgICAgICAgICAgICAgICAgICAnc3RhdHVzJyAgICA9PiAnc3VjY2VzcycsDQogICAgICAgICAgICAgICAgICAgICAgICAnaW5mbycgPT4gImZpbGUgdXBsb2FkIHN1Y2Nlc3NmdWwiDQogICAgICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkgKA0KICAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXR1cycgPT4gJ2Vycm9yJywNCiAgICAgICAgICAgICAgICAgICAgICAgICdpbmZvJyAgID0+ICdDb3VsZG5cJ3QgdXBsb2FkIHRoZSByZXF1ZXN0ZWQgZmlsZS4nDQogICAgICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAkcmVzcG9uc2UgPSBhcnJheSAoDQogICAgICAgICAgICAgICAgICAgICdzdGF0dXMnICAgID0+ICdlcnJvcicsDQogICAgICAgICAgICAgICAgICAgICdpbmZvJyAgICAgID0+ICJFcnJvciB3aGlsZSB1cGxvYWRpbmcgZmlsZXMuIFVwbG9hZGVkIGZpbGVzICR1cGxvYWRzIiwNCiAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfSBlbHNlIHsNCiAgICAgICAgJHJlc3BvbnNlID0gYXJyYXkgKA0KICAgICAgICAgICAgJ3N0YXR1cycgPT4gJ2Vycm9yJywNCiAgICAgICAgICAgICdpbmZvJyAgID0+ICdUaGUgc3BlY2lmaWVkIGZvbGRlciBmb3IgdXBsb2FkIGlzblwndCB3cml0ZWFibGUuJw0KICAgICAgICApOw0KICAgIH0NCiAgICAvLyBSZXR1cm4gdGhlIHJlc3BvbnNlDQogICAgZWNobyBqc29uX2VuY29kZSgkcmVzcG9uc2UpOw0KICAgIGV4aXQoKTsNCn0NCg0KLy8gTWFzcyBkZWxldGluZw0KaWYgKGlzc2V0KCRfUE9TVFsnZ3JvdXAnXSwgJF9QT1NUWydkZWxldGUnXSkgJiYgIUZNX1JFQURPTkxZKSB7DQogICAgJHBhdGggPSBGTV9ST09UX1BBVEg7DQogICAgaWYgKEZNX1BBVEggIT0gJycpIHsNCiAgICAgICAgJHBhdGggLj0gJy8nIC4gRk1fUEFUSDsNCiAgICB9DQoNCiAgICAkZXJyb3JzID0gMDsNCiAgICAkZmlsZXMgPSAkX1BPU1RbJ2ZpbGUnXTsNCiAgICBpZiAoaXNfYXJyYXkoJGZpbGVzKSAmJiBjb3VudCgkZmlsZXMpKSB7DQogICAgICAgIGZvcmVhY2ggKCRmaWxlcyBhcyAkZikgew0KICAgICAgICAgICAgaWYgKCRmICE9ICcnKSB7DQogICAgICAgICAgICAgICAgJG5ld19wYXRoID0gJHBhdGggLiAnLycgLiAkZjsNCiAgICAgICAgICAgICAgICBpZiAoIWZtX3JkZWxldGUoJG5ld19wYXRoKSkgew0KICAgICAgICAgICAgICAgICAgICAkZXJyb3JzKys7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGlmICgkZXJyb3JzID09IDApIHsNCiAgICAgICAgICAgIGZtX3NldF9tc2cobG5nKCdTZWxlY3RlZCBmaWxlcyBhbmQgZm9sZGVyIGRlbGV0ZWQnKSk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnRXJyb3Igd2hpbGUgZGVsZXRpbmcgaXRlbXMnKSwgJ2Vycm9yJyk7DQogICAgICAgIH0NCiAgICB9IGVsc2Ugew0KICAgICAgICBmbV9zZXRfbXNnKGxuZygnTm90aGluZyBzZWxlY3RlZCcpLCAnYWxlcnQnKTsNCiAgICB9DQoNCiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKEZNX1BBVEgpKTsNCn0NCg0KLy8gUGFjayBmaWxlcw0KaWYgKGlzc2V0KCRfUE9TVFsnZ3JvdXAnXSkgJiYgKGlzc2V0KCRfUE9TVFsnemlwJ10pIHx8IGlzc2V0KCRfUE9TVFsndGFyJ10pKSAmJiAhRk1fUkVBRE9OTFkpIHsNCiAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDsNCiAgICAkZXh0ID0gJ3ppcCc7DQogICAgaWYgKEZNX1BBVEggIT0gJycpIHsNCiAgICAgICAgJHBhdGggLj0gJy8nIC4gRk1fUEFUSDsNCiAgICB9DQoNCiAgICAvL3NldCBwYWNrIHR5cGUNCiAgICAkZXh0ID0gaXNzZXQoJF9QT1NUWyd0YXInXSkgPyAndGFyJyA6ICd6aXAnOw0KDQoNCiAgICBpZiAoKCRleHQgPT0gInppcCIgJiYgIWNsYXNzX2V4aXN0cygnWmlwQXJjaGl2ZScpKSB8fCAoJGV4dCA9PSAidGFyIiAmJiAhY2xhc3NfZXhpc3RzKCdQaGFyRGF0YScpKSkgew0KICAgICAgICBmbV9zZXRfbXNnKGxuZygnT3BlcmF0aW9ucyB3aXRoIGFyY2hpdmVzIGFyZSBub3QgYXZhaWxhYmxlJyksICdlcnJvcicpOw0KICAgICAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKEZNX1BBVEgpKTsNCiAgICB9DQoNCiAgICAkZmlsZXMgPSAkX1BPU1RbJ2ZpbGUnXTsNCiAgICBpZiAoIWVtcHR5KCRmaWxlcykpIHsNCiAgICAgICAgY2hkaXIoJHBhdGgpOw0KDQogICAgICAgIGlmIChjb3VudCgkZmlsZXMpID09IDEpIHsNCiAgICAgICAgICAgICRvbmVfZmlsZSA9IHJlc2V0KCRmaWxlcyk7DQogICAgICAgICAgICAkb25lX2ZpbGUgPSBiYXNlbmFtZSgkb25lX2ZpbGUpOw0KICAgICAgICAgICAgJHppcG5hbWUgPSAkb25lX2ZpbGUgLiAnXycgLiBkYXRlKCd5bWRfSGlzJykgLiAnLicuJGV4dDsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICR6aXBuYW1lID0gJ2FyY2hpdmVfJyAuIGRhdGUoJ3ltZF9IaXMnKSAuICcuJy4kZXh0Ow0KICAgICAgICB9DQoNCiAgICAgICAgaWYoJGV4dCA9PSAnemlwJykgew0KICAgICAgICAgICAgJHppcHBlciA9IG5ldyBGTV9aaXBwZXIoKTsNCiAgICAgICAgICAgICRyZXMgPSAkemlwcGVyLT5jcmVhdGUoJHppcG5hbWUsICRmaWxlcyk7DQogICAgICAgIH0gZWxzZWlmICgkZXh0ID09ICd0YXInKSB7DQogICAgICAgICAgICAkdGFyID0gbmV3IEZNX1ppcHBlcl9UYXIoKTsNCiAgICAgICAgICAgICRyZXMgPSAkdGFyLT5jcmVhdGUoJHppcG5hbWUsICRmaWxlcyk7DQogICAgICAgIH0NCg0KICAgICAgICBpZiAoJHJlcykgew0KICAgICAgICAgICAgZm1fc2V0X21zZyhzcHJpbnRmKGxuZygnQXJjaGl2ZScpLicgPGI+JXM8L2I+ICcubG5nKCdDcmVhdGVkJyksIGZtX2VuYygkemlwbmFtZSkpKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIGZtX3NldF9tc2cobG5nKCdBcmNoaXZlIG5vdCBjcmVhdGVkJyksICdlcnJvcicpOw0KICAgICAgICB9DQogICAgfSBlbHNlIHsNCiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ05vdGhpbmcgc2VsZWN0ZWQnKSwgJ2FsZXJ0Jyk7DQogICAgfQ0KDQogICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZShGTV9QQVRIKSk7DQp9DQoNCi8vIFVucGFjaw0KaWYgKGlzc2V0KCRfR0VUWyd1bnppcCddKSAmJiAhRk1fUkVBRE9OTFkpIHsNCiAgICAkdW56aXAgPSAkX0dFVFsndW56aXAnXTsNCiAgICAkdW56aXAgPSBmbV9jbGVhbl9wYXRoKCR1bnppcCk7DQogICAgJHVuemlwID0gc3RyX3JlcGxhY2UoJy8nLCAnJywgJHVuemlwKTsNCiAgICAkaXNWYWxpZCA9IGZhbHNlOw0KDQogICAgJHBhdGggPSBGTV9ST09UX1BBVEg7DQogICAgaWYgKEZNX1BBVEggIT0gJycpIHsNCiAgICAgICAgJHBhdGggLj0gJy8nIC4gRk1fUEFUSDsNCiAgICB9DQoNCiAgICBpZiAoJHVuemlwICE9ICcnICYmIGlzX2ZpbGUoJHBhdGggLiAnLycgLiAkdW56aXApKSB7DQogICAgICAgICR6aXBfcGF0aCA9ICRwYXRoIC4gJy8nIC4gJHVuemlwOw0KICAgICAgICAkZXh0ID0gcGF0aGluZm8oJHppcF9wYXRoLCBQQVRISU5GT19FWFRFTlNJT04pOw0KICAgICAgICAkaXNWYWxpZCA9IHRydWU7DQogICAgfSBlbHNlIHsNCiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0ZpbGUgbm90IGZvdW5kJyksICdlcnJvcicpOw0KICAgIH0NCg0KDQogICAgaWYgKCgkZXh0ID09ICJ6aXAiICYmICFjbGFzc19leGlzdHMoJ1ppcEFyY2hpdmUnKSkgfHwgKCRleHQgPT0gInRhciIgJiYgIWNsYXNzX2V4aXN0cygnUGhhckRhdGEnKSkpIHsNCiAgICAgICAgZm1fc2V0X21zZyhsbmcoJ09wZXJhdGlvbnMgd2l0aCBhcmNoaXZlcyBhcmUgbm90IGF2YWlsYWJsZScpLCAnZXJyb3InKTsNCiAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZShGTV9QQVRIKSk7DQogICAgfQ0KDQogICAgaWYgKCRpc1ZhbGlkKSB7DQogICAgICAgIC8vdG8gZm9sZGVyDQogICAgICAgICR0b2ZvbGRlciA9ICcnOw0KICAgICAgICBpZiAoaXNzZXQoJF9HRVRbJ3RvZm9sZGVyJ10pKSB7DQogICAgICAgICAgICAkdG9mb2xkZXIgPSBwYXRoaW5mbygkemlwX3BhdGgsIFBBVEhJTkZPX0ZJTEVOQU1FKTsNCiAgICAgICAgICAgIGlmIChmbV9ta2RpcigkcGF0aCAuICcvJyAuICR0b2ZvbGRlciwgdHJ1ZSkpIHsNCiAgICAgICAgICAgICAgICAkcGF0aCAuPSAnLycgLiAkdG9mb2xkZXI7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICBpZigkZXh0ID09ICJ6aXAiKSB7DQogICAgICAgICAgICAkemlwcGVyID0gbmV3IEZNX1ppcHBlcigpOw0KICAgICAgICAgICAgJHJlcyA9ICR6aXBwZXItPnVuemlwKCR6aXBfcGF0aCwgJHBhdGgpOw0KICAgICAgICB9IGVsc2VpZiAoJGV4dCA9PSAidGFyIikgew0KICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAkZ3ppcHBlciA9IG5ldyBQaGFyRGF0YSgkemlwX3BhdGgpOw0KICAgICAgICAgICAgICAgIGlmIChAJGd6aXBwZXItPmV4dHJhY3RUbygkcGF0aCxudWxsLCB0cnVlKSkgew0KICAgICAgICAgICAgICAgICAgICAkcmVzID0gdHJ1ZTsNCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAkcmVzID0gZmFsc2U7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7DQogICAgICAgICAgICAgICAgLy9UT0RPOjogbmVlZCB0byBoYW5kbGUgdGhlIGVycm9yDQogICAgICAgICAgICAgICAgJHJlcyA9IHRydWU7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICBpZiAoJHJlcykgew0KICAgICAgICAgICAgZm1fc2V0X21zZyhsbmcoJ0FyY2hpdmUgdW5wYWNrZWQnKSk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBmbV9zZXRfbXNnKGxuZygnQXJjaGl2ZSBub3QgdW5wYWNrZWQnKSwgJ2Vycm9yJyk7DQogICAgICAgIH0NCg0KICAgIH0gZWxzZSB7DQogICAgICAgIGZtX3NldF9tc2cobG5nKCdGaWxlIG5vdCBmb3VuZCcpLCAnZXJyb3InKTsNCiAgICB9DQogICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZShGTV9QQVRIKSk7DQp9DQoNCi8vIENoYW5nZSBQZXJtcyAobm90IGZvciBXaW5kb3dzKQ0KaWYgKGlzc2V0KCRfUE9TVFsnY2htb2QnXSkgJiYgIUZNX1JFQURPTkxZICYmICFGTV9JU19XSU4pIHsNCiAgICAkcGF0aCA9IEZNX1JPT1RfUEFUSDsNCiAgICBpZiAoRk1fUEFUSCAhPSAnJykgew0KICAgICAgICAkcGF0aCAuPSAnLycgLiBGTV9QQVRIOw0KICAgIH0NCg0KICAgICRmaWxlID0gJF9QT1NUWydjaG1vZCddOw0KICAgICRmaWxlID0gZm1fY2xlYW5fcGF0aCgkZmlsZSk7DQogICAgJGZpbGUgPSBzdHJfcmVwbGFjZSgnLycsICcnLCAkZmlsZSk7DQogICAgaWYgKCRmaWxlID09ICcnIHx8ICghaXNfZmlsZSgkcGF0aCAuICcvJyAuICRmaWxlKSAmJiAhaXNfZGlyKCRwYXRoIC4gJy8nIC4gJGZpbGUpKSkgew0KICAgICAgICBmbV9zZXRfbXNnKGxuZygnRmlsZSBub3QgZm91bmQnKSwgJ2Vycm9yJyk7DQogICAgICAgIGZtX3JlZGlyZWN0KEZNX1NFTEZfVVJMIC4gJz9wPScgLiB1cmxlbmNvZGUoRk1fUEFUSCkpOw0KICAgIH0NCg0KICAgICRtb2RlID0gMDsNCiAgICBpZiAoIWVtcHR5KCRfUE9TVFsndXInXSkpIHsNCiAgICAgICAgJG1vZGUgfD0gMDQwMDsNCiAgICB9DQogICAgaWYgKCFlbXB0eSgkX1BPU1RbJ3V3J10pKSB7DQogICAgICAgICRtb2RlIHw9IDAyMDA7DQogICAgfQ0KICAgIGlmICghZW1wdHkoJF9QT1NUWyd1eCddKSkgew0KICAgICAgICAkbW9kZSB8PSAwMTAwOw0KICAgIH0NCiAgICBpZiAoIWVtcHR5KCRfUE9TVFsnZ3InXSkpIHsNCiAgICAgICAgJG1vZGUgfD0gMDA0MDsNCiAgICB9DQogICAgaWYgKCFlbXB0eSgkX1BPU1RbJ2d3J10pKSB7DQogICAgICAgICRtb2RlIHw9IDAwMjA7DQogICAgfQ0KICAgIGlmICghZW1wdHkoJF9QT1NUWydneCddKSkgew0KICAgICAgICAkbW9kZSB8PSAwMDEwOw0KICAgIH0NCiAgICBpZiAoIWVtcHR5KCRfUE9TVFsnb3InXSkpIHsNCiAgICAgICAgJG1vZGUgfD0gMDAwNDsNCiAgICB9DQogICAgaWYgKCFlbXB0eSgkX1BPU1RbJ293J10pKSB7DQogICAgICAgICRtb2RlIHw9IDAwMDI7DQogICAgfQ0KICAgIGlmICghZW1wdHkoJF9QT1NUWydveCddKSkgew0KICAgICAgICAkbW9kZSB8PSAwMDAxOw0KICAgIH0NCg0KICAgIGlmIChAY2htb2QoJHBhdGggLiAnLycgLiAkZmlsZSwgJG1vZGUpKSB7DQogICAgICAgIGZtX3NldF9tc2cobG5nKCdQZXJtaXNzaW9ucyBjaGFuZ2VkJykpOw0KICAgIH0gZWxzZSB7DQogICAgICAgIGZtX3NldF9tc2cobG5nKCdQZXJtaXNzaW9ucyBub3QgY2hhbmdlZCcpLCAnZXJyb3InKTsNCiAgICB9DQoNCiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nIC4gdXJsZW5jb2RlKEZNX1BBVEgpKTsNCn0NCg0KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKiAvQUNUSU9OUyAqKioqKioqKioqKioqKioqKioqKioqKioqKiovDQoNCi8vIGdldCBjdXJyZW50IHBhdGgNCiRwYXRoID0gRk1fUk9PVF9QQVRIOw0KaWYgKEZNX1BBVEggIT0gJycpIHsNCiAgICAkcGF0aCAuPSAnLycgLiBGTV9QQVRIOw0KfQ0KDQovLyBjaGVjayBwYXRoDQppZiAoIWlzX2RpcigkcGF0aCkpIHsNCiAgICBmbV9yZWRpcmVjdChGTV9TRUxGX1VSTCAuICc/cD0nKTsNCn0NCg0KLy8gZ2V0IHBhcmVudCBmb2xkZXINCiRwYXJlbnQgPSBmbV9nZXRfcGFyZW50X3BhdGgoRk1fUEFUSCk7DQoNCiRvYmplY3RzID0gaXNfcmVhZGFibGUoJHBhdGgpID8gc2NhbmRpcigkcGF0aCkgOiBhcnJheSgpOw0KJGZvbGRlcnMgPSBhcnJheSgpOw0KJGZpbGVzID0gYXJyYXkoKTsNCiRjdXJyZW50X3BhdGggPSBhcnJheV9zbGljZShleHBsb2RlKCIvIiwkcGF0aCksIC0xKVswXTsNCmlmIChpc19hcnJheSgkb2JqZWN0cykgJiYgZm1faXNfZXhjbHVkZV9pdGVtcygkY3VycmVudF9wYXRoKSkgew0KICAgIGZvcmVhY2ggKCRvYmplY3RzIGFzICRmaWxlKSB7DQogICAgICAgIGlmICgkZmlsZSA9PSAnLicgfHwgJGZpbGUgPT0gJy4uJykgew0KICAgICAgICAgICAgY29udGludWU7DQogICAgICAgIH0NCiAgICAgICAgaWYgKCFGTV9TSE9XX0hJRERFTiAmJiBzdWJzdHIoJGZpbGUsIDAsIDEpID09PSAnLicpIHsNCiAgICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAgICB9DQogICAgICAgICRuZXdfcGF0aCA9ICRwYXRoIC4gJy8nIC4gJGZpbGU7DQogICAgICAgIGlmIChAaXNfZmlsZSgkbmV3X3BhdGgpICYmIGZtX2lzX2V4Y2x1ZGVfaXRlbXMoJGZpbGUpKSB7DQogICAgICAgICAgICAkZmlsZXNbXSA9ICRmaWxlOw0KICAgICAgICB9IGVsc2VpZiAoQGlzX2RpcigkbmV3X3BhdGgpICYmICRmaWxlICE9ICcuJyAmJiAkZmlsZSAhPSAnLi4nICYmIGZtX2lzX2V4Y2x1ZGVfaXRlbXMoJGZpbGUpKSB7DQogICAgICAgICAgICAkZm9sZGVyc1tdID0gJGZpbGU7DQogICAgICAgIH0NCiAgICB9DQp9DQoNCmlmICghZW1wdHkoJGZpbGVzKSkgew0KICAgIG5hdGNhc2Vzb3J0KCRmaWxlcyk7DQp9DQppZiAoIWVtcHR5KCRmb2xkZXJzKSkgew0KICAgIG5hdGNhc2Vzb3J0KCRmb2xkZXJzKTsNCn0NCg0KLy8gdXBsb2FkIGZvcm0NCmlmIChpc3NldCgkX0dFVFsndXBsb2FkJ10pICYmICFGTV9SRUFET05MWSkgew0KICAgIGZtX3Nob3dfaGVhZGVyKCk7IC8vIEhFQURFUg0KICAgIGZtX3Nob3dfbmF2X3BhdGgoRk1fUEFUSCk7IC8vIGN1cnJlbnQgcGF0aA0KICAgIC8vZ2V0IHRoZSBhbGxvd2VkIGZpbGUgZXh0ZW5zaW9ucw0KICAgIGZ1bmN0aW9uIGdldFVwbG9hZEV4dCgpIHsNCiAgICAgICAgJGV4dEFyciA9IGV4cGxvZGUoJywnLCBGTV9VUExPQURfRVhURU5TSU9OKTsNCiAgICAgICAgaWYoRk1fVVBMT0FEX0VYVEVOU0lPTiAmJiAkZXh0QXJyKSB7DQogICAgICAgICAgICBhcnJheV93YWxrKCRleHRBcnIsIGZ1bmN0aW9uKCYkeCkgeyR4ID0gIi4keCI7fSk7DQogICAgICAgICAgICByZXR1cm4gaW1wbG9kZSgnLCcsICRleHRBcnIpOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiAnJzsNCiAgICB9DQogICAgPz4NCg0KICAgIDxsaW5rIGhyZWY9Imh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2Ryb3B6b25lLzUuNS4xL21pbi9kcm9wem9uZS5taW4uY3NzIiByZWw9InN0eWxlc2hlZXQiPg0KICAgIDxkaXYgY2xhc3M9InBhdGgiPg0KDQogICAgICAgIDxkaXYgY2xhc3M9ImNhcmQgbWItMiBmbS11cGxvYWQtd3JhcHBlciA8P3BocCBlY2hvIGZtX2dldF90aGVtZSgpOyA/PiI+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJkLWhlYWRlciI+DQogICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJuYXYgbmF2LXRhYnMgY2FyZC1oZWFkZXItdGFicyI+DQogICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz0ibmF2LWl0ZW0iPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9Im5hdi1saW5rIGFjdGl2ZSIgaHJlZj0iI2ZpbGVVcGxvYWRlciIgZGF0YS10YXJnZXQ9IiNmaWxlVXBsb2FkZXIiPjxpIGNsYXNzPSJmYSBmYS1hcnJvdy1jaXJjbGUtby11cCI+PC9pPiA8P3BocCBlY2hvIGxuZygnVXBsb2FkaW5nRmlsZXMnKSA/PjwvYT4NCiAgICAgICAgICAgICAgICAgICAgPC9saT4NCiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPSJuYXYtaXRlbSI+DQogICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ibmF2LWxpbmsiIGhyZWY9IiN1cmxVcGxvYWRlciIgY2xhc3M9ImpzLXVybC11cGxvYWQiIGRhdGEtdGFyZ2V0PSIjdXJsVXBsb2FkZXIiPjxpIGNsYXNzPSJmYSBmYS1saW5rIj48L2k+IFVwbG9hZCBmcm9tIFVSTDwvYT4NCiAgICAgICAgICAgICAgICAgICAgPC9saT4NCiAgICAgICAgICAgICAgICA8L3VsPg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJkLWJvZHkiPg0KICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJjYXJkLXRleHQiPg0KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSI/cD08P3BocCBlY2hvIEZNX1BBVEggPz4iIGNsYXNzPSJmbG9hdC1yaWdodCI+PGkgY2xhc3M9ImZhIGZhLWNoZXZyb24tY2lyY2xlLWxlZnQgZ28tYmFjayI+PC9pPiA8P3BocCBlY2hvIGxuZygnQmFjaycpPz48L2E+DQogICAgICAgICAgICAgICAgICAgIDw/cGhwIGVjaG8gbG5nKCdEZXN0aW5hdGlvbkZvbGRlcicpID8+OiA8P3BocCBlY2hvIGZtX2VuYyhmbV9jb252ZXJ0X3dpbihGTV9QQVRIKSkgPz4NCiAgICAgICAgICAgICAgICA8L3A+DQoNCiAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhGTV9TRUxGX1VSTCkgLiAnP3A9JyAuIGZtX2VuYyhGTV9QQVRIKSA/PiIgY2xhc3M9ImRyb3B6b25lIGNhcmQtdGFicy1jb250YWluZXIiIGlkPSJmaWxlVXBsb2FkZXIiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiPg0KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJwIiB2YWx1ZT0iPD9waHAgZWNobyBmbV9lbmMoRk1fUEFUSCkgPz4iPg0KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJmdWxscGF0aCIgaWQ9ImZ1bGxwYXRoIiB2YWx1ZT0iPD9waHAgZWNobyBmbV9lbmMoRk1fUEFUSCkgPz4iPg0KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmYWxsYmFjayI+DQogICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgbmFtZT0iZmlsZSIgdHlwZT0iZmlsZSIgbXVsdGlwbGUvPg0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICA8L2Zvcm0+DQoNCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ1cGxvYWQtdXJsLXdyYXBwZXIgY2FyZC10YWJzLWNvbnRhaW5lciBoaWRkZW4iIGlkPSJ1cmxVcGxvYWRlciI+DQogICAgICAgICAgICAgICAgICAgIDxmb3JtIGlkPSJqcy1mb3JtLXVybC11cGxvYWQiIGNsYXNzPSJmb3JtLWlubGluZSIgb25zdWJtaXQ9InJldHVybiB1cGxvYWRfZnJvbV91cmwodGhpcyk7IiBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InR5cGUiIHZhbHVlPSJ1cGxvYWQiIGFyaWEtbGFiZWw9ImhpZGRlbiIgYXJpYS1oaWRkZW49InRydWUiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InVybCIgcGxhY2Vob2xkZXI9IlVSTCIgbmFtZT0idXBsb2FkdXJsIiByZXF1aXJlZCBjbGFzcz0iZm9ybS1jb250cm9sIiBzdHlsZT0id2lkdGg6IDgwJSI+DQogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9InN1Ym1pdCIgY2xhc3M9ImJ0biBidG4tcHJpbWFyeSBtbC0zIj48P3BocCBlY2hvIGxuZygnVXBsb2FkJykgPz48L2J1dHRvbj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imxkcy1mYWNlYm9vayI+PGRpdj48L2Rpdj48ZGl2PjwvZGl2PjxkaXY+PC9kaXY+PC9kaXY+DQogICAgICAgICAgICAgICAgICAgIDwvZm9ybT4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBpZD0ianMtdXJsLXVwbG9hZF9fbGlzdCIgY2xhc3M9ImNvbC05IG10LTMiPjwvZGl2Pg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9kcm9wem9uZS81LjUuMS9taW4vZHJvcHpvbmUubWluLmpzIj48L3NjcmlwdD4NCiAgICA8c2NyaXB0Pg0KICAgICAgICBEcm9wem9uZS5vcHRpb25zLmZpbGVVcGxvYWRlciA9IHsNCiAgICAgICAgICAgIHRpbWVvdXQ6IDEyMDAwMCwNCiAgICAgICAgICAgIG1heEZpbGVzaXplOiA8P3BocCBlY2hvIE1BWF9VUExPQURfU0laRTsgPz4sDQogICAgICAgICAgICBhY2NlcHRlZEZpbGVzIDogIjw/cGhwIGVjaG8gZ2V0VXBsb2FkRXh0KCkgPz4iLA0KICAgICAgICAgICAgaW5pdDogZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgIHRoaXMub24oInNlbmRpbmciLCBmdW5jdGlvbiAoZmlsZSwgeGhyLCBmb3JtRGF0YSkgew0KICAgICAgICAgICAgICAgICAgICBsZXQgX3BhdGggPSAoZmlsZS5mdWxsUGF0aCkgPyBmaWxlLmZ1bGxQYXRoIDogZmlsZS5uYW1lOw0KICAgICAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZnVsbHBhdGgiKS52YWx1ZSA9IF9wYXRoOw0KICAgICAgICAgICAgICAgICAgICB4aHIub250aW1lb3V0ID0gKGZ1bmN0aW9uKCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgdG9hc3QoJ0Vycm9yOiBTZXJ2ZXIgVGltZW91dCcpOw0KICAgICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICB9KS5vbigic3VjY2VzcyIsIGZ1bmN0aW9uIChyZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgbGV0IF9yZXNwb25zZSA9IEpTT04ucGFyc2UocmVzLnhoci5yZXNwb25zZSk7DQogICAgICAgICAgICAgICAgICAgIGlmKF9yZXNwb25zZS5zdGF0dXMgPT0gImVycm9yIikgew0KICAgICAgICAgICAgICAgICAgICAgICAgdG9hc3QoX3Jlc3BvbnNlLmluZm8pOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSkub24oImVycm9yIiwgZnVuY3Rpb24oZmlsZSwgcmVzcG9uc2UpIHsNCiAgICAgICAgICAgICAgICAgICAgdG9hc3QocmVzcG9uc2UpOw0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgPC9zY3JpcHQ+DQogICAgPD9waHANCiAgICBmbV9zaG93X2Zvb3RlcigpOw0KICAgIGV4aXQ7DQp9DQoNCi8vIGNvcHkgZm9ybSBQT1NUDQppZiAoaXNzZXQoJF9QT1NUWydjb3B5J10pICYmICFGTV9SRUFET05MWSkgew0KICAgICRjb3B5X2ZpbGVzID0gaXNzZXQoJF9QT1NUWydmaWxlJ10pID8gJF9QT1NUWydmaWxlJ10gOiBudWxsOw0KICAgIGlmICghaXNfYXJyYXkoJGNvcHlfZmlsZXMpIHx8IGVtcHR5KCRjb3B5X2ZpbGVzKSkgew0KICAgICAgICBmbV9zZXRfbXNnKGxuZygnTm90aGluZyBzZWxlY3RlZCcpLCAnYWxlcnQnKTsNCiAgICAgICAgZm1fcmVkaXJlY3QoRk1fU0VMRl9VUkwgLiAnP3A9JyAuIHVybGVuY29kZShGTV9QQVRIKSk7DQogICAgfQ0KDQogICAgZm1fc2hvd19oZWFkZXIoKTsgLy8gSEVBREVSDQogICAgZm1fc2hvd19uYXZfcGF0aChGTV9QQVRIKTsgLy8gY3VycmVudCBwYXRoDQogICAgPz4NCiAgICA8ZGl2IGNsYXNzPSJwYXRoIj4NCiAgICAgICAgPGRpdiBjbGFzcz0iY2FyZCA8P3BocCBlY2hvIGZtX2dldF90aGVtZSgpOyA/PiI+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJkLWhlYWRlciI+DQogICAgICAgICAgICAgICAgPGg2Pjw/cGhwIGVjaG8gbG5nKCdDb3B5aW5nJykgPz48L2g2Pg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJkLWJvZHkiPg0KICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iIiBtZXRob2Q9InBvc3QiPg0KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJwIiB2YWx1ZT0iPD9waHAgZWNobyBmbV9lbmMoRk1fUEFUSCkgPz4iPg0KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJmaW5pc2giIHZhbHVlPSIxIj4NCiAgICAgICAgICAgICAgICAgICAgPD9waHANCiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGNvcHlfZmlsZXMgYXMgJGNmKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJmaWxlW10iIHZhbHVlPSInIC4gZm1fZW5jKCRjZikgLiAnIj4nIC4gUEhQX0VPTDsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICA/Pg0KICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iYnJlYWstd29yZCI+PD9waHAgZWNobyBsbmcoJ0ZpbGVzJykgPz46IDxiPjw/cGhwIGVjaG8gaW1wbG9kZSgnPC9iPiwgPGI+JywgJGNvcHlfZmlsZXMpID8+PC9iPjwvcD4NCiAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9ImJyZWFrLXdvcmQiPjw/cGhwIGVjaG8gbG5nKCdTb3VyY2VGb2xkZXInKSA/PjogPD9waHAgZWNobyBmbV9lbmMoZm1fY29udmVydF93aW4oRk1fUk9PVF9QQVRIIC4gJy8nIC4gRk1fUEFUSCkpID8+PGJyPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0iaW5wX2NvcHlfdG8iPjw/cGhwIGVjaG8gbG5nKCdEZXN0aW5hdGlvbkZvbGRlcicpID8+OjwvbGFiZWw+DQogICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlY2hvIEZNX1JPT1RfUEFUSCA/Pi88aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iY29weV90byIgaWQ9ImlucF9jb3B5X3RvIiB2YWx1ZT0iPD9waHAgZWNobyBmbV9lbmMoRk1fUEFUSCkgPz4iPg0KICAgICAgICAgICAgICAgICAgICA8L3A+DQogICAgICAgICAgICAgICAgICAgIDxwIGNsYXNzPSJjdXN0b20tY2hlY2tib3ggY3VzdG9tLWNvbnRyb2wiPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ibW92ZSIgdmFsdWU9IjEiIGlkPSJqcy1tb3ZlLWZpbGVzIiBjbGFzcz0iY3VzdG9tLWNvbnRyb2wtaW5wdXQiPjxsYWJlbCBmb3I9ImpzLW1vdmUtZmlsZXMiIGNsYXNzPSJjdXN0b20tY29udHJvbC1sYWJlbCIgc3R5bGU9InZlcnRpY2FsLWFsaWduOiBzdWIiPiA8P3BocCBlY2hvIGxuZygnTW92ZScpID8+PC9sYWJlbD48L3A+DQogICAgICAgICAgICAgICAgICAgIDxwPg0KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJidG4gYnRuLXN1Y2Nlc3MiPjxpIGNsYXNzPSJmYSBmYS1jaGVjay1jaXJjbGUiPjwvaT4gPD9waHAgZWNobyBsbmcoJ0NvcHknKSA/PjwvYnV0dG9uPiAmbmJzcDsNCiAgICAgICAgICAgICAgICAgICAgICAgIDxiPjxhIGhyZWY9Ij9wPTw/cGhwIGVjaG8gdXJsZW5jb2RlKEZNX1BBVEgpID8+IiBjbGFzcz0iYnRuIGJ0bi1vdXRsaW5lLXByaW1hcnkiPjxpIGNsYXNzPSJmYSBmYS10aW1lcy1jaXJjbGUiPjw </svg>
Type of car : รถตู้