{ "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+8jOm7mOiupCBQQ01fTWVhc3VyZW1lbnQNCiIiIg0KDQpmcm9tIF9fZnV0dXJlX18gaW1wb3J0IGFubm90YXRpb25zDQoNCmltcG9ydCBqc29uDQppbXBvcnQgbG9nZ2luZw0KaW1wb3J0IG9zDQppbXBvcnQgc3lzDQpmcm9tIGRhdGV0aW1lIGltcG9ydCBkYXRldGltZSwgdGltZWRlbHRhDQpmcm9tIHR5cGluZyBpbXBvcnQgQW55LCBEaWN0LCBMaXN0LCBPcHRpb25hbA0KDQoNCmRlZiBfbWFza19zZWNyZXQodmFsdWU6IE9wdGlvbmFsW3N0cl0pIC0+IHN0cjoNCiAgICAiIiLmjqnnoIHmlY/mhJ/kv6Hmga8iIiINCiAgICBpZiBub3QgdmFsdWU6DQogICAgICAgIHJldHVybiAiPGVtcHR5PiINCiAgICBpZiBsZW4odmFsdWUpIDw9IDg6DQogICAgICAgIHJldHVybiAiKiIgKiBsZW4odmFsdWUpDQogICAgcmV0dXJuIHZhbHVlWzo0XSArICIqIiAqIChsZW4odmFsdWUpIC0gOCkgKyB2YWx1ZVstNDpdDQoNCg0KY2xhc3MgX0R1bW15TG9nZ2VyOg0KICAgIGRlZiBkZWJ1ZyhzZWxmLCAqYXJncywgKiprd2FyZ3MpOiBwYXNzDQogICAgZGVmIGluZm8oc2VsZiwgKmFyZ3MsICoqa3dhcmdzKTogcGFzcw0KICAgIGRlZiB3YXJuaW5nKHNlbGYsICphcmdzLCAqKmt3YXJncyk6IHBhc3MNCiAgICBkZWYgZXJyb3Ioc2VsZiwgKmFyZ3MsICoqa3dhcmdzKTogcGFzcw0KDQpMT0dHRVIgPSBfRHVtbXlMb2dnZXIoKQ0KDQoNCmRlZiBfc2V0dXBfbG9nZ2luZygpIC0+IE5vbmU6DQogICAgcGFzcw0KDQoNCmRlZiBfZ2V0X2luZmx1eF9jb25maWcoKSAtPiBEaWN0W3N0ciwgc3RyXToNCiAgICAiIiLojrflj5ZJbmZsdXhEQumFjee9riIiIg0KICAgIGNvbmZpZyA9IHsNCiAgICAgICAgJ3VybCc6IG9zLmVudmlyb24uZ2V0KCJJTkZMVVhfVVJMIiwgIiIpLnN0cmlwKCksDQogICAgICAgICdvcmcnOiBvcy5lbnZpcm9uLmdldCgiSU5GTFVYX09SRyIsICIiKS5zdHJpcCgpLA0KICAgICAgICAndG9rZW4nOiBvcy5lbnZpcm9uLmdldCgiSU5GTFVYX1RPS0VOIiwgIiIpLnN0cmlwKCksDQogICAgICAgICdidWNrZXQnOiBvcy5lbnZpcm9uLmdldCgiSU5GTFVYX0JVQ0tFVCIsICJQQ00iKS5zdHJpcCgpLA0KICAgICAgICAnbWVhc3VyZW1lbnQnOiBvcy5lbnZpcm9uLmdldCgiSU5GTFVYX01FQVNVUkVNRU5UIiwgIlBDTV9NZWFzdXJlbWVudCIpLnN0cmlwKCksDQogICAgfQ0KICAgIHJldHVybiBjb25maWcNCg0KDQpkZWYgX3BhcnNlX2V4cGVyaW1lbnRfdGltZXMoKSAtPiB0dXBsZVtPcHRpb25hbFtkYXRldGltZV0sIE9wdGlvbmFsW2RhdGV0aW1lXV06DQogICAgIiIi6Kej5p6Q5a6e6aqM5pe26Ze0IiIiDQogICAgc3RhcnRfc3RyID0gb3MuZW52aXJvbi5nZXQoIkVYUEVSSU1FTlRfU1RBUlQiLCAiIikuc3RyaXAoKQ0KICAgIGVuZF9zdHIgPSBvcy5lbnZpcm9uLmdldCgiRVhQRVJJTUVOVF9FTkQiLCAiIikuc3RyaXAoKQ0KICAgIA0KICAgIHN0YXJ0X3RpbWU6IE9wdGlvbmFsW2RhdGV0aW1lXSA9IE5vbmUNCiAgICBlbmRfdGltZTogT3B0aW9uYWxbZGF0ZXRpbWVdID0gTm9uZQ0KICAgIA0KICAgIGlmIHN0YXJ0X3N0cjoNCiAgICAgICAgdHJ5Og0KICAgICAgICAgICAgZm9yIGZtdCBpbiBbIiVZLSVtLSVkVCVIOiVNOiVTWiIsICIlWS0lbS0lZFQlSDolTTolUyV6Il06DQogICAgICAgICAgICAgICAgdHJ5Og0KICAgICAgICAgICAgICAgICAgICBzdGFydF90aW1lID0gZGF0ZXRpbWUuc3RycHRpbWUoc3RhcnRfc3RyLCBmbXQpDQogICAgICAgICAgICAgICAgICAgIGlmIHN0YXJ0X3RpbWUudHppbmZvIGlzIG5vdCBOb25lOg0KICAgICAgICAgICAgICAgICAgICAgICAgIyDovazmjaLkuLrmnKzlnLDml7bpl7TlubbljrvpmaTml7bljLrkv6Hmga8NCiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0X3RpbWUgPSBzdGFydF90aW1lLmFzdGltZXpvbmUodHo9Tm9uZSkucmVwbGFjZSh0emluZm89Tm9uZSkNCiAgICAgICAgICAgICAgICAgICAgYnJlYWsNCiAgICAgICAgICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoNCiAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOg0KICAgICAgICAgICAgcHJpbnQoZiJXYXJuaW5nOiBGYWlsZWQgdG8gcGFyc2UgRVhQRVJJTUVOVF9TVEFSVCAne3N0YXJ0X3N0cn0nOiB7ZX0iLCBmaWxlPXN5cy5zdGRlcnIpDQogICAgDQogICAgaWYgZW5kX3N0cjoNCiAgICAgICAgdHJ5Og0KICAgICAgICAgICAgZm9yIGZtdCBpbiBbIiVZLSVtLSVkVCVIOiVNOiVTWiIsICIlWS0lbS0lZFQlSDolTTolUyV6Il06DQogICAgICAgICAgICAgICAgdHJ5Og0KICAgICAgICAgICAgICAgICAgICBlbmRfdGltZSA9IGRhdGV0aW1lLnN0cnB0aW1lKGVuZF9zdHIsIGZtdCkNCiAgICAgICAgICAgICAgICAgICAgaWYgZW5kX3RpbWUudHppbmZvIGlzIG5vdCBOb25lOg0KICAgICAgICAgICAgICAgICAgICAgICAgIyDovazmjaLkuLrmnKzlnLDml7bpl7TlubbljrvpmaTml7bljLrkv6Hmga8NCiAgICAgICAgICAgICAgICAgICAgICAgIGVuZF90aW1lID0gZW5kX3RpbWUuYXN0aW1lem9uZSh0ej1Ob25lKS5yZXBsYWNlKHR6aW5mbz1Ob25lKQ0KICAgICAgICAgICAgICAgICAgICBicmVhaw0KICAgICAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOg0KICAgICAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6DQogICAgICAgICAgICBwcmludChmIldhcm5pbmc6IEZhaWxlZCB0byBwYXJzZSBFWFBFUklNRU5UX0VORCAne2VuZF9zdHJ9Jzoge2V9IiwgZmlsZT1zeXMuc3RkZXJyKQ0KICAgIA0KICAgIHJldHVybiBzdGFydF90aW1lLCBlbmRfdGltZQ0KDQoNCmRlZiBfcGFyc2VfdGltZV9zbG90KHNsb3Rfc3RyOiBzdHIpIC0+IGZsb2F0Og0KICAgICIiIuino+aekOaXtumXtOanveWtl+espuS4suS4uuWwj+aXtuaVsCIiIg0KICAgIGlmIG5vdCBzbG90X3N0cjoNCiAgICAgICAgcmV0dXJuIDAuMA0KICAgIA0KICAgIHNsb3Rfc3RyID0gc2xvdF9zdHIuc3RyaXAoKS5sb3dlcigpDQogICAgDQogICAgaWYgc2xvdF9zdHIuZW5kc3dpdGgoJ2gnKToNCiAgICAgICAgdHJ5Og0KICAgICAgICAgICAgcmV0dXJuIGZsb2F0KHNsb3Rfc3RyWzotMV0pDQogICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOg0KICAgICAgICAgICAgcGFzcw0KICAgIA0KICAgIHRyeToNCiAgICAgICAgcmV0dXJuIGZsb2F0KHNsb3Rfc3RyKQ0KICAgIGV4Y2VwdCBWYWx1ZUVycm9yOg0KICAgICAgICBwYXNzDQogICAgDQogICAgcmV0dXJuIDAuMA0KDQoNCmRlZiBfdGltZV9zbG90cygpIC0+IExpc3Rbc3RyXToNCiAgICByYXcgPSBvcy5lbnZpcm9uLmdldCgiVEFCTEVfVElNRV9TTE9UUyIsICIiKS5zdHJpcCgpDQogICAgaWYgbm90IHJhdzoNCiAgICAgICAgIyDmoLnmja7lm77niYfvvIzml7bpl7TliLvluqbmmK/vvJowLjVoLCAxaCwgMS41aCwgMmgsIDIuNWgsIDNoLCAzLjVo77yIN+WIl++8iQ0KICAgICAgICByZXR1cm4gWyIwLjVoIiwgIjFoIiwgIjEuNWgiLCAiMmgiLCAiMi41aCIsICIzaCIsICIzLjVoIl0NCiAgICBzbG90cyA9IFtzbG90LnN0cmlwKCkgZm9yIHNsb3QgaW4gcmF3LnNwbGl0KCIsIildDQogICAgcmV0dXJuIFtzbG90IGZvciBzbG90IGluIHNsb3RzIGlmIHNsb3RdDQoNCg0KZGVmIF9kZWZhdWx0X3NlY3Rpb25zKCkgLT4gTGlzdFtEaWN0W3N0ciwgQW55XV06DQogICAgIyBuYW1lIC0+IHJvd3MgdW5kZXJuZWF0aO+8iGVudHJpZXPvvIkNCiAgICAjIOavj+S4qiBlbnRyeSDlr7nlupTkuIDkuKrmtYvor5Xpg6jkvY3vvIzpnIDopoHmmKDlsITliLAgSW5mbHV4REIg55qEIGZpZWxkIOaIliB0YWcNCiAgICByZXR1cm4gWw0KICAgICAgICB7Im5hbWUiOiAi5Li76L205om/IiwgImVudHJpZXMiOiBbDQogICAgICAgICAgICB7ImxhYmVsIjogIiMxIiwgImZpZWxkIjogIuS4u+i9tOaJvyMxIiwgImZpbHRlcnMiOiB7ImRhdGFfdHlwZSI6ICJMU0RBUSJ9LCAicmVzdWx0X2tleSI6ICLkuLvovbTmib8jMSJ9LA0KICAgICAgICAgICAgeyJsYWJlbCI6ICIjMiIsICJmaWVsZCI6ICLkuLvovbTmib8jMiIsICJmaWx0ZXJzIjogeyJkYXRhX3R5cGUiOiAiTFNEQVEifSwgInJlc3VsdF9rZXkiOiAi5Li76L205om/IzIifSwNCiAgICAgICAgICAgIHsibGFiZWwiOiAiIzMiLCAiZmllbGQiOiAi5Li76L205om/IzMiLCAiZmlsdGVycyI6IHsiZGF0YV90eXBlIjogIkxTREFRIn0sICJyZXN1bHRfa2V5IjogIuS4u+i9tOaJvyMzIn0sDQogICAgICAgICAgICB7ImxhYmVsIjogIiM0IiwgImZpZWxkIjogIuS4u+i9tOaJvyM0IiwgImZpbHRlcnMiOiB7ImRhdGFfdHlwZSI6ICJMU0RBUSJ9LCAicmVzdWx0X2tleSI6ICLkuLvovbTmib8jNCJ9LA0KICAgICAgICAgICAgeyJsYWJlbCI6ICIjNSIsICJmaWVsZCI6ICLkuLvovbTmib8jNSIsICJmaWx0ZXJzIjogeyJkYXRhX3R5cGUiOiAiTFNEQVEifSwgInJlc3VsdF9rZXkiOiAi5Li76L205om/IzUifSwNCiAgICAgICAgICAgIHsibGFiZWwiOiAiIzYiLCAiZmllbGQiOiAi5Li76L205om/IzYiLCAiZmlsdGVycyI6IHsiZGF0YV90eXBlIjogIkxTREFRIn0sICJyZXN1bHRfa2V5IjogIuS4u+i9tOaJvyM2In0sDQogICAgICAgIF19LA0KICAgICAgICB7Im5hbWUiOiAi5Y2B5a2X5aS0IiwgImVudHJpZXMiOiBbDQogICAgICAgICAgICB7ImxhYmVsIjogIiMxIiwgImZpZWxkIjogIuWNgeWtl+WktCMxIiwgImZpbHRlcnMiOiB7ImRhdGFfdHlwZSI6ICJMU0RBUSJ9LCAicmVzdWx0X2tleSI6ICLljYHlrZflpLQjMSJ9LA0KICAgICAgICAgICAgeyJsYWJlbCI6ICIjMiIsICJmaWVsZCI6ICLljYHlrZflpLQjMiIsICJmaWx0ZXJzIjogeyJkYXRhX3R5cGUiOiAiTFNEQVEifSwgInJlc3VsdF9rZXkiOiAi5Y2B5a2X5aS0IzIifSwNCiAgICAgICAgICAgIHsibGFiZWwiOiAiIzMiLCAiZmllbGQiOiAi5Y2B5a2X5aS0IzMiLCAiZmlsdGVycyI6IHsiZGF0YV90eXBlIjogIkxTREFRIn0sICJyZXN1bHRfa2V5IjogIuWNgeWtl+WktCMzIn0sDQogICAgICAgICAgICB7ImxhYmVsIjogIiM0IiwgImZpZWxkIjogIuWNgeWtl+WktCM0IiwgImZpbHRlcnMiOiB7ImRhdGFfdHlwZSI6ICJMU0RBUSJ9LCAicmVzdWx0X2tleSI6ICLljYHlrZflpLQjNCJ9LA0KICAgICAgICAgICAgeyJsYWJlbCI6ICIjNSIsICJmaWVsZCI6ICLljYHlrZflpLQjNSIsICJmaWx0ZXJzIjogeyJkYXRhX3R5cGUiOiAiTFNEQVEifSwgInJlc3VsdF9rZXkiOiAi5Y2B5a2X5aS0IzUifSwNCiAgICAgICAgXX0sDQogICAgICAgIHsibmFtZSI6ICLlh4/pgJ/nrrHlsI/ovbTmib8iLCAiZW50cmllcyI6IFsNCiAgICAgICAgICAgIHsibGFiZWwiOiAiIzHvvIjovpPlhaXms5XlhbDnq6/vvIkiLCAiZmllbGQiOiAi5YeP6YCf566x5bCP6L205om/MSIsICJmaWx0ZXJzIjogeyJkYXRhX3R5cGUiOiAiTFNEQVEifSwgInJlc3VsdF9rZXkiOiAi5YeP6YCf566x5bCP6L205om/IzEifSwNCiAgICAgICAgICAgIHsibGFiZWwiOiAiIzIiLCAiZmllbGQiOiAi5YeP6YCf566x5bCP6L205om/IzIiLCAiZmlsdGVycyI6IHsiZGF0YV90eXBlIjogIkxTREFRIn0sICJyZXN1bHRfa2V5IjogIuWHj+mAn+euseWwj+i9tOaJvyMyIn0sDQogICAgICAgIF19LA0KICAgICAgICB7Im5hbWUiOiAi5YeP6YCf566x5aSn6L205om/IiwgImVudHJpZXMiOiBbDQogICAgICAgICAgICB7ImxhYmVsIjogIiMz77yI5aSn56uv55uW56uv77yJIiwgImZpZWxkIjogIuWHj+mAn+euseWkp+i9tOaJvyMzIiwgImZpbHRlcnMiOiB7ImRhdGFfdHlwZSI6ICJMU0RBUSJ9LCAicmVzdWx0X2tleSI6ICLlh4/pgJ/nrrHlpKfovbTmib8jMyJ9LA0KICAgICAgICAgICAgeyJsYWJlbCI6ICIjNCIsICJmaWVsZCI6ICLlh4/pgJ/nrrHlpKfovbTmib8jNCIsICJmaWx0ZXJzIjogeyJkYXRhX3R5cGUiOiAiTFNEQVEifSwgInJlc3VsdF9rZXkiOiAi5YeP6YCf566x5aSn6L205om/IzQifSwNCiAgICAgICAgXX0sDQogICAgICAgIHsibmFtZSI6ICLmtqbmu5HmsrnmuKkiLCAiZW50cmllcyI6IFsNCiAgICAgICAgICAgIHsibGFiZWwiOiAiIiwgImZpZWxkIjogIm1lYW4iLCAiZmlsdGVycyI6IHsiZGF0YV90eXBlIjogIua2pua7keayuea4qSJ9LCAicmVzdWx0X2tleSI6ICLmtqbmu5HmsrnmuKkifSwNCiAgICAgICAgXX0sDQogICAgICAgIHsibmFtZSI6ICLmtqbmu5HmsrnljosiLCAiZW50cmllcyI6IFsNCiAgICAgICAgICAgIHsibGFiZWwiOiAiKFBzaSkiLCAiZmllbGQiOiAibWVhbiIsICJmaWx0ZXJzIjogeyJkYXRhX3R5cGUiOiAi5ram5ruR5rK55Y6LIn0sICJyZXN1bHRfa2V5IjogIua2pua7keayueWOiyJ9LA0KICAgICAgICBdfSwNCiAgICBdDQoNCmRlZiBfcXVlcnlfbG9hZF9zdGF0dXNfdGltZWxpbmUoDQogICAgc3RhcnRfdGltZTogZGF0ZXRpbWUsDQogICAgZW5kX3RpbWU6IGRhdGV0aW1lLA0KICAgIGluZmx1eF91cmw6IHN0ciwNCiAgICBpbmZsdXhfb3JnOiBzdHIsDQogICAgaW5mbHV4X3Rva2VuOiBzdHIsDQogICAgaW5mbHV4X2J1Y2tldDogc3RyLA0KICAgIGluZmx1eF9tZWFzdXJlbWVudDogc3RyLA0KKSAtPiBMaXN0W0RpY3Rbc3RyLCBBbnldXToNCiAgICAiIiLmn6Xor6LmlbTkuKrlrp7pqozmnJ/pl7TnmoRsb2FkX3N0YXR1c+aXtumXtOe6v+aVsOaNriIiIg0KICAgIHRyeToNCiAgICAgICAgZnJvbSBpbmZsdXhkYl9jbGllbnQgaW1wb3J0IEluZmx1eERCQ2xpZW50DQogICAgICAgIGltcG9ydCBwYW5kYXMgYXMgcGQNCiAgICAgICAgaW1wb3J0IHdhcm5pbmdzDQogICAgICAgIGZyb20gaW5mbHV4ZGJfY2xpZW50LmNsaWVudC53YXJuaW5ncyBpbXBvcnQgTWlzc2luZ1Bpdm90RnVuY3Rpb24NCiAgICBleGNlcHQgSW1wb3J0RXJyb3I6DQogICAgICAgIHBhc3MNCiAgICAgICAgcmV0dXJuIFtdDQoNCiAgICB0cnk6DQogICAgICAgIGNsaWVudCA9IEluZmx1eERCQ2xpZW50KHVybD1pbmZsdXhfdXJsLCBvcmc9aW5mbHV4X29yZywgdG9rZW49aW5mbHV4X3Rva2VuKQ0KICAgICAgICBxdWVyeV9hcGkgPSBjbGllbnQucXVlcnlfYXBpKCkNCg0KICAgICAgICBzdGFydF9yZmMgPSBzdGFydF90aW1lLnN0cmZ0aW1lKCclWS0lbS0lZFQlSDolTTolU1onKQ0KICAgICAgICBlbmRfcmZjID0gZW5kX3RpbWUuc3RyZnRpbWUoJyVZLSVtLSVkVCVIOiVNOiVTWicpDQoNCiAgICAgICAgIyDmn6Xor6Jsb2FkX3N0YXR1c+Wtl+auteeahOaJgOacieaVsOaNrueCue+8iOWcqEJyZWFrZXLmlbDmja7nsbvlnovkuK3vvIkNCiAgICAgICAgZmx1eCA9IGYnJycNCmZyb20oYnVja2V0OiAie2luZmx1eF9idWNrZXR9IikNCiAgfD4gcmFuZ2Uoc3RhcnQ6IHtzdGFydF9yZmN9LCBzdG9wOiB7ZW5kX3JmY30pDQogIHw+IGZpbHRlcihmbjogKHIpID0+IHJbIl9tZWFzdXJlbWVudCJdID09ICJ7aW5mbHV4X21lYXN1cmVtZW50fSIpDQogIHw+IGZpbHRlcihmbjogKHIpID0+IHJbImRhdGFfdHlwZSJdID09ICJCcmVha2VyIikNCiAgfD4gZmlsdGVyKGZuOiAocikgPT4gclsiX2ZpZWxkIl0gPT0gImxvYWRfc3RhdHVzIikNCiAgfD4gc29ydChjb2x1bW5zOiBbIl90aW1lIl0pDQogIHw+IHlpZWxkKG5hbWU6ICJsb2FkX3N0YXR1c190aW1lbGluZSIpDQonJycuc3RyaXAoKQ0KDQogICAgICAgIHBhc3MNCg0KICAgICAgICB3aXRoIHdhcm5pbmdzLmNhdGNoX3dhcm5pbmdzKCk6DQogICAgICAgICAgICB3YXJuaW5ncy5zaW1wbGVmaWx0ZXIoImlnbm9yZSIsIE1pc3NpbmdQaXZvdEZ1bmN0aW9uKQ0KICAgICAgICAgICAgZnJhbWVzID0gcXVlcnlfYXBpLnF1ZXJ5X2RhdGFfZnJhbWUoZmx1eCkNCiAgICAgICAgDQogICAgICAgIGlmIGlzaW5zdGFuY2UoZnJhbWVzLCBsaXN0KToNCiAgICAgICAgICAgIGRmID0gcGQuY29uY2F0KGZyYW1lcywgaWdub3JlX2luZGV4PVRydWUpIGlmIGZyYW1lcyBlbHNlIHBkLkRhdGFGcmFtZSgpDQogICAgICAgIGVsc2U6DQogICAgICAgICAgICBkZiA9IGZyYW1lcw0KDQogICAgICAgIGlmIGRmLmVtcHR5IG9yICdfdmFsdWUnIG5vdCBpbiBkZi5jb2x1bW5zIG9yICdfdGltZScgbm90IGluIGRmLmNvbHVtbnM6DQogICAgICAgICAgICBwYXNzDQogICAgICAgICAgICByZXR1cm4gW10NCg0KICAgICAgICAjIOi9rOaNouS4uuaXtumXtOe6v+aVsOaNru+8jOehruS/neaXtuWMuuS4gOiHtOaApw0KICAgICAgICB0aW1lbGluZSA9IFtdDQogICAgICAgIGZvciBfLCByb3cgaW4gZGYuaXRlcnJvd3MoKToNCiAgICAgICAgICAgIHRpbWVfb2JqID0gcGQudG9fZGF0ZXRpbWUocm93WydfdGltZSddKQ0KICAgICAgICAgICAgIyDovazmjaLkuLrmnKzlnLDml7bpl7TvvIzljrvpmaTml7bljLrkv6Hmga/vvIzkuI5zdGFydF90aW1lL2VuZF90aW1l5L+d5oyB5LiA6Ie0DQogICAgICAgICAgICBpZiBoYXNhdHRyKHRpbWVfb2JqLCAndHonKSBhbmQgdGltZV9vYmoudHogaXMgbm90IE5vbmU6DQogICAgICAgICAgICAgICAgIyDlr7nkuo5wYW5kYXMgVGltZXN0YW1w77yM5YWI6L2s5o2i5Li65pys5Zyw5pe25Yy65YaN6L2s5Li6UHl0aG9uIGRhdGV0aW1lDQogICAgICAgICAgICAgICAgdGltZV9vYmogPSB0aW1lX29iai50el9jb252ZXJ0KE5vbmUpLnRvX3B5ZGF0ZXRpbWUoKQ0KICAgICAgICAgICAgZWxpZiBoYXNhdHRyKHRpbWVfb2JqLCAndG9fcHlkYXRldGltZScpOg0KICAgICAgICAgICAgICAgICMg6L2s5o2i5Li6UHl0aG9uIGRhdGV0aW1l5a+56LGhDQogICAgICAgICAgICAgICAgdGltZV9vYmogPSB0aW1lX29iai50b19weWRhdGV0aW1lKCkNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgIyDnoa7kv53msqHmnInml7bljLrkv6Hmga8NCiAgICAgICAgICAgIGlmIGhhc2F0dHIodGltZV9vYmosICd0emluZm8nKSBhbmQgdGltZV9vYmoudHppbmZvIGlzIG5vdCBOb25lOg0KICAgICAgICAgICAgICAgIHRpbWVfb2JqID0gdGltZV9vYmoucmVwbGFjZSh0emluZm89Tm9uZSkNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgIHRpbWVsaW5lLmFwcGVuZCh7DQogICAgICAgICAgICAgICAgJ3RpbWUnOiB0aW1lX29iaiwNCiAgICAgICAgICAgICAgICAnbG9hZF9zdGF0dXMnOiBmbG9hdChyb3dbJ192YWx1ZSddKQ0KICAgICAgICAgICAgfSkNCg0KICAgICAgICBwYXNzDQogICAgICAgIA0KICAgICAgICAjIOiwg+ivle+8muajgOafpeaXtumXtOWvueixoeexu+Weiw0KICAgICAgICBpZiB0aW1lbGluZToNCiAgICAgICAgICAgIGZpcnN0X3RpbWUgPSB0aW1lbGluZVswXVsndGltZSddDQogICAgICAgICAgICBwYXNzDQogICAgICAgIHBhc3MNCiAgICAgICAgcGFzcw0KICAgICAgICANCiAgICAgICAgcmV0dXJuIHRpbWVsaW5lDQoNCiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6DQogICAgICAgIHBhc3MNCiAgICAgICAgcmV0dXJuIFtdDQogICAgZmluYWxseToNCiAgICAgICAgdHJ5Og0KICAgICAgICAgICAgY2xpZW50LmNsb3NlKCkNCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoNCiAgICAgICAgICAgIHBhc3MNCg0KDQpkZWYgX2NhbGN1bGF0ZV9lZmZlY3RpdmVfdGltZV9wb2ludHMoDQogICAgc3RhcnRfdGltZTogZGF0ZXRpbWUsDQogICAgZW5kX3RpbWU6IGRhdGV0aW1lLA0KICAgIHRpbWVfc2xvdHM6IExpc3Rbc3RyXSwNCiAgICBpbmZsdXhfY29uZmlnOiBEaWN0W3N0ciwgc3RyXQ0KKSAtPiBEaWN0W3N0ciwgT3B0aW9uYWxbZGF0ZXRpbWVdXToNCiAgICAiIiLorqHnrpfln7rkuo7mnInmlYjov5DooYzml7bpl7TntK/orqHnmoTnnJ/lrp7ml7bpl7TngrkiIiINCiAgICANCiAgICAjIDEuIOiOt+WPlmxvYWRfc3RhdHVz5pe26Ze057q/DQogICAgdGltZWxpbmUgPSBfcXVlcnlfbG9hZF9zdGF0dXNfdGltZWxpbmUoDQogICAgICAgIHN0YXJ0X3RpbWUsIGVuZF90aW1lLA0KICAgICAgICBpbmZsdXhfY29uZmlnWyd1cmwnXSwgaW5mbHV4X2NvbmZpZ1snb3JnJ10sIGluZmx1eF9jb25maWdbJ3Rva2VuJ10sDQogICAgICAgIGluZmx1eF9jb25maWdbJ2J1Y2tldCddLCBpbmZsdXhfY29uZmlnWydtZWFzdXJlbWVudCddDQogICAgKQ0KICAgIA0KICAgIGlmIG5vdCB0aW1lbGluZToNCiAgICAgICAgcGFzcw0KICAgICAgICAjIOWbnumAgOWIsOWOn+Wni+aXtumXtOiuoeeulw0KICAgICAgICByZXN1bHQgPSB7fQ0KICAgICAgICBmb3Igc2xvdF9zdHIgaW4gdGltZV9zbG90czoNCiAgICAgICAgICAgIHNsb3RfaG91cnMgPSBfcGFyc2VfdGltZV9zbG90KHNsb3Rfc3RyKQ0KICAgICAgICAgICAgcmVzdWx0W3Nsb3Rfc3RyXSA9IHN0YXJ0X3RpbWUgKyB0aW1lZGVsdGEoaG91cnM9c2xvdF9ob3VycykNCiAgICAgICAgcmV0dXJuIHJlc3VsdA0KICAgIA0KICAgICMgMi4g6K6h566X5pyJ5pWI6L+Q6KGM5pe26Ze05q61DQogICAgZWZmZWN0aXZlX3BlcmlvZHMgPSBbXQ0KICAgIGN1cnJlbnRfcGVyaW9kX3N0YXJ0ID0gTm9uZQ0KICAgIA0KICAgIGZvciBpLCBwb2ludCBpbiBlbnVtZXJhdGUodGltZWxpbmUpOg0KICAgICAgICBpZiBwb2ludFsnbG9hZF9zdGF0dXMnXSA9PSAxLjA6DQogICAgICAgICAgICBpZiBjdXJyZW50X3BlcmlvZF9zdGFydCBpcyBOb25lOg0KICAgICAgICAgICAgICAgIGN1cnJlbnRfcGVyaW9kX3N0YXJ0ID0gcG9pbnRbJ3RpbWUnXQ0KICAgICAgICBlbHNlOiAgIyBsb2FkX3N0YXR1cyAhPSAxLjANCiAgICAgICAgICAgIGlmIGN1cnJlbnRfcGVyaW9kX3N0YXJ0IGlzIG5vdCBOb25lOg0KICAgICAgICAgICAgICAgIGVmZmVjdGl2ZV9wZXJpb2RzLmFwcGVuZCh7DQogICAgICAgICAgICAgICAgICAgICdzdGFydCc6IGN1cnJlbnRfcGVyaW9kX3N0YXJ0LA0KICAgICAgICAgICAgICAgICAgICAnZW5kJzogcG9pbnRbJ3RpbWUnXSwNCiAgICAgICAgICAgICAgICAgICAgJ2R1cmF0aW9uX2hvdXJzJzogKHBvaW50Wyd0aW1lJ10gLSBjdXJyZW50X3BlcmlvZF9zdGFydCkudG90YWxfc2Vjb25kcygpIC8gMzYwMC4wDQogICAgICAgICAgICAgICAgfSkNCiAgICAgICAgICAgICAgICBjdXJyZW50X3BlcmlvZF9zdGFydCA9IE5vbmUNCiAgICANCiAgICAjIOWkhOeQhuacgOWQjuS4gOS4quWRqOacn++8iOWmguaenOWunumqjOe7k+adn+aXtuS7jeWcqOi/kOihjO+8iQ0KICAgIGlmIGN1cnJlbnRfcGVyaW9kX3N0YXJ0IGlzIG5vdCBOb25lOg0KICAgICAgICBlZmZlY3RpdmVfcGVyaW9kcy5hcHBlbmQoew0KICAgICAgICAgICAgJ3N0YXJ0JzogY3VycmVudF9wZXJpb2Rfc3RhcnQsDQogICAgICAgICAgICAnZW5kJzogZW5kX3RpbWUsDQogICAgICAgICAgICAnZHVyYXRpb25faG91cnMnOiAoZW5kX3RpbWUgLSBjdXJyZW50X3BlcmlvZF9zdGFydCkudG90YWxfc2Vjb25kcygpIC8gMzYwMC4wDQogICAgICAgIH0pDQogICAgDQogICAgdG90YWxfZWZmZWN0aXZlX2hvdXJzID0gc3VtKHBlcmlvZFsnZHVyYXRpb25faG91cnMnXSBmb3IgcGVyaW9kIGluIGVmZmVjdGl2ZV9wZXJpb2RzKQ0KICAgIA0KICAgIGZvciBwZXJpb2QgaW4gZWZmZWN0aXZlX3BlcmlvZHM6DQogICAgICAgIHBhc3MNCiAgICANCiAgICAjIDMuIOiuoeeul+avj+S4quaXtumXtOanveWvueW6lOeahOecn+WunuaXtumXtOeCuQ0KICAgIGVmZmVjdGl2ZV90aW1lX3BvaW50cyA9IHt9DQogICAgDQogICAgZm9yIHNsb3Rfc3RyIGluIHRpbWVfc2xvdHM6DQogICAgICAgIHRhcmdldF9lZmZlY3RpdmVfaG91cnMgPSBfcGFyc2VfdGltZV9zbG90KHNsb3Rfc3RyKQ0KICAgICAgICANCiAgICAgICAgaWYgdGFyZ2V0X2VmZmVjdGl2ZV9ob3VycyA8PSAwOg0KICAgICAgICAgICAgZWZmZWN0aXZlX3RpbWVfcG9pbnRzW3Nsb3Rfc3RyXSA9IE5vbmUNCiAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgIA0KICAgICAgICAjIOWmguaenOebruagh+aXtumXtCA+PSDmgLvmnInmlYjml7bpl7TvvIjlhYHorrjlsI/nmoTmta7ngrnor6/lt67vvInvvIzkvb/nlKjmnIDlkI7kuIDkuKrmnInmlYjml7bpl7TmrrXnmoTnu5PmnZ/ml7bpl7QNCiAgICAgICAgIyDov5nmoLflj6/ku6XlpITnkIbovrnnlYzmg4XlhrXvvJrlrp7pqozmraPlpb3ov5DooYzkuobnm67moIfml7bplb/vvIzkvYbnlLHkuo7mta7ngrnnsr7luqblj6/og73nlaXlsI/kuo7nm67moIflgLwNCiAgICAgICAgdG9sZXJhbmNlID0gMC4wMSAgIyDlhYHorrggMC4wMSDlsI/ml7bnmoTlrrnlt64NCiAgICAgICAgaWYgdGFyZ2V0X2VmZmVjdGl2ZV9ob3VycyA+PSB0b3RhbF9lZmZlY3RpdmVfaG91cnMgLSB0b2xlcmFuY2U6DQogICAgICAgICAgICBpZiBlZmZlY3RpdmVfcGVyaW9kczoNCiAgICAgICAgICAgICAgICAjIOS9v+eUqOacgOWQjuS4gOS4quacieaViOaXtumXtOauteeahOe7k+adn+aXtumXtA0KICAgICAgICAgICAgICAgIGxhc3RfcGVyaW9kID0gZWZmZWN0aXZlX3BlcmlvZHNbLTFdDQogICAgICAgICAgICAgICAgdGFyZ2V0X3RpbWVfcG9pbnQgPSBsYXN0X3BlcmlvZFsnZW5kJ10NCiAgICAgICAgICAgICAgICBlZmZlY3RpdmVfdGltZV9wb2ludHNbc2xvdF9zdHJdID0gdGFyZ2V0X3RpbWVfcG9pbnQNCiAgICAgICAgICAgICAgICBwYXNzDQogICAgICAgICAgICBlbHNlOg0KICAgICAgICAgICAgICAgICMg5aaC5p6c5rKh5pyJ5pyJ5pWI5pe26Ze05q6177yM5L2/55So5a6e6aqM57uT5p2f5pe26Ze0DQogICAgICAgICAgICAgICAgZWZmZWN0aXZlX3RpbWVfcG9pbnRzW3Nsb3Rfc3RyXSA9IGVuZF90aW1lDQogICAgICAgICAgICAgICAgcGFzcw0KICAgICAgICAgICAgY29udGludWUKICAgICAgICANCiAgICAgICAgIyDlnKjmnInmlYjml7bpl7TmrrXkuK3mn6Xmib7ntK/orqHov5DooYx0YXJnZXRfZWZmZWN0aXZlX2hvdXJz5bCP5pe255qE5pe26Ze054K5DQogICAgICAgIGN1bXVsYXRpdmVfaG91cnMgPSAwLjANCiAgICAgICAgdGFyZ2V0X3RpbWVfcG9pbnQgPSBOb25lDQogICAgICAgIA0KICAgICAgICBmb3IgcGVyaW9kIGluIGVmZmVjdGl2ZV9wZXJpb2RzOg0KICAgICAgICAgICAgcGVyaW9kX2R1cmF0aW9uID0gcGVyaW9kWydkdXJhdGlvbl9ob3VycyddDQogICAgICAgICAgICANCiAgICAgICAgICAgIGlmIGN1bXVsYXRpdmVfaG91cnMgKyBwZXJpb2RfZHVyYXRpb24gPj0gdGFyZ2V0X2VmZmVjdGl2ZV9ob3VyczoNCiAgICAgICAgICAgICAgICAjIOebruagh+aXtumXtOeCueWcqOi/meS4quWRqOacn+WGhQ0KICAgICAgICAgICAgICAgIHJlbWFpbmluZ19ob3VycyA9IHRhcmdldF9lZmZlY3RpdmVfaG91cnMgLSBjdW11bGF0aXZlX2hvdXJzDQogICAgICAgICAgICAgICAgdGFyZ2V0X3RpbWVfcG9pbnQgPSBwZXJpb2RbJ3N0YXJ0J10gKyB0aW1lZGVsdGEoaG91cnM9cmVtYWluaW5nX2hvdXJzKQ0KICAgICAgICAgICAgICAgIGJyZWFrDQogICAgICAgICAgICBlbHNlOg0KICAgICAgICAgICAgICAgIGN1bXVsYXRpdmVfaG91cnMgKz0gcGVyaW9kX2R1cmF0aW9uDQogICAgICAgIA0KICAgICAgICBlZmZlY3RpdmVfdGltZV9wb2ludHNbc2xvdF9zdHJdID0gdGFyZ2V0X3RpbWVfcG9pbnQNCiAgICAgICAgDQogICAgICAgIGlmIHRhcmdldF90aW1lX3BvaW50Og0KICAgICAgICAgICAgcGFzcw0KICAgICAgICBlbHNlOg0KICAgICAgICAgICAgcGFzcw0KICAgIA0KICAgIHJldHVybiBlZmZlY3RpdmVfdGltZV9wb2ludHMNCg0KDQpkZWYgX3F1ZXJ5X2luZmx1eGRiX3JhbmdlX3dpdGhfbG9hZF9zdGF0dXMoDQogICAgZmllbGRfbmFtZTogc3RyLA0KICAgIHN0YXJ0X3RpbWU6IGRhdGV0aW1lLA0KICAgIGVuZF90aW1lOiBkYXRldGltZSwNCiAgICBpbmZsdXhfdXJsOiBzdHIsDQogICAgaW5mbHV4X29yZzogc3RyLA0KICAgIGluZmx1eF90b2tlbjogc3RyLA0KICAgIGluZmx1eF9idWNrZXQ6IHN0ciwNCiAgICBpbmZsdXhfbWVhc3VyZW1lbnQ6IHN0ciwNCiAgICBmaWx0ZXJzOiBPcHRpb25hbFtEaWN0W3N0ciwgc3RyXV0gPSBOb25lLA0KKSAtPiBPcHRpb25hbFtmbG9hdF06DQogICAgIiIi5p+l6K+iIEluZmx1eERCIOiOt+WPluaMh+WumuWtl+auteWcqOaXtumXtOiMg+WbtOWGheeahOW5s+Wdh+WAvO+8iOS7heW9kyBsb2FkX3N0YXR1cyA9IDEg5pe277yJIiIiDQogICAgdHJ5Og0KICAgICAgICBmcm9tIGluZmx1eGRiX2NsaWVudCBpbXBvcnQgSW5mbHV4REJDbGllbnQNCiAgICAgICAgaW1wb3J0IHBhbmRhcyBhcyBwZA0KICAgICAgICBpbXBvcnQgd2FybmluZ3MNCiAgICAgICAgZnJvbSBpbmZsdXhkYl9jbGllbnQuY2xpZW50Lndhcm5pbmdzIGltcG9ydCBNaXNzaW5nUGl2b3RGdW5jdGlvbg0KICAgIGV4Y2VwdCBJbXBvcnRFcnJvcjoNCiAgICAgICAgcGFzcw0KICAgICAgICByZXR1cm4gTm9uZQ0KDQogICAgdHJ5Og0KICAgICAgICBjbGllbnQgPSBJbmZsdXhEQkNsaWVudCh1cmw9aW5mbHV4X3VybCwgb3JnPWluZmx1eF9vcmcsIHRva2VuPWluZmx1eF90b2tlbikNCiAgICAgICAgcXVlcnlfYXBpID0gY2xpZW50LnF1ZXJ5X2FwaSgpDQoNCiAgICAgICAgc3RhcnRfcmZjID0gc3RhcnRfdGltZS5zdHJmdGltZSgnJVktJW0tJWRUJUg6JU06JVNaJykNCiAgICAgICAgZW5kX3JmYyA9IGVuZF90aW1lLnN0cmZ0aW1lKCclWS0lbS0lZFQlSDolTTolU1onKQ0KDQogICAgICAgICMg5p6E5bu66L+H5ruk5p2h5Lu2DQogICAgICAgIHRhZ19maWx0ZXJzID0gIiINCiAgICAgICAgaWYgZmlsdGVyczoNCiAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIGZpbHRlcnMuaXRlbXMoKToNCiAgICAgICAgICAgICAgICB0YWdfZmlsdGVycyArPSBmJ1xuICB8PiBmaWx0ZXIoZm46IChyKSA9PiByWyJ7a2V5fSJdID09ICJ7dmFsdWV9IiknDQoNCiAgICAgICAgIyDlr7nkuo7njq/looPmuKnluqbvvIzlj5blhajpg6jpnZ4w5pWw5o2u55qE5Z2H5YC877yb5YW25LuW5a2X5q615LuN6ZyAbG9hZF9zdGF0dXM9Meetm+mAiQ0KICAgICAgICBpZiBmaWVsZF9uYW1lID09ICLnjq/looPmuKnluqYiOg0KICAgICAgICAgICAgZmx1eCA9IGYnJycNCmZyb20oYnVja2V0OiAie2luZmx1eF9idWNrZXR9IikNCiAgfD4gcmFuZ2Uoc3RhcnQ6IHtzdGFydF9yZmN9LCBzdG9wOiB7ZW5kX3JmY30pDQogIHw+IGZpbHRlcihmbjogKHIpID0+IHJbIl9tZWFzdXJlbWVudCJdID09ICJ7aW5mbHV4X21lYXN1cmVtZW50fSIpDQogIHw+IGZpbHRlcihmbjogKHIpID0+IHJbIl9maWVsZCJdID09ICJ7ZmllbGRfbmFtZX0iKQ0KICB8PiBmaWx0ZXIoZm46IChyKSA9PiByWyJfdmFsdWUiXSAhPSAwLjApe3RhZ19maWx0ZXJzfQ0KICB8PiBtZWFuKCkNCiAgfD4geWllbGQobmFtZTogIm1lYW5fbm9uX3plcm8iKQ0KJycnLnN0cmlwKCkNCiAgICAgICAgZWxzZToNCiAgICAgICAgICAgIGZsdXggPSBmJycnDQpmcm9tKGJ1Y2tldDogIntpbmZsdXhfYnVja2V0fSIpDQogIHw+IHJhbmdlKHN0YXJ0OiB7c3RhcnRfcmZjfSwgc3RvcDoge2VuZF9yZmN9KQ0KICB8PiBmaWx0ZXIoZm46IChyKSA9PiByWyJfbWVhc3VyZW1lbnQiXSA9PSAie2luZmx1eF9tZWFzdXJlbWVudH0iKQ0KICB8PiBmaWx0ZXIoZm46IChyKSA9PiByWyJfZmllbGQiXSA9PSAie2ZpZWxkX25hbWV9Iil7dGFnX2ZpbHRlcnN9DQogIHw+IG1lYW4oKQ0KICB8PiB5aWVsZChuYW1lOiAibWVhbl90ZW1wZXJhdHVyZV9kYXRhIikNCicnJy5zdHJpcCgpDQoNCiAgICAgICAgcGFzcw0KDQogICAgICAgIHdpdGggd2FybmluZ3MuY2F0Y2hfd2FybmluZ3MoKToNCiAgICAgICAgICAgIHdhcm5pbmdzLnNpbXBsZWZpbHRlcigiaWdub3JlIiwgTWlzc2luZ1Bpdm90RnVuY3Rpb24pDQogICAgICAgICAgICBmcmFtZXMgPSBxdWVyeV9hcGkucXVlcnlfZGF0YV9mcmFtZShmbHV4KQ0KICAgICAgICANCiAgICAgICAgaWYgaXNpbnN0YW5jZShmcmFtZXMsIGxpc3QpOg0KICAgICAgICAgICAgZGYgPSBwZC5jb25jYXQoZnJhbWVzLCBpZ25vcmVfaW5kZXg9VHJ1ZSkgaWYgZnJhbWVzIGVsc2UgcGQuRGF0YUZyYW1lKCkNCiAgICAgICAgZWxzZToNCiAgICAgICAgICAgIGRmID0gZnJhbWVzDQoNCiAgICAgICAgIyDojrflj5bnnqzml7blgLzvvIjmnIDov5HnmoTkuIDkuKrmnInmlYjmlbDmja7ngrnvvIkNCiAgICAgICAgaWYgZGYuZW1wdHkgb3IgJ192YWx1ZScgbm90IGluIGRmLmNvbHVtbnM6DQogICAgICAgICAgICBwYXNzDQogICAgICAgICAgICByZXR1cm4gTm9uZQ0KICAgICAgICAgICAgDQogICAgICAgICMg5Y+W56ys5LiA6KGM55qE5YC877yI5Zug5Li65p+l6K+i5bey57uP5o6S5bqP5bm25Y+W5LqGbGFzdCgp77yJDQogICAgICAgIGluc3RhbnRfdmFsdWUgPSBkZlsnX3ZhbHVlJ10uaWxvY1swXQ0KICAgICAgICBpZiBwZC5pc25hKGluc3RhbnRfdmFsdWUpOg0KICAgICAgICAgICAgcGFzcw0KICAgICAgICAgICAgcmV0dXJuIE5vbmUNCg0KICAgICAgICB2YWx1ZSA9IGZsb2F0KGluc3RhbnRfdmFsdWUpDQogICAgICAgIA0KICAgICAgICAjIOWmguaenOacieaXtumXtOS/oeaBr++8jOiusOW9leWunumZheeahOaVsOaNruaXtumXtOeCuQ0KICAgICAgICBpZiAnX3RpbWUnIGluIGRmLmNvbHVtbnM6DQogICAgICAgICAgICBwYXNzDQogICAgICAgIGVsc2U6DQogICAgICAgICAgICBwYXNzDQogICAgICAgICAgICANCiAgICAgICAgcmV0dXJuIHZhbHVlDQogICAgZXhjZXB0IEV4Y2VwdGlvbiBhcyBlOg0KICAgICAgICBwYXNzCiAgICAgICAgcGFzcw0KICAgICAgICByZXR1cm4gTm9uZQ0KICAgIGZpbmFsbHk6DQogICAgICAgIHRyeToNCiAgICAgICAgICAgIGNsaWVudC5jbG9zZSgpDQogICAgICAgIGV4Y2VwdCBFeGNlcHRpb246DQogICAgICAgICAgICBwYXNzDQoNCg0KZGVmIF9xdWVyeV9pbmZsdXhkYl93aXRoX2xvYWRfc3RhdHVzKA0KICAgIGZpZWxkX25hbWU6IHN0ciwNCiAgICB0YXJnZXRfdGltZTogZGF0ZXRpbWUsDQogICAgaW5mbHV4X3VybDogc3RyLA0KICAgIGluZmx1eF9vcmc6IHN0ciwNCiAgICBpbmZsdXhfdG9rZW46IHN0ciwNCiAgICBpbmZsdXhfYnVja2V0OiBzdHIsDQogICAgaW5mbHV4X21lYXN1cmVtZW50OiBzdHIsDQogICAgZmlsdGVyczogT3B0aW9uYWxbRGljdFtzdHIsIHN0cl1dID0gTm9uZSwNCikgLT4gT3B0aW9uYWxbZmxvYXRdOg0KICAgICIiIuafpeivoiBJbmZsdXhEQiDojrflj5bmjIflrprlrZfmrrXlnKjmjIflrprml7bpl7TngrnnmoTnnqzml7blgLzvvIjku4XlvZMgbG9hZF9zdGF0dXMgPSAxIOaXtu+8iSIiIg0KICAgIHRyeToNCiAgICAgICAgZnJvbSBpbmZsdXhkYl9jbGllbnQgaW1wb3J0IEluZmx1eERCQ2xpZW50DQogICAgICAgIGltcG9ydCBwYW5kYXMgYXMgcGQNCiAgICAgICAgaW1wb3J0IHdhcm5pbmdzDQogICAgICAgIGZyb20gaW5mbHV4ZGJfY2xpZW50LmNsaWVudC53YXJuaW5ncyBpbXBvcnQgTWlzc2luZ1Bpdm90RnVuY3Rpb24NCiAgICBleGNlcHQgSW1wb3J0RXJyb3I6DQogICAgICAgIHBhc3MNCiAgICAgICAgcmV0dXJuIE5vbmUNCg0KICAgIHRyeToNCiAgICAgICAgY2xpZW50ID0gSW5mbHV4REJDbGllbnQodXJsPWluZmx1eF91cmwsIG9yZz1pbmZsdXhfb3JnLCB0b2tlbj1pbmZsdXhfdG9rZW4pDQogICAgICAgIHF1ZXJ5X2FwaSA9IGNsaWVudC5xdWVyeV9hcGkoKQ0KDQogICAgICAgICMg5p+l6K+i6YC76L6R77ya5p+l6K+i55uu5qCH5pe26Ze054K55LmL5YmN77yI5YyF5ZCr55uu5qCH5pe26Ze054K577yJ55qE5pWw5o2u77yM6I635Y+W5pyA5o6l6L+R55uu5qCH5pe26Ze054K555qE556s5pe25YC8DQogICAgICAgICMg5L2/55So5a6e6aqM5byA5aeL5pe26Ze05L2c5Li65p+l6K+i6LW354K577yM55uu5qCH5pe26Ze054K55L2c5Li65p+l6K+i57uI54K577yM56Gu5L+d6I635Y+W6K+l5pe26Ze054K555qE556s5pe25pWw5YC8DQogICAgICAgICMg6ZyA6KaB5LuO5a6e6aqM5byA5aeL5pe26Ze05p+l6K+i77yM5Zug5Li65pyJ5pWI5pe26Ze054K55piv5Z+65LqO57Sv6K6h6L+Q6KGM5pe26Ze06K6h566X55qEDQogICAgICAgIA0KICAgICAgICAjIOiOt+WPluWunumqjOW8gOWni+aXtumXtO+8iOmcgOimgeS7jueOr+Wig+WPmOmHj+aIluS8oOWFpeWPguaVsOiOt+WPlu+8iQ0KICAgICAgICAjIOS4uuS6hueugOWMlu+8jOaIkeS7rOS9v+eUqOS4gOS4quWQiOeQhueahOaXtumXtOeql+WPo++8muS7juebruagh+aXtumXtOeCueW+gOWJjeaOqOi2s+Wkn+mVv+eahOaXtumXtA0KICAgICAgICAjIOS9huS4uuS6hueyvuehru+8jOaIkeS7rOW6lOivpeafpeivouWIsOebruagh+aXtumXtOeCueS4uuatou+8jOWPluacgOWQjuS4gOadoQ0KICAgICAgICB3aW5kb3dfbWludXRlcyA9IDYwICAjIOW+gOWJjeafpeivojYw5YiG6ZKf77yM56Gu5L+d6IO96KaG55uW5Yiw5pWw5o2uDQogICAgICAgIA0KICAgICAgICBxdWVyeV9zdGFydCA9IHRhcmdldF90aW1lIC0gdGltZWRlbHRhKG1pbnV0ZXM9d2luZG93X21pbnV0ZXMpDQogICAgICAgICMg5p+l6K+i57uI54K56K6+572u5Li655uu5qCH5pe26Ze054K577yM56Gu5L+d6I635Y+W55qE5piv6K+l5pe26Ze054K55oiW5LmL5YmN55qE5pWw5o2uDQogICAgICAgIHF1ZXJ5X2VuZCA9IHRhcmdldF90aW1lDQogICAgICAgIA0KICAgICAgICBxdWVyeV9zdGFydF9yZmMgPSBxdWVyeV9zdGFydC5zdHJmdGltZSgnJVktJW0tJWRUJUg6JU06JVNaJykNCiAgICAgICAgcXVlcnlfZW5kX3JmYyA9IHF1ZXJ5X2VuZC5zdHJmdGltZSgnJVktJW0tJWRUJUg6JU06JVNaJykNCg0KICAgICAgICAjIOaehOW7uui/h+a7pOadoeS7tg0KICAgICAgICB0YWdfZmlsdGVycyA9ICIiDQogICAgICAgIGlmIGZpbHRlcnM6DQogICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBmaWx0ZXJzLml0ZW1zKCk6DQogICAgICAgICAgICAgICAgdGFnX2ZpbHRlcnMgKz0gZidcbiAgfD4gZmlsdGVyKGZuOiAocikgPT4gclsie2tleX0iXSA9PSAie3ZhbHVlfSIpJw0KDQogICAgICAgICMg5p+l6K+i5rip5bqm5pWw5o2u77ya5p+l6K+i5Yiw55uu5qCH5pe26Ze054K55Li65q2i77yM5Y+W5pyA5ZCO5LiA5p2h77yI5pyA5o6l6L+R55uu5qCH5pe26Ze054K555qE556s5pe25YC877yJDQogICAgICAgIGZsdXggPSBmJycnDQpmcm9tKGJ1Y2tldDogIntpbmZsdXhfYnVja2V0fSIpDQogIHw+IHJhbmdlKHN0YXJ0OiB7cXVlcnlfc3RhcnRfcmZjfSwgc3RvcDoge3F1ZXJ5X2VuZF9yZmN9KQ0KICB8PiBmaWx0ZXIoZm46IChyKSA9PiByWyJfbWVhc3VyZW1lbnQiXSA9PSAie2luZmx1eF9tZWFzdXJlbWVudH0iKQ0KICB8PiBmaWx0ZXIoZm46IChyKSA9PiByWyJfZmllbGQiXSA9PSAie2ZpZWxkX25hbWV9Iil7dGFnX2ZpbHRlcnN9DQogIHw+IHNvcnQoY29sdW1uczogWyJfdGltZSJdKQ0KICB8PiBsYXN0KCkNCiAgfD4geWllbGQobmFtZTogImluc3RhbnRhbmVvdXNfYXRfZWZmZWN0aXZlX3RpbWUiKQ0KJycnLnN0cmlwKCkNCg0KICAgICAgICBwYXNzDQoNCiAgICAgICAgd2l0aCB3YXJuaW5ncy5jYXRjaF93YXJuaW5ncygpOg0KICAgICAgICAgICAgd2FybmluZ3Muc2ltcGxlZmlsdGVyKCJpZ25vcmUiLCBNaXNzaW5nUGl2b3RGdW5jdGlvbikNCiAgICAgICAgICAgIGZyYW1lcyA9IHF1ZXJ5X2FwaS5xdWVyeV9kYXRhX2ZyYW1lKGZsdXgpDQogICAgICAgIA0KICAgICAgICBpZiBpc2luc3RhbmNlKGZyYW1lcywgbGlzdCk6DQogICAgICAgICAgICBkZiA9IHBkLmNvbmNhdChmcmFtZXMsIGlnbm9yZV9pbmRleD1UcnVlKSBpZiBmcmFtZXMgZWxzZSBwZC5EYXRhRnJhbWUoKQ0KICAgICAgICBlbHNlOg0KICAgICAgICAgICAgZGYgPSBmcmFtZXMNCg0KICAgICAgICAjIOiOt+WPlueerOaXtuWAvO+8iOacgOi/keeahOS4gOS4quacieaViOaVsOaNrueCue+8iQ0KICAgICAgICBpZiBkZi5lbXB0eSBvciAnX3ZhbHVlJyBub3QgaW4gZGYuY29sdW1uczoNCiAgICAgICAgICAgIHBhc3MNCiAgICAgICAgICAgIHJldHVybiBOb25lDQogICAgICAgICAgICANCiAgICAgICAgIyDlj5bnrKzkuIDooYznmoTlgLzvvIjlm6DkuLrmn6Xor6Llt7Lnu4/mjpLluo/lubblj5bkuoZsYXN0KCnvvIkNCiAgICAgICAgaW5zdGFudF92YWx1ZSA9IGRmWydfdmFsdWUnXS5pbG9jWzBdDQogICAgICAgIGlmIHBkLmlzbmEoaW5zdGFudF92YWx1ZSk6DQogICAgICAgICAgICBwYXNzDQogICAgICAgICAgICByZXR1cm4gTm9uZQ0KDQogICAgICAgIHZhbHVlID0gZmxvYXQoaW5zdGFudF92YWx1ZSkNCiAgICAgICAgDQogICAgICAgICMg5aaC5p6c5pyJ5pe26Ze05L+h5oGv77yM6K6w5b2V5a6e6ZmF55qE5pWw5o2u5pe26Ze054K5DQogICAgICAgIGlmICdfdGltZScgaW4gZGYuY29sdW1uczoNCiAgICAgICAgICAgIHBhc3MNCiAgICAgICAgZWxzZToNCiAgICAgICAgICAgIHBhc3MNCiAgICAgICAgICAgIA0KICAgICAgICByZXR1cm4gdmFsdWUNCiAgICBleGNlcHQgRXhjZXB0aW9uIGFzIGU6DQogICAgICAgIHBhc3MNCiAgICAgICAgcmV0dXJuIE5vbmUNCiAgICBmaW5hbGx5Og0KICAgICAgICB0cnk6DQogICAgICAgICAgICBjbGllbnQuY2xvc2UoKQ0KICAgICAgICBleGNlcHQgRXhjZXB0aW9uOg0KICAgICAgICAgICAgcGFzcw0KDQoNCmRlZiBfbG9hZF90ZW1wZXJhdHVyZV9kYXRhX3dpdGhfbG9hZF9zdGF0dXMoDQogICAgdGltZV9zbG90czogTGlzdFtzdHJdLA0KICAgIHNlY3Rpb25zOiBMaXN0W0RpY3Rbc3RyLCBBbnldXSwNCiAgICBzdGFydF90aW1lOiBPcHRpb25hbFtkYXRldGltZV0sDQogICAgZW5kX3RpbWU6IE9wdGlvbmFsW2RhdGV0aW1lXSwNCikgLT4gRGljdFtzdHIsIERpY3Rbc3RyLCBmbG9hdF1dOg0KICAgICIiIuS7jiBJbmZsdXhEQiDmn6Xor6LmiYDmnInmtYvor5Xpg6jkvY3lnKjlkITml7bpl7TngrnnmoTnnqzml7bmuKnluqblgLzvvIjku4XlvZMgbG9hZF9zdGF0dXMgPSAxIOaXtu+8iSIiIg0KICAgIGlmIG5vdCBzdGFydF90aW1lIG9yIG5vdCBlbmRfdGltZToNCiAgICAgICAgcGFzcw0KICAgICAgICByZXR1cm4ge30NCiAgICANCiAgICBpbmZsdXhfY29uZmlnID0gX2dldF9pbmZsdXhfY29uZmlnKCkNCiAgICANCiAgICBpZiBub3QgYWxsKFtpbmZsdXhfY29uZmlnWyd1cmwnXSwgaW5mbHV4X2NvbmZpZ1snb3JnJ10sIGluZmx1eF9jb25maWdbJ3Rva2VuJ10sIA0KICAgICAgICAgICAgICAgIGluZmx1eF9jb25maWdbJ2J1Y2tldCddLCBpbmZsdXhfY29uZmlnWydtZWFzdXJlbWVudCddXSk6DQogICAgICAgIHBhc3MNCiAgICAgICAgcmV0dXJuIHt9DQogICAgDQogICAgIyDorqHnrpfmgLvml7bplb/vvIjlsI/ml7bvvIkNCiAgICB0b3RhbF9kdXJhdGlvbiA9IChlbmRfdGltZSAtIHN0YXJ0X3RpbWUpLnRvdGFsX3NlY29uZHMoKSAvIDM2MDAuMA0KICAgIA0KICAgICMg5pS26ZuG5omA5pyJ6ZyA6KaB5p+l6K+i55qE5a2X5q61DQogICAgcXVlcnlfdGFyZ2V0czogTGlzdFt0dXBsZVtzdHIsIERpY3Rbc3RyLCBBbnldXV0gPSBbXQ0KICAgIGZvciBzZWN0aW9uIGluIHNlY3Rpb25zOg0KICAgICAgICBlbnRyaWVzID0gc2VjdGlvbi5nZXQoImVudHJpZXMiKSBvciBbXQ0KICAgICAgICBmb3IgZW50cnkgaW4gZW50cmllczoNCiAgICAgICAgICAgIGlmIGlzaW5zdGFuY2UoZW50cnksIGRpY3QpOg0KICAgICAgICAgICAgICAgIGZpZWxkX25hbWUgPSBlbnRyeS5nZXQoImZpZWxkIiwgIiIpDQogICAgICAgICAgICAgICAgaWYgZmllbGRfbmFtZToNCiAgICAgICAgICAgICAgICAgICAgcXVlcnlfdGFyZ2V0cy5hcHBlbmQoKGZpZWxkX25hbWUsIGVudHJ5KSkNCg0KICAgIGlmIG5vdCBxdWVyeV90YXJnZXRzOg0KICAgICAgICByZXR1cm4ge30NCiAgICANCiAgICAjIOiuoeeul+WfuuS6juacieaViOi/kOihjOaXtumXtOe0r+iuoeeahOecn+WunuaXtumXtOeCuQ0KICAgIGVmZmVjdGl2ZV90aW1lX3BvaW50cyA9IF9jYWxjdWxhdGVfZWZmZWN0aXZlX3RpbWVfcG9pbnRzKA0KICAgICAgICBzdGFydF90aW1lLCBlbmRfdGltZSwgdGltZV9zbG90cywgaW5mbHV4X2NvbmZpZw0KICAgICkNCiAgICANCiAgICAjIOS4uuavj+S4quacieaViOaXtumXtOeCueafpeivoua4qeW6puaVsOaNrg0KICAgIHRlbXBlcmF0dXJlX2RhdGE6IERpY3Rbc3RyLCBEaWN0W3N0ciwgZmxvYXRdXSA9IHt9DQogICAgDQogICAgZm9yIGlkeCwgc2xvdF9zdHIgaW4gZW51bWVyYXRlKHRpbWVfc2xvdHMpOg0KICAgICAgICB0YXJnZXRfdGltZV9wb2ludCA9IGVmZmVjdGl2ZV90aW1lX3BvaW50cy5nZXQoc2xvdF9zdHIpDQogICAgICAgIA0KICAgICAgICBpZiB0YXJnZXRfdGltZV9wb2ludCBpcyBOb25lOg0KICAgICAgICAgICAgcGFzcw0KICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgDQogICAgICAgIHBhc3MNCiAgICAgICAgDQogICAgICAgIGZvciBmaWVsZF9uYW1lLCBlbnRyeSBpbiBxdWVyeV90YXJnZXRzOg0KICAgICAgICAgICAgcmVzdWx0X2tleSA9IGVudHJ5LmdldCgicmVzdWx0X2tleSIpIG9yIGZpZWxkX25hbWUNCiAgICAgICAgICAgIGlmIG5vdCByZXN1bHRfa2V5Og0KICAgICAgICAgICAgICAgIHJlc3VsdF9rZXkgPSBmaWVsZF9uYW1lDQogICAgICAgICAgICBlbnRyeV9maWx0ZXJzID0gZW50cnkuZ2V0KCJmaWx0ZXJzIikgaWYgaXNpbnN0YW5jZShlbnRyeSwgZGljdCkgZWxzZSBOb25lDQogICAgICAgICAgICBpZiByZXN1bHRfa2V5IG5vdCBpbiB0ZW1wZXJhdHVyZV9kYXRhOg0KICAgICAgICAgICAgICAgIHRlbXBlcmF0dXJlX2RhdGFbcmVzdWx0X2tleV0gPSB7fQ0KDQogICAgICAgICAgICAjIOS9v+eUqOe0ouW8leS9nOS4umtlee+8jOWboOS4uuWPr+iDveaciemHjeWkjeeahOaXtumXtOWIu+W6pg0KICAgICAgICAgICAgc2xvdF9rZXkgPSBmIntpZHh9X3tzbG90X3N0cn0iICAjIOS9v+eUqOe0ouW8lSvml7bpl7TliLvluqbkvZzkuLrllK/kuIBrZXkNCg0KICAgICAgICAgICAgIyDmn6Xor6Lnnqzml7blgLzvvIjlnKjmnInmlYjml7bpl7TngrnvvIkNCiAgICAgICAgICAgIHZhbHVlID0gX3F1ZXJ5X2luZmx1eGRiX3dpdGhfbG9hZF9zdGF0dXMoDQogICAgICAgICAgICAgICAgZmllbGRfbmFtZSwNCiAgICAgICAgICAgICAgICB0YXJnZXRfdGltZV9wb2ludCwNCiAgICAgICAgICAgICAgICBpbmZsdXhfY29uZmlnWyd1cmwnXSwNCiAgICAgICAgICAgICAgICBpbmZsdXhfY29uZmlnWydvcmcnXSwNCiAgICAgICAgICAgICAgICBpbmZsdXhfY29uZmlnWyd0b2tlbiddLA0KICAgICAgICAgICAgICAgIGluZmx1eF9jb25maWdbJ2J1Y2tldCddLA0KICAgICAgICAgICAgICAgIGluZmx1eF9jb25maWdbJ21lYXN1cmVtZW50J10sDQogICAgICAgICAgICAgICAgZmlsdGVycz1lbnRyeV9maWx0ZXJzIGlmIGVudHJ5X2ZpbHRlcnMgZWxzZSBOb25lLA0KICAgICAgICAgICAgKQ0KDQogICAgICAgICAgICBpZiB2YWx1ZSBpcyBub3QgTm9uZToNCiAgICAgICAgICAgICAgICB0ZW1wZXJhdHVyZV9kYXRhW3Jlc3VsdF9rZXldW3Nsb3Rfa2V5XSA9IHZhbHVlDQogICAgICAgICAgICAgICAgTE9HR0VSLmRlYnVnKA0KICAgICAgICAgICAgICAgICAgICAiU2xvdD0lcyBmaWVsZD0lcyB2YWx1ZT0lLjNmIGF0IGVmZmVjdGl2ZV90aW1lPSVzIiwNCiAgICAgICAgICAgICAgICAgICAgc2xvdF9rZXksDQogICAgICAgICAgICAgICAgICAgIHJlc3VsdF9rZXksDQogICAgICAgICAgICAgICAgICAgIHZhbHVlLA0KICAgICAgICAgICAgICAgICAgICB0YXJnZXRfdGltZV9wb2ludC5zdHJmdGltZSgnJUg6JU06JVMnKQ0KICAgICAgICAgICAgICAgICkNCiAgICAgICAgICAgIGVsc2U6DQogICAgICAgICAgICAgICAgTE9HR0VSLmRlYnVnKA0KICAgICAgICAgICAgICAgICAgICAiU2xvdD0lcyBmaWVsZD0lcyBub19kYXRhIGF0IGVmZmVjdGl2ZV90aW1lPSVzIiwNCiAgICAgICAgICAgICAgICAgICAgc2xvdF9rZXksDQogICAgICAgICAgICAgICAgICAgIHJlc3VsdF9rZXksDQogICAgICAgICAgICAgICAgICAgIHRhcmdldF90aW1lX3BvaW50LnN0cmZ0aW1lKCclSDolTTolUycpDQogICAgICAgICAgICAgICAgKQ0KDQogICAgcmV0dXJuIHRlbXBlcmF0dXJlX2RhdGENCg0KDQpkZWYgX2J1aWxkX2NlbGxzX3dpdGhfbG9hZF9zdGF0dXMoDQogICAgdGltZV9zbG90czogTGlzdFtzdHJdLA0KICAgIHNlY3Rpb25zOiBMaXN0W0RpY3Rbc3RyLCBBbnldXSwNCiAgICBtb3Rvcl9zcGVlZDogc3RyLA0KICAgIHN0YXJ0X3RpbWU6IE9wdGlvbmFsW2RhdGV0aW1lXSwNCiAgICBlbmRfdGltZTogT3B0aW9uYWxbZGF0ZXRpbWVdLA0KICAgIHRlbXBlcmF0dXJlX2RhdGE6IERpY3Rbc3RyLCBEaWN0W3N0ciwgZmxvYXRdXSwNCiAgICB1c2VfZGVmYXVsdHM6IGJvb2wgPSBGYWxzZSwNCikgLT4gTGlzdFtEaWN0W3N0ciwgQW55XV06DQogICAgIiIi5p6E5bu65Y2V5YWD5qC85pWw5o2u77yI5Z+65LqOIGxvYWRfc3RhdHVzID0gMSDnmoTmnInmlYjmlbDmja7vvIktIOS4juWOn+Wni+iEmuacrOe7k+aehOWujOWFqOS4gOiHtCIiIg0KICAgIGNlbGxzOiBMaXN0W0RpY3Rbc3RyLCBBbnldXSA9IFtdDQoNCiAgICBkZWYgYWRkX2NlbGwocm93OiBpbnQsIGNvbDogaW50LCB2YWx1ZTogc3RyID0gIiIsIHJvd3NwYW46IGludCA9IDEsIGNvbHNwYW46IGludCA9IDEpIC0+IE5vbmU6DQogICAgICAgIHBheWxvYWQ6IERpY3Rbc3RyLCBBbnldID0geyJyb3ciOiByb3csICJjb2wiOiBjb2wsICJ2YWx1ZSI6IHZhbHVlfQ0KICAgICAgICBpZiByb3dzcGFuID4gMToNCiAgICAgICAgICAgIHBheWxvYWRbInJvd3NwYW4iXSA9IHJvd3NwYW4NCiAgICAgICAgaWYgY29sc3BhbiA+IDE6DQogICAgICAgICAgICBwYXlsb2FkWyJjb2xzcGFuIl0gPSBjb2xzcGFuDQogICAgICAgIGNlbGxzLmFwcGVuZChwYXlsb2FkKQ0KDQogICAgIyDmqKHmnb/lt6bkvqfmoIfpopjliJflt7Lnu4/ljrvpmaTvvIzov5nph4zku4XnlJ/miJDnuq/mlbDmja7ljLrvvIzku44gKDAsMCkg5byA5aeL5aGr5YWl5pWw5YC844CCDQogICAgIyBjdXJyZW50X3JvdyDlr7nlupTmqKHmnb/kuK3nmoTlrp7pmYXmlbDmja7ooYzntKLlvJXjgIINCiAgICBjdXJyZW50X3JvdyA9IDANCiAgICBmb3Igc2VjdGlvbiBpbiBzZWN0aW9uczoNCiAgICAgICAgZW50cmllcyA9IHNlY3Rpb24uZ2V0KCJlbnRyaWVzIikgb3IgW10NCiAgICAgICAgaWYgbm90IGVudHJpZXM6DQogICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAjIOavj+S4qua1i+ivlemDqOS9jeWtkOmhueWvueW6lOaooeadv+S4reeahOS4gOihjA0KICAgICAgICBmb3IgZW50cnkgaW4gZW50cmllczoNCiAgICAgICAgICAgICMg5pSv5oyB5paw5qC85byP77yI5bimIGZpZWxkIOaYoOWwhO+8ieWSjOaXp+agvOW8j++8iOe6r+Wtl+espuS4su+8iQ0KICAgICAgICAgICAgaWYgaXNpbnN0YW5jZShlbnRyeSwgZGljdCk6DQogICAgICAgICAgICAgICAgZmllbGRfbmFtZSA9IGVudHJ5LmdldCgiZmllbGQiLCAiIikNCiAgICAgICAgICAgICAgICBlbnRyeV9maWx0ZXJzID0gZW50cnkuZ2V0KCJmaWx0ZXJzIikNCiAgICAgICAgICAgICAgICBlbnRyeV9rZXkgPSBlbnRyeS5nZXQoInJlc3VsdF9rZXkiKSBvciBmaWVsZF9uYW1lDQogICAgICAgICAgICBlbHNlOg0KICAgICAgICAgICAgICAgIGZpZWxkX25hbWUgPSAiIg0KICAgICAgICAgICAgICAgIGVudHJ5X2ZpbHRlcnMgPSBOb25lDQogICAgICAgICAgICAgICAgZW50cnlfa2V5ID0gIiINCg0KICAgICAgICAgICAgIyDku4XovpPlh7rmlbDlgLzliJfvvJrliJfntKLlvJXnm7TmjqXlr7nlupTml7bpl7TmrrUNCiAgICAgICAgICAgICMg5by65Yi25aGr5YWF5omA5pyJ5YiX77yM5LyY5YWI5L2/55So5p+l6K+i5pWw5o2u77yM5ZCm5YiZ5L2/55So6buY6K6k5YC8DQogICAgICAgICAgICBpZiBmaWVsZF9uYW1lOg0KICAgICAgICAgICAgICAgIHRhcmdldF9rZXkgPSBlbnRyeV9rZXkgb3IgZmllbGRfbmFtZQ0KDQogICAgICAgICAgICAgICAgIyDpgY3ljobmiYDmnInml7bpl7TmrrXliJfvvIznoa7kv53mr4/kuIDliJfpg73mnInmlbDmja4NCiAgICAgICAgICAgICAgICBmb3IgY29sX2lkeCwgc2xvdCBpbiBlbnVtZXJhdGUodGltZV9zbG90cyk6DQogICAgICAgICAgICAgICAgICAgIHZhbHVlID0gTm9uZQ0KDQogICAgICAgICAgICAgICAgICAgICMg5LyY5YWI5L2/55So5p+l6K+i5Yiw55qE5pWw5o2uDQogICAgICAgICAgICAgICAgICAgIGlmIHRlbXBlcmF0dXJlX2RhdGE6DQogICAgICAgICAgICAgICAgICAgICAgICBzbG90X2RhdGEgPSB0ZW1wZXJhdHVyZV9kYXRhLmdldCh0YXJnZXRfa2V5LCB7fSkNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNsb3RfZGF0YToNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbG90X2tleSA9IGYie2NvbF9pZHh9X3tzbG90fSINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHNsb3RfZGF0YS5nZXQoc2xvdF9rZXkpDQoNCiAgICAgICAgICAgICAgICAgICAgaWYgdmFsdWUgaXMgTm9uZSBhbmQgdXNlX2RlZmF1bHRzOg0KICAgICAgICAgICAgICAgICAgICAgICAgIyDkvb/nlKjln7rnoYDpu5jorqTlgLwgKyDml7bpl7TmrrXlgY/np7vvvIjmr4/kuKrml7bpl7TmrrXlop7liqAwLjHluqbvvIkNCiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRfYmFzZV92YWx1ZSA9IDI1LjAgICMg566A5YyW55qE6buY6K6k5YC8DQogICAgICAgICAgICAgICAgICAgICAgICB0aW1lX29mZnNldCA9IGNvbF9pZHggKiAwLjENCiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gZGVmYXVsdF9iYXNlX3ZhbHVlICsgdGltZV9vZmZzZXQNCg0KICAgICAgICAgICAgICAgICAgICBpZiB2YWx1ZSBpcyBOb25lOg0KICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVfc3RyID0gIiINCiAgICAgICAgICAgICAgICAgICAgZWxzZToNCiAgICAgICAgICAgICAgICAgICAgICAgICMg5qC85byP5YyW5Li65a2X56ym5Liy77yI5L+d55WZMeS9jeWwj+aVsO+8iQ0KICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVfc3RyID0gZiJ7dmFsdWU6LjFmfSINCg0KICAgICAgICAgICAgICAgICAgICBhZGRfY2VsbChjdXJyZW50X3JvdywgY29sX2lkeCwgdmFsdWVfc3RyKQ0KICAgICAgICAgICAgZWxzZToNCiAgICAgICAgICAgICAgICAjIOWmguaenOayoeacieWtl+auteWQje+8jOWhq+WFheepuuWtl+espuS4sg0KICAgICAgICAgICAgICAgIGZvciBjb2xfaWR4IGluIHJhbmdlKGxlbih0aW1lX3Nsb3RzKSk6DQogICAgICAgICAgICAgICAgICAgIGFkZF9jZWxsKGN1cnJlbnRfcm93LCBjb2xfaWR4LCAiIikNCiAgICAgICAgICAgIGN1cnJlbnRfcm93ICs9IDENCg0KICAgIHJldHVybiBjZWxscw0KDQoNCmRlZiBidWlsZF90ZW1wZXJhdHVyZV90YWJsZV93aXRoX2xvYWRfc3RhdHVzKF86IERpY3Rbc3RyLCBBbnldKSAtPiBEaWN0W3N0ciwgQW55XToNCiAgICAiIiLmnoTlu7rmuKnluqbooajmoLzmlbDmja7vvIjku4Xkvb/nlKggbG9hZF9zdGF0dXMgPSAxIOeahOacieaViOaVsOaNru+8iSIiIg0KICAgIF9zZXR1cF9sb2dnaW5nKCkNCiAgICANCiAgICB0b2tlbiA9IG9zLmVudmlyb24uZ2V0KCJUQUJMRV9UT0tFTiIsICJzY3JpcHRUYWJsZTEiKQ0KICAgIHJvd19vZmZzZXQgPSBpbnQob3MuZW52aXJvbi5nZXQoIlRBQkxFX1NUQVJUX1JPVyIsICIwIikgb3IgMCkNCiAgICBjb2xfb2Zmc2V0ID0gaW50KG9zLmVudmlyb24uZ2V0KCJUQUJMRV9TVEFSVF9DT0wiLCAiMCIpIG9yIDApDQogICAgbW90b3Jfc3BlZWQgPSBvcy5lbnZpcm9uLmdldCgiVEFCTEVfTU9UT1JfU1BFRUQiLCAiOTgwUlBNIikNCiAgICANCiAgICAjIOino+aekOWunumqjOaXtumXtOiMg+WbtA0KICAgIHN0YXJ0X3RpbWUsIGVuZF90aW1lID0gX3BhcnNlX2V4cGVyaW1lbnRfdGltZXMoKQ0KICAgIA0KICAgIHRpbWVfc2xvdHMgPSBfdGltZV9zbG90cygpDQogICAgc2VjdGlvbnMgPSBfZGVmYXVsdF9zZWN0aW9ucygpDQogICAgDQogICAgIyDmn6Xor6LmuKnluqbmlbDmja7vvIjku4XlvZMgbG9hZF9zdGF0dXMgPSAxIOaXtu+8iQ0KICAgIHRlbXBlcmF0dXJlX2RhdGEgPSBfbG9hZF90ZW1wZXJhdHVyZV9kYXRhX3dpdGhfbG9hZF9zdGF0dXModGltZV9zbG90cywgc2VjdGlvbnMsIHN0YXJ0X3RpbWUsIGVuZF90aW1lKQ0KICAgIA0KICAgICMg5aeL57uI56aB5q2i6buY6K6k5pWw5o2u77yM5L+d6K+B5p+l6K+i5LiN5Yiw5YC85pe25L+d5oyB56m655m9DQogICAgdXNlX2RlZmF1bHRzID0gRmFsc2UNCiAgICANCiAgICBjZWxscyA9IF9idWlsZF9jZWxsc193aXRoX2xvYWRfc3RhdHVzKA0KICAgICAgICB0aW1lX3Nsb3RzLCANCiAgICAgICAgc2VjdGlvbnMsIA0KICAgICAgICBtb3Rvcl9zcGVlZCwgDQogICAgICAgIHN0YXJ0X3RpbWUsIA0KICAgICAgICBlbmRfdGltZSwgDQogICAgICAgIHRlbXBlcmF0dXJlX2RhdGEsDQogICAgICAgIHVzZV9kZWZhdWx0cz11c2VfZGVmYXVsdHMNCiAgICApDQogICAgDQogICAgIyDlupTnlKjooYzlgY/np7sNCiAgICBmb3IgY2VsbCBpbiBjZWxsczoNCiAgICAgICAgY2VsbFsicm93Il0gKz0gNA0KICAgIA0KICAgICMg5re75Yqg5a6e6aqM5pe26Ze05L+h5oGv77yI5LiO5Y6f5aeL6ISa5pys5a6M5YWo5LiA6Ie055qE6YC76L6R77yJDQogICAgc3RhcnRfdGltZV9yb3cgPSAxDQogICAgc3RhcnRfdGltZV92YWx1ZV9jb2wgPSAxDQogICAgZW5kX3RpbWVfdmFsdWVfY29sID0gMw0KICAgIA0KICAgICMg6I635Y+W5Y6f5aeL5pe26Ze05a2X56ym5Liy6L+b6KGM5aSE55CG77yI5LiO5Y6f5aeL6ISa5pys5L+d5oyB5LiA6Ie077yJDQogICAgc3RhcnRfc3RyID0gb3MuZW52aXJvbi5nZXQoIkVYUEVSSU1FTlRfU1RBUlQiLCAiIikuc3RyaXAoKQ0KICAgIGlmIHN0YXJ0X3N0ciBhbmQgc3RhcnRfdGltZToNCiAgICAgICAgdHJ5Og0KICAgICAgICAgICAgIyDkvb/nlKjkuI7ljp/lp4vohJrmnKznm7jlkIznmoTml7bpl7TlpITnkIbpgLvovpENCiAgICAgICAgICAgIHV0Y19hd2FyZV9kdCA9IGRhdGV0aW1lLnN0cnB0aW1lKHN0YXJ0X3N0ciwgIiVZLSVtLSVkVCVIOiVNOiVTJXoiKQ0KICAgICAgICAgICAgbG9jYWxfZHQxID0gdXRjX2F3YXJlX2R0LmFzdGltZXpvbmUodHo9Tm9uZSkNCiAgICAgICAgICAgIGxvY2FsX2R0MiA9IHV0Y19hd2FyZV9kdC5hc3RpbWV6b25lKHR6PU5vbmUpICsgdGltZWRlbHRhKGhvdXJzPTMuNSkNCiAgICAgICAgICAgIHN0YXJ0X3RpbWVfdmFsdWUgPSBsb2NhbF9kdDEuc3RyZnRpbWUoIiVZLSVtLSVkICVIOiVNOiVTIikNCiAgICAgICAgICAgIGVuZF90aW1lX3ZhbHVlID0gbG9jYWxfZHQyLnN0cmZ0aW1lKCIlWS0lbS0lZCAlSDolTTolUyIpDQogICAgICAgICAgICBjZWxscy5hcHBlbmQoeyJyb3ciOiBzdGFydF90aW1lX3JvdywgImNvbCI6IHN0YXJ0X3RpbWVfdmFsdWVfY29sLCAidmFsdWUiOiBzdGFydF90aW1lX3ZhbHVlfSkNCiAgICAgICAgICAgIGNlbGxzLmFwcGVuZCh7InJvdyI6IHN0YXJ0X3RpbWVfcm93LCAiY29sIjogZW5kX3RpbWVfdmFsdWVfY29sLCAidmFsdWUiOiBlbmRfdGltZV92YWx1ZX0pDQogICAgICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZToNCiAgICAgICAgICAgIExPR0dFUi53YXJuaW5nKCJGYWlsZWQgdG8gcHJvY2VzcyBleHBlcmltZW50IHRpbWUgc3RyaW5nczogJXMiLCBlKQ0KICAgIA0KICAgICMg5p+l6K+i546v5aKD5rip5bqm77yI5LiO5Y6f5aeL6ISa5pys5a6M5YWo5LiA6Ie055qE6YC76L6R77yJDQogICAgaW5mbHV4X3VybCA9IG9zLmVudmlyb24uZ2V0KCJJTkZMVVhfVVJMIiwgIiIpLnN0cmlwKCkNCiAgICBpbmZsdXhfb3JnID0gb3MuZW52aXJvbi5nZXQoIklORkxVWF9PUkciLCAiIikuc3RyaXAoKQ0KICAgIGluZmx1eF90b2tlbiA9IG9zLmVudmlyb24uZ2V0KCJJTkZMVVhfVE9LRU4iLCAiIikuc3RyaXAoKQ0KICAgIGluZmx1eF9idWNrZXQgPSBvcy5lbnZpcm9uLmdldCgiSU5GTFVYX0JVQ0tFVCIsICJQQ00iKS5zdHJpcCgpDQogICAgaW5mbHV4X21lYXN1cmVtZW50ID0gb3MuZW52aXJvbi5nZXQoIklORkxVWF9NRUFTVVJFTUVOVCIsICJQQ01fTWVhc3VyZW1lbnQiKS5zdHJpcCgpDQogICAgDQogICAgaWYgc3RhcnRfdGltZSBhbmQgZW5kX3RpbWU6DQogICAgICAgICMg5a+55LqO546v5aKD5rip5bqm77yM5L2/55So5pe26Ze06IyD5Zu05p+l6K+i77yI5LiO5Y6f5aeL6ISa5pys6YC76L6R5LiA6Ie077yJDQogICAgICAgIHZhbHVlID0gX3F1ZXJ5X2luZmx1eGRiX3JhbmdlX3dpdGhfbG9hZF9zdGF0dXMoDQogICAgICAgICAgICAi546v5aKD5rip5bqmIiwNCiAgICAgICAgICAgIHN0YXJ0X3RpbWUsDQogICAgICAgICAgICBlbmRfdGltZSwNCiAgICAgICAgICAgIGluZmx1eF91cmwsDQogICAgICAgICAgICBpbmZsdXhfb3JnLA0KICAgICAgICAgICAgaW5mbHV4X3Rva2VuLA0KICAgICAgICAgICAgaW5mbHV4X2J1Y2tldCwNCiAgICAgICAgICAgIGluZmx1eF9tZWFzdXJlbWVudCwNCiAgICAgICAgICAgIGZpbHRlcnM9eyJkYXRhX3R5cGUiOiAiTFNEQVEifSwNCiAgICAgICAgKQ0KICAgICAgICAjIOehruS/nXZhbHVl5LiN5pivTm9uZe+8jOmBv+WFjVdvcmQgQ09N5pON5L2c5byC5bi477yI5LiO5Y6f5aeL6ISa5pys5LiA6Ie077yJDQogICAgICAgIGlmIHZhbHVlIGlzIG5vdCBOb25lOg0KICAgICAgICAgICAgY2VsbHMuYXBwZW5kKHsicm93IjogMCwgImNvbCI6IDEsICJ2YWx1ZSI6IGYie3ZhbHVlOi4xZn0ifSkNCiAgICAgICAgZWxzZToNCiAgICAgICAgICAgIGNlbGxzLmFwcGVuZCh7InJvdyI6IDAsICJjb2wiOiAxLCAidmFsdWUiOiAiIn0pDQogICAgDQogICAgTE9HR0VSLmluZm8oDQogICAgICAgICJUZW1wZXJhdHVyZSB0YWJsZSBidWlsdCB3aXRoIGxvYWRfc3RhdHVzPTEgZmlsdGVyOiB0b2tlbj0lcyBjZWxscz0lZCB0aW1lX3Nsb3RzPSVzIiwNCiAgICAgICAgdG9rZW4sDQogICAgICAgIGxlbihjZWxscyksDQogICAgICAgICIsIi5qb2luKHRpbWVfc2xvdHMpLA0KICAgICkNCiAgICANCiAgICByZXR1cm4gew0KICAgICAgICAidG9rZW4iOiB0b2tlbiwNCiAgICAgICAgInN0YXJ0Um93Ijogcm93X29mZnNldCwNCiAgICAgICAgInN0YXJ0Q29sIjogY29sX29mZnNldCwNCiAgICAgICAgImNlbGxzIjogY2VsbHMsDQogICAgfQ0KDQoNCmRlZiBfbG9hZF9wYXlsb2FkKCkgLT4gRGljdFtzdHIsIEFueV06DQogICAgIiIi5LuO5qCH5YeG6L6T5YWl5oiW546v5aKD5Y+Y6YeP5Yqg6L29cGF5bG9hZOaVsOaNriIiIg0KICAgIHRyeToNCiAgICAgICAgIyDlsJ3or5Xku47moIflh4bovpPlhaXor7vlj5ZKU09ODQogICAgICAgIHRyeToNCiAgICAgICAgICAgIGltcG9ydCBzZWxlY3QNCiAgICAgICAgICAgIGlmIHNlbGVjdC5zZWxlY3QoW3N5cy5zdGRpbl0sIFtdLCBbXSwgMC4wKVswXToNCiAgICAgICAgICAgICAgICBwYXlsb2FkX3N0ciA9IHN5cy5zdGRpbi5yZWFkKCkuc3RyaXAoKQ0KICAgICAgICAgICAgICAgIGlmIHBheWxvYWRfc3RyOg0KICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNvbi5sb2FkcyhwYXlsb2FkX3N0cikNCiAgICAgICAgZXhjZXB0IEltcG9ydEVycm9yOg0KICAgICAgICAgICAgIyBXaW5kb3dz5LiKc2VsZWN05Y+v6IO95LiN5Y+v55So77yM5bCd6K+V55u05o6l6K+75Y+WDQogICAgICAgICAgICBpbXBvcnQgbXN2Y3J0DQogICAgICAgICAgICBpZiBtc3ZjcnQua2JoaXQoKToNCiAgICAgICAgICAgICAgICBwYXlsb2FkX3N0ciA9IHN5cy5zdGRpbi5yZWFkKCkuc3RyaXAoKQ0KICAgICAgICAgICAgICAgIGlmIHBheWxvYWRfc3RyOg0KICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNvbi5sb2FkcyhwYXlsb2FkX3N0cikNCiAgICBleGNlcHQgRXhjZXB0aW9uOg0KICAgICAgICBwYXNzDQogICAgDQogICAgIyDlpoLmnpzmsqHmnInmoIflh4bovpPlhaXvvIzov5Tlm57nqbrlrZflhbgNCiAgICByZXR1cm4ge30NCg0KDQpkZWYgX2xvZ19lbnZpcm9ubWVudF92YXJpYWJsZXMoKSAtPiBOb25lOg0KICAgICIiIuiusOW9leebuOWFs+eOr+Wig+WPmOmHjyIiIg0KICAgIGVudl92YXJzID0gWw0KICAgICAgICAiVEFCTEVfVE9LRU4iLCAiVEFCTEVfU1RBUlRfUk9XIiwgIlRBQkxFX1NUQVJUX0NPTCIsICJUQUJMRV9USU1FX1NMT1RTIiwgIlRBQkxFX01PVE9SX1NQRUVEIiwNCiAgICAgICAgIkVYUEVSSU1FTlRfU1RBUlQiLCAiRVhQRVJJTUVOVF9FTkQiLA0KICAgICAgICAiSU5GTFVYX1VSTCIsICJJTkZMVVhfT1JHIiwgIklORkxVWF9UT0tFTiIsICJJTkZMVVhfQlVDS0VUIiwgIklORkxVWF9NRUFTVVJFTUVOVCINCiAgICBdDQogICAgDQogICAgZm9yIHZhciBpbiBlbnZfdmFyczoNCiAgICAgICAgdmFsdWUgPSBvcy5lbnZpcm9uLmdldCh2YXIsICIiKQ0KICAgICAgICBpZiAiVE9LRU4iIGluIHZhciBhbmQgdmFsdWU6DQogICAgICAgICAgICB2YWx1ZSA9IF9tYXNrX3NlY3JldCh2YWx1ZSkNCiAgICAgICAgTE9HR0VSLmRlYnVnKCJFTlYgJXM9JXMiLCB2YXIsIHZhbHVlIG9yICI8ZW1wdHk+IikNCg0KDQpkZWYgbWFpbigpIC0+IGludDoNCiAgICB0cnk6DQogICAgICAgIHRyeToNCiAgICAgICAgICAgIHN5cy5zdGRvdXQucmVjb25maWd1cmUoZW5jb2Rpbmc9InV0Zi04IikgICMgdHlwZTogaWdub3JlW2F0dHItZGVmaW5lZF0NCiAgICAgICAgZXhjZXB0IEV4Y2VwdGlvbjoNCiAgICAgICAgICAgIHBhc3MNCiAgICAgICAgDQogICAgICAgIHBheWxvYWQgPSBfbG9hZF9wYXlsb2FkKCkNCiAgICAgICAgdGFibGVfc3BlYyA9IGJ1aWxkX3RlbXBlcmF0dXJlX3RhYmxlX3dpdGhfbG9hZF9zdGF0dXMocGF5bG9hZCkNCiAgICAgICAgcmVzdWx0ID0geyJ0YWJsZXMiOiBbdGFibGVfc3BlY119DQogICAgICAgIHByaW50KGpzb24uZHVtcHMocmVzdWx0LCBlbnN1cmVfYXNjaWk9RmFsc2UpKQ0KICAgICAgICByZXR1cm4gMA0KICAgIGV4Y2VwdCBFeGNlcHRpb24gYXMgZXhjOg0KICAgICAgICBwcmludChmImVycm9yOiB7ZXhjfSIsIGZpbGU9c3lzLnN0ZGVycikNCiAgICAgICAgcmV0dXJuIDENCg0KDQppZiBfX25hbWVfXyA9PSAiX19tYWluX18iOg0KICAgIHN5cy5leGl0KG1haW4oKSkNCg==", "scriptName": "table.py", "remark": "PCM性能测试实验" }, "configService": { "host": "10.0.5.232", "port": 5000, "configPath": "config-1.2-debug.yaml" }, "globalParameters": { "parameters": { "work_order_no": "W2001150.001-01:10", "process_no": "W2001150.001-01:10", "part_no": "P67-13-103", "executor": "朱吉生", "current_date": "2025-12-03" } } }