{"remainingRequest":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\thread-loader\\dist\\cjs.js!D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\babel-loader\\lib\\index.js!D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\eslint-loader\\index.js??ref--13-0!D:\\jenkins\\workspace\\dataShare-fvue\\src\\formulas.js","dependencies":[{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\src\\formulas.js","mtime":1733309212407},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\babel.config.js","mtime":1733906004399},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\@vue\\cli-plugin-babel\\node_modules\\thread-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\babel-loader\\lib\\index.js","mtime":456789000000},{"path":"D:\\jenkins\\workspace\\dataShare-fvue\\node_modules\\eslint-loader\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:aW1wb3J0IF90eXBlb2YgZnJvbSAiRDovamVua2lucy93b3Jrc3BhY2UvZGF0YVNoYXJlLWZ2dWUvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3R5cGVvZi5qcyI7CmltcG9ydCBfdG9Db25zdW1hYmxlQXJyYXkgZnJvbSAiRDovamVua2lucy93b3Jrc3BhY2UvZGF0YVNoYXJlLWZ2dWUvbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvQ29uc3VtYWJsZUFycmF5LmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkubWFwLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkucHVzaC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnNvcnQuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5pdGVyYXRvci5jb25zdHJ1Y3Rvci5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLml0ZXJhdG9yLmZvci1lYWNoLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuaXRlcmF0b3IubWFwLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMubnVtYmVyLmNvbnN0cnVjdG9yLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMubnVtYmVyLnRvLWZpeGVkLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LnRvLXN0cmluZy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5leGVjLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLnRvLXN0cmluZy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5yZXBsYWNlLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnNwbGl0LmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnN0YXJ0cy13aXRoLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnRyaW0uanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy93ZWIuZG9tLWNvbGxlY3Rpb25zLmZvci1lYWNoLmpzIjsKaW1wb3J0IHsgRm9ybSwgTm90aWZpY2F0aW9uIH0gZnJvbSAnZWxlbWVudC11aSc7CmltcG9ydCB1dGlscyBmcm9tICJAL3V0aWxzLmpzIjsKdmFyIEZvcm11bGFzID0gewogIGQxOTAwOiBuZXcgRGF0ZShEYXRlLlVUQygxOTAwLCAwLCAxKSksCiAgV0VFS19TVEFSVFM6IFt1bmRlZmluZWQsIDAsIDEsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIDEsIDIsIDMsIDQsIDUsIDYsIDBdLAogIC8qKg0KICAqIOWGgOS4reiDvea6kOS4muWKoeW8gOWPkeeahOiuoeeul+WFrOW8jw0KICAgKi8KICAvL+agueaNruS8oOWFpeeahOW5tOaciOW+l+WIsOS4iuaciOeahOaciOS7vQogIExhc3RNb250aDogZnVuY3Rpb24gTGFzdE1vbnRoKHksIG0pIHsKICAgIG0gPSBwYXJzZUludChtKTsKICAgIHkgPSBwYXJzZUludCh5KTsKICAgIGlmIChtID4gMCAmJiBtIDwgMTMgJiYgeSA+IDApIHsKICAgICAgaWYgKG0gPT09IDEpIHsKICAgICAgICByZXR1cm4gMTI7CiAgICAgIH0KICAgICAgdmFyIHYgPSBtIC0gMTsKICAgICAgaWYgKHYgPCAxMCkgewogICAgICAgIHYgPSAiMCIgKyB2OwogICAgICB9CiAgICAgIHJldHVybiB2OwogICAgfQogIH0sCiAgLy/moLnmja7kvKDlhaXnmoTlubTmnIjlvpfliLDkuIrkuKrmnIjnmoTlubTku70KICBMYXN0WWVhcjogZnVuY3Rpb24gTGFzdFllYXIoeSwgbSkgewogICAgbSA9IHBhcnNlSW50KG0pOwogICAgeSA9IHBhcnNlSW50KHkpOwogICAgaWYgKG0gPiAwICYmIG0gPCAxMyAmJiB5ID4gMCkgewogICAgICBpZiAobSA9PT0gMSkgewogICAgICAgIHJldHVybiB5IC0gMTsKICAgICAgfQogICAgICByZXR1cm4geTsKICAgIH0KICB9LAogIC8qKg0KICAgKiDmlbDlrablhazlvI8NCiAgICovCiAgQUJTOiBmdW5jdGlvbiBBQlMobnVtYmVyKSB7CiAgICBudW1iZXIgPSBGb3JtdWxhcy5wYXJzZU51bWJlcihudW1iZXIpOwogICAgcmV0dXJuIE1hdGguYWJzKG51bWJlcik7CiAgfSwKICBBVkVSQUdFOiBmdW5jdGlvbiBBVkVSQUdFKCkgewogICAgdmFyIGF2ZyA9IDA7CiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgbnVtYmVyID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykgewogICAgICBudW1iZXJbX2tleV0gPSBhcmd1bWVudHNbX2tleV07CiAgICB9CiAgICBudW1iZXIuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkgewogICAgICBhdmcgKz0gRm9ybXVsYXMucGFyc2VOdW1iZXIoaXRlbSk7CiAgICB9KTsKICAgIGlmIChudW1iZXIubGVuZ3RoID09PSAwKSByZXR1cm4gMDsKICAgIHJldHVybiBhdmcgLyBudW1iZXIubGVuZ3RoOwogIH0sCiAgQVZFUkFHRVNVQjogZnVuY3Rpb24gQVZFUkFHRVNVQihvYmopIHsKICAgIHZhciBhcnJheSA9IEZvcm11bGFzLmdldEFycmF5QnlQYXRoKG9iaik7CiAgICByZXR1cm4gRm9ybXVsYXMuQVZFUkFHRS5hcHBseShGb3JtdWxhcywgX3RvQ29uc3VtYWJsZUFycmF5KGFycmF5KSk7CiAgfSwKICBDRUlMSU5HOiBmdW5jdGlvbiBDRUlMSU5HKG51bWJlciwgc2lnbmlmaWNhbmNlKSB7CiAgICBudW1iZXIgPSBGb3JtdWxhcy5wYXJzZU51bWJlcihudW1iZXIpOwogICAgc2lnbmlmaWNhbmNlID0gRm9ybXVsYXMuQUJTKHNpZ25pZmljYW5jZSk7CiAgICBpZiAoc2lnbmlmaWNhbmNlID09PSAwKSB7CiAgICAgIHJldHVybiAwOwogICAgfQogICAgdmFyIHByZWNpc2lvbiA9IC1NYXRoLmZsb29yKE1hdGgubG9nKHNpZ25pZmljYW5jZSkgLyBNYXRoLmxvZygxMCkpOwogICAgaWYgKG51bWJlciA+IDApIHsKICAgICAgcmV0dXJuIEZvcm11bGFzLlJPVU5EKE1hdGguY2VpbChudW1iZXIgLyBzaWduaWZpY2FuY2UpICogc2lnbmlmaWNhbmNlLCBwcmVjaXNpb24pOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIEZvcm11bGFzLlJPVU5EKE1hdGguZmxvb3IobnVtYmVyIC8gc2lnbmlmaWNhbmNlKSAqIHNpZ25pZmljYW5jZSwgcHJlY2lzaW9uKTsKICAgIH0KICB9LAogIENPVU5UOiBmdW5jdGlvbiBDT1VOVCgpIHsKICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoOwogIH0sCiAgQ09VTlRTVUI6IGZ1bmN0aW9uIENPVU5UU1VCKG9iaikgewogICAgdmFyIGFycmF5ID0gb2JqLmRhdGE7CiAgICByZXR1cm4gYXJyYXkubGVuZ3RoOwogIH0sCiAgQ09VTlRJRjogZnVuY3Rpb24gQ09VTlRJRihsaXN0LCBjb25kaXRpb24pIHsKICAgIGlmICghY29uZGl0aW9uLnN0YXJ0c1dpdGgoIj4iKSAmJiAhY29uZGl0aW9uLnN0YXJ0c1dpdGgoIjwiKSkgewogICAgICBpZiAoaXNOYU4oY29uZGl0aW9uKSkgewogICAgICAgIGNvbmRpdGlvbiA9ICI9PT0nIiArIGNvbmRpdGlvbiArICInIjsKICAgICAgfSBlbHNlIHsKICAgICAgICBjb25kaXRpb24gPSAiPT09IiArIGNvbmRpdGlvbjsKICAgICAgfQogICAgfQogICAgdmFyIGkgPSAwOwogICAgbGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgIGlmIChldmFsKCdpdGVtJyArIGNvbmRpdGlvbikpIHsKICAgICAgICBpKys7CiAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIGk7CiAgfSwKICBDT1VOVElGU1VCOiBmdW5jdGlvbiBDT1VOVElGU1VCKG9iaiwgY29uZGl0aW9uKSB7CiAgICB2YXIgYXJyYXkgPSBGb3JtdWxhcy5nZXRBcnJheUJ5UGF0aChvYmopOwogICAgcmV0dXJuIEZvcm11bGFzLkNPVU5USUYoYXJyYXksIGNvbmRpdGlvbik7CiAgfSwKICBGSVhFRDogZnVuY3Rpb24gRklYRUQoZGVjaW1hbCwgZGlnaXRzKSB7CiAgICBkZWNpbWFsID0gRm9ybXVsYXMucGFyc2VOdW1iZXIoZGVjaW1hbCk7CiAgICBkaWdpdHMgPSBGb3JtdWxhcy5wYXJzZU51bWJlcihkaWdpdHMpOwogICAgcmV0dXJuIE51bWJlcihkZWNpbWFsKS50b0ZpeGVkKGRpZ2l0cyk7CiAgfSwKICBGTE9PUjogZnVuY3Rpb24gRkxPT1IobnVtYmVyLCBzaWduaWZpY2FuY2UpIHsKICAgIG51bWJlciA9IEZvcm11bGFzLnBhcnNlTnVtYmVyKG51bWJlcik7CiAgICBzaWduaWZpY2FuY2UgPSBGb3JtdWxhcy5BQlMoc2lnbmlmaWNhbmNlKTsKICAgIGlmIChzaWduaWZpY2FuY2UgPT09IDApIHsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICB2YXIgcHJlY2lzaW9uID0gLU1hdGguZmxvb3IoTWF0aC5sb2coc2lnbmlmaWNhbmNlKSAvIE1hdGgubG9nKDEwKSk7CiAgICBpZiAobnVtYmVyID4gMCkgewogICAgICByZXR1cm4gRm9ybXVsYXMuUk9VTkQoTWF0aC5mbG9vcihudW1iZXIgLyBzaWduaWZpY2FuY2UpICogc2lnbmlmaWNhbmNlLCBwcmVjaXNpb24pOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIEZvcm11bGFzLlJPVU5EKE1hdGguY2VpbChudW1iZXIgLyBzaWduaWZpY2FuY2UpICogc2lnbmlmaWNhbmNlLCBwcmVjaXNpb24pOwogICAgfQogIH0sCiAgSU5UOiBmdW5jdGlvbiBJTlQobnVtYmVyKSB7CiAgICBudW1iZXIgPSBGb3JtdWxhcy5wYXJzZU51bWJlcihudW1iZXIpOwogICAgcmV0dXJuIHBhcnNlSW50KG51bWJlcik7CiAgfSwKICBMQVJHRTogZnVuY3Rpb24gTEFSR0UoYXJyYXksIGluZGV4KSB7CiAgICBpbmRleCA9IEZvcm11bGFzLnBhcnNlTnVtYmVyKGluZGV4KTsKICAgIHJldHVybiBhcnJheS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7CiAgICAgIHJldHVybiBiIC0gYTsKICAgIH0pW2luZGV4IC0gMV07CiAgfSwKICBMQVJHRVNVQjogZnVuY3Rpb24gTEFSR0VTVUIob2JqLCBpbmRleCkgewogICAgdmFyIGFycmF5ID0gRm9ybXVsYXMuZ2V0QXJyYXlCeVBhdGgob2JqKTsKICAgIHJldHVybiBGb3JtdWxhcy5MQVJHRShhcnJheSwgaW5kZXgpOwogIH0sCiAgTE9HOiBmdW5jdGlvbiBMT0cobnVtYmVyLCBiYXNlKSB7CiAgICBudW1iZXIgPSBGb3JtdWxhcy5wYXJzZU51bWJlcihudW1iZXIpOwogICAgYmFzZSA9IEZvcm11bGFzLnBhcnNlTnVtYmVyKGJhc2UpOwogICAgaWYgKGJhc2UgPT09IDApIHJldHVybiAwOwogICAgcmV0dXJuIE1hdGgubG9nKG51bWJlcikgLyBNYXRoLmxvZyhiYXNlKTsKICB9LAogIE1BWDogZnVuY3Rpb24gTUFYKCkgewogICAgZm9yICh2YXIgX2xlbjIgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4yKSwgX2tleTIgPSAwOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7CiAgICAgIGFyZ3NbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTsKICAgIH0KICAgIGFyZ3MgPSBGb3JtdWxhcy5wYXJzZU51bWJlckFycmF5KGFyZ3MpOwogICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKSB7CiAgICAgIHJldHVybiAwOwogICAgfQogICAgcmV0dXJuIE1hdGgubWF4LmFwcGx5KE1hdGgsIF90b0NvbnN1bWFibGVBcnJheShhcmdzKSk7CiAgfSwKICBNQVhTVUI6IGZ1bmN0aW9uIE1BWFNVQihvYmopIHsKICAgIHZhciBhcnJheSA9IEZvcm11bGFzLmdldEFycmF5QnlQYXRoKG9iaik7CiAgICByZXR1cm4gRm9ybXVsYXMuTUFYLmFwcGx5KEZvcm11bGFzLCBfdG9Db25zdW1hYmxlQXJyYXkoYXJyYXkpKTsKICB9LAogIE1JTjogZnVuY3Rpb24gTUlOKCkgewogICAgZm9yICh2YXIgX2xlbjMgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4zKSwgX2tleTMgPSAwOyBfa2V5MyA8IF9sZW4zOyBfa2V5MysrKSB7CiAgICAgIGFyZ3NbX2tleTNdID0gYXJndW1lbnRzW19rZXkzXTsKICAgIH0KICAgIGFyZ3MgPSBGb3JtdWxhcy5wYXJzZU51bWJlckFycmF5KGFyZ3MpOwogICAgaWYgKGFyZ3MubGVuZ3RoID09PSAwKSB7CiAgICAgIHJldHVybiAwOwogICAgfQogICAgcmV0dXJuIE1hdGgubWluLmFwcGx5KE1hdGgsIF90b0NvbnN1bWFibGVBcnJheShhcmdzKSk7CiAgfSwKICBNSU5TVUI6IGZ1bmN0aW9uIE1JTlNVQihvYmopIHsKICAgIHZhciBhcnJheSA9IEZvcm11bGFzLmdldEFycmF5QnlQYXRoKG9iaik7CiAgICByZXR1cm4gRm9ybXVsYXMuTUlOLmFwcGx5KEZvcm11bGFzLCBfdG9Db25zdW1hYmxlQXJyYXkoYXJyYXkpKTsKICB9LAogIE1PRDogZnVuY3Rpb24gTU9EKGRpdmlkZW5kLCBkaXZpc29yKSB7CiAgICBkaXZpZGVuZCA9IEZvcm11bGFzLnBhcnNlTnVtYmVyKGRpdmlkZW5kKTsKICAgIGRpdmlzb3IgPSBGb3JtdWxhcy5wYXJzZU51bWJlcihkaXZpc29yKTsKICAgIHZhciBtb2R1bGVzID0gTWF0aC5hYnMoZGl2aWRlbmQgJSBkaXZpc29yKTsKICAgIHJldHVybiBkaXZpc29yID4gMCA/IG1vZHVsZXMgOiAtbW9kdWxlczsKICB9LAogIFBPV0VSOiBmdW5jdGlvbiBQT1dFUihudW1iZXIsIHBvd2VyKSB7CiAgICBudW1iZXIgPSBGb3JtdWxhcy5wYXJzZU51bWJlcihudW1iZXIpOwogICAgcG93ZXIgPSBGb3JtdWxhcy5wYXJzZU51bWJlcihwb3dlcik7CiAgICByZXR1cm4gTWF0aC5wb3cobnVtYmVyLCBwb3dlcik7CiAgfSwKICBQUk9EVUNUOiBmdW5jdGlvbiBQUk9EVUNUKCkgewogICAgdmFyIHRvdGFsID0gMTsKICAgIGZvciAodmFyIF9sZW40ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuNCksIF9rZXk0ID0gMDsgX2tleTQgPCBfbGVuNDsgX2tleTQrKykgewogICAgICBhcmdzW19rZXk0XSA9IGFyZ3VtZW50c1tfa2V5NF07CiAgICB9CiAgICBhcmdzLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgaXRlbSA9IEZvcm11bGFzLnBhcnNlTnVtYmVyKGl0ZW0pOwogICAgICB0b3RhbCAqPSBpdGVtOwogICAgfSk7CiAgICByZXR1cm4gYXJncy5sZW5ndGggPT09IDAgPyAwIDogdG90YWw7CiAgfSwKICBQUk9EVUNUU1VCOiBmdW5jdGlvbiBQUk9EVUNUU1VCKG9iaikgewogICAgdmFyIGFycmF5ID0gRm9ybXVsYXMuZ2V0QXJyYXlCeVBhdGgob2JqKTsKICAgIHJldHVybiBGb3JtdWxhcy5QUk9EVUNULmFwcGx5KEZvcm11bGFzLCBfdG9Db25zdW1hYmxlQXJyYXkoYXJyYXkpKTsKICB9LAogIFJBTkQ6IGZ1bmN0aW9uIFJBTkQoKSB7CiAgICByZXR1cm4gTWF0aC5yYW5kb20oKTsKICB9LAogIFJPVU5EOiBmdW5jdGlvbiBST1VORChudW1iZXIsIGRpZ2l0KSB7CiAgICByZXR1cm4gTWF0aC5yb3VuZChudW1iZXIgKiBNYXRoLnBvdygxMCwgZGlnaXQpKSAvIE1hdGgucG93KDEwLCBkaWdpdCk7CiAgfSwKICBTTUFMTDogZnVuY3Rpb24gU01BTEwoYXJyYXksIGluZGV4KSB7CiAgICBhcnJheSA9IEZvcm11bGFzLnBhcnNlTnVtYmVyQXJyYXkoYXJyYXkpOwogICAgcmV0dXJuIGFycmF5LnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsKICAgICAgcmV0dXJuIGEgLSBiOwogICAgfSlbaW5kZXggLSAxXTsKICB9LAogIFNNQUxMU1VCOiBmdW5jdGlvbiBTTUFMTFNVQihvYmosIGluZGV4KSB7CiAgICB2YXIgYXJyYXkgPSBGb3JtdWxhcy5nZXRBcnJheUJ5UGF0aChvYmopOwogICAgcmV0dXJuIEZvcm11bGFzLlNNQUxMKGFycmF5LCBpbmRleCk7CiAgfSwKICBTUVJUOiBmdW5jdGlvbiBTUVJUKG51bWJlcikgewogICAgbnVtYmVyID0gRm9ybXVsYXMucGFyc2VOdW1iZXIobnVtYmVyKTsKICAgIHJldHVybiBNYXRoLnNxcnQobnVtYmVyKTsKICB9LAogIFNVTTogZnVuY3Rpb24gU1VNKCkgewogICAgdmFyIG51bSA9IDA7CiAgICBmb3IgKHZhciBfbGVuNSA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjUpLCBfa2V5NSA9IDA7IF9rZXk1IDwgX2xlbjU7IF9rZXk1KyspIHsKICAgICAgYXJnc1tfa2V5NV0gPSBhcmd1bWVudHNbX2tleTVdOwogICAgfQogICAgYXJncy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgIGl0ZW0gPSBGb3JtdWxhcy5wYXJzZU51bWJlcihpdGVtKTsKICAgICAgbnVtICs9IGl0ZW07CiAgICB9KTsKICAgIHJldHVybiBudW07CiAgfSwKICBTVU1TVUI6IGZ1bmN0aW9uIFNVTVNVQihvYmopIHsKICAgIHZhciBhcnJheSA9IEZvcm11bGFzLmdldEFycmF5QnlQYXRoKG9iaik7CiAgICByZXR1cm4gRm9ybXVsYXMuU1VNLmFwcGx5KEZvcm11bGFzLCBfdG9Db25zdW1hYmxlQXJyYXkoYXJyYXkpKTsKICB9LAogIFNVTVBST0RVQ1Q6IGZ1bmN0aW9uIFNVTVBST0RVQ1QoKSB7CiAgICBmb3IgKHZhciBfbGVuNiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFycmF5cyA9IG5ldyBBcnJheShfbGVuNiksIF9rZXk2ID0gMDsgX2tleTYgPCBfbGVuNjsgX2tleTYrKykgewogICAgICBhcnJheXNbX2tleTZdID0gYXJndW1lbnRzW19rZXk2XTsKICAgIH0KICAgIGlmICghYXJyYXlzKSByZXR1cm4gMDsKICAgIHZhciBtaW4gPSBOdW1iZXIuTUFYX1ZBTFVFOwogICAgdmFyIHRvdGFsID0gMDsKICAgIGFycmF5cy5mb3JFYWNoKGZ1bmN0aW9uIChhcnJheSkgewogICAgICBpZiAoYXJyYXkubGVuZ3RoIDwgbWluKSB7CiAgICAgICAgbWluID0gYXJyYXkubGVuZ3RoOwogICAgICB9CiAgICB9KTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWluOyBpKyspIHsKICAgICAgdmFyIHAgPSAxOwogICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGFycmF5cy5sZW5ndGg7IGorKykgewogICAgICAgIHAgKj0gRm9ybXVsYXMucGFyc2VOdW1iZXIoYXJyYXlzW2pdW2ldKTsKICAgICAgfQogICAgICB0b3RhbCArPSBwOwogICAgfQogICAgcmV0dXJuIHRvdGFsOwogIH0sCiAgU1VNUFJPRFVDVFNVQjogZnVuY3Rpb24gU1VNUFJPRFVDVFNVQigpIHsKICAgIGZvciAodmFyIF9sZW43ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJyYXlzID0gbmV3IEFycmF5KF9sZW43KSwgX2tleTcgPSAwOyBfa2V5NyA8IF9sZW43OyBfa2V5NysrKSB7CiAgICAgIGFycmF5c1tfa2V5N10gPSBhcmd1bWVudHNbX2tleTddOwogICAgfQogICAgaWYgKCFhcnJheXMpIHJldHVybiAwOwogICAgdmFyIG5ld0FycmF5cyA9IFtdOwogICAgYXJyYXlzLmZvckVhY2goZnVuY3Rpb24gKG9iaikgewogICAgICBuZXdBcnJheXMucHVzaChGb3JtdWxhcy5nZXRBcnJheUJ5UGF0aChvYmopKTsKICAgIH0pOwogICAgcmV0dXJuIEZvcm11bGFzLlNVTVBST0RVQ1QuYXBwbHkoRm9ybXVsYXMsIG5ld0FycmF5cyk7CiAgfSwKICAvKioNCiAgICog5paH5pys5Ye95pWwDQogICAqIEBwYXJhbSBhcmdzDQogICAqIEByZXR1cm5zIHtzdHJpbmd9DQogICAqIEBjb25zdHJ1Y3Rvcg0KICAgKi8KICBDT05DQVRFTkFURTogZnVuY3Rpb24gQ09OQ0FURU5BVEUoKSB7CiAgICB2YXIgc3RyID0gIiI7CiAgICBmb3IgKHZhciBfbGVuOCA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjgpLCBfa2V5OCA9IDA7IF9rZXk4IDwgX2xlbjg7IF9rZXk4KyspIHsKICAgICAgYXJnc1tfa2V5OF0gPSBhcmd1bWVudHNbX2tleThdOwogICAgfQogICAgYXJncy5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgIGlmIChpdGVtKSB7CiAgICAgICAgc3RyICs9IGl0ZW07CiAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIHN0cjsKICB9LAogIENIQVI6IGZ1bmN0aW9uIENIQVIobnVtYmVyKSB7CiAgICBudW1iZXIgPSBGb3JtdWxhcy5wYXJzZU51bWJlcihudW1iZXIpOwogICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUobnVtYmVyKTsKICB9LAogIEVYQUNUOiBmdW5jdGlvbiBFWEFDVChzdHIxLCBzdHIyKSB7CiAgICByZXR1cm4gc3RyMSA9PT0gc3RyMjsKICB9LAogIElTRU1QVFk6IGZ1bmN0aW9uIElTRU1QVFkoc3RyKSB7CiAgICByZXR1cm4gc3RyID8gdHJ1ZSA6IGZhbHNlOwogIH0sCiAgTEVGVDogZnVuY3Rpb24gTEVGVChzdHIsIG51bWJlcikgewogICAgbnVtYmVyID0gRm9ybXVsYXMucGFyc2VOdW1iZXIobnVtYmVyKTsKICAgIHJldHVybiBzdHIuc3Vic3RyKHN0ciwgbnVtYmVyKTsKICB9LAogIExFTjogZnVuY3Rpb24gTEVOKHN0cikgewogICAgcmV0dXJuIHN0ci5sZW5ndGg7CiAgfSwKICBMT1dFUjogZnVuY3Rpb24gTE9XRVIoc3RyKSB7CiAgICByZXR1cm4gc3RyLnRvTG93ZXJDYXNlKCk7CiAgfSwKICBNSUQ6IGZ1bmN0aW9uIE1JRChzdHIsIHN0YXJ0LCBsZW5ndGgpIHsKICAgIHJldHVybiBzdHIuc3Vic3RyKHN0YXJ0IC0gMSwgbGVuZ3RoKTsKICB9LAogIFJFUExBQ0U6IGZ1bmN0aW9uIFJFUExBQ0Uoc3RyLCBzdGFydCwgbGVuZ3RoLCBuZXdTdHIpIHsKICAgIHZhciByZXBsYWNlU3RyID0gRm9ybXVsYXMuTUlEKHN0ciwgc3RhcnQsIGxlbmd0aCk7CiAgICBpZiAoIXJlcGxhY2VTdHIpIHJldHVybiBzdHIgKyBuZXdTdHI7CiAgICByZXR1cm4gc3RyLnJlcGxhY2UocmVwbGFjZVN0ciwgbmV3U3RyKTsKICB9LAogIFJFUFQ6IGZ1bmN0aW9uIFJFUFQoc3RyLCBjb3VudCkgewogICAgdmFyIHJlc3VsdCA9ICIiOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBGb3JtdWxhcy5wYXJzZU51bWJlcihjb3VudCk7IGkrKykgewogICAgICByZXN1bHQgKz0gc3RyOwogICAgfQogICAgcmV0dXJuIHJlc3VsdDsKICB9LAogIFJJR0hUOiBmdW5jdGlvbiBSSUdIVChzdHIsIGxlbmd0aCkgewogICAgcmV0dXJuIHN0ci5zdWJzdHIoc3RyLmxlbmd0aCAtIGxlbmd0aCwgc3RyLmxlbmd0aCk7CiAgfSwKICBVUFBFUjogZnVuY3Rpb24gVVBQRVIoc3RyKSB7CiAgICByZXR1cm4gc3RyLnRvVXBwZXJDYXNlKCk7CiAgfSwKICBURVhUOiBmdW5jdGlvbiBURVhUKG51bWJlcikgewogICAgcmV0dXJuIG51bWJlciArICIiOwogIH0sCiAgVkFMVUU6IGZ1bmN0aW9uIFZBTFVFKHN0cikgewogICAgcmV0dXJuIEZvcm11bGFzLnBhcnNlTnVtYmVyKHN0cik7CiAgfSwKICBUUklNOiBmdW5jdGlvbiBUUklNKHN0cikgewogICAgcmV0dXJuIHN0ci50cmltKCk7CiAgfSwKICBDT1VOVE5POiBmdW5jdGlvbiBDT1VOVE5PKGZpZWxkLCBjaGFyKSB7CiAgICBpZiAoZmllbGQgPT0gIiIpIHsKICAgICAgcmV0dXJuIDA7CiAgICB9IGVsc2UgaWYgKGZpZWxkLmluZGV4T2YoY2hhcikgPiAtMSkgewogICAgICByZXR1cm4gZmllbGQuc3BsaXQoY2hhcikubGVuZ3RoOwogICAgfSBlbHNlIHsKICAgICAgcmV0dXJuIDE7CiAgICB9CiAgfSwKICAvL+mAu+i+keWHveaVsAogIEFORDogZnVuY3Rpb24gQU5EKCkgewogICAgdmFyIHJlc3VsdCA9IHRydWU7CiAgICBmb3IgKHZhciBfbGVuOSA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjkpLCBfa2V5OSA9IDA7IF9rZXk5IDwgX2xlbjk7IF9rZXk5KyspIHsKICAgICAgYXJnc1tfa2V5OV0gPSBhcmd1bWVudHNbX2tleTldOwogICAgfQogICAgYXJncy5mb3JFYWNoKGZ1bmN0aW9uIChhcmcpIHsKICAgICAgaWYgKCFhcmcpIHsKICAgICAgICByZXN1bHQgPSBmYWxzZTsKICAgICAgfQogICAgfSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0sCiAgRkFMU0U6IGZ1bmN0aW9uIEZBTFNFKCkgewogICAgcmV0dXJuIGZhbHNlOwogIH0sCiAgSUY6IGZ1bmN0aW9uIElGKGFyZywgdGhlbl92YWx1ZSwgb3RoZXJ3aXNlX3ZhbHVlKSB7CiAgICByZXR1cm4gYXJnID8gdGhlbl92YWx1ZSA6IG90aGVyd2lzZV92YWx1ZTsKICB9LAogIE5PVDogZnVuY3Rpb24gTk9UKGFyZykgewogICAgcmV0dXJuICFhcmc7CiAgfSwKICBPUjogZnVuY3Rpb24gT1IoKSB7CiAgICB2YXIgcmVzdWx0ID0gZmFsc2U7CiAgICBmb3IgKHZhciBfbGVuMTAgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4xMCksIF9rZXkxMCA9IDA7IF9rZXkxMCA8IF9sZW4xMDsgX2tleTEwKyspIHsKICAgICAgYXJnc1tfa2V5MTBdID0gYXJndW1lbnRzW19rZXkxMF07CiAgICB9CiAgICBhcmdzLmZvckVhY2goZnVuY3Rpb24gKGFyZykgewogICAgICBpZiAoYXJnKSB7CiAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKICAgICAgfQogICAgfSk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0sCiAgVFJVRTogZnVuY3Rpb24gVFJVRSgpIHsKICAgIHJldHVybiB0cnVlOwogIH0sCiAgWE9SOiBmdW5jdGlvbiBYT1IoKSB7CiAgICB2YXIgY291bnQgPSAwOwogICAgZm9yICh2YXIgX2xlbjExID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMTEpLCBfa2V5MTEgPSAwOyBfa2V5MTEgPCBfbGVuMTE7IF9rZXkxMSsrKSB7CiAgICAgIGFyZ3NbX2tleTExXSA9IGFyZ3VtZW50c1tfa2V5MTFdOwogICAgfQogICAgYXJncy5mb3JFYWNoKGZ1bmN0aW9uIChhcmcpIHsKICAgICAgaWYgKCFhcmcpIHsKICAgICAgICBjb3VudCsrOwogICAgICB9CiAgICB9KTsKICAgIHJldHVybiBjb3VudCAhPT0gYXJncy5sZW5ndGggJiYgY291bnQgIT09IDA7CiAgfSwKICAvL+aXtumXtOWHveaVsAogIERBVEU6IGZ1bmN0aW9uIERBVEUodGltZXN0YW1wKSB7CiAgICB2YXIgZGF0ZSA9IEZvcm11bGFzLnBhcnNlRGF0ZSh0aW1lc3RhbXApOwogICAgaWYgKGRhdGUgPT0gJ0ludmFsaWQgRGF0ZScpIHsKICAgICAgTm90aWZpY2F0aW9uLmVycm9yKHsKICAgICAgICB0aXRsZTogJ+mUmeivrycsCiAgICAgICAgbWVzc2FnZTogJ+aXoOaViOaXpeacnycKICAgICAgfSk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHJldHVybiBkYXRlOwogIH0sCiAgREFURURFTFRBOiBmdW5jdGlvbiBEQVRFREVMVEEoc3RyaW5nLCBkYXlzKSB7CiAgICB2YXIgdGltZXN0YW1wID0gbmV3IERhdGUoc3RyaW5nKS5nZXRUaW1lKCk7CiAgICB0aW1lc3RhbXAgKz0gZGF5cyAqIDg2NDAwMDAwOwogICAgcmV0dXJuIEZvcm11bGFzLkRBVEUodGltZXN0YW1wKTsKICB9LAogIEhBTEZEQVk6IGZ1bmN0aW9uIEhBTEZEQVkoc3RhcnREYXRlLCBlbmREYXRlKSB7CiAgICB2YXIgaGFsZiA9IDAuNTsKICAgIHZhciBzdGFydERheSA9IEZvcm11bGFzLnNlY29uZChGb3JtdWxhcy5wYXJzZVN0cmluZ1RvRGF0ZShzdGFydERhdGUpKTsKICAgIHZhciBlbmREYXkgPSBGb3JtdWxhcy5zZWNvbmQoRm9ybXVsYXMucGFyc2VTdHJpbmdUb0RhdGUoZW5kRGF0ZSkpOwogICAgaWYgKGlzTmFOKHN0YXJ0RGF5KSB8fCBpc05hTihlbmREYXkpKSB7CiAgICAgIHJldHVybiAiIjsKICAgIH0KICAgIHZhciBoYWxmRGF5ID0gTWF0aC5jZWlsKChlbmREYXkgLSBzdGFydERheSkgLyA0MzIwMCk7CiAgICByZXR1cm4gaGFsZkRheSAqIGhhbGY7CiAgfSwKICBDT1VOVEhPVVJTOiBmdW5jdGlvbiBDT1VOVEhPVVJTKHN0YXJ0RGF0ZSwgZW5kRGF0ZSkgewogICAgdmFyIHN0YXJ0RGF5ID0gRm9ybXVsYXMuc2Vjb25kKEZvcm11bGFzLnBhcnNlU3RyaW5nVG9EYXRlKHN0YXJ0RGF0ZSkpOwogICAgdmFyIGVuZERheSA9IEZvcm11bGFzLnNlY29uZChGb3JtdWxhcy5wYXJzZVN0cmluZ1RvRGF0ZShlbmREYXRlKSk7CiAgICBpZiAoaXNOYU4oc3RhcnREYXkpIHx8IGlzTmFOKGVuZERheSkpIHsKICAgICAgcmV0dXJuICIiOwogICAgfQogICAgdmFyIGhvdXJzID0gTWF0aC5jZWlsKChlbmREYXkgLSBzdGFydERheSkgLyAzNjAwKTsKICAgIHJldHVybiBob3VyczsKICB9LAogIERBWTogZnVuY3Rpb24gREFZKHRpbWVzdGFtcCkgewogICAgdmFyIGRhdGUgPSBGb3JtdWxhcy5EQVRFKHRpbWVzdGFtcCk7CiAgICByZXR1cm4gZGF0ZS5nZXREYXRlKCk7CiAgfSwKICBEQVlTOiBmdW5jdGlvbiBEQVlTKHN0YXJ0RGF0ZSwgZW5kRGF0ZSkgewogICAgdmFyIHN0YXJ0RGF5ID0gRm9ybXVsYXMuc2VyaWFsKEZvcm11bGFzLnBhcnNlU3RyaW5nVG9EYXRlKHN0YXJ0RGF0ZSkpOwogICAgdmFyIGVuZERheSA9IEZvcm11bGFzLnNlcmlhbChGb3JtdWxhcy5wYXJzZVN0cmluZ1RvRGF0ZShlbmREYXRlKSk7CiAgICBpZiAoaXNOYU4oc3RhcnREYXkpIHx8IGlzTmFOKGVuZERheSkpIHsKICAgICAgcmV0dXJuICIiOwogICAgfQogICAgcmV0dXJuIGVuZERheSAtIHN0YXJ0RGF5OwogIH0sCiAgREFZUzM2MDogZnVuY3Rpb24gREFZUzM2MChzdGFydERhdGUsIGVuZERhdGUsIG1ldGhvZCkgewogICAgaWYgKCFzdGFydERhdGUgfHwgIWVuZERhdGUpIHsKICAgICAgcmV0dXJuIDA7CiAgICB9CiAgICBzdGFydERhdGUgPSBGb3JtdWxhcy5wYXJzZVN0cmluZ1RvRGF0ZShzdGFydERhdGUpOwogICAgZW5kRGF0ZSA9IEZvcm11bGFzLnBhcnNlU3RyaW5nVG9EYXRlKGVuZERhdGUpOwogICAgdmFyIHNtID0gc3RhcnREYXRlLmdldE1vbnRoKCk7CiAgICB2YXIgZW0gPSBlbmREYXRlLmdldE1vbnRoKCk7CiAgICB2YXIgc2QsIGVkOwogICAgaWYgKG1ldGhvZCkgewogICAgICBzZCA9IHN0YXJ0RGF0ZS5nZXREYXRlKCkgPT09IDMxID8gMzAgOiBzdGFydERhdGUuZ2V0RGF0ZSgpOwogICAgICBlZCA9IGVuZERhdGUuZ2V0RGF0ZSgpID09PSAzMSA/IDMwIDogZW5kRGF0ZS5nZXREYXRlKCk7CiAgICB9IGVsc2UgewogICAgICB2YXIgc21kID0gbmV3IERhdGUoc3RhcnREYXRlLmdldEZ1bGxZZWFyKCksIHNtICsgMSwgMCkuZ2V0RGF0ZSgpOwogICAgICB2YXIgZW1kID0gbmV3IERhdGUoZW5kRGF0ZS5nZXRGdWxsWWVhcigpLCBlbSArIDEsIDApLmdldERhdGUoKTsKICAgICAgc2QgPSBzdGFydERhdGUuZ2V0RGF0ZSgpID09PSBzbWQgPyAzMCA6IHN0YXJ0RGF0ZS5nZXREYXRlKCk7CiAgICAgIGlmIChlbmREYXRlLmdldERhdGUoKSA9PT0gZW1kKSB7CiAgICAgICAgaWYgKHNkIDwgMzApIHsKICAgICAgICAgIGVtKys7CiAgICAgICAgICBlZCA9IDE7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGVkID0gMzA7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGVkID0gZW5kRGF0ZS5nZXREYXRlKCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiAzNjAgKiAoZW5kRGF0ZS5nZXRGdWxsWWVhcigpIC0gc3RhcnREYXRlLmdldEZ1bGxZZWFyKCkpICsgMzAgKiAoZW0gLSBzbSkgKyAoZWQgLSBzZCk7CiAgfSwKICBIT1VSOiBmdW5jdGlvbiBIT1VSKHRpbWVzdGFtcCkgewogICAgdmFyIGRhdGUgPSBGb3JtdWxhcy5EQVRFKHRpbWVzdGFtcCk7CiAgICByZXR1cm4gZGF0ZS5nZXRIb3VycygpOwogIH0sCiAgSVNPV0VFS05VTTogZnVuY3Rpb24gSVNPV0VFS05VTShkYXRlKSB7CiAgICBkYXRlID0gRm9ybXVsYXMucGFyc2VTdHJpbmdUb0RhdGUoZGF0ZSk7CiAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDApOwogICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgNCAtIChkYXRlLmdldERheSgpIHx8IDcpKTsKICAgIHZhciB5ZWFyU3RhcnQgPSBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIDAsIDEpOwogICAgcmV0dXJuIE1hdGguY2VpbCgoKGRhdGUgLSB5ZWFyU3RhcnQpIC8gODY0MDAwMDAgKyAxKSAvIDcpOwogIH0sCiAgTUlOVVRFOiBmdW5jdGlvbiBNSU5VVEUodGltZXN0YW1wKSB7CiAgICB2YXIgZGF0ZSA9IEZvcm11bGFzLkRBVEUodGltZXN0YW1wKTsKICAgIHJldHVybiBkYXRlLmdldE1pbnV0ZXMoKTsKICB9LAogIE1PTlRIOiBmdW5jdGlvbiBNT05USCh0aW1lc3RhbXApIHsKICAgIHZhciBkYXRlID0gRm9ybXVsYXMuREFURSh0aW1lc3RhbXApOwogICAgcmV0dXJuIGRhdGUuZ2V0TW9udGgoKSArIDE7CiAgfSwKICBOT1c6IGZ1bmN0aW9uIE5PVygpIHsKICAgIHJldHVybiBGb3JtdWxhcy5wYXJzZURhdGUobmV3IERhdGUoKS5nZXRUaW1lKCkpOwogIH0sCiAgU0VDT05EOiBmdW5jdGlvbiBTRUNPTkQodGltZXN0YW1wKSB7CiAgICB2YXIgZGF0ZSA9IEZvcm11bGFzLkRBVEUodGltZXN0YW1wKTsKICAgIHJldHVybiBkYXRlLmdldFNlY29uZHMoKTsKICB9LAogIFNZU1RJTUU6IGZ1bmN0aW9uIFNZU1RJTUUoKSB7CiAgICAvL3RvZG8KICB9LAogIFRJTUU6IGZ1bmN0aW9uIFRJTUUoaG91ciwgbWludXRlLCBzZWNvbmQpIHsKICAgIGhvdXIgPSBGb3JtdWxhcy5wYXJzZU51bWJlcihob3VyKTsKICAgIG1pbnV0ZSA9IEZvcm11bGFzLnBhcnNlTnVtYmVyKG1pbnV0ZSk7CiAgICBzZWNvbmQgPSBGb3JtdWxhcy5wYXJzZU51bWJlcihzZWNvbmQpOwogICAgaG91ciA9IGhvdXIgPCAwID8gMCA6IGhvdXI7CiAgICBtaW51dGUgPSBtaW51dGUgPCAwID8gMCA6IG1pbnV0ZTsKICAgIHNlY29uZCA9IHNlY29uZCA8IDAgPyAwIDogc2Vjb25kOwogICAgcmV0dXJuICgzNjAwICogaG91ciArIDYwICogbWludXRlICsgc2Vjb25kKSAvIDg2NDAwOwogIH0sCiAgVElNRVNUQU1QOiBmdW5jdGlvbiBUSU1FU1RBTVAoZGF0ZSkgewogICAgaWYgKGRhdGUpIHsKICAgICAgZGF0ZSA9IEZvcm11bGFzLnBhcnNlU3RyaW5nVG9EYXRlKGRhdGUpOwogICAgICByZXR1cm4gZGF0ZS5nZXRUaW1lKCk7CiAgICB9CiAgfSwKICBUT0RBWTogZnVuY3Rpb24gVE9EQVkoKSB7CiAgICByZXR1cm4gbmV3IERhdGUoKS50b0xvY2FsZURhdGVTdHJpbmcoKTsKICB9LAogIFdFRUtOVU06IGZ1bmN0aW9uIFdFRUtOVU0oZGF0ZSwgcmV0dXJuVHlwZSkgewogICAgZGF0ZSA9IEZvcm11bGFzLnBhcnNlU3RyaW5nVG9EYXRlKGRhdGUpOwogICAgaWYgKHJldHVyblR5cGUgPT09IHVuZGVmaW5lZCkgewogICAgICByZXR1cm5UeXBlID0gMTsKICAgIH0KICAgIGlmIChyZXR1cm5UeXBlID09PSAyMSkgcmV0dXJuIEZvcm11bGFzLklTT1dFRUtOVU0oZGF0ZSk7CiAgICB2YXIgd2Vla19zdGFydCA9IEZvcm11bGFzLldFRUtfU1RBUlRTW3JldHVyblR5cGVdOwogICAgdmFyIGphbiA9IG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgMCwgMSk7CiAgICB2YXIgaW5jID0gamFuLmdldERheSgpIDwgd2Vla19zdGFydCA/IDEgOiAwOwogICAgamFuIC09IE1hdGguYWJzKGphbi5nZXREYXkoKSAtIHdlZWtfc3RhcnQpICogMjQgKiA2MCAqIDYwICogMTAwMDsKICAgIHJldHVybiBNYXRoLmZsb29yKChkYXRlIC0gamFuKSAvICgxMDAwICogNjAgKiA2MCAqIDI0KSAvIDcgKyAxKSArIGluYzsKICB9LAogIFlFQVI6IGZ1bmN0aW9uIFlFQVIodGltZXN0YW1wKSB7CiAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKHRpbWVzdGFtcCk7CiAgICByZXR1cm4gZGF0ZS5nZXRGdWxsWWVhcigpOwogIH0sCiAgVVVJRDogZnVuY3Rpb24gVVVJRCgpIHsKICAgIGZ1bmN0aW9uIHU0KCkgewogICAgICByZXR1cm4gKCgxICsgTWF0aC5yYW5kb20oKSkgKiAweDEwMDAwIHwgMCkudG9TdHJpbmcoMTYpLnN1YnN0cmluZygxKTsKICAgIH0KICAgIHJldHVybiB1NCgpICsgdTQoKSArICItIiArIHU0KCkgKyAiLSIgKyB1NCgpICsgIi0iICsgdTQoKSArICItIiArIHU0KCkgKyB1NCgpICsgdTQoKTsKICB9LAogIC8v6auY57qn5Ye95pWwOgogIENVUlJFTkNZOiBmdW5jdGlvbiBDVVJSRU5DWSh4KSB7CiAgICB2YXIgdG1wID0gRm9ybXVsYXMucGFyc2VOdW1iZXIoeCk7CiAgICAvL1RPRE8g6L2s5o2i5Li65Lq65rCR5biB5aSn5YaZCiAgICByZXR1cm4gdXRpbHMuY29udmVydEN1cnJlbmN5KHRtcCk7CiAgfSwKICBUSE9VU0FORDogZnVuY3Rpb24gVEhPVVNBTkQoeCkgewogICAgaWYgKHggfHwgeCA9PT0gMCkgewogICAgICB4ID0geCArICIiOwogICAgfQogICAgLy9sZXQgdG1wID0gRm9ybXVsYXMucGFyc2VOdW1iZXIoeCk7CiAgICB2YXIgcmVnID0gLyhcZCkoPz0oPzpcZHszfSkrXGIpL2c7CiAgICByZXR1cm4geC5yZXBsYWNlKHJlZywgJyQxLCcpOwogIH0sCiAgLyoqDQogICAqIOW8guW4uOe7n+S4gOWkhOeQhg0KICAgKiBAcGFyYW0geyp9IGVycg0KICAgKiBAcGFyYW0geyp9IHR5cGVOYW1lDQogICAqLwogIHRocm93RXJyOiBmdW5jdGlvbiB0aHJvd0VycihlcnIsIHR5cGVOYW1lKSB7CiAgICBOb3RpZmljYXRpb24uZXJyb3IoewogICAgICB0aXRsZTogdHlwZU5hbWUgKyAn5YWs5byP6L+Q566X6ZSZ6K+vJywKICAgICAgbWVzc2FnZTogZXJyCiAgICB9KTsKICAgIGlmIChpc05hTihzdGFydERheSkgfHwgaXNOYU4oZW5kRGF5KSkgewogICAgICByZXR1cm4gIiI7CiAgICB9CiAgICB0aHJvdyBlcnI7CiAgfSwKICAvKioNCiAgICog57G75Z6L5Yik5patDQogICAqIEBwYXJhbSB7Kn0gdmFsdWUNCiAgICogQHBhcmFtIHsqfSB0eXBlDQogICAqLwogIHR5cGVvZlR5cGU6IGZ1bmN0aW9uIHR5cGVvZlR5cGUodmFsdWUsIHR5cGUpIHsKICAgIGlmICh2YWx1ZSAhPT0gIiIgJiYgX3R5cGVvZih2YWx1ZSkgIT0gdHlwZSkgewogICAgICB0aHJvdyAi5Lyg5YWl5Y+C5pWw5b+F6aG75pivIiArIHR5cGUgKyAi57G75Z6LIjsKICAgIH0KICB9LAogIHBhcnNlTnVtYmVyOiBmdW5jdGlvbiBwYXJzZU51bWJlcihudW1iZXIpIHsKICAgIG51bWJlciA9IHBhcnNlRmxvYXQobnVtYmVyKTsKICAgIGlmIChpc05hTihudW1iZXIpKSByZXR1cm4gMDsKICAgIHJldHVybiBudW1iZXI7CiAgfSwKICBwYXJzZU51bWJlckFycmF5OiBmdW5jdGlvbiBwYXJzZU51bWJlckFycmF5KGFycmF5KSB7CiAgICByZXR1cm4gYXJyYXkubWFwKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgIHJldHVybiBGb3JtdWxhcy5wYXJzZU51bWJlcihpdGVtKTsKICAgIH0pOwogIH0sCiAgcGFyc2VEYXRlOiBmdW5jdGlvbiBwYXJzZURhdGUodGltZXN0YW1wKSB7CiAgICB0aW1lc3RhbXAgPSBGb3JtdWxhcy5wYXJzZU51bWJlcih0aW1lc3RhbXApOwogICAgcmV0dXJuIG5ldyBEYXRlKHRpbWVzdGFtcCk7CiAgfSwKICBwYXJzZVN0cmluZ1RvRGF0ZTogZnVuY3Rpb24gcGFyc2VTdHJpbmdUb0RhdGUoc3RyKSB7CiAgICBpZiAoIXN0cikgewogICAgICByZXR1cm4gbmV3IERhdGUoIiIpOwogICAgfQogICAgcmV0dXJuIG5ldyBEYXRlKERhdGUucGFyc2Uoc3RyLnJlcGxhY2UoLy0vZywgIi8iKSkpOwogIH0sCiAgZ2V0QXJyYXlCeVBhdGg6IGZ1bmN0aW9uIGdldEFycmF5QnlQYXRoKG9iaikgewogICAgdmFyIGFycmF5ID0gW107CiAgICBpZiAoIW9iai5kYXRhKSByZXR1cm4gYXJyYXk7CiAgICBvYmouZGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgIGFycmF5LnB1c2goRm9ybXVsYXMucGFyc2VOdW1iZXIoaXRlbVtvYmoucGF0aF0pKTsKICAgIH0pOwogICAgcmV0dXJuIGFycmF5OwogIH0sCiAgc2VyaWFsOiBmdW5jdGlvbiBzZXJpYWwoZGF0ZSkgewogICAgdmFyIGFkZE9uID0gZGF0ZSA+IC0yMjAzODkxMjAwMDAwID8gMiA6IDE7CiAgICByZXR1cm4gTWF0aC5jZWlsKChkYXRlIC0gRm9ybXVsYXMuZDE5MDApIC8gODY0MDAwMDApICsgYWRkT247CiAgfSwKICBzZWNvbmQ6IGZ1bmN0aW9uIHNlY29uZChkYXRlKSB7CiAgICB2YXIgYWRkT24gPSBkYXRlID4gLTIyMDM4OTEyMDAwMDAgPyAyIDogMTsKICAgIHJldHVybiBNYXRoLmNlaWwoKGRhdGUgLSBGb3JtdWxhcy5kMTkwMCkgLyAxMDAwKSArIGFkZE9uOwogIH0KfTsKRm9ybXVsYXMuaW5zdGFsbCA9IGZ1bmN0aW9uIChWdWUpIHsKICBWdWUucHJvdG90eXBlLiRGb3JtdWxhcyA9IEZvcm11bGFzOwp9OwpleHBvcnQgZGVmYXVsdCBGb3JtdWxhczs="},null]}