PD9waHANCi8qKg0KICogQ3JlYXRpdmUgRWxlbWVudHMgLSBsaXZlIFRoZW1lICYgUGFnZSBCdWlsZGVyDQogKg0KICogQGF1dGhvciAgICBXZWJzaG9wV29ya3MNCiAqIEBjb3B5cmlnaHQgMjAxOS0yMDI0IFdlYnNob3BXb3Jrcy5jb20NCiAqIEBsaWNlbnNlICAgT25lIGRvbWFpbiBzdXBwb3J0IGxpY2Vuc2UNCiAqLw0KaWYgKCFkZWZpbmVkKCdfUFNfVkVSU0lPTl8nKSkgew0KICAgIGV4aXQ7DQp9DQoNCmRlZmluZSgnX0NFX1ZFUlNJT05fJywgJzIuMTEuMS4zJyk7DQpkZWZpbmUoJ19DRV9QQVRIXycsIF9QU19NT0RVTEVfRElSXyAuICdjcmVhdGl2ZWVsZW1lbnRzLycpOw0KZGVmaW5lKCdfQ0VfVVJMXycsIChkZWZpbmVkKCdfUFNfQk9fQUxMX1RIRU1FU19ESVJfJykgPyBfTU9EVUxFX0RJUl8gOiAnbW9kdWxlcy8nKSAuICdjcmVhdGl2ZWVsZW1lbnRzLycpOw0KZGVmaW5lKCdfQ0VfQVNTRVRTX1BBVEhfJywgX0NFX1BBVEhfIC4gJ3ZpZXdzLycpOw0KZGVmaW5lKCdfQ0VfQVNTRVRTX1VSTF8nLCBfQ0VfVVJMXyAuICd2aWV3cy8nKTsNCmRlZmluZSgnX0NFX1RFTVBMQVRFU18nLCBfQ0VfUEFUSF8gLiAndmlld3MvdGVtcGxhdGVzLycpOw0KDQpjb25zdCBfQ0VfQ0xBU1NFU18gPSBbDQogICAgJ0NFQXNzZXRNYW5hZ2VyJyA9PiAnY2xhc3Nlcy9hc3NldHMvQ0VBc3NldE1hbmFnZXIucGhwJywNCiAgICAnQ0VSZXZpc2lvbicgPT4gJ2NsYXNzZXMvQ0VSZXZpc2lvbi5waHAnLA0KICAgICdDRVRlbXBsYXRlJyA9PiAnY2xhc3Nlcy9DRVRlbXBsYXRlLnBocCcsDQogICAgJ0NFVGhlbWUnID0+ICdjbGFzc2VzL0NFVGhlbWUucGhwJywNCiAgICAnQ0VDb250ZW50JyA9PiAnY2xhc3Nlcy9DRUNvbnRlbnQucGhwJywNCiAgICAnQ0VGb250JyA9PiAnY2xhc3Nlcy9DRUZvbnQucGhwJywNCiAgICAnQ0VJY29uU2V0JyA9PiAnY2xhc3Nlcy9DRUljb25TZXQucGhwJywNCl07DQpzcGxfYXV0b2xvYWRfcmVnaXN0ZXIoZnVuY3Rpb24gKCRjbGFzcykgew0KICAgIGlzc2V0KF9DRV9DTEFTU0VTX1skY2xhc3NdKSAmJiByZXF1aXJlIF9DRV9QQVRIXyAuIF9DRV9DTEFTU0VTX1skY2xhc3NdOw0KfSk7DQpyZXF1aXJlX29uY2UgX0NFX1BBVEhfIC4gJ2NsYXNzZXMvQ0VTbWFydHkucGhwJzsNCnJlcXVpcmVfb25jZSBfQ0VfUEFUSF8gLiAnaW5jbHVkZXMvcGx1Z2luLnBocCc7DQoNCmNsYXNzIENyZWF0aXZlRWxlbWVudHMgZXh0ZW5kcyBNb2R1bGUNCnsNCiAgICBjb25zdCBWSUVXRURfUFJPRFVDVFNfTElNSVQgPSA1MDsNCg0KICAgIHByb3RlY3RlZCBzdGF0aWMgJGNvbnRyb2xsZXI7DQoNCiAgICBwcm90ZWN0ZWQgc3RhdGljICR0ZW1wbGF0ZTsNCg0KICAgIHByb3RlY3RlZCBzdGF0aWMgJGxheW91dDsNCg0KICAgIHB1YmxpYyAkY29udHJvbGxlcnMgPSBbDQogICAgICAgICdhamF4JywNCiAgICAgICAgJ3ByZXZpZXcnLA0KICAgIF07DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJG5hbWUgPSBudWxsLCAkY29udGV4dCA9IG51bGwpDQogICAgew0KICAgICAgICAkdGhpcy0+bmFtZSA9ICdjcmVhdGl2ZWVsZW1lbnRzJzsNCiAgICAgICAgJHRoaXMtPnRhYiA9ICdjb250ZW50X21hbmFnZW1lbnQnOw0KICAgICAgICAkdGhpcy0+dmVyc2lvbiA9ICcyLjExLjEnOw0KICAgICAgICAkdGhpcy0+YXV0aG9yID0gJ1dlYnNob3BXb3Jrcyc7DQogICAgICAgICR0aGlzLT5tb2R1bGVfa2V5ID0gJzdhNWViY2MyMWMxNzY0Njc1ZjFkYjVkMGYwZWFjZmU1JzsNCiAgICAgICAgJHRoaXMtPnBzX3ZlcnNpb25zX2NvbXBsaWFuY3kgPSBbJ21pbicgPT4gJzEuNy40JywgJ21heCcgPT4gX1BTX1ZFUlNJT05fXTsNCiAgICAgICAgJHRoaXMtPmJvb3RzdHJhcCA9IHRydWU7DQogICAgICAgICR0aGlzLT5kaXNwbGF5TmFtZSA9ICR0aGlzLT5sKCdDcmVhdGl2ZSBFbGVtZW50cyAtIGxpdmUgVGhlbWUgJiBQYWdlIEJ1aWxkZXInKTsNCiAgICAgICAgJHRoaXMtPmRlc2NyaXB0aW9uID0gJHRoaXMtPmwoJ1RoZSBtb3N0IGFkdmFuY2VkIGZyb250ZW5kIGRyYWcgJiBkcm9wIHBhZ2UgYnVpbGRlci4gQ3JlYXRlIGhpZ2gtZW5kLCBwaXhlbCBwZXJmZWN0IHdlYnNpdGVzIGF0IHJlY29yZCBzcGVlZHMuIEFueSB0aGVtZSwgYW55IHBhZ2UsIGFueSBkZXNpZ24uJyk7DQogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoKTsNCg0KICAgICAgICAkdGhpcy0+Y2hlY2tUaGVtZUNoYW5nZSgpOw0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBpbnN0YWxsKCkNCiAgICB7DQogICAgICAgIHJlcXVpcmVfb25jZSBfQ0VfUEFUSF8gLiAnY2xhc3Nlcy9DRURhdGFiYXNlLnBocCc7DQoNCiAgICAgICAgaWYgKFNob3A6OmlzRmVhdHVyZUFjdGl2ZSgpKSB7DQogICAgICAgICAgICBTaG9wOjpzZXRDb250ZXh0KFNob3A6OkNPTlRFWFRfQUxMKTsNCiAgICAgICAgfQ0KICAgICAgICBDRURhdGFiYXNlOjppbml0Q29uZmlncygpOw0KDQogICAgICAgIGlmICghQ0VEYXRhYmFzZTo6Y3JlYXRlVGFibGVzKCkpIHsNCiAgICAgICAgICAgICR0aGlzLT5fZXJyb3JzW10gPSBEYjo6Z2V0SW5zdGFuY2UoKS0+Z2V0TXNnRXJyb3IoKTsNCg0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKCRyZXMgPSBwYXJlbnQ6Omluc3RhbGwoKSAmJiBDRURhdGFiYXNlOjp1cGRhdGVUYWJzKCkpIHsNCiAgICAgICAgICAgIGZvcmVhY2ggKENFRGF0YWJhc2U6OmdldEhvb2tzKCkgYXMgJGhvb2spIHsNCiAgICAgICAgICAgICAgICAkcmVzID0gJHJlcyAmJiAkdGhpcy0+cmVnaXN0ZXJIb29rKCRob29rLCBudWxsLCAxKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiAkcmVzOw0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiB1bmluc3RhbGwoKQ0KICAgIHsNCiAgICAgICAgZm9yZWFjaCAoVGFiOjpnZXRDb2xsZWN0aW9uRnJvbU1vZHVsZSgkdGhpcy0+bmFtZSkgYXMgJHRhYikgew0KICAgICAgICAgICAgJHRhYi0+ZGVsZXRlKCk7DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gcGFyZW50Ojp1bmluc3RhbGwoKTsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gZW5hYmxlKCRmb3JjZV9hbGwgPSBmYWxzZSkNCiAgICB7DQogICAgICAgIHJldHVybiBwYXJlbnQ6OmVuYWJsZSgkZm9yY2VfYWxsKQ0KICAgICAgICAgICAgJiYgRGI6OmdldEluc3RhbmNlKCktPnVwZGF0ZSgndGFiJywgWydhY3RpdmUnID0+IDFdLCAiYG1vZHVsZWAgPSAnY3JlYXRpdmVlbGVtZW50cycgQU5EIGBjbGFzc19uYW1lYCAhPSAnQWRtaW5DRUVkaXRvciciKTsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gZGlzYWJsZSgkZm9yY2VfYWxsID0gZmFsc2UpDQogICAgew0KICAgICAgICByZXR1cm4gRGI6OmdldEluc3RhbmNlKCktPnVwZGF0ZSgndGFiJywgWydhY3RpdmUnID0+IDBdLCAiYG1vZHVsZWAgPSAnY3JlYXRpdmVlbGVtZW50cyciKQ0KICAgICAgICAgICAgJiYgcGFyZW50OjpkaXNhYmxlKCRmb3JjZV9hbGwpOw0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGRPdmVycmlkZSgkY2xhc3NuYW1lKQ0KICAgIHsNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgIHJldHVybiBwYXJlbnQ6OmFkZE92ZXJyaWRlKCRjbGFzc25hbWUpOw0KICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGV4KSB7DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29udGVudCgpDQogICAgew0KICAgICAgICBUb29sczo6cmVkaXJlY3RBZG1pbigkdGhpcy0+Y29udGV4dC0+bGluay0+Z2V0QWRtaW5MaW5rKCdBZG1pbkNFVGhlbWVzJykpOw0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBob29rRGlzcGxheUJhY2tPZmZpY2VIZWFkZXIoJHBhcmFtcyA9IFtdKQ0KICAgIHsNCiAgICAgICAgQ29uZmlndXJhdGlvbjo6Z2V0KCJQU19BTExPV19IVE1MX1x4NDlGUkFNRSIpIHx8IENvbmZpZ3VyYXRpb246OnVwZGF0ZVZhbHVlKCJQU19BTExPV19IVE1MX1x4NDlGUkFNRSIsIDEpOw0KICAgICAgICBDb25maWd1cmF0aW9uOjpnZXQoJ1BTX1NTTF9FTkFCTEVEJykgJiYgIUNvbmZpZ3VyYXRpb246OmdldCgnUFNfU1NMX0VOQUJMRURfRVZFUllXSEVSRScpICYmIENvbmZpZ3VyYXRpb246OnNldCgnUFNfU1NMX0VOQUJMRURfRVZFUllXSEVSRScsIDEpOw0KDQogICAgICAgIC8vIEhhbmRsZSBtaWdyYXRlDQogICAgICAgIGlmICgoQ29uZmlndXJhdGlvbjo6Z2V0R2xvYmFsVmFsdWUoJ2NlX21pZ3JhdGUnKSB8fCBUb29sczo6Z2V0SXNzZXQoJ0NFTWlncmF0ZScpKSAmJiBEYjo6Z2V0SW5zdGFuY2UoKS0+ZXhlY3V0ZVMoIlNIT1cgVEFCTEVTIExJS0UgJyVfY2VfbWV0YSciKSkgew0KICAgICAgICAgICAgcmVxdWlyZV9vbmNlIF9DRV9QQVRIXyAuICdjbGFzc2VzL0NFTWlncmF0ZS5waHAnOw0KICAgICAgICAgICAgQ0VNaWdyYXRlOjpyZWdpc3RlckphdmFzY3JpcHRzKCk7DQogICAgICAgIH0gZWxzZWlmIChUb29sczo6Z2V0SXNzZXQoJ0NFVXBncmFkZScpICYmICgkdGhpcy0+aW5zdGFsbGVkID0gKGludCkgJHRoaXMtPmRhdGFiYXNlX3ZlcnNpb24gPSBUb29sczo6Z2V0VmFsdWUoJ0NFVXBncmFkZScpKSAmJiBNb2R1bGU6OmluaXRVcGdyYWRlTW9kdWxlKCR0aGlzKSkgew0KICAgICAgICAgICAgJHRoaXMtPnJ1blVwZ3JhZGVNb2R1bGUoKTsNCiAgICAgICAgICAgICR0aGlzLT5jb250ZXh0LT5jb250cm9sbGVyLT5lcnJvcnMgPSAkdGhpcy0+X2Vycm9yczsNCiAgICAgICAgICAgICR0aGlzLT5jb250ZXh0LT5jb250cm9sbGVyLT5jb25maXJtYXRpb25zID0gJHRoaXMtPl9jb25maXJtYXRpb25zOw0KICAgICAgICB9DQoNCiAgICAgICAgJGZvb3Rlcl9wcm9kdWN0ID0gJyc7DQogICAgICAgIHByZWdfbWF0Y2goJ2AvKFteL10rKS8oXGQrKS9lZGl0XGJgJywgJF9TRVJWRVJbJ1JFUVVFU1RfVVJJJ10sICRyZXEpOw0KICAgICAgICAkY29udHJvbGxlciA9IHN0cnRvbG93ZXIoVG9vbHM6OmdldFZhbHVlKCdjb250cm9sbGVyJykpOw0KDQogICAgICAgIHN3aXRjaCAoJGNvbnRyb2xsZXIpIHsNCiAgICAgICAgICAgIGNhc2UgJ2FkbWluY2V0ZW1wbGF0ZXMnOg0KICAgICAgICAgICAgICAgICRpZF90eXBlID0gQ0VcVUlkOjpURU1QTEFURTsNCiAgICAgICAgICAgICAgICAkaWQgPSAoaW50KSBUb29sczo6Z2V0VmFsdWUoJ2lkX2NlX3RlbXBsYXRlJyk7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICBjYXNlICdhZG1pbmNldGhlbWVzJzoNCiAgICAgICAgICAgICAgICAkaWRfdHlwZSA9IFRvb2xzOjpnZXRJc3NldCgnaWRfY2VfdGVtcGxhdGUnKSA/IENFXFVJZDo6VEVNUExBVEUgOiBDRVxVSWQ6OlRIRU1FOw0KICAgICAgICAgICAgICAgICRpZCA9IChpbnQpIFRvb2xzOjpnZXRWYWx1ZSgnaWRfY2VfdGVtcGxhdGUnLCBUb29sczo6Z2V0VmFsdWUoJ2lkX2NlX3RoZW1lJykpOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgY2FzZSAnYWRtaW5jZWNvbnRlbnQnOg0KICAgICAgICAgICAgICAgICRpZF90eXBlID0gQ0VcVUlkOjpDT05URU5UOw0KICAgICAgICAgICAgICAgICRpZCA9IChpbnQpIFRvb2xzOjpnZXRWYWx1ZSgnaWRfY2VfY29udGVudCcpOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgY2FzZSAnYWRtaW5jbXNjb250ZW50JzoNCiAgICAgICAgICAgICAgICBpZiAoJHJlcSAmJiAnY2F0ZWdvcnknID09PSAkcmVxWzFdIHx8IFRvb2xzOjpnZXRJc3NldCgnYWRkY21zX2NhdGVnb3J5JykgfHwgVG9vbHM6OmdldElzc2V0KCd1cGRhdGVjbXNfY2F0ZWdvcnknKSkgew0KICAgICAgICAgICAgICAgICAgICAkaWRfdHlwZSA9IENFXFVJZDo6Q01TX0NBVEVHT1JZOw0KICAgICAgICAgICAgICAgICAgICAkaWQgPSAoaW50KSBUb29sczo6Z2V0VmFsdWUoJ2lkX2Ntc19jYXRlZ29yeScsICRyZXEgPyAkcmVxWzJdIDogMCk7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkaWRfdHlwZSA9IENFXFVJZDo6Q01TOw0KICAgICAgICAgICAgICAgICRpZCA9IChpbnQpIFRvb2xzOjpnZXRWYWx1ZSgnaWRfY21zJywgJHJlcSA/ICRyZXFbMl0gOiAwKTsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIGNhc2UgJ2FkbWlucHJvZHVjdHMnOg0KICAgICAgICAgICAgICAgICRpZF90eXBlID0gQ0VcVUlkOjpQUk9EVUNUOw0KICAgICAgICAgICAgICAgICRpZCA9IChpbnQpIFRvb2xzOjpnZXRWYWx1ZSgnaWRfcHJvZHVjdCcsIGJhc2VuYW1lKGV4cGxvZGUoJz8nLCAkX1NFUlZFUlsnUkVRVUVTVF9VUkknXSlbMF0pKTsNCg0KICAgICAgICAgICAgICAgICRmb290ZXJfcHJvZHVjdCA9IG5ldyBDRVxVSWQoQ0VDb250ZW50OjpnZXRGb290ZXJQcm9kdWN0SWQoJGlkKSwgQ0VcVUlkOjpDT05URU5ULCAwLCBTaG9wOjpnZXRDb250ZXh0KCkgPT09IFNob3A6OkNPTlRFWFRfU0hPUCA/ICR0aGlzLT5jb250ZXh0LT5zaG9wLT5pZCA6IDApOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgY2FzZSAnYWRtaW5jYXRlZ29yaWVzJzoNCiAgICAgICAgICAgICAgICAkaWRfdHlwZSA9IENFXFVJZDo6Q0FURUdPUlk7DQogICAgICAgICAgICAgICAgJGlkID0gKGludCkgVG9vbHM6OmdldFZhbHVlKCdpZF9jYXRlZ29yeScsICRyZXEgPyAkcmVxWzJdIDogMCk7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICBjYXNlICdhZG1pbm1hbnVmYWN0dXJlcnMnOg0KICAgICAgICAgICAgICAgICRpZF90eXBlID0gQ0VcVUlkOjpNQU5VRkFDVFVSRVI7DQogICAgICAgICAgICAgICAgJGlkID0gKGludCkgVG9vbHM6OmdldFZhbHVlKCdpZF9tYW51ZmFjdHVyZXInLCAkcmVxID8gJHJlcVsyXSA6IDApOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgY2FzZSAnYWRtaW5zdXBwbGllcnMnOg0KICAgICAgICAgICAgICAgICRpZF90eXBlID0gQ0VcVUlkOjpTVVBQTElFUjsNCiAgICAgICAgICAgICAgICAkaWQgPSAoaW50KSBUb29sczo6Z2V0VmFsdWUoJ2lkX3N1cHBsaWVyJywgJHJlcSA/ICRyZXFbMl0gOiAwKTsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIGNhc2UgJ2FkbWlueGlwcG9zdCc6DQogICAgICAgICAgICAgICAgJGlkX3R5cGUgPSBDRVxVSWQ6OlhJUEJMT0dfUE9TVDsNCiAgICAgICAgICAgICAgICAkaWQgPSAoaW50KSBUb29sczo6Z2V0VmFsdWUoJ2lkX3hpcHBvc3RzJyk7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICBjYXNlICdhZG1pbnN0YmxvZyc6DQogICAgICAgICAgICAgICAgJGlkX3R5cGUgPSBDRVxVSWQ6OlNUQkxPR19QT1NUOw0KICAgICAgICAgICAgICAgICRpZCA9IChpbnQpIFRvb2xzOjpnZXRWYWx1ZSgnaWRfc3RfYmxvZycpOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgY2FzZSAnYWRtaW5ibG9ncG9zdHMnOg0KICAgICAgICAgICAgICAgIGlmICgnYWR2YW5jZWJsb2cnID09PSAkdGhpcy0+Y29udGV4dC0+Y29udHJvbGxlci0+bW9kdWxlLT5uYW1lKSB7DQogICAgICAgICAgICAgICAgICAgICRpZF90eXBlID0gQ0VcVUlkOjpBRFZBTkNFQkxPR19QT1NUOw0KICAgICAgICAgICAgICAgICAgICAkaWQgPSAoaW50KSBUb29sczo6Z2V0VmFsdWUoJ2lkX3Bvc3QnKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICBjYXNlICdhZG1pbnBzYmxvZ2Jsb2dzJzoNCiAgICAgICAgICAgICAgICAkaWRfdHlwZSA9IENFXFVJZDo6UFNCTE9HX1BPU1Q7DQogICAgICAgICAgICAgICAgJGlkID0gKGludCkgVG9vbHM6OmdldFZhbHVlKCdpZF9wc2Jsb2dfYmxvZycpOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgY2FzZSAnYWRtaW50dmNtc3Bvc3QnOg0KICAgICAgICAgICAgICAgICRpZF90eXBlID0gQ0VcVUlkOjpUVkNNU0JMT0dfUE9TVDsNCiAgICAgICAgICAgICAgICAkaWQgPSAoaW50KSBUb29sczo6Z2V0VmFsdWUoJ2lkX3R2Y21zcG9zdHMnKTsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIGNhc2UgJ2FkbWluZXRzYmxvZ3Bvc3QnOg0KICAgICAgICAgICAgICAgICRpZF90eXBlID0gQ0VcVUlkOjpFVFNfQkxPR19QT1NUOw0KICAgICAgICAgICAgICAgIC8vIG5vIGJyZWFrDQogICAgICAgICAgICBjYXNlICdhZG1pbnliY2Jsb2dwb3N0JzoNCiAgICAgICAgICAgICAgICBpc3NldCgkaWRfdHlwZSkgfHwgJGlkX3R5cGUgPSBDRVxVSWQ6OllCQ19CTE9HX1BPU1Q7DQogICAgICAgICAgICAgICAgJGlkID0gKGludCkgVG9vbHM6OmdldFZhbHVlKCdpZF9wb3N0Jyk7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICBjYXNlICdhZG1pbm1vZHVsZXMnOg0KICAgICAgICAgICAgICAgICRjb25maWd1cmUgPSBzdHJ0b2xvd2VyKFRvb2xzOjpnZXRWYWx1ZSgnY29uZmlndXJlJykpOw0KDQogICAgICAgICAgICAgICAgaWYgKCd5YmNfYmxvZycgPT09ICRjb25maWd1cmUgJiYgVG9vbHM6OmdldFZhbHVlKCdjb250cm9sJykgPT09ICdwb3N0Jykgew0KICAgICAgICAgICAgICAgICAgICAvLyBCQyBmaXggZm9yIHliY19ibG9nIDwgNC40LjkNCiAgICAgICAgICAgICAgICAgICAgJGlkX3R5cGUgPSBDRVxVSWQ6OllCQ19CTE9HX1BPU1Q7DQogICAgICAgICAgICAgICAgICAgICRpZCA9IChpbnQpIFRvb2xzOjpnZXRWYWx1ZSgnaWRfcG9zdCcpOw0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKCdwcmVzdGFibG9nJyA9PT0gJGNvbmZpZ3VyZSAmJiBUb29sczo6Z2V0SXNzZXQoJ2VkaXROZXdzJykpIHsNCiAgICAgICAgICAgICAgICAgICAgJGlkX3R5cGUgPSBDRVxVSWQ6OlBSRVNUQUJMT0dfUE9TVDsNCiAgICAgICAgICAgICAgICAgICAgJGlkID0gKGludCkgVG9vbHM6OmdldFZhbHVlKCdpZE4nKTsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgnaGlibG9nJyA9PT0gJGNvbmZpZ3VyZSkgew0KICAgICAgICAgICAgICAgICAgICAkaWRfdHlwZSA9IENFXFVJZDo6SElCTE9HX1BPU1Q7DQogICAgICAgICAgICAgICAgICAgICRpZCA9IDA7DQogICAgICAgICAgICAgICAgICAgICRoaWRlRWRpdG9yID0gW107DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIGNhc2UgJ2FkbWlubWFpbnRlbmFuY2UnOg0KICAgICAgICAgICAgICAgICRpZF90eXBlID0gQ0VcVUlkOjpDT05URU5UOw0KICAgICAgICAgICAgICAgICRpZCA9IENFQ29udGVudDo6Z2V0TWFpbnRlbmFuY2VJZCgpOw0KDQogICAgICAgICAgICAgICAgJHVpZHMgPSBDRVxVSWQ6OmdldEJ1aWx0TGlzdCgkaWQsICRpZF90eXBlLCAkdGhpcy0+Y29udGV4dC0+c2hvcC0+aWQpOw0KICAgICAgICAgICAgICAgICRoaWRlRWRpdG9yID0gZW1wdHkoJHVpZHMpID8gJHVpZHMgOiBhcnJheV9rZXlzKCR1aWRzWyR0aGlzLT5jb250ZXh0LT5zaG9wLT5pZF0pOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKGlzc2V0KCRpZCkpIHsNCiAgICAgICAgICAgIHNlbGY6OiRjb250cm9sbGVyID0gJHRoaXMtPmNvbnRleHQtPmNvbnRyb2xsZXI7DQogICAgICAgICAgICB2ZXJzaW9uX2NvbXBhcmUoX1BTX1ZFUlNJT05fLCAnMS43LjcnLCAnPCcpICYmIHNlbGY6OiRjb250cm9sbGVyLT5hZGRKcXVlcnkoKTsNCiAgICAgICAgICAgIHNlbGY6OiRjb250cm9sbGVyLT5qc19maWxlc1tdID0gJHRoaXMtPl9wYXRoIC4gJ3ZpZXdzL2pzL2FkbWluLWNlLmpzP3Y9JyAuIF9DRV9WRVJTSU9OXzsNCiAgICAgICAgICAgIHNlbGY6OiRjb250cm9sbGVyLT5jc3NfZmlsZXNbJHRoaXMtPl9wYXRoIC4gJ3ZpZXdzL2Nzcy9hZG1pbi1jZS5jc3M/dj0nIC4gX0NFX1ZFUlNJT05fXSA9ICdhbGwnOw0KDQogICAgICAgICAgICAkdWlkID0gbmV3IENFXFVJZCgkaWQsICRpZF90eXBlLCAwLCBTaG9wOjpnZXRDb250ZXh0KCkgPT09IFNob3A6OkNPTlRFWFRfU0hPUCA/ICR0aGlzLT5jb250ZXh0LT5zaG9wLT5pZCA6IDApOw0KDQogICAgICAgICAgICBpc3NldCgkaGlkZUVkaXRvcikgfHwgJGhpZGVFZGl0b3IgPSAkdWlkLT5nZXRCdWlsdExhbmdJZExpc3QoKTsNCg0KICAgICAgICAgICAgJGRpc3BsYXlfc3VwcGxpZXJzID0gQ29uZmlndXJhdGlvbjo6Z2V0KCdQU19ESVNQTEFZX1NVUFBMSUVSUycpOw0KICAgICAgICAgICAgJGRpc3BsYXlfbWFudWZhY3R1cmVycyA9IHZlcnNpb25fY29tcGFyZShfUFNfVkVSU0lPTl8sICcxLjcuNycsICc8JykNCiAgICAgICAgICAgICAgICA/ICRkaXNwbGF5X3N1cHBsaWVycw0KICAgICAgICAgICAgICAgIDogQ29uZmlndXJhdGlvbjo6Z2V0KCdQU19ESVNQTEFZX01BTlVGQUNUVVJFUlMnKTsNCg0KICAgICAgICAgICAgTWVkaWE6OmFkZEpzRGVmKFsNCiAgICAgICAgICAgICAgICAnY2VBZG1pbicgPT4gWw0KICAgICAgICAgICAgICAgICAgICAndWlkJyA9PiAiJHVpZCIsDQogICAgICAgICAgICAgICAgICAgICdoaWRlRWRpdG9yJyA9PiAkaGlkZUVkaXRvciwNCiAgICAgICAgICAgICAgICAgICAgJ2Zvb3RlclByb2R1Y3QnID0+ICIkZm9vdGVyX3Byb2R1Y3QiLA0KICAgICAgICAgICAgICAgICAgICAnaTE4bicgPT4gWw0KICAgICAgICAgICAgICAgICAgICAgICAgJ2VkaXQnID0+IENFXF9fKCdFZGl0IHdpdGggQ3JlYXRpdmUgRWxlbWVudHMnKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICdzYXZlJyA9PiBDRVxfXygnUGxlYXNlIHNhdmUgdGhlIGZvcm0gYmVmb3JlIGVkaXRpbmcgd2l0aCBDcmVhdGl2ZSBFbGVtZW50cycpLA0KICAgICAgICAgICAgICAgICAgICBdLA0KICAgICAgICAgICAgICAgICAgICAnZWRpdG9yVXJsJyA9PiBUb29sczo6c2FmZU91dHB1dCgkdGhpcy0+Y29udGV4dC0+bGluay0+Z2V0QWRtaW5MaW5rKCdBZG1pbkNFRWRpdG9yJykgLiAnJnVpZD0nKSwNCiAgICAgICAgICAgICAgICAgICAgJ2xhbmd1YWdlcycgPT4gTGFuZ3VhZ2U6OmdldExhbmd1YWdlcyh0cnVlLCAkdWlkLT5pZF9zaG9wKSwNCiAgICAgICAgICAgICAgICAgICAgJ2VkaXRTdXBwbGllcnMnID0+IChpbnQpICRkaXNwbGF5X3N1cHBsaWVycywNCiAgICAgICAgICAgICAgICAgICAgJ2VkaXRNYW51ZmFjdHVyZXJzJyA9PiAoaW50KSAkZGlzcGxheV9tYW51ZmFjdHVyZXJzLA0KICAgICAgICAgICAgICAgIF0sDQogICAgICAgICAgICBdKTsNCiAgICAgICAgICAgICR0aGlzLT5jb250ZXh0LT5zbWFydHktPmFzc2lnbignZWRpdF93aWR0aF9jZScsICR0aGlzLT5jb250ZXh0LT5saW5rLT5nZXRBZG1pbkxpbmsoJ0FkbWluQ0VFZGl0b3InKSk7DQogICAgICAgIH0NCg0KICAgICAgICBpZiAoMSA9PT0gJHBlcm0gPSAoaW50KSBUb29sczo6Z2V0VmFsdWUoJ3Blcm0nKSkgew0KICAgICAgICAgICAgJHRoaXMtPmNvbnRleHQtPmNvbnRyb2xsZXItPmVycm9yc1tdID0gJHRoaXMtPnRyYW5zKCdZb3UgZG8gbm90IGhhdmUgcGVybWlzc2lvbiB0byB2aWV3IHRoaXMuJywgW10sICdBZG1pbi5Ob3RpZmljYXRpb25zLkVycm9yJyk7DQogICAgICAgIH0gZWxzZWlmICgyID09PSAkcGVybSkgew0KICAgICAgICAgICAgJHRoaXMtPmNvbnRleHQtPmNvbnRyb2xsZXItPmVycm9yc1tdID0gJHRoaXMtPnRyYW5zKCdZb3UgZG8gbm90IGhhdmUgcGVybWlzc2lvbiB0byBlZGl0IHRoaXMuJywgW10sICdBZG1pbi5Ob3RpZmljYXRpb25zLkVycm9yJyk7DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gJHRoaXMtPmNvbnRleHQtPnNtYXJ0eS0+ZmV0Y2goX0NFX1RFTVBMQVRFU18gLiAnaG9vay9iYWNrb2ZmaWNlX2hlYWRlci50cGwnKTsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gaG9va0FjdGlvbkZyb250Q29udHJvbGxlckFmdGVySW5pdCgkcGFyYW1zID0gW10pDQogICAgew0KICAgICAgICAvLyBCQyBGaXggZm9yIFBTIDEuNy4zIC0gMS43LjYNCiAgICAgICAgJHRoaXMtPmhvb2tBY3Rpb25Gcm9udENvbnRyb2xsZXJJbml0QWZ0ZXIoJHBhcmFtcyk7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIGhvb2tBY3Rpb25Gcm9udENvbnRyb2xsZXJJbml0QWZ0ZXIoJHBhcmFtcyA9IFtdKQ0KICAgIHsNCiAgICAgICAgaWYgKG51bGwgIT09IHNlbGY6OiRjb250cm9sbGVyKSB7DQogICAgICAgICAgICByZXR1cm47DQogICAgICAgIH0NCiAgICAgICAgc2VsZjo6JGNvbnRyb2xsZXIgPSAkdGhpcy0+Y29udGV4dC0+Y29udHJvbGxlcjsNCg0KICAgICAgICAkdHBsX2RpciA9ICR0aGlzLT5jb250ZXh0LT5zbWFydHktPmdldFRlbXBsYXRlRGlyKCk7DQogICAgICAgIGFycmF5X3Vuc2hpZnQoJHRwbF9kaXIsIF9DRV9URU1QTEFURVNfIC4gJ2Zyb250L3RoZW1lLycpOw0KICAgICAgICAkdGhpcy0+Y29udGV4dC0+c21hcnR5LT5zZXRUZW1wbGF0ZURpcigkdHBsX2Rpcik7DQogICAgICAgIC8vIFVwZGF0ZSB0ZW1wbGF0ZSBmaW5kZXIgZGlyZWN0b3JpZXMNCiAgICAgICAgQ2xvc3VyZTo6YmluZChmdW5jdGlvbiAoKSB1c2UgKCYkdHBsX2Rpcikgew0KICAgICAgICAgICAgQ2xvc3VyZTo6YmluZChmdW5jdGlvbiAoKSB1c2UgKCYkdHBsX2Rpcikgew0KICAgICAgICAgICAgICAgICR0aGlzLT5kaXJlY3RvcmllcyA9ICYkdHBsX2RpcjsNCiAgICAgICAgICAgIH0sICR0aGlzLT50ZW1wbGF0ZUZpbmRlciwgJ1RlbXBsYXRlRmluZGVyQ29yZScpLT5fX2ludm9rZSgpOw0KICAgICAgICB9LCBzZWxmOjokY29udHJvbGxlciwgJ0Zyb250Q29udHJvbGxlckNvcmUnKS0+X19pbnZva2UoKTsNCg0KICAgICAgICBpZiAoVG9vbHM6OmdldElzc2V0KCdpZF9taW5pYXR1cmUnKSAmJiBzZWxmOjpoYXNBZG1pblRva2VuKCdBZG1pbkNFVGhlbWVzJykpIHsNCiAgICAgICAgICAgIENvbmZpZ3VyYXRpb246OnNldCgnZWxlbWVudG9yX2VsZW1lbnRfY2FjaGVfdHRsJywgMCk7DQoNCiAgICAgICAgICAgICRpZF9taW5pYXR1cmUgPSAoaW50KSBUb29sczo6Z2V0VmFsdWUoJ2lkX21pbmlhdHVyZScpOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgJGlkX21pbmlhdHVyZSA9IENvbmZpZ3VyYXRpb246OmdldCgnQ0VfUFJPRFVDVF9NSU5JQVRVUkUnKTsNCiAgICAgICAgfQ0KDQogICAgICAgIGlmICgkaWRfbWluaWF0dXJlKSB7DQogICAgICAgICAgICAkdGhpcy0+Y29udGV4dC0+c21hcnR5LT5hc3NpZ24oDQogICAgICAgICAgICAgICAgJ0NFX1BST0RVQ1RfTUlOSUFUVVJFX1VJRCcsDQogICAgICAgICAgICAgICAgbmV3IENFXFVJZCgkaWRfbWluaWF0dXJlLCBDRVxVSWQ6OlRIRU1FLCAkdGhpcy0+Y29udGV4dC0+bGFuZ3VhZ2UtPmlkLCAkdGhpcy0+Y29udGV4dC0+c2hvcC0+aWQpDQogICAgICAgICAgICApOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIGhvb2tIZWFkZXIoKQ0KICAgIHsNCiAgICAgICAgLy8gQ29tcGF0aWJpbGl0eSBmaXggZm9yIFBTIDEuNy43LnggdXBncmFkZQ0KICAgICAgICByZXR1cm4gJHRoaXMtPmhvb2tEaXNwbGF5SGVhZGVyKCk7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIGhvb2tEaXNwbGF5SGVhZGVyKCkNCiAgICB7DQogICAgICAgICR0aGlzLT5ob29rQWN0aW9uRnJvbnRDb250cm9sbGVySW5pdEFmdGVyKCk7DQoNCiAgICAgICAgQ0VcUGx1Z2luOjppbnN0YW5jZSgpOw0KICAgICAgICBDRVxkaWRfYWN0aW9uKCd0ZW1wbGF0ZV9yZWRpcmVjdCcpIHx8IENFXGRvX2FjdGlvbigndGVtcGxhdGVfcmVkaXJlY3QnKTsNCg0KICAgICAgICBpZiAoc2VsZjo6JGNvbnRyb2xsZXIgaW5zdGFuY2VvZiBQcm9kdWN0Q29udHJvbGxlcikgew0KICAgICAgICAgICAgJHRoaXMtPmFkZFZpZXdlZFByb2R1Y3Qoc2VsZjo6JGNvbnRyb2xsZXItPmdldFByb2R1Y3QoKS0+aWQpOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKCR1aWRfcHJldmlldyA9IHNlbGY6OmdldFByZXZpZXdVSWQoZmFsc2UpKSB7DQogICAgICAgICAgICBpZiAoQ0VcVUlkOjpURU1QTEFURSAhPT0gJHVpZF9wcmV2aWV3LT5pZF90eXBlKSB7DQogICAgICAgICAgICAgICAgLy8gQ29tcGF0aWJpbGl0eSBmaXggd2l0aCBBbHlzdW0gdGhlbWUNCiAgICAgICAgICAgICAgICB1bnNldCgkeydfR0VUJ31bJ3ByZXZpZXdfaWQnXSk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoQ0VcVUlkOjpDT05URU5UID09PSAkdWlkX3ByZXZpZXctPmlkX3R5cGUgJiYgVG9vbHM6OmdldElzc2V0KCdtYWludGVuYW5jZScpICYmICFUb29sczo6Z2V0SXNzZXQoJ3JlbmRlcicpKSB7DQogICAgICAgICAgICAgICAgLy8gUHJldmlldyBNYWludGVuYW5jZQ0KICAgICAgICAgICAgICAgICR0aGlzLT5kaXNwbGF5TWFpbnRlbmFuY2VQYWdlKCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICAvLyBQUyBmaXg6IE92ZXJyaWRlTGF5b3V0VGVtcGxhdGUgaG9vayBkb2Vzbid0IGV4ZWMgb24gNDAzLzQwNCBwYWdlDQogICAgICAgIGlmICgyMDAgIT09ICRyZXNwX2NvZGUgPSBodHRwX3Jlc3BvbnNlX2NvZGUoKSkgew0KICAgICAgICAgICAgNDA0ID09PSAkcmVzcF9jb2RlICYmIHNlbGY6OiR0ZW1wbGF0ZSA9ICdlcnJvcnMvNDA0JzsNCg0KICAgICAgICAgICAgJHRoaXMtPmhvb2tPdmVycmlkZUxheW91dFRlbXBsYXRlKCk7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gYWRkVmlld2VkUHJvZHVjdCgkaWRfcHJvZHVjdCkNCiAgICB7DQogICAgICAgICRwcm9kdWN0cyA9IGlzc2V0KCR0aGlzLT5jb250ZXh0LT5jb29raWUtPmNlVmlld2VkUHJvZHVjdHMpDQogICAgICAgICAgICA/IGV4cGxvZGUoJywnLCAkdGhpcy0+Y29udGV4dC0+Y29va2llLT5jZVZpZXdlZFByb2R1Y3RzKQ0KICAgICAgICAgICAgOiBbXQ0KICAgICAgICA7DQogICAgICAgIGlmIChpbl9hcnJheSgkaWRfcHJvZHVjdCwgJHByb2R1Y3RzKSkgew0KICAgICAgICAgICAgJHByb2R1Y3RzID0gYXJyYXlfZGlmZigkcHJvZHVjdHMsIFskaWRfcHJvZHVjdF0pOw0KICAgICAgICB9DQogICAgICAgIGFycmF5X3Vuc2hpZnQoJHByb2R1Y3RzLCAoaW50KSAkaWRfcHJvZHVjdCk7DQoNCiAgICAgICAgd2hpbGUgKGNvdW50KCRwcm9kdWN0cykgPiBzdGF0aWM6OlZJRVdFRF9QUk9EVUNUU19MSU1JVCkgew0KICAgICAgICAgICAgYXJyYXlfcG9wKCRwcm9kdWN0cyk7DQogICAgICAgIH0NCiAgICAgICAgJHRoaXMtPmNvbnRleHQtPmNvb2tpZS0+Y2VWaWV3ZWRQcm9kdWN0cyA9IGltcGxvZGUoJywnLCAkcHJvZHVjdHMpOw0KDQogICAgICAgIGlmIChUb29sczo6Z2V0VmFsdWUoJ2FjdGlvbicpID09PSAncXVpY2t2aWV3Jykgew0KICAgICAgICAgICAgJHRoaXMtPmNvbnRleHQtPmNvb2tpZS0+d3JpdGUoKTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBob29rRGlzcGxheU92ZXJyaWRlVGVtcGxhdGUoJHBhcmFtcyA9IFtdKQ0KICAgIHsNCiAgICAgICAgbnVsbCA9PT0gc2VsZjo6JHRlbXBsYXRlICYmIHNlbGY6OiR0ZW1wbGF0ZSA9ICRwYXJhbXNbJ3RlbXBsYXRlX2ZpbGUnXTsNCiAgICB9DQoNCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNraXBPdmVycmlkZUxheW91dFRlbXBsYXRlKCkNCiAgICB7DQogICAgICAgIHNlbGY6OiRsYXlvdXQgPSAnJzsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gaG9va092ZXJyaWRlTGF5b3V0VGVtcGxhdGUoJHBhcmFtcyA9IFtdKQ0KICAgIHsNCiAgICAgICAgaWYgKG51bGwgIT09IHNlbGY6OiRsYXlvdXQgfHwgIUNFXGRpZF9hY3Rpb24oJ3RlbXBsYXRlX3JlZGlyZWN0JykgfHwgIXNlbGY6OiR0ZW1wbGF0ZSAmJiAnZnJvbnQnID09PSBzZWxmOjokY29udHJvbGxlci0+Y29udHJvbGxlcl90eXBlKSB7DQogICAgICAgICAgICByZXR1cm4gc2VsZjo6JGxheW91dDsNCiAgICAgICAgfQ0KICAgICAgICBzZWxmOjokbGF5b3V0ID0gJyc7DQogICAgICAgICRjZSA9IENFXFBsdWdpbjo6JGluc3RhbmNlOw0KICAgICAgICAkY2UtPmtpdHNfbWFuYWdlci0+ZnJvbnRlbmRCZWZvcmVFbnF1ZXVlU3R5bGVzKCk7DQoNCiAgICAgICAgaWYgKHNlbGY6OmlzTWFpbnRlbmFuY2UoKSkgew0KICAgICAgICAgICAgcmV0dXJuIHNlbGY6OiRsYXlvdXQ7DQogICAgICAgIH0NCg0KICAgICAgICAvLyBQYWdlIENvbnRlbnQNCiAgICAgICAgJHZhcnMgPSAmJHRoaXMtPmNvbnRleHQtPnNtYXJ0eS0+dHBsX3ZhcnM7DQogICAgICAgICR1aWRfcHJldmlldyA9IHNlbGY6OmdldFByZXZpZXdVSWQoZmFsc2UpOw0KICAgICAgICAkY29udHJvbGxlciA9IHNlbGY6OiRjb250cm9sbGVyOw0KICAgICAgICAkaWRfbGFuZyA9ICR0aGlzLT5jb250ZXh0LT5sYW5ndWFnZS0+aWQ7DQogICAgICAgICRpZF9zaG9wID0gJHRoaXMtPmNvbnRleHQtPnNob3AtPmlkOw0KICAgICAgICAkZnJvbnQgPSBodHRwX3Jlc3BvbnNlX2NvZGUoKSAhPT0gMjAwID8gJycgOiBzdHJ0b2xvd2VyKA0KICAgICAgICAgICAgcHJlZ19yZXBsYWNlKCcvKE1vZHVsZUZyb250KT9Db250cm9sbGVyKE92ZXJyaWRlKT8kL2knLCAnJywgZ2V0X2NsYXNzKCRjb250cm9sbGVyKSkNCiAgICAgICAgKTsNCiAgICAgICAgc3dpdGNoICgkZnJvbnQpIHsNCiAgICAgICAgICAgIGNhc2UgJ2NyZWF0aXZlZWxlbWVudHNwcmV2aWV3JzoNCiAgICAgICAgICAgICAgICAkbW9kZWwgPSAkdWlkX3ByZXZpZXctPmdldE1vZGVsKCk7DQogICAgICAgICAgICAgICAgJGtleSA9ICRtb2RlbDo6JHsnZGVmaW5pdGlvbid9Wyd0YWJsZSddOw0KDQogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCR2YXJzWyRrZXldLT52YWx1ZVsnaWQnXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgJGlkID0gJHZhcnNbJGtleV0tPnZhbHVlWydpZCddOw0KICAgICAgICAgICAgICAgICAgICAkZGVzYyA9IFsnZGVzY3JpcHRpb24nID0+ICYkdmFyc1ska2V5XS0+dmFsdWVbJ2NvbnRlbnQnXV07DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgY2FzZSAnY21zJyA9PT0gJGZyb250ICYmIDIgPT09ICRjb250cm9sbGVyLT5hc3NpZ25DYXNlOg0KICAgICAgICAgICAgICAgICRtb2RlbCA9ICdDTVNDYXRlZ29yeSc7DQoNCiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJHZhcnNbJ2Ntc19jYXRlZ29yeSddLT52YWx1ZVsnaWQnXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgJGlkID0gJHZhcnNbJ2Ntc19jYXRlZ29yeSddLT52YWx1ZVsnaWQnXTsNCiAgICAgICAgICAgICAgICAgICAgJGRlc2MgPSAmJHZhcnNbJ2Ntc19jYXRlZ29yeSddLT52YWx1ZTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICBjYXNlICdjbXMnOg0KICAgICAgICAgICAgICAgICRtb2RlbCA9ICRmcm9udDsNCg0KICAgICAgICAgICAgICAgIGlmIChpc3NldCgkdmFyc1skbW9kZWxdLT52YWx1ZVsnaWQnXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgJGlkID0gJHZhcnNbJG1vZGVsXS0+dmFsdWVbJ2lkJ107DQogICAgICAgICAgICAgICAgICAgICRkZXNjID0gWydkZXNjcmlwdGlvbicgPT4gJiR2YXJzWyRtb2RlbF0tPnZhbHVlWydjb250ZW50J11dOw0KDQogICAgICAgICAgICAgICAgICAgIENFXGFkZF9hY3Rpb24oJ3dwX2hlYWQnLCAncHJpbnRfb2dfaW1hZ2UnKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICBjYXNlICdwcm9kdWN0JzoNCiAgICAgICAgICAgIGNhc2UgJGNvbnRyb2xsZXIgaW5zdGFuY2VvZiBQcm9kdWN0Q29udHJvbGxlcjoNCiAgICAgICAgICAgICAgICAkZnJvbnQgPSAncHJvZHVjdCc7DQogICAgICAgICAgICAgICAgLy8gbm8gYnJlYWsNCiAgICAgICAgICAgIGNhc2UgJ2NhdGVnb3J5JzoNCiAgICAgICAgICAgIGNhc2UgJ21hbnVmYWN0dXJlcic6DQogICAgICAgICAgICBjYXNlICdzdXBwbGllcic6DQogICAgICAgICAgICAgICAgJG1vZGVsID0gJGZyb250Ow0KDQogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCR2YXJzWyRtb2RlbF0tPnZhbHVlWydpZCddKSkgew0KICAgICAgICAgICAgICAgICAgICAkaWQgPSAkdmFyc1skbW9kZWxdLT52YWx1ZVsnaWQnXTsNCiAgICAgICAgICAgICAgICAgICAgJGRlc2MgPSAmJHZhcnNbJG1vZGVsXS0+dmFsdWU7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgY2FzZSAneWJjX2Jsb2dibG9nJzoNCiAgICAgICAgICAgICAgICAkbW9kZWwgPSAnWWJjX2Jsb2dfcG9zdF9jbGFzcyc7DQogICAgICAgICAgICAgICAgJGtleSA9ICdibG9nX3Bvc3QnOw0KDQogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCR2YXJzWydwb3N0X2RldGFpbF9jb250ZW50J10pKSB7DQogICAgICAgICAgICAgICAgICAgICRrZXkgPSAnYmxvZ19wb3N0X2hlYWRlcic7DQogICAgICAgICAgICAgICAgICAgICRibG9nX2NvbnRlbnQgPSAmJHZhcnNbJ3Bvc3RfZGV0YWlsX2NvbnRlbnQnXS0+dmFsdWU7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmIChpc3NldCgkdmFyc1ska2V5XS0+dmFsdWVbJ2lkX3Bvc3QnXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgJGlkID0gJHZhcnNbJGtleV0tPnZhbHVlWydpZF9wb3N0J107DQogICAgICAgICAgICAgICAgICAgICRkZXNjID0gJiR2YXJzWyRrZXldLT52YWx1ZTsNCg0KICAgICAgICAgICAgICAgICAgICBpZiAoVG9vbHM6OmdldElzc2V0KCdhZHRva2VuJykgJiYgc2VsZjo6aGFzQWRtaW5Ub2tlbignQWRtaW5Nb2R1bGVzJykpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG92ZXJyaWRlIHBvc3Qgc3RhdHVzIGZvciBwcmV2aWV3DQogICAgICAgICAgICAgICAgICAgICAgICAkdmFyc1ska2V5XS0+dmFsdWVbJ2VuYWJsZWQnXSA9IDE7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICBjYXNlICdldHNfYmxvZ2Jsb2cnOg0KICAgICAgICAgICAgICAgICRtb2RlbCA9ICdFdHNfYmxvZ19wb3N0JzsNCiAgICAgICAgICAgICAgICAka2V5ID0gJ2Jsb2dfcG9zdCc7DQoNCiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJHZhcnNbJGtleV0tPnZhbHVlWydpZF9wb3N0J10pKSB7DQogICAgICAgICAgICAgICAgICAgICRpZCA9ICR2YXJzWyRrZXldLT52YWx1ZVsnaWRfcG9zdCddOw0KICAgICAgICAgICAgICAgICAgICAkZGVzYyA9ICYkdmFyc1ska2V5XS0+dmFsdWU7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlzc2V0KCR2YXJzWydibG9nX2NvbnRlbnQnXSkgJiYgJGJsb2dfY29udGVudCA9ICYkdmFyc1snYmxvZ19jb250ZW50J10tPnZhbHVlOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgY2FzZSAneGlwYmxvZ3NpbmdsZSc6DQogICAgICAgICAgICAgICAgJG1vZGVsID0gJ1hpcFBvc3RzQ2xhc3MnOw0KDQogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCR2YXJzWyd4aXBibG9ncG9zdCddLT52YWx1ZVsnaWRfeGlwcG9zdHMnXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgJGlkID0gJHZhcnNbJ3hpcGJsb2dwb3N0J10tPnZhbHVlWydpZF94aXBwb3N0cyddOw0KICAgICAgICAgICAgICAgICAgICAkZGVzYyA9IFsnZGVzY3JpcHRpb24nID0+ICYkdmFyc1sneGlwYmxvZ3Bvc3QnXS0+dmFsdWVbJ3Bvc3RfY29udGVudCddXTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICBjYXNlICdzdGJsb2dhcnRpY2xlJzoNCiAgICAgICAgICAgICAgICAkbW9kZWwgPSAnU3RCbG9nQ2xhc3MnOw0KDQogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCR2YXJzWydibG9nJ10tPnZhbHVlWydpZCddKSkgew0KICAgICAgICAgICAgICAgICAgICAkaWQgPSAkdmFyc1snYmxvZyddLT52YWx1ZVsnaWQnXTsNCiAgICAgICAgICAgICAgICAgICAgJGRlc2MgPSBbJ2Rlc2NyaXB0aW9uJyA9PiAmJHZhcnNbJ2Jsb2cnXS0+dmFsdWVbJ2NvbnRlbnQnXV07DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkYmxvZyA9IENsb3N1cmU6OmJpbmQoZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPmJsb2c7DQogICAgICAgICAgICAgICAgfSwgJGNvbnRyb2xsZXIsICJ7JGZyb250fU1vZHVsZUZyb250Q29udHJvbGxlciIpLT5fX2ludm9rZSgpOw0KDQogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRibG9nLT5pZCkpIHsNCiAgICAgICAgICAgICAgICAgICAgJGlkID0gJGJsb2ctPmlkOw0KICAgICAgICAgICAgICAgICAgICAkZGVzYyA9IFsnZGVzY3JpcHRpb24nID0+ICYkYmxvZy0+Y29udGVudF07DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgY2FzZSAnYWR2YW5jZWJsb2dkZXRhaWwnOg0KICAgICAgICAgICAgICAgICRtb2RlbCA9ICdCbG9nUG9zdHMnOw0KDQogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCR2YXJzWydwb3N0RGF0YSddLT52YWx1ZVsnaWRfcG9zdCddKSkgew0KICAgICAgICAgICAgICAgICAgICAkaWQgPSAkdmFyc1sncG9zdERhdGEnXS0+dmFsdWVbJ2lkX3Bvc3QnXTsNCiAgICAgICAgICAgICAgICAgICAgJGRlc2MgPSBbJ2Rlc2NyaXB0aW9uJyA9PiAmJHZhcnNbJ3Bvc3REYXRhJ10tPnZhbHVlWydwb3N0X2NvbnRlbnQnXV07DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgY2FzZSAncHJlc3RhYmxvZ2Jsb2cnOg0KICAgICAgICAgICAgY2FzZSAncHJlc3RhYmxvZycgLiBzdHJ0b2xvd2VyKENvbmZpZ3VyYXRpb246OmdldCgncHJlc3RhYmxvZ191cmxibG9nJykpID09PSAkZnJvbnQ6DQogICAgICAgICAgICAgICAgJG1vZGVsID0gJ05ld3NDbGFzcyc7DQogICAgICAgICAgICAgICAgJG5ld3MgPSBDbG9zdXJlOjpiaW5kKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5uZXdzOw0KICAgICAgICAgICAgICAgIH0sICRjb250cm9sbGVyLCBzdHJfcmVwbGFjZSgnT3ZlcnJpZGUnLCAnJywgZ2V0X2NsYXNzKCRjb250cm9sbGVyKSkpLT5fX2ludm9rZSgpOw0KDQogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCRuZXdzLT5pZCkpIHsNCiAgICAgICAgICAgICAgICAgICAgJGlkID0gJG5ld3MtPmlkOw0KDQogICAgICAgICAgICAgICAgICAgIGlmIChpc3NldCgkdmFyc1sndHBsX3VuaXF1ZSddKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGRlc2MgPSBbJ2Rlc2NyaXB0aW9uJyA9PiAmJHZhcnNbJ3RwbF91bmlxdWUnXS0+dmFsdWVdOw0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgJGRlc2MgPSBbJ2Rlc2NyaXB0aW9uJyA9PiAmJG5ld3MtPmNvbnRlbnRdOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgY2FzZSAnaGlibG9ncG9zdGRldGFpbHMnOg0KICAgICAgICAgICAgICAgICRtb2RlbCA9ICdIaUJsb2dQb3N0JzsNCg0KICAgICAgICAgICAgICAgIGlmIChpc3NldCgkdmFyc1sncG9zdCddLT52YWx1ZVsnaWRfcG9zdCddKSkgew0KICAgICAgICAgICAgICAgICAgICAkaWQgPSAkdmFyc1sncG9zdCddLT52YWx1ZVsnaWRfcG9zdCddOw0KICAgICAgICAgICAgICAgICAgICAkZGVzYyA9ICYkdmFyc1sncG9zdCddLT52YWx1ZTsNCg0KICAgICAgICAgICAgICAgICAgICBpZiAoVG9vbHM6OmdldElzc2V0KCdhZHRva2VuJykgJiYgc2VsZjo6aGFzQWRtaW5Ub2tlbignQWRtaW5Nb2R1bGVzJykpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG92ZXJyaWRlIHBvc3Qgc3RhdHVzIGZvciBwcmV2aWV3DQogICAgICAgICAgICAgICAgICAgICAgICAkdmFyc1sncG9zdCddLT52YWx1ZVsnZW5hYmxlZCddID0gMTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIGNhc2UgJ3R2Y21zYmxvZ3NpbmdsZSc6DQogICAgICAgICAgICAgICAgJG1vZGVsID0gJ1R2Y21zUG9zdHNDbGFzcyc7DQoNCiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJHZhcnNbJ3R2Y21zYmxvZ3Bvc3QnXS0+dmFsdWVbJ2lkX3R2Y21zcG9zdHMnXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgJGlkID0gJHZhcnNbJ3R2Y21zYmxvZ3Bvc3QnXS0+dmFsdWVbJ2lkX3R2Y21zcG9zdHMnXTsNCiAgICAgICAgICAgICAgICAgICAgJGRlc2MgPSBbJ2Rlc2NyaXB0aW9uJyA9PiAmJHZhcnNbJ3R2Y21zYmxvZ3Bvc3QnXS0+dmFsdWVbJ3Bvc3RfY29udGVudCddXTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICBjYXNlICdwbV9hZHZhbmNlZHNlYXJjaDRzZWFyY2hyZXN1bHRzJzoNCiAgICAgICAgICAgICAgICAkbW9kZWwgPSAnY2F0ZWdvcnknOw0KDQogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCR2YXJzWyRtb2RlbF0tPnZhbHVlWydpZCddKSkgew0KICAgICAgICAgICAgICAgICAgICAkaWQgPSAkdmFyc1skbW9kZWxdLT52YWx1ZVsnaWQnXTsNCiAgICAgICAgICAgICAgICAgICAgJGRlc2MgPSAmJHZhcnNbJG1vZGVsXS0+dmFsdWU7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKGlzc2V0KCRpZCkpIHsNCiAgICAgICAgICAgIC8vIEluaXQgdGhlIElEDQogICAgICAgICAgICBpZiAoJHVpZF9wcmV2aWV3ICYmICR1aWRfcHJldmlldy0+aWQgPT0gJGlkICYmICR1aWRfcHJldmlldy0+aWRfdHlwZSA9PT0gQ0VcVUlkOjpnZXRUeXBlSWQoJG1vZGVsKSkgew0KICAgICAgICAgICAgICAgIENFXFVJZDo6JF9JRCA9ICR1aWRfcHJldmlldzsNCiAgICAgICAgICAgICAgICAkZGVzY1snZGVzY3JpcHRpb24nXSA9IENFXGFwcGx5X2ZpbHRlcnMoJ3RoZV9jb250ZW50JywgJGRlc2NbJ2Rlc2NyaXB0aW9uJ10pOw0KICAgICAgICAgICAgfSBlbHNlaWYgKCFDRVxVSWQ6OiRfSUQgfHwgaW5fYXJyYXkoQ0VcVUlkOjokX0lELT5pZF90eXBlLCBbQ0VcVUlkOjpDT05URU5ULCBDRVxVSWQ6OlRIRU1FLCBDRVxVSWQ6OlRFTVBMQVRFXSkpIHsNCiAgICAgICAgICAgICAgICBDRVxVSWQ6OiRfSUQgPSBuZXcgQ0VcVUlkKCRpZCwgQ0VcVUlkOjpnZXRUeXBlSWQoJG1vZGVsKSwgJGlkX2xhbmcsICRpZF9zaG9wKTsNCiAgICAgICAgICAgICAgICAkZGVzY1snZGVzY3JpcHRpb24nXSA9ICRjZS0+ZnJvbnRlbmQtPmdldEJ1aWxkZXJDb250ZW50KENFXFVJZDo6JF9JRCkgPzogJGRlc2NbJ2Rlc2NyaXB0aW9uJ107DQogICAgICAgICAgICB9DQogICAgICAgICAgICBDRVxVSWQ6OiRfSUQgJiYgJHRoaXMtPmFkZEJvZHlDbGFzc2VzKCdlbGVtZW50b3ItcGFnZScsIENFXFVJZDo6JF9JRC0+dG9EZWZhdWx0KCkpOw0KICAgICAgICAgICAgLy8gZXRzX2Jsb2cgJiB5YmNfYmxvZyA0LjQuOSsgZml4DQogICAgICAgICAgICBpc3NldCgkYmxvZ19jb250ZW50KSAmJiAkYmxvZ19jb250ZW50ID0gc3RyX3JlcGxhY2UoJzwhLS1DRS1QT1NULS0+JywgJGRlc2NbJ2Rlc2NyaXB0aW9uJ10sICRibG9nX2NvbnRlbnQpOw0KICAgICAgICB9DQoNCiAgICAgICAgLy8gQWpheCByZW5kZXIgd2lkZ2V0cyAmIHRhZ3MNCiAgICAgICAgaWYgKCR1aWRfcHJldmlldyAmJiAkcmVuZGVyID0gVG9vbHM6OmdldFZhbHVlKCdyZW5kZXInKSkgew0KICAgICAgICAgICAgKCRyZXNwb25zZSA9ICd3aWRnZXQnID09PSAkcmVuZGVyDQogICAgICAgICAgICAgICAgPyAkY2UtPndpZGdldHNfbWFuYWdlci0+YWpheFJlbmRlcldpZGdldCgpDQogICAgICAgICAgICAgICAgOiAkY2UtPmR5bmFtaWNfdGFncy0+YWpheFJlbmRlclRhZ3MoKQ0KICAgICAgICAgICAgKSAmJiBodHRwX3Jlc3BvbnNlX2NvZGUoMjAwKTsNCg0KICAgICAgICAgICAgZXhpdChqc29uX2VuY29kZSgkcmVzcG9uc2UpKTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8vIFRoZW1lIEJ1aWxkZXINCiAgICAgICAgJHRoZW1lID0gWw0KICAgICAgICAgICAgJ2hlYWRlcicgPT4gQ29uZmlndXJhdGlvbjo6Z2V0KCdDRV9IRUFERVInKSwNCiAgICAgICAgICAgICdmb290ZXInID0+IENvbmZpZ3VyYXRpb246OmdldCgnQ0VfRk9PVEVSJyksDQogICAgICAgIF07DQogICAgICAgICRwYWdlcyA9IFsNCiAgICAgICAgICAgICdpbmRleCcgPT4gJ3BhZ2UtaW5kZXgnLA0KICAgICAgICAgICAgJ2NvbnRhY3QnID0+ICdwYWdlLWNvbnRhY3QnLA0KICAgICAgICAgICAgJ2Vycm9ycy80MDQnID0+ICdwYWdlLW5vdC1mb3VuZCcsDQogICAgICAgICAgICAnY2F0YWxvZy9wcm9kdWN0JyA9PiAncHJvZHVjdCcsDQogICAgICAgICAgICAnY2F0YWxvZy9saXN0aW5nL2NhdGVnb3J5JyA9PiAnbGlzdGluZy1jYXRlZ29yeScsDQogICAgICAgICAgICAnY2F0YWxvZy9saXN0aW5nL21hbnVmYWN0dXJlcicgPT4gJ2xpc3RpbmctbWFudWZhY3R1cmVyJywNCiAgICAgICAgICAgICdjYXRhbG9nL2xpc3RpbmcvcHJpY2VzLWRyb3AnID0+ICdsaXN0aW5nLXByaWNlcy1kcm9wJywNCiAgICAgICAgICAgICdjYXRhbG9nL2xpc3RpbmcvbmV3LXByb2R1Y3RzJyA9PiAnbGlzdGluZy1uZXctcHJvZHVjdHMnLA0KICAgICAgICAgICAgJ2NhdGFsb2cvbGlzdGluZy9iZXN0LXNhbGVzJyA9PiAnbGlzdGluZy1iZXN0LXNhbGVzJywNCiAgICAgICAgICAgICdjYXRhbG9nL2xpc3Rpbmcvc2VhcmNoJyA9PiAnbGlzdGluZy1zZWFyY2gnLA0KICAgICAgICBdOw0KICAgICAgICAgICAgICAgZm9yZWFjaCAoJHBhZ2VzIGFzICR0cGwgPT4gJGRvY190eXBlKSB7DQogICAgICAgICAgICBpZiAoc2VsZjo6JHRlbXBsYXRlID09PSAkdHBsKSB7ICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIGlmKCRkb2NfdHlwZT09InByb2R1Y3QiKXsNCiAgICAgICAgICAgICAgICAgICAgJGlkcHJvZCA9IChpbnQpVG9vbHM6OmdldFZhbHVlKCdpZF9wcm9kdWN0Jyk7DQogICAgICAgICAgICAgICAgICAgICRwcm9kdWN0ID0gbmV3IFByb2R1Y3QoJGlkcHJvZCk7DQogICAgICAgICAgICAgICAgICAgICRza2F0ZV9jYXRlZ29yaWVzID0gWzY2LCAxMjBdOyAvLyBTa2F0ZWJvYXJkcywgRXZvbHZlIExhYnMNCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIGlmIChpbl9hcnJheSgkcHJvZHVjdC0+aWRfY2F0ZWdvcnlfZGVmYXVsdCwgJHNrYXRlX2NhdGVnb3JpZXMpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAvLyBTa2F0ZSAtIHbDqXJpZmllciBzaSBDRSBhY3RpZiBwb3VyIGRlc2NyaXB0aW9uDQogICAgICAgICAgICAgICAgICAgICAgICAkY2VfYWN0aXZlID0gRGI6OmdldEluc3RhbmNlKCktPmdldFZhbHVlKA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTRUxFQ1QgdmFsdWUgRlJPTSAiLl9EQl9QUkVGSVhfLiJjZV9tZXRhIFdIRVJFIGlkID0gJyIuJGlkcHJvZC4iMDMwMTAxJyBBTkQgbmFtZSA9ICdfZWxlbWVudG9yX2VkaXRfbW9kZSciDQogICAgICAgICAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRjZV9hY3RpdmUgPT0gJ2J1aWxkZXInKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ0UgYWN0aWYg4oaSIHRow6htZSBwYXIgZMOpZmF1dA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGVtZVskZG9jX3R5cGVdID0gQ29uZmlndXJhdGlvbjo6Z2V0KHNlbGY6OmdldFRoZW1lVmFyTmFtZSgkZG9jX3R5cGUpKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ0UgaW5hY3RpZiDihpIgdGjDqG1lIDEzIChIVE1MIG5hdGlmLCBibG9jIGFjaGF0IGVuIGJhcykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGhlbWVbJGRvY190eXBlXSA9IDEzOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgLy8gUGFzIHVuIHNrYXRlIOKGkiB0aMOobWUgcGFyIGTDqWZhdXQgKGFjY2Vzc29pcmVzKQ0KICAgICAgICAgICAgICAgICAgICAgICAgJHRoZW1lWyRkb2NfdHlwZV0gPSBDb25maWd1cmF0aW9uOjpnZXQoc2VsZjo6Z2V0VGhlbWVWYXJOYW1lKCRkb2NfdHlwZSkpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIH1lbHNleyAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICR0aGVtZVskZG9jX3R5cGVdID0gQ29uZmlndXJhdGlvbjo6Z2V0KHNlbGY6OmdldFRoZW1lVmFyTmFtZSgkZG9jX3R5cGUpKTsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgICR1aWQgPSBDRVxVSWQ6OiRfSUQ7DQoNCiAgICAgICAgaWYgKCR1aWRfcHJldmlldyAmJiAoQ0VcVUlkOjpUSEVNRSA9PT0gJHVpZF9wcmV2aWV3LT5pZF90eXBlIHx8IENFXFVJZDo6VEVNUExBVEUgPT09ICR1aWRfcHJldmlldy0+aWRfdHlwZSkpIHsNCiAgICAgICAgICAgIENFXFVJZDo6JF9JRCA9ICR1aWRfcHJldmlldzsNCiAgICAgICAgICAgICRwcmV2aWV3ID0gQ0VcYXBwbHlfZmlsdGVycygndGhlX2NvbnRlbnQnLCAnJyk7DQogICAgICAgICAgICAkdHlwZV9wcmV2aWV3ID0gJGNlLT5kb2N1bWVudHMtPmdldERvY0ZvckZyb250ZW5kKCR1aWRfcHJldmlldyktPmdldFRlbXBsYXRlVHlwZSgpOw0KICAgICAgICAgICAgJ2xpc3Rpbmctbm8tcmVzdWx0cycgPT09ICR0eXBlX3ByZXZpZXcgJiYgQ29uZmlndXJhdGlvbjo6c2V0KCdDRV9MSVNUSU5HX05PX1JFU1VMVFMnLCAkdWlkX3ByZXZpZXctPmlkKTsNCiAgICAgICAgICAgICdsaXN0aW5nLXBhZ2UnID09PSAkdHlwZV9wcmV2aWV3ICYmICR0eXBlX3ByZXZpZXcgPSAibGlzdGluZy17JGNvbnRyb2xsZXItPnBocF9zZWxmfSI7DQogICAgICAgICAgICAkdGhpcy0+Y29udGV4dC0+c21hcnR5LT5hc3NpZ24oc2VsZjo6Z2V0VGhlbWVWYXJOYW1lKCR0eXBlX3ByZXZpZXcpLCAkcHJldmlldyk7DQogICAgICAgICAgICB1bnNldCgkZGVzYyk7DQoNCiAgICAgICAgICAgIGlmIChzdHJwb3MoJHR5cGVfcHJldmlldywgJ3BhZ2UtJykgPT09IDApIHsNCiAgICAgICAgICAgICAgICAvLyBTdGF0aWMgcGFnZXMNCiAgICAgICAgICAgICAgICAkdWlkID0gQ0VcVUlkOjokX0lEOw0KICAgICAgICAgICAgICAgICRkZXNjID0gWydkZXNjcmlwdGlvbicgPT4gJiRwcmV2aWV3XTsNCg0KICAgICAgICAgICAgICAgIENFXGFkZF9hY3Rpb24oJ3dwX2hlYWQnLCAncHJpbnRfb2dfaW1hZ2UnKTsNCiAgICAgICAgICAgIH0gZWxzZWlmICgnaGVhZGVyJyAhPT0gJHR5cGVfcHJldmlldyAmJiAnZm9vdGVyJyAhPT0gJHR5cGVfcHJldmlldykgew0KICAgICAgICAgICAgICAgIC8vIFByb2R1Y3Qgb3IgTGlzdGluZyB0ZW1wbGF0ZXMNCiAgICAgICAgICAgICAgICAkZGVzYyA9IFsnZGVzY3JpcHRpb24nID0+ICYkcHJldmlld107DQoNCiAgICAgICAgICAgICAgICBpZiAoJ3Byb2R1Y3QtcXVpY2stdmlldycgPT09ICR0eXBlX3ByZXZpZXcpIHsNCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmNvbnRleHQtPnNtYXJ0eS0+YXNzaWduKCdDRV9QUk9EVUNUX1FVSUNLX1ZJRVdfSUQnLCAkdWlkX3ByZXZpZXctPmlkKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpbl9hcnJheSgkdHlwZV9wcmV2aWV3LCAkcGFnZXMpICYmICR0aGlzLT5hZGRCb2R5Q2xhc3NlcygnY2UtdGhlbWUnLCAkdWlkX3ByZXZpZXctPmlkKTsNCiAgICAgICAgICAgIHVuc2V0KCR0aGVtZVskdHlwZV9wcmV2aWV3XSk7DQogICAgICAgIH0NCg0KICAgICAgICBpZiAoaXNzZXQoJHBhZ2VzW3NlbGY6OiR0ZW1wbGF0ZV0pICYmICFlbXB0eSgkdGhlbWVbJHBhZ2VzW3NlbGY6OiR0ZW1wbGF0ZV1dKSAmJiAobmV3IENFVGhlbWUoJHRoZW1lWyRkb2NfdHlwZV0sICRpZF9sYW5nLCAkaWRfc2hvcCkpLT5hY3RpdmUpIHsNCiAgICAgICAgICAgICRkb2NfdHlwZSA9ICRwYWdlc1tzZWxmOjokdGVtcGxhdGVdOw0KICAgICAgICAgICAgQ0VcVUlkOjokX0lEID0gbmV3IENFXFVJZCgkdGhlbWVbJGRvY190eXBlXSwgQ0VcVUlkOjpUSEVNRSwgJGlkX2xhbmcsICRpZF9zaG9wKTsNCiAgICAgICAgICAgICR0aGlzLT5jb250ZXh0LT5zbWFydHktPmFzc2lnbigkdGhlbWVfdmFyID0gc2VsZjo6Z2V0VGhlbWVWYXJOYW1lKCRkb2NfdHlwZSksICRjZS0+ZnJvbnRlbmQtPmdldEJ1aWxkZXJDb250ZW50KENFXFVJZDo6JF9JRCkpOw0KICAgICAgICAgICAgLy8gU2V0ICRkZXNjIG9ubHkgaWYgbm90IHByb2R1Y3QgbWluaWF0dXJlIC8gcXVpY2t2aWV3DQogICAgICAgICAgICBpZiAoZW1wdHkoJHR5cGVfcHJldmlldykgfHwgc3RycG9zKCR0eXBlX3ByZXZpZXcsICdwcm9kdWN0LScpICE9PSAwKSB7DQogICAgICAgICAgICAgICAgdW5zZXQoJGRlc2MpOw0KICAgICAgICAgICAgICAgICRkZXNjID0gWydkZXNjcmlwdGlvbicgPT4gJiR2YXJzWyR0aGVtZV92YXJdLT52YWx1ZV07DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoaW5fYXJyYXkoc2VsZjo6JHRlbXBsYXRlLCBbJ2luZGV4JywgJ2NvbnRhY3QnLCAnZXJyb3JzLzQwNCddKSkgew0KICAgICAgICAgICAgICAgICR1aWQgPSBDRVxVSWQ6OiRfSUQ7DQogICAgICAgICAgICAgICAgQ0VcYWRkX2FjdGlvbignd3BfaGVhZCcsICdwcmludF9vZ19pbWFnZScpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJHRoaXMtPmFkZEJvZHlDbGFzc2VzKCdjZS10aGVtZScsIENFXFVJZDo6JF9JRC0+aWQpOw0KICAgICAgICAgICAgdW5zZXQoJHRoZW1lWyRkb2NfdHlwZV0pOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKGVtcHR5KCRwYXJhbXNbJ2NvbnRlbnRfb25seSddKSAmJiBzZWxmOjokbGF5b3V0ID0gQ0VcYXBwbHlfZmlsdGVycygndGVtcGxhdGVfaW5jbHVkZScsIHNlbGY6OiRsYXlvdXQpKSB7DQogICAgICAgICAgICAkYm9keV9jbGFzc2VzID0gJiR2YXJzWydwYWdlJ10tPnZhbHVlWydib2R5X2NsYXNzZXMnXTsNCiAgICAgICAgICAgICRib2R5X2NsYXNzZXNbYmFzZW5hbWUoc2VsZjo6JGxheW91dCwgJy50cGwnKV0gPSAxOw0KDQogICAgICAgICAgICBpZiAoaXNzZXQoJHBhcmFtc1snZGVmYXVsdF9sYXlvdXQnXSkpIHsNCiAgICAgICAgICAgICAgICB1bnNldCgkYm9keV9jbGFzc2VzW2Jhc2VuYW1lKCRwYXJhbXNbJ2RlZmF1bHRfbGF5b3V0J10sICcudHBsJyldKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIGlmIChzdHJycG9zKHNlbGY6OiRsYXlvdXQsICdsYXlvdXQtY2FudmFzJykgIT09IGZhbHNlKSB7DQogICAgICAgICAgICBpc3NldCgkZGVzYykgJiYgJHRoaXMtPmNvbnRleHQtPnNtYXJ0eS0+YXNzaWduKCdjZV9kZXNjJywgJGRlc2MpOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgZm9yZWFjaCAoJHRoZW1lIGFzICRkb2NfdHlwZSA9PiAkaWRfY2VfdGhlbWUpIHsNCiAgICAgICAgICAgICAgICBpZiAoIShuZXcgQ0VUaGVtZSgkaWRfY2VfdGhlbWUsICRpZF9sYW5nLCAkaWRfc2hvcCkpLT5hY3RpdmUpIHsNCiAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIENFXFVJZDo6JF9JRCA9IG5ldyBDRVxVSWQoJGlkX2NlX3RoZW1lLCBDRVxVSWQ6OlRIRU1FLCAkaWRfbGFuZywgJGlkX3Nob3ApOw0KICAgICAgICAgICAgICAgICRpZF9jZV90aGVtZSAmJiAkdGhpcy0+Y29udGV4dC0+c21hcnR5LT5hc3NpZ24oc2VsZjo6Z2V0VGhlbWVWYXJOYW1lKCRkb2NfdHlwZSksICRjZS0+ZnJvbnRlbmQtPmdldEJ1aWxkZXJDb250ZW50KENFXFVJZDo6JF9JRCkpOw0KDQogICAgICAgICAgICAgICAgaWYgKCdmb290ZXInID09PSAkZG9jX3R5cGUgJiYgJGlkX2NlX3RoZW1lICYmIG1ldGhvZF9leGlzdHMoJHdpc2hsaXN0ID0gTW9kdWxlOjpnZXRJbnN0YW5jZUJ5TmFtZSgnYmxvY2t3aXNobGlzdCcpID86ICcnLCAnaG9va0Rpc3BsYXlGb290ZXInKSAmJiAkd2lzaGxpc3QtPmFjdGl2ZSkgew0KICAgICAgICAgICAgICAgICAgICAvLyBXaXNobGlzdCBmaXggZm9yIG1pc3NpbmcgZGlzcGxheUZvb3RlciBob29rDQogICAgICAgICAgICAgICAgICAgIGVtcHR5KCR3aXNobGlzdC0+c21hcnR5LT50cGxfdmFyc1snYWRkVXJsJ10pICYmICR2YXJzWydDRV9GT09URVInXS0+dmFsdWUgLj0gJHdpc2hsaXN0LT5ob29rRGlzcGxheUZvb3RlcihbXSk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIENFXFVJZDo6JF9JRCA9ICR1aWQ7DQoNCiAgICAgICAgcmV0dXJuIHNlbGY6OiRsYXlvdXQ7DQogICAgfQ0KDQogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGFkZEJvZHlDbGFzc2VzKCRjbGFzcywgJGlkKQ0KICAgIHsNCiAgICAgICAgJGJvZHlfY2xhc3NlcyA9ICYkdGhpcy0+Y29udGV4dC0+c21hcnR5LT50cGxfdmFyc1sncGFnZSddLT52YWx1ZVsnYm9keV9jbGFzc2VzJ107DQogICAgICAgICRib2R5X2NsYXNzZXNbJGNsYXNzXSA9IDE7DQogICAgICAgICRib2R5X2NsYXNzZXNbIiRjbGFzcy0kaWQiXSA9IDE7DQogICAgfQ0KDQogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGRpc3BsYXlNYWludGVuYW5jZVBhZ2UoKQ0KICAgIHsNCiAgICAgICAgQ29uZmlndXJhdGlvbjo6c2V0KCdQU19TSE9QX0VOQUJMRScsIGZhbHNlKTsNCiAgICAgICAgQ29uZmlndXJhdGlvbjo6c2V0KCdQU19NQUlOVEVOQU5DRV9JUCcsICcnKTsNCiAgICAgICAgQ29uZmlndXJhdGlvbjo6c2V0KCdQU19NQUlOVEVOQU5DRV9BTExPV19BRE1JTlMnLCBmYWxzZSk7DQoNCiAgICAgICAgJGRpc3BsYXlNYWludGVuYW5jZVBhZ2UgPSBuZXcgUmVmbGVjdGlvbk1ldGhvZCgkdGhpcy0+Y29udGV4dC0+Y29udHJvbGxlciwgJ2Rpc3BsYXlNYWludGVuYW5jZVBhZ2UnKTsNCiAgICAgICAgJGRpc3BsYXlNYWludGVuYW5jZVBhZ2UtPnNldEFjY2Vzc2libGUodHJ1ZSk7DQogICAgICAgICRkaXNwbGF5TWFpbnRlbmFuY2VQYWdlLT5pbnZva2UoJHRoaXMtPmNvbnRleHQtPmNvbnRyb2xsZXIpOw0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBob29rRGlzcGxheU1haW50ZW5hbmNlKCRwYXJhbXMgPSBbXSkNCiAgICB7DQogICAgICAgIGlmIChzZWxmOjpnZXRQcmV2aWV3VUlkKGZhbHNlKSkgew0KICAgICAgICAgICAgaHR0cF9yZXNwb25zZV9jb2RlKDIwMCk7DQogICAgICAgICAgICBoZWFkZXJfcmVtb3ZlKCdSZXRyeS1BZnRlcicpOw0KICAgICAgICB9DQoNCiAgICAgICAgQ0VcYWRkX2ZpbHRlcigndGhlX2NvbnRlbnQnLCBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAkdWlkID0gQ0VcZ2V0X3RoZV9JRCgpOw0KICAgICAgICAgICAgJHRoaXMtPmNvbnRleHQtPnNtYXJ0eS0+YXNzaWduKCdjZV9jb250ZW50JywgbmV3IENFQ29udGVudCgkdWlkLT5pZCwgJHVpZC0+aWRfbGFuZywgJHVpZC0+aWRfc2hvcCkpOw0KDQogICAgICAgICAgICBDRVxyZW1vdmVfYWxsX2ZpbHRlcnMoJ3RoZV9jb250ZW50Jyk7DQogICAgICAgIH0sIDApOw0KDQogICAgICAgIGlmICghJG1haW50ZW5hbmNlID0gJHRoaXMtPnJlbmRlckNvbnRlbnQoJ2Rpc3BsYXlNYWludGVuYW5jZScpKSB7DQogICAgICAgICAgICByZXR1cm47DQogICAgICAgIH0NCiAgICAgICAgc2VsZjo6JGNvbnRyb2xsZXItPnJlZ2lzdGVySmF2YXNjcmlwdCgnanF1ZXJ5JywgJ2pzL2pxdWVyeS9qcXVlcnktMS4xMS4wLm1pbi5qcycpOw0KDQogICAgICAgICR0aGlzLT5jb250ZXh0LT5zbWFydHktPmFzc2lnbihbDQogICAgICAgICAgICAnaXNvX2NvZGUnID0+ICR0aGlzLT5jb250ZXh0LT5sYW5ndWFnZS0+aXNvX2NvZGUsDQogICAgICAgICAgICAnZmF2aWNvbicgPT4gQ29uZmlndXJhdGlvbjo6Z2V0KCdQU19GQVZJQ09OJyksDQogICAgICAgICAgICAnZmF2aWNvbl91cGRhdGVfdGltZScgPT4gQ29uZmlndXJhdGlvbjo6Z2V0KCdQU19JTUdfVVBEQVRFX1RJTUUnKSwNCiAgICAgICAgXSk7DQoNCiAgICAgICAgcmV0dXJuICRtYWludGVuYW5jZTsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gaG9va0Rpc3BsYXlIb21lKCkNCiAgICB7DQogICAgICAgIHJldHVybiAkdGhpcy0+cmVuZGVyQ29udGVudCgnZGlzcGxheUhvbWUnKTsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gaG9va0Rpc3BsYXlGb290ZXJQcm9kdWN0KCRwYXJhbXMgPSBbXSkNCiAgICB7DQogICAgICAgIHJldHVybiAkdGhpcy0+cmVuZGVyQ29udGVudCgnZGlzcGxheUZvb3RlclByb2R1Y3QnKTsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jYWxsKCRtZXRob2QsICRhcmdzKQ0KICAgIHsNCiAgICAgICAgaWYgKHN0cmlwb3MoJG1ldGhvZCwgJ2hvb2tBY3Rpb25PYmplY3QnKSA9PT0gMCAmJiBzdHJpcG9zKCRtZXRob2QsICdEZWxldGVBZnRlcicpICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgJHRoaXMtPmhvb2tBY3Rpb25PYmplY3REZWxldGVBZnRlciguLi4kYXJncyk7DQogICAgICAgIH0gZWxzZWlmIChzdHJpcG9zKCRtZXRob2QsICdob29rJykgPT09IDApIHsNCiAgICAgICAgICAgIC8vIHJlbmRlciBob29rIG9ubHkgYWZ0ZXIgSGVhZGVyIGluaXQNCiAgICAgICAgICAgIGlmIChudWxsICE9PSBzZWxmOjokbGF5b3V0KSB7DQogICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5yZW5kZXJDb250ZW50KHN1YnN0cigkbWV0aG9kLCA0KSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICB0aHJvdyBuZXcgRXhjZXB0aW9uKCdDYW4gbm90IGZpbmQgbWV0aG9kOiAnIC4gJG1ldGhvZCk7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVuZGVyQ29udGVudCgkaG9va19uYW1lKQ0KICAgIHsNCiAgICAgICAgaWYgKCEkaG9va19uYW1lKSB7DQogICAgICAgICAgICByZXR1cm47DQogICAgICAgIH0NCiAgICAgICAgJG91dCA9ICcnOw0KICAgICAgICAkaWRfcHJvZHVjdCA9IFRvb2xzOjpnZXRWYWx1ZSgnaWRfcHJvZHVjdCcsIDApOw0KICAgICAgICAkcHJldmlldyA9IHNlbGY6OmdldFByZXZpZXdVSWQoZmFsc2UpOw0KICAgICAgICAkcm93cyA9IENFQ29udGVudDo6Z2V0SWRzQnlIb29rKCRob29rX25hbWUsICR0aGlzLT5jb250ZXh0LT5sYW5ndWFnZS0+aWQsICR0aGlzLT5jb250ZXh0LT5zaG9wLT5pZCwgJGlkX3Byb2R1Y3QsICRwcmV2aWV3KTsNCg0KICAgICAgICBpZiAoJHJvd3MpIHsNCiAgICAgICAgICAgICR1aWQgPSBDRVxVSWQ6OiRfSUQ7DQoNCiAgICAgICAgICAgIGZvcmVhY2ggKCRyb3dzIGFzICYkcm93KSB7DQogICAgICAgICAgICAgICAgJGlkX3Nob3AgPSAkcHJldmlldyAmJiAkcm93WydpZCddID09ICRwcmV2aWV3LT5pZCAmJiBDRVxVSWQ6OkNPTlRFTlQgPT09ICRwcmV2aWV3LT5pZF90eXBlDQogICAgICAgICAgICAgICAgICAgID8gJHByZXZpZXctPmlkX3Nob3ANCiAgICAgICAgICAgICAgICAgICAgOiAkdGhpcy0+Y29udGV4dC0+c2hvcC0+aWQ7DQogICAgICAgICAgICAgICAgQ0VcVUlkOjokX0lEID0gbmV3IENFXFVJZCgkcm93WydpZCddLCBDRVxVSWQ6OkNPTlRFTlQsICR0aGlzLT5jb250ZXh0LT5sYW5ndWFnZS0+aWQsICRpZF9zaG9wKTsNCg0KICAgICAgICAgICAgICAgIGlmICgnZGlzcGxheU1haW50ZW5hbmNlJyA9PT0gJGhvb2tfbmFtZSAmJiAhJHByZXZpZXcgJiYgQ0VcZ2V0X3Bvc3RfbWV0YShDRVxVSWQ6OiRfSUQsICdfZWxlbWVudG9yX2VkaXRfbW9kZScsIHRydWUpKSB7DQogICAgICAgICAgICAgICAgICAgICR0aGlzLT5ob29rQWN0aW9uRnJvbnRDb250cm9sbGVySW5pdEFmdGVyKCk7DQoNCiAgICAgICAgICAgICAgICAgICAgQ0VcUGx1Z2luOjppbnN0YW5jZSgpOw0KICAgICAgICAgICAgICAgICAgICBDRVxkaWRfYWN0aW9uKCd0ZW1wbGF0ZV9yZWRpcmVjdCcpIHx8IENFXGRvX2FjdGlvbigndGVtcGxhdGVfcmVkaXJlY3QnKTsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAkb3V0IC49IENFXGFwcGx5X2ZpbHRlcnMoJ3RoZV9jb250ZW50JywgJycpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgQ0VcVUlkOjokX0lEID0gJHVpZDsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiAkb3V0Ow0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiByZWdpc3Rlckhvb2soJGhvb2tfbmFtZSwgJHNob3BfbGlzdCA9IG51bGwsICRwb3NpdGlvbiA9IG51bGwpDQogICAgew0KICAgICAgICAkcmVzID0gcGFyZW50OjpyZWdpc3Rlckhvb2soJGhvb2tfbmFtZSwgJHNob3BfbGlzdCk7DQoNCiAgICAgICAgaWYgKCRyZXMgJiYgaXNfbnVtZXJpYygkcG9zaXRpb24pKSB7DQogICAgICAgICAgICAkdGhpcy0+dXBkYXRlUG9zaXRpb24oSG9vazo6Z2V0SWRCeU5hbWUoJGhvb2tfbmFtZSksIDAsICRwb3NpdGlvbik7DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gJHJlczsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gdW5yZWdpc3Rlckhvb2soJGhvb2tfaWQsICRzaG9wX2xpc3QgPSBudWxsKQ0KICAgIHsNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICRyZXN1bHQgPSBIb29rOjp1bnJlZ2lzdGVySG9vaygkdGhpcywgJGhvb2tfaWQsICRzaG9wX2xpc3QpOw0KICAgICAgICB9IGNhdGNoIChQcmVzdGFTaG9wT2JqZWN0Tm90Rm91bmRFeGNlcHRpb24gJGV4KSB7DQogICAgICAgICAgICAkcmVzdWx0ID0gRGI6OmdldEluc3RhbmNlKCktPmRlbGV0ZSgNCiAgICAgICAgICAgICAgICAnaG9va19tb2R1bGUnLA0KICAgICAgICAgICAgICAgICdgaWRfbW9kdWxlYCA9ICcgLiAoaW50KSAkdGhpcy0+aWQgLiAnIEFORCBgaWRfaG9va2AgPSAnIC4gKGludCkgJGhvb2tfaWQgLg0KICAgICAgICAgICAgICAgICgkc2hvcF9saXN0ID8gJyBBTkQgYGlkX3Nob3BgIElOICgnIC4gaW1wbG9kZSgnLCcsIGFycmF5X21hcCgnaW50dmFsJywgJHNob3BfbGlzdCkpIC4gJyknIDogJycpDQogICAgICAgICAgICApOw0KICAgICAgICAgICAgJHRoaXMtPmNsZWFuUG9zaXRpb25zKCRob29rX2lkLCAkc2hvcF9saXN0KTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiAkcmVzdWx0Ow0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBob29rQ0VUZW1wbGF0ZSgkcGFyYW1zID0gW10pDQogICAgew0KICAgICAgICBpZiAoIWVtcHR5KCRwYXJhbXNbJ2lkJ10pKSB7DQogICAgICAgICAgICAkdWlkID0gbmV3IENFXFVJZCgkcGFyYW1zWydpZCddLCBDRVxVSWQ6OlRFTVBMQVRFKTsNCg0KICAgICAgICAgICAgcmV0dXJuIENFXFBsdWdpbjo6JGluc3RhbmNlLT5mcm9udGVuZC0+Z2V0QnVpbGRlckNvbnRlbnRGb3JEaXNwbGF5KCR1aWQpOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIGhvb2tBY3Rpb25DbGVhckNvbXBpbGVDYWNoZSgpDQogICAgew0KICAgICAgICBEYjo6Z2V0SW5zdGFuY2UoKS0+ZGVsZXRlKCdjZV9tZXRhJywgImBuYW1lYCA9ICdfY2VfZWxlbWVudF9jYWNoZSciKTsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gaG9va0FjdGlvbk9iamVjdERlbGV0ZUFmdGVyKCRwYXJhbXMgPSBbXSkNCiAgICB7DQogICAgICAgICRtb2RlbCA9IGdldF9jbGFzcygkcGFyYW1zWydvYmplY3QnXSk7DQogICAgICAgICRpZF90eXBlID0gQ0VcVUlkOjpnZXRUeXBlSWQoJG1vZGVsKTsNCiAgICAgICAgJGlkX3N0YXJ0ID0gc3ByaW50ZignJWQlMDJkJywgJHBhcmFtc1snb2JqZWN0J10tPmlkLCAkaWRfdHlwZSk7DQoNCiAgICAgICAgLy8gRGVsZXRlIG1ldGEgZGF0YQ0KICAgICAgICBEYjo6Z2V0SW5zdGFuY2UoKS0+ZGVsZXRlKCdjZV9tZXRhJywgImBpZGAgTElLRSAneyRpZF9zdGFydH1fX19fJyIpOw0KDQogICAgICAgIC8vIERlbGV0ZSBDU1MgZmlsZXMNCiAgICAgICAgYXJyYXlfbWFwKCd1bmxpbmsnLCBnbG9iKF9DRV9QQVRIXyAuICJ2aWV3cy9jc3MvY2UvJGlkX3N0YXJ0Pz8/Py5jc3MiLCBHTE9CX05PU09SVCkpOw0KDQogICAgICAgIC8vIERlbGV0ZSByZXZpc2lvbnMNCiAgICAgICAgJGlkX3R5cGUgJiYgQ0VSZXZpc2lvbjo6ZGVsZXRlQWxsQnlQYXJlbnQoInskaWRfc3RhcnR9X19fXyIpOw0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBob29rQWN0aW9uT2JqZWN0UHJvZHVjdERlbGV0ZUFmdGVyKCRwYXJhbXMgPSBbXSkNCiAgICB7DQogICAgICAgICRpZF9wcm9kdWN0ID0gJHBhcmFtc1snb2JqZWN0J10tPmlkOw0KICAgICAgICAkdGhpcy0+aG9va0FjdGlvbk9iamVjdERlbGV0ZUFmdGVyKCRwYXJhbXMpOw0KDQogICAgICAgIC8vIERlbGV0ZSBkaXNwbGF5Rm9vdGVyUHJvZHVjdCBjb250ZW50DQogICAgICAgIGlmICgkaWRfY2VfY29udGVudCA9IENFQ29udGVudDo6Z2V0Rm9vdGVyUHJvZHVjdElkKCRpZF9wcm9kdWN0KSkgew0KICAgICAgICAgICAgJGNvbnRlbnQgPSBuZXcgQ0VDb250ZW50KCRpZF9jZV9jb250ZW50KTsNCiAgICAgICAgICAgIFZhbGlkYXRlOjppc0xvYWRlZE9iamVjdCgkY29udGVudCkgJiYgJGNvbnRlbnQtPmRlbGV0ZSgpOw0KICAgICAgICB9DQogICAgICAgIC8vIFJlbW92ZSBkZWxldGVkIHByb2R1Y3QgSUQgZnJvbSBwYWdlIHNldHRpbmdzDQogICAgICAgIERiOjpnZXRJbnN0YW5jZSgpLT5leGVjdXRlKA0KICAgICAgICAgICAgJ1VQREFURSAnIC4gX0RCX1BSRUZJWF8gLiAnY2VfbWV0YSAnIC4NCiAgICAgICAgICAgICdTRVQgYHZhbHVlYCA9IFJFUExBQ0UoYHZhbHVlYCwgXCcicHJldmlld19pZCI6IicgLiAoaW50KSAkaWRfcHJvZHVjdCAuICciXCcsIFwnInByZXZpZXdfaWQiOiIiXCcpICcgLg0KICAgICAgICAgICAgJ1dIRVJFIGBuYW1lYCA9ICJfZWxlbWVudG9yX3BhZ2Vfc2V0dGluZ3MiIEFORCBgdmFsdWVgIExJS0UgXCclInByZXZpZXdfaWQiOiInIC4gKGludCkgJGlkX3Byb2R1Y3QgLiAnIiVcJycNCiAgICAgICAgKTsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gaG9va0FjdGlvblByb2R1Y3RBZGQoJHBhcmFtcyA9IFtdKQ0KICAgIHsNCiAgICAgICAgaWYgKGlzc2V0KCRwYXJhbXNbJ3JlcXVlc3QnXSkgJiYgJHBhcmFtc1sncmVxdWVzdCddLT5hdHRyaWJ1dGVzLT5nZXQoJ2FjdGlvbicpID09PSAnZHVwbGljYXRlJykgew0KICAgICAgICAgICAgJGlkX3Byb2R1Y3RfZHVwbGljYXRlID0gKGludCkgJHBhcmFtc1sncmVxdWVzdCddLT5hdHRyaWJ1dGVzLT5nZXQoJ2lkJyk7DQogICAgICAgIH0gZWxzZWlmIChUb29sczo6Z2V0SXNzZXQoJ2R1cGxpY2F0ZXByb2R1Y3QnKSkgew0KICAgICAgICAgICAgJGlkX3Byb2R1Y3RfZHVwbGljYXRlID0gKGludCkgVG9vbHM6OmdldFZhbHVlKCdpZF9wcm9kdWN0Jyk7DQogICAgICAgIH0NCg0KICAgICAgICBpZiAoaXNzZXQoJGlkX3Byb2R1Y3RfZHVwbGljYXRlLCAkcGFyYW1zWydpZF9wcm9kdWN0J10pICYmICRidWlsdF9saXN0ID0gQ0VcVUlkOjpnZXRCdWlsdExpc3QoJGlkX3Byb2R1Y3RfZHVwbGljYXRlLCBDRVxVSWQ6OlBST0RVQ1QpKSB7DQogICAgICAgICAgICAkZGIgPSBDRVxQbHVnaW46Omluc3RhbmNlKCktPmRiOw0KICAgICAgICAgICAgJHVpZCA9IG5ldyBDRVxVSWQoJHBhcmFtc1snaWRfcHJvZHVjdCddLCBDRVxVSWQ6OlBST0RVQ1QsIDApOw0KDQogICAgICAgICAgICBmb3JlYWNoICgkYnVpbHRfbGlzdCBhcyAkaWRfc2hvcCA9PiAmJGxhbmdzKSB7DQogICAgICAgICAgICAgICAgZm9yZWFjaCAoJGxhbmdzIGFzICRpZF9sYW5nID0+ICR1aWRfZnJvbSkgew0KICAgICAgICAgICAgICAgICAgICAkdWlkLT5pZF9sYW5nID0gJGlkX2xhbmc7DQogICAgICAgICAgICAgICAgICAgICR1aWQtPmlkX3Nob3AgPSAkaWRfc2hvcDsNCg0KICAgICAgICAgICAgICAgICAgICAkZGItPmNvcHlFbGVtZW50b3JNZXRhKCR1aWRfZnJvbSwgJHVpZCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIGhvb2tGaWx0ZXJQcm9kdWN0U2VhcmNoKCRwYXJhbXMpDQogICAgew0KICAgICAgICBpZiAoaXNzZXQoJF9SRVFVRVNUWydxJ10pICYmIHByZWdfbWF0Y2hfYWxsKCdgKD86XnwvKShbXi1dKylgJywgJF9SRVFVRVNUWydxJ10sICRmaWx0ZXJzKSkgew0KICAgICAgICAgICAgJGNvbG9ycyA9IENFXEhlbHBlcjo6Z2V0Q29sb3JBdHRyaWJ1dGVHcm91cE5hbWVzKCR0aGlzLT5jb250ZXh0LT5sYW5ndWFnZS0+aWQsICR0aGlzLT5jb250ZXh0LT5zaG9wLT5pZCk7DQoNCiAgICAgICAgICAgIGlmICghYXJyYXlfaW50ZXJzZWN0KGFycmF5X2NvbHVtbigkY29sb3JzLCAnbmFtZScpLCBhcnJheV9tYXAoJ3VybGRlY29kZScsICRmaWx0ZXJzWzFdKSkpIHsNCiAgICAgICAgICAgICAgICByZXR1cm47DQogICAgICAgICAgICB9DQogICAgICAgICAgICBmb3JlYWNoICgkcGFyYW1zWydzZWFyY2hWYXJpYWJsZXMnXVsncHJvZHVjdHMnXSBhcyAkcHJvZHVjdCkgew0KICAgICAgICAgICAgICAgIGlmICghJHByb2R1Y3RbJ2ltYWdlcyddKSB7DQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBmb3JlYWNoICgkcHJvZHVjdFsnaW1hZ2VzJ10gYXMgJGltYWdlKSB7DQogICAgICAgICAgICAgICAgICAgIGlmICgkcHJvZHVjdFsnY292ZXJfaW1hZ2VfaWQnXSA9PT0gJGltYWdlWydpZF9pbWFnZSddKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZSAyOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRwcm9kdWN0Wydjb3ZlciddID0gJHByb2R1Y3RbJ2ltYWdlcyddWzBdOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KDQogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNoZWNrVGhlbWVDaGFuZ2UoKQ0KICAgIHsNCiAgICAgICAgaWYgKCEkdGhlbWUgPSBDb25maWd1cmF0aW9uOjpnZXQoJ0NFX1RIRU1FJykpIHsNCiAgICAgICAgICAgIENvbmZpZ3VyYXRpb246OnVwZGF0ZVZhbHVlKCdDRV9USEVNRScsIF9USEVNRV9OQU1FXyk7DQogICAgICAgIH0gZWxzZWlmIChfVEhFTUVfTkFNRV8gIT09ICR0aGVtZSkgew0KICAgICAgICAgICAgcmVxdWlyZV9vbmNlIF9DRV9QQVRIXyAuICdjbGFzc2VzL0NFRGF0YWJhc2UucGhwJzsNCg0KICAgICAgICAgICAgLy8gcmVnaXN0ZXIgbWlzc2luZyBob29rcyBhZnRlciBjaGFuZ2luZyB0aGVtZQ0KICAgICAgICAgICAgZm9yZWFjaCAoQ0VEYXRhYmFzZTo6Z2V0SG9va3MoKSBhcyAkaG9vaykgew0KICAgICAgICAgICAgICAgICR0aGlzLT5yZWdpc3Rlckhvb2soJGhvb2ssIG51bGwsIDEpOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgQ29uZmlndXJhdGlvbjo6dXBkYXRlVmFsdWUoJ0NFX1RIRU1FJywgX1RIRU1FX05BTUVfKTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0UHJldmlld1VJZCgkZW1iZWQgPSB0cnVlKQ0KICAgIHsNCiAgICAgICAgc3RhdGljICRyZXMgPSBudWxsOw0KDQogICAgICAgIGlmIChudWxsID09PSAkcmVzICYmICRyZXMgPSBpc3NldCgkX1JFUVVFU1RbJ3ByZXZpZXdfaWQnXSkgJiYgJHVpZCA9IENFXFVJZDo6cGFyc2UoJF9SRVFVRVNUWydwcmV2aWV3X2lkJ10pKSB7DQogICAgICAgICAgICAkcmVzID0gc2VsZjo6aGFzQWRtaW5Ub2tlbigkdWlkLT5nZXRBZG1pbkNvbnRyb2xsZXIoKSkgPyAkdWlkIDogZmFsc2U7DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gISRlbWJlZCB8fCBUb29sczo6Z2V0SXNzZXQoJ3ZlcicpID8gJHJlcyA6IGZhbHNlOw0KICAgIH0NCg0KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaGFzQWRtaW5Ub2tlbigkdGFiKQ0KICAgIHsNCiAgICAgICAgJGtleSA9ICdBZG1pbkJsb2dQb3N0cycgPT09ICR0YWIgPyAnYmxvZ3Rva2VuJyA6IChzdHJwb3MoJHRhYiwgJ0FkbWluQ0UnKSA9PT0gMCA/ICdjZXRva2VuJyA6ICdhZHRva2VuJyk7DQoNCiAgICAgICAgcmV0dXJuIChpbnQpIF9QU19WRVJTSU9OXyA8IDkNCiAgICAgICAgICAgID8gVG9vbHM6OmdldFZhbHVlKCRrZXkpID09PSBUb29sczo6Z2V0QWRtaW5Ub2tlbigkdGFiIC4gKGludCkgVGFiOjpnZXRJZEZyb21DbGFzc05hbWUoJHRhYikgLiAoaW50KSBUb29sczo6Z2V0VmFsdWUoJ2lkX2VtcGxveWVlJykpDQogICAgICAgICAgICA6IHNlbGY6OiRjb250cm9sbGVyLT5nZXRDb250YWluZXIoKS0+Z2V0KCdQcmVzdGFTaG9wQnVuZGxlXFNlY3VyaXR5XEFkbWluXExlZ2FjeUFkbWluVG9rZW5WYWxpZGF0b3InKQ0KICAgICAgICAgICAgICAgIC0+aXNUb2tlblZhbGlkKCR0YWIsIChpbnQpIFRvb2xzOjpnZXRWYWx1ZSgnaWRfZW1wbG95ZWUnKSwgVG9vbHM6OmdldFZhbHVlKCRrZXkpKTsNCiAgICB9DQoNCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFRoZW1lVmFyTmFtZSgkZG9jX3R5cGUpDQogICAgew0KICAgICAgICBpZiAoJ3Byb2R1Y3QnID09PSAkZG9jX3R5cGUgJiYgVG9vbHM6OmdldFZhbHVlKCdxdWlja3ZpZXcnKSkgew0KICAgICAgICAgICAgcmV0dXJuICdDRV9QUk9EVUNUX1FVSUNLX1ZJRVcnOw0KICAgICAgICB9IGVsc2VpZiAoJ3Byb2R1Y3QnID09PSAkZG9jX3R5cGUgJiYgVG9vbHM6OmdldFZhbHVlKCdtaW5pYXR1cmUnKSkgew0KICAgICAgICAgICAgcmV0dXJuICdDRV9QUk9EVUNUX01JTklBVFVSRSc7DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gJ0NFXycgLiBzdHJ0b3VwcGVyKHN0cl9yZXBsYWNlKCctJywgJ18nLCAkZG9jX3R5cGUpKTsNCiAgICB9DQoNCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzTWFpbnRlbmFuY2UoKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuICFDb25maWd1cmF0aW9uOjpnZXQoJ1BTX1NIT1BfRU5BQkxFJykNCiAgICAgICAgICAgICYmICEoQ29uZmlndXJhdGlvbjo6Z2V0KCdQU19NQUlOVEVOQU5DRV9BTExPV19BRE1JTlMnKSAmJiAoaW50KSAobmV3IENvb2tpZSgncHNBZG1pbicpKS0+aWRfZW1wbG95ZWUpDQogICAgICAgICAgICAmJiAhaW5fYXJyYXkoVG9vbHM6OmdldFJlbW90ZUFkZHIoKSwgYXJyYXlfbWFwKHZlcnNpb25fY29tcGFyZShfUFNfVkVSU0lPTl8sICcxLjcuOCcsICc8JykgPyAnc3RydmFsJyA6ICd0cmltJywgZXhwbG9kZSgnLCcsIENvbmZpZ3VyYXRpb246OmdldCgnUFNfTUFJTlRFTkFOQ0VfSVAnKSkpKTsNCiAgICB9DQp9DQo= Comment Remplacer la Batterie de votre Longboard Électrique GTR | Guide Étape par Étape

