{"remainingRequest":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\thread-loader\\dist\\cjs.js!D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\babel-loader\\lib\\index.js!D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\cache-loader\\dist\\cjs.js??ref--0-0!D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\jenkins\\workspace\\xcjy-fvue\\src\\views\\patrolAndRescue\\roadWatch\\InspectionPlan\\components\\EditAddPage\\index.vue?vue&type=script&lang=js","dependencies":[{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\src\\views\\patrolAndRescue\\roadWatch\\InspectionPlan\\components\\EditAddPage\\index.vue","mtime":1756152506094},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\babel.config.js","mtime":1741314102158},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\thread-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\babel-loader\\lib\\index.js","mtime":456789000000},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\vue-loader\\lib\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:aW1wb3J0IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIGZyb20gIkQ6L2plbmtpbnMvd29ya3NwYWNlL3hjanktZnZ1ZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlci5qcyI7CmltcG9ydCBfc2xpY2VkVG9BcnJheSBmcm9tICJEOi9qZW5raW5zL3dvcmtzcGFjZS94Y2p5LWZ2dWUvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3NsaWNlZFRvQXJyYXkuanMiOwppbXBvcnQgX3JlZ2VuZXJhdG9yUnVudGltZSBmcm9tICJEOi9qZW5raW5zL3dvcmtzcGFjZS94Y2p5LWZ2dWUvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3JlZ2VuZXJhdG9yUnVudGltZS5qcyI7CmltcG9ydCBfb2JqZWN0U3ByZWFkIGZyb20gIkQ6L2plbmtpbnMvd29ya3NwYWNlL3hjanktZnZ1ZS9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0U3ByZWFkMi5qcyI7CmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMgZnJvbSAiRDovamVua2lucy93b3Jrc3BhY2UveGNqeS1mdnVlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllcy5qcyI7CmltcG9ydCBfYXN5bmNUb0dlbmVyYXRvciBmcm9tICJEOi9qZW5raW5zL3dvcmtzcGFjZS94Y2p5LWZ2dWUvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2FzeW5jVG9HZW5lcmF0b3IuanMiOwp2YXIgX2V4Y2x1ZGVkID0gWyJyb2FkSWQiLCAiZnJlcXVlbmN5IiwgInBsYW5QYXRyb2xEZXRhaWxzIiwgInBsYW5TdGFydERhdGUiLCAicGxhbkVuZERhdGUiLCAicGxhbkludGVydmFsIl0sCiAgX2V4Y2x1ZGVkMiA9IFsic3RhcnRQYXRyb2xJZCIsICJlbmRQYXRyb2xJZCIsICJyb2FkSWQiLCAic3RhcnRQYXRyb2xOYW1lIiwgImVuZFBhdHJvbE5hbWUiLCAicGxhbkRldGFpbHMiLCAicGxhblN0YXJ0RW5kRGF0ZSIsICJ0aW1lIiwgInBsYW5JbnRlcnZhbCJdOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5lcnJvci5jYXVzZS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmNvbmNhdC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZpbHRlci5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZpbmQuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5maW5kLWluZGV4LmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZmxhdC1tYXAuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5tYXAuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5wdXNoLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkudW5zY29wYWJsZXMuZmxhdC1tYXAuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5mdW5jdGlvbi5uYW1lLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuaXRlcmF0b3IuY29uc3RydWN0b3IuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5pdGVyYXRvci5maWx0ZXIuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5pdGVyYXRvci5maW5kLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuaXRlcmF0b3IuZmxhdC1tYXAuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5pdGVyYXRvci5mb3ItZWFjaC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLml0ZXJhdG9yLm1hcC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLml0ZXJhdG9yLnNvbWUuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3Qua2V5cy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLmZvci1lYWNoLmpzIjsKLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KCmltcG9ydCBQdWJTdWIgZnJvbSAncHVic3ViLWpzJzsKaW1wb3J0IG1vbWVudCBmcm9tICdtb21lbnQnOwppbXBvcnQgJ21vbWVudC1kdXJhdGlvbi1mb3JtYXQnOwppbXBvcnQgeyByZWZpbmVSZXF1ZXN0Qm9keSB9IGZyb20gJ0AvdXRpbHMvcmVxdWVzdFdyYXBwZXJzJzsKaW1wb3J0IHsgZGljdGlvbmFyeUVzY2FwZSwgZ2V0RGljdGlvbmFyeUJ5Q29kZSB9IGZyb20gJ0AvdXRpbHMvZGljdGlvbmFyeSc7CmltcG9ydCB7IHRhYmxlQWRkRWRpdCwgdGFibGVEZXRhaWwgfSBmcm9tICdAL2FwaS9wYXRyb2xBbmRSZXNjdWUvcm9hZFdhdGNoL2luc3BlY3Rpb25QbGFuJzsKaW1wb3J0IHsgdGFibGVEYXRhIGFzIGFsb25nUm91dGVJbmZvSW50ZXIgfSBmcm9tICdAL2FwaS9wYXRyb2xBbmRSZXNjdWUvaW5mb01nbXRQYXRyb2xzUmVzY3Vlcy9hbG9uZ1JvdXRlSW5mbyc7CmltcG9ydCB7IHRhYmxlRGF0YSBhcyB0ZWFtRGF0YSB9IGZyb20gJ0AvYXBpL3BhdHJvbEFuZFJlc2N1ZS9pbmZvTWdtdFBhdHJvbHNSZXNjdWVzL3BhdHJvbEFuZFJlc2N1ZVRlYW1zTWdtdCc7CmltcG9ydCB7IHBvaW50VHJlZURhdGEgfSBmcm9tICdAL2FwaS9wYXRyb2xBbmRSZXNjdWUvaW5mb01nbXRQYXRyb2xzUmVzY3Vlcy9pbnNwZWN0aW9uUG9pbnRNZ210JzsKaW1wb3J0IHsgb3JnVHJlZSB9IGZyb20gJ0AvYXBpL3N5c3RlbUludGVyZmFjZSc7CmV4cG9ydCBkZWZhdWx0IHsKICBuYW1lOiAnRWRpdEFkZFBhZ2UnLAogIHByb3BzOiB7CiAgICBjb21wb25lbnROYW1lOiB7CiAgICAgIGRlZmF1bHQ6ICdUYWJsZVBhZ2UnLAogICAgICB0eXBlOiBTdHJpbmcKICAgIH0KICB9LAogIGRhdGE6IGZ1bmN0aW9uIGRhdGEoKSB7CiAgICB2YXIgX3RoaXMgPSB0aGlzOwogICAgdmFyIHZhbGlkYXRlUGxhbkRldGFpbHMgPSBmdW5jdGlvbiB2YWxpZGF0ZVBsYW5EZXRhaWxzKF8sIHZhbHVlLCBjYWxsYmFjaykgewogICAgICB2YXIgX3RoaXMkJHJlZnMkYWRkRWRpdFRyOwogICAgICB2YXIgYXJyID0gKChfdGhpcyQkcmVmcyRhZGRFZGl0VHIgPSBfdGhpcy4kcmVmcy5hZGRFZGl0VHJlZSkgPT09IG51bGwgfHwgX3RoaXMkJHJlZnMkYWRkRWRpdFRyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpcyQkcmVmcyRhZGRFZGl0VHIuZ2V0Q2hlY2tlZEtleXMoKSkgfHwgW107CiAgICAgIGlmIChBcnJheS5pc0FycmF5KGFycikgJiYgYXJyLmxlbmd0aCkgewogICAgICAgIGNhbGxiYWNrKCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY2FsbGJhY2sobmV3IEVycm9yKCflt6Hmo4DlhoXlrrnkuI3og73kuLrnqbonKSk7CiAgICAgIH0KICAgIH07CiAgICByZXR1cm4gewogICAgICAvLyBkYXlPcHRpb25zOiBbXSwgLy8g5aSp5pWw6YCJ6aG577yI56ys5LiA5aSp44CB56ys5LqM5aSpLi4u77yJCiAgICAgIC8vIHNlbGVjdGVkRGF5OiAnJywgLy8g5b2T5YmN6YCJ5Lit55qE5aSp5pWwCiAgICAgIC8vIGN1cnJlbnRJbnNwZWN0aW9uQ3ljbGU6ICcnLCAvLyDlvZPliY3pgInkuK3nmoTlt6Hmo4DlkajmnJ8KICAgICAgLy8gcG9pbnRMZXZlbDogJycsIC8vIOW9k+WJjemAieS4reeahOeCueS9jee6p+WIqwogICAgICBhZGRFZGl0Rm9ybTogewogICAgICAgIHdvcmtjbGFzczogJzEnLAogICAgICAgIGZyZXF1ZW5jeTogJycsCiAgICAgICAgcm9hZElkOiAnJywKICAgICAgICBzdGFydFBhdHJvbElkOiAnJywKICAgICAgICBlbmRQYXRyb2xJZDogJycsCiAgICAgICAgcGxhbkRldGFpbHM6IFtdLAogICAgICAgIHBsYW5UeXBlOiAnMScsCiAgICAgICAgaW5zcGVjdFR5cGU6ICcxJywKICAgICAgICBwbGFuQ2xhc3M6ICdjb20uYXJ0ZmVzcy5yZXNjdWUucGF0cm9sLmpvYi5JbnNwZWN0aW9uUGxhbkpvYicsCiAgICAgICAgcGxhbkludGVydmFsOiAnMDE6MDA6MDAnLAogICAgICAgIHRpbWU6IFtdCiAgICAgIH0sCiAgICAgIGFkZEVkaXRSdWxlczogewogICAgICAgIHdvcmtjbGFzczogW3sKICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLAogICAgICAgICAgbWVzc2FnZTogJ+ePreasoeS4jeiDveS4uuepuicsCiAgICAgICAgICB0cmlnZ2VyOiAnY2hhbmdlJwogICAgICAgIH1dLAogICAgICAgIHBsYW5UeXBlOiBbewogICAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICAgICAgICBtZXNzYWdlOiAn5beh5qOA57G75Z6L5LiN6IO95Li656m6JywKICAgICAgICAgIHRyaWdnZXI6ICdjaGFuZ2UnCiAgICAgICAgfV0sCiAgICAgICAgaW5zcGVjdFR5cGU6IFt7CiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgICAgICAgIG1lc3NhZ2U6ICflvoDov5TnsbvlnovkuI3og73kuLrnqbonLAogICAgICAgICAgdHJpZ2dlcjogJ2NoYW5nZScKICAgICAgICB9XSwKICAgICAgICByb2FkSWQ6IFt7CiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgICAgICAgIG1lc3NhZ2U6ICfmiYDlsZ7ot6/mrrXkuI3og73kuLrnqbonLAogICAgICAgICAgdHJpZ2dlcjogJ2NoYW5nZScKICAgICAgICB9XSwKICAgICAgICBzdGFydFBhdHJvbElkOiBbewogICAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICAgICAgICBtZXNzYWdlOiAn5byA5aeL5beh5qOA56uZ5LiN6IO95Li656m6JywKICAgICAgICAgIHRyaWdnZXI6ICdjaGFuZ2UnCiAgICAgICAgfV0sCiAgICAgICAgZW5kUGF0cm9sSWQ6IFt7CiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgICAgICAgIG1lc3NhZ2U6ICfnu5PmnZ/lt6Hmo4Dnq5nkuI3og73kuLrnqbonLAogICAgICAgICAgdHJpZ2dlcjogJ2NoYW5nZScKICAgICAgICB9XSwKICAgICAgICB0ZWFtSWQ6IFt7CiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgICAgICAgIG1lc3NhZ2U6ICflt6Hmo4DpmJ/kvI3kuI3og73kuLrnqbonLAogICAgICAgICAgdHJpZ2dlcjogJ2NoYW5nZScKICAgICAgICB9XSwKICAgICAgICBwbGFuRGV0YWlsczogW3sKICAgICAgICAgIHJlcXVpcmVkOiB0cnVlLAogICAgICAgICAgdmFsaWRhdG9yOiB2YWxpZGF0ZVBsYW5EZXRhaWxzLAogICAgICAgICAgdHJpZ2dlcjogJ2NoYW5nZScKICAgICAgICB9XSwKICAgICAgICBmcmVxdWVuY3k6IFt7CiAgICAgICAgICByZXF1aXJlZDogdHJ1ZSwKICAgICAgICAgIG1lc3NhZ2U6ICfku7vliqHpopHnjofkuI3og73kuLrnqbonLAogICAgICAgICAgdHJpZ2dlcjogJ2NoYW5nZScKICAgICAgICB9XSwKICAgICAgICBwbGFuU3RhcnRFbmREYXRlOiBbewogICAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICAgICAgICBtZXNzYWdlOiAn55Sf5oiQ5Lu75Yqh5pe26Ze05q615LiN6IO95Li656m6JywKICAgICAgICAgIHRyaWdnZXI6ICdjaGFuZ2UnCiAgICAgICAgfV0sCiAgICAgICAgcGxhbkNsYXNzOiBbewogICAgICAgICAgcmVxdWlyZWQ6IHRydWUsCiAgICAgICAgICBtZXNzYWdlOiAn5a6a5pe25Lu75Yqh5omn6KGM57G75LiN6IO95Li656m6JywKICAgICAgICAgIHRyaWdnZXI6ICdjaGFuZ2UnCiAgICAgICAgfV0KICAgICAgfSwKICAgICAgcGlja2VyT3B0aW9uczogewogICAgICAgIC8vIOaXtumXtOmAieaLqeWZqOaXtumXtOiMg+WbtAogICAgICAgIGRpc2FibGVkRGF0ZTogZnVuY3Rpb24gZGlzYWJsZWREYXRlKHRpbWUpIHsKICAgICAgICAgIHJldHVybiBtb21lbnQodGltZSkuaXNCZWZvcmUobW9tZW50KCkuc3VidHJhY3QoMSwgJ2RheXMnKSk7CiAgICAgICAgfQogICAgICB9LAogICAgICBzYXZlTG9hZGluZzogZmFsc2UsCiAgICAgIC8vIOS4iuS8oGxvYWRpbmcKICAgICAgZm9ybUxvYWRpbmc6IHRydWUsCiAgICAgIC8vIOS4iuS8oGxvYWRpbmcKICAgICAgcm9hZENob2ljZURpYWxvZzogZmFsc2UsCiAgICAgIC8vIOaYr+WQpuWxleekuumAieaLqei3r+auteW8ueWxggogICAgICB0cmVlRGF0YTogW10sCiAgICAgIC8vIOe7hOe7h+agkQogICAgICByb2FkRGF0YTogW10sCiAgICAgIC8vIOi3r+auteaVsOaNrgogICAgICBhbG9uZ1JvdXRlSW5mb0RhdGE6IFtdLAogICAgICAvLyDmsr/nur/orr7lpIfmlbDmja4KICAgICAgaW5zcGVjdGlvblBvaW50c0RhdGE6IFtdLAogICAgICAvLyDlt6Hmn6XlhoXlrrnvvIjmoJHlvaLngrnkvY3vvInmlbDmja4KICAgICAgYWRkRWRpdFRyZWVQcm9wczogewogICAgICAgIGNoaWxkcmVuOiAnY2hpbGRyZW4nLAogICAgICAgIGxhYmVsOiAnbmFtZScsCiAgICAgICAgZGlzYWJsZWQ6IGZ1bmN0aW9uIGRpc2FibGVkKGRhdGEpIHsKICAgICAgICAgIHJldHVybiBkYXRhLmxldmVsICE9PSAnNCc7CiAgICAgICAgfQogICAgICB9LAogICAgICBpZDogJycsCiAgICAgIC8vIGlk5qCH6K+G56ymCiAgICAgIHB1YlN1YjogbnVsbCwKICAgICAgdHJlZUxvYWRpbmc6IGZhbHNlCiAgICB9OwogIH0sCiAgd2F0Y2g6IHsKICAgIC8vIOebkeWQrOmikeeOh+WPmOWMlgogICAgLy8gJ2FkZEVkaXRGb3JtLmZyZXF1ZW5jeSc6IHsKICAgIC8vICAgaGFuZGxlcihuZXdWYWwpIHsKICAgIC8vICAgICB0aGlzLmN1cnJlbnRJbnNwZWN0aW9uQ3ljbGUgPSBuZXdWYWwKICAgIC8vICAgICAvLyDlpoLmnpxyb2FkSWTlrZjlnKjvvIzliJnph43mlrDojrflj5blt6Hmo4DngrnmlbDmja4KICAgIC8vICAgICBpZiAodGhpcy5hZGRFZGl0Rm9ybS5yb2FkSWQpIHsKICAgIC8vICAgICAgIHRoaXMuZ2V0SW5zcGVjdGlvblBvaW50c0RhdGEodGhpcy5hZGRFZGl0Rm9ybS5yb2FkSWQpCiAgICAvLyAgICAgfQogICAgLy8gICAgIC8vIOmHjee9ruWkqeaVsOmAieaLqQogICAgLy8gICAgIC8vIHRoaXMuc2VsZWN0ZWREYXkgPSAnJwogICAgLy8gICAgIC8vIHRoaXMuZGF5T3B0aW9ucyA9IFtdCiAgICAvLyAgIH0sCiAgICAvLyAgIGltbWVkaWF0ZTogdHJ1ZQogICAgLy8gfSwKICAgIC8vcG9pbnRMZXZlbOeahOebkeWQrAogICAgLy8gcG9pbnRMZXZlbChuZXdWYWwpIHsKICAgIC8vICAgLy8g5aaC5p6ccm9hZElk5a2Y5Zyo77yM5YiZ6YeN5paw6I635Y+W5beh5qOA54K55pWw5o2uCiAgICAvLyAgIGlmICh0aGlzLmFkZEVkaXRGb3JtLnJvYWRJZCkgewogICAgLy8gICAgIHRoaXMuZ2V0SW5zcGVjdGlvblBvaW50c0RhdGEodGhpcy5hZGRFZGl0Rm9ybS5yb2FkSWQpCiAgICAvLyAgIH0KICAgIC8vIH0sCiAgICBjb21wb25lbnROYW1lOiB7CiAgICAgIGhhbmRsZXI6IGZ1bmN0aW9uIGhhbmRsZXIobmV3VmFsKSB7CiAgICAgICAgaWYgKG5ld1ZhbCA9PT0gdGhpcy4kb3B0aW9ucy5uYW1lKSB7CiAgICAgICAgICB0aGlzLm9wZW5QYWdlKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuY2xvc2VQYWdlKCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfSwKICBjcmVhdGVkOiBmdW5jdGlvbiBjcmVhdGVkKCkgewogICAgLy8gdGhpcy5nZXRPcmdUcmVlRGF0YSgpCiAgICAvLyB0aGlzLmdldFJvYWREYXRhKCkKICB9LAogIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7CiAgICB2YXIgX3RoaXMyID0gdGhpczsKICAgIHRoaXMucHViU3ViID0gUHViU3ViLnN1YnNjcmliZSgnRWRpdEFkZFBhZ2UnLCBmdW5jdGlvbiAoXywgZGF0YSkgewogICAgICBpZiAoZGF0YS5vcmdOYW1lKSB7CiAgICAgICAgX3RoaXMyLmFkZEVkaXRGb3JtLnJvYWROYW1lID0gZGF0YS5vcmdOYW1lOwogICAgICAgIF90aGlzMi5hZGRFZGl0Rm9ybS5yb2FkSWQgPSBkYXRhLmNhdGFsb2dJZDsKICAgICAgICBfdGhpczIuYWRkRWRpdEZvcm0ucm9hZENvZGUgPSBkYXRhLmNvZGU7CiAgICAgICAgX3RoaXMyLnJvYWRDaGFuZ2UoZGF0YS5jYXRhbG9nSWQpOwogICAgICB9CiAgICAgIC8vIOaWsOWinuaIluS/ruaUuQogICAgICBpZiAoZGF0YS5pZCkgewogICAgICAgIF90aGlzMi5pZCA9IGRhdGEuaWQ7CiAgICAgICAgX3RoaXMyLmdldERldGFpbChkYXRhLmlkKTsKICAgICAgfQogICAgICAvLyB0aGlzLmdldFJvYWREYXRhKCkKICAgIH0pOwogIH0sCiAgbWV0aG9kczogewogICAgLy8g54K55L2N57qn5Yir5Y+Y5YyW5aSE55CGCiAgICAvLyBoYW5kbGVQb2ludExldmVsQ2hhbmdlKHZhbHVlKSB7CiAgICAvLyAgIHRoaXMucG9pbnRMZXZlbCA9IHZhbHVlCiAgICAvLyAgIC8vIOa4heepuuW3sumAieWGheWuuQogICAgLy8gICB0aGlzLmNsZWFyVHJlZVNlbGVjdCgpCiAgICAvLyB9LAogICAgdGVhbUNoYW5nZTogZnVuY3Rpb24gdGVhbUNoYW5nZSh2YWx1ZSkgewogICAgICB0aGlzLmFkZEVkaXRGb3JtLnRlYW1OYW1lID0gdGhpcy50cmVlRGF0YS5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgICByZXR1cm4gaXRlbS5pZCA9PT0gdmFsdWU7CiAgICAgIH0pWzBdLm5hbWU7CiAgICB9LAogICAgLy8g6I635Y+W6K+m5oOFCiAgICBnZXREZXRhaWw6IGZ1bmN0aW9uIGdldERldGFpbChpZCkgewogICAgICB2YXIgX3RoaXMzID0gdGhpczsKICAgICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3JSdW50aW1lKCkubWFyayhmdW5jdGlvbiBfY2FsbGVlKCkgewogICAgICAgIHZhciBfeWllbGQkdGFibGVEZXRhaWwsIF95aWVsZCR0YWJsZURldGFpbCRybywgcm9hZElkLCBfeWllbGQkdGFibGVEZXRhaWwkZnIsIGZyZXF1ZW5jeSwgX3lpZWxkJHRhYmxlRGV0YWlsJHBsLCBwbGFuUGF0cm9sRGV0YWlscywgX3lpZWxkJHRhYmxlRGV0YWlsJHBsMiwgcGxhblN0YXJ0RGF0ZSwgX3lpZWxkJHRhYmxlRGV0YWlsJHBsMywgcGxhbkVuZERhdGUsIF95aWVsZCR0YWJsZURldGFpbCRwbDQsIHBsYW5JbnRlcnZhbCwgYWRkRWRpdEZvcm0sIHBsYW5JbnRlcnZhbEFyciwgdGltZSwgcGxhbkRldGFpbHM7CiAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUoKS53cmFwKGZ1bmN0aW9uIF9jYWxsZWUkKF9jb250ZXh0KSB7CiAgICAgICAgICB3aGlsZSAoMSkgc3dpdGNoIChfY29udGV4dC5wcmV2ID0gX2NvbnRleHQubmV4dCkgewogICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgX2NvbnRleHQucHJldiA9IDA7CiAgICAgICAgICAgICAgX2NvbnRleHQubmV4dCA9IDM7CiAgICAgICAgICAgICAgcmV0dXJuIHRhYmxlRGV0YWlsKGlkKTsKICAgICAgICAgICAgY2FzZSAzOgogICAgICAgICAgICAgIF95aWVsZCR0YWJsZURldGFpbCA9IF9jb250ZXh0LnNlbnQ7CiAgICAgICAgICAgICAgX3lpZWxkJHRhYmxlRGV0YWlsJHJvID0gX3lpZWxkJHRhYmxlRGV0YWlsLnJvYWRJZDsKICAgICAgICAgICAgICByb2FkSWQgPSBfeWllbGQkdGFibGVEZXRhaWwkcm8gPT09IHZvaWQgMCA/ICcnIDogX3lpZWxkJHRhYmxlRGV0YWlsJHJvOwogICAgICAgICAgICAgIF95aWVsZCR0YWJsZURldGFpbCRmciA9IF95aWVsZCR0YWJsZURldGFpbC5mcmVxdWVuY3k7CiAgICAgICAgICAgICAgZnJlcXVlbmN5ID0gX3lpZWxkJHRhYmxlRGV0YWlsJGZyID09PSB2b2lkIDAgPyAnJyA6IF95aWVsZCR0YWJsZURldGFpbCRmcjsKICAgICAgICAgICAgICBfeWllbGQkdGFibGVEZXRhaWwkcGwgPSBfeWllbGQkdGFibGVEZXRhaWwucGxhblBhdHJvbERldGFpbHM7CiAgICAgICAgICAgICAgcGxhblBhdHJvbERldGFpbHMgPSBfeWllbGQkdGFibGVEZXRhaWwkcGwgPT09IHZvaWQgMCA/IFtdIDogX3lpZWxkJHRhYmxlRGV0YWlsJHBsOwogICAgICAgICAgICAgIF95aWVsZCR0YWJsZURldGFpbCRwbDIgPSBfeWllbGQkdGFibGVEZXRhaWwucGxhblN0YXJ0RGF0ZTsKICAgICAgICAgICAgICBwbGFuU3RhcnREYXRlID0gX3lpZWxkJHRhYmxlRGV0YWlsJHBsMiA9PT0gdm9pZCAwID8gJycgOiBfeWllbGQkdGFibGVEZXRhaWwkcGwyOwogICAgICAgICAgICAgIF95aWVsZCR0YWJsZURldGFpbCRwbDMgPSBfeWllbGQkdGFibGVEZXRhaWwucGxhbkVuZERhdGU7CiAgICAgICAgICAgICAgcGxhbkVuZERhdGUgPSBfeWllbGQkdGFibGVEZXRhaWwkcGwzID09PSB2b2lkIDAgPyAnJyA6IF95aWVsZCR0YWJsZURldGFpbCRwbDM7CiAgICAgICAgICAgICAgX3lpZWxkJHRhYmxlRGV0YWlsJHBsNCA9IF95aWVsZCR0YWJsZURldGFpbC5wbGFuSW50ZXJ2YWw7CiAgICAgICAgICAgICAgcGxhbkludGVydmFsID0gX3lpZWxkJHRhYmxlRGV0YWlsJHBsNCA9PT0gdm9pZCAwID8gJycgOiBfeWllbGQkdGFibGVEZXRhaWwkcGw0OwogICAgICAgICAgICAgIGFkZEVkaXRGb3JtID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKF95aWVsZCR0YWJsZURldGFpbCwgX2V4Y2x1ZGVkKTsKICAgICAgICAgICAgICBwbGFuSW50ZXJ2YWxBcnIgPSBwbGFuSW50ZXJ2YWwuc3BsaXQoJ3wnKS5maWx0ZXIoZnVuY3Rpb24gKGkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBpOwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIHRpbWUgPSAnJzsKICAgICAgICAgICAgICBwbGFuRGV0YWlscyA9IHBsYW5QYXRyb2xEZXRhaWxzLmZsYXRNYXAoZnVuY3Rpb24gKGkpIHsKICAgICAgICAgICAgICAgIHJldHVybiBpLmlkID8gaS5pZCA6IFtdOwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIHJvYWRJZCA9IHJvYWRJZCB8fCAnJzsKICAgICAgICAgICAgICBpZiAocGxhbkludGVydmFsQXJyLmxlbmd0aCA9PT0gMikgewogICAgICAgICAgICAgICAgaWYgKGZyZXF1ZW5jeSA9PT0gJzUnKSB7CiAgICAgICAgICAgICAgICAgIHRpbWUgPSBwbGFuSW50ZXJ2YWxBcnJbMF0uc3BsaXQoJywnKSB8fCBbXTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIHRpbWUgPSBwbGFuSW50ZXJ2YWxBcnJbMF0gfHwgJyc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF90aGlzMy5hZGRFZGl0Rm9ybSA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgYWRkRWRpdEZvcm0pLCB7fSwgewogICAgICAgICAgICAgICAgcm9hZElkOiByb2FkSWQsCiAgICAgICAgICAgICAgICBwbGFuRGV0YWlsczogcGxhbkRldGFpbHMsCiAgICAgICAgICAgICAgICBwbGFuU3RhcnRFbmREYXRlOiBwbGFuU3RhcnREYXRlICYmIHBsYW5FbmREYXRlID8gW3BsYW5TdGFydERhdGUsIHBsYW5FbmREYXRlXSA6IFtdLAogICAgICAgICAgICAgICAgdGltZTogdGltZSwKICAgICAgICAgICAgICAgIHBsYW5JbnRlcnZhbDogcGxhbkludGVydmFsQXJyW3BsYW5JbnRlcnZhbEFyci5sZW5ndGggLSAxXSB8fCAnJywKICAgICAgICAgICAgICAgIGZyZXF1ZW5jeTogZnJlcXVlbmN5CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgX3RoaXMzLnJvYWRDaGFuZ2Uocm9hZElkKTsKCiAgICAgICAgICAgICAgLy8gIOmAmui/h+i3r+auteS/oeaBr+iOt+WPluagkeW9oueCueS9jeOAgeWIneWni+WMluagkeWLvumAiQogICAgICAgICAgICAgIF9jb250ZXh0Lm5leHQgPSAyNjsKICAgICAgICAgICAgICByZXR1cm4gX3RoaXMzLmdldEluc3BlY3Rpb25Qb2ludHNEYXRhKHJvYWRJZCwgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczMuaW5pdGlhbGl6ZVRyZWUocGxhbkRldGFpbHMpOwogICAgICAgICAgICAgICAgfSwgMCk7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGNhc2UgMjY6CiAgICAgICAgICAgICAgX2NvbnRleHQucHJldiA9IDI2OwogICAgICAgICAgICAgIF90aGlzMy5mb3JtTG9hZGluZyA9IGZhbHNlOwogICAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5maW5pc2goMjYpOwogICAgICAgICAgICBjYXNlIDI5OgogICAgICAgICAgICBjYXNlICJlbmQiOgogICAgICAgICAgICAgIHJldHVybiBfY29udGV4dC5zdG9wKCk7CiAgICAgICAgICB9CiAgICAgICAgfSwgX2NhbGxlZSwgbnVsbCwgW1swLCwgMjYsIDI5XV0pOwogICAgICB9KSkoKTsKICAgIH0sCiAgICAvLyDmoLnmja7lt7Lli77pgInnmoTmlbDmja7ov5vooYzliIbnu4QKICAgIC8vICAgICBncm91cFNlbGVjdGVkUG9pbnRzKHNlbGVjdGVkQ29kZXMpIHsKICAgIC8vICAgICAgIGNvbnN0IGZyZXF1ZW5jeSA9IE51bWJlcih0aGlzLmFkZEVkaXRGb3JtLmZyZXF1ZW5jeSkgfHwgMQogICAgLy8gICAgICAgbGV0IGdyb3VwQ291bnQgPSBmcmVxdWVuY3kKICAgIC8vCiAgICAvLyAgICAgICAvLyDnibnmrorlpITnkIbmr4/lkajlkozmr4/mnIjnmoTmg4XlhrUKICAgIC8vICAgICAgIGlmICh0aGlzLmFkZEVkaXRGb3JtLmZyZXF1ZW5jeSA9PT0gJzYnKSB7IC8vIOavj+WRqOS4gOasoQogICAgLy8gICAgICAgICBncm91cENvdW50ID0gNwogICAgLy8gICAgICAgfSBlbHNlIGlmICh0aGlzLmFkZEVkaXRGb3JtLmZyZXF1ZW5jeSA9PT0gJzcnKSB7IC8vIOavj+aciOS4gOasoQogICAgLy8gICAgICAgICBncm91cENvdW50ID0gMzAKICAgIC8vICAgICAgIH0KICAgIC8vCiAgICAvLyAgICAgICAvLyDph43nva7liIbnu4TmlbDmja4KICAgIC8vICAgICAgIHRoaXMuZ3JvdXBlZEluc3BlY3Rpb25Qb2ludHMgPSBbXQogICAgLy8gICAgICAgdGhpcy5kYXlPcHRpb25zID0gW10KICAgIC8vCiAgICAvLyAgICAgICBpZiAoZ3JvdXBDb3VudCA8PSAxKSB7CiAgICAvLyAgICAgICAgIC8vIOmikeeOh+S4ujHlpKnmiJbkuI3liIbnu4QKICAgIC8vICAgICAgICAgdGhpcy5ncm91cGVkSW5zcGVjdGlvblBvaW50cyA9IFtzZWxlY3RlZENvZGVzXSAvLyDnoa7kv53ljbPkvb/kuI3liIbnu4TkuZ/kv53nlZnmlbDmja4KICAgIC8vICAgICAgICAgcmV0dXJuCiAgICAvLyAgICAgICB9CiAgICAvLwogICAgLy8gICAgICAgLy8g5Yib5bu65YiG57uECiAgICAvLyAgICAgICBjb25zdCBncm91cFNpemUgPSBNYXRoLmNlaWwoc2VsZWN0ZWRDb2Rlcy5sZW5ndGggLyBncm91cENvdW50KQogICAgLy8KICAgIC8vICAgICAgIC8vIOWwhuW3suWLvumAieeahOiKgueCueWIhue7hAogICAgLy8gICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBncm91cENvdW50OyBpKyspIHsKICAgIC8vICAgICAgICAgY29uc3Qgc3RhcnQgPSBpICogZ3JvdXBTaXplCiAgICAvLyAgICAgICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgZ3JvdXBTaXplCiAgICAvLyAgICAgICAgIGNvbnN0IGdyb3VwTm9kZXMgPSBzZWxlY3RlZENvZGVzLnNsaWNlKHN0YXJ0LCBlbmQpCiAgICAvLyAgICAgICAgIHRoaXMuZ3JvdXBlZEluc3BlY3Rpb25Qb2ludHMucHVzaChncm91cE5vZGVzKQogICAgLy8KICAgIC8vICAgICAgICAgLy8g5re75Yqg5aSp5pWw6YCJ6aG5CiAgICAvLyAgICAgICAgIHRoaXMuZGF5T3B0aW9ucy5wdXNoKHsKICAgIC8vICAgICAgICAgICB2YWx1ZTogaSArIDEsCiAgICAvLyAgICAgICAgICAgbGFiZWw6IGDnrKwke2kgKyAxfeWkqWAKICAgIC8vICAgICAgICAgfSkKICAgIC8vICAgICAgIH0KICAgIC8vCiAgICAvLyAgICAgICAvLyDpu5jorqTpgInkuK3nrKzkuIDlpKkKICAgIC8vICAgICAgIHRoaXMuc2VsZWN0ZWREYXkgPSB0aGlzLmRheU9wdGlvbnNbMF0/LnZhbHVlIHx8ICcnCiAgICAvLyAgICAgfSwKICAgIC8vIOiOt+WPluWFrOWPuOagkQogICAgZ2V0T3JnVHJlZURhdGE6IGZ1bmN0aW9uIGdldE9yZ1RyZWVEYXRhKCkgewogICAgICB2YXIgX3RoaXM0ID0gdGhpczsKICAgICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3JSdW50aW1lKCkubWFyayhmdW5jdGlvbiBfY2FsbGVlMigpIHsKICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZSgpLndyYXAoZnVuY3Rpb24gX2NhbGxlZTIkKF9jb250ZXh0MikgewogICAgICAgICAgd2hpbGUgKDEpIHN3aXRjaCAoX2NvbnRleHQyLnByZXYgPSBfY29udGV4dDIubmV4dCkgewogICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgX2NvbnRleHQyLm5leHQgPSAyOwogICAgICAgICAgICAgIHJldHVybiBvcmdUcmVlKCk7CiAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICBfdGhpczQudHJlZURhdGEgPSBfY29udGV4dDIuc2VudDsKICAgICAgICAgICAgY2FzZSAzOgogICAgICAgICAgICBjYXNlICJlbmQiOgogICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDIuc3RvcCgpOwogICAgICAgICAgfQogICAgICAgIH0sIF9jYWxsZWUyKTsKICAgICAgfSkpKCk7CiAgICB9LAogICAgLy/ojrflj5bmiYDlnKjot6/mrrXliJfooajmlbDmja4KICAgIC8vIGFzeW5jIGdldFJvYWREYXRhKCkgewogICAgLy8gICBjb25zdCB7IHJvd3MgPSBbXSB9ID0gYXdhaXQgcm9hZFNlY3Rpb25JbmZvSW50ZXIoeyBwYWdlQmVhbjogeyBwYWdlU2l6ZTogLTEgfSB9KQogICAgLy8gICB0aGlzLnJvYWREYXRhID0gcm93cy5tYXAoaXRlbSA9PiB7CiAgICAvLyAgICAgaXRlbS5yb2FkTmFtZSA9IGl0ZW0ubmFtZSArICcgJyArIGl0ZW0uY29kZQogICAgLy8gICAgIHJldHVybiBpdGVtCiAgICAvLyAgIH0pCiAgICAvLyAgIGlmICghdGhpcy5pZCkgewogICAgLy8gICAgIHRoaXMuYWRkRWRpdEZvcm0ucm9hZElkID0gdGhpcy5yb2FkRGF0YVswXS5pZAogICAgLy8gICAgIHRoaXMucm9hZENoYW5nZSh0aGlzLnJvYWREYXRhWzBdLmlkKQogICAgLy8gICB9CiAgICAvLyB9LAogICAgLy8g6I635Y+W54K55L2N5qCR5pWw5o2uCiAgICBnZXRJbnNwZWN0aW9uUG9pbnRzRGF0YTogZnVuY3Rpb24gZ2V0SW5zcGVjdGlvblBvaW50c0RhdGEoKSB7CiAgICAgIHZhciBfYXJndW1lbnRzID0gYXJndW1lbnRzLAogICAgICAgIF90aGlzNSA9IHRoaXM7CiAgICAgIHJldHVybiBfYXN5bmNUb0dlbmVyYXRvcigvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoZnVuY3Rpb24gX2NhbGxlZTMoKSB7CiAgICAgICAgdmFyIHJvYWRJZCwgY2FsbGJhY2ssIF95aWVsZCRwb2ludFRyZWVEYXRhLCBfeWllbGQkcG9pbnRUcmVlRGF0YSQsIHZhbHVlOwogICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lKCkud3JhcChmdW5jdGlvbiBfY2FsbGVlMyQoX2NvbnRleHQzKSB7CiAgICAgICAgICB3aGlsZSAoMSkgc3dpdGNoIChfY29udGV4dDMucHJldiA9IF9jb250ZXh0My5uZXh0KSB7CiAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICByb2FkSWQgPSBfYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgX2FyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gX2FyZ3VtZW50c1swXSA6ICcnOwogICAgICAgICAgICAgIGNhbGxiYWNrID0gX2FyZ3VtZW50cy5sZW5ndGggPiAxID8gX2FyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDsKICAgICAgICAgICAgICBfY29udGV4dDMucHJldiA9IDI7CiAgICAgICAgICAgICAgX3RoaXM1LnRyZWVMb2FkaW5nID0gdHJ1ZTsKICAgICAgICAgICAgICBfY29udGV4dDMubmV4dCA9IDY7CiAgICAgICAgICAgICAgcmV0dXJuIHBvaW50VHJlZURhdGEoewogICAgICAgICAgICAgICAgcm9hZElkOiByb2FkSWQKICAgICAgICAgICAgICAgIC8vIGluc3BlY3Rpb25DeWNsZTogdGhpcy5jdXJyZW50SW5zcGVjdGlvbkN5Y2xlLCAvLyDmt7vliqDlt6Hmo4DlkajmnJ/lj4LmlbAKICAgICAgICAgICAgICAgIC8vIHBvaW50TGV2ZWw6IHRoaXMucG9pbnRMZXZlbCAvLyDngrnkvY3nuqfliKvlj4LmlbAKICAgICAgICAgICAgICB9LCAnYWRkRWRpdCcpOwogICAgICAgICAgICBjYXNlIDY6CiAgICAgICAgICAgICAgX3lpZWxkJHBvaW50VHJlZURhdGEgPSBfY29udGV4dDMuc2VudDsKICAgICAgICAgICAgICBfeWllbGQkcG9pbnRUcmVlRGF0YSQgPSBfeWllbGQkcG9pbnRUcmVlRGF0YS52YWx1ZTsKICAgICAgICAgICAgICB2YWx1ZSA9IF95aWVsZCRwb2ludFRyZWVEYXRhJCA9PT0gdm9pZCAwID8gW10gOiBfeWllbGQkcG9pbnRUcmVlRGF0YSQ7CiAgICAgICAgICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2sodmFsdWUpOwogICAgICAgICAgICAgIGNvbnNvbGUubG9nKHZhbHVlLCAnOTk5OTk5ODg4ODg4Jyk7CiAgICAgICAgICAgICAgX3RoaXM1Lmluc3BlY3Rpb25Qb2ludHNEYXRhID0gdmFsdWU7CiAgICAgICAgICAgICAgLy8g5pWw5o2u5Yqg6L295a6M5oiQ5ZCO6buY6K6k6YCJ5Lit5omA5pyJbGV2ZWw9NOeahOiKgueCuQogICAgICAgICAgICAgIF90aGlzNS4kbmV4dFRpY2soZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICAgICAgdmFyIGFsbExlYWZOb2RlcyA9IF90aGlzNS5nZXRBbGxMZWFmTm9kZXModmFsdWUpOwogICAgICAgICAgICAgICAgICBfdGhpczUuJHJlZnMuYWRkRWRpdFRyZWUuc2V0Q2hlY2tlZEtleXMoYWxsTGVhZk5vZGVzLm1hcChmdW5jdGlvbiAobm9kZSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmNvZGU7CiAgICAgICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgICAgICAgX3RoaXM1LmFkZEVkaXRGb3JtLnBsYW5EZXRhaWxzID0gYWxsTGVhZk5vZGVzLm1hcChmdW5jdGlvbiAobm9kZSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBub2RlLmNvZGU7CiAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIF9jb250ZXh0My5uZXh0ID0gMTg7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMTU6CiAgICAgICAgICAgICAgX2NvbnRleHQzLnByZXYgPSAxNTsKICAgICAgICAgICAgICBfY29udGV4dDMudDAgPSBfY29udGV4dDNbImNhdGNoIl0oMik7CiAgICAgICAgICAgICAgLy8g5LiN5Li66K+35rGC6L+H5b+r57uT5p2f55qE5oOF5Ya15LiL77yM6YeN572uCiAgICAgICAgICAgICAgaWYgKF9jb250ZXh0My50MC5tZXNzYWdlICE9PSAnY2FuY2VsZWQnKSBjYWxsYmFjayAmJiBjYWxsYmFjayhbXSk7CiAgICAgICAgICAgIGNhc2UgMTg6CiAgICAgICAgICAgICAgX2NvbnRleHQzLnByZXYgPSAxODsKICAgICAgICAgICAgICBfdGhpczUudHJlZUxvYWRpbmcgPSBmYWxzZTsKICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQzLmZpbmlzaCgxOCk7CiAgICAgICAgICAgIGNhc2UgMjE6CiAgICAgICAgICAgIGNhc2UgImVuZCI6CiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0My5zdG9wKCk7CiAgICAgICAgICB9CiAgICAgICAgfSwgX2NhbGxlZTMsIG51bGwsIFtbMiwgMTUsIDE4LCAyMV1dKTsKICAgICAgfSkpKCk7CiAgICB9LAogICAgLy8g5qC55o2u6aKR546H5YiG57uE5beh5qOA54K55pWw5o2uCiAgICAvLyBncm91cEluc3BlY3Rpb25Qb2ludHMoZGF0YSkgewogICAgLy8gICBsZXQgZnJlcXVlbmN5ID0gTnVtYmVyKHRoaXMuYWRkRWRpdEZvcm0uZnJlcXVlbmN5KSB8fCAxCiAgICAvLyAgIC8vIOeJueauiuWkhOeQhuavj+WRqOWSjOavj+aciOeahOaDheWGtQogICAgLy8gICBpZiAodGhpcy5hZGRFZGl0Rm9ybS5mcmVxdWVuY3kgPT09ICc2JykgeyAvLyDmr4/lkajkuIDmrKEKICAgIC8vICAgICBmcmVxdWVuY3kgPSA3IC8vIOWIhuaIkDfnu4QKICAgIC8vICAgfSBlbHNlIGlmICh0aGlzLmFkZEVkaXRGb3JtLmZyZXF1ZW5jeSA9PT0gJzcnKSB7IC8vIOavj+aciOS4gOasoQogICAgLy8gICAgIGZyZXF1ZW5jeSA9IDMwIC8vIOWIhuaIkDMw57uECiAgICAvLyAgIH0KICAgIC8vICAgLy8g6YeN572u5YiG57uE5pWw5o2uCiAgICAvLyAgIHRoaXMuZ3JvdXBlZEluc3BlY3Rpb25Qb2ludHMgPSBbXQogICAgLy8gICB0aGlzLmRheU9wdGlvbnMgPSBbXQogICAgLy8KICAgIC8vICAgaWYgKGZyZXF1ZW5jeSA8PSAxKSB7CiAgICAvLyAgICAgLy8g6aKR546H5Li6MeWkqeaIluS4jeWIhue7hAogICAgLy8gICAgIHRoaXMuaW5zcGVjdGlvblBvaW50c0RhdGEgPSBkYXRhCiAgICAvLyAgICAgcmV0dXJuCiAgICAvLyAgIH0KICAgIC8vCiAgICAvLyAgIC8vIOWIm+W7uuWIhue7hAogICAgLy8gICBjb25zdCBsZWFmTm9kZXMgPSB0aGlzLmdldEFsbExlYWZOb2RlcyhkYXRhKQogICAgLy8gICBjb25zdCBncm91cFNpemUgPSBNYXRoLmNlaWwobGVhZk5vZGVzLmxlbmd0aCAvIGZyZXF1ZW5jeSkKICAgIC8vCiAgICAvLyAgIC8vIOWwhuWPtuWtkOiKgueCueWIhue7hAogICAgLy8gICBmb3IgKGxldCBpID0gMDsgaSA8IGZyZXF1ZW5jeTsgaSsrKSB7CiAgICAvLyAgICAgY29uc3Qgc3RhcnQgPSBpICogZ3JvdXBTaXplCiAgICAvLyAgICAgY29uc3QgZW5kID0gc3RhcnQgKyBncm91cFNpemUKICAgIC8vICAgICBjb25zdCBncm91cE5vZGVzID0gbGVhZk5vZGVzLnNsaWNlKHN0YXJ0LCBlbmQpCiAgICAvLyAgICAgdGhpcy5ncm91cGVkSW5zcGVjdGlvblBvaW50cy5wdXNoKGdyb3VwTm9kZXMubWFwKG5vZGUgPT4gbm9kZS5jb2RlKSkKICAgIC8vCiAgICAvLyAgICAgLy8g5re75Yqg5aSp5pWw6YCJ6aG5CiAgICAvLyAgICAgdGhpcy5kYXlPcHRpb25zLnB1c2goewogICAgLy8gICAgICAgdmFsdWU6IGkgKyAxLAogICAgLy8gICAgICAgbGFiZWw6IGDnrKwke2kgKyAxfeWkqWAKICAgIC8vICAgICB9KQogICAgLy8gICB9CiAgICAvLwogICAgLy8gICAvLyDpu5jorqTpgInkuK3nrKzkuIDlpKkKICAgIC8vICAgdGhpcy5zZWxlY3RlZERheSA9IHRoaXMuZGF5T3B0aW9uc1swXT8udmFsdWUgfHwgJycKICAgIC8vICAgdGhpcy5maWx0ZXJJbnNwZWN0aW9uUG9pbnRzQnlEYXkoKQogICAgLy8gfSwKICAgIC8vIOagueaNrumAieaLqeeahOWkqeaVsOi/h+a7pOW3oeajgOeCuQogICAgLy8gZmlsdGVySW5zcGVjdGlvblBvaW50c0J5RGF5KCkgewogICAgLy8gICBpZiAoIXRoaXMuc2VsZWN0ZWREYXkgfHwgdGhpcy5ncm91cGVkSW5zcGVjdGlvblBvaW50cy5sZW5ndGggPT09IDApIHsKICAgIC8vICAgICAvLyDnvJbovpHmqKHlvI/kuIvlj6rmmL7npLrlt7Lli77pgInnmoToioLngrkKICAgIC8vICAgICBpZiAodGhpcy5pZCAmJiB0aGlzLmFkZEVkaXRGb3JtLnBsYW5EZXRhaWxzICYmIHRoaXMuYWRkRWRpdEZvcm0ucGxhbkRldGFpbHMubGVuZ3RoID4gMCkgewogICAgLy8gICAgICAgdGhpcy5maWx0ZXJPbmx5U2VsZWN0ZWROb2RlcygpCiAgICAvLyAgICAgfSBlbHNlIHsKICAgIC8vICAgICAgIHRoaXMuaW5zcGVjdGlvblBvaW50c0RhdGEgPSB0aGlzLm9yaWdpbmFsSW5zcGVjdGlvblBvaW50cwogICAgLy8gICAgIH0KICAgIC8vICAgICByZXR1cm4KICAgIC8vICAgfQogICAgLy8KICAgIC8vICAgY29uc3QgZGF5SW5kZXggPSBOdW1iZXIodGhpcy5zZWxlY3RlZERheSkgLSAxCiAgICAvLyAgIGNvbnN0IGNoZWNrZWRDb2RlcyA9IHRoaXMuZ3JvdXBlZEluc3BlY3Rpb25Qb2ludHNbZGF5SW5kZXhdIHx8IFtdCiAgICAvLwogICAgLy8gICAvLyDnvJbovpHmqKHlvI/kuIvlj6rmmL7npLrlt7Lli77pgInnmoToioLngrkKICAgIC8vICAgaWYgKHRoaXMuaWQgJiYgdGhpcy5hZGRFZGl0Rm9ybS5wbGFuRGV0YWlscyAmJiB0aGlzLmFkZEVkaXRGb3JtLnBsYW5EZXRhaWxzLmxlbmd0aCA+IDApIHsKICAgIC8vICAgICB0aGlzLmZpbHRlck9ubHlTZWxlY3RlZE5vZGVzKGNoZWNrZWRDb2RlcykKICAgIC8vICAgfSBlbHNlIHsKICAgIC8vICAgICAvLyDmlrDlop7mqKHlvI/kuIvmjInmraPluLjpgLvovpHov4fmu6QKICAgIC8vICAgICBjb25zdCBmaWx0ZXJlZERhdGEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMub3JpZ2luYWxJbnNwZWN0aW9uUG9pbnRzKSkKICAgIC8vICAgICB0aGlzLm1hcmtBbmRGaWx0ZXJOb2RlcyhmaWx0ZXJlZERhdGEsIGNoZWNrZWRDb2RlcykKICAgIC8vICAgICB0aGlzLmluc3BlY3Rpb25Qb2ludHNEYXRhID0gdGhpcy5maWx0ZXJOb2RlcyhmaWx0ZXJlZERhdGEpCiAgICAvLyAgIH0KICAgIC8vCiAgICAvLyAgIHRoaXMudXBkYXRlVHJlZVNlbGVjdGlvbihjaGVja2VkQ29kZXMpCiAgICAvLyAgIC8vIOa3seW6puWkjeWItuWOn+Wni+aVsOaNrgogICAgLy8gICBjb25zdCBmaWx0ZXJlZERhdGEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMub3JpZ2luYWxJbnNwZWN0aW9uUG9pbnRzKSkKICAgIC8vCiAgICAvLyAgIC8vIOagh+iusOWTquS6m+iKgueCueW6lOivpeaYvuekugogICAgLy8gICBjb25zdCBtYXJrVmlzaWJsZU5vZGVzID0gKG5vZGVzKSA9PiB7CiAgICAvLyAgICAgbm9kZXMuZm9yRWFjaChub2RlID0+IHsKICAgIC8vICAgICAgIGlmIChub2RlLmxldmVsID09PSAnNCcpIHsKICAgIC8vICAgICAgICAgLy8g5Y+25a2Q6IqC54K5IC0g5qC55o2u5piv5ZCm5Zyo6YCJ5Lit5YiG57uE5Lit5Yaz5a6a5piv5ZCm5pi+56S6CiAgICAvLyAgICAgICAgIG5vZGUudmlzaWJsZSA9IGNoZWNrZWRDb2Rlcy5pbmNsdWRlcyhub2RlLmNvZGUpCiAgICAvLyAgICAgICB9IGVsc2UgewogICAgLy8gICAgICAgICAvLyDpnZ7lj7blrZDoioLngrkgLSDpgJLlvZLlpITnkIblrZDoioLngrkKICAgIC8vICAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW4pIHsKICAgIC8vICAgICAgICAgICBtYXJrVmlzaWJsZU5vZGVzKG5vZGUuY2hpbGRyZW4pCiAgICAvLyAgICAgICAgICAgLy8g5aaC5p6c5a2Q6IqC54K55pyJ5Y+v6KeB55qE77yM5YiZ5b2T5YmN6IqC54K55Lmf5Y+v6KeBCiAgICAvLyAgICAgICAgICAgbm9kZS52aXNpYmxlID0gbm9kZS5jaGlsZHJlbi5zb21lKGNoaWxkID0+IGNoaWxkLnZpc2libGUpCiAgICAvLyAgICAgICAgIH0gZWxzZSB7CiAgICAvLyAgICAgICAgICAgbm9kZS52aXNpYmxlID0gZmFsc2UKICAgIC8vICAgICAgICAgfQogICAgLy8gICAgICAgfQogICAgLy8gICAgIH0pCiAgICAvLyAgIH0KICAgIC8vCiAgICAvLyAgIG1hcmtWaXNpYmxlTm9kZXMoZmlsdGVyZWREYXRhKQogICAgLy8KICAgIC8vICAgLy8g6L+H5ruk5o6J5LiN5Y+v6KeB55qE6IqC54K5CiAgICAvLyAgIGNvbnN0IGZpbHRlck5vZGVzID0gKG5vZGVzKSA9PiB7CiAgICAvLyAgICAgcmV0dXJuIG5vZGVzLmZpbHRlcihub2RlID0+IHsKICAgIC8vICAgICAgIGlmIChub2RlLmNoaWxkcmVuKSB7CiAgICAvLyAgICAgICAgIG5vZGUuY2hpbGRyZW4gPSBmaWx0ZXJOb2Rlcyhub2RlLmNoaWxkcmVuKQogICAgLy8gICAgICAgICByZXR1cm4gbm9kZS52aXNpYmxlICYmIG5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMAogICAgLy8gICAgICAgfQogICAgLy8gICAgICAgcmV0dXJuIG5vZGUudmlzaWJsZQogICAgLy8gICAgIH0pCiAgICAvLyAgIH0KICAgIC8vCiAgICAvLyAgIHRoaXMuaW5zcGVjdGlvblBvaW50c0RhdGEgPSBmaWx0ZXJOb2RlcyhmaWx0ZXJlZERhdGEpCiAgICAvLwogICAgLy8gICAvLyDmm7TmlrDmoJHnu4Tku7YKICAgIC8vICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gewogICAgLy8gICAgIGlmICh0aGlzLiRyZWZzLmFkZEVkaXRUcmVlKSB7CiAgICAvLyAgICAgICAvLyDpu5jorqTpgInkuK3lvZPliY3liIbnu4TnmoToioLngrkKICAgIC8vICAgICAgIHRoaXMuJHJlZnMuYWRkRWRpdFRyZWUuc2V0Q2hlY2tlZEtleXMoY2hlY2tlZENvZGVzKQogICAgLy8gICAgICAgdGhpcy5hZGRFZGl0Rm9ybS5wbGFuRGV0YWlscyA9IGNoZWNrZWRDb2RlcwogICAgLy8KICAgIC8vICAgICAgIC8vIOWxleW8gOaJgOacieWPr+ingeiKgueCuQogICAgLy8gICAgICAgY29uc3QgYWxsTm9kZXMgPSB0aGlzLiRyZWZzLmFkZEVkaXRUcmVlLnN0b3JlLl9nZXRBbGxOb2RlcygpCiAgICAvLyAgICAgICBhbGxOb2Rlcy5mb3JFYWNoKG5vZGUgPT4gewogICAgLy8gICAgICAgICBpZiAobm9kZS5kYXRhLnZpc2libGUpIHsKICAgIC8vICAgICAgICAgICBub2RlLmV4cGFuZGVkID0gdHJ1ZQogICAgLy8gICAgICAgICB9CiAgICAvLyAgICAgICB9KQogICAgLy8gICAgIH0KICAgIC8vICAgfSkKICAgIC8vIH0sCiAgICAvLyDlj6rov4fmu6Tlt7LpgInkuK3nmoToioLngrkKICAgIC8vIGZpbHRlck9ubHlTZWxlY3RlZE5vZGVzKGNoZWNrZWRDb2RlcyA9IFtdKSB7CiAgICAvLyAgIGlmICghdGhpcy5vcmlnaW5hbEluc3BlY3Rpb25Qb2ludHMpIHJldHVybgogICAgLy8KICAgIC8vICAgLy8g5rex5bqm5aSN5Yi25Y6f5aeL5pWw5o2uCiAgICAvLyAgIGNvbnN0IGZpbHRlcmVkRGF0YSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5vcmlnaW5hbEluc3BlY3Rpb25Qb2ludHMpKQogICAgLy8KICAgIC8vICAgLy8g5qCH6K6w5ZOq5Lqb6IqC54K55bqU6K+l5pi+56S677yI5Y+q5pi+56S65bey5Yu+6YCJ55qE6IqC54K577yJCiAgICAvLyAgIGNvbnN0IG1hcmtWaXNpYmxlTm9kZXMgPSAobm9kZXMpID0+IHsKICAgIC8vICAgICBub2Rlcy5mb3JFYWNoKG5vZGUgPT4gewogICAgLy8gICAgICAgaWYgKG5vZGUubGV2ZWwgPT09ICc0JykgewogICAgLy8gICAgICAgICAvLyDlj7blrZDoioLngrkgLSDlj6rmmL7npLrlnKhwbGFuRGV0YWlsc+S4reeahOiKgueCuQogICAgLy8gICAgICAgICBub2RlLnZpc2libGUgPSB0aGlzLmFkZEVkaXRGb3JtLnBsYW5EZXRhaWxzLmluY2x1ZGVzKG5vZGUuY29kZSkgJiYKICAgIC8vICAgICAgICAgICAoY2hlY2tlZENvZGVzLmxlbmd0aCA9PT0gMCB8fCBjaGVja2VkQ29kZXMuaW5jbHVkZXMobm9kZS5jb2RlKSkKICAgIC8vICAgICAgIH0gZWxzZSB7CiAgICAvLyAgICAgICAgIC8vIOmdnuWPtuWtkOiKgueCuSAtIOmAkuW9kuWkhOeQhuWtkOiKgueCuQogICAgLy8gICAgICAgICBpZiAobm9kZS5jaGlsZHJlbikgewogICAgLy8gICAgICAgICAgIG1hcmtWaXNpYmxlTm9kZXMobm9kZS5jaGlsZHJlbikKICAgIC8vICAgICAgICAgICAvLyDlpoLmnpzlrZDoioLngrnmnInlj6/op4HnmoTvvIzliJnlvZPliY3oioLngrnkuZ/lj6/op4EKICAgIC8vICAgICAgICAgICBub2RlLnZpc2libGUgPSBub2RlLmNoaWxkcmVuLnNvbWUoY2hpbGQgPT4gY2hpbGQudmlzaWJsZSkKICAgIC8vICAgICAgICAgfSBlbHNlIHsKICAgIC8vICAgICAgICAgICBub2RlLnZpc2libGUgPSBmYWxzZQogICAgLy8gICAgICAgICB9CiAgICAvLyAgICAgICB9CiAgICAvLyAgICAgfSkKICAgIC8vICAgfQogICAgLy8KICAgIC8vICAgbWFya1Zpc2libGVOb2RlcyhmaWx0ZXJlZERhdGEpCiAgICAvLyAgIHRoaXMuaW5zcGVjdGlvblBvaW50c0RhdGEgPSB0aGlzLmZpbHRlck5vZGVzKGZpbHRlcmVkRGF0YSkKICAgIC8vIH0sCiAgICAvLyDmoIforrDlkozov4fmu6ToioLngrkKICAgIC8vICAgICBtYXJrQW5kRmlsdGVyTm9kZXMoZGF0YSwgY2hlY2tlZENvZGVzKSB7CiAgICAvLyAgICAgICBjb25zdCBtYXJrVmlzaWJsZU5vZGVzID0gKG5vZGVzKSA9PiB7CiAgICAvLyAgICAgICAgIG5vZGVzLmZvckVhY2gobm9kZSA9PiB7CiAgICAvLyAgICAgICAgICAgaWYgKG5vZGUubGV2ZWwgPT09ICc0JykgewogICAgLy8gICAgICAgICAgICAgbm9kZS52aXNpYmxlID0gY2hlY2tlZENvZGVzLmluY2x1ZGVzKG5vZGUuY29kZSkKICAgIC8vICAgICAgICAgICB9IGVsc2UgewogICAgLy8gICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW4pIHsKICAgIC8vICAgICAgICAgICAgICAgbWFya1Zpc2libGVOb2Rlcyhub2RlLmNoaWxkcmVuKQogICAgLy8gICAgICAgICAgICAgICBub2RlLnZpc2libGUgPSBub2RlLmNoaWxkcmVuLnNvbWUoY2hpbGQgPT4gY2hpbGQudmlzaWJsZSkKICAgIC8vICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAvLyAgICAgICAgICAgICAgIG5vZGUudmlzaWJsZSA9IGZhbHNlCiAgICAvLyAgICAgICAgICAgICB9CiAgICAvLyAgICAgICAgICAgfQogICAgLy8gICAgICAgICB9KQogICAgLy8gICAgICAgfQogICAgLy8gICAgICAgbWFya1Zpc2libGVOb2RlcyhkYXRhKQogICAgLy8gICAgIH0sCiAgICAvLyDov4fmu6ToioLngrkKICAgIC8vICAgICBmaWx0ZXJOb2Rlcyhub2RlcykgewogICAgLy8gICAgICAgcmV0dXJuIG5vZGVzLmZpbHRlcihub2RlID0+IHsKICAgIC8vICAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW4pIHsKICAgIC8vICAgICAgICAgICBub2RlLmNoaWxkcmVuID0gdGhpcy5maWx0ZXJOb2Rlcyhub2RlLmNoaWxkcmVuKQogICAgLy8gICAgICAgICAgIHJldHVybiBub2RlLnZpc2libGUgJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwCiAgICAvLyAgICAgICAgIH0KICAgIC8vICAgICAgICAgcmV0dXJuIG5vZGUudmlzaWJsZQogICAgLy8gICAgICAgfSkKICAgIC8vICAgICB9LAogICAgLy8g5pu05paw5qCR6YCJ5oup54q25oCBCiAgICAvLyAgICAgdXBkYXRlVHJlZVNlbGVjdGlvbihjaGVja2VkQ29kZXMpIHsKICAgIC8vICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHsKICAgIC8vICAgICAgICAgaWYgKHRoaXMuJHJlZnMuYWRkRWRpdFRyZWUpIHsKICAgIC8vICAgICAgICAgICAvLyDorr7nva7li77pgInnirbmgIEKICAgIC8vICAgICAgICAgICB0aGlzLiRyZWZzLmFkZEVkaXRUcmVlLnNldENoZWNrZWRLZXlzKGNoZWNrZWRDb2RlcykKICAgIC8vICAgICAgICAgICB0aGlzLmFkZEVkaXRGb3JtLnBsYW5EZXRhaWxzID0gY2hlY2tlZENvZGVzCiAgICAvLwogICAgLy8gICAgICAgICAgIC8vIOWxleW8gOWPr+ingeiKgueCuQogICAgLy8gICAgICAgICAgIGNvbnN0IGFsbE5vZGVzID0gdGhpcy4kcmVmcy5hZGRFZGl0VHJlZS5zdG9yZS5fZ2V0QWxsTm9kZXMoKQogICAgLy8gICAgICAgICAgIGFsbE5vZGVzLmZvckVhY2gobm9kZSA9PiB7CiAgICAvLyAgICAgICAgICAgICBpZiAobm9kZS5kYXRhLnZpc2libGUpIHsKICAgIC8vICAgICAgICAgICAgICAgbm9kZS5leHBhbmRlZCA9IHRydWUKICAgIC8vICAgICAgICAgICAgIH0KICAgIC8vICAgICAgICAgICB9KQogICAgLy8gICAgICAgICB9CiAgICAvLyAgICAgICB9KQogICAgLy8gICAgIH0sCiAgICAvLyDojrflj5bmiYDmnIlsZXZlbD0055qE5Y+25a2Q6IqC54K5LS0t6buY6K6k6YCJ5LitCiAgICAvLyBnZXRBbGxMZWFmTm9kZXModHJlZURhdGEpIHsKICAgIC8vICAgY29uc3QgcmVzdWx0ID0gW10KICAgIC8vICAgY29uc3QgdHJhdmVyc2UgPSAobm9kZXMpID0+IHsKICAgIC8vICAgICBub2Rlcy5mb3JFYWNoKG5vZGUgPT4gewogICAgLy8gICAgICAgaWYgKG5vZGUubGV2ZWwgPT09ICc0JykgewogICAgLy8gICAgICAgICByZXN1bHQucHVzaChub2RlKQogICAgLy8gICAgICAgfQogICAgLy8gICAgICAgaWYgKG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGgpIHsKICAgIC8vICAgICAgICAgdHJhdmVyc2Uobm9kZS5jaGlsZHJlbikKICAgIC8vICAgICAgIH0KICAgIC8vICAgICB9KQogICAgLy8gICB9CiAgICAvLyAgIHRyYXZlcnNlKHRyZWVEYXRhKQogICAgLy8gICByZXR1cm4gcmVzdWx0CiAgICAvLyB9LAogICAgLy8g6YCa6L+H6Lev5q615L+h5oGv6I635Y+W5rK/57q/6K6+5aSH5L+h5oGvCiAgICBnZXRBbG9uZ1JvdXRlSW5mbzogZnVuY3Rpb24gZ2V0QWxvbmdSb3V0ZUluZm8odmFsdWUsIGNhbGxiYWNrKSB7CiAgICAgIHZhciBfdGhpczYgPSB0aGlzOwogICAgICByZXR1cm4gX2FzeW5jVG9HZW5lcmF0b3IoLyojX19QVVJFX18qL19yZWdlbmVyYXRvclJ1bnRpbWUoKS5tYXJrKGZ1bmN0aW9uIF9jYWxsZWU0KCkgewogICAgICAgIHZhciBfd2lwZURhdGEsIF95aWVsZCRhbG9uZ1JvdXRlSW5mbywgX3lpZWxkJGFsb25nUm91dGVJbmZvMiwgcm93czsKICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZSgpLndyYXAoZnVuY3Rpb24gX2NhbGxlZTQkKF9jb250ZXh0NCkgewogICAgICAgICAgd2hpbGUgKDEpIHN3aXRjaCAoX2NvbnRleHQ0LnByZXYgPSBfY29udGV4dDQubmV4dCkgewogICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgX3dpcGVEYXRhID0gZnVuY3Rpb24gX3dpcGVEYXRhKCkgewogICAgICAgICAgICAgICAgX3RoaXM2LmFsb25nUm91dGVJbmZvRGF0YSA9IFtdOwogICAgICAgICAgICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2soX3RoaXM2LmFsb25nUm91dGVJbmZvRGF0YSk7CiAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICBfY29udGV4dDQucHJldiA9IDE7CiAgICAgICAgICAgICAgX2NvbnRleHQ0Lm5leHQgPSA0OwogICAgICAgICAgICAgIHJldHVybiBhbG9uZ1JvdXRlSW5mb0ludGVyKHJlZmluZVJlcXVlc3RCb2R5KHsKICAgICAgICAgICAgICAgIHF1ZXJ5czogW3sKICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uOiAnSU4nLAogICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogJ3JvYWRfc2VnbWVudF9pZF8nLAogICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUKICAgICAgICAgICAgICAgIH1dCiAgICAgICAgICAgICAgfSksICdhZGRFZGl0Jyk7CiAgICAgICAgICAgIGNhc2UgNDoKICAgICAgICAgICAgICBfeWllbGQkYWxvbmdSb3V0ZUluZm8gPSBfY29udGV4dDQuc2VudDsKICAgICAgICAgICAgICBfeWllbGQkYWxvbmdSb3V0ZUluZm8yID0gX3lpZWxkJGFsb25nUm91dGVJbmZvLnJvd3M7CiAgICAgICAgICAgICAgcm93cyA9IF95aWVsZCRhbG9uZ1JvdXRlSW5mbzIgPT09IHZvaWQgMCA/IFtdIDogX3lpZWxkJGFsb25nUm91dGVJbmZvMjsKICAgICAgICAgICAgICBjYWxsYmFjayAmJiBjYWxsYmFjayhyb3dzKTsKICAgICAgICAgICAgICBfdGhpczYuYWxvbmdSb3V0ZUluZm9EYXRhID0gcm93czsKICAgICAgICAgICAgICBfY29udGV4dDQubmV4dCA9IDE0OwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDExOgogICAgICAgICAgICAgIF9jb250ZXh0NC5wcmV2ID0gMTE7CiAgICAgICAgICAgICAgX2NvbnRleHQ0LnQwID0gX2NvbnRleHQ0WyJjYXRjaCJdKDEpOwogICAgICAgICAgICAgIC8vIOS4jeS4uuivt+axgui/h+W/q+e7k+adn+eahOaDheWGteS4i++8jOmHjee9rgogICAgICAgICAgICAgIGlmIChfY29udGV4dDQudDAubWVzc2FnZSAhPT0gJ2NhbmNlbGVkJykgX3dpcGVEYXRhKCk7CiAgICAgICAgICAgIGNhc2UgMTQ6CiAgICAgICAgICAgIGNhc2UgImVuZCI6CiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0NC5zdG9wKCk7CiAgICAgICAgICB9CiAgICAgICAgfSwgX2NhbGxlZTQsIG51bGwsIFtbMSwgMTFdXSk7CiAgICAgIH0pKSgpOwogICAgfSwKICAgIC8vIOaJk+W8gOmhtemdouaJp+ihjAogICAgb3BlblBhZ2U6IGZ1bmN0aW9uIG9wZW5QYWdlKCkge30sCiAgICAvLyDlhbPpl63pobXpnaLmiafooYwKICAgIGNsb3NlUGFnZTogZnVuY3Rpb24gY2xvc2VQYWdlKCkgewogICAgICB2YXIgX3RoaXM3ID0gdGhpczsKICAgICAgdmFyIGFkZEVkaXRSdWxlcyA9IHRoaXMuYWRkRWRpdFJ1bGVzLAogICAgICAgIHB1YlN1YiA9IHRoaXMucHViU3ViLAogICAgICAgIHRyZWVEYXRhID0gdGhpcy50cmVlRGF0YSwKICAgICAgICByb2FkRGF0YSA9IHRoaXMucm9hZERhdGE7CiAgICAgIHRoaXMucmVzZXRUcmVlKCk7CgogICAgICAvLyDph43nva7nu4Tku7bmlbDmja4KICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLiRkYXRhLCB0aGlzLiRvcHRpb25zLmRhdGEuY2FsbCh0aGlzKSwgewogICAgICAgIGFkZEVkaXRSdWxlczogYWRkRWRpdFJ1bGVzLAogICAgICAgIHB1YlN1YjogcHViU3ViLAogICAgICAgIHRyZWVEYXRhOiB0cmVlRGF0YSwKICAgICAgICByb2FkRGF0YTogcm9hZERhdGEKICAgICAgfSk7CiAgICAgIHRoaXMuJG5leHRUaWNrKGZ1bmN0aW9uIChfKSB7CiAgICAgICAgX3RoaXM3LiRyZWZzLmFkZEVkaXRGb3JtLiRlbC5zY3JvbGxUb3AgPSAwOwogICAgICAgIF90aGlzNy4kcmVmcy5hZGRFZGl0Rm9ybS5jbGVhclZhbGlkYXRlKCk7CiAgICAgIH0pOwogICAgfSwKICAgIC8vIOmAmui/h0pTT07lr7nosaHojrflj5blsZ7mgKflgLwKICAgIGdldFZhbEJ5SnNvbjogZnVuY3Rpb24gZ2V0VmFsQnlKc29uKGpzb24sIGtleSkgewogICAgICB2YXIgX0pTT04kcGFyc2U7CiAgICAgIHJldHVybiAoX0pTT04kcGFyc2UgPSBKU09OLnBhcnNlKGpzb24pKSA9PT0gbnVsbCB8fCBfSlNPTiRwYXJzZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX0pTT04kcGFyc2Vba2V5XTsKICAgIH0sCiAgICAvLyDot6/mrrXmlLnlj5jlkI7op6blj5EKICAgIHJvYWRDaGFuZ2U6IGZ1bmN0aW9uIHJvYWRDaGFuZ2UodmFsdWUpIHsKICAgICAgdmFyIF90aGlzOCA9IHRoaXM7CiAgICAgIHJldHVybiBfYXN5bmNUb0dlbmVyYXRvcigvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoZnVuY3Rpb24gX2NhbGxlZTUoKSB7CiAgICAgICAgdmFyIF9maW5kSW5kZXg7CiAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUoKS53cmFwKGZ1bmN0aW9uIF9jYWxsZWU1JChfY29udGV4dDUpIHsKICAgICAgICAgIHdoaWxlICgxKSBzd2l0Y2ggKF9jb250ZXh0NS5wcmV2ID0gX2NvbnRleHQ1Lm5leHQpIHsKICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICAvLyDmoLnmja5pZOafpeivouaVsOaNrue0ouW8lQogICAgICAgICAgICAgICAgX2ZpbmRJbmRleCA9IGZ1bmN0aW9uIF9maW5kSW5kZXgoKSB7CiAgICAgICAgICAgICAgICAgIHZhciBhcnIgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IFtdOwogICAgICAgICAgICAgICAgICB2YXIgaWQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDsKICAgICAgICAgICAgICAgICAgcmV0dXJuIGFyciA9PT0gbnVsbCB8fCBhcnIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGFyci5maW5kSW5kZXgoZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS5pZCA9PT0gaWQ7CiAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgfTsgLy8g5pu05paw5o6S5bqPCiAgICAgICAgICAgICAgICAvLyB2YWx1ZS5zb3J0KChhLCBiKSA9PiBfZmluZEluZGV4KHRoaXMucm9hZERhdGEsIGEpIC0gX2ZpbmRJbmRleCh0aGlzLnJvYWREYXRhLCBiKSkKICAgICAgICAgICAgICAgIC8vIOmAmui/h+i3r+auteS/oeaBr+iOt+WPluW3oeafpemYn+S8jeS/oeaBrwogICAgICAgICAgICAgICAgX3RoaXM4LmdldFRlYW1EYXRhKHZhbHVlKTsKCiAgICAgICAgICAgICAgICAvLyDpgJrov4fot6/mrrXkv6Hmga/ojrflj5bmsr/nur/orr7lpIfkv6Hmga8KICAgICAgICAgICAgICAgIF90aGlzOC5nZXRBbG9uZ1JvdXRlSW5mbyh2YWx1ZSwgZnVuY3Rpb24gKGRhdGEpIHsKICAgICAgICAgICAgICAgICAgdmFyIF90aGlzOCRhZGRFZGl0Rm9ybSA9IF90aGlzOC5hZGRFZGl0Rm9ybSwKICAgICAgICAgICAgICAgICAgICBzdGFydFBhdHJvbElkID0gX3RoaXM4JGFkZEVkaXRGb3JtLnN0YXJ0UGF0cm9sSWQsCiAgICAgICAgICAgICAgICAgICAgZW5kUGF0cm9sSWQgPSBfdGhpczgkYWRkRWRpdEZvcm0uZW5kUGF0cm9sSWQ7CgogICAgICAgICAgICAgICAgICAvKg0KICAgICAgICAgICAgICAgICAgKiDlt6Hmo4DlvIDlp4vvvIznu5PmnZ/nq5kNCiAgICAgICAgICAgICAgICAgICogKi8KICAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0UGF0cm9sSWQpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIWRhdGEuc29tZShmdW5jdGlvbiAoaSkgewogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkuaWQgPT09IHN0YXJ0UGF0cm9sSWQ7CiAgICAgICAgICAgICAgICAgICAgfSkpIHsKICAgICAgICAgICAgICAgICAgICAgIF90aGlzOC5hZGRFZGl0Rm9ybS5zdGFydFBhdHJvbElkID0gJyc7CiAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uIChfKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczguJG1lc3NhZ2Uud2FybmluZygn6K+36YeN5paw6YCJ5oup5beh5qOA5byA5aeL56uZLi4nKTsKICAgICAgICAgICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoZW5kUGF0cm9sSWQpIHsKICAgICAgICAgICAgICAgICAgICBpZiAoIWRhdGEuc29tZShmdW5jdGlvbiAoaSkgewogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGkuaWQgPT09IGVuZFBhdHJvbElkOwogICAgICAgICAgICAgICAgICAgIH0pKSB7CiAgICAgICAgICAgICAgICAgICAgICBfdGhpczguYWRkRWRpdEZvcm0uZW5kUGF0cm9sSWQgPSAnJzsKICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKF8pIHsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF90aGlzOC4kbWVzc2FnZS53YXJuaW5nKCfor7fph43mlrDpgInmi6nlt6Hmo4Dnu5PmnZ/nq5kuLicpOwogICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9KTsKCiAgICAgICAgICAgICAgICAvLyDpgJrov4fot6/mrrXkv6Hmga/ojrflj5blt6Hmo4DlhoXlrrnngrnkvY0KICAgICAgICAgICAgICAgIF90aGlzOC5nZXRJbnNwZWN0aW9uUG9pbnRzRGF0YSh2YWx1ZSwgZnVuY3Rpb24gKCkgewogICAgICAgICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID09PSAwKSByZXR1cm4gX3RoaXM4LmFkZEVkaXRGb3JtLnBsYW5EZXRhaWxzID0gW107CiAgICAgICAgICAgICAgICAgIHZhciBfdGhpczgkYWRkRWRpdEZvcm0kcGwgPSBfdGhpczguYWRkRWRpdEZvcm0ucGxhbkRldGFpbHMsCiAgICAgICAgICAgICAgICAgICAgcGxhbkRldGFpbHMgPSBfdGhpczgkYWRkRWRpdEZvcm0kcGwgPT09IHZvaWQgMCA/IFtdIDogX3RoaXM4JGFkZEVkaXRGb3JtJHBsOwoKICAgICAgICAgICAgICAgICAgLy8g6YG/5YWN5YiH5o2i6Lev5q615a+86Ie055qE54K55L2N5pWw5o2u5LiN5ZCI5rOVCiAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKF8pIHsKICAgICAgICAgICAgICAgICAgICB2YXIgX3RoaXM4JCRyZWZzJGFkZEVkaXRUOwogICAgICAgICAgICAgICAgICAgIF90aGlzOC5pbml0aWFsaXplVHJlZShwbGFuRGV0YWlscyk7CiAgICAgICAgICAgICAgICAgICAgdmFyIGNoZWNrTm9kZSA9ICgoX3RoaXM4JCRyZWZzJGFkZEVkaXRUID0gX3RoaXM4LiRyZWZzLmFkZEVkaXRUcmVlKSA9PT0gbnVsbCB8fCBfdGhpczgkJHJlZnMkYWRkRWRpdFQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzOCQkcmVmcyRhZGRFZGl0VC5nZXRDaGVja2VkTm9kZXMoKSkgfHwgW107CiAgICAgICAgICAgICAgICAgICAgX3RoaXM4LmFkZEVkaXRGb3JtLnBsYW5EZXRhaWxzID0gcGxhbkRldGFpbHMuZmlsdGVyKGZ1bmN0aW9uIChwYXRyb2xJZCkgewogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNoZWNrTm9kZS5maW5kKGZ1bmN0aW9uIChpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpLmNvZGUgPT09IHBhdHJvbElkOwogICAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgIH0sIDApOwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgICAgIF90aGlzOC5mb3JtTG9hZGluZyA9IGZhbHNlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICBjYXNlICJlbmQiOgogICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDUuc3RvcCgpOwogICAgICAgICAgfQogICAgICAgIH0sIF9jYWxsZWU1KTsKICAgICAgfSkpKCk7CiAgICB9LAogICAgLy8g6YCa6L+H6Lev5q615L+h5oGv6I635Y+W5beh5p+l6Zif5LyN5L+h5oGvCiAgICBnZXRUZWFtRGF0YTogZnVuY3Rpb24gZ2V0VGVhbURhdGEodmFsdWUpIHsKICAgICAgdmFyIF90aGlzOSA9IHRoaXM7CiAgICAgIHJldHVybiBfYXN5bmNUb0dlbmVyYXRvcigvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoZnVuY3Rpb24gX2NhbGxlZTYoKSB7CiAgICAgICAgdmFyIF95aWVsZCR0ZWFtRGF0YSwgX3lpZWxkJHRlYW1EYXRhJHJvd3MsIHJvd3M7CiAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUoKS53cmFwKGZ1bmN0aW9uIF9jYWxsZWU2JChfY29udGV4dDYpIHsKICAgICAgICAgIHdoaWxlICgxKSBzd2l0Y2ggKF9jb250ZXh0Ni5wcmV2ID0gX2NvbnRleHQ2Lm5leHQpIHsKICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgIF9jb250ZXh0Ni5uZXh0ID0gMjsKICAgICAgICAgICAgICByZXR1cm4gdGVhbURhdGEocmVmaW5lUmVxdWVzdEJvZHkoewogICAgICAgICAgICAgICAgcXVlcnlzOiBbewogICAgICAgICAgICAgICAgICBvcGVyYXRpb246ICdJTicsCiAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiAnci5pZF8nLAogICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uOiAnRVFVQUwnLAogICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogJ3QudHlwZV8nLAogICAgICAgICAgICAgICAgICB2YWx1ZTogJzEnCiAgICAgICAgICAgICAgICB9XQogICAgICAgICAgICAgIH0pLCAnYWRkRWRpdCcpOwogICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgX3lpZWxkJHRlYW1EYXRhID0gX2NvbnRleHQ2LnNlbnQ7CiAgICAgICAgICAgICAgX3lpZWxkJHRlYW1EYXRhJHJvd3MgPSBfeWllbGQkdGVhbURhdGEucm93czsKICAgICAgICAgICAgICByb3dzID0gX3lpZWxkJHRlYW1EYXRhJHJvd3MgPT09IHZvaWQgMCA/IFtdIDogX3lpZWxkJHRlYW1EYXRhJHJvd3M7CiAgICAgICAgICAgICAgX3RoaXM5LnRyZWVEYXRhID0gcm93czsKICAgICAgICAgICAgY2FzZSA2OgogICAgICAgICAgICBjYXNlICJlbmQiOgogICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDYuc3RvcCgpOwogICAgICAgICAgfQogICAgICAgIH0sIF9jYWxsZWU2KTsKICAgICAgfSkpKCk7CiAgICB9LAogICAgLy8g5qCR6IqC54K56YCJ5LitCiAgICBjaGVja0NoYW5nZTogZnVuY3Rpb24gY2hlY2tDaGFuZ2UoKSB7CiAgICAgIHZhciBfdGhpcyQkcmVmcyRhZGRFZGl0VHIyOwogICAgICB0aGlzLmFkZEVkaXRGb3JtLnBsYW5EZXRhaWxzID0gKChfdGhpcyQkcmVmcyRhZGRFZGl0VHIyID0gdGhpcy4kcmVmcy5hZGRFZGl0VHJlZSkgPT09IG51bGwgfHwgX3RoaXMkJHJlZnMkYWRkRWRpdFRyMiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX3RoaXMkJHJlZnMkYWRkRWRpdFRyMi5nZXRDaGVja2VkS2V5cygpKSB8fCBbXTsKICAgIH0sCiAgICAvLyDmuIXnqbrmoJHpgInkuK0KICAgIGNsZWFyVHJlZVNlbGVjdDogZnVuY3Rpb24gY2xlYXJUcmVlU2VsZWN0KCkgewogICAgICB0aGlzLiRyZWZzLmFkZEVkaXRUcmVlLnNldENoZWNrZWRLZXlzKFtdKTsKICAgICAgdGhpcy5hZGRFZGl0Rm9ybS5wbGFuRGV0YWlscyA9IFtdOwogICAgfSwKICAgIC8vIOmHjee9ruagkeeKtuaAgQogICAgcmVzZXRUcmVlOiBmdW5jdGlvbiByZXNldFRyZWUoKSB7CiAgICAgIHRoaXMuY2xlYXJUcmVlU2VsZWN0KCk7CiAgICAgIHRoaXMuY29sbGFwc2VBbGxOb2RlcyhmYWxzZSk7CiAgICB9LAogICAgLy8g5pS26LW35oiW5bGV5byA5qCR5omA5pyJ5bGC57qnCiAgICBjb2xsYXBzZUFsbE5vZGVzOiBmdW5jdGlvbiBjb2xsYXBzZUFsbE5vZGVzKCkgewogICAgICB2YXIgc3RhdGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IHRydWU7CiAgICAgIHZhciBub2RlcyA9IHRoaXMuJHJlZnMuYWRkRWRpdFRyZWUuc3RvcmUuX2dldEFsbE5vZGVzKCk7CiAgICAgIG5vZGVzLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgICByZXR1cm4gaXRlbS5leHBhbmRlZCA9IHN0YXRlOwogICAgICB9KTsKICAgIH0sCiAgICAvLyDlsZXlvIDli77pgInlsYLnuqfngrnkvY0KICAgIGluaXRpYWxpemVUcmVlOiBmdW5jdGlvbiBpbml0aWFsaXplVHJlZSgpIHsKICAgICAgdmFyIHNlbGVjdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogW107CiAgICAgIGlmICghKEFycmF5LmlzQXJyYXkoc2VsZWN0KSAmJiBzZWxlY3QubGVuZ3RoKSkgcmV0dXJuOwogICAgICB2YXIgdHJlZSA9IHRoaXMuJHJlZnMuYWRkRWRpdFRyZWU7CiAgICAgIC8vIOiuvue9ruWLvumAieeahOiKgueCuQogICAgICB0cmVlLnNldENoZWNrZWRLZXlzKHNlbGVjdCk7CgogICAgICAvLyDojrflj5bmiYDmnInli77pgInnmoToioLngrnlubblsZXlvIDlhbbniLboioLngrkKICAgICAgc2VsZWN0LmZvckVhY2goZnVuY3Rpb24gKGtleSkgewogICAgICAgIHZhciBub2RlID0gdHJlZSA9PT0gbnVsbCB8fCB0cmVlID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0cmVlLmdldE5vZGUoa2V5KTsKICAgICAgICBpZiAobm9kZSkgewogICAgICAgICAgdmFyIHBhcmVudCA9IG5vZGUucGFyZW50OwogICAgICAgICAgd2hpbGUgKHBhcmVudCkgewogICAgICAgICAgICBwYXJlbnQuZXhwYW5kKCk7CiAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQ7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9KTsKICAgIH0sCiAgICAvLyDku7vliqHnsbvlnovliIfmjaIKICAgIGZyZXF1ZW5jeUNoYW5nZTogZnVuY3Rpb24gZnJlcXVlbmN5Q2hhbmdlKCkgewogICAgICB2YXIgX3RoaXMxMCA9IHRoaXM7CiAgICAgIHRoaXMuYWRkRWRpdEZvcm0ucGxhbkludGVydmFsID0gJyc7CiAgICAgIHRoaXMuYWRkRWRpdEZvcm0udGltZSA9IFtdOwogICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoXykgewogICAgICAgIF90aGlzMTAuJHJlZnMuYWRkRWRpdEZvcm0uY2xlYXJWYWxpZGF0ZShbJ3BsYW5JbnRlcnZhbCcsICd0aW1lJywgJ3Rhc2tUeXBlJ10pOwogICAgICB9KTsKICAgIH0sCiAgICAvLyDkv53lrZgKICAgIGhhbmRsZVNhdmU6IGZ1bmN0aW9uIGhhbmRsZVNhdmUoKSB7CiAgICAgIHZhciBfdGhpczExID0gdGhpczsKICAgICAgLy8g6I635Y+W5omA5pyJ5YiG57uE55qE6YCJ5Lit6IqC54K5CiAgICAgIC8vIGxldCBhbGxDaGVja2VkTm9kZXMgPSBbXQogICAgICAvLyBsZXQgZ3JvdXBlZERldGFpbHMgPSBbXQogICAgICAvLwogICAgICAvLyAvLyDlpoLmnpzmmK/lpJrlpKnlt6Hmo4DpopHnjofvvIjmr4/kuKTlpKnjgIHmr4/lkajjgIHmr4/mnIjnrYnvvIkKICAgICAgLy8gaWYgKFsnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnXS5pbmNsdWRlcyh0aGlzLmFkZEVkaXRGb3JtLmZyZXF1ZW5jeSkpIHsKICAgICAgLy8gICAvLyDpgY3ljobliIbnu4TmlbDmja7vvIzkuLrmr4/kuKrliIbnu4Tmt7vliqBwYXRyb2xCYXRjaAogICAgICAvLyAgIHRoaXMuZ3JvdXBlZEluc3BlY3Rpb25Qb2ludHMuZm9yRWFjaCgoZ3JvdXAsIGluZGV4KSA9PiB7CiAgICAgIC8vICAgICBncm91cC5mb3JFYWNoKHBhdHJvbElkID0+IHsKICAgICAgLy8gICAgICAgZ3JvdXBlZERldGFpbHMucHVzaCh7CiAgICAgIC8vICAgICAgICAgcGF0cm9sSWQsCiAgICAgIC8vICAgICAgICAgcGF0cm9sQmF0Y2g6IGluZGV4ICsgMSAvLyDmibnmrKHku44x5byA5aeLCiAgICAgIC8vICAgICAgIH0pCiAgICAgIC8vICAgICB9KQogICAgICAvLyAgIH0pCiAgICAgIC8vICAgYWxsQ2hlY2tlZE5vZGVzID0gZ3JvdXBlZERldGFpbHMubWFwKGl0ZW0gPT4gaXRlbS5wYXRyb2xJZCkKICAgICAgLy8gfSBlbHNlIHsKICAgICAgLy8gICAvLyDljZXlpKnpopHnjofvvIzmibnmrKHkuLoxCiAgICAgIC8vICAgY29uc3QgY2hlY2tlZEtleXMgPSB0aGlzLiRyZWZzLmFkZEVkaXRUcmVlPy5nZXRDaGVja2VkS2V5cygpIHx8IFtdCiAgICAgIC8vICAgZ3JvdXBlZERldGFpbHMgPSBjaGVja2VkS2V5cy5tYXAocGF0cm9sSWQgPT4gKHsKICAgICAgLy8gICAgIHBhdHJvbElkLAogICAgICAvLyAgICAgcGF0cm9sQmF0Y2g6IDEKICAgICAgLy8gICB9KSkKICAgICAgLy8gICBhbGxDaGVja2VkTm9kZXMgPSBjaGVja2VkS2V5cwogICAgICAvLyB9CiAgICAgIC8vIC8vIOWmguaenOaYr+avj+WRqOaIluavj+aciO+8jOmcgOimgeWQiOW5tuaJgOacieWIhue7hOeahOmAieS4reiKgueCuQogICAgICAvLyAvLyBpZiAoWycyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNyddLmluY2x1ZGVzKHRoaXMuYWRkRWRpdEZvcm0uZnJlcXVlbmN5KSkgewogICAgICAvLyAvLyAgIGFsbENoZWNrZWROb2RlcyA9IHRoaXMuZ3JvdXBlZEluc3BlY3Rpb25Qb2ludHMuZmxhdCgpCiAgICAgIC8vIC8vIH0gZWxzZSB7CiAgICAgIC8vIC8vICAgYWxsQ2hlY2tlZE5vZGVzID0gdGhpcy4kcmVmcy5hZGRFZGl0VHJlZT8uZ2V0Q2hlY2tlZEtleXMoKSB8fCBbXQogICAgICAvLyAvLyB9CiAgICAgIC8vIC8vIOiOt+WPluaJgOacieWIhue7hOeahOmAieS4reiKgueCuQogICAgICAvLyAvLyBjb25zdCBhbGxDaGVja2VkTm9kZSA9IHRoaXMuZ3JvdXBlZEluc3BlY3Rpb25Qb2ludHMuZmxhdCgpIHx8IHRoaXMuJHJlZnMuYWRkRWRpdFRyZWU/LmdldENoZWNrZWRLZXlzKCkgfHwgW10KICAgICAgLy8KICAgICAgLy8gLy8g5Zyo6aqM6K+B5YmN5pu05pawcGxhbkRldGFpbHMKICAgICAgLy8gdGhpcy5hZGRFZGl0Rm9ybS5wbGFuRGV0YWlscyA9IGFsbENoZWNrZWROb2RlcwogICAgICB0aGlzLiRyZWZzLmFkZEVkaXRGb3JtLnZhbGlkYXRlKC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoKSB7CiAgICAgICAgdmFyIF9yZWYgPSBfYXN5bmNUb0dlbmVyYXRvcigvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoZnVuY3Rpb24gX2NhbGxlZTcodmFsaWQsIG9iamVjdCkgewogICAgICAgICAgdmFyIF90aGlzMTEkYWRkRWRpdEZvcm0sIF90aGlzMTEkYWRkRWRpdEZvcm0kcywgc3RhcnRQYXRyb2xJZCwgX3RoaXMxMSRhZGRFZGl0Rm9ybSRlLCBlbmRQYXRyb2xJZCwgX3RoaXMxMSRhZGRFZGl0Rm9ybSRyLCByb2FkSWQsIF90aGlzMTEkYWRkRWRpdEZvcm0kczIsIHN0YXJ0UGF0cm9sTmFtZSwgX3RoaXMxMSRhZGRFZGl0Rm9ybSRlMiwgZW5kUGF0cm9sTmFtZSwgX3RoaXMxMSRhZGRFZGl0Rm9ybSRwLCBwbGFuRGV0YWlscywgX3RoaXMxMSRhZGRFZGl0Rm9ybSRwMiwgX3RoaXMxMSRhZGRFZGl0Rm9ybSRwMywgX3RoaXMxMSRhZGRFZGl0Rm9ybSRwNCwgX3RoaXMxMSRhZGRFZGl0Rm9ybSRwNSwgcGxhblN0YXJ0RGF0ZSwgX3RoaXMxMSRhZGRFZGl0Rm9ybSRwNiwgcGxhbkVuZERhdGUsIF90aGlzMTEkYWRkRWRpdEZvcm0kdCwgdGltZSwgX3RoaXMxMSRhZGRFZGl0Rm9ybSRwNywgcGxhbkludGVydmFsLCBhZGRFZGl0Rm9ybSwgcm9hZERhdGEsIGFsb25nUm91dGVJbmZvRGF0YSwgZW5kUGxhbkRldGFpbHMsIF95aWVsZCR0YWJsZUFkZEVkaXQsIHN0YXRlLCBtZXNzYWdlOwogICAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUoKS53cmFwKGZ1bmN0aW9uIF9jYWxsZWU3JChfY29udGV4dDcpIHsKICAgICAgICAgICAgd2hpbGUgKDEpIHN3aXRjaCAoX2NvbnRleHQ3LnByZXYgPSBfY29udGV4dDcubmV4dCkgewogICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgIGlmICh2YWxpZCkgewogICAgICAgICAgICAgICAgICBfY29udGV4dDcubmV4dCA9IDQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgX3RoaXMxMS4kbWVzc2FnZS53YXJuaW5nKCJcdTY3MDkiLmNvbmNhdChPYmplY3Qua2V5cyhvYmplY3QpLmxlbmd0aCwgIlx1NEUyQVx1NUI1N1x1NkJCNVx1NjcyQVx1OTAxQVx1OEZDN1x1NjgyMVx1OUE4Q1x1RkYwQ1x1OEJGN1x1NkI2M1x1Nzg2RVx1NTg2Qlx1NTE5OVx1ODg2OFx1NTM1NVx1NTE4NVx1NUJCOVx1MzAwMiIpKTsKICAgICAgICAgICAgICAgIF9jb250ZXh0Ny5uZXh0ID0gMjE7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgICAgICBfdGhpczExLnNhdmVMb2FkaW5nID0gdHJ1ZTsKICAgICAgICAgICAgICAgIF90aGlzMTEkYWRkRWRpdEZvcm0gPSBfdGhpczExLmFkZEVkaXRGb3JtLCBfdGhpczExJGFkZEVkaXRGb3JtJHMgPSBfdGhpczExJGFkZEVkaXRGb3JtLnN0YXJ0UGF0cm9sSWQsIHN0YXJ0UGF0cm9sSWQgPSBfdGhpczExJGFkZEVkaXRGb3JtJHMgPT09IHZvaWQgMCA/ICcnIDogX3RoaXMxMSRhZGRFZGl0Rm9ybSRzLCBfdGhpczExJGFkZEVkaXRGb3JtJGUgPSBfdGhpczExJGFkZEVkaXRGb3JtLmVuZFBhdHJvbElkLCBlbmRQYXRyb2xJZCA9IF90aGlzMTEkYWRkRWRpdEZvcm0kZSA9PT0gdm9pZCAwID8gJycgOiBfdGhpczExJGFkZEVkaXRGb3JtJGUsIF90aGlzMTEkYWRkRWRpdEZvcm0kciA9IF90aGlzMTEkYWRkRWRpdEZvcm0ucm9hZElkLCByb2FkSWQgPSBfdGhpczExJGFkZEVkaXRGb3JtJHIgPT09IHZvaWQgMCA/ICcnIDogX3RoaXMxMSRhZGRFZGl0Rm9ybSRyLCBfdGhpczExJGFkZEVkaXRGb3JtJHMyID0gX3RoaXMxMSRhZGRFZGl0Rm9ybS5zdGFydFBhdHJvbE5hbWUsIHN0YXJ0UGF0cm9sTmFtZSA9IF90aGlzMTEkYWRkRWRpdEZvcm0kczIgPT09IHZvaWQgMCA/ICcnIDogX3RoaXMxMSRhZGRFZGl0Rm9ybSRzMiwgX3RoaXMxMSRhZGRFZGl0Rm9ybSRlMiA9IF90aGlzMTEkYWRkRWRpdEZvcm0uZW5kUGF0cm9sTmFtZSwgZW5kUGF0cm9sTmFtZSA9IF90aGlzMTEkYWRkRWRpdEZvcm0kZTIgPT09IHZvaWQgMCA/ICcnIDogX3RoaXMxMSRhZGRFZGl0Rm9ybSRlMiwgX3RoaXMxMSRhZGRFZGl0Rm9ybSRwID0gX3RoaXMxMSRhZGRFZGl0Rm9ybS5wbGFuRGV0YWlscywgcGxhbkRldGFpbHMgPSBfdGhpczExJGFkZEVkaXRGb3JtJHAgPT09IHZvaWQgMCA/IFtdIDogX3RoaXMxMSRhZGRFZGl0Rm9ybSRwLCBfdGhpczExJGFkZEVkaXRGb3JtJHAyID0gX3RoaXMxMSRhZGRFZGl0Rm9ybS5wbGFuU3RhcnRFbmREYXRlLCBfdGhpczExJGFkZEVkaXRGb3JtJHAzID0gX3RoaXMxMSRhZGRFZGl0Rm9ybSRwMiA9PT0gdm9pZCAwID8gW10gOiBfdGhpczExJGFkZEVkaXRGb3JtJHAyLCBfdGhpczExJGFkZEVkaXRGb3JtJHA0ID0gX3NsaWNlZFRvQXJyYXkoX3RoaXMxMSRhZGRFZGl0Rm9ybSRwMywgMiksIF90aGlzMTEkYWRkRWRpdEZvcm0kcDUgPSBfdGhpczExJGFkZEVkaXRGb3JtJHA0WzBdLCBwbGFuU3RhcnREYXRlID0gX3RoaXMxMSRhZGRFZGl0Rm9ybSRwNSA9PT0gdm9pZCAwID8gJycgOiBfdGhpczExJGFkZEVkaXRGb3JtJHA1LCBfdGhpczExJGFkZEVkaXRGb3JtJHA2ID0gX3RoaXMxMSRhZGRFZGl0Rm9ybSRwNFsxXSwgcGxhbkVuZERhdGUgPSBfdGhpczExJGFkZEVkaXRGb3JtJHA2ID09PSB2b2lkIDAgPyAnJyA6IF90aGlzMTEkYWRkRWRpdEZvcm0kcDYsIF90aGlzMTEkYWRkRWRpdEZvcm0kdCA9IF90aGlzMTEkYWRkRWRpdEZvcm0udGltZSwgdGltZSA9IF90aGlzMTEkYWRkRWRpdEZvcm0kdCA9PT0gdm9pZCAwID8gW10gOiBfdGhpczExJGFkZEVkaXRGb3JtJHQsIF90aGlzMTEkYWRkRWRpdEZvcm0kcDcgPSBfdGhpczExJGFkZEVkaXRGb3JtLnBsYW5JbnRlcnZhbCwgcGxhbkludGVydmFsID0gX3RoaXMxMSRhZGRFZGl0Rm9ybSRwNyA9PT0gdm9pZCAwID8gJycgOiBfdGhpczExJGFkZEVkaXRGb3JtJHA3LCBhZGRFZGl0Rm9ybSA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfdGhpczExJGFkZEVkaXRGb3JtLCBfZXhjbHVkZWQyKTsgLy8g57uT5p6E5Ye66Lev5q615Y+K5rK/6Lev6K6+5pa95pWw5o2uCiAgICAgICAgICAgICAgICByb2FkRGF0YSA9IF90aGlzMTEucm9hZERhdGEsIGFsb25nUm91dGVJbmZvRGF0YSA9IF90aGlzMTEuYWxvbmdSb3V0ZUluZm9EYXRhOwogICAgICAgICAgICAgICAgLyoNCiAgICAgICAgICAgICAgICAqIOWkhOeQhuaVsOaNrg0KICAgICAgICAgICAgICAgICogZGljdGlvbmFyeUVzY2FwZeS4uui9rOS5ieWHveaVsA0KICAgICAgICAgICAgICAgICogKi8KICAgICAgICAgICAgICAgIGVuZFBsYW5EZXRhaWxzID0gW107CiAgICAgICAgICAgICAgICBwbGFuRGV0YWlscy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgICAgICAgICAgICAgIGVuZFBsYW5EZXRhaWxzLnB1c2goX3RoaXMxMS5maW5kSW5MZXZlbDNDaGlsZHJlbihfdGhpczExLmluc3BlY3Rpb25Qb2ludHNEYXRhLCBpdGVtKSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIGVuZFBsYW5EZXRhaWxzID0gZW5kUGxhbkRldGFpbHMubWFwKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgICAgICAgICAgICAgIHJldHVybiBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGl0ZW0pLCB7fSwgewogICAgICAgICAgICAgICAgICAgIHBhdHJvbElkOiBpdGVtLmNvZGUKICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVuZFBsYW5EZXRhaWxzLCAnZW5kUGxhbkRldGFpbHMnKTsKICAgICAgICAgICAgICAgIF9jb250ZXh0Ny5wcmV2ID0gMTE7CiAgICAgICAgICAgICAgICBfY29udGV4dDcubmV4dCA9IDE0OwogICAgICAgICAgICAgICAgcmV0dXJuIHRhYmxlQWRkRWRpdChfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIGFkZEVkaXRGb3JtKSwge30sIHsKICAgICAgICAgICAgICAgICAgc3RhcnRQYXRyb2xJZDogc3RhcnRQYXRyb2xJZCwKICAgICAgICAgICAgICAgICAgZW5kUGF0cm9sSWQ6IGVuZFBhdHJvbElkLAogICAgICAgICAgICAgICAgICByb2FkSWQ6IHJvYWRJZCwKICAgICAgICAgICAgICAgICAgLy8gcm9hZE5hbWU6IHJvYWRJbmZvLm5hbWUsCiAgICAgICAgICAgICAgICAgIC8vIHJvYWRDb2RlOiByb2FkSW5mby5jb2RlLAogICAgICAgICAgICAgICAgICBzdGFydFBhdHJvbE5hbWU6IGRpY3Rpb25hcnlFc2NhcGUoYWxvbmdSb3V0ZUluZm9EYXRhLCBzdGFydFBhdHJvbElkLCB7CiAgICAgICAgICAgICAgICAgICAgdmFsdWVLZXk6ICdpZCcKICAgICAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgICAgIGVuZFBhdHJvbE5hbWU6IGRpY3Rpb25hcnlFc2NhcGUoYWxvbmdSb3V0ZUluZm9EYXRhLCBlbmRQYXRyb2xJZCwgewogICAgICAgICAgICAgICAgICAgIHZhbHVlS2V5OiAnaWQnCiAgICAgICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgICAgICAvLyB0ZWFtRnVsbElkLAogICAgICAgICAgICAgICAgICAvLyB0ZWFtTmFtZSwKICAgICAgICAgICAgICAgICAgLy8gcGxhbkRldGFpbHM6IHBsYW5EZXRhaWxzLm1hcChwYXRyb2xJZCA9PiAoe3BhdHJvbElkfSkpLAogICAgICAgICAgICAgICAgICBwbGFuRGV0YWlsczogZW5kUGxhbkRldGFpbHMsCiAgICAgICAgICAgICAgICAgIHBsYW5TdGFydERhdGU6IHBsYW5TdGFydERhdGUsCiAgICAgICAgICAgICAgICAgIHBsYW5FbmREYXRlOiBwbGFuRW5kRGF0ZSwKICAgICAgICAgICAgICAgICAgcGxhbkludGVydmFsOiB0aW1lLmxlbmd0aCA/ICIiLmNvbmNhdCh0aW1lLCAifCIpLmNvbmNhdChwbGFuSW50ZXJ2YWwpIDogcGxhbkludGVydmFsCiAgICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgICAgY2FzZSAxNDoKICAgICAgICAgICAgICAgIF95aWVsZCR0YWJsZUFkZEVkaXQgPSBfY29udGV4dDcuc2VudDsKICAgICAgICAgICAgICAgIHN0YXRlID0gX3lpZWxkJHRhYmxlQWRkRWRpdC5zdGF0ZTsKICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBfeWllbGQkdGFibGVBZGRFZGl0Lm1lc3NhZ2U7CiAgICAgICAgICAgICAgICBpZiAoc3RhdGUpIHsKICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IF90aGlzMTEuaWQgPyAn57yW6L6RJyA6ICfmlrDlop4nOwogICAgICAgICAgICAgICAgICBfdGhpczExLiRtZXNzYWdlLnN1Y2Nlc3MoIlx1NURFMVx1NjhDMFx1OEJBMVx1NTIxMiIuY29uY2F0KG1lc3NhZ2UsICJcdTYyMTBcdTUyOUYiKSk7CiAgICAgICAgICAgICAgICAgIF90aGlzMTEuY2hhbmdlUGFnZSgnVGFibGVQYWdlJywgX3RoaXMxMS5pZCA/ICdlZGl0JyA6ICdhZGQnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBjYXNlIDE4OgogICAgICAgICAgICAgICAgX2NvbnRleHQ3LnByZXYgPSAxODsKICAgICAgICAgICAgICAgIF90aGlzMTEuc2F2ZUxvYWRpbmcgPSBmYWxzZTsKICAgICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDcuZmluaXNoKDE4KTsKICAgICAgICAgICAgICBjYXNlIDIxOgogICAgICAgICAgICAgIGNhc2UgImVuZCI6CiAgICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ3LnN0b3AoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwgX2NhbGxlZTcsIG51bGwsIFtbMTEsLCAxOCwgMjFdXSk7CiAgICAgICAgfSkpOwogICAgICAgIHJldHVybiBmdW5jdGlvbiAoX3gsIF94MikgewogICAgICAgICAgcmV0dXJuIF9yZWYuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICAgICAgICB9OwogICAgICB9KCkpOwogICAgfSwKICAgIGZpbmRJbkxldmVsM0NoaWxkcmVuOiBmdW5jdGlvbiBmaW5kSW5MZXZlbDNDaGlsZHJlbihhcnJheSwgdGFyZ2V0Q29kZSkgewogICAgICB2YXIgX2l0ZXJhdG9yID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIoYXJyYXkpLAogICAgICAgIF9zdGVwOwogICAgICB0cnkgewogICAgICAgIGZvciAoX2l0ZXJhdG9yLnMoKTsgIShfc3RlcCA9IF9pdGVyYXRvci5uKCkpLmRvbmU7KSB7CiAgICAgICAgICB2YXIgaXRlbSA9IF9zdGVwLnZhbHVlOwogICAgICAgICAgLy8g5aaC5p6c5b2T5YmN5a+56LGh5pivIGxldmVsPTMg5LiU5pyJIGNoaWxkcmVu77yM5ZyoIGNoaWxkcmVuIOS4reafpeaJvgogICAgICAgICAgaWYgKGl0ZW0ubGV2ZWwgPT09ICczJyAmJiBpdGVtLmNoaWxkcmVuKSB7CiAgICAgICAgICAgIHZhciBmb3VuZCA9IGl0ZW0uY2hpbGRyZW4uZmluZChmdW5jdGlvbiAoY2hpbGQpIHsKICAgICAgICAgICAgICByZXR1cm4gY2hpbGQuY29kZSA9PT0gdGFyZ2V0Q29kZTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGlmIChmb3VuZCkgcmV0dXJuIGZvdW5kOwogICAgICAgICAgfQoKICAgICAgICAgIC8vIOe7p+e7remAkuW9kuaQnOe0ouWtkOe6pwogICAgICAgICAgaWYgKGl0ZW0uY2hpbGRyZW4gJiYgaXRlbS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0aGlzLmZpbmRJbkxldmVsM0NoaWxkcmVuKGl0ZW0uY2hpbGRyZW4sIHRhcmdldENvZGUpOwogICAgICAgICAgICBpZiAocmVzdWx0KSByZXR1cm4gcmVzdWx0OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgX2l0ZXJhdG9yLmUoZXJyKTsKICAgICAgfSBmaW5hbGx5IHsKICAgICAgICBfaXRlcmF0b3IuZigpOwogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfSwKICAgIC8vIOWxleekuuW8ueWxggogICAgc2hvd0RpYWxvZzogZnVuY3Rpb24gc2hvd0RpYWxvZyhkaWFsb2dOYW1lKSB7CiAgICAgIGlmICghZGlhbG9nTmFtZSkgcmV0dXJuOwogICAgICB0aGlzW2RpYWxvZ05hbWUgKyAnRGlhbG9nJ10gPSB0cnVlOwogICAgfSwKICAgIC8vIOaUueWPmOmhtemdogogICAgY2hhbmdlUGFnZTogZnVuY3Rpb24gY2hhbmdlUGFnZSgpIHsKICAgICAgdmFyIHBhZ2VOYW1lID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiAnJzsKICAgICAgdmFyIHR5cGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICcnOwogICAgICBpZiAoIXBhZ2VOYW1lKSByZXR1cm47CiAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZVBhZ2UnLCBwYWdlTmFtZSwgZnVuY3Rpb24gKF8pIHsKICAgICAgICBQdWJTdWIucHVibGlzaChwYWdlTmFtZSwgewogICAgICAgICAgdHlwZTogdHlwZQogICAgICAgIH0pOwogICAgICB9KTsKICAgIH0sCiAgICBtb21lbnQ6IG1vbWVudCwKICAgIGdldERpY3Rpb25hcnlCeUNvZGU6IGdldERpY3Rpb25hcnlCeUNvZGUKICB9LAogIGJlZm9yZURlc3Ryb3k6IGZ1bmN0aW9uIGJlZm9yZURlc3Ryb3koKSB7CiAgICAvLyDlnKjnu4Tku7bplIDmr4HkuYvliY0g5riF6Zmk6K6i6ZiF5raI5oGvCiAgICBQdWJTdWIudW5zdWJzY3JpYmUodGhpcy5wdWJTdWIpOwogIH0KfTs="},null]}