PCM_Report/default.json

190 lines
54 KiB
JSON

{
"influx": {
"url": "http://10.0.5.232:8086",
"org": "MEASCON",
"token": "JPZMq2UP5ORhLq8CfsPbawl6k0MSDlJmEwMJ2uvR_TXqW5bUOWIYBQOSXkGNzDqOU3rnuGpIxGxrB_mlAF-EEw==",
"username": "PCM",
"password": "1842moon",
"landingUrl": "http://10.0.5.232:8086/orgs/b2542eeb72a3e614/dashboards/0f8ab8a328fe9000?lower=now%28%29+-+1h",
"bucket": "PCM",
"measurement": "PCM_Measurement"
},
"placeholders": {
"scriptTable1": {
"type": "scriptTable",
"label": "scriptTable1",
"title": "",
"value": "",
"dbQuery": "",
"chart": {}
},
"text1": {
"type": "text",
"label": "text1",
"title": "",
"value": "@current_date",
"dbQuery": "",
"chart": {}
},
"text2": {
"type": "text",
"label": "text2",
"title": "",
"value": "@process_no",
"dbQuery": "",
"chart": {}
},
"text3": {
"type": "text",
"label": "text3",
"title": "",
"value": "@part_no",
"dbQuery": "",
"chart": {}
},
"text4": {
"type": "text",
"label": "text4",
"title": "",
"value": "@executor",
"dbQuery": "",
"chart": {}
}
},
"tcpModbus": {
"ip": "10.0.5.232",
"port": 5020
},
"devices": [
{
"deviceName": "温度传感器",
"alarmRegister": 0,
"alarmType": "holding",
"thresholds": [
{
"name": "温度上限",
"register": 0,
"regType": "input",
"value": 29.0
},
{
"name": "温度下线",
"register": 1,
"regType": "input",
"value": 0.0
},
{
"name": "是否报警",
"register": 0,
"regType": "coil",
"value": 0.0
},
{
"name": "报警信息",
"register": 0,
"regType": "holding",
"value": 0.0
}
]
},
{
"deviceName": "测试开关",
"alarmRegister": 0,
"alarmType": "holding",
"thresholds": [
{
"name": "开始测试",
"register": 0,
"regType": "coil",
"value": 0.0
},
{
"name": "结束测试",
"register": 1,
"regType": "coil",
"value": 0.0
}
]
}
],
"db": {
"engine": "sqlserver",
"host": "localhost",
"port": 1433,
"database": "",
"username": "",
"password": ""
},
"experimentProcess": {
"headers": [
"实验内容",
"实验步骤",
"工况(档位)",
"输入转速",
"转速阈值"
],
"rows": [
[
"性能试验",
"10",
"3",
"981",
"20"
],
[
"性能试验",
"20",
"4",
"1906",
"10"
],
[
"性能试验",
"30",
"5",
"2096",
"10"
],
[
"耐久试验",
"40.1",
"1",
"476",
"10"
],
[
"耐久试验",
"40.1",
"2",
"731",
"10"
],
[
"耐久试验",
"40.1",
"2",
"731",
"10"
]
],
"scriptFile": "IyEvdXNyL2Jpbi9lbnYgcHl0aG9uDQojIC0qLSBjb2Rpbmc6IHV0Zi04IC0qLQ0KIiIiDQrmtYvor5Xpg6jkvY3muKnluqborrDlvZXooajnlJ/miJDohJrmnKzvvIjluKbotJ/ovb3nirbmgIHnrZvpgInvvIkNCg0KLSDlv73nlaXkvKDlhaXnmoQgZXhwZXJpbWVudFByb2Nlc3PvvIzoh6rooYzmnoTpgKDlm7rlrprnu5PmnoTnmoTmlbDmja4NCi0g5LuOIEluZmx1eERCIOafpeivouavj+S4qua1i+ivlemDqOS9jeWcqOWQhOaXtumXtOeCueeahOeerOaXtua4qeW6puWAvA0KLSDmt7vliqAgbG9hZF9zdGF0dXMgPSAxIOeahOetm+mAieadoeS7tu+8jOehruS/neWPquWcqOecn+ato+mHh+mbhuaVsOaNruaXtuiOt+WPlua4qeW6pg0KLSDovpPlh7rmoLzlvI/kuI7lupTnlKjkuK3nmoQgc2NyaXB0VGFibGUg5Y2g5L2N56ym5YW85a65DQotIOm7mOiupOaKiiB7c2NyaXB0VGFibGUxfSDmlL7lnKgi5rWL6K+V6YOo5L2NIuaJgOWcqOeahOWNleWFg+agvA0KDQrnjq/looPlj5jph4/vvJoNCiAgICBUQUJMRV9UT0tFTiAgICAgICAgIOebruagh+WNoOS9jeespu+8jOm7mOiupCBzY3JpcHRUYWJsZTENCiAgICBUQUJMRV9TVEFSVF9ST1cgICAgIOWGmeWFpei1t+Wni+ihjOWBj+enu++8jOm7mOiupCAwDQogICAgVEFCTEVfU1RBUlRfQ09MICAgICDlhpnlhaXotbflp4vliJflgY/np7vvvIzpu5jorqQgMA0KICAgIFRBQkxFX1RJTUVfU0xPVFMgICAg6YCX5Y+35YiG6ZqU55qE5pe26Ze05Yi75bqm77yM6buY6K6kICIwLjVoLDFoLDEuNWgsMmgsMi41aCwzaCwzLjVoIg0KICAgIFRBQkxFX01PVE9SX1NQRUVEICAg55S15py66L2s6YCf5qCH562+77yM6buY6K6kICI5ODBSUE0iDQogICAgRVhQRVJJTUVOVF9TVEFSVCAgICAg5a6e6aqM5byA5aeL5pe26Ze077yISVNPIDg2MDEg5qC85byP77yM5aaCIDIwMjQtMDEtMDFUMTA6MDA6MDBa77yJDQogICAgRVhQRVJJTUVOVF9FTkQgICAgICAg5a6e6aqM57uT5p2f5pe26Ze077yISVNPIDg2MDEg5qC85byP77yJDQogICAgSU5GTFVYX1VSTCAgICAgICAgICAgSW5mbHV4REIgVVJMDQogICAgSU5GTFVYX09SRyAgICAgICAgICAgSW5mbHV4REIg57uE57uHDQogICAgSU5GTFVYX1RPS0VOICAgICAgICAgSW5mbHV4REIg5Luk54mMDQogICAgSU5GTFVYX0JVQ0tFVCAgICAgICAgSW5mbHV4REIg5qG25ZCN77yM6buY6K6kIFBDTQ0KICAgIElORkxVWF9NRUFTVVJFTUVOVCAgIEluZmx1eERCIOa1i+mHj+WQje+8jOm7mOiupCBQQ01fTWVhc3VyZW1lbnQNCiIiIg0KDQpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFubm90YXRpb25zDQoNCmltcG9ydCBqc29uDQppbXBvcnQgbG9nZ2luZw0KaW1wb3J0IG9zDQppbXBvcnQgc3lzDQpmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZSwgdGltZWRlbHRhDQpmcm9tIHR5cGluZyBpbXBvcnQgQW55LCBEaWN0LCBMaXN0LCBPcHRpb25hbA0KDQoNCkxPR0dFUiA9IGxvZ2dpbmcuZ2V0TG9nZ2VyKF9fbmFtZV9fKQ0KDQoNCmRlZiBfbWFza19zZWNyZXQodmFsdWU6IE9wdGlvbmFsW3N0cl0pIC0+IHN0cjoNCiAgICAiIiLmjqnnoIHmlY/mhJ/kv6Hmga8iIiINCiAgICBpZiBub3QgdmFsdWU6DQogICAgICAgIHJldHVybiAiPGVtcHR5PiINCiAgICBpZiBsZW4odmFsdWUpIDw9IDg6DQogICAgICAgIHJldHVybiAiKiIgKiBsZW4odmFsdWUpDQogICAgcmV0dXJuIHZhbHVlWzo0XSArICIqIiAqIChsZW4odmFsdWUpIC0gOCkgKyB2YWx1ZVstNDpdDQoNCg0KZGVmIF9zZXR1cF9sb2dnaW5nKCkgLT4gTm9uZToNCiAgICAiIiLorr7nva7ml6Xlv5ciIiINCiAgICBsb2dfbGV2ZWxfc3RyID0gb3MuZW52aXJvbi5nZXQoIlRBQkxFX0xPR19MRVZFTCIsICJERUJVRyIpLnVwcGVyKCkNCiAgICBsb2dfbGV2ZWwgPSBnZXRhdHRyKGxvZ2dpbmcsIGxvZ19sZXZlbF9zdHIsIGxvZ2dpbmcuREVCVUcpDQogICAgDQogICAgIyDphY3nva7moLnml6Xlv5forrDlvZXlmagNCiAgICBsb2dnaW5nLmJhc2ljQ29uZmlnKA0KICAgICAgICBsZXZlbD1sb2dfbGV2ZWwsDQogICAgICAgIGZvcm1hdD0nJShhc2N0aW1lKXMgWyUobGV2ZWxuYW1lKXNdICUobmFtZSlzOiAlKG1lc3NhZ2UpcycsDQogICAgICAgIGhhbmRsZXJzPVsNCiAgICAgICAgICAgIGxvZ2dpbmcuU3RyZWFtSGFuZGxlcihzeXMuc3RkZXJyKQ0KICAgICAgICBdDQogICAgKQ0KICAgIA0KICAgICMg5aaC5p6c5oyH5a6a5LqG5pel5b+X5paH5Lu277yM5re75Yqg5paH5Lu25aSE55CG5ZmoDQogICAgbG9nX2ZpbGUgPSBvcy5lbnZpcm9uLmdldCgiVEFCTEVfTE9HX0ZJTEUiLCAiIikuc3RyaXAoKQ0KICAgIGlmIGxvZ19maWxlOg0KICAgICAgICB0cnk6DQogICAgICAgICAgICBmaWxlX2hhbmRsZXIgPSBsb2dnaW5nLkZpbGVIYW5kbGVyKGxvZ19maWxlLCBlbmNvZGluZz0ndXRmLTgnKQ0KICAgICAgICAgICAgZmlsZV9oYW5kbGVyLnNldExldmVsKGxvZ19sZXZlbCkNCiAgICAgICAgICAgIGZpbGVfaGFuZGxlci5zZXRGb3JtYXR0ZXIobG9nZ2luZy5Gb3JtYXR0ZXIoDQogICAgICAgICAgICAgICAgJyUoYXNjdGltZSlzIFslKGxldmVsbmFtZSlzXSAlKG5hbWUpczogJShtZXNzYWdlKXMnDQogICAgICAgICAgICApKQ0KICAgICAgICAgICAgbG9nZ2luZy5nZXRMb2dnZXIoKS5hZGRIYW5kbGVyKGZpbGVfaGFuZGxlcikNCiAgICAgICAgICAgIExPR0dFUi5pbmZvKCLml6Xlv5fmlofku7blt7LphY3nva46ICVzIiwgbG9nX2ZpbGUpDQogICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToNCiAgICAgICAgICAgIExPR0dFUi53YXJuaW5nKCLphY3nva7ml6Xlv5fmlofku7blpLHotKU6ICVzIiwgZSkNCg0KDQpkZWYgX2dldF9pbmZsdXhfY29uZmlnKCkgLT4gRGljdFtzdHIsIHN0cl06DQogICAgIiIi6I635Y+WSW5mbHV4RELphY3nva4iIiINCiAgICBjb25maWcgPSB7DQogICAgICAgICd1cmwnOiBvcy5lbnZpcm9uLmdldCgiSU5GTFVYX1VSTCIsICIiKS5zdHJpcCgpLA0KICAgICAgICAnb3JnJzogb3MuZW52aXJvbi5nZXQoIklORkxVWF9PUkciLCAiIikuc3RyaXAoKSwNCiAgICAgICAgJ3Rva2VuJzogb3MuZW52aXJvbi5nZXQoIklORkxVWF9UT0tFTiIsICIiKS5zdHJpcCgpLA0KICAgICAgICAnYnVja2V0Jzogb3MuZW52aXJvbi5nZXQoIklORkxVWF9CVUNLRVQiLCAiUENNIikuc3RyaXAoKSwNCiAgICAgICAgJ21lYXN1cmVtZW50Jzogb3MuZW52aXJvbi5nZXQoIklORkxVWF9NRUFTVVJFTUVOVCIsICJQQ01fTWVhc3VyZW1lbnQiKS5zdHJpcCgpLA0KICAgIH0NCiAgICANCiAgICBMT0dHRVIuZGVidWcoDQogICAgICAgICJJbmZsdXhEQumFjee9rjogdXJsPSVzIG9yZz0lcyB0b2tlbj0lcyBidWNrZXQ9JXMgbWVhc3VyZW1lbnQ9JXMiLA0KICAgICAgICBjb25maWdbJ3VybCddIG9yICI8ZW1wdHk+IiwNCiAgICAgICAgY29uZmlnWydvcmcnXSBvciAiPGVtcHR5PiIsDQogICAgICAgIF9tYXNrX3NlY3JldChjb25maWdbJ3Rva2VuJ10pLA0KICAgICAgICBjb25maWdbJ2J1Y2tldCddLA0KICAgICAgICBjb25maWdbJ21lYXN1cmVtZW50J10sDQogICAgKQ0KICAgIA0KICAgIHJldHVybiBjb25maWcNCg0KDQpkZWYgX3BhcnNlX2V4cGVyaW1lbnRfdGltZXMoKSAtPiB0dXBsZVtPcHRpb25hbFtkYXRldGltZV0sIE9wdGlvbmFsW2RhdGV0aW1lXV06DQogICAgIiIi6Kej5p6Q5a6e6aqM5pe26Ze077yM5YmN56uv5Lyg5YWl5pys5Zyw5pe26Ze077yM6L2s5o2i5Li6VVRD55So5LqOSW5mbHV4RELmn6Xor6IiIiINCiAgICBmcm9tIGRhdGV0aW1lIGltcG9ydCB0aW1lem9uZSwgdGltZWRlbHRhDQogICAgDQogICAgc3RhcnRfc3RyID0gb3MuZW52aXJvbi5nZXQoIkVYUEVSSU1FTlRfU1RBUlQiLCAiIikuc3RyaXAoKQ0KICAgIGVuZF9zdHIgPSBvcy5lbnZpcm9uLmdldCgiRVhQRVJJTUVOVF9FTkQiLCAiIikuc3RyaXAoKQ0KICAgIA0KICAgIExPR0dFUi5kZWJ1Zygi5Y6f5aeL5pe26Ze05a2X56ym5LiyOiBTVEFSVD0lcywgRU5EPSVzIiwgc3RhcnRfc3RyLCBlbmRfc3RyKQ0KICAgIA0KICAgIHN0YXJ0X3RpbWU6IE9wdGlvbmFsW2RhdGV0aW1lXSA9IE5vbmUNCiAgICBlbmRfdGltZTogT3B0aW9uYWxbZGF0ZXRpbWVdID0gTm9uZQ0KICAgIA0KICAgIGlmIHN0YXJ0X3N0cjoNCiAgICAgICAgdHJ5Og0KICAgICAgICAgICAgZm9yIGZtdCBpbiBbIiVZLSVtLSVkVCVIOiVNOiVTIiwgIiVZLSVtLSVkVCVIOiVNOiVTLiVmIl06DQogICAgICAgICAgICAgICAgdHJ5Og0KICAgICAgICAgICAgICAgICAgICBzdGFydF90aW1lID0gZGF0ZXRpbWUuc3RycHRpbWUoc3RhcnRfc3RyLCBmbXQpDQogICAgICAgICAgICAgICAgICAgICMg5pys5Zyw5pe26Ze0LTjlsI/ml7Y9VVRDDQogICAgICAgICAgICAgICAgICAgIHN0YXJ0X3RpbWUgPSBzdGFydF90aW1lIC0gdGltZWRlbHRhKGhvdXJzPTgpDQogICAgICAgICAgICAgICAgICAgIHN0YXJ0X3RpbWUgPSBzdGFydF90aW1lLnJlcGxhY2UodHppbmZvPXRpbWV6b25lLnV0YykNCiAgICAgICAgICAgICAgICAgICAgTE9HR0VSLmRlYnVnKCLop6PmnpBTVEFSVDog5pys5ZywPSVzIOKGkiBVVEM9JXMiLCBzdGFydF9zdHIsIHN0YXJ0X3RpbWUpDQogICAgICAgICAgICAgICAgICAgIGJyZWFrDQogICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6DQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICBpZiBzdGFydF90aW1lIGlzIE5vbmU6DQogICAgICAgICAgICAgICAgTE9HR0VSLndhcm5pbmcoIuaXoOazleino+aekEVYUEVSSU1FTlRfU1RBUlQ6ICVzIiwgc3RhcnRfc3RyKQ0KICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6DQogICAgICAgICAgICBMT0dHRVIuZXJyb3IoIuino+aekEVYUEVSSU1FTlRfU1RBUlTlpLHotKUgJyVzJzogJXMiLCBzdGFydF9zdHIsIGUpDQogICAgDQogICAgaWYgZW5kX3N0cjoNCiAgICAgICAgdHJ5Og0KICAgICAgICAgICAgZm9yIGZtdCBpbiBbIiVZLSVtLSVkVCVIOiVNOiVTIiwgIiVZLSVtLSVkVCVIOiVNOiVTLiVmIl06DQogICAgICAgICAgICAgICAgdHJ5Og0KICAgICAgICAgICAgICAgICAgICBlbmRfdGltZSA9IGRhdGV0aW1lLnN0cnB0aW1lKGVuZF9zdHIsIGZtdCkNCiAgICAgICAgICAgICAgICAgICAgIyDmnKzlnLDml7bpl7QtOOWwj+aXtj1VVEMNCiAgICAgICAgICAgICAgICAgICAgZW5kX3RpbWUgPSBlbmRfdGltZSAtIHRpbWVkZWx0YShob3Vycz04KQ0KICAgICAgICAgICAgICAgICAgICBlbmRfdGltZSA9IGVuZF90aW1lLnJlcGxhY2UodHppbmZvPXRpbWV6b25lLnV0YykNCiAgICAgICAgICAgICAgICAgICAgTE9HR0VSLmRlYnVnKCLop6PmnpBFTkQ6IOacrOWcsD0lcyDihpIgVVRDPSVzIiwgZW5kX3N0ciwgZW5kX3RpbWUpDQogICAgICAgICAgICAgICAgICAgIGJyZWFrDQogICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6DQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICBpZiBlbmRfdGltZSBpcyBOb25lOg0KICAgICAgICAgICAgICAgIExPR0dFUi53YXJuaW5nKCLml6Dms5Xop6PmnpBFWFBFUklNRU5UX0VORDogJXMiLCBlbmRfc3RyKQ0KICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6DQogICAgICAgICAgICBMT0dHRVIuZXJyb3IoIuino+aekEVYUEVSSU1FTlRfRU5E5aSx6LSlICclcyc6ICVzIiwgZW5kX3N0ciwgZSkNCiAgICANCiAgICByZXR1cm4gc3RhcnRfdGltZSwgZW5kX3RpbWUNCg0KDQpkZWYgX3BhcnNlX3RpbWVfc2xvdChzbG90X3N0cjogc3RyKSAtPiBmbG9hdDoNCiAgICAiIiLop6PmnpDml7bpl7Tmp73lrZfnrKbkuLLkuLrlsI/ml7bmlbAiIiINCiAgICBpZiBub3Qgc2xvdF9zdHI6DQogICAgICAgIHJldHVybiAwLjANCiAgICANCiAgICBzbG90X3N0ciA9IHNsb3Rfc3RyLnN0cmlwKCkubG93ZXIoKQ0KICAgIA0KICAgIGlmIHNsb3Rfc3RyLmVuZHN3aXRoKCdoJyk6DQogICAgICAgIHRyeToNCiAgICAgICAgICAgIHJldHVybiBmbG9hdChzbG90X3N0cls6LTFdKQ0KICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoNCiAgICAgICAgICAgIHBhc3MNCiAgICANCiAgICB0cnk6DQogICAgICAgIHJldHVybiBmbG9hdChzbG90X3N0cikNCiAgICBleGNlcHQgVmFsdWVFcnJvcjoNCiAgICAgICAgcGFzcw0KICAgIA0KICAgIHJldHVybiAwLjANCg0KDQpkZWYgX3RpbWVfc2xvdHMoKSAtPiBMaXN0W3N0cl06DQogICAgcmF3ID0gb3MuZW52aXJvbi5nZXQoIlRBQkxFX1RJTUVfU0xPVFMiLCAiIikuc3RyaXAoKQ0KICAgIGlmIG5vdCByYXc6DQogICAgICAgICMg5qC55o2u5Zu+54mH77yM5pe26Ze05Yi75bqm5piv77yaMC41aCwgMWgsIDEuNWgsIDJoLCAyLjVoLCAzaCwgMy41aO+8iDfliJfvvIkNCiAgICAgICAgcmV0dXJuIFsiMC41aCIsICIxaCIsICIxLjVoIiwgIjJoIiwgIjIuNWgiLCAiM2giLCAiMy41aCJdDQogICAgc2xvdHMgPSBbc2xvdC5zdHJpcCgpIGZvciBzbG90IGluIHJhdy5zcGxpdCgiLCIpXQ0KICAgIHJldHVybiBbc2xvdCBmb3Igc2xvdCBpbiBzbG90cyBpZiBzbG90XQ0KDQoNCmRlZiBfZGVmYXVsdF9zZWN0aW9ucygpIC0+IExpc3RbRGljdFtzdHIsIEFueV1dOg0KICAgICMgbmFtZSAtPiByb3dzIHVuZGVybmVhdGjvvIhlbnRyaWVz77yJDQogICAgIyDmr4/kuKogZW50cnkg5a+55bqU5LiA5Liq5rWL6K+V6YOo5L2N77yM6ZyA6KaB5pig5bCE5YiwIEluZmx1eERCIOeahCBmaWVsZCDmiJYgdGFnDQogICAgcmV0dXJuIFsNCiAgICAgICAgeyJuYW1lIjogIuS4u+i9tOaJvyIsICJlbnRyaWVzIjogWw0KICAgICAgICAgICAgeyJsYWJlbCI6ICIjMSIsICJmaWVsZCI6ICLkuLvovbTmib8jMSIsICJmaWx0ZXJzIjogeyJkYXRhX3R5cGUiOiAiTFNEQVEifSwgInJlc3VsdF9rZXkiOiAi5Li76L205om/IzEifSwNCiAgICAgICAgICAgIHsibGFiZWwiOiAiIzIiLCAiZmllbGQiOiAi5Li76L205om/IzIiLCAiZmlsdGVycyI6IHsiZGF0YV90eXBlIjogIkxTREFRIn0sICJyZXN1bHRfa2V5IjogIuS4u+i9tOaJvyMyIn0sDQogICAgICAgICAgICB7ImxhYmVsIjogIiMzIiwgImZpZWxkIjogIuS4u+i9tOaJvyMzIiwgImZpbHRlcnMiOiB7ImRhdGFfdHlwZSI6ICJMU0RBUSJ9LCAicmVzdWx0X2tleSI6ICLkuLvovbTmib8jMyJ9LA0KICAgICAgICAgICAgeyJsYWJlbCI6ICIjNCIsICJmaWVsZCI6ICLkuLvovbTmib8jNCIsICJmaWx0ZXJzIjogeyJkYXRhX3R5cGUiOiAiTFNEQVEifSwgInJlc3VsdF9rZXkiOiAi5Li76L205om/IzQifSwNCiAgICAgICAgXX0sDQogICAgICAgIHsibmFtZSI6ICLljYHlrZflpLQiLCAiZW50cmllcyI6IFsNCiAgICAgICAgICAgIHsibGFiZWwiOiAiIzEiLCAiZmllbGQiOiAi5Y2B5a2X5aS0IzEiLCAiZmlsdGVycyI6IHsiZGF0YV90eXBlIjogIkxTREFRIn0sICJyZXN1bHRfa2V5IjogIuWNgeWtl+WktCMxIn0sDQogICAgICAgICAgICB7ImxhYmVsIjogIiMyIiwgImZpZWxkIjogIuWNgeWtl+WktCMyIiwgImZpbHRlcnMiOiB7ImRhdGFfdHlwZSI6ICJMU0RBUSJ9LCAicmVzdWx0X2tleSI6ICLljYHlrZflpLQjMiJ9LA0KICAgICAgICAgICAgeyJsYWJlbCI6ICIjMyIsICJmaWVsZCI6ICLljYHlrZflpLQjMyIsICJmaWx0ZXJzIjogeyJkYXRhX3R5cGUiOiAiTFNEQVEifSwgInJlc3VsdF9rZXkiOiAi5Y2B5a2X5aS0IzMifSwNCiAgICAgICAgXX0sDQogICAgICAgIHsibmFtZSI6ICLlh4/pgJ/nrrHlsI/ovbTmib8iLCAiZW50cmllcyI6IFsNCiAgICAgICAgICAgIHsibGFiZWwiOiAiIzHvvIjovpPlhaXms5XlhbDnq6/vvIkiLCAiZmllbGQiOiAi5YeP6YCf566x5bCP6L205om/MSIsICJmaWx0ZXJzIjogeyJkYXRhX3R5cGUiOiAiTFNEQVEifSwgInJlc3VsdF9rZXkiOiAi5YeP6YCf566x5bCP6L205om/IzEifSwNCiAgICAgICAgICAgIHsibGFiZWwiOiAiIzIiLCAiZmllbGQiOiAi5YeP6YCf566x5bCP6L205om/IzIiLCAiZmlsdGVycyI6IHsiZGF0YV90eXBlIjogIkxTREFRIn0sICJyZXN1bHRfa2V5IjogIuWHj+mAn+euseWwj+i9tOaJvyMyIn0sDQogICAgICAgIF19LA0KICAgICAgICB7Im5hbWUiOiAi5YeP6YCf566x5aSn6L205om/IiwgImVudHJpZXMiOiBbDQogICAgICAgICAgICB7ImxhYmVsIjogIiMz77yI5aSn56uv55uW56uv77yJIiwgImZpZWxkIjogIuWHj+mAn+euseWkp+i9tOaJvyMzIiwgImZpbHRlcnMiOiB7ImRhdGFfdHlwZSI6ICJMU0RBUSJ9LCAicmVzdWx0X2tleSI6ICLlh4/pgJ/nrrHlpKfovbTmib8jMyJ9LA0KICAgICAgICAgICAgeyJsYWJlbCI6ICIjNCIsICJmaWVsZCI6ICLlh4/pgJ/nrrHlpKfovbTmib8jNCIsICJmaWx0ZXJzIjogeyJkYXRhX3R5cGUiOiAiTFNEQVEifSwgInJlc3VsdF9rZXkiOiAi5YeP6YCf566x5aSn6L205om/IzQifSwNCiAgICAgICAgXX0sDQogICAgICAgIHsibmFtZSI6ICLmtqbmu5HmsrnmuKkiLCAiZW50cmllcyI6IFsNCiAgICAgICAgICAgIHsibGFiZWwiOiAiIiwgImZpZWxkIjogIm1lYW4iLCAiZmlsdGVycyI6IHsiZGF0YV90eXBlIjogIua2pua7keayuea4qSJ9LCAicmVzdWx0X2tleSI6ICLmtqbmu5HmsrnmuKkifSwNCiAgICAgICAgXX0sDQogICAgICAgIHsibmFtZSI6ICLmtqbmu5HmsrnljosiLCAiZW50cmllcyI6IFsNCiAgICAgICAgICAgIHsibGFiZWwiOiAiKFBzaSkiLCAiZmllbGQiOiAibWVhbiIsICJmaWx0ZXJzIjogeyJkYXRhX3R5cGUiOiAi5ram5ruR5rK55Y6LIn0sICJyZXN1bHRfa2V5IjogIua2pua7keayueWOiyJ9LA0KICAgICAgICBdfSwNCiAgICBdDQoNCmRlZiBfcXVlcnlfbG9hZF9zdGF0dXNfdGltZWxpbmUoDQogICAgc3RhcnRfdGltZTogZGF0ZXRpbWUsDQogICAgZW5kX3RpbWU6IGRhdGV0aW1lLA0KICAgIGluZmx1eF91cmw6IHN0ciwNCiAgICBpbmZsdXhfb3JnOiBzdHIsDQogICAgaW5mbHV4X3Rva2VuOiBzdHIsDQogICAgaW5mbHV4X2J1Y2tldDogc3RyLA0KICAgIGluZmx1eF9tZWFzdXJlbWVudDogc3RyLA0KKSAtPiBMaXN0W0RpY3Rbc3RyLCBBbnldXToNCiAgICAiIiLmn6Xor6LmlbTkuKrlrp7pqozmnJ/pl7TnmoRsb2FkX3N0YXR1c+aXtumXtOe6v+aVsOaNriIiIg0KICAgIHRyeToNCiAgICAgICAgZnJvbSBpbmZsdXhkYl9jbGllbnQgaW1wb3J0IEluZmx1eERCQ2xpZW50DQogICAgICAgIGltcG9ydCBwYW5kYXMgYXMgcGQNCiAgICAgICAgaW1wb3J0IHdhcm5pbmdzDQogICAgICAgIGZyb20gaW5mbHV4ZGJfY2xpZW50LmNsaWVudC53YXJuaW5ncyBpbXBvcnQgTWlzc2luZ1Bpdm90RnVuY3Rpb24NCiAgICBleGNlcHQgSW1wb3J0RXJyb3IgYXMgZToNCiAgICAgICAgTE9HR0VSLmVycm9yKCJJbmZsdXhEQuWuouaIt+err+WvvOWFpeWksei0pTogJXPvvIzor7flronoo4U6IHBpcCBpbnN0YWxsIGluZmx1eGRiLWNsaWVudCBwYW5kYXMiLCBlKQ0KICAgICAgICByZXR1cm4gW10NCg0KICAgIHRyeToNCiAgICAgICAgY2xpZW50ID0gSW5mbHV4REJDbGllbnQodXJsPWluZmx1eF91cmwsIG9yZz1pbmZsdXhfb3JnLCB0b2tlbj1pbmZsdXhfdG9rZW4pDQogICAgICAgIHF1ZXJ5X2FwaSA9IGNsaWVudC5xdWVyeV9hcGkoKQ0KDQogICAgICAgICMg56Gu5L+d5L2/55SoVVRD5pe26Ze05qC85byP5p+l6K+iDQogICAgICAgIHN0YXJ0X3JmYyA9IHN0YXJ0X3RpbWUuc3RyZnRpbWUoJyVZLSVtLSVkVCVIOiVNOiVTWicpDQogICAgICAgIGVuZF9yZmMgPSBlbmRfdGltZS5zdHJmdGltZSgnJVktJW0tJWRUJUg6JU06JVNaJykNCiAgICAgICAgDQogICAgICAgIExPR0dFUi5kZWJ1Zygi5p+l6K+ibG9hZF9zdGF0dXPml7bpl7TojIPlm7Q6ICVzIOWIsCAlcyIsIHN0YXJ0X3JmYywgZW5kX3JmYykNCg0KICAgICAgICBmbHV4ID0gZicnJw0KZnJvbShidWNrZXQ6ICJ7aW5mbHV4X2J1Y2tldH0iKQ0KICB8PiByYW5nZShzdGFydDoge3N0YXJ0X3JmY30sIHN0b3A6IHtlbmRfcmZjfSkNCiAgfD4gZmlsdGVyKGZuOiAocikgPT4gclsiX21lYXN1cmVtZW50Il0gPT0gIntpbmZsdXhfbWVhc3VyZW1lbnR9IikNCiAgfD4gZmlsdGVyKGZuOiAocikgPT4gclsiZGF0YV90eXBlIl0gPT0gIkJyZWFrZXIiKQ0KICB8PiBmaWx0ZXIoZm46IChyKSA9PiByWyJfZmllbGQiXSA9PSAibG9hZF9zdGF0dXMiKQ0KICB8PiBzb3J0KGNvbHVtbnM6IFsiX3RpbWUiXSkNCiAgfD4geWllbGQobmFtZTogImxvYWRfc3RhdHVzX3RpbWVsaW5lIikNCicnJy5zdHJpcCgpDQoNCiAgICAgICAgTE9HR0VSLmRlYnVnKCJMb2FkIHN0YXR1cyB0aW1lbGluZSBxdWVyeTpcbiVzIiwgZmx1eCkNCg0KICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6DQogICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImlnbm9yZSIsIE1pc3NpbmdQaXZvdEZ1bmN0aW9uKQ0KICAgICAgICAgICAgZnJhbWVzID0gcXVlcnlfYXBpLnF1ZXJ5X2RhdGFfZnJhbWUoZmx1eCkNCiAgICAgICAgDQogICAgICAgIGlmIGlzaW5zdGFuY2UoZnJhbWVzLCBsaXN0KToNCiAgICAgICAgICAgIGRmID0gcGQuY29uY2F0KGZyYW1lcywgaWdub3JlX2luZGV4PVRydWUpIGlmIGZyYW1lcyBlbHNlIHBkLkRhdGFGcmFtZSgpDQogICAgICAgIGVsc2U6DQogICAgICAgICAgICBkZiA9IGZyYW1lcw0KDQogICAgICAgIGlmIGRmLmVtcHR5IG9yICdfdmFsdWUnIG5vdCBpbiBkZi5jb2x1bW5zIG9yICdfdGltZScgbm90IGluIGRmLmNvbHVtbnM6DQogICAgICAgICAgICBMT0dHRVIud2FybmluZygiTm8gbG9hZF9zdGF0dXMgdGltZWxpbmUgZGF0YSBmb3VuZCIpDQogICAgICAgICAgICByZXR1cm4gW10NCg0KICAgICAgICAjIOi9rOaNouS4uuaXtumXtOe6v+aVsOaNru+8jOS/neaMgVVUQ+aXtuWMug0KICAgICAgICBmcm9tIGRhdGV0aW1lIGltcG9ydCB0aW1lem9uZQ0KICAgICAgICB0aW1lbGluZSA9IFtdDQogICAgICAgIGZvciBfLCByb3cgaW4gZGYuaXRlcnJvd3MoKToNCiAgICAgICAgICAgIHRpbWVfb2JqID0gcGQudG9fZGF0ZXRpbWUocm93WydfdGltZSddKQ0KICAgICAgICAgICAgIyDnoa7kv53ovazmjaLkuLpVVEPml7bljLrnmoRkYXRldGltZeWvueixoQ0KICAgICAgICAgICAgaWYgaGFzYXR0cih0aW1lX29iaiwgJ3R6X2xvY2FsaXplJyk6DQogICAgICAgICAgICAgICAgaWYgdGltZV9vYmoudHogaXMgTm9uZToNCiAgICAgICAgICAgICAgICAgICAgdGltZV9vYmogPSB0aW1lX29iai50el9sb2NhbGl6ZSh0aW1lem9uZS51dGMpDQogICAgICAgICAgICAgICAgZWxzZToNCiAgICAgICAgICAgICAgICAgICAgdGltZV9vYmogPSB0aW1lX29iai50el9jb252ZXJ0KHRpbWV6b25lLnV0YykNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgaWYgaGFzYXR0cih0aW1lX29iaiwgJ3RvX3B5ZGF0ZXRpbWUnKToNCiAgICAgICAgICAgICAgICB0aW1lX29iaiA9IHRpbWVfb2JqLnRvX3B5ZGF0ZXRpbWUoKQ0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgdGltZWxpbmUuYXBwZW5kKHsNCiAgICAgICAgICAgICAgICAndGltZSc6IHRpbWVfb2JqLA0KICAgICAgICAgICAgICAgICdsb2FkX3N0YXR1cyc6IGZsb2F0KHJvd1snX3ZhbHVlJ10pDQogICAgICAgICAgICB9KQ0KDQogICAgICAgIExPR0dFUi5pbmZvKCJMb2FkIHN0YXR1cyB0aW1lbGluZTogJWQgZGF0YSBwb2ludHMgZnJvbSAlcyB0byAlcyIsIA0KICAgICAgICAgICAgICAgICAgIGxlbih0aW1lbGluZSksIHN0YXJ0X3RpbWUsIGVuZF90aW1lKQ0KICAgICAgICANCiAgICAgICAgIyDosIPor5XvvJrmo4Dmn6Xml7bpl7Tlr7nosaHnsbvlnosNCiAgICAgICAgaWYgdGltZWxpbmU6DQogICAgICAgICAgICBmaXJzdF90aW1lID0gdGltZWxpbmVbMF1bJ3RpbWUnXQ0KICAgICAgICAgICAgTE9HR0VSLmRlYnVnKCJUaW1lbGluZSBmaXJzdCB0aW1lOiAlcyAodHlwZTogJXMsIHR6aW5mbzogJXMpIiwgDQogICAgICAgICAgICAgICAgICAgICAgICBmaXJzdF90aW1lLCB0eXBlKGZpcnN0X3RpbWUpLCBnZXRhdHRyKGZpcnN0X3RpbWUsICd0emluZm8nLCBOb25lKSkNCiAgICAgICAgTE9HR0VSLmRlYnVnKCJzdGFydF90aW1lOiAlcyAodHlwZTogJXMsIHR6aW5mbzogJXMpIiwgDQogICAgICAgICAgICAgICAgICAgIHN0YXJ0X3RpbWUsIHR5cGUoc3RhcnRfdGltZSksIGdldGF0dHIoc3RhcnRfdGltZSwgJ3R6aW5mbycsIE5vbmUpKQ0KICAgICAgICBMT0dHRVIuZGVidWcoImVuZF90aW1lOiAlcyAodHlwZTogJXMsIHR6aW5mbzogJXMpIiwgDQogICAgICAgICAgICAgICAgICAgIGVuZF90aW1lLCB0eXBlKGVuZF90aW1lKSwgZ2V0YXR0cihlbmRfdGltZSwgJ3R6aW5mbycsIE5vbmUpKQ0KICAgICAgICANCiAgICAgICAgcmV0dXJuIHRpbWVsaW5lDQoNCiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6DQogICAgICAgIExPR0dFUi5lcnJvcigiRXJyb3IgcXVlcnlpbmcgbG9hZF9zdGF0dXMgdGltZWxpbmU6ICVzIiwgZSkNCiAgICAgICAgcmV0dXJuIFtdDQogICAgZmluYWxseToNCiAgICAgICAgdHJ5Og0KICAgICAgICAgICAgY2xpZW50LmNsb3NlKCkNCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoNCiAgICAgICAgICAgIHBhc3MNCg0KDQpkZWYgX2NhbGN1bGF0ZV9lZmZlY3RpdmVfdGltZV9wb2ludHMoDQogICAgc3RhcnRfdGltZTogZGF0ZXRpbWUsDQogICAgZW5kX3RpbWU6IGRhdGV0aW1lLA0KICAgIHRpbWVfc2xvdHM6IExpc3Rbc3RyXSwNCiAgICBpbmZsdXhfY29uZmlnOiBEaWN0W3N0ciwgc3RyXQ0KKSAtPiBEaWN0W3N0ciwgT3B0aW9uYWxbZGF0ZXRpbWVdXToNCiAgICAiIiLorqHnrpfln7rkuo7mnInmlYjov5DooYzml7bpl7TntK/orqHnmoTnnJ/lrp7ml7bpl7TngrkiIiINCiAgICANCiAgICAjIDEuIOiOt+WPlmxvYWRfc3RhdHVz5pe26Ze057q/DQogICAgdGltZWxpbmUgPSBfcXVlcnlfbG9hZF9zdGF0dXNfdGltZWxpbmUoDQogICAgICAgIHN0YXJ0X3RpbWUsIGVuZF90aW1lLA0KICAgICAgICBpbmZsdXhfY29uZmlnWyd1cmwnXSwgaW5mbHV4X2NvbmZpZ1snb3JnJ10sIGluZmx1eF9jb25maWdbJ3Rva2VuJ10sDQogICAgICAgIGluZmx1eF9jb25maWdbJ2J1Y2tldCddLCBpbmZsdXhfY29uZmlnWydtZWFzdXJlbWVudCddDQogICAgKQ0KICAgIA0KICAgIGlmIG5vdCB0aW1lbGluZToNCiAgICAgICAgTE9HR0VSLndhcm5pbmcoIk5vIGxvYWRfc3RhdHVzIHRpbWVsaW5lIGRhdGEsIGZhbGxiYWNrIHRvIG9yaWdpbmFsIHRpbWUgY2FsY3VsYXRpb24iKQ0KICAgICAgICAjIOWbnumAgOWIsOWOn+Wni+aXtumXtOiuoeeulw0KICAgICAgICByZXN1bHQgPSB7fQ0KICAgICAgICBmb3Igc2xvdF9zdHIgaW4gdGltZV9zbG90czoNCiAgICAgICAgICAgIHNsb3RfaG91cnMgPSBfcGFyc2VfdGltZV9zbG90KHNsb3Rfc3RyKQ0KICAgICAgICAgICAgcmVzdWx0W3Nsb3Rfc3RyXSA9IHN0YXJ0X3RpbWUgKyB0aW1lZGVsdGEoaG91cnM9c2xvdF9ob3VycykNCiAgICAgICAgcmV0dXJuIHJlc3VsdA0KICAgIA0KICAgICMgMi4g6K6h566X5pyJ5pWI6L+Q6KGM5pe26Ze05q61DQogICAgZWZmZWN0aXZlX3BlcmlvZHMgPSBbXQ0KICAgIGN1cnJlbnRfcGVyaW9kX3N0YXJ0ID0gTm9uZQ0KICAgIA0KICAgIGZvciBpLCBwb2ludCBpbiBlbnVtZXJhdGUodGltZWxpbmUpOg0KICAgICAgICBpZiBwb2ludFsnbG9hZF9zdGF0dXMnXSA9PSAxLjA6DQogICAgICAgICAgICBpZiBjdXJyZW50X3BlcmlvZF9zdGFydCBpcyBOb25lOg0KICAgICAgICAgICAgICAgIGN1cnJlbnRfcGVyaW9kX3N0YXJ0ID0gcG9pbnRbJ3RpbWUnXQ0KICAgICAgICBlbHNlOiAgIyBsb2FkX3N0YXR1cyAhPSAxLjANCiAgICAgICAgICAgIGlmIGN1cnJlbnRfcGVyaW9kX3N0YXJ0IGlzIG5vdCBOb25lOg0KICAgICAgICAgICAgICAgIGVmZmVjdGl2ZV9wZXJpb2RzLmFwcGVuZCh7DQogICAgICAgICAgICAgICAgICAgICdzdGFydCc6IGN1cnJlbnRfcGVyaW9kX3N0YXJ0LA0KICAgICAgICAgICAgICAgICAgICAnZW5kJzogcG9pbnRbJ3RpbWUnXSwNCiAgICAgICAgICAgICAgICAgICAgJ2R1cmF0aW9uX2hvdXJzJzogKHBvaW50Wyd0aW1lJ10gLSBjdXJyZW50X3BlcmlvZF9zdGFydCkudG90YWxfc2Vjb25kcygpIC8gMzYwMC4wDQogICAgICAgICAgICAgICAgfSkNCiAgICAgICAgICAgICAgICBjdXJyZW50X3BlcmlvZF9zdGFydCA9IE5vbmUNCiAgICANCiAgICAjIOWkhOeQhuacgOWQjuS4gOS4quWRqOacn++8iOWmguaenOWunumqjOe7k+adn+aXtuS7jeWcqOi/kOihjO+8iQ0KICAgIGlmIGN1cnJlbnRfcGVyaW9kX3N0YXJ0IGlzIG5vdCBOb25lOg0KICAgICAgICBlZmZlY3RpdmVfcGVyaW9kcy5hcHBlbmQoew0KICAgICAgICAgICAgJ3N0YXJ0JzogY3VycmVudF9wZXJpb2Rfc3RhcnQsDQogICAgICAgICAgICAnZW5kJzogZW5kX3RpbWUsDQogICAgICAgICAgICAnZHVyYXRpb25faG91cnMnOiAoZW5kX3RpbWUgLSBjdXJyZW50X3BlcmlvZF9zdGFydCkudG90YWxfc2Vjb25kcygpIC8gMzYwMC4wDQogICAgICAgIH0pDQogICAgDQogICAgdG90YWxfZWZmZWN0aXZlX2hvdXJzID0gc3VtKHBlcmlvZFsnZHVyYXRpb25faG91cnMnXSBmb3IgcGVyaW9kIGluIGVmZmVjdGl2ZV9wZXJpb2RzKQ0KICAgIExPR0dFUi5pbmZvKCJFZmZlY3RpdmUgcnVubmluZyBwZXJpb2RzOiAlZCBwZXJpb2RzLCB0b3RhbCAlLjNmIGhvdXJzIiwgDQogICAgICAgICAgICAgICBsZW4oZWZmZWN0aXZlX3BlcmlvZHMpLCB0b3RhbF9lZmZlY3RpdmVfaG91cnMpDQogICAgDQogICAgZm9yIHBlcmlvZCBpbiBlZmZlY3RpdmVfcGVyaW9kczoNCiAgICAgICAgTE9HR0VSLmRlYnVnKCJFZmZlY3RpdmUgcGVyaW9kOiAlcyDihpIgJXMgKCUuM2YgaG91cnMpIiwNCiAgICAgICAgICAgICAgICAgICAgcGVyaW9kWydzdGFydCddLnN0cmZ0aW1lKCclSDolTTolUycpLA0KICAgICAgICAgICAgICAgICAgICBwZXJpb2RbJ2VuZCddLnN0cmZ0aW1lKCclSDolTTolUycpLA0KICAgICAgICAgICAgICAgICAgICBwZXJpb2RbJ2R1cmF0aW9uX2hvdXJzJ10pDQogICAgDQogICAgIyAzLiDorqHnrpfmr4/kuKrml7bpl7Tmp73lr7nlupTnmoTnnJ/lrp7ml7bpl7TngrkNCiAgICBlZmZlY3RpdmVfdGltZV9wb2ludHMgPSB7fQ0KICAgIA0KICAgIGZvciBzbG90X3N0ciBpbiB0aW1lX3Nsb3RzOg0KICAgICAgICB0YXJnZXRfZWZmZWN0aXZlX2hvdXJzID0gX3BhcnNlX3RpbWVfc2xvdChzbG90X3N0cikNCiAgICAgICAgDQogICAgICAgIGlmIHRhcmdldF9lZmZlY3RpdmVfaG91cnMgPD0gMDoNCiAgICAgICAgICAgIGVmZmVjdGl2ZV90aW1lX3BvaW50c1tzbG90X3N0cl0gPSBOb25lDQogICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICANCiAgICAgICAgaWYgdGFyZ2V0X2VmZmVjdGl2ZV9ob3VycyA+IHRvdGFsX2VmZmVjdGl2ZV9ob3VyczoNCiAgICAgICAgICAgIExPR0dFUi53YXJuaW5nKCJUYXJnZXQgZWZmZWN0aXZlIHRpbWUgJS4zZmggZXhjZWVkcyB0b3RhbCBlZmZlY3RpdmUgdGltZSAlLjNmaCBmb3Igc2xvdCAlcyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9lZmZlY3RpdmVfaG91cnMsIHRvdGFsX2VmZmVjdGl2ZV9ob3Vycywgc2xvdF9zdHIpDQogICAgICAgICAgICBlZmZlY3RpdmVfdGltZV9wb2ludHNbc2xvdF9zdHJdID0gTm9uZQ0KICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgDQogICAgICAgICMg5Zyo5pyJ5pWI5pe26Ze05q615Lit5p+l5om+57Sv6K6h6L+Q6KGMdGFyZ2V0X2VmZmVjdGl2ZV9ob3Vyc+Wwj+aXtueahOaXtumXtOeCuQ0KICAgICAgICBjdW11bGF0aXZlX2hvdXJzID0gMC4wDQogICAgICAgIHRhcmdldF90aW1lX3BvaW50ID0gTm9uZQ0KICAgICAgICANCiAgICAgICAgZm9yIHBlcmlvZCBpbiBlZmZlY3RpdmVfcGVyaW9kczoNCiAgICAgICAgICAgIHBlcmlvZF9kdXJhdGlvbiA9IHBlcmlvZFsnZHVyYXRpb25faG91cnMnXQ0KICAgICAgICAgICAgDQogICAgICAgICAgICBpZiBjdW11bGF0aXZlX2hvdXJzICsgcGVyaW9kX2R1cmF0aW9uID49IHRhcmdldF9lZmZlY3RpdmVfaG91cnM6DQogICAgICAgICAgICAgICAgIyDnm67moIfml7bpl7TngrnlnKjov5nkuKrlkajmnJ/lhoUNCiAgICAgICAgICAgICAgICByZW1haW5pbmdfaG91cnMgPSB0YXJnZXRfZWZmZWN0aXZlX2hvdXJzIC0gY3VtdWxhdGl2ZV9ob3Vycw0KICAgICAgICAgICAgICAgIHRhcmdldF90aW1lX3BvaW50ID0gcGVyaW9kWydzdGFydCddICsgdGltZWRlbHRhKGhvdXJzPXJlbWFpbmluZ19ob3VycykNCiAgICAgICAgICAgICAgICBicmVhaw0KICAgICAgICAgICAgZWxzZToNCiAgICAgICAgICAgICAgICBjdW11bGF0aXZlX2hvdXJzICs9IHBlcmlvZF9kdXJhdGlvbg0KICAgICAgICANCiAgICAgICAgZWZmZWN0aXZlX3RpbWVfcG9pbnRzW3Nsb3Rfc3RyXSA9IHRhcmdldF90aW1lX3BvaW50DQogICAgICAgIA0KICAgICAgICBpZiB0YXJnZXRfdGltZV9wb2ludDoNCiAgICAgICAgICAgIExPR0dFUi5pbmZvKCJTbG90ICVzOiBlZmZlY3RpdmUgJS4zZmgg4oaSIGFjdHVhbCB0aW1lICVzIiwNCiAgICAgICAgICAgICAgICAgICAgICAgc2xvdF9zdHIsIHRhcmdldF9lZmZlY3RpdmVfaG91cnMsIHRhcmdldF90aW1lX3BvaW50LnN0cmZ0aW1lKCclSDolTTolUycpKQ0KICAgICAgICBlbHNlOg0KICAgICAgICAgICAgTE9HR0VSLndhcm5pbmcoIkNvdWxkIG5vdCBjYWxjdWxhdGUgZWZmZWN0aXZlIHRpbWUgcG9pbnQgZm9yIHNsb3QgJXMiLCBzbG90X3N0cikNCiAgICANCiAgICByZXR1cm4gZWZmZWN0aXZlX3RpbWVfcG9pbnRzDQoNCg0KZGVmIF9xdWVyeV9pbmZsdXhkYl9yYW5nZV93aXRoX2xvYWRfc3RhdHVzKA0KICAgIGZpZWxkX25hbWU6IHN0ciwNCiAgICBzdGFydF90aW1lOiBkYXRldGltZSwNCiAgICBlbmRfdGltZTogZGF0ZXRpbWUsDQogICAgaW5mbHV4X3VybDogc3RyLA0KICAgIGluZmx1eF9vcmc6IHN0ciwNCiAgICBpbmZsdXhfdG9rZW46IHN0ciwNCiAgICBpbmZsdXhfYnVja2V0OiBzdHIsDQogICAgaW5mbHV4X21lYXN1cmVtZW50OiBzdHIsDQogICAgZmlsdGVyczogT3B0aW9uYWxbRGljdFtzdHIsIHN0cl1dID0gTm9uZSwNCikgLT4gT3B0aW9uYWxbZmxvYXRdOg0KICAgICIiIuafpeivoiBJbmZsdXhEQiDojrflj5bmjIflrprlrZfmrrXlnKjml7bpl7TojIPlm7TlhoXnmoTlubPlnYflgLzvvIjku4XlvZMgbG9hZF9zdGF0dXMgPSAxIOaXtu+8iSIiIg0KICAgIHRyeToNCiAgICAgICAgZnJvbSBpbmZsdXhkYl9jbGllbnQgaW1wb3J0IEluZmx1eERCQ2xpZW50DQogICAgICAgIGltcG9ydCBwYW5kYXMgYXMgcGQNCiAgICAgICAgaW1wb3J0IHdhcm5pbmdzDQogICAgICAgIGZyb20gaW5mbHV4ZGJfY2xpZW50LmNsaWVudC53YXJuaW5ncyBpbXBvcnQgTWlzc2luZ1Bpdm90RnVuY3Rpb24NCiAgICBleGNlcHQgSW1wb3J0RXJyb3I6DQogICAgICAgIExPR0dFUi53YXJuaW5nKCJJbmZsdXhEQiBjbGllbnQgbm90IGF2YWlsYWJsZSwgc2tpcCBxdWVyeSBmb3IgZmllbGQ9JXMiLCBmaWVsZF9uYW1lKQ0KICAgICAgICByZXR1cm4gTm9uZQ0KDQogICAgdHJ5Og0KICAgICAgICBjbGllbnQgPSBJbmZsdXhEQkNsaWVudCh1cmw9aW5mbHV4X3VybCwgb3JnPWluZmx1eF9vcmcsIHRva2VuPWluZmx1eF90b2tlbikNCiAgICAgICAgcXVlcnlfYXBpID0gY2xpZW50LnF1ZXJ5X2FwaSgpDQoNCiAgICAgICAgIyDnoa7kv53kvb/nlKhVVEPml7bpl7TmoLzlvI8NCiAgICAgICAgc3RhcnRfcmZjID0gc3RhcnRfdGltZS5zdHJmdGltZSgnJVktJW0tJWRUJUg6JU06JVNaJykNCiAgICAgICAgZW5kX3JmYyA9IGVuZF90aW1lLnN0cmZ0aW1lKCclWS0lbS0lZFQlSDolTTolU1onKQ0KICAgICAgICANCiAgICAgICAgTE9HR0VSLmRlYnVnKCLmn6Xor6LlrZfmrrUgJXMg5pe26Ze06IyD5Zu0OiAlcyDliLAgJXMiLCBmaWVsZF9uYW1lLCBzdGFydF9yZmMsIGVuZF9yZmMpDQoNCiAgICAgICAgIyDmnoTlu7rov4fmu6TmnaHku7YNCiAgICAgICAgdGFnX2ZpbHRlcnMgPSAiIg0KICAgICAgICBpZiBmaWx0ZXJzOg0KICAgICAgICAgICAgZm9yIGtleSwgdmFsdWUgaW4gZmlsdGVycy5pdGVtcygpOg0KICAgICAgICAgICAgICAgIHRhZ19maWx0ZXJzICs9IGYnXG4gIHw+IGZpbHRlcihmbjogKHIpID0+IHJbIntrZXl9Il0gPT0gInt2YWx1ZX0iKScNCg0KICAgICAgICAjIOWvueS6jueOr+Wig+a4qeW6pu+8jOWPluWFqOmDqOmdnjDmlbDmja7nmoTlnYflgLzvvJvlhbbku5blrZfmrrXku43pnIBsb2FkX3N0YXR1cz0x562b6YCJDQogICAgICAgIGlmIGZpZWxkX25hbWUgPT0gIueOr+Wig+a4qeW6piI6DQogICAgICAgICAgICBmbHV4ID0gZicnJw0KZnJvbShidWNrZXQ6ICJ7aW5mbHV4X2J1Y2tldH0iKQ0KICB8PiByYW5nZShzdGFydDoge3N0YXJ0X3JmY30sIHN0b3A6IHtlbmRfcmZjfSkNCiAgfD4gZmlsdGVyKGZuOiAocikgPT4gclsiX21lYXN1cmVtZW50Il0gPT0gIntpbmZsdXhfbWVhc3VyZW1lbnR9IikNCiAgfD4gZmlsdGVyKGZuOiAocikgPT4gclsiX2ZpZWxkIl0gPT0gIntmaWVsZF9uYW1lfSIpDQogIHw+IGZpbHRlcihmbjogKHIpID0+IHJbIl92YWx1ZSJdICE9IDAuMCl7dGFnX2ZpbHRlcnN9DQogIHw+IG1lYW4oKQ0KICB8PiB5aWVsZChuYW1lOiAibWVhbl9ub25femVybyIpDQonJycuc3RyaXAoKQ0KICAgICAgICBlbHNlOg0KICAgICAgICAgICAgZmx1eCA9IGYnJycNCmZyb20oYnVja2V0OiAie2luZmx1eF9idWNrZXR9IikNCiAgfD4gcmFuZ2Uoc3RhcnQ6IHtzdGFydF9yZmN9LCBzdG9wOiB7ZW5kX3JmY30pDQogIHw+IGZpbHRlcihmbjogKHIpID0+IHJbIl9tZWFzdXJlbWVudCJdID09ICJ7aW5mbHV4X21lYXN1cmVtZW50fSIpDQogIHw+IGZpbHRlcihmbjogKHIpID0+IHJbIl9maWVsZCJdID09ICJ7ZmllbGRfbmFtZX0iKXt0YWdfZmlsdGVyc30NCiAgfD4gbWVhbigpDQogIHw+IHlpZWxkKG5hbWU6ICJtZWFuX3RlbXBlcmF0dXJlX2RhdGEiKQ0KJycnLnN0cmlwKCkNCg0KICAgICAgICBMT0dHRVIuZGVidWcoIkZsdXjmn6Xor6Lor63lj6UgKHJhbmdlKTpcbiVzIiwgZmx1eCkNCg0KICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6DQogICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImlnbm9yZSIsIE1pc3NpbmdQaXZvdEZ1bmN0aW9uKQ0KICAgICAgICAgICAgZnJhbWVzID0gcXVlcnlfYXBpLnF1ZXJ5X2RhdGFfZnJhbWUoZmx1eCkNCiAgICAgICAgDQogICAgICAgIGlmIGlzaW5zdGFuY2UoZnJhbWVzLCBsaXN0KToNCiAgICAgICAgICAgIGRmID0gcGQuY29uY2F0KGZyYW1lcywgaWdub3JlX2luZGV4PVRydWUpIGlmIGZyYW1lcyBlbHNlIHBkLkRhdGFGcmFtZSgpDQogICAgICAgIGVsc2U6DQogICAgICAgICAgICBkZiA9IGZyYW1lcw0KDQogICAgICAgIGlmIGRmLmVtcHR5IG9yICdfdmFsdWUnIG5vdCBpbiBkZi5jb2x1bW5zOg0KICAgICAgICAgICAgaWYgZmllbGRfbmFtZSA9PSAi546v5aKD5rip5bqmIjoNCiAgICAgICAgICAgICAgICBMT0dHRVIuZGVidWcoIk5vIHZhbGlkIHJhbmdlIGRhdGEgZm91bmQgZm9yIGZpZWxkPSVzIChub24temVybyBkYXRhKSIsIGZpZWxkX25hbWUpDQogICAgICAgICAgICBlbHNlOg0KICAgICAgICAgICAgICAgIExPR0dFUi5kZWJ1ZygiTm8gdmFsaWQgcmFuZ2UgZGF0YSBmb3VuZCBmb3IgZmllbGQ9JXMiLCBmaWVsZF9uYW1lKQ0KICAgICAgICAgICAgcmV0dXJuIE5vbmUNCiAgICAgICAgICAgIA0KICAgICAgICBtZWFuX3ZhbHVlID0gZGZbJ192YWx1ZSddLmlsb2NbMF0NCiAgICAgICAgaWYgcGQuaXNuYShtZWFuX3ZhbHVlKToNCiAgICAgICAgICAgIExPR0dFUi5kZWJ1ZygiTWVhbiB2YWx1ZSBpcyBOYU4gZm9yIGZpZWxkPSVzIiwgZmllbGRfbmFtZSkNCiAgICAgICAgICAgIHJldHVybiBOb25lDQoNCiAgICAgICAgdmFsdWUgPSBmbG9hdChtZWFuX3ZhbHVlKQ0KICAgICAgICBpZiBmaWVsZF9uYW1lID09ICLnjq/looPmuKnluqYiOg0KICAgICAgICAgICAgTE9HR0VSLmRlYnVnKCJGaWVsZD0lcyByYW5nZV9tZWFuX3ZhbHVlPSUuM2YgKG5vbi16ZXJvIGRhdGEpIiwgZmllbGRfbmFtZSwgdmFsdWUpDQogICAgICAgIGVsc2U6DQogICAgICAgICAgICBMT0dHRVIuZGVidWcoIkZpZWxkPSVzIHJhbmdlX21lYW5fdmFsdWU9JS4zZiIsIGZpZWxkX25hbWUsIHZhbHVlKQ0KICAgICAgICByZXR1cm4gdmFsdWUNCiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6DQogICAgICAgIExPR0dFUi5lcnJvcigiRXJyb3IgcXVlcnlpbmcgSW5mbHV4REIgcmFuZ2UgZm9yIGZpZWxkPSVzOiAlcyIsIGZpZWxkX25hbWUsIGUpDQogICAgICAgIHJldHVybiBOb25lDQogICAgZmluYWxseToNCiAgICAgICAgdHJ5Og0KICAgICAgICAgICAgY2xpZW50LmNsb3NlKCkNCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoNCiAgICAgICAgICAgIHBhc3MNCg0KDQpkZWYgX3F1ZXJ5X2luZmx1eGRiX3dpdGhfbG9hZF9zdGF0dXMoDQogICAgZmllbGRfbmFtZTogc3RyLA0KICAgIHRhcmdldF90aW1lOiBkYXRldGltZSwNCiAgICBpbmZsdXhfdXJsOiBzdHIsDQogICAgaW5mbHV4X29yZzogc3RyLA0KICAgIGluZmx1eF90b2tlbjogc3RyLA0KICAgIGluZmx1eF9idWNrZXQ6IHN0ciwNCiAgICBpbmZsdXhfbWVhc3VyZW1lbnQ6IHN0ciwNCiAgICBmaWx0ZXJzOiBPcHRpb25hbFtEaWN0W3N0ciwgc3RyXV0gPSBOb25lLA0KKSAtPiBPcHRpb25hbFtmbG9hdF06DQogICAgIiIi5p+l6K+iIEluZmx1eERCIOiOt+WPluaMh+WumuWtl+auteWcqOaMh+WumuaXtumXtOeCueeahOeerOaXtuWAvO+8iOS7heW9kyBsb2FkX3N0YXR1cyA9IDEg5pe277yJIiIiDQogICAgdHJ5Og0KICAgICAgICBmcm9tIGluZmx1eGRiX2NsaWVudCBpbXBvcnQgSW5mbHV4REJDbGllbnQNCiAgICAgICAgaW1wb3J0IHBhbmRhcyBhcyBwZA0KICAgICAgICBpbXBvcnQgd2FybmluZ3MNCiAgICAgICAgZnJvbSBpbmZsdXhkYl9jbGllbnQuY2xpZW50Lndhcm5pbmdzIGltcG9ydCBNaXNzaW5nUGl2b3RGdW5jdGlvbg0KICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoNCiAgICAgICAgTE9HR0VSLndhcm5pbmcoIkluZmx1eERCIGNsaWVudCBub3QgYXZhaWxhYmxlLCBza2lwIHF1ZXJ5IGZvciBmaWVsZD0lcyIsIGZpZWxkX25hbWUpDQogICAgICAgIHJldHVybiBOb25lDQoNCiAgICB0cnk6DQogICAgICAgIGNsaWVudCA9IEluZmx1eERCQ2xpZW50KHVybD1pbmZsdXhfdXJsLCBvcmc9aW5mbHV4X29yZywgdG9rZW49aW5mbHV4X3Rva2VuKQ0KICAgICAgICBxdWVyeV9hcGkgPSBjbGllbnQucXVlcnlfYXBpKCkNCg0KICAgICAgICAjIOehruS/neS9v+eUqFVUQ+aXtumXtA0KICAgICAgICB0YXJnZXRfdGltZV9yZmMgPSB0YXJnZXRfdGltZS5zdHJmdGltZSgnJVktJW0tJWRUJUg6JU06JVNaJykNCiAgICAgICAgDQogICAgICAgIExPR0dFUi5kZWJ1ZygNCiAgICAgICAgICAgICLmn6Xor6LlrZfmrrU9JXMg55uu5qCH5pe26Ze0PSVzIChVVEMpIOi/h+a7pOWZqD0lcyIsDQogICAgICAgICAgICBmaWVsZF9uYW1lLA0KICAgICAgICAgICAgdGFyZ2V0X3RpbWVfcmZjLA0KICAgICAgICAgICAgZmlsdGVycyBvciB7fSwNCiAgICAgICAgKQ0KDQogICAgICAgICMg5L2/55So5pe26Ze056qX5Y+j5p+l5om+5pyA5o6l6L+R55qE5pWw5o2u54K5DQogICAgICAgIHdpbmRvd19taW51dGVzID0gMTANCiAgICAgICAgDQogICAgICAgIHF1ZXJ5X3N0YXJ0ID0gdGFyZ2V0X3RpbWUgLSB0aW1lZGVsdGEobWludXRlcz13aW5kb3dfbWludXRlcykNCiAgICAgICAgcXVlcnlfZW5kID0gdGFyZ2V0X3RpbWUgKyB0aW1lZGVsdGEobWludXRlcz13aW5kb3dfbWludXRlcykNCiAgICAgICAgDQogICAgICAgIHF1ZXJ5X3N0YXJ0X3JmYyA9IHF1ZXJ5X3N0YXJ0LnN0cmZ0aW1lKCclWS0lbS0lZFQlSDolTTolU1onKQ0KICAgICAgICBxdWVyeV9lbmRfcmZjID0gcXVlcnlfZW5kLnN0cmZ0aW1lKCclWS0lbS0lZFQlSDolTTolU1onKQ0KICAgICAgICANCiAgICAgICAgTE9HR0VSLmRlYnVnKCLmn6Xor6Lnqpflj6M6ICVzIOWIsCAlcyIsIHF1ZXJ5X3N0YXJ0X3JmYywgcXVlcnlfZW5kX3JmYykNCg0KICAgICAgICAjIOaehOW7uui/h+a7pOadoeS7tg0KICAgICAgICB0YWdfZmlsdGVycyA9ICIiDQogICAgICAgIGlmIGZpbHRlcnM6DQogICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBmaWx0ZXJzLml0ZW1zKCk6DQogICAgICAgICAgICAgICAgdGFnX2ZpbHRlcnMgKz0gZidcbiAgfD4gZmlsdGVyKGZuOiAocikgPT4gclsie2tleX0iXSA9PSAie3ZhbHVlfSIpJw0KDQogICAgICAgICMg5p+l6K+i5rip5bqm5pWw5o2u77yI5LiN6ZyA6KaBbG9hZF9zdGF0dXPnrZvpgInvvIzlm6DkuLrlt7Lnu4/ln7rkuo7mnInmlYjml7bpl7Tngrnmn6Xor6LvvIkNCiAgICAgICAgZmx1eCA9IGYnJycNCmZyb20oYnVja2V0OiAie2luZmx1eF9idWNrZXR9IikNCiAgfD4gcmFuZ2Uoc3RhcnQ6IHtxdWVyeV9zdGFydF9yZmN9LCBzdG9wOiB7cXVlcnlfZW5kX3JmY30pDQogIHw+IGZpbHRlcihmbjogKHIpID0+IHJbIl9tZWFzdXJlbWVudCJdID09ICJ7aW5mbHV4X21lYXN1cmVtZW50fSIpDQogIHw+IGZpbHRlcihmbjogKHIpID0+IHJbIl9maWVsZCJdID09ICJ7ZmllbGRfbmFtZX0iKXt0YWdfZmlsdGVyc30NCiAgfD4gc29ydChjb2x1bW5zOiBbIl90aW1lIl0pDQogIHw+IGxhc3QoKQ0KICB8PiB5aWVsZChuYW1lOiAiaW5zdGFudGFuZW91c19hdF9lZmZlY3RpdmVfdGltZSIpDQonJycuc3RyaXAoKQ0KDQogICAgICAgIExPR0dFUi5kZWJ1ZygiRmx1eOafpeivouivreWPpTpcbiVzIiwgZmx1eCkNCg0KICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6DQogICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImlnbm9yZSIsIE1pc3NpbmdQaXZvdEZ1bmN0aW9uKQ0KICAgICAgICAgICAgZnJhbWVzID0gcXVlcnlfYXBpLnF1ZXJ5X2RhdGFfZnJhbWUoZmx1eCkNCiAgICAgICAgDQogICAgICAgIGlmIGlzaW5zdGFuY2UoZnJhbWVzLCBsaXN0KToNCiAgICAgICAgICAgIGRmID0gcGQuY29uY2F0KGZyYW1lcywgaWdub3JlX2luZGV4PVRydWUpIGlmIGZyYW1lcyBlbHNlIHBkLkRhdGFGcmFtZSgpDQogICAgICAgIGVsc2U6DQogICAgICAgICAgICBkZiA9IGZyYW1lcw0KDQogICAgICAgICMg6I635Y+W556s5pe25YC877yI5pyA6L+R55qE5LiA5Liq5pyJ5pWI5pWw5o2u54K577yJDQogICAgICAgIGlmIGRmLmVtcHR5IG9yICdfdmFsdWUnIG5vdCBpbiBkZi5jb2x1bW5zOg0KICAgICAgICAgICAgTE9HR0VSLmRlYnVnKCJObyB2YWxpZCBkYXRhIGZvdW5kIGZvciBmaWVsZD0lcyBhdCBlZmZlY3RpdmUgdGltZSBwb2ludCIsIGZpZWxkX25hbWUpDQogICAgICAgICAgICByZXR1cm4gTm9uZQ0KICAgICAgICAgICAgDQogICAgICAgICMg5Y+W56ys5LiA6KGM55qE5YC877yI5Zug5Li65p+l6K+i5bey57uP5o6S5bqP5bm25Y+W5LqGbGFzdCgp77yJDQogICAgICAgIGluc3RhbnRfdmFsdWUgPSBkZlsnX3ZhbHVlJ10uaWxvY1swXQ0KICAgICAgICBpZiBwZC5pc25hKGluc3RhbnRfdmFsdWUpOg0KICAgICAgICAgICAgTE9HR0VSLmRlYnVnKCJJbnN0YW50YW5lb3VzIHZhbHVlIGlzIE5hTiBmb3IgZmllbGQ9JXMiLCBmaWVsZF9uYW1lKQ0KICAgICAgICAgICAgcmV0dXJuIE5vbmUNCg0KICAgICAgICB2YWx1ZSA9IGZsb2F0KGluc3RhbnRfdmFsdWUpDQogICAgICAgIA0KICAgICAgICAjIOWmguaenOacieaXtumXtOS/oeaBr++8jOiusOW9leWunumZheeahOaVsOaNruaXtumXtOeCuQ0KICAgICAgICBpZiAnX3RpbWUnIGluIGRmLmNvbHVtbnM6DQogICAgICAgICAgICBhY3R1YWxfdGltZSA9IGRmWydfdGltZSddLmlsb2NbMF0NCiAgICAgICAgICAgIExPR0dFUi5kZWJ1ZygiRmllbGQ9JXMgaW5zdGFudGFuZW91c192YWx1ZT0lLjNmIGFjdHVhbF90aW1lPSVzIChhdCBlZmZlY3RpdmUgdGltZSkiLCANCiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX25hbWUsIHZhbHVlLCBhY3R1YWxfdGltZSkNCiAgICAgICAgZWxzZToNCiAgICAgICAgICAgIExPR0dFUi5kZWJ1ZygiRmllbGQ9JXMgaW5zdGFudGFuZW91c192YWx1ZT0lLjNmIChhdCBlZmZlY3RpdmUgdGltZSkiLCBmaWVsZF9uYW1lLCB2YWx1ZSkNCiAgICAgICAgICAgIA0KICAgICAgICByZXR1cm4gdmFsdWUNCiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6DQogICAgICAgIExPR0dFUi5lcnJvcigiRXJyb3IgcXVlcnlpbmcgSW5mbHV4REIgZm9yIGZpZWxkPSVzOiAlcyIsIGZpZWxkX25hbWUsIGUpDQogICAgICAgIHJldHVybiBOb25lDQogICAgZmluYWxseToNCiAgICAgICAgdHJ5Og0KICAgICAgICAgICAgY2xpZW50LmNsb3NlKCkNCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoNCiAgICAgICAgICAgIHBhc3MNCg0KDQpkZWYgX2xvYWRfdGVtcGVyYXR1cmVfZGF0YV93aXRoX2xvYWRfc3RhdHVzKA0KICAgIHRpbWVfc2xvdHM6IExpc3Rbc3RyXSwNCiAgICBzZWN0aW9uczogTGlzdFtEaWN0W3N0ciwgQW55XV0sDQogICAgc3RhcnRfdGltZTogT3B0aW9uYWxbZGF0ZXRpbWVdLA0KICAgIGVuZF90aW1lOiBPcHRpb25hbFtkYXRldGltZV0sDQopIC0+IERpY3Rbc3RyLCBEaWN0W3N0ciwgZmxvYXRdXToNCiAgICAiIiLku44gSW5mbHV4REIg5p+l6K+i5omA5pyJ5rWL6K+V6YOo5L2N5Zyo5ZCE5pe26Ze054K555qE556s5pe25rip5bqm5YC877yI5LuF5b2TIGxvYWRfc3RhdHVzID0gMSDml7bvvIkiIiINCiAgICBpZiBub3Qgc3RhcnRfdGltZSBvciBub3QgZW5kX3RpbWU6DQogICAgICAgIExPR0dFUi5pbmZvKCJTa2lwIGRhdGEgcXVlcnk6IG1pc3Npbmcgc3RhcnQvZW5kICglcywgJXMpIiwgc3RhcnRfdGltZSwgZW5kX3RpbWUpDQogICAgICAgIHJldHVybiB7fQ0KICAgIA0KICAgIGluZmx1eF9jb25maWcgPSBfZ2V0X2luZmx1eF9jb25maWcoKQ0KICAgIA0KICAgIGlmIG5vdCBhbGwoW2luZmx1eF9jb25maWdbJ3VybCddLCBpbmZsdXhfY29uZmlnWydvcmcnXSwgaW5mbHV4X2NvbmZpZ1sndG9rZW4nXSwgDQogICAgICAgICAgICAgICAgaW5mbHV4X2NvbmZpZ1snYnVja2V0J10sIGluZmx1eF9jb25maWdbJ21lYXN1cmVtZW50J11dKToNCiAgICAgICAgTE9HR0VSLndhcm5pbmcoDQogICAgICAgICAgICAiU2tpcCBkYXRhIHF1ZXJ5OiBtaXNzaW5nIEluZmx1eCBjb25maWcgdXJsPSVzIGJ1Y2tldD0lcyBtZWFzdXJlbWVudD0lcyIsDQogICAgICAgICAgICBpbmZsdXhfY29uZmlnWyd1cmwnXSBvciAiPGVtcHR5PiIsDQogICAgICAgICAgICBpbmZsdXhfY29uZmlnWydidWNrZXQnXSBvciAiPGVtcHR5PiIsDQogICAgICAgICAgICBpbmZsdXhfY29uZmlnWydtZWFzdXJlbWVudCddIG9yICI8ZW1wdHk+IiwNCiAgICAgICAgKQ0KICAgICAgICByZXR1cm4ge30NCiAgICANCiAgICAjIOiuoeeul+aAu+aXtumVv++8iOWwj+aXtu+8iQ0KICAgIHRvdGFsX2R1cmF0aW9uID0gKGVuZF90aW1lIC0gc3RhcnRfdGltZSkudG90YWxfc2Vjb25kcygpIC8gMzYwMC4wDQogICAgTE9HR0VSLmluZm8oDQogICAgICAgICJGZXRjaCBpbnN0YW50YW5lb3VzIHRlbXBlcmF0dXJlIGRhdGEgKGxvYWRfc3RhdHVzPTEpIHdpbmRvdz0lc+KGkiVzIHRvdGFsX2hvdXJzPSUuM2YgdGltZV9wb2ludHM9JXMiLA0KICAgICAgICBzdGFydF90aW1lLmlzb2Zvcm1hdCgpLA0KICAgICAgICBlbmRfdGltZS5pc29mb3JtYXQoKSwNCiAgICAgICAgdG90YWxfZHVyYXRpb24sDQogICAgICAgICIsIi5qb2luKHRpbWVfc2xvdHMpLA0KICAgICkNCiAgICANCiAgICAjIOaUtumbhuaJgOaciemcgOimgeafpeivoueahOWtl+autQ0KICAgIHF1ZXJ5X3RhcmdldHM6IExpc3RbdHVwbGVbc3RyLCBEaWN0W3N0ciwgQW55XV1dID0gW10NCiAgICBmb3Igc2VjdGlvbiBpbiBzZWN0aW9uczoNCiAgICAgICAgZW50cmllcyA9IHNlY3Rpb24uZ2V0KCJlbnRyaWVzIikgb3IgW10NCiAgICAgICAgZm9yIGVudHJ5IGluIGVudHJpZXM6DQogICAgICAgICAgICBpZiBpc2luc3RhbmNlKGVudHJ5LCBkaWN0KToNCiAgICAgICAgICAgICAgICBmaWVsZF9uYW1lID0gZW50cnkuZ2V0KCJmaWVsZCIsICIiKQ0KICAgICAgICAgICAgICAgIGlmIGZpZWxkX25hbWU6DQogICAgICAgICAgICAgICAgICAgIHF1ZXJ5X3RhcmdldHMuYXBwZW5kKChmaWVsZF9uYW1lLCBlbnRyeSkpDQoNCiAgICBpZiBub3QgcXVlcnlfdGFyZ2V0czoNCiAgICAgICAgcmV0dXJuIHt9DQogICAgDQogICAgIyDorqHnrpfln7rkuo7mnInmlYjov5DooYzml7bpl7TntK/orqHnmoTnnJ/lrp7ml7bpl7TngrkNCiAgICBMT0dHRVIuaW5mbygiPT09IOW8gOWni+iuoeeul+acieaViOaXtumXtOeCuSA9PT0iKQ0KICAgIGVmZmVjdGl2ZV90aW1lX3BvaW50cyA9IF9jYWxjdWxhdGVfZWZmZWN0aXZlX3RpbWVfcG9pbnRzKA0KICAgICAgICBzdGFydF90aW1lLCBlbmRfdGltZSwgdGltZV9zbG90cywgaW5mbHV4X2NvbmZpZw0KICAgICkNCiAgICANCiAgICAjIOS4uuavj+S4quacieaViOaXtumXtOeCueafpeivoua4qeW6puaVsOaNrg0KICAgIHRlbXBlcmF0dXJlX2RhdGE6IERpY3Rbc3RyLCBEaWN0W3N0ciwgZmxvYXRdXSA9IHt9DQogICAgDQogICAgZm9yIGlkeCwgc2xvdF9zdHIgaW4gZW51bWVyYXRlKHRpbWVfc2xvdHMpOg0KICAgICAgICB0YXJnZXRfdGltZV9wb2ludCA9IGVmZmVjdGl2ZV90aW1lX3BvaW50cy5nZXQoc2xvdF9zdHIpDQogICAgICAgIA0KICAgICAgICBpZiB0YXJnZXRfdGltZV9wb2ludCBpcyBOb25lOg0KICAgICAgICAgICAgTE9HR0VSLndhcm5pbmcoIk5vIGVmZmVjdGl2ZSB0aW1lIHBvaW50IGNhbGN1bGF0ZWQgZm9yIHNsb3QgJXMsIHNraXBwaW5nIiwgc2xvdF9zdHIpDQogICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICANCiAgICAgICAgTE9HR0VSLmRlYnVnKCJQcm9jZXNzaW5nIHNsb3QgJXMgYXQgZWZmZWN0aXZlIHRpbWUgcG9pbnQgJXMiLCANCiAgICAgICAgICAgICAgICAgICAgc2xvdF9zdHIsIHRhcmdldF90aW1lX3BvaW50LnN0cmZ0aW1lKCclWS0lbS0lZCAlSDolTTolUycpKQ0KICAgICAgICANCiAgICAgICAgZm9yIGZpZWxkX25hbWUsIGVudHJ5IGluIHF1ZXJ5X3RhcmdldHM6DQogICAgICAgICAgICByZXN1bHRfa2V5ID0gZW50cnkuZ2V0KCJyZXN1bHRfa2V5Iikgb3IgZmllbGRfbmFtZQ0KICAgICAgICAgICAgaWYgbm90IHJlc3VsdF9rZXk6DQogICAgICAgICAgICAgICAgcmVzdWx0X2tleSA9IGZpZWxkX25hbWUNCiAgICAgICAgICAgIGVudHJ5X2ZpbHRlcnMgPSBlbnRyeS5nZXQoImZpbHRlcnMiKSBpZiBpc2luc3RhbmNlKGVudHJ5LCBkaWN0KSBlbHNlIE5vbmUNCiAgICAgICAgICAgIGlmIHJlc3VsdF9rZXkgbm90IGluIHRlbXBlcmF0dXJlX2RhdGE6DQogICAgICAgICAgICAgICAgdGVtcGVyYXR1cmVfZGF0YVtyZXN1bHRfa2V5XSA9IHt9DQoNCiAgICAgICAgICAgICMg5L2/55So57Si5byV5L2c5Li6a2V577yM5Zug5Li65Y+v6IO95pyJ6YeN5aSN55qE5pe26Ze05Yi75bqmDQogICAgICAgICAgICBzbG90X2tleSA9IGYie2lkeH1fe3Nsb3Rfc3RyfSIgICMg5L2/55So57Si5byVK+aXtumXtOWIu+W6puS9nOS4uuWUr+S4gGtleQ0KDQogICAgICAgICAgICAjIOafpeivoueerOaXtuWAvO+8iOWcqOacieaViOaXtumXtOeCue+8iQ0KICAgICAgICAgICAgdmFsdWUgPSBfcXVlcnlfaW5mbHV4ZGJfd2l0aF9sb2FkX3N0YXR1cygNCiAgICAgICAgICAgICAgICBmaWVsZF9uYW1lLA0KICAgICAgICAgICAgICAgIHRhcmdldF90aW1lX3BvaW50LA0KICAgICAgICAgICAgICAgIGluZmx1eF9jb25maWdbJ3VybCddLA0KICAgICAgICAgICAgICAgIGluZmx1eF9jb25maWdbJ29yZyddLA0KICAgICAgICAgICAgICAgIGluZmx1eF9jb25maWdbJ3Rva2VuJ10sDQogICAgICAgICAgICAgICAgaW5mbHV4X2NvbmZpZ1snYnVja2V0J10sDQogICAgICAgICAgICAgICAgaW5mbHV4X2NvbmZpZ1snbWVhc3VyZW1lbnQnXSwNCiAgICAgICAgICAgICAgICBmaWx0ZXJzPWVudHJ5X2ZpbHRlcnMgaWYgZW50cnlfZmlsdGVycyBlbHNlIE5vbmUsDQogICAgICAgICAgICApDQoNCiAgICAgICAgICAgIGlmIHZhbHVlIGlzIG5vdCBOb25lOg0KICAgICAgICAgICAgICAgIHRlbXBlcmF0dXJlX2RhdGFbcmVzdWx0X2tleV1bc2xvdF9rZXldID0gdmFsdWUNCiAgICAgICAgICAgICAgICBMT0dHRVIuZGVidWcoDQogICAgICAgICAgICAgICAgICAgICJTbG90PSVzIGZpZWxkPSVzIHZhbHVlPSUuM2YgYXQgZWZmZWN0aXZlX3RpbWU9JXMiLA0KICAgICAgICAgICAgICAgICAgICBzbG90X2tleSwNCiAgICAgICAgICAgICAgICAgICAgcmVzdWx0X2tleSwNCiAgICAgICAgICAgICAgICAgICAgdmFsdWUsDQogICAgICAgICAgICAgICAgICAgIHRhcmdldF90aW1lX3BvaW50LnN0cmZ0aW1lKCclSDolTTolUycpDQogICAgICAgICAgICAgICAgKQ0KICAgICAgICAgICAgZWxzZToNCiAgICAgICAgICAgICAgICBMT0dHRVIuZGVidWcoDQogICAgICAgICAgICAgICAgICAgICJTbG90PSVzIGZpZWxkPSVzIG5vX2RhdGEgYXQgZWZmZWN0aXZlX3RpbWU9JXMiLA0KICAgICAgICAgICAgICAgICAgICBzbG90X2tleSwNCiAgICAgICAgICAgICAgICAgICAgcmVzdWx0X2tleSwNCiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X3RpbWVfcG9pbnQuc3RyZnRpbWUoJyVIOiVNOiVTJykNCiAgICAgICAgICAgICAgICApDQoNCiAgICByZXR1cm4gdGVtcGVyYXR1cmVfZGF0YQ0KDQoNCmRlZiBfYnVpbGRfY2VsbHNfd2l0aF9sb2FkX3N0YXR1cygNCiAgICB0aW1lX3Nsb3RzOiBMaXN0W3N0cl0sDQogICAgc2VjdGlvbnM6IExpc3RbRGljdFtzdHIsIEFueV1dLA0KICAgIG1vdG9yX3NwZWVkOiBzdHIsDQogICAgc3RhcnRfdGltZTogT3B0aW9uYWxbZGF0ZXRpbWVdLA0KICAgIGVuZF90aW1lOiBPcHRpb25hbFtkYXRldGltZV0sDQogICAgdGVtcGVyYXR1cmVfZGF0YTogRGljdFtzdHIsIERpY3Rbc3RyLCBmbG9hdF1dLA0KICAgIHVzZV9kZWZhdWx0czogYm9vbCA9IEZhbHNlLA0KKSAtPiBMaXN0W0RpY3Rbc3RyLCBBbnldXToNCiAgICAiIiLmnoTlu7rljZXlhYPmoLzmlbDmja7vvIjln7rkuo4gbG9hZF9zdGF0dXMgPSAxIOeahOacieaViOaVsOaNru+8iS0g5LiO5Y6f5aeL6ISa5pys57uT5p6E5a6M5YWo5LiA6Ie0IiIiDQogICAgY2VsbHM6IExpc3RbRGljdFtzdHIsIEFueV1dID0gW10NCg0KICAgIGRlZiBhZGRfY2VsbChyb3c6IGludCwgY29sOiBpbnQsIHZhbHVlOiBzdHIgPSAiIiwgcm93c3BhbjogaW50ID0gMSwgY29sc3BhbjogaW50ID0gMSkgLT4gTm9uZToNCiAgICAgICAgcGF5bG9hZDogRGljdFtzdHIsIEFueV0gPSB7InJvdyI6IHJvdywgImNvbCI6IGNvbCwgInZhbHVlIjogdmFsdWV9DQogICAgICAgIGlmIHJvd3NwYW4gPiAxOg0KICAgICAgICAgICAgcGF5bG9hZFsicm93c3BhbiJdID0gcm93c3Bhbg0KICAgICAgICBpZiBjb2xzcGFuID4gMToNCiAgICAgICAgICAgIHBheWxvYWRbImNvbHNwYW4iXSA9IGNvbHNwYW4NCiAgICAgICAgY2VsbHMuYXBwZW5kKHBheWxvYWQpDQoNCiAgICAjIOaooeadv+W3puS+p+agh+mimOWIl+W3sue7j+WOu+mZpO+8jOi/memHjOS7heeUn+aIkOe6r+aVsOaNruWMuu+8jOS7jiAoMCwwKSDlvIDlp4vloavlhaXmlbDlgLzjgIINCiAgICAjIGN1cnJlbnRfcm93IOWvueW6lOaooeadv+S4reeahOWunumZheaVsOaNruihjOe0ouW8leOAgg0KICAgIGN1cnJlbnRfcm93ID0gMA0KICAgIGZvciBzZWN0aW9uIGluIHNlY3Rpb25zOg0KICAgICAgICBlbnRyaWVzID0gc2VjdGlvbi5nZXQoImVudHJpZXMiKSBvciBbXQ0KICAgICAgICBpZiBub3QgZW50cmllczoNCiAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICMg5q+P5Liq5rWL6K+V6YOo5L2N5a2Q6aG55a+55bqU5qih5p2/5Lit55qE5LiA6KGMDQogICAgICAgIGZvciBlbnRyeSBpbiBlbnRyaWVzOg0KICAgICAgICAgICAgIyDmlK/mjIHmlrDmoLzlvI/vvIjluKYgZmllbGQg5pig5bCE77yJ5ZKM5pen5qC85byP77yI57qv5a2X56ym5Liy77yJDQogICAgICAgICAgICBpZiBpc2luc3RhbmNlKGVudHJ5LCBkaWN0KToNCiAgICAgICAgICAgICAgICBmaWVsZF9uYW1lID0gZW50cnkuZ2V0KCJmaWVsZCIsICIiKQ0KICAgICAgICAgICAgICAgIGVudHJ5X2ZpbHRlcnMgPSBlbnRyeS5nZXQoImZpbHRlcnMiKQ0KICAgICAgICAgICAgICAgIGVudHJ5X2tleSA9IGVudHJ5LmdldCgicmVzdWx0X2tleSIpIG9yIGZpZWxkX25hbWUNCiAgICAgICAgICAgIGVsc2U6DQogICAgICAgICAgICAgICAgZmllbGRfbmFtZSA9ICIiDQogICAgICAgICAgICAgICAgZW50cnlfZmlsdGVycyA9IE5vbmUNCiAgICAgICAgICAgICAgICBlbnRyeV9rZXkgPSAiIg0KDQogICAgICAgICAgICAjIOS7hei+k+WHuuaVsOWAvOWIl++8muWIl+e0ouW8leebtOaOpeWvueW6lOaXtumXtOautQ0KICAgICAgICAgICAgIyDlvLrliLbloavlhYXmiYDmnInliJfvvIzkvJjlhYjkvb/nlKjmn6Xor6LmlbDmja7vvIzlkKbliJnkvb/nlKjpu5jorqTlgLwNCiAgICAgICAgICAgIGlmIGZpZWxkX25hbWU6DQogICAgICAgICAgICAgICAgdGFyZ2V0X2tleSA9IGVudHJ5X2tleSBvciBmaWVsZF9uYW1lDQoNCiAgICAgICAgICAgICAgICAjIOmBjeWOhuaJgOacieaXtumXtOauteWIl++8jOehruS/neavj+S4gOWIl+mDveacieaVsOaNrg0KICAgICAgICAgICAgICAgIGZvciBjb2xfaWR4LCBzbG90IGluIGVudW1lcmF0ZSh0aW1lX3Nsb3RzKToNCiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBOb25lDQoNCiAgICAgICAgICAgICAgICAgICAgIyDkvJjlhYjkvb/nlKjmn6Xor6LliLDnmoTmlbDmja4NCiAgICAgICAgICAgICAgICAgICAgaWYgdGVtcGVyYXR1cmVfZGF0YToNCiAgICAgICAgICAgICAgICAgICAgICAgIHNsb3RfZGF0YSA9IHRlbXBlcmF0dXJlX2RhdGEuZ2V0KHRhcmdldF9rZXksIHt9KQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2xvdF9kYXRhOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3Rfa2V5ID0gZiJ7Y29sX2lkeH1fe3Nsb3R9Ig0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gc2xvdF9kYXRhLmdldChzbG90X2tleSkNCg0KICAgICAgICAgICAgICAgICAgICBpZiB2YWx1ZSBpcyBOb25lIGFuZCB1c2VfZGVmYXVsdHM6DQogICAgICAgICAgICAgICAgICAgICAgICAjIOS9v+eUqOWfuuehgOm7mOiupOWAvCArIOaXtumXtOauteWBj+enu++8iOavj+S4quaXtumXtOauteWinuWKoDAuMeW6pu+8iQ0KICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF9iYXNlX3ZhbHVlID0gMjUuMCAgIyDnroDljJbnmoTpu5jorqTlgLwNCiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVfb2Zmc2V0ID0gY29sX2lkeCAqIDAuMQ0KICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBkZWZhdWx0X2Jhc2VfdmFsdWUgKyB0aW1lX29mZnNldA0KDQogICAgICAgICAgICAgICAgICAgIGlmIHZhbHVlIGlzIE5vbmU6DQogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV9zdHIgPSAiIg0KICAgICAgICAgICAgICAgICAgICBlbHNlOg0KICAgICAgICAgICAgICAgICAgICAgICAgIyDmoLzlvI/ljJbkuLrlrZfnrKbkuLLvvIjkv53nlZkx5L2N5bCP5pWw77yJDQogICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZV9zdHIgPSBmInt2YWx1ZTouMWZ9Ig0KDQogICAgICAgICAgICAgICAgICAgIGFkZF9jZWxsKGN1cnJlbnRfcm93LCBjb2xfaWR4LCB2YWx1ZV9zdHIpDQogICAgICAgICAgICBlbHNlOg0KICAgICAgICAgICAgICAgICMg5aaC5p6c5rKh5pyJ5a2X5q615ZCN77yM5aGr5YWF56m65a2X56ym5LiyDQogICAgICAgICAgICAgICAgZm9yIGNvbF9pZHggaW4gcmFuZ2UobGVuKHRpbWVfc2xvdHMpKToNCiAgICAgICAgICAgICAgICAgICAgYWRkX2NlbGwoY3VycmVudF9yb3csIGNvbF9pZHgsICIiKQ0KICAgICAgICAgICAgY3VycmVudF9yb3cgKz0gMQ0KDQogICAgcmV0dXJuIGNlbGxzDQoNCg0KZGVmIGJ1aWxkX3RlbXBlcmF0dXJlX3RhYmxlX3dpdGhfbG9hZF9zdGF0dXMoXzogRGljdFtzdHIsIEFueV0pIC0+IERpY3Rbc3RyLCBBbnldOg0KICAgICIiIuaehOW7uua4qeW6puihqOagvOaVsOaNru+8iOS7heS9v+eUqCBsb2FkX3N0YXR1cyA9IDEg55qE5pyJ5pWI5pWw5o2u77yJIiIiDQogICAgX3NldHVwX2xvZ2dpbmcoKQ0KICAgIA0KICAgIHRva2VuID0gb3MuZW52aXJvbi5nZXQoIlRBQkxFX1RPS0VOIiwgInNjcmlwdFRhYmxlMSIpDQogICAgcm93X29mZnNldCA9IGludChvcy5lbnZpcm9uLmdldCgiVEFCTEVfU1RBUlRfUk9XIiwgIjAiKSBvciAwKQ0KICAgIGNvbF9vZmZzZXQgPSBpbnQob3MuZW52aXJvbi5nZXQoIlRBQkxFX1NUQVJUX0NPTCIsICIwIikgb3IgMCkNCiAgICBtb3Rvcl9zcGVlZCA9IG9zLmVudmlyb24uZ2V0KCJUQUJMRV9NT1RPUl9TUEVFRCIsICI5ODBSUE0iKQ0KICAgIA0KICAgICMg6Kej5p6Q5a6e6aqM5pe26Ze06IyD5Zu0DQogICAgc3RhcnRfdGltZSwgZW5kX3RpbWUgPSBfcGFyc2VfZXhwZXJpbWVudF90aW1lcygpDQogICAgDQogICAgdGltZV9zbG90cyA9IF90aW1lX3Nsb3RzKCkNCiAgICBzZWN0aW9ucyA9IF9kZWZhdWx0X3NlY3Rpb25zKCkNCiAgICANCiAgICAjIOafpeivoua4qeW6puaVsOaNru+8iOS7heW9kyBsb2FkX3N0YXR1cyA9IDEg5pe277yJDQogICAgdGVtcGVyYXR1cmVfZGF0YSA9IF9sb2FkX3RlbXBlcmF0dXJlX2RhdGFfd2l0aF9sb2FkX3N0YXR1cyh0aW1lX3Nsb3RzLCBzZWN0aW9ucywgc3RhcnRfdGltZSwgZW5kX3RpbWUpDQogICAgDQogICAgIyDlp4vnu4jnpoHmraLpu5jorqTmlbDmja7vvIzkv53or4Hmn6Xor6LkuI3liLDlgLzml7bkv53mjIHnqbrnmb0NCiAgICB1c2VfZGVmYXVsdHMgPSBGYWxzZQ0KICAgIA0KICAgIGNlbGxzID0gX2J1aWxkX2NlbGxzX3dpdGhfbG9hZF9zdGF0dXMoDQogICAgICAgIHRpbWVfc2xvdHMsIA0KICAgICAgICBzZWN0aW9ucywgDQogICAgICAgIG1vdG9yX3NwZWVkLCANCiAgICAgICAgc3RhcnRfdGltZSwgDQogICAgICAgIGVuZF90aW1lLCANCiAgICAgICAgdGVtcGVyYXR1cmVfZGF0YSwNCiAgICAgICAgdXNlX2RlZmF1bHRzPXVzZV9kZWZhdWx0cw0KICAgICkNCiAgICANCiAgICAjIOW6lOeUqOihjOWBj+enuw0KICAgIGZvciBjZWxsIGluIGNlbGxzOg0KICAgICAgICBjZWxsWyJyb3ciXSArPSA0DQogICAgDQogICAgIyDmt7vliqDlrp7pqozml7bpl7Tkv6Hmga/vvIjkuI7ljp/lp4vohJrmnKzlrozlhajkuIDoh7TnmoTpgLvovpHvvIkNCiAgICBzdGFydF90aW1lX3JvdyA9IDENCiAgICBzdGFydF90aW1lX3ZhbHVlX2NvbCA9IDENCiAgICBlbmRfdGltZV92YWx1ZV9jb2wgPSAzDQogICAgDQogICAgIyDojrflj5bljp/lp4vml7bpl7TlrZfnrKbkuLLov5vooYzlpITnkIbvvIjkuI7ljp/lp4vohJrmnKzkv53mjIHkuIDoh7TvvIkNCiAgICBzdGFydF9zdHIgPSBvcy5lbnZpcm9uLmdldCgiRVhQRVJJTUVOVF9TVEFSVCIsICIiKS5zdHJpcCgpDQogICAgaWYgc3RhcnRfc3RyIGFuZCBzdGFydF90aW1lOg0KICAgICAgICB0cnk6DQogICAgICAgICAgICAjIOS9v+eUqOS4juWOn+Wni+iEmuacrOebuOWQjOeahOaXtumXtOWkhOeQhumAu+i+kQ0KICAgICAgICAgICAgdXRjX2F3YXJlX2R0ID0gZGF0ZXRpbWUuc3RycHRpbWUoc3RhcnRfc3RyLCAiJVktJW0tJWRUJUg6JU06JVMleiIpDQogICAgICAgICAgICBsb2NhbF9kdDEgPSB1dGNfYXdhcmVfZHQuYXN0aW1lem9uZSh0ej1Ob25lKQ0KICAgICAgICAgICAgbG9jYWxfZHQyID0gdXRjX2F3YXJlX2R0LmFzdGltZXpvbmUodHo9Tm9uZSkgKyB0aW1lZGVsdGEoaG91cnM9My41KQ0KICAgICAgICAgICAgc3RhcnRfdGltZV92YWx1ZSA9IGxvY2FsX2R0MS5zdHJmdGltZSgiJVktJW0tJWQgJUg6JU06JVMiKQ0KICAgICAgICAgICAgZW5kX3RpbWVfdmFsdWUgPSBsb2NhbF9kdDIuc3RyZnRpbWUoIiVZLSVtLSVkICVIOiVNOiVTIikNCiAgICAgICAgICAgIGNlbGxzLmFwcGVuZCh7InJvdyI6IHN0YXJ0X3RpbWVfcm93LCAiY29sIjogc3RhcnRfdGltZV92YWx1ZV9jb2wsICJ2YWx1ZSI6IHN0YXJ0X3RpbWVfdmFsdWV9KQ0KICAgICAgICAgICAgY2VsbHMuYXBwZW5kKHsicm93Ijogc3RhcnRfdGltZV9yb3csICJjb2wiOiBlbmRfdGltZV92YWx1ZV9jb2wsICJ2YWx1ZSI6IGVuZF90aW1lX3ZhbHVlfSkNCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOg0KICAgICAgICAgICAgTE9HR0VSLndhcm5pbmcoIkZhaWxlZCB0byBwcm9jZXNzIGV4cGVyaW1lbnQgdGltZSBzdHJpbmdzOiAlcyIsIGUpDQogICAgDQogICAgIyDmn6Xor6Lnjq/looPmuKnluqbvvIjkuI7ljp/lp4vohJrmnKzlrozlhajkuIDoh7TnmoTpgLvovpHvvIkNCiAgICBpbmZsdXhfdXJsID0gb3MuZW52aXJvbi5nZXQoIklORkxVWF9VUkwiLCAiIikuc3RyaXAoKQ0KICAgIGluZmx1eF9vcmcgPSBvcy5lbnZpcm9uLmdldCgiSU5GTFVYX09SRyIsICIiKS5zdHJpcCgpDQogICAgaW5mbHV4X3Rva2VuID0gb3MuZW52aXJvbi5nZXQoIklORkxVWF9UT0tFTiIsICIiKS5zdHJpcCgpDQogICAgaW5mbHV4X2J1Y2tldCA9IG9zLmVudmlyb24uZ2V0KCJJTkZMVVhfQlVDS0VUIiwgIlBDTSIpLnN0cmlwKCkNCiAgICBpbmZsdXhfbWVhc3VyZW1lbnQgPSBvcy5lbnZpcm9uLmdldCgiSU5GTFVYX01FQVNVUkVNRU5UIiwgIlBDTV9NZWFzdXJlbWVudCIpLnN0cmlwKCkNCiAgICANCiAgICBpZiBzdGFydF90aW1lIGFuZCBlbmRfdGltZToNCiAgICAgICAgIyDlr7nkuo7njq/looPmuKnluqbvvIzkvb/nlKjml7bpl7TojIPlm7Tmn6Xor6LvvIjkuI7ljp/lp4vohJrmnKzpgLvovpHkuIDoh7TvvIkNCiAgICAgICAgdmFsdWUgPSBfcXVlcnlfaW5mbHV4ZGJfcmFuZ2Vfd2l0aF9sb2FkX3N0YXR1cygNCiAgICAgICAgICAgICLnjq/looPmuKnluqYiLA0KICAgICAgICAgICAgc3RhcnRfdGltZSwNCiAgICAgICAgICAgIGVuZF90aW1lLA0KICAgICAgICAgICAgaW5mbHV4X3VybCwNCiAgICAgICAgICAgIGluZmx1eF9vcmcsDQogICAgICAgICAgICBpbmZsdXhfdG9rZW4sDQogICAgICAgICAgICBpbmZsdXhfYnVja2V0LA0KICAgICAgICAgICAgaW5mbHV4X21lYXN1cmVtZW50LA0KICAgICAgICAgICAgZmlsdGVycz17ImRhdGFfdHlwZSI6ICJMU0RBUSJ9LA0KICAgICAgICApDQogICAgICAgICMg56Gu5L+ddmFsdWXkuI3mmK9Ob25l77yM6YG/5YWNV29yZCBDT03mk43kvZzlvILluLjvvIjkuI7ljp/lp4vohJrmnKzkuIDoh7TvvIkNCiAgICAgICAgaWYgdmFsdWUgaXMgbm90IE5vbmU6DQogICAgICAgICAgICBjZWxscy5hcHBlbmQoeyJyb3ciOiAwLCAiY29sIjogMSwgInZhbHVlIjogZiJ7dmFsdWU6LjFmfSJ9KQ0KICAgICAgICBlbHNlOg0KICAgICAgICAgICAgY2VsbHMuYXBwZW5kKHsicm93IjogMCwgImNvbCI6IDEsICJ2YWx1ZSI6ICIifSkNCiAgICANCiAgICBMT0dHRVIuaW5mbygNCiAgICAgICAgIlRlbXBlcmF0dXJlIHRhYmxlIGJ1aWx0IHdpdGggbG9hZF9zdGF0dXM9MSBmaWx0ZXI6IHRva2VuPSVzIGNlbGxzPSVkIHRpbWVfc2xvdHM9JXMiLA0KICAgICAgICB0b2tlbiwNCiAgICAgICAgbGVuKGNlbGxzKSwNCiAgICAgICAgIiwiLmpvaW4odGltZV9zbG90cyksDQogICAgKQ0KICAgIA0KICAgIHJldHVybiB7DQogICAgICAgICJ0b2tlbiI6IHRva2VuLA0KICAgICAgICAic3RhcnRSb3ciOiByb3dfb2Zmc2V0LA0KICAgICAgICAic3RhcnRDb2wiOiBjb2xfb2Zmc2V0LA0KICAgICAgICAiY2VsbHMiOiBjZWxscywNCiAgICB9DQoNCg0KZGVmIF9sb2FkX3BheWxvYWQoKSAtPiBEaWN0W3N0ciwgQW55XToNCiAgICAiIiLku47moIflh4bovpPlhaXmiJbnjq/looPlj5jph4/liqDovb1wYXlsb2Fk5pWw5o2uIiIiDQogICAgdHJ5Og0KICAgICAgICAjIOWwneivleS7juagh+WHhui+k+WFpeivu+WPlkpTT04NCiAgICAgICAgdHJ5Og0KICAgICAgICAgICAgaW1wb3J0IHNlbGVjdA0KICAgICAgICAgICAgaWYgc2VsZWN0LnNlbGVjdChbc3lzLnN0ZGluXSwgW10sIFtdLCAwLjApWzBdOg0KICAgICAgICAgICAgICAgIHBheWxvYWRfc3RyID0gc3lzLnN0ZGluLnJlYWQoKS5zdHJpcCgpDQogICAgICAgICAgICAgICAgaWYgcGF5bG9hZF9zdHI6DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBqc29uLmxvYWRzKHBheWxvYWRfc3RyKQ0KICAgICAgICBleGNlcHQgSW1wb3J0RXJyb3I6DQogICAgICAgICAgICAjIFdpbmRvd3PkuIpzZWxlY3Tlj6/og73kuI3lj6/nlKjvvIzlsJ3or5Xnm7TmjqXor7vlj5YNCiAgICAgICAgICAgIGltcG9ydCBtc3ZjcnQNCiAgICAgICAgICAgIGlmIG1zdmNydC5rYmhpdCgpOg0KICAgICAgICAgICAgICAgIHBheWxvYWRfc3RyID0gc3lzLnN0ZGluLnJlYWQoKS5zdHJpcCgpDQogICAgICAgICAgICAgICAgaWYgcGF5bG9hZF9zdHI6DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBqc29uLmxvYWRzKHBheWxvYWRfc3RyKQ0KICAgIGV4Y2VwdCBFeGNlcHRpb246DQogICAgICAgIHBhc3MNCiAgICANCiAgICAjIOWmguaenOayoeacieagh+WHhui+k+WFpe+8jOi/lOWbnuepuuWtl+WFuA0KICAgIHJldHVybiB7fQ0KDQoNCmRlZiBfbG9nX2Vudmlyb25tZW50X3ZhcmlhYmxlcygpIC0+IE5vbmU6DQogICAgIiIi6K6w5b2V55u45YWz546v5aKD5Y+Y6YePIiIiDQogICAgZW52X3ZhcnMgPSBbDQogICAgICAgICJUQUJMRV9UT0tFTiIsICJUQUJMRV9TVEFSVF9ST1ciLCAiVEFCTEVfU1RBUlRfQ09MIiwgIlRBQkxFX1RJTUVfU0xPVFMiLCAiVEFCTEVfTU9UT1JfU1BFRUQiLA0KICAgICAgICAiRVhQRVJJTUVOVF9TVEFSVCIsICJFWFBFUklNRU5UX0VORCIsDQogICAgICAgICJJTkZMVVhfVVJMIiwgIklORkxVWF9PUkciLCAiSU5GTFVYX1RPS0VOIiwgIklORkxVWF9CVUNLRVQiLCAiSU5GTFVYX01FQVNVUkVNRU5UIg0KICAgIF0NCiAgICANCiAgICBmb3IgdmFyIGluIGVudl92YXJzOg0KICAgICAgICB2YWx1ZSA9IG9zLmVudmlyb24uZ2V0KHZhciwgIiIpDQogICAgICAgIGlmICJUT0tFTiIgaW4gdmFyIGFuZCB2YWx1ZToNCiAgICAgICAgICAgIHZhbHVlID0gX21hc2tfc2VjcmV0KHZhbHVlKQ0KICAgICAgICBMT0dHRVIuZGVidWcoIkVOViAlcz0lcyIsIHZhciwgdmFsdWUgb3IgIjxlbXB0eT4iKQ0KDQoNCmRlZiBtYWluKCkgLT4gaW50Og0KICAgIHRyeToNCiAgICAgICAgdHJ5Og0KICAgICAgICAgICAgaWYgbm90IGxvZ2dpbmcuZ2V0TG9nZ2VyKCkuaGFuZGxlcnM6DQogICAgICAgICAgICAgICAgbG9nX2xldmVsX25hbWUgPSBvcy5lbnZpcm9uLmdldCgiVEFCTEVfTE9HX0xFVkVMIiwgIkRFQlVHIikuc3RyaXAoKSBvciAiREVCVUciDQogICAgICAgICAgICAgICAgbG9nX2xldmVsID0gZ2V0YXR0cihsb2dnaW5nLCBsb2dfbGV2ZWxfbmFtZS51cHBlcigpLCBsb2dnaW5nLkRFQlVHKQ0KICAgICAgICAgICAgICAgIGxvZ19maWxlX3JhdyA9IG9zLmVudmlyb24uZ2V0KCJUQUJMRV9MT0dfRklMRSIsICJ0ZXN0LmxvZyIpLnN0cmlwKCkgb3IgInRlc3QubG9nIg0KICAgICAgICAgICAgICAgIGxvZ19maWxlID0gb3MucGF0aC5hYnNwYXRoKGxvZ19maWxlX3JhdykNCg0KICAgICAgICAgICAgICAgIGxvZ2dpbmcuYmFzaWNDb25maWcoDQogICAgICAgICAgICAgICAgICAgIGxldmVsPWxvZ19sZXZlbCwNCiAgICAgICAgICAgICAgICAgICAgZm9ybWF0PSIlKGFzY3RpbWUpcyBbJShsZXZlbG5hbWUpc10gJShuYW1lKXM6ICUobWVzc2FnZSlzIiwNCiAgICAgICAgICAgICAgICAgICAgaGFuZGxlcnM9Ww0KICAgICAgICAgICAgICAgICAgICAgICAgbG9nZ2luZy5GaWxlSGFuZGxlcihsb2dfZmlsZSwgZW5jb2Rpbmc9InV0Zi04IiksDQogICAgICAgICAgICAgICAgICAgICAgICBsb2dnaW5nLlN0cmVhbUhhbmRsZXIoc3lzLnN0ZGVyciksDQogICAgICAgICAgICAgICAgICAgIF0sDQogICAgICAgICAgICAgICAgKQ0KICAgICAgICAgICAgICAgIExPR0dFUi5pbmZvKCJMb2dnaW5nIGluaXRpYWxpemVkIC0+IGZpbGU9JXMgbGV2ZWw9JXMiLCBsb2dfZmlsZSwgbG9nZ2luZy5nZXRMZXZlbE5hbWUobG9nX2xldmVsKSkNCiAgICAgICAgICAgICAgICBfbG9nX2Vudmlyb25tZW50X3ZhcmlhYmxlcygpDQogICAgICAgICAgICBzeXMuc3Rkb3V0LnJlY29uZmlndXJlKGVuY29kaW5nPSJ1dGYtOCIpICAjIHR5cGU6IGlnbm9yZVthdHRyLWRlZmluZWRdDQogICAgICAgIGV4Y2VwdCBFeGNlcHRpb246DQogICAgICAgICAgICBwYXNzDQogICAgICAgIA0KICAgICAgICBwYXlsb2FkID0gX2xvYWRfcGF5bG9hZCgpDQogICAgICAgIHRhYmxlX3NwZWMgPSBidWlsZF90ZW1wZXJhdHVyZV90YWJsZV93aXRoX2xvYWRfc3RhdHVzKHBheWxvYWQpDQogICAgICAgIHJlc3VsdCA9IHsidGFibGVzIjogW3RhYmxlX3NwZWNdfQ0KICAgICAgICBwcmludChqc29uLmR1bXBzKHJlc3VsdCwgZW5zdXJlX2FzY2lpPUZhbHNlKSkNCiAgICAgICAgcmV0dXJuIDANCiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGV4YzoNCiAgICAgICAgcHJpbnQoZiJlcnJvcjoge2V4Y30iLCBmaWxlPXN5cy5zdGRlcnIpDQogICAgICAgIHJldHVybiAxDQoNCg0KaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoNCiAgICBzeXMuZXhpdChtYWluKCkpDQo=",
"scriptName": "table.py",
"remark": "PCM性能测试实验"
},
"configService": {
"host": "10.0.5.232",
"port": 5000,
"configPath": "config-1.2-debug.yaml"
},
"globalParameters": {
"parameters": {
"work_order_no": "COT8888",
"process_no": "TEST-8888",
"part_no": "TEST-PART-8888",
"executor": "测试人员",
"current_date": "2026-03-13",
"config_type": "600泵",
"process_name": "泵空跑合"
}
}
}