Guide de Remplacement de la Batterie pour le Skateboard Électrique GTR Bamboo

Catégories : Guides

Nous allons vous montrer comment remplacer la batterie de votre longboard électrique GTR. Le remplacement de la batterie est essentiel pour maintenir les performances optimales de votre planche. Suivez ces étapes pour un remplacement facile et sécurisé.

Pourquoi Remplacer la Batterie de votre Skate Électrique ?

  • Autonomie : Une nouvelle batterie assure une autonomie maximale pour vos trajets.
  • Performance : Maintient les performances de votre skateboard à un niveau optimal.
  • Sécurité : Évitez les risques liés à une batteire usée ou défectueuse.

Outils Nécessaires pour le Remplacement de Batterie

  • Y-Tool (Fourni avec votre skateboard)
  • Clé Allen (Fournie avec votre skateboard ou une clé Allen 1/8)

Étapes pour Remplacer la Batterie du Skateboard Électrique GTR Bamboo

1. Préparation

Rassemblez les outils

Assurez-vous d'avoir votre Y-Tool et la clé Allen

Éteignez le skateboard

Avant de commencer, assurez-vous que votre skateboard est éteint pour des raisons de sécurité.

2. Retirer les vis du deck

Dévisser les vis : Utilisez la clé Allen pour dévisser toutes les vis du deck.

Retirer la dernière vis : Commencer par dévisser la vis montrée sur la photo du haut. Gardez la dernière vis, située au centre et sur l’avant du deck (montrée sur la photo du bas), pour la fin. Cela permet de maintenir la batterie en place jusqu'à ce que vous soyez prêt à la retirer.

Photo montrant les vis deck à dévisser

3. Retirer la batterie

Photo d'un homme tenant un connecteur principale de batterie

Soutenir la batterie : Placez votre main sous la batterie en retirant la dernière vis pour éviter qu'elle ne tombe.

Déconnecter le connecteur principal : Tirez uniformément sur le connecteur principal pour le débrancher. Évitez de tirer sur les fils des connecteurs pour ne pas les endommager.

4. Installer la Nouvelle Batterie sur le GTR Bamboo

Aligner les connecteurs : Assurez-vous que les flèches et les logos Evolve sur les connecteurs sont alignés (du même côté).

Connecter la nouvelle batterie : Branchez la nouvelle batterie et vérifiez que la lumière bleue s'allume pour confirmer la connexion correcte.

Photo d'un homme effectuant le branchement des connecteurs

5. Remontage de la Batterie sur le Deck

Photo montrant la cavité et le trou de la 1ère vis à positionner

Positionner la batterie : Glissez le fil du connecteur de la nouvelle batterie dans la cavité prévue.

Visser la première vis : Commencez par visser une vis (voir sur la photo) pour maintenir la batterie en place.

Aligner les trous : La deuxième vis à serrer est celle à l’avant du deck au milieu (C’est la dernière vis que vous avez dévissée lorsque vous avez enlevé l’ancienne batterie). Assurez-vous que les trous sont alignés avant de visser la deuxième vis.

Serrer les vis : Serrez les vis fermement mais sans forcer pour éviter d'endommager le deck.

6. Vérification finale

Test de fonctionnement : Allumez le skateboard pour vérifier que tout fonctionne correctement.

Sécurité : Assurez-vous que toutes les vis sont bien serrées et que la batterie est bien en place.

En suivant ces étapes, vous pouvez facilement remplacer la batterie de votre longboard électrique GTR Bamboo, garantissant ainsi des performances optimales et une autonomie maximale.

Pour plus de détails sur le remplacement de la batterie, consultez notre vidéo YouTube.https://www.youtube.com/watch?v=4LN4IaJKoHI

Partager ce contenu

Ajouter un commentaire