gs-cae-design 1.1.53 → 1.1.54
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -0
- package/lib/.gz +0 -0
- package/lib/CAEDesign.common-report.html +2 -2
- package/lib/CAEDesign.common.js +25 -25
- package/lib/CAEDesign.umd-report.html +2 -2
- package/lib/CAEDesign.umd.js +25 -25
- package/lib/CAEDesign.umd.min-report.html +2 -2
- package/lib/CAEDesign.umd.min.js +25 -25
- package/package.json +1 -1
- package/src/gsDevFx/managers/cloudMemberTransformManager.ts +128 -4
- package/src/gsDevFx/managers/datWriterManager.ts +9 -0
- package/src/gsDevFx/managers/interfaceManagers/commonInterfaceManager.ts +27 -20
- package/src/gsDevFx/objects/caeObjects/plateObject.ts +3 -0
- package/src/gsDevFx/objects/loadObjects/loadConditionObject.ts +16 -4
- package/src/gsDevFx/objects/loadObjects/loadGroupObject.ts +6 -0
- package/src/gsDevFx/viewer.ts +4 -0
- package/src/viewerWrapper/commands/aftertreatment/distortion/commandDistortion.ts +32 -28
- package/src/viewerWrapper/commands/aftertreatment/editJointLoad/commandEditJointLoad.ts +8 -1
- package/src/viewerWrapper/commands/aftertreatment/postResultCloud/commandPostResultCloud.ts +1 -1
- package/src/viewerWrapper/commands/aftertreatment/showJointCanUC/commandShowJointCanUC.ts +1 -1
- package/src/viewerWrapper/commands/moveJointByMirror/commandMoveJointByMirror.ts +4 -0
- package/types/caeDesign/src/gsDevFx/managers/cloudMemberTransformManager.d.ts +1 -0
- package/types/caeDesign/src/gsDevFx/managers/cloudMemberTransformManager.d.ts.map +1 -1
- package/types/caeDesign/src/gsDevFx/managers/datWriterManager.d.ts.map +1 -1
- package/types/caeDesign/src/gsDevFx/managers/interfaceManagers/commonInterfaceManager.d.ts +1 -1
- package/types/caeDesign/src/gsDevFx/managers/interfaceManagers/commonInterfaceManager.d.ts.map +1 -1
- package/types/caeDesign/src/gsDevFx/objects/caeObjects/plateObject.d.ts.map +1 -1
- package/types/caeDesign/src/gsDevFx/objects/loadObjects/loadConditionObject.d.ts.map +1 -1
- package/types/caeDesign/src/gsDevFx/objects/loadObjects/loadGroupObject.d.ts.map +1 -1
- package/types/caeDesign/src/gsDevFx/viewer.d.ts.map +1 -1
- package/types/caeDesign/src/viewerWrapper/commands/aftertreatment/distortion/commandDistortion.d.ts.map +1 -1
- package/types/caeDesign/src/viewerWrapper/commands/aftertreatment/editJointLoad/commandEditJointLoad.d.ts.map +1 -1
- package/types/caeDesign/src/viewerWrapper/commands/moveJointByMirror/commandMoveJointByMirror.d.ts.map +1 -1
package/lib/CAEDesign.umd.min.js
CHANGED
|
@@ -2524,7 +2524,7 @@ eval("var toString = {}.toString;\n\nmodule.exports = Array.isArray || function
|
|
|
2524
2524
|
/*! no static exports found */
|
|
2525
2525
|
/***/ (function(module, exports, __webpack_require__) {
|
|
2526
2526
|
|
|
2527
|
-
eval("// extracted by mini-css-extract-plugin\n if(false) { var cssReload; }\n //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4vZGlzdC9sb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL2NhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vcGFja2FnZXMvY2FlRGVzaWduL3NyYy9jb21wb25lbnRzL2dzLWJ1dHRvbi52dWU/
|
|
2527
|
+
eval("// extracted by mini-css-extract-plugin\n if(false) { var cssReload; }\n //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4vZGlzdC9sb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL2NhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vcGFja2FnZXMvY2FlRGVzaWduL3NyYy9jb21wb25lbnRzL2dzLWJ1dHRvbi52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD1jNTZmY2UxYSZzY29wZWQ9dHJ1ZSZsYW5nPXNjc3MuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9bbmFtZV0vLi9wYWNrYWdlcy9jYWVEZXNpZ24vc3JjL2NvbXBvbmVudHMvZ3MtYnV0dG9uLnZ1ZT80NDliIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuICAgIGlmKG1vZHVsZS5ob3QpIHtcbiAgICAgIC8vIDE3NDczMDM4ODgxOTBcbiAgICAgIHZhciBjc3NSZWxvYWQgPSByZXF1aXJlKFwiQzovRGV2ZWxvcG1lbnRzL3Z1ZS10cy1ncy1jYWUtY2xvdWQtdGVzdC0wMjE5L25vZGVfbW9kdWxlcy9taW5pLWNzcy1leHRyYWN0LXBsdWdpbi9kaXN0L2htci9ob3RNb2R1bGVSZXBsYWNlbWVudC5qc1wiKShtb2R1bGUuaWQsIHtcImhtclwiOnRydWUsXCJwdWJsaWNQYXRoXCI6XCIuL1wiLFwibG9jYWxzXCI6ZmFsc2V9KTtcbiAgICAgIG1vZHVsZS5ob3QuZGlzcG9zZShjc3NSZWxvYWQpO1xuICAgICAgbW9kdWxlLmhvdC5hY2NlcHQodW5kZWZpbmVkLCBjc3NSZWxvYWQpO1xuICAgIH1cbiAgIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGdDQUtBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/mini-css-extract-plugin/dist/loader.js?!./node_modules/css-loader/dist/cjs.js?!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/dist/cjs.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./packages/caeDesign/src/components/gs-button.vue?vue&type=style&index=0&id=c56fce1a&scoped=true&lang=scss\n");
|
|
2528
2528
|
|
|
2529
2529
|
/***/ }),
|
|
2530
2530
|
|
|
@@ -2535,7 +2535,7 @@ eval("// extracted by mini-css-extract-plugin\n if(false) { var cssReload; }\
|
|
|
2535
2535
|
/*! no static exports found */
|
|
2536
2536
|
/***/ (function(module, exports, __webpack_require__) {
|
|
2537
2537
|
|
|
2538
|
-
eval("// extracted by mini-css-extract-plugin\n if(false) { var cssReload; }\n //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4vZGlzdC9sb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL2NhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vcGFja2FnZXMvY2FlRGVzaWduL3NyYy9jb21wb25lbnRzL2dzLWNvbG9yLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTQ1MDViMTljJnNjb3BlZD10cnVlJmxhbmc9c2Nzcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1tuYW1lXS8uL3BhY2thZ2VzL2NhZURlc2lnbi9zcmMvY29tcG9uZW50cy9ncy1jb2xvci52dWU/
|
|
2538
|
+
eval("// extracted by mini-css-extract-plugin\n if(false) { var cssReload; }\n //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4vZGlzdC9sb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL2NhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vcGFja2FnZXMvY2FlRGVzaWduL3NyYy9jb21wb25lbnRzL2dzLWNvbG9yLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTQ1MDViMTljJnNjb3BlZD10cnVlJmxhbmc9c2Nzcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1tuYW1lXS8uL3BhY2thZ2VzL2NhZURlc2lnbi9zcmMvY29tcG9uZW50cy9ncy1jb2xvci52dWU/ZTEwZiJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbiAgICBpZihtb2R1bGUuaG90KSB7XG4gICAgICAvLyAxNzQ3MzAzODg4MTkxXG4gICAgICB2YXIgY3NzUmVsb2FkID0gcmVxdWlyZShcIkM6L0RldmVsb3BtZW50cy92dWUtdHMtZ3MtY2FlLWNsb3VkLXRlc3QtMDIxOS9ub2RlX21vZHVsZXMvbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4vZGlzdC9obXIvaG90TW9kdWxlUmVwbGFjZW1lbnQuanNcIikobW9kdWxlLmlkLCB7XCJobXJcIjp0cnVlLFwicHVibGljUGF0aFwiOlwiLi9cIixcImxvY2Fsc1wiOmZhbHNlfSk7XG4gICAgICBtb2R1bGUuaG90LmRpc3Bvc2UoY3NzUmVsb2FkKTtcbiAgICAgIG1vZHVsZS5ob3QuYWNjZXB0KHVuZGVmaW5lZCwgY3NzUmVsb2FkKTtcbiAgICB9XG4gICJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxnQ0FLQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/mini-css-extract-plugin/dist/loader.js?!./node_modules/css-loader/dist/cjs.js?!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/dist/cjs.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./packages/caeDesign/src/components/gs-color.vue?vue&type=style&index=0&id=4505b19c&scoped=true&lang=scss\n");
|
|
2539
2539
|
|
|
2540
2540
|
/***/ }),
|
|
2541
2541
|
|
|
@@ -2546,7 +2546,7 @@ eval("// extracted by mini-css-extract-plugin\n if(false) { var cssReload; }\
|
|
|
2546
2546
|
/*! no static exports found */
|
|
2547
2547
|
/***/ (function(module, exports, __webpack_require__) {
|
|
2548
2548
|
|
|
2549
|
-
eval("// extracted by mini-css-extract-plugin\n if(false) { var cssReload; }\n //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4vZGlzdC9sb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL2NhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vcGFja2FnZXMvY2FlRGVzaWduL3NyYy9jb21wb25lbnRzL2dzLWlucHV0LnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTY1YWU3N2NlJnNjb3BlZD10cnVlJmxhbmc9c2Nzcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1tuYW1lXS8uL3BhY2thZ2VzL2NhZURlc2lnbi9zcmMvY29tcG9uZW50cy9ncy1pbnB1dC52dWU/
|
|
2549
|
+
eval("// extracted by mini-css-extract-plugin\n if(false) { var cssReload; }\n //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4vZGlzdC9sb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL2NhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vcGFja2FnZXMvY2FlRGVzaWduL3NyYy9jb21wb25lbnRzL2dzLWlucHV0LnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTY1YWU3N2NlJnNjb3BlZD10cnVlJmxhbmc9c2Nzcy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1tuYW1lXS8uL3BhY2thZ2VzL2NhZURlc2lnbi9zcmMvY29tcG9uZW50cy9ncy1pbnB1dC52dWU/YjYxNSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbiAgICBpZihtb2R1bGUuaG90KSB7XG4gICAgICAvLyAxNzQ3MzAzODg4MTk1XG4gICAgICB2YXIgY3NzUmVsb2FkID0gcmVxdWlyZShcIkM6L0RldmVsb3BtZW50cy92dWUtdHMtZ3MtY2FlLWNsb3VkLXRlc3QtMDIxOS9ub2RlX21vZHVsZXMvbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4vZGlzdC9obXIvaG90TW9kdWxlUmVwbGFjZW1lbnQuanNcIikobW9kdWxlLmlkLCB7XCJobXJcIjp0cnVlLFwicHVibGljUGF0aFwiOlwiLi9cIixcImxvY2Fsc1wiOmZhbHNlfSk7XG4gICAgICBtb2R1bGUuaG90LmRpc3Bvc2UoY3NzUmVsb2FkKTtcbiAgICAgIG1vZHVsZS5ob3QuYWNjZXB0KHVuZGVmaW5lZCwgY3NzUmVsb2FkKTtcbiAgICB9XG4gICJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxnQ0FLQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/mini-css-extract-plugin/dist/loader.js?!./node_modules/css-loader/dist/cjs.js?!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/dist/cjs.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./packages/caeDesign/src/components/gs-input.vue?vue&type=style&index=0&id=65ae77ce&scoped=true&lang=scss\n");
|
|
2550
2550
|
|
|
2551
2551
|
/***/ }),
|
|
2552
2552
|
|
|
@@ -2557,7 +2557,7 @@ eval("// extracted by mini-css-extract-plugin\n if(false) { var cssReload; }\
|
|
|
2557
2557
|
/*! no static exports found */
|
|
2558
2558
|
/***/ (function(module, exports, __webpack_require__) {
|
|
2559
2559
|
|
|
2560
|
-
eval("// extracted by mini-css-extract-plugin\n if(false) { var cssReload; }\n //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4vZGlzdC9sb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL2NhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/
|
|
2560
|
+
eval("// extracted by mini-css-extract-plugin\n if(false) { var cssReload; }\n //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4vZGlzdC9sb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL2NhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vcGFja2FnZXMvY2FlRGVzaWduL3NyYy9jb21wb25lbnRzL2dzLWxpc3QudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9MTlhYzAyOWYmc2NvcGVkPXRydWUmbGFuZz1zY3NzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vW25hbWVdLy4vcGFja2FnZXMvY2FlRGVzaWduL3NyYy9jb21wb25lbnRzL2dzLWxpc3QudnVlPzBhMjEiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG4gICAgaWYobW9kdWxlLmhvdCkge1xuICAgICAgLy8gMTc0NzMwMzg4ODE5M1xuICAgICAgdmFyIGNzc1JlbG9hZCA9IHJlcXVpcmUoXCJDOi9EZXZlbG9wbWVudHMvdnVlLXRzLWdzLWNhZS1jbG91ZC10ZXN0LTAyMTkvbm9kZV9tb2R1bGVzL21pbmktY3NzLWV4dHJhY3QtcGx1Z2luL2Rpc3QvaG1yL2hvdE1vZHVsZVJlcGxhY2VtZW50LmpzXCIpKG1vZHVsZS5pZCwge1wiaG1yXCI6dHJ1ZSxcInB1YmxpY1BhdGhcIjpcIi4vXCIsXCJsb2NhbHNcIjpmYWxzZX0pO1xuICAgICAgbW9kdWxlLmhvdC5kaXNwb3NlKGNzc1JlbG9hZCk7XG4gICAgICBtb2R1bGUuaG90LmFjY2VwdCh1bmRlZmluZWQsIGNzc1JlbG9hZCk7XG4gICAgfVxuICAiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZ0NBS0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/mini-css-extract-plugin/dist/loader.js?!./node_modules/css-loader/dist/cjs.js?!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/dist/cjs.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./packages/caeDesign/src/components/gs-list.vue?vue&type=style&index=0&id=19ac029f&scoped=true&lang=scss\n");
|
|
2561
2561
|
|
|
2562
2562
|
/***/ }),
|
|
2563
2563
|
|
|
@@ -2568,7 +2568,7 @@ eval("// extracted by mini-css-extract-plugin\n if(false) { var cssReload; }\
|
|
|
2568
2568
|
/*! no static exports found */
|
|
2569
2569
|
/***/ (function(module, exports, __webpack_require__) {
|
|
2570
2570
|
|
|
2571
|
-
eval("// extracted by mini-css-extract-plugin\n if(false) { var cssReload; }\n //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4vZGlzdC9sb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL2NhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vcGFja2FnZXMvY2FlRGVzaWduL3NyYy9jb21wb25lbnRzL2dzLXNlbGVjdC52dWU/
|
|
2571
|
+
eval("// extracted by mini-css-extract-plugin\n if(false) { var cssReload; }\n //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4vZGlzdC9sb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL2NhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vcGFja2FnZXMvY2FlRGVzaWduL3NyYy9jb21wb25lbnRzL2dzLXNlbGVjdC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD0yNTM1MzFiZCZzY29wZWQ9dHJ1ZSZsYW5nPXNjc3MuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9bbmFtZV0vLi9wYWNrYWdlcy9jYWVEZXNpZ24vc3JjL2NvbXBvbmVudHMvZ3Mtc2VsZWN0LnZ1ZT9iNTNjIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuICAgIGlmKG1vZHVsZS5ob3QpIHtcbiAgICAgIC8vIDE3NDczMDM4ODgxOTZcbiAgICAgIHZhciBjc3NSZWxvYWQgPSByZXF1aXJlKFwiQzovRGV2ZWxvcG1lbnRzL3Z1ZS10cy1ncy1jYWUtY2xvdWQtdGVzdC0wMjE5L25vZGVfbW9kdWxlcy9taW5pLWNzcy1leHRyYWN0LXBsdWdpbi9kaXN0L2htci9ob3RNb2R1bGVSZXBsYWNlbWVudC5qc1wiKShtb2R1bGUuaWQsIHtcImhtclwiOnRydWUsXCJwdWJsaWNQYXRoXCI6XCIuL1wiLFwibG9jYWxzXCI6ZmFsc2V9KTtcbiAgICAgIG1vZHVsZS5ob3QuZGlzcG9zZShjc3NSZWxvYWQpO1xuICAgICAgbW9kdWxlLmhvdC5hY2NlcHQodW5kZWZpbmVkLCBjc3NSZWxvYWQpO1xuICAgIH1cbiAgIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGdDQUtBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/mini-css-extract-plugin/dist/loader.js?!./node_modules/css-loader/dist/cjs.js?!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/dist/cjs.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./packages/caeDesign/src/components/gs-select.vue?vue&type=style&index=0&id=253531bd&scoped=true&lang=scss\n");
|
|
2572
2572
|
|
|
2573
2573
|
/***/ }),
|
|
2574
2574
|
|
|
@@ -2579,7 +2579,7 @@ eval("// extracted by mini-css-extract-plugin\n if(false) { var cssReload; }\
|
|
|
2579
2579
|
/*! no static exports found */
|
|
2580
2580
|
/***/ (function(module, exports, __webpack_require__) {
|
|
2581
2581
|
|
|
2582
|
-
eval("// extracted by mini-css-extract-plugin\n if(false) { var cssReload; }\n //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4vZGlzdC9sb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL2NhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vcGFja2FnZXMvY2FlRGVzaWduL3NyYy9jb21wb25lbnRzL2dzLXN3aXRjaC52dWU/
|
|
2582
|
+
eval("// extracted by mini-css-extract-plugin\n if(false) { var cssReload; }\n //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4vZGlzdC9sb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL2NhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vcGFja2FnZXMvY2FlRGVzaWduL3NyYy9jb21wb25lbnRzL2dzLXN3aXRjaC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD03MzM1ZDdmNSZzY29wZWQ9dHJ1ZSZsYW5nPXNjc3MuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9bbmFtZV0vLi9wYWNrYWdlcy9jYWVEZXNpZ24vc3JjL2NvbXBvbmVudHMvZ3Mtc3dpdGNoLnZ1ZT8wNTY4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuICAgIGlmKG1vZHVsZS5ob3QpIHtcbiAgICAgIC8vIDE3NDczMDM4ODgxOTNcbiAgICAgIHZhciBjc3NSZWxvYWQgPSByZXF1aXJlKFwiQzovRGV2ZWxvcG1lbnRzL3Z1ZS10cy1ncy1jYWUtY2xvdWQtdGVzdC0wMjE5L25vZGVfbW9kdWxlcy9taW5pLWNzcy1leHRyYWN0LXBsdWdpbi9kaXN0L2htci9ob3RNb2R1bGVSZXBsYWNlbWVudC5qc1wiKShtb2R1bGUuaWQsIHtcImhtclwiOnRydWUsXCJwdWJsaWNQYXRoXCI6XCIuL1wiLFwibG9jYWxzXCI6ZmFsc2V9KTtcbiAgICAgIG1vZHVsZS5ob3QuZGlzcG9zZShjc3NSZWxvYWQpO1xuICAgICAgbW9kdWxlLmhvdC5hY2NlcHQodW5kZWZpbmVkLCBjc3NSZWxvYWQpO1xuICAgIH1cbiAgIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGdDQUtBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/mini-css-extract-plugin/dist/loader.js?!./node_modules/css-loader/dist/cjs.js?!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/dist/cjs.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./packages/caeDesign/src/components/gs-switch.vue?vue&type=style&index=0&id=7335d7f5&scoped=true&lang=scss\n");
|
|
2583
2583
|
|
|
2584
2584
|
/***/ }),
|
|
2585
2585
|
|
|
@@ -2590,7 +2590,7 @@ eval("// extracted by mini-css-extract-plugin\n if(false) { var cssReload; }\
|
|
|
2590
2590
|
/*! no static exports found */
|
|
2591
2591
|
/***/ (function(module, exports, __webpack_require__) {
|
|
2592
2592
|
|
|
2593
|
-
eval("// extracted by mini-css-extract-plugin\n if(false) { var cssReload; }\n //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4vZGlzdC9sb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL2NhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vcGFja2FnZXMvY2FlRGVzaWduL3NyYy9nc0RldkZ4L3Byb3BlcnR5Q29tcG9uZW50cy9wcm9wZXJ0eUNvbXBvbmVudC52dWU/
|
|
2593
|
+
eval("// extracted by mini-css-extract-plugin\n if(false) { var cssReload; }\n //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4vZGlzdC9sb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL2NhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vcGFja2FnZXMvY2FlRGVzaWduL3NyYy9nc0RldkZ4L3Byb3BlcnR5Q29tcG9uZW50cy9wcm9wZXJ0eUNvbXBvbmVudC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD04YjhlYjE5ZSZzY29wZWQ9dHJ1ZSZsYW5nPXNjc3MuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9bbmFtZV0vLi9wYWNrYWdlcy9jYWVEZXNpZ24vc3JjL2dzRGV2RngvcHJvcGVydHlDb21wb25lbnRzL3Byb3BlcnR5Q29tcG9uZW50LnZ1ZT80ZWJiIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuICAgIGlmKG1vZHVsZS5ob3QpIHtcbiAgICAgIC8vIDE3NDczMDM4ODYxNTBcbiAgICAgIHZhciBjc3NSZWxvYWQgPSByZXF1aXJlKFwiQzovRGV2ZWxvcG1lbnRzL3Z1ZS10cy1ncy1jYWUtY2xvdWQtdGVzdC0wMjE5L25vZGVfbW9kdWxlcy9taW5pLWNzcy1leHRyYWN0LXBsdWdpbi9kaXN0L2htci9ob3RNb2R1bGVSZXBsYWNlbWVudC5qc1wiKShtb2R1bGUuaWQsIHtcImhtclwiOnRydWUsXCJwdWJsaWNQYXRoXCI6XCIuL1wiLFwibG9jYWxzXCI6ZmFsc2V9KTtcbiAgICAgIG1vZHVsZS5ob3QuZGlzcG9zZShjc3NSZWxvYWQpO1xuICAgICAgbW9kdWxlLmhvdC5hY2NlcHQodW5kZWZpbmVkLCBjc3NSZWxvYWQpO1xuICAgIH1cbiAgIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGdDQUtBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/mini-css-extract-plugin/dist/loader.js?!./node_modules/css-loader/dist/cjs.js?!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/dist/cjs.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./packages/caeDesign/src/gsDevFx/propertyComponents/propertyComponent.vue?vue&type=style&index=0&id=8b8eb19e&scoped=true&lang=scss\n");
|
|
2594
2594
|
|
|
2595
2595
|
/***/ }),
|
|
2596
2596
|
|
|
@@ -2601,7 +2601,7 @@ eval("// extracted by mini-css-extract-plugin\n if(false) { var cssReload; }\
|
|
|
2601
2601
|
/*! no static exports found */
|
|
2602
2602
|
/***/ (function(module, exports, __webpack_require__) {
|
|
2603
2603
|
|
|
2604
|
-
eval("// extracted by mini-css-extract-plugin\n if(false) { var cssReload; }\n //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4vZGlzdC9sb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL2NhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vcGFja2FnZXMvY2FlRGVzaWduL3NyYy92aWV3ZXJXcmFwcGVyL2NvbXBvbmVudHMvbGVnZW5kLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTc4YzlmMGNmJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZS5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1tuYW1lXS8uL3BhY2thZ2VzL2NhZURlc2lnbi9zcmMvdmlld2VyV3JhcHBlci9jb21wb25lbnRzL2xlZ2VuZC52dWU/
|
|
2604
|
+
eval("// extracted by mini-css-extract-plugin\n if(false) { var cssReload; }\n //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4vZGlzdC9sb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL2NhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vcGFja2FnZXMvY2FlRGVzaWduL3NyYy92aWV3ZXJXcmFwcGVyL2NvbXBvbmVudHMvbGVnZW5kLnZ1ZT92dWUmdHlwZT1zdHlsZSZpbmRleD0wJmlkPTc4YzlmMGNmJmxhbmc9c2NzcyZzY29wZWQ9dHJ1ZS5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1tuYW1lXS8uL3BhY2thZ2VzL2NhZURlc2lnbi9zcmMvdmlld2VyV3JhcHBlci9jb21wb25lbnRzL2xlZ2VuZC52dWU/ODZhNCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbiAgICBpZihtb2R1bGUuaG90KSB7XG4gICAgICAvLyAxNzQ3MzAzODgxMjEyXG4gICAgICB2YXIgY3NzUmVsb2FkID0gcmVxdWlyZShcIkM6L0RldmVsb3BtZW50cy92dWUtdHMtZ3MtY2FlLWNsb3VkLXRlc3QtMDIxOS9ub2RlX21vZHVsZXMvbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4vZGlzdC9obXIvaG90TW9kdWxlUmVwbGFjZW1lbnQuanNcIikobW9kdWxlLmlkLCB7XCJobXJcIjp0cnVlLFwicHVibGljUGF0aFwiOlwiLi9cIixcImxvY2Fsc1wiOmZhbHNlfSk7XG4gICAgICBtb2R1bGUuaG90LmRpc3Bvc2UoY3NzUmVsb2FkKTtcbiAgICAgIG1vZHVsZS5ob3QuYWNjZXB0KHVuZGVmaW5lZCwgY3NzUmVsb2FkKTtcbiAgICB9XG4gICJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxnQ0FLQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./node_modules/mini-css-extract-plugin/dist/loader.js?!./node_modules/css-loader/dist/cjs.js?!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/dist/cjs.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./packages/caeDesign/src/viewerWrapper/components/legend.vue?vue&type=style&index=0&id=78c9f0cf&lang=scss&scoped=true\n");
|
|
2605
2605
|
|
|
2606
2606
|
/***/ }),
|
|
2607
2607
|
|
|
@@ -2612,7 +2612,7 @@ eval("// extracted by mini-css-extract-plugin\n if(false) { var cssReload; }\
|
|
|
2612
2612
|
/*! no static exports found */
|
|
2613
2613
|
/***/ (function(module, exports, __webpack_require__) {
|
|
2614
2614
|
|
|
2615
|
-
eval("// extracted by mini-css-extract-plugin\n if(false) { var cssReload; }\n //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4vZGlzdC9sb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL2NhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vcGFja2FnZXMvY2FlRGVzaWduL3NyYy92aWV3ZXJXcmFwcGVyL3BhbmVsL3BhbmVsQmluZENvbXBvbmVudC52dWU/
|
|
2615
|
+
eval("// extracted by mini-css-extract-plugin\n if(false) { var cssReload; }\n //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4vZGlzdC9sb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL2NhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vcGFja2FnZXMvY2FlRGVzaWduL3NyYy92aWV3ZXJXcmFwcGVyL3BhbmVsL3BhbmVsQmluZENvbXBvbmVudC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD0zYWE1Yzk2ZSZsYW5nPXNjc3Mmc2NvcGVkPXRydWUuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9bbmFtZV0vLi9wYWNrYWdlcy9jYWVEZXNpZ24vc3JjL3ZpZXdlcldyYXBwZXIvcGFuZWwvcGFuZWxCaW5kQ29tcG9uZW50LnZ1ZT83YWU3Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuICAgIGlmKG1vZHVsZS5ob3QpIHtcbiAgICAgIC8vIDE3NDczMDM4ODg2NTFcbiAgICAgIHZhciBjc3NSZWxvYWQgPSByZXF1aXJlKFwiQzovRGV2ZWxvcG1lbnRzL3Z1ZS10cy1ncy1jYWUtY2xvdWQtdGVzdC0wMjE5L25vZGVfbW9kdWxlcy9taW5pLWNzcy1leHRyYWN0LXBsdWdpbi9kaXN0L2htci9ob3RNb2R1bGVSZXBsYWNlbWVudC5qc1wiKShtb2R1bGUuaWQsIHtcImhtclwiOnRydWUsXCJwdWJsaWNQYXRoXCI6XCIuL1wiLFwibG9jYWxzXCI6ZmFsc2V9KTtcbiAgICAgIG1vZHVsZS5ob3QuZGlzcG9zZShjc3NSZWxvYWQpO1xuICAgICAgbW9kdWxlLmhvdC5hY2NlcHQodW5kZWZpbmVkLCBjc3NSZWxvYWQpO1xuICAgIH1cbiAgIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGdDQUtBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/mini-css-extract-plugin/dist/loader.js?!./node_modules/css-loader/dist/cjs.js?!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/dist/cjs.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./packages/caeDesign/src/viewerWrapper/panel/panelBindComponent.vue?vue&type=style&index=0&id=3aa5c96e&lang=scss&scoped=true\n");
|
|
2616
2616
|
|
|
2617
2617
|
/***/ }),
|
|
2618
2618
|
|
|
@@ -2623,7 +2623,7 @@ eval("// extracted by mini-css-extract-plugin\n if(false) { var cssReload; }\
|
|
|
2623
2623
|
/*! no static exports found */
|
|
2624
2624
|
/***/ (function(module, exports, __webpack_require__) {
|
|
2625
2625
|
|
|
2626
|
-
eval("// extracted by mini-css-extract-plugin\n if(false) { var cssReload; }\n //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4vZGlzdC9sb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL2NhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vcGFja2FnZXMvY2FlRGVzaWduL3NyYy92aWV3ZXJXcmFwcGVyL3BhbmVsL3N0cnVjdHVyZVRyZWUvaW50ZXJmYWNlU3RydWN0dXJlVHJlZS52dWU/
|
|
2626
|
+
eval("// extracted by mini-css-extract-plugin\n if(false) { var cssReload; }\n //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4vZGlzdC9sb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL2NhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vcGFja2FnZXMvY2FlRGVzaWduL3NyYy92aWV3ZXJXcmFwcGVyL3BhbmVsL3N0cnVjdHVyZVRyZWUvaW50ZXJmYWNlU3RydWN0dXJlVHJlZS52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD01MmEwMWI2OCZsYW5nPXNjc3Mmc2NvcGVkPXRydWUuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9bbmFtZV0vLi9wYWNrYWdlcy9jYWVEZXNpZ24vc3JjL3ZpZXdlcldyYXBwZXIvcGFuZWwvc3RydWN0dXJlVHJlZS9pbnRlcmZhY2VTdHJ1Y3R1cmVUcmVlLnZ1ZT83MWVhIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuICAgIGlmKG1vZHVsZS5ob3QpIHtcbiAgICAgIC8vIDE3NDczMDM4Nzk2NzlcbiAgICAgIHZhciBjc3NSZWxvYWQgPSByZXF1aXJlKFwiQzovRGV2ZWxvcG1lbnRzL3Z1ZS10cy1ncy1jYWUtY2xvdWQtdGVzdC0wMjE5L25vZGVfbW9kdWxlcy9taW5pLWNzcy1leHRyYWN0LXBsdWdpbi9kaXN0L2htci9ob3RNb2R1bGVSZXBsYWNlbWVudC5qc1wiKShtb2R1bGUuaWQsIHtcImhtclwiOnRydWUsXCJwdWJsaWNQYXRoXCI6XCIuL1wiLFwibG9jYWxzXCI6ZmFsc2V9KTtcbiAgICAgIG1vZHVsZS5ob3QuZGlzcG9zZShjc3NSZWxvYWQpO1xuICAgICAgbW9kdWxlLmhvdC5hY2NlcHQodW5kZWZpbmVkLCBjc3NSZWxvYWQpO1xuICAgIH1cbiAgIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGdDQUtBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/mini-css-extract-plugin/dist/loader.js?!./node_modules/css-loader/dist/cjs.js?!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/dist/cjs.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./packages/caeDesign/src/viewerWrapper/panel/structureTree/interfaceStructureTree.vue?vue&type=style&index=0&id=52a01b68&lang=scss&scoped=true\n");
|
|
2627
2627
|
|
|
2628
2628
|
/***/ }),
|
|
2629
2629
|
|
|
@@ -2634,7 +2634,7 @@ eval("// extracted by mini-css-extract-plugin\n if(false) { var cssReload; }\
|
|
|
2634
2634
|
/*! no static exports found */
|
|
2635
2635
|
/***/ (function(module, exports, __webpack_require__) {
|
|
2636
2636
|
|
|
2637
|
-
eval("// extracted by mini-css-extract-plugin\n if(false) { var cssReload; }\n //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4vZGlzdC9sb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL2NhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vcGFja2FnZXMvY2FlRGVzaWduL3NyYy92aWV3ZXJXcmFwcGVyL3BhbmVsL3ZpZXdQb2ludC9pbnRlcmZhY2VWaWV3UG9pbnRQYW5lbC52dWU/
|
|
2637
|
+
eval("// extracted by mini-css-extract-plugin\n if(false) { var cssReload; }\n //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4vZGlzdC9sb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL2NhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vcGFja2FnZXMvY2FlRGVzaWduL3NyYy92aWV3ZXJXcmFwcGVyL3BhbmVsL3ZpZXdQb2ludC9pbnRlcmZhY2VWaWV3UG9pbnRQYW5lbC52dWU/dnVlJnR5cGU9c3R5bGUmaW5kZXg9MCZpZD02N2UzOTUyOCZsYW5nPXNjc3Mmc2NvcGVkPXRydWUuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9bbmFtZV0vLi9wYWNrYWdlcy9jYWVEZXNpZ24vc3JjL3ZpZXdlcldyYXBwZXIvcGFuZWwvdmlld1BvaW50L2ludGVyZmFjZVZpZXdQb2ludFBhbmVsLnZ1ZT8yZTdjIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuICAgIGlmKG1vZHVsZS5ob3QpIHtcbiAgICAgIC8vIDE3NDczMDM4ODk0MjJcbiAgICAgIHZhciBjc3NSZWxvYWQgPSByZXF1aXJlKFwiQzovRGV2ZWxvcG1lbnRzL3Z1ZS10cy1ncy1jYWUtY2xvdWQtdGVzdC0wMjE5L25vZGVfbW9kdWxlcy9taW5pLWNzcy1leHRyYWN0LXBsdWdpbi9kaXN0L2htci9ob3RNb2R1bGVSZXBsYWNlbWVudC5qc1wiKShtb2R1bGUuaWQsIHtcImhtclwiOnRydWUsXCJwdWJsaWNQYXRoXCI6XCIuL1wiLFwibG9jYWxzXCI6ZmFsc2V9KTtcbiAgICAgIG1vZHVsZS5ob3QuZGlzcG9zZShjc3NSZWxvYWQpO1xuICAgICAgbW9kdWxlLmhvdC5hY2NlcHQodW5kZWZpbmVkLCBjc3NSZWxvYWQpO1xuICAgIH1cbiAgIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLGdDQUtBO0FBQ0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/mini-css-extract-plugin/dist/loader.js?!./node_modules/css-loader/dist/cjs.js?!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/dist/cjs.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./packages/caeDesign/src/viewerWrapper/panel/viewPoint/interfaceViewPointPanel.vue?vue&type=style&index=0&id=67e39528&lang=scss&scoped=true\n");
|
|
2638
2638
|
|
|
2639
2639
|
/***/ }),
|
|
2640
2640
|
|
|
@@ -2645,7 +2645,7 @@ eval("// extracted by mini-css-extract-plugin\n if(false) { var cssReload; }\
|
|
|
2645
2645
|
/*! no static exports found */
|
|
2646
2646
|
/***/ (function(module, exports, __webpack_require__) {
|
|
2647
2647
|
|
|
2648
|
-
eval("// extracted by mini-css-extract-plugin\n if(false) { var cssReload; }\n //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4vZGlzdC9sb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL2NhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/
|
|
2648
|
+
eval("// extracted by mini-css-extract-plugin\n if(false) { var cssReload; }\n //# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvbWluaS1jc3MtZXh0cmFjdC1wbHVnaW4vZGlzdC9sb2FkZXIuanM/IS4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL3Z1ZS1sb2FkZXIvbGliL2xvYWRlcnMvc3R5bGVQb3N0TG9hZGVyLmpzIS4vbm9kZV9tb2R1bGVzL3Bvc3Rjc3MtbG9hZGVyL3NyYy9pbmRleC5qcz8hLi9ub2RlX21vZHVsZXMvc2Fzcy1sb2FkZXIvZGlzdC9janMuanM/IS4vbm9kZV9tb2R1bGVzL2NhY2hlLWxvYWRlci9kaXN0L2Nqcy5qcz8hLi9ub2RlX21vZHVsZXMvdnVlLWxvYWRlci9saWIvaW5kZXguanM/IS4vcGFja2FnZXMvY2FlRGVzaWduL3NyYy92aWV3ZXJXcmFwcGVyL3ZpZXdlcldyYXBwZXIudnVlP3Z1ZSZ0eXBlPXN0eWxlJmluZGV4PTAmaWQ9MjA5YmEwY2Emc2NvcGVkPXRydWUmbGFuZz1zY3NzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vW25hbWVdLy4vcGFja2FnZXMvY2FlRGVzaWduL3NyYy92aWV3ZXJXcmFwcGVyL3ZpZXdlcldyYXBwZXIudnVlPzk1M2UiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG4gICAgaWYobW9kdWxlLmhvdCkge1xuICAgICAgLy8gMTc0NzMwMzg3OTY4MVxuICAgICAgdmFyIGNzc1JlbG9hZCA9IHJlcXVpcmUoXCJDOi9EZXZlbG9wbWVudHMvdnVlLXRzLWdzLWNhZS1jbG91ZC10ZXN0LTAyMTkvbm9kZV9tb2R1bGVzL21pbmktY3NzLWV4dHJhY3QtcGx1Z2luL2Rpc3QvaG1yL2hvdE1vZHVsZVJlcGxhY2VtZW50LmpzXCIpKG1vZHVsZS5pZCwge1wiaG1yXCI6dHJ1ZSxcInB1YmxpY1BhdGhcIjpcIi4vXCIsXCJsb2NhbHNcIjpmYWxzZX0pO1xuICAgICAgbW9kdWxlLmhvdC5kaXNwb3NlKGNzc1JlbG9hZCk7XG4gICAgICBtb2R1bGUuaG90LmFjY2VwdCh1bmRlZmluZWQsIGNzc1JlbG9hZCk7XG4gICAgfVxuICAiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsZ0NBS0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/mini-css-extract-plugin/dist/loader.js?!./node_modules/css-loader/dist/cjs.js?!./node_modules/vue-loader/lib/loaders/stylePostLoader.js!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/dist/cjs.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader/lib/index.js?!./packages/caeDesign/src/viewerWrapper/viewerWrapper.vue?vue&type=style&index=0&id=209ba0ca&scoped=true&lang=scss\n");
|
|
2649
2649
|
|
|
2650
2650
|
/***/ }),
|
|
2651
2651
|
|
|
@@ -2874,7 +2874,7 @@ eval("module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\
|
|
|
2874
2874
|
/*! exports provided: name, version, description, main, types, files, author, license, scripts, dependencies, devDependencies, default */
|
|
2875
2875
|
/***/ (function(module) {
|
|
2876
2876
|
|
|
2877
|
-
eval("module.exports = JSON.parse(\"{\\\"name\\\":\\\"gs-cae-design\\\",\\\"version\\\":\\\"1.1.
|
|
2877
|
+
eval("module.exports = JSON.parse(\"{\\\"name\\\":\\\"gs-cae-design\\\",\\\"version\\\":\\\"1.1.54\\\",\\\"description\\\":\\\"广州图石科技有限公司发布的基于gs-longan的CAE图形控件\\\",\\\"main\\\":\\\"lib/CAEDesign.umd.min.js\\\",\\\"types\\\":\\\"./types/caeDesign/src/index.d.ts\\\",\\\"files\\\":[\\\"*\\\"],\\\"author\\\":\\\"广州图石科技有限公司\\\",\\\"license\\\":\\\"ISC\\\",\\\"scripts\\\":{\\\"publish\\\":\\\"npm publish \\\",\\\"publishBeta\\\":\\\"npm publish --tag=beta\\\",\\\"publishBeta2\\\":\\\"npm publish --tag=beta2\\\",\\\"typedoc\\\":\\\"typedoc --plugin typedoc-plugin-markdown\\\"},\\\"dependencies\\\":{},\\\"devDependencies\\\":{}}\");//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9wYWNrYWdlcy9jYWVEZXNpZ24vcGFja2FnZS5qc29uLmpzIiwic291cmNlcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./packages/caeDesign/package.json\n");
|
|
2878
2878
|
|
|
2879
2879
|
/***/ }),
|
|
2880
2880
|
|
|
@@ -3943,7 +3943,7 @@ eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPAC
|
|
|
3943
3943
|
/*! no static exports found */
|
|
3944
3944
|
/***/ (function(module, exports, __webpack_require__) {
|
|
3945
3945
|
|
|
3946
|
-
eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__, exports, __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\"), __webpack_require__(/*! gs-bim-air */ \"./node_modules/gs-bim-air/lib/BimAir.umd.min.js\")], __WEBPACK_AMD_DEFINE_RESULT__ = (function (require, exports, tslib_1, gs_bim_air_1) {\n \"use strict\";\n\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n exports.CloudMemberTransformManager = void 0;\n var CloudMemberTransformManager = function (_super) {\n tslib_1.__extends(CloudMemberTransformManager, _super);\n function CloudMemberTransformManager(process) {\n return _super.call(this, process) || this;\n }\n CloudMemberTransformManager.prototype.createCloudMember = function (originMember, distances, colors, setColor, blendRenderedColor) {\n if (setColor === void 0) {\n setColor = true;\n }\n if (blendRenderedColor === void 0) {\n blendRenderedColor = true;\n }\n var members = new Array();\n if (originMember.grup) {\n var cloudMember = this.process.cloneManager.cloneObject(originMember);\n cloudMember.grup = this.process.cloneManager.cloneObject(originMember.grup);\n cloudMember.grup.id = originMember.grup.id;\n var newGrupSegments = new Array();\n var currentLength = 0;\n for (var i = 0; i < originMember.grup.grupSegments.length; i++) {\n var originMemberSegment = originMember.grup.grupSegments[i];\n var grupSegment = cloudMember.grup.grupSegments[i];\n newGrupSegments.push(grupSegment);\n if (grupSegment.taperOption === \"B\" || grupSegment.taperOption === \"E\") {\n if (setColor) {\n var color1 = this.getColorByIndex(colors, 0);\n color1[0] *= 255;\n color1[1] *= 255;\n color1[2] *= 255;\n grupSegment.startColor = color1;\n return [cloudMember];\n }\n }\n var segmentLength = originMemberSegment.segmentLength;\n if (segmentLength === 0 || segmentLength === \"\") {\n segmentLength = originMember.getUndefineSegmentLength();\n }\n currentLength = Number(currentLength.toFixed(3));\n segmentLength = Number(segmentLength.toFixed(3));\n var currentDistanceLength = currentLength;\n for (var j = 0; j < distances.length - 1; j++) {\n distances[j] = Number(distances[j].toFixed(3));\n distances[j + 1] = Number(distances[j + 1].toFixed(3));\n if (distances[j] && distances[j] > originMember.getMemberLength()) {\n continue;\n }\n if (distances[j] === distances[j + 1]) {\n continue;\n }\n if (currentLength >= distances[j] && currentLength <= distances[j + 1]) {\n if (currentLength + segmentLength <= distances[j + 1]) {\n var color1 = this.getColorByIndex(colors, j);\n var color2 = this.getColorByIndex(colors, j + 1);\n var startColor = this.colorInterpolation(distances[j], color1, distances[j + 1], color2, currentLength);\n if (setColor) {\n grupSegment.startColor = new Array();\n grupSegment.startColor[0] = startColor[0];\n grupSegment.startColor[1] = startColor[1];\n grupSegment.startColor[2] = startColor[2];\n grupSegment.startColor[3] = startColor[3];\n }\n var endColor = this.colorInterpolation(distances[j], color1, distances[j + 1], color2, currentLength + segmentLength);\n if (setColor) {\n if (blendRenderedColor) {\n grupSegment.endColor = new Array();\n grupSegment.endColor[0] = endColor[0];\n grupSegment.endColor[1] = endColor[1];\n grupSegment.endColor[2] = endColor[2];\n grupSegment.endColor[3] = endColor[3];\n } else {\n grupSegment.endColor = new Array();\n grupSegment.endColor[0] = startColor[0];\n grupSegment.endColor[1] = startColor[1];\n grupSegment.endColor[2] = startColor[2];\n grupSegment.endColor[3] = startColor[3];\n }\n }\n } else if (currentLength + segmentLength > distances[j + 1]) {\n var offset = distances[j + 1] - currentDistanceLength;\n var color1 = this.getColorByIndex(colors, j);\n var color2 = this.getColorByIndex(colors, j + 1);\n var index = newGrupSegments.length - 1;\n if (newGrupSegments[index]) {\n newGrupSegments[index].segmentLength = offset;\n var startColor = this.colorInterpolation(distances[j], color1, distances[j + 1], color2, currentLength);\n if (setColor) {\n newGrupSegments[index].startColor = new Array();\n newGrupSegments[index].startColor[0] = startColor[0];\n newGrupSegments[index].startColor[1] = startColor[1];\n newGrupSegments[index].startColor[2] = startColor[2];\n newGrupSegments[index].startColor[3] = startColor[3];\n if (blendRenderedColor) {\n newGrupSegments[index].endColor = new Array();\n newGrupSegments[index].endColor[0] = color2[0];\n newGrupSegments[index].endColor[1] = color2[1];\n newGrupSegments[index].endColor[2] = color2[2];\n newGrupSegments[index].endColor[3] = color2[3];\n } else {\n newGrupSegments[index].endColor = new Array();\n newGrupSegments[index].endColor[0] = startColor[0];\n newGrupSegments[index].endColor[1] = startColor[1];\n newGrupSegments[index].endColor[2] = startColor[2];\n newGrupSegments[index].endColor[3] = startColor[3];\n }\n }\n }\n currentDistanceLength += offset;\n if (j === distances.length - 2) {\n var cloneGrupSegment2 = originMemberSegment.clone();\n cloneGrupSegment2.segmentLength = originMember.getMemberLength() - distances[j + 1];\n newGrupSegments.push(cloneGrupSegment2);\n }\n }\n } else if (currentLength < distances[j] && currentLength + segmentLength > distances[j]) {\n var index = newGrupSegments.length - 1;\n if (currentLength + segmentLength < distances[j + 1]) {\n var cloneGrupSegment = originMemberSegment.clone();\n if (j === 0) {\n newGrupSegments[index].segmentLength = distances[j] - currentDistanceLength;\n }\n var color1 = this.getColorByIndex(colors, j);\n var color2 = this.getColorByIndex(colors, j + 1);\n if (setColor) {\n cloneGrupSegment.startColor = new Array();\n cloneGrupSegment.startColor[0] = color1[0];\n cloneGrupSegment.startColor[1] = color1[1];\n cloneGrupSegment.startColor[2] = color1[2];\n cloneGrupSegment.startColor[3] = color1[3];\n }\n var endColor = this.colorInterpolation(distances[j], color1, distances[j + 1], color2, currentLength + segmentLength);\n if (setColor) {\n if (blendRenderedColor) {\n cloneGrupSegment.endColor = new Array();\n cloneGrupSegment.endColor[0] = endColor[0];\n cloneGrupSegment.endColor[1] = endColor[1];\n cloneGrupSegment.endColor[2] = endColor[2];\n cloneGrupSegment.endColor[3] = endColor[3];\n } else {\n cloneGrupSegment.endColor = new Array();\n cloneGrupSegment.endColor[0] = color1[0];\n cloneGrupSegment.endColor[1] = color1[1];\n cloneGrupSegment.endColor[2] = color1[2];\n cloneGrupSegment.endColor[3] = color1[3];\n }\n }\n cloneGrupSegment.segmentLength = segmentLength - (distances[j] - currentLength);\n newGrupSegments.push(cloneGrupSegment);\n } else if (currentLength + segmentLength >= distances[j + 1]) {\n var cloneGrupSegment = originMemberSegment.clone();\n var color1 = this.getColorByIndex(colors, j);\n var color2 = this.getColorByIndex(colors, j + 1);\n if (setColor) {\n cloneGrupSegment.startColor = new Array();\n cloneGrupSegment.startColor[0] = color1[0];\n cloneGrupSegment.startColor[1] = color1[1];\n cloneGrupSegment.startColor[2] = color1[2];\n cloneGrupSegment.startColor[3] = color1[3];\n if (blendRenderedColor) {\n cloneGrupSegment.endColor = new Array();\n cloneGrupSegment.endColor[0] = color2[0];\n cloneGrupSegment.endColor[1] = color2[1];\n cloneGrupSegment.endColor[2] = color2[2];\n cloneGrupSegment.endColor[3] = color2[3];\n } else {\n cloneGrupSegment.endColor = new Array();\n cloneGrupSegment.endColor[0] = color1[0];\n cloneGrupSegment.endColor[1] = color1[1];\n cloneGrupSegment.endColor[2] = color1[2];\n cloneGrupSegment.endColor[3] = color1[3];\n }\n }\n cloneGrupSegment.segmentLength = distances[j + 1] - distances[j];\n currentDistanceLength += distances[j + 1] - distances[j];\n newGrupSegments.push(cloneGrupSegment);\n if (j === distances.length - 2) {\n var cloneGrupSegment2 = originMemberSegment.clone();\n cloneGrupSegment2.segmentLength = originMember.getMemberLength() - distances[j + 1];\n newGrupSegments.push(cloneGrupSegment2);\n }\n }\n }\n }\n currentLength += segmentLength;\n }\n cloudMember.grup.grupSegments = newGrupSegments;\n members.push(cloudMember);\n }\n return members;\n };\n CloudMemberTransformManager.prototype.colorInterpolation = function (dis1, color1, dis2, color2, target) {\n var color = [0, 0, 0, 1];\n var offsetR = color2[0] - color1[0];\n var offsetG = color2[1] - color1[1];\n var offsetB = color2[2] - color1[2];\n var ratio = (target - dis1) / (dis2 - dis1);\n color[0] = color1[0] + ratio * offsetR;\n color[1] = color1[1] + ratio * offsetG;\n color[2] = color1[2] + ratio * offsetB;\n color[3] = color1[3];\n return color;\n };\n CloudMemberTransformManager.prototype.getColorByIndex = function (colors, index) {\n var color = colors.slice(4 * index, 4 * (index + 1));\n return color;\n };\n return CloudMemberTransformManager;\n }(gs_bim_air_1.Longan.ProcessManagerBase);\n exports.CloudMemberTransformManager = CloudMemberTransformManager;\n}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9wYWNrYWdlcy9jYWVEZXNpZ24vc3JjL2dzRGV2RngvbWFuYWdlcnMvY2xvdWRNZW1iZXJUcmFuc2Zvcm1NYW5hZ2VyLnRzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vW25hbWVdLy4vcGFja2FnZXMvY2FlRGVzaWduL3NyYy9nc0RldkZ4L21hbmFnZXJzL2Nsb3VkTWVtYmVyVHJhbnNmb3JtTWFuYWdlci50cz9kZDg0Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvbmdhbiB9IGZyb20gXCJncy1iaW0tYWlyXCI7XG5pbXBvcnQgeyBHcnVwT2JqZWN0LCBHcnVwU2VnbWVudCB9IGZyb20gXCIuLi9vYmplY3RzL2NhZU9iamVjdHMvZ3J1cE9iamVjdFwiO1xuaW1wb3J0IHsgTWVtYmVyT2JqZWN0IH0gZnJvbSBcIi4uL29iamVjdHMvY2FlT2JqZWN0cy9tZW1iZXJPYmplY3RcIjtcblxuZXhwb3J0IGNsYXNzIENsb3VkTWVtYmVyVHJhbnNmb3JtTWFuYWdlciBleHRlbmRzIExvbmdhbi5Qcm9jZXNzTWFuYWdlckJhc2Uge1xuICBjb25zdHJ1Y3Rvcihwcm9jZXNzOiBMb25nYW4uUHJvY2Vzcykge1xuICAgIHN1cGVyKHByb2Nlc3MpO1xuICB9XG5cbiAgLyoqXG4gICAqIOmAmui/h+WOn+Wni+adhuS7tueUn+aIkOS6keWbvuaYvuekuueUqOeahOadhuS7tlxuICAgKiBAcGFyYW0gb3JpZ2luTWVtYmVyIOWOn+Wni+adhuS7tlxuICAgKiBAcGFyYW0gZGlzdGFuY2VzIOi3neemu+aVsOe7hFxuICAgKiBAcGFyYW0gY29sb3JzIOWvueW6lOeahOminOiJsuaVsOe7hCwwLTFcbiAgICogQHJldHVybnNcbiAgICovXG4gIHB1YmxpYyBjcmVhdGVDbG91ZE1lbWJlcihcbiAgICBvcmlnaW5NZW1iZXI6IE1lbWJlck9iamVjdCxcbiAgICBkaXN0YW5jZXM6IG51bWJlcltdLFxuICAgIGNvbG9yczogbnVtYmVyW10sXG4gICAgc2V0Q29sb3I6IGJvb2xlYW4gPSB0cnVlLFxuICAgIGJsZW5kUmVuZGVyZWRDb2xvcjogYm9vbGVhbiA9IHRydWVcbiAgKTogTWVtYmVyT2JqZWN0W10ge1xuICAgIGxldCBtZW1iZXJzID0gbmV3IEFycmF5PE1lbWJlck9iamVjdD4oKTtcblxuICAgIGlmIChvcmlnaW5NZW1iZXIuZ3J1cCkge1xuICAgICAgLy8g5YWL6ZqG5LiA5Liq5p2G5Lu2XG4gICAgICBsZXQgY2xvdWRNZW1iZXIgPSB0aGlzLnByb2Nlc3MuY2xvbmVNYW5hZ2VyLmNsb25lT2JqZWN0KFxuICAgICAgICBvcmlnaW5NZW1iZXJcbiAgICAgICkgYXMgTWVtYmVyT2JqZWN0O1xuICAgICAgY2xvdWRNZW1iZXIuZ3J1cCA9IHRoaXMucHJvY2Vzcy5jbG9uZU1hbmFnZXIuY2xvbmVPYmplY3QoXG4gICAgICAgIG9yaWdpbk1lbWJlci5ncnVwXG4gICAgICApIGFzIEdydXBPYmplY3Q7XG4gICAgICBjbG91ZE1lbWJlci5ncnVwLmlkID0gb3JpZ2luTWVtYmVyLmdydXAuaWQ7XG4gICAgICBsZXQgbmV3R3J1cFNlZ21lbnRzID0gbmV3IEFycmF5PEdydXBTZWdtZW50PigpO1xuXG4gICAgICAvLyDlvZPliY1ncnVwU2VnbWVudOeahOi1t+eCuei3neemuy5cbiAgICAgIGxldCBjdXJyZW50TGVuZ3RoID0gMDtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JpZ2luTWVtYmVyLmdydXAuZ3J1cFNlZ21lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIC8vXG4gICAgICAgIGxldCBvcmlnaW5NZW1iZXJTZWdtZW50ID0gb3JpZ2luTWVtYmVyLmdydXAuZ3J1cFNlZ21lbnRzW2ldO1xuICAgICAgICBsZXQgZ3J1cFNlZ21lbnQgPSBjbG91ZE1lbWJlci5ncnVwLmdydXBTZWdtZW50c1tpXTtcbiAgICAgICAgbmV3R3J1cFNlZ21lbnRzLnB1c2goZ3J1cFNlZ21lbnQpO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBncnVwU2VnbWVudC50YXBlck9wdGlvbiA9PT0gXCJCXCIgfHxcbiAgICAgICAgICBncnVwU2VnbWVudC50YXBlck9wdGlvbiA9PT0gXCJFXCJcbiAgICAgICAgKSB7XG4gICAgICAgICAgaWYoc2V0Q29sb3IpIHtcbiAgICAgICAgICAgIGxldCBjb2xvcjEgPSB0aGlzLmdldENvbG9yQnlJbmRleChjb2xvcnMsIDApO1xuICAgICAgICAgICAgY29sb3IxWzBdICo9IDI1NTtcbiAgICAgICAgICAgIGNvbG9yMVsxXSAqPSAyNTU7XG4gICAgICAgICAgICBjb2xvcjFbMl0gKj0gMjU1O1xuICAgICAgICAgICAgZ3J1cFNlZ21lbnQuc3RhcnRDb2xvciA9IGNvbG9yMTtcbiAgICAgICAgICAgIHJldHVybiBbY2xvdWRNZW1iZXJdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBzZWdtZW50TGVuZ3RoID0gb3JpZ2luTWVtYmVyU2VnbWVudC5zZWdtZW50TGVuZ3RoIGFzIGFueTtcbiAgICAgICAgaWYgKHNlZ21lbnRMZW5ndGggPT09IDAgfHwgc2VnbWVudExlbmd0aCA9PT0gXCJcIikge1xuICAgICAgICAgIHNlZ21lbnRMZW5ndGggPSBvcmlnaW5NZW1iZXIuZ2V0VW5kZWZpbmVTZWdtZW50TGVuZ3RoKCk7XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50TGVuZ3RoID0gTnVtYmVyKGN1cnJlbnRMZW5ndGgudG9GaXhlZCgzKSk7XG4gICAgICAgIHNlZ21lbnRMZW5ndGggPSBOdW1iZXIoc2VnbWVudExlbmd0aC50b0ZpeGVkKDMpKTtcblxuICAgICAgICBsZXQgY3VycmVudERpc3RhbmNlTGVuZ3RoID0gY3VycmVudExlbmd0aDtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBkaXN0YW5jZXMubGVuZ3RoIC0gMTsgaisrKSB7XG4gICAgICAgICAgZGlzdGFuY2VzW2pdID0gTnVtYmVyKGRpc3RhbmNlc1tqXS50b0ZpeGVkKDMpKTtcbiAgICAgICAgICBkaXN0YW5jZXNbaiArIDFdID0gTnVtYmVyKGRpc3RhbmNlc1tqICsgMV0udG9GaXhlZCgzKSk7XG5cbiAgICAgICAgICBpZiAoZGlzdGFuY2VzW2pdICYmIGRpc3RhbmNlc1tqXSA+IG9yaWdpbk1lbWJlci5nZXRNZW1iZXJMZW5ndGgoKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChkaXN0YW5jZXNbal0gPT09IGRpc3RhbmNlc1tqICsgMV0pIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyDljLrln5/otbfngrnlnKjmrrXlt6bovrks5Yy65Z+f57uI54K55Zyo5q615YaFLlxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGN1cnJlbnRMZW5ndGggPj0gZGlzdGFuY2VzW2pdICYmXG4gICAgICAgICAgICBjdXJyZW50TGVuZ3RoIDw9IGRpc3RhbmNlc1tqICsgMV1cbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIOWMuuWfn+WujOWFqOWMheWQq+ivpeautVxuICAgICAgICAgICAgaWYgKGN1cnJlbnRMZW5ndGggKyBzZWdtZW50TGVuZ3RoIDw9IGRpc3RhbmNlc1tqICsgMV0pIHtcbiAgICAgICAgICAgICAgLy8g6I635Y+WZFtqXeWkhOeahOminOiJsu+8jOmAmui/h+aPkuWAvOiuoeeul+WHumN1cnJlbnRMZW5ndGjlpITnmoTpopzoibLvvIzkvZzkuLpzdGFydENvbG9yLlxuICAgICAgICAgICAgICBsZXQgY29sb3IxID0gdGhpcy5nZXRDb2xvckJ5SW5kZXgoY29sb3JzLCBqKTtcbiAgICAgICAgICAgICAgbGV0IGNvbG9yMiA9IHRoaXMuZ2V0Q29sb3JCeUluZGV4KGNvbG9ycywgaiArIDEpO1xuICAgICAgICAgICAgICBsZXQgc3RhcnRDb2xvciA9IHRoaXMuY29sb3JJbnRlcnBvbGF0aW9uKFxuICAgICAgICAgICAgICAgIGRpc3RhbmNlc1tqXSxcbiAgICAgICAgICAgICAgICBjb2xvcjEsXG4gICAgICAgICAgICAgICAgZGlzdGFuY2VzW2ogKyAxXSxcbiAgICAgICAgICAgICAgICBjb2xvcjIsXG4gICAgICAgICAgICAgICAgY3VycmVudExlbmd0aFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAvLyDpopzoibLmj5LlgLwuXG4gICAgICAgICAgICAgIGlmIChzZXRDb2xvcikge1xuICAgICAgICAgICAgICAgIGdydXBTZWdtZW50LnN0YXJ0Q29sb3IgPSBuZXcgQXJyYXk8bnVtYmVyPigpO1xuICAgICAgICAgICAgICAgIGdydXBTZWdtZW50LnN0YXJ0Q29sb3JbMF0gPSBzdGFydENvbG9yWzBdO1xuICAgICAgICAgICAgICAgIGdydXBTZWdtZW50LnN0YXJ0Q29sb3JbMV0gPSBzdGFydENvbG9yWzFdO1xuICAgICAgICAgICAgICAgIGdydXBTZWdtZW50LnN0YXJ0Q29sb3JbMl0gPSBzdGFydENvbG9yWzJdO1xuICAgICAgICAgICAgICAgIGdydXBTZWdtZW50LnN0YXJ0Q29sb3JbM10gPSBzdGFydENvbG9yWzNdO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgLy8g6I635Y+WZFtqICsgMV3lpITnmoTpopzoibLvvIzpgJrov4fmj5LlgLzorqHnrpflh7pjdXJyZW50TGVuZ3RoICsgc2VnbWVudExlbmd0aOWkhOeahOminOiJsu+8jOS9nOS4umVuZENvbG9yLlxuICAgICAgICAgICAgICBsZXQgZW5kQ29sb3IgPSB0aGlzLmNvbG9ySW50ZXJwb2xhdGlvbihcbiAgICAgICAgICAgICAgICBkaXN0YW5jZXNbal0sXG4gICAgICAgICAgICAgICAgY29sb3IxLFxuICAgICAgICAgICAgICAgIGRpc3RhbmNlc1tqICsgMV0sXG4gICAgICAgICAgICAgICAgY29sb3IyLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRMZW5ndGggKyBzZWdtZW50TGVuZ3RoXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIC8vIOminOiJsuaPkuWAvC5cbiAgICAgICAgICAgICAgaWYgKHNldENvbG9yKSB7XG4gICAgICAgICAgICAgICAgaWYgKGJsZW5kUmVuZGVyZWRDb2xvcikge1xuICAgICAgICAgICAgICAgICAgZ3J1cFNlZ21lbnQuZW5kQ29sb3IgPSBuZXcgQXJyYXk8bnVtYmVyPigpO1xuICAgICAgICAgICAgICAgICAgZ3J1cFNlZ21lbnQuZW5kQ29sb3JbMF0gPSBlbmRDb2xvclswXTtcbiAgICAgICAgICAgICAgICAgIGdydXBTZWdtZW50LmVuZENvbG9yWzFdID0gZW5kQ29sb3JbMV07XG4gICAgICAgICAgICAgICAgICBncnVwU2VnbWVudC5lbmRDb2xvclsyXSA9IGVuZENvbG9yWzJdO1xuICAgICAgICAgICAgICAgICAgZ3J1cFNlZ21lbnQuZW5kQ29sb3JbM10gPSBlbmRDb2xvclszXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgZ3J1cFNlZ21lbnQuZW5kQ29sb3IgPSBuZXcgQXJyYXk8bnVtYmVyPigpO1xuICAgICAgICAgICAgICAgICAgZ3J1cFNlZ21lbnQuZW5kQ29sb3JbMF0gPSBzdGFydENvbG9yWzBdO1xuICAgICAgICAgICAgICAgICAgZ3J1cFNlZ21lbnQuZW5kQ29sb3JbMV0gPSBzdGFydENvbG9yWzFdO1xuICAgICAgICAgICAgICAgICAgZ3J1cFNlZ21lbnQuZW5kQ29sb3JbMl0gPSBzdGFydENvbG9yWzJdO1xuICAgICAgICAgICAgICAgICAgZ3J1cFNlZ21lbnQuZW5kQ29sb3JbM10gPSBzdGFydENvbG9yWzNdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50TGVuZ3RoICsgc2VnbWVudExlbmd0aCA+IGRpc3RhbmNlc1tqICsgMV0pIHtcbiAgICAgICAgICAgICAgLy8g5Yy65Z+f6ZyA6KaB6L+b6KGM5YiG5YmyLlxuICAgICAgICAgICAgICBsZXQgb2Zmc2V0ID0gZGlzdGFuY2VzW2ogKyAxXSAtIGN1cnJlbnREaXN0YW5jZUxlbmd0aDtcblxuICAgICAgICAgICAgICBsZXQgY29sb3IxID0gdGhpcy5nZXRDb2xvckJ5SW5kZXgoY29sb3JzLCBqKTtcbiAgICAgICAgICAgICAgbGV0IGNvbG9yMiA9IHRoaXMuZ2V0Q29sb3JCeUluZGV4KGNvbG9ycywgaiArIDEpO1xuXG4gICAgICAgICAgICAgIC8vIOWIhuWJsuaXtuabtOaWsOS4iuS4gOS4quWIhuauteeahOmVv+W6puWSjOminOiJsi5cbiAgICAgICAgICAgICAgbGV0IGluZGV4ID0gbmV3R3J1cFNlZ21lbnRzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgIGlmIChuZXdHcnVwU2VnbWVudHNbaW5kZXhdKSB7XG4gICAgICAgICAgICAgICAgbmV3R3J1cFNlZ21lbnRzW2luZGV4XS5zZWdtZW50TGVuZ3RoID0gb2Zmc2V0O1xuXG4gICAgICAgICAgICAgICAgbGV0IHN0YXJ0Q29sb3IgPSB0aGlzLmNvbG9ySW50ZXJwb2xhdGlvbihcbiAgICAgICAgICAgICAgICAgIGRpc3RhbmNlc1tqXSxcbiAgICAgICAgICAgICAgICAgIGNvbG9yMSxcbiAgICAgICAgICAgICAgICAgIGRpc3RhbmNlc1tqICsgMV0sXG4gICAgICAgICAgICAgICAgICBjb2xvcjIsXG4gICAgICAgICAgICAgICAgICBjdXJyZW50TGVuZ3RoXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGlmIChzZXRDb2xvcikge1xuICAgICAgICAgICAgICAgICAgbmV3R3J1cFNlZ21lbnRzW2luZGV4XS5zdGFydENvbG9yID0gbmV3IEFycmF5PG51bWJlcj4oKTtcbiAgICAgICAgICAgICAgICAgIG5ld0dydXBTZWdtZW50c1tpbmRleF0uc3RhcnRDb2xvclswXSA9IHN0YXJ0Q29sb3JbMF07XG4gICAgICAgICAgICAgICAgICBuZXdHcnVwU2VnbWVudHNbaW5kZXhdLnN0YXJ0Q29sb3JbMV0gPSBzdGFydENvbG9yWzFdO1xuICAgICAgICAgICAgICAgICAgbmV3R3J1cFNlZ21lbnRzW2luZGV4XS5zdGFydENvbG9yWzJdID0gc3RhcnRDb2xvclsyXTtcbiAgICAgICAgICAgICAgICAgIG5ld0dydXBTZWdtZW50c1tpbmRleF0uc3RhcnRDb2xvclszXSA9IHN0YXJ0Q29sb3JbM107XG5cbiAgICAgICAgICAgICAgICAgIGlmIChibGVuZFJlbmRlcmVkQ29sb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3R3J1cFNlZ21lbnRzW2luZGV4XS5lbmRDb2xvciA9IG5ldyBBcnJheTxudW1iZXI+KCk7XG4gICAgICAgICAgICAgICAgICAgIG5ld0dydXBTZWdtZW50c1tpbmRleF0uZW5kQ29sb3JbMF0gPSBjb2xvcjJbMF07XG4gICAgICAgICAgICAgICAgICAgIG5ld0dydXBTZWdtZW50c1tpbmRleF0uZW5kQ29sb3JbMV0gPSBjb2xvcjJbMV07XG4gICAgICAgICAgICAgICAgICAgIG5ld0dydXBTZWdtZW50c1tpbmRleF0uZW5kQ29sb3JbMl0gPSBjb2xvcjJbMl07XG4gICAgICAgICAgICAgICAgICAgIG5ld0dydXBTZWdtZW50c1tpbmRleF0uZW5kQ29sb3JbM10gPSBjb2xvcjJbM107XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBuZXdHcnVwU2VnbWVudHNbaW5kZXhdLmVuZENvbG9yID0gbmV3IEFycmF5PG51bWJlcj4oKTtcbiAgICAgICAgICAgICAgICAgICAgbmV3R3J1cFNlZ21lbnRzW2luZGV4XS5lbmRDb2xvclswXSA9IHN0YXJ0Q29sb3JbMF07XG4gICAgICAgICAgICAgICAgICAgIG5ld0dydXBTZWdtZW50c1tpbmRleF0uZW5kQ29sb3JbMV0gPSBzdGFydENvbG9yWzFdO1xuICAgICAgICAgICAgICAgICAgICBuZXdHcnVwU2VnbWVudHNbaW5kZXhdLmVuZENvbG9yWzJdID0gc3RhcnRDb2xvclsyXTtcbiAgICAgICAgICAgICAgICAgICAgbmV3R3J1cFNlZ21lbnRzW2luZGV4XS5lbmRDb2xvclszXSA9IHN0YXJ0Q29sb3JbM107XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY3VycmVudERpc3RhbmNlTGVuZ3RoICs9IG9mZnNldDtcblxuICAgICAgICAgICAgICBpZiAoaiA9PT0gZGlzdGFuY2VzLmxlbmd0aCAtIDIpIHtcbiAgICAgICAgICAgICAgICBsZXQgY2xvbmVHcnVwU2VnbWVudDIgPSBvcmlnaW5NZW1iZXJTZWdtZW50LmNsb25lKCk7XG4gICAgICAgICAgICAgICAgY2xvbmVHcnVwU2VnbWVudDIuc2VnbWVudExlbmd0aCA9XG4gICAgICAgICAgICAgICAgICBvcmlnaW5NZW1iZXIuZ2V0TWVtYmVyTGVuZ3RoKCkgLSBkaXN0YW5jZXNbaiArIDFdO1xuICAgICAgICAgICAgICAgIG5ld0dydXBTZWdtZW50cy5wdXNoKGNsb25lR3J1cFNlZ21lbnQyKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAvLyDljLrln5/otbfngrnlnKjmrrXotbfngrnlj7PovrnvvIzljLrln5/nu4jngrnlnKjmrrXlhoUuXG4gICAgICAgICAgICBjdXJyZW50TGVuZ3RoIDwgZGlzdGFuY2VzW2pdICYmXG4gICAgICAgICAgICBjdXJyZW50TGVuZ3RoICsgc2VnbWVudExlbmd0aCA+IGRpc3RhbmNlc1tqXVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gbGV0IGNvbG9yMSA9IHRoaXMuZ2V0Q29sb3JCeUluZGV4KGNvbG9ycywgaik7XG4gICAgICAgICAgICBsZXQgaW5kZXggPSBuZXdHcnVwU2VnbWVudHMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIC8vIGlmIChuZXdHcnVwU2VnbWVudHNbaW5kZXhdKSB7XG4gICAgICAgICAgICAvLyAgIGlmIChzZXRDb2xvciAmJiBibGVuZFJlbmRlcmVkQ29sb3IpIHtcbiAgICAgICAgICAgIC8vICAgICBuZXdHcnVwU2VnbWVudHNbaW5kZXhdLmVuZENvbG9yID0gbmV3IEFycmF5PG51bWJlcj4oKTtcbiAgICAgICAgICAgIC8vICAgICBuZXdHcnVwU2VnbWVudHNbaW5kZXhdLmVuZENvbG9yWzBdID0gY29sb3IxWzBdO1xuICAgICAgICAgICAgLy8gICAgIG5ld0dydXBTZWdtZW50c1tpbmRleF0uZW5kQ29sb3JbMV0gPSBjb2xvcjFbMV07XG4gICAgICAgICAgICAvLyAgICAgbmV3R3J1cFNlZ21lbnRzW2luZGV4XS5lbmRDb2xvclsyXSA9IGNvbG9yMVsyXTtcbiAgICAgICAgICAgIC8vICAgICBuZXdHcnVwU2VnbWVudHNbaW5kZXhdLmVuZENvbG9yWzNdID0gY29sb3IxWzNdO1xuICAgICAgICAgICAgLy8gICB9XG4gICAgICAgICAgICAvLyB9XG5cbiAgICAgICAgICAgIC8vIOWMuuWfn+epv+i/h+autVxuICAgICAgICAgICAgaWYgKGN1cnJlbnRMZW5ndGggKyBzZWdtZW50TGVuZ3RoIDwgZGlzdGFuY2VzW2ogKyAxXSkge1xuICAgICAgICAgICAgICBsZXQgY2xvbmVHcnVwU2VnbWVudCA9IG9yaWdpbk1lbWJlclNlZ21lbnQuY2xvbmUoKTtcbiAgICAgICAgICAgICAgaWYgKGogPT09IDApIHtcbiAgICAgICAgICAgICAgICBuZXdHcnVwU2VnbWVudHNbaW5kZXhdLnNlZ21lbnRMZW5ndGggPVxuICAgICAgICAgICAgICAgICAgZGlzdGFuY2VzW2pdIC0gY3VycmVudERpc3RhbmNlTGVuZ3RoO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGxldCBjb2xvcjEgPSB0aGlzLmdldENvbG9yQnlJbmRleChjb2xvcnMsIGopO1xuICAgICAgICAgICAgICBsZXQgY29sb3IyID0gdGhpcy5nZXRDb2xvckJ5SW5kZXgoY29sb3JzLCBqICsgMSk7XG5cbiAgICAgICAgICAgICAgaWYgKHNldENvbG9yKSB7XG4gICAgICAgICAgICAgICAgY2xvbmVHcnVwU2VnbWVudC5zdGFydENvbG9yID0gbmV3IEFycmF5PG51bWJlcj4oKTtcbiAgICAgICAgICAgICAgICBjbG9uZUdydXBTZWdtZW50LnN0YXJ0Q29sb3JbMF0gPSBjb2xvcjFbMF07XG4gICAgICAgICAgICAgICAgY2xvbmVHcnVwU2VnbWVudC5zdGFydENvbG9yWzFdID0gY29sb3IxWzFdO1xuICAgICAgICAgICAgICAgIGNsb25lR3J1cFNlZ21lbnQuc3RhcnRDb2xvclsyXSA9IGNvbG9yMVsyXTtcbiAgICAgICAgICAgICAgICBjbG9uZUdydXBTZWdtZW50LnN0YXJ0Q29sb3JbM10gPSBjb2xvcjFbM107XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBsZXQgZW5kQ29sb3IgPSB0aGlzLmNvbG9ySW50ZXJwb2xhdGlvbihcbiAgICAgICAgICAgICAgICBkaXN0YW5jZXNbal0sXG4gICAgICAgICAgICAgICAgY29sb3IxLFxuICAgICAgICAgICAgICAgIGRpc3RhbmNlc1tqICsgMV0sXG4gICAgICAgICAgICAgICAgY29sb3IyLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRMZW5ndGggKyBzZWdtZW50TGVuZ3RoXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgaWYgKHNldENvbG9yKSB7XG4gICAgICAgICAgICAgICAgaWYgKGJsZW5kUmVuZGVyZWRDb2xvcikge1xuICAgICAgICAgICAgICAgICAgY2xvbmVHcnVwU2VnbWVudC5lbmRDb2xvciA9IG5ldyBBcnJheTxudW1iZXI+KCk7XG4gICAgICAgICAgICAgICAgICBjbG9uZUdydXBTZWdtZW50LmVuZENvbG9yWzBdID0gZW5kQ29sb3JbMF07XG4gICAgICAgICAgICAgICAgICBjbG9uZUdydXBTZWdtZW50LmVuZENvbG9yWzFdID0gZW5kQ29sb3JbMV07XG4gICAgICAgICAgICAgICAgICBjbG9uZUdydXBTZWdtZW50LmVuZENvbG9yWzJdID0gZW5kQ29sb3JbMl07XG4gICAgICAgICAgICAgICAgICBjbG9uZUdydXBTZWdtZW50LmVuZENvbG9yWzNdID0gZW5kQ29sb3JbM107XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIGNsb25lR3J1cFNlZ21lbnQuZW5kQ29sb3IgPSBuZXcgQXJyYXk8bnVtYmVyPigpO1xuICAgICAgICAgICAgICAgICAgY2xvbmVHcnVwU2VnbWVudC5lbmRDb2xvclswXSA9IGNvbG9yMVswXTtcbiAgICAgICAgICAgICAgICAgIGNsb25lR3J1cFNlZ21lbnQuZW5kQ29sb3JbMV0gPSBjb2xvcjFbMV07XG4gICAgICAgICAgICAgICAgICBjbG9uZUdydXBTZWdtZW50LmVuZENvbG9yWzJdID0gY29sb3IxWzJdO1xuICAgICAgICAgICAgICAgICAgY2xvbmVHcnVwU2VnbWVudC5lbmRDb2xvclszXSA9IGNvbG9yMVszXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBjbG9uZUdydXBTZWdtZW50LnNlZ21lbnRMZW5ndGggPVxuICAgICAgICAgICAgICAgIHNlZ21lbnRMZW5ndGggLSAoZGlzdGFuY2VzW2pdIC0gY3VycmVudExlbmd0aCk7XG5cbiAgICAgICAgICAgICAgbmV3R3J1cFNlZ21lbnRzLnB1c2goY2xvbmVHcnVwU2VnbWVudCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRMZW5ndGggKyBzZWdtZW50TGVuZ3RoID49IGRpc3RhbmNlc1tqICsgMV0pIHtcbiAgICAgICAgICAgICAgbGV0IGNsb25lR3J1cFNlZ21lbnQgPSBvcmlnaW5NZW1iZXJTZWdtZW50LmNsb25lKCk7XG4gICAgICAgICAgICAgIC8vIOWMuuWfn+WcqOauteWGhS5cbiAgICAgICAgICAgICAgbGV0IGNvbG9yMSA9IHRoaXMuZ2V0Q29sb3JCeUluZGV4KGNvbG9ycywgaik7XG4gICAgICAgICAgICAgIGxldCBjb2xvcjIgPSB0aGlzLmdldENvbG9yQnlJbmRleChjb2xvcnMsIGogKyAxKTtcblxuICAgICAgICAgICAgICBpZiAoc2V0Q29sb3IpIHtcbiAgICAgICAgICAgICAgICBjbG9uZUdydXBTZWdtZW50LnN0YXJ0Q29sb3IgPSBuZXcgQXJyYXk8bnVtYmVyPigpO1xuICAgICAgICAgICAgICAgIGNsb25lR3J1cFNlZ21lbnQuc3RhcnRDb2xvclswXSA9IGNvbG9yMVswXTtcbiAgICAgICAgICAgICAgICBjbG9uZUdydXBTZWdtZW50LnN0YXJ0Q29sb3JbMV0gPSBjb2xvcjFbMV07XG4gICAgICAgICAgICAgICAgY2xvbmVHcnVwU2VnbWVudC5zdGFydENvbG9yWzJdID0gY29sb3IxWzJdO1xuICAgICAgICAgICAgICAgIGNsb25lR3J1cFNlZ21lbnQuc3RhcnRDb2xvclszXSA9IGNvbG9yMVszXTtcblxuICAgICAgICAgICAgICAgIGlmIChibGVuZFJlbmRlcmVkQ29sb3IpIHtcbiAgICAgICAgICAgICAgICAgIGNsb25lR3J1cFNlZ21lbnQuZW5kQ29sb3IgPSBuZXcgQXJyYXk8bnVtYmVyPigpO1xuICAgICAgICAgICAgICAgICAgY2xvbmVHcnVwU2VnbWVudC5lbmRDb2xvclswXSA9IGNvbG9yMlswXTtcbiAgICAgICAgICAgICAgICAgIGNsb25lR3J1cFNlZ21lbnQuZW5kQ29sb3JbMV0gPSBjb2xvcjJbMV07XG4gICAgICAgICAgICAgICAgICBjbG9uZUdydXBTZWdtZW50LmVuZENvbG9yWzJdID0gY29sb3IyWzJdO1xuICAgICAgICAgICAgICAgICAgY2xvbmVHcnVwU2VnbWVudC5lbmRDb2xvclszXSA9IGNvbG9yMlszXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgY2xvbmVHcnVwU2VnbWVudC5lbmRDb2xvciA9IG5ldyBBcnJheTxudW1iZXI+KCk7XG4gICAgICAgICAgICAgICAgICBjbG9uZUdydXBTZWdtZW50LmVuZENvbG9yWzBdID0gY29sb3IxWzBdO1xuICAgICAgICAgICAgICAgICAgY2xvbmVHcnVwU2VnbWVudC5lbmRDb2xvclsxXSA9IGNvbG9yMVsxXTtcbiAgICAgICAgICAgICAgICAgIGNsb25lR3J1cFNlZ21lbnQuZW5kQ29sb3JbMl0gPSBjb2xvcjFbMl07XG4gICAgICAgICAgICAgICAgICBjbG9uZUdydXBTZWdtZW50LmVuZENvbG9yWzNdID0gY29sb3IxWzNdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNsb25lR3J1cFNlZ21lbnQuc2VnbWVudExlbmd0aCA9IGRpc3RhbmNlc1tqICsgMV0gLSBkaXN0YW5jZXNbal07XG4gICAgICAgICAgICAgIGN1cnJlbnREaXN0YW5jZUxlbmd0aCArPSBkaXN0YW5jZXNbaiArIDFdIC0gZGlzdGFuY2VzW2pdO1xuICAgICAgICAgICAgICBuZXdHcnVwU2VnbWVudHMucHVzaChjbG9uZUdydXBTZWdtZW50KTtcblxuICAgICAgICAgICAgICBpZiAoaiA9PT0gZGlzdGFuY2VzLmxlbmd0aCAtIDIpIHtcbiAgICAgICAgICAgICAgICBsZXQgY2xvbmVHcnVwU2VnbWVudDIgPSBvcmlnaW5NZW1iZXJTZWdtZW50LmNsb25lKCk7XG4gICAgICAgICAgICAgICAgY2xvbmVHcnVwU2VnbWVudDIuc2VnbWVudExlbmd0aCA9XG4gICAgICAgICAgICAgICAgICBvcmlnaW5NZW1iZXIuZ2V0TWVtYmVyTGVuZ3RoKCkgLSBkaXN0YW5jZXNbaiArIDFdO1xuICAgICAgICAgICAgICAgIG5ld0dydXBTZWdtZW50cy5wdXNoKGNsb25lR3J1cFNlZ21lbnQyKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnRMZW5ndGggKz0gc2VnbWVudExlbmd0aDtcbiAgICAgIH1cblxuICAgICAgY2xvdWRNZW1iZXIuZ3J1cC5ncnVwU2VnbWVudHMgPSBuZXdHcnVwU2VnbWVudHM7XG4gICAgICBtZW1iZXJzLnB1c2goY2xvdWRNZW1iZXIpO1xuICAgIH1cblxuICAgIHJldHVybiBtZW1iZXJzO1xuICB9XG5cbiAgLyoqXG4gICAqIOminOiJsuaPkuWAvC5cbiAgICogQHBhcmFtIGRpczFcbiAgICogQHBhcmFtIGNvbG9yMVxuICAgKiBAcGFyYW0gZGlzMlxuICAgKiBAcGFyYW0gY29sb3IyXG4gICAqIEBwYXJhbSB0YXJnZXRcbiAgICogQHJldHVybnNcbiAgICovXG4gIGNvbG9ySW50ZXJwb2xhdGlvbihcbiAgICBkaXMxOiBudW1iZXIsXG4gICAgY29sb3IxOiBudW1iZXJbXSxcbiAgICBkaXMyOiBudW1iZXIsXG4gICAgY29sb3IyOiBudW1iZXJbXSxcbiAgICB0YXJnZXQ6IG51bWJlclxuICApOiBudW1iZXJbXSB7XG4gICAgLy9cbiAgICBsZXQgY29sb3IgPSBbMCwgMCwgMCwgMV07XG5cbiAgICBsZXQgb2Zmc2V0UiA9IGNvbG9yMlswXSAtIGNvbG9yMVswXTtcbiAgICBsZXQgb2Zmc2V0RyA9IGNvbG9yMlsxXSAtIGNvbG9yMVsxXTtcbiAgICBsZXQgb2Zmc2V0QiA9IGNvbG9yMlsyXSAtIGNvbG9yMVsyXTtcblxuICAgIGxldCByYXRpbyA9ICh0YXJnZXQgLSBkaXMxKSAvIChkaXMyIC0gZGlzMSk7XG4gICAgY29sb3JbMF0gPSBjb2xvcjFbMF0gKyByYXRpbyAqIG9mZnNldFI7XG4gICAgY29sb3JbMV0gPSBjb2xvcjFbMV0gKyByYXRpbyAqIG9mZnNldEc7XG4gICAgY29sb3JbMl0gPSBjb2xvcjFbMl0gKyByYXRpbyAqIG9mZnNldEI7XG4gICAgY29sb3JbM10gPSBjb2xvcjFbM107XG5cbiAgICByZXR1cm4gY29sb3I7XG4gIH1cblxuICBnZXRDb2xvckJ5SW5kZXgoY29sb3JzOiBudW1iZXJbXSwgaW5kZXg6IG51bWJlcikge1xuICAgIC8vXG4gICAgbGV0IGNvbG9yID0gY29sb3JzLnNsaWNlKDQgKiBpbmRleCwgNCAqIChpbmRleCArIDEpKTtcbiAgICByZXR1cm4gY29sb3I7XG4gIH1cblxuICAvLyAvKipcbiAgLy8gICog6YCa6L+H5Y6f5aeL5p2G5Lu255Sf5oiQ5LqR5Zu+5pi+56S655So55qE5p2G5Lu2XG4gIC8vICAqIEBwYXJhbSBvcmlnaW5NZW1iZXIg5Y6f5aeL5p2G5Lu2XG4gIC8vICAqIEBwYXJhbSBkaXN0YW5jZXMg6Led56a75pWw57uEXG4gIC8vICAqIEBwYXJhbSBjb2xvcnMg5a+55bqU55qE6aKc6Imy5pWw57uEXG4gIC8vICAqIEByZXR1cm5zXG4gIC8vICAqL1xuICAvLyBwdWJsaWMgY3JlYXRlQ2xvdWRNZW1iZXIoXG4gIC8vICAgb3JpZ2luTWVtYmVyOiBNZW1iZXJPYmplY3QsXG4gIC8vICAgZGlzdGFuY2VzOiBudW1iZXJbXSxcbiAgLy8gICBjb2xvcnM6IG51bWJlcltdXG4gIC8vICk6IE1lbWJlck9iamVjdCB7XG4gIC8vICAgLy8g5YWL6ZqG5LiA5Liq5p2G5Lu2XG4gIC8vICAgbGV0IGNsb3VkTWVtYmVyID0gdGhpcy5wcm9jZXNzLmNsb25lTWFuYWdlci5jbG9uZU9iamVjdChcbiAgLy8gICAgIG9yaWdpbk1lbWJlclxuICAvLyAgICkgYXMgTWVtYmVyT2JqZWN0O1xuXG4gIC8vICAgLy8g5YWL6ZqG5p2G5Lu25oiq6Z2i57uEXG4gIC8vICAgbGV0IGdydXBPYmplY3Q6IEdydXBPYmplY3QgPSBjbG91ZE1lbWJlci5ncnVwO1xuICAvLyAgIGxldCBjbG91ZEdydXBPYmplY3QgPSB0aGlzLnByb2Nlc3MuY2xvbmVNYW5hZ2VyLmNsb25lT2JqZWN0KFxuICAvLyAgICAgZ3J1cE9iamVjdFxuICAvLyAgICkgYXMgR3J1cE9iamVjdDtcbiAgLy8gICBjbG91ZE1lbWJlci5ncnVwID0gY2xvdWRHcnVwT2JqZWN0O1xuXG4gIC8vICAgLy8g6YeN572u5YWL6ZqG5p2G5Lu25oiq6Z2i57uE55qE5YiG5q6177yM5Zyo5YW25ZCO6YeN5paw6LWL5YC8LlxuICAvLyAgIGNsb3VkR3J1cE9iamVjdC5ncnVwU2VnbWVudHMgPSBuZXcgQXJyYXk8R3J1cFNlZ21lbnQ+KCk7XG5cbiAgLy8gICBpZiAoZ3J1cE9iamVjdC5ncnVwU2VnbWVudHMubGVuZ3RoID09PSAxKSB7XG4gIC8vICAgICBsZXQgZGF0YSA9IGdydXBPYmplY3QuZ3J1cFNlZ21lbnRzWzBdO1xuICAvLyAgICAgLy8g5qC55o2uZGlzdGFuY2Vz5ZKMY29sb3Jz77yM5p6E5bu65p2G5Lu25oiq6Z2i57uE55qE5YiG5q61LlxuICAvLyAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaXN0YW5jZXMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gIC8vICAgICAgIGxldCBuZXdHcnVwU2VnbWVudCA9IG5ldyBHcnVwU2VnbWVudCgpO1xuXG4gIC8vICAgICAgIG5ld0dydXBTZWdtZW50LnNlY3Rpb24gPSBkYXRhLnNlY3Rpb247XG4gIC8vICAgICAgIG5ld0dydXBTZWdtZW50LnRhcGVyT3B0aW9uID0gZGF0YS50YXBlck9wdGlvbjtcbiAgLy8gICAgICAgbmV3R3J1cFNlZ21lbnQudHViT3V0ZXJEaWFtZXRlciA9IGRhdGEudHViT3V0ZXJEaWFtZXRlcjtcbiAgLy8gICAgICAgbmV3R3J1cFNlZ21lbnQudHViV2FsbFRoaWNrbmVzcyA9IGRhdGEudHViV2FsbFRoaWNrbmVzcztcblxuICAvLyAgICAgICBuZXdHcnVwU2VnbWVudC5zZWdtZW50TGVuZ3RoID0gZGlzdGFuY2VzW2kgKyAxXSAtIGRpc3RhbmNlc1tpXTtcblxuICAvLyAgICAgICAvLyBuZXdHcnVwU2VnbWVudC5zdGFydENvbG9yID0gbmV3IEFycmF5PG51bWJlcj4oXG4gIC8vICAgICAgIC8vICAgY29sb3JzWzQgKiBpICsgMF0sXG4gIC8vICAgICAgIC8vICAgY29sb3JzWzQgKiBpICsgMV0sXG4gIC8vICAgICAgIC8vICAgY29sb3JzWzQgKiBpICsgMl0sXG4gIC8vICAgICAgIC8vICAgY29sb3JzWzQgKiBpICsgM11cbiAgLy8gICAgICAgLy8gKTtcblxuICAvLyAgICAgICAvLyBuZXdHcnVwU2VnbWVudC5lbmRDb2xvciA9IG5ldyBBcnJheTxudW1iZXI+KFxuICAvLyAgICAgICAvLyAgIGNvbG9yc1s0ICogKGkgKyAxKSArIDBdLFxuICAvLyAgICAgICAvLyAgIGNvbG9yc1s0ICogKGkgKyAxKSArIDFdLFxuICAvLyAgICAgICAvLyAgIGNvbG9yc1s0ICogKGkgKyAxKSArIDJdLFxuICAvLyAgICAgICAvLyAgIGNvbG9yc1s0ICogKGkgKyAxKSArIDNdXG4gIC8vICAgICAgIC8vICk7XG5cbiAgLy8gICAgICAgY2xvdWRHcnVwT2JqZWN0LmdydXBTZWdtZW50cy5wdXNoKG5ld0dydXBTZWdtZW50KTtcbiAgLy8gICAgIH1cbiAgLy8gICB9IGVsc2Uge1xuICAvLyAgICAgY2xvdWRNZW1iZXIgPSBudWxsO1xuICAvLyAgIH1cblxuICAvLyAgIHJldHVybiBjbG91ZE1lbWJlcjtcbiAgLy8gfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBSUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQVNBO0FBSUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFFQTtBQUVBO0FBR0E7QUFHQTtBQUNBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUlBO0FBQ0E7QUFDQTs7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBR0E7QUFLQTtBQUVBO0FBQ0E7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFJQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUVBO0FBRUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBS0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTs7O0FBR0E7QUFNQTtBQVlBO0FBQ0E7QUFDQTtBQUNBOztBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBSUE7QUFHQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFJQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7QUFNQTs7QUFHQTtBQUNBOztBQUdBO0FBQ0E7QUFXQTtBQVFBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQWdFQTtBQUFBO0FBdFlBOztBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./packages/caeDesign/src/gsDevFx/managers/cloudMemberTransformManager.ts\n");
|
|
3946
|
+
eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__, exports, __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\"), __webpack_require__(/*! gs-bim-air */ \"./node_modules/gs-bim-air/lib/BimAir.umd.min.js\"), __webpack_require__(/*! ../objects/caeObjects/sections/tubSectionObject */ \"./packages/caeDesign/src/gsDevFx/objects/caeObjects/sections/tubSectionObject.ts\")], __WEBPACK_AMD_DEFINE_RESULT__ = (function (require, exports, tslib_1, gs_bim_air_1, tubSectionObject_1) {\n \"use strict\";\n\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n exports.CloudMemberTransformManager = void 0;\n var CloudMemberTransformManager = function (_super) {\n tslib_1.__extends(CloudMemberTransformManager, _super);\n function CloudMemberTransformManager(process) {\n return _super.call(this, process) || this;\n }\n CloudMemberTransformManager.prototype.createCloudMember = function (originMember, distances, colors, setColor, blendRenderedColor) {\n if (setColor === void 0) {\n setColor = true;\n }\n if (blendRenderedColor === void 0) {\n blendRenderedColor = true;\n }\n var members = new Array();\n if (originMember.grup) {\n var cloudMember = this.process.cloneManager.cloneObject(originMember);\n cloudMember.grup = this.process.cloneManager.cloneObject(originMember.grup);\n cloudMember.grup.id = originMember.grup.id;\n var newGrupSegments = new Array();\n var currentLength = 0;\n for (var i = 0; i < originMember.grup.grupSegments.length; i++) {\n var curIndex = i;\n var grupSegments = cloudMember.grup.grupSegments;\n var originMemberSegment = originMember.grup.grupSegments[i];\n var grupSegment = cloudMember.grup.grupSegments[i];\n newGrupSegments.push(grupSegment);\n if (grupSegment.taperOption === \"B\" || grupSegment.taperOption === \"E\") {\n if (setColor) {\n var color1 = this.getColorByIndex(colors, 0);\n color1[0] *= 255;\n color1[1] *= 255;\n color1[2] *= 255;\n grupSegment.startColor = color1;\n return [cloudMember];\n }\n }\n var segmentLength = originMemberSegment.segmentLength;\n if (segmentLength === 0 || segmentLength === \"\") {\n segmentLength = originMember.getUndefineSegmentLength();\n }\n currentLength = Number(currentLength.toFixed(3));\n segmentLength = Number(segmentLength.toFixed(3));\n var currentDistanceLength = currentLength;\n for (var j = 0; j < distances.length - 1; j++) {\n distances[j] = Number(distances[j].toFixed(3));\n distances[j + 1] = Number(distances[j + 1].toFixed(3));\n if (distances[j] && distances[j] > originMember.getMemberLength()) {\n continue;\n }\n if (distances[j] === distances[j + 1]) {\n continue;\n }\n if (currentLength >= distances[j] && currentLength <= distances[j + 1]) {\n if (currentLength + segmentLength <= distances[j + 1]) {\n var color1 = this.getColorByIndex(colors, j);\n var color2 = this.getColorByIndex(colors, j + 1);\n var startColor = this.colorInterpolation(distances[j], color1, distances[j + 1], color2, currentLength);\n if (setColor) {\n grupSegment.startColor = new Array();\n grupSegment.startColor[0] = startColor[0];\n grupSegment.startColor[1] = startColor[1];\n grupSegment.startColor[2] = startColor[2];\n grupSegment.startColor[3] = startColor[3];\n }\n var endColor = this.colorInterpolation(distances[j], color1, distances[j + 1], color2, currentLength + segmentLength);\n if (setColor) {\n if (blendRenderedColor) {\n grupSegment.endColor = new Array();\n grupSegment.endColor[0] = endColor[0];\n grupSegment.endColor[1] = endColor[1];\n grupSegment.endColor[2] = endColor[2];\n grupSegment.endColor[3] = endColor[3];\n } else {\n grupSegment.endColor = new Array();\n grupSegment.endColor[0] = startColor[0];\n grupSegment.endColor[1] = startColor[1];\n grupSegment.endColor[2] = startColor[2];\n grupSegment.endColor[3] = startColor[3];\n }\n }\n } else if (currentLength + segmentLength > distances[j + 1]) {\n var offset = distances[j + 1] - currentDistanceLength;\n var color1 = this.getColorByIndex(colors, j);\n var color2 = this.getColorByIndex(colors, j + 1);\n var index = newGrupSegments.length - 1;\n if (newGrupSegments[index]) {\n newGrupSegments[index].segmentLength = offset;\n this.processConSection(grupSegments, curIndex, newGrupSegments[index], 0, distances[j + 1] - currentLength, segmentLength);\n var startColor = this.colorInterpolation(distances[j], color1, distances[j + 1], color2, currentLength);\n if (setColor) {\n newGrupSegments[index].startColor = new Array();\n newGrupSegments[index].startColor[0] = startColor[0];\n newGrupSegments[index].startColor[1] = startColor[1];\n newGrupSegments[index].startColor[2] = startColor[2];\n newGrupSegments[index].startColor[3] = startColor[3];\n if (blendRenderedColor) {\n newGrupSegments[index].endColor = new Array();\n newGrupSegments[index].endColor[0] = color2[0];\n newGrupSegments[index].endColor[1] = color2[1];\n newGrupSegments[index].endColor[2] = color2[2];\n newGrupSegments[index].endColor[3] = color2[3];\n } else {\n newGrupSegments[index].endColor = new Array();\n newGrupSegments[index].endColor[0] = startColor[0];\n newGrupSegments[index].endColor[1] = startColor[1];\n newGrupSegments[index].endColor[2] = startColor[2];\n newGrupSegments[index].endColor[3] = startColor[3];\n }\n }\n }\n currentDistanceLength += offset;\n if (j === distances.length - 2) {\n var cloneGrupSegment2 = originMemberSegment.clone();\n cloneGrupSegment2.segmentLength = originMember.getMemberLength() - distances[j + 1];\n newGrupSegments.push(cloneGrupSegment2);\n this.processConSection(grupSegments, curIndex, cloneGrupSegment2, distances[j + 1] - currentLength, segmentLength - (distances[j + 1] - currentLength), segmentLength);\n }\n }\n } else if (currentLength < distances[j] && currentLength + segmentLength > distances[j]) {\n var index = newGrupSegments.length - 1;\n if (currentLength + segmentLength < distances[j + 1]) {\n var cloneGrupSegment = originMemberSegment.clone();\n if (j === 0) {\n newGrupSegments[index].segmentLength = distances[j] - currentDistanceLength;\n }\n var color1 = this.getColorByIndex(colors, j);\n var color2 = this.getColorByIndex(colors, j + 1);\n if (setColor) {\n cloneGrupSegment.startColor = new Array();\n cloneGrupSegment.startColor[0] = color1[0];\n cloneGrupSegment.startColor[1] = color1[1];\n cloneGrupSegment.startColor[2] = color1[2];\n cloneGrupSegment.startColor[3] = color1[3];\n }\n var endColor = this.colorInterpolation(distances[j], color1, distances[j + 1], color2, currentLength + segmentLength);\n if (setColor) {\n if (blendRenderedColor) {\n cloneGrupSegment.endColor = new Array();\n cloneGrupSegment.endColor[0] = endColor[0];\n cloneGrupSegment.endColor[1] = endColor[1];\n cloneGrupSegment.endColor[2] = endColor[2];\n cloneGrupSegment.endColor[3] = endColor[3];\n } else {\n cloneGrupSegment.endColor = new Array();\n cloneGrupSegment.endColor[0] = color1[0];\n cloneGrupSegment.endColor[1] = color1[1];\n cloneGrupSegment.endColor[2] = color1[2];\n cloneGrupSegment.endColor[3] = color1[3];\n }\n }\n cloneGrupSegment.segmentLength = segmentLength - (distances[j] - currentLength);\n this.processConSection(grupSegments, curIndex, cloneGrupSegment, distances[j] - currentLength, currentLength + segmentLength - currentLength, segmentLength);\n newGrupSegments.push(cloneGrupSegment);\n } else if (currentLength + segmentLength >= distances[j + 1]) {\n var cloneGrupSegment = originMemberSegment.clone();\n var color1 = this.getColorByIndex(colors, j);\n var color2 = this.getColorByIndex(colors, j + 1);\n if (setColor) {\n cloneGrupSegment.startColor = new Array();\n cloneGrupSegment.startColor[0] = color1[0];\n cloneGrupSegment.startColor[1] = color1[1];\n cloneGrupSegment.startColor[2] = color1[2];\n cloneGrupSegment.startColor[3] = color1[3];\n if (blendRenderedColor) {\n cloneGrupSegment.endColor = new Array();\n cloneGrupSegment.endColor[0] = color2[0];\n cloneGrupSegment.endColor[1] = color2[1];\n cloneGrupSegment.endColor[2] = color2[2];\n cloneGrupSegment.endColor[3] = color2[3];\n } else {\n cloneGrupSegment.endColor = new Array();\n cloneGrupSegment.endColor[0] = color1[0];\n cloneGrupSegment.endColor[1] = color1[1];\n cloneGrupSegment.endColor[2] = color1[2];\n cloneGrupSegment.endColor[3] = color1[3];\n }\n }\n cloneGrupSegment.segmentLength = distances[j + 1] - distances[j];\n currentDistanceLength += distances[j + 1] - distances[j];\n this.processConSection(grupSegments, curIndex, cloneGrupSegment, distances[j] - currentLength, distances[j + 1] - currentLength, segmentLength);\n newGrupSegments.push(cloneGrupSegment);\n if (j === distances.length - 2) {\n var cloneGrupSegment2 = originMemberSegment.clone();\n cloneGrupSegment2.segmentLength = originMember.getMemberLength() - distances[j + 1];\n newGrupSegments.push(cloneGrupSegment2);\n this.processConSection(grupSegments, curIndex, cloneGrupSegment2, distances[j + 1] - currentLength, currentLength + segmentLength - currentLength, segmentLength);\n }\n }\n }\n }\n currentLength += segmentLength;\n }\n cloudMember.grup.grupSegments = newGrupSegments;\n members.push(cloudMember);\n }\n return members;\n };\n CloudMemberTransformManager.prototype.processConSection = function (grupSegments, index, cloneGrupSegment, startOffset, endOffset, segmentLength) {\n var order = true;\n if (cloneGrupSegment.section && cloneGrupSegment.section.crossSectionType === \"CON\") {\n var beforeGrupSeg = grupSegments[index - 1];\n var afterGrupSeg = grupSegments[index + 1];\n var beforeOD = -1;\n if (beforeGrupSeg) {\n if (!beforeGrupSeg.section) {\n beforeOD = beforeGrupSeg.tubOuterDiameter;\n } else if (beforeGrupSeg.section instanceof tubSectionObject_1.TubSectionObject) {\n beforeOD = beforeGrupSeg.section.outsideRadius;\n }\n }\n var afterOD = -1;\n if (afterGrupSeg) {\n if (!afterGrupSeg.section) {\n afterOD = afterGrupSeg.tubOuterDiameter;\n } else if (afterGrupSeg.section instanceof tubSectionObject_1.TubSectionObject) {\n afterOD = afterGrupSeg.section.outsideRadius;\n }\n }\n var section = cloneGrupSegment.section;\n var newSection = this.process.cloneManager.cloneObject(section);\n newSection.name = (0, gs_bim_air_1.uuid)();\n var largeOD = Number(newSection.largeOD);\n var smallOD = Number(newSection.smallOD);\n if (afterOD != -1) {\n if (Math.abs(largeOD - afterOD) < 0.001) {\n order = false;\n }\n } else if (beforeOD != -1) {\n if (Math.abs(smallOD - beforeOD) < 0.001) {\n order = false;\n }\n }\n var offset = largeOD - smallOD;\n if (order) {\n newSection.largeOD = largeOD - startOffset / segmentLength * offset;\n newSection.smallOD = largeOD - endOffset / segmentLength * offset;\n } else {\n newSection.largeOD = smallOD + endOffset / segmentLength * offset;\n newSection.smallOD = smallOD + startOffset / segmentLength * offset;\n }\n cloneGrupSegment.section = newSection;\n var process = this.process;\n process.addRenderObject(process.caeRenderObjectTreeManager.sectionInsNode, newSection);\n }\n };\n CloudMemberTransformManager.prototype.colorInterpolation = function (dis1, color1, dis2, color2, target) {\n var color = [0, 0, 0, 1];\n var offsetR = color2[0] - color1[0];\n var offsetG = color2[1] - color1[1];\n var offsetB = color2[2] - color1[2];\n var ratio = (target - dis1) / (dis2 - dis1);\n color[0] = color1[0] + ratio * offsetR;\n color[1] = color1[1] + ratio * offsetG;\n color[2] = color1[2] + ratio * offsetB;\n color[3] = color1[3];\n return color;\n };\n CloudMemberTransformManager.prototype.getColorByIndex = function (colors, index) {\n var color = colors.slice(4 * index, 4 * (index + 1));\n return color;\n };\n return CloudMemberTransformManager;\n }(gs_bim_air_1.Longan.ProcessManagerBase);\n exports.CloudMemberTransformManager = CloudMemberTransformManager;\n}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9wYWNrYWdlcy9jYWVEZXNpZ24vc3JjL2dzRGV2RngvbWFuYWdlcnMvY2xvdWRNZW1iZXJUcmFuc2Zvcm1NYW5hZ2VyLnRzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vW25hbWVdLy4vcGFja2FnZXMvY2FlRGVzaWduL3NyYy9nc0RldkZ4L21hbmFnZXJzL2Nsb3VkTWVtYmVyVHJhbnNmb3JtTWFuYWdlci50cz9kZDg0Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvbmdhbiwgdXVpZCB9IGZyb20gXCJncy1iaW0tYWlyXCI7XG5pbXBvcnQgeyBHcnVwT2JqZWN0LCBHcnVwU2VnbWVudCB9IGZyb20gXCIuLi9vYmplY3RzL2NhZU9iamVjdHMvZ3J1cE9iamVjdFwiO1xuaW1wb3J0IHsgTWVtYmVyT2JqZWN0IH0gZnJvbSBcIi4uL29iamVjdHMvY2FlT2JqZWN0cy9tZW1iZXJPYmplY3RcIjtcbmltcG9ydCB7IENvblNlY3Rpb25PYmplY3QgfSBmcm9tIFwiLi4vb2JqZWN0cy9jYWVPYmplY3RzL3NlY3Rpb25zL2NvblNlY3Rpb25PYmplY3RcIjtcbmltcG9ydCB7IFByb2Nlc3MgfSBmcm9tIFwiLi4vcHJvY2Vzc1wiO1xuaW1wb3J0IHsgVHViU2VjdGlvbk9iamVjdCB9IGZyb20gXCIuLi9vYmplY3RzL2NhZU9iamVjdHMvc2VjdGlvbnMvdHViU2VjdGlvbk9iamVjdFwiO1xuXG5leHBvcnQgY2xhc3MgQ2xvdWRNZW1iZXJUcmFuc2Zvcm1NYW5hZ2VyIGV4dGVuZHMgTG9uZ2FuLlByb2Nlc3NNYW5hZ2VyQmFzZSB7XG4gIGNvbnN0cnVjdG9yKHByb2Nlc3M6IExvbmdhbi5Qcm9jZXNzKSB7XG4gICAgc3VwZXIocHJvY2Vzcyk7XG4gIH1cblxuICAvKipcbiAgICog6YCa6L+H5Y6f5aeL5p2G5Lu255Sf5oiQ5LqR5Zu+5pi+56S655So55qE5p2G5Lu2XG4gICAqIEBwYXJhbSBvcmlnaW5NZW1iZXIg5Y6f5aeL5p2G5Lu2XG4gICAqIEBwYXJhbSBkaXN0YW5jZXMg6Led56a75pWw57uEXG4gICAqIEBwYXJhbSBjb2xvcnMg5a+55bqU55qE6aKc6Imy5pWw57uELDAtMVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgcHVibGljIGNyZWF0ZUNsb3VkTWVtYmVyKFxuICAgIG9yaWdpbk1lbWJlcjogTWVtYmVyT2JqZWN0LFxuICAgIGRpc3RhbmNlczogbnVtYmVyW10sXG4gICAgY29sb3JzOiBudW1iZXJbXSxcbiAgICBzZXRDb2xvcjogYm9vbGVhbiA9IHRydWUsXG4gICAgYmxlbmRSZW5kZXJlZENvbG9yOiBib29sZWFuID0gdHJ1ZVxuICApOiBNZW1iZXJPYmplY3RbXSB7XG4gICAgbGV0IG1lbWJlcnMgPSBuZXcgQXJyYXk8TWVtYmVyT2JqZWN0PigpO1xuXG4gICAgaWYgKG9yaWdpbk1lbWJlci5ncnVwKSB7XG4gICAgICAvLyDlhYvpmobkuIDkuKrmnYbku7ZcbiAgICAgIGxldCBjbG91ZE1lbWJlciA9IHRoaXMucHJvY2Vzcy5jbG9uZU1hbmFnZXIuY2xvbmVPYmplY3QoXG4gICAgICAgIG9yaWdpbk1lbWJlclxuICAgICAgKSBhcyBNZW1iZXJPYmplY3Q7XG4gICAgICBjbG91ZE1lbWJlci5ncnVwID0gdGhpcy5wcm9jZXNzLmNsb25lTWFuYWdlci5jbG9uZU9iamVjdChcbiAgICAgICAgb3JpZ2luTWVtYmVyLmdydXBcbiAgICAgICkgYXMgR3J1cE9iamVjdDtcbiAgICAgIGNsb3VkTWVtYmVyLmdydXAuaWQgPSBvcmlnaW5NZW1iZXIuZ3J1cC5pZDtcbiAgICAgIGxldCBuZXdHcnVwU2VnbWVudHMgPSBuZXcgQXJyYXk8R3J1cFNlZ21lbnQ+KCk7XG5cbiAgICAgIC8vIOW9k+WJjWdydXBTZWdtZW5055qE6LW354K56Led56a7LlxuICAgICAgbGV0IGN1cnJlbnRMZW5ndGggPSAwO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcmlnaW5NZW1iZXIuZ3J1cC5ncnVwU2VnbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgLy9cbiAgICAgICAgbGV0IGN1ckluZGV4ID0gaTtcbiAgICAgICAgbGV0IGdydXBTZWdtZW50cyA9IGNsb3VkTWVtYmVyLmdydXAuZ3J1cFNlZ21lbnRzO1xuICAgICAgICBsZXQgb3JpZ2luTWVtYmVyU2VnbWVudCA9IG9yaWdpbk1lbWJlci5ncnVwLmdydXBTZWdtZW50c1tpXTtcbiAgICAgICAgbGV0IGdydXBTZWdtZW50ID0gY2xvdWRNZW1iZXIuZ3J1cC5ncnVwU2VnbWVudHNbaV07XG4gICAgICAgIG5ld0dydXBTZWdtZW50cy5wdXNoKGdydXBTZWdtZW50KTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgZ3J1cFNlZ21lbnQudGFwZXJPcHRpb24gPT09IFwiQlwiIHx8XG4gICAgICAgICAgZ3J1cFNlZ21lbnQudGFwZXJPcHRpb24gPT09IFwiRVwiXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChzZXRDb2xvcikge1xuICAgICAgICAgICAgbGV0IGNvbG9yMSA9IHRoaXMuZ2V0Q29sb3JCeUluZGV4KGNvbG9ycywgMCk7XG4gICAgICAgICAgICBjb2xvcjFbMF0gKj0gMjU1O1xuICAgICAgICAgICAgY29sb3IxWzFdICo9IDI1NTtcbiAgICAgICAgICAgIGNvbG9yMVsyXSAqPSAyNTU7XG4gICAgICAgICAgICBncnVwU2VnbWVudC5zdGFydENvbG9yID0gY29sb3IxO1xuICAgICAgICAgICAgcmV0dXJuIFtjbG91ZE1lbWJlcl07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHNlZ21lbnRMZW5ndGggPSBvcmlnaW5NZW1iZXJTZWdtZW50LnNlZ21lbnRMZW5ndGggYXMgYW55O1xuICAgICAgICBpZiAoc2VnbWVudExlbmd0aCA9PT0gMCB8fCBzZWdtZW50TGVuZ3RoID09PSBcIlwiKSB7XG4gICAgICAgICAgc2VnbWVudExlbmd0aCA9IG9yaWdpbk1lbWJlci5nZXRVbmRlZmluZVNlZ21lbnRMZW5ndGgoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnRMZW5ndGggPSBOdW1iZXIoY3VycmVudExlbmd0aC50b0ZpeGVkKDMpKTtcbiAgICAgICAgc2VnbWVudExlbmd0aCA9IE51bWJlcihzZWdtZW50TGVuZ3RoLnRvRml4ZWQoMykpO1xuXG4gICAgICAgIGxldCBjdXJyZW50RGlzdGFuY2VMZW5ndGggPSBjdXJyZW50TGVuZ3RoO1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGRpc3RhbmNlcy5sZW5ndGggLSAxOyBqKyspIHtcbiAgICAgICAgICBkaXN0YW5jZXNbal0gPSBOdW1iZXIoZGlzdGFuY2VzW2pdLnRvRml4ZWQoMykpO1xuICAgICAgICAgIGRpc3RhbmNlc1tqICsgMV0gPSBOdW1iZXIoZGlzdGFuY2VzW2ogKyAxXS50b0ZpeGVkKDMpKTtcblxuICAgICAgICAgIGlmIChkaXN0YW5jZXNbal0gJiYgZGlzdGFuY2VzW2pdID4gb3JpZ2luTWVtYmVyLmdldE1lbWJlckxlbmd0aCgpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGRpc3RhbmNlc1tqXSA9PT0gZGlzdGFuY2VzW2ogKyAxXSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIOWMuuWfn+i1t+eCueWcqOauteW3pui+uVxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGN1cnJlbnRMZW5ndGggPj0gZGlzdGFuY2VzW2pdICYmXG4gICAgICAgICAgICBjdXJyZW50TGVuZ3RoIDw9IGRpc3RhbmNlc1tqICsgMV1cbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIOWMuuWfn+WujOWFqOWMheWQq+ivpeautVxuICAgICAgICAgICAgaWYgKGN1cnJlbnRMZW5ndGggKyBzZWdtZW50TGVuZ3RoIDw9IGRpc3RhbmNlc1tqICsgMV0pIHtcbiAgICAgICAgICAgICAgLy8g6I635Y+WZFtqXeWkhOeahOminOiJsu+8jOmAmui/h+aPkuWAvOiuoeeul+WHumN1cnJlbnRMZW5ndGjlpITnmoTpopzoibLvvIzkvZzkuLpzdGFydENvbG9yLlxuICAgICAgICAgICAgICBsZXQgY29sb3IxID0gdGhpcy5nZXRDb2xvckJ5SW5kZXgoY29sb3JzLCBqKTtcbiAgICAgICAgICAgICAgbGV0IGNvbG9yMiA9IHRoaXMuZ2V0Q29sb3JCeUluZGV4KGNvbG9ycywgaiArIDEpO1xuICAgICAgICAgICAgICBsZXQgc3RhcnRDb2xvciA9IHRoaXMuY29sb3JJbnRlcnBvbGF0aW9uKFxuICAgICAgICAgICAgICAgIGRpc3RhbmNlc1tqXSxcbiAgICAgICAgICAgICAgICBjb2xvcjEsXG4gICAgICAgICAgICAgICAgZGlzdGFuY2VzW2ogKyAxXSxcbiAgICAgICAgICAgICAgICBjb2xvcjIsXG4gICAgICAgICAgICAgICAgY3VycmVudExlbmd0aFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAvLyDpopzoibLmj5LlgLwuXG4gICAgICAgICAgICAgIGlmIChzZXRDb2xvcikge1xuICAgICAgICAgICAgICAgIGdydXBTZWdtZW50LnN0YXJ0Q29sb3IgPSBuZXcgQXJyYXk8bnVtYmVyPigpO1xuICAgICAgICAgICAgICAgIGdydXBTZWdtZW50LnN0YXJ0Q29sb3JbMF0gPSBzdGFydENvbG9yWzBdO1xuICAgICAgICAgICAgICAgIGdydXBTZWdtZW50LnN0YXJ0Q29sb3JbMV0gPSBzdGFydENvbG9yWzFdO1xuICAgICAgICAgICAgICAgIGdydXBTZWdtZW50LnN0YXJ0Q29sb3JbMl0gPSBzdGFydENvbG9yWzJdO1xuICAgICAgICAgICAgICAgIGdydXBTZWdtZW50LnN0YXJ0Q29sb3JbM10gPSBzdGFydENvbG9yWzNdO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgLy8g6I635Y+WZFtqICsgMV3lpITnmoTpopzoibLvvIzpgJrov4fmj5LlgLzorqHnrpflh7pjdXJyZW50TGVuZ3RoICsgc2VnbWVudExlbmd0aOWkhOeahOminOiJsu+8jOS9nOS4umVuZENvbG9yLlxuICAgICAgICAgICAgICBsZXQgZW5kQ29sb3IgPSB0aGlzLmNvbG9ySW50ZXJwb2xhdGlvbihcbiAgICAgICAgICAgICAgICBkaXN0YW5jZXNbal0sXG4gICAgICAgICAgICAgICAgY29sb3IxLFxuICAgICAgICAgICAgICAgIGRpc3RhbmNlc1tqICsgMV0sXG4gICAgICAgICAgICAgICAgY29sb3IyLFxuICAgICAgICAgICAgICAgIGN1cnJlbnRMZW5ndGggKyBzZWdtZW50TGVuZ3RoXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIC8vIOminOiJsuaPkuWAvC5cbiAgICAgICAgICAgICAgaWYgKHNldENvbG9yKSB7XG4gICAgICAgICAgICAgICAgaWYgKGJsZW5kUmVuZGVyZWRDb2xvcikge1xuICAgICAgICAgICAgICAgICAgZ3J1cFNlZ21lbnQuZW5kQ29sb3IgPSBuZXcgQXJyYXk8bnVtYmVyPigpO1xuICAgICAgICAgICAgICAgICAgZ3J1cFNlZ21lbnQuZW5kQ29sb3JbMF0gPSBlbmRDb2xvclswXTtcbiAgICAgICAgICAgICAgICAgIGdydXBTZWdtZW50LmVuZENvbG9yWzFdID0gZW5kQ29sb3JbMV07XG4gICAgICAgICAgICAgICAgICBncnVwU2VnbWVudC5lbmRDb2xvclsyXSA9IGVuZENvbG9yWzJdO1xuICAgICAgICAgICAgICAgICAgZ3J1cFNlZ21lbnQuZW5kQ29sb3JbM10gPSBlbmRDb2xvclszXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgZ3J1cFNlZ21lbnQuZW5kQ29sb3IgPSBuZXcgQXJyYXk8bnVtYmVyPigpO1xuICAgICAgICAgICAgICAgICAgZ3J1cFNlZ21lbnQuZW5kQ29sb3JbMF0gPSBzdGFydENvbG9yWzBdO1xuICAgICAgICAgICAgICAgICAgZ3J1cFNlZ21lbnQuZW5kQ29sb3JbMV0gPSBzdGFydENvbG9yWzFdO1xuICAgICAgICAgICAgICAgICAgZ3J1cFNlZ21lbnQuZW5kQ29sb3JbMl0gPSBzdGFydENvbG9yWzJdO1xuICAgICAgICAgICAgICAgICAgZ3J1cFNlZ21lbnQuZW5kQ29sb3JbM10gPSBzdGFydENvbG9yWzNdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50TGVuZ3RoICsgc2VnbWVudExlbmd0aCA+IGRpc3RhbmNlc1tqICsgMV0pIHtcbiAgICAgICAgICAgICAgLy8g5Yy65Z+f6ZyA6KaB6L+b6KGM5YiG5YmyLlxuICAgICAgICAgICAgICBsZXQgb2Zmc2V0ID0gZGlzdGFuY2VzW2ogKyAxXSAtIGN1cnJlbnREaXN0YW5jZUxlbmd0aDtcblxuICAgICAgICAgICAgICBsZXQgY29sb3IxID0gdGhpcy5nZXRDb2xvckJ5SW5kZXgoY29sb3JzLCBqKTtcbiAgICAgICAgICAgICAgbGV0IGNvbG9yMiA9IHRoaXMuZ2V0Q29sb3JCeUluZGV4KGNvbG9ycywgaiArIDEpO1xuXG4gICAgICAgICAgICAgIC8vIOWIhuWJsuaXtuabtOaWsOS4iuS4gOS4quWIhuauteeahOmVv+W6puWSjOminOiJsi5cbiAgICAgICAgICAgICAgbGV0IGluZGV4ID0gbmV3R3J1cFNlZ21lbnRzLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgIGlmIChuZXdHcnVwU2VnbWVudHNbaW5kZXhdKSB7XG4gICAgICAgICAgICAgICAgbmV3R3J1cFNlZ21lbnRzW2luZGV4XS5zZWdtZW50TGVuZ3RoID0gb2Zmc2V0O1xuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc0NvblNlY3Rpb24oXG4gICAgICAgICAgICAgICAgICBncnVwU2VnbWVudHMsXG4gICAgICAgICAgICAgICAgICBjdXJJbmRleCxcbiAgICAgICAgICAgICAgICAgIG5ld0dydXBTZWdtZW50c1tpbmRleF0sXG4gICAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgICAgZGlzdGFuY2VzW2ogKyAxXSAtIGN1cnJlbnRMZW5ndGgsXG4gICAgICAgICAgICAgICAgICBzZWdtZW50TGVuZ3RoXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIGxldCBzdGFydENvbG9yID0gdGhpcy5jb2xvckludGVycG9sYXRpb24oXG4gICAgICAgICAgICAgICAgICBkaXN0YW5jZXNbal0sXG4gICAgICAgICAgICAgICAgICBjb2xvcjEsXG4gICAgICAgICAgICAgICAgICBkaXN0YW5jZXNbaiArIDFdLFxuICAgICAgICAgICAgICAgICAgY29sb3IyLFxuICAgICAgICAgICAgICAgICAgY3VycmVudExlbmd0aFxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBpZiAoc2V0Q29sb3IpIHtcbiAgICAgICAgICAgICAgICAgIG5ld0dydXBTZWdtZW50c1tpbmRleF0uc3RhcnRDb2xvciA9IG5ldyBBcnJheTxudW1iZXI+KCk7XG4gICAgICAgICAgICAgICAgICBuZXdHcnVwU2VnbWVudHNbaW5kZXhdLnN0YXJ0Q29sb3JbMF0gPSBzdGFydENvbG9yWzBdO1xuICAgICAgICAgICAgICAgICAgbmV3R3J1cFNlZ21lbnRzW2luZGV4XS5zdGFydENvbG9yWzFdID0gc3RhcnRDb2xvclsxXTtcbiAgICAgICAgICAgICAgICAgIG5ld0dydXBTZWdtZW50c1tpbmRleF0uc3RhcnRDb2xvclsyXSA9IHN0YXJ0Q29sb3JbMl07XG4gICAgICAgICAgICAgICAgICBuZXdHcnVwU2VnbWVudHNbaW5kZXhdLnN0YXJ0Q29sb3JbM10gPSBzdGFydENvbG9yWzNdO1xuXG4gICAgICAgICAgICAgICAgICBpZiAoYmxlbmRSZW5kZXJlZENvbG9yKSB7XG4gICAgICAgICAgICAgICAgICAgIG5ld0dydXBTZWdtZW50c1tpbmRleF0uZW5kQ29sb3IgPSBuZXcgQXJyYXk8bnVtYmVyPigpO1xuICAgICAgICAgICAgICAgICAgICBuZXdHcnVwU2VnbWVudHNbaW5kZXhdLmVuZENvbG9yWzBdID0gY29sb3IyWzBdO1xuICAgICAgICAgICAgICAgICAgICBuZXdHcnVwU2VnbWVudHNbaW5kZXhdLmVuZENvbG9yWzFdID0gY29sb3IyWzFdO1xuICAgICAgICAgICAgICAgICAgICBuZXdHcnVwU2VnbWVudHNbaW5kZXhdLmVuZENvbG9yWzJdID0gY29sb3IyWzJdO1xuICAgICAgICAgICAgICAgICAgICBuZXdHcnVwU2VnbWVudHNbaW5kZXhdLmVuZENvbG9yWzNdID0gY29sb3IyWzNdO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbmV3R3J1cFNlZ21lbnRzW2luZGV4XS5lbmRDb2xvciA9IG5ldyBBcnJheTxudW1iZXI+KCk7XG4gICAgICAgICAgICAgICAgICAgIG5ld0dydXBTZWdtZW50c1tpbmRleF0uZW5kQ29sb3JbMF0gPSBzdGFydENvbG9yWzBdO1xuICAgICAgICAgICAgICAgICAgICBuZXdHcnVwU2VnbWVudHNbaW5kZXhdLmVuZENvbG9yWzFdID0gc3RhcnRDb2xvclsxXTtcbiAgICAgICAgICAgICAgICAgICAgbmV3R3J1cFNlZ21lbnRzW2luZGV4XS5lbmRDb2xvclsyXSA9IHN0YXJ0Q29sb3JbMl07XG4gICAgICAgICAgICAgICAgICAgIG5ld0dydXBTZWdtZW50c1tpbmRleF0uZW5kQ29sb3JbM10gPSBzdGFydENvbG9yWzNdO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGN1cnJlbnREaXN0YW5jZUxlbmd0aCArPSBvZmZzZXQ7XG5cbiAgICAgICAgICAgICAgaWYgKGogPT09IGRpc3RhbmNlcy5sZW5ndGggLSAyKSB7XG4gICAgICAgICAgICAgICAgbGV0IGNsb25lR3J1cFNlZ21lbnQyID0gb3JpZ2luTWVtYmVyU2VnbWVudC5jbG9uZSgpO1xuICAgICAgICAgICAgICAgIGNsb25lR3J1cFNlZ21lbnQyLnNlZ21lbnRMZW5ndGggPVxuICAgICAgICAgICAgICAgICAgb3JpZ2luTWVtYmVyLmdldE1lbWJlckxlbmd0aCgpIC0gZGlzdGFuY2VzW2ogKyAxXTtcbiAgICAgICAgICAgICAgICBuZXdHcnVwU2VnbWVudHMucHVzaChjbG9uZUdydXBTZWdtZW50Mik7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NDb25TZWN0aW9uKFxuICAgICAgICAgICAgICAgICAgZ3J1cFNlZ21lbnRzLFxuICAgICAgICAgICAgICAgICAgY3VySW5kZXgsXG4gICAgICAgICAgICAgICAgICBjbG9uZUdydXBTZWdtZW50MixcbiAgICAgICAgICAgICAgICAgIGRpc3RhbmNlc1tqICsgMV0gLSBjdXJyZW50TGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgc2VnbWVudExlbmd0aCAtIChkaXN0YW5jZXNbaiArIDFdIC0gY3VycmVudExlbmd0aCksXG4gICAgICAgICAgICAgICAgICBzZWdtZW50TGVuZ3RoXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAvLyDljLrln5/otbfngrnlnKjmrrXotbfngrnlj7PovrlcbiAgICAgICAgICAgIGN1cnJlbnRMZW5ndGggPCBkaXN0YW5jZXNbal0gJiZcbiAgICAgICAgICAgIGN1cnJlbnRMZW5ndGggKyBzZWdtZW50TGVuZ3RoID4gZGlzdGFuY2VzW2pdXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBsZXQgY29sb3IxID0gdGhpcy5nZXRDb2xvckJ5SW5kZXgoY29sb3JzLCBqKTtcbiAgICAgICAgICAgIGxldCBpbmRleCA9IG5ld0dydXBTZWdtZW50cy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgLy8gaWYgKG5ld0dydXBTZWdtZW50c1tpbmRleF0pIHtcbiAgICAgICAgICAgIC8vICAgaWYgKHNldENvbG9yICYmIGJsZW5kUmVuZGVyZWRDb2xvcikge1xuICAgICAgICAgICAgLy8gICAgIG5ld0dydXBTZWdtZW50c1tpbmRleF0uZW5kQ29sb3IgPSBuZXcgQXJyYXk8bnVtYmVyPigpO1xuICAgICAgICAgICAgLy8gICAgIG5ld0dydXBTZWdtZW50c1tpbmRleF0uZW5kQ29sb3JbMF0gPSBjb2xvcjFbMF07XG4gICAgICAgICAgICAvLyAgICAgbmV3R3J1cFNlZ21lbnRzW2luZGV4XS5lbmRDb2xvclsxXSA9IGNvbG9yMVsxXTtcbiAgICAgICAgICAgIC8vICAgICBuZXdHcnVwU2VnbWVudHNbaW5kZXhdLmVuZENvbG9yWzJdID0gY29sb3IxWzJdO1xuICAgICAgICAgICAgLy8gICAgIG5ld0dydXBTZWdtZW50c1tpbmRleF0uZW5kQ29sb3JbM10gPSBjb2xvcjFbM107XG4gICAgICAgICAgICAvLyAgIH1cbiAgICAgICAgICAgIC8vIH1cblxuICAgICAgICAgICAgLy8g5Yy65Z+f56m/6L+H5q61XG4gICAgICAgICAgICBpZiAoY3VycmVudExlbmd0aCArIHNlZ21lbnRMZW5ndGggPCBkaXN0YW5jZXNbaiArIDFdKSB7XG4gICAgICAgICAgICAgIGxldCBjbG9uZUdydXBTZWdtZW50ID0gb3JpZ2luTWVtYmVyU2VnbWVudC5jbG9uZSgpO1xuICAgICAgICAgICAgICBpZiAoaiA9PT0gMCkge1xuICAgICAgICAgICAgICAgIG5ld0dydXBTZWdtZW50c1tpbmRleF0uc2VnbWVudExlbmd0aCA9XG4gICAgICAgICAgICAgICAgICBkaXN0YW5jZXNbal0gLSBjdXJyZW50RGlzdGFuY2VMZW5ndGg7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgbGV0IGNvbG9yMSA9IHRoaXMuZ2V0Q29sb3JCeUluZGV4KGNvbG9ycywgaik7XG4gICAgICAgICAgICAgIGxldCBjb2xvcjIgPSB0aGlzLmdldENvbG9yQnlJbmRleChjb2xvcnMsIGogKyAxKTtcblxuICAgICAgICAgICAgICBpZiAoc2V0Q29sb3IpIHtcbiAgICAgICAgICAgICAgICBjbG9uZUdydXBTZWdtZW50LnN0YXJ0Q29sb3IgPSBuZXcgQXJyYXk8bnVtYmVyPigpO1xuICAgICAgICAgICAgICAgIGNsb25lR3J1cFNlZ21lbnQuc3RhcnRDb2xvclswXSA9IGNvbG9yMVswXTtcbiAgICAgICAgICAgICAgICBjbG9uZUdydXBTZWdtZW50LnN0YXJ0Q29sb3JbMV0gPSBjb2xvcjFbMV07XG4gICAgICAgICAgICAgICAgY2xvbmVHcnVwU2VnbWVudC5zdGFydENvbG9yWzJdID0gY29sb3IxWzJdO1xuICAgICAgICAgICAgICAgIGNsb25lR3J1cFNlZ21lbnQuc3RhcnRDb2xvclszXSA9IGNvbG9yMVszXTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGxldCBlbmRDb2xvciA9IHRoaXMuY29sb3JJbnRlcnBvbGF0aW9uKFxuICAgICAgICAgICAgICAgIGRpc3RhbmNlc1tqXSxcbiAgICAgICAgICAgICAgICBjb2xvcjEsXG4gICAgICAgICAgICAgICAgZGlzdGFuY2VzW2ogKyAxXSxcbiAgICAgICAgICAgICAgICBjb2xvcjIsXG4gICAgICAgICAgICAgICAgY3VycmVudExlbmd0aCArIHNlZ21lbnRMZW5ndGhcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICBpZiAoc2V0Q29sb3IpIHtcbiAgICAgICAgICAgICAgICBpZiAoYmxlbmRSZW5kZXJlZENvbG9yKSB7XG4gICAgICAgICAgICAgICAgICBjbG9uZUdydXBTZWdtZW50LmVuZENvbG9yID0gbmV3IEFycmF5PG51bWJlcj4oKTtcbiAgICAgICAgICAgICAgICAgIGNsb25lR3J1cFNlZ21lbnQuZW5kQ29sb3JbMF0gPSBlbmRDb2xvclswXTtcbiAgICAgICAgICAgICAgICAgIGNsb25lR3J1cFNlZ21lbnQuZW5kQ29sb3JbMV0gPSBlbmRDb2xvclsxXTtcbiAgICAgICAgICAgICAgICAgIGNsb25lR3J1cFNlZ21lbnQuZW5kQ29sb3JbMl0gPSBlbmRDb2xvclsyXTtcbiAgICAgICAgICAgICAgICAgIGNsb25lR3J1cFNlZ21lbnQuZW5kQ29sb3JbM10gPSBlbmRDb2xvclszXTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgY2xvbmVHcnVwU2VnbWVudC5lbmRDb2xvciA9IG5ldyBBcnJheTxudW1iZXI+KCk7XG4gICAgICAgICAgICAgICAgICBjbG9uZUdydXBTZWdtZW50LmVuZENvbG9yWzBdID0gY29sb3IxWzBdO1xuICAgICAgICAgICAgICAgICAgY2xvbmVHcnVwU2VnbWVudC5lbmRDb2xvclsxXSA9IGNvbG9yMVsxXTtcbiAgICAgICAgICAgICAgICAgIGNsb25lR3J1cFNlZ21lbnQuZW5kQ29sb3JbMl0gPSBjb2xvcjFbMl07XG4gICAgICAgICAgICAgICAgICBjbG9uZUdydXBTZWdtZW50LmVuZENvbG9yWzNdID0gY29sb3IxWzNdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNsb25lR3J1cFNlZ21lbnQuc2VnbWVudExlbmd0aCA9XG4gICAgICAgICAgICAgICAgc2VnbWVudExlbmd0aCAtIChkaXN0YW5jZXNbal0gLSBjdXJyZW50TGVuZ3RoKTtcblxuICAgICAgICAgICAgICAvLyDlpoLmnpzmiKrpnaLnsbvlnovmmK/lnIbplKXov4fmuKHmrrXvvIzliJnpnIDopoHmlrDlu7rmlrDnmoTlnIbplKXmiKrpnaJcbiAgICAgICAgICAgICAgLy8g5bm25qC55o2u5oiq5Y+W6LW354K55ZKM57uI54K577yM6K6h566X5Lik6L655paw55qE5ZyG6ZSl5Y2K5b6ELlxuICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NDb25TZWN0aW9uKFxuICAgICAgICAgICAgICAgIGdydXBTZWdtZW50cyxcbiAgICAgICAgICAgICAgICBjdXJJbmRleCxcbiAgICAgICAgICAgICAgICBjbG9uZUdydXBTZWdtZW50LFxuICAgICAgICAgICAgICAgIGRpc3RhbmNlc1tqXSAtIGN1cnJlbnRMZW5ndGgsXG4gICAgICAgICAgICAgICAgY3VycmVudExlbmd0aCArIHNlZ21lbnRMZW5ndGggLSBjdXJyZW50TGVuZ3RoLFxuICAgICAgICAgICAgICAgIHNlZ21lbnRMZW5ndGhcbiAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICBuZXdHcnVwU2VnbWVudHMucHVzaChjbG9uZUdydXBTZWdtZW50KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudExlbmd0aCArIHNlZ21lbnRMZW5ndGggPj0gZGlzdGFuY2VzW2ogKyAxXSkge1xuICAgICAgICAgICAgICBsZXQgY2xvbmVHcnVwU2VnbWVudCA9IG9yaWdpbk1lbWJlclNlZ21lbnQuY2xvbmUoKTtcbiAgICAgICAgICAgICAgLy8g5Yy65Z+f5Zyo5q615YaFLlxuICAgICAgICAgICAgICBsZXQgY29sb3IxID0gdGhpcy5nZXRDb2xvckJ5SW5kZXgoY29sb3JzLCBqKTtcbiAgICAgICAgICAgICAgbGV0IGNvbG9yMiA9IHRoaXMuZ2V0Q29sb3JCeUluZGV4KGNvbG9ycywgaiArIDEpO1xuXG4gICAgICAgICAgICAgIGlmIChzZXRDb2xvcikge1xuICAgICAgICAgICAgICAgIGNsb25lR3J1cFNlZ21lbnQuc3RhcnRDb2xvciA9IG5ldyBBcnJheTxudW1iZXI+KCk7XG4gICAgICAgICAgICAgICAgY2xvbmVHcnVwU2VnbWVudC5zdGFydENvbG9yWzBdID0gY29sb3IxWzBdO1xuICAgICAgICAgICAgICAgIGNsb25lR3J1cFNlZ21lbnQuc3RhcnRDb2xvclsxXSA9IGNvbG9yMVsxXTtcbiAgICAgICAgICAgICAgICBjbG9uZUdydXBTZWdtZW50LnN0YXJ0Q29sb3JbMl0gPSBjb2xvcjFbMl07XG4gICAgICAgICAgICAgICAgY2xvbmVHcnVwU2VnbWVudC5zdGFydENvbG9yWzNdID0gY29sb3IxWzNdO1xuXG4gICAgICAgICAgICAgICAgaWYgKGJsZW5kUmVuZGVyZWRDb2xvcikge1xuICAgICAgICAgICAgICAgICAgY2xvbmVHcnVwU2VnbWVudC5lbmRDb2xvciA9IG5ldyBBcnJheTxudW1iZXI+KCk7XG4gICAgICAgICAgICAgICAgICBjbG9uZUdydXBTZWdtZW50LmVuZENvbG9yWzBdID0gY29sb3IyWzBdO1xuICAgICAgICAgICAgICAgICAgY2xvbmVHcnVwU2VnbWVudC5lbmRDb2xvclsxXSA9IGNvbG9yMlsxXTtcbiAgICAgICAgICAgICAgICAgIGNsb25lR3J1cFNlZ21lbnQuZW5kQ29sb3JbMl0gPSBjb2xvcjJbMl07XG4gICAgICAgICAgICAgICAgICBjbG9uZUdydXBTZWdtZW50LmVuZENvbG9yWzNdID0gY29sb3IyWzNdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBjbG9uZUdydXBTZWdtZW50LmVuZENvbG9yID0gbmV3IEFycmF5PG51bWJlcj4oKTtcbiAgICAgICAgICAgICAgICAgIGNsb25lR3J1cFNlZ21lbnQuZW5kQ29sb3JbMF0gPSBjb2xvcjFbMF07XG4gICAgICAgICAgICAgICAgICBjbG9uZUdydXBTZWdtZW50LmVuZENvbG9yWzFdID0gY29sb3IxWzFdO1xuICAgICAgICAgICAgICAgICAgY2xvbmVHcnVwU2VnbWVudC5lbmRDb2xvclsyXSA9IGNvbG9yMVsyXTtcbiAgICAgICAgICAgICAgICAgIGNsb25lR3J1cFNlZ21lbnQuZW5kQ29sb3JbM10gPSBjb2xvcjFbM107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY2xvbmVHcnVwU2VnbWVudC5zZWdtZW50TGVuZ3RoID0gZGlzdGFuY2VzW2ogKyAxXSAtIGRpc3RhbmNlc1tqXTtcbiAgICAgICAgICAgICAgY3VycmVudERpc3RhbmNlTGVuZ3RoICs9IGRpc3RhbmNlc1tqICsgMV0gLSBkaXN0YW5jZXNbal07XG4gICAgICAgICAgICAgIC8vIOWmguaenOaIqumdouexu+Wei+aYr+WchumUpei/h+a4oeaute+8jOWImemcgOimgeaWsOW7uuaWsOeahOWchumUpeaIqumdolxuICAgICAgICAgICAgICAvLyDlubbmoLnmja7miKrlj5botbfngrnlkoznu4jngrnvvIzorqHnrpfkuKTovrnmlrDnmoTlnIbplKXljYrlvoQuXG4gICAgICAgICAgICAgIHRoaXMucHJvY2Vzc0NvblNlY3Rpb24oXG4gICAgICAgICAgICAgICAgZ3J1cFNlZ21lbnRzLFxuICAgICAgICAgICAgICAgIGN1ckluZGV4LFxuICAgICAgICAgICAgICAgIGNsb25lR3J1cFNlZ21lbnQsXG4gICAgICAgICAgICAgICAgZGlzdGFuY2VzW2pdIC0gY3VycmVudExlbmd0aCxcbiAgICAgICAgICAgICAgICBkaXN0YW5jZXNbaiArIDFdIC0gY3VycmVudExlbmd0aCxcbiAgICAgICAgICAgICAgICBzZWdtZW50TGVuZ3RoXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIG5ld0dydXBTZWdtZW50cy5wdXNoKGNsb25lR3J1cFNlZ21lbnQpO1xuXG4gICAgICAgICAgICAgIGlmIChqID09PSBkaXN0YW5jZXMubGVuZ3RoIC0gMikge1xuICAgICAgICAgICAgICAgIGxldCBjbG9uZUdydXBTZWdtZW50MiA9IG9yaWdpbk1lbWJlclNlZ21lbnQuY2xvbmUoKTtcbiAgICAgICAgICAgICAgICBjbG9uZUdydXBTZWdtZW50Mi5zZWdtZW50TGVuZ3RoID1cbiAgICAgICAgICAgICAgICAgIG9yaWdpbk1lbWJlci5nZXRNZW1iZXJMZW5ndGgoKSAtIGRpc3RhbmNlc1tqICsgMV07XG4gICAgICAgICAgICAgICAgbmV3R3J1cFNlZ21lbnRzLnB1c2goY2xvbmVHcnVwU2VnbWVudDIpO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzQ29uU2VjdGlvbihcbiAgICAgICAgICAgICAgICAgIGdydXBTZWdtZW50cyxcbiAgICAgICAgICAgICAgICAgIGN1ckluZGV4LFxuICAgICAgICAgICAgICAgICAgY2xvbmVHcnVwU2VnbWVudDIsXG4gICAgICAgICAgICAgICAgICBkaXN0YW5jZXNbaiArIDFdIC0gY3VycmVudExlbmd0aCxcbiAgICAgICAgICAgICAgICAgIGN1cnJlbnRMZW5ndGggKyBzZWdtZW50TGVuZ3RoIC0gY3VycmVudExlbmd0aCxcbiAgICAgICAgICAgICAgICAgIHNlZ21lbnRMZW5ndGhcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY3VycmVudExlbmd0aCArPSBzZWdtZW50TGVuZ3RoO1xuICAgICAgfVxuXG4gICAgICBjbG91ZE1lbWJlci5ncnVwLmdydXBTZWdtZW50cyA9IG5ld0dydXBTZWdtZW50cztcbiAgICAgIG1lbWJlcnMucHVzaChjbG91ZE1lbWJlcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lbWJlcnM7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NDb25TZWN0aW9uKFxuICAgIGdydXBTZWdtZW50czogR3J1cFNlZ21lbnRbXSxcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGNsb25lR3J1cFNlZ21lbnQ6IEdydXBTZWdtZW50LFxuICAgIHN0YXJ0T2Zmc2V0OiBudW1iZXIsXG4gICAgZW5kT2Zmc2V0OiBudW1iZXIsXG4gICAgc2VnbWVudExlbmd0aDogbnVtYmVyXG4gICkge1xuICAgIC8vIOS7juWwj09E5Yiw5aSnT0QuXG4gICAgbGV0IG9yZGVyID0gdHJ1ZTtcbiAgICAvLyDlpoLmnpzmiKrpnaLnsbvlnovmmK/lnIbplKXov4fmuKHmrrXvvIzliJnpnIDopoHmlrDlu7rmlrDnmoTlnIbplKXmiKrpnaJcbiAgICAvLyDlubbmoLnmja7miKrlj5botbfngrnlkoznu4jngrnvvIzorqHnrpfkuKTovrnmlrDnmoTlnIbplKXljYrlvoQuXG4gICAgaWYgKFxuICAgICAgY2xvbmVHcnVwU2VnbWVudC5zZWN0aW9uICYmXG4gICAgICBjbG9uZUdydXBTZWdtZW50LnNlY3Rpb24uY3Jvc3NTZWN0aW9uVHlwZSA9PT0gXCJDT05cIlxuICAgICkge1xuICAgICAgbGV0IGJlZm9yZUdydXBTZWcgPSBncnVwU2VnbWVudHNbaW5kZXggLSAxXTtcbiAgICAgIGxldCBhZnRlckdydXBTZWcgPSBncnVwU2VnbWVudHNbaW5kZXggKyAxXTtcblxuICAgICAgbGV0IGJlZm9yZU9EID0gLTE7XG4gICAgICBpZiAoYmVmb3JlR3J1cFNlZykge1xuICAgICAgICBpZiAoIWJlZm9yZUdydXBTZWcuc2VjdGlvbikge1xuICAgICAgICAgIGJlZm9yZU9EID0gYmVmb3JlR3J1cFNlZy50dWJPdXRlckRpYW1ldGVyO1xuICAgICAgICB9IGVsc2UgaWYgKGJlZm9yZUdydXBTZWcuc2VjdGlvbiBpbnN0YW5jZW9mIFR1YlNlY3Rpb25PYmplY3QpIHtcbiAgICAgICAgICBiZWZvcmVPRCA9IGJlZm9yZUdydXBTZWcuc2VjdGlvbi5vdXRzaWRlUmFkaXVzO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxldCBhZnRlck9EID0gLTE7XG4gICAgICBpZiAoYWZ0ZXJHcnVwU2VnKSB7XG4gICAgICAgIGlmICghYWZ0ZXJHcnVwU2VnLnNlY3Rpb24pIHtcbiAgICAgICAgICBhZnRlck9EID0gYWZ0ZXJHcnVwU2VnLnR1Yk91dGVyRGlhbWV0ZXI7XG4gICAgICAgIH0gZWxzZSBpZiAoYWZ0ZXJHcnVwU2VnLnNlY3Rpb24gaW5zdGFuY2VvZiBUdWJTZWN0aW9uT2JqZWN0KSB7XG4gICAgICAgICAgYWZ0ZXJPRCA9IGFmdGVyR3J1cFNlZy5zZWN0aW9uLm91dHNpZGVSYWRpdXM7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGV0IHNlY3Rpb24gPSBjbG9uZUdydXBTZWdtZW50LnNlY3Rpb24gYXMgQ29uU2VjdGlvbk9iamVjdDtcbiAgICAgIGxldCBuZXdTZWN0aW9uID0gdGhpcy5wcm9jZXNzLmNsb25lTWFuYWdlci5jbG9uZU9iamVjdChcbiAgICAgICAgc2VjdGlvblxuICAgICAgKSBhcyBDb25TZWN0aW9uT2JqZWN0O1xuICAgICAgbmV3U2VjdGlvbi5uYW1lID0gdXVpZCgpO1xuICAgICAgbGV0IGxhcmdlT0QgPSBOdW1iZXIobmV3U2VjdGlvbi5sYXJnZU9EKTtcbiAgICAgIGxldCBzbWFsbE9EID0gTnVtYmVyKG5ld1NlY3Rpb24uc21hbGxPRCk7XG4gICAgICBpZiAoYWZ0ZXJPRCAhPSAtMSkge1xuICAgICAgICBpZiAoTWF0aC5hYnMobGFyZ2VPRCAtIGFmdGVyT0QpIDwgMC4wMDEpIHtcbiAgICAgICAgICBvcmRlciA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGJlZm9yZU9EICE9IC0xKSB7XG4gICAgICAgIGlmIChNYXRoLmFicyhzbWFsbE9EIC0gYmVmb3JlT0QpIDwgMC4wMDEpIHtcbiAgICAgICAgICBvcmRlciA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGxldCBvZmZzZXQgPSBsYXJnZU9EIC0gc21hbGxPRDtcbiAgICAgIGlmIChvcmRlcikge1xuICAgICAgICBuZXdTZWN0aW9uLmxhcmdlT0QgPSBsYXJnZU9EIC0gKHN0YXJ0T2Zmc2V0IC8gc2VnbWVudExlbmd0aCkgKiBvZmZzZXQ7XG4gICAgICAgIG5ld1NlY3Rpb24uc21hbGxPRCA9IGxhcmdlT0QgLSAoZW5kT2Zmc2V0IC8gc2VnbWVudExlbmd0aCkgKiBvZmZzZXQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdTZWN0aW9uLmxhcmdlT0QgPSBzbWFsbE9EICsgKGVuZE9mZnNldCAvIHNlZ21lbnRMZW5ndGgpICogb2Zmc2V0O1xuICAgICAgICBuZXdTZWN0aW9uLnNtYWxsT0QgPSBzbWFsbE9EICsgKHN0YXJ0T2Zmc2V0IC8gc2VnbWVudExlbmd0aCkgKiBvZmZzZXQ7XG4gICAgICB9XG5cbiAgICAgIGNsb25lR3J1cFNlZ21lbnQuc2VjdGlvbiA9IG5ld1NlY3Rpb247XG4gICAgICBsZXQgcHJvY2VzcyA9IHRoaXMucHJvY2VzcyBhcyBQcm9jZXNzO1xuICAgICAgcHJvY2Vzcy5hZGRSZW5kZXJPYmplY3QoXG4gICAgICAgIHByb2Nlc3MuY2FlUmVuZGVyT2JqZWN0VHJlZU1hbmFnZXIuc2VjdGlvbkluc05vZGUsXG4gICAgICAgIG5ld1NlY3Rpb25cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOminOiJsuaPkuWAvC5cbiAgICogQHBhcmFtIGRpczFcbiAgICogQHBhcmFtIGNvbG9yMVxuICAgKiBAcGFyYW0gZGlzMlxuICAgKiBAcGFyYW0gY29sb3IyXG4gICAqIEBwYXJhbSB0YXJnZXRcbiAgICogQHJldHVybnNcbiAgICovXG4gIGNvbG9ySW50ZXJwb2xhdGlvbihcbiAgICBkaXMxOiBudW1iZXIsXG4gICAgY29sb3IxOiBudW1iZXJbXSxcbiAgICBkaXMyOiBudW1iZXIsXG4gICAgY29sb3IyOiBudW1iZXJbXSxcbiAgICB0YXJnZXQ6IG51bWJlclxuICApOiBudW1iZXJbXSB7XG4gICAgLy9cbiAgICBsZXQgY29sb3IgPSBbMCwgMCwgMCwgMV07XG5cbiAgICBsZXQgb2Zmc2V0UiA9IGNvbG9yMlswXSAtIGNvbG9yMVswXTtcbiAgICBsZXQgb2Zmc2V0RyA9IGNvbG9yMlsxXSAtIGNvbG9yMVsxXTtcbiAgICBsZXQgb2Zmc2V0QiA9IGNvbG9yMlsyXSAtIGNvbG9yMVsyXTtcblxuICAgIGxldCByYXRpbyA9ICh0YXJnZXQgLSBkaXMxKSAvIChkaXMyIC0gZGlzMSk7XG4gICAgY29sb3JbMF0gPSBjb2xvcjFbMF0gKyByYXRpbyAqIG9mZnNldFI7XG4gICAgY29sb3JbMV0gPSBjb2xvcjFbMV0gKyByYXRpbyAqIG9mZnNldEc7XG4gICAgY29sb3JbMl0gPSBjb2xvcjFbMl0gKyByYXRpbyAqIG9mZnNldEI7XG4gICAgY29sb3JbM10gPSBjb2xvcjFbM107XG5cbiAgICByZXR1cm4gY29sb3I7XG4gIH1cblxuICBnZXRDb2xvckJ5SW5kZXgoY29sb3JzOiBudW1iZXJbXSwgaW5kZXg6IG51bWJlcikge1xuICAgIC8vXG4gICAgbGV0IGNvbG9yID0gY29sb3JzLnNsaWNlKDQgKiBpbmRleCwgNCAqIChpbmRleCArIDEpKTtcbiAgICByZXR1cm4gY29sb3I7XG4gIH1cblxuICAvLyAvKipcbiAgLy8gICog6YCa6L+H5Y6f5aeL5p2G5Lu255Sf5oiQ5LqR5Zu+5pi+56S655So55qE5p2G5Lu2XG4gIC8vICAqIEBwYXJhbSBvcmlnaW5NZW1iZXIg5Y6f5aeL5p2G5Lu2XG4gIC8vICAqIEBwYXJhbSBkaXN0YW5jZXMg6Led56a75pWw57uEXG4gIC8vICAqIEBwYXJhbSBjb2xvcnMg5a+55bqU55qE6aKc6Imy5pWw57uEXG4gIC8vICAqIEByZXR1cm5zXG4gIC8vICAqL1xuICAvLyBwdWJsaWMgY3JlYXRlQ2xvdWRNZW1iZXIoXG4gIC8vICAgb3JpZ2luTWVtYmVyOiBNZW1iZXJPYmplY3QsXG4gIC8vICAgZGlzdGFuY2VzOiBudW1iZXJbXSxcbiAgLy8gICBjb2xvcnM6IG51bWJlcltdXG4gIC8vICk6IE1lbWJlck9iamVjdCB7XG4gIC8vICAgLy8g5YWL6ZqG5LiA5Liq5p2G5Lu2XG4gIC8vICAgbGV0IGNsb3VkTWVtYmVyID0gdGhpcy5wcm9jZXNzLmNsb25lTWFuYWdlci5jbG9uZU9iamVjdChcbiAgLy8gICAgIG9yaWdpbk1lbWJlclxuICAvLyAgICkgYXMgTWVtYmVyT2JqZWN0O1xuXG4gIC8vICAgLy8g5YWL6ZqG5p2G5Lu25oiq6Z2i57uEXG4gIC8vICAgbGV0IGdydXBPYmplY3Q6IEdydXBPYmplY3QgPSBjbG91ZE1lbWJlci5ncnVwO1xuICAvLyAgIGxldCBjbG91ZEdydXBPYmplY3QgPSB0aGlzLnByb2Nlc3MuY2xvbmVNYW5hZ2VyLmNsb25lT2JqZWN0KFxuICAvLyAgICAgZ3J1cE9iamVjdFxuICAvLyAgICkgYXMgR3J1cE9iamVjdDtcbiAgLy8gICBjbG91ZE1lbWJlci5ncnVwID0gY2xvdWRHcnVwT2JqZWN0O1xuXG4gIC8vICAgLy8g6YeN572u5YWL6ZqG5p2G5Lu25oiq6Z2i57uE55qE5YiG5q6177yM5Zyo5YW25ZCO6YeN5paw6LWL5YC8LlxuICAvLyAgIGNsb3VkR3J1cE9iamVjdC5ncnVwU2VnbWVudHMgPSBuZXcgQXJyYXk8R3J1cFNlZ21lbnQ+KCk7XG5cbiAgLy8gICBpZiAoZ3J1cE9iamVjdC5ncnVwU2VnbWVudHMubGVuZ3RoID09PSAxKSB7XG4gIC8vICAgICBsZXQgZGF0YSA9IGdydXBPYmplY3QuZ3J1cFNlZ21lbnRzWzBdO1xuICAvLyAgICAgLy8g5qC55o2uZGlzdGFuY2Vz5ZKMY29sb3Jz77yM5p6E5bu65p2G5Lu25oiq6Z2i57uE55qE5YiG5q61LlxuICAvLyAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaXN0YW5jZXMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gIC8vICAgICAgIGxldCBuZXdHcnVwU2VnbWVudCA9IG5ldyBHcnVwU2VnbWVudCgpO1xuXG4gIC8vICAgICAgIG5ld0dydXBTZWdtZW50LnNlY3Rpb24gPSBkYXRhLnNlY3Rpb247XG4gIC8vICAgICAgIG5ld0dydXBTZWdtZW50LnRhcGVyT3B0aW9uID0gZGF0YS50YXBlck9wdGlvbjtcbiAgLy8gICAgICAgbmV3R3J1cFNlZ21lbnQudHViT3V0ZXJEaWFtZXRlciA9IGRhdGEudHViT3V0ZXJEaWFtZXRlcjtcbiAgLy8gICAgICAgbmV3R3J1cFNlZ21lbnQudHViV2FsbFRoaWNrbmVzcyA9IGRhdGEudHViV2FsbFRoaWNrbmVzcztcblxuICAvLyAgICAgICBuZXdHcnVwU2VnbWVudC5zZWdtZW50TGVuZ3RoID0gZGlzdGFuY2VzW2kgKyAxXSAtIGRpc3RhbmNlc1tpXTtcblxuICAvLyAgICAgICAvLyBuZXdHcnVwU2VnbWVudC5zdGFydENvbG9yID0gbmV3IEFycmF5PG51bWJlcj4oXG4gIC8vICAgICAgIC8vICAgY29sb3JzWzQgKiBpICsgMF0sXG4gIC8vICAgICAgIC8vICAgY29sb3JzWzQgKiBpICsgMV0sXG4gIC8vICAgICAgIC8vICAgY29sb3JzWzQgKiBpICsgMl0sXG4gIC8vICAgICAgIC8vICAgY29sb3JzWzQgKiBpICsgM11cbiAgLy8gICAgICAgLy8gKTtcblxuICAvLyAgICAgICAvLyBuZXdHcnVwU2VnbWVudC5lbmRDb2xvciA9IG5ldyBBcnJheTxudW1iZXI+KFxuICAvLyAgICAgICAvLyAgIGNvbG9yc1s0ICogKGkgKyAxKSArIDBdLFxuICAvLyAgICAgICAvLyAgIGNvbG9yc1s0ICogKGkgKyAxKSArIDFdLFxuICAvLyAgICAgICAvLyAgIGNvbG9yc1s0ICogKGkgKyAxKSArIDJdLFxuICAvLyAgICAgICAvLyAgIGNvbG9yc1s0ICogKGkgKyAxKSArIDNdXG4gIC8vICAgICAgIC8vICk7XG5cbiAgLy8gICAgICAgY2xvdWRHcnVwT2JqZWN0LmdydXBTZWdtZW50cy5wdXNoKG5ld0dydXBTZWdtZW50KTtcbiAgLy8gICAgIH1cbiAgLy8gICB9IGVsc2Uge1xuICAvLyAgICAgY2xvdWRNZW1iZXIgPSBudWxsO1xuICAvLyAgIH1cblxuICAvLyAgIHJldHVybiBjbG91ZE1lbWJlcjtcbiAgLy8gfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBT0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQVNBO0FBSUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FBRUE7QUFFQTtBQUVBO0FBR0E7QUFHQTtBQUNBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFJQTtBQUNBO0FBQ0E7O0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUdBO0FBS0E7QUFFQTtBQUNBO0FBQ0E7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBSUE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFFQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQVNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBS0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUVBOzs7QUFVQTtBQU1BO0FBWUE7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFJQTtBQUtBO0FBU0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBSUE7QUFDQTtBQUdBO0FBUUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUVBOzs7OztBQWFBOztBQUdBO0FBQ0E7O0FBR0E7QUFDQTtBQUVBO0FBU0E7QUFHQTtBQUlBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBSUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUdBO0FBQ0E7QUFDQTs7QUFLQTtBQVdBO0FBUUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBZ0VBO0FBQUE7QUEvZkE7O0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./packages/caeDesign/src/gsDevFx/managers/cloudMemberTransformManager.ts\n");
|
|
3947
3947
|
|
|
3948
3948
|
/***/ }),
|
|
3949
3949
|
|
|
@@ -3976,7 +3976,7 @@ eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPAC
|
|
|
3976
3976
|
/*! no static exports found */
|
|
3977
3977
|
/***/ (function(module, exports, __webpack_require__) {
|
|
3978
3978
|
|
|
3979
|
-
eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__, exports, __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\"), __webpack_require__(/*! gs-bim-air */ \"./node_modules/gs-bim-air/lib/BimAir.umd.min.js\"), __webpack_require__(/*! ../objects/caeObjects/jointObject */ \"./packages/caeDesign/src/gsDevFx/objects/caeObjects/jointObject.ts\"), __webpack_require__(/*! ../objects/caeObjects/grupObject */ \"./packages/caeDesign/src/gsDevFx/objects/caeObjects/grupObject.ts\"), __webpack_require__(/*! ../objects/caeObjects/memberObject */ \"./packages/caeDesign/src/gsDevFx/objects/caeObjects/memberObject.ts\"), __webpack_require__(/*! gs-ceec-design */ \"./packages/ceecDesign/src/index.ts\"), __webpack_require__(/*! ../objects/loadObjects/loadGroupObject */ \"./packages/caeDesign/src/gsDevFx/objects/loadObjects/loadGroupObject.ts\"), __webpack_require__(/*! ./interfaceManagers/selectionInterfaceManager */ \"./packages/caeDesign/src/gsDevFx/managers/interfaceManagers/selectionInterfaceManager.ts\"), __webpack_require__(/*! ../objects/caeObjects/pileObject */ \"./packages/caeDesign/src/gsDevFx/objects/caeObjects/pileObject.ts\")], __WEBPACK_AMD_DEFINE_RESULT__ = (function (require, exports, tslib_1, gs_bim_air_1, jointObject_1, grupObject_1, memberObject_1, gs_ceec_design_1, loadGroupObject_1, selectionInterfaceManager_1, pileObject_1) {\n \"use strict\";\n\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n exports.DatWriterManager = void 0;\n var DatWriterManager = function (_super) {\n tslib_1.__extends(DatWriterManager, _super);\n function DatWriterManager(viewer) {\n return _super.call(this, viewer) || this;\n }\n DatWriterManager.prototype.exportDATFile = function () {\n console.log(\"export\");\n var data1 = this.exportDATFile_Sacinp(false);\n var data2 = this.exportDATFile_Seainp(false, true);\n var datCardData = data1 + data2;\n return datCardData;\n };\n DatWriterManager.prototype.exportSectionData = function (datCardData) {\n var tubs = this.viewer.process.findRenderObjectsByType(\"TubSectionObject\");\n for (var i = 0; i < tubs.length; i++) {\n var obj = tubs[i];\n if (obj.businessState === gs_ceec_design_1.BusinessState.Deleting || obj.businessState === gs_ceec_design_1.BusinessState.Dead) {\n continue;\n }\n var line = obj.serializeToCard();\n datCardData += line += \"\\n\";\n }\n var wfs = this.viewer.process.findRenderObjectsByType(\"WFSectionObject\");\n for (var i = 0; i < wfs.length; i++) {\n var obj = wfs[i];\n if (obj.businessState === gs_ceec_design_1.BusinessState.Deleting || obj.businessState === gs_ceec_design_1.BusinessState.Dead) {\n continue;\n }\n var line = obj.serializeToCard();\n datCardData += line += \"\\n\";\n }\n var boxs = this.viewer.process.findRenderObjectsByType(\"BoxSectionObject\");\n for (var i = 0; i < boxs.length; i++) {\n var obj = boxs[i];\n if (obj.businessState === gs_ceec_design_1.BusinessState.Deleting || obj.businessState === gs_ceec_design_1.BusinessState.Dead) {\n continue;\n }\n var line = obj.serializeToCard();\n datCardData += line += \"\\n\";\n }\n var pris = this.viewer.process.findRenderObjectsByType(\"PriSectionObject\");\n for (var i = 0; i < pris.length; i++) {\n var obj = pris[i];\n if (obj.businessState === gs_ceec_design_1.BusinessState.Deleting || obj.businessState === gs_ceec_design_1.BusinessState.Dead) {\n continue;\n }\n var line = obj.serializeToCard();\n datCardData += line += \"\\n\";\n }\n var cons = this.viewer.process.findRenderObjectsByType(\"ConSectionObject\");\n for (var i = 0; i < cons.length; i++) {\n var obj = cons[i];\n if (obj.businessState === gs_ceec_design_1.BusinessState.Deleting || obj.businessState === gs_ceec_design_1.BusinessState.Dead) {\n continue;\n }\n var line = obj.serializeToCard();\n datCardData += line += \"\\n\";\n }\n var chls = this.viewer.process.findRenderObjectsByType(\"ChlSectionObject\");\n for (var i = 0; i < chls.length; i++) {\n var obj = chls[i];\n if (obj.businessState === gs_ceec_design_1.BusinessState.Deleting || obj.businessState === gs_ceec_design_1.BusinessState.Dead) {\n continue;\n }\n var line = obj.serializeToCard();\n datCardData += line += \"\\n\";\n }\n var tees = this.viewer.process.findRenderObjectsByType(\"TeeSectionObject\");\n for (var i = 0; i < tees.length; i++) {\n var obj = tees[i];\n if (obj.businessState === gs_ceec_design_1.BusinessState.Deleting || obj.businessState === gs_ceec_design_1.BusinessState.Dead) {\n continue;\n }\n var line = obj.serializeToCard();\n datCardData += line += \"\\n\";\n }\n var angs = this.viewer.process.findRenderObjectsByType(\"AngSectionObject\");\n for (var i = 0; i < angs.length; i++) {\n var obj = angs[i];\n if (obj.businessState === gs_ceec_design_1.BusinessState.Deleting || obj.businessState === gs_ceec_design_1.BusinessState.Dead) {\n continue;\n }\n var line = obj.serializeToCard();\n datCardData += line += \"\\n\";\n }\n var dtbs = this.viewer.process.findRenderObjectsByType(\"DtbSectionObject\");\n for (var i = 0; i < dtbs.length; i++) {\n var obj = dtbs[i];\n if (obj.businessState === gs_ceec_design_1.BusinessState.Deleting || obj.businessState === gs_ceec_design_1.BusinessState.Dead) {\n continue;\n }\n var line = obj.serializeToCard();\n datCardData += line += \"\\n\";\n }\n var rtbs = this.viewer.process.findRenderObjectsByType(\"RtbSectionObject\");\n for (var i = 0; i < rtbs.length; i++) {\n var obj = rtbs[i];\n if (obj.businessState === gs_ceec_design_1.BusinessState.Deleting || obj.businessState === gs_ceec_design_1.BusinessState.Dead) {\n continue;\n }\n var line = obj.serializeToCard();\n datCardData += line += \"\\n\";\n }\n var blbs = this.viewer.process.findRenderObjectsByType(\"BlbSectionObject\");\n for (var i = 0; i < blbs.length; i++) {\n var obj = blbs[i];\n if (obj.businessState === gs_ceec_design_1.BusinessState.Deleting || obj.businessState === gs_ceec_design_1.BusinessState.Dead) {\n continue;\n }\n var line = obj.serializeToCard();\n datCardData += line += \"\\n\";\n }\n return datCardData;\n };\n DatWriterManager.prototype.exportDATFile_Seainp = function (exportTitle, isExportComponentGroup) {\n if (exportTitle === void 0) {\n exportTitle = true;\n }\n if (isExportComponentGroup === void 0) {\n isExportComponentGroup = true;\n }\n console.log(\"export_seainp\");\n var process = this.viewer.process;\n var tree = process.caeRenderObjectTreeManager;\n var datCardData = \"\";\n if (exportTitle) {\n var tille = process.findCaeObjectByNameInChildObject(tree.sacinpNode, \"TITLE\");\n if (tille) {\n var line = tille.serializeToCard();\n datCardData += line += \"\\n\";\n }\n }\n var ldopts = process.findRenderObjectsByType(\"SeastateLdopt\");\n datCardData = this.renderobjectsSerializeToCard(ldopts, datCardData);\n var hydros = process.findRenderObjectsByType(\"SeastateHydro\");\n datCardData = this.renderobjectsSerializeToCard(hydros, datCardData);\n var hydro2s = process.findRenderObjectsByType(\"SeastateHydro2\");\n datCardData = this.renderobjectsSerializeToCard(hydro2s, datCardData);\n var lcsels = process.findRenderObjectsByType(\"SeastateLcsel\");\n datCardData = this.renderobjectsSerializeToCard(lcsels, datCardData);\n var ucparts = process.findRenderObjectsByType(\"SeastateUcpart\");\n datCardData = this.renderobjectsSerializeToCard(ucparts, datCardData);\n var files = process.findRenderObjectsByType(\"SeastateFile\");\n datCardData = this.renderobjectsSerializeToCard(files, datCardData);\n var cdms = process.findRenderObjectsByType(\"SeastateCdm\");\n if (cdms.length > 0) {\n datCardData += \"CDM\" + \"\\n\";\n }\n datCardData = this.renderobjectsSerializeToCard(cdms, datCardData);\n var mgrovDivideRO = process.findRenderObjectByName(\"海生物厚度按高程分色\");\n if (mgrovDivideRO) {\n datCardData += \"MGROV\" + \"\\n\";\n var mgrovs = mgrovDivideRO.mgrovList;\n datCardData = this.renderobjectsSerializeToCard(mgrovs, datCardData);\n }\n var corrzDivideRO = process.findRenderObjectByName(\"腐蚀余量按高程分色\");\n if (corrzDivideRO) {\n datCardData += \"CORRZ\" + \"\\n\";\n var corrzs = corrzDivideRO.corrzList;\n datCardData = this.renderobjectsSerializeToCard(corrzs, datCardData);\n }\n var loadNode = process.findCaeObjectByNameInChildObject(process.caeRenderObjectTreeManager.postResultNode, \"荷载工况\");\n if (loadNode) {\n if (loadNode.childObjects.length > 0) {\n datCardData += \"LOAD\\n\";\n }\n for (var i = 0; i < loadNode.childObjects.length; i++) {\n var loadCondition = loadNode.childObjects[i];\n datCardData += loadCondition.serializeToCardSeaInp();\n }\n }\n var lcombs = process.findRenderObjectsByType(\"SeastateLcomb\");\n datCardData = this.renderobjectsSerializeToCard(lcombs, datCardData);\n if (isExportComponentGroup) {\n var card = this.exportDATFile_ComponentGroup();\n datCardData += card;\n }\n return datCardData;\n };\n DatWriterManager.prototype.exportDATFile_Sacinp = function (isExportComponentGroup) {\n if (isExportComponentGroup === void 0) {\n isExportComponentGroup = true;\n }\n console.log(\"export_sacinp\");\n var process = this.viewer.process;\n var tree = process.caeRenderObjectTreeManager;\n var datCardData = \"\";\n var tille = process.findCaeObjectByNameInChildObject(tree.sacinpNode, \"TITLE\");\n if (tille) {\n var line = tille.serializeToCard();\n datCardData += line += \"\\n\";\n }\n var options = process.findRenderObjectsByType(\"ModelOptions\");\n datCardData = this.renderobjectsSerializeToCard(options, datCardData);\n var codes = process.findRenderObjectsByType(\"ModelCodeIs\");\n datCardData = this.renderobjectsSerializeToCard(codes, datCardData);\n datCardData += \"SECT\\n\";\n datCardData = this.exportSectionData(datCardData);\n var grups = this.viewer.process.findRenderObjectsByType(\"GrupObject\");\n if (grups.length > 0) {\n datCardData += \"GRUP\\n\";\n }\n datCardData = this.renderobjectsSerializeToCard(grups, datCardData);\n var joints = this.viewer.process.findRenderObjectsByType(\"JointObject\");\n if (joints.length > 0) {\n datCardData += \"JOINT\\n\";\n }\n datCardData = this.renderobjectsSerializeToCard(joints, datCardData);\n var members = this.viewer.process.findRenderObjectsByType(\"MemberObject\");\n if (members.length > 0) {\n datCardData += \"MEMBER\\n\";\n }\n datCardData = this.renderobjectsSerializeToCard(members, datCardData);\n var pGrups = this.viewer.process.findRenderObjectsByType(\"PGrupObject\");\n if (pGrups.length > 0) {\n datCardData += \"PGRUP\\n\";\n }\n datCardData = this.renderobjectsSerializeToCard(pGrups, datCardData);\n var plates = this.viewer.process.findRenderObjectsByType(\"PlateObject\");\n if (plates.length > 0) {\n datCardData += \"PLATE\\n\";\n }\n datCardData = this.renderobjectsSerializeToCard(plates, datCardData);\n var loadNode = process.findCaeObjectByNameInChildObject(process.caeRenderObjectTreeManager.postResultNode, \"荷载工况\");\n if (loadNode) {\n if (loadNode.childObjects.length > 0) {\n datCardData += \"LOAD\\n\";\n }\n for (var i = 0; i < loadNode.childObjects.length; i++) {\n var loadCondition = loadNode.childObjects[i];\n for (var j = 0; j < loadCondition.childObjects.length; j++) {\n var loadGroup = loadCondition.childObjects[j];\n if (loadGroup instanceof loadGroupObject_1.LoadGroupObject) {\n datCardData += loadGroup.serializeToCardSacInp();\n }\n }\n }\n }\n var centers = this.viewer.process.findRenderObjectsByType(\"ModelCenter\");\n datCardData = this.renderobjectsSerializeToCard(centers, datCardData);\n var weightNode = process.findCaeObjectByNameInChildObject(process.caeRenderObjectTreeManager.pretreatmentNode, \"附加质量\");\n if (weightNode) {\n datCardData += '\\n';\n for (var i = 0; i < weightNode.childObjects.length; i++) {\n var weightGroup = weightNode.childObjects[i];\n datCardData += weightGroup.serializeToCardSacInp();\n }\n }\n var wgtmems = this.viewer.process.findRenderObjectsByType(\"WGTMEMObject\");\n if (wgtmems.length > 0) {\n datCardData += \"WGTMEM\\n\";\n }\n datCardData = this.renderobjectsSerializeToCard(wgtmems, datCardData);\n if (isExportComponentGroup) {\n var card = this.exportDATFile_ComponentGroup();\n datCardData += card;\n }\n return datCardData;\n };\n DatWriterManager.prototype.exportDATFile_ComponentGroup = function () {\n var datCardData = \"\";\n var process = this.viewer.process;\n var groupParentNode = process.findCaeObjectByNameInChildObject(process.caeRenderObjectTreeManager.pretreatmentNode, \"构件分组分色\");\n if (groupParentNode) {\n for (var i = 0; i < groupParentNode.childObjects.length; i++) {\n var groupObject = groupParentNode.childObjects[i];\n datCardData += groupObject.serializeToCard();\n }\n }\n return datCardData;\n };\n DatWriterManager.prototype.renderobjectsSerializeToCard = function (renderObjects, datCardData) {\n if (renderObjects && renderObjects.length > 0) {\n for (var i = 0; i < renderObjects.length; i++) {\n var obj = renderObjects[i];\n if (obj instanceof gs_ceec_design_1.DesignBaseObject) {\n if (obj.businessState === gs_ceec_design_1.BusinessState.Deleting || obj.businessState === gs_ceec_design_1.BusinessState.Dead) {\n continue;\n }\n var line = renderObjects[i].serializeToCard();\n datCardData += line += \"\\n\";\n }\n }\n }\n return datCardData;\n };\n DatWriterManager.prototype.exportMemberData = function (isExportAll) {\n if (isExportAll === void 0) {\n isExportAll = true;\n }\n var grups = new Array();\n var joints = new Array();\n var members = new Array();\n var process = this.viewer.process;\n var tree = process.caeRenderObjectTreeManager;\n var datCardData = \"\";\n var tille = process.findCaeObjectByNameInChildObject(tree.sacinpNode, \"TITLE\");\n if (tille) {\n var line = tille.serializeToCard();\n datCardData += line += \"\\n\";\n }\n var options = process.findRenderObjectsByType(\"ModelOptions\");\n datCardData = this.renderobjectsSerializeToCard(options, datCardData);\n var codes = process.findRenderObjectsByType(\"ModelCodeIs\");\n datCardData = this.renderobjectsSerializeToCard(codes, datCardData);\n datCardData += \"SECT\\n\";\n datCardData = this.exportSectionData(datCardData);\n if (isExportAll) {\n grups = this.viewer.process.findRenderObjectsByType(\"GrupObject\");\n joints = this.viewer.process.findRenderObjectsByType(\"JointObject\");\n members = this.viewer.process.findRenderObjectsByType(\"MemberObject\");\n } else {\n var selector = this.viewer.operatorManager.find(\"CAEObjectSelector\");\n if (selector) {\n var lastType = this.viewer.selectionInterfaceManager.selectorFilter;\n this.viewer.selectionInterfaceManager.selectorFilter = selectionInterfaceManager_1.SelectorFiliter.Member;\n selector.selectByArea([-1, 1], [1, -1]);\n var selectedKeys = this.viewer.selectionManager.selectedKeys;\n for (var i = 0; i < selectedKeys.length; i++) {\n var ro = this.viewer.process.getRenderObjectBySegmentKey(selectedKeys[i]);\n if (ro && ro instanceof memberObject_1.MemberObject && members.indexOf(ro) === -1) {\n members.push(ro);\n }\n }\n this.viewer.selectionManager.clearAllSelectionAndHighlight();\n this.viewer.updateDisplay();\n this.viewer.selectionInterfaceManager.selectorFilter = lastType;\n for (var i = 0; i < members.length; i++) {\n var start = members[i].start;\n var end = members[i].end;\n var grup = members[i].grup;\n if (start && start instanceof jointObject_1.JointObject && joints.indexOf(start) === -1) {\n joints.push(start);\n }\n if (end && end instanceof jointObject_1.JointObject && joints.indexOf(end) === -1) {\n joints.push(end);\n }\n if (grup && grup instanceof grupObject_1.GrupObject && grups.indexOf(grup) === -1) {\n grups.push(grup);\n }\n }\n }\n }\n if (grups.length > 0) {\n datCardData += \"GRUP\\n\";\n }\n datCardData = this.renderobjectsSerializeToCard(grups, datCardData);\n if (joints.length > 0) {\n datCardData += \"JOINT\\n\";\n }\n datCardData = this.renderobjectsSerializeToCard(joints, datCardData);\n if (members.length > 0) {\n datCardData += \"MEMBER\\n\";\n }\n datCardData = this.renderobjectsSerializeToCard(members, datCardData);\n return datCardData;\n };\n DatWriterManager.prototype.exportPileData = function (isExportAll) {\n var _a, _b, _c;\n if (isExportAll === void 0) {\n isExportAll = true;\n }\n var piles = new Array();\n if (isExportAll) {\n piles = this.viewer.process.findRenderObjectsByType(\"PileObject\");\n } else {\n var selector = this.viewer.operatorManager.find(\"CAEObjectSelector\");\n if (selector) {\n var lastType = this.viewer.selectionInterfaceManager.selectorFilter;\n this.viewer.selectionInterfaceManager.selectorFilter = selectionInterfaceManager_1.SelectorFiliter.Member;\n selector.selectByArea([-1, 1], [1, -1]);\n var selectedKeys = this.viewer.selectionManager.selectedKeys;\n for (var i = 0; i < selectedKeys.length; i++) {\n var ro = this.viewer.process.getRenderObjectBySegmentKey(selectedKeys[i]);\n if (ro && ro instanceof pileObject_1.PileObject && piles.indexOf(ro) === -1) {\n piles.push(ro);\n }\n }\n this.viewer.selectionManager.clearAllSelectionAndHighlight();\n this.viewer.updateDisplay();\n this.viewer.selectionInterfaceManager.selectorFilter = lastType;\n }\n }\n if (piles.length === 0) {\n return null;\n }\n var process = this.viewer.process;\n var tree = process.caeRenderObjectTreeManager;\n var datCardData = \"\";\n var title = null;\n title = (_a = this.viewer.datReaderManager.psiTitle) === null || _a === void 0 ? void 0 : _a.getLine();\n if (title) {\n datCardData += title += \"\\n\";\n }\n var psiopt = null;\n psiopt = (_b = this.viewer.datReaderManager.psiopt) === null || _b === void 0 ? void 0 : _b.getLine();\n if (psiopt) {\n datCardData += psiopt += \"\\n\";\n }\n var pltrq = null;\n pltrq = (_c = this.viewer.datReaderManager.pltrq) === null || _c === void 0 ? void 0 : _c.getLine();\n if (pltrq) {\n datCardData += pltrq += \"\\n\";\n }\n var grups = this.viewer.process.findRenderObjectsByType(\"PLGrupObject\");\n if (grups.length > 0) {\n datCardData += \"PLGRUP\\n\";\n }\n datCardData = this.renderobjectsSerializeToCard(grups, datCardData);\n if (piles.length > 0) {\n datCardData += \"PILE\\n\";\n }\n datCardData = this.renderobjectsSerializeToCard(piles, datCardData);\n return datCardData;\n };\n return DatWriterManager;\n }(gs_bim_air_1.Longan.ViewerManagerBase);\n exports.DatWriterManager = DatWriterManager;\n}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9wYWNrYWdlcy9jYWVEZXNpZ24vc3JjL2dzRGV2RngvbWFuYWdlcnMvZGF0V3JpdGVyTWFuYWdlci50cy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1tuYW1lXS8uL3BhY2thZ2VzL2NhZURlc2lnbi9zcmMvZ3NEZXZGeC9tYW5hZ2Vycy9kYXRXcml0ZXJNYW5hZ2VyLnRzPzNiNTgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVmlld2VyIH0gZnJvbSBcIi4uL3ZpZXdlclwiO1xuaW1wb3J0IHsgTG9uZ2FuIH0gZnJvbSBcImdzLWJpbS1haXJcIjtcbmltcG9ydCB7IEpvaW50T2JqZWN0IH0gZnJvbSBcIi4uL29iamVjdHMvY2FlT2JqZWN0cy9qb2ludE9iamVjdFwiO1xuaW1wb3J0IHsgR3J1cE9iamVjdCB9IGZyb20gXCIuLi9vYmplY3RzL2NhZU9iamVjdHMvZ3J1cE9iamVjdFwiO1xuaW1wb3J0IHsgTWVtYmVyT2JqZWN0IH0gZnJvbSBcIi4uL29iamVjdHMvY2FlT2JqZWN0cy9tZW1iZXJPYmplY3RcIjtcbmltcG9ydCB7IFBHcnVwT2JqZWN0IH0gZnJvbSBcIi4uL29iamVjdHMvY2FlT2JqZWN0cy9wR3J1cE9iamVjdFwiO1xuaW1wb3J0IHsgUGxhdGVPYmplY3QgfSBmcm9tIFwiLi4vb2JqZWN0cy9jYWVPYmplY3RzL3BsYXRlT2JqZWN0XCI7XG5pbXBvcnQgeyBXZWlnaHRHcm91cE9iamVjdCB9IGZyb20gXCIuLi9vYmplY3RzL3dlaWdodE9iamVjdHMvd2VpZ2h0R3JvdXBPYmplY3RcIjtcbmltcG9ydCB7IFdHVE1FTU9iamVjdCB9IGZyb20gXCIuLi9vYmplY3RzL2NhZU9iamVjdHMvcHJldHJlYXRtZW50L3dndG1lbU9iamVjdFwiO1xuaW1wb3J0IHsgV0ZTZWN0aW9uT2JqZWN0IH0gZnJvbSBcIi4uL29iamVjdHMvY2FlT2JqZWN0cy9zZWN0aW9ucy93RlNlY3Rpb25PYmplY3RcIjtcbmltcG9ydCB7IEJveFNlY3Rpb25PYmplY3QgfSBmcm9tIFwiLi4vb2JqZWN0cy9jYWVPYmplY3RzL3NlY3Rpb25zL2JveFNlY3Rpb25PYmplY3RcIjtcbmltcG9ydCB7IFByaVNlY3Rpb25PYmplY3QgfSBmcm9tIFwiLi4vb2JqZWN0cy9jYWVPYmplY3RzL3NlY3Rpb25zL3ByaVNlY3Rpb25PYmplY3RcIjtcbmltcG9ydCB7IENvblNlY3Rpb25PYmplY3QgfSBmcm9tIFwiLi4vb2JqZWN0cy9jYWVPYmplY3RzL3NlY3Rpb25zL2NvblNlY3Rpb25PYmplY3RcIjtcbmltcG9ydCB7IENobFNlY3Rpb25PYmplY3QgfSBmcm9tIFwiLi4vb2JqZWN0cy9jYWVPYmplY3RzL3NlY3Rpb25zL2NobFNlY3Rpb25PYmplY3RcIjtcbmltcG9ydCB7IFRlZVNlY3Rpb25PYmplY3QgfSBmcm9tIFwiLi4vb2JqZWN0cy9jYWVPYmplY3RzL3NlY3Rpb25zL3RlZVNlY3Rpb25PYmplY3RcIjtcbmltcG9ydCB7IEFuZ1NlY3Rpb25PYmplY3QgfSBmcm9tIFwiLi4vb2JqZWN0cy9jYWVPYmplY3RzL3NlY3Rpb25zL2FuZ1NlY3Rpb25PYmplY3RcIjtcbmltcG9ydCB7IER0YlNlY3Rpb25PYmplY3QgfSBmcm9tIFwiLi4vb2JqZWN0cy9jYWVPYmplY3RzL3NlY3Rpb25zL2R0YlNlY3Rpb25PYmplY3RcIjtcbmltcG9ydCB7IFJ0YlNlY3Rpb25PYmplY3QgfSBmcm9tIFwiLi4vb2JqZWN0cy9jYWVPYmplY3RzL3NlY3Rpb25zL3J0YlNlY3Rpb25PYmplY3RcIjtcbmltcG9ydCB7IEJsYlNlY3Rpb25PYmplY3QgfSBmcm9tIFwiLi4vb2JqZWN0cy9jYWVPYmplY3RzL3NlY3Rpb25zL2JsYlNlY3Rpb25PYmplY3RcIjtcbmltcG9ydCB7IFByb2Nlc3MgfSBmcm9tIFwiLi4vcHJvY2Vzc1wiO1xuaW1wb3J0IHsgTW9kZWxUaXRsZSB9IGZyb20gXCIuLi9vYmplY3RzL2NhZU9iamVjdHMvb3B0aW9uT2JqZWN0cy9tb2RlbFRpdGxlXCI7XG5pbXBvcnQgeyBTZWFzdGF0ZUxkb3B0IH0gZnJvbSBcIi4uL29iamVjdHMvY2FlT2JqZWN0cy9vcHRpb25PYmplY3RzL3NlYXN0YXRlTGRvcHRcIjtcbmltcG9ydCB7IFNlYXN0YXRlSHlkcm8gfSBmcm9tIFwiLi4vb2JqZWN0cy9jYWVPYmplY3RzL29wdGlvbk9iamVjdHMvc2Vhc3RhdGVIeWRyb1wiO1xuaW1wb3J0IHsgU2Vhc3RhdGVIeWRybzIgfSBmcm9tIFwiLi4vb2JqZWN0cy9jYWVPYmplY3RzL29wdGlvbk9iamVjdHMvc2Vhc3RhdGVIeWRybzJcIjtcbmltcG9ydCB7IFNlYXN0YXRlTGNzZWwgfSBmcm9tIFwiLi4vb2JqZWN0cy9jYWVPYmplY3RzL29wdGlvbk9iamVjdHMvc2Vhc3RhdGVMY3NlbFwiO1xuaW1wb3J0IHsgU2Vhc3RhdGVVY3BhcnQgfSBmcm9tIFwiLi4vb2JqZWN0cy9jYWVPYmplY3RzL29wdGlvbk9iamVjdHMvc2Vhc3RhdGVVY3BhcnRcIjtcbmltcG9ydCB7IFNlYXN0YXRlRmlsZSB9IGZyb20gXCIuLi9vYmplY3RzL2NhZU9iamVjdHMvb3B0aW9uT2JqZWN0cy9zZWFzdGF0ZUZpbGVcIjtcbmltcG9ydCB7IFNlYXN0YXRlQ2RtIH0gZnJvbSBcIi4uL29iamVjdHMvY2FlT2JqZWN0cy9vcHRpb25PYmplY3RzL3NlYXN0YXRlQ2RtXCI7XG5pbXBvcnQgeyBNb2RlbE9wdGlvbnMgfSBmcm9tIFwiLi4vb2JqZWN0cy9jYWVPYmplY3RzL29wdGlvbk9iamVjdHMvbW9kZWxPcHRpb25zXCI7XG5pbXBvcnQgeyBNb2RlbENvZGVJcyB9IGZyb20gXCIuLi9vYmplY3RzL2NhZU9iamVjdHMvb3B0aW9uT2JqZWN0cy9tb2RlbENvZGVJc1wiO1xuaW1wb3J0IHtcbiAgQnVzaW5lc3NTdGF0ZSxcbiAgRGVzaWduQmFzZU9iamVjdCxcbn0gZnJvbSBcImdzLWNlZWMtZGVzaWduXCI7XG5pbXBvcnQgeyBUdWJTZWN0aW9uT2JqZWN0IH0gZnJvbSBcIi4uL29iamVjdHMvY2FlT2JqZWN0cy9zZWN0aW9ucy90dWJTZWN0aW9uT2JqZWN0XCI7XG5pbXBvcnQgeyBMb2FkR3JvdXBPYmplY3QgfSBmcm9tIFwiLi4vb2JqZWN0cy9sb2FkT2JqZWN0cy9sb2FkR3JvdXBPYmplY3RcIjtcbmltcG9ydCB7IExvYWRDb25kaXRpb25PYmplY3QgfSBmcm9tIFwiLi4vb2JqZWN0cy9sb2FkT2JqZWN0cy9sb2FkQ29uZGl0aW9uT2JqZWN0XCI7XG5pbXBvcnQgeyBNZ3Jvdk9iamVjdCB9IGZyb20gXCIuLi9vYmplY3RzL2NhZU9iamVjdHMvcHJldHJlYXRtZW50L21ncm92T2JqZWN0XCI7XG5pbXBvcnQgeyBDb3Jyek9iamVjdCB9IGZyb20gXCIuLi9vYmplY3RzL2NhZU9iamVjdHMvcHJldHJlYXRtZW50L2NvcnJ6T2JqZWN0XCI7XG5pbXBvcnQgeyBDb2xvckRpdk1HUk9WT2JqZWN0IH0gZnJvbSBcIi4uL29iamVjdHMvcHJldHJlYXRtZW50T2JqZWN0cy9jb2xvckRpdk1HUk9WT2JqZWN0XCI7XG5pbXBvcnQgeyBDb2xvckRpdkNPUlJaT2JqZWN0IH0gZnJvbSBcIi4uL29iamVjdHMvcHJldHJlYXRtZW50T2JqZWN0cy9jb2xvckRpdkNPUlJaT2JqZWN0XCI7XG5pbXBvcnQgeyBTZWFzdGF0ZUluY3dndCB9IGZyb20gXCIuLi9vYmplY3RzL2NhZU9iamVjdHMvb3B0aW9uT2JqZWN0cy9zZWFzdGF0ZUluY3dndFwiO1xuaW1wb3J0IHsgU2Vhc3RhdGVBY2NlbCB9IGZyb20gXCIuLi9vYmplY3RzL2NhZU9iamVjdHMvb3B0aW9uT2JqZWN0cy9zZWFzdGF0ZUFjY2VsXCI7XG5pbXBvcnQgeyBTZWFzdGF0ZUxjb21iIH0gZnJvbSBcIi4uL29iamVjdHMvY2FlT2JqZWN0cy9vcHRpb25PYmplY3RzL3NlYXN0YXRlTGNvbWJcIjtcbmltcG9ydCB7IFNlYXN0YXRlRGVhZCB9IGZyb20gXCIuLi9vYmplY3RzL2NhZU9iamVjdHMvb3B0aW9uT2JqZWN0cy9zZWFzdGF0ZURlYWRcIjtcbmltcG9ydCB7IENBRU9iamVjdFNlbGVjdG9yIH0gZnJvbSBcIi4uL29wZXJhdG9ycy9jYWVPYmplY3RTZWxlY3RvclwiO1xuaW1wb3J0IHsgU2VsZWN0b3JGaWxpdGVyIH0gZnJvbSBcIi4vaW50ZXJmYWNlTWFuYWdlcnMvc2VsZWN0aW9uSW50ZXJmYWNlTWFuYWdlclwiO1xuaW1wb3J0IHsgUGlsZU9iamVjdCB9IGZyb20gXCIuLi9vYmplY3RzL2NhZU9iamVjdHMvcGlsZU9iamVjdFwiO1xuaW1wb3J0IHsgQ29sb3JEaXZDb21wb25lbnRHcm91cE9iamVjdCB9IGZyb20gXCIuLi9vYmplY3RzL3ByZXRyZWF0bWVudE9iamVjdHMvY29sb3JEaXZDb21wb25lbnRHcm91cE9iamVjdFwiO1xuXG5leHBvcnQgY2xhc3MgRGF0V3JpdGVyTWFuYWdlciBleHRlbmRzIExvbmdhbi5WaWV3ZXJNYW5hZ2VyQmFzZSB7XG4gIGNvbnN0cnVjdG9yKHZpZXdlcjogVmlld2VyKSB7XG4gICAgc3VwZXIodmlld2VyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDlj6blrZjljaHniYfmlbDmja7vvIjmqKHlnosgKyDmtbflhrXvvIlcbiAgICovXG4gIHB1YmxpYyBleHBvcnREQVRGaWxlKCkge1xuICAgIGNvbnNvbGUubG9nKFwiZXhwb3J0XCIpO1xuICAgIGxldCBkYXRhMSA9IHRoaXMuZXhwb3J0REFURmlsZV9TYWNpbnAoZmFsc2UpO1xuICAgIGxldCBkYXRhMiA9IHRoaXMuZXhwb3J0REFURmlsZV9TZWFpbnAoZmFsc2UsIHRydWUpO1xuXG4gICAgbGV0IGRhdENhcmREYXRhID0gZGF0YTEgKyBkYXRhMjtcbiAgICByZXR1cm4gZGF0Q2FyZERhdGE7XG4gIH1cblxuICBwcml2YXRlIGV4cG9ydFNlY3Rpb25EYXRhKGRhdENhcmREYXRhOiBzdHJpbmcpIHtcbiAgICBsZXQgdHVicyA9IHRoaXMudmlld2VyLnByb2Nlc3MuZmluZFJlbmRlck9iamVjdHNCeVR5cGUoXCJUdWJTZWN0aW9uT2JqZWN0XCIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHVicy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IG9iaiA9IHR1YnNbaV0gYXMgVHViU2VjdGlvbk9iamVjdDtcbiAgICAgIGlmIChcbiAgICAgICAgb2JqLmJ1c2luZXNzU3RhdGUgPT09IEJ1c2luZXNzU3RhdGUuRGVsZXRpbmcgfHxcbiAgICAgICAgb2JqLmJ1c2luZXNzU3RhdGUgPT09IEJ1c2luZXNzU3RhdGUuRGVhZFxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgbGV0IGxpbmUgPSBvYmouc2VyaWFsaXplVG9DYXJkKCk7XG4gICAgICBkYXRDYXJkRGF0YSArPSBsaW5lICs9IFwiXFxuXCI7XG4gICAgfVxuXG4gICAgbGV0IHdmcyA9IHRoaXMudmlld2VyLnByb2Nlc3MuZmluZFJlbmRlck9iamVjdHNCeVR5cGUoXCJXRlNlY3Rpb25PYmplY3RcIik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB3ZnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBvYmogPSB3ZnNbaV0gYXMgV0ZTZWN0aW9uT2JqZWN0O1xuICAgICAgaWYgKFxuICAgICAgICBvYmouYnVzaW5lc3NTdGF0ZSA9PT0gQnVzaW5lc3NTdGF0ZS5EZWxldGluZyB8fFxuICAgICAgICBvYmouYnVzaW5lc3NTdGF0ZSA9PT0gQnVzaW5lc3NTdGF0ZS5EZWFkXG4gICAgICApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBsZXQgbGluZSA9IG9iai5zZXJpYWxpemVUb0NhcmQoKTtcbiAgICAgIGRhdENhcmREYXRhICs9IGxpbmUgKz0gXCJcXG5cIjtcbiAgICB9XG5cbiAgICBsZXQgYm94cyA9IHRoaXMudmlld2VyLnByb2Nlc3MuZmluZFJlbmRlck9iamVjdHNCeVR5cGUoXCJCb3hTZWN0aW9uT2JqZWN0XCIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYm94cy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IG9iaiA9IGJveHNbaV0gYXMgQm94U2VjdGlvbk9iamVjdDtcbiAgICAgIGlmIChcbiAgICAgICAgb2JqLmJ1c2luZXNzU3RhdGUgPT09IEJ1c2luZXNzU3RhdGUuRGVsZXRpbmcgfHxcbiAgICAgICAgb2JqLmJ1c2luZXNzU3RhdGUgPT09IEJ1c2luZXNzU3RhdGUuRGVhZFxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgbGV0IGxpbmUgPSBvYmouc2VyaWFsaXplVG9DYXJkKCk7XG4gICAgICBkYXRDYXJkRGF0YSArPSBsaW5lICs9IFwiXFxuXCI7XG4gICAgfVxuXG4gICAgbGV0IHByaXMgPSB0aGlzLnZpZXdlci5wcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RzQnlUeXBlKFwiUHJpU2VjdGlvbk9iamVjdFwiKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBvYmogPSBwcmlzW2ldIGFzIFByaVNlY3Rpb25PYmplY3Q7XG4gICAgICBpZiAoXG4gICAgICAgIG9iai5idXNpbmVzc1N0YXRlID09PSBCdXNpbmVzc1N0YXRlLkRlbGV0aW5nIHx8XG4gICAgICAgIG9iai5idXNpbmVzc1N0YXRlID09PSBCdXNpbmVzc1N0YXRlLkRlYWRcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGxldCBsaW5lID0gb2JqLnNlcmlhbGl6ZVRvQ2FyZCgpO1xuICAgICAgZGF0Q2FyZERhdGEgKz0gbGluZSArPSBcIlxcblwiO1xuICAgIH1cblxuICAgIGxldCBjb25zID0gdGhpcy52aWV3ZXIucHJvY2Vzcy5maW5kUmVuZGVyT2JqZWN0c0J5VHlwZShcIkNvblNlY3Rpb25PYmplY3RcIik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgb2JqID0gY29uc1tpXSBhcyBDb25TZWN0aW9uT2JqZWN0O1xuICAgICAgaWYgKFxuICAgICAgICBvYmouYnVzaW5lc3NTdGF0ZSA9PT0gQnVzaW5lc3NTdGF0ZS5EZWxldGluZyB8fFxuICAgICAgICBvYmouYnVzaW5lc3NTdGF0ZSA9PT0gQnVzaW5lc3NTdGF0ZS5EZWFkXG4gICAgICApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBsZXQgbGluZSA9IG9iai5zZXJpYWxpemVUb0NhcmQoKTtcbiAgICAgIGRhdENhcmREYXRhICs9IGxpbmUgKz0gXCJcXG5cIjtcbiAgICB9XG5cbiAgICBsZXQgY2hscyA9IHRoaXMudmlld2VyLnByb2Nlc3MuZmluZFJlbmRlck9iamVjdHNCeVR5cGUoXCJDaGxTZWN0aW9uT2JqZWN0XCIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hscy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IG9iaiA9IGNobHNbaV0gYXMgQ2hsU2VjdGlvbk9iamVjdDtcbiAgICAgIGlmIChcbiAgICAgICAgb2JqLmJ1c2luZXNzU3RhdGUgPT09IEJ1c2luZXNzU3RhdGUuRGVsZXRpbmcgfHxcbiAgICAgICAgb2JqLmJ1c2luZXNzU3RhdGUgPT09IEJ1c2luZXNzU3RhdGUuRGVhZFxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgbGV0IGxpbmUgPSBvYmouc2VyaWFsaXplVG9DYXJkKCk7XG4gICAgICBkYXRDYXJkRGF0YSArPSBsaW5lICs9IFwiXFxuXCI7XG4gICAgfVxuXG4gICAgbGV0IHRlZXMgPSB0aGlzLnZpZXdlci5wcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RzQnlUeXBlKFwiVGVlU2VjdGlvbk9iamVjdFwiKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRlZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBvYmogPSB0ZWVzW2ldIGFzIFRlZVNlY3Rpb25PYmplY3Q7XG4gICAgICBpZiAoXG4gICAgICAgIG9iai5idXNpbmVzc1N0YXRlID09PSBCdXNpbmVzc1N0YXRlLkRlbGV0aW5nIHx8XG4gICAgICAgIG9iai5idXNpbmVzc1N0YXRlID09PSBCdXNpbmVzc1N0YXRlLkRlYWRcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGxldCBsaW5lID0gb2JqLnNlcmlhbGl6ZVRvQ2FyZCgpO1xuICAgICAgZGF0Q2FyZERhdGEgKz0gbGluZSArPSBcIlxcblwiO1xuICAgIH1cblxuICAgIGxldCBhbmdzID0gdGhpcy52aWV3ZXIucHJvY2Vzcy5maW5kUmVuZGVyT2JqZWN0c0J5VHlwZShcIkFuZ1NlY3Rpb25PYmplY3RcIik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgb2JqID0gYW5nc1tpXSBhcyBBbmdTZWN0aW9uT2JqZWN0O1xuICAgICAgaWYgKFxuICAgICAgICBvYmouYnVzaW5lc3NTdGF0ZSA9PT0gQnVzaW5lc3NTdGF0ZS5EZWxldGluZyB8fFxuICAgICAgICBvYmouYnVzaW5lc3NTdGF0ZSA9PT0gQnVzaW5lc3NTdGF0ZS5EZWFkXG4gICAgICApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBsZXQgbGluZSA9IG9iai5zZXJpYWxpemVUb0NhcmQoKTtcbiAgICAgIGRhdENhcmREYXRhICs9IGxpbmUgKz0gXCJcXG5cIjtcbiAgICB9XG5cbiAgICBsZXQgZHRicyA9IHRoaXMudmlld2VyLnByb2Nlc3MuZmluZFJlbmRlck9iamVjdHNCeVR5cGUoXCJEdGJTZWN0aW9uT2JqZWN0XCIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZHRicy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IG9iaiA9IGR0YnNbaV0gYXMgRHRiU2VjdGlvbk9iamVjdDtcbiAgICAgIGlmIChcbiAgICAgICAgb2JqLmJ1c2luZXNzU3RhdGUgPT09IEJ1c2luZXNzU3RhdGUuRGVsZXRpbmcgfHxcbiAgICAgICAgb2JqLmJ1c2luZXNzU3RhdGUgPT09IEJ1c2luZXNzU3RhdGUuRGVhZFxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgbGV0IGxpbmUgPSBvYmouc2VyaWFsaXplVG9DYXJkKCk7XG4gICAgICBkYXRDYXJkRGF0YSArPSBsaW5lICs9IFwiXFxuXCI7XG4gICAgfVxuXG4gICAgbGV0IHJ0YnMgPSB0aGlzLnZpZXdlci5wcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RzQnlUeXBlKFwiUnRiU2VjdGlvbk9iamVjdFwiKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJ0YnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBvYmogPSBydGJzW2ldIGFzIFJ0YlNlY3Rpb25PYmplY3Q7XG4gICAgICBpZiAoXG4gICAgICAgIG9iai5idXNpbmVzc1N0YXRlID09PSBCdXNpbmVzc1N0YXRlLkRlbGV0aW5nIHx8XG4gICAgICAgIG9iai5idXNpbmVzc1N0YXRlID09PSBCdXNpbmVzc1N0YXRlLkRlYWRcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGxldCBsaW5lID0gb2JqLnNlcmlhbGl6ZVRvQ2FyZCgpO1xuICAgICAgZGF0Q2FyZERhdGEgKz0gbGluZSArPSBcIlxcblwiO1xuICAgIH1cblxuICAgIGxldCBibGJzID0gdGhpcy52aWV3ZXIucHJvY2Vzcy5maW5kUmVuZGVyT2JqZWN0c0J5VHlwZShcIkJsYlNlY3Rpb25PYmplY3RcIik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBibGJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgb2JqID0gYmxic1tpXSBhcyBCbGJTZWN0aW9uT2JqZWN0O1xuICAgICAgaWYgKFxuICAgICAgICBvYmouYnVzaW5lc3NTdGF0ZSA9PT0gQnVzaW5lc3NTdGF0ZS5EZWxldGluZyB8fFxuICAgICAgICBvYmouYnVzaW5lc3NTdGF0ZSA9PT0gQnVzaW5lc3NTdGF0ZS5EZWFkXG4gICAgICApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBsZXQgbGluZSA9IG9iai5zZXJpYWxpemVUb0NhcmQoKTtcbiAgICAgIGRhdENhcmREYXRhICs9IGxpbmUgKz0gXCJcXG5cIjtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0Q2FyZERhdGE7XG4gIH1cblxuICAvKipcbiAgICog5a+85Ye65rW35Ya15Y2h54mH5pWw5o2uLlxuICAgKi9cbiAgZXhwb3J0REFURmlsZV9TZWFpbnAoZXhwb3J0VGl0bGU6IGJvb2xlYW4gPSB0cnVlLCBpc0V4cG9ydENvbXBvbmVudEdyb3VwID0gdHJ1ZSkge1xuICAgIC8vIGNhcmQgZGF0YSArIHJvIC0+IGNhcmRcbiAgICBjb25zb2xlLmxvZyhcImV4cG9ydF9zZWFpbnBcIik7XG4gICAgbGV0IHByb2Nlc3MgPSB0aGlzLnZpZXdlci5wcm9jZXNzIGFzIFByb2Nlc3M7XG4gICAgbGV0IHRyZWUgPSBwcm9jZXNzLmNhZVJlbmRlck9iamVjdFRyZWVNYW5hZ2VyO1xuXG4gICAgbGV0IGRhdENhcmREYXRhID0gXCJcIjtcblxuICAgIGlmIChleHBvcnRUaXRsZSkge1xuICAgICAgbGV0IHRpbGxlID0gcHJvY2Vzcy5maW5kQ2FlT2JqZWN0QnlOYW1lSW5DaGlsZE9iamVjdChcbiAgICAgICAgdHJlZS5zYWNpbnBOb2RlLFxuICAgICAgICBcIlRJVExFXCJcbiAgICAgICkgYXMgTW9kZWxUaXRsZTtcbiAgICAgIGlmICh0aWxsZSkge1xuICAgICAgICBsZXQgbGluZSA9IHRpbGxlLnNlcmlhbGl6ZVRvQ2FyZCgpO1xuICAgICAgICBkYXRDYXJkRGF0YSArPSBsaW5lICs9IFwiXFxuXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGxkb3B0cyA9IHByb2Nlc3MuZmluZFJlbmRlck9iamVjdHNCeVR5cGUoXG4gICAgICBcIlNlYXN0YXRlTGRvcHRcIlxuICAgICkgYXMgU2Vhc3RhdGVMZG9wdFtdO1xuICAgIGRhdENhcmREYXRhID0gdGhpcy5yZW5kZXJvYmplY3RzU2VyaWFsaXplVG9DYXJkKGxkb3B0cywgZGF0Q2FyZERhdGEpO1xuXG4gICAgbGV0IGh5ZHJvcyA9IHByb2Nlc3MuZmluZFJlbmRlck9iamVjdHNCeVR5cGUoXG4gICAgICBcIlNlYXN0YXRlSHlkcm9cIlxuICAgICkgYXMgU2Vhc3RhdGVIeWRyb1tdO1xuICAgIGRhdENhcmREYXRhID0gdGhpcy5yZW5kZXJvYmplY3RzU2VyaWFsaXplVG9DYXJkKGh5ZHJvcywgZGF0Q2FyZERhdGEpO1xuXG4gICAgbGV0IGh5ZHJvMnMgPSBwcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RzQnlUeXBlKFxuICAgICAgXCJTZWFzdGF0ZUh5ZHJvMlwiXG4gICAgKSBhcyBTZWFzdGF0ZUh5ZHJvMltdO1xuICAgIGRhdENhcmREYXRhID0gdGhpcy5yZW5kZXJvYmplY3RzU2VyaWFsaXplVG9DYXJkKGh5ZHJvMnMsIGRhdENhcmREYXRhKTtcblxuICAgIGxldCBsY3NlbHMgPSBwcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RzQnlUeXBlKFxuICAgICAgXCJTZWFzdGF0ZUxjc2VsXCJcbiAgICApIGFzIFNlYXN0YXRlTGNzZWxbXTtcbiAgICBkYXRDYXJkRGF0YSA9IHRoaXMucmVuZGVyb2JqZWN0c1NlcmlhbGl6ZVRvQ2FyZChsY3NlbHMsIGRhdENhcmREYXRhKTtcblxuICAgIGxldCB1Y3BhcnRzID0gcHJvY2Vzcy5maW5kUmVuZGVyT2JqZWN0c0J5VHlwZShcbiAgICAgIFwiU2Vhc3RhdGVVY3BhcnRcIlxuICAgICkgYXMgU2Vhc3RhdGVVY3BhcnRbXTtcbiAgICBkYXRDYXJkRGF0YSA9IHRoaXMucmVuZGVyb2JqZWN0c1NlcmlhbGl6ZVRvQ2FyZCh1Y3BhcnRzLCBkYXRDYXJkRGF0YSk7XG5cbiAgICBsZXQgZmlsZXMgPSBwcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RzQnlUeXBlKFxuICAgICAgXCJTZWFzdGF0ZUZpbGVcIlxuICAgICkgYXMgU2Vhc3RhdGVGaWxlW107XG4gICAgZGF0Q2FyZERhdGEgPSB0aGlzLnJlbmRlcm9iamVjdHNTZXJpYWxpemVUb0NhcmQoZmlsZXMsIGRhdENhcmREYXRhKTtcblxuICAgIGxldCBjZG1zID0gcHJvY2Vzcy5maW5kUmVuZGVyT2JqZWN0c0J5VHlwZShcIlNlYXN0YXRlQ2RtXCIpIGFzIFNlYXN0YXRlQ2RtW107XG4gICAgaWYgKGNkbXMubGVuZ3RoID4gMCkge1xuICAgICAgZGF0Q2FyZERhdGEgKz0gXCJDRE1cIiArIFwiXFxuXCI7XG4gICAgfVxuICAgIGRhdENhcmREYXRhID0gdGhpcy5yZW5kZXJvYmplY3RzU2VyaWFsaXplVG9DYXJkKGNkbXMsIGRhdENhcmREYXRhKTtcblxuICAgIC8vbWdyb3ZcbiAgICBsZXQgbWdyb3ZEaXZpZGVSTyA9IHByb2Nlc3MuZmluZFJlbmRlck9iamVjdEJ5TmFtZShcbiAgICAgIFwi5rW355Sf54mp5Y6a5bqm5oyJ6auY56iL5YiG6ImyXCJcbiAgICApIGFzIENvbG9yRGl2TUdST1ZPYmplY3Q7XG4gICAgaWYgKG1ncm92RGl2aWRlUk8pIHtcbiAgICAgIGRhdENhcmREYXRhICs9IFwiTUdST1ZcIiArIFwiXFxuXCI7XG4gICAgICBsZXQgbWdyb3ZzID0gbWdyb3ZEaXZpZGVSTy5tZ3Jvdkxpc3Q7XG4gICAgICBkYXRDYXJkRGF0YSA9IHRoaXMucmVuZGVyb2JqZWN0c1NlcmlhbGl6ZVRvQ2FyZChtZ3JvdnMsIGRhdENhcmREYXRhKTtcbiAgICB9XG4gICAgLy9jb3JyelxuICAgIGxldCBjb3JyekRpdmlkZVJPID0gcHJvY2Vzcy5maW5kUmVuZGVyT2JqZWN0QnlOYW1lKFxuICAgICAgXCLohZDomoDkvZnph4/mjInpq5jnqIvliIboibJcIlxuICAgICkgYXMgQ29sb3JEaXZDT1JSWk9iamVjdDtcbiAgICBpZiAoY29ycnpEaXZpZGVSTykge1xuICAgICAgZGF0Q2FyZERhdGEgKz0gXCJDT1JSWlwiICsgXCJcXG5cIjtcbiAgICAgIGxldCBjb3JyenMgPSBjb3JyekRpdmlkZVJPLmNvcnJ6TGlzdDtcbiAgICAgIGRhdENhcmREYXRhID0gdGhpcy5yZW5kZXJvYmplY3RzU2VyaWFsaXplVG9DYXJkKGNvcnJ6cywgZGF0Q2FyZERhdGEpO1xuICAgIH1cbiAgICAvLyAvL2luY3dndFxuICAgIC8vIGxldCBpbmN3Z3RzID0gcHJvY2Vzcy5maW5kUmVuZGVyT2JqZWN0c0J5VHlwZShcbiAgICAvLyAgIFwiU2Vhc3RhdGVJbmN3Z3RcIlxuICAgIC8vICkgYXMgU2Vhc3RhdGVJbmN3Z3RbXTtcbiAgICAvLyBkYXRDYXJkRGF0YSA9IHRoaXMucmVuZGVyb2JqZWN0c1NlcmlhbGl6ZVRvQ2FyZChpbmN3Z3RzLCBkYXRDYXJkRGF0YSk7XG4gICAgLy8gLy9hY2NlbFxuICAgIC8vIGxldCBhY2NlbHMgPSBwcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RzQnlUeXBlKFxuICAgIC8vICAgXCJTZWFzdGF0ZUFjY2VsXCJcbiAgICAvLyApIGFzIFNlYXN0YXRlQWNjZWxbXTtcbiAgICAvLyBkYXRDYXJkRGF0YSA9IHRoaXMucmVuZGVyb2JqZWN0c1NlcmlhbGl6ZVRvQ2FyZChhY2NlbHMsIGRhdENhcmREYXRhKTtcbiAgICAvLyAvL2RlYWRcbiAgICAvLyBsZXQgZGVhZHMgPSBwcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RzQnlUeXBlKFxuICAgIC8vICAgXCJTZWFzdGF0ZURlYWRcIlxuICAgIC8vICkgYXMgU2Vhc3RhdGVEZWFkW107XG4gICAgLy8gZGF0Q2FyZERhdGEgPSB0aGlzLnJlbmRlcm9iamVjdHNTZXJpYWxpemVUb0NhcmQoZGVhZHMsIGRhdENhcmREYXRhKTtcbiAgICAvL2xvYWRcbiAgICBsZXQgbG9hZE5vZGUgPSBwcm9jZXNzLmZpbmRDYWVPYmplY3RCeU5hbWVJbkNoaWxkT2JqZWN0KFxuICAgICAgcHJvY2Vzcy5jYWVSZW5kZXJPYmplY3RUcmVlTWFuYWdlci5wb3N0UmVzdWx0Tm9kZSxcbiAgICAgIFwi6I236L295bel5Ya1XCJcbiAgICApO1xuICAgIGlmIChsb2FkTm9kZSkge1xuICAgICAgaWYgKGxvYWROb2RlLmNoaWxkT2JqZWN0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGRhdENhcmREYXRhICs9IFwiTE9BRFxcblwiO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsb2FkTm9kZS5jaGlsZE9iamVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IGxvYWRDb25kaXRpb24gPSBsb2FkTm9kZS5jaGlsZE9iamVjdHNbaV0gYXMgTG9hZENvbmRpdGlvbk9iamVjdDtcbiAgICAgICAgLy9jdXJyXG4gICAgICAgIC8vd2luZFxuICAgICAgICAvL3dhdmVcbiAgICAgICAgZGF0Q2FyZERhdGEgKz0gbG9hZENvbmRpdGlvbi5zZXJpYWxpemVUb0NhcmRTZWFJbnAoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy9sY29tYlxuICAgIGxldCBsY29tYnMgPSBwcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RzQnlUeXBlKFxuICAgICAgXCJTZWFzdGF0ZUxjb21iXCJcbiAgICApIGFzIFNlYXN0YXRlTGNvbWJbXTtcbiAgICBkYXRDYXJkRGF0YSA9IHRoaXMucmVuZGVyb2JqZWN0c1NlcmlhbGl6ZVRvQ2FyZChsY29tYnMsIGRhdENhcmREYXRhKTtcbiAgICAvL1xuICAgIGlmKGlzRXhwb3J0Q29tcG9uZW50R3JvdXApIHtcbiAgICAgIGxldCBjYXJkID0gdGhpcy5leHBvcnREQVRGaWxlX0NvbXBvbmVudEdyb3VwKCk7XG4gICAgICBkYXRDYXJkRGF0YSArPSBjYXJkO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRDYXJkRGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiDlr7zlh7rmqKHlnovljaHniYfmlbDmja4uXG4gICAqL1xuICBleHBvcnREQVRGaWxlX1NhY2lucChpc0V4cG9ydENvbXBvbmVudEdyb3VwID0gdHJ1ZSkge1xuICAgIC8vXG4gICAgY29uc29sZS5sb2coXCJleHBvcnRfc2FjaW5wXCIpO1xuICAgIGxldCBwcm9jZXNzID0gdGhpcy52aWV3ZXIucHJvY2VzcyBhcyBQcm9jZXNzO1xuICAgIGxldCB0cmVlID0gcHJvY2Vzcy5jYWVSZW5kZXJPYmplY3RUcmVlTWFuYWdlcjtcblxuICAgIGxldCBkYXRDYXJkRGF0YSA9IFwiXCI7XG5cbiAgICBsZXQgdGlsbGUgPSBwcm9jZXNzLmZpbmRDYWVPYmplY3RCeU5hbWVJbkNoaWxkT2JqZWN0KFxuICAgICAgdHJlZS5zYWNpbnBOb2RlLFxuICAgICAgXCJUSVRMRVwiXG4gICAgKSBhcyBNb2RlbFRpdGxlO1xuICAgIGlmICh0aWxsZSkge1xuICAgICAgbGV0IGxpbmUgPSB0aWxsZS5zZXJpYWxpemVUb0NhcmQoKTtcbiAgICAgIGRhdENhcmREYXRhICs9IGxpbmUgKz0gXCJcXG5cIjtcbiAgICB9XG5cbiAgICBsZXQgb3B0aW9ucyA9IHByb2Nlc3MuZmluZFJlbmRlck9iamVjdHNCeVR5cGUoXG4gICAgICBcIk1vZGVsT3B0aW9uc1wiXG4gICAgKSBhcyBNb2RlbE9wdGlvbnNbXTtcbiAgICBkYXRDYXJkRGF0YSA9IHRoaXMucmVuZGVyb2JqZWN0c1NlcmlhbGl6ZVRvQ2FyZChvcHRpb25zLCBkYXRDYXJkRGF0YSk7XG5cbiAgICBsZXQgY29kZXMgPSBwcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RzQnlUeXBlKFwiTW9kZWxDb2RlSXNcIikgYXMgTW9kZWxDb2RlSXNbXTtcbiAgICBkYXRDYXJkRGF0YSA9IHRoaXMucmVuZGVyb2JqZWN0c1NlcmlhbGl6ZVRvQ2FyZChjb2RlcywgZGF0Q2FyZERhdGEpO1xuXG4gICAgZGF0Q2FyZERhdGEgKz0gXCJTRUNUXFxuXCI7XG4gICAgZGF0Q2FyZERhdGEgPSB0aGlzLmV4cG9ydFNlY3Rpb25EYXRhKGRhdENhcmREYXRhKTtcblxuICAgIGxldCBncnVwcyA9IHRoaXMudmlld2VyLnByb2Nlc3MuZmluZFJlbmRlck9iamVjdHNCeVR5cGUoXCJHcnVwT2JqZWN0XCIpO1xuICAgIGlmIChncnVwcy5sZW5ndGggPiAwKSB7XG4gICAgICBkYXRDYXJkRGF0YSArPSBcIkdSVVBcXG5cIjtcbiAgICB9XG4gICAgZGF0Q2FyZERhdGEgPSB0aGlzLnJlbmRlcm9iamVjdHNTZXJpYWxpemVUb0NhcmQoZ3J1cHMsIGRhdENhcmREYXRhKTtcblxuICAgIGxldCBqb2ludHMgPSB0aGlzLnZpZXdlci5wcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RzQnlUeXBlKFwiSm9pbnRPYmplY3RcIik7XG4gICAgaWYgKGpvaW50cy5sZW5ndGggPiAwKSB7XG4gICAgICBkYXRDYXJkRGF0YSArPSBcIkpPSU5UXFxuXCI7XG4gICAgfVxuICAgIGRhdENhcmREYXRhID0gdGhpcy5yZW5kZXJvYmplY3RzU2VyaWFsaXplVG9DYXJkKGpvaW50cywgZGF0Q2FyZERhdGEpO1xuXG4gICAgbGV0IG1lbWJlcnMgPSB0aGlzLnZpZXdlci5wcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RzQnlUeXBlKFwiTWVtYmVyT2JqZWN0XCIpO1xuICAgIGlmIChtZW1iZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIGRhdENhcmREYXRhICs9IFwiTUVNQkVSXFxuXCI7XG4gICAgfVxuICAgIGRhdENhcmREYXRhID0gdGhpcy5yZW5kZXJvYmplY3RzU2VyaWFsaXplVG9DYXJkKG1lbWJlcnMsIGRhdENhcmREYXRhKTtcblxuICAgIGxldCBwR3J1cHMgPSB0aGlzLnZpZXdlci5wcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RzQnlUeXBlKFwiUEdydXBPYmplY3RcIik7XG4gICAgaWYgKHBHcnVwcy5sZW5ndGggPiAwKSB7XG4gICAgICBkYXRDYXJkRGF0YSArPSBcIlBHUlVQXFxuXCI7XG4gICAgfVxuICAgIGRhdENhcmREYXRhID0gdGhpcy5yZW5kZXJvYmplY3RzU2VyaWFsaXplVG9DYXJkKHBHcnVwcywgZGF0Q2FyZERhdGEpO1xuXG4gICAgbGV0IHBsYXRlcyA9IHRoaXMudmlld2VyLnByb2Nlc3MuZmluZFJlbmRlck9iamVjdHNCeVR5cGUoXCJQbGF0ZU9iamVjdFwiKTtcbiAgICBpZiAocGxhdGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGRhdENhcmREYXRhICs9IFwiUExBVEVcXG5cIjtcbiAgICB9XG4gICAgZGF0Q2FyZERhdGEgPSB0aGlzLnJlbmRlcm9iamVjdHNTZXJpYWxpemVUb0NhcmQocGxhdGVzLCBkYXRDYXJkRGF0YSk7XG5cbiAgICBsZXQgbG9hZE5vZGUgPSBwcm9jZXNzLmZpbmRDYWVPYmplY3RCeU5hbWVJbkNoaWxkT2JqZWN0KFxuICAgICAgcHJvY2Vzcy5jYWVSZW5kZXJPYmplY3RUcmVlTWFuYWdlci5wb3N0UmVzdWx0Tm9kZSxcbiAgICAgIFwi6I236L295bel5Ya1XCJcbiAgICApO1xuICAgIGlmIChsb2FkTm9kZSkge1xuICAgICAgaWYgKGxvYWROb2RlLmNoaWxkT2JqZWN0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGRhdENhcmREYXRhICs9IFwiTE9BRFxcblwiO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsb2FkTm9kZS5jaGlsZE9iamVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IGxvYWRDb25kaXRpb24gPSBsb2FkTm9kZS5jaGlsZE9iamVjdHNbaV0gYXMgTG9hZENvbmRpdGlvbk9iamVjdDtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBsb2FkQ29uZGl0aW9uLmNoaWxkT2JqZWN0cy5sZW5ndGg7IGorKykge1xuICAgICAgICAgIGxldCBsb2FkR3JvdXAgPSBsb2FkQ29uZGl0aW9uLmNoaWxkT2JqZWN0c1tqXSBhcyBMb2FkR3JvdXBPYmplY3Q7XG4gICAgICAgICAgaWYgKGxvYWRHcm91cCBpbnN0YW5jZW9mIExvYWRHcm91cE9iamVjdCkge1xuICAgICAgICAgICAgZGF0Q2FyZERhdGEgKz0gbG9hZEdyb3VwLnNlcmlhbGl6ZVRvQ2FyZFNhY0lucCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBjZW50ZXJzID0gdGhpcy52aWV3ZXIucHJvY2Vzcy5maW5kUmVuZGVyT2JqZWN0c0J5VHlwZShcIk1vZGVsQ2VudGVyXCIpO1xuICAgIGRhdENhcmREYXRhID0gdGhpcy5yZW5kZXJvYmplY3RzU2VyaWFsaXplVG9DYXJkKGNlbnRlcnMsIGRhdENhcmREYXRhKTtcblxuICAgIC8vIHdlaWdodFxuICAgIGxldCB3ZWlnaHROb2RlID0gcHJvY2Vzcy5maW5kQ2FlT2JqZWN0QnlOYW1lSW5DaGlsZE9iamVjdChcbiAgICAgIHByb2Nlc3MuY2FlUmVuZGVyT2JqZWN0VHJlZU1hbmFnZXIucHJldHJlYXRtZW50Tm9kZSxcbiAgICAgIFwi6ZmE5Yqg6LSo6YePXCJcbiAgICApO1xuICAgIGlmICh3ZWlnaHROb2RlKSB7XG4gICAgICBkYXRDYXJkRGF0YSArPSAnXFxuJ1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB3ZWlnaHROb2RlLmNoaWxkT2JqZWN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgd2VpZ2h0R3JvdXAgPSB3ZWlnaHROb2RlLmNoaWxkT2JqZWN0c1tpXSBhcyBXZWlnaHRHcm91cE9iamVjdDtcbiAgICAgICAgZGF0Q2FyZERhdGEgKz0gd2VpZ2h0R3JvdXAuc2VyaWFsaXplVG9DYXJkU2FjSW5wKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHdndG1lbXMgPSB0aGlzLnZpZXdlci5wcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RzQnlUeXBlKFwiV0dUTUVNT2JqZWN0XCIpO1xuICAgIGlmICh3Z3RtZW1zLmxlbmd0aCA+IDApIHtcbiAgICAgIGRhdENhcmREYXRhICs9IFwiV0dUTUVNXFxuXCI7XG4gICAgfVxuICAgIGRhdENhcmREYXRhID0gdGhpcy5yZW5kZXJvYmplY3RzU2VyaWFsaXplVG9DYXJkKHdndG1lbXMsIGRhdENhcmREYXRhKTtcblxuICAgIGlmKGlzRXhwb3J0Q29tcG9uZW50R3JvdXApIHtcbiAgICAgIGxldCBjYXJkID0gdGhpcy5leHBvcnREQVRGaWxlX0NvbXBvbmVudEdyb3VwKCk7XG4gICAgICBkYXRDYXJkRGF0YSArPSBjYXJkO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gZGF0Q2FyZERhdGE7XG4gIH1cblxuICAvKipcbiAgICog5YiG57uE5Y2h54mH5pWw5o2u77yM5a+85Ye65qih5Z6L5ZKM5a+85Ye65rW35Ya16YO96ZyA6KaB77yM5Zug5q2k5Y2V54us5o+Q5Ye65p2lLlxuICAgKi9cbiAgcHJpdmF0ZSBleHBvcnREQVRGaWxlX0NvbXBvbmVudEdyb3VwKCkge1xuICAgIGxldCBkYXRDYXJkRGF0YSA9IFwiXCI7XG5cbiAgICAvL2NvbXBvbmVudCBncm91cFxuICAgIGxldCBwcm9jZXNzID0gdGhpcy52aWV3ZXIucHJvY2VzcyBhcyBQcm9jZXNzO1xuICAgIGxldCBncm91cFBhcmVudE5vZGUgPSBwcm9jZXNzLmZpbmRDYWVPYmplY3RCeU5hbWVJbkNoaWxkT2JqZWN0KFxuICAgICAgcHJvY2Vzcy5jYWVSZW5kZXJPYmplY3RUcmVlTWFuYWdlci5wcmV0cmVhdG1lbnROb2RlLFxuICAgICAgXCLmnoTku7bliIbnu4TliIboibJcIlxuICAgICk7XG4gICAgaWYgKGdyb3VwUGFyZW50Tm9kZSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBncm91cFBhcmVudE5vZGUuY2hpbGRPYmplY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBncm91cE9iamVjdCA9IGdyb3VwUGFyZW50Tm9kZS5jaGlsZE9iamVjdHNbXG4gICAgICAgICAgaVxuICAgICAgICBdIGFzIENvbG9yRGl2Q29tcG9uZW50R3JvdXBPYmplY3Q7XG4gICAgICAgIGRhdENhcmREYXRhICs9IGdyb3VwT2JqZWN0LnNlcmlhbGl6ZVRvQ2FyZCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRDYXJkRGF0YTtcbiAgfVxuXG4gIHJlbmRlcm9iamVjdHNTZXJpYWxpemVUb0NhcmQoXG4gICAgcmVuZGVyT2JqZWN0czogTG9uZ2FuLlJlbmRlck9iamVjdFtdLFxuICAgIGRhdENhcmREYXRhOiBzdHJpbmdcbiAgKSB7XG4gICAgaWYgKHJlbmRlck9iamVjdHMgJiYgcmVuZGVyT2JqZWN0cy5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlbmRlck9iamVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IG9iaiA9IHJlbmRlck9iamVjdHNbaV07XG4gICAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBEZXNpZ25CYXNlT2JqZWN0KSB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgb2JqLmJ1c2luZXNzU3RhdGUgPT09IEJ1c2luZXNzU3RhdGUuRGVsZXRpbmcgfHxcbiAgICAgICAgICAgIG9iai5idXNpbmVzc1N0YXRlID09PSBCdXNpbmVzc1N0YXRlLkRlYWRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxldCBsaW5lID0gKHJlbmRlck9iamVjdHNbaV0gYXMgYW55KS5zZXJpYWxpemVUb0NhcmQoKTtcbiAgICAgICAgICBkYXRDYXJkRGF0YSArPSBsaW5lICs9IFwiXFxuXCI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGF0Q2FyZERhdGE7XG4gIH1cblxuICAvKipcbiAgICog5a+85Ye6U0FDSU5Q55qE5p2G5Lu25pWw5o2uXG4gICAqL1xuICBleHBvcnRNZW1iZXJEYXRhKGlzRXhwb3J0QWxsOiBib29sZWFuID0gdHJ1ZSkge1xuICAgIGxldCBncnVwcyA9IG5ldyBBcnJheTxHcnVwT2JqZWN0PigpO1xuICAgIGxldCBqb2ludHMgPSBuZXcgQXJyYXk8Sm9pbnRPYmplY3Q+KCk7XG4gICAgbGV0IG1lbWJlcnMgPSBuZXcgQXJyYXk8TWVtYmVyT2JqZWN0PigpO1xuXG4gICAgbGV0IHByb2Nlc3MgPSB0aGlzLnZpZXdlci5wcm9jZXNzIGFzIFByb2Nlc3M7XG4gICAgbGV0IHRyZWUgPSBwcm9jZXNzLmNhZVJlbmRlck9iamVjdFRyZWVNYW5hZ2VyO1xuXG4gICAgbGV0IGRhdENhcmREYXRhID0gXCJcIjtcblxuICAgIGxldCB0aWxsZSA9IHByb2Nlc3MuZmluZENhZU9iamVjdEJ5TmFtZUluQ2hpbGRPYmplY3QoXG4gICAgICB0cmVlLnNhY2lucE5vZGUsXG4gICAgICBcIlRJVExFXCJcbiAgICApIGFzIE1vZGVsVGl0bGU7XG4gICAgaWYgKHRpbGxlKSB7XG4gICAgICBsZXQgbGluZSA9IHRpbGxlLnNlcmlhbGl6ZVRvQ2FyZCgpO1xuICAgICAgZGF0Q2FyZERhdGEgKz0gbGluZSArPSBcIlxcblwiO1xuICAgIH1cblxuICAgIGxldCBvcHRpb25zID0gcHJvY2Vzcy5maW5kUmVuZGVyT2JqZWN0c0J5VHlwZShcbiAgICAgIFwiTW9kZWxPcHRpb25zXCJcbiAgICApIGFzIE1vZGVsT3B0aW9uc1tdO1xuICAgIGRhdENhcmREYXRhID0gdGhpcy5yZW5kZXJvYmplY3RzU2VyaWFsaXplVG9DYXJkKG9wdGlvbnMsIGRhdENhcmREYXRhKTtcblxuICAgIGxldCBjb2RlcyA9IHByb2Nlc3MuZmluZFJlbmRlck9iamVjdHNCeVR5cGUoXCJNb2RlbENvZGVJc1wiKSBhcyBNb2RlbENvZGVJc1tdO1xuICAgIGRhdENhcmREYXRhID0gdGhpcy5yZW5kZXJvYmplY3RzU2VyaWFsaXplVG9DYXJkKGNvZGVzLCBkYXRDYXJkRGF0YSk7XG5cbiAgICAvLyDlr7zlh7rmiKrpnaLmlbDmja5cbiAgICBkYXRDYXJkRGF0YSArPSBcIlNFQ1RcXG5cIjtcbiAgICBkYXRDYXJkRGF0YSA9IHRoaXMuZXhwb3J0U2VjdGlvbkRhdGEoZGF0Q2FyZERhdGEpO1xuXG4gICAgaWYgKGlzRXhwb3J0QWxsKSB7XG4gICAgICAvLyDlr7zlh7rmnYbku7bmiKrpnaLnu4TmlbDmja5cbiAgICAgIGdydXBzID0gdGhpcy52aWV3ZXIucHJvY2Vzcy5maW5kUmVuZGVyT2JqZWN0c0J5VHlwZShcIkdydXBPYmplY3RcIik7XG4gICAgICAvLyDlr7zlh7rnqbrpl7TngrnmlbDmja5cbiAgICAgIGpvaW50cyA9IHRoaXMudmlld2VyLnByb2Nlc3MuZmluZFJlbmRlck9iamVjdHNCeVR5cGUoXCJKb2ludE9iamVjdFwiKTtcbiAgICAgIC8vIOWvvOWHuuadhuS7tuaVsOaNrlxuICAgICAgbWVtYmVycyA9IHRoaXMudmlld2VyLnByb2Nlc3MuZmluZFJlbmRlck9iamVjdHNCeVR5cGUoXCJNZW1iZXJPYmplY3RcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBzZWxlY3RvciA9IHRoaXMudmlld2VyLm9wZXJhdG9yTWFuYWdlci5maW5kKFxuICAgICAgICBcIkNBRU9iamVjdFNlbGVjdG9yXCJcbiAgICAgICkgYXMgQ0FFT2JqZWN0U2VsZWN0b3I7XG4gICAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgICAgbGV0IGxhc3RUeXBlID0gKHRoaXMudmlld2VyIGFzIFZpZXdlcikuc2VsZWN0aW9uSW50ZXJmYWNlTWFuYWdlclxuICAgICAgICAgIC5zZWxlY3RvckZpbHRlcjtcbiAgICAgICAgKHRoaXMudmlld2VyIGFzIFZpZXdlcikuc2VsZWN0aW9uSW50ZXJmYWNlTWFuYWdlci5zZWxlY3RvckZpbHRlciA9XG4gICAgICAgICAgU2VsZWN0b3JGaWxpdGVyLk1lbWJlcjtcbiAgICAgICAgc2VsZWN0b3Iuc2VsZWN0QnlBcmVhKFstMSwgMV0sIFsxLCAtMV0pO1xuXG4gICAgICAgIGxldCBzZWxlY3RlZEtleXMgPSB0aGlzLnZpZXdlci5zZWxlY3Rpb25NYW5hZ2VyLnNlbGVjdGVkS2V5cztcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWxlY3RlZEtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBsZXQgcm8gPSB0aGlzLnZpZXdlci5wcm9jZXNzLmdldFJlbmRlck9iamVjdEJ5U2VnbWVudEtleShcbiAgICAgICAgICAgIHNlbGVjdGVkS2V5c1tpXVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKHJvICYmIHJvIGluc3RhbmNlb2YgTWVtYmVyT2JqZWN0ICYmIG1lbWJlcnMuaW5kZXhPZihybykgPT09IC0xKSB7XG4gICAgICAgICAgICBtZW1iZXJzLnB1c2gocm8pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudmlld2VyLnNlbGVjdGlvbk1hbmFnZXIuY2xlYXJBbGxTZWxlY3Rpb25BbmRIaWdobGlnaHQoKTtcbiAgICAgICAgdGhpcy52aWV3ZXIudXBkYXRlRGlzcGxheSgpO1xuXG4gICAgICAgICh0aGlzLnZpZXdlciBhcyBWaWV3ZXIpLnNlbGVjdGlvbkludGVyZmFjZU1hbmFnZXIuc2VsZWN0b3JGaWx0ZXIgPVxuICAgICAgICAgIGxhc3RUeXBlO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWVtYmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGxldCBzdGFydCA9IG1lbWJlcnNbaV0uc3RhcnQ7XG4gICAgICAgICAgbGV0IGVuZCA9IG1lbWJlcnNbaV0uZW5kO1xuICAgICAgICAgIGxldCBncnVwID0gbWVtYmVyc1tpXS5ncnVwO1xuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgc3RhcnQgJiZcbiAgICAgICAgICAgIHN0YXJ0IGluc3RhbmNlb2YgSm9pbnRPYmplY3QgJiZcbiAgICAgICAgICAgIGpvaW50cy5pbmRleE9mKHN0YXJ0KSA9PT0gLTFcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGpvaW50cy5wdXNoKHN0YXJ0KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZW5kICYmIGVuZCBpbnN0YW5jZW9mIEpvaW50T2JqZWN0ICYmIGpvaW50cy5pbmRleE9mKGVuZCkgPT09IC0xKSB7XG4gICAgICAgICAgICBqb2ludHMucHVzaChlbmQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGdydXAgJiZcbiAgICAgICAgICAgIGdydXAgaW5zdGFuY2VvZiBHcnVwT2JqZWN0ICYmXG4gICAgICAgICAgICBncnVwcy5pbmRleE9mKGdydXApID09PSAtMVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgZ3J1cHMucHVzaChncnVwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZ3J1cHMubGVuZ3RoID4gMCkge1xuICAgICAgZGF0Q2FyZERhdGEgKz0gXCJHUlVQXFxuXCI7XG4gICAgfVxuICAgIGRhdENhcmREYXRhID0gdGhpcy5yZW5kZXJvYmplY3RzU2VyaWFsaXplVG9DYXJkKGdydXBzLCBkYXRDYXJkRGF0YSk7XG5cbiAgICBpZiAoam9pbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGRhdENhcmREYXRhICs9IFwiSk9JTlRcXG5cIjtcbiAgICB9XG4gICAgZGF0Q2FyZERhdGEgPSB0aGlzLnJlbmRlcm9iamVjdHNTZXJpYWxpemVUb0NhcmQoam9pbnRzLCBkYXRDYXJkRGF0YSk7XG5cbiAgICBpZiAobWVtYmVycy5sZW5ndGggPiAwKSB7XG4gICAgICBkYXRDYXJkRGF0YSArPSBcIk1FTUJFUlxcblwiO1xuICAgIH1cbiAgICBkYXRDYXJkRGF0YSA9IHRoaXMucmVuZGVyb2JqZWN0c1NlcmlhbGl6ZVRvQ2FyZChtZW1iZXJzLCBkYXRDYXJkRGF0YSk7XG5cbiAgICByZXR1cm4gZGF0Q2FyZERhdGE7XG4gIH1cblxuICAvKipcbiAgICog5a+85Ye65qGp5pWw5o2uLlxuICAgKi9cbiAgZXhwb3J0UGlsZURhdGEoaXNFeHBvcnRBbGwgPSB0cnVlKSB7XG4gICAgbGV0IHBpbGVzID0gbmV3IEFycmF5PExvbmdhbi5SZW5kZXJPYmplY3Q+KCk7XG5cbiAgICBpZiAoaXNFeHBvcnRBbGwpIHtcbiAgICAgIHBpbGVzID0gdGhpcy52aWV3ZXIucHJvY2Vzcy5maW5kUmVuZGVyT2JqZWN0c0J5VHlwZShcIlBpbGVPYmplY3RcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBzZWxlY3RvciA9IHRoaXMudmlld2VyLm9wZXJhdG9yTWFuYWdlci5maW5kKFxuICAgICAgICBcIkNBRU9iamVjdFNlbGVjdG9yXCJcbiAgICAgICkgYXMgQ0FFT2JqZWN0U2VsZWN0b3I7XG4gICAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgICAgbGV0IGxhc3RUeXBlID0gKHRoaXMudmlld2VyIGFzIFZpZXdlcikuc2VsZWN0aW9uSW50ZXJmYWNlTWFuYWdlclxuICAgICAgICAgIC5zZWxlY3RvckZpbHRlcjtcbiAgICAgICAgKHRoaXMudmlld2VyIGFzIFZpZXdlcikuc2VsZWN0aW9uSW50ZXJmYWNlTWFuYWdlci5zZWxlY3RvckZpbHRlciA9XG4gICAgICAgICAgU2VsZWN0b3JGaWxpdGVyLk1lbWJlcjtcbiAgICAgICAgc2VsZWN0b3Iuc2VsZWN0QnlBcmVhKFstMSwgMV0sIFsxLCAtMV0pO1xuXG4gICAgICAgIGxldCBzZWxlY3RlZEtleXMgPSB0aGlzLnZpZXdlci5zZWxlY3Rpb25NYW5hZ2VyLnNlbGVjdGVkS2V5cztcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWxlY3RlZEtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBsZXQgcm8gPSB0aGlzLnZpZXdlci5wcm9jZXNzLmdldFJlbmRlck9iamVjdEJ5U2VnbWVudEtleShcbiAgICAgICAgICAgIHNlbGVjdGVkS2V5c1tpXVxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKHJvICYmIHJvIGluc3RhbmNlb2YgUGlsZU9iamVjdCAmJiBwaWxlcy5pbmRleE9mKHJvKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHBpbGVzLnB1c2gocm8pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudmlld2VyLnNlbGVjdGlvbk1hbmFnZXIuY2xlYXJBbGxTZWxlY3Rpb25BbmRIaWdobGlnaHQoKTtcbiAgICAgICAgdGhpcy52aWV3ZXIudXBkYXRlRGlzcGxheSgpO1xuXG4gICAgICAgICh0aGlzLnZpZXdlciBhcyBWaWV3ZXIpLnNlbGVjdGlvbkludGVyZmFjZU1hbmFnZXIuc2VsZWN0b3JGaWx0ZXIgPVxuICAgICAgICAgIGxhc3RUeXBlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwaWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGxldCBwcm9jZXNzID0gdGhpcy52aWV3ZXIucHJvY2VzcyBhcyBQcm9jZXNzO1xuICAgIGxldCB0cmVlID0gcHJvY2Vzcy5jYWVSZW5kZXJPYmplY3RUcmVlTWFuYWdlcjtcblxuICAgIGxldCBkYXRDYXJkRGF0YSA9IFwiXCI7XG5cbiAgICBsZXQgdGl0bGUgPSBudWxsO1xuICAgIHRpdGxlID0gKHRoaXMudmlld2VyIGFzIFZpZXdlcikuZGF0UmVhZGVyTWFuYWdlci5wc2lUaXRsZT8uZ2V0TGluZSgpO1xuICAgIGlmICh0aXRsZSkge1xuICAgICAgZGF0Q2FyZERhdGEgKz0gdGl0bGUgKz0gXCJcXG5cIjtcbiAgICB9XG5cbiAgICBsZXQgcHNpb3B0ID0gbnVsbDtcbiAgICBwc2lvcHQgPSAodGhpcy52aWV3ZXIgYXMgVmlld2VyKS5kYXRSZWFkZXJNYW5hZ2VyLnBzaW9wdD8uZ2V0TGluZSgpO1xuICAgIGlmIChwc2lvcHQpIHtcbiAgICAgIGRhdENhcmREYXRhICs9IHBzaW9wdCArPSBcIlxcblwiO1xuICAgIH1cblxuICAgIGxldCBwbHRycSA9IG51bGw7XG4gICAgcGx0cnEgPSAodGhpcy52aWV3ZXIgYXMgVmlld2VyKS5kYXRSZWFkZXJNYW5hZ2VyLnBsdHJxPy5nZXRMaW5lKCk7XG4gICAgaWYgKHBsdHJxKSB7XG4gICAgICBkYXRDYXJkRGF0YSArPSBwbHRycSArPSBcIlxcblwiO1xuICAgIH1cblxuICAgIC8vIOWvvOWHuuahqeaIqumdoue7hOaVsOaNrlxuICAgIGxldCBncnVwcyA9IHRoaXMudmlld2VyLnByb2Nlc3MuZmluZFJlbmRlck9iamVjdHNCeVR5cGUoXCJQTEdydXBPYmplY3RcIik7XG4gICAgaWYgKGdydXBzLmxlbmd0aCA+IDApIHtcbiAgICAgIGRhdENhcmREYXRhICs9IFwiUExHUlVQXFxuXCI7XG4gICAgfVxuICAgIGRhdENhcmREYXRhID0gdGhpcy5yZW5kZXJvYmplY3RzU2VyaWFsaXplVG9DYXJkKGdydXBzLCBkYXRDYXJkRGF0YSk7XG5cbiAgICAvLyDlr7zlh7rmoanmlbDmja5cbiAgICBpZiAocGlsZXMubGVuZ3RoID4gMCkge1xuICAgICAgZGF0Q2FyZERhdGEgKz0gXCJQSUxFXFxuXCI7XG4gICAgfVxuICAgIGRhdENhcmREYXRhID0gdGhpcy5yZW5kZXJvYmplY3RzU2VyaWFsaXplVG9DYXJkKHBpbGVzLCBkYXRDYXJkRGF0YSk7XG5cbiAgICByZXR1cm4gZGF0Q2FyZERhdGE7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQWtEQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7O0FBRUE7QUFDQTs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUlBOztBQUVBO0FBQ0E7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTs7QUFFQTtBQUNBOztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7O0FBRUE7QUFDQTs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUlBOztBQUVBO0FBQ0E7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTs7QUFFQTtBQUNBOztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7O0FBRUE7QUFDQTs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUlBOztBQUVBO0FBQ0E7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTs7QUFFQTtBQUNBOztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7O0FBRUE7QUFDQTs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUlBOztBQUVBO0FBQ0E7O0FBR0E7QUFDQTtBQUtBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBSUE7QUFDQTtBQUNBOzs7QUFJQTtBQUdBO0FBRUE7QUFHQTtBQUVBO0FBR0E7QUFFQTtBQUdBO0FBRUE7QUFHQTtBQUVBO0FBR0E7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFHQTtBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUdBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBa0JBO0FBSUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFJQTs7O0FBSUE7QUFHQTtBQUVBO0FBQ0E7QUFDQTs7QUFHQTtBQUNBO0FBS0E7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBSUE7QUFDQTtBQUNBOztBQUdBO0FBR0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUVBO0FBSUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFNQTtBQUNBO0FBR0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFJQTtBQUNBO0FBQ0E7O0FBRUE7QUFFQTtBQUNBO0FBQ0E7O0FBR0E7QUFDQTtBQUtBO0FBQ0E7QUFHQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBR0E7OztBQUlBO0FBQ0E7QUFFQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTs7QUFHQTtBQUNBOzs7O0FBS0E7QUFDQTtBQUtBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBRUE7QUFJQTtBQUNBO0FBQ0E7O0FBR0E7QUFHQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFHQTtBQUNBOzs7QUFJQTtBQUNBO0FBRUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBS0E7O0FBR0E7QUFDQTs7QUFHQTtBQUtBOzs7OztBQU1BO0FBQ0E7O0FBRUE7QUFFQTtBQUNBOztBQUVBO0FBRUE7QUFDQTs7QUFFQTtBQUVBO0FBQ0E7QUFLQTs7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFHQTtBQUNBOzs7QUFJQTtBQUNBO0FBRUE7OztBQUtBO0FBQ0E7O0FBR0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBSUE7QUFDQTtBQUNBOztBQUVBO0FBR0E7QUFDQTs7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBN25CQTs7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./packages/caeDesign/src/gsDevFx/managers/datWriterManager.ts\n");
|
|
3979
|
+
eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__, exports, __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\"), __webpack_require__(/*! gs-bim-air */ \"./node_modules/gs-bim-air/lib/BimAir.umd.min.js\"), __webpack_require__(/*! ../objects/caeObjects/jointObject */ \"./packages/caeDesign/src/gsDevFx/objects/caeObjects/jointObject.ts\"), __webpack_require__(/*! ../objects/caeObjects/grupObject */ \"./packages/caeDesign/src/gsDevFx/objects/caeObjects/grupObject.ts\"), __webpack_require__(/*! ../objects/caeObjects/memberObject */ \"./packages/caeDesign/src/gsDevFx/objects/caeObjects/memberObject.ts\"), __webpack_require__(/*! gs-ceec-design */ \"./packages/ceecDesign/src/index.ts\"), __webpack_require__(/*! ../objects/loadObjects/loadGroupObject */ \"./packages/caeDesign/src/gsDevFx/objects/loadObjects/loadGroupObject.ts\"), __webpack_require__(/*! ./interfaceManagers/selectionInterfaceManager */ \"./packages/caeDesign/src/gsDevFx/managers/interfaceManagers/selectionInterfaceManager.ts\"), __webpack_require__(/*! ../objects/caeObjects/pileObject */ \"./packages/caeDesign/src/gsDevFx/objects/caeObjects/pileObject.ts\")], __WEBPACK_AMD_DEFINE_RESULT__ = (function (require, exports, tslib_1, gs_bim_air_1, jointObject_1, grupObject_1, memberObject_1, gs_ceec_design_1, loadGroupObject_1, selectionInterfaceManager_1, pileObject_1) {\n \"use strict\";\n\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n exports.DatWriterManager = void 0;\n var DatWriterManager = function (_super) {\n tslib_1.__extends(DatWriterManager, _super);\n function DatWriterManager(viewer) {\n return _super.call(this, viewer) || this;\n }\n DatWriterManager.prototype.exportDATFile = function () {\n console.log(\"export\");\n var data1 = this.exportDATFile_Sacinp(false);\n var data2 = this.exportDATFile_Seainp(false, true);\n var datCardData = data1 + data2;\n return datCardData;\n };\n DatWriterManager.prototype.exportSectionData = function (datCardData) {\n var tubs = this.viewer.process.findRenderObjectsByType(\"TubSectionObject\");\n for (var i = 0; i < tubs.length; i++) {\n var obj = tubs[i];\n if (obj.businessState === gs_ceec_design_1.BusinessState.Deleting || obj.businessState === gs_ceec_design_1.BusinessState.Dead) {\n continue;\n }\n var line = obj.serializeToCard();\n datCardData += line += \"\\n\";\n }\n var wfs = this.viewer.process.findRenderObjectsByType(\"WFSectionObject\");\n for (var i = 0; i < wfs.length; i++) {\n var obj = wfs[i];\n if (obj.businessState === gs_ceec_design_1.BusinessState.Deleting || obj.businessState === gs_ceec_design_1.BusinessState.Dead) {\n continue;\n }\n var line = obj.serializeToCard();\n datCardData += line += \"\\n\";\n }\n var boxs = this.viewer.process.findRenderObjectsByType(\"BoxSectionObject\");\n for (var i = 0; i < boxs.length; i++) {\n var obj = boxs[i];\n if (obj.businessState === gs_ceec_design_1.BusinessState.Deleting || obj.businessState === gs_ceec_design_1.BusinessState.Dead) {\n continue;\n }\n var line = obj.serializeToCard();\n datCardData += line += \"\\n\";\n }\n var pris = this.viewer.process.findRenderObjectsByType(\"PriSectionObject\");\n for (var i = 0; i < pris.length; i++) {\n var obj = pris[i];\n if (obj.businessState === gs_ceec_design_1.BusinessState.Deleting || obj.businessState === gs_ceec_design_1.BusinessState.Dead) {\n continue;\n }\n var line = obj.serializeToCard();\n datCardData += line += \"\\n\";\n }\n var cons = this.viewer.process.findRenderObjectsByType(\"ConSectionObject\");\n for (var i = 0; i < cons.length; i++) {\n var obj = cons[i];\n if (obj.businessState === gs_ceec_design_1.BusinessState.Deleting || obj.businessState === gs_ceec_design_1.BusinessState.Dead) {\n continue;\n }\n var line = obj.serializeToCard();\n datCardData += line += \"\\n\";\n }\n var chls = this.viewer.process.findRenderObjectsByType(\"ChlSectionObject\");\n for (var i = 0; i < chls.length; i++) {\n var obj = chls[i];\n if (obj.businessState === gs_ceec_design_1.BusinessState.Deleting || obj.businessState === gs_ceec_design_1.BusinessState.Dead) {\n continue;\n }\n var line = obj.serializeToCard();\n datCardData += line += \"\\n\";\n }\n var tees = this.viewer.process.findRenderObjectsByType(\"TeeSectionObject\");\n for (var i = 0; i < tees.length; i++) {\n var obj = tees[i];\n if (obj.businessState === gs_ceec_design_1.BusinessState.Deleting || obj.businessState === gs_ceec_design_1.BusinessState.Dead) {\n continue;\n }\n var line = obj.serializeToCard();\n datCardData += line += \"\\n\";\n }\n var angs = this.viewer.process.findRenderObjectsByType(\"AngSectionObject\");\n for (var i = 0; i < angs.length; i++) {\n var obj = angs[i];\n if (obj.businessState === gs_ceec_design_1.BusinessState.Deleting || obj.businessState === gs_ceec_design_1.BusinessState.Dead) {\n continue;\n }\n var line = obj.serializeToCard();\n datCardData += line += \"\\n\";\n }\n var dtbs = this.viewer.process.findRenderObjectsByType(\"DtbSectionObject\");\n for (var i = 0; i < dtbs.length; i++) {\n var obj = dtbs[i];\n if (obj.businessState === gs_ceec_design_1.BusinessState.Deleting || obj.businessState === gs_ceec_design_1.BusinessState.Dead) {\n continue;\n }\n var line = obj.serializeToCard();\n datCardData += line += \"\\n\";\n }\n var rtbs = this.viewer.process.findRenderObjectsByType(\"RtbSectionObject\");\n for (var i = 0; i < rtbs.length; i++) {\n var obj = rtbs[i];\n if (obj.businessState === gs_ceec_design_1.BusinessState.Deleting || obj.businessState === gs_ceec_design_1.BusinessState.Dead) {\n continue;\n }\n var line = obj.serializeToCard();\n datCardData += line += \"\\n\";\n }\n var blbs = this.viewer.process.findRenderObjectsByType(\"BlbSectionObject\");\n for (var i = 0; i < blbs.length; i++) {\n var obj = blbs[i];\n if (obj.businessState === gs_ceec_design_1.BusinessState.Deleting || obj.businessState === gs_ceec_design_1.BusinessState.Dead) {\n continue;\n }\n var line = obj.serializeToCard();\n datCardData += line += \"\\n\";\n }\n return datCardData;\n };\n DatWriterManager.prototype.exportDATFile_Seainp = function (exportTitle, isExportComponentGroup) {\n if (exportTitle === void 0) {\n exportTitle = true;\n }\n if (isExportComponentGroup === void 0) {\n isExportComponentGroup = true;\n }\n console.log(\"export_seainp\");\n var process = this.viewer.process;\n var tree = process.caeRenderObjectTreeManager;\n var datCardData = \"\";\n if (exportTitle) {\n var tille = process.findCaeObjectByNameInChildObject(tree.sacinpNode, \"TITLE\");\n if (tille) {\n var line = tille.serializeToCard();\n datCardData += line += \"\\n\";\n }\n }\n var ldopts = process.findRenderObjectsByType(\"SeastateLdopt\");\n datCardData = this.renderobjectsSerializeToCard(ldopts, datCardData);\n var hydros = process.findRenderObjectsByType(\"SeastateHydro\");\n datCardData = this.renderobjectsSerializeToCard(hydros, datCardData);\n var hydro2s = process.findRenderObjectsByType(\"SeastateHydro2\");\n datCardData = this.renderobjectsSerializeToCard(hydro2s, datCardData);\n var lcsels = process.findRenderObjectsByType(\"SeastateLcsel\");\n datCardData = this.renderobjectsSerializeToCard(lcsels, datCardData);\n var ucparts = process.findRenderObjectsByType(\"SeastateUcpart\");\n datCardData = this.renderobjectsSerializeToCard(ucparts, datCardData);\n var files = process.findRenderObjectsByType(\"SeastateFile\");\n datCardData = this.renderobjectsSerializeToCard(files, datCardData);\n var cdms = process.findRenderObjectsByType(\"SeastateCdm\");\n if (cdms.length > 0) {\n datCardData += \"CDM\" + \"\\n\";\n }\n datCardData = this.renderobjectsSerializeToCard(cdms, datCardData);\n var mgrovDivideRO = process.findRenderObjectByName(\"海生物厚度按高程分色\");\n if (mgrovDivideRO) {\n datCardData += \"MGROV\" + \"\\n\";\n var mgrovs = mgrovDivideRO.mgrovList;\n datCardData = this.renderobjectsSerializeToCard(mgrovs, datCardData);\n }\n var corrzDivideRO = process.findRenderObjectByName(\"腐蚀余量按高程分色\");\n if (corrzDivideRO) {\n datCardData += \"CORRZ\" + \"\\n\";\n var corrzs = corrzDivideRO.corrzList;\n datCardData = this.renderobjectsSerializeToCard(corrzs, datCardData);\n }\n var loadNode = process.findCaeObjectByNameInChildObject(process.caeRenderObjectTreeManager.postResultNode, \"荷载工况\");\n if (loadNode) {\n if (loadNode.childObjects.length > 0) {\n datCardData += \"LOAD\\n\";\n }\n for (var i = 0; i < loadNode.childObjects.length; i++) {\n var loadCondition = loadNode.childObjects[i];\n if (!loadCondition.checkBusinessStateIsActive()) {\n continue;\n }\n datCardData += loadCondition.serializeToCardSeaInp();\n }\n }\n var lcombs = process.findRenderObjectsByType(\"SeastateLcomb\");\n datCardData = this.renderobjectsSerializeToCard(lcombs, datCardData);\n if (isExportComponentGroup) {\n var card = this.exportDATFile_ComponentGroup();\n datCardData += card;\n }\n return datCardData;\n };\n DatWriterManager.prototype.exportDATFile_Sacinp = function (isExportComponentGroup) {\n if (isExportComponentGroup === void 0) {\n isExportComponentGroup = true;\n }\n console.log(\"export_sacinp\");\n var process = this.viewer.process;\n var tree = process.caeRenderObjectTreeManager;\n var datCardData = \"\";\n var tille = process.findCaeObjectByNameInChildObject(tree.sacinpNode, \"TITLE\");\n if (tille) {\n var line = tille.serializeToCard();\n datCardData += line += \"\\n\";\n }\n var options = process.findRenderObjectsByType(\"ModelOptions\");\n datCardData = this.renderobjectsSerializeToCard(options, datCardData);\n var codes = process.findRenderObjectsByType(\"ModelCodeIs\");\n datCardData = this.renderobjectsSerializeToCard(codes, datCardData);\n datCardData += \"SECT\\n\";\n datCardData = this.exportSectionData(datCardData);\n var grups = this.viewer.process.findRenderObjectsByType(\"GrupObject\");\n if (grups.length > 0) {\n datCardData += \"GRUP\\n\";\n }\n datCardData = this.renderobjectsSerializeToCard(grups, datCardData);\n var joints = this.viewer.process.findRenderObjectsByType(\"JointObject\");\n if (joints.length > 0) {\n datCardData += \"JOINT\\n\";\n }\n datCardData = this.renderobjectsSerializeToCard(joints, datCardData);\n var members = this.viewer.process.findRenderObjectsByType(\"MemberObject\");\n if (members.length > 0) {\n datCardData += \"MEMBER\\n\";\n }\n datCardData = this.renderobjectsSerializeToCard(members, datCardData);\n var pGrups = this.viewer.process.findRenderObjectsByType(\"PGrupObject\");\n if (pGrups.length > 0) {\n datCardData += \"PGRUP\\n\";\n }\n datCardData = this.renderobjectsSerializeToCard(pGrups, datCardData);\n var plates = this.viewer.process.findRenderObjectsByType(\"PlateObject\");\n if (plates.length > 0) {\n datCardData += \"PLATE\\n\";\n }\n datCardData = this.renderobjectsSerializeToCard(plates, datCardData);\n var loadNode = process.findCaeObjectByNameInChildObject(process.caeRenderObjectTreeManager.postResultNode, \"荷载工况\");\n if (loadNode) {\n if (loadNode.childObjects.length > 0) {\n datCardData += \"LOAD\\n\";\n }\n for (var i = 0; i < loadNode.childObjects.length; i++) {\n var loadCondition = loadNode.childObjects[i];\n if (!loadCondition.checkBusinessStateIsActive()) {\n continue;\n }\n for (var j = 0; j < loadCondition.childObjects.length; j++) {\n var loadGroup = loadCondition.childObjects[j];\n if (!loadGroup.checkBusinessStateIsActive()) {\n continue;\n }\n if (loadGroup instanceof loadGroupObject_1.LoadGroupObject) {\n datCardData += loadGroup.serializeToCardSacInp();\n }\n }\n }\n }\n var centers = this.viewer.process.findRenderObjectsByType(\"ModelCenter\");\n datCardData = this.renderobjectsSerializeToCard(centers, datCardData);\n var weightNode = process.findCaeObjectByNameInChildObject(process.caeRenderObjectTreeManager.pretreatmentNode, \"附加质量\");\n if (weightNode) {\n datCardData += '\\n';\n for (var i = 0; i < weightNode.childObjects.length; i++) {\n var weightGroup = weightNode.childObjects[i];\n datCardData += weightGroup.serializeToCardSacInp();\n }\n }\n var wgtmems = this.viewer.process.findRenderObjectsByType(\"WGTMEMObject\");\n if (wgtmems.length > 0) {\n datCardData += \"WGTMEM\\n\";\n }\n datCardData = this.renderobjectsSerializeToCard(wgtmems, datCardData);\n if (isExportComponentGroup) {\n var card = this.exportDATFile_ComponentGroup();\n datCardData += card;\n }\n return datCardData;\n };\n DatWriterManager.prototype.exportDATFile_ComponentGroup = function () {\n var datCardData = \"\";\n var process = this.viewer.process;\n var groupParentNode = process.findCaeObjectByNameInChildObject(process.caeRenderObjectTreeManager.pretreatmentNode, \"构件分组分色\");\n if (groupParentNode) {\n for (var i = 0; i < groupParentNode.childObjects.length; i++) {\n var groupObject = groupParentNode.childObjects[i];\n datCardData += groupObject.serializeToCard();\n }\n }\n return datCardData;\n };\n DatWriterManager.prototype.renderobjectsSerializeToCard = function (renderObjects, datCardData) {\n if (renderObjects && renderObjects.length > 0) {\n for (var i = 0; i < renderObjects.length; i++) {\n var obj = renderObjects[i];\n if (obj instanceof gs_ceec_design_1.DesignBaseObject) {\n if (obj.businessState === gs_ceec_design_1.BusinessState.Deleting || obj.businessState === gs_ceec_design_1.BusinessState.Dead) {\n continue;\n }\n var line = renderObjects[i].serializeToCard();\n datCardData += line += \"\\n\";\n }\n }\n }\n return datCardData;\n };\n DatWriterManager.prototype.exportMemberData = function (isExportAll) {\n if (isExportAll === void 0) {\n isExportAll = true;\n }\n var grups = new Array();\n var joints = new Array();\n var members = new Array();\n var process = this.viewer.process;\n var tree = process.caeRenderObjectTreeManager;\n var datCardData = \"\";\n var tille = process.findCaeObjectByNameInChildObject(tree.sacinpNode, \"TITLE\");\n if (tille) {\n var line = tille.serializeToCard();\n datCardData += line += \"\\n\";\n }\n var options = process.findRenderObjectsByType(\"ModelOptions\");\n datCardData = this.renderobjectsSerializeToCard(options, datCardData);\n var codes = process.findRenderObjectsByType(\"ModelCodeIs\");\n datCardData = this.renderobjectsSerializeToCard(codes, datCardData);\n datCardData += \"SECT\\n\";\n datCardData = this.exportSectionData(datCardData);\n if (isExportAll) {\n grups = this.viewer.process.findRenderObjectsByType(\"GrupObject\");\n joints = this.viewer.process.findRenderObjectsByType(\"JointObject\");\n members = this.viewer.process.findRenderObjectsByType(\"MemberObject\");\n } else {\n var selector = this.viewer.operatorManager.find(\"CAEObjectSelector\");\n if (selector) {\n var lastType = this.viewer.selectionInterfaceManager.selectorFilter;\n this.viewer.selectionInterfaceManager.selectorFilter = selectionInterfaceManager_1.SelectorFiliter.Member;\n selector.selectByArea([-1, 1], [1, -1]);\n var selectedKeys = this.viewer.selectionManager.selectedKeys;\n for (var i = 0; i < selectedKeys.length; i++) {\n var ro = this.viewer.process.getRenderObjectBySegmentKey(selectedKeys[i]);\n if (ro && ro instanceof memberObject_1.MemberObject && members.indexOf(ro) === -1) {\n members.push(ro);\n }\n }\n this.viewer.selectionManager.clearAllSelectionAndHighlight();\n this.viewer.updateDisplay();\n this.viewer.selectionInterfaceManager.selectorFilter = lastType;\n for (var i = 0; i < members.length; i++) {\n var start = members[i].start;\n var end = members[i].end;\n var grup = members[i].grup;\n if (start && start instanceof jointObject_1.JointObject && joints.indexOf(start) === -1) {\n joints.push(start);\n }\n if (end && end instanceof jointObject_1.JointObject && joints.indexOf(end) === -1) {\n joints.push(end);\n }\n if (grup && grup instanceof grupObject_1.GrupObject && grups.indexOf(grup) === -1) {\n grups.push(grup);\n }\n }\n }\n }\n if (grups.length > 0) {\n datCardData += \"GRUP\\n\";\n }\n datCardData = this.renderobjectsSerializeToCard(grups, datCardData);\n if (joints.length > 0) {\n datCardData += \"JOINT\\n\";\n }\n datCardData = this.renderobjectsSerializeToCard(joints, datCardData);\n if (members.length > 0) {\n datCardData += \"MEMBER\\n\";\n }\n datCardData = this.renderobjectsSerializeToCard(members, datCardData);\n return datCardData;\n };\n DatWriterManager.prototype.exportPileData = function (isExportAll) {\n var _a, _b, _c;\n if (isExportAll === void 0) {\n isExportAll = true;\n }\n var piles = new Array();\n if (isExportAll) {\n piles = this.viewer.process.findRenderObjectsByType(\"PileObject\");\n } else {\n var selector = this.viewer.operatorManager.find(\"CAEObjectSelector\");\n if (selector) {\n var lastType = this.viewer.selectionInterfaceManager.selectorFilter;\n this.viewer.selectionInterfaceManager.selectorFilter = selectionInterfaceManager_1.SelectorFiliter.Member;\n selector.selectByArea([-1, 1], [1, -1]);\n var selectedKeys = this.viewer.selectionManager.selectedKeys;\n for (var i = 0; i < selectedKeys.length; i++) {\n var ro = this.viewer.process.getRenderObjectBySegmentKey(selectedKeys[i]);\n if (ro && ro instanceof pileObject_1.PileObject && piles.indexOf(ro) === -1) {\n piles.push(ro);\n }\n }\n this.viewer.selectionManager.clearAllSelectionAndHighlight();\n this.viewer.updateDisplay();\n this.viewer.selectionInterfaceManager.selectorFilter = lastType;\n }\n }\n if (piles.length === 0) {\n return null;\n }\n var process = this.viewer.process;\n var tree = process.caeRenderObjectTreeManager;\n var datCardData = \"\";\n var title = null;\n title = (_a = this.viewer.datReaderManager.psiTitle) === null || _a === void 0 ? void 0 : _a.getLine();\n if (title) {\n datCardData += title += \"\\n\";\n }\n var psiopt = null;\n psiopt = (_b = this.viewer.datReaderManager.psiopt) === null || _b === void 0 ? void 0 : _b.getLine();\n if (psiopt) {\n datCardData += psiopt += \"\\n\";\n }\n var pltrq = null;\n pltrq = (_c = this.viewer.datReaderManager.pltrq) === null || _c === void 0 ? void 0 : _c.getLine();\n if (pltrq) {\n datCardData += pltrq += \"\\n\";\n }\n var grups = this.viewer.process.findRenderObjectsByType(\"PLGrupObject\");\n if (grups.length > 0) {\n datCardData += \"PLGRUP\\n\";\n }\n datCardData = this.renderobjectsSerializeToCard(grups, datCardData);\n if (piles.length > 0) {\n datCardData += \"PILE\\n\";\n }\n datCardData = this.renderobjectsSerializeToCard(piles, datCardData);\n return datCardData;\n };\n return DatWriterManager;\n }(gs_bim_air_1.Longan.ViewerManagerBase);\n exports.DatWriterManager = DatWriterManager;\n}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9wYWNrYWdlcy9jYWVEZXNpZ24vc3JjL2dzRGV2RngvbWFuYWdlcnMvZGF0V3JpdGVyTWFuYWdlci50cy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1tuYW1lXS8uL3BhY2thZ2VzL2NhZURlc2lnbi9zcmMvZ3NEZXZGeC9tYW5hZ2Vycy9kYXRXcml0ZXJNYW5hZ2VyLnRzPzNiNTgiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVmlld2VyIH0gZnJvbSBcIi4uL3ZpZXdlclwiO1xuaW1wb3J0IHsgTG9uZ2FuIH0gZnJvbSBcImdzLWJpbS1haXJcIjtcbmltcG9ydCB7IEpvaW50T2JqZWN0IH0gZnJvbSBcIi4uL29iamVjdHMvY2FlT2JqZWN0cy9qb2ludE9iamVjdFwiO1xuaW1wb3J0IHsgR3J1cE9iamVjdCB9IGZyb20gXCIuLi9vYmplY3RzL2NhZU9iamVjdHMvZ3J1cE9iamVjdFwiO1xuaW1wb3J0IHsgTWVtYmVyT2JqZWN0IH0gZnJvbSBcIi4uL29iamVjdHMvY2FlT2JqZWN0cy9tZW1iZXJPYmplY3RcIjtcbmltcG9ydCB7IFBHcnVwT2JqZWN0IH0gZnJvbSBcIi4uL29iamVjdHMvY2FlT2JqZWN0cy9wR3J1cE9iamVjdFwiO1xuaW1wb3J0IHsgUGxhdGVPYmplY3QgfSBmcm9tIFwiLi4vb2JqZWN0cy9jYWVPYmplY3RzL3BsYXRlT2JqZWN0XCI7XG5pbXBvcnQgeyBXZWlnaHRHcm91cE9iamVjdCB9IGZyb20gXCIuLi9vYmplY3RzL3dlaWdodE9iamVjdHMvd2VpZ2h0R3JvdXBPYmplY3RcIjtcbmltcG9ydCB7IFdHVE1FTU9iamVjdCB9IGZyb20gXCIuLi9vYmplY3RzL2NhZU9iamVjdHMvcHJldHJlYXRtZW50L3dndG1lbU9iamVjdFwiO1xuaW1wb3J0IHsgV0ZTZWN0aW9uT2JqZWN0IH0gZnJvbSBcIi4uL29iamVjdHMvY2FlT2JqZWN0cy9zZWN0aW9ucy93RlNlY3Rpb25PYmplY3RcIjtcbmltcG9ydCB7IEJveFNlY3Rpb25PYmplY3QgfSBmcm9tIFwiLi4vb2JqZWN0cy9jYWVPYmplY3RzL3NlY3Rpb25zL2JveFNlY3Rpb25PYmplY3RcIjtcbmltcG9ydCB7IFByaVNlY3Rpb25PYmplY3QgfSBmcm9tIFwiLi4vb2JqZWN0cy9jYWVPYmplY3RzL3NlY3Rpb25zL3ByaVNlY3Rpb25PYmplY3RcIjtcbmltcG9ydCB7IENvblNlY3Rpb25PYmplY3QgfSBmcm9tIFwiLi4vb2JqZWN0cy9jYWVPYmplY3RzL3NlY3Rpb25zL2NvblNlY3Rpb25PYmplY3RcIjtcbmltcG9ydCB7IENobFNlY3Rpb25PYmplY3QgfSBmcm9tIFwiLi4vb2JqZWN0cy9jYWVPYmplY3RzL3NlY3Rpb25zL2NobFNlY3Rpb25PYmplY3RcIjtcbmltcG9ydCB7IFRlZVNlY3Rpb25PYmplY3QgfSBmcm9tIFwiLi4vb2JqZWN0cy9jYWVPYmplY3RzL3NlY3Rpb25zL3RlZVNlY3Rpb25PYmplY3RcIjtcbmltcG9ydCB7IEFuZ1NlY3Rpb25PYmplY3QgfSBmcm9tIFwiLi4vb2JqZWN0cy9jYWVPYmplY3RzL3NlY3Rpb25zL2FuZ1NlY3Rpb25PYmplY3RcIjtcbmltcG9ydCB7IER0YlNlY3Rpb25PYmplY3QgfSBmcm9tIFwiLi4vb2JqZWN0cy9jYWVPYmplY3RzL3NlY3Rpb25zL2R0YlNlY3Rpb25PYmplY3RcIjtcbmltcG9ydCB7IFJ0YlNlY3Rpb25PYmplY3QgfSBmcm9tIFwiLi4vb2JqZWN0cy9jYWVPYmplY3RzL3NlY3Rpb25zL3J0YlNlY3Rpb25PYmplY3RcIjtcbmltcG9ydCB7IEJsYlNlY3Rpb25PYmplY3QgfSBmcm9tIFwiLi4vb2JqZWN0cy9jYWVPYmplY3RzL3NlY3Rpb25zL2JsYlNlY3Rpb25PYmplY3RcIjtcbmltcG9ydCB7IFByb2Nlc3MgfSBmcm9tIFwiLi4vcHJvY2Vzc1wiO1xuaW1wb3J0IHsgTW9kZWxUaXRsZSB9IGZyb20gXCIuLi9vYmplY3RzL2NhZU9iamVjdHMvb3B0aW9uT2JqZWN0cy9tb2RlbFRpdGxlXCI7XG5pbXBvcnQgeyBTZWFzdGF0ZUxkb3B0IH0gZnJvbSBcIi4uL29iamVjdHMvY2FlT2JqZWN0cy9vcHRpb25PYmplY3RzL3NlYXN0YXRlTGRvcHRcIjtcbmltcG9ydCB7IFNlYXN0YXRlSHlkcm8gfSBmcm9tIFwiLi4vb2JqZWN0cy9jYWVPYmplY3RzL29wdGlvbk9iamVjdHMvc2Vhc3RhdGVIeWRyb1wiO1xuaW1wb3J0IHsgU2Vhc3RhdGVIeWRybzIgfSBmcm9tIFwiLi4vb2JqZWN0cy9jYWVPYmplY3RzL29wdGlvbk9iamVjdHMvc2Vhc3RhdGVIeWRybzJcIjtcbmltcG9ydCB7IFNlYXN0YXRlTGNzZWwgfSBmcm9tIFwiLi4vb2JqZWN0cy9jYWVPYmplY3RzL29wdGlvbk9iamVjdHMvc2Vhc3RhdGVMY3NlbFwiO1xuaW1wb3J0IHsgU2Vhc3RhdGVVY3BhcnQgfSBmcm9tIFwiLi4vb2JqZWN0cy9jYWVPYmplY3RzL29wdGlvbk9iamVjdHMvc2Vhc3RhdGVVY3BhcnRcIjtcbmltcG9ydCB7IFNlYXN0YXRlRmlsZSB9IGZyb20gXCIuLi9vYmplY3RzL2NhZU9iamVjdHMvb3B0aW9uT2JqZWN0cy9zZWFzdGF0ZUZpbGVcIjtcbmltcG9ydCB7IFNlYXN0YXRlQ2RtIH0gZnJvbSBcIi4uL29iamVjdHMvY2FlT2JqZWN0cy9vcHRpb25PYmplY3RzL3NlYXN0YXRlQ2RtXCI7XG5pbXBvcnQgeyBNb2RlbE9wdGlvbnMgfSBmcm9tIFwiLi4vb2JqZWN0cy9jYWVPYmplY3RzL29wdGlvbk9iamVjdHMvbW9kZWxPcHRpb25zXCI7XG5pbXBvcnQgeyBNb2RlbENvZGVJcyB9IGZyb20gXCIuLi9vYmplY3RzL2NhZU9iamVjdHMvb3B0aW9uT2JqZWN0cy9tb2RlbENvZGVJc1wiO1xuaW1wb3J0IHtcbiAgQnVzaW5lc3NTdGF0ZSxcbiAgRGVzaWduQmFzZU9iamVjdCxcbn0gZnJvbSBcImdzLWNlZWMtZGVzaWduXCI7XG5pbXBvcnQgeyBUdWJTZWN0aW9uT2JqZWN0IH0gZnJvbSBcIi4uL29iamVjdHMvY2FlT2JqZWN0cy9zZWN0aW9ucy90dWJTZWN0aW9uT2JqZWN0XCI7XG5pbXBvcnQgeyBMb2FkR3JvdXBPYmplY3QgfSBmcm9tIFwiLi4vb2JqZWN0cy9sb2FkT2JqZWN0cy9sb2FkR3JvdXBPYmplY3RcIjtcbmltcG9ydCB7IExvYWRDb25kaXRpb25PYmplY3QgfSBmcm9tIFwiLi4vb2JqZWN0cy9sb2FkT2JqZWN0cy9sb2FkQ29uZGl0aW9uT2JqZWN0XCI7XG5pbXBvcnQgeyBNZ3Jvdk9iamVjdCB9IGZyb20gXCIuLi9vYmplY3RzL2NhZU9iamVjdHMvcHJldHJlYXRtZW50L21ncm92T2JqZWN0XCI7XG5pbXBvcnQgeyBDb3Jyek9iamVjdCB9IGZyb20gXCIuLi9vYmplY3RzL2NhZU9iamVjdHMvcHJldHJlYXRtZW50L2NvcnJ6T2JqZWN0XCI7XG5pbXBvcnQgeyBDb2xvckRpdk1HUk9WT2JqZWN0IH0gZnJvbSBcIi4uL29iamVjdHMvcHJldHJlYXRtZW50T2JqZWN0cy9jb2xvckRpdk1HUk9WT2JqZWN0XCI7XG5pbXBvcnQgeyBDb2xvckRpdkNPUlJaT2JqZWN0IH0gZnJvbSBcIi4uL29iamVjdHMvcHJldHJlYXRtZW50T2JqZWN0cy9jb2xvckRpdkNPUlJaT2JqZWN0XCI7XG5pbXBvcnQgeyBTZWFzdGF0ZUluY3dndCB9IGZyb20gXCIuLi9vYmplY3RzL2NhZU9iamVjdHMvb3B0aW9uT2JqZWN0cy9zZWFzdGF0ZUluY3dndFwiO1xuaW1wb3J0IHsgU2Vhc3RhdGVBY2NlbCB9IGZyb20gXCIuLi9vYmplY3RzL2NhZU9iamVjdHMvb3B0aW9uT2JqZWN0cy9zZWFzdGF0ZUFjY2VsXCI7XG5pbXBvcnQgeyBTZWFzdGF0ZUxjb21iIH0gZnJvbSBcIi4uL29iamVjdHMvY2FlT2JqZWN0cy9vcHRpb25PYmplY3RzL3NlYXN0YXRlTGNvbWJcIjtcbmltcG9ydCB7IFNlYXN0YXRlRGVhZCB9IGZyb20gXCIuLi9vYmplY3RzL2NhZU9iamVjdHMvb3B0aW9uT2JqZWN0cy9zZWFzdGF0ZURlYWRcIjtcbmltcG9ydCB7IENBRU9iamVjdFNlbGVjdG9yIH0gZnJvbSBcIi4uL29wZXJhdG9ycy9jYWVPYmplY3RTZWxlY3RvclwiO1xuaW1wb3J0IHsgU2VsZWN0b3JGaWxpdGVyIH0gZnJvbSBcIi4vaW50ZXJmYWNlTWFuYWdlcnMvc2VsZWN0aW9uSW50ZXJmYWNlTWFuYWdlclwiO1xuaW1wb3J0IHsgUGlsZU9iamVjdCB9IGZyb20gXCIuLi9vYmplY3RzL2NhZU9iamVjdHMvcGlsZU9iamVjdFwiO1xuaW1wb3J0IHsgQ29sb3JEaXZDb21wb25lbnRHcm91cE9iamVjdCB9IGZyb20gXCIuLi9vYmplY3RzL3ByZXRyZWF0bWVudE9iamVjdHMvY29sb3JEaXZDb21wb25lbnRHcm91cE9iamVjdFwiO1xuXG5leHBvcnQgY2xhc3MgRGF0V3JpdGVyTWFuYWdlciBleHRlbmRzIExvbmdhbi5WaWV3ZXJNYW5hZ2VyQmFzZSB7XG4gIGNvbnN0cnVjdG9yKHZpZXdlcjogVmlld2VyKSB7XG4gICAgc3VwZXIodmlld2VyKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDlj6blrZjljaHniYfmlbDmja7vvIjmqKHlnosgKyDmtbflhrXvvIlcbiAgICovXG4gIHB1YmxpYyBleHBvcnREQVRGaWxlKCkge1xuICAgIGNvbnNvbGUubG9nKFwiZXhwb3J0XCIpO1xuICAgIGxldCBkYXRhMSA9IHRoaXMuZXhwb3J0REFURmlsZV9TYWNpbnAoZmFsc2UpO1xuICAgIGxldCBkYXRhMiA9IHRoaXMuZXhwb3J0REFURmlsZV9TZWFpbnAoZmFsc2UsIHRydWUpO1xuXG4gICAgbGV0IGRhdENhcmREYXRhID0gZGF0YTEgKyBkYXRhMjtcbiAgICByZXR1cm4gZGF0Q2FyZERhdGE7XG4gIH1cblxuICBwcml2YXRlIGV4cG9ydFNlY3Rpb25EYXRhKGRhdENhcmREYXRhOiBzdHJpbmcpIHtcbiAgICBsZXQgdHVicyA9IHRoaXMudmlld2VyLnByb2Nlc3MuZmluZFJlbmRlck9iamVjdHNCeVR5cGUoXCJUdWJTZWN0aW9uT2JqZWN0XCIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHVicy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IG9iaiA9IHR1YnNbaV0gYXMgVHViU2VjdGlvbk9iamVjdDtcbiAgICAgIGlmIChcbiAgICAgICAgb2JqLmJ1c2luZXNzU3RhdGUgPT09IEJ1c2luZXNzU3RhdGUuRGVsZXRpbmcgfHxcbiAgICAgICAgb2JqLmJ1c2luZXNzU3RhdGUgPT09IEJ1c2luZXNzU3RhdGUuRGVhZFxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgbGV0IGxpbmUgPSBvYmouc2VyaWFsaXplVG9DYXJkKCk7XG4gICAgICBkYXRDYXJkRGF0YSArPSBsaW5lICs9IFwiXFxuXCI7XG4gICAgfVxuXG4gICAgbGV0IHdmcyA9IHRoaXMudmlld2VyLnByb2Nlc3MuZmluZFJlbmRlck9iamVjdHNCeVR5cGUoXCJXRlNlY3Rpb25PYmplY3RcIik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB3ZnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBvYmogPSB3ZnNbaV0gYXMgV0ZTZWN0aW9uT2JqZWN0O1xuICAgICAgaWYgKFxuICAgICAgICBvYmouYnVzaW5lc3NTdGF0ZSA9PT0gQnVzaW5lc3NTdGF0ZS5EZWxldGluZyB8fFxuICAgICAgICBvYmouYnVzaW5lc3NTdGF0ZSA9PT0gQnVzaW5lc3NTdGF0ZS5EZWFkXG4gICAgICApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBsZXQgbGluZSA9IG9iai5zZXJpYWxpemVUb0NhcmQoKTtcbiAgICAgIGRhdENhcmREYXRhICs9IGxpbmUgKz0gXCJcXG5cIjtcbiAgICB9XG5cbiAgICBsZXQgYm94cyA9IHRoaXMudmlld2VyLnByb2Nlc3MuZmluZFJlbmRlck9iamVjdHNCeVR5cGUoXCJCb3hTZWN0aW9uT2JqZWN0XCIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYm94cy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IG9iaiA9IGJveHNbaV0gYXMgQm94U2VjdGlvbk9iamVjdDtcbiAgICAgIGlmIChcbiAgICAgICAgb2JqLmJ1c2luZXNzU3RhdGUgPT09IEJ1c2luZXNzU3RhdGUuRGVsZXRpbmcgfHxcbiAgICAgICAgb2JqLmJ1c2luZXNzU3RhdGUgPT09IEJ1c2luZXNzU3RhdGUuRGVhZFxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgbGV0IGxpbmUgPSBvYmouc2VyaWFsaXplVG9DYXJkKCk7XG4gICAgICBkYXRDYXJkRGF0YSArPSBsaW5lICs9IFwiXFxuXCI7XG4gICAgfVxuXG4gICAgbGV0IHByaXMgPSB0aGlzLnZpZXdlci5wcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RzQnlUeXBlKFwiUHJpU2VjdGlvbk9iamVjdFwiKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBvYmogPSBwcmlzW2ldIGFzIFByaVNlY3Rpb25PYmplY3Q7XG4gICAgICBpZiAoXG4gICAgICAgIG9iai5idXNpbmVzc1N0YXRlID09PSBCdXNpbmVzc1N0YXRlLkRlbGV0aW5nIHx8XG4gICAgICAgIG9iai5idXNpbmVzc1N0YXRlID09PSBCdXNpbmVzc1N0YXRlLkRlYWRcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGxldCBsaW5lID0gb2JqLnNlcmlhbGl6ZVRvQ2FyZCgpO1xuICAgICAgZGF0Q2FyZERhdGEgKz0gbGluZSArPSBcIlxcblwiO1xuICAgIH1cblxuICAgIGxldCBjb25zID0gdGhpcy52aWV3ZXIucHJvY2Vzcy5maW5kUmVuZGVyT2JqZWN0c0J5VHlwZShcIkNvblNlY3Rpb25PYmplY3RcIik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgb2JqID0gY29uc1tpXSBhcyBDb25TZWN0aW9uT2JqZWN0O1xuICAgICAgaWYgKFxuICAgICAgICBvYmouYnVzaW5lc3NTdGF0ZSA9PT0gQnVzaW5lc3NTdGF0ZS5EZWxldGluZyB8fFxuICAgICAgICBvYmouYnVzaW5lc3NTdGF0ZSA9PT0gQnVzaW5lc3NTdGF0ZS5EZWFkXG4gICAgICApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBsZXQgbGluZSA9IG9iai5zZXJpYWxpemVUb0NhcmQoKTtcbiAgICAgIGRhdENhcmREYXRhICs9IGxpbmUgKz0gXCJcXG5cIjtcbiAgICB9XG5cbiAgICBsZXQgY2hscyA9IHRoaXMudmlld2VyLnByb2Nlc3MuZmluZFJlbmRlck9iamVjdHNCeVR5cGUoXCJDaGxTZWN0aW9uT2JqZWN0XCIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hscy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IG9iaiA9IGNobHNbaV0gYXMgQ2hsU2VjdGlvbk9iamVjdDtcbiAgICAgIGlmIChcbiAgICAgICAgb2JqLmJ1c2luZXNzU3RhdGUgPT09IEJ1c2luZXNzU3RhdGUuRGVsZXRpbmcgfHxcbiAgICAgICAgb2JqLmJ1c2luZXNzU3RhdGUgPT09IEJ1c2luZXNzU3RhdGUuRGVhZFxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgbGV0IGxpbmUgPSBvYmouc2VyaWFsaXplVG9DYXJkKCk7XG4gICAgICBkYXRDYXJkRGF0YSArPSBsaW5lICs9IFwiXFxuXCI7XG4gICAgfVxuXG4gICAgbGV0IHRlZXMgPSB0aGlzLnZpZXdlci5wcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RzQnlUeXBlKFwiVGVlU2VjdGlvbk9iamVjdFwiKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRlZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBvYmogPSB0ZWVzW2ldIGFzIFRlZVNlY3Rpb25PYmplY3Q7XG4gICAgICBpZiAoXG4gICAgICAgIG9iai5idXNpbmVzc1N0YXRlID09PSBCdXNpbmVzc1N0YXRlLkRlbGV0aW5nIHx8XG4gICAgICAgIG9iai5idXNpbmVzc1N0YXRlID09PSBCdXNpbmVzc1N0YXRlLkRlYWRcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGxldCBsaW5lID0gb2JqLnNlcmlhbGl6ZVRvQ2FyZCgpO1xuICAgICAgZGF0Q2FyZERhdGEgKz0gbGluZSArPSBcIlxcblwiO1xuICAgIH1cblxuICAgIGxldCBhbmdzID0gdGhpcy52aWV3ZXIucHJvY2Vzcy5maW5kUmVuZGVyT2JqZWN0c0J5VHlwZShcIkFuZ1NlY3Rpb25PYmplY3RcIik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgb2JqID0gYW5nc1tpXSBhcyBBbmdTZWN0aW9uT2JqZWN0O1xuICAgICAgaWYgKFxuICAgICAgICBvYmouYnVzaW5lc3NTdGF0ZSA9PT0gQnVzaW5lc3NTdGF0ZS5EZWxldGluZyB8fFxuICAgICAgICBvYmouYnVzaW5lc3NTdGF0ZSA9PT0gQnVzaW5lc3NTdGF0ZS5EZWFkXG4gICAgICApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBsZXQgbGluZSA9IG9iai5zZXJpYWxpemVUb0NhcmQoKTtcbiAgICAgIGRhdENhcmREYXRhICs9IGxpbmUgKz0gXCJcXG5cIjtcbiAgICB9XG5cbiAgICBsZXQgZHRicyA9IHRoaXMudmlld2VyLnByb2Nlc3MuZmluZFJlbmRlck9iamVjdHNCeVR5cGUoXCJEdGJTZWN0aW9uT2JqZWN0XCIpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZHRicy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IG9iaiA9IGR0YnNbaV0gYXMgRHRiU2VjdGlvbk9iamVjdDtcbiAgICAgIGlmIChcbiAgICAgICAgb2JqLmJ1c2luZXNzU3RhdGUgPT09IEJ1c2luZXNzU3RhdGUuRGVsZXRpbmcgfHxcbiAgICAgICAgb2JqLmJ1c2luZXNzU3RhdGUgPT09IEJ1c2luZXNzU3RhdGUuRGVhZFxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgbGV0IGxpbmUgPSBvYmouc2VyaWFsaXplVG9DYXJkKCk7XG4gICAgICBkYXRDYXJkRGF0YSArPSBsaW5lICs9IFwiXFxuXCI7XG4gICAgfVxuXG4gICAgbGV0IHJ0YnMgPSB0aGlzLnZpZXdlci5wcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RzQnlUeXBlKFwiUnRiU2VjdGlvbk9iamVjdFwiKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJ0YnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBvYmogPSBydGJzW2ldIGFzIFJ0YlNlY3Rpb25PYmplY3Q7XG4gICAgICBpZiAoXG4gICAgICAgIG9iai5idXNpbmVzc1N0YXRlID09PSBCdXNpbmVzc1N0YXRlLkRlbGV0aW5nIHx8XG4gICAgICAgIG9iai5idXNpbmVzc1N0YXRlID09PSBCdXNpbmVzc1N0YXRlLkRlYWRcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGxldCBsaW5lID0gb2JqLnNlcmlhbGl6ZVRvQ2FyZCgpO1xuICAgICAgZGF0Q2FyZERhdGEgKz0gbGluZSArPSBcIlxcblwiO1xuICAgIH1cblxuICAgIGxldCBibGJzID0gdGhpcy52aWV3ZXIucHJvY2Vzcy5maW5kUmVuZGVyT2JqZWN0c0J5VHlwZShcIkJsYlNlY3Rpb25PYmplY3RcIik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBibGJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgb2JqID0gYmxic1tpXSBhcyBCbGJTZWN0aW9uT2JqZWN0O1xuICAgICAgaWYgKFxuICAgICAgICBvYmouYnVzaW5lc3NTdGF0ZSA9PT0gQnVzaW5lc3NTdGF0ZS5EZWxldGluZyB8fFxuICAgICAgICBvYmouYnVzaW5lc3NTdGF0ZSA9PT0gQnVzaW5lc3NTdGF0ZS5EZWFkXG4gICAgICApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBsZXQgbGluZSA9IG9iai5zZXJpYWxpemVUb0NhcmQoKTtcbiAgICAgIGRhdENhcmREYXRhICs9IGxpbmUgKz0gXCJcXG5cIjtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0Q2FyZERhdGE7XG4gIH1cblxuICAvKipcbiAgICog5a+85Ye65rW35Ya15Y2h54mH5pWw5o2uLlxuICAgKi9cbiAgZXhwb3J0REFURmlsZV9TZWFpbnAoZXhwb3J0VGl0bGU6IGJvb2xlYW4gPSB0cnVlLCBpc0V4cG9ydENvbXBvbmVudEdyb3VwID0gdHJ1ZSkge1xuICAgIC8vIGNhcmQgZGF0YSArIHJvIC0+IGNhcmRcbiAgICBjb25zb2xlLmxvZyhcImV4cG9ydF9zZWFpbnBcIik7XG4gICAgbGV0IHByb2Nlc3MgPSB0aGlzLnZpZXdlci5wcm9jZXNzIGFzIFByb2Nlc3M7XG4gICAgbGV0IHRyZWUgPSBwcm9jZXNzLmNhZVJlbmRlck9iamVjdFRyZWVNYW5hZ2VyO1xuXG4gICAgbGV0IGRhdENhcmREYXRhID0gXCJcIjtcblxuICAgIGlmIChleHBvcnRUaXRsZSkge1xuICAgICAgbGV0IHRpbGxlID0gcHJvY2Vzcy5maW5kQ2FlT2JqZWN0QnlOYW1lSW5DaGlsZE9iamVjdChcbiAgICAgICAgdHJlZS5zYWNpbnBOb2RlLFxuICAgICAgICBcIlRJVExFXCJcbiAgICAgICkgYXMgTW9kZWxUaXRsZTtcbiAgICAgIGlmICh0aWxsZSkge1xuICAgICAgICBsZXQgbGluZSA9IHRpbGxlLnNlcmlhbGl6ZVRvQ2FyZCgpO1xuICAgICAgICBkYXRDYXJkRGF0YSArPSBsaW5lICs9IFwiXFxuXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGxkb3B0cyA9IHByb2Nlc3MuZmluZFJlbmRlck9iamVjdHNCeVR5cGUoXG4gICAgICBcIlNlYXN0YXRlTGRvcHRcIlxuICAgICkgYXMgU2Vhc3RhdGVMZG9wdFtdO1xuICAgIGRhdENhcmREYXRhID0gdGhpcy5yZW5kZXJvYmplY3RzU2VyaWFsaXplVG9DYXJkKGxkb3B0cywgZGF0Q2FyZERhdGEpO1xuXG4gICAgbGV0IGh5ZHJvcyA9IHByb2Nlc3MuZmluZFJlbmRlck9iamVjdHNCeVR5cGUoXG4gICAgICBcIlNlYXN0YXRlSHlkcm9cIlxuICAgICkgYXMgU2Vhc3RhdGVIeWRyb1tdO1xuICAgIGRhdENhcmREYXRhID0gdGhpcy5yZW5kZXJvYmplY3RzU2VyaWFsaXplVG9DYXJkKGh5ZHJvcywgZGF0Q2FyZERhdGEpO1xuXG4gICAgbGV0IGh5ZHJvMnMgPSBwcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RzQnlUeXBlKFxuICAgICAgXCJTZWFzdGF0ZUh5ZHJvMlwiXG4gICAgKSBhcyBTZWFzdGF0ZUh5ZHJvMltdO1xuICAgIGRhdENhcmREYXRhID0gdGhpcy5yZW5kZXJvYmplY3RzU2VyaWFsaXplVG9DYXJkKGh5ZHJvMnMsIGRhdENhcmREYXRhKTtcblxuICAgIGxldCBsY3NlbHMgPSBwcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RzQnlUeXBlKFxuICAgICAgXCJTZWFzdGF0ZUxjc2VsXCJcbiAgICApIGFzIFNlYXN0YXRlTGNzZWxbXTtcbiAgICBkYXRDYXJkRGF0YSA9IHRoaXMucmVuZGVyb2JqZWN0c1NlcmlhbGl6ZVRvQ2FyZChsY3NlbHMsIGRhdENhcmREYXRhKTtcblxuICAgIGxldCB1Y3BhcnRzID0gcHJvY2Vzcy5maW5kUmVuZGVyT2JqZWN0c0J5VHlwZShcbiAgICAgIFwiU2Vhc3RhdGVVY3BhcnRcIlxuICAgICkgYXMgU2Vhc3RhdGVVY3BhcnRbXTtcbiAgICBkYXRDYXJkRGF0YSA9IHRoaXMucmVuZGVyb2JqZWN0c1NlcmlhbGl6ZVRvQ2FyZCh1Y3BhcnRzLCBkYXRDYXJkRGF0YSk7XG5cbiAgICBsZXQgZmlsZXMgPSBwcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RzQnlUeXBlKFxuICAgICAgXCJTZWFzdGF0ZUZpbGVcIlxuICAgICkgYXMgU2Vhc3RhdGVGaWxlW107XG4gICAgZGF0Q2FyZERhdGEgPSB0aGlzLnJlbmRlcm9iamVjdHNTZXJpYWxpemVUb0NhcmQoZmlsZXMsIGRhdENhcmREYXRhKTtcblxuICAgIGxldCBjZG1zID0gcHJvY2Vzcy5maW5kUmVuZGVyT2JqZWN0c0J5VHlwZShcIlNlYXN0YXRlQ2RtXCIpIGFzIFNlYXN0YXRlQ2RtW107XG4gICAgaWYgKGNkbXMubGVuZ3RoID4gMCkge1xuICAgICAgZGF0Q2FyZERhdGEgKz0gXCJDRE1cIiArIFwiXFxuXCI7XG4gICAgfVxuICAgIGRhdENhcmREYXRhID0gdGhpcy5yZW5kZXJvYmplY3RzU2VyaWFsaXplVG9DYXJkKGNkbXMsIGRhdENhcmREYXRhKTtcblxuICAgIC8vbWdyb3ZcbiAgICBsZXQgbWdyb3ZEaXZpZGVSTyA9IHByb2Nlc3MuZmluZFJlbmRlck9iamVjdEJ5TmFtZShcbiAgICAgIFwi5rW355Sf54mp5Y6a5bqm5oyJ6auY56iL5YiG6ImyXCJcbiAgICApIGFzIENvbG9yRGl2TUdST1ZPYmplY3Q7XG4gICAgaWYgKG1ncm92RGl2aWRlUk8pIHtcbiAgICAgIGRhdENhcmREYXRhICs9IFwiTUdST1ZcIiArIFwiXFxuXCI7XG4gICAgICBsZXQgbWdyb3ZzID0gbWdyb3ZEaXZpZGVSTy5tZ3Jvdkxpc3Q7XG4gICAgICBkYXRDYXJkRGF0YSA9IHRoaXMucmVuZGVyb2JqZWN0c1NlcmlhbGl6ZVRvQ2FyZChtZ3JvdnMsIGRhdENhcmREYXRhKTtcbiAgICB9XG4gICAgLy9jb3JyelxuICAgIGxldCBjb3JyekRpdmlkZVJPID0gcHJvY2Vzcy5maW5kUmVuZGVyT2JqZWN0QnlOYW1lKFxuICAgICAgXCLohZDomoDkvZnph4/mjInpq5jnqIvliIboibJcIlxuICAgICkgYXMgQ29sb3JEaXZDT1JSWk9iamVjdDtcbiAgICBpZiAoY29ycnpEaXZpZGVSTykge1xuICAgICAgZGF0Q2FyZERhdGEgKz0gXCJDT1JSWlwiICsgXCJcXG5cIjtcbiAgICAgIGxldCBjb3JyenMgPSBjb3JyekRpdmlkZVJPLmNvcnJ6TGlzdDtcbiAgICAgIGRhdENhcmREYXRhID0gdGhpcy5yZW5kZXJvYmplY3RzU2VyaWFsaXplVG9DYXJkKGNvcnJ6cywgZGF0Q2FyZERhdGEpO1xuICAgIH1cbiAgICAvLyAvL2luY3dndFxuICAgIC8vIGxldCBpbmN3Z3RzID0gcHJvY2Vzcy5maW5kUmVuZGVyT2JqZWN0c0J5VHlwZShcbiAgICAvLyAgIFwiU2Vhc3RhdGVJbmN3Z3RcIlxuICAgIC8vICkgYXMgU2Vhc3RhdGVJbmN3Z3RbXTtcbiAgICAvLyBkYXRDYXJkRGF0YSA9IHRoaXMucmVuZGVyb2JqZWN0c1NlcmlhbGl6ZVRvQ2FyZChpbmN3Z3RzLCBkYXRDYXJkRGF0YSk7XG4gICAgLy8gLy9hY2NlbFxuICAgIC8vIGxldCBhY2NlbHMgPSBwcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RzQnlUeXBlKFxuICAgIC8vICAgXCJTZWFzdGF0ZUFjY2VsXCJcbiAgICAvLyApIGFzIFNlYXN0YXRlQWNjZWxbXTtcbiAgICAvLyBkYXRDYXJkRGF0YSA9IHRoaXMucmVuZGVyb2JqZWN0c1NlcmlhbGl6ZVRvQ2FyZChhY2NlbHMsIGRhdENhcmREYXRhKTtcbiAgICAvLyAvL2RlYWRcbiAgICAvLyBsZXQgZGVhZHMgPSBwcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RzQnlUeXBlKFxuICAgIC8vICAgXCJTZWFzdGF0ZURlYWRcIlxuICAgIC8vICkgYXMgU2Vhc3RhdGVEZWFkW107XG4gICAgLy8gZGF0Q2FyZERhdGEgPSB0aGlzLnJlbmRlcm9iamVjdHNTZXJpYWxpemVUb0NhcmQoZGVhZHMsIGRhdENhcmREYXRhKTtcbiAgICAvL2xvYWRcbiAgICBsZXQgbG9hZE5vZGUgPSBwcm9jZXNzLmZpbmRDYWVPYmplY3RCeU5hbWVJbkNoaWxkT2JqZWN0KFxuICAgICAgcHJvY2Vzcy5jYWVSZW5kZXJPYmplY3RUcmVlTWFuYWdlci5wb3N0UmVzdWx0Tm9kZSxcbiAgICAgIFwi6I236L295bel5Ya1XCJcbiAgICApO1xuICAgIGlmIChsb2FkTm9kZSkge1xuICAgICAgaWYgKGxvYWROb2RlLmNoaWxkT2JqZWN0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGRhdENhcmREYXRhICs9IFwiTE9BRFxcblwiO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsb2FkTm9kZS5jaGlsZE9iamVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IGxvYWRDb25kaXRpb24gPSBsb2FkTm9kZS5jaGlsZE9iamVjdHNbaV0gYXMgTG9hZENvbmRpdGlvbk9iamVjdDtcbiAgICAgICAgaWYoIWxvYWRDb25kaXRpb24uY2hlY2tCdXNpbmVzc1N0YXRlSXNBY3RpdmUoKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vY3VyclxuICAgICAgICAvL3dpbmRcbiAgICAgICAgLy93YXZlXG4gICAgICAgIGRhdENhcmREYXRhICs9IGxvYWRDb25kaXRpb24uc2VyaWFsaXplVG9DYXJkU2VhSW5wKCk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vbGNvbWJcbiAgICBsZXQgbGNvbWJzID0gcHJvY2Vzcy5maW5kUmVuZGVyT2JqZWN0c0J5VHlwZShcbiAgICAgIFwiU2Vhc3RhdGVMY29tYlwiXG4gICAgKSBhcyBTZWFzdGF0ZUxjb21iW107XG4gICAgZGF0Q2FyZERhdGEgPSB0aGlzLnJlbmRlcm9iamVjdHNTZXJpYWxpemVUb0NhcmQobGNvbWJzLCBkYXRDYXJkRGF0YSk7XG4gICAgLy9cbiAgICBpZihpc0V4cG9ydENvbXBvbmVudEdyb3VwKSB7XG4gICAgICBsZXQgY2FyZCA9IHRoaXMuZXhwb3J0REFURmlsZV9Db21wb25lbnRHcm91cCgpO1xuICAgICAgZGF0Q2FyZERhdGEgKz0gY2FyZDtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0Q2FyZERhdGE7XG4gIH1cblxuICAvKipcbiAgICog5a+85Ye65qih5Z6L5Y2h54mH5pWw5o2uLlxuICAgKi9cbiAgZXhwb3J0REFURmlsZV9TYWNpbnAoaXNFeHBvcnRDb21wb25lbnRHcm91cCA9IHRydWUpIHtcbiAgICAvL1xuICAgIGNvbnNvbGUubG9nKFwiZXhwb3J0X3NhY2lucFwiKTtcbiAgICBsZXQgcHJvY2VzcyA9IHRoaXMudmlld2VyLnByb2Nlc3MgYXMgUHJvY2VzcztcbiAgICBsZXQgdHJlZSA9IHByb2Nlc3MuY2FlUmVuZGVyT2JqZWN0VHJlZU1hbmFnZXI7XG5cbiAgICBsZXQgZGF0Q2FyZERhdGEgPSBcIlwiO1xuXG4gICAgbGV0IHRpbGxlID0gcHJvY2Vzcy5maW5kQ2FlT2JqZWN0QnlOYW1lSW5DaGlsZE9iamVjdChcbiAgICAgIHRyZWUuc2FjaW5wTm9kZSxcbiAgICAgIFwiVElUTEVcIlxuICAgICkgYXMgTW9kZWxUaXRsZTtcbiAgICBpZiAodGlsbGUpIHtcbiAgICAgIGxldCBsaW5lID0gdGlsbGUuc2VyaWFsaXplVG9DYXJkKCk7XG4gICAgICBkYXRDYXJkRGF0YSArPSBsaW5lICs9IFwiXFxuXCI7XG4gICAgfVxuXG4gICAgbGV0IG9wdGlvbnMgPSBwcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RzQnlUeXBlKFxuICAgICAgXCJNb2RlbE9wdGlvbnNcIlxuICAgICkgYXMgTW9kZWxPcHRpb25zW107XG4gICAgZGF0Q2FyZERhdGEgPSB0aGlzLnJlbmRlcm9iamVjdHNTZXJpYWxpemVUb0NhcmQob3B0aW9ucywgZGF0Q2FyZERhdGEpO1xuXG4gICAgbGV0IGNvZGVzID0gcHJvY2Vzcy5maW5kUmVuZGVyT2JqZWN0c0J5VHlwZShcIk1vZGVsQ29kZUlzXCIpIGFzIE1vZGVsQ29kZUlzW107XG4gICAgZGF0Q2FyZERhdGEgPSB0aGlzLnJlbmRlcm9iamVjdHNTZXJpYWxpemVUb0NhcmQoY29kZXMsIGRhdENhcmREYXRhKTtcblxuICAgIGRhdENhcmREYXRhICs9IFwiU0VDVFxcblwiO1xuICAgIGRhdENhcmREYXRhID0gdGhpcy5leHBvcnRTZWN0aW9uRGF0YShkYXRDYXJkRGF0YSk7XG5cbiAgICBsZXQgZ3J1cHMgPSB0aGlzLnZpZXdlci5wcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RzQnlUeXBlKFwiR3J1cE9iamVjdFwiKTtcbiAgICBpZiAoZ3J1cHMubGVuZ3RoID4gMCkge1xuICAgICAgZGF0Q2FyZERhdGEgKz0gXCJHUlVQXFxuXCI7XG4gICAgfVxuICAgIGRhdENhcmREYXRhID0gdGhpcy5yZW5kZXJvYmplY3RzU2VyaWFsaXplVG9DYXJkKGdydXBzLCBkYXRDYXJkRGF0YSk7XG5cbiAgICBsZXQgam9pbnRzID0gdGhpcy52aWV3ZXIucHJvY2Vzcy5maW5kUmVuZGVyT2JqZWN0c0J5VHlwZShcIkpvaW50T2JqZWN0XCIpO1xuICAgIGlmIChqb2ludHMubGVuZ3RoID4gMCkge1xuICAgICAgZGF0Q2FyZERhdGEgKz0gXCJKT0lOVFxcblwiO1xuICAgIH1cbiAgICBkYXRDYXJkRGF0YSA9IHRoaXMucmVuZGVyb2JqZWN0c1NlcmlhbGl6ZVRvQ2FyZChqb2ludHMsIGRhdENhcmREYXRhKTtcblxuICAgIGxldCBtZW1iZXJzID0gdGhpcy52aWV3ZXIucHJvY2Vzcy5maW5kUmVuZGVyT2JqZWN0c0J5VHlwZShcIk1lbWJlck9iamVjdFwiKTtcbiAgICBpZiAobWVtYmVycy5sZW5ndGggPiAwKSB7XG4gICAgICBkYXRDYXJkRGF0YSArPSBcIk1FTUJFUlxcblwiO1xuICAgIH1cbiAgICBkYXRDYXJkRGF0YSA9IHRoaXMucmVuZGVyb2JqZWN0c1NlcmlhbGl6ZVRvQ2FyZChtZW1iZXJzLCBkYXRDYXJkRGF0YSk7XG5cbiAgICBsZXQgcEdydXBzID0gdGhpcy52aWV3ZXIucHJvY2Vzcy5maW5kUmVuZGVyT2JqZWN0c0J5VHlwZShcIlBHcnVwT2JqZWN0XCIpO1xuICAgIGlmIChwR3J1cHMubGVuZ3RoID4gMCkge1xuICAgICAgZGF0Q2FyZERhdGEgKz0gXCJQR1JVUFxcblwiO1xuICAgIH1cbiAgICBkYXRDYXJkRGF0YSA9IHRoaXMucmVuZGVyb2JqZWN0c1NlcmlhbGl6ZVRvQ2FyZChwR3J1cHMsIGRhdENhcmREYXRhKTtcblxuICAgIGxldCBwbGF0ZXMgPSB0aGlzLnZpZXdlci5wcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RzQnlUeXBlKFwiUGxhdGVPYmplY3RcIik7XG4gICAgaWYgKHBsYXRlcy5sZW5ndGggPiAwKSB7XG4gICAgICBkYXRDYXJkRGF0YSArPSBcIlBMQVRFXFxuXCI7XG4gICAgfVxuICAgIGRhdENhcmREYXRhID0gdGhpcy5yZW5kZXJvYmplY3RzU2VyaWFsaXplVG9DYXJkKHBsYXRlcywgZGF0Q2FyZERhdGEpO1xuXG4gICAgbGV0IGxvYWROb2RlID0gcHJvY2Vzcy5maW5kQ2FlT2JqZWN0QnlOYW1lSW5DaGlsZE9iamVjdChcbiAgICAgIHByb2Nlc3MuY2FlUmVuZGVyT2JqZWN0VHJlZU1hbmFnZXIucG9zdFJlc3VsdE5vZGUsXG4gICAgICBcIuiNt+i9veW3peWGtVwiXG4gICAgKTtcbiAgICBpZiAobG9hZE5vZGUpIHtcbiAgICAgIGlmIChsb2FkTm9kZS5jaGlsZE9iamVjdHMubGVuZ3RoID4gMCkge1xuICAgICAgICBkYXRDYXJkRGF0YSArPSBcIkxPQURcXG5cIjtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbG9hZE5vZGUuY2hpbGRPYmplY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBsb2FkQ29uZGl0aW9uID0gbG9hZE5vZGUuY2hpbGRPYmplY3RzW2ldIGFzIExvYWRDb25kaXRpb25PYmplY3Q7XG4gICAgICAgIGlmKCFsb2FkQ29uZGl0aW9uLmNoZWNrQnVzaW5lc3NTdGF0ZUlzQWN0aXZlKCkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxvYWRDb25kaXRpb24uY2hpbGRPYmplY3RzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgbGV0IGxvYWRHcm91cCA9IGxvYWRDb25kaXRpb24uY2hpbGRPYmplY3RzW2pdIGFzIExvYWRHcm91cE9iamVjdDtcbiAgICAgICAgICBpZighbG9hZEdyb3VwLmNoZWNrQnVzaW5lc3NTdGF0ZUlzQWN0aXZlKCkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobG9hZEdyb3VwIGluc3RhbmNlb2YgTG9hZEdyb3VwT2JqZWN0KSB7XG4gICAgICAgICAgICBkYXRDYXJkRGF0YSArPSBsb2FkR3JvdXAuc2VyaWFsaXplVG9DYXJkU2FjSW5wKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGNlbnRlcnMgPSB0aGlzLnZpZXdlci5wcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RzQnlUeXBlKFwiTW9kZWxDZW50ZXJcIik7XG4gICAgZGF0Q2FyZERhdGEgPSB0aGlzLnJlbmRlcm9iamVjdHNTZXJpYWxpemVUb0NhcmQoY2VudGVycywgZGF0Q2FyZERhdGEpO1xuXG4gICAgLy8gd2VpZ2h0XG4gICAgbGV0IHdlaWdodE5vZGUgPSBwcm9jZXNzLmZpbmRDYWVPYmplY3RCeU5hbWVJbkNoaWxkT2JqZWN0KFxuICAgICAgcHJvY2Vzcy5jYWVSZW5kZXJPYmplY3RUcmVlTWFuYWdlci5wcmV0cmVhdG1lbnROb2RlLFxuICAgICAgXCLpmYTliqDotKjph49cIlxuICAgICk7XG4gICAgaWYgKHdlaWdodE5vZGUpIHtcbiAgICAgIGRhdENhcmREYXRhICs9ICdcXG4nXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHdlaWdodE5vZGUuY2hpbGRPYmplY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCB3ZWlnaHRHcm91cCA9IHdlaWdodE5vZGUuY2hpbGRPYmplY3RzW2ldIGFzIFdlaWdodEdyb3VwT2JqZWN0O1xuICAgICAgICBkYXRDYXJkRGF0YSArPSB3ZWlnaHRHcm91cC5zZXJpYWxpemVUb0NhcmRTYWNJbnAoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgd2d0bWVtcyA9IHRoaXMudmlld2VyLnByb2Nlc3MuZmluZFJlbmRlck9iamVjdHNCeVR5cGUoXCJXR1RNRU1PYmplY3RcIik7XG4gICAgaWYgKHdndG1lbXMubGVuZ3RoID4gMCkge1xuICAgICAgZGF0Q2FyZERhdGEgKz0gXCJXR1RNRU1cXG5cIjtcbiAgICB9XG4gICAgZGF0Q2FyZERhdGEgPSB0aGlzLnJlbmRlcm9iamVjdHNTZXJpYWxpemVUb0NhcmQod2d0bWVtcywgZGF0Q2FyZERhdGEpO1xuXG4gICAgaWYoaXNFeHBvcnRDb21wb25lbnRHcm91cCkge1xuICAgICAgbGV0IGNhcmQgPSB0aGlzLmV4cG9ydERBVEZpbGVfQ29tcG9uZW50R3JvdXAoKTtcbiAgICAgIGRhdENhcmREYXRhICs9IGNhcmQ7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiBkYXRDYXJkRGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiDliIbnu4TljaHniYfmlbDmja7vvIzlr7zlh7rmqKHlnovlkozlr7zlh7rmtbflhrXpg73pnIDopoHvvIzlm6DmraTljZXni6zmj5Dlh7rmnaUuXG4gICAqL1xuICBwcml2YXRlIGV4cG9ydERBVEZpbGVfQ29tcG9uZW50R3JvdXAoKSB7XG4gICAgbGV0IGRhdENhcmREYXRhID0gXCJcIjtcblxuICAgIC8vY29tcG9uZW50IGdyb3VwXG4gICAgbGV0IHByb2Nlc3MgPSB0aGlzLnZpZXdlci5wcm9jZXNzIGFzIFByb2Nlc3M7XG4gICAgbGV0IGdyb3VwUGFyZW50Tm9kZSA9IHByb2Nlc3MuZmluZENhZU9iamVjdEJ5TmFtZUluQ2hpbGRPYmplY3QoXG4gICAgICBwcm9jZXNzLmNhZVJlbmRlck9iamVjdFRyZWVNYW5hZ2VyLnByZXRyZWF0bWVudE5vZGUsXG4gICAgICBcIuaehOS7tuWIhue7hOWIhuiJslwiXG4gICAgKTtcbiAgICBpZiAoZ3JvdXBQYXJlbnROb2RlKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGdyb3VwUGFyZW50Tm9kZS5jaGlsZE9iamVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IGdyb3VwT2JqZWN0ID0gZ3JvdXBQYXJlbnROb2RlLmNoaWxkT2JqZWN0c1tcbiAgICAgICAgICBpXG4gICAgICAgIF0gYXMgQ29sb3JEaXZDb21wb25lbnRHcm91cE9iamVjdDtcbiAgICAgICAgZGF0Q2FyZERhdGEgKz0gZ3JvdXBPYmplY3Quc2VyaWFsaXplVG9DYXJkKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdENhcmREYXRhO1xuICB9XG5cbiAgcmVuZGVyb2JqZWN0c1NlcmlhbGl6ZVRvQ2FyZChcbiAgICByZW5kZXJPYmplY3RzOiBMb25nYW4uUmVuZGVyT2JqZWN0W10sXG4gICAgZGF0Q2FyZERhdGE6IHN0cmluZ1xuICApIHtcbiAgICBpZiAocmVuZGVyT2JqZWN0cyAmJiByZW5kZXJPYmplY3RzLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVuZGVyT2JqZWN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgb2JqID0gcmVuZGVyT2JqZWN0c1tpXTtcbiAgICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIERlc2lnbkJhc2VPYmplY3QpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBvYmouYnVzaW5lc3NTdGF0ZSA9PT0gQnVzaW5lc3NTdGF0ZS5EZWxldGluZyB8fFxuICAgICAgICAgICAgb2JqLmJ1c2luZXNzU3RhdGUgPT09IEJ1c2luZXNzU3RhdGUuRGVhZFxuICAgICAgICAgICkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IGxpbmUgPSAocmVuZGVyT2JqZWN0c1tpXSBhcyBhbnkpLnNlcmlhbGl6ZVRvQ2FyZCgpO1xuICAgICAgICAgIGRhdENhcmREYXRhICs9IGxpbmUgKz0gXCJcXG5cIjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRDYXJkRGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiDlr7zlh7pTQUNJTlDnmoTmnYbku7bmlbDmja5cbiAgICovXG4gIGV4cG9ydE1lbWJlckRhdGEoaXNFeHBvcnRBbGw6IGJvb2xlYW4gPSB0cnVlKSB7XG4gICAgbGV0IGdydXBzID0gbmV3IEFycmF5PEdydXBPYmplY3Q+KCk7XG4gICAgbGV0IGpvaW50cyA9IG5ldyBBcnJheTxKb2ludE9iamVjdD4oKTtcbiAgICBsZXQgbWVtYmVycyA9IG5ldyBBcnJheTxNZW1iZXJPYmplY3Q+KCk7XG5cbiAgICBsZXQgcHJvY2VzcyA9IHRoaXMudmlld2VyLnByb2Nlc3MgYXMgUHJvY2VzcztcbiAgICBsZXQgdHJlZSA9IHByb2Nlc3MuY2FlUmVuZGVyT2JqZWN0VHJlZU1hbmFnZXI7XG5cbiAgICBsZXQgZGF0Q2FyZERhdGEgPSBcIlwiO1xuXG4gICAgbGV0IHRpbGxlID0gcHJvY2Vzcy5maW5kQ2FlT2JqZWN0QnlOYW1lSW5DaGlsZE9iamVjdChcbiAgICAgIHRyZWUuc2FjaW5wTm9kZSxcbiAgICAgIFwiVElUTEVcIlxuICAgICkgYXMgTW9kZWxUaXRsZTtcbiAgICBpZiAodGlsbGUpIHtcbiAgICAgIGxldCBsaW5lID0gdGlsbGUuc2VyaWFsaXplVG9DYXJkKCk7XG4gICAgICBkYXRDYXJkRGF0YSArPSBsaW5lICs9IFwiXFxuXCI7XG4gICAgfVxuXG4gICAgbGV0IG9wdGlvbnMgPSBwcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RzQnlUeXBlKFxuICAgICAgXCJNb2RlbE9wdGlvbnNcIlxuICAgICkgYXMgTW9kZWxPcHRpb25zW107XG4gICAgZGF0Q2FyZERhdGEgPSB0aGlzLnJlbmRlcm9iamVjdHNTZXJpYWxpemVUb0NhcmQob3B0aW9ucywgZGF0Q2FyZERhdGEpO1xuXG4gICAgbGV0IGNvZGVzID0gcHJvY2Vzcy5maW5kUmVuZGVyT2JqZWN0c0J5VHlwZShcIk1vZGVsQ29kZUlzXCIpIGFzIE1vZGVsQ29kZUlzW107XG4gICAgZGF0Q2FyZERhdGEgPSB0aGlzLnJlbmRlcm9iamVjdHNTZXJpYWxpemVUb0NhcmQoY29kZXMsIGRhdENhcmREYXRhKTtcblxuICAgIC8vIOWvvOWHuuaIqumdouaVsOaNrlxuICAgIGRhdENhcmREYXRhICs9IFwiU0VDVFxcblwiO1xuICAgIGRhdENhcmREYXRhID0gdGhpcy5leHBvcnRTZWN0aW9uRGF0YShkYXRDYXJkRGF0YSk7XG5cbiAgICBpZiAoaXNFeHBvcnRBbGwpIHtcbiAgICAgIC8vIOWvvOWHuuadhuS7tuaIqumdoue7hOaVsOaNrlxuICAgICAgZ3J1cHMgPSB0aGlzLnZpZXdlci5wcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RzQnlUeXBlKFwiR3J1cE9iamVjdFwiKTtcbiAgICAgIC8vIOWvvOWHuuepuumXtOeCueaVsOaNrlxuICAgICAgam9pbnRzID0gdGhpcy52aWV3ZXIucHJvY2Vzcy5maW5kUmVuZGVyT2JqZWN0c0J5VHlwZShcIkpvaW50T2JqZWN0XCIpO1xuICAgICAgLy8g5a+85Ye65p2G5Lu25pWw5o2uXG4gICAgICBtZW1iZXJzID0gdGhpcy52aWV3ZXIucHJvY2Vzcy5maW5kUmVuZGVyT2JqZWN0c0J5VHlwZShcIk1lbWJlck9iamVjdFwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHNlbGVjdG9yID0gdGhpcy52aWV3ZXIub3BlcmF0b3JNYW5hZ2VyLmZpbmQoXG4gICAgICAgIFwiQ0FFT2JqZWN0U2VsZWN0b3JcIlxuICAgICAgKSBhcyBDQUVPYmplY3RTZWxlY3RvcjtcbiAgICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgICBsZXQgbGFzdFR5cGUgPSAodGhpcy52aWV3ZXIgYXMgVmlld2VyKS5zZWxlY3Rpb25JbnRlcmZhY2VNYW5hZ2VyXG4gICAgICAgICAgLnNlbGVjdG9yRmlsdGVyO1xuICAgICAgICAodGhpcy52aWV3ZXIgYXMgVmlld2VyKS5zZWxlY3Rpb25JbnRlcmZhY2VNYW5hZ2VyLnNlbGVjdG9yRmlsdGVyID1cbiAgICAgICAgICBTZWxlY3RvckZpbGl0ZXIuTWVtYmVyO1xuICAgICAgICBzZWxlY3Rvci5zZWxlY3RCeUFyZWEoWy0xLCAxXSwgWzEsIC0xXSk7XG5cbiAgICAgICAgbGV0IHNlbGVjdGVkS2V5cyA9IHRoaXMudmlld2VyLnNlbGVjdGlvbk1hbmFnZXIuc2VsZWN0ZWRLZXlzO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlbGVjdGVkS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGxldCBybyA9IHRoaXMudmlld2VyLnByb2Nlc3MuZ2V0UmVuZGVyT2JqZWN0QnlTZWdtZW50S2V5KFxuICAgICAgICAgICAgc2VsZWN0ZWRLZXlzW2ldXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAocm8gJiYgcm8gaW5zdGFuY2VvZiBNZW1iZXJPYmplY3QgJiYgbWVtYmVycy5pbmRleE9mKHJvKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIG1lbWJlcnMucHVzaChybyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy52aWV3ZXIuc2VsZWN0aW9uTWFuYWdlci5jbGVhckFsbFNlbGVjdGlvbkFuZEhpZ2hsaWdodCgpO1xuICAgICAgICB0aGlzLnZpZXdlci51cGRhdGVEaXNwbGF5KCk7XG5cbiAgICAgICAgKHRoaXMudmlld2VyIGFzIFZpZXdlcikuc2VsZWN0aW9uSW50ZXJmYWNlTWFuYWdlci5zZWxlY3RvckZpbHRlciA9XG4gICAgICAgICAgbGFzdFR5cGU7XG5cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZW1iZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgbGV0IHN0YXJ0ID0gbWVtYmVyc1tpXS5zdGFydDtcbiAgICAgICAgICBsZXQgZW5kID0gbWVtYmVyc1tpXS5lbmQ7XG4gICAgICAgICAgbGV0IGdydXAgPSBtZW1iZXJzW2ldLmdydXA7XG5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBzdGFydCAmJlxuICAgICAgICAgICAgc3RhcnQgaW5zdGFuY2VvZiBKb2ludE9iamVjdCAmJlxuICAgICAgICAgICAgam9pbnRzLmluZGV4T2Yoc3RhcnQpID09PSAtMVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgam9pbnRzLnB1c2goc3RhcnQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChlbmQgJiYgZW5kIGluc3RhbmNlb2YgSm9pbnRPYmplY3QgJiYgam9pbnRzLmluZGV4T2YoZW5kKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIGpvaW50cy5wdXNoKGVuZCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgZ3J1cCAmJlxuICAgICAgICAgICAgZ3J1cCBpbnN0YW5jZW9mIEdydXBPYmplY3QgJiZcbiAgICAgICAgICAgIGdydXBzLmluZGV4T2YoZ3J1cCkgPT09IC0xXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBncnVwcy5wdXNoKGdydXApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChncnVwcy5sZW5ndGggPiAwKSB7XG4gICAgICBkYXRDYXJkRGF0YSArPSBcIkdSVVBcXG5cIjtcbiAgICB9XG4gICAgZGF0Q2FyZERhdGEgPSB0aGlzLnJlbmRlcm9iamVjdHNTZXJpYWxpemVUb0NhcmQoZ3J1cHMsIGRhdENhcmREYXRhKTtcblxuICAgIGlmIChqb2ludHMubGVuZ3RoID4gMCkge1xuICAgICAgZGF0Q2FyZERhdGEgKz0gXCJKT0lOVFxcblwiO1xuICAgIH1cbiAgICBkYXRDYXJkRGF0YSA9IHRoaXMucmVuZGVyb2JqZWN0c1NlcmlhbGl6ZVRvQ2FyZChqb2ludHMsIGRhdENhcmREYXRhKTtcblxuICAgIGlmIChtZW1iZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgIGRhdENhcmREYXRhICs9IFwiTUVNQkVSXFxuXCI7XG4gICAgfVxuICAgIGRhdENhcmREYXRhID0gdGhpcy5yZW5kZXJvYmplY3RzU2VyaWFsaXplVG9DYXJkKG1lbWJlcnMsIGRhdENhcmREYXRhKTtcblxuICAgIHJldHVybiBkYXRDYXJkRGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiDlr7zlh7rmoanmlbDmja4uXG4gICAqL1xuICBleHBvcnRQaWxlRGF0YShpc0V4cG9ydEFsbCA9IHRydWUpIHtcbiAgICBsZXQgcGlsZXMgPSBuZXcgQXJyYXk8TG9uZ2FuLlJlbmRlck9iamVjdD4oKTtcblxuICAgIGlmIChpc0V4cG9ydEFsbCkge1xuICAgICAgcGlsZXMgPSB0aGlzLnZpZXdlci5wcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RzQnlUeXBlKFwiUGlsZU9iamVjdFwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHNlbGVjdG9yID0gdGhpcy52aWV3ZXIub3BlcmF0b3JNYW5hZ2VyLmZpbmQoXG4gICAgICAgIFwiQ0FFT2JqZWN0U2VsZWN0b3JcIlxuICAgICAgKSBhcyBDQUVPYmplY3RTZWxlY3RvcjtcbiAgICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgICBsZXQgbGFzdFR5cGUgPSAodGhpcy52aWV3ZXIgYXMgVmlld2VyKS5zZWxlY3Rpb25JbnRlcmZhY2VNYW5hZ2VyXG4gICAgICAgICAgLnNlbGVjdG9yRmlsdGVyO1xuICAgICAgICAodGhpcy52aWV3ZXIgYXMgVmlld2VyKS5zZWxlY3Rpb25JbnRlcmZhY2VNYW5hZ2VyLnNlbGVjdG9yRmlsdGVyID1cbiAgICAgICAgICBTZWxlY3RvckZpbGl0ZXIuTWVtYmVyO1xuICAgICAgICBzZWxlY3Rvci5zZWxlY3RCeUFyZWEoWy0xLCAxXSwgWzEsIC0xXSk7XG5cbiAgICAgICAgbGV0IHNlbGVjdGVkS2V5cyA9IHRoaXMudmlld2VyLnNlbGVjdGlvbk1hbmFnZXIuc2VsZWN0ZWRLZXlzO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlbGVjdGVkS2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGxldCBybyA9IHRoaXMudmlld2VyLnByb2Nlc3MuZ2V0UmVuZGVyT2JqZWN0QnlTZWdtZW50S2V5KFxuICAgICAgICAgICAgc2VsZWN0ZWRLZXlzW2ldXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAocm8gJiYgcm8gaW5zdGFuY2VvZiBQaWxlT2JqZWN0ICYmIHBpbGVzLmluZGV4T2Yocm8pID09PSAtMSkge1xuICAgICAgICAgICAgcGlsZXMucHVzaChybyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy52aWV3ZXIuc2VsZWN0aW9uTWFuYWdlci5jbGVhckFsbFNlbGVjdGlvbkFuZEhpZ2hsaWdodCgpO1xuICAgICAgICB0aGlzLnZpZXdlci51cGRhdGVEaXNwbGF5KCk7XG5cbiAgICAgICAgKHRoaXMudmlld2VyIGFzIFZpZXdlcikuc2VsZWN0aW9uSW50ZXJmYWNlTWFuYWdlci5zZWxlY3RvckZpbHRlciA9XG4gICAgICAgICAgbGFzdFR5cGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgbGV0IHByb2Nlc3MgPSB0aGlzLnZpZXdlci5wcm9jZXNzIGFzIFByb2Nlc3M7XG4gICAgbGV0IHRyZWUgPSBwcm9jZXNzLmNhZVJlbmRlck9iamVjdFRyZWVNYW5hZ2VyO1xuXG4gICAgbGV0IGRhdENhcmREYXRhID0gXCJcIjtcblxuICAgIGxldCB0aXRsZSA9IG51bGw7XG4gICAgdGl0bGUgPSAodGhpcy52aWV3ZXIgYXMgVmlld2VyKS5kYXRSZWFkZXJNYW5hZ2VyLnBzaVRpdGxlPy5nZXRMaW5lKCk7XG4gICAgaWYgKHRpdGxlKSB7XG4gICAgICBkYXRDYXJkRGF0YSArPSB0aXRsZSArPSBcIlxcblwiO1xuICAgIH1cblxuICAgIGxldCBwc2lvcHQgPSBudWxsO1xuICAgIHBzaW9wdCA9ICh0aGlzLnZpZXdlciBhcyBWaWV3ZXIpLmRhdFJlYWRlck1hbmFnZXIucHNpb3B0Py5nZXRMaW5lKCk7XG4gICAgaWYgKHBzaW9wdCkge1xuICAgICAgZGF0Q2FyZERhdGEgKz0gcHNpb3B0ICs9IFwiXFxuXCI7XG4gICAgfVxuXG4gICAgbGV0IHBsdHJxID0gbnVsbDtcbiAgICBwbHRycSA9ICh0aGlzLnZpZXdlciBhcyBWaWV3ZXIpLmRhdFJlYWRlck1hbmFnZXIucGx0cnE/LmdldExpbmUoKTtcbiAgICBpZiAocGx0cnEpIHtcbiAgICAgIGRhdENhcmREYXRhICs9IHBsdHJxICs9IFwiXFxuXCI7XG4gICAgfVxuXG4gICAgLy8g5a+85Ye65qGp5oiq6Z2i57uE5pWw5o2uXG4gICAgbGV0IGdydXBzID0gdGhpcy52aWV3ZXIucHJvY2Vzcy5maW5kUmVuZGVyT2JqZWN0c0J5VHlwZShcIlBMR3J1cE9iamVjdFwiKTtcbiAgICBpZiAoZ3J1cHMubGVuZ3RoID4gMCkge1xuICAgICAgZGF0Q2FyZERhdGEgKz0gXCJQTEdSVVBcXG5cIjtcbiAgICB9XG4gICAgZGF0Q2FyZERhdGEgPSB0aGlzLnJlbmRlcm9iamVjdHNTZXJpYWxpemVUb0NhcmQoZ3J1cHMsIGRhdENhcmREYXRhKTtcblxuICAgIC8vIOWvvOWHuuahqeaVsOaNrlxuICAgIGlmIChwaWxlcy5sZW5ndGggPiAwKSB7XG4gICAgICBkYXRDYXJkRGF0YSArPSBcIlBJTEVcXG5cIjtcbiAgICB9XG4gICAgZGF0Q2FyZERhdGEgPSB0aGlzLnJlbmRlcm9iamVjdHNTZXJpYWxpemVUb0NhcmQocGlsZXMsIGRhdENhcmREYXRhKTtcblxuICAgIHJldHVybiBkYXRDYXJkRGF0YTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBa0RBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTs7QUFFQTtBQUNBOztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7O0FBRUE7QUFDQTs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUlBOztBQUVBO0FBQ0E7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTs7QUFFQTtBQUNBOztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7O0FBRUE7QUFDQTs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUlBOztBQUVBO0FBQ0E7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTs7QUFFQTtBQUNBOztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7O0FBRUE7QUFDQTs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUlBOztBQUVBO0FBQ0E7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTs7QUFFQTtBQUNBOztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7O0FBRUE7QUFDQTs7QUFHQTtBQUNBO0FBS0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7OztBQUlBO0FBR0E7QUFFQTtBQUdBO0FBRUE7QUFHQTtBQUVBO0FBR0E7QUFFQTtBQUdBO0FBRUE7QUFHQTtBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUdBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFrQkE7QUFJQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBS0E7OztBQUlBO0FBR0E7QUFFQTtBQUNBO0FBQ0E7O0FBR0E7QUFDQTtBQUtBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUlBO0FBQ0E7QUFDQTs7QUFHQTtBQUdBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFFQTtBQUlBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOzs7OztBQU1BO0FBQ0E7QUFHQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUlBO0FBQ0E7QUFDQTs7QUFFQTtBQUVBO0FBQ0E7QUFDQTs7QUFHQTtBQUNBO0FBS0E7QUFDQTtBQUdBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFHQTs7O0FBSUE7QUFDQTtBQUVBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUlBOztBQUdBO0FBQ0E7Ozs7QUFLQTtBQUNBO0FBS0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFFQTtBQUlBO0FBQ0E7QUFDQTs7QUFHQTtBQUdBO0FBRUE7QUFDQTtBQUdBO0FBQ0E7QUFFQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7OztBQUlBO0FBQ0E7QUFFQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFLQTs7QUFHQTtBQUNBOztBQUdBO0FBS0E7Ozs7O0FBTUE7QUFDQTs7QUFFQTtBQUVBO0FBQ0E7O0FBRUE7QUFFQTtBQUNBOztBQUVBO0FBRUE7QUFDQTtBQUtBOztBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7OztBQUlBO0FBQ0E7QUFFQTs7O0FBS0E7QUFDQTs7QUFHQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFJQTtBQUNBO0FBQ0E7O0FBRUE7QUFHQTtBQUNBOztBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUF0b0JBOztBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./packages/caeDesign/src/gsDevFx/managers/datWriterManager.ts\n");
|
|
3980
3980
|
|
|
3981
3981
|
/***/ }),
|
|
3982
3982
|
|
|
@@ -3998,7 +3998,7 @@ eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPAC
|
|
|
3998
3998
|
/*! no static exports found */
|
|
3999
3999
|
/***/ (function(module, exports, __webpack_require__) {
|
|
4000
4000
|
|
|
4001
|
-
eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__, exports, __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\"), __webpack_require__(/*! ../../../gsDevFx/objects/caeLightObject/caeLightObject */ \"./packages/caeDesign/src/gsDevFx/objects/caeLightObject/caeLightObject.ts\"), __webpack_require__(/*! ../../../gsDevFx/objects/caeObjects/jointObject */ \"./packages/caeDesign/src/gsDevFx/objects/caeObjects/jointObject.ts\"), __webpack_require__(/*! gs-bim-air */ \"./node_modules/gs-bim-air/lib/BimAir.umd.min.js\"), __webpack_require__(/*! ./selectionInterfaceManager */ \"./packages/caeDesign/src/gsDevFx/managers/interfaceManagers/selectionInterfaceManager.ts\"), __webpack_require__(/*! ../../../gsDevFx/tasks/caeTask */ \"./packages/caeDesign/src/gsDevFx/tasks/caeTask.ts\"), __webpack_require__(/*! ../../../api/renderObjectService */ \"./packages/caeDesign/src/api/renderObjectService.ts\"), __webpack_require__(/*! ../../../gsDevFx/process */ \"./packages/caeDesign/src/gsDevFx/process.ts\"), __webpack_require__(/*! ../../../gsDevFx/objects/caeObjects/optionObjects/modelTitle */ \"./packages/caeDesign/src/gsDevFx/objects/caeObjects/optionObjects/modelTitle.ts\"), __webpack_require__(/*! ../../../caeCardEditor/caeCardObjects/sacinp/cardTITLE */ \"./packages/caeDesign/src/caeCardEditor/caeCardObjects/sacinp/cardTITLE.ts\"), __webpack_require__(/*! gs-ceec-design */ \"./packages/ceecDesign/src/index.ts\"), __webpack_require__(/*! ../../../gsDevFx/objects/caeObjects/memberObject */ \"./packages/caeDesign/src/gsDevFx/objects/caeObjects/memberObject.ts\"), __webpack_require__(/*! gs-ceec-design */ \"./packages/ceecDesign/src/index.ts\"), __webpack_require__(/*! ../../../gsDevFx/objects/caeObjects/pretreatment/mgrovObject */ \"./packages/caeDesign/src/gsDevFx/objects/caeObjects/pretreatment/mgrovObject.ts\"), __webpack_require__(/*! ../../../gsDevFx/objects/caeObjects/pretreatment/corrzObject */ \"./packages/caeDesign/src/gsDevFx/objects/caeObjects/pretreatment/corrzObject.ts\"), __webpack_require__(/*! ../../../store */ \"./packages/caeDesign/src/store/index.ts\"), __webpack_require__(/*! ../../../gsDevFx/objects/caeObjects/plateObject */ \"./packages/caeDesign/src/gsDevFx/objects/caeObjects/plateObject.ts\"), __webpack_require__(/*! ../../../gsDevFx/objects/caeObjects/grupObject */ \"./packages/caeDesign/src/gsDevFx/objects/caeObjects/grupObject.ts\"), __webpack_require__(/*! ../../../gsDevFx/objects/caeObjects/objectColors */ \"./packages/caeDesign/src/gsDevFx/objects/caeObjects/objectColors.ts\"), __webpack_require__(/*! ../../../gsDevFx/objects/caeObjects/instanceSectionObject */ \"./packages/caeDesign/src/gsDevFx/objects/caeObjects/instanceSectionObject.ts\"), __webpack_require__(/*! ../../../gsDevFx/objects/caeObjects/sectionObject */ \"./packages/caeDesign/src/gsDevFx/objects/caeObjects/sectionObject.ts\"), __webpack_require__(/*! ../../../gsDevFx/objects/loadObjects/loadConditionObject */ \"./packages/caeDesign/src/gsDevFx/objects/loadObjects/loadConditionObject.ts\"), __webpack_require__(/*! ../../../gsDevFx/objects/loadObjects/loadGroupObject */ \"./packages/caeDesign/src/gsDevFx/objects/loadObjects/loadGroupObject.ts\"), __webpack_require__(/*! ../../../gsDevFx/objects/loadObjects/jointLoadObject */ \"./packages/caeDesign/src/gsDevFx/objects/loadObjects/jointLoadObject.ts\"), __webpack_require__(/*! element-ui */ \"./node_modules/element-ui/lib/element-ui.common.js\"), __webpack_require__(/*! ../../../viewerWrapper/module/legendManage */ \"./packages/caeDesign/src/viewerWrapper/module/legendManage.ts\")], __WEBPACK_AMD_DEFINE_RESULT__ = (function (require, exports, tslib_1, caeLightObject_1, jointObject_1, gs_bim_air_1, selectionInterfaceManager_1, caeTask_1, renderObjectService_1, process_1, modelTitle_1, cardTITLE_1, gs_ceec_design_1, memberObject_1, gs_ceec_design_2, mgrovObject_1, corrzObject_1, store_1, plateObject_1, grupObject_1, objectColors_1, instanceSectionObject_1, sectionObject_1, loadConditionObject_1, loadGroupObject_1, jointLoadObject_1, element_ui_1, legendManage_1) {\n \"use strict\";\n\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n exports.CommonInterfaceManager = exports.SwitchColorDivide = void 0;\n renderObjectService_1 = tslib_1.__importDefault(renderObjectService_1);\n store_1 = tslib_1.__importDefault(store_1);\n var SwitchColorDivide;\n (function (SwitchColorDivide) {\n SwitchColorDivide[SwitchColorDivide[\"GrupName\"] = 0] = \"GrupName\";\n SwitchColorDivide[SwitchColorDivide[\"GrupThickness\"] = 1] = \"GrupThickness\";\n SwitchColorDivide[SwitchColorDivide[\"Mgrov\"] = 2] = \"Mgrov\";\n SwitchColorDivide[SwitchColorDivide[\"Corrz\"] = 3] = \"Corrz\";\n SwitchColorDivide[SwitchColorDivide[\"Cancel\"] = 4] = \"Cancel\";\n SwitchColorDivide[SwitchColorDivide[\"ComponentGroup\"] = 5] = \"ComponentGroup\";\n })(SwitchColorDivide = exports.SwitchColorDivide || (exports.SwitchColorDivide = {}));\n var CommonInterfaceManager = function (_super) {\n tslib_1.__extends(CommonInterfaceManager, _super);\n function CommonInterfaceManager(viewer) {\n var _this = _super.call(this, viewer) || this;\n _this.currentSelectWaveItemName = null;\n _this.currentBoreholeObjects = null;\n _this.boreholeLegend = null;\n _this.boreholeCutLineDisplay = false;\n _this.showEnglishText = false;\n _this.copyedExternalEvent = null;\n _this.elementKey = \"cutline\";\n _this.activeBoreholeName = null;\n return _this;\n }\n CommonInterfaceManager.prototype.showPlotTitle = function () {\n var result = null;\n var process = this.viewer.process;\n var titleRO = process.findRenderObjectByType(\"ModelTitle\");\n if (titleRO) {\n if (titleRO instanceof modelTitle_1.ModelTitle) {\n result = titleRO.cardObject.title.value;\n }\n } else {\n result = \"Active Structure\";\n }\n return result;\n };\n CommonInterfaceManager.prototype.editPlotTitle = function (title) {\n var process = this.viewer.process;\n if (!title || title.trimEnd() === \"\") {\n var titleRO_1 = process.findRenderObjectByType(\"ModelTitle\");\n if (titleRO_1) {\n titleRO_1.tempDelete(this.viewer);\n return 1;\n }\n }\n var islegal = this.checTitlekNamelegal(title);\n if (!islegal) {\n return 2;\n }\n var titleRO = process.findRenderObjectByType(\"ModelTitle\");\n if (titleRO) {\n if (titleRO instanceof modelTitle_1.ModelTitle) {\n titleRO.cardObject.title.value = title;\n titleRO.cardData = titleRO.cardObject.getLine();\n }\n } else {\n var titleRO_2 = new modelTitle_1.ModelTitle();\n titleRO_2.name = \"TITLE\";\n var line = \" \" + title;\n titleRO_2.cardData = line;\n titleRO_2.cardObject = new cardTITLE_1.CardTITLE(line);\n process.addRenderObject(process.caeRenderObjectTreeManager.sacinpNode, titleRO_2);\n }\n return 1;\n };\n CommonInterfaceManager.prototype.checTitlekNamelegal = function (name) {\n var reg = /^[A-Z0-9]*$/;\n if (!reg.test(name) || name.trimEnd().length > 125) {\n console.log(\"空间点名称不符合规范\");\n return false;\n }\n return true;\n };\n CommonInterfaceManager.prototype.resetView = function (isSetViewMode) {\n var _a, _b, _c;\n if (isSetViewMode === void 0) {\n isSetViewMode = true;\n }\n var viewer = this.viewer.process.activeViewer;\n viewer.selectionManager.clearAllSelectionAndHighlight();\n viewer.process.commandManager.closeAllCommands();\n viewer.commonInterfaceManager.colorSwitch(SwitchColorDivide.Cancel);\n viewer.commonInterfaceManager.finiteElementSwitch(false);\n viewer.commonInterfaceManager.waveSwitch(false);\n viewer.commonInterfaceManager.boreholeSwitch(false);\n viewer.viewInterfaceManager.setJointNumberVisible(false);\n viewer.viewInterfaceManager.setJointRestraintVisible(false);\n viewer.viewInterfaceManager.setMemberFixityVisible(false);\n viewer.viewInterfaceManager.setMemberLocalAxisVisible(false);\n viewer.viewInterfaceManager.setMemberSectionSizeVisible(false);\n viewer.viewInterfaceManager.setGrupNumberVisible(false);\n viewer.viewInterfaceManager.continuesRotate(false);\n viewer.viewInterfaceManager.setCameraSelect();\n var process = viewer.process;\n (_a = process.caeRenderObjectTreeManager.jointNode) === null || _a === void 0 ? void 0 : _a.childObjects.forEach(function (obj) {\n viewer.findInstanceObject(obj).viewerVisible = true;\n viewer.findInstanceObject(obj).visible = true;\n obj.clearSvg();\n });\n (_b = process.caeRenderObjectTreeManager.memberNode) === null || _b === void 0 ? void 0 : _b.childObjects.forEach(function (obj) {\n viewer.findInstanceObject(obj).viewerVisible = true;\n viewer.findInstanceObject(obj).visible = true;\n obj.clearSvg();\n });\n (_c = process.caeRenderObjectTreeManager.plateNode) === null || _c === void 0 ? void 0 : _c.childObjects.forEach(function (obj) {\n viewer.findInstanceObject(obj).viewerVisible = true;\n viewer.findInstanceObject(obj).visible = true;\n obj.clearSvg();\n });\n viewer.viewInterfaceManager.memberLineView(false);\n viewer.viewInterfaceManager.plateLineView(false);\n if (isSetViewMode) {\n viewer.setViewMode(gs_bim_air_1.Longan.ViewMode.OFSIso, true);\n }\n };\n CommonInterfaceManager.prototype.redraw = function () {\n var process = this.viewer.process;\n process.viewers.forEach(function (vi) {\n console.log(\"vi\");\n vi.exeSceneCameraChanged(gs_bim_air_1.Longan.LonganCore.CameraChangeType.Rotate | gs_bim_air_1.Longan.LonganCore.CameraChangeType.Scale | gs_bim_air_1.Longan.LonganCore.CameraChangeType.Translate);\n vi.updateDisplay();\n });\n };\n CommonInterfaceManager.prototype.checkIsFiniteElement = function () {\n var isFE = true;\n var viewer = this.viewer;\n var grupNode = viewer.process.caeRenderObjectTreeManager.grupNode;\n grupNode === null || grupNode === void 0 ? void 0 : grupNode.childObjects.forEach(function (grup) {\n if (grup instanceof grupObject_1.GrupObject) {\n if (grup.grupSegments.length > 1) {\n isFE = false;\n return isFE;\n }\n }\n });\n console.log(\"isFE:\", isFE);\n return isFE;\n };\n CommonInterfaceManager.prototype.openModel = function (modelId, isReplace) {\n var viewer = this.viewer;\n return new Promise(function (resolve, reject) {\n viewer.loadModel(modelId, isReplace).then(function (model) {\n viewer.process.historyManager.clearDeltaState();\n viewer.sceneSegment.renderingOptions.cullingMaximumExtent = 0;\n console.log(\"model\", model);\n var ro = viewer.renderObject;\n var caeTask = new caeTask_1.CAETask(ro, viewer);\n caeTask.workRenderObjectService = renderObjectService_1.default;\n viewer.process.taskManager.execute(caeTask);\n viewer.structureTreeManager.update();\n viewer.updateDisplay();\n viewer.setViewMode(gs_bim_air_1.Longan.ViewMode.OFSIso, true);\n viewer.postInterfaceManager.requestDBData();\n resolve();\n });\n });\n };\n CommonInterfaceManager.prototype.checkNeedSave = function () {\n var rootRO = this.viewer.process.caeRenderObjectTreeManager.rootNode;\n if (rootRO instanceof caeLightObject_1.CAELightObject) {\n var result = gs_ceec_design_1.PersistenceManager.saveDesign(rootRO);\n if (result.createList.length > 0 || result.deleteList.length > 0 || result.editList.length > 0) {\n return true;\n } else {\n return false;\n }\n }\n return false;\n };\n CommonInterfaceManager.prototype.save = function () {\n var _this = this;\n return new Promise(function (resolve, reject) {\n var rootRO = _this.viewer.process.caeRenderObjectTreeManager.rootNode;\n if (rootRO instanceof caeLightObject_1.CAELightObject) {\n rootRO.save(_this.viewer).then(function (data) {\n resolve(data);\n });\n }\n });\n };\n CommonInterfaceManager.prototype.exportDATFile = function () {\n console.log(\"export\");\n var datCardData = this.viewer.datWriterManager.exportDATFile();\n datCardData += \"END\";\n return datCardData;\n };\n CommonInterfaceManager.prototype.exportMemberData = function (isExportAll) {\n if (isExportAll === void 0) {\n isExportAll = true;\n }\n console.log(\"export member\");\n var datCardData = this.viewer.datWriterManager.exportMemberData(isExportAll);\n datCardData += \"END\";\n return datCardData;\n };\n CommonInterfaceManager.prototype.exportPileData = function (isExportAll) {\n if (isExportAll === void 0) {\n isExportAll = true;\n }\n console.log(\"export pile\");\n var datCardData = this.viewer.datWriterManager.exportPileData(isExportAll);\n if (datCardData === null) {\n return null;\n }\n datCardData += \"END\";\n return datCardData;\n };\n CommonInterfaceManager.prototype.exportDATFile_Seainp = function () {\n console.log(\"export_seainp\");\n var viewer = this.viewer;\n var datCardData = viewer.datWriterManager.exportDATFile_Seainp();\n datCardData += \"END\";\n return datCardData;\n };\n CommonInterfaceManager.prototype.exportDATFile_Sacinp = function () {\n console.log(\"export_sacinp\");\n var viewer = this.viewer;\n var datCardData = viewer.datWriterManager.exportDATFile_Sacinp();\n datCardData += \"END\";\n return datCardData;\n };\n CommonInterfaceManager.prototype.importDATData = function (content, overWrite) {\n if (overWrite === void 0) {\n overWrite = false;\n }\n console.log(\"importDATData\");\n this.viewer.datReaderManager.importDATData(content, overWrite);\n this.viewer.updateDisplay();\n };\n CommonInterfaceManager.prototype.importSEAData = function (content) {\n console.log(\"importSEAData\");\n var ro = this.viewer.process.findRenderObjectByType(\"SeastateLdopt\");\n if (ro) {\n var message = \"已经存在海况数据\";\n element_ui_1.Message.error(message);\n return;\n }\n this.viewer.datReaderManager.importSeainpData(content);\n this.viewer.updateDisplay();\n this.viewer.structureTreeManager.update();\n return \"importSEAData successful\";\n };\n CommonInterfaceManager.prototype.importSeaociData = function (content) {\n console.log(\"importSeaociData\");\n this.viewer.datReaderManager.importSeaociData(content);\n this.viewer.updateDisplay();\n this.viewer.structureTreeManager.update();\n return \"importSeaociData successful\";\n };\n CommonInterfaceManager.prototype.importPSIData = function (content) {\n console.log(\"importPSIData\");\n this.viewer.datReaderManager.importPSIData(content);\n this.viewer.updateDisplay();\n this.viewer.structureTreeManager.update();\n };\n CommonInterfaceManager.prototype.historyBack = function () {\n if (process_1.Process.activeProcess.historyManager.canRollBack) {\n process_1.Process.activeProcess.historyManager.rollBack();\n }\n };\n CommonInterfaceManager.prototype.historyForward = function () {\n if (process_1.Process.activeProcess.historyManager.canRollForward) {\n process_1.Process.activeProcess.historyManager.rollForward();\n }\n };\n CommonInterfaceManager.prototype.selectAll = function () {\n var viewer = this.viewer;\n viewer.selectionManager.clearAllSelectionAndHighlight();\n switch (viewer.selectionInterfaceManager.selectorFilter) {\n case selectionInterfaceManager_1.SelectorFiliter.Joint:\n this.selectAllJoints();\n break;\n case selectionInterfaceManager_1.SelectorFiliter.Member:\n this.selectAllMembers();\n break;\n case selectionInterfaceManager_1.SelectorFiliter.Plate:\n this.selectAllPlates();\n break;\n case selectionInterfaceManager_1.SelectorFiliter.All:\n this.selectAllJoints();\n this.selectAllMembers();\n this.selectAllPlates();\n break;\n }\n this.viewer.updateDisplay();\n };\n CommonInterfaceManager.prototype.createViewPoint = function (viewPointName) {\n this.viewer.caePanelManager.viewPointPanelCae.addViewPoint(viewPointName).then(function () {});\n };\n CommonInterfaceManager.prototype.selectAllJoints = function () {\n var joints = this.viewer.process.findRenderObjectsByType(\"JointObject\");\n var keys = new Array();\n var paths = new Array();\n joints.forEach(function (item) {\n keys.push(item.segment.key);\n paths.push(item.segment.path);\n });\n this.viewer.selectionManager.selectAndHighlightKeys(keys, paths);\n };\n CommonInterfaceManager.prototype.selectAllMembers = function () {\n var members = this.viewer.process.findRenderObjectsByType(\"MemberObject\");\n var keys = new Array();\n var paths = new Array();\n members.forEach(function (item) {\n keys.push(item.segment.key);\n paths.push(item.segment.path);\n });\n this.viewer.selectionManager.selectAndHighlightKeys(keys, paths);\n };\n CommonInterfaceManager.prototype.selectAllPlates = function () {\n var plates = this.viewer.process.findRenderObjectsByType(\"PlateObject\");\n var keys = new Array();\n var paths = new Array();\n plates.forEach(function (item) {\n keys.push(item.segment.key);\n paths.push(item.segment.path);\n });\n this.viewer.selectionManager.selectAndHighlightKeys(keys, paths);\n };\n CommonInterfaceManager.prototype.findJoint = function (jointName) {\n var process = this.viewer.process;\n var ro = process.findCaeObjectByNameInChildObject(process.caeRenderObjectTreeManager.jointNode, jointName);\n if (ro && ro instanceof jointObject_1.JointObject) {\n this.viewer.selectionManager.clearAllSelectionAndHighlight();\n this.viewer.locateWorld(ro.segment);\n this.viewer.selectionManager.selectAndHighlightKeys([ro.segment.key], [ro.segment.path]);\n this.viewer.updateDisplay();\n return ro;\n } else {\n return null;\n }\n };\n CommonInterfaceManager.prototype.renameJoint = function (originJointName, newJointName, useNextAvaliable) {\n var process = this.viewer.process;\n var result = {};\n if (!jointObject_1.JointObject.checkNamelegal(newJointName)) {\n result = 3;\n return result;\n }\n var jointNode = process.caeRenderObjectTreeManager.jointNode;\n var ro = process.findCaeObjectByNameInChildObject(jointNode, originJointName);\n if (ro && ro instanceof jointObject_1.JointObject) {\n if (!useNextAvaliable) {\n var newNameRO = process.findCaeObjectByNameInChildObject(jointNode, newJointName);\n if (newNameRO) {\n result = 3 + \",\" + newJointName;\n return result;\n }\n } else {\n newJointName = process.caeRenderObjectTreeManager.nameAscendingOrder(newJointName, 1, process.nameMapJoint)[0];\n }\n ro.name = newJointName;\n ro.setNeedUpdate();\n result = 2 + \",\" + originJointName + \",\" + newJointName;\n } else {\n result = 1 + \",\" + originJointName;\n }\n return result;\n };\n CommonInterfaceManager.prototype.findMember = function (memberName) {\n var process = this.viewer.process;\n var ro = process.findCaeObjectByNameInChildObject(process.caeRenderObjectTreeManager.memberNode, memberName);\n if (ro && ro instanceof memberObject_1.MemberObject) {\n this.viewer.selectionManager.clearAllSelectionAndHighlight();\n this.viewer.locateWorld(ro.segment);\n this.viewer.selectionManager.selectAndHighlightKeys([ro.segment.key], [ro.segment.path]);\n this.viewer.updateDisplay();\n return ro;\n } else {\n return null;\n }\n };\n CommonInterfaceManager.prototype.highlightMemberByNames = function (names) {\n var process = this.viewer.process;\n var keys = [];\n var paths = [];\n for (var i = 0; i < names.length; i++) {\n var obj = process.findCaeObjectByNameInChildObject(process.caeRenderObjectTreeManager.memberNode, names[i]);\n if (obj) {\n keys.push(obj.segment.key);\n paths.push(obj.segment.path);\n } else {\n console.log(\"找不到\" + names[i]);\n }\n }\n this.viewer.selectionManager.clearAllSelectionAndHighlight();\n this.viewer.selectionManager.selectAndHighlightKeys(keys, paths);\n this.viewer.updateDisplay();\n };\n CommonInterfaceManager.prototype.highlightPlateByNames = function (names) {\n var keys = [];\n var paths = [];\n for (var i = 0; i < names.length; i++) {\n var obj = this.viewer.process.findCaeObjectByNameInChildObject(this.viewer.process.caeRenderObjectTreeManager.plateNode, names[i]);\n if (obj) {\n keys.push(obj.segment.key);\n paths.push(obj.segment.path);\n } else {\n console.log(\"找不到\" + names[i]);\n }\n }\n this.viewer.selectionManager.clearAllSelectionAndHighlight();\n this.viewer.selectionManager.selectAndHighlightKeys(keys, paths);\n this.viewer.updateDisplay();\n };\n CommonInterfaceManager.prototype.findPlate = function (plateName) {\n var process = this.viewer.process;\n var ro = process.findCaeObjectByNameInChildObject(process.caeRenderObjectTreeManager.plateNode, plateName);\n if (ro && ro instanceof plateObject_1.PlateObject) {\n this.viewer.selectionManager.clearAllSelectionAndHighlight();\n this.viewer.locateWorld(ro.segment);\n this.viewer.selectionManager.selectAndHighlightKeys([ro.segment.key], [ro.segment.path]);\n this.viewer.updateDisplay();\n return ro;\n } else {\n return null;\n }\n };\n CommonInterfaceManager.prototype.getStructureTreeData = function () {\n var rootNode = this.viewer.structureTreeManager.rootNode;\n return rootNode;\n };\n CommonInterfaceManager.prototype.getMemberGrups = function () {\n var grupNameList = new Array();\n var grupObjectGroup = this.viewer.process.findRenderObjectByName(\"杆件截面组\");\n if (grupObjectGroup) {\n grupObjectGroup.childObjects.map(function (item) {\n grupNameList.push(item.name);\n });\n }\n return grupNameList;\n };\n CommonInterfaceManager.prototype.addStructureNode = function (parent, ro) {\n this.viewer.process.addRenderObject(parent, ro);\n };\n CommonInterfaceManager.prototype.removeStructureNode = function (ro) {\n this.viewer.process.removeRenderObject(ro);\n };\n CommonInterfaceManager.prototype.createMgrovObject = function () {\n var mgrov = new mgrovObject_1.MgrovObject();\n return mgrov;\n };\n CommonInterfaceManager.prototype.createCorrzObject = function () {\n var corrz = new corrzObject_1.CorrzObject();\n return corrz;\n };\n CommonInterfaceManager.prototype.clearChildObjects = function (viewer, ro) {\n if (ro) {\n while (ro.childObjects.length > 0) {\n viewer.process.removeRenderObject(ro.childObjects[0]);\n }\n }\n };\n CommonInterfaceManager.prototype.clearCaeRenderObject = function (viewer) {\n this.clearChildObjects(viewer, viewer.process.caeRenderObjectTreeManager.memberNode);\n this.clearChildObjects(viewer, viewer.process.caeRenderObjectTreeManager.plateNode);\n this.clearChildObjects(viewer, viewer.process.caeRenderObjectTreeManager.jointNode);\n this.clearChildObjects(viewer, viewer.process.caeRenderObjectTreeManager.grupNode);\n this.clearChildObjects(viewer, viewer.process.caeRenderObjectTreeManager.pGrupNode);\n this.clearChildObjects(viewer, viewer.process.caeRenderObjectTreeManager.sectionInsNode);\n this.clearChildObjects(viewer, viewer.process.caeRenderObjectTreeManager.sacinpNode);\n this.clearChildObjects(viewer, viewer.process.caeRenderObjectTreeManager.seastateNode);\n this.clearChildObjects(viewer, viewer.process.caeRenderObjectTreeManager.pileNode);\n this.clearChildObjects(viewer, viewer.process.caeRenderObjectTreeManager.plGrupNode);\n this.clearChildObjects(viewer, viewer.process.caeRenderObjectTreeManager.postResultNode);\n };\n CommonInterfaceManager.prototype.colorDivSwitch_GrupName = function (on_off, isUpdate) {\n if (isUpdate === void 0) {\n isUpdate = true;\n }\n var viewer = this.viewer;\n var process = this.viewer.process;\n var colorDivideRO = process.findRenderObjectByName(\"按截面组号分色\");\n if (colorDivideRO) {\n for (var i = 0; i < colorDivideRO.childObjects.length; i++) {\n var obj = colorDivideRO.childObjects[i];\n if (obj.checkBusinessStateIsActive()) {\n if (on_off) {\n obj.active(viewer);\n } else {\n obj.inactive(viewer);\n }\n }\n }\n if (on_off) {\n var cutline = {};\n if (colorDivideRO) {\n legendManage_1.LegendManage.destory(this.elementKey);\n cutline = colorDivideRO.getCutline();\n var component = legendManage_1.LegendManage.create(this.elementKey, cutline, \"\", \"\", \"\");\n if (this.showEnglishText) {\n component.title = \"Colored By Member Groups\";\n component.leftText = \"Color\";\n component.rightText = \"Member Groups\";\n } else {\n component.title = \"截面组分色\";\n component.leftText = \"颜色\";\n component.rightText = \"截面组名\";\n }\n }\n } else {\n legendManage_1.LegendManage.destory(this.elementKey);\n }\n }\n if (isUpdate) this.viewer.updateDisplay();\n };\n CommonInterfaceManager.prototype.colorDivSwitch_GrupThickness = function (on_off, isUpdate) {\n if (isUpdate === void 0) {\n isUpdate = true;\n }\n var viewer = this.viewer;\n var process = this.viewer.process;\n var colorDivideRO = process.findRenderObjectByName(\"按截面壁厚分色\");\n if (colorDivideRO) {\n for (var i = 0; i < colorDivideRO.childObjects.length; i++) {\n var obj = colorDivideRO.childObjects[i];\n if (obj.checkBusinessStateIsActive()) {\n if (on_off) {\n obj.active(viewer);\n } else {\n obj.inactive(viewer);\n }\n }\n }\n if (on_off) {\n var cutline = {};\n if (colorDivideRO) {\n legendManage_1.LegendManage.destory(this.elementKey);\n cutline = colorDivideRO.getCutline();\n var component = legendManage_1.LegendManage.create(this.elementKey, cutline, \"\", \"\", \"\");\n if (this.showEnglishText) {\n component.title = \"Colored By Thickness\";\n component.leftText = \"Color\";\n component.rightText = \"Thickness(cm)\";\n } else {\n component.title = \"壁厚分色\";\n component.leftText = \"颜色\";\n component.rightText = \"壁厚(cm)\";\n }\n }\n } else {\n legendManage_1.LegendManage.destory(this.elementKey);\n }\n }\n if (isUpdate) this.viewer.updateDisplay();\n };\n CommonInterfaceManager.prototype.colordDivSwitch_Mgrov = function (on_off, isUpdate) {\n if (isUpdate === void 0) {\n isUpdate = true;\n }\n var viewer = this.viewer;\n var process = this.viewer.process;\n var colorDivideRO = process.findRenderObjectByName(\"海生物厚度按高程分色\");\n if (colorDivideRO && colorDivideRO.checkBusinessStateIsActive()) {\n var obj = colorDivideRO;\n if (on_off) {\n obj.active(viewer);\n var cutline = {};\n if (colorDivideRO) {\n var obj_1 = colorDivideRO;\n var thicknessIndex = 0;\n for (var i = 0; i < obj_1.heightList.length; i += 2) {\n var bottom = obj_1.heightList[i];\n var top_1 = obj_1.heightList[i + 1];\n var key = bottom + \"~\" + top_1 + \":\" + obj_1.thickness[thicknessIndex];\n var color = [obj_1.color[i / 2 * 4 + 0], obj_1.color[i / 2 * 4 + 1], obj_1.color[i / 2 * 4 + 2], obj_1.color[i / 2 * 4 + 3]];\n if (color[0] === -1 && color[1] === -1 && color[2] === -1) {\n continue;\n }\n color[0] *= 255;\n color[1] *= 255;\n color[2] *= 255;\n cutline[key] = color;\n thicknessIndex++;\n }\n legendManage_1.LegendManage.destory(this.elementKey);\n var component = legendManage_1.LegendManage.create(this.elementKey, cutline, \"\", \"\", \"\");\n if (this.showEnglishText) {\n component.title = \"Marine Growth Zones\";\n component.leftText = \"Color\";\n component.rightText = \"Height Range(m): Thickness(mm)\";\n } else {\n component.title = \"海生物厚度分色\";\n component.leftText = \"颜色\";\n component.rightText = \"高度范围(m): 厚度(mm)\";\n }\n }\n } else {\n obj.inactive(viewer);\n legendManage_1.LegendManage.destory(this.elementKey);\n }\n }\n if (isUpdate) this.viewer.updateDisplay();\n };\n CommonInterfaceManager.prototype.colordDivSwitch_Corrz = function (on_off, isUpdate) {\n if (isUpdate === void 0) {\n isUpdate = true;\n }\n var viewer = this.viewer;\n var process = this.viewer.process;\n var colorDivideRO = process.findRenderObjectByName(\"腐蚀余量按高程分色\");\n if (colorDivideRO && colorDivideRO.checkBusinessStateIsActive()) {\n var obj = colorDivideRO;\n if (on_off) {\n obj.active(viewer);\n var cutline = {};\n if (colorDivideRO) {\n var obj_2 = colorDivideRO;\n var thicknessIndex = 0;\n for (var i = 0; i < obj_2.heightList.length; i += 2) {\n var bottom = obj_2.heightList[i];\n var top_2 = obj_2.heightList[i + 1];\n var keyLevelBottom = obj_2.corrzList[thicknessIndex].thicknessBottom;\n if (!keyLevelBottom) {\n keyLevelBottom = 0;\n }\n var keyLevelTop = obj_2.corrzList[thicknessIndex].thicknessTop;\n if (!keyLevelTop) {\n keyLevelTop = 0;\n }\n var key = bottom + \"~\" + top_2 + \":\" + keyLevelBottom + \"~\" + keyLevelTop;\n var color = [obj_2.color[i / 2 * 4 + 0], obj_2.color[i / 2 * 4 + 1], obj_2.color[i / 2 * 4 + 2], obj_2.color[i / 2 * 4 + 3]];\n if (color[0] === -1 && color[1] === -1 && color[2] === -1) {\n continue;\n }\n color[0] *= 255;\n color[1] *= 255;\n color[2] *= 255;\n cutline[key] = color;\n thicknessIndex++;\n }\n legendManage_1.LegendManage.destory(this.elementKey);\n var component = legendManage_1.LegendManage.create(this.elementKey, cutline, \"\", \"\", \"\");\n if (this.showEnglishText) {\n component.title = \"Corrosion Zones\";\n component.leftText = \"Color\";\n component.rightText = \"Height Range(m): Thickness(mm)\";\n } else {\n component.title = \"腐蚀余量分色\";\n component.leftText = \"颜色\";\n component.rightText = \"壁高度范围(m): 厚度(mm)\";\n }\n }\n } else {\n obj.inactive(viewer);\n legendManage_1.LegendManage.destory(this.elementKey);\n }\n }\n if (isUpdate) this.viewer.updateDisplay();\n };\n CommonInterfaceManager.prototype.colorDivSwitch_ComponentGroup = function (on_off, isUpdate) {\n if (isUpdate === void 0) {\n isUpdate = true;\n }\n var viewer = this.viewer;\n var process = this.viewer.process;\n var componentGroups = process.findRenderObjectByName(\"构件分组分色\");\n if (componentGroups) {\n for (var i = 0; i < componentGroups.childObjects.length; i++) {\n var obj = componentGroups.childObjects[i];\n if (obj.checkBusinessStateIsActive()) {\n this.setAllComponentGroupVisible(obj.name);\n if (on_off) {\n obj.active(viewer);\n } else {\n obj.inactive(viewer);\n }\n }\n }\n if (on_off) {\n var cutline = {};\n if (componentGroups) {\n legendManage_1.LegendManage.destory(this.elementKey);\n for (var i = 0; i < componentGroups.childObjects.length; i++) {\n var obj = componentGroups.childObjects[i];\n if (obj.checkBusinessStateIsActive()) {\n var color = gs_bim_air_1.Longan.deepClone(obj.color);\n cutline[obj.name] = color;\n }\n }\n var component = legendManage_1.LegendManage.create(this.elementKey, cutline, \"\", \"\", \"\");\n if (this.showEnglishText) {\n component.title = \"Set Colors\";\n component.leftText = \"Color\";\n component.rightText = \"Set Name\";\n } else {\n component.title = \"自定义构件分组分色\";\n component.leftText = \"颜色\";\n component.rightText = \"分组名\";\n }\n }\n } else {\n legendManage_1.LegendManage.destory(this.elementKey);\n }\n }\n if (isUpdate) this.viewer.updateDisplay();\n };\n CommonInterfaceManager.prototype.setAllComponentGroupVisible = function (groupName) {\n var viewer = this.viewer;\n var process = this.viewer.process;\n var componentGroups = process.findRenderObjectByName(\"构件分组分色\");\n if (componentGroups) {\n for (var i = 0; i < componentGroups.childObjects.length; i++) {\n var obj = componentGroups.childObjects[i];\n if (obj.name === groupName) {\n if (obj.checkBusinessStateIsActive()) {\n obj.isVisible = true;\n obj.businessState = gs_ceec_design_2.BusinessState.Editing;\n obj.setChildVisible(viewer, true);\n }\n break;\n }\n }\n }\n };\n CommonInterfaceManager.prototype.colorSwitch = function (state, isUpdate) {\n if (isUpdate === void 0) {\n isUpdate = true;\n }\n switch (state) {\n case SwitchColorDivide.GrupName:\n this.colorDivSwitch_GrupThickness(false, isUpdate);\n this.colordDivSwitch_Mgrov(false, isUpdate);\n this.colordDivSwitch_Corrz(false, isUpdate);\n this.colorDivSwitch_ComponentGroup(false, isUpdate);\n this.colorDivSwitch_GrupName(true, isUpdate);\n break;\n case SwitchColorDivide.GrupThickness:\n this.colorDivSwitch_GrupName(false, isUpdate);\n this.colordDivSwitch_Mgrov(false, isUpdate);\n this.colordDivSwitch_Corrz(false, isUpdate);\n this.colorDivSwitch_ComponentGroup(false, isUpdate);\n this.colorDivSwitch_GrupThickness(true, isUpdate);\n break;\n case SwitchColorDivide.Mgrov:\n this.colorDivSwitch_GrupName(false, isUpdate);\n this.colorDivSwitch_GrupThickness(false, isUpdate);\n this.colordDivSwitch_Corrz(false, isUpdate);\n this.colorDivSwitch_ComponentGroup(false, isUpdate);\n this.colordDivSwitch_Mgrov(true, isUpdate);\n break;\n case SwitchColorDivide.Corrz:\n this.colorDivSwitch_GrupName(false, isUpdate);\n this.colorDivSwitch_GrupThickness(false, isUpdate);\n this.colordDivSwitch_Mgrov(false, isUpdate);\n this.colorDivSwitch_ComponentGroup(false, isUpdate);\n this.colordDivSwitch_Corrz(true, isUpdate);\n break;\n case SwitchColorDivide.ComponentGroup:\n this.colorDivSwitch_GrupName(false, isUpdate);\n this.colorDivSwitch_GrupThickness(false, isUpdate);\n this.colordDivSwitch_Mgrov(false, isUpdate);\n this.colordDivSwitch_Corrz(false, isUpdate);\n this.colorDivSwitch_ComponentGroup(true, isUpdate);\n break;\n case SwitchColorDivide.Cancel:\n this.colorDivSwitch_GrupName(false, isUpdate);\n this.colorDivSwitch_GrupThickness(false, isUpdate);\n this.colordDivSwitch_Mgrov(false, isUpdate);\n this.colordDivSwitch_Corrz(false, isUpdate);\n this.colorDivSwitch_ComponentGroup(false, isUpdate);\n break;\n }\n };\n CommonInterfaceManager.prototype.componentGroupColorVisibleSwitch = function (groupName, on_off) {\n var viewer = this.viewer;\n var process = this.viewer.process;\n var componentGroups = process.findRenderObjectByName(\"构件分组分色\");\n if (componentGroups) {\n for (var i = 0; i < componentGroups.childObjects.length; i++) {\n var obj = componentGroups.childObjects[i];\n if (obj.name === groupName) {\n if (obj.checkBusinessStateIsActive()) {\n obj.businessState = gs_ceec_design_2.BusinessState.Editing;\n if (on_off) {\n obj.active(viewer);\n } else {\n obj.inactive(viewer);\n }\n obj.setChildVisible(viewer, on_off);\n }\n break;\n }\n }\n }\n this.viewer.updateDisplay();\n };\n CommonInterfaceManager.prototype.waveSwitch = function (on_off) {\n var process = this.viewer.process;\n var wave = process.findRenderObjectByName(\"波面\");\n if (!wave) {\n return -1;\n }\n var currentWaveItemObject = process.findCaeObjectByNameInChildObject(wave, this.currentSelectWaveItemName);\n if (currentWaveItemObject) {\n if (on_off) {\n currentWaveItemObject.active(this.viewer);\n store_1.default.state.info = currentWaveItemObject.toString();\n } else {\n currentWaveItemObject.inactive(this.viewer);\n store_1.default.state.info = null;\n }\n } else {\n store_1.default.state.info = null;\n }\n this.viewer.updateDisplay();\n };\n CommonInterfaceManager.prototype.boreholeSwitch = function (on_off) {\n var process = this.viewer.process;\n var parentNode = process.findRenderObjectByName(\"土层和波面\");\n if (!parentNode) {\n return -1;\n }\n var elementKey = \"soild\";\n if (parentNode && on_off) {\n this.boreholeCutLineDisplay = true;\n for (var i = 0; i < parentNode.childObjects.length; i++) {\n parentNode.childObjects[i].active();\n }\n legendManage_1.LegendManage.create(elementKey, this.boreholeLegend, \"土层数据\", \"\", \"土层名\", {\n right: \"0px\",\n bottom: \"0px\"\n });\n } else {\n this.boreholeCutLineDisplay = false;\n for (var i = 0; i < parentNode.childObjects.length; i++) {\n parentNode.childObjects[i].inactive();\n }\n legendManage_1.LegendManage.destory(elementKey);\n }\n this.viewer.updateDisplay();\n };\n CommonInterfaceManager.prototype.checkPSI = function () {\n var exist = false;\n if (!this.viewer.datReaderManager.psiopt) {\n console.log(\"没有桩土数据.\");\n exist = false;\n } else {\n exist = true;\n }\n return exist;\n };\n CommonInterfaceManager.prototype.checkSeainp = function () {\n var exist = false;\n var ro = this.viewer.process.findRenderObjectByType(\"SeastateLdopt\");\n if (ro) {\n exist = true;\n }\n return exist;\n };\n CommonInterfaceManager.prototype.finiteElementSwitch = function (visible) {\n var members = this.viewer.process.findRenderObjectsByType(\"MemberObject\");\n if (visible) {\n for (var i = 0; i < members.length; i++) {\n var member = members[i];\n member.segmentLengthCoeff = memberObject_1.MemberObject.g_GridRatio;\n if (member.segmentLengthCoeff === -1) {\n member.segmentLengthCoeff = 0.9;\n }\n member.setNeedUpdate();\n }\n this.viewer.updateDisplay();\n } else {\n for (var i = 0; i < members.length; i++) {\n var member = members[i];\n member.segmentLengthCoeff = 1;\n member.setNeedUpdate();\n }\n }\n this.viewer.updateDisplay();\n };\n CommonInterfaceManager.prototype.editColors = function (backgroundColor, jointColor, memberColorLine, memberColorFace, plateColor) {\n objectColors_1.ObjectColor.jointColor = jointColor;\n objectColors_1.ObjectColor.memberFaceColor = memberColorFace;\n objectColors_1.ObjectColor.memberLineColor = memberColorLine;\n objectColors_1.ObjectColor.plateColor = plateColor;\n this.viewer.backgroundColor = backgroundColor;\n var joints = this.viewer.process.findRenderObjectsByType(\"JointObject\");\n joints.forEach(function (item) {\n item.segment.color.setMarker(jointColor);\n });\n var members = this.viewer.process.findRenderObjectsByType(\"MemberObject\");\n members.forEach(function (item) {\n item.faceColor = memberColorFace;\n item.lineColor = memberColorLine;\n item.setNeedUpdate();\n });\n var plates = this.viewer.process.findRenderObjectsByType(\"PlateObject\");\n plates.forEach(function (item) {\n item.faceColor = plateColor;\n item.setNeedUpdate();\n });\n this.viewer.updateDisplay();\n };\n CommonInterfaceManager.prototype.editLabelColors = function (jointLabel, memberLabel, plateLabel, loadLabel) {\n objectColors_1.ObjectColor.jointLabelColor = jointLabel;\n objectColors_1.ObjectColor.memberLabelColor = memberLabel;\n objectColors_1.ObjectColor.plateLabelColor = plateLabel;\n objectColors_1.ObjectColor.loadLabelColor = loadLabel;\n var joints = this.viewer.process.findRenderObjectsByType(\"JointObject\");\n joints.forEach(function (item) {\n item.isDrawSvg = false;\n item.isDrawSvg = true;\n });\n var members = this.viewer.process.findRenderObjectsByType(\"MemberObject\");\n members.forEach(function (item) {\n item.isDrawSvg = false;\n item.isDrawSvg = true;\n });\n var plates = this.viewer.process.findRenderObjectsByType(\"PlateObject\");\n plates.forEach(function (item) {\n item.isDrawSvg = false;\n item.isDrawSvg = true;\n });\n this.viewer.exeSceneCameraChanged(gs_bim_air_1.Longan.LonganCore.CameraChangeType.Scale);\n };\n CommonInterfaceManager.prototype.editSectionLabelColors = function (sectionViewer, backgroundColor, lineLabelColor, arrowLabelColor, textLabelColor) {\n if (backgroundColor) {\n sectionViewer.backgroundColor = backgroundColor;\n }\n if (lineLabelColor) {\n instanceSectionObject_1.InstanceSectionObject.lineLabelColor = lineLabelColor;\n }\n if (arrowLabelColor) {\n instanceSectionObject_1.InstanceSectionObject.arrowLabelColor = arrowLabelColor;\n }\n if (textLabelColor) {\n instanceSectionObject_1.InstanceSectionObject.textLabelColor = textLabelColor;\n }\n var root = sectionViewer.renderObject;\n root === null || root === void 0 ? void 0 : root.childObjects.forEach(function (section) {\n if (section instanceof sectionObject_1.SectionObject) {\n var iro_1 = sectionViewer.findInstanceObject(section);\n if (iro_1) {\n iro_1.removeSvg();\n setTimeout(function () {\n iro_1.drawSvg();\n }, 10);\n }\n }\n });\n };\n CommonInterfaceManager.prototype.switchActiveViewer = function (elementId) {\n var process = this.viewer.process;\n process.viewers.forEach(function (vi) {\n if (vi.container.id === elementId) {\n process.activeViewer = vi;\n return;\n }\n });\n };\n CommonInterfaceManager.prototype.showHistoryList = function () {\n var historyManager = this.viewer.process.historyManager;\n var list = historyManager.stateList;\n for (var i = 0; i < list.count(); i++) {\n console.log(list.items[i].name);\n }\n return list;\n };\n CommonInterfaceManager.prototype.historyRoll = function (index) {\n var historyManager = this.viewer.process.historyManager;\n var currentIdx = historyManager.currentStateIndex;\n if (currentIdx < index) {\n var time = index - currentIdx;\n for (var i = 0; i < time; i++) {\n this.viewer.process.historyManager.rollForward();\n }\n } else if (currentIdx > index) {\n var time = currentIdx - index;\n for (var i = 0; i < time; i++) {\n this.viewer.process.historyManager.rollBack();\n }\n }\n };\n CommonInterfaceManager.prototype.getLoadConditionList = function () {\n var loadConditions = this.viewer.process.findRenderObjectsByType(\"LoadConditionObject\");\n return loadConditions;\n };\n CommonInterfaceManager.prototype.getLoadConditionCombineList = function () {\n var objects = this.viewer.process.findRenderObjectsByType(\"SeastateLcomb\");\n return objects;\n };\n CommonInterfaceManager.prototype.removeProcessData = function () {\n this.viewer.process.clearRenderObjects(true);\n };\n CommonInterfaceManager.prototype.addJointLoad = function (loadConditionName, loadGroupName, selectedJointName, fx, fy, fz, mx, my, mz) {\n var viewer = this.viewer;\n var pretreatmentRO = viewer.process.findRenderObjectByName(\"后处理计算结果\");\n if (!pretreatmentRO) {\n console.error(\"没有'后处理计算结果'的RO节点\");\n return 2;\n }\n var conditionParent = viewer.process.findCaeObjectByNameInChildObject(pretreatmentRO, \"荷载工况\");\n if (!conditionParent) {\n conditionParent = new gs_ceec_design_2.DesignBaseObject();\n conditionParent.businessState = gs_ceec_design_2.BusinessState.Creating;\n conditionParent.name = \"荷载工况\";\n viewer.process.addRenderObject(pretreatmentRO, conditionParent);\n }\n var loadConditionRO = null;\n loadConditionRO = viewer.process.findCaeObjectByNameInChildObject(conditionParent, loadConditionName);\n if (!loadConditionRO) {\n loadConditionRO = new loadConditionObject_1.LoadConditionObject(loadConditionName);\n loadConditionRO.businessState = gs_ceec_design_2.BusinessState.Creating;\n viewer.process.addRenderObject(conditionParent, loadConditionRO);\n } else {\n loadConditionRO.businessState = gs_ceec_design_2.BusinessState.Editing;\n }\n var loadGroupRO = viewer.process.findCaeObjectByNameInChildObject(loadConditionRO, loadGroupName);\n if (!loadGroupRO) {\n loadGroupRO = new loadGroupObject_1.LoadGroupObject(loadGroupName);\n loadGroupRO.businessState = gs_ceec_design_2.BusinessState.Creating;\n viewer.process.addRenderObject(loadConditionRO, loadGroupRO);\n } else {\n loadGroupRO.businessState = gs_ceec_design_2.BusinessState.Editing;\n }\n for (var i = 0; i < loadGroupRO.childObjects.length; i++) {\n var load = loadGroupRO.childObjects[i];\n if (load instanceof jointLoadObject_1.JointLoadObject) {\n if (load.jointName === selectedJointName) {\n return 3;\n }\n }\n }\n var jointLoad = new jointLoadObject_1.JointLoadObject(loadConditionRO.name, loadGroupName);\n jointLoad.name = \"Joint:\" + selectedJointName;\n jointLoad.businessState = gs_ceec_design_2.BusinessState.Creating;\n jointLoad.jointName = selectedJointName;\n jointLoad.forceXDirection = fx;\n jointLoad.forceYDirection = fy;\n jointLoad.forceZDirection = fz;\n jointLoad.momentAboutXAxis = mx;\n jointLoad.momentAboutYAxis = my;\n jointLoad.momentAboutZAxis = mz;\n viewer.process.addRenderObject(loadGroupRO, jointLoad);\n return 1;\n };\n CommonInterfaceManager.prototype.editJointLoad = function (jointLoad, fx, fy, fz, mx, my, mz) {\n jointLoad.businessState = gs_ceec_design_2.BusinessState.Editing;\n jointLoad.forceXDirection = fx;\n jointLoad.forceYDirection = fy;\n jointLoad.forceZDirection = fz;\n jointLoad.momentAboutXAxis = mx;\n jointLoad.momentAboutYAxis = my;\n jointLoad.momentAboutZAxis = mz;\n };\n CommonInterfaceManager.prototype.boreholeChange = function (boreholeName) {\n var elementKey = \"soild\";\n if (this.boreholeCutLineDisplay) {\n this.boreholeCutLineDisplay = false;\n legendManage_1.LegendManage.destory(elementKey);\n var currentBoreholeObjects = this.currentBoreholeObjects;\n for (var i = 0; i < currentBoreholeObjects.length; i++) {\n if (currentBoreholeObjects[i].name === boreholeName) {\n currentBoreholeObjects[i].cutlienAcitve = true;\n this.activeBoreholeName = boreholeName;\n this.boreholeCutLineDisplay = true;\n var cutLineLegend = currentBoreholeObjects[i].geCutline();\n legendManage_1.LegendManage.create(elementKey, cutLineLegend, \"土层数据\", \"颜色\", \"土层名\", {\n right: \"0px\",\n bottom: \"0px\"\n });\n } else {\n currentBoreholeObjects[i].cutlienAcitve = false;\n }\n }\n }\n };\n return CommonInterfaceManager;\n }(gs_bim_air_1.Longan.ViewerManagerBase);\n exports.CommonInterfaceManager = CommonInterfaceManager;\n}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9wYWNrYWdlcy9jYWVEZXNpZ24vc3JjL2dzRGV2RngvbWFuYWdlcnMvaW50ZXJmYWNlTWFuYWdlcnMvY29tbW9uSW50ZXJmYWNlTWFuYWdlci50cy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1tuYW1lXS8uL3BhY2thZ2VzL2NhZURlc2lnbi9zcmMvZ3NEZXZGeC9tYW5hZ2Vycy9pbnRlcmZhY2VNYW5hZ2Vycy9jb21tb25JbnRlcmZhY2VNYW5hZ2VyLnRzPzcxNWMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ0FFTGlnaHRPYmplY3QgfSBmcm9tIFwiLi4vLi4vLi4vZ3NEZXZGeC9vYmplY3RzL2NhZUxpZ2h0T2JqZWN0L2NhZUxpZ2h0T2JqZWN0XCI7XG5pbXBvcnQgeyBKb2ludE9iamVjdCB9IGZyb20gXCIuLi8uLi8uLi9nc0RldkZ4L29iamVjdHMvY2FlT2JqZWN0cy9qb2ludE9iamVjdFwiO1xuaW1wb3J0IHsgTG9uZ2FuIH0gZnJvbSBcImdzLWJpbS1haXJcIjtcbmltcG9ydCB7IFZpZXdlciB9IGZyb20gXCIuLi8uLi92aWV3ZXJcIjtcbmltcG9ydCB7IFNlbGVjdG9yRmlsaXRlciB9IGZyb20gXCIuL3NlbGVjdGlvbkludGVyZmFjZU1hbmFnZXJcIjtcbmltcG9ydCB7IENBRVRhc2sgfSBmcm9tIFwiLi4vLi4vLi4vZ3NEZXZGeC90YXNrcy9jYWVUYXNrXCI7XG5pbXBvcnQgcmVuZGVyT2JqZWN0U2VydmljZSBmcm9tIFwiLi4vLi4vLi4vYXBpL3JlbmRlck9iamVjdFNlcnZpY2VcIjtcbmltcG9ydCB7IFByb2Nlc3MgfSBmcm9tIFwiLi4vLi4vLi4vZ3NEZXZGeC9wcm9jZXNzXCI7XG5pbXBvcnQgeyBNb2RlbFRpdGxlIH0gZnJvbSBcIi4uLy4uLy4uL2dzRGV2Rngvb2JqZWN0cy9jYWVPYmplY3RzL29wdGlvbk9iamVjdHMvbW9kZWxUaXRsZVwiO1xuaW1wb3J0IHsgQ2FyZFRJVExFIH0gZnJvbSBcIi4uLy4uLy4uL2NhZUNhcmRFZGl0b3IvY2FlQ2FyZE9iamVjdHMvc2FjaW5wL2NhcmRUSVRMRVwiO1xuaW1wb3J0IHsgUGVyc2lzdGVuY2VNYW5hZ2VyIH0gZnJvbSBcImdzLWNlZWMtZGVzaWduXCI7XG5pbXBvcnQgeyBNZW1iZXJPYmplY3QgfSBmcm9tIFwiLi4vLi4vLi4vZ3NEZXZGeC9vYmplY3RzL2NhZU9iamVjdHMvbWVtYmVyT2JqZWN0XCI7XG5pbXBvcnQgeyBCdXNpbmVzc1N0YXRlLCBEZXNpZ25CYXNlT2JqZWN0IH0gZnJvbSBcImdzLWNlZWMtZGVzaWduXCI7XG5pbXBvcnQgeyBNZ3Jvdk9iamVjdCB9IGZyb20gXCIuLi8uLi8uLi9nc0RldkZ4L29iamVjdHMvY2FlT2JqZWN0cy9wcmV0cmVhdG1lbnQvbWdyb3ZPYmplY3RcIjtcbmltcG9ydCB7IENvcnJ6T2JqZWN0IH0gZnJvbSBcIi4uLy4uLy4uL2dzRGV2Rngvb2JqZWN0cy9jYWVPYmplY3RzL3ByZXRyZWF0bWVudC9jb3Jyek9iamVjdFwiO1xuaW1wb3J0IHsgQ29sb3JEaXZHcnVwSWRPYmplY3QgfSBmcm9tIFwiLi4vLi4vLi4vZ3NEZXZGeC9vYmplY3RzL3ByZXRyZWF0bWVudE9iamVjdHMvY29sb3JEaXZHcnVwSWRPYmplY3RcIjtcbmltcG9ydCB7IENvbG9yRGl2R3J1cFRoaWNrbmVzc09iamVjdCB9IGZyb20gXCIuLi8uLi8uLi9nc0RldkZ4L29iamVjdHMvcHJldHJlYXRtZW50T2JqZWN0cy9jb2xvckRpdkdydXBUaGlja25lc3NPYmplY3RcIjtcbmltcG9ydCB7IENvbG9yRGl2TUdST1ZPYmplY3QgfSBmcm9tIFwiLi4vLi4vLi4vZ3NEZXZGeC9vYmplY3RzL3ByZXRyZWF0bWVudE9iamVjdHMvY29sb3JEaXZNR1JPVk9iamVjdFwiO1xuaW1wb3J0IHsgQ29sb3JEaXZDT1JSWk9iamVjdCB9IGZyb20gXCIuLi8uLi8uLi9nc0RldkZ4L29iamVjdHMvcHJldHJlYXRtZW50T2JqZWN0cy9jb2xvckRpdkNPUlJaT2JqZWN0XCI7XG5pbXBvcnQgc3RvcmUgZnJvbSBcIi4uLy4uLy4uL3N0b3JlXCI7XG5pbXBvcnQgeyBDdXRsaW5lR3J1cFRoaWNrbmVzc09iamVjdCB9IGZyb20gXCIuLi8uLi8uLi9nc0RldkZ4L29iamVjdHMvcHJldHJlYXRtZW50T2JqZWN0cy9jdXRsaW5lR3J1cFRoaWNrbmVzc09iamVjdFwiO1xuaW1wb3J0IHsgQ3V0bGluZUdydXBJZE9iamVjdCB9IGZyb20gXCIuLi8uLi8uLi9nc0RldkZ4L29iamVjdHMvcHJldHJlYXRtZW50T2JqZWN0cy9jdXRsaW5lR3J1cElkT2JqZWN0XCI7XG5pbXBvcnQgeyBQbGF0ZU9iamVjdCB9IGZyb20gXCIuLi8uLi8uLi9nc0RldkZ4L29iamVjdHMvY2FlT2JqZWN0cy9wbGF0ZU9iamVjdFwiO1xuaW1wb3J0IHsgQ29tbWFuZE1hbmFnZXIgfSBmcm9tIFwiLi4vY29tbWFuZE1hbmFnZXJcIjtcbmltcG9ydCB7IEdydXBPYmplY3QgfSBmcm9tIFwiLi4vLi4vLi4vZ3NEZXZGeC9vYmplY3RzL2NhZU9iamVjdHMvZ3J1cE9iamVjdFwiO1xuaW1wb3J0IHsgV2F2ZU9iamVjdCB9IGZyb20gXCIuLi8uLi8uLi9nc0RldkZ4L29iamVjdHMvcHJldHJlYXRtZW50T2JqZWN0cy93YXZlT2JqZWN0XCI7XG5pbXBvcnQgeyBXYXZlSXRlbU9iamVjdCB9IGZyb20gXCIuLi8uLi8uLi9nc0RldkZ4L29iamVjdHMvcHJldHJlYXRtZW50T2JqZWN0cy93YXZlSXRlbU9iamVjdFwiO1xuaW1wb3J0IHsgQ29sb3JEaXZDb21wb25lbnRHcm91cE9iamVjdCB9IGZyb20gXCIuLi8uLi8uLi9nc0RldkZ4L29iamVjdHMvcHJldHJlYXRtZW50T2JqZWN0cy9jb2xvckRpdkNvbXBvbmVudEdyb3VwT2JqZWN0XCI7XG5pbXBvcnQgeyBCb3JlaG9sZXNPYmplY3QgfSBmcm9tIFwiLi4vLi4vLi4vZ3NEZXZGeC9vYmplY3RzL3ByZXRyZWF0bWVudE9iamVjdHMvYm9yZWhvbGVPYmplY3RcIjtcbmltcG9ydCB7IE9iamVjdENvbG9yIH0gZnJvbSBcIi4uLy4uLy4uL2dzRGV2Rngvb2JqZWN0cy9jYWVPYmplY3RzL29iamVjdENvbG9yc1wiO1xuaW1wb3J0IHsgSW5zdGFuY2VTZWN0aW9uT2JqZWN0IH0gZnJvbSBcIi4uLy4uLy4uL2dzRGV2Rngvb2JqZWN0cy9jYWVPYmplY3RzL2luc3RhbmNlU2VjdGlvbk9iamVjdFwiO1xuaW1wb3J0IHsgU2VjdGlvbk9iamVjdCB9IGZyb20gXCIuLi8uLi8uLi9nc0RldkZ4L29iamVjdHMvY2FlT2JqZWN0cy9zZWN0aW9uT2JqZWN0XCI7XG5pbXBvcnQgeyBTZWN0aW9uVmlld2VyIH0gZnJvbSBcIi4uLy4uLy4uL2dzRGV2Rngvc2VjdGlvblZpZXdlclwiO1xuaW1wb3J0IHsgTG9hZENvbmRpdGlvbk9iamVjdCB9IGZyb20gXCIuLi8uLi8uLi9nc0RldkZ4L29iamVjdHMvbG9hZE9iamVjdHMvbG9hZENvbmRpdGlvbk9iamVjdFwiO1xuaW1wb3J0IHsgTG9hZEdyb3VwT2JqZWN0IH0gZnJvbSBcIi4uLy4uLy4uL2dzRGV2Rngvb2JqZWN0cy9sb2FkT2JqZWN0cy9sb2FkR3JvdXBPYmplY3RcIjtcbmltcG9ydCB7IEpvaW50TG9hZE9iamVjdCB9IGZyb20gXCIuLi8uLi8uLi9nc0RldkZ4L29iamVjdHMvbG9hZE9iamVjdHMvam9pbnRMb2FkT2JqZWN0XCI7XG5pbXBvcnQgeyBNZXNzYWdlIH0gZnJvbSBcImVsZW1lbnQtdWlcIjtcbmltcG9ydCB7IExlZ2VuZE1hbmFnZSB9IGZyb20gXCIuLi8uLi8uLi92aWV3ZXJXcmFwcGVyL21vZHVsZS9sZWdlbmRNYW5hZ2VcIjtcblxuZXhwb3J0IGVudW0gU3dpdGNoQ29sb3JEaXZpZGUge1xuICBHcnVwTmFtZSA9IDAsIC8v5oyJ5p2G5Lu25oiq6Z2i57uE5ZCN5YiG6ImyXG4gIEdydXBUaGlja25lc3MgPSAxLCAvL+aMieadhuS7tuWjgeWOmuWIhuiJslxuICBNZ3JvdiA9IDIsIC8v5oyJ5rW355Sf54mp5Y6a5bqm5YiG6ImyXG4gIENvcnJ6ID0gMywgLy/mjInohZDomoDkvZnph4/liIboibJcbiAgQ2FuY2VsID0gNCwgLy8g5Y+W5raI5YiG6Imy5pWI5p6cXG4gIENvbXBvbmVudEdyb3VwID0gNSwgLy8g6Ieq5a6a5LmJ5p6E5Lu25YiG6Imy5pWI5p6cXG4gIC8vIEJvcmVob2xlID0gNiwgLy8g5Zyf5bGC5pWI5p6cXG59XG5cbmV4cG9ydCBjbGFzcyBDb21tb25JbnRlcmZhY2VNYW5hZ2VyIGV4dGVuZHMgTG9uZ2FuLlZpZXdlck1hbmFnZXJCYXNlIHtcbiAgLy8gZWZmZWN0T2JqZWN0cyA9IG5ldyBMb25nYW4uTGlzdDxEZXNpZ25CYXNlT2JqZWN0PigpO1xuICBjdXJyZW50U2VsZWN0V2F2ZUl0ZW1OYW1lOiBzdHJpbmcgPSBudWxsO1xuICBjdXJyZW50Qm9yZWhvbGVPYmplY3RzOiBBcnJheTxCb3JlaG9sZXNPYmplY3Q+ID0gbnVsbDtcbiAgYm9yZWhvbGVMZWdlbmQgPSBudWxsO1xuICBib3JlaG9sZUN1dExpbmVEaXNwbGF5ID0gZmFsc2U7XG5cbiAgc2hvd0VuZ2xpc2hUZXh0ID0gZmFsc2U7XG5cbiAgLy8g5aSN5Yi25aSW6YOo5LqL5Lu2LlxuICBjb3B5ZWRFeHRlcm5hbEV2ZW50ID0gbnVsbDtcblxuICBlbGVtZW50S2V5ID0gXCJjdXRsaW5lXCI7XG4gIGFjdGl2ZUJvcmVob2xlTmFtZSA9IG51bGw7XG5cbiAgY29uc3RydWN0b3Iodmlld2VyOiBWaWV3ZXIpIHtcbiAgICBzdXBlcih2aWV3ZXIpO1xuICB9XG5cbiAgLy8gLyoqXG4gIC8vICAqIOe8lui+kemhueebruS/oeaBryjlkI3np7DjgIHlpIfms6gpXG4gIC8vICAqIEBwYXJhbSBwcm9qZWN0SWQg6aG555uuaWRcbiAgLy8gICogQHBhcmFtIHByb2plY3ROYW1lIOmhueebruWQjeensFxuICAvLyAgKiBAcGFyYW0gcHJvamVjdFJlbWFya3Mg6aG555uu5aSH5rOoXG4gIC8vICAqIEByZXR1cm5zIOaOpeWPo+S/oeaBr1xuICAvLyAgKi9cbiAgLy8gZWRpdFByb2plY3QocHJvamVjdElkOiBzdHJpbmcsIHByb2plY3ROYW1lOiBzdHJpbmcsIHByb2plY3RSZW1hcmtzOiBzdHJpbmcpIHtcbiAgLy8gICBpZiAoIXByb2plY3RJZCB8fCAhcHJvamVjdE5hbWUpIHtcbiAgLy8gICAgIHJldHVybjtcbiAgLy8gICB9XG4gIC8vICAgcmV0dXJuIFByb2plY3RzQXBpLmVkaXRQcm9qZWN0KHByb2plY3RJZCwge1xuICAvLyAgICAgbmFtZTogcHJvamVjdE5hbWUsXG4gIC8vICAgICByZW1hcmtzOiBwcm9qZWN0UmVtYXJrcyxcbiAgLy8gICB9KTtcbiAgLy8gfVxuXG4gIC8vIC8qKlxuICAvLyAgKiDojrflj5bpobnnm67liJfooahcbiAgLy8gICogQHJldHVybnMg6L+U5Zue6aG555uu5YiX6KGo5pWw5o2uXG4gIC8vICAqL1xuICAvLyBnZXRQcm9qZWN0TGlzdCgpIHtcbiAgLy8gICBQcm9qZWN0c0FwaS5nZXRQcm9qZWN0cygpLnRoZW4oKGRhdGEpID0+IHtcbiAgLy8gICAgIHJldHVybiBkYXRhO1xuICAvLyAgIH0pO1xuICAvLyB9XG5cbiAgLy8gLyoqXG4gIC8vICAqIOaWsOW7uumhueebrlxuICAvLyAgKiBAcGFyYW0gcHJvamVjdE5hbWUg6aG555uu5ZCNXG4gIC8vICAqIEBwYXJhbSBwcm9qZWN0UmVtYXJrcyDpobnnm67lpIfms6hcbiAgLy8gICogQHJldHVybnNcbiAgLy8gICovXG4gIC8vIGNyZWF0ZVByb2plY3RDb25maXJtKHByb2plY3ROYW1lOiBzdHJpbmcsIHByb2plY3RSZW1hcmtzOiBzdHJpbmcpIHtcbiAgLy8gICBpZiAoIXByb2plY3ROYW1lKSB7XG4gIC8vICAgICByZXR1cm47XG4gIC8vICAgfVxuICAvLyAgIGNvbnNvbGUubG9nKFwicHJvamVjdFJlbWFya3M6XCIsIHByb2plY3RSZW1hcmtzKTtcbiAgLy8gICByZXR1cm4gUHJvamVjdHNBcGkuY3JlYXRlUHJvamVjdCh7XG4gIC8vICAgICBuYW1lOiBwcm9qZWN0TmFtZSxcbiAgLy8gICAgIHJlbWFya3M6IHByb2plY3RSZW1hcmtzLFxuICAvLyAgIH0pO1xuICAvLyB9XG5cbiAgLyoqXG4gICAqIOiOt+WPluaooeWei1Bsb3RUaXRsZVxuICAgKiBAcmV0dXJucyDmqKHlnotQbG90VGl0bGVcbiAgICovXG4gIHNob3dQbG90VGl0bGUoKTogc3RyaW5nIHtcbiAgICBsZXQgcmVzdWx0ID0gbnVsbDtcblxuICAgIGxldCBwcm9jZXNzID0gdGhpcy52aWV3ZXIucHJvY2VzcyBhcyBQcm9jZXNzO1xuICAgIGxldCB0aXRsZVJPID0gcHJvY2Vzcy5maW5kUmVuZGVyT2JqZWN0QnlUeXBlKFwiTW9kZWxUaXRsZVwiKTtcbiAgICBpZiAodGl0bGVSTykge1xuICAgICAgaWYgKHRpdGxlUk8gaW5zdGFuY2VvZiBNb2RlbFRpdGxlKSB7XG4gICAgICAgIHJlc3VsdCA9IHRpdGxlUk8uY2FyZE9iamVjdC50aXRsZS52YWx1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gXCJBY3RpdmUgU3RydWN0dXJlXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiDnvJbovpHmqKHlnotQbG90VGl0bGUuXG4gICAqIEBwYXJhbSB0aXRsZVxuICAgKi9cbiAgZWRpdFBsb3RUaXRsZSh0aXRsZTogc3RyaW5nKSB7XG4gICAgbGV0IHByb2Nlc3MgPSB0aGlzLnZpZXdlci5wcm9jZXNzIGFzIFByb2Nlc3M7XG5cbiAgICBpZiAoIXRpdGxlIHx8IHRpdGxlLnRyaW1FbmQoKSA9PT0gXCJcIikge1xuICAgICAgbGV0IHRpdGxlUk8gPSBwcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RCeVR5cGUoXCJNb2RlbFRpdGxlXCIpIGFzIE1vZGVsVGl0bGU7XG4gICAgICBpZiAodGl0bGVSTykge1xuICAgICAgICAvLyDliKDpmaTmoIfpopjmiJDlip9cbiAgICAgICAgdGl0bGVSTy50ZW1wRGVsZXRlKHRoaXMudmlld2VyIGFzIFZpZXdlcik7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBpc2xlZ2FsID0gdGhpcy5jaGVjVGl0bGVrTmFtZWxlZ2FsKHRpdGxlKTtcblxuICAgIGlmICghaXNsZWdhbCkge1xuICAgICAgLy8g5qCH6aKY5LiN5ZCI5rOVXG4gICAgICByZXR1cm4gMjtcbiAgICB9XG5cbiAgICBsZXQgdGl0bGVSTyA9IHByb2Nlc3MuZmluZFJlbmRlck9iamVjdEJ5VHlwZShcIk1vZGVsVGl0bGVcIik7XG4gICAgaWYgKHRpdGxlUk8pIHtcbiAgICAgIGlmICh0aXRsZVJPIGluc3RhbmNlb2YgTW9kZWxUaXRsZSkge1xuICAgICAgICB0aXRsZVJPLmNhcmRPYmplY3QudGl0bGUudmFsdWUgPSB0aXRsZTtcbiAgICAgICAgdGl0bGVSTy5jYXJkRGF0YSA9IHRpdGxlUk8uY2FyZE9iamVjdC5nZXRMaW5lKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCB0aXRsZVJPID0gbmV3IE1vZGVsVGl0bGUoKTtcbiAgICAgIHRpdGxlUk8ubmFtZSA9IFwiVElUTEVcIjtcbiAgICAgIGxldCBsaW5lID0gXCIgICAgIFwiICsgdGl0bGU7XG4gICAgICB0aXRsZVJPLmNhcmREYXRhID0gbGluZTtcbiAgICAgIHRpdGxlUk8uY2FyZE9iamVjdCA9IG5ldyBDYXJkVElUTEUobGluZSk7XG4gICAgICBwcm9jZXNzLmFkZFJlbmRlck9iamVjdChcbiAgICAgICAgcHJvY2Vzcy5jYWVSZW5kZXJPYmplY3RUcmVlTWFuYWdlci5zYWNpbnBOb2RlLFxuICAgICAgICB0aXRsZVJPXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiAxO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVjVGl0bGVrTmFtZWxlZ2FsKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGxldCByZWcgPSAvXltBLVowLTldKiQvO1xuICAgIGlmICghcmVnLnRlc3QobmFtZSkgfHwgbmFtZS50cmltRW5kKCkubGVuZ3RoID4gMTI1KSB7XG4gICAgICBjb25zb2xlLmxvZyhcIuepuumXtOeCueWQjeensOS4jeespuWQiOinhOiMg1wiKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICog6YeN572u6KeG5Zu+XG4gICAqL1xuICByZXNldFZpZXcoaXNTZXRWaWV3TW9kZSA9IHRydWUpIHtcbiAgICBsZXQgdmlld2VyID0gdGhpcy52aWV3ZXIucHJvY2Vzcy5hY3RpdmVWaWV3ZXIgYXMgVmlld2VyO1xuICAgIC8vIOWPlua2iOmrmOS6rlxuICAgIHZpZXdlci5zZWxlY3Rpb25NYW5hZ2VyLmNsZWFyQWxsU2VsZWN0aW9uQW5kSGlnaGxpZ2h0KCk7XG4gICAgLy8g5YWz6Zet5YWo6YOo5ZG95LukXG4gICAgKHZpZXdlci5wcm9jZXNzLmNvbW1hbmRNYW5hZ2VyIGFzIENvbW1hbmRNYW5hZ2VyKS5jbG9zZUFsbENvbW1hbmRzKCk7XG4gICAgLy8g5YWz6Zet5ZCE56eN5byA5YWzXG4gICAgdmlld2VyLmNvbW1vbkludGVyZmFjZU1hbmFnZXIuY29sb3JTd2l0Y2goU3dpdGNoQ29sb3JEaXZpZGUuQ2FuY2VsKTtcbiAgICB2aWV3ZXIuY29tbW9uSW50ZXJmYWNlTWFuYWdlci5maW5pdGVFbGVtZW50U3dpdGNoKGZhbHNlKTtcbiAgICAvLyDms6LpnaLlvIDlhbNcbiAgICB2aWV3ZXIuY29tbW9uSW50ZXJmYWNlTWFuYWdlci53YXZlU3dpdGNoKGZhbHNlKTtcbiAgICAvLyDlnJ/lsYLlvIDlhbNcbiAgICB2aWV3ZXIuY29tbW9uSW50ZXJmYWNlTWFuYWdlci5ib3JlaG9sZVN3aXRjaChmYWxzZSk7XG4gICAgLy8g5Y+W5raI5ZCE56eN5qCH562+LlxuICAgIHZpZXdlci52aWV3SW50ZXJmYWNlTWFuYWdlci5zZXRKb2ludE51bWJlclZpc2libGUoZmFsc2UpO1xuICAgIHZpZXdlci52aWV3SW50ZXJmYWNlTWFuYWdlci5zZXRKb2ludFJlc3RyYWludFZpc2libGUoZmFsc2UpO1xuXG4gICAgdmlld2VyLnZpZXdJbnRlcmZhY2VNYW5hZ2VyLnNldE1lbWJlckZpeGl0eVZpc2libGUoZmFsc2UpO1xuICAgIHZpZXdlci52aWV3SW50ZXJmYWNlTWFuYWdlci5zZXRNZW1iZXJMb2NhbEF4aXNWaXNpYmxlKGZhbHNlKTtcbiAgICB2aWV3ZXIudmlld0ludGVyZmFjZU1hbmFnZXIuc2V0TWVtYmVyU2VjdGlvblNpemVWaXNpYmxlKGZhbHNlKTtcbiAgICB2aWV3ZXIudmlld0ludGVyZmFjZU1hbmFnZXIuc2V0R3J1cE51bWJlclZpc2libGUoZmFsc2UpO1xuXG4gICAgLy8g5Y+W5raI5oyB57ut5peL6L2sXG4gICAgdmlld2VyLnZpZXdJbnRlcmZhY2VNYW5hZ2VyLmNvbnRpbnVlc1JvdGF0ZShmYWxzZSk7XG4gICAgdmlld2VyLnZpZXdJbnRlcmZhY2VNYW5hZ2VyLnNldENhbWVyYVNlbGVjdCgpO1xuXG4gICAgLy8gLy8g5oGi5aSN5Zyo5bmz6Z2i5LiK5pi+56S6XG4gICAgLy8gdmlld2VyLmNvbW1vbkludGVyZmFjZU1hbmFnZXIuZWZmZWN0T2JqZWN0cy5mb3JFYWNoKChvYmopID0+IHtcbiAgICAvLyAgIHZpZXdlci5maW5kSW5zdGFuY2VPYmplY3Qob2JqKS52aWV3ZXJWaXNpYmxlID0gdHJ1ZTtcbiAgICAvLyAgIHZpZXdlci5maW5kSW5zdGFuY2VPYmplY3Qob2JqKS52aXNpYmxlID0gdHJ1ZTtcbiAgICAvLyB9KTtcbiAgICAvLyB2aWV3ZXIuY29tbW9uSW50ZXJmYWNlTWFuYWdlci5lZmZlY3RPYmplY3RzLmNsZWFyKCk7XG5cbiAgICBsZXQgcHJvY2VzcyA9IHZpZXdlci5wcm9jZXNzIGFzIFByb2Nlc3M7XG4gICAgcHJvY2Vzcy5jYWVSZW5kZXJPYmplY3RUcmVlTWFuYWdlci5qb2ludE5vZGU/LmNoaWxkT2JqZWN0cy5mb3JFYWNoKFxuICAgICAgKG9iaikgPT4ge1xuICAgICAgICB2aWV3ZXIuZmluZEluc3RhbmNlT2JqZWN0KG9iaikudmlld2VyVmlzaWJsZSA9IHRydWU7XG4gICAgICAgIHZpZXdlci5maW5kSW5zdGFuY2VPYmplY3Qob2JqKS52aXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgKG9iaiBhcyBEZXNpZ25CYXNlT2JqZWN0KS5jbGVhclN2ZygpO1xuICAgICAgfVxuICAgICk7XG4gICAgcHJvY2Vzcy5jYWVSZW5kZXJPYmplY3RUcmVlTWFuYWdlci5tZW1iZXJOb2RlPy5jaGlsZE9iamVjdHMuZm9yRWFjaChcbiAgICAgIChvYmopID0+IHtcbiAgICAgICAgdmlld2VyLmZpbmRJbnN0YW5jZU9iamVjdChvYmopLnZpZXdlclZpc2libGUgPSB0cnVlO1xuICAgICAgICB2aWV3ZXIuZmluZEluc3RhbmNlT2JqZWN0KG9iaikudmlzaWJsZSA9IHRydWU7XG4gICAgICAgIChvYmogYXMgRGVzaWduQmFzZU9iamVjdCkuY2xlYXJTdmcoKTtcbiAgICAgIH1cbiAgICApO1xuICAgIHByb2Nlc3MuY2FlUmVuZGVyT2JqZWN0VHJlZU1hbmFnZXIucGxhdGVOb2RlPy5jaGlsZE9iamVjdHMuZm9yRWFjaChcbiAgICAgIChvYmopID0+IHtcbiAgICAgICAgdmlld2VyLmZpbmRJbnN0YW5jZU9iamVjdChvYmopLnZpZXdlclZpc2libGUgPSB0cnVlO1xuICAgICAgICB2aWV3ZXIuZmluZEluc3RhbmNlT2JqZWN0KG9iaikudmlzaWJsZSA9IHRydWU7XG4gICAgICAgIChvYmogYXMgRGVzaWduQmFzZU9iamVjdCkuY2xlYXJTdmcoKTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgdmlld2VyLnZpZXdJbnRlcmZhY2VNYW5hZ2VyLm1lbWJlckxpbmVWaWV3KGZhbHNlKTtcbiAgICB2aWV3ZXIudmlld0ludGVyZmFjZU1hbmFnZXIucGxhdGVMaW5lVmlldyhmYWxzZSk7XG4gICAgLy8g6ZWc5aS05aSN5L2NLlxuICAgIGlmIChpc1NldFZpZXdNb2RlKSB7XG4gICAgICB2aWV3ZXIuc2V0Vmlld01vZGUoTG9uZ2FuLlZpZXdNb2RlLk9GU0lzbywgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOWIt+aWsOWFqOmDqHZpZXdlci5cbiAgICovXG4gIHJlZHJhdygpIHtcbiAgICBsZXQgcHJvY2VzcyA9IHRoaXMudmlld2VyLnByb2Nlc3M7XG4gICAgcHJvY2Vzcy52aWV3ZXJzLmZvckVhY2goKHZpKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhcInZpXCIpO1xuICAgICAgdmkuZXhlU2NlbmVDYW1lcmFDaGFuZ2VkKFxuICAgICAgICBMb25nYW4uTG9uZ2FuQ29yZS5DYW1lcmFDaGFuZ2VUeXBlLlJvdGF0ZSB8XG4gICAgICAgICAgTG9uZ2FuLkxvbmdhbkNvcmUuQ2FtZXJhQ2hhbmdlVHlwZS5TY2FsZSB8XG4gICAgICAgICAgTG9uZ2FuLkxvbmdhbkNvcmUuQ2FtZXJhQ2hhbmdlVHlwZS5UcmFuc2xhdGVcbiAgICAgICk7XG4gICAgICB2aS51cGRhdGVEaXNwbGF5KCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICog5qOA5rWL5piv5ZCm5pyJ6ZmQ5YWD5qih5Z6LXG4gICAqL1xuICBjaGVja0lzRmluaXRlRWxlbWVudCgpIHtcbiAgICBsZXQgaXNGRSA9IHRydWU7XG5cbiAgICBsZXQgdmlld2VyID0gdGhpcy52aWV3ZXIgYXMgVmlld2VyO1xuICAgIGxldCBncnVwTm9kZSA9IHZpZXdlci5wcm9jZXNzLmNhZVJlbmRlck9iamVjdFRyZWVNYW5hZ2VyLmdydXBOb2RlO1xuICAgIGdydXBOb2RlPy5jaGlsZE9iamVjdHMuZm9yRWFjaCgoZ3J1cCkgPT4ge1xuICAgICAgaWYgKGdydXAgaW5zdGFuY2VvZiBHcnVwT2JqZWN0KSB7XG4gICAgICAgIGlmIChncnVwLmdydXBTZWdtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgaXNGRSA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiBpc0ZFO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zb2xlLmxvZyhcImlzRkU6XCIsIGlzRkUpO1xuICAgIHJldHVybiBpc0ZFO1xuICB9XG5cbiAgLyoqXG4gICAqIOaJk+W8gOeOsOacieaooeWei1xuICAgKiBAcGFyYW0gbW9kZWxJZCDmqKHlnotJZFxuICAgKiBAcGFyYW0gaXNSZXBsYWNlIOaYr+WQpua4hemZpHZpZXdlcuW3suWKoOi9veeahOaVsOaNrlxuICAgKi9cbiAgb3Blbk1vZGVsKG1vZGVsSWQ6IHN0cmluZywgaXNSZXBsYWNlOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbGV0IHZpZXdlciA9IHRoaXMudmlld2VyIGFzIFZpZXdlcjtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB2aWV3ZXIubG9hZE1vZGVsKG1vZGVsSWQsIGlzUmVwbGFjZSkudGhlbigobW9kZWwpID0+IHtcbiAgICAgICAgLy8g5riF56m65Y6G5Y+y5pON5L2cLlxuICAgICAgICB2aWV3ZXIucHJvY2Vzcy5oaXN0b3J5TWFuYWdlci5jbGVhckRlbHRhU3RhdGUoKTtcbiAgICAgICAgdmlld2VyLnNjZW5lU2VnbWVudC5yZW5kZXJpbmdPcHRpb25zLmN1bGxpbmdNYXhpbXVtRXh0ZW50ID0gMDtcblxuICAgICAgICBjb25zb2xlLmxvZyhcIm1vZGVsXCIsIG1vZGVsKTtcbiAgICAgICAgbGV0IHJvID0gdmlld2VyLnJlbmRlck9iamVjdDtcbiAgICAgICAgbGV0IGNhZVRhc2sgPSBuZXcgQ0FFVGFzayhybywgdmlld2VyKTtcbiAgICAgICAgY2FlVGFzay53b3JrUmVuZGVyT2JqZWN0U2VydmljZSA9IHJlbmRlck9iamVjdFNlcnZpY2U7XG4gICAgICAgIHZpZXdlci5wcm9jZXNzLnRhc2tNYW5hZ2VyLmV4ZWN1dGUoY2FlVGFzayk7XG5cbiAgICAgICAgdmlld2VyLnN0cnVjdHVyZVRyZWVNYW5hZ2VyLnVwZGF0ZSgpO1xuICAgICAgICB2aWV3ZXIudXBkYXRlRGlzcGxheSgpO1xuICAgICAgICB2aWV3ZXIuc2V0Vmlld01vZGUoTG9uZ2FuLlZpZXdNb2RlLk9GU0lzbywgdHJ1ZSk7XG5cbiAgICAgICAgLy8g6K+35rGC5ZCO5aSE55CG5L2/55So55qERELmlbDmja4uXG4gICAgICAgIHZpZXdlci5wb3N0SW50ZXJmYWNlTWFuYWdlci5yZXF1ZXN0REJEYXRhKCk7XG5cbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICog5qOA5p+l5qih5Z6L5piv5ZCm6ZyA6KaB5L+d5a2YKOS5n+WwseaYr+WvueavlOaooeWei+W9k+WJjeeKtuaAgeS4juWOn+Wni+eKtuaAgeaYr+WQpuWPkeeUn+S6huaUueWPmCkuXG4gICAqIEByZXR1cm5zIHRydWU66ZyA6KaB5L+d5a2YO2ZhbHNlOuS4jemcgOimgeS/neWtmC5cbiAgICovXG4gIGNoZWNrTmVlZFNhdmUoKSB7XG4gICAgLy9cbiAgICBsZXQgcm9vdFJPID0gKHRoaXMudmlld2VyLnByb2Nlc3MgYXMgYW55KS5jYWVSZW5kZXJPYmplY3RUcmVlTWFuYWdlclxuICAgICAgLnJvb3ROb2RlO1xuICAgIGlmIChyb290Uk8gaW5zdGFuY2VvZiBDQUVMaWdodE9iamVjdCkge1xuICAgICAgbGV0IHJlc3VsdCA9IFBlcnNpc3RlbmNlTWFuYWdlci5zYXZlRGVzaWduKHJvb3RSTyk7XG4gICAgICBpZiAoXG4gICAgICAgIHJlc3VsdC5jcmVhdGVMaXN0Lmxlbmd0aCA+IDAgfHxcbiAgICAgICAgcmVzdWx0LmRlbGV0ZUxpc3QubGVuZ3RoID4gMCB8fFxuICAgICAgICByZXN1bHQuZWRpdExpc3QubGVuZ3RoID4gMFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiDkv53lrZjlvZPliY3pobnnm65cbiAgICovXG4gIHNhdmUoKTogUHJvbWlzZTxhbnk+IHtcbiAgICAvLyBsZXQgZmxhZyA9IHRoaXMuY2hlY2tOZWVkU2F2ZSgpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBsZXQgcm9vdFJPID0gKHRoaXMudmlld2VyLnByb2Nlc3MgYXMgYW55KS5jYWVSZW5kZXJPYmplY3RUcmVlTWFuYWdlclxuICAgICAgICAucm9vdE5vZGU7XG4gICAgICBpZiAocm9vdFJPIGluc3RhbmNlb2YgQ0FFTGlnaHRPYmplY3QpIHtcbiAgICAgICAgcm9vdFJPLnNhdmUodGhpcy52aWV3ZXIpLnRoZW4oKGRhdGEpID0+IHtcbiAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiDlj6blrZjljaHniYfmlbDmja5cbiAgICovXG4gIGV4cG9ydERBVEZpbGUoKSB7XG4gICAgY29uc29sZS5sb2coXCJleHBvcnRcIik7XG4gICAgbGV0IGRhdENhcmREYXRhID0gKHRoaXMudmlld2VyIGFzIFZpZXdlcikuZGF0V3JpdGVyTWFuYWdlci5leHBvcnREQVRGaWxlKCk7XG4gICAgZGF0Q2FyZERhdGEgKz0gXCJFTkRcIjtcblxuICAgIHJldHVybiBkYXRDYXJkRGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiDlr7zlh7rmnYbku7bmlbDmja5cbiAgICogQHBhcmFtIGlzRXhwb3J0QWxsIHRydWU65a+85Ye65YWo6YOo5p2G5Lu25pWw5o2u77ybZmFsc2U65LuF5a+85Ye65pGE5YOP5py65YaF55qE5p2G5Lu25pWw5o2uXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBleHBvcnRNZW1iZXJEYXRhKGlzRXhwb3J0QWxsID0gdHJ1ZSkge1xuICAgIGNvbnNvbGUubG9nKFwiZXhwb3J0IG1lbWJlclwiKTtcbiAgICBsZXQgZGF0Q2FyZERhdGEgPSAodGhpcy52aWV3ZXIgYXMgVmlld2VyKS5kYXRXcml0ZXJNYW5hZ2VyLmV4cG9ydE1lbWJlckRhdGEoXG4gICAgICBpc0V4cG9ydEFsbFxuICAgICk7XG4gICAgZGF0Q2FyZERhdGEgKz0gXCJFTkRcIjtcblxuICAgIHJldHVybiBkYXRDYXJkRGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiDlr7zlh7rmoanln7rmlbDmja5cbiAgICogQHBhcmFtIGlzRXhwb3J0QWxsICB0cnVlOuWvvOWHuuWFqOmDqOahqeWfuuaVsOaNru+8m2ZhbHNlOuS7heWvvOWHuuaRhOWDj+acuuWGheeahOahqeWfuuaVsOaNrlxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZXhwb3J0UGlsZURhdGEoaXNFeHBvcnRBbGwgPSB0cnVlKSB7XG4gICAgY29uc29sZS5sb2coXCJleHBvcnQgcGlsZVwiKTtcbiAgICBsZXQgZGF0Q2FyZERhdGEgPSAodGhpcy52aWV3ZXIgYXMgVmlld2VyKS5kYXRXcml0ZXJNYW5hZ2VyLmV4cG9ydFBpbGVEYXRhKFxuICAgICAgaXNFeHBvcnRBbGxcbiAgICApO1xuICAgIGlmIChkYXRDYXJkRGF0YSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGRhdENhcmREYXRhICs9IFwiRU5EXCI7XG5cbiAgICByZXR1cm4gZGF0Q2FyZERhdGE7XG4gIH1cblxuICAvLyBleHBvcnRTZWN0aW9uRGF0YShkYXRDYXJkRGF0YTogc3RyaW5nKSB7XG4gIC8vICAgbGV0IHR1YnMgPSB0aGlzLnZpZXdlci5wcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RzQnlUeXBlKFwiVHViU2VjdGlvbk9iamVjdFwiKTtcbiAgLy8gICBmb3IgKGxldCBpID0gMDsgaSA8IHR1YnMubGVuZ3RoOyBpKyspIHtcbiAgLy8gICAgIGxldCBvYmogPSB0dWJzW2ldIGFzIFR1YlNlY3Rpb25PYmplY3Q7XG4gIC8vICAgICBpZiAoXG4gIC8vICAgICAgIG9iai5idXNpbmVzc1N0YXRlID09PSBCdXNpbmVzc1N0YXRlLkRlbGV0aW5nIHx8XG4gIC8vICAgICAgIG9iai5idXNpbmVzc1N0YXRlID09PSBCdXNpbmVzc1N0YXRlLkRlYWRcbiAgLy8gICAgICkge1xuICAvLyAgICAgICBjb250aW51ZTtcbiAgLy8gICAgIH1cbiAgLy8gICAgIGxldCBsaW5lID0gb2JqLnNlcmlhbGl6ZVRvQ2FyZCgpO1xuICAvLyAgICAgZGF0Q2FyZERhdGEgKz0gbGluZSArPSBcIlxcblwiO1xuICAvLyAgIH1cblxuICAvLyAgIGxldCB3ZnMgPSB0aGlzLnZpZXdlci5wcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RzQnlUeXBlKFwiV0ZTZWN0aW9uT2JqZWN0XCIpO1xuICAvLyAgIGZvciAobGV0IGkgPSAwOyBpIDwgd2ZzLmxlbmd0aDsgaSsrKSB7XG4gIC8vICAgICBsZXQgb2JqID0gd2ZzW2ldIGFzIFdGU2VjdGlvbk9iamVjdDtcbiAgLy8gICAgIGlmIChcbiAgLy8gICAgICAgb2JqLmJ1c2luZXNzU3RhdGUgPT09IEJ1c2luZXNzU3RhdGUuRGVsZXRpbmcgfHxcbiAgLy8gICAgICAgb2JqLmJ1c2luZXNzU3RhdGUgPT09IEJ1c2luZXNzU3RhdGUuRGVhZFxuICAvLyAgICAgKSB7XG4gIC8vICAgICAgIGNvbnRpbnVlO1xuICAvLyAgICAgfVxuICAvLyAgICAgbGV0IGxpbmUgPSBvYmouc2VyaWFsaXplVG9DYXJkKCk7XG4gIC8vICAgICBkYXRDYXJkRGF0YSArPSBsaW5lICs9IFwiXFxuXCI7XG4gIC8vICAgfVxuXG4gIC8vICAgbGV0IGJveHMgPSB0aGlzLnZpZXdlci5wcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RzQnlUeXBlKFwiQm94U2VjdGlvbk9iamVjdFwiKTtcbiAgLy8gICBmb3IgKGxldCBpID0gMDsgaSA8IGJveHMubGVuZ3RoOyBpKyspIHtcbiAgLy8gICAgIGxldCBvYmogPSBib3hzW2ldIGFzIEJveFNlY3Rpb25PYmplY3Q7XG4gIC8vICAgICBpZiAoXG4gIC8vICAgICAgIG9iai5idXNpbmVzc1N0YXRlID09PSBCdXNpbmVzc1N0YXRlLkRlbGV0aW5nIHx8XG4gIC8vICAgICAgIG9iai5idXNpbmVzc1N0YXRlID09PSBCdXNpbmVzc1N0YXRlLkRlYWRcbiAgLy8gICAgICkge1xuICAvLyAgICAgICBjb250aW51ZTtcbiAgLy8gICAgIH1cbiAgLy8gICAgIGxldCBsaW5lID0gb2JqLnNlcmlhbGl6ZVRvQ2FyZCgpO1xuICAvLyAgICAgZGF0Q2FyZERhdGEgKz0gbGluZSArPSBcIlxcblwiO1xuICAvLyAgIH1cblxuICAvLyAgIGxldCBwcmlzID0gdGhpcy52aWV3ZXIucHJvY2Vzcy5maW5kUmVuZGVyT2JqZWN0c0J5VHlwZShcIlByaVNlY3Rpb25PYmplY3RcIik7XG4gIC8vICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcmlzLmxlbmd0aDsgaSsrKSB7XG4gIC8vICAgICBsZXQgb2JqID0gcHJpc1tpXSBhcyBQcmlTZWN0aW9uT2JqZWN0O1xuICAvLyAgICAgaWYgKFxuICAvLyAgICAgICBvYmouYnVzaW5lc3NTdGF0ZSA9PT0gQnVzaW5lc3NTdGF0ZS5EZWxldGluZyB8fFxuICAvLyAgICAgICBvYmouYnVzaW5lc3NTdGF0ZSA9PT0gQnVzaW5lc3NTdGF0ZS5EZWFkXG4gIC8vICAgICApIHtcbiAgLy8gICAgICAgY29udGludWU7XG4gIC8vICAgICB9XG4gIC8vICAgICBsZXQgbGluZSA9IG9iai5zZXJpYWxpemVUb0NhcmQoKTtcbiAgLy8gICAgIGRhdENhcmREYXRhICs9IGxpbmUgKz0gXCJcXG5cIjtcbiAgLy8gICB9XG5cbiAgLy8gICBsZXQgY29ucyA9IHRoaXMudmlld2VyLnByb2Nlc3MuZmluZFJlbmRlck9iamVjdHNCeVR5cGUoXCJDb25TZWN0aW9uT2JqZWN0XCIpO1xuICAvLyAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29ucy5sZW5ndGg7IGkrKykge1xuICAvLyAgICAgbGV0IG9iaiA9IGNvbnNbaV0gYXMgQ29uU2VjdGlvbk9iamVjdDtcbiAgLy8gICAgIGlmIChcbiAgLy8gICAgICAgb2JqLmJ1c2luZXNzU3RhdGUgPT09IEJ1c2luZXNzU3RhdGUuRGVsZXRpbmcgfHxcbiAgLy8gICAgICAgb2JqLmJ1c2luZXNzU3RhdGUgPT09IEJ1c2luZXNzU3RhdGUuRGVhZFxuICAvLyAgICAgKSB7XG4gIC8vICAgICAgIGNvbnRpbnVlO1xuICAvLyAgICAgfVxuICAvLyAgICAgbGV0IGxpbmUgPSBvYmouc2VyaWFsaXplVG9DYXJkKCk7XG4gIC8vICAgICBkYXRDYXJkRGF0YSArPSBsaW5lICs9IFwiXFxuXCI7XG4gIC8vICAgfVxuXG4gIC8vICAgbGV0IGNobHMgPSB0aGlzLnZpZXdlci5wcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RzQnlUeXBlKFwiQ2hsU2VjdGlvbk9iamVjdFwiKTtcbiAgLy8gICBmb3IgKGxldCBpID0gMDsgaSA8IGNobHMubGVuZ3RoOyBpKyspIHtcbiAgLy8gICAgIGxldCBvYmogPSBjaGxzW2ldIGFzIENobFNlY3Rpb25PYmplY3Q7XG4gIC8vICAgICBpZiAoXG4gIC8vICAgICAgIG9iai5idXNpbmVzc1N0YXRlID09PSBCdXNpbmVzc1N0YXRlLkRlbGV0aW5nIHx8XG4gIC8vICAgICAgIG9iai5idXNpbmVzc1N0YXRlID09PSBCdXNpbmVzc1N0YXRlLkRlYWRcbiAgLy8gICAgICkge1xuICAvLyAgICAgICBjb250aW51ZTtcbiAgLy8gICAgIH1cbiAgLy8gICAgIGxldCBsaW5lID0gb2JqLnNlcmlhbGl6ZVRvQ2FyZCgpO1xuICAvLyAgICAgZGF0Q2FyZERhdGEgKz0gbGluZSArPSBcIlxcblwiO1xuICAvLyAgIH1cblxuICAvLyAgIGxldCB0ZWVzID0gdGhpcy52aWV3ZXIucHJvY2Vzcy5maW5kUmVuZGVyT2JqZWN0c0J5VHlwZShcIlRlZVNlY3Rpb25PYmplY3RcIik7XG4gIC8vICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZWVzLmxlbmd0aDsgaSsrKSB7XG4gIC8vICAgICBsZXQgb2JqID0gdGVlc1tpXSBhcyBUZWVTZWN0aW9uT2JqZWN0O1xuICAvLyAgICAgaWYgKFxuICAvLyAgICAgICBvYmouYnVzaW5lc3NTdGF0ZSA9PT0gQnVzaW5lc3NTdGF0ZS5EZWxldGluZyB8fFxuICAvLyAgICAgICBvYmouYnVzaW5lc3NTdGF0ZSA9PT0gQnVzaW5lc3NTdGF0ZS5EZWFkXG4gIC8vICAgICApIHtcbiAgLy8gICAgICAgY29udGludWU7XG4gIC8vICAgICB9XG4gIC8vICAgICBsZXQgbGluZSA9IG9iai5zZXJpYWxpemVUb0NhcmQoKTtcbiAgLy8gICAgIGRhdENhcmREYXRhICs9IGxpbmUgKz0gXCJcXG5cIjtcbiAgLy8gICB9XG5cbiAgLy8gICBsZXQgYW5ncyA9IHRoaXMudmlld2VyLnByb2Nlc3MuZmluZFJlbmRlck9iamVjdHNCeVR5cGUoXCJBbmdTZWN0aW9uT2JqZWN0XCIpO1xuICAvLyAgIGZvciAobGV0IGkgPSAwOyBpIDwgYW5ncy5sZW5ndGg7IGkrKykge1xuICAvLyAgICAgbGV0IG9iaiA9IGFuZ3NbaV0gYXMgQW5nU2VjdGlvbk9iamVjdDtcbiAgLy8gICAgIGlmIChcbiAgLy8gICAgICAgb2JqLmJ1c2luZXNzU3RhdGUgPT09IEJ1c2luZXNzU3RhdGUuRGVsZXRpbmcgfHxcbiAgLy8gICAgICAgb2JqLmJ1c2luZXNzU3RhdGUgPT09IEJ1c2luZXNzU3RhdGUuRGVhZFxuICAvLyAgICAgKSB7XG4gIC8vICAgICAgIGNvbnRpbnVlO1xuICAvLyAgICAgfVxuICAvLyAgICAgbGV0IGxpbmUgPSBvYmouc2VyaWFsaXplVG9DYXJkKCk7XG4gIC8vICAgICBkYXRDYXJkRGF0YSArPSBsaW5lICs9IFwiXFxuXCI7XG4gIC8vICAgfVxuXG4gIC8vICAgbGV0IGR0YnMgPSB0aGlzLnZpZXdlci5wcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RzQnlUeXBlKFwiRHRiU2VjdGlvbk9iamVjdFwiKTtcbiAgLy8gICBmb3IgKGxldCBpID0gMDsgaSA8IGR0YnMubGVuZ3RoOyBpKyspIHtcbiAgLy8gICAgIGxldCBvYmogPSBkdGJzW2ldIGFzIER0YlNlY3Rpb25PYmplY3Q7XG4gIC8vICAgICBpZiAoXG4gIC8vICAgICAgIG9iai5idXNpbmVzc1N0YXRlID09PSBCdXNpbmVzc1N0YXRlLkRlbGV0aW5nIHx8XG4gIC8vICAgICAgIG9iai5idXNpbmVzc1N0YXRlID09PSBCdXNpbmVzc1N0YXRlLkRlYWRcbiAgLy8gICAgICkge1xuICAvLyAgICAgICBjb250aW51ZTtcbiAgLy8gICAgIH1cbiAgLy8gICAgIGxldCBsaW5lID0gb2JqLnNlcmlhbGl6ZVRvQ2FyZCgpO1xuICAvLyAgICAgZGF0Q2FyZERhdGEgKz0gbGluZSArPSBcIlxcblwiO1xuICAvLyAgIH1cblxuICAvLyAgIGxldCBydGJzID0gdGhpcy52aWV3ZXIucHJvY2Vzcy5maW5kUmVuZGVyT2JqZWN0c0J5VHlwZShcIlJ0YlNlY3Rpb25PYmplY3RcIik7XG4gIC8vICAgZm9yIChsZXQgaSA9IDA7IGkgPCBydGJzLmxlbmd0aDsgaSsrKSB7XG4gIC8vICAgICBsZXQgb2JqID0gcnRic1tpXSBhcyBSdGJTZWN0aW9uT2JqZWN0O1xuICAvLyAgICAgaWYgKFxuICAvLyAgICAgICBvYmouYnVzaW5lc3NTdGF0ZSA9PT0gQnVzaW5lc3NTdGF0ZS5EZWxldGluZyB8fFxuICAvLyAgICAgICBvYmouYnVzaW5lc3NTdGF0ZSA9PT0gQnVzaW5lc3NTdGF0ZS5EZWFkXG4gIC8vICAgICApIHtcbiAgLy8gICAgICAgY29udGludWU7XG4gIC8vICAgICB9XG4gIC8vICAgICBsZXQgbGluZSA9IG9iai5zZXJpYWxpemVUb0NhcmQoKTtcbiAgLy8gICAgIGRhdENhcmREYXRhICs9IGxpbmUgKz0gXCJcXG5cIjtcbiAgLy8gICB9XG5cbiAgLy8gbGV0IGJsYnMgPSB0aGlzLnZpZXdlci5wcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RzQnlUeXBlKFwiQmJsU2VjdGlvbk9iamVjdFwiKTtcbiAgLy8gZm9yIChsZXQgaSA9IDA7IGkgPCBibGJzLmxlbmd0aDsgaSsrKSB7XG4gIC8vICAgbGV0IG9iaiA9IGJsYnNbaV0gYXMgQmxiU2VjdGlvbk9iamVjdDtcbiAgLy8gICBpZiAoXG4gIC8vICAgICBvYmouYnVzaW5lc3NTdGF0ZSA9PT0gQnVzaW5lc3NTdGF0ZS5EZWxldGluZyB8fFxuICAvLyAgICAgb2JqLmJ1c2luZXNzU3RhdGUgPT09IEJ1c2luZXNzU3RhdGUuRGVhZFxuICAvLyAgICkge1xuICAvLyAgICAgY29udGludWU7XG4gIC8vICAgfVxuICAvLyAgIGxldCBsaW5lID0gb2JqLnNlcmlhbGl6ZVRvQ2FyZCgpO1xuICAvLyAgIGRhdENhcmREYXRhICs9IGxpbmUgKz0gXCJcXG5cIjtcbiAgLy8gfVxuXG4gIC8vICAgcmV0dXJuIGRhdENhcmREYXRhO1xuICAvLyB9XG5cbiAgLyoqXG4gICAqIOWvvOWHuua1t+WGteWNoeeJh+aVsOaNri5cbiAgICovXG4gIGV4cG9ydERBVEZpbGVfU2VhaW5wKCkge1xuICAgIC8vIGNhcmQgZGF0YSArIHJvIC0+IGNhcmRcbiAgICBjb25zb2xlLmxvZyhcImV4cG9ydF9zZWFpbnBcIik7XG4gICAgbGV0IHZpZXdlciA9IHRoaXMudmlld2VyIGFzIFZpZXdlcjtcbiAgICBsZXQgZGF0Q2FyZERhdGEgPSB2aWV3ZXIuZGF0V3JpdGVyTWFuYWdlci5leHBvcnREQVRGaWxlX1NlYWlucCgpO1xuICAgIGRhdENhcmREYXRhICs9IFwiRU5EXCI7XG5cbiAgICByZXR1cm4gZGF0Q2FyZERhdGE7XG4gIH1cblxuICAvKipcbiAgICog5a+85Ye65qih5Z6L5Y2h54mH5pWw5o2uLlxuICAgKi9cbiAgZXhwb3J0REFURmlsZV9TYWNpbnAoKSB7XG4gICAgLy9cbiAgICBjb25zb2xlLmxvZyhcImV4cG9ydF9zYWNpbnBcIik7XG4gICAgbGV0IHZpZXdlciA9IHRoaXMudmlld2VyIGFzIFZpZXdlcjtcbiAgICBsZXQgZGF0Q2FyZERhdGEgPSB2aWV3ZXIuZGF0V3JpdGVyTWFuYWdlci5leHBvcnREQVRGaWxlX1NhY2lucCgpO1xuICAgIGRhdENhcmREYXRhICs9IFwiRU5EXCI7XG5cbiAgICByZXR1cm4gZGF0Q2FyZERhdGE7XG4gIH1cblxuICAvLyDlr7zlhaVEQVRcbiAgaW1wb3J0REFURGF0YShjb250ZW50OiBzdHJpbmcsIG92ZXJXcml0ZTogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgY29uc29sZS5sb2coXCJpbXBvcnREQVREYXRhXCIpO1xuICAgICh0aGlzLnZpZXdlciBhcyBWaWV3ZXIpLmRhdFJlYWRlck1hbmFnZXIuaW1wb3J0REFURGF0YShjb250ZW50LCBvdmVyV3JpdGUpO1xuXG4gICAgdGhpcy52aWV3ZXIudXBkYXRlRGlzcGxheSgpO1xuICB9XG5cbiAgLy8g5a+85YWl5rW35Ya15paH5Lu2XG4gIGltcG9ydFNFQURhdGEoY29udGVudDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zb2xlLmxvZyhcImltcG9ydFNFQURhdGFcIik7XG4gICAgbGV0IHJvID0gdGhpcy52aWV3ZXIucHJvY2Vzcy5maW5kUmVuZGVyT2JqZWN0QnlUeXBlKFwiU2Vhc3RhdGVMZG9wdFwiKTtcbiAgICBpZiAocm8pIHtcbiAgICAgIGxldCBtZXNzYWdlID0gXCLlt7Lnu4/lrZjlnKjmtbflhrXmlbDmja5cIjtcbiAgICAgIE1lc3NhZ2UuZXJyb3IobWVzc2FnZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgICh0aGlzLnZpZXdlciBhcyBWaWV3ZXIpLmRhdFJlYWRlck1hbmFnZXIuaW1wb3J0U2VhaW5wRGF0YShjb250ZW50KTtcblxuICAgIHRoaXMudmlld2VyLnVwZGF0ZURpc3BsYXkoKTtcbiAgICAodGhpcy52aWV3ZXIgYXMgVmlld2VyKS5zdHJ1Y3R1cmVUcmVlTWFuYWdlci51cGRhdGUoKTtcbiAgICByZXR1cm4gXCJpbXBvcnRTRUFEYXRhIHN1Y2Nlc3NmdWxcIjtcbiAgfVxuXG4gIC8qKlxuICAgKiDlr7zlhaXlkI7lpITnkIZzZWFvY2nmlofku7bvvIzku4Xop6PmnpDojbfovb3mlbDmja5cbiAgICogQHBhcmFtIGNvbnRlbnRcbiAgICovXG4gIGltcG9ydFNlYW9jaURhdGEoY29udGVudDogc3RyaW5nKSB7XG4gICAgY29uc29sZS5sb2coXCJpbXBvcnRTZWFvY2lEYXRhXCIpO1xuICAgICh0aGlzLnZpZXdlciBhcyBWaWV3ZXIpLmRhdFJlYWRlck1hbmFnZXIuaW1wb3J0U2Vhb2NpRGF0YShjb250ZW50KTtcblxuICAgIHRoaXMudmlld2VyLnVwZGF0ZURpc3BsYXkoKTtcbiAgICAodGhpcy52aWV3ZXIgYXMgVmlld2VyKS5zdHJ1Y3R1cmVUcmVlTWFuYWdlci51cGRhdGUoKTtcbiAgICByZXR1cm4gXCJpbXBvcnRTZWFvY2lEYXRhIHN1Y2Nlc3NmdWxcIjtcbiAgfVxuXG4gIC8vIOWvvOWFpeahqeWcn+aVsOaNrlxuICBpbXBvcnRQU0lEYXRhKGNvbnRlbnQ6IHN0cmluZykge1xuICAgIGNvbnNvbGUubG9nKFwiaW1wb3J0UFNJRGF0YVwiKTtcbiAgICAodGhpcy52aWV3ZXIgYXMgVmlld2VyKS5kYXRSZWFkZXJNYW5hZ2VyLmltcG9ydFBTSURhdGEoY29udGVudCk7XG5cbiAgICB0aGlzLnZpZXdlci51cGRhdGVEaXNwbGF5KCk7XG4gICAgKHRoaXMudmlld2VyIGFzIFZpZXdlcikuc3RydWN0dXJlVHJlZU1hbmFnZXIudXBkYXRlKCk7XG4gIH1cblxuICAvKipcbiAgICog5Y6G5Y+y5Zue6YCAXG4gICAqL1xuICBoaXN0b3J5QmFjaygpIHtcbiAgICBpZiAoUHJvY2Vzcy5hY3RpdmVQcm9jZXNzLmhpc3RvcnlNYW5hZ2VyLmNhblJvbGxCYWNrKSB7XG4gICAgICBQcm9jZXNzLmFjdGl2ZVByb2Nlc3MuaGlzdG9yeU1hbmFnZXIucm9sbEJhY2soKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog5Y6G5Y+y6YeN5YGaXG4gICAqL1xuICBoaXN0b3J5Rm9yd2FyZCgpIHtcbiAgICBpZiAoUHJvY2Vzcy5hY3RpdmVQcm9jZXNzLmhpc3RvcnlNYW5hZ2VyLmNhblJvbGxGb3J3YXJkKSB7XG4gICAgICBQcm9jZXNzLmFjdGl2ZVByb2Nlc3MuaGlzdG9yeU1hbmFnZXIucm9sbEZvcndhcmQoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog5oyJ5b2T5YmN5r+A5rS755qE6YCJ5oup6L+H5ruk5Zmo57G75Z6L77yM6YCJ5Lit5bm257qi6Imy6auY5Lqu5b2T5YmN6KeG5Y+j5Lit5pi+56S655qE5omA5pyJ5a+55bqU5Yeg5L2V5YWD57SgXG4gICAqL1xuICBzZWxlY3RBbGwoKSB7XG4gICAgLy9cbiAgICBsZXQgdmlld2VyID0gdGhpcy52aWV3ZXIgYXMgVmlld2VyO1xuICAgIHZpZXdlci5zZWxlY3Rpb25NYW5hZ2VyLmNsZWFyQWxsU2VsZWN0aW9uQW5kSGlnaGxpZ2h0KCk7XG4gICAgc3dpdGNoICh2aWV3ZXIuc2VsZWN0aW9uSW50ZXJmYWNlTWFuYWdlci5zZWxlY3RvckZpbHRlcikge1xuICAgICAgLy9cbiAgICAgIGNhc2UgU2VsZWN0b3JGaWxpdGVyLkpvaW50OlxuICAgICAgICB0aGlzLnNlbGVjdEFsbEpvaW50cygpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgU2VsZWN0b3JGaWxpdGVyLk1lbWJlcjpcbiAgICAgICAgdGhpcy5zZWxlY3RBbGxNZW1iZXJzKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBTZWxlY3RvckZpbGl0ZXIuUGxhdGU6XG4gICAgICAgIHRoaXMuc2VsZWN0QWxsUGxhdGVzKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBTZWxlY3RvckZpbGl0ZXIuQWxsOlxuICAgICAgICB0aGlzLnNlbGVjdEFsbEpvaW50cygpO1xuICAgICAgICB0aGlzLnNlbGVjdEFsbE1lbWJlcnMoKTtcbiAgICAgICAgdGhpcy5zZWxlY3RBbGxQbGF0ZXMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgdGhpcy52aWV3ZXIudXBkYXRlRGlzcGxheSgpO1xuICB9XG5cbiAgLy8g5omT5byA57yW6L6R5ZmoXG5cbiAgLyoqXG4gICAqIOWIm+W7uuinhueCuSjlr7nlvZPliY3op4blj6PmiKrlm74pXG4gICAqIEBwYXJhbSB2aWV3UG9pbnROYW1lIOinhueCueWQjVxuICAgKi9cbiAgY3JlYXRlVmlld1BvaW50KHZpZXdQb2ludE5hbWU6IHN0cmluZykge1xuICAgIC8vIOWIm+W7uuinhueCuVxuICAgICh0aGlzLnZpZXdlciBhcyBWaWV3ZXIpLmNhZVBhbmVsTWFuYWdlci52aWV3UG9pbnRQYW5lbENhZVxuICAgICAgLmFkZFZpZXdQb2ludCh2aWV3UG9pbnROYW1lKVxuICAgICAgLnRoZW4oKCkgPT4ge30pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3RBbGxKb2ludHMoKSB7XG4gICAgbGV0IGpvaW50cyA9IHRoaXMudmlld2VyLnByb2Nlc3MuZmluZFJlbmRlck9iamVjdHNCeVR5cGUoXCJKb2ludE9iamVjdFwiKTtcbiAgICBsZXQga2V5cyA9IG5ldyBBcnJheTxudW1iZXI+KCk7XG4gICAgbGV0IHBhdGhzID0gbmV3IEFycmF5PHN0cmluZz4oKTtcblxuICAgIGpvaW50cy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBrZXlzLnB1c2goaXRlbS5zZWdtZW50LmtleSk7XG4gICAgICBwYXRocy5wdXNoKGl0ZW0uc2VnbWVudC5wYXRoKTtcbiAgICB9KTtcbiAgICB0aGlzLnZpZXdlci5zZWxlY3Rpb25NYW5hZ2VyLnNlbGVjdEFuZEhpZ2hsaWdodEtleXMoa2V5cywgcGF0aHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3RBbGxNZW1iZXJzKCkge1xuICAgIC8vXG4gICAgbGV0IG1lbWJlcnMgPSB0aGlzLnZpZXdlci5wcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RzQnlUeXBlKFwiTWVtYmVyT2JqZWN0XCIpO1xuICAgIGxldCBrZXlzID0gbmV3IEFycmF5PG51bWJlcj4oKTtcbiAgICBsZXQgcGF0aHMgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuXG4gICAgbWVtYmVycy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBrZXlzLnB1c2goaXRlbS5zZWdtZW50LmtleSk7XG4gICAgICBwYXRocy5wdXNoKGl0ZW0uc2VnbWVudC5wYXRoKTtcbiAgICB9KTtcbiAgICB0aGlzLnZpZXdlci5zZWxlY3Rpb25NYW5hZ2VyLnNlbGVjdEFuZEhpZ2hsaWdodEtleXMoa2V5cywgcGF0aHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZWxlY3RBbGxQbGF0ZXMoKSB7XG4gICAgbGV0IHBsYXRlcyA9IHRoaXMudmlld2VyLnByb2Nlc3MuZmluZFJlbmRlck9iamVjdHNCeVR5cGUoXCJQbGF0ZU9iamVjdFwiKTtcbiAgICBsZXQga2V5cyA9IG5ldyBBcnJheTxudW1iZXI+KCk7XG4gICAgbGV0IHBhdGhzID0gbmV3IEFycmF5PHN0cmluZz4oKTtcblxuICAgIHBsYXRlcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBrZXlzLnB1c2goaXRlbS5zZWdtZW50LmtleSk7XG4gICAgICBwYXRocy5wdXNoKGl0ZW0uc2VnbWVudC5wYXRoKTtcbiAgICB9KTtcbiAgICB0aGlzLnZpZXdlci5zZWxlY3Rpb25NYW5hZ2VyLnNlbGVjdEFuZEhpZ2hsaWdodEtleXMoa2V5cywgcGF0aHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIOafpeaJvuW3suaYvuekuueahOepuumXtOeCuVxuICAgKiBAcGFyYW0gam9pbnROYW1lIOepuumXtOeCueWQjeWtl1xuICAgKi9cbiAgZmluZEpvaW50KGpvaW50TmFtZTogc3RyaW5nKTogSm9pbnRPYmplY3Qge1xuICAgIGxldCBwcm9jZXNzID0gdGhpcy52aWV3ZXIucHJvY2VzcyBhcyBQcm9jZXNzO1xuICAgIGxldCBybyA9IHByb2Nlc3MuZmluZENhZU9iamVjdEJ5TmFtZUluQ2hpbGRPYmplY3QoXG4gICAgICBwcm9jZXNzLmNhZVJlbmRlck9iamVjdFRyZWVNYW5hZ2VyLmpvaW50Tm9kZSBhcyBEZXNpZ25CYXNlT2JqZWN0LFxuICAgICAgam9pbnROYW1lXG4gICAgKTtcbiAgICBpZiAocm8gJiYgcm8gaW5zdGFuY2VvZiBKb2ludE9iamVjdCkge1xuICAgICAgdGhpcy52aWV3ZXIuc2VsZWN0aW9uTWFuYWdlci5jbGVhckFsbFNlbGVjdGlvbkFuZEhpZ2hsaWdodCgpO1xuICAgICAgdGhpcy52aWV3ZXIubG9jYXRlV29ybGQocm8uc2VnbWVudCk7XG4gICAgICB0aGlzLnZpZXdlci5zZWxlY3Rpb25NYW5hZ2VyLnNlbGVjdEFuZEhpZ2hsaWdodEtleXMoXG4gICAgICAgIFtyby5zZWdtZW50LmtleV0sXG4gICAgICAgIFtyby5zZWdtZW50LnBhdGhdXG4gICAgICApO1xuICAgICAgdGhpcy52aWV3ZXIudXBkYXRlRGlzcGxheSgpO1xuXG4gICAgICByZXR1cm4gcm87XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDph43lkb3lkI3nqbrpl7TngrlcbiAgICogQHBhcmFtIG9yaWdpbkpvaW50TmFtZSDljp/lp4vngrnlkI3np7BcbiAgICogQHBhcmFtIG5ld0pvaW50TmFtZSDmlrDnmoTngrnlkI3np7BcbiAgICogQHJldHVybnMg6L+U5Zue6YeN5ZG95ZCN55qE57uT5p6c5o+Q56S6XG4gICAqL1xuICByZW5hbWVKb2ludChcbiAgICBvcmlnaW5Kb2ludE5hbWU6IHN0cmluZyxcbiAgICBuZXdKb2ludE5hbWU6IHN0cmluZyxcbiAgICB1c2VOZXh0QXZhbGlhYmxlOiBib29sZWFuXG4gICkge1xuICAgIC8vXG4gICAgbGV0IHByb2Nlc3MgPSB0aGlzLnZpZXdlci5wcm9jZXNzIGFzIFByb2Nlc3M7XG5cbiAgICBsZXQgcmVzdWx0ID0ge307XG4gICAgaWYgKCFKb2ludE9iamVjdC5jaGVja05hbWVsZWdhbChuZXdKb2ludE5hbWUpKSB7XG4gICAgICByZXN1bHQgPSAzO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBsZXQgam9pbnROb2RlID0gcHJvY2Vzcy5jYWVSZW5kZXJPYmplY3RUcmVlTWFuYWdlci5qb2ludE5vZGU7XG4gICAgbGV0IHJvID0gcHJvY2Vzcy5maW5kQ2FlT2JqZWN0QnlOYW1lSW5DaGlsZE9iamVjdChcbiAgICAgIGpvaW50Tm9kZSxcbiAgICAgIG9yaWdpbkpvaW50TmFtZVxuICAgICk7XG4gICAgaWYgKHJvICYmIHJvIGluc3RhbmNlb2YgSm9pbnRPYmplY3QpIHtcbiAgICAgIGlmICghdXNlTmV4dEF2YWxpYWJsZSkge1xuICAgICAgICBsZXQgbmV3TmFtZVJPID0gcHJvY2Vzcy5maW5kQ2FlT2JqZWN0QnlOYW1lSW5DaGlsZE9iamVjdChcbiAgICAgICAgICBqb2ludE5vZGUsXG4gICAgICAgICAgbmV3Sm9pbnROYW1lXG4gICAgICAgICk7XG4gICAgICAgIGlmIChuZXdOYW1lUk8pIHtcbiAgICAgICAgICByZXN1bHQgPSAzICsgXCIsXCIgKyBuZXdKb2ludE5hbWU7XG4gICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3Sm9pbnROYW1lID0gcHJvY2Vzcy5jYWVSZW5kZXJPYmplY3RUcmVlTWFuYWdlci5uYW1lQXNjZW5kaW5nT3JkZXIoXG4gICAgICAgICAgbmV3Sm9pbnROYW1lLFxuICAgICAgICAgIDEsXG4gICAgICAgICAgcHJvY2Vzcy5uYW1lTWFwSm9pbnRcbiAgICAgICAgKVswXTtcbiAgICAgIH1cblxuICAgICAgcm8ubmFtZSA9IG5ld0pvaW50TmFtZTtcbiAgICAgIC8vIHJvLmlzRHJhd05hbWUgPSB0cnVlO1xuICAgICAgcm8uc2V0TmVlZFVwZGF0ZSgpO1xuICAgICAgLy8gc3VjY2Vzc2Z1bFxuICAgICAgcmVzdWx0ID0gMiArIFwiLFwiICsgb3JpZ2luSm9pbnROYW1lICsgXCIsXCIgKyBuZXdKb2ludE5hbWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IDEgKyBcIixcIiArIG9yaWdpbkpvaW50TmFtZTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIOafpeaJvuW3suaYvuekuueahOadhuS7tlxuICAgKiBAcGFyYW0gbWVtYmVyTmFtZSDmnYbku7blkI3lrZdcbiAgICovXG4gIGZpbmRNZW1iZXIobWVtYmVyTmFtZTogc3RyaW5nKTogTWVtYmVyT2JqZWN0IHtcbiAgICBsZXQgcHJvY2VzcyA9IHRoaXMudmlld2VyLnByb2Nlc3MgYXMgUHJvY2VzcztcblxuICAgIGxldCBybyA9IHByb2Nlc3MuZmluZENhZU9iamVjdEJ5TmFtZUluQ2hpbGRPYmplY3QoXG4gICAgICBwcm9jZXNzLmNhZVJlbmRlck9iamVjdFRyZWVNYW5hZ2VyLm1lbWJlck5vZGUgYXMgRGVzaWduQmFzZU9iamVjdCxcbiAgICAgIG1lbWJlck5hbWVcbiAgICApO1xuICAgIGlmIChybyAmJiBybyBpbnN0YW5jZW9mIE1lbWJlck9iamVjdCkge1xuICAgICAgdGhpcy52aWV3ZXIuc2VsZWN0aW9uTWFuYWdlci5jbGVhckFsbFNlbGVjdGlvbkFuZEhpZ2hsaWdodCgpO1xuICAgICAgdGhpcy52aWV3ZXIubG9jYXRlV29ybGQocm8uc2VnbWVudCk7XG4gICAgICB0aGlzLnZpZXdlci5zZWxlY3Rpb25NYW5hZ2VyLnNlbGVjdEFuZEhpZ2hsaWdodEtleXMoXG4gICAgICAgIFtyby5zZWdtZW50LmtleV0sXG4gICAgICAgIFtyby5zZWdtZW50LnBhdGhdXG4gICAgICApO1xuICAgICAgdGhpcy52aWV3ZXIudXBkYXRlRGlzcGxheSgpO1xuXG4gICAgICByZXR1cm4gcm87XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDpgJrov4fmnYbku7blkI3np7Dnu4Tpq5jkuq7mnYbku7ZcbiAgICogQHBhcmFtIG5hbWVzXG4gICAqL1xuICBoaWdobGlnaHRNZW1iZXJCeU5hbWVzKG5hbWVzOiBzdHJpbmdbXSkge1xuICAgIC8vXG4gICAgbGV0IHByb2Nlc3MgPSB0aGlzLnZpZXdlci5wcm9jZXNzIGFzIFByb2Nlc3M7XG5cbiAgICBsZXQga2V5cyA9IFtdO1xuICAgIGxldCBwYXRocyA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IG9iaiA9IHByb2Nlc3MuZmluZENhZU9iamVjdEJ5TmFtZUluQ2hpbGRPYmplY3QoXG4gICAgICAgIHByb2Nlc3MuY2FlUmVuZGVyT2JqZWN0VHJlZU1hbmFnZXIubWVtYmVyTm9kZSxcbiAgICAgICAgbmFtZXNbaV1cbiAgICAgICk7XG5cbiAgICAgIGlmIChvYmopIHtcbiAgICAgICAga2V5cy5wdXNoKG9iai5zZWdtZW50LmtleSk7XG4gICAgICAgIHBhdGhzLnB1c2gob2JqLnNlZ21lbnQucGF0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhcIuaJvuS4jeWIsFwiICsgbmFtZXNbaV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudmlld2VyLnNlbGVjdGlvbk1hbmFnZXIuY2xlYXJBbGxTZWxlY3Rpb25BbmRIaWdobGlnaHQoKTtcbiAgICB0aGlzLnZpZXdlci5zZWxlY3Rpb25NYW5hZ2VyLnNlbGVjdEFuZEhpZ2hsaWdodEtleXMoa2V5cywgcGF0aHMpO1xuICAgIHRoaXMudmlld2VyLnVwZGF0ZURpc3BsYXkoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDpgJrov4fmnb/lkI3np7Dnu4Tpq5jkuq7mnb8uXG4gICAqIEBwYXJhbSBuYW1lc1xuICAgKi9cbiAgaGlnaGxpZ2h0UGxhdGVCeU5hbWVzKG5hbWVzOiBzdHJpbmdbXSkge1xuICAgIC8vXG4gICAgbGV0IGtleXMgPSBbXTtcbiAgICBsZXQgcGF0aHMgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBvYmogPSAoXG4gICAgICAgIHRoaXMudmlld2VyLnByb2Nlc3MgYXMgUHJvY2Vzc1xuICAgICAgKS5maW5kQ2FlT2JqZWN0QnlOYW1lSW5DaGlsZE9iamVjdChcbiAgICAgICAgKHRoaXMudmlld2VyLnByb2Nlc3MgYXMgUHJvY2VzcykuY2FlUmVuZGVyT2JqZWN0VHJlZU1hbmFnZXIucGxhdGVOb2RlLFxuICAgICAgICBuYW1lc1tpXVxuICAgICAgKTtcblxuICAgICAgaWYgKG9iaikge1xuICAgICAgICBrZXlzLnB1c2gob2JqLnNlZ21lbnQua2V5KTtcbiAgICAgICAgcGF0aHMucHVzaChvYmouc2VnbWVudC5wYXRoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwi5om+5LiN5YiwXCIgKyBuYW1lc1tpXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy52aWV3ZXIuc2VsZWN0aW9uTWFuYWdlci5jbGVhckFsbFNlbGVjdGlvbkFuZEhpZ2hsaWdodCgpO1xuICAgIHRoaXMudmlld2VyLnNlbGVjdGlvbk1hbmFnZXIuc2VsZWN0QW5kSGlnaGxpZ2h0S2V5cyhrZXlzLCBwYXRocyk7XG4gICAgdGhpcy52aWV3ZXIudXBkYXRlRGlzcGxheSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIOafpeaJvuW3suaYvuekuueahOadv1xuICAgKiBAcGFyYW0gcGxhdGVOYW1lIOadv+WQjeensFxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZmluZFBsYXRlKHBsYXRlTmFtZTogc3RyaW5nKSB7XG4gICAgbGV0IHByb2Nlc3MgPSB0aGlzLnZpZXdlci5wcm9jZXNzIGFzIFByb2Nlc3M7XG5cbiAgICBsZXQgcm8gPSBwcm9jZXNzLmZpbmRDYWVPYmplY3RCeU5hbWVJbkNoaWxkT2JqZWN0KFxuICAgICAgcHJvY2Vzcy5jYWVSZW5kZXJPYmplY3RUcmVlTWFuYWdlci5wbGF0ZU5vZGUgYXMgRGVzaWduQmFzZU9iamVjdCxcbiAgICAgIHBsYXRlTmFtZVxuICAgICk7XG4gICAgaWYgKHJvICYmIHJvIGluc3RhbmNlb2YgUGxhdGVPYmplY3QpIHtcbiAgICAgIHRoaXMudmlld2VyLnNlbGVjdGlvbk1hbmFnZXIuY2xlYXJBbGxTZWxlY3Rpb25BbmRIaWdobGlnaHQoKTtcbiAgICAgIHRoaXMudmlld2VyLmxvY2F0ZVdvcmxkKHJvLnNlZ21lbnQpO1xuICAgICAgdGhpcy52aWV3ZXIuc2VsZWN0aW9uTWFuYWdlci5zZWxlY3RBbmRIaWdobGlnaHRLZXlzKFxuICAgICAgICBbcm8uc2VnbWVudC5rZXldLFxuICAgICAgICBbcm8uc2VnbWVudC5wYXRoXVxuICAgICAgKTtcbiAgICAgIHRoaXMudmlld2VyLnVwZGF0ZURpc3BsYXkoKTtcblxuICAgICAgcmV0dXJuIHJvO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvLyAvKipcbiAgLy8gICog6L+U5ZueQ0FF57uT5p6E5qCR55qE5pWw5o2uLlxuICAvLyAgKiBAcmV0dXJuc1xuICAvLyAgKi9cbiAgLy8gZ2V0U3RydWN0dXJlVHJlZURhdGEoKTogc3RyaW5nIHtcbiAgLy8gICAvL1xuICAvLyAgIGxldCByb290Tm9kZSA9ICh0aGlzLnZpZXdlciBhcyBWaWV3ZXIpLnByb2Nlc3MuY2FlUmVuZGVyT2JqZWN0VHJlZU1hbmFnZXJcbiAgLy8gICAgIC5yb290Tm9kZTtcbiAgLy8gICBsZXQgbW9kZWxEYXRhID0gSlNPTi5zdHJpbmdpZnkoXG4gIC8vICAgICB0aGlzLnZpZXdlci5wcm9jZXNzLnBlcnNpc3RlbmNlTWFuYWdlci5zYXZlKHJvb3ROb2RlKVxuICAvLyAgICk7XG4gIC8vICAgcmV0dXJuIG1vZGVsRGF0YTtcbiAgLy8gfVxuXG4gIC8qKlxuICAgKiDov5Tlm55DQUXnu5PmnoTmoJHnmoTmlbDmja4uXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBnZXRTdHJ1Y3R1cmVUcmVlRGF0YSgpIHtcbiAgICAvL1xuICAgIGxldCByb290Tm9kZSA9ICh0aGlzLnZpZXdlciBhcyBWaWV3ZXIpLnN0cnVjdHVyZVRyZWVNYW5hZ2VyLnJvb3ROb2RlO1xuICAgIHJldHVybiByb290Tm9kZTtcbiAgfVxuXG4gIGdldE1lbWJlckdydXBzKCkge1xuICAgIC8vIOadhuS7tuaIqumdoue7hOWQjeWtl+WIl+ihqFxuICAgIGxldCBncnVwTmFtZUxpc3QgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuXG4gICAgbGV0IGdydXBPYmplY3RHcm91cCA9XG4gICAgICB0aGlzLnZpZXdlci5wcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RCeU5hbWUoXCLmnYbku7bmiKrpnaLnu4RcIik7XG4gICAgaWYgKGdydXBPYmplY3RHcm91cCkge1xuICAgICAgZ3J1cE9iamVjdEdyb3VwLmNoaWxkT2JqZWN0cy5tYXAoKGl0ZW0pID0+IHtcbiAgICAgICAgZ3J1cE5hbWVMaXN0LnB1c2goaXRlbS5uYW1lKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBncnVwTmFtZUxpc3Q7XG4gIH1cblxuICAvKipcbiAgICog57uT5p6E5qCR5re75Yqg6IqC54K5LlxuICAgKi9cbiAgYWRkU3RydWN0dXJlTm9kZShwYXJlbnQ6IExvbmdhbi5SZW5kZXJPYmplY3QsIHJvOiBEZXNpZ25CYXNlT2JqZWN0KSB7XG4gICAgdGhpcy52aWV3ZXIucHJvY2Vzcy5hZGRSZW5kZXJPYmplY3QocGFyZW50LCBybyk7XG4gIH1cblxuICAvKipcbiAgICog57uT5p6E5qCR5re75Yqg6IqC54K5LlxuICAgKi9cbiAgcmVtb3ZlU3RydWN0dXJlTm9kZShybzogRGVzaWduQmFzZU9iamVjdCkge1xuICAgIHRoaXMudmlld2VyLnByb2Nlc3MucmVtb3ZlUmVuZGVyT2JqZWN0KHJvKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDliJvlu7rmtbfnlJ/nianljprluqbmjInpq5jnqIvliIboibLlr7nosaFcbiAgICogQHJldHVybnNcbiAgICovXG4gIGNyZWF0ZU1ncm92T2JqZWN0KCkge1xuICAgIGxldCBtZ3JvdiA9IG5ldyBNZ3Jvdk9iamVjdCgpO1xuICAgIHJldHVybiBtZ3JvdjtcbiAgfVxuXG4gIC8qKlxuICAgKiDliJvlu7rohZDomoDkvZnph4/mjInpq5jnqIvliIboibLlr7nosaFcbiAgICogQHJldHVybnNcbiAgICovXG4gIGNyZWF0ZUNvcnJ6T2JqZWN0KCkge1xuICAgIGxldCBjb3JyeiA9IG5ldyBDb3Jyek9iamVjdCgpO1xuICAgIHJldHVybiBjb3JyejtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJDaGlsZE9iamVjdHModmlld2VyOiBWaWV3ZXIsIHJvOiBMb25nYW4uUmVuZGVyT2JqZWN0KSB7XG4gICAgaWYgKHJvKSB7XG4gICAgICB3aGlsZSAocm8uY2hpbGRPYmplY3RzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdmlld2VyLnByb2Nlc3MucmVtb3ZlUmVuZGVyT2JqZWN0KHJvLmNoaWxkT2JqZWN0c1swXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8g5riF6Zmk5Zy65pmv5qih5Z6L5pWw5o2uXG4gIGNsZWFyQ2FlUmVuZGVyT2JqZWN0KHZpZXdlcjogVmlld2VyKSB7XG4gICAgdGhpcy5jbGVhckNoaWxkT2JqZWN0cyhcbiAgICAgIHZpZXdlcixcbiAgICAgIHZpZXdlci5wcm9jZXNzLmNhZVJlbmRlck9iamVjdFRyZWVNYW5hZ2VyLm1lbWJlck5vZGVcbiAgICApO1xuICAgIHRoaXMuY2xlYXJDaGlsZE9iamVjdHMoXG4gICAgICB2aWV3ZXIsXG4gICAgICB2aWV3ZXIucHJvY2Vzcy5jYWVSZW5kZXJPYmplY3RUcmVlTWFuYWdlci5wbGF0ZU5vZGVcbiAgICApO1xuICAgIHRoaXMuY2xlYXJDaGlsZE9iamVjdHMoXG4gICAgICB2aWV3ZXIsXG4gICAgICB2aWV3ZXIucHJvY2Vzcy5jYWVSZW5kZXJPYmplY3RUcmVlTWFuYWdlci5qb2ludE5vZGVcbiAgICApO1xuICAgIHRoaXMuY2xlYXJDaGlsZE9iamVjdHMoXG4gICAgICB2aWV3ZXIsXG4gICAgICB2aWV3ZXIucHJvY2Vzcy5jYWVSZW5kZXJPYmplY3RUcmVlTWFuYWdlci5ncnVwTm9kZVxuICAgICk7XG4gICAgdGhpcy5jbGVhckNoaWxkT2JqZWN0cyhcbiAgICAgIHZpZXdlcixcbiAgICAgIHZpZXdlci5wcm9jZXNzLmNhZVJlbmRlck9iamVjdFRyZWVNYW5hZ2VyLnBHcnVwTm9kZVxuICAgICk7XG4gICAgdGhpcy5jbGVhckNoaWxkT2JqZWN0cyhcbiAgICAgIHZpZXdlcixcbiAgICAgIHZpZXdlci5wcm9jZXNzLmNhZVJlbmRlck9iamVjdFRyZWVNYW5hZ2VyLnNlY3Rpb25JbnNOb2RlXG4gICAgKTtcbiAgICB0aGlzLmNsZWFyQ2hpbGRPYmplY3RzKFxuICAgICAgdmlld2VyLFxuICAgICAgdmlld2VyLnByb2Nlc3MuY2FlUmVuZGVyT2JqZWN0VHJlZU1hbmFnZXIuc2FjaW5wTm9kZVxuICAgICk7XG4gICAgdGhpcy5jbGVhckNoaWxkT2JqZWN0cyhcbiAgICAgIHZpZXdlcixcbiAgICAgIHZpZXdlci5wcm9jZXNzLmNhZVJlbmRlck9iamVjdFRyZWVNYW5hZ2VyLnNlYXN0YXRlTm9kZVxuICAgICk7XG4gICAgdGhpcy5jbGVhckNoaWxkT2JqZWN0cyhcbiAgICAgIHZpZXdlcixcbiAgICAgIHZpZXdlci5wcm9jZXNzLmNhZVJlbmRlck9iamVjdFRyZWVNYW5hZ2VyLnBpbGVOb2RlXG4gICAgKTtcbiAgICB0aGlzLmNsZWFyQ2hpbGRPYmplY3RzKFxuICAgICAgdmlld2VyLFxuICAgICAgdmlld2VyLnByb2Nlc3MuY2FlUmVuZGVyT2JqZWN0VHJlZU1hbmFnZXIucGxHcnVwTm9kZVxuICAgICk7XG4gICAgdGhpcy5jbGVhckNoaWxkT2JqZWN0cyhcbiAgICAgIHZpZXdlcixcbiAgICAgIHZpZXdlci5wcm9jZXNzLmNhZVJlbmRlck9iamVjdFRyZWVNYW5hZ2VyLnBvc3RSZXN1bHROb2RlXG4gICAgKTtcbiAgfVxuXG4gIC8vIOaMieaIqumdoue7hOWQjeWIhuiJsuW8gOWFs1xuICBwcml2YXRlIGNvbG9yRGl2U3dpdGNoX0dydXBOYW1lKG9uX29mZjogYm9vbGVhbiwgaXNVcGRhdGUgPSB0cnVlKSB7XG4gICAgbGV0IHZpZXdlciA9IHRoaXMudmlld2VyIGFzIFZpZXdlcjtcbiAgICBsZXQgcHJvY2VzcyA9IHRoaXMudmlld2VyLnByb2Nlc3M7XG5cbiAgICBsZXQgY29sb3JEaXZpZGVSTyA9IHByb2Nlc3MuZmluZFJlbmRlck9iamVjdEJ5TmFtZShcbiAgICAgIFwi5oyJ5oiq6Z2i57uE5Y+35YiG6ImyXCJcbiAgICApIGFzIEN1dGxpbmVHcnVwSWRPYmplY3Q7XG4gICAgaWYgKGNvbG9yRGl2aWRlUk8pIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29sb3JEaXZpZGVSTy5jaGlsZE9iamVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IG9iaiA9IGNvbG9yRGl2aWRlUk8uY2hpbGRPYmplY3RzW2ldIGFzIENvbG9yRGl2R3J1cElkT2JqZWN0O1xuXG4gICAgICAgIGlmIChvYmouY2hlY2tCdXNpbmVzc1N0YXRlSXNBY3RpdmUoKSkge1xuICAgICAgICAgIGlmIChvbl9vZmYpIHtcbiAgICAgICAgICAgIG9iai5hY3RpdmUodmlld2VyKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb2JqLmluYWN0aXZlKHZpZXdlcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChvbl9vZmYpIHtcbiAgICAgICAgbGV0IGN1dGxpbmUgPSB7fTtcblxuICAgICAgICBpZiAoY29sb3JEaXZpZGVSTykge1xuICAgICAgICAgIExlZ2VuZE1hbmFnZS5kZXN0b3J5KHRoaXMuZWxlbWVudEtleSk7XG4gICAgICAgICAgLy8gc3RvcmUuY29tbWl0KFwic2V0TGVnZW5kVGl0bGVcIiwgXCJcIik7XG4gICAgICAgICAgLy8gc3RvcmUuY29tbWl0KFwic2V0TGVnZW5kUmlnaHRUZXh0XCIsIFwiXCIpO1xuICAgICAgICAgIC8vIHN0b3JlLmNvbW1pdChcInNldExlZ2VuZFwiLCB7fSk7XG4gICAgICAgICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgY3V0bGluZSA9IGNvbG9yRGl2aWRlUk8uZ2V0Q3V0bGluZSgpO1xuICAgICAgICAgIGxldCBjb21wb25lbnQgPSBMZWdlbmRNYW5hZ2UuY3JlYXRlKFxuICAgICAgICAgICAgdGhpcy5lbGVtZW50S2V5LFxuICAgICAgICAgICAgY3V0bGluZSxcbiAgICAgICAgICAgIFwiXCIsXG4gICAgICAgICAgICBcIlwiLFxuICAgICAgICAgICAgXCJcIlxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKHRoaXMuc2hvd0VuZ2xpc2hUZXh0KSB7XG4gICAgICAgICAgICBjb21wb25lbnQudGl0bGUgPSBcIkNvbG9yZWQgQnkgTWVtYmVyIEdyb3Vwc1wiO1xuICAgICAgICAgICAgY29tcG9uZW50LmxlZnRUZXh0ID0gXCJDb2xvclwiO1xuICAgICAgICAgICAgY29tcG9uZW50LnJpZ2h0VGV4dCA9IFwiTWVtYmVyIEdyb3Vwc1wiO1xuICAgICAgICAgICAgLy8gc3RvcmUuY29tbWl0KFwic2V0TGVnZW5kVGl0bGVcIiwgXCJDb2xvcmVkIEJ5IE1lbWJlciBHcm91cHNcIik7XG4gICAgICAgICAgICAvLyBzdG9yZS5jb21taXQoXCJzZXRMZWdlbmRMZWZ0VGV4dFwiLCBcIkNvbG9yXCIpO1xuICAgICAgICAgICAgLy8gc3RvcmUuY29tbWl0KFwic2V0TGVnZW5kUmlnaHRUZXh0XCIsIFwiTWVtYmVyIEdyb3Vwc1wiKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29tcG9uZW50LnRpdGxlID0gXCLmiKrpnaLnu4TliIboibJcIjtcbiAgICAgICAgICAgIGNvbXBvbmVudC5sZWZ0VGV4dCA9IFwi6aKc6ImyXCI7XG4gICAgICAgICAgICBjb21wb25lbnQucmlnaHRUZXh0ID0gXCLmiKrpnaLnu4TlkI1cIjtcbiAgICAgICAgICAgIC8vIHN0b3JlLmNvbW1pdChcInNldExlZ2VuZFRpdGxlXCIsIFwi5oiq6Z2i57uE5YiG6ImyXCIpO1xuICAgICAgICAgICAgLy8gc3RvcmUuY29tbWl0KFwic2V0TGVnZW5kTGVmdFRleHRcIiwgXCLpopzoibJcIik7XG4gICAgICAgICAgICAvLyBzdG9yZS5jb21taXQoXCJzZXRMZWdlbmRSaWdodFRleHRcIiwgXCLmiKrpnaLnu4TlkI1cIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vICAgc3RvcmUuY29tbWl0KFwic2V0TGVnZW5kXCIsIGN1dGxpbmUpO1xuICAgICAgICAgIC8vIH0sIDIwKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgTGVnZW5kTWFuYWdlLmRlc3RvcnkodGhpcy5lbGVtZW50S2V5KTtcbiAgICAgICAgLy8gc3RvcmUuY29tbWl0KFwic2V0TGVnZW5kXCIsIHt9KTtcbiAgICAgICAgLy8gc3RvcmUuY29tbWl0KFwic2V0TGVnZW5kVGl0bGVcIiwgXCJcIik7XG4gICAgICAgIC8vIHN0b3JlLmNvbW1pdChcInNldExlZ2VuZFJpZ2h0VGV4dFwiLCBcIlwiKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzVXBkYXRlKSB0aGlzLnZpZXdlci51cGRhdGVEaXNwbGF5KCk7XG4gIH1cblxuICBwcml2YXRlIGNvbG9yRGl2U3dpdGNoX0dydXBUaGlja25lc3Mob25fb2ZmOiBib29sZWFuLCBpc1VwZGF0ZSA9IHRydWUpIHtcbiAgICBsZXQgdmlld2VyID0gdGhpcy52aWV3ZXIgYXMgVmlld2VyO1xuICAgIGxldCBwcm9jZXNzID0gdGhpcy52aWV3ZXIucHJvY2VzcztcblxuICAgIGxldCBjb2xvckRpdmlkZVJPID0gcHJvY2Vzcy5maW5kUmVuZGVyT2JqZWN0QnlOYW1lKFxuICAgICAgXCLmjInmiKrpnaLlo4HljprliIboibJcIlxuICAgICkgYXMgQ3V0bGluZUdydXBUaGlja25lc3NPYmplY3Q7XG4gICAgaWYgKGNvbG9yRGl2aWRlUk8pIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29sb3JEaXZpZGVSTy5jaGlsZE9iamVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IG9iaiA9IGNvbG9yRGl2aWRlUk8uY2hpbGRPYmplY3RzW2ldIGFzIENvbG9yRGl2R3J1cFRoaWNrbmVzc09iamVjdDtcbiAgICAgICAgaWYgKG9iai5jaGVja0J1c2luZXNzU3RhdGVJc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgaWYgKG9uX29mZikge1xuICAgICAgICAgICAgb2JqLmFjdGl2ZSh2aWV3ZXIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvYmouaW5hY3RpdmUodmlld2VyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG9uX29mZikge1xuICAgICAgICBsZXQgY3V0bGluZSA9IHt9O1xuICAgICAgICBpZiAoY29sb3JEaXZpZGVSTykge1xuICAgICAgICAgIExlZ2VuZE1hbmFnZS5kZXN0b3J5KHRoaXMuZWxlbWVudEtleSk7XG4gICAgICAgICAgLy8gc3RvcmUuY29tbWl0KFwic2V0TGVnZW5kXCIsIHt9KTtcbiAgICAgICAgICAvLyBzdG9yZS5jb21taXQoXCJzZXRMZWdlbmRUaXRsZVwiLCBcIlwiKTtcbiAgICAgICAgICAvLyBzdG9yZS5jb21taXQoXCJzZXRMZWdlbmRSaWdodFRleHRcIiwgXCJcIik7XG4gICAgICAgICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgY3V0bGluZSA9IGNvbG9yRGl2aWRlUk8uZ2V0Q3V0bGluZSgpO1xuICAgICAgICAgIGxldCBjb21wb25lbnQgPSBMZWdlbmRNYW5hZ2UuY3JlYXRlKFxuICAgICAgICAgICAgdGhpcy5lbGVtZW50S2V5LFxuICAgICAgICAgICAgY3V0bGluZSxcbiAgICAgICAgICAgIFwiXCIsXG4gICAgICAgICAgICBcIlwiLFxuICAgICAgICAgICAgXCJcIlxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKHRoaXMuc2hvd0VuZ2xpc2hUZXh0KSB7XG4gICAgICAgICAgICBjb21wb25lbnQudGl0bGUgPSBcIkNvbG9yZWQgQnkgVGhpY2tuZXNzXCI7XG4gICAgICAgICAgICBjb21wb25lbnQubGVmdFRleHQgPSBcIkNvbG9yXCI7XG4gICAgICAgICAgICBjb21wb25lbnQucmlnaHRUZXh0ID0gXCJUaGlja25lc3MoY20pXCI7XG4gICAgICAgICAgICAvLyBzdG9yZS5jb21taXQoXCJzZXRMZWdlbmRUaXRsZVwiLCBcIkNvbG9yZWQgQnkgVGhpY2tuZXNzXCIpO1xuICAgICAgICAgICAgLy8gc3RvcmUuY29tbWl0KFwic2V0TGVnZW5kTGVmdFRleHRcIiwgXCJDb2xvclwiKTtcbiAgICAgICAgICAgIC8vIHN0b3JlLmNvbW1pdChcInNldExlZ2VuZFJpZ2h0VGV4dFwiLCBcIlRoaWNrbmVzcyhjbSlcIik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbXBvbmVudC50aXRsZSA9IFwi5aOB5Y6a5YiG6ImyXCI7XG4gICAgICAgICAgICBjb21wb25lbnQubGVmdFRleHQgPSBcIuminOiJslwiO1xuICAgICAgICAgICAgY29tcG9uZW50LnJpZ2h0VGV4dCA9IFwi5aOB5Y6aKGNtKVwiO1xuICAgICAgICAgICAgLy8gc3RvcmUuY29tbWl0KFwic2V0TGVnZW5kVGl0bGVcIiwgXCLlo4HljprliIboibJcIik7XG4gICAgICAgICAgICAvLyBzdG9yZS5jb21taXQoXCJzZXRMZWdlbmRMZWZ0VGV4dFwiLCBcIuminOiJslwiKTtcbiAgICAgICAgICAgIC8vIHN0b3JlLmNvbW1pdChcInNldExlZ2VuZFJpZ2h0VGV4dFwiLCBcIuWjgeWOmihjbSlcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHN0b3JlLmNvbW1pdChcInNldExlZ2VuZFwiLCBjdXRsaW5lKTtcbiAgICAgICAgICAvLyB9LCAyMCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHN0b3JlLmNvbW1pdChcInNldExlZ2VuZFwiLCB7fSk7XG4gICAgICAgIC8vIHN0b3JlLmNvbW1pdChcInNldExlZ2VuZFRpdGxlXCIsIFwiXCIpO1xuICAgICAgICAvLyBzdG9yZS5jb21taXQoXCJzZXRMZWdlbmRSaWdodFRleHRcIiwgXCJcIik7XG4gICAgICAgIExlZ2VuZE1hbmFnZS5kZXN0b3J5KHRoaXMuZWxlbWVudEtleSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpc1VwZGF0ZSkgdGhpcy52aWV3ZXIudXBkYXRlRGlzcGxheSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb2xvcmREaXZTd2l0Y2hfTWdyb3Yob25fb2ZmOiBib29sZWFuLCBpc1VwZGF0ZSA9IHRydWUpIHtcbiAgICBsZXQgdmlld2VyID0gdGhpcy52aWV3ZXIgYXMgVmlld2VyO1xuICAgIGxldCBwcm9jZXNzID0gdGhpcy52aWV3ZXIucHJvY2VzcztcblxuICAgIGxldCBjb2xvckRpdmlkZVJPID0gcHJvY2Vzcy5maW5kUmVuZGVyT2JqZWN0QnlOYW1lKFxuICAgICAgXCLmtbfnlJ/nianljprluqbmjInpq5jnqIvliIboibJcIlxuICAgICkgYXMgRGVzaWduQmFzZU9iamVjdDtcbiAgICBpZiAoY29sb3JEaXZpZGVSTyAmJiBjb2xvckRpdmlkZVJPLmNoZWNrQnVzaW5lc3NTdGF0ZUlzQWN0aXZlKCkpIHtcbiAgICAgIGxldCBvYmogPSBjb2xvckRpdmlkZVJPIGFzIENvbG9yRGl2TUdST1ZPYmplY3Q7XG5cbiAgICAgIGlmIChvbl9vZmYpIHtcbiAgICAgICAgb2JqLmFjdGl2ZSh2aWV3ZXIpO1xuXG4gICAgICAgIGxldCBjdXRsaW5lID0ge307XG4gICAgICAgIGlmIChjb2xvckRpdmlkZVJPKSB7XG4gICAgICAgICAgbGV0IG9iaiA9IGNvbG9yRGl2aWRlUk8gYXMgQ29sb3JEaXZNR1JPVk9iamVjdDtcbiAgICAgICAgICBsZXQgdGhpY2tuZXNzSW5kZXggPSAwO1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2JqLmhlaWdodExpc3QubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgICAgIGxldCBib3R0b20gPSBvYmouaGVpZ2h0TGlzdFtpXTtcbiAgICAgICAgICAgIGxldCB0b3AgPSBvYmouaGVpZ2h0TGlzdFtpICsgMV07XG4gICAgICAgICAgICBsZXQga2V5ID0gYm90dG9tICsgXCJ+XCIgKyB0b3AgKyBcIu+8mlwiICsgb2JqLnRoaWNrbmVzc1t0aGlja25lc3NJbmRleF07XG5cbiAgICAgICAgICAgIGxldCBjb2xvciA9IFtcbiAgICAgICAgICAgICAgb2JqLmNvbG9yWyhpIC8gMikgKiA0ICsgMF0sXG4gICAgICAgICAgICAgIG9iai5jb2xvclsoaSAvIDIpICogNCArIDFdLFxuICAgICAgICAgICAgICBvYmouY29sb3JbKGkgLyAyKSAqIDQgKyAyXSxcbiAgICAgICAgICAgICAgb2JqLmNvbG9yWyhpIC8gMikgKiA0ICsgM10sXG4gICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICBpZiAoY29sb3JbMF0gPT09IC0xICYmIGNvbG9yWzFdID09PSAtMSAmJiBjb2xvclsyXSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb2xvclswXSAqPSAyNTU7XG4gICAgICAgICAgICBjb2xvclsxXSAqPSAyNTU7XG4gICAgICAgICAgICBjb2xvclsyXSAqPSAyNTU7XG5cbiAgICAgICAgICAgIGN1dGxpbmVba2V5XSA9IGNvbG9yO1xuICAgICAgICAgICAgdGhpY2tuZXNzSW5kZXgrKztcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gc3RvcmUuY29tbWl0KFwic2V0TGVnZW5kXCIsIHt9KTtcbiAgICAgICAgICAvLyBzdG9yZS5jb21taXQoXCJzZXRMZWdlbmRUaXRsZVwiLCBcIlwiKTtcbiAgICAgICAgICAvLyBzdG9yZS5jb21taXQoXCJzZXRMZWdlbmRSaWdodFRleHRcIiwgXCJcIik7XG4gICAgICAgICAgTGVnZW5kTWFuYWdlLmRlc3RvcnkodGhpcy5lbGVtZW50S2V5KTtcbiAgICAgICAgICBsZXQgY29tcG9uZW50ID0gTGVnZW5kTWFuYWdlLmNyZWF0ZShcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudEtleSxcbiAgICAgICAgICAgIGN1dGxpbmUsXG4gICAgICAgICAgICBcIlwiLFxuICAgICAgICAgICAgXCJcIixcbiAgICAgICAgICAgIFwiXCJcbiAgICAgICAgICApO1xuICAgICAgICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLnNob3dFbmdsaXNoVGV4dCkge1xuICAgICAgICAgICAgY29tcG9uZW50LnRpdGxlID0gXCJNYXJpbmUgR3Jvd3RoIFpvbmVzXCI7XG4gICAgICAgICAgICBjb21wb25lbnQubGVmdFRleHQgPSBcIkNvbG9yXCI7XG4gICAgICAgICAgICBjb21wb25lbnQucmlnaHRUZXh0ID0gXCJIZWlnaHQgUmFuZ2UobSk6IFRoaWNrbmVzcyhtbSlcIjtcbiAgICAgICAgICAgIC8vIHN0b3JlLmNvbW1pdChcInNldExlZ2VuZFRpdGxlXCIsIFwiTWFyaW5lIEdyb3d0aCBab25lc1wiKTtcbiAgICAgICAgICAgIC8vIHN0b3JlLmNvbW1pdChcInNldExlZ2VuZExlZnRUZXh0XCIsIFwiQ29sb3JcIik7XG4gICAgICAgICAgICAvLyBzdG9yZS5jb21taXQoXG4gICAgICAgICAgICAvLyAgIFwic2V0TGVnZW5kUmlnaHRUZXh0XCIsXG4gICAgICAgICAgICAvLyAgIFwiSGVpZ2h0IFJhbmdlKG0pOiBUaGlja25lc3MobW0pXCJcbiAgICAgICAgICAgIC8vICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHN0b3JlLmNvbW1pdChcInNldExlZ2VuZFRpdGxlXCIsIFwi5rW355Sf54mp5Y6a5bqm5YiG6ImyXCIpO1xuICAgICAgICAgICAgLy8gc3RvcmUuY29tbWl0KFwic2V0TGVnZW5kTGVmdFRleHRcIiwgXCLpopzoibJcIik7XG4gICAgICAgICAgICAvLyBzdG9yZS5jb21taXQoXCJzZXRMZWdlbmRSaWdodFRleHRcIiwgXCLpq5jluqbojIPlm7QobSk6IOWOmuW6pihtbSlcIik7XG4gICAgICAgICAgICBjb21wb25lbnQudGl0bGUgPSBcIua1t+eUn+eJqeWOmuW6puWIhuiJslwiO1xuICAgICAgICAgICAgY29tcG9uZW50LmxlZnRUZXh0ID0gXCLpopzoibJcIjtcbiAgICAgICAgICAgIGNvbXBvbmVudC5yaWdodFRleHQgPSBcIumrmOW6puiMg+WbtChtKTog5Y6a5bqmKG1tKVwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBzdG9yZS5jb21taXQoXCJzZXRMZWdlbmRcIiwgY3V0bGluZSk7XG4gICAgICAgICAgLy8gfSwgNTApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYmouaW5hY3RpdmUodmlld2VyKTtcbiAgICAgICAgLy8gc3RvcmUuY29tbWl0KFwic2V0TGVnZW5kXCIsIHt9KTtcbiAgICAgICAgLy8gc3RvcmUuY29tbWl0KFwic2V0TGVnZW5kVGl0bGVcIiwgXCJcIik7XG4gICAgICAgIC8vIHN0b3JlLmNvbW1pdChcInNldExlZ2VuZFJpZ2h0VGV4dFwiLCBcIlwiKTtcbiAgICAgICAgTGVnZW5kTWFuYWdlLmRlc3RvcnkodGhpcy5lbGVtZW50S2V5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzVXBkYXRlKSB0aGlzLnZpZXdlci51cGRhdGVEaXNwbGF5KCk7XG4gIH1cblxuICBwcml2YXRlIGNvbG9yZERpdlN3aXRjaF9Db3Jyeihvbl9vZmY6IGJvb2xlYW4sIGlzVXBkYXRlID0gdHJ1ZSkge1xuICAgIGxldCB2aWV3ZXIgPSB0aGlzLnZpZXdlciBhcyBWaWV3ZXI7XG4gICAgbGV0IHByb2Nlc3MgPSB0aGlzLnZpZXdlci5wcm9jZXNzO1xuXG4gICAgbGV0IGNvbG9yRGl2aWRlUk8gPSBwcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RCeU5hbWUoXG4gICAgICBcIuiFkOiagOS9memHj+aMiemrmOeoi+WIhuiJslwiXG4gICAgKSBhcyBEZXNpZ25CYXNlT2JqZWN0O1xuICAgIGlmIChjb2xvckRpdmlkZVJPICYmIGNvbG9yRGl2aWRlUk8uY2hlY2tCdXNpbmVzc1N0YXRlSXNBY3RpdmUoKSkge1xuICAgICAgbGV0IG9iaiA9IGNvbG9yRGl2aWRlUk8gYXMgQ29sb3JEaXZDT1JSWk9iamVjdDtcbiAgICAgIGlmIChvbl9vZmYpIHtcbiAgICAgICAgb2JqLmFjdGl2ZSh2aWV3ZXIpO1xuXG4gICAgICAgIGxldCBjdXRsaW5lID0ge307XG4gICAgICAgIGlmIChjb2xvckRpdmlkZVJPKSB7XG4gICAgICAgICAgbGV0IG9iaiA9IGNvbG9yRGl2aWRlUk8gYXMgQ29sb3JEaXZDT1JSWk9iamVjdDtcbiAgICAgICAgICBsZXQgdGhpY2tuZXNzSW5kZXggPSAwO1xuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2JqLmhlaWdodExpc3QubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgICAgIGxldCBib3R0b20gPSBvYmouaGVpZ2h0TGlzdFtpXTtcbiAgICAgICAgICAgIGxldCB0b3AgPSBvYmouaGVpZ2h0TGlzdFtpICsgMV07XG5cbiAgICAgICAgICAgIGxldCBrZXlMZXZlbEJvdHRvbSA9IG9iai5jb3Jyekxpc3RbdGhpY2tuZXNzSW5kZXhdLnRoaWNrbmVzc0JvdHRvbTtcbiAgICAgICAgICAgIGlmICgha2V5TGV2ZWxCb3R0b20pIHtcbiAgICAgICAgICAgICAga2V5TGV2ZWxCb3R0b20gPSAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQga2V5TGV2ZWxUb3AgPSBvYmouY29ycnpMaXN0W3RoaWNrbmVzc0luZGV4XS50aGlja25lc3NUb3A7XG4gICAgICAgICAgICBpZiAoIWtleUxldmVsVG9wKSB7XG4gICAgICAgICAgICAgIGtleUxldmVsVG9wID0gMDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGtleSA9XG4gICAgICAgICAgICAgIGJvdHRvbSArIFwiflwiICsgdG9wICsgXCLvvJpcIiArIGtleUxldmVsQm90dG9tICsgXCJ+XCIgKyBrZXlMZXZlbFRvcDtcblxuICAgICAgICAgICAgbGV0IGNvbG9yID0gW1xuICAgICAgICAgICAgICBvYmouY29sb3JbKGkgLyAyKSAqIDQgKyAwXSxcbiAgICAgICAgICAgICAgb2JqLmNvbG9yWyhpIC8gMikgKiA0ICsgMV0sXG4gICAgICAgICAgICAgIG9iai5jb2xvclsoaSAvIDIpICogNCArIDJdLFxuICAgICAgICAgICAgICBvYmouY29sb3JbKGkgLyAyKSAqIDQgKyAzXSxcbiAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgIGlmIChjb2xvclswXSA9PT0gLTEgJiYgY29sb3JbMV0gPT09IC0xICYmIGNvbG9yWzJdID09PSAtMSkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbG9yWzBdICo9IDI1NTtcbiAgICAgICAgICAgIGNvbG9yWzFdICo9IDI1NTtcbiAgICAgICAgICAgIGNvbG9yWzJdICo9IDI1NTtcblxuICAgICAgICAgICAgY3V0bGluZVtrZXldID0gY29sb3I7XG4gICAgICAgICAgICB0aGlja25lc3NJbmRleCsrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBMZWdlbmRNYW5hZ2UuZGVzdG9yeSh0aGlzLmVsZW1lbnRLZXkpO1xuICAgICAgICAgIC8vIHN0b3JlLmNvbW1pdChcInNldExlZ2VuZFwiLCB7fSk7XG4gICAgICAgICAgLy8gc3RvcmUuY29tbWl0KFwic2V0TGVnZW5kVGl0bGVcIiwgXCJcIik7XG4gICAgICAgICAgLy8gc3RvcmUuY29tbWl0KFwic2V0TGVnZW5kUmlnaHRUZXh0XCIsIFwiXCIpO1xuICAgICAgICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGxldCBjb21wb25lbnQgPSBMZWdlbmRNYW5hZ2UuY3JlYXRlKFxuICAgICAgICAgICAgdGhpcy5lbGVtZW50S2V5LFxuICAgICAgICAgICAgY3V0bGluZSxcbiAgICAgICAgICAgIFwiXCIsXG4gICAgICAgICAgICBcIlwiLFxuICAgICAgICAgICAgXCJcIlxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKHRoaXMuc2hvd0VuZ2xpc2hUZXh0KSB7XG4gICAgICAgICAgICAvLyBzdG9yZS5jb21taXQoXCJzZXRMZWdlbmRUaXRsZVwiLCBcIkNvcnJvc2lvbiBab25lc1wiKTtcbiAgICAgICAgICAgIC8vIHN0b3JlLmNvbW1pdChcInNldExlZ2VuZExlZnRUZXh0XCIsIFwiQ29sb3JcIik7XG4gICAgICAgICAgICAvLyBzdG9yZS5jb21taXQoXG4gICAgICAgICAgICAvLyAgIFwic2V0TGVnZW5kUmlnaHRUZXh0XCIsXG4gICAgICAgICAgICAvLyAgIFwiSGVpZ2h0IFJhbmdlKG0pOiBUaGlja25lc3MobW0pXCJcbiAgICAgICAgICAgIC8vICk7XG4gICAgICAgICAgICBjb21wb25lbnQudGl0bGUgPSBcIkNvcnJvc2lvbiBab25lc1wiO1xuICAgICAgICAgICAgY29tcG9uZW50LmxlZnRUZXh0ID0gXCJDb2xvclwiO1xuICAgICAgICAgICAgY29tcG9uZW50LnJpZ2h0VGV4dCA9IFwiSGVpZ2h0IFJhbmdlKG0pOiBUaGlja25lc3MobW0pXCI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHN0b3JlLmNvbW1pdChcInNldExlZ2VuZFRpdGxlXCIsIFwi6IWQ6JqA5L2Z6YeP5YiG6ImyXCIpO1xuICAgICAgICAgICAgLy8gc3RvcmUuY29tbWl0KFwic2V0TGVnZW5kTGVmdFRleHRcIiwgXCLpopzoibJcIik7XG4gICAgICAgICAgICAvLyBzdG9yZS5jb21taXQoXCJzZXRMZWdlbmRSaWdodFRleHRcIiwgXCLpq5jluqbojIPlm7QobSk6IOWOmuW6pihtbSlcIik7XG4gICAgICAgICAgICBjb21wb25lbnQudGl0bGUgPSBcIuiFkOiagOS9memHj+WIhuiJslwiO1xuICAgICAgICAgICAgY29tcG9uZW50LmxlZnRUZXh0ID0gXCLpopzoibJcIjtcbiAgICAgICAgICAgIGNvbXBvbmVudC5yaWdodFRleHQgPSBcIuWjgemrmOW6puiMg+WbtChtKTog5Y6a5bqmKG1tKVwiO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBzdG9yZS5jb21taXQoXCJzZXRMZWdlbmRcIiwgY3V0bGluZSk7XG4gICAgICAgICAgLy8gfSwgMjApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvYmouaW5hY3RpdmUodmlld2VyKTtcbiAgICAgICAgLy8gc3RvcmUuY29tbWl0KFwic2V0TGVnZW5kXCIsIHt9KTtcbiAgICAgICAgLy8gc3RvcmUuY29tbWl0KFwic2V0TGVnZW5kVGl0bGVcIiwgXCJcIik7XG4gICAgICAgIC8vIHN0b3JlLmNvbW1pdChcInNldExlZ2VuZFJpZ2h0VGV4dFwiLCBcIlwiKTtcbiAgICAgICAgTGVnZW5kTWFuYWdlLmRlc3RvcnkodGhpcy5lbGVtZW50S2V5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzVXBkYXRlKSB0aGlzLnZpZXdlci51cGRhdGVEaXNwbGF5KCk7XG4gIH1cblxuICBwcml2YXRlIGNvbG9yRGl2U3dpdGNoX0NvbXBvbmVudEdyb3VwKG9uX29mZjogYm9vbGVhbiwgaXNVcGRhdGUgPSB0cnVlKSB7XG4gICAgbGV0IHZpZXdlciA9IHRoaXMudmlld2VyIGFzIFZpZXdlcjtcbiAgICBsZXQgcHJvY2VzcyA9IHRoaXMudmlld2VyLnByb2Nlc3M7XG5cbiAgICBsZXQgY29tcG9uZW50R3JvdXBzID0gcHJvY2Vzcy5maW5kUmVuZGVyT2JqZWN0QnlOYW1lKFxuICAgICAgXCLmnoTku7bliIbnu4TliIboibJcIlxuICAgICkgYXMgRGVzaWduQmFzZU9iamVjdDtcbiAgICBpZiAoY29tcG9uZW50R3JvdXBzKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbXBvbmVudEdyb3Vwcy5jaGlsZE9iamVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IG9iaiA9IGNvbXBvbmVudEdyb3Vwcy5jaGlsZE9iamVjdHNbXG4gICAgICAgICAgaVxuICAgICAgICBdIGFzIENvbG9yRGl2Q29tcG9uZW50R3JvdXBPYmplY3Q7XG5cbiAgICAgICAgaWYgKG9iai5jaGVja0J1c2luZXNzU3RhdGVJc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgdGhpcy5zZXRBbGxDb21wb25lbnRHcm91cFZpc2libGUob2JqLm5hbWUpO1xuXG4gICAgICAgICAgaWYgKG9uX29mZikge1xuICAgICAgICAgICAgb2JqLmFjdGl2ZSh2aWV3ZXIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvYmouaW5hY3RpdmUodmlld2VyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG9uX29mZikge1xuICAgICAgICBsZXQgY3V0bGluZSA9IHt9O1xuICAgICAgICBpZiAoY29tcG9uZW50R3JvdXBzKSB7XG4gICAgICAgICAgLy8gc3RvcmUuY29tbWl0KFwic2V0TGVnZW5kXCIsIHt9KTtcbiAgICAgICAgICAvLyBzdG9yZS5jb21taXQoXCJzZXRMZWdlbmRUaXRsZVwiLCBcIlwiKTtcbiAgICAgICAgICAvLyBzdG9yZS5jb21taXQoXCJzZXRMZWdlbmRSaWdodFRleHRcIiwgXCJcIik7XG4gICAgICAgICAgTGVnZW5kTWFuYWdlLmRlc3RvcnkodGhpcy5lbGVtZW50S2V5KTtcblxuICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29tcG9uZW50R3JvdXBzLmNoaWxkT2JqZWN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbGV0IG9iaiA9IGNvbXBvbmVudEdyb3Vwcy5jaGlsZE9iamVjdHNbXG4gICAgICAgICAgICAgIGlcbiAgICAgICAgICAgIF0gYXMgQ29sb3JEaXZDb21wb25lbnRHcm91cE9iamVjdDtcbiAgICAgICAgICAgIGlmIChvYmouY2hlY2tCdXNpbmVzc1N0YXRlSXNBY3RpdmUoKSkge1xuICAgICAgICAgICAgICBsZXQgY29sb3IgPSBMb25nYW4uZGVlcENsb25lKG9iai5jb2xvcik7XG4gICAgICAgICAgICAgIGN1dGxpbmVbb2JqLm5hbWVdID0gY29sb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCBjb21wb25lbnQgPSBMZWdlbmRNYW5hZ2UuY3JlYXRlKFxuICAgICAgICAgICAgdGhpcy5lbGVtZW50S2V5LFxuICAgICAgICAgICAgY3V0bGluZSxcbiAgICAgICAgICAgIFwiXCIsXG4gICAgICAgICAgICBcIlwiLFxuICAgICAgICAgICAgXCJcIlxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKHRoaXMuc2hvd0VuZ2xpc2hUZXh0KSB7XG4gICAgICAgICAgICAvLyBzdG9yZS5jb21taXQoXCJzZXRMZWdlbmRUaXRsZVwiLCBcIlNldCBDb2xvcnNcIik7XG4gICAgICAgICAgICAvLyBzdG9yZS5jb21taXQoXCJzZXRMZWdlbmRMZWZ0VGV4dFwiLCBcIkNvbG9yXCIpO1xuICAgICAgICAgICAgLy8gc3RvcmUuY29tbWl0KFwic2V0TGVnZW5kUmlnaHRUZXh0XCIsIFwiU2V0IE5hbWVcIik7XG4gICAgICAgICAgICBjb21wb25lbnQudGl0bGUgPSBcIlNldCBDb2xvcnNcIjtcbiAgICAgICAgICAgIGNvbXBvbmVudC5sZWZ0VGV4dCA9IFwiQ29sb3JcIjtcbiAgICAgICAgICAgIGNvbXBvbmVudC5yaWdodFRleHQgPSBcIlNldCBOYW1lXCI7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHN0b3JlLmNvbW1pdChcInNldExlZ2VuZFRpdGxlXCIsIFwi6Ieq5a6a5LmJ5p6E5Lu25YiG57uE5YiG6ImyXCIpO1xuICAgICAgICAgICAgLy8gc3RvcmUuY29tbWl0KFwic2V0TGVnZW5kTGVmdFRleHRcIiwgXCLpopzoibJcIik7XG4gICAgICAgICAgICAvLyBzdG9yZS5jb21taXQoXCJzZXRMZWdlbmRSaWdodFRleHRcIiwgXCLliIbnu4TlkI1cIik7XG4gICAgICAgICAgICBjb21wb25lbnQudGl0bGUgPSBcIuiHquWumuS5ieaehOS7tuWIhue7hOWIhuiJslwiO1xuICAgICAgICAgICAgY29tcG9uZW50LmxlZnRUZXh0ID0gXCLpopzoibJcIjtcbiAgICAgICAgICAgIGNvbXBvbmVudC5yaWdodFRleHQgPSBcIuWIhue7hOWQjVwiO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIHN0b3JlLmNvbW1pdChcInNldExlZ2VuZFwiLCBjdXRsaW5lKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gc3RvcmUuY29tbWl0KFwic2V0TGVnZW5kXCIsIHt9KTtcbiAgICAgICAgLy8gc3RvcmUuY29tbWl0KFwic2V0TGVnZW5kVGl0bGVcIiwgXCJcIik7XG4gICAgICAgIC8vIHN0b3JlLmNvbW1pdChcInNldExlZ2VuZFJpZ2h0VGV4dFwiLCBcIlwiKTtcbiAgICAgICAgTGVnZW5kTWFuYWdlLmRlc3RvcnkodGhpcy5lbGVtZW50S2V5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzVXBkYXRlKSB0aGlzLnZpZXdlci51cGRhdGVEaXNwbGF5KCk7XG4gIH1cblxuICBwcml2YXRlIHNldEFsbENvbXBvbmVudEdyb3VwVmlzaWJsZShncm91cE5hbWU6IHN0cmluZykge1xuICAgIGxldCB2aWV3ZXIgPSB0aGlzLnZpZXdlciBhcyBWaWV3ZXI7XG4gICAgbGV0IHByb2Nlc3MgPSB0aGlzLnZpZXdlci5wcm9jZXNzO1xuXG4gICAgbGV0IGNvbXBvbmVudEdyb3VwcyA9IHByb2Nlc3MuZmluZFJlbmRlck9iamVjdEJ5TmFtZShcbiAgICAgIFwi5p6E5Lu25YiG57uE5YiG6ImyXCJcbiAgICApIGFzIERlc2lnbkJhc2VPYmplY3Q7XG4gICAgaWYgKGNvbXBvbmVudEdyb3Vwcykge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb21wb25lbnRHcm91cHMuY2hpbGRPYmplY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBvYmogPSBjb21wb25lbnRHcm91cHMuY2hpbGRPYmplY3RzW1xuICAgICAgICAgIGlcbiAgICAgICAgXSBhcyBDb2xvckRpdkNvbXBvbmVudEdyb3VwT2JqZWN0O1xuXG4gICAgICAgIGlmIChvYmoubmFtZSA9PT0gZ3JvdXBOYW1lKSB7XG4gICAgICAgICAgaWYgKG9iai5jaGVja0J1c2luZXNzU3RhdGVJc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgICBvYmouaXNWaXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgIG9iai5idXNpbmVzc1N0YXRlID0gQnVzaW5lc3NTdGF0ZS5FZGl0aW5nO1xuICAgICAgICAgICAgb2JqLnNldENoaWxkVmlzaWJsZSh2aWV3ZXIsIHRydWUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOWIhuiJsuaYvuekuuW8gOWFs++8jOi+k+WFpeeahOWIhuiJsuaViOaenOi1t+aViO+8jOWFtuS9meWIhuiJsuaViOaenOWFs+mXrS5cbiAgICogQHBhcmFtIHN0YXRlIOaemuS4vuexu+Wei1xuICAgKi9cbiAgY29sb3JTd2l0Y2goc3RhdGU6IFN3aXRjaENvbG9yRGl2aWRlLCBpc1VwZGF0ZSA9IHRydWUpIHtcbiAgICBzd2l0Y2ggKHN0YXRlKSB7XG4gICAgICBjYXNlIFN3aXRjaENvbG9yRGl2aWRlLkdydXBOYW1lOlxuICAgICAgICB0aGlzLmNvbG9yRGl2U3dpdGNoX0dydXBUaGlja25lc3MoZmFsc2UsIGlzVXBkYXRlKTtcbiAgICAgICAgdGhpcy5jb2xvcmREaXZTd2l0Y2hfTWdyb3YoZmFsc2UsIGlzVXBkYXRlKTtcbiAgICAgICAgdGhpcy5jb2xvcmREaXZTd2l0Y2hfQ29ycnooZmFsc2UsIGlzVXBkYXRlKTtcbiAgICAgICAgdGhpcy5jb2xvckRpdlN3aXRjaF9Db21wb25lbnRHcm91cChmYWxzZSwgaXNVcGRhdGUpO1xuXG4gICAgICAgIHRoaXMuY29sb3JEaXZTd2l0Y2hfR3J1cE5hbWUodHJ1ZSwgaXNVcGRhdGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgU3dpdGNoQ29sb3JEaXZpZGUuR3J1cFRoaWNrbmVzczpcbiAgICAgICAgdGhpcy5jb2xvckRpdlN3aXRjaF9HcnVwTmFtZShmYWxzZSwgaXNVcGRhdGUpO1xuICAgICAgICB0aGlzLmNvbG9yZERpdlN3aXRjaF9NZ3JvdihmYWxzZSwgaXNVcGRhdGUpO1xuICAgICAgICB0aGlzLmNvbG9yZERpdlN3aXRjaF9Db3JyeihmYWxzZSwgaXNVcGRhdGUpO1xuICAgICAgICB0aGlzLmNvbG9yRGl2U3dpdGNoX0NvbXBvbmVudEdyb3VwKGZhbHNlLCBpc1VwZGF0ZSk7XG5cbiAgICAgICAgdGhpcy5jb2xvckRpdlN3aXRjaF9HcnVwVGhpY2tuZXNzKHRydWUsIGlzVXBkYXRlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFN3aXRjaENvbG9yRGl2aWRlLk1ncm92OlxuICAgICAgICB0aGlzLmNvbG9yRGl2U3dpdGNoX0dydXBOYW1lKGZhbHNlLCBpc1VwZGF0ZSk7XG4gICAgICAgIHRoaXMuY29sb3JEaXZTd2l0Y2hfR3J1cFRoaWNrbmVzcyhmYWxzZSwgaXNVcGRhdGUpO1xuICAgICAgICB0aGlzLmNvbG9yZERpdlN3aXRjaF9Db3JyeihmYWxzZSwgaXNVcGRhdGUpO1xuICAgICAgICB0aGlzLmNvbG9yRGl2U3dpdGNoX0NvbXBvbmVudEdyb3VwKGZhbHNlLCBpc1VwZGF0ZSk7XG5cbiAgICAgICAgdGhpcy5jb2xvcmREaXZTd2l0Y2hfTWdyb3YodHJ1ZSwgaXNVcGRhdGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgU3dpdGNoQ29sb3JEaXZpZGUuQ29ycno6XG4gICAgICAgIHRoaXMuY29sb3JEaXZTd2l0Y2hfR3J1cE5hbWUoZmFsc2UsIGlzVXBkYXRlKTtcbiAgICAgICAgdGhpcy5jb2xvckRpdlN3aXRjaF9HcnVwVGhpY2tuZXNzKGZhbHNlLCBpc1VwZGF0ZSk7XG4gICAgICAgIHRoaXMuY29sb3JkRGl2U3dpdGNoX01ncm92KGZhbHNlLCBpc1VwZGF0ZSk7XG4gICAgICAgIHRoaXMuY29sb3JEaXZTd2l0Y2hfQ29tcG9uZW50R3JvdXAoZmFsc2UsIGlzVXBkYXRlKTtcblxuICAgICAgICB0aGlzLmNvbG9yZERpdlN3aXRjaF9Db3Jyeih0cnVlLCBpc1VwZGF0ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBTd2l0Y2hDb2xvckRpdmlkZS5Db21wb25lbnRHcm91cDpcbiAgICAgICAgdGhpcy5jb2xvckRpdlN3aXRjaF9HcnVwTmFtZShmYWxzZSwgaXNVcGRhdGUpO1xuICAgICAgICB0aGlzLmNvbG9yRGl2U3dpdGNoX0dydXBUaGlja25lc3MoZmFsc2UsIGlzVXBkYXRlKTtcbiAgICAgICAgdGhpcy5jb2xvcmREaXZTd2l0Y2hfTWdyb3YoZmFsc2UsIGlzVXBkYXRlKTtcbiAgICAgICAgdGhpcy5jb2xvcmREaXZTd2l0Y2hfQ29ycnooZmFsc2UsIGlzVXBkYXRlKTtcblxuICAgICAgICB0aGlzLmNvbG9yRGl2U3dpdGNoX0NvbXBvbmVudEdyb3VwKHRydWUsIGlzVXBkYXRlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFN3aXRjaENvbG9yRGl2aWRlLkNhbmNlbDpcbiAgICAgICAgdGhpcy5jb2xvckRpdlN3aXRjaF9HcnVwTmFtZShmYWxzZSwgaXNVcGRhdGUpO1xuICAgICAgICB0aGlzLmNvbG9yRGl2U3dpdGNoX0dydXBUaGlja25lc3MoZmFsc2UsIGlzVXBkYXRlKTtcbiAgICAgICAgdGhpcy5jb2xvcmREaXZTd2l0Y2hfTWdyb3YoZmFsc2UsIGlzVXBkYXRlKTtcbiAgICAgICAgdGhpcy5jb2xvcmREaXZTd2l0Y2hfQ29ycnooZmFsc2UsIGlzVXBkYXRlKTtcbiAgICAgICAgdGhpcy5jb2xvckRpdlN3aXRjaF9Db21wb25lbnRHcm91cChmYWxzZSwgaXNVcGRhdGUpO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog5p+Q5Liq5YiG57uE6K6+572u5LqG6aKc6Imy5pe277yM5Y2V54us5pi+56S6L+makOiXj+ivpeWIhue7hOWIhuiJsueahOaViOaenFxuICAgKiBAcGFyYW0gZ3JvdXBOYW1lXG4gICAqIEBwYXJhbSBvbl9vZmZcbiAgICovXG4gIGNvbXBvbmVudEdyb3VwQ29sb3JWaXNpYmxlU3dpdGNoKGdyb3VwTmFtZTogc3RyaW5nLCBvbl9vZmY6IGJvb2xlYW4pIHtcbiAgICBsZXQgdmlld2VyID0gdGhpcy52aWV3ZXIgYXMgVmlld2VyO1xuICAgIGxldCBwcm9jZXNzID0gdGhpcy52aWV3ZXIucHJvY2VzcztcblxuICAgIGxldCBjb21wb25lbnRHcm91cHMgPSBwcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RCeU5hbWUoXG4gICAgICBcIuaehOS7tuWIhue7hOWIhuiJslwiXG4gICAgKSBhcyBEZXNpZ25CYXNlT2JqZWN0O1xuICAgIGlmIChjb21wb25lbnRHcm91cHMpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29tcG9uZW50R3JvdXBzLmNoaWxkT2JqZWN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgb2JqID0gY29tcG9uZW50R3JvdXBzLmNoaWxkT2JqZWN0c1tcbiAgICAgICAgICBpXG4gICAgICAgIF0gYXMgQ29sb3JEaXZDb21wb25lbnRHcm91cE9iamVjdDtcblxuICAgICAgICBpZiAob2JqLm5hbWUgPT09IGdyb3VwTmFtZSkge1xuICAgICAgICAgIGlmIChvYmouY2hlY2tCdXNpbmVzc1N0YXRlSXNBY3RpdmUoKSkge1xuICAgICAgICAgICAgb2JqLmJ1c2luZXNzU3RhdGUgPSBCdXNpbmVzc1N0YXRlLkVkaXRpbmc7XG4gICAgICAgICAgICBpZiAob25fb2ZmKSB7XG4gICAgICAgICAgICAgIG9iai5hY3RpdmUodmlld2VyKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG9iai5pbmFjdGl2ZSh2aWV3ZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb2JqLnNldENoaWxkVmlzaWJsZSh2aWV3ZXIsIG9uX29mZik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnZpZXdlci51cGRhdGVEaXNwbGF5KCk7XG4gIH1cblxuICB3YXZlU3dpdGNoKG9uX29mZjogYm9vbGVhbikge1xuICAgIGxldCBwcm9jZXNzID0gdGhpcy52aWV3ZXIucHJvY2VzcyBhcyBQcm9jZXNzO1xuICAgIGxldCB3YXZlID0gcHJvY2Vzcy5maW5kUmVuZGVyT2JqZWN0QnlOYW1lKFwi5rOi6Z2iXCIpIGFzIFdhdmVPYmplY3Q7XG4gICAgaWYgKCF3YXZlKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgbGV0IGN1cnJlbnRXYXZlSXRlbU9iamVjdCA9IHByb2Nlc3MuZmluZENhZU9iamVjdEJ5TmFtZUluQ2hpbGRPYmplY3QoXG4gICAgICB3YXZlLFxuICAgICAgdGhpcy5jdXJyZW50U2VsZWN0V2F2ZUl0ZW1OYW1lXG4gICAgKSBhcyBXYXZlSXRlbU9iamVjdDtcbiAgICBpZiAoY3VycmVudFdhdmVJdGVtT2JqZWN0KSB7XG4gICAgICBpZiAob25fb2ZmKSB7XG4gICAgICAgIGN1cnJlbnRXYXZlSXRlbU9iamVjdC5hY3RpdmUodGhpcy52aWV3ZXIgYXMgVmlld2VyKTtcbiAgICAgICAgc3RvcmUuc3RhdGUuaW5mbyA9IGN1cnJlbnRXYXZlSXRlbU9iamVjdC50b1N0cmluZygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3VycmVudFdhdmVJdGVtT2JqZWN0LmluYWN0aXZlKHRoaXMudmlld2VyIGFzIFZpZXdlcik7XG4gICAgICAgIHN0b3JlLnN0YXRlLmluZm8gPSBudWxsO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBzdG9yZS5zdGF0ZS5pbmZvID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnZpZXdlci51cGRhdGVEaXNwbGF5KCk7XG4gIH1cblxuICAvKipcbiAgICog5Zyf5bGC5byA5YWz5o6l5Y+jXG4gICAqIEBwYXJhbSBvbl9vZmZcbiAgICogQHJldHVybnNcbiAgICovXG4gIGJvcmVob2xlU3dpdGNoKG9uX29mZjogYm9vbGVhbikge1xuICAgIGxldCBwcm9jZXNzID0gdGhpcy52aWV3ZXIucHJvY2VzcyBhcyBQcm9jZXNzO1xuICAgIGxldCBwYXJlbnROb2RlID0gcHJvY2Vzcy5maW5kUmVuZGVyT2JqZWN0QnlOYW1lKFxuICAgICAgXCLlnJ/lsYLlkozms6LpnaJcIlxuICAgICkgYXMgRGVzaWduQmFzZU9iamVjdDtcbiAgICBpZiAoIXBhcmVudE5vZGUpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG4gICAgbGV0IGVsZW1lbnRLZXkgPSBcInNvaWxkXCI7XG4gICAgaWYgKHBhcmVudE5vZGUgJiYgb25fb2ZmKSB7XG4gICAgICB0aGlzLmJvcmVob2xlQ3V0TGluZURpc3BsYXkgPSB0cnVlO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJlbnROb2RlLmNoaWxkT2JqZWN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAocGFyZW50Tm9kZS5jaGlsZE9iamVjdHNbaV0gYXMgQm9yZWhvbGVzT2JqZWN0KS5hY3RpdmUoKTtcbiAgICAgIH1cblxuICAgICAgTGVnZW5kTWFuYWdlLmNyZWF0ZShcbiAgICAgICAgZWxlbWVudEtleSxcbiAgICAgICAgdGhpcy5ib3JlaG9sZUxlZ2VuZCxcbiAgICAgICAgXCLlnJ/lsYLmlbDmja5cIixcbiAgICAgICAgXCJcIixcbiAgICAgICAgXCLlnJ/lsYLlkI1cIixcbiAgICAgICAge1xuICAgICAgICAgIHJpZ2h0OiBcIjBweFwiLFxuICAgICAgICAgIGJvdHRvbTogXCIwcHhcIixcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5ib3JlaG9sZUN1dExpbmVEaXNwbGF5ID0gZmFsc2U7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFyZW50Tm9kZS5jaGlsZE9iamVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgKHBhcmVudE5vZGUuY2hpbGRPYmplY3RzW2ldIGFzIEJvcmVob2xlc09iamVjdCkuaW5hY3RpdmUoKTtcbiAgICAgIH1cbiAgICAgIExlZ2VuZE1hbmFnZS5kZXN0b3J5KGVsZW1lbnRLZXkpO1xuICAgIH1cblxuICAgIHRoaXMudmlld2VyLnVwZGF0ZURpc3BsYXkoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDmo4Dmn6XmmK/lkKbmnInmoanlnJ/mlbDmja5cbiAgICogQHJldHVybnNcbiAgICovXG4gIGNoZWNrUFNJKCkge1xuICAgIGxldCBleGlzdCA9IGZhbHNlO1xuICAgIGlmICghKHRoaXMudmlld2VyIGFzIFZpZXdlcikuZGF0UmVhZGVyTWFuYWdlci5wc2lvcHQpIHtcbiAgICAgIGNvbnNvbGUubG9nKFwi5rKh5pyJ5qGp5Zyf5pWw5o2uLlwiKTtcbiAgICAgIGV4aXN0ID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIGV4aXN0ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXhpc3Q7XG4gIH1cblxuICAvKipcbiAgICog5qOA5p+l5piv5ZCm5a2Y5Zyo5rW35Ya15pWw5o2uXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBjaGVja1NlYWlucCgpIHtcbiAgICBsZXQgZXhpc3QgPSBmYWxzZTtcbiAgICBsZXQgcm8gPSB0aGlzLnZpZXdlci5wcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RCeVR5cGUoXCJTZWFzdGF0ZUxkb3B0XCIpO1xuICAgIGlmIChybykge1xuICAgICAgZXhpc3QgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBleGlzdDtcbiAgfVxuXG4gIC8qKlxuICAgKiDmnInpmZDlhYPliIfmjaLmmL7npLrpmpDol49cbiAgICovXG4gIGZpbml0ZUVsZW1lbnRTd2l0Y2godmlzaWJsZTogYm9vbGVhbikge1xuICAgIGxldCBtZW1iZXJzID0gdGhpcy52aWV3ZXIucHJvY2Vzcy5maW5kUmVuZGVyT2JqZWN0c0J5VHlwZShcIk1lbWJlck9iamVjdFwiKTtcbiAgICBpZiAodmlzaWJsZSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZW1iZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBtZW1iZXIgPSBtZW1iZXJzW2ldIGFzIE1lbWJlck9iamVjdDtcbiAgICAgICAgbWVtYmVyLnNlZ21lbnRMZW5ndGhDb2VmZiA9IE1lbWJlck9iamVjdC5nX0dyaWRSYXRpbztcbiAgICAgICAgaWYgKG1lbWJlci5zZWdtZW50TGVuZ3RoQ29lZmYgPT09IC0xKSB7XG4gICAgICAgICAgbWVtYmVyLnNlZ21lbnRMZW5ndGhDb2VmZiA9IDAuOTtcbiAgICAgICAgfVxuICAgICAgICBtZW1iZXIuc2V0TmVlZFVwZGF0ZSgpO1xuICAgICAgfVxuICAgICAgdGhpcy52aWV3ZXIudXBkYXRlRGlzcGxheSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1lbWJlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IG1lbWJlciA9IG1lbWJlcnNbaV0gYXMgTWVtYmVyT2JqZWN0O1xuICAgICAgICBtZW1iZXIuc2VnbWVudExlbmd0aENvZWZmID0gMTtcbiAgICAgICAgbWVtYmVyLnNldE5lZWRVcGRhdGUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnZpZXdlci51cGRhdGVEaXNwbGF5KCk7XG4gIH1cblxuICAvKipcbiAgICog57yW6L6R6aKc6ImyKHJnYmHmlbDnu4TvvIgwLTI1NSnnpLrkvovigJTigJRbMjU1LDI1NSwyNTUsMV1cbiAgICogQHBhcmFtIGJhY2tncm91bmRDb2xvciDog4zmma/popzoibJcbiAgICogQHBhcmFtIGpvaW50Q29sb3Ig56m66Ze054K56aKc6ImyXG4gICAqIEBwYXJhbSBtZW1iZXJDb2xvckxpbmUg5p2G5Lu26aKc6Imy4oCU4oCU57q/5Zu+XG4gICAqIEBwYXJhbSBtZW1iZXJDb2xvckZhY2Ug5p2G5Lu26aKc6Imy4oCU4oCU5LiJ57u05L2TXG4gICAqIEBwYXJhbSBwbGF0ZUNvbG9yIOadv+minOiJslxuICAgKi9cbiAgZWRpdENvbG9ycyhcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IG51bWJlcltdLFxuICAgIGpvaW50Q29sb3I6IG51bWJlcltdLFxuICAgIG1lbWJlckNvbG9yTGluZTogbnVtYmVyW10sXG4gICAgbWVtYmVyQ29sb3JGYWNlOiBudW1iZXJbXSxcbiAgICBwbGF0ZUNvbG9yOiBudW1iZXJbXVxuICApIHtcbiAgICBPYmplY3RDb2xvci5qb2ludENvbG9yID0gam9pbnRDb2xvcjtcbiAgICBPYmplY3RDb2xvci5tZW1iZXJGYWNlQ29sb3IgPSBtZW1iZXJDb2xvckZhY2U7XG4gICAgT2JqZWN0Q29sb3IubWVtYmVyTGluZUNvbG9yID0gbWVtYmVyQ29sb3JMaW5lO1xuICAgIE9iamVjdENvbG9yLnBsYXRlQ29sb3IgPSBwbGF0ZUNvbG9yO1xuXG4gICAgdGhpcy52aWV3ZXIuYmFja2dyb3VuZENvbG9yID0gYmFja2dyb3VuZENvbG9yO1xuXG4gICAgbGV0IGpvaW50cyA9IHRoaXMudmlld2VyLnByb2Nlc3MuZmluZFJlbmRlck9iamVjdHNCeVR5cGUoXCJKb2ludE9iamVjdFwiKTtcbiAgICBqb2ludHMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgaXRlbS5zZWdtZW50LmNvbG9yLnNldE1hcmtlcihqb2ludENvbG9yKTtcbiAgICB9KTtcblxuICAgIGxldCBtZW1iZXJzID0gdGhpcy52aWV3ZXIucHJvY2Vzcy5maW5kUmVuZGVyT2JqZWN0c0J5VHlwZShcbiAgICAgIFwiTWVtYmVyT2JqZWN0XCJcbiAgICApIGFzIE1lbWJlck9iamVjdFtdO1xuICAgIG1lbWJlcnMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgaXRlbS5mYWNlQ29sb3IgPSBtZW1iZXJDb2xvckZhY2U7XG4gICAgICBpdGVtLmxpbmVDb2xvciA9IG1lbWJlckNvbG9yTGluZTtcbiAgICAgIGl0ZW0uc2V0TmVlZFVwZGF0ZSgpO1xuICAgIH0pO1xuXG4gICAgbGV0IHBsYXRlcyA9IHRoaXMudmlld2VyLnByb2Nlc3MuZmluZFJlbmRlck9iamVjdHNCeVR5cGUoXG4gICAgICBcIlBsYXRlT2JqZWN0XCJcbiAgICApIGFzIFBsYXRlT2JqZWN0W107XG4gICAgcGxhdGVzLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIGl0ZW0uZmFjZUNvbG9yID0gcGxhdGVDb2xvcjtcbiAgICAgIGl0ZW0uc2V0TmVlZFVwZGF0ZSgpO1xuICAgIH0pO1xuXG4gICAgdGhpcy52aWV3ZXIudXBkYXRlRGlzcGxheSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIOminOiJsuWAvOekuuS+izpcIiNmZmZmZmZcIi0tLeeZveiJsi5cbiAgICogQHBhcmFtIGpvaW50TGFiZWwg56m66Ze054K55qCH562+6aKc6ImyXG4gICAqIEBwYXJhbSBtZW1iZXJMYWJlbCDmnYbku7bmoIfnrb7popzoibJcbiAgICogQHBhcmFtIHBsYXRlTGFiZWwg5p2/5qCH562+6aKc6ImyXG4gICAqIEBwYXJhbSBsb2FkTGFiZWwg6I236L296aKc6ImyXG4gICAqL1xuICBlZGl0TGFiZWxDb2xvcnMoXG4gICAgam9pbnRMYWJlbDogc3RyaW5nLFxuICAgIG1lbWJlckxhYmVsOiBzdHJpbmcsXG4gICAgcGxhdGVMYWJlbDogc3RyaW5nLFxuICAgIGxvYWRMYWJlbDogc3RyaW5nXG4gICkge1xuICAgIE9iamVjdENvbG9yLmpvaW50TGFiZWxDb2xvciA9IGpvaW50TGFiZWw7XG4gICAgT2JqZWN0Q29sb3IubWVtYmVyTGFiZWxDb2xvciA9IG1lbWJlckxhYmVsO1xuICAgIE9iamVjdENvbG9yLnBsYXRlTGFiZWxDb2xvciA9IHBsYXRlTGFiZWw7XG4gICAgT2JqZWN0Q29sb3IubG9hZExhYmVsQ29sb3IgPSBsb2FkTGFiZWw7XG5cbiAgICBsZXQgam9pbnRzID0gdGhpcy52aWV3ZXIucHJvY2Vzcy5maW5kUmVuZGVyT2JqZWN0c0J5VHlwZShcbiAgICAgIFwiSm9pbnRPYmplY3RcIlxuICAgICkgYXMgSm9pbnRPYmplY3RbXTtcbiAgICBqb2ludHMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgaXRlbS5pc0RyYXdTdmcgPSBmYWxzZTtcbiAgICAgIGl0ZW0uaXNEcmF3U3ZnID0gdHJ1ZTtcbiAgICB9KTtcblxuICAgIGxldCBtZW1iZXJzID0gdGhpcy52aWV3ZXIucHJvY2Vzcy5maW5kUmVuZGVyT2JqZWN0c0J5VHlwZShcbiAgICAgIFwiTWVtYmVyT2JqZWN0XCJcbiAgICApIGFzIE1lbWJlck9iamVjdFtdO1xuICAgIG1lbWJlcnMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgaXRlbS5pc0RyYXdTdmcgPSBmYWxzZTtcbiAgICAgIGl0ZW0uaXNEcmF3U3ZnID0gdHJ1ZTtcbiAgICB9KTtcblxuICAgIGxldCBwbGF0ZXMgPSB0aGlzLnZpZXdlci5wcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RzQnlUeXBlKFxuICAgICAgXCJQbGF0ZU9iamVjdFwiXG4gICAgKSBhcyBQbGF0ZU9iamVjdFtdO1xuICAgIHBsYXRlcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBpdGVtLmlzRHJhd1N2ZyA9IGZhbHNlO1xuICAgICAgaXRlbS5pc0RyYXdTdmcgPSB0cnVlO1xuICAgIH0pO1xuXG4gICAgdGhpcy52aWV3ZXIuZXhlU2NlbmVDYW1lcmFDaGFuZ2VkKExvbmdhbi5Mb25nYW5Db3JlLkNhbWVyYUNoYW5nZVR5cGUuU2NhbGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIOS/ruaUueaIqumdolZpZXdlcueahOiDjOaZr+minOiJsuOAgee6v+adoeminOiJsuOAgeeureWktOminOiJsuOAgeaWh+Wtl+minOiJslxuICAgKiBAcGFyYW0gc2VjdGlvblZpZXdlciDmiKrpnaJWaWV3ZXLlr7nosaFcbiAgICogQHBhcmFtIGJhY2tncm91bmRDb2xvciDog4zmma/popzoibI6IFsyNTUsMCwwLDFdXG4gICAqIEBwYXJhbSBsaW5lTGFiZWxDb2xvciDnur/mnaHpopzoibI6IFwiI2ZmZlwiXG4gICAqIEBwYXJhbSBhcnJvd0xhYmVsQ29sb3Ig566t5aS06aKc6ImyOiBcIiNmZmZcIlxuICAgKiBAcGFyYW0gdGV4dExhYmVsQ29sb3Ig5paH5a2X6aKc6ImyOiBcIiNmZmZcIlxuICAgKi9cbiAgZWRpdFNlY3Rpb25MYWJlbENvbG9ycyhcbiAgICBzZWN0aW9uVmlld2VyOiBTZWN0aW9uVmlld2VyLFxuICAgIGJhY2tncm91bmRDb2xvcjogbnVtYmVyW10sXG4gICAgbGluZUxhYmVsQ29sb3I6IHN0cmluZyxcbiAgICBhcnJvd0xhYmVsQ29sb3I6IHN0cmluZyxcbiAgICB0ZXh0TGFiZWxDb2xvcjogc3RyaW5nXG4gICkge1xuICAgIC8vXG4gICAgaWYgKGJhY2tncm91bmRDb2xvcikge1xuICAgICAgc2VjdGlvblZpZXdlci5iYWNrZ3JvdW5kQ29sb3IgPSBiYWNrZ3JvdW5kQ29sb3I7XG4gICAgfVxuICAgIGlmIChsaW5lTGFiZWxDb2xvcikge1xuICAgICAgSW5zdGFuY2VTZWN0aW9uT2JqZWN0LmxpbmVMYWJlbENvbG9yID0gbGluZUxhYmVsQ29sb3I7XG4gICAgfVxuICAgIGlmIChhcnJvd0xhYmVsQ29sb3IpIHtcbiAgICAgIEluc3RhbmNlU2VjdGlvbk9iamVjdC5hcnJvd0xhYmVsQ29sb3IgPSBhcnJvd0xhYmVsQ29sb3I7XG4gICAgfVxuICAgIGlmICh0ZXh0TGFiZWxDb2xvcikge1xuICAgICAgSW5zdGFuY2VTZWN0aW9uT2JqZWN0LnRleHRMYWJlbENvbG9yID0gdGV4dExhYmVsQ29sb3I7XG4gICAgfVxuXG4gICAgbGV0IHJvb3QgPSBzZWN0aW9uVmlld2VyLnJlbmRlck9iamVjdDtcbiAgICByb290Py5jaGlsZE9iamVjdHMuZm9yRWFjaCgoc2VjdGlvbikgPT4ge1xuICAgICAgaWYgKHNlY3Rpb24gaW5zdGFuY2VvZiBTZWN0aW9uT2JqZWN0KSB7XG4gICAgICAgIGxldCBpcm8gPSBzZWN0aW9uVmlld2VyLmZpbmRJbnN0YW5jZU9iamVjdChcbiAgICAgICAgICBzZWN0aW9uXG4gICAgICAgICkgYXMgSW5zdGFuY2VTZWN0aW9uT2JqZWN0O1xuICAgICAgICBpZiAoaXJvKSB7XG4gICAgICAgICAgaXJvLnJlbW92ZVN2ZygpO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgaXJvLmRyYXdTdmcoKTtcbiAgICAgICAgICB9LCAxMCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiDliIfmjaJhY3RpdmVWaWV3ZXIuXG4gICAqIEBwYXJhbSBlbGVtZW50SWQgdmlld2Vy5omA5Zyo55qE5a655Zmo55qESWQuXG4gICAqL1xuICBzd2l0Y2hBY3RpdmVWaWV3ZXIoZWxlbWVudElkOiBzdHJpbmcpIHtcbiAgICBsZXQgcHJvY2VzcyA9IHRoaXMudmlld2VyLnByb2Nlc3M7XG4gICAgcHJvY2Vzcy52aWV3ZXJzLmZvckVhY2goKHZpKSA9PiB7XG4gICAgICBpZiAodmkuY29udGFpbmVyLmlkID09PSBlbGVtZW50SWQpIHtcbiAgICAgICAgcHJvY2Vzcy5hY3RpdmVWaWV3ZXIgPSB2aTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIOaYvuekuuWQhOS4quWOhuWPsueahOWQjeensC5cbiAgICogQHJldHVybnNcbiAgICovXG4gIHNob3dIaXN0b3J5TGlzdCgpIHtcbiAgICBsZXQgaGlzdG9yeU1hbmFnZXIgPSB0aGlzLnZpZXdlci5wcm9jZXNzLmhpc3RvcnlNYW5hZ2VyO1xuICAgIGxldCBsaXN0ID0gaGlzdG9yeU1hbmFnZXIuc3RhdGVMaXN0O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5jb3VudCgpOyBpKyspIHtcbiAgICAgIGNvbnNvbGUubG9nKGxpc3QuaXRlbXNbaV0ubmFtZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxpc3Q7XG4gIH1cblxuICAvKipcbiAgICog5Zue5ruaL+mHjeWBmuWOhuWPsuebtOWIsOS4i+agh+WkhC5cbiAgICogQHBhcmFtIGluZGV4XG4gICAqL1xuICBoaXN0b3J5Um9sbChpbmRleDogbnVtYmVyKSB7XG4gICAgbGV0IGhpc3RvcnlNYW5hZ2VyID0gdGhpcy52aWV3ZXIucHJvY2Vzcy5oaXN0b3J5TWFuYWdlcjtcbiAgICBsZXQgY3VycmVudElkeCA9IGhpc3RvcnlNYW5hZ2VyLmN1cnJlbnRTdGF0ZUluZGV4O1xuXG4gICAgaWYgKGN1cnJlbnRJZHggPCBpbmRleCkge1xuICAgICAgbGV0IHRpbWUgPSBpbmRleCAtIGN1cnJlbnRJZHg7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRpbWU7IGkrKykge1xuICAgICAgICB0aGlzLnZpZXdlci5wcm9jZXNzLmhpc3RvcnlNYW5hZ2VyLnJvbGxGb3J3YXJkKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjdXJyZW50SWR4ID4gaW5kZXgpIHtcbiAgICAgIGxldCB0aW1lID0gY3VycmVudElkeCAtIGluZGV4O1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aW1lOyBpKyspIHtcbiAgICAgICAgdGhpcy52aWV3ZXIucHJvY2Vzcy5oaXN0b3J5TWFuYWdlci5yb2xsQmFjaygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIHRoaXMuc2hvd0hpc3RvcnlMaXN0KCk7XG4gIH1cblxuICAvKipcbiAgICog6I635Y+W6aG555uu5Lit55qE5YWo6YOo5bel5Ya15a+56LGhXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBnZXRMb2FkQ29uZGl0aW9uTGlzdCgpIHtcbiAgICBsZXQgbG9hZENvbmRpdGlvbnMgPSB0aGlzLnZpZXdlci5wcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RzQnlUeXBlKFxuICAgICAgXCJMb2FkQ29uZGl0aW9uT2JqZWN0XCJcbiAgICApO1xuICAgIHJldHVybiBsb2FkQ29uZGl0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiDojrflj5bpobnnm67kuK3nmoTlhajpg6jnu4TlkIjlt6XlhrXlr7nosaFcbiAgICogQHJldHVybnNcbiAgICovXG4gIGdldExvYWRDb25kaXRpb25Db21iaW5lTGlzdCgpIHtcbiAgICBsZXQgb2JqZWN0cyA9IHRoaXMudmlld2VyLnByb2Nlc3MuZmluZFJlbmRlck9iamVjdHNCeVR5cGUoXCJTZWFzdGF0ZUxjb21iXCIpO1xuICAgIHJldHVybiBvYmplY3RzO1xuICB9XG5cbiAgLyoqXG4gICAqIOa4hemZpHZpZXdlcueahFByb2Nlc3PmrovnlZnmlbDmja4uXG4gICAqL1xuICByZW1vdmVQcm9jZXNzRGF0YSgpIHtcbiAgICB0aGlzLnZpZXdlci5wcm9jZXNzLmNsZWFyUmVuZGVyT2JqZWN0cyh0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDmt7vliqDngrnojbfovb1cbiAgICogQHBhcmFtIGxvYWRDb25kaXRpb25STyDlt6XlhrXlr7nosaFcbiAgICogQHBhcmFtIGxvYWRHcm91cE5hbWUg6I236L2957uE5ZCNXG4gICAqIEBwYXJhbSBzZWxlY3RlZEpvaW50TmFtZSDmiYDpgInnqbrpl7TngrnlkI1cbiAgICogQHBhcmFtIGZ4XG4gICAqIEBwYXJhbSBmeVxuICAgKiBAcGFyYW0gZnpcbiAgICogQHBhcmFtIG14XG4gICAqIEBwYXJhbSBteVxuICAgKiBAcGFyYW0gbXpcbiAgICovXG4gIGFkZEpvaW50TG9hZChcbiAgICBsb2FkQ29uZGl0aW9uTmFtZTogc3RyaW5nLFxuICAgIGxvYWRHcm91cE5hbWU6IHN0cmluZyxcbiAgICBzZWxlY3RlZEpvaW50TmFtZTogc3RyaW5nLFxuICAgIGZ4OiBudW1iZXIsXG4gICAgZnk6IG51bWJlcixcbiAgICBmejogbnVtYmVyLFxuICAgIG14OiBudW1iZXIsXG4gICAgbXk6IG51bWJlcixcbiAgICBtejogbnVtYmVyXG4gICk6IG51bWJlciB7XG4gICAgbGV0IHZpZXdlciA9IHRoaXMudmlld2VyIGFzIFZpZXdlcjtcblxuICAgIC8vIOa3u+WKoOaIluS/ruaUueW3peWGtS5cbiAgICBsZXQgcHJldHJlYXRtZW50Uk8gPSB2aWV3ZXIucHJvY2Vzcy5maW5kUmVuZGVyT2JqZWN0QnlOYW1lKFxuICAgICAgXCLlkI7lpITnkIborqHnrpfnu5PmnpxcIlxuICAgICkgYXMgRGVzaWduQmFzZU9iamVjdDtcblxuICAgIGlmICghcHJldHJlYXRtZW50Uk8pIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoXCLmsqHmnIkn5ZCO5aSE55CG6K6h566X57uT5p6cJ+eahFJP6IqC54K5XCIpO1xuICAgICAgcmV0dXJuIDI7XG4gICAgfVxuXG4gICAgbGV0IGNvbmRpdGlvblBhcmVudCA9IHZpZXdlci5wcm9jZXNzLmZpbmRDYWVPYmplY3RCeU5hbWVJbkNoaWxkT2JqZWN0KFxuICAgICAgcHJldHJlYXRtZW50Uk8sXG4gICAgICBcIuiNt+i9veW3peWGtVwiXG4gICAgKSBhcyBEZXNpZ25CYXNlT2JqZWN0O1xuXG4gICAgaWYgKCFjb25kaXRpb25QYXJlbnQpIHtcbiAgICAgIGNvbmRpdGlvblBhcmVudCA9IG5ldyBEZXNpZ25CYXNlT2JqZWN0KCk7XG4gICAgICBjb25kaXRpb25QYXJlbnQuYnVzaW5lc3NTdGF0ZSA9IEJ1c2luZXNzU3RhdGUuQ3JlYXRpbmc7XG4gICAgICBjb25kaXRpb25QYXJlbnQubmFtZSA9IFwi6I236L295bel5Ya1XCI7XG4gICAgICB2aWV3ZXIucHJvY2Vzcy5hZGRSZW5kZXJPYmplY3QocHJldHJlYXRtZW50Uk8sIGNvbmRpdGlvblBhcmVudCk7XG4gICAgfVxuXG4gICAgbGV0IGxvYWRDb25kaXRpb25STyA9IG51bGw7XG4gICAgbG9hZENvbmRpdGlvblJPID0gdmlld2VyLnByb2Nlc3MuZmluZENhZU9iamVjdEJ5TmFtZUluQ2hpbGRPYmplY3QoXG4gICAgICBjb25kaXRpb25QYXJlbnQsXG4gICAgICBsb2FkQ29uZGl0aW9uTmFtZVxuICAgICkgYXMgTG9hZENvbmRpdGlvbk9iamVjdDtcbiAgICBpZiAoIWxvYWRDb25kaXRpb25STykge1xuICAgICAgbG9hZENvbmRpdGlvblJPID0gbmV3IExvYWRDb25kaXRpb25PYmplY3QobG9hZENvbmRpdGlvbk5hbWUpO1xuICAgICAgbG9hZENvbmRpdGlvblJPLmJ1c2luZXNzU3RhdGUgPSBCdXNpbmVzc1N0YXRlLkNyZWF0aW5nO1xuICAgICAgdmlld2VyLnByb2Nlc3MuYWRkUmVuZGVyT2JqZWN0KGNvbmRpdGlvblBhcmVudCwgbG9hZENvbmRpdGlvblJPKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9hZENvbmRpdGlvblJPLmJ1c2luZXNzU3RhdGUgPSBCdXNpbmVzc1N0YXRlLkVkaXRpbmc7XG4gICAgfVxuXG4gICAgbGV0IGxvYWRHcm91cFJPID0gdmlld2VyLnByb2Nlc3MuZmluZENhZU9iamVjdEJ5TmFtZUluQ2hpbGRPYmplY3QoXG4gICAgICBsb2FkQ29uZGl0aW9uUk8sXG4gICAgICBsb2FkR3JvdXBOYW1lXG4gICAgKSBhcyBMb2FkR3JvdXBPYmplY3Q7XG4gICAgaWYgKCFsb2FkR3JvdXBSTykge1xuICAgICAgbG9hZEdyb3VwUk8gPSBuZXcgTG9hZEdyb3VwT2JqZWN0KGxvYWRHcm91cE5hbWUpO1xuICAgICAgbG9hZEdyb3VwUk8uYnVzaW5lc3NTdGF0ZSA9IEJ1c2luZXNzU3RhdGUuQ3JlYXRpbmc7XG4gICAgICB2aWV3ZXIucHJvY2Vzcy5hZGRSZW5kZXJPYmplY3QobG9hZENvbmRpdGlvblJPLCBsb2FkR3JvdXBSTyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvYWRHcm91cFJPLmJ1c2luZXNzU3RhdGUgPSBCdXNpbmVzc1N0YXRlLkVkaXRpbmc7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsb2FkR3JvdXBSTy5jaGlsZE9iamVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBsb2FkID0gbG9hZEdyb3VwUk8uY2hpbGRPYmplY3RzW2ldO1xuICAgICAgaWYgKGxvYWQgaW5zdGFuY2VvZiBKb2ludExvYWRPYmplY3QpIHtcbiAgICAgICAgaWYgKGxvYWQuam9pbnROYW1lID09PSBzZWxlY3RlZEpvaW50TmFtZSkge1xuICAgICAgICAgIC8vIOWvueW6lOeahOW3peWGteOAgeW3peWGtee7hOeahOS4i+eahOepuumXtOeCueS4iuW3sue7j+WtmOWcqOeCueiNt+i9vS5cbiAgICAgICAgICByZXR1cm4gMztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBqb2ludExvYWQgPSBuZXcgSm9pbnRMb2FkT2JqZWN0KGxvYWRDb25kaXRpb25STy5uYW1lLCBsb2FkR3JvdXBOYW1lKTtcbiAgICBqb2ludExvYWQubmFtZSA9IFwiSm9pbnQ6XCIgKyBzZWxlY3RlZEpvaW50TmFtZTtcbiAgICBqb2ludExvYWQuYnVzaW5lc3NTdGF0ZSA9IEJ1c2luZXNzU3RhdGUuQ3JlYXRpbmc7XG4gICAgam9pbnRMb2FkLmpvaW50TmFtZSA9IHNlbGVjdGVkSm9pbnROYW1lO1xuXG4gICAgam9pbnRMb2FkLmZvcmNlWERpcmVjdGlvbiA9IGZ4O1xuICAgIGpvaW50TG9hZC5mb3JjZVlEaXJlY3Rpb24gPSBmeTtcbiAgICBqb2ludExvYWQuZm9yY2VaRGlyZWN0aW9uID0gZno7XG5cbiAgICBqb2ludExvYWQubW9tZW50QWJvdXRYQXhpcyA9IG14O1xuICAgIGpvaW50TG9hZC5tb21lbnRBYm91dFlBeGlzID0gbXk7XG4gICAgam9pbnRMb2FkLm1vbWVudEFib3V0WkF4aXMgPSBtejtcblxuICAgIHZpZXdlci5wcm9jZXNzLmFkZFJlbmRlck9iamVjdChsb2FkR3JvdXBSTywgam9pbnRMb2FkKTtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIC8qKlxuICAgKiDnvJbovpHngrnojbfovb1cbiAgICogQHBhcmFtIGpvaW50TG9hZCDopoHnvJbovpHnmoTngrnojbfovb3lr7nosaFcbiAgICogQHBhcmFtIGZ4XG4gICAqIEBwYXJhbSBmeVxuICAgKiBAcGFyYW0gZnpcbiAgICogQHBhcmFtIG14XG4gICAqIEBwYXJhbSBteVxuICAgKiBAcGFyYW0gbXpcbiAgICovXG4gIGVkaXRKb2ludExvYWQoXG4gICAgam9pbnRMb2FkOiBKb2ludExvYWRPYmplY3QsXG4gICAgZng6IG51bWJlcixcbiAgICBmeTogbnVtYmVyLFxuICAgIGZ6OiBudW1iZXIsXG4gICAgbXg6IG51bWJlcixcbiAgICBteTogbnVtYmVyLFxuICAgIG16OiBudW1iZXJcbiAgKSB7XG4gICAgam9pbnRMb2FkLmJ1c2luZXNzU3RhdGUgPSBCdXNpbmVzc1N0YXRlLkVkaXRpbmc7XG5cbiAgICBqb2ludExvYWQuZm9yY2VYRGlyZWN0aW9uID0gZng7XG4gICAgam9pbnRMb2FkLmZvcmNlWURpcmVjdGlvbiA9IGZ5O1xuICAgIGpvaW50TG9hZC5mb3JjZVpEaXJlY3Rpb24gPSBmejtcblxuICAgIGpvaW50TG9hZC5tb21lbnRBYm91dFhBeGlzID0gbXg7XG4gICAgam9pbnRMb2FkLm1vbWVudEFib3V0WUF4aXMgPSBteTtcbiAgICBqb2ludExvYWQubW9tZW50QWJvdXRaQXhpcyA9IG16O1xuICB9XG5cbiAgLyoqXG4gICAqIOmAmui/h+mSu+WtlOWQjeWIh+aNouaYvuekuueahOmSu+WtlOWbvuS+iy5cbiAgICogQHBhcmFtIGJvcmVob2xlTmFtZVxuICAgKi9cbiAgYm9yZWhvbGVDaGFuZ2UoYm9yZWhvbGVOYW1lOiBzdHJpbmcpIHtcbiAgICBsZXQgZWxlbWVudEtleSA9IFwic29pbGRcIjtcbiAgICBpZiAodGhpcy5ib3JlaG9sZUN1dExpbmVEaXNwbGF5KSB7XG4gICAgICB0aGlzLmJvcmVob2xlQ3V0TGluZURpc3BsYXkgPSBmYWxzZTtcbiAgICAgIExlZ2VuZE1hbmFnZS5kZXN0b3J5KGVsZW1lbnRLZXkpO1xuICAgICAgbGV0IGN1cnJlbnRCb3JlaG9sZU9iamVjdHMgPSB0aGlzLmN1cnJlbnRCb3JlaG9sZU9iamVjdHM7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY3VycmVudEJvcmVob2xlT2JqZWN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoY3VycmVudEJvcmVob2xlT2JqZWN0c1tpXS5uYW1lID09PSBib3JlaG9sZU5hbWUpIHtcbiAgICAgICAgICBjdXJyZW50Qm9yZWhvbGVPYmplY3RzW2ldLmN1dGxpZW5BY2l0dmUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuYWN0aXZlQm9yZWhvbGVOYW1lID0gYm9yZWhvbGVOYW1lO1xuXG4gICAgICAgICAgdGhpcy5ib3JlaG9sZUN1dExpbmVEaXNwbGF5ID0gdHJ1ZTtcbiAgICAgICAgICBsZXQgY3V0TGluZUxlZ2VuZCA9IGN1cnJlbnRCb3JlaG9sZU9iamVjdHNbaV0uZ2VDdXRsaW5lKCk7XG4gICAgICAgICAgTGVnZW5kTWFuYWdlLmNyZWF0ZShcbiAgICAgICAgICAgIGVsZW1lbnRLZXksXG4gICAgICAgICAgICBjdXRMaW5lTGVnZW5kLFxuICAgICAgICAgICAgXCLlnJ/lsYLmlbDmja5cIixcbiAgICAgICAgICAgIFwi6aKc6ImyXCIsXG4gICAgICAgICAgICBcIuWcn+WxguWQjVwiLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICByaWdodDogXCIwcHhcIixcbiAgICAgICAgICAgICAgYm90dG9tOiBcIjBweFwiLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY3VycmVudEJvcmVob2xlT2JqZWN0c1tpXS5jdXRsaWVuQWNpdHZlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBdUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQUE7QUFlQTtBQUFBO0FBYkE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUdBO0FBRUE7QUFDQTs7QUFJQTtBQWtEQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUdBO0FBQ0E7QUFNQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTs7O0FBSUE7QUFFQTtBQUVBOztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBTUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUtBOztBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQVNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7O0FBRUE7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQU9BO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTs7O0FBSUE7QUFDQTtBQUtBO0FBQUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQU9BO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUdBO0FBRUE7QUFDQTtBQU9BO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7O0FBRUE7QUFFQTtBQUNBO0FBd0pBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBS0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBOztBQUVBO0FBS0E7QUFDQTtBQUNBOztBQUVBO0FBS0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUdBO0FBQ0E7QUFRQTtBQUVBO0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBUUE7QUFNQTtBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUdBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFPQTtBQUVBO0FBRUE7QUFDQTtBQUNBOztBQUdBO0FBQ0E7QUFNQTtBQUNBO0FBRUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBTUE7QUFFQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFPQTtBQUNBO0FBRUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBb0JBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFHQTtBQUNBO0FBSUE7QUFJQTtBQUlBO0FBSUE7QUFJQTtBQUlBO0FBSUE7QUFJQTtBQUlBO0FBSUE7QUFJQTtBQUdBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUtBO0FBQ0E7QUFFQTtBQUNBO0FBS0E7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7OztBQVFBO0FBQ0E7OztBQU1BO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBOzs7QUFRQTtBQUlBOzs7QUFHQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQU9BO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTs7QUFLQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFPQTtBQUlBO0FBQ0E7QUFDQTs7O0FBS0E7QUFDQTtBQUlBOzs7QUFHQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBOztBQUdBO0FBQ0E7QUFDQTs7QUFHQTtBQUdBO0FBT0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBOztBQUVBO0FBS0E7QUFPQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBOzs7QUFLQTtBQUNBO0FBSUE7OztBQUdBO0FBQ0E7QUFFQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUdBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUtBO0FBQ0E7QUFDQTtBQUlBO0FBRUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTs7O0FBR0E7QUFPQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBOzs7QUFLQTtBQUlBOzs7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFHQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUdBOzs7O0FBSUE7QUFNQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBT0E7QUFDQTtBQUNBO0FBRUE7QUFHQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFHQTs7OztBQUtBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUdBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFHQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUdBO0FBT0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7O0FBRUE7O0FBR0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUdBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUdBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBSUE7QUFDQTtBQVVBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFTQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQVVBO0FBUUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOzs7QUFLQTtBQU1BO0FBQ0E7QUFHQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFjQTtBQVdBO0FBR0E7QUFJQTtBQUNBO0FBQ0E7O0FBR0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUdBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBWUE7QUFTQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFFQTtBQUNBOzs7O0FBSUE7QUFDQTtBQUFBO0FBNThEQTs7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./packages/caeDesign/src/gsDevFx/managers/interfaceManagers/commonInterfaceManager.ts\n");
|
|
4001
|
+
eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__, exports, __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\"), __webpack_require__(/*! ../../../gsDevFx/objects/caeLightObject/caeLightObject */ \"./packages/caeDesign/src/gsDevFx/objects/caeLightObject/caeLightObject.ts\"), __webpack_require__(/*! ../../../gsDevFx/objects/caeObjects/jointObject */ \"./packages/caeDesign/src/gsDevFx/objects/caeObjects/jointObject.ts\"), __webpack_require__(/*! gs-bim-air */ \"./node_modules/gs-bim-air/lib/BimAir.umd.min.js\"), __webpack_require__(/*! ./selectionInterfaceManager */ \"./packages/caeDesign/src/gsDevFx/managers/interfaceManagers/selectionInterfaceManager.ts\"), __webpack_require__(/*! ../../../gsDevFx/tasks/caeTask */ \"./packages/caeDesign/src/gsDevFx/tasks/caeTask.ts\"), __webpack_require__(/*! ../../../api/renderObjectService */ \"./packages/caeDesign/src/api/renderObjectService.ts\"), __webpack_require__(/*! ../../../gsDevFx/process */ \"./packages/caeDesign/src/gsDevFx/process.ts\"), __webpack_require__(/*! ../../../gsDevFx/objects/caeObjects/optionObjects/modelTitle */ \"./packages/caeDesign/src/gsDevFx/objects/caeObjects/optionObjects/modelTitle.ts\"), __webpack_require__(/*! ../../../caeCardEditor/caeCardObjects/sacinp/cardTITLE */ \"./packages/caeDesign/src/caeCardEditor/caeCardObjects/sacinp/cardTITLE.ts\"), __webpack_require__(/*! gs-ceec-design */ \"./packages/ceecDesign/src/index.ts\"), __webpack_require__(/*! ../../../gsDevFx/objects/caeObjects/memberObject */ \"./packages/caeDesign/src/gsDevFx/objects/caeObjects/memberObject.ts\"), __webpack_require__(/*! gs-ceec-design */ \"./packages/ceecDesign/src/index.ts\"), __webpack_require__(/*! ../../../gsDevFx/objects/caeObjects/pretreatment/mgrovObject */ \"./packages/caeDesign/src/gsDevFx/objects/caeObjects/pretreatment/mgrovObject.ts\"), __webpack_require__(/*! ../../../gsDevFx/objects/caeObjects/pretreatment/corrzObject */ \"./packages/caeDesign/src/gsDevFx/objects/caeObjects/pretreatment/corrzObject.ts\"), __webpack_require__(/*! ../../../store */ \"./packages/caeDesign/src/store/index.ts\"), __webpack_require__(/*! ../../../gsDevFx/objects/caeObjects/plateObject */ \"./packages/caeDesign/src/gsDevFx/objects/caeObjects/plateObject.ts\"), __webpack_require__(/*! ../../../gsDevFx/objects/caeObjects/grupObject */ \"./packages/caeDesign/src/gsDevFx/objects/caeObjects/grupObject.ts\"), __webpack_require__(/*! ../../../gsDevFx/objects/caeObjects/objectColors */ \"./packages/caeDesign/src/gsDevFx/objects/caeObjects/objectColors.ts\"), __webpack_require__(/*! ../../../gsDevFx/objects/caeObjects/instanceSectionObject */ \"./packages/caeDesign/src/gsDevFx/objects/caeObjects/instanceSectionObject.ts\"), __webpack_require__(/*! ../../../gsDevFx/objects/caeObjects/sectionObject */ \"./packages/caeDesign/src/gsDevFx/objects/caeObjects/sectionObject.ts\"), __webpack_require__(/*! ../../../gsDevFx/objects/loadObjects/loadConditionObject */ \"./packages/caeDesign/src/gsDevFx/objects/loadObjects/loadConditionObject.ts\"), __webpack_require__(/*! ../../../gsDevFx/objects/loadObjects/loadGroupObject */ \"./packages/caeDesign/src/gsDevFx/objects/loadObjects/loadGroupObject.ts\"), __webpack_require__(/*! ../../../gsDevFx/objects/loadObjects/jointLoadObject */ \"./packages/caeDesign/src/gsDevFx/objects/loadObjects/jointLoadObject.ts\"), __webpack_require__(/*! element-ui */ \"./node_modules/element-ui/lib/element-ui.common.js\"), __webpack_require__(/*! ../../../viewerWrapper/module/legendManage */ \"./packages/caeDesign/src/viewerWrapper/module/legendManage.ts\")], __WEBPACK_AMD_DEFINE_RESULT__ = (function (require, exports, tslib_1, caeLightObject_1, jointObject_1, gs_bim_air_1, selectionInterfaceManager_1, caeTask_1, renderObjectService_1, process_1, modelTitle_1, cardTITLE_1, gs_ceec_design_1, memberObject_1, gs_ceec_design_2, mgrovObject_1, corrzObject_1, store_1, plateObject_1, grupObject_1, objectColors_1, instanceSectionObject_1, sectionObject_1, loadConditionObject_1, loadGroupObject_1, jointLoadObject_1, element_ui_1, legendManage_1) {\n \"use strict\";\n\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n exports.CommonInterfaceManager = exports.SwitchColorDivide = void 0;\n renderObjectService_1 = tslib_1.__importDefault(renderObjectService_1);\n store_1 = tslib_1.__importDefault(store_1);\n var SwitchColorDivide;\n (function (SwitchColorDivide) {\n SwitchColorDivide[SwitchColorDivide[\"GrupName\"] = 0] = \"GrupName\";\n SwitchColorDivide[SwitchColorDivide[\"GrupThickness\"] = 1] = \"GrupThickness\";\n SwitchColorDivide[SwitchColorDivide[\"Mgrov\"] = 2] = \"Mgrov\";\n SwitchColorDivide[SwitchColorDivide[\"Corrz\"] = 3] = \"Corrz\";\n SwitchColorDivide[SwitchColorDivide[\"Cancel\"] = 4] = \"Cancel\";\n SwitchColorDivide[SwitchColorDivide[\"ComponentGroup\"] = 5] = \"ComponentGroup\";\n })(SwitchColorDivide = exports.SwitchColorDivide || (exports.SwitchColorDivide = {}));\n var CommonInterfaceManager = function (_super) {\n tslib_1.__extends(CommonInterfaceManager, _super);\n function CommonInterfaceManager(viewer) {\n var _this = _super.call(this, viewer) || this;\n _this.currentSelectWaveItemName = null;\n _this.currentBoreholeObjects = null;\n _this.boreholeLegend = null;\n _this.boreholeCutLineDisplay = false;\n _this.showEnglishText = false;\n _this.copyedExternalEvent = null;\n _this.elementKey = \"cutline\";\n _this.activeBoreholeName = null;\n return _this;\n }\n CommonInterfaceManager.prototype.showPlotTitle = function () {\n var result = null;\n var process = this.viewer.process;\n var titleRO = process.findRenderObjectByType(\"ModelTitle\");\n if (titleRO) {\n if (titleRO instanceof modelTitle_1.ModelTitle) {\n result = titleRO.cardObject.title.value;\n }\n } else {\n result = \"Active Structure\";\n }\n return result;\n };\n CommonInterfaceManager.prototype.editPlotTitle = function (title) {\n var process = this.viewer.process;\n if (!title || title.trimEnd() === \"\") {\n var titleRO_1 = process.findRenderObjectByType(\"ModelTitle\");\n if (titleRO_1) {\n titleRO_1.tempDelete(this.viewer);\n return 1;\n }\n }\n var islegal = this.checTitlekNamelegal(title);\n if (!islegal) {\n return 2;\n }\n var titleRO = process.findRenderObjectByType(\"ModelTitle\");\n if (titleRO) {\n if (titleRO instanceof modelTitle_1.ModelTitle) {\n titleRO.cardObject.title.value = title;\n titleRO.cardData = titleRO.cardObject.getLine();\n }\n } else {\n var titleRO_2 = new modelTitle_1.ModelTitle();\n titleRO_2.name = \"TITLE\";\n var line = \" \" + title;\n titleRO_2.cardData = line;\n titleRO_2.cardObject = new cardTITLE_1.CardTITLE(line);\n process.addRenderObject(process.caeRenderObjectTreeManager.sacinpNode, titleRO_2);\n }\n return 1;\n };\n CommonInterfaceManager.prototype.checTitlekNamelegal = function (name) {\n var reg = /^[A-Z0-9]*$/;\n if (!reg.test(name) || name.trimEnd().length > 125) {\n console.log(\"空间点名称不符合规范\");\n return false;\n }\n return true;\n };\n CommonInterfaceManager.prototype.resetView = function (isSetViewMode) {\n var _a, _b, _c;\n if (isSetViewMode === void 0) {\n isSetViewMode = true;\n }\n var viewer = this.viewer.process.activeViewer;\n viewer.selectionManager.clearAllSelectionAndHighlight();\n viewer.process.commandManager.closeAllCommands();\n viewer.commonInterfaceManager.colorSwitch(SwitchColorDivide.Cancel);\n viewer.commonInterfaceManager.finiteElementSwitch(false);\n viewer.commonInterfaceManager.waveSwitch(false);\n viewer.commonInterfaceManager.boreholeSwitch(false);\n viewer.viewInterfaceManager.setJointNumberVisible(false);\n viewer.viewInterfaceManager.setJointRestraintVisible(false);\n viewer.viewInterfaceManager.setMemberFixityVisible(false);\n viewer.viewInterfaceManager.setMemberLocalAxisVisible(false);\n viewer.viewInterfaceManager.setMemberSectionSizeVisible(false);\n viewer.viewInterfaceManager.setGrupNumberVisible(false);\n viewer.viewInterfaceManager.continuesRotate(false);\n viewer.viewInterfaceManager.setCameraSelect();\n var process = viewer.process;\n (_a = process.caeRenderObjectTreeManager.jointNode) === null || _a === void 0 ? void 0 : _a.childObjects.forEach(function (obj) {\n viewer.findInstanceObject(obj).viewerVisible = true;\n viewer.findInstanceObject(obj).visible = true;\n obj.clearSvg();\n });\n (_b = process.caeRenderObjectTreeManager.memberNode) === null || _b === void 0 ? void 0 : _b.childObjects.forEach(function (obj) {\n viewer.findInstanceObject(obj).viewerVisible = true;\n viewer.findInstanceObject(obj).visible = true;\n obj.clearSvg();\n });\n (_c = process.caeRenderObjectTreeManager.plateNode) === null || _c === void 0 ? void 0 : _c.childObjects.forEach(function (obj) {\n viewer.findInstanceObject(obj).viewerVisible = true;\n viewer.findInstanceObject(obj).visible = true;\n obj.clearSvg();\n });\n viewer.viewInterfaceManager.memberLineView(false);\n viewer.viewInterfaceManager.plateLineView(false);\n if (isSetViewMode) {\n viewer.setViewMode(gs_bim_air_1.Longan.ViewMode.OFSIso, true);\n }\n };\n CommonInterfaceManager.prototype.redraw = function () {\n var process = this.viewer.process;\n process.viewers.forEach(function (vi) {\n console.log(\"vi\");\n vi.exeSceneCameraChanged(gs_bim_air_1.Longan.LonganCore.CameraChangeType.Rotate | gs_bim_air_1.Longan.LonganCore.CameraChangeType.Scale | gs_bim_air_1.Longan.LonganCore.CameraChangeType.Translate);\n vi.updateDisplay();\n });\n };\n CommonInterfaceManager.prototype.checkIsFiniteElement = function () {\n var isFE = true;\n var viewer = this.viewer;\n var grupNode = viewer.process.caeRenderObjectTreeManager.grupNode;\n grupNode === null || grupNode === void 0 ? void 0 : grupNode.childObjects.forEach(function (grup) {\n if (grup instanceof grupObject_1.GrupObject) {\n if (grup.grupSegments.length > 1) {\n isFE = false;\n return isFE;\n }\n }\n });\n console.log(\"isFE:\", isFE);\n return isFE;\n };\n CommonInterfaceManager.prototype.openModel = function (modelId, isReplace) {\n var viewer = this.viewer;\n return new Promise(function (resolve, reject) {\n viewer.loadModel(modelId, isReplace).then(function (model) {\n viewer.process.historyManager.clearDeltaState();\n viewer.sceneSegment.renderingOptions.cullingMaximumExtent = 0;\n console.log(\"model\", model);\n var ro = viewer.renderObject;\n var caeTask = new caeTask_1.CAETask(ro, viewer);\n caeTask.workRenderObjectService = renderObjectService_1.default;\n viewer.process.taskManager.execute(caeTask);\n viewer.structureTreeManager.update();\n viewer.updateDisplay();\n viewer.setViewMode(gs_bim_air_1.Longan.ViewMode.OFSIso, true);\n viewer.postInterfaceManager.requestDBData();\n resolve();\n }).catch(function (reason) {\n console.log(\"reason:\", reason);\n element_ui_1.Message.info(reason);\n reject(reason);\n });\n });\n };\n CommonInterfaceManager.prototype.checkNeedSave = function () {\n var rootRO = this.viewer.process.caeRenderObjectTreeManager.rootNode;\n if (rootRO instanceof caeLightObject_1.CAELightObject) {\n var result = gs_ceec_design_1.PersistenceManager.saveDesign(rootRO);\n if (result.createList.length > 0 || result.deleteList.length > 0 || result.editList.length > 0) {\n return true;\n } else {\n return false;\n }\n }\n return false;\n };\n CommonInterfaceManager.prototype.save = function () {\n var _this = this;\n return new Promise(function (resolve, reject) {\n var rootRO = _this.viewer.process.caeRenderObjectTreeManager.rootNode;\n if (rootRO instanceof caeLightObject_1.CAELightObject) {\n rootRO.save(_this.viewer).then(function (data) {\n resolve(data);\n });\n }\n });\n };\n CommonInterfaceManager.prototype.exportDATFile = function () {\n console.log(\"export\");\n var datCardData = this.viewer.datWriterManager.exportDATFile();\n datCardData += \"END\";\n return datCardData;\n };\n CommonInterfaceManager.prototype.exportMemberData = function (isExportAll) {\n if (isExportAll === void 0) {\n isExportAll = true;\n }\n console.log(\"export member\");\n var datCardData = this.viewer.datWriterManager.exportMemberData(isExportAll);\n datCardData += \"END\";\n return datCardData;\n };\n CommonInterfaceManager.prototype.exportPileData = function (isExportAll) {\n if (isExportAll === void 0) {\n isExportAll = true;\n }\n console.log(\"export pile\");\n var datCardData = this.viewer.datWriterManager.exportPileData(isExportAll);\n if (datCardData === null) {\n return null;\n }\n datCardData += \"END\";\n return datCardData;\n };\n CommonInterfaceManager.prototype.exportDATFile_Seainp = function () {\n console.log(\"export_seainp\");\n var viewer = this.viewer;\n var datCardData = viewer.datWriterManager.exportDATFile_Seainp();\n datCardData += \"END\";\n return datCardData;\n };\n CommonInterfaceManager.prototype.exportDATFile_Sacinp = function () {\n console.log(\"export_sacinp\");\n var viewer = this.viewer;\n var datCardData = viewer.datWriterManager.exportDATFile_Sacinp();\n datCardData += \"END\";\n return datCardData;\n };\n CommonInterfaceManager.prototype.importDATData = function (content, overWrite) {\n if (overWrite === void 0) {\n overWrite = false;\n }\n console.log(\"importDATData\");\n this.viewer.datReaderManager.importDATData(content, overWrite);\n this.viewer.updateDisplay();\n };\n CommonInterfaceManager.prototype.importSEAData = function (content) {\n console.log(\"importSEAData\");\n var ro = this.viewer.process.findRenderObjectByType(\"SeastateLdopt\");\n if (ro) {\n var message = \"已经存在海况数据\";\n element_ui_1.Message.error(message);\n return;\n }\n this.viewer.datReaderManager.importSeainpData(content);\n this.viewer.updateDisplay();\n this.viewer.structureTreeManager.update();\n return \"importSEAData successful\";\n };\n CommonInterfaceManager.prototype.importSeaociData = function (content) {\n console.log(\"importSeaociData\");\n this.viewer.datReaderManager.importSeaociData(content);\n this.viewer.updateDisplay();\n this.viewer.structureTreeManager.update();\n return \"importSeaociData successful\";\n };\n CommonInterfaceManager.prototype.importPSIData = function (content) {\n console.log(\"importPSIData\");\n this.viewer.datReaderManager.importPSIData(content);\n this.viewer.updateDisplay();\n this.viewer.structureTreeManager.update();\n };\n CommonInterfaceManager.prototype.historyBack = function () {\n if (process_1.Process.activeProcess.historyManager.canRollBack) {\n process_1.Process.activeProcess.historyManager.rollBack();\n }\n };\n CommonInterfaceManager.prototype.historyForward = function () {\n if (process_1.Process.activeProcess.historyManager.canRollForward) {\n process_1.Process.activeProcess.historyManager.rollForward();\n }\n };\n CommonInterfaceManager.prototype.selectAll = function () {\n var viewer = this.viewer;\n viewer.selectionManager.clearAllSelectionAndHighlight();\n switch (viewer.selectionInterfaceManager.selectorFilter) {\n case selectionInterfaceManager_1.SelectorFiliter.Joint:\n this.selectAllJoints();\n break;\n case selectionInterfaceManager_1.SelectorFiliter.Member:\n this.selectAllMembers();\n break;\n case selectionInterfaceManager_1.SelectorFiliter.Plate:\n this.selectAllPlates();\n break;\n case selectionInterfaceManager_1.SelectorFiliter.All:\n this.selectAllJoints();\n this.selectAllMembers();\n this.selectAllPlates();\n break;\n }\n this.viewer.updateDisplay();\n };\n CommonInterfaceManager.prototype.createViewPoint = function (viewPointName) {\n this.viewer.caePanelManager.viewPointPanelCae.addViewPoint(viewPointName).then(function () {});\n };\n CommonInterfaceManager.prototype.selectAllJoints = function () {\n var joints = this.viewer.process.findRenderObjectsByType(\"JointObject\");\n var keys = new Array();\n var paths = new Array();\n joints.forEach(function (item) {\n keys.push(item.segment.key);\n paths.push(item.segment.path);\n });\n this.viewer.selectionManager.selectAndHighlightKeys(keys, paths);\n };\n CommonInterfaceManager.prototype.selectAllMembers = function () {\n var members = this.viewer.process.findRenderObjectsByType(\"MemberObject\");\n var keys = new Array();\n var paths = new Array();\n members.forEach(function (item) {\n keys.push(item.segment.key);\n paths.push(item.segment.path);\n });\n this.viewer.selectionManager.selectAndHighlightKeys(keys, paths);\n };\n CommonInterfaceManager.prototype.selectAllPlates = function () {\n var plates = this.viewer.process.findRenderObjectsByType(\"PlateObject\");\n var keys = new Array();\n var paths = new Array();\n plates.forEach(function (item) {\n keys.push(item.segment.key);\n paths.push(item.segment.path);\n });\n this.viewer.selectionManager.selectAndHighlightKeys(keys, paths);\n };\n CommonInterfaceManager.prototype.findJoint = function (jointName) {\n var process = this.viewer.process;\n var ro = process.findCaeObjectByNameInChildObject(process.caeRenderObjectTreeManager.jointNode, jointName);\n if (ro && ro instanceof jointObject_1.JointObject) {\n this.viewer.selectionManager.clearAllSelectionAndHighlight();\n this.viewer.locateWorld(ro.segment);\n this.viewer.selectionManager.selectAndHighlightKeys([ro.segment.key], [ro.segment.path]);\n this.viewer.updateDisplay();\n return ro;\n } else {\n return null;\n }\n };\n CommonInterfaceManager.prototype.renameJoint = function (originJointName, newJointName, useNextAvaliable) {\n var process = this.viewer.process;\n var result = {};\n if (!jointObject_1.JointObject.checkNamelegal(newJointName)) {\n result = 3;\n return result;\n }\n var jointNode = process.caeRenderObjectTreeManager.jointNode;\n var ro = process.findCaeObjectByNameInChildObject(jointNode, originJointName);\n if (ro && ro instanceof jointObject_1.JointObject) {\n if (!useNextAvaliable) {\n var newNameRO = process.findCaeObjectByNameInChildObject(jointNode, newJointName);\n if (newNameRO) {\n result = 3 + \",\" + newJointName;\n return result;\n }\n } else {\n newJointName = process.caeRenderObjectTreeManager.nameAscendingOrder(newJointName, 1, process.nameMapJoint)[0];\n }\n ro.name = newJointName;\n ro.setNeedUpdate();\n result = 2 + \",\" + originJointName + \",\" + newJointName;\n } else {\n result = 1 + \",\" + originJointName;\n }\n return result;\n };\n CommonInterfaceManager.prototype.findMember = function (memberName) {\n var process = this.viewer.process;\n var ro = process.findCaeObjectByNameInChildObject(process.caeRenderObjectTreeManager.memberNode, memberName);\n if (ro && ro instanceof memberObject_1.MemberObject) {\n this.viewer.selectionManager.clearAllSelectionAndHighlight();\n this.viewer.locateWorld(ro.segment);\n this.viewer.selectionManager.selectAndHighlightKeys([ro.segment.key], [ro.segment.path]);\n this.viewer.updateDisplay();\n return ro;\n } else {\n return null;\n }\n };\n CommonInterfaceManager.prototype.highlightMemberByNames = function (names) {\n var process = this.viewer.process;\n var keys = [];\n var paths = [];\n for (var i = 0; i < names.length; i++) {\n var obj = process.findCaeObjectByNameInChildObject(process.caeRenderObjectTreeManager.memberNode, names[i]);\n if (obj) {\n keys.push(obj.segment.key);\n paths.push(obj.segment.path);\n } else {\n console.log(\"找不到\" + names[i]);\n }\n }\n this.viewer.selectionManager.clearAllSelectionAndHighlight();\n this.viewer.selectionManager.selectAndHighlightKeys(keys, paths);\n this.viewer.updateDisplay();\n };\n CommonInterfaceManager.prototype.highlightPlateByNames = function (names) {\n var keys = [];\n var paths = [];\n for (var i = 0; i < names.length; i++) {\n var obj = this.viewer.process.findCaeObjectByNameInChildObject(this.viewer.process.caeRenderObjectTreeManager.plateNode, names[i]);\n if (obj) {\n keys.push(obj.segment.key);\n paths.push(obj.segment.path);\n } else {\n console.log(\"找不到\" + names[i]);\n }\n }\n this.viewer.selectionManager.clearAllSelectionAndHighlight();\n this.viewer.selectionManager.selectAndHighlightKeys(keys, paths);\n this.viewer.updateDisplay();\n };\n CommonInterfaceManager.prototype.findPlate = function (plateName) {\n var process = this.viewer.process;\n var ro = process.findCaeObjectByNameInChildObject(process.caeRenderObjectTreeManager.plateNode, plateName);\n if (ro && ro instanceof plateObject_1.PlateObject) {\n this.viewer.selectionManager.clearAllSelectionAndHighlight();\n this.viewer.locateWorld(ro.segment);\n this.viewer.selectionManager.selectAndHighlightKeys([ro.segment.key], [ro.segment.path]);\n this.viewer.updateDisplay();\n return ro;\n } else {\n return null;\n }\n };\n CommonInterfaceManager.prototype.getStructureTreeData = function () {\n var rootNode = this.viewer.structureTreeManager.rootNode;\n return rootNode;\n };\n CommonInterfaceManager.prototype.getMemberGrups = function () {\n var grupNameList = new Array();\n var grupObjectGroup = this.viewer.process.findRenderObjectByName(\"杆件截面组\");\n if (grupObjectGroup) {\n grupObjectGroup.childObjects.map(function (item) {\n grupNameList.push(item.name);\n });\n }\n return grupNameList;\n };\n CommonInterfaceManager.prototype.addStructureNode = function (parent, ro) {\n this.viewer.process.addRenderObject(parent, ro);\n };\n CommonInterfaceManager.prototype.removeStructureNode = function (ro) {\n this.viewer.process.removeRenderObject(ro);\n };\n CommonInterfaceManager.prototype.createMgrovObject = function () {\n var mgrov = new mgrovObject_1.MgrovObject();\n return mgrov;\n };\n CommonInterfaceManager.prototype.createCorrzObject = function () {\n var corrz = new corrzObject_1.CorrzObject();\n return corrz;\n };\n CommonInterfaceManager.prototype.clearChildObjects = function (viewer, ro) {\n if (ro) {\n while (ro.childObjects.length > 0) {\n viewer.process.removeRenderObject(ro.childObjects[0]);\n }\n }\n };\n CommonInterfaceManager.prototype.clearCaeRenderObject = function (viewer) {\n this.clearChildObjects(viewer, viewer.process.caeRenderObjectTreeManager.memberNode);\n this.clearChildObjects(viewer, viewer.process.caeRenderObjectTreeManager.plateNode);\n this.clearChildObjects(viewer, viewer.process.caeRenderObjectTreeManager.jointNode);\n this.clearChildObjects(viewer, viewer.process.caeRenderObjectTreeManager.grupNode);\n this.clearChildObjects(viewer, viewer.process.caeRenderObjectTreeManager.pGrupNode);\n this.clearChildObjects(viewer, viewer.process.caeRenderObjectTreeManager.sectionInsNode);\n this.clearChildObjects(viewer, viewer.process.caeRenderObjectTreeManager.sacinpNode);\n this.clearChildObjects(viewer, viewer.process.caeRenderObjectTreeManager.seastateNode);\n this.clearChildObjects(viewer, viewer.process.caeRenderObjectTreeManager.pileNode);\n this.clearChildObjects(viewer, viewer.process.caeRenderObjectTreeManager.plGrupNode);\n this.clearChildObjects(viewer, viewer.process.caeRenderObjectTreeManager.postResultNode);\n };\n CommonInterfaceManager.prototype.colorDivSwitch_GrupName = function (on_off, isUpdate) {\n if (isUpdate === void 0) {\n isUpdate = true;\n }\n var viewer = this.viewer;\n var process = this.viewer.process;\n var colorDivideRO = process.findRenderObjectByName(\"按截面组号分色\");\n if (colorDivideRO) {\n for (var i = 0; i < colorDivideRO.childObjects.length; i++) {\n var obj = colorDivideRO.childObjects[i];\n if (obj.checkBusinessStateIsActive()) {\n if (on_off) {\n obj.active(viewer);\n } else {\n obj.inactive(viewer);\n }\n }\n }\n if (on_off) {\n var cutline = {};\n if (colorDivideRO) {\n legendManage_1.LegendManage.destory(this.elementKey);\n cutline = colorDivideRO.getCutline();\n var component = legendManage_1.LegendManage.create(this.elementKey, cutline, \"\", \"\", \"\");\n if (this.showEnglishText) {\n component.title = \"Colored By Member Groups\";\n component.leftText = \"Color\";\n component.rightText = \"Member Groups\";\n } else {\n component.title = \"截面组分色\";\n component.leftText = \"颜色\";\n component.rightText = \"截面组名\";\n }\n }\n } else {\n legendManage_1.LegendManage.destory(this.elementKey);\n }\n }\n if (isUpdate) this.viewer.updateDisplay();\n };\n CommonInterfaceManager.prototype.colorDivSwitch_GrupThickness = function (on_off, isUpdate) {\n if (isUpdate === void 0) {\n isUpdate = true;\n }\n var viewer = this.viewer;\n var process = this.viewer.process;\n var colorDivideRO = process.findRenderObjectByName(\"按截面壁厚分色\");\n if (colorDivideRO) {\n for (var i = 0; i < colorDivideRO.childObjects.length; i++) {\n var obj = colorDivideRO.childObjects[i];\n if (obj.checkBusinessStateIsActive()) {\n if (on_off) {\n obj.active(viewer);\n } else {\n obj.inactive(viewer);\n }\n }\n }\n if (on_off) {\n var cutline = {};\n if (colorDivideRO) {\n legendManage_1.LegendManage.destory(this.elementKey);\n cutline = colorDivideRO.getCutline();\n var component = legendManage_1.LegendManage.create(this.elementKey, cutline, \"\", \"\", \"\");\n if (this.showEnglishText) {\n component.title = \"Colored By Thickness\";\n component.leftText = \"Color\";\n component.rightText = \"Thickness(cm)\";\n } else {\n component.title = \"壁厚分色\";\n component.leftText = \"颜色\";\n component.rightText = \"壁厚(cm)\";\n }\n }\n } else {\n legendManage_1.LegendManage.destory(this.elementKey);\n }\n }\n if (isUpdate) this.viewer.updateDisplay();\n };\n CommonInterfaceManager.prototype.colordDivSwitch_Mgrov = function (on_off, isUpdate) {\n if (isUpdate === void 0) {\n isUpdate = true;\n }\n var viewer = this.viewer;\n var process = this.viewer.process;\n var colorDivideRO = process.findRenderObjectByName(\"海生物厚度按高程分色\");\n if (colorDivideRO && colorDivideRO.checkBusinessStateIsActive()) {\n var obj = colorDivideRO;\n if (on_off) {\n obj.active(viewer);\n var cutline = {};\n if (colorDivideRO) {\n var obj_1 = colorDivideRO;\n var thicknessIndex = 0;\n for (var i = 0; i < obj_1.heightList.length; i += 2) {\n var bottom = obj_1.heightList[i];\n var top_1 = obj_1.heightList[i + 1];\n var key = bottom + \"~\" + top_1 + \":\" + obj_1.thickness[thicknessIndex];\n var color = [obj_1.color[i / 2 * 4 + 0], obj_1.color[i / 2 * 4 + 1], obj_1.color[i / 2 * 4 + 2], obj_1.color[i / 2 * 4 + 3]];\n if (color[0] === -1 && color[1] === -1 && color[2] === -1) {\n continue;\n }\n color[0] *= 255;\n color[1] *= 255;\n color[2] *= 255;\n cutline[key] = color;\n thicknessIndex++;\n }\n legendManage_1.LegendManage.destory(this.elementKey);\n var component = legendManage_1.LegendManage.create(this.elementKey, cutline, \"\", \"\", \"\");\n if (this.showEnglishText) {\n component.title = \"Marine Growth Zones\";\n component.leftText = \"Color\";\n component.rightText = \"Height Range(m): Thickness(mm)\";\n } else {\n component.title = \"海生物厚度分色\";\n component.leftText = \"颜色\";\n component.rightText = \"高度范围(m): 厚度(mm)\";\n }\n }\n } else {\n obj.inactive(viewer);\n legendManage_1.LegendManage.destory(this.elementKey);\n }\n }\n if (isUpdate) this.viewer.updateDisplay();\n };\n CommonInterfaceManager.prototype.colordDivSwitch_Corrz = function (on_off, isUpdate) {\n if (isUpdate === void 0) {\n isUpdate = true;\n }\n var viewer = this.viewer;\n var process = this.viewer.process;\n var colorDivideRO = process.findRenderObjectByName(\"腐蚀余量按高程分色\");\n if (colorDivideRO && colorDivideRO.checkBusinessStateIsActive()) {\n var obj = colorDivideRO;\n if (on_off) {\n obj.active(viewer);\n var cutline = {};\n if (colorDivideRO) {\n var obj_2 = colorDivideRO;\n var thicknessIndex = 0;\n for (var i = 0; i < obj_2.heightList.length; i += 2) {\n var bottom = obj_2.heightList[i];\n var top_2 = obj_2.heightList[i + 1];\n var keyLevelBottom = obj_2.corrzList[thicknessIndex].thicknessBottom;\n if (!keyLevelBottom) {\n keyLevelBottom = 0;\n }\n var keyLevelTop = obj_2.corrzList[thicknessIndex].thicknessTop;\n if (!keyLevelTop) {\n keyLevelTop = 0;\n }\n var key = bottom + \"~\" + top_2 + \":\" + keyLevelBottom + \"~\" + keyLevelTop;\n var color = [obj_2.color[i / 2 * 4 + 0], obj_2.color[i / 2 * 4 + 1], obj_2.color[i / 2 * 4 + 2], obj_2.color[i / 2 * 4 + 3]];\n if (color[0] === -1 && color[1] === -1 && color[2] === -1) {\n continue;\n }\n color[0] *= 255;\n color[1] *= 255;\n color[2] *= 255;\n cutline[key] = color;\n thicknessIndex++;\n }\n legendManage_1.LegendManage.destory(this.elementKey);\n var component = legendManage_1.LegendManage.create(this.elementKey, cutline, \"\", \"\", \"\");\n if (this.showEnglishText) {\n component.title = \"Corrosion Zones\";\n component.leftText = \"Color\";\n component.rightText = \"Height Range(m): Thickness(mm)\";\n } else {\n component.title = \"腐蚀余量分色\";\n component.leftText = \"颜色\";\n component.rightText = \"壁高度范围(m): 厚度(mm)\";\n }\n }\n } else {\n obj.inactive(viewer);\n legendManage_1.LegendManage.destory(this.elementKey);\n }\n }\n if (isUpdate) this.viewer.updateDisplay();\n };\n CommonInterfaceManager.prototype.colorDivSwitch_ComponentGroup = function (on_off, isUpdate) {\n if (isUpdate === void 0) {\n isUpdate = true;\n }\n var viewer = this.viewer;\n var process = this.viewer.process;\n var componentGroups = process.findRenderObjectByName(\"构件分组分色\");\n if (componentGroups) {\n for (var i = 0; i < componentGroups.childObjects.length; i++) {\n var obj = componentGroups.childObjects[i];\n if (obj.checkBusinessStateIsActive()) {\n this.setAllComponentGroupVisible(obj.name);\n if (on_off) {\n obj.active(viewer);\n } else {\n obj.inactive(viewer);\n }\n }\n }\n if (on_off) {\n var cutline = {};\n if (componentGroups) {\n legendManage_1.LegendManage.destory(this.elementKey);\n for (var i = 0; i < componentGroups.childObjects.length; i++) {\n var obj = componentGroups.childObjects[i];\n if (obj.checkBusinessStateIsActive()) {\n var color = gs_bim_air_1.Longan.deepClone(obj.color);\n cutline[obj.name] = color;\n }\n }\n var component = legendManage_1.LegendManage.create(this.elementKey, cutline, \"\", \"\", \"\");\n if (this.showEnglishText) {\n component.title = \"Set Colors\";\n component.leftText = \"Color\";\n component.rightText = \"Set Name\";\n } else {\n component.title = \"自定义构件分组分色\";\n component.leftText = \"颜色\";\n component.rightText = \"分组名\";\n }\n }\n } else {\n legendManage_1.LegendManage.destory(this.elementKey);\n }\n }\n if (isUpdate) this.viewer.updateDisplay();\n };\n CommonInterfaceManager.prototype.setAllComponentGroupVisible = function (groupName) {\n var viewer = this.viewer;\n var process = this.viewer.process;\n var componentGroups = process.findRenderObjectByName(\"构件分组分色\");\n if (componentGroups) {\n for (var i = 0; i < componentGroups.childObjects.length; i++) {\n var obj = componentGroups.childObjects[i];\n if (obj.name === groupName) {\n if (obj.checkBusinessStateIsActive()) {\n obj.isVisible = true;\n obj.businessState = gs_ceec_design_2.BusinessState.Editing;\n obj.setChildVisible(viewer, true);\n }\n break;\n }\n }\n }\n };\n CommonInterfaceManager.prototype.colorSwitch = function (state, isUpdate) {\n if (isUpdate === void 0) {\n isUpdate = true;\n }\n switch (state) {\n case SwitchColorDivide.GrupName:\n this.colorDivSwitch_GrupThickness(false, isUpdate);\n this.colordDivSwitch_Mgrov(false, isUpdate);\n this.colordDivSwitch_Corrz(false, isUpdate);\n this.colorDivSwitch_ComponentGroup(false, isUpdate);\n this.colorDivSwitch_GrupName(true, isUpdate);\n break;\n case SwitchColorDivide.GrupThickness:\n this.colorDivSwitch_GrupName(false, isUpdate);\n this.colordDivSwitch_Mgrov(false, isUpdate);\n this.colordDivSwitch_Corrz(false, isUpdate);\n this.colorDivSwitch_ComponentGroup(false, isUpdate);\n this.colorDivSwitch_GrupThickness(true, isUpdate);\n break;\n case SwitchColorDivide.Mgrov:\n this.colorDivSwitch_GrupName(false, isUpdate);\n this.colorDivSwitch_GrupThickness(false, isUpdate);\n this.colordDivSwitch_Corrz(false, isUpdate);\n this.colorDivSwitch_ComponentGroup(false, isUpdate);\n this.colordDivSwitch_Mgrov(true, isUpdate);\n break;\n case SwitchColorDivide.Corrz:\n this.colorDivSwitch_GrupName(false, isUpdate);\n this.colorDivSwitch_GrupThickness(false, isUpdate);\n this.colordDivSwitch_Mgrov(false, isUpdate);\n this.colorDivSwitch_ComponentGroup(false, isUpdate);\n this.colordDivSwitch_Corrz(true, isUpdate);\n break;\n case SwitchColorDivide.ComponentGroup:\n this.colorDivSwitch_GrupName(false, isUpdate);\n this.colorDivSwitch_GrupThickness(false, isUpdate);\n this.colordDivSwitch_Mgrov(false, isUpdate);\n this.colordDivSwitch_Corrz(false, isUpdate);\n this.colorDivSwitch_ComponentGroup(true, isUpdate);\n break;\n case SwitchColorDivide.Cancel:\n this.colorDivSwitch_GrupName(false, isUpdate);\n this.colorDivSwitch_GrupThickness(false, isUpdate);\n this.colordDivSwitch_Mgrov(false, isUpdate);\n this.colordDivSwitch_Corrz(false, isUpdate);\n this.colorDivSwitch_ComponentGroup(false, isUpdate);\n break;\n }\n };\n CommonInterfaceManager.prototype.componentGroupColorVisibleSwitch = function (groupName, on_off) {\n var viewer = this.viewer;\n var process = this.viewer.process;\n var componentGroups = process.findRenderObjectByName(\"构件分组分色\");\n if (componentGroups) {\n for (var i = 0; i < componentGroups.childObjects.length; i++) {\n var obj = componentGroups.childObjects[i];\n if (obj.name === groupName) {\n if (obj.checkBusinessStateIsActive()) {\n obj.businessState = gs_ceec_design_2.BusinessState.Editing;\n if (on_off) {\n obj.active(viewer);\n } else {\n obj.inactive(viewer);\n }\n obj.setChildVisible(viewer, on_off);\n }\n break;\n }\n }\n }\n this.viewer.updateDisplay();\n };\n CommonInterfaceManager.prototype.waveSwitch = function (on_off) {\n var process = this.viewer.process;\n var wave = process.findRenderObjectByName(\"波面\");\n if (!wave) {\n return -1;\n }\n var currentWaveItemObject = process.findCaeObjectByNameInChildObject(wave, this.currentSelectWaveItemName);\n if (currentWaveItemObject) {\n if (on_off) {\n currentWaveItemObject.active(this.viewer);\n store_1.default.state.info = currentWaveItemObject.toString();\n } else {\n currentWaveItemObject.inactive(this.viewer);\n store_1.default.state.info = null;\n }\n } else {\n store_1.default.state.info = null;\n }\n this.viewer.updateDisplay();\n };\n CommonInterfaceManager.prototype.boreholeSwitch = function (on_off) {\n var process = this.viewer.process;\n var parentNode = process.findRenderObjectByName(\"土层和波面\");\n if (!parentNode) {\n return -1;\n }\n var elementKey = \"soild\";\n if (parentNode && on_off) {\n this.boreholeCutLineDisplay = true;\n for (var i = 0; i < parentNode.childObjects.length; i++) {\n parentNode.childObjects[i].active();\n }\n legendManage_1.LegendManage.create(elementKey, this.boreholeLegend, \"土层数据\", \"\", \"土层名\", {\n right: \"0px\",\n bottom: \"0px\"\n });\n } else {\n this.boreholeCutLineDisplay = false;\n for (var i = 0; i < parentNode.childObjects.length; i++) {\n parentNode.childObjects[i].inactive();\n }\n legendManage_1.LegendManage.destory(elementKey);\n }\n this.viewer.updateDisplay();\n };\n CommonInterfaceManager.prototype.checkPSI = function () {\n var exist = false;\n if (!this.viewer.datReaderManager.psiopt) {\n console.log(\"没有桩土数据.\");\n exist = false;\n } else {\n exist = true;\n }\n return exist;\n };\n CommonInterfaceManager.prototype.checkSeainp = function () {\n var exist = false;\n var ro = this.viewer.process.findRenderObjectByType(\"SeastateLdopt\");\n if (ro) {\n exist = true;\n }\n return exist;\n };\n CommonInterfaceManager.prototype.finiteElementSwitch = function (visible) {\n var members = this.viewer.process.findRenderObjectsByType(\"MemberObject\");\n if (visible) {\n for (var i = 0; i < members.length; i++) {\n var member = members[i];\n member.segmentLengthCoeff = memberObject_1.MemberObject.g_GridRatio;\n if (member.segmentLengthCoeff === -1) {\n member.segmentLengthCoeff = 0.9;\n }\n member.setNeedUpdate();\n }\n this.viewer.updateDisplay();\n } else {\n for (var i = 0; i < members.length; i++) {\n var member = members[i];\n member.segmentLengthCoeff = 1;\n member.setNeedUpdate();\n }\n }\n this.viewer.updateDisplay();\n };\n CommonInterfaceManager.prototype.editColors = function (backgroundColor, jointColor, memberColorLine, memberColorFace, plateColor) {\n objectColors_1.ObjectColor.jointColor = jointColor;\n objectColors_1.ObjectColor.memberFaceColor = memberColorFace;\n objectColors_1.ObjectColor.memberLineColor = memberColorLine;\n objectColors_1.ObjectColor.plateColor = plateColor;\n this.viewer.backgroundColor = backgroundColor;\n var joints = this.viewer.process.findRenderObjectsByType(\"JointObject\");\n joints.forEach(function (item) {\n item.segment.color.setMarker(jointColor);\n });\n var members = this.viewer.process.findRenderObjectsByType(\"MemberObject\");\n members.forEach(function (item) {\n item.faceColor = memberColorFace;\n item.lineColor = memberColorLine;\n item.setNeedUpdate();\n });\n var plates = this.viewer.process.findRenderObjectsByType(\"PlateObject\");\n plates.forEach(function (item) {\n item.faceColor = plateColor;\n item.setNeedUpdate();\n });\n this.viewer.updateDisplay();\n };\n CommonInterfaceManager.prototype.editLabelColors = function (jointLabel, memberLabel, plateLabel, loadLabel) {\n objectColors_1.ObjectColor.jointLabelColor = jointLabel;\n objectColors_1.ObjectColor.memberLabelColor = memberLabel;\n objectColors_1.ObjectColor.plateLabelColor = plateLabel;\n objectColors_1.ObjectColor.loadLabelColor = loadLabel;\n var joints = this.viewer.process.findRenderObjectsByType(\"JointObject\");\n joints.forEach(function (item) {\n item.isDrawSvg = false;\n item.isDrawSvg = true;\n });\n var members = this.viewer.process.findRenderObjectsByType(\"MemberObject\");\n members.forEach(function (item) {\n item.isDrawSvg = false;\n item.isDrawSvg = true;\n });\n var plates = this.viewer.process.findRenderObjectsByType(\"PlateObject\");\n plates.forEach(function (item) {\n item.isDrawSvg = false;\n item.isDrawSvg = true;\n });\n this.viewer.exeSceneCameraChanged(gs_bim_air_1.Longan.LonganCore.CameraChangeType.Scale);\n };\n CommonInterfaceManager.prototype.editSectionLabelColors = function (sectionViewer, backgroundColor, lineLabelColor, arrowLabelColor, textLabelColor) {\n if (backgroundColor) {\n sectionViewer.backgroundColor = backgroundColor;\n }\n if (lineLabelColor) {\n instanceSectionObject_1.InstanceSectionObject.lineLabelColor = lineLabelColor;\n }\n if (arrowLabelColor) {\n instanceSectionObject_1.InstanceSectionObject.arrowLabelColor = arrowLabelColor;\n }\n if (textLabelColor) {\n instanceSectionObject_1.InstanceSectionObject.textLabelColor = textLabelColor;\n }\n var root = sectionViewer.renderObject;\n root === null || root === void 0 ? void 0 : root.childObjects.forEach(function (section) {\n if (section instanceof sectionObject_1.SectionObject) {\n var iro_1 = sectionViewer.findInstanceObject(section);\n if (iro_1) {\n iro_1.removeSvg();\n setTimeout(function () {\n iro_1.drawSvg();\n }, 10);\n }\n }\n });\n };\n CommonInterfaceManager.prototype.switchActiveViewer = function (elementId) {\n var process = this.viewer.process;\n process.viewers.forEach(function (vi) {\n if (vi.container.id === elementId) {\n process.activeViewer = vi;\n return;\n }\n });\n };\n CommonInterfaceManager.prototype.showHistoryList = function () {\n var historyManager = this.viewer.process.historyManager;\n var list = historyManager.stateList;\n for (var i = 0; i < list.count(); i++) {\n console.log(list.items[i].name);\n }\n return list;\n };\n CommonInterfaceManager.prototype.historyRoll = function (index) {\n var historyManager = this.viewer.process.historyManager;\n var currentIdx = historyManager.currentStateIndex;\n if (currentIdx < index) {\n var time = index - currentIdx;\n for (var i = 0; i < time; i++) {\n this.viewer.process.historyManager.rollForward();\n }\n } else if (currentIdx > index) {\n var time = currentIdx - index;\n for (var i = 0; i < time; i++) {\n this.viewer.process.historyManager.rollBack();\n }\n }\n };\n CommonInterfaceManager.prototype.getLoadConditionList = function () {\n var loadConditions = this.viewer.process.findRenderObjectsByType(\"LoadConditionObject\");\n return loadConditions;\n };\n CommonInterfaceManager.prototype.getLoadConditionCombineList = function () {\n var objects = this.viewer.process.findRenderObjectsByType(\"SeastateLcomb\");\n return objects;\n };\n CommonInterfaceManager.prototype.removeProcessData = function () {\n this.viewer.process.clearRenderObjects(true);\n };\n CommonInterfaceManager.prototype.addJointLoad = function (loadConditionName, loadGroupName, selectedJointName, fx, fy, fz, mx, my, mz) {\n var viewer = this.viewer;\n var pretreatmentRO = viewer.process.findRenderObjectByName(\"后处理计算结果\");\n if (!pretreatmentRO) {\n console.error(\"没有'后处理计算结果'的RO节点\");\n return 2;\n }\n var conditionParent = viewer.process.findCaeObjectByNameInChildObject(pretreatmentRO, \"荷载工况\");\n if (!conditionParent) {\n conditionParent = new gs_ceec_design_2.DesignBaseObject();\n conditionParent.businessState = gs_ceec_design_2.BusinessState.Creating;\n conditionParent.name = \"荷载工况\";\n viewer.process.addRenderObject(pretreatmentRO, conditionParent);\n }\n var loadConditionRO = null;\n loadConditionRO = viewer.process.findCaeObjectByNameInChildObject(conditionParent, loadConditionName);\n if (!loadConditionRO) {\n loadConditionRO = new loadConditionObject_1.LoadConditionObject(loadConditionName);\n loadConditionRO.businessState = gs_ceec_design_2.BusinessState.Creating;\n viewer.process.addRenderObject(conditionParent, loadConditionRO);\n } else {\n loadConditionRO.businessState = gs_ceec_design_2.BusinessState.Editing;\n }\n var loadGroupRO = viewer.process.findCaeObjectByNameInChildObject(loadConditionRO, loadGroupName);\n if (!loadGroupRO) {\n loadGroupRO = new loadGroupObject_1.LoadGroupObject(loadGroupName);\n loadGroupRO.businessState = gs_ceec_design_2.BusinessState.Creating;\n viewer.process.addRenderObject(loadConditionRO, loadGroupRO);\n } else {\n loadGroupRO.businessState = gs_ceec_design_2.BusinessState.Editing;\n }\n for (var i = 0; i < loadGroupRO.childObjects.length; i++) {\n var load = loadGroupRO.childObjects[i];\n if (load instanceof jointLoadObject_1.JointLoadObject) {\n if (load.jointName === selectedJointName) {\n return 3;\n }\n }\n }\n var jointLoad = new jointLoadObject_1.JointLoadObject(loadConditionRO.name, loadGroupName);\n jointLoad.name = \"Joint:\" + selectedJointName;\n jointLoad.businessState = gs_ceec_design_2.BusinessState.Creating;\n jointLoad.jointName = selectedJointName;\n jointLoad.forceXDirection = fx;\n jointLoad.forceYDirection = fy;\n jointLoad.forceZDirection = fz;\n jointLoad.momentAboutXAxis = mx;\n jointLoad.momentAboutYAxis = my;\n jointLoad.momentAboutZAxis = mz;\n viewer.process.addRenderObject(loadGroupRO, jointLoad);\n return 1;\n };\n CommonInterfaceManager.prototype.editJointLoad = function (jointLoad, fx, fy, fz, mx, my, mz) {\n jointLoad.businessState = gs_ceec_design_2.BusinessState.Editing;\n jointLoad.forceXDirection = fx;\n jointLoad.forceYDirection = fy;\n jointLoad.forceZDirection = fz;\n jointLoad.momentAboutXAxis = mx;\n jointLoad.momentAboutYAxis = my;\n jointLoad.momentAboutZAxis = mz;\n };\n CommonInterfaceManager.prototype.boreholeChange = function (boreholeName) {\n var elementKey = \"soild\";\n if (this.boreholeCutLineDisplay) {\n this.boreholeCutLineDisplay = false;\n legendManage_1.LegendManage.destory(elementKey);\n var currentBoreholeObjects = this.currentBoreholeObjects;\n for (var i = 0; i < currentBoreholeObjects.length; i++) {\n if (currentBoreholeObjects[i].name === boreholeName) {\n currentBoreholeObjects[i].cutlienAcitve = true;\n this.activeBoreholeName = boreholeName;\n this.boreholeCutLineDisplay = true;\n var cutLineLegend = currentBoreholeObjects[i].geCutline();\n legendManage_1.LegendManage.create(elementKey, cutLineLegend, \"土层数据\", \"颜色\", \"土层名\", {\n right: \"0px\",\n bottom: \"0px\"\n });\n } else {\n currentBoreholeObjects[i].cutlienAcitve = false;\n }\n }\n }\n };\n return CommonInterfaceManager;\n }(gs_bim_air_1.Longan.ViewerManagerBase);\n exports.CommonInterfaceManager = CommonInterfaceManager;\n}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9wYWNrYWdlcy9jYWVEZXNpZ24vc3JjL2dzRGV2RngvbWFuYWdlcnMvaW50ZXJmYWNlTWFuYWdlcnMvY29tbW9uSW50ZXJmYWNlTWFuYWdlci50cy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1tuYW1lXS8uL3BhY2thZ2VzL2NhZURlc2lnbi9zcmMvZ3NEZXZGeC9tYW5hZ2Vycy9pbnRlcmZhY2VNYW5hZ2Vycy9jb21tb25JbnRlcmZhY2VNYW5hZ2VyLnRzPzcxNWMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ0FFTGlnaHRPYmplY3QgfSBmcm9tIFwiLi4vLi4vLi4vZ3NEZXZGeC9vYmplY3RzL2NhZUxpZ2h0T2JqZWN0L2NhZUxpZ2h0T2JqZWN0XCI7XG5pbXBvcnQgeyBKb2ludE9iamVjdCB9IGZyb20gXCIuLi8uLi8uLi9nc0RldkZ4L29iamVjdHMvY2FlT2JqZWN0cy9qb2ludE9iamVjdFwiO1xuaW1wb3J0IHsgTG9uZ2FuIH0gZnJvbSBcImdzLWJpbS1haXJcIjtcbmltcG9ydCB7IFZpZXdlciB9IGZyb20gXCIuLi8uLi92aWV3ZXJcIjtcbmltcG9ydCB7IFNlbGVjdG9yRmlsaXRlciB9IGZyb20gXCIuL3NlbGVjdGlvbkludGVyZmFjZU1hbmFnZXJcIjtcbmltcG9ydCB7IENBRVRhc2sgfSBmcm9tIFwiLi4vLi4vLi4vZ3NEZXZGeC90YXNrcy9jYWVUYXNrXCI7XG5pbXBvcnQgcmVuZGVyT2JqZWN0U2VydmljZSBmcm9tIFwiLi4vLi4vLi4vYXBpL3JlbmRlck9iamVjdFNlcnZpY2VcIjtcbmltcG9ydCB7IFByb2Nlc3MgfSBmcm9tIFwiLi4vLi4vLi4vZ3NEZXZGeC9wcm9jZXNzXCI7XG5pbXBvcnQgeyBNb2RlbFRpdGxlIH0gZnJvbSBcIi4uLy4uLy4uL2dzRGV2Rngvb2JqZWN0cy9jYWVPYmplY3RzL29wdGlvbk9iamVjdHMvbW9kZWxUaXRsZVwiO1xuaW1wb3J0IHsgQ2FyZFRJVExFIH0gZnJvbSBcIi4uLy4uLy4uL2NhZUNhcmRFZGl0b3IvY2FlQ2FyZE9iamVjdHMvc2FjaW5wL2NhcmRUSVRMRVwiO1xuaW1wb3J0IHsgUGVyc2lzdGVuY2VNYW5hZ2VyIH0gZnJvbSBcImdzLWNlZWMtZGVzaWduXCI7XG5pbXBvcnQgeyBNZW1iZXJPYmplY3QgfSBmcm9tIFwiLi4vLi4vLi4vZ3NEZXZGeC9vYmplY3RzL2NhZU9iamVjdHMvbWVtYmVyT2JqZWN0XCI7XG5pbXBvcnQgeyBCdXNpbmVzc1N0YXRlLCBEZXNpZ25CYXNlT2JqZWN0IH0gZnJvbSBcImdzLWNlZWMtZGVzaWduXCI7XG5pbXBvcnQgeyBNZ3Jvdk9iamVjdCB9IGZyb20gXCIuLi8uLi8uLi9nc0RldkZ4L29iamVjdHMvY2FlT2JqZWN0cy9wcmV0cmVhdG1lbnQvbWdyb3ZPYmplY3RcIjtcbmltcG9ydCB7IENvcnJ6T2JqZWN0IH0gZnJvbSBcIi4uLy4uLy4uL2dzRGV2Rngvb2JqZWN0cy9jYWVPYmplY3RzL3ByZXRyZWF0bWVudC9jb3Jyek9iamVjdFwiO1xuaW1wb3J0IHsgQ29sb3JEaXZHcnVwSWRPYmplY3QgfSBmcm9tIFwiLi4vLi4vLi4vZ3NEZXZGeC9vYmplY3RzL3ByZXRyZWF0bWVudE9iamVjdHMvY29sb3JEaXZHcnVwSWRPYmplY3RcIjtcbmltcG9ydCB7IENvbG9yRGl2R3J1cFRoaWNrbmVzc09iamVjdCB9IGZyb20gXCIuLi8uLi8uLi9nc0RldkZ4L29iamVjdHMvcHJldHJlYXRtZW50T2JqZWN0cy9jb2xvckRpdkdydXBUaGlja25lc3NPYmplY3RcIjtcbmltcG9ydCB7IENvbG9yRGl2TUdST1ZPYmplY3QgfSBmcm9tIFwiLi4vLi4vLi4vZ3NEZXZGeC9vYmplY3RzL3ByZXRyZWF0bWVudE9iamVjdHMvY29sb3JEaXZNR1JPVk9iamVjdFwiO1xuaW1wb3J0IHsgQ29sb3JEaXZDT1JSWk9iamVjdCB9IGZyb20gXCIuLi8uLi8uLi9nc0RldkZ4L29iamVjdHMvcHJldHJlYXRtZW50T2JqZWN0cy9jb2xvckRpdkNPUlJaT2JqZWN0XCI7XG5pbXBvcnQgc3RvcmUgZnJvbSBcIi4uLy4uLy4uL3N0b3JlXCI7XG5pbXBvcnQgeyBDdXRsaW5lR3J1cFRoaWNrbmVzc09iamVjdCB9IGZyb20gXCIuLi8uLi8uLi9nc0RldkZ4L29iamVjdHMvcHJldHJlYXRtZW50T2JqZWN0cy9jdXRsaW5lR3J1cFRoaWNrbmVzc09iamVjdFwiO1xuaW1wb3J0IHsgQ3V0bGluZUdydXBJZE9iamVjdCB9IGZyb20gXCIuLi8uLi8uLi9nc0RldkZ4L29iamVjdHMvcHJldHJlYXRtZW50T2JqZWN0cy9jdXRsaW5lR3J1cElkT2JqZWN0XCI7XG5pbXBvcnQgeyBQbGF0ZU9iamVjdCB9IGZyb20gXCIuLi8uLi8uLi9nc0RldkZ4L29iamVjdHMvY2FlT2JqZWN0cy9wbGF0ZU9iamVjdFwiO1xuaW1wb3J0IHsgQ29tbWFuZE1hbmFnZXIgfSBmcm9tIFwiLi4vY29tbWFuZE1hbmFnZXJcIjtcbmltcG9ydCB7IEdydXBPYmplY3QgfSBmcm9tIFwiLi4vLi4vLi4vZ3NEZXZGeC9vYmplY3RzL2NhZU9iamVjdHMvZ3J1cE9iamVjdFwiO1xuaW1wb3J0IHsgV2F2ZU9iamVjdCB9IGZyb20gXCIuLi8uLi8uLi9nc0RldkZ4L29iamVjdHMvcHJldHJlYXRtZW50T2JqZWN0cy93YXZlT2JqZWN0XCI7XG5pbXBvcnQgeyBXYXZlSXRlbU9iamVjdCB9IGZyb20gXCIuLi8uLi8uLi9nc0RldkZ4L29iamVjdHMvcHJldHJlYXRtZW50T2JqZWN0cy93YXZlSXRlbU9iamVjdFwiO1xuaW1wb3J0IHsgQ29sb3JEaXZDb21wb25lbnRHcm91cE9iamVjdCB9IGZyb20gXCIuLi8uLi8uLi9nc0RldkZ4L29iamVjdHMvcHJldHJlYXRtZW50T2JqZWN0cy9jb2xvckRpdkNvbXBvbmVudEdyb3VwT2JqZWN0XCI7XG5pbXBvcnQgeyBCb3JlaG9sZXNPYmplY3QgfSBmcm9tIFwiLi4vLi4vLi4vZ3NEZXZGeC9vYmplY3RzL3ByZXRyZWF0bWVudE9iamVjdHMvYm9yZWhvbGVPYmplY3RcIjtcbmltcG9ydCB7IE9iamVjdENvbG9yIH0gZnJvbSBcIi4uLy4uLy4uL2dzRGV2Rngvb2JqZWN0cy9jYWVPYmplY3RzL29iamVjdENvbG9yc1wiO1xuaW1wb3J0IHsgSW5zdGFuY2VTZWN0aW9uT2JqZWN0IH0gZnJvbSBcIi4uLy4uLy4uL2dzRGV2Rngvb2JqZWN0cy9jYWVPYmplY3RzL2luc3RhbmNlU2VjdGlvbk9iamVjdFwiO1xuaW1wb3J0IHsgU2VjdGlvbk9iamVjdCB9IGZyb20gXCIuLi8uLi8uLi9nc0RldkZ4L29iamVjdHMvY2FlT2JqZWN0cy9zZWN0aW9uT2JqZWN0XCI7XG5pbXBvcnQgeyBTZWN0aW9uVmlld2VyIH0gZnJvbSBcIi4uLy4uLy4uL2dzRGV2Rngvc2VjdGlvblZpZXdlclwiO1xuaW1wb3J0IHsgTG9hZENvbmRpdGlvbk9iamVjdCB9IGZyb20gXCIuLi8uLi8uLi9nc0RldkZ4L29iamVjdHMvbG9hZE9iamVjdHMvbG9hZENvbmRpdGlvbk9iamVjdFwiO1xuaW1wb3J0IHsgTG9hZEdyb3VwT2JqZWN0IH0gZnJvbSBcIi4uLy4uLy4uL2dzRGV2Rngvb2JqZWN0cy9sb2FkT2JqZWN0cy9sb2FkR3JvdXBPYmplY3RcIjtcbmltcG9ydCB7IEpvaW50TG9hZE9iamVjdCB9IGZyb20gXCIuLi8uLi8uLi9nc0RldkZ4L29iamVjdHMvbG9hZE9iamVjdHMvam9pbnRMb2FkT2JqZWN0XCI7XG5pbXBvcnQgeyBNZXNzYWdlIH0gZnJvbSBcImVsZW1lbnQtdWlcIjtcbmltcG9ydCB7IExlZ2VuZE1hbmFnZSB9IGZyb20gXCIuLi8uLi8uLi92aWV3ZXJXcmFwcGVyL21vZHVsZS9sZWdlbmRNYW5hZ2VcIjtcblxuZXhwb3J0IGVudW0gU3dpdGNoQ29sb3JEaXZpZGUge1xuICBHcnVwTmFtZSA9IDAsIC8v5oyJ5p2G5Lu25oiq6Z2i57uE5ZCN5YiG6ImyXG4gIEdydXBUaGlja25lc3MgPSAxLCAvL+aMieadhuS7tuWjgeWOmuWIhuiJslxuICBNZ3JvdiA9IDIsIC8v5oyJ5rW355Sf54mp5Y6a5bqm5YiG6ImyXG4gIENvcnJ6ID0gMywgLy/mjInohZDomoDkvZnph4/liIboibJcbiAgQ2FuY2VsID0gNCwgLy8g5Y+W5raI5YiG6Imy5pWI5p6cXG4gIENvbXBvbmVudEdyb3VwID0gNSwgLy8g6Ieq5a6a5LmJ5p6E5Lu25YiG6Imy5pWI5p6cXG4gIC8vIEJvcmVob2xlID0gNiwgLy8g5Zyf5bGC5pWI5p6cXG59XG5cbmV4cG9ydCBjbGFzcyBDb21tb25JbnRlcmZhY2VNYW5hZ2VyIGV4dGVuZHMgTG9uZ2FuLlZpZXdlck1hbmFnZXJCYXNlIHtcbiAgLy8gZWZmZWN0T2JqZWN0cyA9IG5ldyBMb25nYW4uTGlzdDxEZXNpZ25CYXNlT2JqZWN0PigpO1xuICBjdXJyZW50U2VsZWN0V2F2ZUl0ZW1OYW1lOiBzdHJpbmcgPSBudWxsO1xuICBjdXJyZW50Qm9yZWhvbGVPYmplY3RzOiBBcnJheTxCb3JlaG9sZXNPYmplY3Q+ID0gbnVsbDtcbiAgYm9yZWhvbGVMZWdlbmQgPSBudWxsO1xuICBib3JlaG9sZUN1dExpbmVEaXNwbGF5ID0gZmFsc2U7XG5cbiAgc2hvd0VuZ2xpc2hUZXh0ID0gZmFsc2U7XG5cbiAgLy8g5aSN5Yi25aSW6YOo5LqL5Lu2LlxuICBjb3B5ZWRFeHRlcm5hbEV2ZW50ID0gbnVsbDtcblxuICBlbGVtZW50S2V5ID0gXCJjdXRsaW5lXCI7XG4gIGFjdGl2ZUJvcmVob2xlTmFtZSA9IG51bGw7XG5cbiAgY29uc3RydWN0b3Iodmlld2VyOiBWaWV3ZXIpIHtcbiAgICBzdXBlcih2aWV3ZXIpO1xuICB9XG5cbiAgLy8gLyoqXG4gIC8vICAqIOe8lui+kemhueebruS/oeaBryjlkI3np7DjgIHlpIfms6gpXG4gIC8vICAqIEBwYXJhbSBwcm9qZWN0SWQg6aG555uuaWRcbiAgLy8gICogQHBhcmFtIHByb2plY3ROYW1lIOmhueebruWQjeensFxuICAvLyAgKiBAcGFyYW0gcHJvamVjdFJlbWFya3Mg6aG555uu5aSH5rOoXG4gIC8vICAqIEByZXR1cm5zIOaOpeWPo+S/oeaBr1xuICAvLyAgKi9cbiAgLy8gZWRpdFByb2plY3QocHJvamVjdElkOiBzdHJpbmcsIHByb2plY3ROYW1lOiBzdHJpbmcsIHByb2plY3RSZW1hcmtzOiBzdHJpbmcpIHtcbiAgLy8gICBpZiAoIXByb2plY3RJZCB8fCAhcHJvamVjdE5hbWUpIHtcbiAgLy8gICAgIHJldHVybjtcbiAgLy8gICB9XG4gIC8vICAgcmV0dXJuIFByb2plY3RzQXBpLmVkaXRQcm9qZWN0KHByb2plY3RJZCwge1xuICAvLyAgICAgbmFtZTogcHJvamVjdE5hbWUsXG4gIC8vICAgICByZW1hcmtzOiBwcm9qZWN0UmVtYXJrcyxcbiAgLy8gICB9KTtcbiAgLy8gfVxuXG4gIC8vIC8qKlxuICAvLyAgKiDojrflj5bpobnnm67liJfooahcbiAgLy8gICogQHJldHVybnMg6L+U5Zue6aG555uu5YiX6KGo5pWw5o2uXG4gIC8vICAqL1xuICAvLyBnZXRQcm9qZWN0TGlzdCgpIHtcbiAgLy8gICBQcm9qZWN0c0FwaS5nZXRQcm9qZWN0cygpLnRoZW4oKGRhdGEpID0+IHtcbiAgLy8gICAgIHJldHVybiBkYXRhO1xuICAvLyAgIH0pO1xuICAvLyB9XG5cbiAgLy8gLyoqXG4gIC8vICAqIOaWsOW7uumhueebrlxuICAvLyAgKiBAcGFyYW0gcHJvamVjdE5hbWUg6aG555uu5ZCNXG4gIC8vICAqIEBwYXJhbSBwcm9qZWN0UmVtYXJrcyDpobnnm67lpIfms6hcbiAgLy8gICogQHJldHVybnNcbiAgLy8gICovXG4gIC8vIGNyZWF0ZVByb2plY3RDb25maXJtKHByb2plY3ROYW1lOiBzdHJpbmcsIHByb2plY3RSZW1hcmtzOiBzdHJpbmcpIHtcbiAgLy8gICBpZiAoIXByb2plY3ROYW1lKSB7XG4gIC8vICAgICByZXR1cm47XG4gIC8vICAgfVxuICAvLyAgIGNvbnNvbGUubG9nKFwicHJvamVjdFJlbWFya3M6XCIsIHByb2plY3RSZW1hcmtzKTtcbiAgLy8gICByZXR1cm4gUHJvamVjdHNBcGkuY3JlYXRlUHJvamVjdCh7XG4gIC8vICAgICBuYW1lOiBwcm9qZWN0TmFtZSxcbiAgLy8gICAgIHJlbWFya3M6IHByb2plY3RSZW1hcmtzLFxuICAvLyAgIH0pO1xuICAvLyB9XG5cbiAgLyoqXG4gICAqIOiOt+WPluaooeWei1Bsb3RUaXRsZVxuICAgKiBAcmV0dXJucyDmqKHlnotQbG90VGl0bGVcbiAgICovXG4gIHNob3dQbG90VGl0bGUoKTogc3RyaW5nIHtcbiAgICBsZXQgcmVzdWx0ID0gbnVsbDtcblxuICAgIGxldCBwcm9jZXNzID0gdGhpcy52aWV3ZXIucHJvY2VzcyBhcyBQcm9jZXNzO1xuICAgIGxldCB0aXRsZVJPID0gcHJvY2Vzcy5maW5kUmVuZGVyT2JqZWN0QnlUeXBlKFwiTW9kZWxUaXRsZVwiKTtcbiAgICBpZiAodGl0bGVSTykge1xuICAgICAgaWYgKHRpdGxlUk8gaW5zdGFuY2VvZiBNb2RlbFRpdGxlKSB7XG4gICAgICAgIHJlc3VsdCA9IHRpdGxlUk8uY2FyZE9iamVjdC50aXRsZS52YWx1ZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gXCJBY3RpdmUgU3RydWN0dXJlXCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiDnvJbovpHmqKHlnotQbG90VGl0bGUuXG4gICAqIEBwYXJhbSB0aXRsZVxuICAgKi9cbiAgZWRpdFBsb3RUaXRsZSh0aXRsZTogc3RyaW5nKSB7XG4gICAgbGV0IHByb2Nlc3MgPSB0aGlzLnZpZXdlci5wcm9jZXNzIGFzIFByb2Nlc3M7XG5cbiAgICBpZiAoIXRpdGxlIHx8IHRpdGxlLnRyaW1FbmQoKSA9PT0gXCJcIikge1xuICAgICAgbGV0IHRpdGxlUk8gPSBwcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RCeVR5cGUoXCJNb2RlbFRpdGxlXCIpIGFzIE1vZGVsVGl0bGU7XG4gICAgICBpZiAodGl0bGVSTykge1xuICAgICAgICAvLyDliKDpmaTmoIfpopjmiJDlip9cbiAgICAgICAgdGl0bGVSTy50ZW1wRGVsZXRlKHRoaXMudmlld2VyIGFzIFZpZXdlcik7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBpc2xlZ2FsID0gdGhpcy5jaGVjVGl0bGVrTmFtZWxlZ2FsKHRpdGxlKTtcblxuICAgIGlmICghaXNsZWdhbCkge1xuICAgICAgLy8g5qCH6aKY5LiN5ZCI5rOVXG4gICAgICByZXR1cm4gMjtcbiAgICB9XG5cbiAgICBsZXQgdGl0bGVSTyA9IHByb2Nlc3MuZmluZFJlbmRlck9iamVjdEJ5VHlwZShcIk1vZGVsVGl0bGVcIik7XG4gICAgaWYgKHRpdGxlUk8pIHtcbiAgICAgIGlmICh0aXRsZVJPIGluc3RhbmNlb2YgTW9kZWxUaXRsZSkge1xuICAgICAgICB0aXRsZVJPLmNhcmRPYmplY3QudGl0bGUudmFsdWUgPSB0aXRsZTtcbiAgICAgICAgdGl0bGVSTy5jYXJkRGF0YSA9IHRpdGxlUk8uY2FyZE9iamVjdC5nZXRMaW5lKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCB0aXRsZVJPID0gbmV3IE1vZGVsVGl0bGUoKTtcbiAgICAgIHRpdGxlUk8ubmFtZSA9IFwiVElUTEVcIjtcbiAgICAgIGxldCBsaW5lID0gXCIgICAgIFwiICsgdGl0bGU7XG4gICAgICB0aXRsZVJPLmNhcmREYXRhID0gbGluZTtcbiAgICAgIHRpdGxlUk8uY2FyZE9iamVjdCA9IG5ldyBDYXJkVElUTEUobGluZSk7XG4gICAgICBwcm9jZXNzLmFkZFJlbmRlck9iamVjdChcbiAgICAgICAgcHJvY2Vzcy5jYWVSZW5kZXJPYmplY3RUcmVlTWFuYWdlci5zYWNpbnBOb2RlLFxuICAgICAgICB0aXRsZVJPXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiAxO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVjVGl0bGVrTmFtZWxlZ2FsKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGxldCByZWcgPSAvXltBLVowLTldKiQvO1xuICAgIGlmICghcmVnLnRlc3QobmFtZSkgfHwgbmFtZS50cmltRW5kKCkubGVuZ3RoID4gMTI1KSB7XG4gICAgICBjb25zb2xlLmxvZyhcIuepuumXtOeCueWQjeensOS4jeespuWQiOinhOiMg1wiKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICog6YeN572u6KeG5Zu+XG4gICAqL1xuICByZXNldFZpZXcoaXNTZXRWaWV3TW9kZSA9IHRydWUpIHtcbiAgICBsZXQgdmlld2VyID0gdGhpcy52aWV3ZXIucHJvY2Vzcy5hY3RpdmVWaWV3ZXIgYXMgVmlld2VyO1xuICAgIC8vIOWPlua2iOmrmOS6rlxuICAgIHZpZXdlci5zZWxlY3Rpb25NYW5hZ2VyLmNsZWFyQWxsU2VsZWN0aW9uQW5kSGlnaGxpZ2h0KCk7XG4gICAgLy8g5YWz6Zet5YWo6YOo5ZG95LukXG4gICAgKHZpZXdlci5wcm9jZXNzLmNvbW1hbmRNYW5hZ2VyIGFzIENvbW1hbmRNYW5hZ2VyKS5jbG9zZUFsbENvbW1hbmRzKCk7XG4gICAgLy8g5YWz6Zet5ZCE56eN5byA5YWzXG4gICAgdmlld2VyLmNvbW1vbkludGVyZmFjZU1hbmFnZXIuY29sb3JTd2l0Y2goU3dpdGNoQ29sb3JEaXZpZGUuQ2FuY2VsKTtcbiAgICB2aWV3ZXIuY29tbW9uSW50ZXJmYWNlTWFuYWdlci5maW5pdGVFbGVtZW50U3dpdGNoKGZhbHNlKTtcbiAgICAvLyDms6LpnaLlvIDlhbNcbiAgICB2aWV3ZXIuY29tbW9uSW50ZXJmYWNlTWFuYWdlci53YXZlU3dpdGNoKGZhbHNlKTtcbiAgICAvLyDlnJ/lsYLlvIDlhbNcbiAgICB2aWV3ZXIuY29tbW9uSW50ZXJmYWNlTWFuYWdlci5ib3JlaG9sZVN3aXRjaChmYWxzZSk7XG4gICAgLy8g5Y+W5raI5ZCE56eN5qCH562+LlxuICAgIHZpZXdlci52aWV3SW50ZXJmYWNlTWFuYWdlci5zZXRKb2ludE51bWJlclZpc2libGUoZmFsc2UpO1xuICAgIHZpZXdlci52aWV3SW50ZXJmYWNlTWFuYWdlci5zZXRKb2ludFJlc3RyYWludFZpc2libGUoZmFsc2UpO1xuXG4gICAgdmlld2VyLnZpZXdJbnRlcmZhY2VNYW5hZ2VyLnNldE1lbWJlckZpeGl0eVZpc2libGUoZmFsc2UpO1xuICAgIHZpZXdlci52aWV3SW50ZXJmYWNlTWFuYWdlci5zZXRNZW1iZXJMb2NhbEF4aXNWaXNpYmxlKGZhbHNlKTtcbiAgICB2aWV3ZXIudmlld0ludGVyZmFjZU1hbmFnZXIuc2V0TWVtYmVyU2VjdGlvblNpemVWaXNpYmxlKGZhbHNlKTtcbiAgICB2aWV3ZXIudmlld0ludGVyZmFjZU1hbmFnZXIuc2V0R3J1cE51bWJlclZpc2libGUoZmFsc2UpO1xuXG4gICAgLy8g5Y+W5raI5oyB57ut5peL6L2sXG4gICAgdmlld2VyLnZpZXdJbnRlcmZhY2VNYW5hZ2VyLmNvbnRpbnVlc1JvdGF0ZShmYWxzZSk7XG4gICAgdmlld2VyLnZpZXdJbnRlcmZhY2VNYW5hZ2VyLnNldENhbWVyYVNlbGVjdCgpO1xuXG4gICAgLy8gLy8g5oGi5aSN5Zyo5bmz6Z2i5LiK5pi+56S6XG4gICAgLy8gdmlld2VyLmNvbW1vbkludGVyZmFjZU1hbmFnZXIuZWZmZWN0T2JqZWN0cy5mb3JFYWNoKChvYmopID0+IHtcbiAgICAvLyAgIHZpZXdlci5maW5kSW5zdGFuY2VPYmplY3Qob2JqKS52aWV3ZXJWaXNpYmxlID0gdHJ1ZTtcbiAgICAvLyAgIHZpZXdlci5maW5kSW5zdGFuY2VPYmplY3Qob2JqKS52aXNpYmxlID0gdHJ1ZTtcbiAgICAvLyB9KTtcbiAgICAvLyB2aWV3ZXIuY29tbW9uSW50ZXJmYWNlTWFuYWdlci5lZmZlY3RPYmplY3RzLmNsZWFyKCk7XG5cbiAgICBsZXQgcHJvY2VzcyA9IHZpZXdlci5wcm9jZXNzIGFzIFByb2Nlc3M7XG4gICAgcHJvY2Vzcy5jYWVSZW5kZXJPYmplY3RUcmVlTWFuYWdlci5qb2ludE5vZGU/LmNoaWxkT2JqZWN0cy5mb3JFYWNoKFxuICAgICAgKG9iaikgPT4ge1xuICAgICAgICB2aWV3ZXIuZmluZEluc3RhbmNlT2JqZWN0KG9iaikudmlld2VyVmlzaWJsZSA9IHRydWU7XG4gICAgICAgIHZpZXdlci5maW5kSW5zdGFuY2VPYmplY3Qob2JqKS52aXNpYmxlID0gdHJ1ZTtcbiAgICAgICAgKG9iaiBhcyBEZXNpZ25CYXNlT2JqZWN0KS5jbGVhclN2ZygpO1xuICAgICAgfVxuICAgICk7XG4gICAgcHJvY2Vzcy5jYWVSZW5kZXJPYmplY3RUcmVlTWFuYWdlci5tZW1iZXJOb2RlPy5jaGlsZE9iamVjdHMuZm9yRWFjaChcbiAgICAgIChvYmopID0+IHtcbiAgICAgICAgdmlld2VyLmZpbmRJbnN0YW5jZU9iamVjdChvYmopLnZpZXdlclZpc2libGUgPSB0cnVlO1xuICAgICAgICB2aWV3ZXIuZmluZEluc3RhbmNlT2JqZWN0KG9iaikudmlzaWJsZSA9IHRydWU7XG4gICAgICAgIChvYmogYXMgRGVzaWduQmFzZU9iamVjdCkuY2xlYXJTdmcoKTtcbiAgICAgIH1cbiAgICApO1xuICAgIHByb2Nlc3MuY2FlUmVuZGVyT2JqZWN0VHJlZU1hbmFnZXIucGxhdGVOb2RlPy5jaGlsZE9iamVjdHMuZm9yRWFjaChcbiAgICAgIChvYmopID0+IHtcbiAgICAgICAgdmlld2VyLmZpbmRJbnN0YW5jZU9iamVjdChvYmopLnZpZXdlclZpc2libGUgPSB0cnVlO1xuICAgICAgICB2aWV3ZXIuZmluZEluc3RhbmNlT2JqZWN0KG9iaikudmlzaWJsZSA9IHRydWU7XG4gICAgICAgIChvYmogYXMgRGVzaWduQmFzZU9iamVjdCkuY2xlYXJTdmcoKTtcbiAgICAgIH1cbiAgICApO1xuXG4gICAgdmlld2VyLnZpZXdJbnRlcmZhY2VNYW5hZ2VyLm1lbWJlckxpbmVWaWV3KGZhbHNlKTtcbiAgICB2aWV3ZXIudmlld0ludGVyZmFjZU1hbmFnZXIucGxhdGVMaW5lVmlldyhmYWxzZSk7XG4gICAgLy8g6ZWc5aS05aSN5L2NLlxuICAgIGlmIChpc1NldFZpZXdNb2RlKSB7XG4gICAgICB2aWV3ZXIuc2V0Vmlld01vZGUoTG9uZ2FuLlZpZXdNb2RlLk9GU0lzbywgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOWIt+aWsOWFqOmDqHZpZXdlci5cbiAgICovXG4gIHJlZHJhdygpIHtcbiAgICBsZXQgcHJvY2VzcyA9IHRoaXMudmlld2VyLnByb2Nlc3M7XG4gICAgcHJvY2Vzcy52aWV3ZXJzLmZvckVhY2goKHZpKSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhcInZpXCIpO1xuICAgICAgdmkuZXhlU2NlbmVDYW1lcmFDaGFuZ2VkKFxuICAgICAgICBMb25nYW4uTG9uZ2FuQ29yZS5DYW1lcmFDaGFuZ2VUeXBlLlJvdGF0ZSB8XG4gICAgICAgICAgTG9uZ2FuLkxvbmdhbkNvcmUuQ2FtZXJhQ2hhbmdlVHlwZS5TY2FsZSB8XG4gICAgICAgICAgTG9uZ2FuLkxvbmdhbkNvcmUuQ2FtZXJhQ2hhbmdlVHlwZS5UcmFuc2xhdGVcbiAgICAgICk7XG4gICAgICB2aS51cGRhdGVEaXNwbGF5KCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICog5qOA5rWL5piv5ZCm5pyJ6ZmQ5YWD5qih5Z6LXG4gICAqL1xuICBjaGVja0lzRmluaXRlRWxlbWVudCgpIHtcbiAgICBsZXQgaXNGRSA9IHRydWU7XG5cbiAgICBsZXQgdmlld2VyID0gdGhpcy52aWV3ZXIgYXMgVmlld2VyO1xuICAgIGxldCBncnVwTm9kZSA9IHZpZXdlci5wcm9jZXNzLmNhZVJlbmRlck9iamVjdFRyZWVNYW5hZ2VyLmdydXBOb2RlO1xuICAgIGdydXBOb2RlPy5jaGlsZE9iamVjdHMuZm9yRWFjaCgoZ3J1cCkgPT4ge1xuICAgICAgaWYgKGdydXAgaW5zdGFuY2VvZiBHcnVwT2JqZWN0KSB7XG4gICAgICAgIGlmIChncnVwLmdydXBTZWdtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgaXNGRSA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiBpc0ZFO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zb2xlLmxvZyhcImlzRkU6XCIsIGlzRkUpO1xuICAgIHJldHVybiBpc0ZFO1xuICB9XG5cbiAgLyoqXG4gICAqIOaJk+W8gOeOsOacieaooeWei1xuICAgKiBAcGFyYW0gbW9kZWxJZCDmqKHlnotJZFxuICAgKiBAcGFyYW0gaXNSZXBsYWNlIOaYr+WQpua4hemZpHZpZXdlcuW3suWKoOi9veeahOaVsOaNrlxuICAgKi9cbiAgb3Blbk1vZGVsKG1vZGVsSWQ6IHN0cmluZywgaXNSZXBsYWNlOiBib29sZWFuKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgbGV0IHZpZXdlciA9IHRoaXMudmlld2VyIGFzIFZpZXdlcjtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB2aWV3ZXJcbiAgICAgICAgLmxvYWRNb2RlbChtb2RlbElkLCBpc1JlcGxhY2UpXG4gICAgICAgIC50aGVuKChtb2RlbCkgPT4ge1xuICAgICAgICAgIC8vIOa4heepuuWOhuWPsuaTjeS9nC5cbiAgICAgICAgICB2aWV3ZXIucHJvY2Vzcy5oaXN0b3J5TWFuYWdlci5jbGVhckRlbHRhU3RhdGUoKTtcbiAgICAgICAgICB2aWV3ZXIuc2NlbmVTZWdtZW50LnJlbmRlcmluZ09wdGlvbnMuY3VsbGluZ01heGltdW1FeHRlbnQgPSAwO1xuXG4gICAgICAgICAgY29uc29sZS5sb2coXCJtb2RlbFwiLCBtb2RlbCk7XG4gICAgICAgICAgbGV0IHJvID0gdmlld2VyLnJlbmRlck9iamVjdDtcbiAgICAgICAgICBsZXQgY2FlVGFzayA9IG5ldyBDQUVUYXNrKHJvLCB2aWV3ZXIpO1xuICAgICAgICAgIGNhZVRhc2sud29ya1JlbmRlck9iamVjdFNlcnZpY2UgPSByZW5kZXJPYmplY3RTZXJ2aWNlO1xuICAgICAgICAgIHZpZXdlci5wcm9jZXNzLnRhc2tNYW5hZ2VyLmV4ZWN1dGUoY2FlVGFzayk7XG5cbiAgICAgICAgICB2aWV3ZXIuc3RydWN0dXJlVHJlZU1hbmFnZXIudXBkYXRlKCk7XG4gICAgICAgICAgdmlld2VyLnVwZGF0ZURpc3BsYXkoKTtcbiAgICAgICAgICB2aWV3ZXIuc2V0Vmlld01vZGUoTG9uZ2FuLlZpZXdNb2RlLk9GU0lzbywgdHJ1ZSk7XG5cbiAgICAgICAgICAvLyDor7fmsYLlkI7lpITnkIbkvb/nlKjnmoREQuaVsOaNri5cbiAgICAgICAgICB2aWV3ZXIucG9zdEludGVyZmFjZU1hbmFnZXIucmVxdWVzdERCRGF0YSgpO1xuXG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKHJlYXNvbikgPT4ge1xuICAgICAgICAgIGNvbnNvbGUubG9nKFwicmVhc29uOlwiLCByZWFzb24pO1xuICAgICAgICAgIE1lc3NhZ2UuaW5mbyhyZWFzb24pO1xuICAgICAgICAgIHJlamVjdChyZWFzb24pO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiDmo4Dmn6XmqKHlnovmmK/lkKbpnIDopoHkv53lrZgo5Lmf5bCx5piv5a+55q+U5qih5Z6L5b2T5YmN54q25oCB5LiO5Y6f5aeL54q25oCB5piv5ZCm5Y+R55Sf5LqG5pS55Y+YKS5cbiAgICogQHJldHVybnMgdHJ1ZTrpnIDopoHkv53lrZg7ZmFsc2U65LiN6ZyA6KaB5L+d5a2YLlxuICAgKi9cbiAgY2hlY2tOZWVkU2F2ZSgpIHtcbiAgICAvL1xuICAgIGxldCByb290Uk8gPSAodGhpcy52aWV3ZXIucHJvY2VzcyBhcyBhbnkpLmNhZVJlbmRlck9iamVjdFRyZWVNYW5hZ2VyXG4gICAgICAucm9vdE5vZGU7XG4gICAgaWYgKHJvb3RSTyBpbnN0YW5jZW9mIENBRUxpZ2h0T2JqZWN0KSB7XG4gICAgICBsZXQgcmVzdWx0ID0gUGVyc2lzdGVuY2VNYW5hZ2VyLnNhdmVEZXNpZ24ocm9vdFJPKTtcbiAgICAgIGlmIChcbiAgICAgICAgcmVzdWx0LmNyZWF0ZUxpc3QubGVuZ3RoID4gMCB8fFxuICAgICAgICByZXN1bHQuZGVsZXRlTGlzdC5sZW5ndGggPiAwIHx8XG4gICAgICAgIHJlc3VsdC5lZGl0TGlzdC5sZW5ndGggPiAwXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIOS/neWtmOW9k+WJjemhueebrlxuICAgKi9cbiAgc2F2ZSgpOiBQcm9taXNlPGFueT4ge1xuICAgIC8vIGxldCBmbGFnID0gdGhpcy5jaGVja05lZWRTYXZlKCk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGxldCByb290Uk8gPSAodGhpcy52aWV3ZXIucHJvY2VzcyBhcyBhbnkpLmNhZVJlbmRlck9iamVjdFRyZWVNYW5hZ2VyXG4gICAgICAgIC5yb290Tm9kZTtcbiAgICAgIGlmIChyb290Uk8gaW5zdGFuY2VvZiBDQUVMaWdodE9iamVjdCkge1xuICAgICAgICByb290Uk8uc2F2ZSh0aGlzLnZpZXdlcikudGhlbigoZGF0YSkgPT4ge1xuICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIOWPpuWtmOWNoeeJh+aVsOaNrlxuICAgKi9cbiAgZXhwb3J0REFURmlsZSgpIHtcbiAgICBjb25zb2xlLmxvZyhcImV4cG9ydFwiKTtcbiAgICBsZXQgZGF0Q2FyZERhdGEgPSAodGhpcy52aWV3ZXIgYXMgVmlld2VyKS5kYXRXcml0ZXJNYW5hZ2VyLmV4cG9ydERBVEZpbGUoKTtcbiAgICBkYXRDYXJkRGF0YSArPSBcIkVORFwiO1xuXG4gICAgcmV0dXJuIGRhdENhcmREYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIOWvvOWHuuadhuS7tuaVsOaNrlxuICAgKiBAcGFyYW0gaXNFeHBvcnRBbGwgdHJ1ZTrlr7zlh7rlhajpg6jmnYbku7bmlbDmja7vvJtmYWxzZTrku4Xlr7zlh7rmkYTlg4/mnLrlhoXnmoTmnYbku7bmlbDmja5cbiAgICogQHJldHVybnNcbiAgICovXG4gIGV4cG9ydE1lbWJlckRhdGEoaXNFeHBvcnRBbGwgPSB0cnVlKSB7XG4gICAgY29uc29sZS5sb2coXCJleHBvcnQgbWVtYmVyXCIpO1xuICAgIGxldCBkYXRDYXJkRGF0YSA9ICh0aGlzLnZpZXdlciBhcyBWaWV3ZXIpLmRhdFdyaXRlck1hbmFnZXIuZXhwb3J0TWVtYmVyRGF0YShcbiAgICAgIGlzRXhwb3J0QWxsXG4gICAgKTtcbiAgICBkYXRDYXJkRGF0YSArPSBcIkVORFwiO1xuXG4gICAgcmV0dXJuIGRhdENhcmREYXRhO1xuICB9XG5cbiAgLyoqXG4gICAqIOWvvOWHuuahqeWfuuaVsOaNrlxuICAgKiBAcGFyYW0gaXNFeHBvcnRBbGwgIHRydWU65a+85Ye65YWo6YOo5qGp5Z+65pWw5o2u77ybZmFsc2U65LuF5a+85Ye65pGE5YOP5py65YaF55qE5qGp5Z+65pWw5o2uXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBleHBvcnRQaWxlRGF0YShpc0V4cG9ydEFsbCA9IHRydWUpIHtcbiAgICBjb25zb2xlLmxvZyhcImV4cG9ydCBwaWxlXCIpO1xuICAgIGxldCBkYXRDYXJkRGF0YSA9ICh0aGlzLnZpZXdlciBhcyBWaWV3ZXIpLmRhdFdyaXRlck1hbmFnZXIuZXhwb3J0UGlsZURhdGEoXG4gICAgICBpc0V4cG9ydEFsbFxuICAgICk7XG4gICAgaWYgKGRhdENhcmREYXRhID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZGF0Q2FyZERhdGEgKz0gXCJFTkRcIjtcblxuICAgIHJldHVybiBkYXRDYXJkRGF0YTtcbiAgfVxuXG4gIC8vIGV4cG9ydFNlY3Rpb25EYXRhKGRhdENhcmREYXRhOiBzdHJpbmcpIHtcbiAgLy8gICBsZXQgdHVicyA9IHRoaXMudmlld2VyLnByb2Nlc3MuZmluZFJlbmRlck9iamVjdHNCeVR5cGUoXCJUdWJTZWN0aW9uT2JqZWN0XCIpO1xuICAvLyAgIGZvciAobGV0IGkgPSAwOyBpIDwgdHVicy5sZW5ndGg7IGkrKykge1xuICAvLyAgICAgbGV0IG9iaiA9IHR1YnNbaV0gYXMgVHViU2VjdGlvbk9iamVjdDtcbiAgLy8gICAgIGlmIChcbiAgLy8gICAgICAgb2JqLmJ1c2luZXNzU3RhdGUgPT09IEJ1c2luZXNzU3RhdGUuRGVsZXRpbmcgfHxcbiAgLy8gICAgICAgb2JqLmJ1c2luZXNzU3RhdGUgPT09IEJ1c2luZXNzU3RhdGUuRGVhZFxuICAvLyAgICAgKSB7XG4gIC8vICAgICAgIGNvbnRpbnVlO1xuICAvLyAgICAgfVxuICAvLyAgICAgbGV0IGxpbmUgPSBvYmouc2VyaWFsaXplVG9DYXJkKCk7XG4gIC8vICAgICBkYXRDYXJkRGF0YSArPSBsaW5lICs9IFwiXFxuXCI7XG4gIC8vICAgfVxuXG4gIC8vICAgbGV0IHdmcyA9IHRoaXMudmlld2VyLnByb2Nlc3MuZmluZFJlbmRlck9iamVjdHNCeVR5cGUoXCJXRlNlY3Rpb25PYmplY3RcIik7XG4gIC8vICAgZm9yIChsZXQgaSA9IDA7IGkgPCB3ZnMubGVuZ3RoOyBpKyspIHtcbiAgLy8gICAgIGxldCBvYmogPSB3ZnNbaV0gYXMgV0ZTZWN0aW9uT2JqZWN0O1xuICAvLyAgICAgaWYgKFxuICAvLyAgICAgICBvYmouYnVzaW5lc3NTdGF0ZSA9PT0gQnVzaW5lc3NTdGF0ZS5EZWxldGluZyB8fFxuICAvLyAgICAgICBvYmouYnVzaW5lc3NTdGF0ZSA9PT0gQnVzaW5lc3NTdGF0ZS5EZWFkXG4gIC8vICAgICApIHtcbiAgLy8gICAgICAgY29udGludWU7XG4gIC8vICAgICB9XG4gIC8vICAgICBsZXQgbGluZSA9IG9iai5zZXJpYWxpemVUb0NhcmQoKTtcbiAgLy8gICAgIGRhdENhcmREYXRhICs9IGxpbmUgKz0gXCJcXG5cIjtcbiAgLy8gICB9XG5cbiAgLy8gICBsZXQgYm94cyA9IHRoaXMudmlld2VyLnByb2Nlc3MuZmluZFJlbmRlck9iamVjdHNCeVR5cGUoXCJCb3hTZWN0aW9uT2JqZWN0XCIpO1xuICAvLyAgIGZvciAobGV0IGkgPSAwOyBpIDwgYm94cy5sZW5ndGg7IGkrKykge1xuICAvLyAgICAgbGV0IG9iaiA9IGJveHNbaV0gYXMgQm94U2VjdGlvbk9iamVjdDtcbiAgLy8gICAgIGlmIChcbiAgLy8gICAgICAgb2JqLmJ1c2luZXNzU3RhdGUgPT09IEJ1c2luZXNzU3RhdGUuRGVsZXRpbmcgfHxcbiAgLy8gICAgICAgb2JqLmJ1c2luZXNzU3RhdGUgPT09IEJ1c2luZXNzU3RhdGUuRGVhZFxuICAvLyAgICAgKSB7XG4gIC8vICAgICAgIGNvbnRpbnVlO1xuICAvLyAgICAgfVxuICAvLyAgICAgbGV0IGxpbmUgPSBvYmouc2VyaWFsaXplVG9DYXJkKCk7XG4gIC8vICAgICBkYXRDYXJkRGF0YSArPSBsaW5lICs9IFwiXFxuXCI7XG4gIC8vICAgfVxuXG4gIC8vICAgbGV0IHByaXMgPSB0aGlzLnZpZXdlci5wcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RzQnlUeXBlKFwiUHJpU2VjdGlvbk9iamVjdFwiKTtcbiAgLy8gICBmb3IgKGxldCBpID0gMDsgaSA8IHByaXMubGVuZ3RoOyBpKyspIHtcbiAgLy8gICAgIGxldCBvYmogPSBwcmlzW2ldIGFzIFByaVNlY3Rpb25PYmplY3Q7XG4gIC8vICAgICBpZiAoXG4gIC8vICAgICAgIG9iai5idXNpbmVzc1N0YXRlID09PSBCdXNpbmVzc1N0YXRlLkRlbGV0aW5nIHx8XG4gIC8vICAgICAgIG9iai5idXNpbmVzc1N0YXRlID09PSBCdXNpbmVzc1N0YXRlLkRlYWRcbiAgLy8gICAgICkge1xuICAvLyAgICAgICBjb250aW51ZTtcbiAgLy8gICAgIH1cbiAgLy8gICAgIGxldCBsaW5lID0gb2JqLnNlcmlhbGl6ZVRvQ2FyZCgpO1xuICAvLyAgICAgZGF0Q2FyZERhdGEgKz0gbGluZSArPSBcIlxcblwiO1xuICAvLyAgIH1cblxuICAvLyAgIGxldCBjb25zID0gdGhpcy52aWV3ZXIucHJvY2Vzcy5maW5kUmVuZGVyT2JqZWN0c0J5VHlwZShcIkNvblNlY3Rpb25PYmplY3RcIik7XG4gIC8vICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb25zLmxlbmd0aDsgaSsrKSB7XG4gIC8vICAgICBsZXQgb2JqID0gY29uc1tpXSBhcyBDb25TZWN0aW9uT2JqZWN0O1xuICAvLyAgICAgaWYgKFxuICAvLyAgICAgICBvYmouYnVzaW5lc3NTdGF0ZSA9PT0gQnVzaW5lc3NTdGF0ZS5EZWxldGluZyB8fFxuICAvLyAgICAgICBvYmouYnVzaW5lc3NTdGF0ZSA9PT0gQnVzaW5lc3NTdGF0ZS5EZWFkXG4gIC8vICAgICApIHtcbiAgLy8gICAgICAgY29udGludWU7XG4gIC8vICAgICB9XG4gIC8vICAgICBsZXQgbGluZSA9IG9iai5zZXJpYWxpemVUb0NhcmQoKTtcbiAgLy8gICAgIGRhdENhcmREYXRhICs9IGxpbmUgKz0gXCJcXG5cIjtcbiAgLy8gICB9XG5cbiAgLy8gICBsZXQgY2hscyA9IHRoaXMudmlld2VyLnByb2Nlc3MuZmluZFJlbmRlck9iamVjdHNCeVR5cGUoXCJDaGxTZWN0aW9uT2JqZWN0XCIpO1xuICAvLyAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hscy5sZW5ndGg7IGkrKykge1xuICAvLyAgICAgbGV0IG9iaiA9IGNobHNbaV0gYXMgQ2hsU2VjdGlvbk9iamVjdDtcbiAgLy8gICAgIGlmIChcbiAgLy8gICAgICAgb2JqLmJ1c2luZXNzU3RhdGUgPT09IEJ1c2luZXNzU3RhdGUuRGVsZXRpbmcgfHxcbiAgLy8gICAgICAgb2JqLmJ1c2luZXNzU3RhdGUgPT09IEJ1c2luZXNzU3RhdGUuRGVhZFxuICAvLyAgICAgKSB7XG4gIC8vICAgICAgIGNvbnRpbnVlO1xuICAvLyAgICAgfVxuICAvLyAgICAgbGV0IGxpbmUgPSBvYmouc2VyaWFsaXplVG9DYXJkKCk7XG4gIC8vICAgICBkYXRDYXJkRGF0YSArPSBsaW5lICs9IFwiXFxuXCI7XG4gIC8vICAgfVxuXG4gIC8vICAgbGV0IHRlZXMgPSB0aGlzLnZpZXdlci5wcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RzQnlUeXBlKFwiVGVlU2VjdGlvbk9iamVjdFwiKTtcbiAgLy8gICBmb3IgKGxldCBpID0gMDsgaSA8IHRlZXMubGVuZ3RoOyBpKyspIHtcbiAgLy8gICAgIGxldCBvYmogPSB0ZWVzW2ldIGFzIFRlZVNlY3Rpb25PYmplY3Q7XG4gIC8vICAgICBpZiAoXG4gIC8vICAgICAgIG9iai5idXNpbmVzc1N0YXRlID09PSBCdXNpbmVzc1N0YXRlLkRlbGV0aW5nIHx8XG4gIC8vICAgICAgIG9iai5idXNpbmVzc1N0YXRlID09PSBCdXNpbmVzc1N0YXRlLkRlYWRcbiAgLy8gICAgICkge1xuICAvLyAgICAgICBjb250aW51ZTtcbiAgLy8gICAgIH1cbiAgLy8gICAgIGxldCBsaW5lID0gb2JqLnNlcmlhbGl6ZVRvQ2FyZCgpO1xuICAvLyAgICAgZGF0Q2FyZERhdGEgKz0gbGluZSArPSBcIlxcblwiO1xuICAvLyAgIH1cblxuICAvLyAgIGxldCBhbmdzID0gdGhpcy52aWV3ZXIucHJvY2Vzcy5maW5kUmVuZGVyT2JqZWN0c0J5VHlwZShcIkFuZ1NlY3Rpb25PYmplY3RcIik7XG4gIC8vICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhbmdzLmxlbmd0aDsgaSsrKSB7XG4gIC8vICAgICBsZXQgb2JqID0gYW5nc1tpXSBhcyBBbmdTZWN0aW9uT2JqZWN0O1xuICAvLyAgICAgaWYgKFxuICAvLyAgICAgICBvYmouYnVzaW5lc3NTdGF0ZSA9PT0gQnVzaW5lc3NTdGF0ZS5EZWxldGluZyB8fFxuICAvLyAgICAgICBvYmouYnVzaW5lc3NTdGF0ZSA9PT0gQnVzaW5lc3NTdGF0ZS5EZWFkXG4gIC8vICAgICApIHtcbiAgLy8gICAgICAgY29udGludWU7XG4gIC8vICAgICB9XG4gIC8vICAgICBsZXQgbGluZSA9IG9iai5zZXJpYWxpemVUb0NhcmQoKTtcbiAgLy8gICAgIGRhdENhcmREYXRhICs9IGxpbmUgKz0gXCJcXG5cIjtcbiAgLy8gICB9XG5cbiAgLy8gICBsZXQgZHRicyA9IHRoaXMudmlld2VyLnByb2Nlc3MuZmluZFJlbmRlck9iamVjdHNCeVR5cGUoXCJEdGJTZWN0aW9uT2JqZWN0XCIpO1xuICAvLyAgIGZvciAobGV0IGkgPSAwOyBpIDwgZHRicy5sZW5ndGg7IGkrKykge1xuICAvLyAgICAgbGV0IG9iaiA9IGR0YnNbaV0gYXMgRHRiU2VjdGlvbk9iamVjdDtcbiAgLy8gICAgIGlmIChcbiAgLy8gICAgICAgb2JqLmJ1c2luZXNzU3RhdGUgPT09IEJ1c2luZXNzU3RhdGUuRGVsZXRpbmcgfHxcbiAgLy8gICAgICAgb2JqLmJ1c2luZXNzU3RhdGUgPT09IEJ1c2luZXNzU3RhdGUuRGVhZFxuICAvLyAgICAgKSB7XG4gIC8vICAgICAgIGNvbnRpbnVlO1xuICAvLyAgICAgfVxuICAvLyAgICAgbGV0IGxpbmUgPSBvYmouc2VyaWFsaXplVG9DYXJkKCk7XG4gIC8vICAgICBkYXRDYXJkRGF0YSArPSBsaW5lICs9IFwiXFxuXCI7XG4gIC8vICAgfVxuXG4gIC8vICAgbGV0IHJ0YnMgPSB0aGlzLnZpZXdlci5wcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RzQnlUeXBlKFwiUnRiU2VjdGlvbk9iamVjdFwiKTtcbiAgLy8gICBmb3IgKGxldCBpID0gMDsgaSA8IHJ0YnMubGVuZ3RoOyBpKyspIHtcbiAgLy8gICAgIGxldCBvYmogPSBydGJzW2ldIGFzIFJ0YlNlY3Rpb25PYmplY3Q7XG4gIC8vICAgICBpZiAoXG4gIC8vICAgICAgIG9iai5idXNpbmVzc1N0YXRlID09PSBCdXNpbmVzc1N0YXRlLkRlbGV0aW5nIHx8XG4gIC8vICAgICAgIG9iai5idXNpbmVzc1N0YXRlID09PSBCdXNpbmVzc1N0YXRlLkRlYWRcbiAgLy8gICAgICkge1xuICAvLyAgICAgICBjb250aW51ZTtcbiAgLy8gICAgIH1cbiAgLy8gICAgIGxldCBsaW5lID0gb2JqLnNlcmlhbGl6ZVRvQ2FyZCgpO1xuICAvLyAgICAgZGF0Q2FyZERhdGEgKz0gbGluZSArPSBcIlxcblwiO1xuICAvLyAgIH1cblxuICAvLyBsZXQgYmxicyA9IHRoaXMudmlld2VyLnByb2Nlc3MuZmluZFJlbmRlck9iamVjdHNCeVR5cGUoXCJCYmxTZWN0aW9uT2JqZWN0XCIpO1xuICAvLyBmb3IgKGxldCBpID0gMDsgaSA8IGJsYnMubGVuZ3RoOyBpKyspIHtcbiAgLy8gICBsZXQgb2JqID0gYmxic1tpXSBhcyBCbGJTZWN0aW9uT2JqZWN0O1xuICAvLyAgIGlmIChcbiAgLy8gICAgIG9iai5idXNpbmVzc1N0YXRlID09PSBCdXNpbmVzc1N0YXRlLkRlbGV0aW5nIHx8XG4gIC8vICAgICBvYmouYnVzaW5lc3NTdGF0ZSA9PT0gQnVzaW5lc3NTdGF0ZS5EZWFkXG4gIC8vICAgKSB7XG4gIC8vICAgICBjb250aW51ZTtcbiAgLy8gICB9XG4gIC8vICAgbGV0IGxpbmUgPSBvYmouc2VyaWFsaXplVG9DYXJkKCk7XG4gIC8vICAgZGF0Q2FyZERhdGEgKz0gbGluZSArPSBcIlxcblwiO1xuICAvLyB9XG5cbiAgLy8gICByZXR1cm4gZGF0Q2FyZERhdGE7XG4gIC8vIH1cblxuICAvKipcbiAgICog5a+85Ye65rW35Ya15Y2h54mH5pWw5o2uLlxuICAgKi9cbiAgZXhwb3J0REFURmlsZV9TZWFpbnAoKSB7XG4gICAgLy8gY2FyZCBkYXRhICsgcm8gLT4gY2FyZFxuICAgIGNvbnNvbGUubG9nKFwiZXhwb3J0X3NlYWlucFwiKTtcbiAgICBsZXQgdmlld2VyID0gdGhpcy52aWV3ZXIgYXMgVmlld2VyO1xuICAgIGxldCBkYXRDYXJkRGF0YSA9IHZpZXdlci5kYXRXcml0ZXJNYW5hZ2VyLmV4cG9ydERBVEZpbGVfU2VhaW5wKCk7XG4gICAgZGF0Q2FyZERhdGEgKz0gXCJFTkRcIjtcblxuICAgIHJldHVybiBkYXRDYXJkRGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiDlr7zlh7rmqKHlnovljaHniYfmlbDmja4uXG4gICAqL1xuICBleHBvcnREQVRGaWxlX1NhY2lucCgpIHtcbiAgICAvL1xuICAgIGNvbnNvbGUubG9nKFwiZXhwb3J0X3NhY2lucFwiKTtcbiAgICBsZXQgdmlld2VyID0gdGhpcy52aWV3ZXIgYXMgVmlld2VyO1xuICAgIGxldCBkYXRDYXJkRGF0YSA9IHZpZXdlci5kYXRXcml0ZXJNYW5hZ2VyLmV4cG9ydERBVEZpbGVfU2FjaW5wKCk7XG4gICAgZGF0Q2FyZERhdGEgKz0gXCJFTkRcIjtcblxuICAgIHJldHVybiBkYXRDYXJkRGF0YTtcbiAgfVxuXG4gIC8vIOWvvOWFpURBVFxuICBpbXBvcnREQVREYXRhKGNvbnRlbnQ6IHN0cmluZywgb3ZlcldyaXRlOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICBjb25zb2xlLmxvZyhcImltcG9ydERBVERhdGFcIik7XG4gICAgKHRoaXMudmlld2VyIGFzIFZpZXdlcikuZGF0UmVhZGVyTWFuYWdlci5pbXBvcnREQVREYXRhKGNvbnRlbnQsIG92ZXJXcml0ZSk7XG5cbiAgICB0aGlzLnZpZXdlci51cGRhdGVEaXNwbGF5KCk7XG4gIH1cblxuICAvLyDlr7zlhaXmtbflhrXmlofku7ZcbiAgaW1wb3J0U0VBRGF0YShjb250ZW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnNvbGUubG9nKFwiaW1wb3J0U0VBRGF0YVwiKTtcbiAgICBsZXQgcm8gPSB0aGlzLnZpZXdlci5wcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RCeVR5cGUoXCJTZWFzdGF0ZUxkb3B0XCIpO1xuICAgIGlmIChybykge1xuICAgICAgbGV0IG1lc3NhZ2UgPSBcIuW3sue7j+WtmOWcqOa1t+WGteaVsOaNrlwiO1xuICAgICAgTWVzc2FnZS5lcnJvcihtZXNzYWdlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgKHRoaXMudmlld2VyIGFzIFZpZXdlcikuZGF0UmVhZGVyTWFuYWdlci5pbXBvcnRTZWFpbnBEYXRhKGNvbnRlbnQpO1xuXG4gICAgdGhpcy52aWV3ZXIudXBkYXRlRGlzcGxheSgpO1xuICAgICh0aGlzLnZpZXdlciBhcyBWaWV3ZXIpLnN0cnVjdHVyZVRyZWVNYW5hZ2VyLnVwZGF0ZSgpO1xuICAgIHJldHVybiBcImltcG9ydFNFQURhdGEgc3VjY2Vzc2Z1bFwiO1xuICB9XG5cbiAgLyoqXG4gICAqIOWvvOWFpeWQjuWkhOeQhnNlYW9jaeaWh+S7tu+8jOS7heino+aekOiNt+i9veaVsOaNrlxuICAgKiBAcGFyYW0gY29udGVudFxuICAgKi9cbiAgaW1wb3J0U2Vhb2NpRGF0YShjb250ZW50OiBzdHJpbmcpIHtcbiAgICBjb25zb2xlLmxvZyhcImltcG9ydFNlYW9jaURhdGFcIik7XG4gICAgKHRoaXMudmlld2VyIGFzIFZpZXdlcikuZGF0UmVhZGVyTWFuYWdlci5pbXBvcnRTZWFvY2lEYXRhKGNvbnRlbnQpO1xuXG4gICAgdGhpcy52aWV3ZXIudXBkYXRlRGlzcGxheSgpO1xuICAgICh0aGlzLnZpZXdlciBhcyBWaWV3ZXIpLnN0cnVjdHVyZVRyZWVNYW5hZ2VyLnVwZGF0ZSgpO1xuICAgIHJldHVybiBcImltcG9ydFNlYW9jaURhdGEgc3VjY2Vzc2Z1bFwiO1xuICB9XG5cbiAgLy8g5a+85YWl5qGp5Zyf5pWw5o2uXG4gIGltcG9ydFBTSURhdGEoY29udGVudDogc3RyaW5nKSB7XG4gICAgY29uc29sZS5sb2coXCJpbXBvcnRQU0lEYXRhXCIpO1xuICAgICh0aGlzLnZpZXdlciBhcyBWaWV3ZXIpLmRhdFJlYWRlck1hbmFnZXIuaW1wb3J0UFNJRGF0YShjb250ZW50KTtcblxuICAgIHRoaXMudmlld2VyLnVwZGF0ZURpc3BsYXkoKTtcbiAgICAodGhpcy52aWV3ZXIgYXMgVmlld2VyKS5zdHJ1Y3R1cmVUcmVlTWFuYWdlci51cGRhdGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDljoblj7Llm57pgIBcbiAgICovXG4gIGhpc3RvcnlCYWNrKCkge1xuICAgIGlmIChQcm9jZXNzLmFjdGl2ZVByb2Nlc3MuaGlzdG9yeU1hbmFnZXIuY2FuUm9sbEJhY2spIHtcbiAgICAgIFByb2Nlc3MuYWN0aXZlUHJvY2Vzcy5oaXN0b3J5TWFuYWdlci5yb2xsQmFjaygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDljoblj7Lph43lgZpcbiAgICovXG4gIGhpc3RvcnlGb3J3YXJkKCkge1xuICAgIGlmIChQcm9jZXNzLmFjdGl2ZVByb2Nlc3MuaGlzdG9yeU1hbmFnZXIuY2FuUm9sbEZvcndhcmQpIHtcbiAgICAgIFByb2Nlc3MuYWN0aXZlUHJvY2Vzcy5oaXN0b3J5TWFuYWdlci5yb2xsRm9yd2FyZCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDmjInlvZPliY3mv4DmtLvnmoTpgInmi6nov4fmu6TlmajnsbvlnovvvIzpgInkuK3lubbnuqLoibLpq5jkuq7lvZPliY3op4blj6PkuK3mmL7npLrnmoTmiYDmnInlr7nlupTlh6DkvZXlhYPntKBcbiAgICovXG4gIHNlbGVjdEFsbCgpIHtcbiAgICAvL1xuICAgIGxldCB2aWV3ZXIgPSB0aGlzLnZpZXdlciBhcyBWaWV3ZXI7XG4gICAgdmlld2VyLnNlbGVjdGlvbk1hbmFnZXIuY2xlYXJBbGxTZWxlY3Rpb25BbmRIaWdobGlnaHQoKTtcbiAgICBzd2l0Y2ggKHZpZXdlci5zZWxlY3Rpb25JbnRlcmZhY2VNYW5hZ2VyLnNlbGVjdG9yRmlsdGVyKSB7XG4gICAgICAvL1xuICAgICAgY2FzZSBTZWxlY3RvckZpbGl0ZXIuSm9pbnQ6XG4gICAgICAgIHRoaXMuc2VsZWN0QWxsSm9pbnRzKCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBTZWxlY3RvckZpbGl0ZXIuTWVtYmVyOlxuICAgICAgICB0aGlzLnNlbGVjdEFsbE1lbWJlcnMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFNlbGVjdG9yRmlsaXRlci5QbGF0ZTpcbiAgICAgICAgdGhpcy5zZWxlY3RBbGxQbGF0ZXMoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFNlbGVjdG9yRmlsaXRlci5BbGw6XG4gICAgICAgIHRoaXMuc2VsZWN0QWxsSm9pbnRzKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0QWxsTWVtYmVycygpO1xuICAgICAgICB0aGlzLnNlbGVjdEFsbFBsYXRlcygpO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICB0aGlzLnZpZXdlci51cGRhdGVEaXNwbGF5KCk7XG4gIH1cblxuICAvLyDmiZPlvIDnvJbovpHlmahcblxuICAvKipcbiAgICog5Yib5bu66KeG54K5KOWvueW9k+WJjeinhuWPo+aIquWbvilcbiAgICogQHBhcmFtIHZpZXdQb2ludE5hbWUg6KeG54K55ZCNXG4gICAqL1xuICBjcmVhdGVWaWV3UG9pbnQodmlld1BvaW50TmFtZTogc3RyaW5nKSB7XG4gICAgLy8g5Yib5bu66KeG54K5XG4gICAgKHRoaXMudmlld2VyIGFzIFZpZXdlcikuY2FlUGFuZWxNYW5hZ2VyLnZpZXdQb2ludFBhbmVsQ2FlXG4gICAgICAuYWRkVmlld1BvaW50KHZpZXdQb2ludE5hbWUpXG4gICAgICAudGhlbigoKSA9PiB7fSk7XG4gIH1cblxuICBwcml2YXRlIHNlbGVjdEFsbEpvaW50cygpIHtcbiAgICBsZXQgam9pbnRzID0gdGhpcy52aWV3ZXIucHJvY2Vzcy5maW5kUmVuZGVyT2JqZWN0c0J5VHlwZShcIkpvaW50T2JqZWN0XCIpO1xuICAgIGxldCBrZXlzID0gbmV3IEFycmF5PG51bWJlcj4oKTtcbiAgICBsZXQgcGF0aHMgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuXG4gICAgam9pbnRzLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIGtleXMucHVzaChpdGVtLnNlZ21lbnQua2V5KTtcbiAgICAgIHBhdGhzLnB1c2goaXRlbS5zZWdtZW50LnBhdGgpO1xuICAgIH0pO1xuICAgIHRoaXMudmlld2VyLnNlbGVjdGlvbk1hbmFnZXIuc2VsZWN0QW5kSGlnaGxpZ2h0S2V5cyhrZXlzLCBwYXRocyk7XG4gIH1cblxuICBwcml2YXRlIHNlbGVjdEFsbE1lbWJlcnMoKSB7XG4gICAgLy9cbiAgICBsZXQgbWVtYmVycyA9IHRoaXMudmlld2VyLnByb2Nlc3MuZmluZFJlbmRlck9iamVjdHNCeVR5cGUoXCJNZW1iZXJPYmplY3RcIik7XG4gICAgbGV0IGtleXMgPSBuZXcgQXJyYXk8bnVtYmVyPigpO1xuICAgIGxldCBwYXRocyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG5cbiAgICBtZW1iZXJzLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIGtleXMucHVzaChpdGVtLnNlZ21lbnQua2V5KTtcbiAgICAgIHBhdGhzLnB1c2goaXRlbS5zZWdtZW50LnBhdGgpO1xuICAgIH0pO1xuICAgIHRoaXMudmlld2VyLnNlbGVjdGlvbk1hbmFnZXIuc2VsZWN0QW5kSGlnaGxpZ2h0S2V5cyhrZXlzLCBwYXRocyk7XG4gIH1cblxuICBwcml2YXRlIHNlbGVjdEFsbFBsYXRlcygpIHtcbiAgICBsZXQgcGxhdGVzID0gdGhpcy52aWV3ZXIucHJvY2Vzcy5maW5kUmVuZGVyT2JqZWN0c0J5VHlwZShcIlBsYXRlT2JqZWN0XCIpO1xuICAgIGxldCBrZXlzID0gbmV3IEFycmF5PG51bWJlcj4oKTtcbiAgICBsZXQgcGF0aHMgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuXG4gICAgcGxhdGVzLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIGtleXMucHVzaChpdGVtLnNlZ21lbnQua2V5KTtcbiAgICAgIHBhdGhzLnB1c2goaXRlbS5zZWdtZW50LnBhdGgpO1xuICAgIH0pO1xuICAgIHRoaXMudmlld2VyLnNlbGVjdGlvbk1hbmFnZXIuc2VsZWN0QW5kSGlnaGxpZ2h0S2V5cyhrZXlzLCBwYXRocyk7XG4gIH1cblxuICAvKipcbiAgICog5p+l5om+5bey5pi+56S655qE56m66Ze054K5XG4gICAqIEBwYXJhbSBqb2ludE5hbWUg56m66Ze054K55ZCN5a2XXG4gICAqL1xuICBmaW5kSm9pbnQoam9pbnROYW1lOiBzdHJpbmcpOiBKb2ludE9iamVjdCB7XG4gICAgbGV0IHByb2Nlc3MgPSB0aGlzLnZpZXdlci5wcm9jZXNzIGFzIFByb2Nlc3M7XG4gICAgbGV0IHJvID0gcHJvY2Vzcy5maW5kQ2FlT2JqZWN0QnlOYW1lSW5DaGlsZE9iamVjdChcbiAgICAgIHByb2Nlc3MuY2FlUmVuZGVyT2JqZWN0VHJlZU1hbmFnZXIuam9pbnROb2RlIGFzIERlc2lnbkJhc2VPYmplY3QsXG4gICAgICBqb2ludE5hbWVcbiAgICApO1xuICAgIGlmIChybyAmJiBybyBpbnN0YW5jZW9mIEpvaW50T2JqZWN0KSB7XG4gICAgICB0aGlzLnZpZXdlci5zZWxlY3Rpb25NYW5hZ2VyLmNsZWFyQWxsU2VsZWN0aW9uQW5kSGlnaGxpZ2h0KCk7XG4gICAgICB0aGlzLnZpZXdlci5sb2NhdGVXb3JsZChyby5zZWdtZW50KTtcbiAgICAgIHRoaXMudmlld2VyLnNlbGVjdGlvbk1hbmFnZXIuc2VsZWN0QW5kSGlnaGxpZ2h0S2V5cyhcbiAgICAgICAgW3JvLnNlZ21lbnQua2V5XSxcbiAgICAgICAgW3JvLnNlZ21lbnQucGF0aF1cbiAgICAgICk7XG4gICAgICB0aGlzLnZpZXdlci51cGRhdGVEaXNwbGF5KCk7XG5cbiAgICAgIHJldHVybiBybztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOmHjeWRveWQjeepuumXtOeCuVxuICAgKiBAcGFyYW0gb3JpZ2luSm9pbnROYW1lIOWOn+Wni+eCueWQjeensFxuICAgKiBAcGFyYW0gbmV3Sm9pbnROYW1lIOaWsOeahOeCueWQjeensFxuICAgKiBAcmV0dXJucyDov5Tlm57ph43lkb3lkI3nmoTnu5Pmnpzmj5DnpLpcbiAgICovXG4gIHJlbmFtZUpvaW50KFxuICAgIG9yaWdpbkpvaW50TmFtZTogc3RyaW5nLFxuICAgIG5ld0pvaW50TmFtZTogc3RyaW5nLFxuICAgIHVzZU5leHRBdmFsaWFibGU6IGJvb2xlYW5cbiAgKSB7XG4gICAgLy9cbiAgICBsZXQgcHJvY2VzcyA9IHRoaXMudmlld2VyLnByb2Nlc3MgYXMgUHJvY2VzcztcblxuICAgIGxldCByZXN1bHQgPSB7fTtcbiAgICBpZiAoIUpvaW50T2JqZWN0LmNoZWNrTmFtZWxlZ2FsKG5ld0pvaW50TmFtZSkpIHtcbiAgICAgIHJlc3VsdCA9IDM7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGxldCBqb2ludE5vZGUgPSBwcm9jZXNzLmNhZVJlbmRlck9iamVjdFRyZWVNYW5hZ2VyLmpvaW50Tm9kZTtcbiAgICBsZXQgcm8gPSBwcm9jZXNzLmZpbmRDYWVPYmplY3RCeU5hbWVJbkNoaWxkT2JqZWN0KFxuICAgICAgam9pbnROb2RlLFxuICAgICAgb3JpZ2luSm9pbnROYW1lXG4gICAgKTtcbiAgICBpZiAocm8gJiYgcm8gaW5zdGFuY2VvZiBKb2ludE9iamVjdCkge1xuICAgICAgaWYgKCF1c2VOZXh0QXZhbGlhYmxlKSB7XG4gICAgICAgIGxldCBuZXdOYW1lUk8gPSBwcm9jZXNzLmZpbmRDYWVPYmplY3RCeU5hbWVJbkNoaWxkT2JqZWN0KFxuICAgICAgICAgIGpvaW50Tm9kZSxcbiAgICAgICAgICBuZXdKb2ludE5hbWVcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKG5ld05hbWVSTykge1xuICAgICAgICAgIHJlc3VsdCA9IDMgKyBcIixcIiArIG5ld0pvaW50TmFtZTtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdKb2ludE5hbWUgPSBwcm9jZXNzLmNhZVJlbmRlck9iamVjdFRyZWVNYW5hZ2VyLm5hbWVBc2NlbmRpbmdPcmRlcihcbiAgICAgICAgICBuZXdKb2ludE5hbWUsXG4gICAgICAgICAgMSxcbiAgICAgICAgICBwcm9jZXNzLm5hbWVNYXBKb2ludFxuICAgICAgICApWzBdO1xuICAgICAgfVxuXG4gICAgICByby5uYW1lID0gbmV3Sm9pbnROYW1lO1xuICAgICAgLy8gcm8uaXNEcmF3TmFtZSA9IHRydWU7XG4gICAgICByby5zZXROZWVkVXBkYXRlKCk7XG4gICAgICAvLyBzdWNjZXNzZnVsXG4gICAgICByZXN1bHQgPSAyICsgXCIsXCIgKyBvcmlnaW5Kb2ludE5hbWUgKyBcIixcIiArIG5ld0pvaW50TmFtZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gMSArIFwiLFwiICsgb3JpZ2luSm9pbnROYW1lO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICog5p+l5om+5bey5pi+56S655qE5p2G5Lu2XG4gICAqIEBwYXJhbSBtZW1iZXJOYW1lIOadhuS7tuWQjeWtl1xuICAgKi9cbiAgZmluZE1lbWJlcihtZW1iZXJOYW1lOiBzdHJpbmcpOiBNZW1iZXJPYmplY3Qge1xuICAgIGxldCBwcm9jZXNzID0gdGhpcy52aWV3ZXIucHJvY2VzcyBhcyBQcm9jZXNzO1xuXG4gICAgbGV0IHJvID0gcHJvY2Vzcy5maW5kQ2FlT2JqZWN0QnlOYW1lSW5DaGlsZE9iamVjdChcbiAgICAgIHByb2Nlc3MuY2FlUmVuZGVyT2JqZWN0VHJlZU1hbmFnZXIubWVtYmVyTm9kZSBhcyBEZXNpZ25CYXNlT2JqZWN0LFxuICAgICAgbWVtYmVyTmFtZVxuICAgICk7XG4gICAgaWYgKHJvICYmIHJvIGluc3RhbmNlb2YgTWVtYmVyT2JqZWN0KSB7XG4gICAgICB0aGlzLnZpZXdlci5zZWxlY3Rpb25NYW5hZ2VyLmNsZWFyQWxsU2VsZWN0aW9uQW5kSGlnaGxpZ2h0KCk7XG4gICAgICB0aGlzLnZpZXdlci5sb2NhdGVXb3JsZChyby5zZWdtZW50KTtcbiAgICAgIHRoaXMudmlld2VyLnNlbGVjdGlvbk1hbmFnZXIuc2VsZWN0QW5kSGlnaGxpZ2h0S2V5cyhcbiAgICAgICAgW3JvLnNlZ21lbnQua2V5XSxcbiAgICAgICAgW3JvLnNlZ21lbnQucGF0aF1cbiAgICAgICk7XG4gICAgICB0aGlzLnZpZXdlci51cGRhdGVEaXNwbGF5KCk7XG5cbiAgICAgIHJldHVybiBybztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIOmAmui/h+adhuS7tuWQjeensOe7hOmrmOS6ruadhuS7tlxuICAgKiBAcGFyYW0gbmFtZXNcbiAgICovXG4gIGhpZ2hsaWdodE1lbWJlckJ5TmFtZXMobmFtZXM6IHN0cmluZ1tdKSB7XG4gICAgLy9cbiAgICBsZXQgcHJvY2VzcyA9IHRoaXMudmlld2VyLnByb2Nlc3MgYXMgUHJvY2VzcztcblxuICAgIGxldCBrZXlzID0gW107XG4gICAgbGV0IHBhdGhzID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgb2JqID0gcHJvY2Vzcy5maW5kQ2FlT2JqZWN0QnlOYW1lSW5DaGlsZE9iamVjdChcbiAgICAgICAgcHJvY2Vzcy5jYWVSZW5kZXJPYmplY3RUcmVlTWFuYWdlci5tZW1iZXJOb2RlLFxuICAgICAgICBuYW1lc1tpXVxuICAgICAgKTtcblxuICAgICAgaWYgKG9iaikge1xuICAgICAgICBrZXlzLnB1c2gob2JqLnNlZ21lbnQua2V5KTtcbiAgICAgICAgcGF0aHMucHVzaChvYmouc2VnbWVudC5wYXRoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwi5om+5LiN5YiwXCIgKyBuYW1lc1tpXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy52aWV3ZXIuc2VsZWN0aW9uTWFuYWdlci5jbGVhckFsbFNlbGVjdGlvbkFuZEhpZ2hsaWdodCgpO1xuICAgIHRoaXMudmlld2VyLnNlbGVjdGlvbk1hbmFnZXIuc2VsZWN0QW5kSGlnaGxpZ2h0S2V5cyhrZXlzLCBwYXRocyk7XG4gICAgdGhpcy52aWV3ZXIudXBkYXRlRGlzcGxheSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIOmAmui/h+adv+WQjeensOe7hOmrmOS6ruadvy5cbiAgICogQHBhcmFtIG5hbWVzXG4gICAqL1xuICBoaWdobGlnaHRQbGF0ZUJ5TmFtZXMobmFtZXM6IHN0cmluZ1tdKSB7XG4gICAgLy9cbiAgICBsZXQga2V5cyA9IFtdO1xuICAgIGxldCBwYXRocyA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IG9iaiA9IChcbiAgICAgICAgdGhpcy52aWV3ZXIucHJvY2VzcyBhcyBQcm9jZXNzXG4gICAgICApLmZpbmRDYWVPYmplY3RCeU5hbWVJbkNoaWxkT2JqZWN0KFxuICAgICAgICAodGhpcy52aWV3ZXIucHJvY2VzcyBhcyBQcm9jZXNzKS5jYWVSZW5kZXJPYmplY3RUcmVlTWFuYWdlci5wbGF0ZU5vZGUsXG4gICAgICAgIG5hbWVzW2ldXG4gICAgICApO1xuXG4gICAgICBpZiAob2JqKSB7XG4gICAgICAgIGtleXMucHVzaChvYmouc2VnbWVudC5rZXkpO1xuICAgICAgICBwYXRocy5wdXNoKG9iai5zZWdtZW50LnBhdGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coXCLmib7kuI3liLBcIiArIG5hbWVzW2ldKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnZpZXdlci5zZWxlY3Rpb25NYW5hZ2VyLmNsZWFyQWxsU2VsZWN0aW9uQW5kSGlnaGxpZ2h0KCk7XG4gICAgdGhpcy52aWV3ZXIuc2VsZWN0aW9uTWFuYWdlci5zZWxlY3RBbmRIaWdobGlnaHRLZXlzKGtleXMsIHBhdGhzKTtcbiAgICB0aGlzLnZpZXdlci51cGRhdGVEaXNwbGF5KCk7XG4gIH1cblxuICAvKipcbiAgICog5p+l5om+5bey5pi+56S655qE5p2/XG4gICAqIEBwYXJhbSBwbGF0ZU5hbWUg5p2/5ZCN56ewXG4gICAqIEByZXR1cm5zXG4gICAqL1xuICBmaW5kUGxhdGUocGxhdGVOYW1lOiBzdHJpbmcpIHtcbiAgICBsZXQgcHJvY2VzcyA9IHRoaXMudmlld2VyLnByb2Nlc3MgYXMgUHJvY2VzcztcblxuICAgIGxldCBybyA9IHByb2Nlc3MuZmluZENhZU9iamVjdEJ5TmFtZUluQ2hpbGRPYmplY3QoXG4gICAgICBwcm9jZXNzLmNhZVJlbmRlck9iamVjdFRyZWVNYW5hZ2VyLnBsYXRlTm9kZSBhcyBEZXNpZ25CYXNlT2JqZWN0LFxuICAgICAgcGxhdGVOYW1lXG4gICAgKTtcbiAgICBpZiAocm8gJiYgcm8gaW5zdGFuY2VvZiBQbGF0ZU9iamVjdCkge1xuICAgICAgdGhpcy52aWV3ZXIuc2VsZWN0aW9uTWFuYWdlci5jbGVhckFsbFNlbGVjdGlvbkFuZEhpZ2hsaWdodCgpO1xuICAgICAgdGhpcy52aWV3ZXIubG9jYXRlV29ybGQocm8uc2VnbWVudCk7XG4gICAgICB0aGlzLnZpZXdlci5zZWxlY3Rpb25NYW5hZ2VyLnNlbGVjdEFuZEhpZ2hsaWdodEtleXMoXG4gICAgICAgIFtyby5zZWdtZW50LmtleV0sXG4gICAgICAgIFtyby5zZWdtZW50LnBhdGhdXG4gICAgICApO1xuICAgICAgdGhpcy52aWV3ZXIudXBkYXRlRGlzcGxheSgpO1xuXG4gICAgICByZXR1cm4gcm87XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8vIC8qKlxuICAvLyAgKiDov5Tlm55DQUXnu5PmnoTmoJHnmoTmlbDmja4uXG4gIC8vICAqIEByZXR1cm5zXG4gIC8vICAqL1xuICAvLyBnZXRTdHJ1Y3R1cmVUcmVlRGF0YSgpOiBzdHJpbmcge1xuICAvLyAgIC8vXG4gIC8vICAgbGV0IHJvb3ROb2RlID0gKHRoaXMudmlld2VyIGFzIFZpZXdlcikucHJvY2Vzcy5jYWVSZW5kZXJPYmplY3RUcmVlTWFuYWdlclxuICAvLyAgICAgLnJvb3ROb2RlO1xuICAvLyAgIGxldCBtb2RlbERhdGEgPSBKU09OLnN0cmluZ2lmeShcbiAgLy8gICAgIHRoaXMudmlld2VyLnByb2Nlc3MucGVyc2lzdGVuY2VNYW5hZ2VyLnNhdmUocm9vdE5vZGUpXG4gIC8vICAgKTtcbiAgLy8gICByZXR1cm4gbW9kZWxEYXRhO1xuICAvLyB9XG5cbiAgLyoqXG4gICAqIOi/lOWbnkNBRee7k+aehOagkeeahOaVsOaNri5cbiAgICogQHJldHVybnNcbiAgICovXG4gIGdldFN0cnVjdHVyZVRyZWVEYXRhKCkge1xuICAgIC8vXG4gICAgbGV0IHJvb3ROb2RlID0gKHRoaXMudmlld2VyIGFzIFZpZXdlcikuc3RydWN0dXJlVHJlZU1hbmFnZXIucm9vdE5vZGU7XG4gICAgcmV0dXJuIHJvb3ROb2RlO1xuICB9XG5cbiAgZ2V0TWVtYmVyR3J1cHMoKSB7XG4gICAgLy8g5p2G5Lu25oiq6Z2i57uE5ZCN5a2X5YiX6KGoXG4gICAgbGV0IGdydXBOYW1lTGlzdCA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG5cbiAgICBsZXQgZ3J1cE9iamVjdEdyb3VwID1cbiAgICAgIHRoaXMudmlld2VyLnByb2Nlc3MuZmluZFJlbmRlck9iamVjdEJ5TmFtZShcIuadhuS7tuaIqumdoue7hFwiKTtcbiAgICBpZiAoZ3J1cE9iamVjdEdyb3VwKSB7XG4gICAgICBncnVwT2JqZWN0R3JvdXAuY2hpbGRPYmplY3RzLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICBncnVwTmFtZUxpc3QucHVzaChpdGVtLm5hbWUpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGdydXBOYW1lTGlzdDtcbiAgfVxuXG4gIC8qKlxuICAgKiDnu5PmnoTmoJHmt7vliqDoioLngrkuXG4gICAqL1xuICBhZGRTdHJ1Y3R1cmVOb2RlKHBhcmVudDogTG9uZ2FuLlJlbmRlck9iamVjdCwgcm86IERlc2lnbkJhc2VPYmplY3QpIHtcbiAgICB0aGlzLnZpZXdlci5wcm9jZXNzLmFkZFJlbmRlck9iamVjdChwYXJlbnQsIHJvKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDnu5PmnoTmoJHmt7vliqDoioLngrkuXG4gICAqL1xuICByZW1vdmVTdHJ1Y3R1cmVOb2RlKHJvOiBEZXNpZ25CYXNlT2JqZWN0KSB7XG4gICAgdGhpcy52aWV3ZXIucHJvY2Vzcy5yZW1vdmVSZW5kZXJPYmplY3Qocm8pO1xuICB9XG5cbiAgLyoqXG4gICAqIOWIm+W7uua1t+eUn+eJqeWOmuW6puaMiemrmOeoi+WIhuiJsuWvueixoVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgY3JlYXRlTWdyb3ZPYmplY3QoKSB7XG4gICAgbGV0IG1ncm92ID0gbmV3IE1ncm92T2JqZWN0KCk7XG4gICAgcmV0dXJuIG1ncm92O1xuICB9XG5cbiAgLyoqXG4gICAqIOWIm+W7uuiFkOiagOS9memHj+aMiemrmOeoi+WIhuiJsuWvueixoVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgY3JlYXRlQ29ycnpPYmplY3QoKSB7XG4gICAgbGV0IGNvcnJ6ID0gbmV3IENvcnJ6T2JqZWN0KCk7XG4gICAgcmV0dXJuIGNvcnJ6O1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhckNoaWxkT2JqZWN0cyh2aWV3ZXI6IFZpZXdlciwgcm86IExvbmdhbi5SZW5kZXJPYmplY3QpIHtcbiAgICBpZiAocm8pIHtcbiAgICAgIHdoaWxlIChyby5jaGlsZE9iamVjdHMubGVuZ3RoID4gMCkge1xuICAgICAgICB2aWV3ZXIucHJvY2Vzcy5yZW1vdmVSZW5kZXJPYmplY3Qocm8uY2hpbGRPYmplY3RzWzBdKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyDmuIXpmaTlnLrmma/mqKHlnovmlbDmja5cbiAgY2xlYXJDYWVSZW5kZXJPYmplY3Qodmlld2VyOiBWaWV3ZXIpIHtcbiAgICB0aGlzLmNsZWFyQ2hpbGRPYmplY3RzKFxuICAgICAgdmlld2VyLFxuICAgICAgdmlld2VyLnByb2Nlc3MuY2FlUmVuZGVyT2JqZWN0VHJlZU1hbmFnZXIubWVtYmVyTm9kZVxuICAgICk7XG4gICAgdGhpcy5jbGVhckNoaWxkT2JqZWN0cyhcbiAgICAgIHZpZXdlcixcbiAgICAgIHZpZXdlci5wcm9jZXNzLmNhZVJlbmRlck9iamVjdFRyZWVNYW5hZ2VyLnBsYXRlTm9kZVxuICAgICk7XG4gICAgdGhpcy5jbGVhckNoaWxkT2JqZWN0cyhcbiAgICAgIHZpZXdlcixcbiAgICAgIHZpZXdlci5wcm9jZXNzLmNhZVJlbmRlck9iamVjdFRyZWVNYW5hZ2VyLmpvaW50Tm9kZVxuICAgICk7XG4gICAgdGhpcy5jbGVhckNoaWxkT2JqZWN0cyhcbiAgICAgIHZpZXdlcixcbiAgICAgIHZpZXdlci5wcm9jZXNzLmNhZVJlbmRlck9iamVjdFRyZWVNYW5hZ2VyLmdydXBOb2RlXG4gICAgKTtcbiAgICB0aGlzLmNsZWFyQ2hpbGRPYmplY3RzKFxuICAgICAgdmlld2VyLFxuICAgICAgdmlld2VyLnByb2Nlc3MuY2FlUmVuZGVyT2JqZWN0VHJlZU1hbmFnZXIucEdydXBOb2RlXG4gICAgKTtcbiAgICB0aGlzLmNsZWFyQ2hpbGRPYmplY3RzKFxuICAgICAgdmlld2VyLFxuICAgICAgdmlld2VyLnByb2Nlc3MuY2FlUmVuZGVyT2JqZWN0VHJlZU1hbmFnZXIuc2VjdGlvbkluc05vZGVcbiAgICApO1xuICAgIHRoaXMuY2xlYXJDaGlsZE9iamVjdHMoXG4gICAgICB2aWV3ZXIsXG4gICAgICB2aWV3ZXIucHJvY2Vzcy5jYWVSZW5kZXJPYmplY3RUcmVlTWFuYWdlci5zYWNpbnBOb2RlXG4gICAgKTtcbiAgICB0aGlzLmNsZWFyQ2hpbGRPYmplY3RzKFxuICAgICAgdmlld2VyLFxuICAgICAgdmlld2VyLnByb2Nlc3MuY2FlUmVuZGVyT2JqZWN0VHJlZU1hbmFnZXIuc2Vhc3RhdGVOb2RlXG4gICAgKTtcbiAgICB0aGlzLmNsZWFyQ2hpbGRPYmplY3RzKFxuICAgICAgdmlld2VyLFxuICAgICAgdmlld2VyLnByb2Nlc3MuY2FlUmVuZGVyT2JqZWN0VHJlZU1hbmFnZXIucGlsZU5vZGVcbiAgICApO1xuICAgIHRoaXMuY2xlYXJDaGlsZE9iamVjdHMoXG4gICAgICB2aWV3ZXIsXG4gICAgICB2aWV3ZXIucHJvY2Vzcy5jYWVSZW5kZXJPYmplY3RUcmVlTWFuYWdlci5wbEdydXBOb2RlXG4gICAgKTtcbiAgICB0aGlzLmNsZWFyQ2hpbGRPYmplY3RzKFxuICAgICAgdmlld2VyLFxuICAgICAgdmlld2VyLnByb2Nlc3MuY2FlUmVuZGVyT2JqZWN0VHJlZU1hbmFnZXIucG9zdFJlc3VsdE5vZGVcbiAgICApO1xuICB9XG5cbiAgLy8g5oyJ5oiq6Z2i57uE5ZCN5YiG6Imy5byA5YWzXG4gIHByaXZhdGUgY29sb3JEaXZTd2l0Y2hfR3J1cE5hbWUob25fb2ZmOiBib29sZWFuLCBpc1VwZGF0ZSA9IHRydWUpIHtcbiAgICBsZXQgdmlld2VyID0gdGhpcy52aWV3ZXIgYXMgVmlld2VyO1xuICAgIGxldCBwcm9jZXNzID0gdGhpcy52aWV3ZXIucHJvY2VzcztcblxuICAgIGxldCBjb2xvckRpdmlkZVJPID0gcHJvY2Vzcy5maW5kUmVuZGVyT2JqZWN0QnlOYW1lKFxuICAgICAgXCLmjInmiKrpnaLnu4Tlj7fliIboibJcIlxuICAgICkgYXMgQ3V0bGluZUdydXBJZE9iamVjdDtcbiAgICBpZiAoY29sb3JEaXZpZGVSTykge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2xvckRpdmlkZVJPLmNoaWxkT2JqZWN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgb2JqID0gY29sb3JEaXZpZGVSTy5jaGlsZE9iamVjdHNbaV0gYXMgQ29sb3JEaXZHcnVwSWRPYmplY3Q7XG5cbiAgICAgICAgaWYgKG9iai5jaGVja0J1c2luZXNzU3RhdGVJc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgaWYgKG9uX29mZikge1xuICAgICAgICAgICAgb2JqLmFjdGl2ZSh2aWV3ZXIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvYmouaW5hY3RpdmUodmlld2VyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG9uX29mZikge1xuICAgICAgICBsZXQgY3V0bGluZSA9IHt9O1xuXG4gICAgICAgIGlmIChjb2xvckRpdmlkZVJPKSB7XG4gICAgICAgICAgTGVnZW5kTWFuYWdlLmRlc3RvcnkodGhpcy5lbGVtZW50S2V5KTtcbiAgICAgICAgICAvLyBzdG9yZS5jb21taXQoXCJzZXRMZWdlbmRUaXRsZVwiLCBcIlwiKTtcbiAgICAgICAgICAvLyBzdG9yZS5jb21taXQoXCJzZXRMZWdlbmRSaWdodFRleHRcIiwgXCJcIik7XG4gICAgICAgICAgLy8gc3RvcmUuY29tbWl0KFwic2V0TGVnZW5kXCIsIHt9KTtcbiAgICAgICAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBjdXRsaW5lID0gY29sb3JEaXZpZGVSTy5nZXRDdXRsaW5lKCk7XG4gICAgICAgICAgbGV0IGNvbXBvbmVudCA9IExlZ2VuZE1hbmFnZS5jcmVhdGUoXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRLZXksXG4gICAgICAgICAgICBjdXRsaW5lLFxuICAgICAgICAgICAgXCJcIixcbiAgICAgICAgICAgIFwiXCIsXG4gICAgICAgICAgICBcIlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAodGhpcy5zaG93RW5nbGlzaFRleHQpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudC50aXRsZSA9IFwiQ29sb3JlZCBCeSBNZW1iZXIgR3JvdXBzXCI7XG4gICAgICAgICAgICBjb21wb25lbnQubGVmdFRleHQgPSBcIkNvbG9yXCI7XG4gICAgICAgICAgICBjb21wb25lbnQucmlnaHRUZXh0ID0gXCJNZW1iZXIgR3JvdXBzXCI7XG4gICAgICAgICAgICAvLyBzdG9yZS5jb21taXQoXCJzZXRMZWdlbmRUaXRsZVwiLCBcIkNvbG9yZWQgQnkgTWVtYmVyIEdyb3Vwc1wiKTtcbiAgICAgICAgICAgIC8vIHN0b3JlLmNvbW1pdChcInNldExlZ2VuZExlZnRUZXh0XCIsIFwiQ29sb3JcIik7XG4gICAgICAgICAgICAvLyBzdG9yZS5jb21taXQoXCJzZXRMZWdlbmRSaWdodFRleHRcIiwgXCJNZW1iZXIgR3JvdXBzXCIpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb21wb25lbnQudGl0bGUgPSBcIuaIqumdoue7hOWIhuiJslwiO1xuICAgICAgICAgICAgY29tcG9uZW50LmxlZnRUZXh0ID0gXCLpopzoibJcIjtcbiAgICAgICAgICAgIGNvbXBvbmVudC5yaWdodFRleHQgPSBcIuaIqumdoue7hOWQjVwiO1xuICAgICAgICAgICAgLy8gc3RvcmUuY29tbWl0KFwic2V0TGVnZW5kVGl0bGVcIiwgXCLmiKrpnaLnu4TliIboibJcIik7XG4gICAgICAgICAgICAvLyBzdG9yZS5jb21taXQoXCJzZXRMZWdlbmRMZWZ0VGV4dFwiLCBcIuminOiJslwiKTtcbiAgICAgICAgICAgIC8vIHN0b3JlLmNvbW1pdChcInNldExlZ2VuZFJpZ2h0VGV4dFwiLCBcIuaIqumdoue7hOWQjVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gICBzdG9yZS5jb21taXQoXCJzZXRMZWdlbmRcIiwgY3V0bGluZSk7XG4gICAgICAgICAgLy8gfSwgMjApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBMZWdlbmRNYW5hZ2UuZGVzdG9yeSh0aGlzLmVsZW1lbnRLZXkpO1xuICAgICAgICAvLyBzdG9yZS5jb21taXQoXCJzZXRMZWdlbmRcIiwge30pO1xuICAgICAgICAvLyBzdG9yZS5jb21taXQoXCJzZXRMZWdlbmRUaXRsZVwiLCBcIlwiKTtcbiAgICAgICAgLy8gc3RvcmUuY29tbWl0KFwic2V0TGVnZW5kUmlnaHRUZXh0XCIsIFwiXCIpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNVcGRhdGUpIHRoaXMudmlld2VyLnVwZGF0ZURpc3BsYXkoKTtcbiAgfVxuXG4gIHByaXZhdGUgY29sb3JEaXZTd2l0Y2hfR3J1cFRoaWNrbmVzcyhvbl9vZmY6IGJvb2xlYW4sIGlzVXBkYXRlID0gdHJ1ZSkge1xuICAgIGxldCB2aWV3ZXIgPSB0aGlzLnZpZXdlciBhcyBWaWV3ZXI7XG4gICAgbGV0IHByb2Nlc3MgPSB0aGlzLnZpZXdlci5wcm9jZXNzO1xuXG4gICAgbGV0IGNvbG9yRGl2aWRlUk8gPSBwcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RCeU5hbWUoXG4gICAgICBcIuaMieaIqumdouWjgeWOmuWIhuiJslwiXG4gICAgKSBhcyBDdXRsaW5lR3J1cFRoaWNrbmVzc09iamVjdDtcbiAgICBpZiAoY29sb3JEaXZpZGVSTykge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2xvckRpdmlkZVJPLmNoaWxkT2JqZWN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgb2JqID0gY29sb3JEaXZpZGVSTy5jaGlsZE9iamVjdHNbaV0gYXMgQ29sb3JEaXZHcnVwVGhpY2tuZXNzT2JqZWN0O1xuICAgICAgICBpZiAob2JqLmNoZWNrQnVzaW5lc3NTdGF0ZUlzQWN0aXZlKCkpIHtcbiAgICAgICAgICBpZiAob25fb2ZmKSB7XG4gICAgICAgICAgICBvYmouYWN0aXZlKHZpZXdlcik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9iai5pbmFjdGl2ZSh2aWV3ZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAob25fb2ZmKSB7XG4gICAgICAgIGxldCBjdXRsaW5lID0ge307XG4gICAgICAgIGlmIChjb2xvckRpdmlkZVJPKSB7XG4gICAgICAgICAgTGVnZW5kTWFuYWdlLmRlc3RvcnkodGhpcy5lbGVtZW50S2V5KTtcbiAgICAgICAgICAvLyBzdG9yZS5jb21taXQoXCJzZXRMZWdlbmRcIiwge30pO1xuICAgICAgICAgIC8vIHN0b3JlLmNvbW1pdChcInNldExlZ2VuZFRpdGxlXCIsIFwiXCIpO1xuICAgICAgICAgIC8vIHN0b3JlLmNvbW1pdChcInNldExlZ2VuZFJpZ2h0VGV4dFwiLCBcIlwiKTtcbiAgICAgICAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBjdXRsaW5lID0gY29sb3JEaXZpZGVSTy5nZXRDdXRsaW5lKCk7XG4gICAgICAgICAgbGV0IGNvbXBvbmVudCA9IExlZ2VuZE1hbmFnZS5jcmVhdGUoXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRLZXksXG4gICAgICAgICAgICBjdXRsaW5lLFxuICAgICAgICAgICAgXCJcIixcbiAgICAgICAgICAgIFwiXCIsXG4gICAgICAgICAgICBcIlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAodGhpcy5zaG93RW5nbGlzaFRleHQpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudC50aXRsZSA9IFwiQ29sb3JlZCBCeSBUaGlja25lc3NcIjtcbiAgICAgICAgICAgIGNvbXBvbmVudC5sZWZ0VGV4dCA9IFwiQ29sb3JcIjtcbiAgICAgICAgICAgIGNvbXBvbmVudC5yaWdodFRleHQgPSBcIlRoaWNrbmVzcyhjbSlcIjtcbiAgICAgICAgICAgIC8vIHN0b3JlLmNvbW1pdChcInNldExlZ2VuZFRpdGxlXCIsIFwiQ29sb3JlZCBCeSBUaGlja25lc3NcIik7XG4gICAgICAgICAgICAvLyBzdG9yZS5jb21taXQoXCJzZXRMZWdlbmRMZWZ0VGV4dFwiLCBcIkNvbG9yXCIpO1xuICAgICAgICAgICAgLy8gc3RvcmUuY29tbWl0KFwic2V0TGVnZW5kUmlnaHRUZXh0XCIsIFwiVGhpY2tuZXNzKGNtKVwiKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29tcG9uZW50LnRpdGxlID0gXCLlo4HljprliIboibJcIjtcbiAgICAgICAgICAgIGNvbXBvbmVudC5sZWZ0VGV4dCA9IFwi6aKc6ImyXCI7XG4gICAgICAgICAgICBjb21wb25lbnQucmlnaHRUZXh0ID0gXCLlo4HljpooY20pXCI7XG4gICAgICAgICAgICAvLyBzdG9yZS5jb21taXQoXCJzZXRMZWdlbmRUaXRsZVwiLCBcIuWjgeWOmuWIhuiJslwiKTtcbiAgICAgICAgICAgIC8vIHN0b3JlLmNvbW1pdChcInNldExlZ2VuZExlZnRUZXh0XCIsIFwi6aKc6ImyXCIpO1xuICAgICAgICAgICAgLy8gc3RvcmUuY29tbWl0KFwic2V0TGVnZW5kUmlnaHRUZXh0XCIsIFwi5aOB5Y6aKGNtKVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gc3RvcmUuY29tbWl0KFwic2V0TGVnZW5kXCIsIGN1dGxpbmUpO1xuICAgICAgICAgIC8vIH0sIDIwKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gc3RvcmUuY29tbWl0KFwic2V0TGVnZW5kXCIsIHt9KTtcbiAgICAgICAgLy8gc3RvcmUuY29tbWl0KFwic2V0TGVnZW5kVGl0bGVcIiwgXCJcIik7XG4gICAgICAgIC8vIHN0b3JlLmNvbW1pdChcInNldExlZ2VuZFJpZ2h0VGV4dFwiLCBcIlwiKTtcbiAgICAgICAgTGVnZW5kTWFuYWdlLmRlc3RvcnkodGhpcy5lbGVtZW50S2V5KTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzVXBkYXRlKSB0aGlzLnZpZXdlci51cGRhdGVEaXNwbGF5KCk7XG4gIH1cblxuICBwcml2YXRlIGNvbG9yZERpdlN3aXRjaF9NZ3Jvdihvbl9vZmY6IGJvb2xlYW4sIGlzVXBkYXRlID0gdHJ1ZSkge1xuICAgIGxldCB2aWV3ZXIgPSB0aGlzLnZpZXdlciBhcyBWaWV3ZXI7XG4gICAgbGV0IHByb2Nlc3MgPSB0aGlzLnZpZXdlci5wcm9jZXNzO1xuXG4gICAgbGV0IGNvbG9yRGl2aWRlUk8gPSBwcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RCeU5hbWUoXG4gICAgICBcIua1t+eUn+eJqeWOmuW6puaMiemrmOeoi+WIhuiJslwiXG4gICAgKSBhcyBEZXNpZ25CYXNlT2JqZWN0O1xuICAgIGlmIChjb2xvckRpdmlkZVJPICYmIGNvbG9yRGl2aWRlUk8uY2hlY2tCdXNpbmVzc1N0YXRlSXNBY3RpdmUoKSkge1xuICAgICAgbGV0IG9iaiA9IGNvbG9yRGl2aWRlUk8gYXMgQ29sb3JEaXZNR1JPVk9iamVjdDtcblxuICAgICAgaWYgKG9uX29mZikge1xuICAgICAgICBvYmouYWN0aXZlKHZpZXdlcik7XG5cbiAgICAgICAgbGV0IGN1dGxpbmUgPSB7fTtcbiAgICAgICAgaWYgKGNvbG9yRGl2aWRlUk8pIHtcbiAgICAgICAgICBsZXQgb2JqID0gY29sb3JEaXZpZGVSTyBhcyBDb2xvckRpdk1HUk9WT2JqZWN0O1xuICAgICAgICAgIGxldCB0aGlja25lc3NJbmRleCA9IDA7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvYmouaGVpZ2h0TGlzdC5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICAgICAgbGV0IGJvdHRvbSA9IG9iai5oZWlnaHRMaXN0W2ldO1xuICAgICAgICAgICAgbGV0IHRvcCA9IG9iai5oZWlnaHRMaXN0W2kgKyAxXTtcbiAgICAgICAgICAgIGxldCBrZXkgPSBib3R0b20gKyBcIn5cIiArIHRvcCArIFwi77yaXCIgKyBvYmoudGhpY2tuZXNzW3RoaWNrbmVzc0luZGV4XTtcblxuICAgICAgICAgICAgbGV0IGNvbG9yID0gW1xuICAgICAgICAgICAgICBvYmouY29sb3JbKGkgLyAyKSAqIDQgKyAwXSxcbiAgICAgICAgICAgICAgb2JqLmNvbG9yWyhpIC8gMikgKiA0ICsgMV0sXG4gICAgICAgICAgICAgIG9iai5jb2xvclsoaSAvIDIpICogNCArIDJdLFxuICAgICAgICAgICAgICBvYmouY29sb3JbKGkgLyAyKSAqIDQgKyAzXSxcbiAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgIGlmIChjb2xvclswXSA9PT0gLTEgJiYgY29sb3JbMV0gPT09IC0xICYmIGNvbG9yWzJdID09PSAtMSkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbG9yWzBdICo9IDI1NTtcbiAgICAgICAgICAgIGNvbG9yWzFdICo9IDI1NTtcbiAgICAgICAgICAgIGNvbG9yWzJdICo9IDI1NTtcblxuICAgICAgICAgICAgY3V0bGluZVtrZXldID0gY29sb3I7XG4gICAgICAgICAgICB0aGlja25lc3NJbmRleCsrO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBzdG9yZS5jb21taXQoXCJzZXRMZWdlbmRcIiwge30pO1xuICAgICAgICAgIC8vIHN0b3JlLmNvbW1pdChcInNldExlZ2VuZFRpdGxlXCIsIFwiXCIpO1xuICAgICAgICAgIC8vIHN0b3JlLmNvbW1pdChcInNldExlZ2VuZFJpZ2h0VGV4dFwiLCBcIlwiKTtcbiAgICAgICAgICBMZWdlbmRNYW5hZ2UuZGVzdG9yeSh0aGlzLmVsZW1lbnRLZXkpO1xuICAgICAgICAgIGxldCBjb21wb25lbnQgPSBMZWdlbmRNYW5hZ2UuY3JlYXRlKFxuICAgICAgICAgICAgdGhpcy5lbGVtZW50S2V5LFxuICAgICAgICAgICAgY3V0bGluZSxcbiAgICAgICAgICAgIFwiXCIsXG4gICAgICAgICAgICBcIlwiLFxuICAgICAgICAgICAgXCJcIlxuICAgICAgICAgICk7XG4gICAgICAgICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuc2hvd0VuZ2xpc2hUZXh0KSB7XG4gICAgICAgICAgICBjb21wb25lbnQudGl0bGUgPSBcIk1hcmluZSBHcm93dGggWm9uZXNcIjtcbiAgICAgICAgICAgIGNvbXBvbmVudC5sZWZ0VGV4dCA9IFwiQ29sb3JcIjtcbiAgICAgICAgICAgIGNvbXBvbmVudC5yaWdodFRleHQgPSBcIkhlaWdodCBSYW5nZShtKTogVGhpY2tuZXNzKG1tKVwiO1xuICAgICAgICAgICAgLy8gc3RvcmUuY29tbWl0KFwic2V0TGVnZW5kVGl0bGVcIiwgXCJNYXJpbmUgR3Jvd3RoIFpvbmVzXCIpO1xuICAgICAgICAgICAgLy8gc3RvcmUuY29tbWl0KFwic2V0TGVnZW5kTGVmdFRleHRcIiwgXCJDb2xvclwiKTtcbiAgICAgICAgICAgIC8vIHN0b3JlLmNvbW1pdChcbiAgICAgICAgICAgIC8vICAgXCJzZXRMZWdlbmRSaWdodFRleHRcIixcbiAgICAgICAgICAgIC8vICAgXCJIZWlnaHQgUmFuZ2UobSk6IFRoaWNrbmVzcyhtbSlcIlxuICAgICAgICAgICAgLy8gKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gc3RvcmUuY29tbWl0KFwic2V0TGVnZW5kVGl0bGVcIiwgXCLmtbfnlJ/nianljprluqbliIboibJcIik7XG4gICAgICAgICAgICAvLyBzdG9yZS5jb21taXQoXCJzZXRMZWdlbmRMZWZ0VGV4dFwiLCBcIuminOiJslwiKTtcbiAgICAgICAgICAgIC8vIHN0b3JlLmNvbW1pdChcInNldExlZ2VuZFJpZ2h0VGV4dFwiLCBcIumrmOW6puiMg+WbtChtKTog5Y6a5bqmKG1tKVwiKTtcbiAgICAgICAgICAgIGNvbXBvbmVudC50aXRsZSA9IFwi5rW355Sf54mp5Y6a5bqm5YiG6ImyXCI7XG4gICAgICAgICAgICBjb21wb25lbnQubGVmdFRleHQgPSBcIuminOiJslwiO1xuICAgICAgICAgICAgY29tcG9uZW50LnJpZ2h0VGV4dCA9IFwi6auY5bqm6IyD5Zu0KG0pOiDljprluqYobW0pXCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHN0b3JlLmNvbW1pdChcInNldExlZ2VuZFwiLCBjdXRsaW5lKTtcbiAgICAgICAgICAvLyB9LCA1MCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9iai5pbmFjdGl2ZSh2aWV3ZXIpO1xuICAgICAgICAvLyBzdG9yZS5jb21taXQoXCJzZXRMZWdlbmRcIiwge30pO1xuICAgICAgICAvLyBzdG9yZS5jb21taXQoXCJzZXRMZWdlbmRUaXRsZVwiLCBcIlwiKTtcbiAgICAgICAgLy8gc3RvcmUuY29tbWl0KFwic2V0TGVnZW5kUmlnaHRUZXh0XCIsIFwiXCIpO1xuICAgICAgICBMZWdlbmRNYW5hZ2UuZGVzdG9yeSh0aGlzLmVsZW1lbnRLZXkpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNVcGRhdGUpIHRoaXMudmlld2VyLnVwZGF0ZURpc3BsYXkoKTtcbiAgfVxuXG4gIHByaXZhdGUgY29sb3JkRGl2U3dpdGNoX0NvcnJ6KG9uX29mZjogYm9vbGVhbiwgaXNVcGRhdGUgPSB0cnVlKSB7XG4gICAgbGV0IHZpZXdlciA9IHRoaXMudmlld2VyIGFzIFZpZXdlcjtcbiAgICBsZXQgcHJvY2VzcyA9IHRoaXMudmlld2VyLnByb2Nlc3M7XG5cbiAgICBsZXQgY29sb3JEaXZpZGVSTyA9IHByb2Nlc3MuZmluZFJlbmRlck9iamVjdEJ5TmFtZShcbiAgICAgIFwi6IWQ6JqA5L2Z6YeP5oyJ6auY56iL5YiG6ImyXCJcbiAgICApIGFzIERlc2lnbkJhc2VPYmplY3Q7XG4gICAgaWYgKGNvbG9yRGl2aWRlUk8gJiYgY29sb3JEaXZpZGVSTy5jaGVja0J1c2luZXNzU3RhdGVJc0FjdGl2ZSgpKSB7XG4gICAgICBsZXQgb2JqID0gY29sb3JEaXZpZGVSTyBhcyBDb2xvckRpdkNPUlJaT2JqZWN0O1xuICAgICAgaWYgKG9uX29mZikge1xuICAgICAgICBvYmouYWN0aXZlKHZpZXdlcik7XG5cbiAgICAgICAgbGV0IGN1dGxpbmUgPSB7fTtcbiAgICAgICAgaWYgKGNvbG9yRGl2aWRlUk8pIHtcbiAgICAgICAgICBsZXQgb2JqID0gY29sb3JEaXZpZGVSTyBhcyBDb2xvckRpdkNPUlJaT2JqZWN0O1xuICAgICAgICAgIGxldCB0aGlja25lc3NJbmRleCA9IDA7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvYmouaGVpZ2h0TGlzdC5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICAgICAgbGV0IGJvdHRvbSA9IG9iai5oZWlnaHRMaXN0W2ldO1xuICAgICAgICAgICAgbGV0IHRvcCA9IG9iai5oZWlnaHRMaXN0W2kgKyAxXTtcblxuICAgICAgICAgICAgbGV0IGtleUxldmVsQm90dG9tID0gb2JqLmNvcnJ6TGlzdFt0aGlja25lc3NJbmRleF0udGhpY2tuZXNzQm90dG9tO1xuICAgICAgICAgICAgaWYgKCFrZXlMZXZlbEJvdHRvbSkge1xuICAgICAgICAgICAgICBrZXlMZXZlbEJvdHRvbSA9IDA7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBrZXlMZXZlbFRvcCA9IG9iai5jb3Jyekxpc3RbdGhpY2tuZXNzSW5kZXhdLnRoaWNrbmVzc1RvcDtcbiAgICAgICAgICAgIGlmICgha2V5TGV2ZWxUb3ApIHtcbiAgICAgICAgICAgICAga2V5TGV2ZWxUb3AgPSAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQga2V5ID1cbiAgICAgICAgICAgICAgYm90dG9tICsgXCJ+XCIgKyB0b3AgKyBcIu+8mlwiICsga2V5TGV2ZWxCb3R0b20gKyBcIn5cIiArIGtleUxldmVsVG9wO1xuXG4gICAgICAgICAgICBsZXQgY29sb3IgPSBbXG4gICAgICAgICAgICAgIG9iai5jb2xvclsoaSAvIDIpICogNCArIDBdLFxuICAgICAgICAgICAgICBvYmouY29sb3JbKGkgLyAyKSAqIDQgKyAxXSxcbiAgICAgICAgICAgICAgb2JqLmNvbG9yWyhpIC8gMikgKiA0ICsgMl0sXG4gICAgICAgICAgICAgIG9iai5jb2xvclsoaSAvIDIpICogNCArIDNdLFxuICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgaWYgKGNvbG9yWzBdID09PSAtMSAmJiBjb2xvclsxXSA9PT0gLTEgJiYgY29sb3JbMl0gPT09IC0xKSB7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29sb3JbMF0gKj0gMjU1O1xuICAgICAgICAgICAgY29sb3JbMV0gKj0gMjU1O1xuICAgICAgICAgICAgY29sb3JbMl0gKj0gMjU1O1xuXG4gICAgICAgICAgICBjdXRsaW5lW2tleV0gPSBjb2xvcjtcbiAgICAgICAgICAgIHRoaWNrbmVzc0luZGV4Kys7XG4gICAgICAgICAgfVxuICAgICAgICAgIExlZ2VuZE1hbmFnZS5kZXN0b3J5KHRoaXMuZWxlbWVudEtleSk7XG4gICAgICAgICAgLy8gc3RvcmUuY29tbWl0KFwic2V0TGVnZW5kXCIsIHt9KTtcbiAgICAgICAgICAvLyBzdG9yZS5jb21taXQoXCJzZXRMZWdlbmRUaXRsZVwiLCBcIlwiKTtcbiAgICAgICAgICAvLyBzdG9yZS5jb21taXQoXCJzZXRMZWdlbmRSaWdodFRleHRcIiwgXCJcIik7XG4gICAgICAgICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgbGV0IGNvbXBvbmVudCA9IExlZ2VuZE1hbmFnZS5jcmVhdGUoXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRLZXksXG4gICAgICAgICAgICBjdXRsaW5lLFxuICAgICAgICAgICAgXCJcIixcbiAgICAgICAgICAgIFwiXCIsXG4gICAgICAgICAgICBcIlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAodGhpcy5zaG93RW5nbGlzaFRleHQpIHtcbiAgICAgICAgICAgIC8vIHN0b3JlLmNvbW1pdChcInNldExlZ2VuZFRpdGxlXCIsIFwiQ29ycm9zaW9uIFpvbmVzXCIpO1xuICAgICAgICAgICAgLy8gc3RvcmUuY29tbWl0KFwic2V0TGVnZW5kTGVmdFRleHRcIiwgXCJDb2xvclwiKTtcbiAgICAgICAgICAgIC8vIHN0b3JlLmNvbW1pdChcbiAgICAgICAgICAgIC8vICAgXCJzZXRMZWdlbmRSaWdodFRleHRcIixcbiAgICAgICAgICAgIC8vICAgXCJIZWlnaHQgUmFuZ2UobSk6IFRoaWNrbmVzcyhtbSlcIlxuICAgICAgICAgICAgLy8gKTtcbiAgICAgICAgICAgIGNvbXBvbmVudC50aXRsZSA9IFwiQ29ycm9zaW9uIFpvbmVzXCI7XG4gICAgICAgICAgICBjb21wb25lbnQubGVmdFRleHQgPSBcIkNvbG9yXCI7XG4gICAgICAgICAgICBjb21wb25lbnQucmlnaHRUZXh0ID0gXCJIZWlnaHQgUmFuZ2UobSk6IFRoaWNrbmVzcyhtbSlcIjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gc3RvcmUuY29tbWl0KFwic2V0TGVnZW5kVGl0bGVcIiwgXCLohZDomoDkvZnph4/liIboibJcIik7XG4gICAgICAgICAgICAvLyBzdG9yZS5jb21taXQoXCJzZXRMZWdlbmRMZWZ0VGV4dFwiLCBcIuminOiJslwiKTtcbiAgICAgICAgICAgIC8vIHN0b3JlLmNvbW1pdChcInNldExlZ2VuZFJpZ2h0VGV4dFwiLCBcIumrmOW6puiMg+WbtChtKTog5Y6a5bqmKG1tKVwiKTtcbiAgICAgICAgICAgIGNvbXBvbmVudC50aXRsZSA9IFwi6IWQ6JqA5L2Z6YeP5YiG6ImyXCI7XG4gICAgICAgICAgICBjb21wb25lbnQubGVmdFRleHQgPSBcIuminOiJslwiO1xuICAgICAgICAgICAgY29tcG9uZW50LnJpZ2h0VGV4dCA9IFwi5aOB6auY5bqm6IyD5Zu0KG0pOiDljprluqYobW0pXCI7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIHN0b3JlLmNvbW1pdChcInNldExlZ2VuZFwiLCBjdXRsaW5lKTtcbiAgICAgICAgICAvLyB9LCAyMCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9iai5pbmFjdGl2ZSh2aWV3ZXIpO1xuICAgICAgICAvLyBzdG9yZS5jb21taXQoXCJzZXRMZWdlbmRcIiwge30pO1xuICAgICAgICAvLyBzdG9yZS5jb21taXQoXCJzZXRMZWdlbmRUaXRsZVwiLCBcIlwiKTtcbiAgICAgICAgLy8gc3RvcmUuY29tbWl0KFwic2V0TGVnZW5kUmlnaHRUZXh0XCIsIFwiXCIpO1xuICAgICAgICBMZWdlbmRNYW5hZ2UuZGVzdG9yeSh0aGlzLmVsZW1lbnRLZXkpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNVcGRhdGUpIHRoaXMudmlld2VyLnVwZGF0ZURpc3BsYXkoKTtcbiAgfVxuXG4gIHByaXZhdGUgY29sb3JEaXZTd2l0Y2hfQ29tcG9uZW50R3JvdXAob25fb2ZmOiBib29sZWFuLCBpc1VwZGF0ZSA9IHRydWUpIHtcbiAgICBsZXQgdmlld2VyID0gdGhpcy52aWV3ZXIgYXMgVmlld2VyO1xuICAgIGxldCBwcm9jZXNzID0gdGhpcy52aWV3ZXIucHJvY2VzcztcblxuICAgIGxldCBjb21wb25lbnRHcm91cHMgPSBwcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RCeU5hbWUoXG4gICAgICBcIuaehOS7tuWIhue7hOWIhuiJslwiXG4gICAgKSBhcyBEZXNpZ25CYXNlT2JqZWN0O1xuICAgIGlmIChjb21wb25lbnRHcm91cHMpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29tcG9uZW50R3JvdXBzLmNoaWxkT2JqZWN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgb2JqID0gY29tcG9uZW50R3JvdXBzLmNoaWxkT2JqZWN0c1tcbiAgICAgICAgICBpXG4gICAgICAgIF0gYXMgQ29sb3JEaXZDb21wb25lbnRHcm91cE9iamVjdDtcblxuICAgICAgICBpZiAob2JqLmNoZWNrQnVzaW5lc3NTdGF0ZUlzQWN0aXZlKCkpIHtcbiAgICAgICAgICB0aGlzLnNldEFsbENvbXBvbmVudEdyb3VwVmlzaWJsZShvYmoubmFtZSk7XG5cbiAgICAgICAgICBpZiAob25fb2ZmKSB7XG4gICAgICAgICAgICBvYmouYWN0aXZlKHZpZXdlcik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9iai5pbmFjdGl2ZSh2aWV3ZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAob25fb2ZmKSB7XG4gICAgICAgIGxldCBjdXRsaW5lID0ge307XG4gICAgICAgIGlmIChjb21wb25lbnRHcm91cHMpIHtcbiAgICAgICAgICAvLyBzdG9yZS5jb21taXQoXCJzZXRMZWdlbmRcIiwge30pO1xuICAgICAgICAgIC8vIHN0b3JlLmNvbW1pdChcInNldExlZ2VuZFRpdGxlXCIsIFwiXCIpO1xuICAgICAgICAgIC8vIHN0b3JlLmNvbW1pdChcInNldExlZ2VuZFJpZ2h0VGV4dFwiLCBcIlwiKTtcbiAgICAgICAgICBMZWdlbmRNYW5hZ2UuZGVzdG9yeSh0aGlzLmVsZW1lbnRLZXkpO1xuXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb21wb25lbnRHcm91cHMuY2hpbGRPYmplY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBsZXQgb2JqID0gY29tcG9uZW50R3JvdXBzLmNoaWxkT2JqZWN0c1tcbiAgICAgICAgICAgICAgaVxuICAgICAgICAgICAgXSBhcyBDb2xvckRpdkNvbXBvbmVudEdyb3VwT2JqZWN0O1xuICAgICAgICAgICAgaWYgKG9iai5jaGVja0J1c2luZXNzU3RhdGVJc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgICAgIGxldCBjb2xvciA9IExvbmdhbi5kZWVwQ2xvbmUob2JqLmNvbG9yKTtcbiAgICAgICAgICAgICAgY3V0bGluZVtvYmoubmFtZV0gPSBjb2xvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgbGV0IGNvbXBvbmVudCA9IExlZ2VuZE1hbmFnZS5jcmVhdGUoXG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRLZXksXG4gICAgICAgICAgICBjdXRsaW5lLFxuICAgICAgICAgICAgXCJcIixcbiAgICAgICAgICAgIFwiXCIsXG4gICAgICAgICAgICBcIlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAodGhpcy5zaG93RW5nbGlzaFRleHQpIHtcbiAgICAgICAgICAgIC8vIHN0b3JlLmNvbW1pdChcInNldExlZ2VuZFRpdGxlXCIsIFwiU2V0IENvbG9yc1wiKTtcbiAgICAgICAgICAgIC8vIHN0b3JlLmNvbW1pdChcInNldExlZ2VuZExlZnRUZXh0XCIsIFwiQ29sb3JcIik7XG4gICAgICAgICAgICAvLyBzdG9yZS5jb21taXQoXCJzZXRMZWdlbmRSaWdodFRleHRcIiwgXCJTZXQgTmFtZVwiKTtcbiAgICAgICAgICAgIGNvbXBvbmVudC50aXRsZSA9IFwiU2V0IENvbG9yc1wiO1xuICAgICAgICAgICAgY29tcG9uZW50LmxlZnRUZXh0ID0gXCJDb2xvclwiO1xuICAgICAgICAgICAgY29tcG9uZW50LnJpZ2h0VGV4dCA9IFwiU2V0IE5hbWVcIjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gc3RvcmUuY29tbWl0KFwic2V0TGVnZW5kVGl0bGVcIiwgXCLoh6rlrprkuYnmnoTku7bliIbnu4TliIboibJcIik7XG4gICAgICAgICAgICAvLyBzdG9yZS5jb21taXQoXCJzZXRMZWdlbmRMZWZ0VGV4dFwiLCBcIuminOiJslwiKTtcbiAgICAgICAgICAgIC8vIHN0b3JlLmNvbW1pdChcInNldExlZ2VuZFJpZ2h0VGV4dFwiLCBcIuWIhue7hOWQjVwiKTtcbiAgICAgICAgICAgIGNvbXBvbmVudC50aXRsZSA9IFwi6Ieq5a6a5LmJ5p6E5Lu25YiG57uE5YiG6ImyXCI7XG4gICAgICAgICAgICBjb21wb25lbnQubGVmdFRleHQgPSBcIuminOiJslwiO1xuICAgICAgICAgICAgY29tcG9uZW50LnJpZ2h0VGV4dCA9IFwi5YiG57uE5ZCNXCI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gc3RvcmUuY29tbWl0KFwic2V0TGVnZW5kXCIsIGN1dGxpbmUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBzdG9yZS5jb21taXQoXCJzZXRMZWdlbmRcIiwge30pO1xuICAgICAgICAvLyBzdG9yZS5jb21taXQoXCJzZXRMZWdlbmRUaXRsZVwiLCBcIlwiKTtcbiAgICAgICAgLy8gc3RvcmUuY29tbWl0KFwic2V0TGVnZW5kUmlnaHRUZXh0XCIsIFwiXCIpO1xuICAgICAgICBMZWdlbmRNYW5hZ2UuZGVzdG9yeSh0aGlzLmVsZW1lbnRLZXkpO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXNVcGRhdGUpIHRoaXMudmlld2VyLnVwZGF0ZURpc3BsYXkoKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0QWxsQ29tcG9uZW50R3JvdXBWaXNpYmxlKGdyb3VwTmFtZTogc3RyaW5nKSB7XG4gICAgbGV0IHZpZXdlciA9IHRoaXMudmlld2VyIGFzIFZpZXdlcjtcbiAgICBsZXQgcHJvY2VzcyA9IHRoaXMudmlld2VyLnByb2Nlc3M7XG5cbiAgICBsZXQgY29tcG9uZW50R3JvdXBzID0gcHJvY2Vzcy5maW5kUmVuZGVyT2JqZWN0QnlOYW1lKFxuICAgICAgXCLmnoTku7bliIbnu4TliIboibJcIlxuICAgICkgYXMgRGVzaWduQmFzZU9iamVjdDtcbiAgICBpZiAoY29tcG9uZW50R3JvdXBzKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbXBvbmVudEdyb3Vwcy5jaGlsZE9iamVjdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IG9iaiA9IGNvbXBvbmVudEdyb3Vwcy5jaGlsZE9iamVjdHNbXG4gICAgICAgICAgaVxuICAgICAgICBdIGFzIENvbG9yRGl2Q29tcG9uZW50R3JvdXBPYmplY3Q7XG5cbiAgICAgICAgaWYgKG9iai5uYW1lID09PSBncm91cE5hbWUpIHtcbiAgICAgICAgICBpZiAob2JqLmNoZWNrQnVzaW5lc3NTdGF0ZUlzQWN0aXZlKCkpIHtcbiAgICAgICAgICAgIG9iai5pc1Zpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgb2JqLmJ1c2luZXNzU3RhdGUgPSBCdXNpbmVzc1N0YXRlLkVkaXRpbmc7XG4gICAgICAgICAgICBvYmouc2V0Q2hpbGRWaXNpYmxlKHZpZXdlciwgdHJ1ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog5YiG6Imy5pi+56S65byA5YWz77yM6L6T5YWl55qE5YiG6Imy5pWI5p6c6LW35pWI77yM5YW25L2Z5YiG6Imy5pWI5p6c5YWz6ZetLlxuICAgKiBAcGFyYW0gc3RhdGUg5p6a5Li+57G75Z6LXG4gICAqL1xuICBjb2xvclN3aXRjaChzdGF0ZTogU3dpdGNoQ29sb3JEaXZpZGUsIGlzVXBkYXRlID0gdHJ1ZSkge1xuICAgIHN3aXRjaCAoc3RhdGUpIHtcbiAgICAgIGNhc2UgU3dpdGNoQ29sb3JEaXZpZGUuR3J1cE5hbWU6XG4gICAgICAgIHRoaXMuY29sb3JEaXZTd2l0Y2hfR3J1cFRoaWNrbmVzcyhmYWxzZSwgaXNVcGRhdGUpO1xuICAgICAgICB0aGlzLmNvbG9yZERpdlN3aXRjaF9NZ3JvdihmYWxzZSwgaXNVcGRhdGUpO1xuICAgICAgICB0aGlzLmNvbG9yZERpdlN3aXRjaF9Db3JyeihmYWxzZSwgaXNVcGRhdGUpO1xuICAgICAgICB0aGlzLmNvbG9yRGl2U3dpdGNoX0NvbXBvbmVudEdyb3VwKGZhbHNlLCBpc1VwZGF0ZSk7XG5cbiAgICAgICAgdGhpcy5jb2xvckRpdlN3aXRjaF9HcnVwTmFtZSh0cnVlLCBpc1VwZGF0ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBTd2l0Y2hDb2xvckRpdmlkZS5HcnVwVGhpY2tuZXNzOlxuICAgICAgICB0aGlzLmNvbG9yRGl2U3dpdGNoX0dydXBOYW1lKGZhbHNlLCBpc1VwZGF0ZSk7XG4gICAgICAgIHRoaXMuY29sb3JkRGl2U3dpdGNoX01ncm92KGZhbHNlLCBpc1VwZGF0ZSk7XG4gICAgICAgIHRoaXMuY29sb3JkRGl2U3dpdGNoX0NvcnJ6KGZhbHNlLCBpc1VwZGF0ZSk7XG4gICAgICAgIHRoaXMuY29sb3JEaXZTd2l0Y2hfQ29tcG9uZW50R3JvdXAoZmFsc2UsIGlzVXBkYXRlKTtcblxuICAgICAgICB0aGlzLmNvbG9yRGl2U3dpdGNoX0dydXBUaGlja25lc3ModHJ1ZSwgaXNVcGRhdGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgU3dpdGNoQ29sb3JEaXZpZGUuTWdyb3Y6XG4gICAgICAgIHRoaXMuY29sb3JEaXZTd2l0Y2hfR3J1cE5hbWUoZmFsc2UsIGlzVXBkYXRlKTtcbiAgICAgICAgdGhpcy5jb2xvckRpdlN3aXRjaF9HcnVwVGhpY2tuZXNzKGZhbHNlLCBpc1VwZGF0ZSk7XG4gICAgICAgIHRoaXMuY29sb3JkRGl2U3dpdGNoX0NvcnJ6KGZhbHNlLCBpc1VwZGF0ZSk7XG4gICAgICAgIHRoaXMuY29sb3JEaXZTd2l0Y2hfQ29tcG9uZW50R3JvdXAoZmFsc2UsIGlzVXBkYXRlKTtcblxuICAgICAgICB0aGlzLmNvbG9yZERpdlN3aXRjaF9NZ3Jvdih0cnVlLCBpc1VwZGF0ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBTd2l0Y2hDb2xvckRpdmlkZS5Db3JyejpcbiAgICAgICAgdGhpcy5jb2xvckRpdlN3aXRjaF9HcnVwTmFtZShmYWxzZSwgaXNVcGRhdGUpO1xuICAgICAgICB0aGlzLmNvbG9yRGl2U3dpdGNoX0dydXBUaGlja25lc3MoZmFsc2UsIGlzVXBkYXRlKTtcbiAgICAgICAgdGhpcy5jb2xvcmREaXZTd2l0Y2hfTWdyb3YoZmFsc2UsIGlzVXBkYXRlKTtcbiAgICAgICAgdGhpcy5jb2xvckRpdlN3aXRjaF9Db21wb25lbnRHcm91cChmYWxzZSwgaXNVcGRhdGUpO1xuXG4gICAgICAgIHRoaXMuY29sb3JkRGl2U3dpdGNoX0NvcnJ6KHRydWUsIGlzVXBkYXRlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIFN3aXRjaENvbG9yRGl2aWRlLkNvbXBvbmVudEdyb3VwOlxuICAgICAgICB0aGlzLmNvbG9yRGl2U3dpdGNoX0dydXBOYW1lKGZhbHNlLCBpc1VwZGF0ZSk7XG4gICAgICAgIHRoaXMuY29sb3JEaXZTd2l0Y2hfR3J1cFRoaWNrbmVzcyhmYWxzZSwgaXNVcGRhdGUpO1xuICAgICAgICB0aGlzLmNvbG9yZERpdlN3aXRjaF9NZ3JvdihmYWxzZSwgaXNVcGRhdGUpO1xuICAgICAgICB0aGlzLmNvbG9yZERpdlN3aXRjaF9Db3JyeihmYWxzZSwgaXNVcGRhdGUpO1xuXG4gICAgICAgIHRoaXMuY29sb3JEaXZTd2l0Y2hfQ29tcG9uZW50R3JvdXAodHJ1ZSwgaXNVcGRhdGUpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgU3dpdGNoQ29sb3JEaXZpZGUuQ2FuY2VsOlxuICAgICAgICB0aGlzLmNvbG9yRGl2U3dpdGNoX0dydXBOYW1lKGZhbHNlLCBpc1VwZGF0ZSk7XG4gICAgICAgIHRoaXMuY29sb3JEaXZTd2l0Y2hfR3J1cFRoaWNrbmVzcyhmYWxzZSwgaXNVcGRhdGUpO1xuICAgICAgICB0aGlzLmNvbG9yZERpdlN3aXRjaF9NZ3JvdihmYWxzZSwgaXNVcGRhdGUpO1xuICAgICAgICB0aGlzLmNvbG9yZERpdlN3aXRjaF9Db3JyeihmYWxzZSwgaXNVcGRhdGUpO1xuICAgICAgICB0aGlzLmNvbG9yRGl2U3dpdGNoX0NvbXBvbmVudEdyb3VwKGZhbHNlLCBpc1VwZGF0ZSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDmn5DkuKrliIbnu4Torr7nva7kuobpopzoibLml7bvvIzljZXni6zmmL7npLov6ZqQ6JeP6K+l5YiG57uE5YiG6Imy55qE5pWI5p6cXG4gICAqIEBwYXJhbSBncm91cE5hbWVcbiAgICogQHBhcmFtIG9uX29mZlxuICAgKi9cbiAgY29tcG9uZW50R3JvdXBDb2xvclZpc2libGVTd2l0Y2goZ3JvdXBOYW1lOiBzdHJpbmcsIG9uX29mZjogYm9vbGVhbikge1xuICAgIGxldCB2aWV3ZXIgPSB0aGlzLnZpZXdlciBhcyBWaWV3ZXI7XG4gICAgbGV0IHByb2Nlc3MgPSB0aGlzLnZpZXdlci5wcm9jZXNzO1xuXG4gICAgbGV0IGNvbXBvbmVudEdyb3VwcyA9IHByb2Nlc3MuZmluZFJlbmRlck9iamVjdEJ5TmFtZShcbiAgICAgIFwi5p6E5Lu25YiG57uE5YiG6ImyXCJcbiAgICApIGFzIERlc2lnbkJhc2VPYmplY3Q7XG4gICAgaWYgKGNvbXBvbmVudEdyb3Vwcykge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb21wb25lbnRHcm91cHMuY2hpbGRPYmplY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBvYmogPSBjb21wb25lbnRHcm91cHMuY2hpbGRPYmplY3RzW1xuICAgICAgICAgIGlcbiAgICAgICAgXSBhcyBDb2xvckRpdkNvbXBvbmVudEdyb3VwT2JqZWN0O1xuXG4gICAgICAgIGlmIChvYmoubmFtZSA9PT0gZ3JvdXBOYW1lKSB7XG4gICAgICAgICAgaWYgKG9iai5jaGVja0J1c2luZXNzU3RhdGVJc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgICBvYmouYnVzaW5lc3NTdGF0ZSA9IEJ1c2luZXNzU3RhdGUuRWRpdGluZztcbiAgICAgICAgICAgIGlmIChvbl9vZmYpIHtcbiAgICAgICAgICAgICAgb2JqLmFjdGl2ZSh2aWV3ZXIpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgb2JqLmluYWN0aXZlKHZpZXdlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvYmouc2V0Q2hpbGRWaXNpYmxlKHZpZXdlciwgb25fb2ZmKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudmlld2VyLnVwZGF0ZURpc3BsYXkoKTtcbiAgfVxuXG4gIHdhdmVTd2l0Y2gob25fb2ZmOiBib29sZWFuKSB7XG4gICAgbGV0IHByb2Nlc3MgPSB0aGlzLnZpZXdlci5wcm9jZXNzIGFzIFByb2Nlc3M7XG4gICAgbGV0IHdhdmUgPSBwcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RCeU5hbWUoXCLms6LpnaJcIikgYXMgV2F2ZU9iamVjdDtcbiAgICBpZiAoIXdhdmUpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICBsZXQgY3VycmVudFdhdmVJdGVtT2JqZWN0ID0gcHJvY2Vzcy5maW5kQ2FlT2JqZWN0QnlOYW1lSW5DaGlsZE9iamVjdChcbiAgICAgIHdhdmUsXG4gICAgICB0aGlzLmN1cnJlbnRTZWxlY3RXYXZlSXRlbU5hbWVcbiAgICApIGFzIFdhdmVJdGVtT2JqZWN0O1xuICAgIGlmIChjdXJyZW50V2F2ZUl0ZW1PYmplY3QpIHtcbiAgICAgIGlmIChvbl9vZmYpIHtcbiAgICAgICAgY3VycmVudFdhdmVJdGVtT2JqZWN0LmFjdGl2ZSh0aGlzLnZpZXdlciBhcyBWaWV3ZXIpO1xuICAgICAgICBzdG9yZS5zdGF0ZS5pbmZvID0gY3VycmVudFdhdmVJdGVtT2JqZWN0LnRvU3RyaW5nKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjdXJyZW50V2F2ZUl0ZW1PYmplY3QuaW5hY3RpdmUodGhpcy52aWV3ZXIgYXMgVmlld2VyKTtcbiAgICAgICAgc3RvcmUuc3RhdGUuaW5mbyA9IG51bGw7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0b3JlLnN0YXRlLmluZm8gPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMudmlld2VyLnVwZGF0ZURpc3BsYXkoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDlnJ/lsYLlvIDlhbPmjqXlj6NcbiAgICogQHBhcmFtIG9uX29mZlxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgYm9yZWhvbGVTd2l0Y2gob25fb2ZmOiBib29sZWFuKSB7XG4gICAgbGV0IHByb2Nlc3MgPSB0aGlzLnZpZXdlci5wcm9jZXNzIGFzIFByb2Nlc3M7XG4gICAgbGV0IHBhcmVudE5vZGUgPSBwcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RCeU5hbWUoXG4gICAgICBcIuWcn+WxguWSjOazoumdolwiXG4gICAgKSBhcyBEZXNpZ25CYXNlT2JqZWN0O1xuICAgIGlmICghcGFyZW50Tm9kZSkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbiAgICBsZXQgZWxlbWVudEtleSA9IFwic29pbGRcIjtcbiAgICBpZiAocGFyZW50Tm9kZSAmJiBvbl9vZmYpIHtcbiAgICAgIHRoaXMuYm9yZWhvbGVDdXRMaW5lRGlzcGxheSA9IHRydWU7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcmVudE5vZGUuY2hpbGRPYmplY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIChwYXJlbnROb2RlLmNoaWxkT2JqZWN0c1tpXSBhcyBCb3JlaG9sZXNPYmplY3QpLmFjdGl2ZSgpO1xuICAgICAgfVxuXG4gICAgICBMZWdlbmRNYW5hZ2UuY3JlYXRlKFxuICAgICAgICBlbGVtZW50S2V5LFxuICAgICAgICB0aGlzLmJvcmVob2xlTGVnZW5kLFxuICAgICAgICBcIuWcn+WxguaVsOaNrlwiLFxuICAgICAgICBcIlwiLFxuICAgICAgICBcIuWcn+WxguWQjVwiLFxuICAgICAgICB7XG4gICAgICAgICAgcmlnaHQ6IFwiMHB4XCIsXG4gICAgICAgICAgYm90dG9tOiBcIjBweFwiLFxuICAgICAgICB9XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmJvcmVob2xlQ3V0TGluZURpc3BsYXkgPSBmYWxzZTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJlbnROb2RlLmNoaWxkT2JqZWN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAocGFyZW50Tm9kZS5jaGlsZE9iamVjdHNbaV0gYXMgQm9yZWhvbGVzT2JqZWN0KS5pbmFjdGl2ZSgpO1xuICAgICAgfVxuICAgICAgTGVnZW5kTWFuYWdlLmRlc3RvcnkoZWxlbWVudEtleSk7XG4gICAgfVxuXG4gICAgdGhpcy52aWV3ZXIudXBkYXRlRGlzcGxheSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIOajgOafpeaYr+WQpuacieahqeWcn+aVsOaNrlxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgY2hlY2tQU0koKSB7XG4gICAgbGV0IGV4aXN0ID0gZmFsc2U7XG4gICAgaWYgKCEodGhpcy52aWV3ZXIgYXMgVmlld2VyKS5kYXRSZWFkZXJNYW5hZ2VyLnBzaW9wdCkge1xuICAgICAgY29uc29sZS5sb2coXCLmsqHmnInmoanlnJ/mlbDmja4uXCIpO1xuICAgICAgZXhpc3QgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhpc3QgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBleGlzdDtcbiAgfVxuXG4gIC8qKlxuICAgKiDmo4Dmn6XmmK/lkKblrZjlnKjmtbflhrXmlbDmja5cbiAgICogQHJldHVybnNcbiAgICovXG4gIGNoZWNrU2VhaW5wKCkge1xuICAgIGxldCBleGlzdCA9IGZhbHNlO1xuICAgIGxldCBybyA9IHRoaXMudmlld2VyLnByb2Nlc3MuZmluZFJlbmRlck9iamVjdEJ5VHlwZShcIlNlYXN0YXRlTGRvcHRcIik7XG4gICAgaWYgKHJvKSB7XG4gICAgICBleGlzdCA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4aXN0O1xuICB9XG5cbiAgLyoqXG4gICAqIOaciemZkOWFg+WIh+aNouaYvuekuumakOiXj1xuICAgKi9cbiAgZmluaXRlRWxlbWVudFN3aXRjaCh2aXNpYmxlOiBib29sZWFuKSB7XG4gICAgbGV0IG1lbWJlcnMgPSB0aGlzLnZpZXdlci5wcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RzQnlUeXBlKFwiTWVtYmVyT2JqZWN0XCIpO1xuICAgIGlmICh2aXNpYmxlKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1lbWJlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IG1lbWJlciA9IG1lbWJlcnNbaV0gYXMgTWVtYmVyT2JqZWN0O1xuICAgICAgICBtZW1iZXIuc2VnbWVudExlbmd0aENvZWZmID0gTWVtYmVyT2JqZWN0LmdfR3JpZFJhdGlvO1xuICAgICAgICBpZiAobWVtYmVyLnNlZ21lbnRMZW5ndGhDb2VmZiA9PT0gLTEpIHtcbiAgICAgICAgICBtZW1iZXIuc2VnbWVudExlbmd0aENvZWZmID0gMC45O1xuICAgICAgICB9XG4gICAgICAgIG1lbWJlci5zZXROZWVkVXBkYXRlKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnZpZXdlci51cGRhdGVEaXNwbGF5KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWVtYmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgbWVtYmVyID0gbWVtYmVyc1tpXSBhcyBNZW1iZXJPYmplY3Q7XG4gICAgICAgIG1lbWJlci5zZWdtZW50TGVuZ3RoQ29lZmYgPSAxO1xuICAgICAgICBtZW1iZXIuc2V0TmVlZFVwZGF0ZSgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudmlld2VyLnVwZGF0ZURpc3BsYXkoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDnvJbovpHpopzoibIocmdiYeaVsOe7hO+8iDAtMjU1KeekuuS+i+KAlOKAlFsyNTUsMjU1LDI1NSwxXVxuICAgKiBAcGFyYW0gYmFja2dyb3VuZENvbG9yIOiDjOaZr+minOiJslxuICAgKiBAcGFyYW0gam9pbnRDb2xvciDnqbrpl7TngrnpopzoibJcbiAgICogQHBhcmFtIG1lbWJlckNvbG9yTGluZSDmnYbku7bpopzoibLigJTigJTnur/lm75cbiAgICogQHBhcmFtIG1lbWJlckNvbG9yRmFjZSDmnYbku7bpopzoibLigJTigJTkuInnu7TkvZNcbiAgICogQHBhcmFtIHBsYXRlQ29sb3Ig5p2/6aKc6ImyXG4gICAqL1xuICBlZGl0Q29sb3JzKFxuICAgIGJhY2tncm91bmRDb2xvcjogbnVtYmVyW10sXG4gICAgam9pbnRDb2xvcjogbnVtYmVyW10sXG4gICAgbWVtYmVyQ29sb3JMaW5lOiBudW1iZXJbXSxcbiAgICBtZW1iZXJDb2xvckZhY2U6IG51bWJlcltdLFxuICAgIHBsYXRlQ29sb3I6IG51bWJlcltdXG4gICkge1xuICAgIE9iamVjdENvbG9yLmpvaW50Q29sb3IgPSBqb2ludENvbG9yO1xuICAgIE9iamVjdENvbG9yLm1lbWJlckZhY2VDb2xvciA9IG1lbWJlckNvbG9yRmFjZTtcbiAgICBPYmplY3RDb2xvci5tZW1iZXJMaW5lQ29sb3IgPSBtZW1iZXJDb2xvckxpbmU7XG4gICAgT2JqZWN0Q29sb3IucGxhdGVDb2xvciA9IHBsYXRlQ29sb3I7XG5cbiAgICB0aGlzLnZpZXdlci5iYWNrZ3JvdW5kQ29sb3IgPSBiYWNrZ3JvdW5kQ29sb3I7XG5cbiAgICBsZXQgam9pbnRzID0gdGhpcy52aWV3ZXIucHJvY2Vzcy5maW5kUmVuZGVyT2JqZWN0c0J5VHlwZShcIkpvaW50T2JqZWN0XCIpO1xuICAgIGpvaW50cy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBpdGVtLnNlZ21lbnQuY29sb3Iuc2V0TWFya2VyKGpvaW50Q29sb3IpO1xuICAgIH0pO1xuXG4gICAgbGV0IG1lbWJlcnMgPSB0aGlzLnZpZXdlci5wcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RzQnlUeXBlKFxuICAgICAgXCJNZW1iZXJPYmplY3RcIlxuICAgICkgYXMgTWVtYmVyT2JqZWN0W107XG4gICAgbWVtYmVycy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBpdGVtLmZhY2VDb2xvciA9IG1lbWJlckNvbG9yRmFjZTtcbiAgICAgIGl0ZW0ubGluZUNvbG9yID0gbWVtYmVyQ29sb3JMaW5lO1xuICAgICAgaXRlbS5zZXROZWVkVXBkYXRlKCk7XG4gICAgfSk7XG5cbiAgICBsZXQgcGxhdGVzID0gdGhpcy52aWV3ZXIucHJvY2Vzcy5maW5kUmVuZGVyT2JqZWN0c0J5VHlwZShcbiAgICAgIFwiUGxhdGVPYmplY3RcIlxuICAgICkgYXMgUGxhdGVPYmplY3RbXTtcbiAgICBwbGF0ZXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgaXRlbS5mYWNlQ29sb3IgPSBwbGF0ZUNvbG9yO1xuICAgICAgaXRlbS5zZXROZWVkVXBkYXRlKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnZpZXdlci51cGRhdGVEaXNwbGF5KCk7XG4gIH1cblxuICAvKipcbiAgICog6aKc6Imy5YC856S65L6LOlwiI2ZmZmZmZlwiLS0t55m96ImyLlxuICAgKiBAcGFyYW0gam9pbnRMYWJlbCDnqbrpl7TngrnmoIfnrb7popzoibJcbiAgICogQHBhcmFtIG1lbWJlckxhYmVsIOadhuS7tuagh+etvuminOiJslxuICAgKiBAcGFyYW0gcGxhdGVMYWJlbCDmnb/moIfnrb7popzoibJcbiAgICogQHBhcmFtIGxvYWRMYWJlbCDojbfovb3popzoibJcbiAgICovXG4gIGVkaXRMYWJlbENvbG9ycyhcbiAgICBqb2ludExhYmVsOiBzdHJpbmcsXG4gICAgbWVtYmVyTGFiZWw6IHN0cmluZyxcbiAgICBwbGF0ZUxhYmVsOiBzdHJpbmcsXG4gICAgbG9hZExhYmVsOiBzdHJpbmdcbiAgKSB7XG4gICAgT2JqZWN0Q29sb3Iuam9pbnRMYWJlbENvbG9yID0gam9pbnRMYWJlbDtcbiAgICBPYmplY3RDb2xvci5tZW1iZXJMYWJlbENvbG9yID0gbWVtYmVyTGFiZWw7XG4gICAgT2JqZWN0Q29sb3IucGxhdGVMYWJlbENvbG9yID0gcGxhdGVMYWJlbDtcbiAgICBPYmplY3RDb2xvci5sb2FkTGFiZWxDb2xvciA9IGxvYWRMYWJlbDtcblxuICAgIGxldCBqb2ludHMgPSB0aGlzLnZpZXdlci5wcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RzQnlUeXBlKFxuICAgICAgXCJKb2ludE9iamVjdFwiXG4gICAgKSBhcyBKb2ludE9iamVjdFtdO1xuICAgIGpvaW50cy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBpdGVtLmlzRHJhd1N2ZyA9IGZhbHNlO1xuICAgICAgaXRlbS5pc0RyYXdTdmcgPSB0cnVlO1xuICAgIH0pO1xuXG4gICAgbGV0IG1lbWJlcnMgPSB0aGlzLnZpZXdlci5wcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RzQnlUeXBlKFxuICAgICAgXCJNZW1iZXJPYmplY3RcIlxuICAgICkgYXMgTWVtYmVyT2JqZWN0W107XG4gICAgbWVtYmVycy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBpdGVtLmlzRHJhd1N2ZyA9IGZhbHNlO1xuICAgICAgaXRlbS5pc0RyYXdTdmcgPSB0cnVlO1xuICAgIH0pO1xuXG4gICAgbGV0IHBsYXRlcyA9IHRoaXMudmlld2VyLnByb2Nlc3MuZmluZFJlbmRlck9iamVjdHNCeVR5cGUoXG4gICAgICBcIlBsYXRlT2JqZWN0XCJcbiAgICApIGFzIFBsYXRlT2JqZWN0W107XG4gICAgcGxhdGVzLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIGl0ZW0uaXNEcmF3U3ZnID0gZmFsc2U7XG4gICAgICBpdGVtLmlzRHJhd1N2ZyA9IHRydWU7XG4gICAgfSk7XG5cbiAgICB0aGlzLnZpZXdlci5leGVTY2VuZUNhbWVyYUNoYW5nZWQoTG9uZ2FuLkxvbmdhbkNvcmUuQ2FtZXJhQ2hhbmdlVHlwZS5TY2FsZSk7XG4gIH1cblxuICAvKipcbiAgICog5L+u5pS55oiq6Z2iVmlld2Vy55qE6IOM5pmv6aKc6Imy44CB57q/5p2h6aKc6Imy44CB566t5aS06aKc6Imy44CB5paH5a2X6aKc6ImyXG4gICAqIEBwYXJhbSBzZWN0aW9uVmlld2VyIOaIqumdolZpZXdlcuWvueixoVxuICAgKiBAcGFyYW0gYmFja2dyb3VuZENvbG9yIOiDjOaZr+minOiJsjogWzI1NSwwLDAsMV1cbiAgICogQHBhcmFtIGxpbmVMYWJlbENvbG9yIOe6v+adoeminOiJsjogXCIjZmZmXCJcbiAgICogQHBhcmFtIGFycm93TGFiZWxDb2xvciDnrq3lpLTpopzoibI6IFwiI2ZmZlwiXG4gICAqIEBwYXJhbSB0ZXh0TGFiZWxDb2xvciDmloflrZfpopzoibI6IFwiI2ZmZlwiXG4gICAqL1xuICBlZGl0U2VjdGlvbkxhYmVsQ29sb3JzKFxuICAgIHNlY3Rpb25WaWV3ZXI6IFNlY3Rpb25WaWV3ZXIsXG4gICAgYmFja2dyb3VuZENvbG9yOiBudW1iZXJbXSxcbiAgICBsaW5lTGFiZWxDb2xvcjogc3RyaW5nLFxuICAgIGFycm93TGFiZWxDb2xvcjogc3RyaW5nLFxuICAgIHRleHRMYWJlbENvbG9yOiBzdHJpbmdcbiAgKSB7XG4gICAgLy9cbiAgICBpZiAoYmFja2dyb3VuZENvbG9yKSB7XG4gICAgICBzZWN0aW9uVmlld2VyLmJhY2tncm91bmRDb2xvciA9IGJhY2tncm91bmRDb2xvcjtcbiAgICB9XG4gICAgaWYgKGxpbmVMYWJlbENvbG9yKSB7XG4gICAgICBJbnN0YW5jZVNlY3Rpb25PYmplY3QubGluZUxhYmVsQ29sb3IgPSBsaW5lTGFiZWxDb2xvcjtcbiAgICB9XG4gICAgaWYgKGFycm93TGFiZWxDb2xvcikge1xuICAgICAgSW5zdGFuY2VTZWN0aW9uT2JqZWN0LmFycm93TGFiZWxDb2xvciA9IGFycm93TGFiZWxDb2xvcjtcbiAgICB9XG4gICAgaWYgKHRleHRMYWJlbENvbG9yKSB7XG4gICAgICBJbnN0YW5jZVNlY3Rpb25PYmplY3QudGV4dExhYmVsQ29sb3IgPSB0ZXh0TGFiZWxDb2xvcjtcbiAgICB9XG5cbiAgICBsZXQgcm9vdCA9IHNlY3Rpb25WaWV3ZXIucmVuZGVyT2JqZWN0O1xuICAgIHJvb3Q/LmNoaWxkT2JqZWN0cy5mb3JFYWNoKChzZWN0aW9uKSA9PiB7XG4gICAgICBpZiAoc2VjdGlvbiBpbnN0YW5jZW9mIFNlY3Rpb25PYmplY3QpIHtcbiAgICAgICAgbGV0IGlybyA9IHNlY3Rpb25WaWV3ZXIuZmluZEluc3RhbmNlT2JqZWN0KFxuICAgICAgICAgIHNlY3Rpb25cbiAgICAgICAgKSBhcyBJbnN0YW5jZVNlY3Rpb25PYmplY3Q7XG4gICAgICAgIGlmIChpcm8pIHtcbiAgICAgICAgICBpcm8ucmVtb3ZlU3ZnKCk7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpcm8uZHJhd1N2ZygpO1xuICAgICAgICAgIH0sIDEwKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIOWIh+aNomFjdGl2ZVZpZXdlci5cbiAgICogQHBhcmFtIGVsZW1lbnRJZCB2aWV3ZXLmiYDlnKjnmoTlrrnlmajnmoRJZC5cbiAgICovXG4gIHN3aXRjaEFjdGl2ZVZpZXdlcihlbGVtZW50SWQ6IHN0cmluZykge1xuICAgIGxldCBwcm9jZXNzID0gdGhpcy52aWV3ZXIucHJvY2VzcztcbiAgICBwcm9jZXNzLnZpZXdlcnMuZm9yRWFjaCgodmkpID0+IHtcbiAgICAgIGlmICh2aS5jb250YWluZXIuaWQgPT09IGVsZW1lbnRJZCkge1xuICAgICAgICBwcm9jZXNzLmFjdGl2ZVZpZXdlciA9IHZpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICog5pi+56S65ZCE5Liq5Y6G5Y+y55qE5ZCN56ewLlxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgc2hvd0hpc3RvcnlMaXN0KCkge1xuICAgIGxldCBoaXN0b3J5TWFuYWdlciA9IHRoaXMudmlld2VyLnByb2Nlc3MuaGlzdG9yeU1hbmFnZXI7XG4gICAgbGV0IGxpc3QgPSBoaXN0b3J5TWFuYWdlci5zdGF0ZUxpc3Q7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0LmNvdW50KCk7IGkrKykge1xuICAgICAgY29uc29sZS5sb2cobGlzdC5pdGVtc1tpXS5uYW1lKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbGlzdDtcbiAgfVxuXG4gIC8qKlxuICAgKiDlm57mu5ov6YeN5YGa5Y6G5Y+y55u05Yiw5LiL5qCH5aSELlxuICAgKiBAcGFyYW0gaW5kZXhcbiAgICovXG4gIGhpc3RvcnlSb2xsKGluZGV4OiBudW1iZXIpIHtcbiAgICBsZXQgaGlzdG9yeU1hbmFnZXIgPSB0aGlzLnZpZXdlci5wcm9jZXNzLmhpc3RvcnlNYW5hZ2VyO1xuICAgIGxldCBjdXJyZW50SWR4ID0gaGlzdG9yeU1hbmFnZXIuY3VycmVudFN0YXRlSW5kZXg7XG5cbiAgICBpZiAoY3VycmVudElkeCA8IGluZGV4KSB7XG4gICAgICBsZXQgdGltZSA9IGluZGV4IC0gY3VycmVudElkeDtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGltZTsgaSsrKSB7XG4gICAgICAgIHRoaXMudmlld2VyLnByb2Nlc3MuaGlzdG9yeU1hbmFnZXIucm9sbEZvcndhcmQoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRJZHggPiBpbmRleCkge1xuICAgICAgbGV0IHRpbWUgPSBjdXJyZW50SWR4IC0gaW5kZXg7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRpbWU7IGkrKykge1xuICAgICAgICB0aGlzLnZpZXdlci5wcm9jZXNzLmhpc3RvcnlNYW5hZ2VyLnJvbGxCYWNrKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gdGhpcy5zaG93SGlzdG9yeUxpc3QoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDojrflj5bpobnnm67kuK3nmoTlhajpg6jlt6XlhrXlr7nosaFcbiAgICogQHJldHVybnNcbiAgICovXG4gIGdldExvYWRDb25kaXRpb25MaXN0KCkge1xuICAgIGxldCBsb2FkQ29uZGl0aW9ucyA9IHRoaXMudmlld2VyLnByb2Nlc3MuZmluZFJlbmRlck9iamVjdHNCeVR5cGUoXG4gICAgICBcIkxvYWRDb25kaXRpb25PYmplY3RcIlxuICAgICk7XG4gICAgcmV0dXJuIGxvYWRDb25kaXRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIOiOt+WPlumhueebruS4reeahOWFqOmDqOe7hOWQiOW3peWGteWvueixoVxuICAgKiBAcmV0dXJuc1xuICAgKi9cbiAgZ2V0TG9hZENvbmRpdGlvbkNvbWJpbmVMaXN0KCkge1xuICAgIGxldCBvYmplY3RzID0gdGhpcy52aWV3ZXIucHJvY2Vzcy5maW5kUmVuZGVyT2JqZWN0c0J5VHlwZShcIlNlYXN0YXRlTGNvbWJcIik7XG4gICAgcmV0dXJuIG9iamVjdHM7XG4gIH1cblxuICAvKipcbiAgICog5riF6Zmkdmlld2Vy55qEUHJvY2Vzc+aui+eVmeaVsOaNri5cbiAgICovXG4gIHJlbW92ZVByb2Nlc3NEYXRhKCkge1xuICAgIHRoaXMudmlld2VyLnByb2Nlc3MuY2xlYXJSZW5kZXJPYmplY3RzKHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIOa3u+WKoOeCueiNt+i9vVxuICAgKiBAcGFyYW0gbG9hZENvbmRpdGlvblJPIOW3peWGteWvueixoVxuICAgKiBAcGFyYW0gbG9hZEdyb3VwTmFtZSDojbfovb3nu4TlkI1cbiAgICogQHBhcmFtIHNlbGVjdGVkSm9pbnROYW1lIOaJgOmAieepuumXtOeCueWQjVxuICAgKiBAcGFyYW0gZnhcbiAgICogQHBhcmFtIGZ5XG4gICAqIEBwYXJhbSBmelxuICAgKiBAcGFyYW0gbXhcbiAgICogQHBhcmFtIG15XG4gICAqIEBwYXJhbSBtelxuICAgKi9cbiAgYWRkSm9pbnRMb2FkKFxuICAgIGxvYWRDb25kaXRpb25OYW1lOiBzdHJpbmcsXG4gICAgbG9hZEdyb3VwTmFtZTogc3RyaW5nLFxuICAgIHNlbGVjdGVkSm9pbnROYW1lOiBzdHJpbmcsXG4gICAgZng6IG51bWJlcixcbiAgICBmeTogbnVtYmVyLFxuICAgIGZ6OiBudW1iZXIsXG4gICAgbXg6IG51bWJlcixcbiAgICBteTogbnVtYmVyLFxuICAgIG16OiBudW1iZXJcbiAgKTogbnVtYmVyIHtcbiAgICBsZXQgdmlld2VyID0gdGhpcy52aWV3ZXIgYXMgVmlld2VyO1xuXG4gICAgLy8g5re75Yqg5oiW5L+u5pS55bel5Ya1LlxuICAgIGxldCBwcmV0cmVhdG1lbnRSTyA9IHZpZXdlci5wcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RCeU5hbWUoXG4gICAgICBcIuWQjuWkhOeQhuiuoeeul+e7k+aenFwiXG4gICAgKSBhcyBEZXNpZ25CYXNlT2JqZWN0O1xuXG4gICAgaWYgKCFwcmV0cmVhdG1lbnRSTykge1xuICAgICAgY29uc29sZS5lcnJvcihcIuayoeaciSflkI7lpITnkIborqHnrpfnu5Pmnpwn55qEUk/oioLngrlcIik7XG4gICAgICByZXR1cm4gMjtcbiAgICB9XG5cbiAgICBsZXQgY29uZGl0aW9uUGFyZW50ID0gdmlld2VyLnByb2Nlc3MuZmluZENhZU9iamVjdEJ5TmFtZUluQ2hpbGRPYmplY3QoXG4gICAgICBwcmV0cmVhdG1lbnRSTyxcbiAgICAgIFwi6I236L295bel5Ya1XCJcbiAgICApIGFzIERlc2lnbkJhc2VPYmplY3Q7XG5cbiAgICBpZiAoIWNvbmRpdGlvblBhcmVudCkge1xuICAgICAgY29uZGl0aW9uUGFyZW50ID0gbmV3IERlc2lnbkJhc2VPYmplY3QoKTtcbiAgICAgIGNvbmRpdGlvblBhcmVudC5idXNpbmVzc1N0YXRlID0gQnVzaW5lc3NTdGF0ZS5DcmVhdGluZztcbiAgICAgIGNvbmRpdGlvblBhcmVudC5uYW1lID0gXCLojbfovb3lt6XlhrVcIjtcbiAgICAgIHZpZXdlci5wcm9jZXNzLmFkZFJlbmRlck9iamVjdChwcmV0cmVhdG1lbnRSTywgY29uZGl0aW9uUGFyZW50KTtcbiAgICB9XG5cbiAgICBsZXQgbG9hZENvbmRpdGlvblJPID0gbnVsbDtcbiAgICBsb2FkQ29uZGl0aW9uUk8gPSB2aWV3ZXIucHJvY2Vzcy5maW5kQ2FlT2JqZWN0QnlOYW1lSW5DaGlsZE9iamVjdChcbiAgICAgIGNvbmRpdGlvblBhcmVudCxcbiAgICAgIGxvYWRDb25kaXRpb25OYW1lXG4gICAgKSBhcyBMb2FkQ29uZGl0aW9uT2JqZWN0O1xuICAgIGlmICghbG9hZENvbmRpdGlvblJPKSB7XG4gICAgICBsb2FkQ29uZGl0aW9uUk8gPSBuZXcgTG9hZENvbmRpdGlvbk9iamVjdChsb2FkQ29uZGl0aW9uTmFtZSk7XG4gICAgICBsb2FkQ29uZGl0aW9uUk8uYnVzaW5lc3NTdGF0ZSA9IEJ1c2luZXNzU3RhdGUuQ3JlYXRpbmc7XG4gICAgICB2aWV3ZXIucHJvY2Vzcy5hZGRSZW5kZXJPYmplY3QoY29uZGl0aW9uUGFyZW50LCBsb2FkQ29uZGl0aW9uUk8pO1xuICAgIH0gZWxzZSB7XG4gICAgICBsb2FkQ29uZGl0aW9uUk8uYnVzaW5lc3NTdGF0ZSA9IEJ1c2luZXNzU3RhdGUuRWRpdGluZztcbiAgICB9XG5cbiAgICBsZXQgbG9hZEdyb3VwUk8gPSB2aWV3ZXIucHJvY2Vzcy5maW5kQ2FlT2JqZWN0QnlOYW1lSW5DaGlsZE9iamVjdChcbiAgICAgIGxvYWRDb25kaXRpb25STyxcbiAgICAgIGxvYWRHcm91cE5hbWVcbiAgICApIGFzIExvYWRHcm91cE9iamVjdDtcbiAgICBpZiAoIWxvYWRHcm91cFJPKSB7XG4gICAgICBsb2FkR3JvdXBSTyA9IG5ldyBMb2FkR3JvdXBPYmplY3QobG9hZEdyb3VwTmFtZSk7XG4gICAgICBsb2FkR3JvdXBSTy5idXNpbmVzc1N0YXRlID0gQnVzaW5lc3NTdGF0ZS5DcmVhdGluZztcbiAgICAgIHZpZXdlci5wcm9jZXNzLmFkZFJlbmRlck9iamVjdChsb2FkQ29uZGl0aW9uUk8sIGxvYWRHcm91cFJPKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9hZEdyb3VwUk8uYnVzaW5lc3NTdGF0ZSA9IEJ1c2luZXNzU3RhdGUuRWRpdGluZztcbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxvYWRHcm91cFJPLmNoaWxkT2JqZWN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IGxvYWQgPSBsb2FkR3JvdXBSTy5jaGlsZE9iamVjdHNbaV07XG4gICAgICBpZiAobG9hZCBpbnN0YW5jZW9mIEpvaW50TG9hZE9iamVjdCkge1xuICAgICAgICBpZiAobG9hZC5qb2ludE5hbWUgPT09IHNlbGVjdGVkSm9pbnROYW1lKSB7XG4gICAgICAgICAgLy8g5a+55bqU55qE5bel5Ya144CB5bel5Ya157uE55qE5LiL55qE56m66Ze054K55LiK5bey57uP5a2Y5Zyo54K56I236L29LlxuICAgICAgICAgIHJldHVybiAzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGpvaW50TG9hZCA9IG5ldyBKb2ludExvYWRPYmplY3QobG9hZENvbmRpdGlvblJPLm5hbWUsIGxvYWRHcm91cE5hbWUpO1xuICAgIGpvaW50TG9hZC5uYW1lID0gXCJKb2ludDpcIiArIHNlbGVjdGVkSm9pbnROYW1lO1xuICAgIGpvaW50TG9hZC5idXNpbmVzc1N0YXRlID0gQnVzaW5lc3NTdGF0ZS5DcmVhdGluZztcbiAgICBqb2ludExvYWQuam9pbnROYW1lID0gc2VsZWN0ZWRKb2ludE5hbWU7XG5cbiAgICBqb2ludExvYWQuZm9yY2VYRGlyZWN0aW9uID0gZng7XG4gICAgam9pbnRMb2FkLmZvcmNlWURpcmVjdGlvbiA9IGZ5O1xuICAgIGpvaW50TG9hZC5mb3JjZVpEaXJlY3Rpb24gPSBmejtcblxuICAgIGpvaW50TG9hZC5tb21lbnRBYm91dFhBeGlzID0gbXg7XG4gICAgam9pbnRMb2FkLm1vbWVudEFib3V0WUF4aXMgPSBteTtcbiAgICBqb2ludExvYWQubW9tZW50QWJvdXRaQXhpcyA9IG16O1xuXG4gICAgdmlld2VyLnByb2Nlc3MuYWRkUmVuZGVyT2JqZWN0KGxvYWRHcm91cFJPLCBqb2ludExvYWQpO1xuICAgIHJldHVybiAxO1xuICB9XG5cbiAgLyoqXG4gICAqIOe8lui+keeCueiNt+i9vVxuICAgKiBAcGFyYW0gam9pbnRMb2FkIOimgee8lui+keeahOeCueiNt+i9veWvueixoVxuICAgKiBAcGFyYW0gZnhcbiAgICogQHBhcmFtIGZ5XG4gICAqIEBwYXJhbSBmelxuICAgKiBAcGFyYW0gbXhcbiAgICogQHBhcmFtIG15XG4gICAqIEBwYXJhbSBtelxuICAgKi9cbiAgZWRpdEpvaW50TG9hZChcbiAgICBqb2ludExvYWQ6IEpvaW50TG9hZE9iamVjdCxcbiAgICBmeDogbnVtYmVyLFxuICAgIGZ5OiBudW1iZXIsXG4gICAgZno6IG51bWJlcixcbiAgICBteDogbnVtYmVyLFxuICAgIG15OiBudW1iZXIsXG4gICAgbXo6IG51bWJlclxuICApIHtcbiAgICBqb2ludExvYWQuYnVzaW5lc3NTdGF0ZSA9IEJ1c2luZXNzU3RhdGUuRWRpdGluZztcblxuICAgIGpvaW50TG9hZC5mb3JjZVhEaXJlY3Rpb24gPSBmeDtcbiAgICBqb2ludExvYWQuZm9yY2VZRGlyZWN0aW9uID0gZnk7XG4gICAgam9pbnRMb2FkLmZvcmNlWkRpcmVjdGlvbiA9IGZ6O1xuXG4gICAgam9pbnRMb2FkLm1vbWVudEFib3V0WEF4aXMgPSBteDtcbiAgICBqb2ludExvYWQubW9tZW50QWJvdXRZQXhpcyA9IG15O1xuICAgIGpvaW50TG9hZC5tb21lbnRBYm91dFpBeGlzID0gbXo7XG4gIH1cblxuICAvKipcbiAgICog6YCa6L+H6ZK75a2U5ZCN5YiH5o2i5pi+56S655qE6ZK75a2U5Zu+5L6LLlxuICAgKiBAcGFyYW0gYm9yZWhvbGVOYW1lXG4gICAqL1xuICBib3JlaG9sZUNoYW5nZShib3JlaG9sZU5hbWU6IHN0cmluZykge1xuICAgIGxldCBlbGVtZW50S2V5ID0gXCJzb2lsZFwiO1xuICAgIGlmICh0aGlzLmJvcmVob2xlQ3V0TGluZURpc3BsYXkpIHtcbiAgICAgIHRoaXMuYm9yZWhvbGVDdXRMaW5lRGlzcGxheSA9IGZhbHNlO1xuICAgICAgTGVnZW5kTWFuYWdlLmRlc3RvcnkoZWxlbWVudEtleSk7XG4gICAgICBsZXQgY3VycmVudEJvcmVob2xlT2JqZWN0cyA9IHRoaXMuY3VycmVudEJvcmVob2xlT2JqZWN0cztcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjdXJyZW50Qm9yZWhvbGVPYmplY3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChjdXJyZW50Qm9yZWhvbGVPYmplY3RzW2ldLm5hbWUgPT09IGJvcmVob2xlTmFtZSkge1xuICAgICAgICAgIGN1cnJlbnRCb3JlaG9sZU9iamVjdHNbaV0uY3V0bGllbkFjaXR2ZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5hY3RpdmVCb3JlaG9sZU5hbWUgPSBib3JlaG9sZU5hbWU7XG5cbiAgICAgICAgICB0aGlzLmJvcmVob2xlQ3V0TGluZURpc3BsYXkgPSB0cnVlO1xuICAgICAgICAgIGxldCBjdXRMaW5lTGVnZW5kID0gY3VycmVudEJvcmVob2xlT2JqZWN0c1tpXS5nZUN1dGxpbmUoKTtcbiAgICAgICAgICBMZWdlbmRNYW5hZ2UuY3JlYXRlKFxuICAgICAgICAgICAgZWxlbWVudEtleSxcbiAgICAgICAgICAgIGN1dExpbmVMZWdlbmQsXG4gICAgICAgICAgICBcIuWcn+WxguaVsOaNrlwiLFxuICAgICAgICAgICAgXCLpopzoibJcIixcbiAgICAgICAgICAgIFwi5Zyf5bGC5ZCNXCIsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHJpZ2h0OiBcIjBweFwiLFxuICAgICAgICAgICAgICBib3R0b206IFwiMHB4XCIsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjdXJyZW50Qm9yZWhvbGVPYmplY3RzW2ldLmN1dGxpZW5BY2l0dmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUF1Q0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFBQTtBQWVBO0FBQUE7QUFiQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBR0E7QUFFQTtBQUNBOztBQUlBO0FBa0RBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBR0E7QUFDQTtBQU1BO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBOzs7QUFJQTtBQUVBO0FBRUE7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFNQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBS0E7O0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBU0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBRUE7QUFDQTs7QUFFQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBRUE7QUFDQTtBQUNBO0FBT0E7QUFDQTtBQUVBO0FBQ0E7QUFJQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUdBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7OztBQUlBO0FBQ0E7QUFLQTtBQUFBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFPQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFHQTtBQUVBO0FBQ0E7QUFPQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFHQTtBQUNBOztBQUVBO0FBRUE7QUFDQTtBQXdKQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUtBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBR0E7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTs7QUFFQTtBQUtBO0FBQ0E7QUFDQTs7QUFFQTtBQUtBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQTtBQUNBO0FBUUE7QUFFQTtBQUdBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQVFBO0FBTUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBT0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTs7QUFHQTtBQUNBO0FBTUE7QUFDQTtBQUVBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQU1BO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBT0E7QUFDQTtBQUVBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQW9CQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUdBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBR0E7QUFDQTtBQUlBO0FBSUE7QUFJQTtBQUlBO0FBSUE7QUFJQTtBQUlBO0FBSUE7QUFJQTtBQUlBO0FBSUE7QUFHQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFLQTtBQUNBO0FBRUE7QUFDQTtBQUtBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBOzs7QUFRQTtBQUNBOzs7QUFNQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTs7O0FBUUE7QUFJQTs7O0FBR0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFPQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7O0FBS0E7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQUNBO0FBT0E7QUFJQTtBQUNBO0FBQ0E7OztBQUtBO0FBQ0E7QUFJQTs7O0FBR0E7QUFDQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTs7QUFHQTtBQUNBO0FBQ0E7O0FBR0E7QUFHQTtBQU9BO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTs7QUFFQTtBQUtBO0FBT0E7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTs7O0FBS0E7QUFDQTtBQUlBOzs7QUFHQTtBQUNBO0FBRUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFHQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFJQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7OztBQUdBO0FBT0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTs7O0FBS0E7QUFJQTs7O0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBR0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQTs7OztBQUlBO0FBTUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQU9BO0FBQ0E7QUFDQTtBQUVBO0FBR0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBR0E7Ozs7QUFLQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBR0E7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQTtBQU9BO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBOztBQUVBOztBQUdBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUlBO0FBQ0E7QUFVQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBU0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFVQTtBQVFBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUdBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7O0FBS0E7QUFNQTtBQUNBO0FBR0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBY0E7QUFXQTtBQUdBO0FBSUE7QUFDQTtBQUNBOztBQUdBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUdBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQVlBO0FBU0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBRUE7QUFDQTs7OztBQUlBO0FBQ0E7QUFBQTtBQW45REE7O0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./packages/caeDesign/src/gsDevFx/managers/interfaceManagers/commonInterfaceManager.ts\n");
|
|
4002
4002
|
|
|
4003
4003
|
/***/ }),
|
|
4004
4004
|
|
|
@@ -4471,7 +4471,7 @@ eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPAC
|
|
|
4471
4471
|
/*! no static exports found */
|
|
4472
4472
|
/***/ (function(module, exports, __webpack_require__) {
|
|
4473
4473
|
|
|
4474
|
-
eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__, exports, __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\"), __webpack_require__(/*! gs-bim-air */ \"./node_modules/gs-bim-air/lib/BimAir.umd.min.js\"), __webpack_require__(/*! ./pGrupObject */ \"./packages/caeDesign/src/gsDevFx/objects/caeObjects/pGrupObject.ts\"), __webpack_require__(/*! gs-ceec-design */ \"./packages/ceecDesign/src/index.ts\"), __webpack_require__(/*! ../../../caeCardEditor/caeCardObjects/cardPlate */ \"./packages/caeDesign/src/caeCardEditor/caeCardObjects/cardPlate.ts\"), __webpack_require__(/*! ../../../caeCardEditor/caeCardObjects/cardPlateOffsets */ \"./packages/caeDesign/src/caeCardEditor/caeCardObjects/cardPlateOffsets.ts\"), __webpack_require__(/*! gs-ceec-design */ \"./packages/ceecDesign/src/index.ts\"), __webpack_require__(/*! gs-ceec-design */ \"./packages/ceecDesign/src/index.ts\"), __webpack_require__(/*! ./objectColors */ \"./packages/caeDesign/src/gsDevFx/objects/caeObjects/objectColors.ts\"), __webpack_require__(/*! gs-ceec-design */ \"./packages/ceecDesign/src/index.ts\"), __webpack_require__(/*! ../../../utility/utility */ \"./packages/caeDesign/src/utility/utility.ts\"), __webpack_require__(/*! ../../../gsDevFx/process */ \"./packages/caeDesign/src/gsDevFx/process.ts\")], __WEBPACK_AMD_DEFINE_RESULT__ = (function (require, exports, tslib_1, gs_bim_air_1, pGrupObject_1, gs_ceec_design_1, cardPlate_1, cardPlateOffsets_1, gs_ceec_design_2, gs_ceec_design_3, objectColors_1, gs_ceec_design_4, utility_1, process_1) {\n \"use strict\";\n\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n exports.PlateAdditionalProperty = exports.PlateObject = exports.ViewOption = void 0;\n var ViewOption;\n (function (ViewOption) {\n ViewOption[ViewOption[\"Line\"] = 0] = \"Line\";\n ViewOption[ViewOption[\"Body\"] = 1] = \"Body\";\n })(ViewOption = exports.ViewOption || (exports.ViewOption = {}));\n var PlateObject = function (_super) {\n tslib_1.__extends(PlateObject, _super);\n function PlateObject(name) {\n var _this = _super.call(this) || this;\n _this.typeName = \"PlateObject\";\n _this._joints = new Array();\n _this._pGrup = null;\n _this._plateThickness = null;\n _this._offsetOption = null;\n _this._offsets = new Array();\n _this.rpsk = \"\";\n _this.materialData_E = null;\n _this.poissonRatiou = null;\n _this.yieldStress = null;\n _this.weightDensity = null;\n _this.remarks = \"\";\n _this.viewOption = ViewOption.Body;\n _this._additionalProperty = null;\n _this.faceColor = null;\n _this._isDrawLabel = false;\n _this._isDrawAxis = false;\n _this.finiteElementCoeff = 1.0;\n _this.name = name;\n _this.offsetOption = \"\";\n _this.instanceTypes.add(\"main\", gs_ceec_design_3.InstanceDesignBaseObject.prototype);\n _this.isDrawSvg = true;\n var ro = process_1.Process.activeProcess.getRenderObjectBySegmentKey(_this.segment.key);\n return _this;\n }\n Object.defineProperty(PlateObject.prototype, \"additionalProperty\", {\n get: function get() {\n return this._additionalProperty;\n },\n set: function set(value) {\n this._additionalProperty = value;\n this.additionalPropertyActive();\n },\n enumerable: false,\n configurable: true\n });\n PlateObject.prototype.additionalPropertyActive = function () {\n var property = this.additionalProperty;\n if (property) {\n if (property.rpsk && property.overriedStreeReport) {\n this.rpsk = gs_bim_air_1.Longan.deepClone(property.rpsk);\n }\n if (property.offsetOption !== null && property.overriedPlateOffset) {\n this.offsetOption = gs_bim_air_1.Longan.deepClone(property.offsetOption);\n }\n if (property.offsetOption && property.offsetOption !== \"0\") {\n this.offsets = [0, 0, 0, 0, 0, 0, 0, 0, 0];\n }\n if (property.offsetOption && property.offsetOption !== \"0\" && property.overriedJointA) {\n this.offsets[0] = property.jointA[0];\n this.offsets[1] = property.jointA[1];\n this.offsets[2] = property.jointA[2];\n }\n if (property.offsetOption && property.offsetOption !== \"0\" && property.overriedJointB) {\n this.offsets[3] = property.jointB[0];\n this.offsets[4] = property.jointB[1];\n this.offsets[5] = property.jointB[2];\n }\n if (property.offsetOption && property.offsetOption !== \"0\" && property.overriedJointC) {\n this.offsets[6] = property.jointC[0];\n this.offsets[7] = property.jointC[1];\n this.offsets[8] = property.jointC[2];\n }\n if (property.offsetOption && property.offsetOption !== \"0\" && property.overriedJointD && this.joints.length > 3) {\n this.offsets[9] = property.jointD[0];\n this.offsets[10] = property.jointD[1];\n this.offsets[11] = property.jointD[2];\n }\n }\n };\n Object.defineProperty(PlateObject.prototype, \"joints\", {\n get: function get() {\n return this._joints;\n },\n set: function set(value) {\n this._joints = value;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PlateObject.prototype, \"pGrup\", {\n get: function get() {\n return this._pGrup;\n },\n set: function set(value) {\n if (this._pGrup instanceof pGrupObject_1.PGrupObject) {\n var list = process_1.Process.activeProcess.pgrupMapReleativePlates.get(this._pGrup);\n list.remove(this);\n }\n this._pGrup = value;\n if (value instanceof pGrupObject_1.PGrupObject) {\n var list = process_1.Process.activeProcess.pgrupMapReleativePlates.get(value);\n if (!list) {\n list = new gs_bim_air_1.Longan.List();\n process_1.Process.activeProcess.pgrupMapReleativePlates.set(value, list);\n }\n list.add(this);\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PlateObject.prototype, \"plateThickness\", {\n get: function get() {\n return this._plateThickness;\n },\n set: function set(value) {\n this._plateThickness = value;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PlateObject.prototype, \"offsetOption\", {\n get: function get() {\n return this._offsetOption;\n },\n set: function set(value) {\n this._offsetOption = value;\n if (!value) {\n if (this.offsets) {\n for (var i = 0; i < this.offsets.length; i++) {\n this.offsets[i] = 0;\n }\n }\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PlateObject.prototype, \"offsets\", {\n get: function get() {\n return this._offsets;\n },\n set: function set(value) {\n this._offsets = value;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PlateObject.prototype, \"isDrawLabel\", {\n get: function get() {\n return this._isDrawLabel;\n },\n set: function set(isDrawLabel) {\n this._isDrawLabel = isDrawLabel;\n if (isDrawLabel) {} else {\n if (this.labelRect) {\n this.labelRect.remove();\n }\n this.labelRect = null;\n this.labelText && this.labelText.clear();\n this.labelText = null;\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PlateObject.prototype, \"isDrawAxis\", {\n get: function get() {\n return this._isDrawAxis;\n },\n set: function set(isDrawAxis) {\n this._isDrawAxis = isDrawAxis;\n if (isDrawAxis) {\n this.drawAxis();\n } else {\n if (this.axisSeg) {\n this.axisSeg.clearAll();\n this.axisSeg = null;\n }\n }\n },\n enumerable: false,\n configurable: true\n });\n PlateObject.checkNamelegal = function (name) {\n var reg = /^[A-Z0-9]*$/;\n if (!reg.test(name) || name.trimEnd().length > 4) {\n console.log(\"板名称不符合规范\");\n return false;\n }\n return true;\n };\n PlateObject.prototype.getThickness = function () {\n if (this.pGrup) {\n if (this.pGrup instanceof pGrupObject_1.PGrupObject && this.pGrup.checkBusinessStateIsActive()) {\n return this.pGrup.thickness;\n } else {\n return null;\n }\n } else {\n return null;\n }\n };\n PlateObject.prototype.serialize = function () {\n var obj = _super.prototype.serialize.call(this);\n if (this.joints) {\n var ids = new Array();\n for (var i = 0; i < this.joints.length; i++) {\n if (this.joints[i].typeName) {\n ids.push(this.joints[i].id);\n } else {\n ids.push(this.joints[i]);\n }\n }\n obj.joints = ids;\n }\n if (this.pGrup) {\n obj.pGrup = this.pGrup.id;\n }\n if (this.notNullAndNotUndefined(this.plateThickness)) {\n obj.plateThickness = this.plateThickness;\n }\n if (this.notNullAndNotUndefined(this.offsetOption)) {\n obj.offsetOption = this.offsetOption;\n }\n if (this.offsets) {\n obj.offsets = this.offsets;\n }\n if (this.notNullAndNotUndefined(this.rpsk)) {\n obj.rpsk = this.rpsk;\n }\n if (this.notNullAndNotUndefined(this.materialData_E)) {\n obj.materialData_E = this.materialData_E;\n }\n if (this.notNullAndNotUndefined(this.poissonRatiou)) {\n obj.poissonRatiou = this.poissonRatiou;\n }\n if (this.notNullAndNotUndefined(this.yieldStress)) {\n obj.yieldStress = this.yieldStress;\n }\n if (this.notNullAndNotUndefined(this.weightDensity)) {\n obj.weightDensity = this.weightDensity;\n }\n if (this.notNullAndNotUndefined(this.remarks)) {\n obj.remarks = this.remarks;\n }\n return obj;\n };\n PlateObject.prototype.deserialize = function (obj, pm) {\n _super.prototype.deserialize.call(this, obj, pm);\n if (obj.joints) {\n for (var i = 0; i < obj.joints.length; i++) {\n var joint = pm.referenceList.get(obj.joints[i]);\n if (joint) {\n this.joints.push(joint);\n } else {\n this.joints.push(obj.joints[i]);\n pm.needReferenceList.add(this);\n }\n }\n }\n if (obj.pGrup) {\n var pGrup = pm.referenceList.get(obj.pGrup);\n if (pGrup) {\n this.pGrup = pGrup;\n } else {\n this.pGrup = obj.pGrup;\n pm.needReferenceList.add(this);\n }\n }\n if (this.notNullAndNotUndefined(obj.plateThickness)) {\n this.plateThickness = obj.plateThickness;\n }\n if (this.notNullAndNotUndefined(obj.offsetOption)) {\n this._offsetOption = obj.offsetOption;\n }\n if (obj.offsets) {\n this._offsets = (0, utility_1.CaeNumberArray)(obj.offsets);\n }\n if (this.notNullAndNotUndefined(obj.rpsk)) {\n this.rpsk = obj.rpsk;\n }\n this.materialData_E = (0, utility_1.CaeNumber)(obj.materialData_E);\n this.poissonRatiou = (0, utility_1.CaeNumber)(obj.poissonRatiou);\n this.yieldStress = (0, utility_1.CaeNumber)(obj.yieldStress);\n this.weightDensity = (0, utility_1.CaeNumber)(obj.weightDensity);\n if (this.notNullAndNotUndefined(obj.remarks)) {\n this.remarks = obj.remarks;\n }\n this.setNeedUpdate();\n };\n PlateObject.prototype.clone = function (cloneObj, cloneManager) {\n cloneObj.joints = tslib_1.__spreadArray([], tslib_1.__read(this.joints), false);\n cloneObj.pGrup = this.pGrup;\n cloneObj.plateThickness = gs_bim_air_1.Longan.deepClone(this.plateThickness);\n cloneObj.offsetOption = gs_bim_air_1.Longan.deepClone(this.offsetOption);\n if (this.offsets) {\n cloneObj.offsets = gs_bim_air_1.Longan.deepClone(this.offsets);\n }\n cloneObj = _super.prototype.clone.call(this, cloneObj);\n return cloneObj;\n };\n PlateObject.prototype.serializeToCard = function () {\n var _a;\n var cardPlate = new cardPlate_1.CardPlate();\n cardPlate.lineLabel.value = \"PLATE\";\n cardPlate.plateLabel.value = this.name;\n cardPlate.jointA_Name.value = this.joints[0].name;\n cardPlate.jointB_Name.value = this.joints[1].name;\n cardPlate.jointC_Name.value = this.joints[2].name;\n cardPlate.jointD_Name.value = this.joints[3] ? this.joints[3].name : \"\";\n cardPlate.plateGrupLabel.value = this.pGrup ? this.pGrup.name : \"\";\n cardPlate.rpsk.value = this.rpsk;\n cardPlate.plateThickness.value = this.plateThickness;\n cardPlate.offsetOption.value = this.offsetOption;\n cardPlate.materialData_E.value = this.materialData_E;\n cardPlate.poissonRatiou.value = this.poissonRatiou;\n cardPlate.yieldStress.value = this.yieldStress;\n cardPlate.weightDensity.value = this.weightDensity;\n cardPlate.remarks.value = this.remarks;\n var result = cardPlate.getLine();\n if (((_a = this.offsets) === null || _a === void 0 ? void 0 : _a.length) >= 3) {\n result += \"\\n\";\n var cardPlateOffset1 = new cardPlateOffsets_1.CardPlateOffsets();\n cardPlateOffset1.lineLabel.value = \"PLATE OFFSETS\";\n cardPlateOffset1.comments.value = \"\";\n cardPlateOffset1.firstJoint_XOffset.value = this.offsets[0].toString();\n cardPlateOffset1.firstJoint_YOffset.value = this.offsets[1].toString();\n cardPlateOffset1.firstJoint_ZOffset.value = this.offsets[2].toString();\n cardPlateOffset1.secondJoint_XOffset.value = this.offsets[3] !== null && this.offsets[3] !== undefined ? this.offsets[3].toString() : \"\";\n cardPlateOffset1.secondJoint_YOffset.value = this.offsets[4] !== null && this.offsets[3] !== undefined ? this.offsets[4].toString() : \"\";\n cardPlateOffset1.secondJoint_ZOffset.value = this.offsets[5] !== null && this.offsets[3] !== undefined ? this.offsets[5].toString() : \"\";\n result += cardPlateOffset1.getLine() + \"\\n\";\n var cardPlateOffset2 = new cardPlateOffsets_1.CardPlateOffsets();\n cardPlateOffset2.lineLabel.value = \"PLATE OFFSETS\";\n cardPlateOffset2.comments.value = \"\";\n cardPlateOffset2.firstJoint_XOffset.value = this.offsets[6] !== null && this.offsets[3] !== undefined ? this.offsets[6].toString() : \"\";\n cardPlateOffset2.firstJoint_YOffset.value = this.offsets[7] !== null && this.offsets[3] !== undefined ? this.offsets[7].toString() : \"\";\n cardPlateOffset2.firstJoint_ZOffset.value = this.offsets[8] !== null && this.offsets[3] !== undefined ? this.offsets[8].toString() : \"\";\n if (this.offsets.length > 9) {\n if (this.offsets[9] !== null && this.offsets[9] !== undefined) {\n cardPlateOffset2.secondJoint_XOffset.value = this.offsets[9].toString();\n }\n if (this.offsets[10] !== null && this.offsets[10] !== undefined) {\n cardPlateOffset2.secondJoint_YOffset.value = this.offsets[10].toString();\n }\n if (this.offsets[11] !== null && this.offsets[11] !== undefined) {\n cardPlateOffset2.secondJoint_ZOffset.value = this.offsets[11].toString();\n }\n } else {\n cardPlateOffset2.secondJoint_XOffset.value = null;\n cardPlateOffset2.secondJoint_YOffset.value = null;\n cardPlateOffset2.secondJoint_ZOffset.value = null;\n }\n result += cardPlateOffset2.getLine();\n }\n return result;\n };\n PlateObject.prototype.tempDelete = function (viewer) {\n var componentGroups = viewer.process.findRenderObjectByName(\"构件分组分色\");\n if (componentGroups) {\n for (var i = 0; i < componentGroups.childObjects.length; i++) {\n var obj = componentGroups.childObjects[i];\n for (var j = 0; j < obj.refercenPlateIds.count(); j++) {\n if (obj.refercenPlateIds.items[j] === this.id) {\n obj.refercenPlateIds.remove(this.id);\n }\n }\n }\n }\n _super.prototype.tempDelete.call(this, viewer);\n };\n PlateObject.prototype.reverseJointAndOffset = function () {\n if (this.joints) {\n this.joints = this.joints.reverse();\n }\n if (this.offsets) {\n var offsets = new Array();\n for (var i = 0; i < this.offsets.length; i += 3) {\n var offset = new Array(this.offsets[i], this.offsets[i + 1], this.offsets[i + 2]);\n offsets.push(offset);\n }\n var reverseOffsets = new Array();\n for (var i = offsets.length - 1; i >= 0; i--) {\n var offset = offsets[i];\n reverseOffsets.push(offset[0]);\n reverseOffsets.push(offset[1]);\n reverseOffsets.push(offset[2]);\n }\n }\n };\n PlateObject.prototype.getPositionsBeforePGrupZOffset = function () {\n var positions = new Array();\n for (var i = 0; i < this.joints.length; i++) {\n positions.push(this.joints[i].position[0]);\n positions.push(this.joints[i].position[1]);\n positions.push(this.joints[i].position[2]);\n }\n if (this.offsets) {\n if (this.offsetOption === \"1\") {\n for (var i = 0; i < this.offsets.length; i++) {\n if (positions[i] !== null && positions[i] !== undefined) {\n positions[i] += this.offsets[i] / 100;\n }\n }\n } else if (this.offsetOption === \"2\") {\n for (var i = 0; i < this.offsets.length; i++) {\n if (positions[i] !== null && positions[i] !== undefined) {\n positions[i] += this.offsets[i] / 100;\n }\n }\n }\n }\n return positions;\n };\n PlateObject.prototype.getPositions = function () {\n var positions = new Array();\n for (var i = 0; i < this.joints.length; i++) {\n positions.push(this.joints[i].position[0]);\n positions.push(this.joints[i].position[1]);\n positions.push(this.joints[i].position[2]);\n }\n if (this.offsets) {\n if (this.offsetOption === \"1\") {\n for (var i = 0; i < this.offsets.length; i++) {\n if (positions[i] !== null && positions[i] !== undefined) {\n positions[i] += this.offsets[i] / 100;\n }\n }\n } else if (this.offsetOption === \"2\") {\n for (var i = 0; i < this.offsets.length; i++) {\n if (positions[i] !== null && positions[i] !== undefined) {\n positions[i] += this.offsets[i] / 100;\n }\n }\n }\n }\n if (this.pGrup) {\n if (this.pGrup.plateZOffset !== undefined && this.pGrup.plateZOffset !== null) {\n var normal = this.getNormal();\n var offset = gs_bim_air_1.Longan.Vector.multiply(normal, this.pGrup.plateZOffset / 100);\n var p0 = new Float32Array([positions[0], positions[1], positions[2]]);\n var p1 = new Float32Array([positions[3], positions[4], positions[5]]);\n var p2 = new Float32Array([positions[6], positions[7], positions[8]]);\n var p3 = null;\n if (positions.length > 9) {\n p3 = new Float32Array([positions[9], positions[10], positions[11]]);\n }\n p0 = gs_bim_air_1.Longan.Point.add(p0, offset);\n p1 = gs_bim_air_1.Longan.Point.add(p1, offset);\n p2 = gs_bim_air_1.Longan.Point.add(p2, offset);\n if (p3) {\n p3 = gs_bim_air_1.Longan.Point.add(p3, offset);\n }\n positions = new Array();\n positions.push(p0[0]);\n positions.push(p0[1]);\n positions.push(p0[2]);\n positions.push(p1[0]);\n positions.push(p1[1]);\n positions.push(p1[2]);\n positions.push(p2[0]);\n positions.push(p2[1]);\n positions.push(p2[2]);\n if (p3) {\n positions.push(p3[0]);\n positions.push(p3[1]);\n positions.push(p3[2]);\n }\n }\n }\n positions = this.processByCoeff(positions);\n return positions;\n };\n PlateObject.prototype.getPositionsNotOffset = function () {\n var positions = new Array();\n for (var i = 0; i < this.joints.length; i++) {\n positions.push(this.joints[i].position[0]);\n positions.push(this.joints[i].position[1]);\n positions.push(this.joints[i].position[2]);\n }\n return positions;\n };\n PlateObject.prototype.processByCoeff = function (positions) {\n var p0 = new Float32Array([positions[0], positions[1], positions[2]]);\n var p1 = new Float32Array([positions[3], positions[4], positions[5]]);\n var p2 = new Float32Array([positions[6], positions[7], positions[8]]);\n var p3 = null;\n if (positions.length > 9) {\n p3 = new Float32Array([positions[9], positions[10], positions[11]]);\n }\n var center = new Float32Array([(p0[0] + p1[0] + p2[0]) / 3, (p0[1] + p1[1] + p2[1]) / 3, (p0[2] + p1[2] + p2[2]) / 3]);\n if (p3) {\n center = new Float32Array([(p0[0] + p1[0] + p2[0] + p3[0]) / 4, (p0[1] + p1[1] + p2[1] + p3[1]) / 4, (p0[2] + p1[2] + p2[2] + p3[2]) / 4]);\n }\n p0 = this.getFiniteElementCoeffPoint(p0, center);\n p1 = this.getFiniteElementCoeffPoint(p1, center);\n p2 = this.getFiniteElementCoeffPoint(p2, center);\n var result = new Array();\n result.push(p0[0]);\n result.push(p0[1]);\n result.push(p0[2]);\n result.push(p1[0]);\n result.push(p1[1]);\n result.push(p1[2]);\n result.push(p2[0]);\n result.push(p2[1]);\n result.push(p2[2]);\n if (p3) {\n p3 = this.getFiniteElementCoeffPoint(p3, center);\n result.push(p3[0]);\n result.push(p3[1]);\n result.push(p3[2]);\n }\n return result;\n };\n PlateObject.prototype.getFiniteElementCoeffPoint = function (point, center) {\n var v1 = gs_bim_air_1.Longan.Point.subtract(point, center);\n var m1 = gs_bim_air_1.Longan.Vector.module(v1);\n var result = gs_bim_air_1.Longan.Point.add(center, gs_bim_air_1.Longan.Vector.multiply(gs_bim_air_1.Longan.Vector.normalizeVector(v1), m1 * this.finiteElementCoeff));\n return result;\n };\n PlateObject.prototype.render = function () {\n this.clearSvg();\n this.drawSvg();\n if (this.joints && this.joints.length > 0) {\n if (typeof this.joints[0] === \"string\") {\n return;\n }\n }\n if (this.joints.length > 0) {\n var positions = this.getPositions();\n this.points = tslib_1.__spreadArray([], tslib_1.__read(positions), false);\n this.points.push(positions[0]);\n this.points.push(positions[1]);\n this.points.push(positions[2]);\n _super.prototype.render.call(this);\n this.drawLine(positions);\n if (this.faceColor) {\n this.segment.color.faceColor = this.faceColor;\n } else {\n this.segment.color.faceColor = objectColors_1.ObjectColor.plateColor;\n }\n }\n };\n PlateObject.prototype.getNormal = function () {\n var positions = this.getPositionsBeforePGrupZOffset();\n var p0 = new Float32Array([positions[0], positions[1], positions[2]]);\n var p1 = new Float32Array([positions[3], positions[4], positions[5]]);\n var p2 = new Float32Array([positions[6], positions[7], positions[8]]);\n var joints = new Array();\n joints.push(p0);\n joints.push(p1);\n joints.push(p2);\n var p0p1 = gs_bim_air_1.Longan.Point.subtract(p1, p0);\n var p1p2 = gs_bim_air_1.Longan.Point.subtract(p2, p1);\n gs_bim_air_1.Longan.Vector.normalize(p0p1);\n gs_bim_air_1.Longan.Vector.normalize(p1p2);\n var normal = gs_bim_air_1.Longan.Vector.cross(p0p1, p1p2);\n gs_bim_air_1.Longan.Vector.normalize(normal);\n return normal;\n };\n PlateObject.checkPlateLegal = function (positions) {\n var isLegal = true;\n var p0 = new Float32Array([positions[0], positions[1], positions[2]]);\n var p1 = new Float32Array([positions[3], positions[4], positions[5]]);\n var p2 = new Float32Array([positions[6], positions[7], positions[8]]);\n isLegal = PlateObject.isPlate(p0, p1, p2);\n if (positions.length === 9) {} else if (positions.length === 12) {\n var p3 = new Float32Array([positions[9], positions[10], positions[11]]);\n if (!isLegal) {\n isLegal = PlateObject.isPlate(p0, p1, p3);\n } else {\n var axis1 = gs_bim_air_1.Longan.Point.subtract(p1, p0);\n gs_bim_air_1.Longan.Vector.normalize(axis1);\n var axis2 = gs_bim_air_1.Longan.Point.subtract(p2, p0);\n gs_bim_air_1.Longan.Vector.normalize(axis2);\n var normal = gs_bim_air_1.Longan.Vector.cross(axis1, axis2);\n gs_bim_air_1.Longan.Vector.normalize(normal);\n var projectPoint = gs_bim_air_1.Longan.GeometryOperators.projectPointToPlane(p3, p0, normal);\n var vector = gs_bim_air_1.Longan.Point.subtract(projectPoint, p3);\n if (gs_bim_air_1.Longan.GeometryOperators.sameVector(vector, new Float32Array([0, 0, 0]))) {} else {\n isLegal = false;\n }\n }\n } else {\n isLegal = false;\n }\n return isLegal;\n };\n PlateObject.isPlate = function (p0, p1, p2) {\n var axis1 = gs_bim_air_1.Longan.Point.subtract(p1, p0);\n gs_bim_air_1.Longan.Vector.normalize(axis1);\n var axis2 = gs_bim_air_1.Longan.Point.subtract(p2, p0);\n gs_bim_air_1.Longan.Vector.normalize(axis2);\n return !gs_bim_air_1.Longan.GeometryOperators.isParallel(axis1, axis2);\n };\n PlateObject.prototype.drawLine = function (positions) {\n var indices1 = [0, 1, 2];\n var indices2 = [2, 1, 0];\n if (positions.length === 9) {\n this.segment.insertTriangularShell(positions, indices1);\n this.segment.insertTriangularShell(positions, indices2);\n } else if (positions.length > 9) {\n var p0 = new Float32Array(positions.slice(0, 3));\n var p1 = new Float32Array(positions.slice(3, 6));\n var p2 = new Float32Array(positions.slice(6, 9));\n var p3 = new Float32Array(positions.slice(9, 12));\n var inter0 = gs_bim_air_1.Longan.GeometryOperators.intersectionLineSegmentLineSegment(p0, p1, p2, p3);\n var inter1 = gs_bim_air_1.Longan.GeometryOperators.intersectionLineSegmentLineSegment(p0, p2, p1, p3);\n if (inter1) {\n var points1 = positions.slice(0, 9);\n var points2 = positions.slice(6, 12).concat(positions.slice(0, 3));\n this.segment.insertTriangularShell(points1, indices1);\n this.segment.insertTriangularShell(points2, indices1);\n this.segment.insertTriangularShell(points1, indices2);\n this.segment.insertTriangularShell(points2, indices2);\n } else if (inter0) {\n var points1 = positions.slice(0, 9);\n var points2 = positions.slice(0, 6).concat(positions.slice(9, 12));\n this.segment.insertTriangularShell(points1, indices1);\n this.segment.insertTriangularShell(points2, indices1);\n this.segment.insertTriangularShell(points1, indices2);\n this.segment.insertTriangularShell(points2, indices2);\n } else {\n var points1 = positions.slice(0, 9);\n var points2 = positions.slice(3, 12);\n this.segment.insertTriangularShell(points1, indices1);\n this.segment.insertTriangularShell(points2, indices1);\n this.segment.insertTriangularShell(points1, indices2);\n this.segment.insertTriangularShell(points2, indices2);\n }\n }\n };\n PlateObject.prototype.drawSvg = function () {\n if (!this.checkBusinessStateIsActive()) {\n return;\n }\n var iro = process_1.Process.activeProcess.activeViewer.findInstanceObject(this);\n if (iro && !iro.visible) {\n this.clearSvg();\n return;\n }\n if (this._isDrawAxis) {\n this.drawAxis();\n }\n };\n PlateObject.prototype.clearSvg = function () {\n if (this.labelText) {\n this.labelText.clear();\n this.labelText = null;\n this.labelRect.remove();\n this.labelRect = null;\n }\n if (this.axisSeg) {\n this.axisSeg.clearAll();\n this.axisSeg = null;\n }\n _super.prototype.clearSvg.call(this);\n };\n PlateObject.prototype.drawLabel = function (position) {\n var _this = this;\n var viewer = process_1.Process.activeProcess.activeViewer;\n var x = position[0];\n var y = position[1];\n if (this.labelRect && this.labelText) {\n this.labelRect.move(x, y - 20);\n this.labelText.move(x + 5, y - 18);\n } else {\n var draw = gs_ceec_design_2.SvgDraw.getInstance(viewer.container.id).draw;\n this._group = draw.group();\n var name_1 = this.name;\n var thickness_1 = this.getThickness() ? this.getThickness().toString() : \"0\";\n var textWidth = Math.max(3 + name_1.length, 7 + thickness_1.length) * gs_ceec_design_4.DesignBaseObject.fontSize;\n var rect = draw.rect(textWidth, 12 * 8).radius(2).fill(\"#FFFFE1\").move(x, y - 20).attr(\"style\", \"pointer-events: none}\");\n var text = draw.text(function (add) {\n add.tspan(\"Name:\".concat(name_1)).newLine();\n add.tspan(\"Thickness(cm):\".concat(thickness_1)).newLine();\n add.tspan(\"JointA:\".concat(_this.joints[0].name)).newLine();\n add.tspan(\"JointB:\".concat(_this.joints[1].name)).newLine();\n add.tspan(\"JointC:\".concat(_this.joints[2].name)).newLine();\n if (_this.joints.length > 3) {\n add.tspan(\"JointD:\".concat(_this.joints[3].name)).newLine();\n }\n }).font({\n fill: \"#000\"\n }).attr(\"font-size\", 12).move(x + 5, y - 18);\n this._group.add(rect).add(text);\n this.labelRect = rect;\n this.labelText = text;\n }\n };\n PlateObject.prototype.drawAxis = function () {\n if (!this.checkBusinessStateIsActive()) {\n return;\n }\n var viewer = process_1.Process.activeProcess.activeViewer;\n var iro = viewer.findInstanceObject(this);\n if (iro && !iro.visible) {\n this.isDrawAxis = false;\n return;\n }\n var unitLengtha = viewer.unitLength / 4;\n var scaleMatrix = gs_bim_air_1.Longan.Matrix4.scaleMatrix(unitLengtha, unitLengtha, unitLengtha);\n var center = this.getCenter();\n var translateMatrix = gs_bim_air_1.Longan.Matrix4.translateMatrix(center[0], center[1], center[2]);\n if (this.axisSeg) {} else {\n var viewer_1 = process_1.Process.activeProcess.activeViewer;\n var unitLengtha_1 = viewer_1.unitLength / 2;\n console.log(\"unitLengtha\", unitLengtha_1);\n var axis = this.getLocalAxis();\n var origin_1 = new Float32Array([0, 0, 0]);\n var xPoint = gs_bim_air_1.Longan.Point.add(origin_1, axis.xAxis);\n var yPoint = gs_bim_air_1.Longan.Point.add(origin_1, axis.yAxis);\n var zPoint = gs_bim_air_1.Longan.Point.add(origin_1, axis.zAxis);\n var matrix_1 = gs_bim_air_1.Longan.Matrix4.identity();\n if (this.segment.attributes.indexOf(gs_bim_air_1.Longan.LonganCore.ObjectType.TYPE_ModellingMatrix)) {\n if (this.segment.modellingMatrix.matrix) {\n matrix_1 = new Float32Array(this.segment.modellingMatrix.matrix);\n }\n }\n var axisParent = viewer_1.sceneSegment.subsegment(\"axisPar\" + this.id);\n axisParent.modellingMatrix.set(matrix_1);\n this.axisSeg = axisParent.subsegment(\"axis\");\n this.axisSeg.renderingOptions.depthRange = [0, 0.1];\n var xSeg = this.axisSeg.subsegment(\"x\");\n var ySeg = this.axisSeg.subsegment(\"y\");\n var zSeg = this.axisSeg.subsegment(\"z\");\n xSeg.color.setLine([0, 0, 255]);\n xSeg.color.setFace([0, 0, 255]);\n ySeg.color.setLine([0, 255, 0]);\n ySeg.color.setFace([0, 255, 0]);\n zSeg.color.setLine([255, 0, 0]);\n zSeg.color.setFace([255, 0, 0]);\n var x = xSeg.insertLine(origin_1, xPoint);\n var y = ySeg.insertLine(origin_1, yPoint);\n var z = zSeg.insertLine(origin_1, zPoint);\n xSeg.insertParametricGeometry(\"scon\", tslib_1.__spreadArray(tslib_1.__spreadArray(tslib_1.__spreadArray([], tslib_1.__read(gs_bim_air_1.Longan.Point.add(xPoint, gs_bim_air_1.Longan.Vector.multiply(axis.xAxis, 0.5))), false), tslib_1.__read(gs_bim_air_1.Longan.Vector.multiply(axis.xAxis, -1)), false), [0.5, 0.2], false));\n ySeg.insertParametricGeometry(\"scon\", tslib_1.__spreadArray(tslib_1.__spreadArray(tslib_1.__spreadArray([], tslib_1.__read(gs_bim_air_1.Longan.Point.add(yPoint, gs_bim_air_1.Longan.Vector.multiply(axis.yAxis, 0.5))), false), tslib_1.__read(gs_bim_air_1.Longan.Vector.multiply(axis.yAxis, -1)), false), [0.5, 0.2], false));\n zSeg.insertParametricGeometry(\"scon\", tslib_1.__spreadArray(tslib_1.__spreadArray(tslib_1.__spreadArray([], tslib_1.__read(gs_bim_air_1.Longan.Point.add(zPoint, gs_bim_air_1.Longan.Vector.multiply(axis.zAxis, 0.5))), false), tslib_1.__read(gs_bim_air_1.Longan.Vector.multiply(axis.zAxis, -1)), false), [0.5, 0.2], false));\n }\n var matrix = gs_bim_air_1.Longan.Matrix4.identity();\n matrix = gs_bim_air_1.Longan.Matrix4.multiply(matrix, translateMatrix);\n matrix = gs_bim_air_1.Longan.Matrix4.multiply(matrix, scaleMatrix);\n this.axisSeg.modellingMatrix.set(matrix);\n };\n PlateObject.prototype.setReference = function (pm) {\n for (var i = 0; i < this.joints.length; i++) {\n var joint = this.joints[i];\n if (typeof joint === \"string\") {\n var resultJoint = pm.referenceList.get(joint);\n if (resultJoint) {\n this.joints[i] = resultJoint;\n }\n }\n }\n if (typeof this.pGrup === \"string\") {\n var pGrup = pm.referenceList.get(this.pGrup);\n if (pGrup) {\n this.pGrup = pGrup;\n }\n }\n this.setNeedUpdate();\n };\n PlateObject.prototype.jointReplace = function (replacingJoint, afterJoint, isInSamePlate) {\n if (!isInSamePlate) {\n var joints = this.joints;\n for (var j = 0; j < joints.length; j++) {\n if (joints[j].id === replacingJoint.id) {\n joints[j] = afterJoint;\n break;\n }\n }\n } else {\n var joints = this.joints;\n var deleteIndex = -1;\n for (var j = 0; j < joints.length; j++) {\n if (joints[j].id === replacingJoint.id) {\n deleteIndex = j;\n break;\n }\n }\n for (var j = deleteIndex; j < joints.length - 1; j++) {\n joints[j] = joints[j + 1];\n }\n }\n };\n PlateObject.prototype.setColor = function (color, transparency) {\n this.segment.color.setFace(color.concat([transparency]));\n };\n PlateObject.prototype.getAspectRatio = function () {\n var aspectRatio = \"\";\n var viewer = process_1.Process.activeProcess.activeViewer;\n var positions = this.getPositions();\n if (positions) {\n if (positions.length === 9) {\n var p0 = new Float32Array([positions[0], positions[1], positions[2]]);\n var p1 = new Float32Array([positions[3], positions[4], positions[5]]);\n var p2 = new Float32Array([positions[6], positions[7], positions[8]]);\n var p0p1 = gs_bim_air_1.Longan.Point.subtract(p1, p0);\n var p0p2 = gs_bim_air_1.Longan.Point.subtract(p2, p0);\n var p1p2 = gs_bim_air_1.Longan.Point.subtract(p2, p1);\n var a = gs_bim_air_1.Longan.Vector.module(p0p1);\n var b = gs_bim_air_1.Longan.Vector.module(p0p2);\n var c = gs_bim_air_1.Longan.Vector.module(p1p2);\n var maxNum = Math.max(a, b, c);\n var nor1 = gs_bim_air_1.Longan.Vector.normalizeVector(p0p1);\n var nor2 = gs_bim_air_1.Longan.Vector.normalizeVector(p0p2);\n var area = 0.5 * a * b * Math.sin(gs_bim_air_1.Longan.Vector.angle(nor1, nor2));\n var d1 = maxNum * (a + b + c);\n var d2 = 4 * Math.sqrt(3) * area;\n aspectRatio = d1 / d2;\n } else {\n var p0 = new Float32Array([positions[0], positions[1], positions[2]]);\n var p1 = new Float32Array([positions[3], positions[4], positions[5]]);\n var p2 = new Float32Array([positions[6], positions[7], positions[8]]);\n var p3 = new Float32Array([positions[9], positions[10], positions[11]]);\n var p0p1 = gs_bim_air_1.Longan.Point.subtract(p1, p0);\n var p0p3 = gs_bim_air_1.Longan.Point.subtract(p3, p0);\n var p2p1 = gs_bim_air_1.Longan.Point.subtract(p1, p2);\n var p2p3 = gs_bim_air_1.Longan.Point.subtract(p3, p2);\n var b0 = gs_bim_air_1.Longan.Vector.module(p0p1);\n var b1 = gs_bim_air_1.Longan.Vector.module(p2p1);\n var b2 = gs_bim_air_1.Longan.Vector.module(p2p3);\n var b3 = gs_bim_air_1.Longan.Vector.module(p0p3);\n gs_bim_air_1.Longan.Vector.normalize(p0p1);\n gs_bim_air_1.Longan.Vector.normalize(p0p3);\n gs_bim_air_1.Longan.Vector.normalize(p2p1);\n gs_bim_air_1.Longan.Vector.normalize(p2p3);\n var d1 = Math.max(b0, b1, b2, b3) * (b0 + b1 + b2 + b3);\n var d2 = 4 * (0.5 * b0 * b3 * Math.sin(gs_bim_air_1.Longan.Vector.angle(p0p1, p0p3)) + 0.5 * b1 * b2 * Math.sin(gs_bim_air_1.Longan.Vector.angle(p2p1, p2p3)));\n aspectRatio = d1 / d2;\n }\n } else {\n return \"\";\n }\n return aspectRatio;\n };\n PlateObject.prototype.getCenter = function () {\n var points = this.getPositions();\n var xA = 0;\n var yA = 0;\n var zA = 0;\n for (var i = 0; i < points.length / 3; i++) {\n xA += points[3 * i + 0];\n yA += points[3 * i + 1];\n zA += points[3 * i + 2];\n }\n xA /= points.length / 3;\n yA /= points.length / 3;\n zA /= points.length / 3;\n return new Float32Array([xA, yA, zA]);\n };\n PlateObject.prototype.getLocalAxis = function () {\n var points = this.getPositions();\n var p0 = new Float32Array([points[0], points[1], points[2]]);\n var p1 = new Float32Array([points[3], points[4], points[5]]);\n var p2 = new Float32Array([points[6], points[7], points[8]]);\n var xAxis = gs_bim_air_1.Longan.Point.subtract(p1, p0);\n gs_bim_air_1.Longan.Vector.normalize(xAxis);\n var yAxis = gs_bim_air_1.Longan.Point.subtract(p2, p1);\n gs_bim_air_1.Longan.Vector.normalize(yAxis);\n var zAxis = gs_bim_air_1.Longan.Vector.cross(xAxis, yAxis);\n gs_bim_air_1.Longan.Vector.normalize(zAxis);\n yAxis = gs_bim_air_1.Longan.Vector.cross(zAxis, xAxis);\n gs_bim_air_1.Longan.Vector.normalize(yAxis);\n return {\n xAxis: xAxis,\n yAxis: yAxis,\n zAxis: zAxis\n };\n };\n return PlateObject;\n }(gs_ceec_design_1.PolylineObject);\n exports.PlateObject = PlateObject;\n var PlateAdditionalProperty = function () {\n function PlateAdditionalProperty() {\n this.useDefaultProperty = false;\n this.rpsk = null;\n this.offsetOption = null;\n this.jointA = [0, 0, 0];\n this.jointB = [0, 0, 0];\n this.jointC = [0, 0, 0];\n this.jointD = [0, 0, 0];\n this.overriedStreeReport = false;\n this.overriedPlateOffset = false;\n this.overriedJointA = false;\n this.overriedJointB = false;\n this.overriedJointC = false;\n this.overriedJointD = false;\n }\n PlateAdditionalProperty.getInstance = function () {\n if (this._instance == null) {\n this._instance = new PlateAdditionalProperty();\n }\n return this._instance;\n };\n return PlateAdditionalProperty;\n }();\n exports.PlateAdditionalProperty = PlateAdditionalProperty;\n}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9wYWNrYWdlcy9jYWVEZXNpZ24vc3JjL2dzRGV2Rngvb2JqZWN0cy9jYWVPYmplY3RzL3BsYXRlT2JqZWN0LnRzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vW25hbWVdLy4vcGFja2FnZXMvY2FlRGVzaWduL3NyYy9nc0RldkZ4L29iamVjdHMvY2FlT2JqZWN0cy9wbGF0ZU9iamVjdC50cz9kNGE1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvbmdhbiB9IGZyb20gXCJncy1iaW0tYWlyXCI7XHJcbmltcG9ydCB7IEpvaW50T2JqZWN0IH0gZnJvbSBcIi4vam9pbnRPYmplY3RcIjtcclxuaW1wb3J0IHsgUEdydXBPYmplY3QgfSBmcm9tIFwiLi9wR3J1cE9iamVjdFwiO1xyXG5pbXBvcnQgeyBJUmVmZXJlbmNlZE9iamVjdCB9IGZyb20gXCIuLi9pbnRlcmZhY2VzXCI7XHJcbmltcG9ydCB7IFBlcnNpc3RlbmNlTWFuYWdlciB9IGZyb20gXCIuLi8uLi9tYW5hZ2Vycy9wZXJzaXN0ZW5jZU1hbmFnZXJcIjtcclxuaW1wb3J0IHsgUG9seWxpbmVPYmplY3QgfSBmcm9tIFwiZ3MtY2VlYy1kZXNpZ25cIjtcclxuaW1wb3J0IHsgQ2FyZFBsYXRlIH0gZnJvbSBcIi4uLy4uLy4uL2NhZUNhcmRFZGl0b3IvY2FlQ2FyZE9iamVjdHMvY2FyZFBsYXRlXCI7XHJcbmltcG9ydCB7IENhcmRQbGF0ZU9mZnNldHMgfSBmcm9tIFwiLi4vLi4vLi4vY2FlQ2FyZEVkaXRvci9jYWVDYXJkT2JqZWN0cy9jYXJkUGxhdGVPZmZzZXRzXCI7XHJcbmltcG9ydCB7IFN2Z0RyYXcgfSBmcm9tIFwiZ3MtY2VlYy1kZXNpZ25cIjtcclxuaW1wb3J0IHsgSW5zdGFuY2VEZXNpZ25CYXNlT2JqZWN0IH0gZnJvbSBcImdzLWNlZWMtZGVzaWduXCI7XHJcbmltcG9ydCB7IE9iamVjdENvbG9yIH0gZnJvbSBcIi4vb2JqZWN0Q29sb3JzXCI7XHJcbmltcG9ydCB7IERlc2lnbkJhc2VPYmplY3QgfSBmcm9tIFwiZ3MtY2VlYy1kZXNpZ25cIjtcclxuaW1wb3J0IHsgQ2FlTnVtYmVyLCBDYWVOdW1iZXJBcnJheSB9IGZyb20gXCIuLi8uLi8uLi91dGlsaXR5L3V0aWxpdHlcIjtcclxuaW1wb3J0IHsgUHJvY2VzcyB9IGZyb20gXCIuLi8uLi8uLi9nc0RldkZ4L3Byb2Nlc3NcIjtcclxuaW1wb3J0IHsgVmlld2VyIH0gZnJvbSBcImdzLWNlZWMtZGVzaWduXCI7XHJcbmltcG9ydCB7IENvbG9yRGl2Q29tcG9uZW50R3JvdXBPYmplY3QgfSBmcm9tIFwiLi4vcHJldHJlYXRtZW50T2JqZWN0cy9jb2xvckRpdkNvbXBvbmVudEdyb3VwT2JqZWN0XCI7XHJcblxyXG5cclxuZXhwb3J0IGVudW0gVmlld09wdGlvbiB7XHJcbiAgTGluZSxcclxuICBCb2R5LFxyXG59XHJcblxyXG4vL+adv+WvueixoVxyXG5leHBvcnQgY2xhc3MgUGxhdGVPYmplY3QgZXh0ZW5kcyBQb2x5bGluZU9iamVjdCBpbXBsZW1lbnRzIElSZWZlcmVuY2VkT2JqZWN0IHtcclxuICB0eXBlTmFtZSA9IFwiUGxhdGVPYmplY3RcIjtcclxuICAvLyDlvJXnlKjnmoTnqbrpl7TngrlJZOaVsOe7hCwzLzTkuKrngrnnmoTmlbDnu4QuXHJcbiAgX2pvaW50czogSm9pbnRPYmplY3RbXSA9IG5ldyBBcnJheTxKb2ludE9iamVjdD4oKTtcclxuICAvLyBfam9pbnRBOiBKb2ludE9iamVjdCA9IG51bGw7XHJcbiAgLy8gX2pvaW50QjogSm9pbnRPYmplY3QgPSBudWxsO1xyXG4gIC8vIF9qb2ludEM6IEpvaW50T2JqZWN0ID0gbnVsbDtcclxuICAvLyBfam9pbnREOiBKb2ludE9iamVjdCA9IG51bGw7XHJcbiAgLy8g5byV55So55qE5oiq6Z2i57uEXHJcbiAgX3BHcnVwOiBQR3J1cE9iamVjdCA9IG51bGw7XHJcbiAgLy8g5Y6a5bqmOmNtXHJcbiAgLy8gX3RoaWNrbmVzczogbnVtYmVyID0gMDtcclxuICBfcGxhdGVUaGlja25lc3M6IG51bWJlciA9IG51bGw7XHJcbiAgLy8g5YGP5b+D57G75Z6LXHJcbiAgLy9cIlwiOuS4jeWtmOWcqOWBj+W/g+WAvFxyXG4gIC8vXCIxXCI65YGP5b+D6YeP55qE5Zyo5oC75L2T5Z2Q5qCH57O75Lit5a6a5LmJXHJcbiAgLy9cIjJcIjrlgY/lv4Pph4/lnKjlsYDpg6jlnZDmoIfns7vkuK3lrprkuYlcclxuICBfb2Zmc2V0T3B0aW9uOiBzdHJpbmcgPSBudWxsO1xyXG4gIC8vIOadv+WBj+W/g+mHjy5cclxuICAvLyDmnb/nmoQzLzTkuKrngrnnmoTlgY/np7vlgLwuOS8xMuS4qmZsb2F05YC8LuWAvOihqOekuuWvueW6lOWdkOagh+i9tOS4iueahOi3neemu1xyXG4gIC8vIF9hT2Zmc2V0OiBudW1iZXJbXSA9IG5ldyBBcnJheTxudW1iZXI+KCk7XHJcbiAgLy8gX2JPZmZzZXQ6IG51bWJlcltdID0gbmV3IEFycmF5PG51bWJlcj4oKTtcclxuICAvLyBfY09mZnNldDogbnVtYmVyW10gPSBuZXcgQXJyYXk8bnVtYmVyPigpO1xyXG4gIC8vIF9kT2Zmc2V0OiBudW1iZXJbXSA9IG5ldyBBcnJheTxudW1iZXI+KCk7XHJcbiAgLy8gY21cclxuICBfb2Zmc2V0czogbnVtYmVyW10gPSBuZXcgQXJyYXk8bnVtYmVyPigpO1xyXG5cclxuICAvKipcclxuICAgKiDorqHnrpfpgInpobnvvJozMS0zMlxyXG4gICAqL1xyXG4gIHJwc2s6IHN0cmluZyA9IFwiXCI7XHJcbiAgLyoqXHJcbiAgICog5by55oCn5qih6YeP77yaNDgtNTRcclxuICAgKiDljZXkvY3vvJoxMDAwa04vY21eMlxyXG4gICAqL1xyXG4gIG1hdGVyaWFsRGF0YV9FOiBudW1iZXIgPSBudWxsO1xyXG4gIC8qKlxyXG4gICAqIOaziuadvuavlO+8mjU1LTU5XHJcbiAgICovXHJcbiAgcG9pc3NvblJhdGlvdTogbnVtYmVyID0gbnVsbDtcclxuICAvKipcclxuICAgKiDlsYjmnI3lupTlipvvvJo2MC02NFxyXG4gICAqIOWNleS9je+8mmtOL2NtXjJcclxuICAgKi9cclxuICB5aWVsZFN0cmVzczogbnVtYmVyID0gbnVsbDtcclxuICAvKipcclxuICAgKiDmnZDmlpnlr4bluqbvvJo3MC03NFxyXG4gICAqIOWNleS9je+8mnQvbV4zXHJcbiAgICovXHJcbiAgd2VpZ2h0RGVuc2l0eTogbnVtYmVyID0gbnVsbDtcclxuICAvKipcclxuICAgKiDms6jph4rvvJo3NS04MFxyXG4gICAqL1xyXG4gIHJlbWFya3M6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gIHZpZXdPcHRpb246IFZpZXdPcHRpb24gPSBWaWV3T3B0aW9uLkJvZHk7XHJcblxyXG4gIHByaXZhdGUgX2FkZGl0aW9uYWxQcm9wZXJ0eTogUGxhdGVBZGRpdGlvbmFsUHJvcGVydHkgPSBudWxsO1xyXG4gIC8vIOadv+minOiJsizkvJjlhYjnuqfpq5jkuo5PYmplY3RDb2xvcueahHBsYXRlQ29sb3IuXHJcbiAgZmFjZUNvbG9yID0gbnVsbDtcclxuXHJcbiAgX2lzRHJhd0xhYmVsID0gZmFsc2U7XHJcblxyXG4gIGF4aXNTZWc6IExvbmdhbi5TZWdtZW50O1xyXG4gIF9pc0RyYXdBeGlzID0gZmFsc2U7XHJcblxyXG4gIGxhYmVsUmVjdDtcclxuICBsYWJlbFRleHQ7XHJcblxyXG4gIC8vIOaciemZkOWFg+e9keagvOavlOS+iy5cclxuICBmaW5pdGVFbGVtZW50Q29lZmYgPSAxLjA7XHJcblxyXG4gIGdldCBhZGRpdGlvbmFsUHJvcGVydHkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYWRkaXRpb25hbFByb3BlcnR5O1xyXG4gIH1cclxuXHJcbiAgc2V0IGFkZGl0aW9uYWxQcm9wZXJ0eSh2YWx1ZSkge1xyXG4gICAgdGhpcy5fYWRkaXRpb25hbFByb3BlcnR5ID0gdmFsdWU7XHJcbiAgICB0aGlzLmFkZGl0aW9uYWxQcm9wZXJ0eUFjdGl2ZSgpO1xyXG4gIH1cclxuXHJcbiAgYWRkaXRpb25hbFByb3BlcnR5QWN0aXZlKCkge1xyXG4gICAgbGV0IHByb3BlcnR5ID0gdGhpcy5hZGRpdGlvbmFsUHJvcGVydHk7XHJcbiAgICBpZiAocHJvcGVydHkpIHtcclxuICAgICAgLy9cclxuICAgICAgaWYgKHByb3BlcnR5LnJwc2sgJiYgcHJvcGVydHkub3ZlcnJpZWRTdHJlZVJlcG9ydCkge1xyXG4gICAgICAgIHRoaXMucnBzayA9IExvbmdhbi5kZWVwQ2xvbmUocHJvcGVydHkucnBzayk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHByb3BlcnR5Lm9mZnNldE9wdGlvbiAhPT0gbnVsbCAmJiBwcm9wZXJ0eS5vdmVycmllZFBsYXRlT2Zmc2V0KSB7XHJcbiAgICAgICAgdGhpcy5vZmZzZXRPcHRpb24gPSBMb25nYW4uZGVlcENsb25lKHByb3BlcnR5Lm9mZnNldE9wdGlvbik7XHJcbiAgICAgIH1cclxuICAgICAgaWYocHJvcGVydHkub2Zmc2V0T3B0aW9uICYmIHByb3BlcnR5Lm9mZnNldE9wdGlvbiAhPT0gXCIwXCIpIHtcclxuICAgICAgICB0aGlzLm9mZnNldHMgPSBbMCwwLDAsMCwwLDAsMCwwLDBdO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChwcm9wZXJ0eS5vZmZzZXRPcHRpb24gJiYgcHJvcGVydHkub2Zmc2V0T3B0aW9uICE9PSBcIjBcIiAmJiBwcm9wZXJ0eS5vdmVycmllZEpvaW50QSkge1xyXG4gICAgICAgIHRoaXMub2Zmc2V0c1swXSA9IHByb3BlcnR5LmpvaW50QVswXTtcclxuICAgICAgICB0aGlzLm9mZnNldHNbMV0gPSBwcm9wZXJ0eS5qb2ludEFbMV07XHJcbiAgICAgICAgdGhpcy5vZmZzZXRzWzJdID0gcHJvcGVydHkuam9pbnRBWzJdO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChwcm9wZXJ0eS5vZmZzZXRPcHRpb24gJiYgcHJvcGVydHkub2Zmc2V0T3B0aW9uICE9PSBcIjBcIiAmJiBwcm9wZXJ0eS5vdmVycmllZEpvaW50Qikge1xyXG4gICAgICAgIHRoaXMub2Zmc2V0c1szXSA9IHByb3BlcnR5LmpvaW50QlswXTtcclxuICAgICAgICB0aGlzLm9mZnNldHNbNF0gPSBwcm9wZXJ0eS5qb2ludEJbMV07XHJcbiAgICAgICAgdGhpcy5vZmZzZXRzWzVdID0gcHJvcGVydHkuam9pbnRCWzJdO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChwcm9wZXJ0eS5vZmZzZXRPcHRpb24gJiYgcHJvcGVydHkub2Zmc2V0T3B0aW9uICE9PSBcIjBcIiAmJiBwcm9wZXJ0eS5vdmVycmllZEpvaW50Qykge1xyXG4gICAgICAgIHRoaXMub2Zmc2V0c1s2XSA9IHByb3BlcnR5LmpvaW50Q1swXTtcclxuICAgICAgICB0aGlzLm9mZnNldHNbN10gPSBwcm9wZXJ0eS5qb2ludENbMV07XHJcbiAgICAgICAgdGhpcy5vZmZzZXRzWzhdID0gcHJvcGVydHkuam9pbnRDWzJdO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChwcm9wZXJ0eS5vZmZzZXRPcHRpb24gJiYgcHJvcGVydHkub2Zmc2V0T3B0aW9uICE9PSBcIjBcIiAmJiBwcm9wZXJ0eS5vdmVycmllZEpvaW50RCAmJiB0aGlzLmpvaW50cy5sZW5ndGggPiAzKSB7XHJcbiAgICAgICAgdGhpcy5vZmZzZXRzWzldID0gcHJvcGVydHkuam9pbnREWzBdO1xyXG4gICAgICAgIHRoaXMub2Zmc2V0c1sxMF0gPSBwcm9wZXJ0eS5qb2ludERbMV07XHJcbiAgICAgICAgdGhpcy5vZmZzZXRzWzExXSA9IHByb3BlcnR5LmpvaW50RFsyXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBqb2ludHMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fam9pbnRzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBqb2ludHModmFsdWU6IEpvaW50T2JqZWN0W10pIHtcclxuICAgIHRoaXMuX2pvaW50cyA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBwR3J1cCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9wR3J1cDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgcEdydXAodmFsdWU6IFBHcnVwT2JqZWN0KSB7XHJcbiAgICBpZiAodGhpcy5fcEdydXAgaW5zdGFuY2VvZiBQR3J1cE9iamVjdCkge1xyXG4gICAgICBsZXQgbGlzdCA9IChQcm9jZXNzLmFjdGl2ZVByb2Nlc3MgYXMgUHJvY2VzcykucGdydXBNYXBSZWxlYXRpdmVQbGF0ZXMuZ2V0KFxyXG4gICAgICAgIHRoaXMuX3BHcnVwXHJcbiAgICAgICk7XHJcbiAgICAgIGxpc3QucmVtb3ZlKHRoaXMpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fcEdydXAgPSB2YWx1ZTtcclxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFBHcnVwT2JqZWN0KSB7XHJcbiAgICAgIGxldCBsaXN0ID0gKFByb2Nlc3MuYWN0aXZlUHJvY2VzcyBhcyBQcm9jZXNzKS5wZ3J1cE1hcFJlbGVhdGl2ZVBsYXRlcy5nZXQoXHJcbiAgICAgICAgdmFsdWVcclxuICAgICAgKTtcclxuICAgICAgaWYgKCFsaXN0KSB7XHJcbiAgICAgICAgbGlzdCA9IG5ldyBMb25nYW4uTGlzdDxQbGF0ZU9iamVjdD4oKTtcclxuICAgICAgICAoUHJvY2Vzcy5hY3RpdmVQcm9jZXNzIGFzIFByb2Nlc3MpLnBncnVwTWFwUmVsZWF0aXZlUGxhdGVzLnNldChcclxuICAgICAgICAgIHZhbHVlLFxyXG4gICAgICAgICAgbGlzdFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgbGlzdC5hZGQodGhpcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHBsYXRlVGhpY2tuZXNzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BsYXRlVGhpY2tuZXNzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBwbGF0ZVRoaWNrbmVzcyh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl9wbGF0ZVRoaWNrbmVzcyA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBvZmZzZXRPcHRpb24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fb2Zmc2V0T3B0aW9uO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBvZmZzZXRPcHRpb24odmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fb2Zmc2V0T3B0aW9uID0gdmFsdWU7XHJcbiAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgIGlmKHRoaXMub2Zmc2V0cykge1xyXG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCB0aGlzLm9mZnNldHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIHRoaXMub2Zmc2V0c1tpXSA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IG9mZnNldHMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fb2Zmc2V0cztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgb2Zmc2V0cyh2YWx1ZTogbnVtYmVyW10pIHtcclxuICAgIHRoaXMuX29mZnNldHMgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldCBpc0RyYXdMYWJlbCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9pc0RyYXdMYWJlbDtcclxuICB9XHJcblxyXG4gIHNldCBpc0RyYXdMYWJlbChpc0RyYXdMYWJlbCkge1xyXG4gICAgdGhpcy5faXNEcmF3TGFiZWwgPSBpc0RyYXdMYWJlbDtcclxuICAgIGlmIChpc0RyYXdMYWJlbCkge1xyXG4gICAgICAvLyB0aGlzLmRyYXdMYWJlbCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gdGhpcy5sYWJlbFJlY3QgJiYgdGhpcy5sYWJlbFJlY3QuY2xlYXIoKTtcclxuICAgICAgaWYgKHRoaXMubGFiZWxSZWN0KSB7XHJcbiAgICAgICAgdGhpcy5sYWJlbFJlY3QucmVtb3ZlKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5sYWJlbFJlY3QgPSBudWxsO1xyXG4gICAgICB0aGlzLmxhYmVsVGV4dCAmJiB0aGlzLmxhYmVsVGV4dC5jbGVhcigpO1xyXG4gICAgICB0aGlzLmxhYmVsVGV4dCA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgaXNEcmF3QXhpcygpIHtcclxuICAgIHJldHVybiB0aGlzLl9pc0RyYXdBeGlzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGlzRHJhd0F4aXMoaXNEcmF3QXhpcykge1xyXG4gICAgdGhpcy5faXNEcmF3QXhpcyA9IGlzRHJhd0F4aXM7XHJcbiAgICBpZiAoaXNEcmF3QXhpcykge1xyXG4gICAgICB0aGlzLmRyYXdBeGlzKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5heGlzU2VnKSB7XHJcbiAgICAgICAgdGhpcy5heGlzU2VnLmNsZWFyQWxsKCk7XHJcbiAgICAgICAgdGhpcy5heGlzU2VnID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGNoZWNrTmFtZWxlZ2FsKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHJlZyA9IC9eW0EtWjAtOV0qJC87XHJcbiAgICBpZiAoIXJlZy50ZXN0KG5hbWUpIHx8IG5hbWUudHJpbUVuZCgpLmxlbmd0aCA+IDQpIHtcclxuICAgICAgY29uc29sZS5sb2coXCLmnb/lkI3np7DkuI3nrKblkIjop4TojINcIik7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0VGhpY2tuZXNzKCkge1xyXG4gICAgaWYgKHRoaXMucEdydXApIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMucEdydXAgaW5zdGFuY2VvZiBQR3J1cE9iamVjdCAmJlxyXG4gICAgICAgIHRoaXMucEdydXAuY2hlY2tCdXNpbmVzc1N0YXRlSXNBY3RpdmUoKVxyXG4gICAgICApIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wR3J1cC50aGlja25lc3M7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gbmFtZemVv+W6pjo05Liq5a2X56ymXHJcbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy5uYW1lID0gbmFtZTtcclxuICAgIHRoaXMub2Zmc2V0T3B0aW9uID0gXCJcIjtcclxuICAgIHRoaXMuaW5zdGFuY2VUeXBlcy5hZGQoXCJtYWluXCIsIEluc3RhbmNlRGVzaWduQmFzZU9iamVjdC5wcm90b3R5cGUpO1xyXG4gICAgdGhpcy5pc0RyYXdTdmcgPSB0cnVlO1xyXG5cclxuICAgIGxldCBybyA9IFByb2Nlc3MuYWN0aXZlUHJvY2Vzcy5nZXRSZW5kZXJPYmplY3RCeVNlZ21lbnRLZXkoXHJcbiAgICAgIHRoaXMuc2VnbWVudC5rZXlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBzZXJpYWxpemUoKTogYW55IHtcclxuICAgIGxldCBvYmogPSBzdXBlci5zZXJpYWxpemUoKTtcclxuXHJcbiAgICBpZiAodGhpcy5qb2ludHMpIHtcclxuICAgICAgbGV0IGlkcyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5qb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZih0aGlzLmpvaW50c1tpXS50eXBlTmFtZSkge1xyXG4gICAgICAgICAgaWRzLnB1c2godGhpcy5qb2ludHNbaV0uaWQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZHMucHVzaCh0aGlzLmpvaW50c1tpXSBhcyBhbnkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBvYmouam9pbnRzID0gaWRzO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnBHcnVwKSB7XHJcbiAgICAgIG9iai5wR3J1cCA9IHRoaXMucEdydXAuaWQ7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMubm90TnVsbEFuZE5vdFVuZGVmaW5lZCh0aGlzLnBsYXRlVGhpY2tuZXNzKSkge1xyXG4gICAgICBvYmoucGxhdGVUaGlja25lc3MgPSB0aGlzLnBsYXRlVGhpY2tuZXNzO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm5vdE51bGxBbmROb3RVbmRlZmluZWQodGhpcy5vZmZzZXRPcHRpb24pKSB7XHJcbiAgICAgIG9iai5vZmZzZXRPcHRpb24gPSB0aGlzLm9mZnNldE9wdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5vZmZzZXRzKSB7XHJcbiAgICAgIG9iai5vZmZzZXRzID0gdGhpcy5vZmZzZXRzO1xyXG4gICAgfVxyXG4gICAgLy8vXHJcbiAgICBpZiAodGhpcy5ub3ROdWxsQW5kTm90VW5kZWZpbmVkKHRoaXMucnBzaykpIHtcclxuICAgICAgb2JqLnJwc2sgPSB0aGlzLnJwc2s7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5ub3ROdWxsQW5kTm90VW5kZWZpbmVkKHRoaXMubWF0ZXJpYWxEYXRhX0UpKSB7XHJcbiAgICAgIG9iai5tYXRlcmlhbERhdGFfRSA9IHRoaXMubWF0ZXJpYWxEYXRhX0U7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5ub3ROdWxsQW5kTm90VW5kZWZpbmVkKHRoaXMucG9pc3NvblJhdGlvdSkpIHtcclxuICAgICAgb2JqLnBvaXNzb25SYXRpb3UgPSB0aGlzLnBvaXNzb25SYXRpb3U7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5ub3ROdWxsQW5kTm90VW5kZWZpbmVkKHRoaXMueWllbGRTdHJlc3MpKSB7XHJcbiAgICAgIG9iai55aWVsZFN0cmVzcyA9IHRoaXMueWllbGRTdHJlc3M7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5ub3ROdWxsQW5kTm90VW5kZWZpbmVkKHRoaXMud2VpZ2h0RGVuc2l0eSkpIHtcclxuICAgICAgb2JqLndlaWdodERlbnNpdHkgPSB0aGlzLndlaWdodERlbnNpdHk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5ub3ROdWxsQW5kTm90VW5kZWZpbmVkKHRoaXMucmVtYXJrcykpIHtcclxuICAgICAgb2JqLnJlbWFya3MgPSB0aGlzLnJlbWFya3M7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG9iajtcclxuICB9XHJcblxyXG4gIGRlc2VyaWFsaXplKG9iajogYW55LCBwbTogUGVyc2lzdGVuY2VNYW5hZ2VyKSB7XHJcbiAgICBzdXBlci5kZXNlcmlhbGl6ZShvYmosIHBtKTtcclxuXHJcbiAgICBpZiAob2JqLmpvaW50cykge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9iai5qb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsZXQgam9pbnQgPSBwbS5yZWZlcmVuY2VMaXN0LmdldChvYmouam9pbnRzW2ldKTtcclxuICAgICAgICBpZiAoam9pbnQpIHtcclxuICAgICAgICAgIHRoaXMuam9pbnRzLnB1c2goam9pbnQgYXMgSm9pbnRPYmplY3QpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmpvaW50cy5wdXNoKG9iai5qb2ludHNbaV0pO1xyXG4gICAgICAgICAgcG0ubmVlZFJlZmVyZW5jZUxpc3QuYWRkKHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChvYmoucEdydXApIHtcclxuICAgICAgbGV0IHBHcnVwID0gcG0ucmVmZXJlbmNlTGlzdC5nZXQob2JqLnBHcnVwKTtcclxuICAgICAgaWYgKHBHcnVwKSB7XHJcbiAgICAgICAgdGhpcy5wR3J1cCA9IHBHcnVwIGFzIFBHcnVwT2JqZWN0O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucEdydXAgPSBvYmoucEdydXA7XHJcbiAgICAgICAgcG0ubmVlZFJlZmVyZW5jZUxpc3QuYWRkKHRoaXMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMubm90TnVsbEFuZE5vdFVuZGVmaW5lZChvYmoucGxhdGVUaGlja25lc3MpKSB7XHJcbiAgICAgIHRoaXMucGxhdGVUaGlja25lc3MgPSBvYmoucGxhdGVUaGlja25lc3M7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMubm90TnVsbEFuZE5vdFVuZGVmaW5lZChvYmoub2Zmc2V0T3B0aW9uKSkge1xyXG4gICAgICB0aGlzLl9vZmZzZXRPcHRpb24gPSBvYmoub2Zmc2V0T3B0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvYmoub2Zmc2V0cykge1xyXG4gICAgICB0aGlzLl9vZmZzZXRzID0gQ2FlTnVtYmVyQXJyYXkob2JqLm9mZnNldHMpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm5vdE51bGxBbmROb3RVbmRlZmluZWQob2JqLnJwc2spKSB7XHJcbiAgICAgIHRoaXMucnBzayA9IG9iai5ycHNrO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubWF0ZXJpYWxEYXRhX0UgPSBDYWVOdW1iZXIob2JqLm1hdGVyaWFsRGF0YV9FKTtcclxuXHJcbiAgICB0aGlzLnBvaXNzb25SYXRpb3UgPSBDYWVOdW1iZXIob2JqLnBvaXNzb25SYXRpb3UpO1xyXG5cclxuICAgIHRoaXMueWllbGRTdHJlc3MgPSBDYWVOdW1iZXIob2JqLnlpZWxkU3RyZXNzKTtcclxuXHJcbiAgICB0aGlzLndlaWdodERlbnNpdHkgPSBDYWVOdW1iZXIob2JqLndlaWdodERlbnNpdHkpO1xyXG5cclxuICAgIGlmICh0aGlzLm5vdE51bGxBbmROb3RVbmRlZmluZWQob2JqLnJlbWFya3MpKSB7XHJcbiAgICAgIHRoaXMucmVtYXJrcyA9IG9iai5yZW1hcmtzO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2V0TmVlZFVwZGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGNsb25lKGNsb25lT2JqOiBhbnksIGNsb25lTWFuYWdlcj86IExvbmdhbi5DbG9uZU1hbmFnZXIpIHtcclxuICAgIGNsb25lT2JqLmpvaW50cyA9IFsuLi50aGlzLmpvaW50c107XHJcbiAgICBjbG9uZU9iai5wR3J1cCA9IHRoaXMucEdydXA7XHJcbiAgICBjbG9uZU9iai5wbGF0ZVRoaWNrbmVzcyA9IExvbmdhbi5kZWVwQ2xvbmUodGhpcy5wbGF0ZVRoaWNrbmVzcyk7XHJcbiAgICBjbG9uZU9iai5vZmZzZXRPcHRpb24gPSBMb25nYW4uZGVlcENsb25lKHRoaXMub2Zmc2V0T3B0aW9uKTtcclxuICAgIGlmICh0aGlzLm9mZnNldHMpIHtcclxuICAgICAgY2xvbmVPYmoub2Zmc2V0cyA9IExvbmdhbi5kZWVwQ2xvbmUodGhpcy5vZmZzZXRzKTtcclxuICAgIH1cclxuXHJcbiAgICBjbG9uZU9iaiA9IHN1cGVyLmNsb25lKGNsb25lT2JqKTtcclxuICAgIHJldHVybiBjbG9uZU9iajtcclxuICB9XHJcblxyXG4gIHNlcmlhbGl6ZVRvQ2FyZCgpIHtcclxuICAgIC8vXHJcbiAgICBsZXQgY2FyZFBsYXRlID0gbmV3IENhcmRQbGF0ZSgpO1xyXG4gICAgY2FyZFBsYXRlLmxpbmVMYWJlbC52YWx1ZSA9IFwiUExBVEVcIjtcclxuICAgIGNhcmRQbGF0ZS5wbGF0ZUxhYmVsLnZhbHVlID0gdGhpcy5uYW1lO1xyXG4gICAgY2FyZFBsYXRlLmpvaW50QV9OYW1lLnZhbHVlID0gdGhpcy5qb2ludHNbMF0ubmFtZTtcclxuICAgIGNhcmRQbGF0ZS5qb2ludEJfTmFtZS52YWx1ZSA9IHRoaXMuam9pbnRzWzFdLm5hbWU7XHJcbiAgICBjYXJkUGxhdGUuam9pbnRDX05hbWUudmFsdWUgPSB0aGlzLmpvaW50c1syXS5uYW1lO1xyXG4gICAgY2FyZFBsYXRlLmpvaW50RF9OYW1lLnZhbHVlID0gdGhpcy5qb2ludHNbM10gPyB0aGlzLmpvaW50c1szXS5uYW1lIDogXCJcIjtcclxuICAgIGNhcmRQbGF0ZS5wbGF0ZUdydXBMYWJlbC52YWx1ZSA9IHRoaXMucEdydXAgPyB0aGlzLnBHcnVwLm5hbWUgOiBcIlwiO1xyXG4gICAgY2FyZFBsYXRlLnJwc2sudmFsdWUgPSB0aGlzLnJwc2s7XHJcbiAgICBjYXJkUGxhdGUucGxhdGVUaGlja25lc3MudmFsdWUgPSB0aGlzLnBsYXRlVGhpY2tuZXNzO1xyXG4gICAgY2FyZFBsYXRlLm9mZnNldE9wdGlvbi52YWx1ZSA9IHRoaXMub2Zmc2V0T3B0aW9uO1xyXG4gICAgY2FyZFBsYXRlLm1hdGVyaWFsRGF0YV9FLnZhbHVlID0gdGhpcy5tYXRlcmlhbERhdGFfRTtcclxuICAgIGNhcmRQbGF0ZS5wb2lzc29uUmF0aW91LnZhbHVlID0gdGhpcy5wb2lzc29uUmF0aW91O1xyXG4gICAgY2FyZFBsYXRlLnlpZWxkU3RyZXNzLnZhbHVlID0gdGhpcy55aWVsZFN0cmVzcztcclxuICAgIGNhcmRQbGF0ZS53ZWlnaHREZW5zaXR5LnZhbHVlID0gdGhpcy53ZWlnaHREZW5zaXR5O1xyXG4gICAgY2FyZFBsYXRlLnJlbWFya3MudmFsdWUgPSB0aGlzLnJlbWFya3M7XHJcblxyXG4gICAgbGV0IHJlc3VsdCA9IGNhcmRQbGF0ZS5nZXRMaW5lKCk7XHJcbiAgICBpZiAodGhpcy5vZmZzZXRzPy5sZW5ndGggPj0gMykge1xyXG4gICAgICByZXN1bHQgKz0gXCJcXG5cIjtcclxuXHJcbiAgICAgIGxldCBjYXJkUGxhdGVPZmZzZXQxID0gbmV3IENhcmRQbGF0ZU9mZnNldHMoKTtcclxuICAgICAgY2FyZFBsYXRlT2Zmc2V0MS5saW5lTGFiZWwudmFsdWUgPSBcIlBMQVRFICBPRkZTRVRTXCI7XHJcbiAgICAgIGNhcmRQbGF0ZU9mZnNldDEuY29tbWVudHMudmFsdWUgPSBcIlwiO1xyXG4gICAgICBjYXJkUGxhdGVPZmZzZXQxLmZpcnN0Sm9pbnRfWE9mZnNldC52YWx1ZSA9IHRoaXMub2Zmc2V0c1swXS50b1N0cmluZygpO1xyXG4gICAgICBjYXJkUGxhdGVPZmZzZXQxLmZpcnN0Sm9pbnRfWU9mZnNldC52YWx1ZSA9IHRoaXMub2Zmc2V0c1sxXS50b1N0cmluZygpO1xyXG4gICAgICBjYXJkUGxhdGVPZmZzZXQxLmZpcnN0Sm9pbnRfWk9mZnNldC52YWx1ZSA9IHRoaXMub2Zmc2V0c1syXS50b1N0cmluZygpO1xyXG4gICAgICBjYXJkUGxhdGVPZmZzZXQxLnNlY29uZEpvaW50X1hPZmZzZXQudmFsdWUgPSAodGhpcy5vZmZzZXRzWzNdICE9PSBudWxsICYmIHRoaXMub2Zmc2V0c1szXSAhPT0gdW5kZWZpbmVkKSA/IHRoaXMub2Zmc2V0c1szXS50b1N0cmluZygpIDogXCJcIjtcclxuICAgICAgY2FyZFBsYXRlT2Zmc2V0MS5zZWNvbmRKb2ludF9ZT2Zmc2V0LnZhbHVlID0gKHRoaXMub2Zmc2V0c1s0XSAhPT0gbnVsbCAmJiB0aGlzLm9mZnNldHNbM10gIT09IHVuZGVmaW5lZCkgP3RoaXMub2Zmc2V0c1s0XS50b1N0cmluZygpIDogXCJcIjtcclxuICAgICAgY2FyZFBsYXRlT2Zmc2V0MS5zZWNvbmRKb2ludF9aT2Zmc2V0LnZhbHVlID0gKHRoaXMub2Zmc2V0c1s1XSAhPT0gbnVsbCAmJiB0aGlzLm9mZnNldHNbM10gIT09IHVuZGVmaW5lZCkgP3RoaXMub2Zmc2V0c1s1XS50b1N0cmluZygpIDogXCJcIjtcclxuXHJcbiAgICAgIHJlc3VsdCArPSBjYXJkUGxhdGVPZmZzZXQxLmdldExpbmUoKSArIFwiXFxuXCI7XHJcblxyXG4gICAgICBsZXQgY2FyZFBsYXRlT2Zmc2V0MiA9IG5ldyBDYXJkUGxhdGVPZmZzZXRzKCk7XHJcbiAgICAgIGNhcmRQbGF0ZU9mZnNldDIubGluZUxhYmVsLnZhbHVlID0gXCJQTEFURSAgT0ZGU0VUU1wiO1xyXG4gICAgICBjYXJkUGxhdGVPZmZzZXQyLmNvbW1lbnRzLnZhbHVlID0gXCJcIjtcclxuICAgICAgY2FyZFBsYXRlT2Zmc2V0Mi5maXJzdEpvaW50X1hPZmZzZXQudmFsdWUgPSAodGhpcy5vZmZzZXRzWzZdICE9PSBudWxsICYmIHRoaXMub2Zmc2V0c1szXSAhPT0gdW5kZWZpbmVkKSA/IHRoaXMub2Zmc2V0c1s2XS50b1N0cmluZygpOiBcIlwiO1xyXG4gICAgICBjYXJkUGxhdGVPZmZzZXQyLmZpcnN0Sm9pbnRfWU9mZnNldC52YWx1ZSA9ICh0aGlzLm9mZnNldHNbN10gIT09IG51bGwgJiYgdGhpcy5vZmZzZXRzWzNdICE9PSB1bmRlZmluZWQpID8gdGhpcy5vZmZzZXRzWzddLnRvU3RyaW5nKCk6IFwiXCI7XHJcbiAgICAgIGNhcmRQbGF0ZU9mZnNldDIuZmlyc3RKb2ludF9aT2Zmc2V0LnZhbHVlID0gKHRoaXMub2Zmc2V0c1s4XSAhPT0gbnVsbCAmJiB0aGlzLm9mZnNldHNbM10gIT09IHVuZGVmaW5lZCkgPyB0aGlzLm9mZnNldHNbOF0udG9TdHJpbmcoKTogXCJcIjtcclxuICAgICAgaWYgKHRoaXMub2Zmc2V0cy5sZW5ndGggPiA5KSB7XHJcbiAgICAgICAgaWYgKHRoaXMub2Zmc2V0c1s5XSAhPT0gbnVsbCAmJiB0aGlzLm9mZnNldHNbOV0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgY2FyZFBsYXRlT2Zmc2V0Mi5zZWNvbmRKb2ludF9YT2Zmc2V0LnZhbHVlID1cclxuICAgICAgICAgICAgdGhpcy5vZmZzZXRzWzldLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm9mZnNldHNbMTBdICE9PSBudWxsICYmIHRoaXMub2Zmc2V0c1sxMF0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgY2FyZFBsYXRlT2Zmc2V0Mi5zZWNvbmRKb2ludF9ZT2Zmc2V0LnZhbHVlID1cclxuICAgICAgICAgICAgdGhpcy5vZmZzZXRzWzEwXS50b1N0cmluZygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5vZmZzZXRzWzExXSAhPT0gbnVsbCAmJiB0aGlzLm9mZnNldHNbMTFdICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGNhcmRQbGF0ZU9mZnNldDIuc2Vjb25kSm9pbnRfWk9mZnNldC52YWx1ZSA9XHJcbiAgICAgICAgICAgIHRoaXMub2Zmc2V0c1sxMV0udG9TdHJpbmcoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY2FyZFBsYXRlT2Zmc2V0Mi5zZWNvbmRKb2ludF9YT2Zmc2V0LnZhbHVlID0gbnVsbDtcclxuICAgICAgICBjYXJkUGxhdGVPZmZzZXQyLnNlY29uZEpvaW50X1lPZmZzZXQudmFsdWUgPSBudWxsO1xyXG4gICAgICAgIGNhcmRQbGF0ZU9mZnNldDIuc2Vjb25kSm9pbnRfWk9mZnNldC52YWx1ZSA9IG51bGw7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJlc3VsdCArPSBjYXJkUGxhdGVPZmZzZXQyLmdldExpbmUoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgdGVtcERlbGV0ZSh2aWV3ZXI6IFZpZXdlcik6IHZvaWQge1xyXG4gICAgLy8g5LuO57uE5Lit5Yig6ZmkLlxyXG4gICAgbGV0IGNvbXBvbmVudEdyb3VwcyA9IHZpZXdlci5wcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RCeU5hbWUoXHJcbiAgICAgIFwi5p6E5Lu25YiG57uE5YiG6ImyXCJcclxuICAgICkgYXMgRGVzaWduQmFzZU9iamVjdDtcclxuICAgIGlmIChjb21wb25lbnRHcm91cHMpIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb21wb25lbnRHcm91cHMuY2hpbGRPYmplY3RzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbGV0IG9iaiA9IGNvbXBvbmVudEdyb3Vwcy5jaGlsZE9iamVjdHNbXHJcbiAgICAgICAgICBpXHJcbiAgICAgICAgXSBhcyBDb2xvckRpdkNvbXBvbmVudEdyb3VwT2JqZWN0O1xyXG5cclxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG9iai5yZWZlcmNlblBsYXRlSWRzLmNvdW50KCk7IGorKykge1xyXG4gICAgICAgICAgaWYgKG9iai5yZWZlcmNlblBsYXRlSWRzLml0ZW1zW2pdID09PSB0aGlzLmlkKSB7XHJcbiAgICAgICAgICAgIG9iai5yZWZlcmNlblBsYXRlSWRzLnJlbW92ZSh0aGlzLmlkKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHN1cGVyLnRlbXBEZWxldGUodmlld2VyKTtcclxuICB9XHJcblxyXG4gIHJldmVyc2VKb2ludEFuZE9mZnNldCgpIHtcclxuICAgIGlmICh0aGlzLmpvaW50cykge1xyXG4gICAgICB0aGlzLmpvaW50cyA9IHRoaXMuam9pbnRzLnJldmVyc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5vZmZzZXRzKSB7XHJcbiAgICAgIGxldCBvZmZzZXRzID0gbmV3IEFycmF5PG51bWJlcltdPigpO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMub2Zmc2V0cy5sZW5ndGg7IGkgKz0gMykge1xyXG4gICAgICAgIGxldCBvZmZzZXQgPSBuZXcgQXJyYXk8bnVtYmVyPihcclxuICAgICAgICAgIHRoaXMub2Zmc2V0c1tpXSxcclxuICAgICAgICAgIHRoaXMub2Zmc2V0c1tpICsgMV0sXHJcbiAgICAgICAgICB0aGlzLm9mZnNldHNbaSArIDJdXHJcbiAgICAgICAgKTtcclxuICAgICAgICBvZmZzZXRzLnB1c2gob2Zmc2V0KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IHJldmVyc2VPZmZzZXRzID0gbmV3IEFycmF5PG51bWJlcj4oKTtcclxuICAgICAgZm9yIChsZXQgaSA9IG9mZnNldHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICBsZXQgb2Zmc2V0ID0gb2Zmc2V0c1tpXTtcclxuICAgICAgICByZXZlcnNlT2Zmc2V0cy5wdXNoKG9mZnNldFswXSk7XHJcbiAgICAgICAgcmV2ZXJzZU9mZnNldHMucHVzaChvZmZzZXRbMV0pO1xyXG4gICAgICAgIHJldmVyc2VPZmZzZXRzLnB1c2gob2Zmc2V0WzJdKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UG9zaXRpb25zQmVmb3JlUEdydXBaT2Zmc2V0KCkge1xyXG4gICAgbGV0IHBvc2l0aW9ucyA9IG5ldyBBcnJheTxudW1iZXI+KCk7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmpvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBwb3NpdGlvbnMucHVzaCh0aGlzLmpvaW50c1tpXS5wb3NpdGlvblswXSk7XHJcbiAgICAgIHBvc2l0aW9ucy5wdXNoKHRoaXMuam9pbnRzW2ldLnBvc2l0aW9uWzFdKTtcclxuICAgICAgcG9zaXRpb25zLnB1c2godGhpcy5qb2ludHNbaV0ucG9zaXRpb25bMl0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm9mZnNldHMpIHtcclxuICAgICAgaWYgKHRoaXMub2Zmc2V0T3B0aW9uID09PSBcIjFcIikge1xyXG4gICAgICAgIC8vIOWFqOWxgOWBj+W/g1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5vZmZzZXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBpZiAocG9zaXRpb25zW2ldICE9PSBudWxsICYmIHBvc2l0aW9uc1tpXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uc1tpXSArPSB0aGlzLm9mZnNldHNbaV0gLyAxMDA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMub2Zmc2V0T3B0aW9uID09PSBcIjJcIikge1xyXG4gICAgICAgIC8vIOWxgOmDqOWBj+W/g++8jOacquWkhOeQhlxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5vZmZzZXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBpZiAocG9zaXRpb25zW2ldICE9PSBudWxsICYmIHBvc2l0aW9uc1tpXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uc1tpXSArPSB0aGlzLm9mZnNldHNbaV0gLyAxMDA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHBvc2l0aW9ucztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOiOt+WPluadv+eahOS4iS/lm5vkuKrngrkuXHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICBnZXRQb3NpdGlvbnMoKSB7XHJcbiAgICBsZXQgcG9zaXRpb25zID0gbmV3IEFycmF5PG51bWJlcj4oKTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuam9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHBvc2l0aW9ucy5wdXNoKHRoaXMuam9pbnRzW2ldLnBvc2l0aW9uWzBdKTtcclxuICAgICAgcG9zaXRpb25zLnB1c2godGhpcy5qb2ludHNbaV0ucG9zaXRpb25bMV0pO1xyXG4gICAgICBwb3NpdGlvbnMucHVzaCh0aGlzLmpvaW50c1tpXS5wb3NpdGlvblsyXSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMub2Zmc2V0cykge1xyXG4gICAgICBpZiAodGhpcy5vZmZzZXRPcHRpb24gPT09IFwiMVwiKSB7XHJcbiAgICAgICAgLy8g5YWo5bGA5YGP5b+DXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm9mZnNldHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGlmIChwb3NpdGlvbnNbaV0gIT09IG51bGwgJiYgcG9zaXRpb25zW2ldICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcG9zaXRpb25zW2ldICs9IHRoaXMub2Zmc2V0c1tpXSAvIDEwMDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5vZmZzZXRPcHRpb24gPT09IFwiMlwiKSB7XHJcbiAgICAgICAgLy8g5bGA6YOo5YGP5b+D77yM5pyq5aSE55CGXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm9mZnNldHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGlmIChwb3NpdGlvbnNbaV0gIT09IG51bGwgJiYgcG9zaXRpb25zW2ldICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcG9zaXRpb25zW2ldICs9IHRoaXMub2Zmc2V0c1tpXSAvIDEwMDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5wR3J1cCkge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5wR3J1cC5wbGF0ZVpPZmZzZXQgIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgIHRoaXMucEdydXAucGxhdGVaT2Zmc2V0ICE9PSBudWxsXHJcbiAgICAgICkge1xyXG4gICAgICAgIGxldCBub3JtYWwgPSB0aGlzLmdldE5vcm1hbCgpO1xyXG4gICAgICAgIGxldCBvZmZzZXQgPSBMb25nYW4uVmVjdG9yLm11bHRpcGx5KG5vcm1hbCwgdGhpcy5wR3J1cC5wbGF0ZVpPZmZzZXQgLyAxMDApO1xyXG5cclxuICAgICAgICBsZXQgcDAgPSBuZXcgRmxvYXQzMkFycmF5KFtwb3NpdGlvbnNbMF0sIHBvc2l0aW9uc1sxXSwgcG9zaXRpb25zWzJdXSk7XHJcbiAgICAgICAgbGV0IHAxID0gbmV3IEZsb2F0MzJBcnJheShbcG9zaXRpb25zWzNdLCBwb3NpdGlvbnNbNF0sIHBvc2l0aW9uc1s1XV0pO1xyXG4gICAgICAgIGxldCBwMiA9IG5ldyBGbG9hdDMyQXJyYXkoW3Bvc2l0aW9uc1s2XSwgcG9zaXRpb25zWzddLCBwb3NpdGlvbnNbOF1dKTtcclxuICAgICAgICBsZXQgcDMgPSBudWxsO1xyXG4gICAgICAgIGlmIChwb3NpdGlvbnMubGVuZ3RoID4gOSkge1xyXG4gICAgICAgICAgcDMgPSBuZXcgRmxvYXQzMkFycmF5KFtwb3NpdGlvbnNbOV0sIHBvc2l0aW9uc1sxMF0sIHBvc2l0aW9uc1sxMV1dKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHAwID0gTG9uZ2FuLlBvaW50LmFkZChwMCwgb2Zmc2V0KTtcclxuICAgICAgICBwMSA9IExvbmdhbi5Qb2ludC5hZGQocDEsIG9mZnNldCk7XHJcbiAgICAgICAgcDIgPSBMb25nYW4uUG9pbnQuYWRkKHAyLCBvZmZzZXQpO1xyXG4gICAgICAgIGlmIChwMykge1xyXG4gICAgICAgICAgcDMgPSBMb25nYW4uUG9pbnQuYWRkKHAzLCBvZmZzZXQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcG9zaXRpb25zID0gbmV3IEFycmF5PG51bWJlcj4oKTtcclxuICAgICAgICBwb3NpdGlvbnMucHVzaChwMFswXSk7XHJcbiAgICAgICAgcG9zaXRpb25zLnB1c2gocDBbMV0pO1xyXG4gICAgICAgIHBvc2l0aW9ucy5wdXNoKHAwWzJdKTtcclxuICAgICAgICBwb3NpdGlvbnMucHVzaChwMVswXSk7XHJcbiAgICAgICAgcG9zaXRpb25zLnB1c2gocDFbMV0pO1xyXG4gICAgICAgIHBvc2l0aW9ucy5wdXNoKHAxWzJdKTtcclxuICAgICAgICBwb3NpdGlvbnMucHVzaChwMlswXSk7XHJcbiAgICAgICAgcG9zaXRpb25zLnB1c2gocDJbMV0pO1xyXG4gICAgICAgIHBvc2l0aW9ucy5wdXNoKHAyWzJdKTtcclxuICAgICAgICBpZiAocDMpIHtcclxuICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKHAzWzBdKTtcclxuICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKHAzWzFdKTtcclxuICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKHAzWzJdKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwb3NpdGlvbnMgPSB0aGlzLnByb2Nlc3NCeUNvZWZmKHBvc2l0aW9ucyk7XHJcblxyXG4gICAgcmV0dXJuIHBvc2l0aW9ucztcclxuICB9XHJcblxyXG4gIGdldFBvc2l0aW9uc05vdE9mZnNldCgpIHtcclxuICAgIGxldCBwb3NpdGlvbnMgPSBuZXcgQXJyYXk8bnVtYmVyPigpO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5qb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgcG9zaXRpb25zLnB1c2godGhpcy5qb2ludHNbaV0ucG9zaXRpb25bMF0pO1xyXG4gICAgICBwb3NpdGlvbnMucHVzaCh0aGlzLmpvaW50c1tpXS5wb3NpdGlvblsxXSk7XHJcbiAgICAgIHBvc2l0aW9ucy5wdXNoKHRoaXMuam9pbnRzW2ldLnBvc2l0aW9uWzJdKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcG9zaXRpb25zXHJcbiAgfVxyXG5cclxuICAvLyDmnInpmZDlhYPnvZHmoLzlpITnkIYuXHJcbiAgcHJvY2Vzc0J5Q29lZmYocG9zaXRpb25zOiBudW1iZXJbXSk6IG51bWJlcltdIHtcclxuICAgIGxldCBwMCA9IG5ldyBGbG9hdDMyQXJyYXkoW3Bvc2l0aW9uc1swXSwgcG9zaXRpb25zWzFdLCBwb3NpdGlvbnNbMl1dKTtcclxuICAgIGxldCBwMSA9IG5ldyBGbG9hdDMyQXJyYXkoW3Bvc2l0aW9uc1szXSwgcG9zaXRpb25zWzRdLCBwb3NpdGlvbnNbNV1dKTtcclxuICAgIGxldCBwMiA9IG5ldyBGbG9hdDMyQXJyYXkoW3Bvc2l0aW9uc1s2XSwgcG9zaXRpb25zWzddLCBwb3NpdGlvbnNbOF1dKTtcclxuICAgIGxldCBwMyA9IG51bGw7XHJcbiAgICBpZiAocG9zaXRpb25zLmxlbmd0aCA+IDkpIHtcclxuICAgICAgcDMgPSBuZXcgRmxvYXQzMkFycmF5KFtwb3NpdGlvbnNbOV0sIHBvc2l0aW9uc1sxMF0sIHBvc2l0aW9uc1sxMV1dKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgY2VudGVyID0gbmV3IEZsb2F0MzJBcnJheShbXHJcbiAgICAgIChwMFswXSArIHAxWzBdICsgcDJbMF0pIC8gMyxcclxuICAgICAgKHAwWzFdICsgcDFbMV0gKyBwMlsxXSkgLyAzLFxyXG4gICAgICAocDBbMl0gKyBwMVsyXSArIHAyWzJdKSAvIDMsXHJcbiAgICBdKTtcclxuICAgIGlmIChwMykge1xyXG4gICAgICBjZW50ZXIgPSBuZXcgRmxvYXQzMkFycmF5KFtcclxuICAgICAgICAocDBbMF0gKyBwMVswXSArIHAyWzBdICsgcDNbMF0pIC8gNCxcclxuICAgICAgICAocDBbMV0gKyBwMVsxXSArIHAyWzFdICsgcDNbMV0pIC8gNCxcclxuICAgICAgICAocDBbMl0gKyBwMVsyXSArIHAyWzJdICsgcDNbMl0pIC8gNCxcclxuICAgICAgXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcDAgPSB0aGlzLmdldEZpbml0ZUVsZW1lbnRDb2VmZlBvaW50KHAwLCBjZW50ZXIpO1xyXG4gICAgcDEgPSB0aGlzLmdldEZpbml0ZUVsZW1lbnRDb2VmZlBvaW50KHAxLCBjZW50ZXIpO1xyXG4gICAgcDIgPSB0aGlzLmdldEZpbml0ZUVsZW1lbnRDb2VmZlBvaW50KHAyLCBjZW50ZXIpO1xyXG5cclxuICAgIGxldCByZXN1bHQgPSBuZXcgQXJyYXk8bnVtYmVyPigpO1xyXG4gICAgcmVzdWx0LnB1c2gocDBbMF0pO1xyXG4gICAgcmVzdWx0LnB1c2gocDBbMV0pO1xyXG4gICAgcmVzdWx0LnB1c2gocDBbMl0pO1xyXG4gICAgcmVzdWx0LnB1c2gocDFbMF0pO1xyXG4gICAgcmVzdWx0LnB1c2gocDFbMV0pO1xyXG4gICAgcmVzdWx0LnB1c2gocDFbMl0pO1xyXG4gICAgcmVzdWx0LnB1c2gocDJbMF0pO1xyXG4gICAgcmVzdWx0LnB1c2gocDJbMV0pO1xyXG4gICAgcmVzdWx0LnB1c2gocDJbMl0pO1xyXG5cclxuICAgIGlmIChwMykge1xyXG4gICAgICBwMyA9IHRoaXMuZ2V0RmluaXRlRWxlbWVudENvZWZmUG9pbnQocDMsIGNlbnRlcik7XHJcbiAgICAgIHJlc3VsdC5wdXNoKHAzWzBdKTtcclxuICAgICAgcmVzdWx0LnB1c2gocDNbMV0pO1xyXG4gICAgICByZXN1bHQucHVzaChwM1syXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIGdldEZpbml0ZUVsZW1lbnRDb2VmZlBvaW50KHBvaW50OiBGbG9hdDMyQXJyYXksIGNlbnRlcjogRmxvYXQzMkFycmF5KSB7XHJcbiAgICBsZXQgdjEgPSBMb25nYW4uUG9pbnQuc3VidHJhY3QocG9pbnQsIGNlbnRlcik7XHJcbiAgICBsZXQgbTEgPSBMb25nYW4uVmVjdG9yLm1vZHVsZSh2MSk7XHJcbiAgICBsZXQgcmVzdWx0ID0gTG9uZ2FuLlBvaW50LmFkZChcclxuICAgICAgY2VudGVyLFxyXG4gICAgICBMb25nYW4uVmVjdG9yLm11bHRpcGx5KExvbmdhbi5WZWN0b3Iubm9ybWFsaXplVmVjdG9yKHYxKSwgbTEgKiB0aGlzLmZpbml0ZUVsZW1lbnRDb2VmZilcclxuICAgICk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgcmVuZGVyKCkge1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJwbGF0ZU9iamVjdCByZW5kZXJcIik7XHJcbiAgICB0aGlzLmNsZWFyU3ZnKCk7XHJcbiAgICB0aGlzLmRyYXdTdmcoKTtcclxuXHJcbiAgICBpZiAodGhpcy5qb2ludHMgJiYgdGhpcy5qb2ludHMubGVuZ3RoID4gMCkge1xyXG4gICAgICBpZiAodHlwZW9mIHRoaXMuam9pbnRzWzBdID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyDnlLvnur9cclxuICAgIGlmICh0aGlzLmpvaW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGxldCBwb3NpdGlvbnMgPSB0aGlzLmdldFBvc2l0aW9ucygpO1xyXG5cclxuICAgICAgLy8gbGV0IGlzTGVnYWwgPSBQbGF0ZU9iamVjdC5jaGVja1BsYXRlTGVnYWwocG9zaXRpb25zKTtcclxuICAgICAgLy8gaWYgKCFpc0xlZ2FsKSB7XHJcbiAgICAgIC8vICAgY29uc29sZS5sb2coXCLmnb/nmoTnqbrpl7TngrnkuI3mnoTmiJDlubPpnaI6XCIsIHRoaXMubmFtZSk7XHJcbiAgICAgIC8vICAgcmV0dXJuO1xyXG4gICAgICAvLyB9XHJcblxyXG4gICAgICAvL+mmluWwvuebuOi/nlxyXG4gICAgICB0aGlzLnBvaW50cyA9IFsuLi5wb3NpdGlvbnNdO1xyXG4gICAgICB0aGlzLnBvaW50cy5wdXNoKHBvc2l0aW9uc1swXSk7XHJcbiAgICAgIHRoaXMucG9pbnRzLnB1c2gocG9zaXRpb25zWzFdKTtcclxuICAgICAgdGhpcy5wb2ludHMucHVzaChwb3NpdGlvbnNbMl0pO1xyXG4gICAgICBzdXBlci5yZW5kZXIoKTtcclxuXHJcbiAgICAgIC8vIGlmICh0aGlzLnZpZXdPcHRpb24gPT09IFZpZXdPcHRpb24uQm9keSkge1xyXG4gICAgICAvLyAgIHRoaXMuZHJhd0JvZHkocG9zaXRpb25zKTtcclxuICAgICAgLy8gfSBlbHNlIHtcclxuICAgICAgLy8gICB0aGlzLmRyYXdMaW5lKHBvc2l0aW9ucyk7XHJcbiAgICAgIC8vIH1cclxuICAgICAgdGhpcy5kcmF3TGluZShwb3NpdGlvbnMpO1xyXG4gICAgICBpZiAodGhpcy5mYWNlQ29sb3IpIHtcclxuICAgICAgICB0aGlzLnNlZ21lbnQuY29sb3IuZmFjZUNvbG9yID0gdGhpcy5mYWNlQ29sb3I7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZWdtZW50LmNvbG9yLmZhY2VDb2xvciA9IE9iamVjdENvbG9yLnBsYXRlQ29sb3I7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldE5vcm1hbCgpIHtcclxuICAgIGxldCBwb3NpdGlvbnMgPSB0aGlzLmdldFBvc2l0aW9uc0JlZm9yZVBHcnVwWk9mZnNldCgpO1xyXG5cclxuICAgIGxldCBwMDogRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShbXHJcbiAgICAgIHBvc2l0aW9uc1swXSxcclxuICAgICAgcG9zaXRpb25zWzFdLFxyXG4gICAgICBwb3NpdGlvbnNbMl0sXHJcbiAgICBdKTtcclxuICAgIGxldCBwMTogRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShbXHJcbiAgICAgIHBvc2l0aW9uc1szXSxcclxuICAgICAgcG9zaXRpb25zWzRdLFxyXG4gICAgICBwb3NpdGlvbnNbNV0sXHJcbiAgICBdKTtcclxuICAgIGxldCBwMjogRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShbXHJcbiAgICAgIHBvc2l0aW9uc1s2XSxcclxuICAgICAgcG9zaXRpb25zWzddLFxyXG4gICAgICBwb3NpdGlvbnNbOF0sXHJcbiAgICBdKTtcclxuXHJcbiAgICBsZXQgam9pbnRzID0gbmV3IEFycmF5PEZsb2F0MzJBcnJheT4oKTtcclxuICAgIGpvaW50cy5wdXNoKHAwKTtcclxuICAgIGpvaW50cy5wdXNoKHAxKTtcclxuICAgIGpvaW50cy5wdXNoKHAyKTtcclxuXHJcbiAgICBsZXQgcDBwMSA9IExvbmdhbi5Qb2ludC5zdWJ0cmFjdChwMSwgcDApO1xyXG4gICAgbGV0IHAxcDIgPSBMb25nYW4uUG9pbnQuc3VidHJhY3QocDIsIHAxKTtcclxuXHJcbiAgICBMb25nYW4uVmVjdG9yLm5vcm1hbGl6ZShwMHAxKTtcclxuICAgIExvbmdhbi5WZWN0b3Iubm9ybWFsaXplKHAxcDIpO1xyXG4gICAgbGV0IG5vcm1hbCA9IExvbmdhbi5WZWN0b3IuY3Jvc3MocDBwMSwgcDFwMik7XHJcbiAgICBMb25nYW4uVmVjdG9yLm5vcm1hbGl6ZShub3JtYWwpO1xyXG5cclxuICAgIHJldHVybiBub3JtYWw7XHJcbiAgfVxyXG5cclxuICAvLyBkcmF3Qm9keShwb3NpdGlvbnM6IG51bWJlcltdKSB7XHJcbiAgLy8gICBsZXQgcDA6IEZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoW1xyXG4gIC8vICAgICBwb3NpdGlvbnNbMF0sXHJcbiAgLy8gICAgIHBvc2l0aW9uc1sxXSxcclxuICAvLyAgICAgcG9zaXRpb25zWzJdLFxyXG4gIC8vICAgXSk7XHJcbiAgLy8gICBsZXQgcDE6IEZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoW1xyXG4gIC8vICAgICBwb3NpdGlvbnNbM10sXHJcbiAgLy8gICAgIHBvc2l0aW9uc1s0XSxcclxuICAvLyAgICAgcG9zaXRpb25zWzVdLFxyXG4gIC8vICAgXSk7XHJcbiAgLy8gICBsZXQgcDI6IEZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoW1xyXG4gIC8vICAgICBwb3NpdGlvbnNbNl0sXHJcbiAgLy8gICAgIHBvc2l0aW9uc1s3XSxcclxuICAvLyAgICAgcG9zaXRpb25zWzhdLFxyXG4gIC8vICAgXSk7XHJcblxyXG4gIC8vICAgbGV0IGpvaW50cyA9IG5ldyBBcnJheTxGbG9hdDMyQXJyYXk+KCk7XHJcbiAgLy8gICBqb2ludHMucHVzaChwMCk7XHJcbiAgLy8gICBqb2ludHMucHVzaChwMSk7XHJcbiAgLy8gICBqb2ludHMucHVzaChwMik7XHJcblxyXG4gIC8vICAgbGV0IHAzOiBGbG9hdDMyQXJyYXkgPSBudWxsO1xyXG4gIC8vICAgaWYgKHBvc2l0aW9ucy5sZW5ndGggPiA5KSB7XHJcbiAgLy8gICAgIHAzID0gbmV3IEZsb2F0MzJBcnJheShbcG9zaXRpb25zWzldLCBwb3NpdGlvbnNbMTBdLCBwb3NpdGlvbnNbMTFdXSk7XHJcbiAgLy8gICAgIGpvaW50cy5wdXNoKHAzKTtcclxuICAvLyAgIH1cclxuXHJcbiAgLy8gICBsZXQgcDBwMSA9IExvbmdhbi5Qb2ludC5zdWJ0cmFjdChwMSwgcDApO1xyXG4gIC8vICAgbGV0IHAxcDIgPSBMb25nYW4uUG9pbnQuc3VidHJhY3QocDIsIHAxKTtcclxuXHJcbiAgLy8gICBMb25nYW4uVmVjdG9yLm5vcm1hbGl6ZShwMHAxKTtcclxuICAvLyAgIExvbmdhbi5WZWN0b3Iubm9ybWFsaXplKHAxcDIpO1xyXG4gIC8vICAgbGV0IG5vcm1hbCA9IExvbmdhbi5WZWN0b3IuY3Jvc3MocDBwMSwgcDFwMik7XHJcbiAgLy8gICBMb25nYW4uVmVjdG9yLm5vcm1hbGl6ZShub3JtYWwpO1xyXG4gIC8vICAgbGV0IHRoaWNrbmVzcyA9IHRoaXMuZ2V0VGhpY2tuZXNzKCkgPyB0aGlzLmdldFRoaWNrbmVzcygpIDogMTtcclxuICAvLyAgIC8vIGNt6L2sbVxyXG4gIC8vICAgdGhpY2tuZXNzIC89IDEwMDtcclxuICAvLyAgIG5vcm1hbCA9IExvbmdhbi5WZWN0b3IubXVsdGlwbHkobm9ybWFsLCB0aGlja25lc3MpO1xyXG5cclxuICAvLyAgIGxldCByZXN1bHRQb3NpdGlvbnMgPSBuZXcgQXJyYXk8bnVtYmVyPigpO1xyXG4gIC8vICAgcmVzdWx0UG9zaXRpb25zID0gcmVzdWx0UG9zaXRpb25zLmNvbmNhdChbLi4uam9pbnRzWzBdXSk7XHJcbiAgLy8gICBmb3IgKGxldCBpID0gMTsgaSA8IGpvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gIC8vICAgICAvL1xyXG4gIC8vICAgICByZXN1bHRQb3NpdGlvbnMgPSByZXN1bHRQb3NpdGlvbnMuY29uY2F0KFsuLi5qb2ludHNbaV1dKTtcclxuICAvLyAgICAgcmVzdWx0UG9zaXRpb25zID0gcmVzdWx0UG9zaXRpb25zLmNvbmNhdChbLi4uam9pbnRzW2ldXSk7XHJcbiAgLy8gICB9XHJcbiAgLy8gICByZXN1bHRQb3NpdGlvbnMgPSByZXN1bHRQb3NpdGlvbnMuY29uY2F0KFsuLi5qb2ludHNbMF1dKTtcclxuICAvLyAgIGxldCBpbmRpY2VzID0gbmV3IEFycmF5PG51bWJlcj4oKTtcclxuICAvLyAgIGluZGljZXMucHVzaChyZXN1bHRQb3NpdGlvbnMubGVuZ3RoIC8gMyk7XHJcbiAgLy8gICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc3VsdFBvc2l0aW9ucy5sZW5ndGggLyAzOyBpKyspIHtcclxuICAvLyAgICAgaW5kaWNlcy5wdXNoKGkpO1xyXG4gIC8vICAgfVxyXG5cclxuICAvLyAgIGxldCBhbmdlbCA9IExvbmdhbi5WZWN0b3IuYW5nbGUobm9ybWFsLCBuZXcgRmxvYXQzMkFycmF5KFswLCAwLCAxXSkpO1xyXG4gIC8vICAgaWYgKGFuZ2VsIDwgTWF0aC5QSSAvIDIpIHtcclxuICAvLyAgICAgLy9cclxuICAvLyAgIH0gZWxzZSBpZiAoYW5nZWwgPT0gTWF0aC5QSSAvIDIpIHtcclxuICAvLyAgICAgLy8g5Z6C6Z2iLlxyXG4gIC8vICAgfSBlbHNlIHtcclxuICAvLyAgICAgLy8g5Y+N5ZCRLlxyXG4gIC8vICAgICBsZXQgcmVzdWx0UG9zaXRpb25zID0gbmV3IEFycmF5PG51bWJlcj4oKTtcclxuICAvLyAgICAgcmVzdWx0UG9zaXRpb25zID0gcmVzdWx0UG9zaXRpb25zLmNvbmNhdChbLi4uam9pbnRzW2pvaW50cy5sZW5ndGggLSAxXV0pO1xyXG4gIC8vICAgICBmb3IgKGxldCBpID0gam9pbnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgLy8gICAgICAgLy9cclxuICAvLyAgICAgICByZXN1bHRQb3NpdGlvbnMgPSByZXN1bHRQb3NpdGlvbnMuY29uY2F0KFsuLi5qb2ludHNbaV1dKTtcclxuICAvLyAgICAgICByZXN1bHRQb3NpdGlvbnMgPSByZXN1bHRQb3NpdGlvbnMuY29uY2F0KFsuLi5qb2ludHNbaV1dKTtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgICByZXN1bHRQb3NpdGlvbnMgPSByZXN1bHRQb3NpdGlvbnMuY29uY2F0KFsuLi5qb2ludHNbam9pbnRzLmxlbmd0aCAtIDFdXSk7XHJcbiAgLy8gICB9XHJcblxyXG4gIC8vICAgTG9uZ2FuQ29yZS5KU19PcGVuX1NlZ21lbnRfQnlfS2V5KHRoaXMuc2VnbWVudC5rZXkpO1xyXG4gIC8vICAge1xyXG4gIC8vICAgICBjb25zb2xlLmxvZyhcInBsYXRlU2VnS2V5OlwiLCB0aGlzLnNlZ21lbnQua2V5KTtcclxuICAvLyAgICAgbGV0IHBvbHlnb24gPSBMb25nYW5Db3JlLkpTX0ZlYXR1cmVfRXh0cnVkZShcclxuICAvLyAgICAgICBuZXcgRmxvYXQ2NEFycmF5KHJlc3VsdFBvc2l0aW9ucyksXHJcbiAgLy8gICAgICAgbmV3IEludDMyQXJyYXkoaW5kaWNlcyksXHJcbiAgLy8gICAgICAgbmV3IEZsb2F0NjRBcnJheShub3JtYWwpLFxyXG4gIC8vICAgICAgIFwiXCJcclxuICAvLyAgICAgKTtcclxuXHJcbiAgLy8gICAgIGxldCBzaGVsbF9rZXkgPSBMb25nYW5Db3JlLkpTX0luc2VydF9Ucmlhbmd1bGFyX1NoZWxsKFxyXG4gIC8vICAgICAgIHBvbHlnb24ucG9zaXRpb25zLFxyXG4gIC8vICAgICAgIHBvbHlnb24uaW5kZXhlc1xyXG4gIC8vICAgICApO1xyXG4gIC8vICAgICBMb25nYW5Db3JlLkpTX1VuU2V0X0dlb21ldHJ5X0NvbG9yKHNoZWxsX2tleSwgXCJmYWNlc1wiKTtcclxuICAvLyAgIH1cclxuICAvLyAgIExvbmdhbkNvcmUuSlNfQ2xvc2VfU2VnbWVudCgpO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8g5Yik5pat6L6T5YWl54K55piv5ZCm6YO95YWx6Z2iLlxyXG5cclxuICAgc3RhdGljIGNoZWNrUGxhdGVMZWdhbChwb3NpdGlvbnM6IG51bWJlcltdKTogYm9vbGVhbiB7XHJcbiAgICAvLyDlhYjliKTmlq1wMCxwMSxwMuaYr+WQpuWcqOWQjOS4gOebtOe6v+S4ilxyXG4gICAgLy8g5pivLS0t6Iul5LiN5a2Y5Zyo56ysNOS4queCuS0tLee7mOWItuWksei0pS5cclxuICAgIC8vICAgLS0t5a2Y5Zyo56ysNOS4queCuS0tLeWIpOaWrXAwLHAxLHAy5piv5ZCm5Zyo5ZCM5LiA55u057q/5LiKLlxyXG4gICAgLy8g5ZCmLS0t6K6h566X56ys5LiJ5Liq54K55LiO5bmz6Z2i55qE6Led56a7LlxyXG4gICAgbGV0IGlzTGVnYWwgPSB0cnVlO1xyXG5cclxuICAgIGxldCBwMCA9IG5ldyBGbG9hdDMyQXJyYXkoW3Bvc2l0aW9uc1swXSwgcG9zaXRpb25zWzFdLCBwb3NpdGlvbnNbMl1dKTtcclxuICAgIGxldCBwMSA9IG5ldyBGbG9hdDMyQXJyYXkoW3Bvc2l0aW9uc1szXSwgcG9zaXRpb25zWzRdLCBwb3NpdGlvbnNbNV1dKTtcclxuICAgIGxldCBwMiA9IG5ldyBGbG9hdDMyQXJyYXkoW3Bvc2l0aW9uc1s2XSwgcG9zaXRpb25zWzddLCBwb3NpdGlvbnNbOF1dKTtcclxuICAgIGlzTGVnYWwgPSBQbGF0ZU9iamVjdC5pc1BsYXRlKHAwLCBwMSwgcDIpO1xyXG5cclxuICAgIGlmIChwb3NpdGlvbnMubGVuZ3RoID09PSA5KSB7XHJcbiAgICAgIC8vIOS4jemcgOimgeaTjeS9nC5cclxuICAgIH0gZWxzZSBpZiAocG9zaXRpb25zLmxlbmd0aCA9PT0gMTIpIHtcclxuICAgICAgLy9cclxuICAgICAgbGV0IHAzID0gbmV3IEZsb2F0MzJBcnJheShbcG9zaXRpb25zWzldLCBwb3NpdGlvbnNbMTBdLCBwb3NpdGlvbnNbMTFdXSk7XHJcblxyXG4gICAgICBpZiAoIWlzTGVnYWwpIHtcclxuICAgICAgICAvLyDkuInngrnlhbHnur9cclxuICAgICAgICBpc0xlZ2FsID0gUGxhdGVPYmplY3QuaXNQbGF0ZShwMCwgcDEsIHAzKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyDliKTmlq3ngrlwM+aYr+WQpuWcqOW5s+mdouWGhS5cclxuICAgICAgICBsZXQgYXhpczEgPSBMb25nYW4uUG9pbnQuc3VidHJhY3QocDEsIHAwKTtcclxuICAgICAgICBMb25nYW4uVmVjdG9yLm5vcm1hbGl6ZShheGlzMSk7XHJcbiAgICAgICAgbGV0IGF4aXMyID0gTG9uZ2FuLlBvaW50LnN1YnRyYWN0KHAyLCBwMCk7XHJcbiAgICAgICAgTG9uZ2FuLlZlY3Rvci5ub3JtYWxpemUoYXhpczIpO1xyXG5cclxuICAgICAgICBsZXQgbm9ybWFsID0gTG9uZ2FuLlZlY3Rvci5jcm9zcyhheGlzMSwgYXhpczIpO1xyXG4gICAgICAgIExvbmdhbi5WZWN0b3Iubm9ybWFsaXplKG5vcm1hbCk7XHJcblxyXG4gICAgICAgIGxldCBwcm9qZWN0UG9pbnQgPSBMb25nYW4uR2VvbWV0cnlPcGVyYXRvcnMucHJvamVjdFBvaW50VG9QbGFuZShcclxuICAgICAgICAgIHAzLFxyXG4gICAgICAgICAgcDAsXHJcbiAgICAgICAgICBub3JtYWxcclxuICAgICAgICApO1xyXG4gICAgICAgIGxldCB2ZWN0b3IgPSBMb25nYW4uUG9pbnQuc3VidHJhY3QocHJvamVjdFBvaW50LCBwMyk7XHJcbiAgICAgICAgaWYgKExvbmdhbi5HZW9tZXRyeU9wZXJhdG9ycy5zYW1lVmVjdG9yKHZlY3RvciwgbmV3IEZsb2F0MzJBcnJheShbMCwgMCwgMF0pKSkge1xyXG4gICAgICAgICAgLy8gcDPlnKjpnaLlhoUsaXNMZWdhbCA9IHRydWVcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaXNMZWdhbCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaXNMZWdhbCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBpc0xlZ2FsO1xyXG4gICAgLy8gcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgaXNQbGF0ZShwMDogRmxvYXQzMkFycmF5LCBwMTogRmxvYXQzMkFycmF5LCBwMjogRmxvYXQzMkFycmF5KSB7XHJcbiAgICBsZXQgYXhpczEgPSBMb25nYW4uUG9pbnQuc3VidHJhY3QocDEsIHAwKTtcclxuICAgIExvbmdhbi5WZWN0b3Iubm9ybWFsaXplKGF4aXMxKTtcclxuICAgIGxldCBheGlzMiA9IExvbmdhbi5Qb2ludC5zdWJ0cmFjdChwMiwgcDApO1xyXG4gICAgTG9uZ2FuLlZlY3Rvci5ub3JtYWxpemUoYXhpczIpO1xyXG5cclxuICAgIHJldHVybiAhTG9uZ2FuLkdlb21ldHJ5T3BlcmF0b3JzLmlzUGFyYWxsZWwoYXhpczEsIGF4aXMyKTtcclxuICB9XHJcblxyXG4gIGRyYXdMaW5lKHBvc2l0aW9uczogbnVtYmVyW10pIHtcclxuICAgIGxldCBpbmRpY2VzMSA9IFswLCAxLCAyXTtcclxuICAgIGxldCBpbmRpY2VzMiA9IFsyLCAxLCAwXTtcclxuXHJcbiAgICBpZiAocG9zaXRpb25zLmxlbmd0aCA9PT0gOSkge1xyXG4gICAgICB0aGlzLnNlZ21lbnQuaW5zZXJ0VHJpYW5ndWxhclNoZWxsKHBvc2l0aW9ucywgaW5kaWNlczEpO1xyXG4gICAgICB0aGlzLnNlZ21lbnQuaW5zZXJ0VHJpYW5ndWxhclNoZWxsKHBvc2l0aW9ucywgaW5kaWNlczIpO1xyXG4gICAgfSBlbHNlIGlmIChwb3NpdGlvbnMubGVuZ3RoID4gOSkge1xyXG4gICAgICBsZXQgcDAgPSBuZXcgRmxvYXQzMkFycmF5KHBvc2l0aW9ucy5zbGljZSgwLCAzKSk7XHJcbiAgICAgIGxldCBwMSA9IG5ldyBGbG9hdDMyQXJyYXkocG9zaXRpb25zLnNsaWNlKDMsIDYpKTtcclxuICAgICAgbGV0IHAyID0gbmV3IEZsb2F0MzJBcnJheShwb3NpdGlvbnMuc2xpY2UoNiwgOSkpO1xyXG4gICAgICBsZXQgcDMgPSBuZXcgRmxvYXQzMkFycmF5KHBvc2l0aW9ucy5zbGljZSg5LCAxMikpO1xyXG5cclxuICAgICAgbGV0IGludGVyMCA9IExvbmdhbi5HZW9tZXRyeU9wZXJhdG9ycy5pbnRlcnNlY3Rpb25MaW5lU2VnbWVudExpbmVTZWdtZW50KHAwLCBwMSwgcDIsIHAzKTtcclxuICAgICAgbGV0IGludGVyMSA9IExvbmdhbi5HZW9tZXRyeU9wZXJhdG9ycy5pbnRlcnNlY3Rpb25MaW5lU2VnbWVudExpbmVTZWdtZW50KHAwLCBwMiwgcDEsIHAzKTtcclxuICAgICAgLy8gbGV0IGludGVyMiA9IExvbmdhbi5HZW9tZXRyeU9wZXJhdG9ycy5pbnRlcnNlY3Rpb25MaW5lU2VnbWVudExpbmVTZWdtZW50KHAwLCBwMywgcDEsIHAyKTtcclxuICAgICAgaWYoaW50ZXIxKSB7XHJcbiAgICAgICAgbGV0IHBvaW50czEgPSBwb3NpdGlvbnMuc2xpY2UoMCwgOSk7XHJcbiAgICAgICAgbGV0IHBvaW50czIgPSBwb3NpdGlvbnMuc2xpY2UoNiwgMTIpLmNvbmNhdChwb3NpdGlvbnMuc2xpY2UoMCwgMykpO1xyXG4gICAgICAgIHRoaXMuc2VnbWVudC5pbnNlcnRUcmlhbmd1bGFyU2hlbGwocG9pbnRzMSwgaW5kaWNlczEpO1xyXG4gICAgICAgIHRoaXMuc2VnbWVudC5pbnNlcnRUcmlhbmd1bGFyU2hlbGwocG9pbnRzMiwgaW5kaWNlczEpO1xyXG4gIFxyXG4gICAgICAgIHRoaXMuc2VnbWVudC5pbnNlcnRUcmlhbmd1bGFyU2hlbGwocG9pbnRzMSwgaW5kaWNlczIpO1xyXG4gICAgICAgIHRoaXMuc2VnbWVudC5pbnNlcnRUcmlhbmd1bGFyU2hlbGwocG9pbnRzMiwgaW5kaWNlczIpO1xyXG4gICAgICB9IGVsc2UgaWYoaW50ZXIwKSB7XHJcbiAgICAgICAgbGV0IHBvaW50czEgPSBwb3NpdGlvbnMuc2xpY2UoMCwgOSk7XHJcbiAgICAgICAgbGV0IHBvaW50czIgPSBwb3NpdGlvbnMuc2xpY2UoMCwgNikuY29uY2F0KHBvc2l0aW9ucy5zbGljZSg5LCAxMikpO1xyXG4gICAgICAgIHRoaXMuc2VnbWVudC5pbnNlcnRUcmlhbmd1bGFyU2hlbGwocG9pbnRzMSwgaW5kaWNlczEpO1xyXG4gICAgICAgIHRoaXMuc2VnbWVudC5pbnNlcnRUcmlhbmd1bGFyU2hlbGwocG9pbnRzMiwgaW5kaWNlczEpO1xyXG5cclxuICAgICAgICB0aGlzLnNlZ21lbnQuaW5zZXJ0VHJpYW5ndWxhclNoZWxsKHBvaW50czEsIGluZGljZXMyKTtcclxuICAgICAgICB0aGlzLnNlZ21lbnQuaW5zZXJ0VHJpYW5ndWxhclNoZWxsKHBvaW50czIsIGluZGljZXMyKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgcG9pbnRzMSA9IHBvc2l0aW9ucy5zbGljZSgwLCA5KTtcclxuICAgICAgICBsZXQgcG9pbnRzMiA9IHBvc2l0aW9ucy5zbGljZSgzLCAxMik7XHJcbiAgICAgICAgdGhpcy5zZWdtZW50Lmluc2VydFRyaWFuZ3VsYXJTaGVsbChwb2ludHMxLCBpbmRpY2VzMSk7XHJcbiAgICAgICAgdGhpcy5zZWdtZW50Lmluc2VydFRyaWFuZ3VsYXJTaGVsbChwb2ludHMyLCBpbmRpY2VzMSk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VnbWVudC5pbnNlcnRUcmlhbmd1bGFyU2hlbGwocG9pbnRzMSwgaW5kaWNlczIpO1xyXG4gICAgICAgIHRoaXMuc2VnbWVudC5pbnNlcnRUcmlhbmd1bGFyU2hlbGwocG9pbnRzMiwgaW5kaWNlczIpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gdGhpcy5zZWdtZW50LnJlbmRlcmluZ09wdGlvbnMuY3VsbEJhY2tGYWNlID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBkcmF3U3ZnKCkge1xyXG4gICAgaWYgKCF0aGlzLmNoZWNrQnVzaW5lc3NTdGF0ZUlzQWN0aXZlKCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBpcm8gPSBQcm9jZXNzLmFjdGl2ZVByb2Nlc3MuYWN0aXZlVmlld2VyLmZpbmRJbnN0YW5jZU9iamVjdCh0aGlzKTtcclxuICAgIGlmIChpcm8gJiYgIWlyby52aXNpYmxlKSB7XHJcbiAgICAgIHRoaXMuY2xlYXJTdmcoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGlmICh0aGlzLl9pc0RyYXdMYWJlbCkge1xyXG4gICAgLy8gICB0aGlzLmRyYXdMYWJlbCgpO1xyXG4gICAgLy8gfVxyXG4gICAgaWYgKHRoaXMuX2lzRHJhd0F4aXMpIHtcclxuICAgICAgdGhpcy5kcmF3QXhpcygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xlYXJTdmcoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5sYWJlbFRleHQpIHtcclxuICAgICAgdGhpcy5sYWJlbFRleHQuY2xlYXIoKTtcclxuICAgICAgdGhpcy5sYWJlbFRleHQgPSBudWxsO1xyXG4gICAgICB0aGlzLmxhYmVsUmVjdC5yZW1vdmUoKTtcclxuICAgICAgdGhpcy5sYWJlbFJlY3QgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmF4aXNTZWcpIHtcclxuICAgICAgdGhpcy5heGlzU2VnLmNsZWFyQWxsKCk7XHJcbiAgICAgIHRoaXMuYXhpc1NlZyA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgc3VwZXIuY2xlYXJTdmcoKTtcclxuICB9XHJcblxyXG4gIGRyYXdMYWJlbChwb3NpdGlvbjogW251bWJlciwgbnVtYmVyXSkge1xyXG4gICAgbGV0IHZpZXdlciA9IFByb2Nlc3MuYWN0aXZlUHJvY2Vzcy5hY3RpdmVWaWV3ZXI7XHJcbiAgICBsZXQgeCA9IHBvc2l0aW9uWzBdO1xyXG4gICAgbGV0IHkgPSBwb3NpdGlvblsxXTtcclxuICAgIGlmICh0aGlzLmxhYmVsUmVjdCAmJiB0aGlzLmxhYmVsVGV4dCkge1xyXG4gICAgICB0aGlzLmxhYmVsUmVjdC5tb3ZlKHgsIHkgLSAyMCk7XHJcbiAgICAgIHRoaXMubGFiZWxUZXh0Lm1vdmUoeCArIDUsIHkgLSAxOCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgZHJhdyA9IFN2Z0RyYXcuZ2V0SW5zdGFuY2Uodmlld2VyLmNvbnRhaW5lci5pZCkuZHJhdztcclxuXHJcbiAgICAgIC8vIGlmICghdGhpcy5fZ3JvdXApIHtcclxuICAgICAgdGhpcy5fZ3JvdXAgPSBkcmF3Lmdyb3VwKCk7XHJcbiAgICAgIC8vIH1cclxuXHJcbiAgICAgIGxldCBuYW1lID0gdGhpcy5uYW1lO1xyXG4gICAgICBsZXQgdGhpY2tuZXNzID0gdGhpcy5nZXRUaGlja25lc3MoKVxyXG4gICAgICAgID8gdGhpcy5nZXRUaGlja25lc3MoKS50b1N0cmluZygpXHJcbiAgICAgICAgOiBcIjBcIjtcclxuXHJcbiAgICAgIGxldCB0ZXh0V2lkdGggPVxyXG4gICAgICAgIE1hdGgubWF4KDMgKyBuYW1lLmxlbmd0aCwgNyArIHRoaWNrbmVzcy5sZW5ndGgpICpcclxuICAgICAgICBEZXNpZ25CYXNlT2JqZWN0LmZvbnRTaXplO1xyXG5cclxuICAgICAgbGV0IHJlY3QgPSBkcmF3XHJcbiAgICAgICAgLnJlY3QodGV4dFdpZHRoLCAxMiAqIDgpXHJcbiAgICAgICAgLnJhZGl1cygyKVxyXG4gICAgICAgIC5maWxsKFwiI0ZGRkZFMVwiKVxyXG4gICAgICAgIC8vIC5zdHJva2UoeyBjb2xvcjogXCIjZmZmXCIsIHdpZHRoOiAxIH0pXHJcbiAgICAgICAgLm1vdmUoeCwgeSAtIDIwKVxyXG4gICAgICAgIC5hdHRyKFwic3R5bGVcIiwgYHBvaW50ZXItZXZlbnRzOiBub25lfWApO1xyXG5cclxuICAgICAgbGV0IHRleHQgPSBkcmF3XHJcbiAgICAgICAgLnRleHQoKGFkZCkgPT4ge1xyXG4gICAgICAgICAgYWRkLnRzcGFuKGBOYW1lOiR7bmFtZX1gKS5uZXdMaW5lKCk7XHJcbiAgICAgICAgICBhZGQudHNwYW4oYFRoaWNrbmVzcyhjbSk6JHt0aGlja25lc3N9YCkubmV3TGluZSgpO1xyXG4gICAgICAgICAgYWRkLnRzcGFuKGBKb2ludEE6JHt0aGlzLmpvaW50c1swXS5uYW1lfWApLm5ld0xpbmUoKTtcclxuICAgICAgICAgIGFkZC50c3BhbihgSm9pbnRCOiR7dGhpcy5qb2ludHNbMV0ubmFtZX1gKS5uZXdMaW5lKCk7XHJcbiAgICAgICAgICBhZGQudHNwYW4oYEpvaW50Qzoke3RoaXMuam9pbnRzWzJdLm5hbWV9YCkubmV3TGluZSgpO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLmpvaW50cy5sZW5ndGggPiAzKSB7XHJcbiAgICAgICAgICAgIGFkZC50c3BhbihgSm9pbnREOiR7dGhpcy5qb2ludHNbM10ubmFtZX1gKS5uZXdMaW5lKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuZm9udCh7IGZpbGw6IFwiIzAwMFwiIH0pXHJcbiAgICAgICAgLmF0dHIoXCJmb250LXNpemVcIiwgMTIpXHJcbiAgICAgICAgLm1vdmUoeCArIDUsIHkgLSAxOCk7XHJcbiAgICAgIHRoaXMuX2dyb3VwLmFkZChyZWN0KS5hZGQodGV4dCk7XHJcbiAgICAgIHRoaXMubGFiZWxSZWN0ID0gcmVjdDtcclxuICAgICAgdGhpcy5sYWJlbFRleHQgPSB0ZXh0O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZHJhd0F4aXMoKSB7XHJcbiAgICBpZiAoIXRoaXMuY2hlY2tCdXNpbmVzc1N0YXRlSXNBY3RpdmUoKSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgdmlld2VyID0gUHJvY2Vzcy5hY3RpdmVQcm9jZXNzLmFjdGl2ZVZpZXdlcjtcclxuICAgIGxldCBpcm8gPSB2aWV3ZXIuZmluZEluc3RhbmNlT2JqZWN0KHRoaXMpO1xyXG4gICAgaWYgKGlybyAmJiAhaXJvLnZpc2libGUpIHtcclxuICAgICAgdGhpcy5pc0RyYXdBeGlzID0gZmFsc2U7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgdW5pdExlbmd0aGEgPSB2aWV3ZXIudW5pdExlbmd0aCAvIDQ7XHJcbiAgICBsZXQgc2NhbGVNYXRyaXggPSBMb25nYW4uTWF0cml4NC5zY2FsZU1hdHJpeChcclxuICAgICAgdW5pdExlbmd0aGEsXHJcbiAgICAgIHVuaXRMZW5ndGhhLFxyXG4gICAgICB1bml0TGVuZ3RoYVxyXG4gICAgKTtcclxuICAgIGxldCBjZW50ZXIgPSB0aGlzLmdldENlbnRlcigpO1xyXG4gICAgbGV0IHRyYW5zbGF0ZU1hdHJpeCA9IExvbmdhbi5NYXRyaXg0LnRyYW5zbGF0ZU1hdHJpeChcclxuICAgICAgY2VudGVyWzBdLFxyXG4gICAgICBjZW50ZXJbMV0sXHJcbiAgICAgIGNlbnRlclsyXVxyXG4gICAgKTtcclxuICAgIGlmICh0aGlzLmF4aXNTZWcpIHtcclxuICAgICAgLy8gdGhpcy5heGlzU2VnLm1vZGVsbGluZ01hdHJpeC5zZXQoc2NhbGVNYXRyaXgpO1xyXG4gICAgICAvLyB0aGlzLmF4aXNTZWcuY2xlYXJBbGwoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCB2aWV3ZXIgPSBQcm9jZXNzLmFjdGl2ZVByb2Nlc3MuYWN0aXZlVmlld2VyO1xyXG4gICAgICBsZXQgdW5pdExlbmd0aGEgPSB2aWV3ZXIudW5pdExlbmd0aCAvIDI7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwidW5pdExlbmd0aGFcIiwgdW5pdExlbmd0aGEpO1xyXG5cclxuICAgICAgbGV0IGF4aXMgPSB0aGlzLmdldExvY2FsQXhpcygpO1xyXG4gICAgICBsZXQgb3JpZ2luID0gbmV3IEZsb2F0MzJBcnJheShbMCwgMCwgMF0pO1xyXG5cclxuICAgICAgbGV0IHhQb2ludCA9IExvbmdhbi5Qb2ludC5hZGQob3JpZ2luLCBheGlzLnhBeGlzKTtcclxuICAgICAgbGV0IHlQb2ludCA9IExvbmdhbi5Qb2ludC5hZGQob3JpZ2luLCBheGlzLnlBeGlzKTtcclxuICAgICAgbGV0IHpQb2ludCA9IExvbmdhbi5Qb2ludC5hZGQob3JpZ2luLCBheGlzLnpBeGlzKTtcclxuXHJcbiAgICAgIGxldCBtYXRyaXggPSBMb25nYW4uTWF0cml4NC5pZGVudGl0eSgpO1xyXG4gICAgICBpZiAodGhpcy5zZWdtZW50LmF0dHJpYnV0ZXMuaW5kZXhPZihMb25nYW4uTG9uZ2FuQ29yZS5PYmplY3RUeXBlLlRZUEVfTW9kZWxsaW5nTWF0cml4KSkge1xyXG4gICAgICAgIGlmICh0aGlzLnNlZ21lbnQubW9kZWxsaW5nTWF0cml4Lm1hdHJpeCkge1xyXG4gICAgICAgICAgbWF0cml4ID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLnNlZ21lbnQubW9kZWxsaW5nTWF0cml4Lm1hdHJpeCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGxldCBheGlzUGFyZW50ID0gdmlld2VyLnNjZW5lU2VnbWVudC5zdWJzZWdtZW50KFwiYXhpc1BhclwiICsgdGhpcy5pZCk7XHJcbiAgICAgIGF4aXNQYXJlbnQubW9kZWxsaW5nTWF0cml4LnNldChtYXRyaXgpO1xyXG4gICAgICB0aGlzLmF4aXNTZWcgPSBheGlzUGFyZW50LnN1YnNlZ21lbnQoXCJheGlzXCIpO1xyXG5cclxuICAgICAgdGhpcy5heGlzU2VnLnJlbmRlcmluZ09wdGlvbnMuZGVwdGhSYW5nZSA9IFswLCAwLjFdO1xyXG5cclxuICAgICAgbGV0IHhTZWcgPSB0aGlzLmF4aXNTZWcuc3Vic2VnbWVudChcInhcIik7XHJcbiAgICAgIGxldCB5U2VnID0gdGhpcy5heGlzU2VnLnN1YnNlZ21lbnQoXCJ5XCIpO1xyXG4gICAgICBsZXQgelNlZyA9IHRoaXMuYXhpc1NlZy5zdWJzZWdtZW50KFwielwiKTtcclxuXHJcbiAgICAgIHhTZWcuY29sb3Iuc2V0TGluZShbMCwgMCwgMjU1XSk7XHJcbiAgICAgIHhTZWcuY29sb3Iuc2V0RmFjZShbMCwgMCwgMjU1XSk7XHJcbiAgICAgIHlTZWcuY29sb3Iuc2V0TGluZShbMCwgMjU1LCAwXSk7XHJcbiAgICAgIHlTZWcuY29sb3Iuc2V0RmFjZShbMCwgMjU1LCAwXSk7XHJcbiAgICAgIHpTZWcuY29sb3Iuc2V0TGluZShbMjU1LCAwLCAwXSk7XHJcbiAgICAgIHpTZWcuY29sb3Iuc2V0RmFjZShbMjU1LCAwLCAwXSk7XHJcblxyXG4gICAgICBsZXQgeCA9IHhTZWcuaW5zZXJ0TGluZShvcmlnaW4sIHhQb2ludCk7XHJcbiAgICAgIGxldCB5ID0geVNlZy5pbnNlcnRMaW5lKG9yaWdpbiwgeVBvaW50KTtcclxuICAgICAgbGV0IHogPSB6U2VnLmluc2VydExpbmUob3JpZ2luLCB6UG9pbnQpO1xyXG5cclxuICAgICAgeFNlZy5pbnNlcnRQYXJhbWV0cmljR2VvbWV0cnkoXCJzY29uXCIsIFtcclxuICAgICAgICAuLi5Mb25nYW4uUG9pbnQuYWRkKHhQb2ludCwgTG9uZ2FuLlZlY3Rvci5tdWx0aXBseShheGlzLnhBeGlzLCAwLjUpKSxcclxuICAgICAgICAuLi5Mb25nYW4uVmVjdG9yLm11bHRpcGx5KGF4aXMueEF4aXMsIC0xKSxcclxuICAgICAgICAwLjUsXHJcbiAgICAgICAgMC4yLFxyXG4gICAgICBdKTtcclxuICAgICAgeVNlZy5pbnNlcnRQYXJhbWV0cmljR2VvbWV0cnkoXCJzY29uXCIsIFtcclxuICAgICAgICAuLi5Mb25nYW4uUG9pbnQuYWRkKHlQb2ludCwgTG9uZ2FuLlZlY3Rvci5tdWx0aXBseShheGlzLnlBeGlzLCAwLjUpKSxcclxuICAgICAgICAuLi5Mb25nYW4uVmVjdG9yLm11bHRpcGx5KGF4aXMueUF4aXMsIC0xKSxcclxuICAgICAgICAwLjUsXHJcbiAgICAgICAgMC4yLFxyXG4gICAgICBdKTtcclxuICAgICAgelNlZy5pbnNlcnRQYXJhbWV0cmljR2VvbWV0cnkoXCJzY29uXCIsIFtcclxuICAgICAgICAuLi5Mb25nYW4uUG9pbnQuYWRkKHpQb2ludCwgTG9uZ2FuLlZlY3Rvci5tdWx0aXBseShheGlzLnpBeGlzLCAwLjUpKSxcclxuICAgICAgICAuLi5Mb25nYW4uVmVjdG9yLm11bHRpcGx5KGF4aXMuekF4aXMsIC0xKSxcclxuICAgICAgICAwLjUsXHJcbiAgICAgICAgMC4yLFxyXG4gICAgICBdKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgbWF0cml4ID0gTG9uZ2FuLk1hdHJpeDQuaWRlbnRpdHkoKTtcclxuICAgIG1hdHJpeCA9IExvbmdhbi5NYXRyaXg0Lm11bHRpcGx5KG1hdHJpeCwgdHJhbnNsYXRlTWF0cml4KTtcclxuICAgIG1hdHJpeCA9IExvbmdhbi5NYXRyaXg0Lm11bHRpcGx5KG1hdHJpeCwgc2NhbGVNYXRyaXgpO1xyXG4gICAgdGhpcy5heGlzU2VnLm1vZGVsbGluZ01hdHJpeC5zZXQobWF0cml4KTtcclxuICB9XHJcblxyXG4gIC8vIGdldFRoaWNrbmVzcygpIHtcclxuICAvLyAgIHJldHVybiB0aGlzLl9wbGF0ZVRoaWNrbmVzcztcclxuICAvLyB9XHJcblxyXG4gIHB1YmxpYyBzZXRSZWZlcmVuY2UocG06IFBlcnNpc3RlbmNlTWFuYWdlcikge1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmpvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgam9pbnQgPSB0aGlzLmpvaW50c1tpXTtcclxuXHJcbiAgICAgIGlmICh0eXBlb2Ygam9pbnQgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICBsZXQgcmVzdWx0Sm9pbnQgPSBwbS5yZWZlcmVuY2VMaXN0LmdldChqb2ludCBhcyBzdHJpbmcpO1xyXG4gICAgICAgIGlmIChyZXN1bHRKb2ludCkge1xyXG4gICAgICAgICAgdGhpcy5qb2ludHNbaV0gPSByZXN1bHRKb2ludCBhcyBKb2ludE9iamVjdDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodHlwZW9mIHRoaXMucEdydXAgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgbGV0IHBHcnVwID0gcG0ucmVmZXJlbmNlTGlzdC5nZXQodGhpcy5wR3J1cCBhcyBzdHJpbmcpO1xyXG4gICAgICBpZiAocEdydXApIHtcclxuICAgICAgICB0aGlzLnBHcnVwID0gcEdydXAgYXMgUEdydXBPYmplY3Q7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNldE5lZWRVcGRhdGUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOabv+aNouadv+eahOWFtuS4reS4gOS4quepuumXtOeCuS7lpoLmnpzkuKTngrnlnKjlkIzkuIDmnb/lhoXvvIzoi6XmmK/lm5vovrnlvaLmnb/vvIzliJnlj5jmiJDkuInop5LlvaLmnb8uXHJcbiAgICogQHBhcmFtIHJlcGxhY2luZ0pvaW50IOiiq+abv+aNoueahOepuumXtOeCuVxyXG4gICAqIEBwYXJhbSBhZnRlckpvaW50IOabv+aNouWQjueahOepuumXtOeCuVxyXG4gICAqIEBwYXJhbSBpc0luU2FtZVBsYXRlIOS4pOS4queCueaYr+WQpuWcqOWQjOS4gOS4quadv+WGhVxyXG4gICAqL1xyXG4gIHB1YmxpYyBqb2ludFJlcGxhY2UoXHJcbiAgICByZXBsYWNpbmdKb2ludDogSm9pbnRPYmplY3QsXHJcbiAgICBhZnRlckpvaW50OiBKb2ludE9iamVjdCxcclxuICAgIGlzSW5TYW1lUGxhdGU6IGJvb2xlYW5cclxuICApIHtcclxuICAgIGlmICghaXNJblNhbWVQbGF0ZSkge1xyXG4gICAgICBsZXQgam9pbnRzID0gdGhpcy5qb2ludHM7XHJcblxyXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGpvaW50cy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgIGlmIChqb2ludHNbal0uaWQgPT09IHJlcGxhY2luZ0pvaW50LmlkKSB7XHJcbiAgICAgICAgICBqb2ludHNbal0gPSBhZnRlckpvaW50O1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgam9pbnRzID0gdGhpcy5qb2ludHM7XHJcblxyXG4gICAgICBsZXQgZGVsZXRlSW5kZXggPSAtMTtcclxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBqb2ludHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICBpZiAoam9pbnRzW2pdLmlkID09PSByZXBsYWNpbmdKb2ludC5pZCkge1xyXG4gICAgICAgICAgZGVsZXRlSW5kZXggPSBqO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyDku47mlbDnu4TkuK3liKDpmaTngrkuXHJcbiAgICAgIGZvciAobGV0IGogPSBkZWxldGVJbmRleDsgaiA8IGpvaW50cy5sZW5ndGggLSAxOyBqKyspIHtcclxuICAgICAgICBqb2ludHNbal0gPSBqb2ludHNbaiArIDFdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKlxyXG4gICAqIEBwYXJhbSBjb2xvciBy44CBZ+OAgWIoMjU1LDI1NSwyNTUpXHJcbiAgICogQHBhcmFtIHRyYW5zcGFyZW5jeSAwLTFcclxuICAgKi9cclxuICBzZXRDb2xvcihjb2xvcjogbnVtYmVyW10sIHRyYW5zcGFyZW5jeTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLnNlZ21lbnQuY29sb3Iuc2V0RmFjZShjb2xvci5jb25jYXQoW3RyYW5zcGFyZW5jeV0pKTtcclxuICB9XHJcblxyXG4gIGdldEFzcGVjdFJhdGlvKCkge1xyXG4gICAgLy9cclxuICAgIGxldCBhc3BlY3RSYXRpbzogYW55ID0gXCJcIjtcclxuICAgIGxldCB2aWV3ZXIgPSBQcm9jZXNzLmFjdGl2ZVByb2Nlc3MuYWN0aXZlVmlld2VyO1xyXG4gICAgbGV0IHBvc2l0aW9ucyA9IHRoaXMuZ2V0UG9zaXRpb25zKCk7XHJcbiAgICBpZiAocG9zaXRpb25zKSB7XHJcbiAgICAgIGlmIChwb3NpdGlvbnMubGVuZ3RoID09PSA5KSB7XHJcbiAgICAgICAgLy8g5LiJ6KeS5p2/LlxyXG4gICAgICAgIGxldCBwMCA9IG5ldyBGbG9hdDMyQXJyYXkoW3Bvc2l0aW9uc1swXSwgcG9zaXRpb25zWzFdLCBwb3NpdGlvbnNbMl1dKTtcclxuICAgICAgICBsZXQgcDEgPSBuZXcgRmxvYXQzMkFycmF5KFtwb3NpdGlvbnNbM10sIHBvc2l0aW9uc1s0XSwgcG9zaXRpb25zWzVdXSk7XHJcbiAgICAgICAgbGV0IHAyID0gbmV3IEZsb2F0MzJBcnJheShbcG9zaXRpb25zWzZdLCBwb3NpdGlvbnNbN10sIHBvc2l0aW9uc1s4XV0pO1xyXG4gICAgICAgIGxldCBwMHAxID0gTG9uZ2FuLlBvaW50LnN1YnRyYWN0KHAxLCBwMCk7XHJcbiAgICAgICAgbGV0IHAwcDIgPSBMb25nYW4uUG9pbnQuc3VidHJhY3QocDIsIHAwKTtcclxuICAgICAgICBsZXQgcDFwMiA9IExvbmdhbi5Qb2ludC5zdWJ0cmFjdChwMiwgcDEpO1xyXG4gICAgICAgIGxldCBhID0gTG9uZ2FuLlZlY3Rvci5tb2R1bGUocDBwMSk7XHJcbiAgICAgICAgbGV0IGIgPSBMb25nYW4uVmVjdG9yLm1vZHVsZShwMHAyKTtcclxuICAgICAgICBsZXQgYyA9IExvbmdhbi5WZWN0b3IubW9kdWxlKHAxcDIpO1xyXG4gICAgICAgIGxldCBtYXhOdW0gPSBNYXRoLm1heChhLCBiLCBjKTtcclxuXHJcbiAgICAgICAgbGV0IG5vcjEgPSBMb25nYW4uVmVjdG9yLm5vcm1hbGl6ZVZlY3RvcihwMHAxKTtcclxuICAgICAgICBsZXQgbm9yMiA9IExvbmdhbi5WZWN0b3Iubm9ybWFsaXplVmVjdG9yKHAwcDIpO1xyXG4gICAgICAgIGxldCBhcmVhID0gMC41ICogYSAqIGIgKiBNYXRoLnNpbihMb25nYW4uVmVjdG9yLmFuZ2xlKG5vcjEsIG5vcjIpKTtcclxuICAgICAgICBsZXQgZDEgPSBtYXhOdW0gKiAoYSArIGIgKyBjKTtcclxuICAgICAgICBsZXQgZDIgPSA0ICogTWF0aC5zcXJ0KDMpICogYXJlYTtcclxuICAgICAgICBhc3BlY3RSYXRpbyA9IGQxIC8gZDI7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8g5Zub6L655b2i5p2/LlxyXG4gICAgICAgIGxldCBwMCA9IG5ldyBGbG9hdDMyQXJyYXkoW3Bvc2l0aW9uc1swXSwgcG9zaXRpb25zWzFdLCBwb3NpdGlvbnNbMl1dKTtcclxuICAgICAgICBsZXQgcDEgPSBuZXcgRmxvYXQzMkFycmF5KFtwb3NpdGlvbnNbM10sIHBvc2l0aW9uc1s0XSwgcG9zaXRpb25zWzVdXSk7XHJcbiAgICAgICAgbGV0IHAyID0gbmV3IEZsb2F0MzJBcnJheShbcG9zaXRpb25zWzZdLCBwb3NpdGlvbnNbN10sIHBvc2l0aW9uc1s4XV0pO1xyXG4gICAgICAgIGxldCBwMyA9IG5ldyBGbG9hdDMyQXJyYXkoW3Bvc2l0aW9uc1s5XSwgcG9zaXRpb25zWzEwXSwgcG9zaXRpb25zWzExXV0pO1xyXG5cclxuICAgICAgICBsZXQgcDBwMSA9IExvbmdhbi5Qb2ludC5zdWJ0cmFjdChwMSwgcDApO1xyXG4gICAgICAgIGxldCBwMHAzID0gTG9uZ2FuLlBvaW50LnN1YnRyYWN0KHAzLCBwMCk7XHJcbiAgICAgICAgbGV0IHAycDEgPSBMb25nYW4uUG9pbnQuc3VidHJhY3QocDEsIHAyKTtcclxuICAgICAgICBsZXQgcDJwMyA9IExvbmdhbi5Qb2ludC5zdWJ0cmFjdChwMywgcDIpO1xyXG5cclxuICAgICAgICBsZXQgYjAgPSBMb25nYW4uVmVjdG9yLm1vZHVsZShwMHAxKTtcclxuICAgICAgICBsZXQgYjEgPSBMb25nYW4uVmVjdG9yLm1vZHVsZShwMnAxKTtcclxuICAgICAgICBsZXQgYjIgPSBMb25nYW4uVmVjdG9yLm1vZHVsZShwMnAzKTtcclxuICAgICAgICBsZXQgYjMgPSBMb25nYW4uVmVjdG9yLm1vZHVsZShwMHAzKTtcclxuXHJcbiAgICAgICAgTG9uZ2FuLlZlY3Rvci5ub3JtYWxpemUocDBwMSk7XHJcbiAgICAgICAgTG9uZ2FuLlZlY3Rvci5ub3JtYWxpemUocDBwMyk7XHJcbiAgICAgICAgTG9uZ2FuLlZlY3Rvci5ub3JtYWxpemUocDJwMSk7XHJcbiAgICAgICAgTG9uZ2FuLlZlY3Rvci5ub3JtYWxpemUocDJwMyk7XHJcblxyXG4gICAgICAgIGxldCBkMSA9IE1hdGgubWF4KGIwLCBiMSwgYjIsIGIzKSAqIChiMCArIGIxICsgYjIgKyBiMyk7XHJcbiAgICAgICAgbGV0IGQyID1cclxuICAgICAgICAgIDQgKlxyXG4gICAgICAgICAgKDAuNSAqIGIwICogYjMgKiBNYXRoLnNpbihMb25nYW4uVmVjdG9yLmFuZ2xlKHAwcDEsIHAwcDMpKSArXHJcbiAgICAgICAgICAgIDAuNSAqIGIxICogYjIgKiBNYXRoLnNpbihMb25nYW4uVmVjdG9yLmFuZ2xlKHAycDEsIHAycDMpKSk7XHJcbiAgICAgICAgYXNwZWN0UmF0aW8gPSBkMSAvIGQyO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gXCJcIjtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYXNwZWN0UmF0aW87XHJcbiAgfVxyXG5cclxuICBnZXRDZW50ZXIoKSB7XHJcbiAgICBsZXQgcG9pbnRzID0gdGhpcy5nZXRQb3NpdGlvbnMoKTtcclxuICAgIGxldCB4QSA9IDA7XHJcbiAgICBsZXQgeUEgPSAwO1xyXG4gICAgbGV0IHpBID0gMDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcG9pbnRzLmxlbmd0aCAvIDM7IGkrKykge1xyXG4gICAgICB4QSArPSBwb2ludHNbMyAqIGkgKyAwXTtcclxuICAgICAgeUEgKz0gcG9pbnRzWzMgKiBpICsgMV07XHJcbiAgICAgIHpBICs9IHBvaW50c1szICogaSArIDJdO1xyXG4gICAgfVxyXG4gICAgeEEgLz0gcG9pbnRzLmxlbmd0aCAvIDM7XHJcbiAgICB5QSAvPSBwb2ludHMubGVuZ3RoIC8gMztcclxuICAgIHpBIC89IHBvaW50cy5sZW5ndGggLyAzO1xyXG5cclxuICAgIHJldHVybiBuZXcgRmxvYXQzMkFycmF5KFt4QSwgeUEsIHpBXSk7XHJcbiAgfVxyXG5cclxuICBnZXRMb2NhbEF4aXMoKSB7XHJcbiAgICBsZXQgcG9pbnRzID0gdGhpcy5nZXRQb3NpdGlvbnMoKTtcclxuICAgIGxldCBwMCA9IG5ldyBGbG9hdDMyQXJyYXkoW3BvaW50c1swXSwgcG9pbnRzWzFdLCBwb2ludHNbMl1dKTtcclxuICAgIGxldCBwMSA9IG5ldyBGbG9hdDMyQXJyYXkoW3BvaW50c1szXSwgcG9pbnRzWzRdLCBwb2ludHNbNV1dKTtcclxuICAgIGxldCBwMiA9IG5ldyBGbG9hdDMyQXJyYXkoW3BvaW50c1s2XSwgcG9pbnRzWzddLCBwb2ludHNbOF1dKTtcclxuXHJcbiAgICBsZXQgeEF4aXMgPSBMb25nYW4uUG9pbnQuc3VidHJhY3QocDEsIHAwKTtcclxuICAgIExvbmdhbi5WZWN0b3Iubm9ybWFsaXplKHhBeGlzKTtcclxuICAgIGxldCB5QXhpcyA9IExvbmdhbi5Qb2ludC5zdWJ0cmFjdChwMiwgcDEpO1xyXG4gICAgTG9uZ2FuLlZlY3Rvci5ub3JtYWxpemUoeUF4aXMpO1xyXG4gICAgbGV0IHpBeGlzID0gTG9uZ2FuLlZlY3Rvci5jcm9zcyh4QXhpcywgeUF4aXMpO1xyXG4gICAgTG9uZ2FuLlZlY3Rvci5ub3JtYWxpemUoekF4aXMpO1xyXG4gICAgeUF4aXMgPSBMb25nYW4uVmVjdG9yLmNyb3NzKHpBeGlzLCB4QXhpcyk7XHJcbiAgICBMb25nYW4uVmVjdG9yLm5vcm1hbGl6ZSh5QXhpcyk7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgeEF4aXMsXHJcbiAgICAgIHlBeGlzLFxyXG4gICAgICB6QXhpcyxcclxuICAgIH07XHJcbiAgfVxyXG59XHJcblxyXG4vKipcclxuICog5p2/6ZmE5Yqg5bGe5oCn57uEXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgUGxhdGVBZGRpdGlvbmFsUHJvcGVydHkge1xyXG4gIC8vIOWIm+W7uuadhuS7tuaXtuaYr+WQpuS9v+eUqOivpeWxnuaApy5cclxuICB1c2VEZWZhdWx0UHJvcGVydHkgPSBmYWxzZTtcclxuICAvLyDorqHnrpfpgInpoblcclxuICBycHNrOiBzdHJpbmcgPSBudWxsO1xyXG4gIC8vIOWBj+W/g+mAiemhueOAgVxyXG4gIG9mZnNldE9wdGlvbjogc3RyaW5nID0gbnVsbDtcclxuICAvLyDlkITngrnlgY/lv4Pph49cclxuICBqb2ludEEgPSBbMCwgMCwgMF07XHJcbiAgam9pbnRCID0gWzAsIDAsIDBdO1xyXG4gIGpvaW50QyA9IFswLCAwLCAwXTtcclxuICBqb2ludEQgPSBbMCwgMCwgMF07XHJcbiAgXHJcbiAgb3ZlcnJpZWRTdHJlZVJlcG9ydDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIG92ZXJyaWVkUGxhdGVPZmZzZXQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBvdmVycmllZEpvaW50QTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIG92ZXJyaWVkSm9pbnRCOiBib29sZWFuID0gZmFsc2U7XHJcbiAgb3ZlcnJpZWRKb2ludEM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBvdmVycmllZEpvaW50RDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBfaW5zdGFuY2U6IFBsYXRlQWRkaXRpb25hbFByb3BlcnR5O1xyXG4gIHB1YmxpYyBzdGF0aWMgZ2V0SW5zdGFuY2UoKTogUGxhdGVBZGRpdGlvbmFsUHJvcGVydHkge1xyXG4gICAgaWYgKHRoaXMuX2luc3RhbmNlID09IG51bGwpIHtcclxuICAgICAgdGhpcy5faW5zdGFuY2UgPSBuZXcgUGxhdGVBZGRpdGlvbmFsUHJvcGVydHkoKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIF9pbnN0YW5jZTogUGxhdGVBZGRpdGlvbmFsUHJvcGVydHk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgLy8gdGhpcy5ycHNrID0gXCLnqbpcIjtcclxuICAgIC8vIHRoaXMub2Zmc2V0T3B0aW9uID0gXCIxXCI7XHJcbiAgICAvLyB0aGlzLm9mZnNldHMgPSBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF07XHJcbiAgfVxyXG59XHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQWtCQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFBQTtBQW1QQTtBQUFBO0FBbFBBO0FBRUE7QUFNQTtBQUdBO0FBS0E7QUFRQTtBQUtBO0FBS0E7QUFJQTtBQUtBO0FBS0E7QUFJQTtBQUVBO0FBRUE7QUFFQTtBQUVBO0FBR0E7QUFNQTtBQStLQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOztBQUdBO0FBckxBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFFQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTs7OztBQUVBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBR0E7O0FBRUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBOztBQUtBOztBQUVBOzs7O0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7Ozs7QUFFQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUlBOzs7O0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7Ozs7QUFFQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOzs7O0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7OztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBZUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFHQTtBQUNBOztBQUdBO0FBQ0E7O0FBR0E7QUFDQTs7QUFHQTtBQUNBOztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFJQTtBQUNBOztBQUdBO0FBQ0E7O0FBR0E7QUFDQTs7QUFHQTtBQUNBOztBQUdBO0FBRUE7QUFFQTtBQUVBO0FBRUE7QUFDQTs7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7QUFDQTtBQUNBO0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQTtBQUNBOztBQUdBO0FBQ0E7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7O0FBR0E7QUFDQTtBQUVBO0FBRUE7QUFHQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7Ozs7O0FBS0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUtBOztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFFQTtBQUNBO0FBQ0E7Ozs7O0FBTUE7QUFDQTtBQU1BO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUVBO0FBQ0E7QUFDQTs7Ozs7QUFNQTtBQUNBO0FBSUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFLQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUdBO0FBS0E7QUFDQTs7QUFPQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTs7O0FBSUE7QUFDQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUVBO0FBQ0E7QUFFQTtBQUtBO0FBS0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUE4RkE7QUFLQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFJQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBS0E7QUFDQTtBQUdBOzs7QUFHQTtBQUNBOztBQUdBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBOzs7QUFLQTtBQUVBO0FBQ0E7QUFDQTs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFNQTtBQUNBOztBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUdBO0FBQ0E7QUFDQTs7QUFHQTtBQUNBO0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUdBO0FBQ0E7QUFJQTtBQUlBO0FBUUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQTtBQUNBO0FBS0E7QUFDQTtBQUtBO0FBSUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBTUE7QUFNQTs7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTs7O0FBSUE7QUFDQTtBQVFBO0FBS0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBS0E7QUFDQTs7O0FBR0E7QUFPQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBSUE7O0FBRUE7QUFDQTs7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUEzd0NBO0FBZ3hDQTtBQThCQTtBQTVCQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWdCQTtBQWJBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBU0E7QUFBQTtBQW5DQTs7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./packages/caeDesign/src/gsDevFx/objects/caeObjects/plateObject.ts\n");
|
|
4474
|
+
eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__, exports, __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\"), __webpack_require__(/*! gs-bim-air */ \"./node_modules/gs-bim-air/lib/BimAir.umd.min.js\"), __webpack_require__(/*! ./pGrupObject */ \"./packages/caeDesign/src/gsDevFx/objects/caeObjects/pGrupObject.ts\"), __webpack_require__(/*! gs-ceec-design */ \"./packages/ceecDesign/src/index.ts\"), __webpack_require__(/*! ../../../caeCardEditor/caeCardObjects/cardPlate */ \"./packages/caeDesign/src/caeCardEditor/caeCardObjects/cardPlate.ts\"), __webpack_require__(/*! ../../../caeCardEditor/caeCardObjects/cardPlateOffsets */ \"./packages/caeDesign/src/caeCardEditor/caeCardObjects/cardPlateOffsets.ts\"), __webpack_require__(/*! gs-ceec-design */ \"./packages/ceecDesign/src/index.ts\"), __webpack_require__(/*! gs-ceec-design */ \"./packages/ceecDesign/src/index.ts\"), __webpack_require__(/*! ./objectColors */ \"./packages/caeDesign/src/gsDevFx/objects/caeObjects/objectColors.ts\"), __webpack_require__(/*! gs-ceec-design */ \"./packages/ceecDesign/src/index.ts\"), __webpack_require__(/*! ../../../utility/utility */ \"./packages/caeDesign/src/utility/utility.ts\"), __webpack_require__(/*! ../../../gsDevFx/process */ \"./packages/caeDesign/src/gsDevFx/process.ts\")], __WEBPACK_AMD_DEFINE_RESULT__ = (function (require, exports, tslib_1, gs_bim_air_1, pGrupObject_1, gs_ceec_design_1, cardPlate_1, cardPlateOffsets_1, gs_ceec_design_2, gs_ceec_design_3, objectColors_1, gs_ceec_design_4, utility_1, process_1) {\n \"use strict\";\n\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n exports.PlateAdditionalProperty = exports.PlateObject = exports.ViewOption = void 0;\n var ViewOption;\n (function (ViewOption) {\n ViewOption[ViewOption[\"Line\"] = 0] = \"Line\";\n ViewOption[ViewOption[\"Body\"] = 1] = \"Body\";\n })(ViewOption = exports.ViewOption || (exports.ViewOption = {}));\n var PlateObject = function (_super) {\n tslib_1.__extends(PlateObject, _super);\n function PlateObject(name) {\n var _this = _super.call(this) || this;\n _this.typeName = \"PlateObject\";\n _this._joints = new Array();\n _this._pGrup = null;\n _this._plateThickness = null;\n _this._offsetOption = null;\n _this._offsets = new Array();\n _this.rpsk = \"\";\n _this.materialData_E = null;\n _this.poissonRatiou = null;\n _this.yieldStress = null;\n _this.weightDensity = null;\n _this.remarks = \"\";\n _this.viewOption = ViewOption.Body;\n _this._additionalProperty = null;\n _this.faceColor = null;\n _this._isDrawLabel = false;\n _this._isDrawAxis = false;\n _this.finiteElementCoeff = 1.0;\n _this.name = name;\n _this.offsetOption = \"\";\n _this.instanceTypes.add(\"main\", gs_ceec_design_3.InstanceDesignBaseObject.prototype);\n _this.isDrawSvg = true;\n var ro = process_1.Process.activeProcess.getRenderObjectBySegmentKey(_this.segment.key);\n return _this;\n }\n Object.defineProperty(PlateObject.prototype, \"additionalProperty\", {\n get: function get() {\n return this._additionalProperty;\n },\n set: function set(value) {\n this._additionalProperty = value;\n this.additionalPropertyActive();\n },\n enumerable: false,\n configurable: true\n });\n PlateObject.prototype.additionalPropertyActive = function () {\n var property = this.additionalProperty;\n if (property) {\n if (property.rpsk && property.overriedStreeReport) {\n this.rpsk = gs_bim_air_1.Longan.deepClone(property.rpsk);\n }\n if (property.offsetOption !== null && property.overriedPlateOffset) {\n this.offsetOption = gs_bim_air_1.Longan.deepClone(property.offsetOption);\n }\n if (property.offsetOption && property.offsetOption !== \"0\") {\n this.offsets = [0, 0, 0, 0, 0, 0, 0, 0, 0];\n }\n if (property.offsetOption && property.offsetOption !== \"0\" && property.overriedJointA) {\n this.offsets[0] = property.jointA[0];\n this.offsets[1] = property.jointA[1];\n this.offsets[2] = property.jointA[2];\n }\n if (property.offsetOption && property.offsetOption !== \"0\" && property.overriedJointB) {\n this.offsets[3] = property.jointB[0];\n this.offsets[4] = property.jointB[1];\n this.offsets[5] = property.jointB[2];\n }\n if (property.offsetOption && property.offsetOption !== \"0\" && property.overriedJointC) {\n this.offsets[6] = property.jointC[0];\n this.offsets[7] = property.jointC[1];\n this.offsets[8] = property.jointC[2];\n }\n if (property.offsetOption && property.offsetOption !== \"0\" && property.overriedJointD && this.joints.length > 3) {\n this.offsets[9] = property.jointD[0];\n this.offsets[10] = property.jointD[1];\n this.offsets[11] = property.jointD[2];\n }\n }\n };\n Object.defineProperty(PlateObject.prototype, \"joints\", {\n get: function get() {\n return this._joints;\n },\n set: function set(value) {\n this._joints = value;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PlateObject.prototype, \"pGrup\", {\n get: function get() {\n return this._pGrup;\n },\n set: function set(value) {\n if (this._pGrup instanceof pGrupObject_1.PGrupObject) {\n var list = process_1.Process.activeProcess.pgrupMapReleativePlates.get(this._pGrup);\n list.remove(this);\n }\n this._pGrup = value;\n if (value instanceof pGrupObject_1.PGrupObject) {\n var list = process_1.Process.activeProcess.pgrupMapReleativePlates.get(value);\n if (!list) {\n list = new gs_bim_air_1.Longan.List();\n process_1.Process.activeProcess.pgrupMapReleativePlates.set(value, list);\n }\n list.add(this);\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PlateObject.prototype, \"plateThickness\", {\n get: function get() {\n return this._plateThickness;\n },\n set: function set(value) {\n this._plateThickness = value;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PlateObject.prototype, \"offsetOption\", {\n get: function get() {\n return this._offsetOption;\n },\n set: function set(value) {\n this._offsetOption = value;\n if (!value) {\n if (this.offsets) {\n for (var i = 0; i < this.offsets.length; i++) {\n this.offsets[i] = 0;\n }\n }\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PlateObject.prototype, \"offsets\", {\n get: function get() {\n return this._offsets;\n },\n set: function set(value) {\n this._offsets = value;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PlateObject.prototype, \"isDrawLabel\", {\n get: function get() {\n return this._isDrawLabel;\n },\n set: function set(isDrawLabel) {\n this._isDrawLabel = isDrawLabel;\n if (isDrawLabel) {} else {\n if (this.labelRect) {\n this.labelRect.remove();\n }\n this.labelRect = null;\n this.labelText && this.labelText.clear();\n this.labelText = null;\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(PlateObject.prototype, \"isDrawAxis\", {\n get: function get() {\n return this._isDrawAxis;\n },\n set: function set(isDrawAxis) {\n this._isDrawAxis = isDrawAxis;\n if (isDrawAxis) {\n this.drawAxis();\n } else {\n if (this.axisSeg) {\n this.axisSeg.clearAll();\n this.axisSeg = null;\n }\n }\n },\n enumerable: false,\n configurable: true\n });\n PlateObject.checkNamelegal = function (name) {\n var reg = /^[A-Z0-9]*$/;\n if (!reg.test(name) || name.trimEnd().length > 4) {\n console.log(\"板名称不符合规范\");\n return false;\n }\n return true;\n };\n PlateObject.prototype.getThickness = function () {\n if (this.pGrup) {\n if (this.pGrup instanceof pGrupObject_1.PGrupObject && this.pGrup.checkBusinessStateIsActive()) {\n return this.pGrup.thickness;\n } else {\n return null;\n }\n } else {\n return null;\n }\n };\n PlateObject.prototype.serialize = function () {\n var obj = _super.prototype.serialize.call(this);\n if (this.joints) {\n var ids = new Array();\n for (var i = 0; i < this.joints.length; i++) {\n if (this.joints[i].typeName) {\n ids.push(this.joints[i].id);\n } else {\n ids.push(this.joints[i]);\n }\n }\n obj.joints = ids;\n }\n if (this.pGrup) {\n obj.pGrup = this.pGrup.id;\n }\n if (this.notNullAndNotUndefined(this.plateThickness)) {\n obj.plateThickness = this.plateThickness;\n }\n if (this.notNullAndNotUndefined(this.offsetOption)) {\n obj.offsetOption = this.offsetOption;\n }\n if (this.offsets) {\n obj.offsets = this.offsets;\n }\n if (this.notNullAndNotUndefined(this.rpsk)) {\n obj.rpsk = this.rpsk;\n }\n if (this.notNullAndNotUndefined(this.materialData_E)) {\n obj.materialData_E = this.materialData_E;\n }\n if (this.notNullAndNotUndefined(this.poissonRatiou)) {\n obj.poissonRatiou = this.poissonRatiou;\n }\n if (this.notNullAndNotUndefined(this.yieldStress)) {\n obj.yieldStress = this.yieldStress;\n }\n if (this.notNullAndNotUndefined(this.weightDensity)) {\n obj.weightDensity = this.weightDensity;\n }\n if (this.notNullAndNotUndefined(this.remarks)) {\n obj.remarks = this.remarks;\n }\n return obj;\n };\n PlateObject.prototype.deserialize = function (obj, pm) {\n _super.prototype.deserialize.call(this, obj, pm);\n if (obj.joints) {\n for (var i = 0; i < obj.joints.length; i++) {\n var joint = pm.referenceList.get(obj.joints[i]);\n if (joint) {\n this.joints.push(joint);\n } else {\n this.joints.push(obj.joints[i]);\n pm.needReferenceList.add(this);\n }\n }\n }\n if (obj.pGrup) {\n var pGrup = pm.referenceList.get(obj.pGrup);\n if (pGrup) {\n this.pGrup = pGrup;\n } else {\n this.pGrup = obj.pGrup;\n pm.needReferenceList.add(this);\n }\n }\n if (this.notNullAndNotUndefined(obj.plateThickness)) {\n this.plateThickness = obj.plateThickness;\n }\n if (this.notNullAndNotUndefined(obj.offsetOption)) {\n this._offsetOption = obj.offsetOption;\n }\n if (obj.offsets) {\n this._offsets = (0, utility_1.CaeNumberArray)(obj.offsets);\n }\n if (this.notNullAndNotUndefined(obj.rpsk)) {\n this.rpsk = obj.rpsk;\n }\n this.materialData_E = (0, utility_1.CaeNumber)(obj.materialData_E);\n this.poissonRatiou = (0, utility_1.CaeNumber)(obj.poissonRatiou);\n this.yieldStress = (0, utility_1.CaeNumber)(obj.yieldStress);\n this.weightDensity = (0, utility_1.CaeNumber)(obj.weightDensity);\n if (this.notNullAndNotUndefined(obj.remarks)) {\n this.remarks = obj.remarks;\n }\n this.setNeedUpdate();\n };\n PlateObject.prototype.clone = function (cloneObj, cloneManager) {\n cloneObj.joints = tslib_1.__spreadArray([], tslib_1.__read(this.joints), false);\n cloneObj.pGrup = this.pGrup;\n cloneObj.plateThickness = gs_bim_air_1.Longan.deepClone(this.plateThickness);\n cloneObj.offsetOption = gs_bim_air_1.Longan.deepClone(this.offsetOption);\n if (this.offsets) {\n cloneObj.offsets = gs_bim_air_1.Longan.deepClone(this.offsets);\n }\n cloneObj = _super.prototype.clone.call(this, cloneObj);\n return cloneObj;\n };\n PlateObject.prototype.serializeToCard = function () {\n var _a;\n var cardPlate = new cardPlate_1.CardPlate();\n cardPlate.lineLabel.value = \"PLATE\";\n cardPlate.plateLabel.value = this.name;\n cardPlate.jointA_Name.value = this.joints[0].name;\n cardPlate.jointB_Name.value = this.joints[1].name;\n cardPlate.jointC_Name.value = this.joints[2].name;\n cardPlate.jointD_Name.value = this.joints[3] ? this.joints[3].name : \"\";\n cardPlate.plateGrupLabel.value = this.pGrup ? this.pGrup.name : \"\";\n cardPlate.rpsk.value = this.rpsk;\n cardPlate.plateThickness.value = this.plateThickness;\n cardPlate.offsetOption.value = this.offsetOption;\n cardPlate.materialData_E.value = this.materialData_E;\n cardPlate.poissonRatiou.value = this.poissonRatiou;\n cardPlate.yieldStress.value = this.yieldStress;\n cardPlate.weightDensity.value = this.weightDensity;\n cardPlate.remarks.value = this.remarks;\n var result = cardPlate.getLine();\n if (((_a = this.offsets) === null || _a === void 0 ? void 0 : _a.length) >= 3) {\n result += \"\\n\";\n var cardPlateOffset1 = new cardPlateOffsets_1.CardPlateOffsets();\n cardPlateOffset1.lineLabel.value = \"PLATE OFFSETS\";\n cardPlateOffset1.comments.value = \"\";\n cardPlateOffset1.firstJoint_XOffset.value = this.offsets[0].toString();\n cardPlateOffset1.firstJoint_YOffset.value = this.offsets[1].toString();\n cardPlateOffset1.firstJoint_ZOffset.value = this.offsets[2].toString();\n cardPlateOffset1.secondJoint_XOffset.value = this.offsets[3] !== null && this.offsets[3] !== undefined ? this.offsets[3].toString() : \"\";\n cardPlateOffset1.secondJoint_YOffset.value = this.offsets[4] !== null && this.offsets[3] !== undefined ? this.offsets[4].toString() : \"\";\n cardPlateOffset1.secondJoint_ZOffset.value = this.offsets[5] !== null && this.offsets[3] !== undefined ? this.offsets[5].toString() : \"\";\n result += cardPlateOffset1.getLine() + \"\\n\";\n var cardPlateOffset2 = new cardPlateOffsets_1.CardPlateOffsets();\n cardPlateOffset2.lineLabel.value = \"PLATE OFFSETS\";\n cardPlateOffset2.comments.value = \"\";\n cardPlateOffset2.firstJoint_XOffset.value = this.offsets[6] !== null && this.offsets[3] !== undefined ? this.offsets[6].toString() : \"\";\n cardPlateOffset2.firstJoint_YOffset.value = this.offsets[7] !== null && this.offsets[3] !== undefined ? this.offsets[7].toString() : \"\";\n cardPlateOffset2.firstJoint_ZOffset.value = this.offsets[8] !== null && this.offsets[3] !== undefined ? this.offsets[8].toString() : \"\";\n if (this.offsets.length > 9) {\n if (this.offsets[9] !== null && this.offsets[9] !== undefined) {\n cardPlateOffset2.secondJoint_XOffset.value = this.offsets[9].toString();\n }\n if (this.offsets[10] !== null && this.offsets[10] !== undefined) {\n cardPlateOffset2.secondJoint_YOffset.value = this.offsets[10].toString();\n }\n if (this.offsets[11] !== null && this.offsets[11] !== undefined) {\n cardPlateOffset2.secondJoint_ZOffset.value = this.offsets[11].toString();\n }\n } else {\n cardPlateOffset2.secondJoint_XOffset.value = null;\n cardPlateOffset2.secondJoint_YOffset.value = null;\n cardPlateOffset2.secondJoint_ZOffset.value = null;\n }\n result += cardPlateOffset2.getLine();\n }\n return result;\n };\n PlateObject.prototype.tempDelete = function (viewer) {\n var componentGroups = viewer.process.findRenderObjectByName(\"构件分组分色\");\n if (componentGroups) {\n for (var i = 0; i < componentGroups.childObjects.length; i++) {\n var obj = componentGroups.childObjects[i];\n for (var j = 0; j < obj.refercenPlateIds.count(); j++) {\n if (obj.refercenPlateIds.items[j] === this.id) {\n obj.refercenPlateIds.remove(this.id);\n }\n }\n }\n }\n _super.prototype.tempDelete.call(this, viewer);\n };\n PlateObject.prototype.reverseJointAndOffset = function () {\n if (this.joints) {\n this.joints = this.joints.reverse();\n }\n if (this.offsets) {\n var offsets = new Array();\n for (var i = 0; i < this.offsets.length; i += 3) {\n var offset = new Array(this.offsets[i], this.offsets[i + 1], this.offsets[i + 2]);\n offsets.push(offset);\n }\n var reverseOffsets = new Array();\n for (var i = offsets.length - 1; i >= 0; i--) {\n var offset = offsets[i];\n reverseOffsets.push(offset[0]);\n reverseOffsets.push(offset[1]);\n reverseOffsets.push(offset[2]);\n }\n }\n };\n PlateObject.prototype.getPositionsBeforePGrupZOffset = function () {\n var positions = new Array();\n for (var i = 0; i < this.joints.length; i++) {\n positions.push(this.joints[i].position[0]);\n positions.push(this.joints[i].position[1]);\n positions.push(this.joints[i].position[2]);\n }\n if (this.offsets) {\n if (this.offsetOption === \"1\") {\n for (var i = 0; i < this.offsets.length; i++) {\n if (positions[i] !== null && positions[i] !== undefined) {\n positions[i] += this.offsets[i] / 100;\n }\n }\n } else if (this.offsetOption === \"2\") {\n for (var i = 0; i < this.offsets.length; i++) {\n if (positions[i] !== null && positions[i] !== undefined) {\n positions[i] += this.offsets[i] / 100;\n }\n }\n }\n }\n return positions;\n };\n PlateObject.prototype.getPositions = function () {\n var positions = new Array();\n for (var i = 0; i < this.joints.length; i++) {\n positions.push(this.joints[i].position[0]);\n positions.push(this.joints[i].position[1]);\n positions.push(this.joints[i].position[2]);\n }\n if (this.offsets) {\n if (this.offsetOption === \"1\") {\n for (var i = 0; i < this.offsets.length; i++) {\n if (positions[i] !== null && positions[i] !== undefined) {\n positions[i] += this.offsets[i] / 100;\n }\n }\n } else if (this.offsetOption === \"2\") {\n for (var i = 0; i < this.offsets.length; i++) {\n if (positions[i] !== null && positions[i] !== undefined) {\n positions[i] += this.offsets[i] / 100;\n }\n }\n }\n }\n if (this.pGrup) {\n if (this.pGrup.plateZOffset !== undefined && this.pGrup.plateZOffset !== null) {\n var normal = this.getNormal();\n var offset = gs_bim_air_1.Longan.Vector.multiply(normal, this.pGrup.plateZOffset / 100);\n var p0 = new Float32Array([positions[0], positions[1], positions[2]]);\n var p1 = new Float32Array([positions[3], positions[4], positions[5]]);\n var p2 = new Float32Array([positions[6], positions[7], positions[8]]);\n var p3 = null;\n if (positions.length > 9) {\n p3 = new Float32Array([positions[9], positions[10], positions[11]]);\n }\n p0 = gs_bim_air_1.Longan.Point.add(p0, offset);\n p1 = gs_bim_air_1.Longan.Point.add(p1, offset);\n p2 = gs_bim_air_1.Longan.Point.add(p2, offset);\n if (p3) {\n p3 = gs_bim_air_1.Longan.Point.add(p3, offset);\n }\n positions = new Array();\n positions.push(p0[0]);\n positions.push(p0[1]);\n positions.push(p0[2]);\n positions.push(p1[0]);\n positions.push(p1[1]);\n positions.push(p1[2]);\n positions.push(p2[0]);\n positions.push(p2[1]);\n positions.push(p2[2]);\n if (p3) {\n positions.push(p3[0]);\n positions.push(p3[1]);\n positions.push(p3[2]);\n }\n }\n }\n positions = this.processByCoeff(positions);\n return positions;\n };\n PlateObject.prototype.getPositionsNotOffset = function () {\n var positions = new Array();\n for (var i = 0; i < this.joints.length; i++) {\n positions.push(this.joints[i].position[0]);\n positions.push(this.joints[i].position[1]);\n positions.push(this.joints[i].position[2]);\n }\n return positions;\n };\n PlateObject.prototype.processByCoeff = function (positions) {\n var p0 = new Float32Array([positions[0], positions[1], positions[2]]);\n var p1 = new Float32Array([positions[3], positions[4], positions[5]]);\n var p2 = new Float32Array([positions[6], positions[7], positions[8]]);\n var p3 = null;\n if (positions.length > 9) {\n p3 = new Float32Array([positions[9], positions[10], positions[11]]);\n }\n var center = new Float32Array([(p0[0] + p1[0] + p2[0]) / 3, (p0[1] + p1[1] + p2[1]) / 3, (p0[2] + p1[2] + p2[2]) / 3]);\n if (p3) {\n center = new Float32Array([(p0[0] + p1[0] + p2[0] + p3[0]) / 4, (p0[1] + p1[1] + p2[1] + p3[1]) / 4, (p0[2] + p1[2] + p2[2] + p3[2]) / 4]);\n }\n p0 = this.getFiniteElementCoeffPoint(p0, center);\n p1 = this.getFiniteElementCoeffPoint(p1, center);\n p2 = this.getFiniteElementCoeffPoint(p2, center);\n var result = new Array();\n result.push(p0[0]);\n result.push(p0[1]);\n result.push(p0[2]);\n result.push(p1[0]);\n result.push(p1[1]);\n result.push(p1[2]);\n result.push(p2[0]);\n result.push(p2[1]);\n result.push(p2[2]);\n if (p3) {\n p3 = this.getFiniteElementCoeffPoint(p3, center);\n result.push(p3[0]);\n result.push(p3[1]);\n result.push(p3[2]);\n }\n return result;\n };\n PlateObject.prototype.getFiniteElementCoeffPoint = function (point, center) {\n var v1 = gs_bim_air_1.Longan.Point.subtract(point, center);\n var m1 = gs_bim_air_1.Longan.Vector.module(v1);\n var result = gs_bim_air_1.Longan.Point.add(center, gs_bim_air_1.Longan.Vector.multiply(gs_bim_air_1.Longan.Vector.normalizeVector(v1), m1 * this.finiteElementCoeff));\n return result;\n };\n PlateObject.prototype.render = function () {\n this.clearSvg();\n this.drawSvg();\n if (this.joints && this.joints.length > 0) {\n if (typeof this.joints[0] === \"string\") {\n return;\n }\n }\n if (this.joints.length > 0) {\n var positions = this.getPositions();\n this.points = tslib_1.__spreadArray([], tslib_1.__read(positions), false);\n this.points.push(positions[0]);\n this.points.push(positions[1]);\n this.points.push(positions[2]);\n _super.prototype.render.call(this);\n this.drawLine(positions);\n if (this.faceColor) {\n this.segment.color.faceColor = this.faceColor;\n } else {\n this.segment.color.faceColor = objectColors_1.ObjectColor.plateColor;\n }\n }\n };\n PlateObject.prototype.getNormal = function () {\n var positions = this.getPositionsBeforePGrupZOffset();\n var p0 = new Float32Array([positions[0], positions[1], positions[2]]);\n var p1 = new Float32Array([positions[3], positions[4], positions[5]]);\n var p2 = new Float32Array([positions[6], positions[7], positions[8]]);\n var joints = new Array();\n joints.push(p0);\n joints.push(p1);\n joints.push(p2);\n var p0p1 = gs_bim_air_1.Longan.Point.subtract(p1, p0);\n var p1p2 = gs_bim_air_1.Longan.Point.subtract(p2, p1);\n gs_bim_air_1.Longan.Vector.normalize(p0p1);\n gs_bim_air_1.Longan.Vector.normalize(p1p2);\n var normal = gs_bim_air_1.Longan.Vector.cross(p0p1, p1p2);\n gs_bim_air_1.Longan.Vector.normalize(normal);\n return normal;\n };\n PlateObject.checkPlateLegal = function (positions) {\n var isLegal = true;\n var p0 = new Float32Array([positions[0], positions[1], positions[2]]);\n var p1 = new Float32Array([positions[3], positions[4], positions[5]]);\n var p2 = new Float32Array([positions[6], positions[7], positions[8]]);\n isLegal = PlateObject.isPlate(p0, p1, p2);\n if (positions.length === 9) {} else if (positions.length === 12) {\n var p3 = new Float32Array([positions[9], positions[10], positions[11]]);\n if (!isLegal) {\n isLegal = PlateObject.isPlate(p0, p1, p3);\n } else {\n var axis1 = gs_bim_air_1.Longan.Point.subtract(p1, p0);\n gs_bim_air_1.Longan.Vector.normalize(axis1);\n var axis2 = gs_bim_air_1.Longan.Point.subtract(p2, p0);\n gs_bim_air_1.Longan.Vector.normalize(axis2);\n var normal = gs_bim_air_1.Longan.Vector.cross(axis1, axis2);\n gs_bim_air_1.Longan.Vector.normalize(normal);\n var projectPoint = gs_bim_air_1.Longan.GeometryOperators.projectPointToPlane(p3, p0, normal);\n var vector = gs_bim_air_1.Longan.Point.subtract(projectPoint, p3);\n if (gs_bim_air_1.Longan.GeometryOperators.sameVector(vector, new Float32Array([0, 0, 0]))) {} else {\n isLegal = false;\n }\n }\n } else {\n isLegal = false;\n }\n return isLegal;\n };\n PlateObject.isPlate = function (p0, p1, p2) {\n if (gs_bim_air_1.Longan.GeometryOperators.samePoint(p1, p2) && gs_bim_air_1.Longan.GeometryOperators.samePoint(p1, p2)) {\n return false;\n }\n var axis1 = gs_bim_air_1.Longan.Point.subtract(p1, p0);\n gs_bim_air_1.Longan.Vector.normalize(axis1);\n var axis2 = gs_bim_air_1.Longan.Point.subtract(p2, p0);\n gs_bim_air_1.Longan.Vector.normalize(axis2);\n return !gs_bim_air_1.Longan.GeometryOperators.isParallel(axis1, axis2);\n };\n PlateObject.prototype.drawLine = function (positions) {\n var indices1 = [0, 1, 2];\n var indices2 = [2, 1, 0];\n if (positions.length === 9) {\n this.segment.insertTriangularShell(positions, indices1);\n this.segment.insertTriangularShell(positions, indices2);\n } else if (positions.length > 9) {\n var p0 = new Float32Array(positions.slice(0, 3));\n var p1 = new Float32Array(positions.slice(3, 6));\n var p2 = new Float32Array(positions.slice(6, 9));\n var p3 = new Float32Array(positions.slice(9, 12));\n var inter0 = gs_bim_air_1.Longan.GeometryOperators.intersectionLineSegmentLineSegment(p0, p1, p2, p3);\n var inter1 = gs_bim_air_1.Longan.GeometryOperators.intersectionLineSegmentLineSegment(p0, p2, p1, p3);\n if (inter1) {\n var points1 = positions.slice(0, 9);\n var points2 = positions.slice(6, 12).concat(positions.slice(0, 3));\n this.segment.insertTriangularShell(points1, indices1);\n this.segment.insertTriangularShell(points2, indices1);\n this.segment.insertTriangularShell(points1, indices2);\n this.segment.insertTriangularShell(points2, indices2);\n } else if (inter0) {\n var points1 = positions.slice(0, 9);\n var points2 = positions.slice(0, 6).concat(positions.slice(9, 12));\n this.segment.insertTriangularShell(points1, indices1);\n this.segment.insertTriangularShell(points2, indices1);\n this.segment.insertTriangularShell(points1, indices2);\n this.segment.insertTriangularShell(points2, indices2);\n } else {\n var points1 = positions.slice(0, 9);\n var points2 = positions.slice(3, 12);\n this.segment.insertTriangularShell(points1, indices1);\n this.segment.insertTriangularShell(points2, indices1);\n this.segment.insertTriangularShell(points1, indices2);\n this.segment.insertTriangularShell(points2, indices2);\n }\n }\n };\n PlateObject.prototype.drawSvg = function () {\n if (!this.checkBusinessStateIsActive()) {\n return;\n }\n var iro = process_1.Process.activeProcess.activeViewer.findInstanceObject(this);\n if (iro && !iro.visible) {\n this.clearSvg();\n return;\n }\n if (this._isDrawAxis) {\n this.drawAxis();\n }\n };\n PlateObject.prototype.clearSvg = function () {\n if (this.labelText) {\n this.labelText.clear();\n this.labelText = null;\n this.labelRect.remove();\n this.labelRect = null;\n }\n if (this.axisSeg) {\n this.axisSeg.clearAll();\n this.axisSeg = null;\n }\n _super.prototype.clearSvg.call(this);\n };\n PlateObject.prototype.drawLabel = function (position) {\n var _this = this;\n var viewer = process_1.Process.activeProcess.activeViewer;\n var x = position[0];\n var y = position[1];\n if (this.labelRect && this.labelText) {\n this.labelRect.move(x, y - 20);\n this.labelText.move(x + 5, y - 18);\n } else {\n var draw = gs_ceec_design_2.SvgDraw.getInstance(viewer.container.id).draw;\n this._group = draw.group();\n var name_1 = this.name;\n var thickness_1 = this.getThickness() ? this.getThickness().toString() : \"0\";\n var textWidth = Math.max(3 + name_1.length, 7 + thickness_1.length) * gs_ceec_design_4.DesignBaseObject.fontSize;\n var rect = draw.rect(textWidth, 12 * 8).radius(2).fill(\"#FFFFE1\").move(x, y - 20).attr(\"style\", \"pointer-events: none}\");\n var text = draw.text(function (add) {\n add.tspan(\"Name:\".concat(name_1)).newLine();\n add.tspan(\"Thickness(cm):\".concat(thickness_1)).newLine();\n add.tspan(\"JointA:\".concat(_this.joints[0].name)).newLine();\n add.tspan(\"JointB:\".concat(_this.joints[1].name)).newLine();\n add.tspan(\"JointC:\".concat(_this.joints[2].name)).newLine();\n if (_this.joints.length > 3) {\n add.tspan(\"JointD:\".concat(_this.joints[3].name)).newLine();\n }\n }).font({\n fill: \"#000\"\n }).attr(\"font-size\", 12).move(x + 5, y - 18);\n this._group.add(rect).add(text);\n this.labelRect = rect;\n this.labelText = text;\n }\n };\n PlateObject.prototype.drawAxis = function () {\n if (!this.checkBusinessStateIsActive()) {\n return;\n }\n var viewer = process_1.Process.activeProcess.activeViewer;\n var iro = viewer.findInstanceObject(this);\n if (iro && !iro.visible) {\n this.isDrawAxis = false;\n return;\n }\n var unitLengtha = viewer.unitLength / 4;\n var scaleMatrix = gs_bim_air_1.Longan.Matrix4.scaleMatrix(unitLengtha, unitLengtha, unitLengtha);\n var center = this.getCenter();\n var translateMatrix = gs_bim_air_1.Longan.Matrix4.translateMatrix(center[0], center[1], center[2]);\n if (this.axisSeg) {} else {\n var viewer_1 = process_1.Process.activeProcess.activeViewer;\n var unitLengtha_1 = viewer_1.unitLength / 2;\n console.log(\"unitLengtha\", unitLengtha_1);\n var axis = this.getLocalAxis();\n var origin_1 = new Float32Array([0, 0, 0]);\n var xPoint = gs_bim_air_1.Longan.Point.add(origin_1, axis.xAxis);\n var yPoint = gs_bim_air_1.Longan.Point.add(origin_1, axis.yAxis);\n var zPoint = gs_bim_air_1.Longan.Point.add(origin_1, axis.zAxis);\n var matrix_1 = gs_bim_air_1.Longan.Matrix4.identity();\n if (this.segment.attributes.indexOf(gs_bim_air_1.Longan.LonganCore.ObjectType.TYPE_ModellingMatrix)) {\n if (this.segment.modellingMatrix.matrix) {\n matrix_1 = new Float32Array(this.segment.modellingMatrix.matrix);\n }\n }\n var axisParent = viewer_1.sceneSegment.subsegment(\"axisPar\" + this.id);\n axisParent.modellingMatrix.set(matrix_1);\n this.axisSeg = axisParent.subsegment(\"axis\");\n this.axisSeg.renderingOptions.depthRange = [0, 0.1];\n var xSeg = this.axisSeg.subsegment(\"x\");\n var ySeg = this.axisSeg.subsegment(\"y\");\n var zSeg = this.axisSeg.subsegment(\"z\");\n xSeg.color.setLine([0, 0, 255]);\n xSeg.color.setFace([0, 0, 255]);\n ySeg.color.setLine([0, 255, 0]);\n ySeg.color.setFace([0, 255, 0]);\n zSeg.color.setLine([255, 0, 0]);\n zSeg.color.setFace([255, 0, 0]);\n var x = xSeg.insertLine(origin_1, xPoint);\n var y = ySeg.insertLine(origin_1, yPoint);\n var z = zSeg.insertLine(origin_1, zPoint);\n xSeg.insertParametricGeometry(\"scon\", tslib_1.__spreadArray(tslib_1.__spreadArray(tslib_1.__spreadArray([], tslib_1.__read(gs_bim_air_1.Longan.Point.add(xPoint, gs_bim_air_1.Longan.Vector.multiply(axis.xAxis, 0.5))), false), tslib_1.__read(gs_bim_air_1.Longan.Vector.multiply(axis.xAxis, -1)), false), [0.5, 0.2], false));\n ySeg.insertParametricGeometry(\"scon\", tslib_1.__spreadArray(tslib_1.__spreadArray(tslib_1.__spreadArray([], tslib_1.__read(gs_bim_air_1.Longan.Point.add(yPoint, gs_bim_air_1.Longan.Vector.multiply(axis.yAxis, 0.5))), false), tslib_1.__read(gs_bim_air_1.Longan.Vector.multiply(axis.yAxis, -1)), false), [0.5, 0.2], false));\n zSeg.insertParametricGeometry(\"scon\", tslib_1.__spreadArray(tslib_1.__spreadArray(tslib_1.__spreadArray([], tslib_1.__read(gs_bim_air_1.Longan.Point.add(zPoint, gs_bim_air_1.Longan.Vector.multiply(axis.zAxis, 0.5))), false), tslib_1.__read(gs_bim_air_1.Longan.Vector.multiply(axis.zAxis, -1)), false), [0.5, 0.2], false));\n }\n var matrix = gs_bim_air_1.Longan.Matrix4.identity();\n matrix = gs_bim_air_1.Longan.Matrix4.multiply(matrix, translateMatrix);\n matrix = gs_bim_air_1.Longan.Matrix4.multiply(matrix, scaleMatrix);\n this.axisSeg.modellingMatrix.set(matrix);\n };\n PlateObject.prototype.setReference = function (pm) {\n for (var i = 0; i < this.joints.length; i++) {\n var joint = this.joints[i];\n if (typeof joint === \"string\") {\n var resultJoint = pm.referenceList.get(joint);\n if (resultJoint) {\n this.joints[i] = resultJoint;\n }\n }\n }\n if (typeof this.pGrup === \"string\") {\n var pGrup = pm.referenceList.get(this.pGrup);\n if (pGrup) {\n this.pGrup = pGrup;\n }\n }\n this.setNeedUpdate();\n };\n PlateObject.prototype.jointReplace = function (replacingJoint, afterJoint, isInSamePlate) {\n if (!isInSamePlate) {\n var joints = this.joints;\n for (var j = 0; j < joints.length; j++) {\n if (joints[j].id === replacingJoint.id) {\n joints[j] = afterJoint;\n break;\n }\n }\n } else {\n var joints = this.joints;\n var deleteIndex = -1;\n for (var j = 0; j < joints.length; j++) {\n if (joints[j].id === replacingJoint.id) {\n deleteIndex = j;\n break;\n }\n }\n for (var j = deleteIndex; j < joints.length - 1; j++) {\n joints[j] = joints[j + 1];\n }\n }\n };\n PlateObject.prototype.setColor = function (color, transparency) {\n this.segment.color.setFace(color.concat([transparency]));\n };\n PlateObject.prototype.getAspectRatio = function () {\n var aspectRatio = \"\";\n var viewer = process_1.Process.activeProcess.activeViewer;\n var positions = this.getPositions();\n if (positions) {\n if (positions.length === 9) {\n var p0 = new Float32Array([positions[0], positions[1], positions[2]]);\n var p1 = new Float32Array([positions[3], positions[4], positions[5]]);\n var p2 = new Float32Array([positions[6], positions[7], positions[8]]);\n var p0p1 = gs_bim_air_1.Longan.Point.subtract(p1, p0);\n var p0p2 = gs_bim_air_1.Longan.Point.subtract(p2, p0);\n var p1p2 = gs_bim_air_1.Longan.Point.subtract(p2, p1);\n var a = gs_bim_air_1.Longan.Vector.module(p0p1);\n var b = gs_bim_air_1.Longan.Vector.module(p0p2);\n var c = gs_bim_air_1.Longan.Vector.module(p1p2);\n var maxNum = Math.max(a, b, c);\n var nor1 = gs_bim_air_1.Longan.Vector.normalizeVector(p0p1);\n var nor2 = gs_bim_air_1.Longan.Vector.normalizeVector(p0p2);\n var area = 0.5 * a * b * Math.sin(gs_bim_air_1.Longan.Vector.angle(nor1, nor2));\n var d1 = maxNum * (a + b + c);\n var d2 = 4 * Math.sqrt(3) * area;\n aspectRatio = d1 / d2;\n } else {\n var p0 = new Float32Array([positions[0], positions[1], positions[2]]);\n var p1 = new Float32Array([positions[3], positions[4], positions[5]]);\n var p2 = new Float32Array([positions[6], positions[7], positions[8]]);\n var p3 = new Float32Array([positions[9], positions[10], positions[11]]);\n var p0p1 = gs_bim_air_1.Longan.Point.subtract(p1, p0);\n var p0p3 = gs_bim_air_1.Longan.Point.subtract(p3, p0);\n var p2p1 = gs_bim_air_1.Longan.Point.subtract(p1, p2);\n var p2p3 = gs_bim_air_1.Longan.Point.subtract(p3, p2);\n var b0 = gs_bim_air_1.Longan.Vector.module(p0p1);\n var b1 = gs_bim_air_1.Longan.Vector.module(p2p1);\n var b2 = gs_bim_air_1.Longan.Vector.module(p2p3);\n var b3 = gs_bim_air_1.Longan.Vector.module(p0p3);\n gs_bim_air_1.Longan.Vector.normalize(p0p1);\n gs_bim_air_1.Longan.Vector.normalize(p0p3);\n gs_bim_air_1.Longan.Vector.normalize(p2p1);\n gs_bim_air_1.Longan.Vector.normalize(p2p3);\n var d1 = Math.max(b0, b1, b2, b3) * (b0 + b1 + b2 + b3);\n var d2 = 4 * (0.5 * b0 * b3 * Math.sin(gs_bim_air_1.Longan.Vector.angle(p0p1, p0p3)) + 0.5 * b1 * b2 * Math.sin(gs_bim_air_1.Longan.Vector.angle(p2p1, p2p3)));\n aspectRatio = d1 / d2;\n }\n } else {\n return \"\";\n }\n return aspectRatio;\n };\n PlateObject.prototype.getCenter = function () {\n var points = this.getPositions();\n var xA = 0;\n var yA = 0;\n var zA = 0;\n for (var i = 0; i < points.length / 3; i++) {\n xA += points[3 * i + 0];\n yA += points[3 * i + 1];\n zA += points[3 * i + 2];\n }\n xA /= points.length / 3;\n yA /= points.length / 3;\n zA /= points.length / 3;\n return new Float32Array([xA, yA, zA]);\n };\n PlateObject.prototype.getLocalAxis = function () {\n var points = this.getPositions();\n var p0 = new Float32Array([points[0], points[1], points[2]]);\n var p1 = new Float32Array([points[3], points[4], points[5]]);\n var p2 = new Float32Array([points[6], points[7], points[8]]);\n var xAxis = gs_bim_air_1.Longan.Point.subtract(p1, p0);\n gs_bim_air_1.Longan.Vector.normalize(xAxis);\n var yAxis = gs_bim_air_1.Longan.Point.subtract(p2, p1);\n gs_bim_air_1.Longan.Vector.normalize(yAxis);\n var zAxis = gs_bim_air_1.Longan.Vector.cross(xAxis, yAxis);\n gs_bim_air_1.Longan.Vector.normalize(zAxis);\n yAxis = gs_bim_air_1.Longan.Vector.cross(zAxis, xAxis);\n gs_bim_air_1.Longan.Vector.normalize(yAxis);\n return {\n xAxis: xAxis,\n yAxis: yAxis,\n zAxis: zAxis\n };\n };\n return PlateObject;\n }(gs_ceec_design_1.PolylineObject);\n exports.PlateObject = PlateObject;\n var PlateAdditionalProperty = function () {\n function PlateAdditionalProperty() {\n this.useDefaultProperty = false;\n this.rpsk = null;\n this.offsetOption = null;\n this.jointA = [0, 0, 0];\n this.jointB = [0, 0, 0];\n this.jointC = [0, 0, 0];\n this.jointD = [0, 0, 0];\n this.overriedStreeReport = false;\n this.overriedPlateOffset = false;\n this.overriedJointA = false;\n this.overriedJointB = false;\n this.overriedJointC = false;\n this.overriedJointD = false;\n }\n PlateAdditionalProperty.getInstance = function () {\n if (this._instance == null) {\n this._instance = new PlateAdditionalProperty();\n }\n return this._instance;\n };\n return PlateAdditionalProperty;\n }();\n exports.PlateAdditionalProperty = PlateAdditionalProperty;\n}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9wYWNrYWdlcy9jYWVEZXNpZ24vc3JjL2dzRGV2Rngvb2JqZWN0cy9jYWVPYmplY3RzL3BsYXRlT2JqZWN0LnRzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vW25hbWVdLy4vcGFja2FnZXMvY2FlRGVzaWduL3NyYy9nc0RldkZ4L29iamVjdHMvY2FlT2JqZWN0cy9wbGF0ZU9iamVjdC50cz9kNGE1Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IExvbmdhbiB9IGZyb20gXCJncy1iaW0tYWlyXCI7XHJcbmltcG9ydCB7IEpvaW50T2JqZWN0IH0gZnJvbSBcIi4vam9pbnRPYmplY3RcIjtcclxuaW1wb3J0IHsgUEdydXBPYmplY3QgfSBmcm9tIFwiLi9wR3J1cE9iamVjdFwiO1xyXG5pbXBvcnQgeyBJUmVmZXJlbmNlZE9iamVjdCB9IGZyb20gXCIuLi9pbnRlcmZhY2VzXCI7XHJcbmltcG9ydCB7IFBlcnNpc3RlbmNlTWFuYWdlciB9IGZyb20gXCIuLi8uLi9tYW5hZ2Vycy9wZXJzaXN0ZW5jZU1hbmFnZXJcIjtcclxuaW1wb3J0IHsgUG9seWxpbmVPYmplY3QgfSBmcm9tIFwiZ3MtY2VlYy1kZXNpZ25cIjtcclxuaW1wb3J0IHsgQ2FyZFBsYXRlIH0gZnJvbSBcIi4uLy4uLy4uL2NhZUNhcmRFZGl0b3IvY2FlQ2FyZE9iamVjdHMvY2FyZFBsYXRlXCI7XHJcbmltcG9ydCB7IENhcmRQbGF0ZU9mZnNldHMgfSBmcm9tIFwiLi4vLi4vLi4vY2FlQ2FyZEVkaXRvci9jYWVDYXJkT2JqZWN0cy9jYXJkUGxhdGVPZmZzZXRzXCI7XHJcbmltcG9ydCB7IFN2Z0RyYXcgfSBmcm9tIFwiZ3MtY2VlYy1kZXNpZ25cIjtcclxuaW1wb3J0IHsgSW5zdGFuY2VEZXNpZ25CYXNlT2JqZWN0IH0gZnJvbSBcImdzLWNlZWMtZGVzaWduXCI7XHJcbmltcG9ydCB7IE9iamVjdENvbG9yIH0gZnJvbSBcIi4vb2JqZWN0Q29sb3JzXCI7XHJcbmltcG9ydCB7IERlc2lnbkJhc2VPYmplY3QgfSBmcm9tIFwiZ3MtY2VlYy1kZXNpZ25cIjtcclxuaW1wb3J0IHsgQ2FlTnVtYmVyLCBDYWVOdW1iZXJBcnJheSB9IGZyb20gXCIuLi8uLi8uLi91dGlsaXR5L3V0aWxpdHlcIjtcclxuaW1wb3J0IHsgUHJvY2VzcyB9IGZyb20gXCIuLi8uLi8uLi9nc0RldkZ4L3Byb2Nlc3NcIjtcclxuaW1wb3J0IHsgVmlld2VyIH0gZnJvbSBcImdzLWNlZWMtZGVzaWduXCI7XHJcbmltcG9ydCB7IENvbG9yRGl2Q29tcG9uZW50R3JvdXBPYmplY3QgfSBmcm9tIFwiLi4vcHJldHJlYXRtZW50T2JqZWN0cy9jb2xvckRpdkNvbXBvbmVudEdyb3VwT2JqZWN0XCI7XHJcblxyXG5cclxuZXhwb3J0IGVudW0gVmlld09wdGlvbiB7XHJcbiAgTGluZSxcclxuICBCb2R5LFxyXG59XHJcblxyXG4vL+adv+WvueixoVxyXG5leHBvcnQgY2xhc3MgUGxhdGVPYmplY3QgZXh0ZW5kcyBQb2x5bGluZU9iamVjdCBpbXBsZW1lbnRzIElSZWZlcmVuY2VkT2JqZWN0IHtcclxuICB0eXBlTmFtZSA9IFwiUGxhdGVPYmplY3RcIjtcclxuICAvLyDlvJXnlKjnmoTnqbrpl7TngrlJZOaVsOe7hCwzLzTkuKrngrnnmoTmlbDnu4QuXHJcbiAgX2pvaW50czogSm9pbnRPYmplY3RbXSA9IG5ldyBBcnJheTxKb2ludE9iamVjdD4oKTtcclxuICAvLyBfam9pbnRBOiBKb2ludE9iamVjdCA9IG51bGw7XHJcbiAgLy8gX2pvaW50QjogSm9pbnRPYmplY3QgPSBudWxsO1xyXG4gIC8vIF9qb2ludEM6IEpvaW50T2JqZWN0ID0gbnVsbDtcclxuICAvLyBfam9pbnREOiBKb2ludE9iamVjdCA9IG51bGw7XHJcbiAgLy8g5byV55So55qE5oiq6Z2i57uEXHJcbiAgX3BHcnVwOiBQR3J1cE9iamVjdCA9IG51bGw7XHJcbiAgLy8g5Y6a5bqmOmNtXHJcbiAgLy8gX3RoaWNrbmVzczogbnVtYmVyID0gMDtcclxuICBfcGxhdGVUaGlja25lc3M6IG51bWJlciA9IG51bGw7XHJcbiAgLy8g5YGP5b+D57G75Z6LXHJcbiAgLy9cIlwiOuS4jeWtmOWcqOWBj+W/g+WAvFxyXG4gIC8vXCIxXCI65YGP5b+D6YeP55qE5Zyo5oC75L2T5Z2Q5qCH57O75Lit5a6a5LmJXHJcbiAgLy9cIjJcIjrlgY/lv4Pph4/lnKjlsYDpg6jlnZDmoIfns7vkuK3lrprkuYlcclxuICBfb2Zmc2V0T3B0aW9uOiBzdHJpbmcgPSBudWxsO1xyXG4gIC8vIOadv+WBj+W/g+mHjy5cclxuICAvLyDmnb/nmoQzLzTkuKrngrnnmoTlgY/np7vlgLwuOS8xMuS4qmZsb2F05YC8LuWAvOihqOekuuWvueW6lOWdkOagh+i9tOS4iueahOi3neemu1xyXG4gIC8vIF9hT2Zmc2V0OiBudW1iZXJbXSA9IG5ldyBBcnJheTxudW1iZXI+KCk7XHJcbiAgLy8gX2JPZmZzZXQ6IG51bWJlcltdID0gbmV3IEFycmF5PG51bWJlcj4oKTtcclxuICAvLyBfY09mZnNldDogbnVtYmVyW10gPSBuZXcgQXJyYXk8bnVtYmVyPigpO1xyXG4gIC8vIF9kT2Zmc2V0OiBudW1iZXJbXSA9IG5ldyBBcnJheTxudW1iZXI+KCk7XHJcbiAgLy8gY21cclxuICBfb2Zmc2V0czogbnVtYmVyW10gPSBuZXcgQXJyYXk8bnVtYmVyPigpO1xyXG5cclxuICAvKipcclxuICAgKiDorqHnrpfpgInpobnvvJozMS0zMlxyXG4gICAqL1xyXG4gIHJwc2s6IHN0cmluZyA9IFwiXCI7XHJcbiAgLyoqXHJcbiAgICog5by55oCn5qih6YeP77yaNDgtNTRcclxuICAgKiDljZXkvY3vvJoxMDAwa04vY21eMlxyXG4gICAqL1xyXG4gIG1hdGVyaWFsRGF0YV9FOiBudW1iZXIgPSBudWxsO1xyXG4gIC8qKlxyXG4gICAqIOaziuadvuavlO+8mjU1LTU5XHJcbiAgICovXHJcbiAgcG9pc3NvblJhdGlvdTogbnVtYmVyID0gbnVsbDtcclxuICAvKipcclxuICAgKiDlsYjmnI3lupTlipvvvJo2MC02NFxyXG4gICAqIOWNleS9je+8mmtOL2NtXjJcclxuICAgKi9cclxuICB5aWVsZFN0cmVzczogbnVtYmVyID0gbnVsbDtcclxuICAvKipcclxuICAgKiDmnZDmlpnlr4bluqbvvJo3MC03NFxyXG4gICAqIOWNleS9je+8mnQvbV4zXHJcbiAgICovXHJcbiAgd2VpZ2h0RGVuc2l0eTogbnVtYmVyID0gbnVsbDtcclxuICAvKipcclxuICAgKiDms6jph4rvvJo3NS04MFxyXG4gICAqL1xyXG4gIHJlbWFya3M6IHN0cmluZyA9IFwiXCI7XHJcblxyXG4gIHZpZXdPcHRpb246IFZpZXdPcHRpb24gPSBWaWV3T3B0aW9uLkJvZHk7XHJcblxyXG4gIHByaXZhdGUgX2FkZGl0aW9uYWxQcm9wZXJ0eTogUGxhdGVBZGRpdGlvbmFsUHJvcGVydHkgPSBudWxsO1xyXG4gIC8vIOadv+minOiJsizkvJjlhYjnuqfpq5jkuo5PYmplY3RDb2xvcueahHBsYXRlQ29sb3IuXHJcbiAgZmFjZUNvbG9yID0gbnVsbDtcclxuXHJcbiAgX2lzRHJhd0xhYmVsID0gZmFsc2U7XHJcblxyXG4gIGF4aXNTZWc6IExvbmdhbi5TZWdtZW50O1xyXG4gIF9pc0RyYXdBeGlzID0gZmFsc2U7XHJcblxyXG4gIGxhYmVsUmVjdDtcclxuICBsYWJlbFRleHQ7XHJcblxyXG4gIC8vIOaciemZkOWFg+e9keagvOavlOS+iy5cclxuICBmaW5pdGVFbGVtZW50Q29lZmYgPSAxLjA7XHJcblxyXG4gIGdldCBhZGRpdGlvbmFsUHJvcGVydHkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fYWRkaXRpb25hbFByb3BlcnR5O1xyXG4gIH1cclxuXHJcbiAgc2V0IGFkZGl0aW9uYWxQcm9wZXJ0eSh2YWx1ZSkge1xyXG4gICAgdGhpcy5fYWRkaXRpb25hbFByb3BlcnR5ID0gdmFsdWU7XHJcbiAgICB0aGlzLmFkZGl0aW9uYWxQcm9wZXJ0eUFjdGl2ZSgpO1xyXG4gIH1cclxuXHJcbiAgYWRkaXRpb25hbFByb3BlcnR5QWN0aXZlKCkge1xyXG4gICAgbGV0IHByb3BlcnR5ID0gdGhpcy5hZGRpdGlvbmFsUHJvcGVydHk7XHJcbiAgICBpZiAocHJvcGVydHkpIHtcclxuICAgICAgLy9cclxuICAgICAgaWYgKHByb3BlcnR5LnJwc2sgJiYgcHJvcGVydHkub3ZlcnJpZWRTdHJlZVJlcG9ydCkge1xyXG4gICAgICAgIHRoaXMucnBzayA9IExvbmdhbi5kZWVwQ2xvbmUocHJvcGVydHkucnBzayk7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHByb3BlcnR5Lm9mZnNldE9wdGlvbiAhPT0gbnVsbCAmJiBwcm9wZXJ0eS5vdmVycmllZFBsYXRlT2Zmc2V0KSB7XHJcbiAgICAgICAgdGhpcy5vZmZzZXRPcHRpb24gPSBMb25nYW4uZGVlcENsb25lKHByb3BlcnR5Lm9mZnNldE9wdGlvbik7XHJcbiAgICAgIH1cclxuICAgICAgaWYocHJvcGVydHkub2Zmc2V0T3B0aW9uICYmIHByb3BlcnR5Lm9mZnNldE9wdGlvbiAhPT0gXCIwXCIpIHtcclxuICAgICAgICB0aGlzLm9mZnNldHMgPSBbMCwwLDAsMCwwLDAsMCwwLDBdO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChwcm9wZXJ0eS5vZmZzZXRPcHRpb24gJiYgcHJvcGVydHkub2Zmc2V0T3B0aW9uICE9PSBcIjBcIiAmJiBwcm9wZXJ0eS5vdmVycmllZEpvaW50QSkge1xyXG4gICAgICAgIHRoaXMub2Zmc2V0c1swXSA9IHByb3BlcnR5LmpvaW50QVswXTtcclxuICAgICAgICB0aGlzLm9mZnNldHNbMV0gPSBwcm9wZXJ0eS5qb2ludEFbMV07XHJcbiAgICAgICAgdGhpcy5vZmZzZXRzWzJdID0gcHJvcGVydHkuam9pbnRBWzJdO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChwcm9wZXJ0eS5vZmZzZXRPcHRpb24gJiYgcHJvcGVydHkub2Zmc2V0T3B0aW9uICE9PSBcIjBcIiAmJiBwcm9wZXJ0eS5vdmVycmllZEpvaW50Qikge1xyXG4gICAgICAgIHRoaXMub2Zmc2V0c1szXSA9IHByb3BlcnR5LmpvaW50QlswXTtcclxuICAgICAgICB0aGlzLm9mZnNldHNbNF0gPSBwcm9wZXJ0eS5qb2ludEJbMV07XHJcbiAgICAgICAgdGhpcy5vZmZzZXRzWzVdID0gcHJvcGVydHkuam9pbnRCWzJdO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChwcm9wZXJ0eS5vZmZzZXRPcHRpb24gJiYgcHJvcGVydHkub2Zmc2V0T3B0aW9uICE9PSBcIjBcIiAmJiBwcm9wZXJ0eS5vdmVycmllZEpvaW50Qykge1xyXG4gICAgICAgIHRoaXMub2Zmc2V0c1s2XSA9IHByb3BlcnR5LmpvaW50Q1swXTtcclxuICAgICAgICB0aGlzLm9mZnNldHNbN10gPSBwcm9wZXJ0eS5qb2ludENbMV07XHJcbiAgICAgICAgdGhpcy5vZmZzZXRzWzhdID0gcHJvcGVydHkuam9pbnRDWzJdO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChwcm9wZXJ0eS5vZmZzZXRPcHRpb24gJiYgcHJvcGVydHkub2Zmc2V0T3B0aW9uICE9PSBcIjBcIiAmJiBwcm9wZXJ0eS5vdmVycmllZEpvaW50RCAmJiB0aGlzLmpvaW50cy5sZW5ndGggPiAzKSB7XHJcbiAgICAgICAgdGhpcy5vZmZzZXRzWzldID0gcHJvcGVydHkuam9pbnREWzBdO1xyXG4gICAgICAgIHRoaXMub2Zmc2V0c1sxMF0gPSBwcm9wZXJ0eS5qb2ludERbMV07XHJcbiAgICAgICAgdGhpcy5vZmZzZXRzWzExXSA9IHByb3BlcnR5LmpvaW50RFsyXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBqb2ludHMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fam9pbnRzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBqb2ludHModmFsdWU6IEpvaW50T2JqZWN0W10pIHtcclxuICAgIHRoaXMuX2pvaW50cyA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBwR3J1cCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9wR3J1cDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgcEdydXAodmFsdWU6IFBHcnVwT2JqZWN0KSB7XHJcbiAgICBpZiAodGhpcy5fcEdydXAgaW5zdGFuY2VvZiBQR3J1cE9iamVjdCkge1xyXG4gICAgICBsZXQgbGlzdCA9IChQcm9jZXNzLmFjdGl2ZVByb2Nlc3MgYXMgUHJvY2VzcykucGdydXBNYXBSZWxlYXRpdmVQbGF0ZXMuZ2V0KFxyXG4gICAgICAgIHRoaXMuX3BHcnVwXHJcbiAgICAgICk7XHJcbiAgICAgIGxpc3QucmVtb3ZlKHRoaXMpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fcEdydXAgPSB2YWx1ZTtcclxuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIFBHcnVwT2JqZWN0KSB7XHJcbiAgICAgIGxldCBsaXN0ID0gKFByb2Nlc3MuYWN0aXZlUHJvY2VzcyBhcyBQcm9jZXNzKS5wZ3J1cE1hcFJlbGVhdGl2ZVBsYXRlcy5nZXQoXHJcbiAgICAgICAgdmFsdWVcclxuICAgICAgKTtcclxuICAgICAgaWYgKCFsaXN0KSB7XHJcbiAgICAgICAgbGlzdCA9IG5ldyBMb25nYW4uTGlzdDxQbGF0ZU9iamVjdD4oKTtcclxuICAgICAgICAoUHJvY2Vzcy5hY3RpdmVQcm9jZXNzIGFzIFByb2Nlc3MpLnBncnVwTWFwUmVsZWF0aXZlUGxhdGVzLnNldChcclxuICAgICAgICAgIHZhbHVlLFxyXG4gICAgICAgICAgbGlzdFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgbGlzdC5hZGQodGhpcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHBsYXRlVGhpY2tuZXNzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BsYXRlVGhpY2tuZXNzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBwbGF0ZVRoaWNrbmVzcyh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl9wbGF0ZVRoaWNrbmVzcyA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBvZmZzZXRPcHRpb24oKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fb2Zmc2V0T3B0aW9uO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBvZmZzZXRPcHRpb24odmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fb2Zmc2V0T3B0aW9uID0gdmFsdWU7XHJcbiAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgIGlmKHRoaXMub2Zmc2V0cykge1xyXG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCB0aGlzLm9mZnNldHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIHRoaXMub2Zmc2V0c1tpXSA9IDA7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IG9mZnNldHMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fb2Zmc2V0cztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgb2Zmc2V0cyh2YWx1ZTogbnVtYmVyW10pIHtcclxuICAgIHRoaXMuX29mZnNldHMgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldCBpc0RyYXdMYWJlbCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9pc0RyYXdMYWJlbDtcclxuICB9XHJcblxyXG4gIHNldCBpc0RyYXdMYWJlbChpc0RyYXdMYWJlbCkge1xyXG4gICAgdGhpcy5faXNEcmF3TGFiZWwgPSBpc0RyYXdMYWJlbDtcclxuICAgIGlmIChpc0RyYXdMYWJlbCkge1xyXG4gICAgICAvLyB0aGlzLmRyYXdMYWJlbCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gdGhpcy5sYWJlbFJlY3QgJiYgdGhpcy5sYWJlbFJlY3QuY2xlYXIoKTtcclxuICAgICAgaWYgKHRoaXMubGFiZWxSZWN0KSB7XHJcbiAgICAgICAgdGhpcy5sYWJlbFJlY3QucmVtb3ZlKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5sYWJlbFJlY3QgPSBudWxsO1xyXG4gICAgICB0aGlzLmxhYmVsVGV4dCAmJiB0aGlzLmxhYmVsVGV4dC5jbGVhcigpO1xyXG4gICAgICB0aGlzLmxhYmVsVGV4dCA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgaXNEcmF3QXhpcygpIHtcclxuICAgIHJldHVybiB0aGlzLl9pc0RyYXdBeGlzO1xyXG4gIH1cclxuXHJcbiAgc2V0IGlzRHJhd0F4aXMoaXNEcmF3QXhpcykge1xyXG4gICAgdGhpcy5faXNEcmF3QXhpcyA9IGlzRHJhd0F4aXM7XHJcbiAgICBpZiAoaXNEcmF3QXhpcykge1xyXG4gICAgICB0aGlzLmRyYXdBeGlzKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5heGlzU2VnKSB7XHJcbiAgICAgICAgdGhpcy5heGlzU2VnLmNsZWFyQWxsKCk7XHJcbiAgICAgICAgdGhpcy5heGlzU2VnID0gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGNoZWNrTmFtZWxlZ2FsKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHJlZyA9IC9eW0EtWjAtOV0qJC87XHJcbiAgICBpZiAoIXJlZy50ZXN0KG5hbWUpIHx8IG5hbWUudHJpbUVuZCgpLmxlbmd0aCA+IDQpIHtcclxuICAgICAgY29uc29sZS5sb2coXCLmnb/lkI3np7DkuI3nrKblkIjop4TojINcIik7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0VGhpY2tuZXNzKCkge1xyXG4gICAgaWYgKHRoaXMucEdydXApIHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMucEdydXAgaW5zdGFuY2VvZiBQR3J1cE9iamVjdCAmJlxyXG4gICAgICAgIHRoaXMucEdydXAuY2hlY2tCdXNpbmVzc1N0YXRlSXNBY3RpdmUoKVxyXG4gICAgICApIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wR3J1cC50aGlja25lc3M7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gbmFtZemVv+W6pjo05Liq5a2X56ymXHJcbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy5uYW1lID0gbmFtZTtcclxuICAgIHRoaXMub2Zmc2V0T3B0aW9uID0gXCJcIjtcclxuICAgIHRoaXMuaW5zdGFuY2VUeXBlcy5hZGQoXCJtYWluXCIsIEluc3RhbmNlRGVzaWduQmFzZU9iamVjdC5wcm90b3R5cGUpO1xyXG4gICAgdGhpcy5pc0RyYXdTdmcgPSB0cnVlO1xyXG5cclxuICAgIGxldCBybyA9IFByb2Nlc3MuYWN0aXZlUHJvY2Vzcy5nZXRSZW5kZXJPYmplY3RCeVNlZ21lbnRLZXkoXHJcbiAgICAgIHRoaXMuc2VnbWVudC5rZXlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBzZXJpYWxpemUoKTogYW55IHtcclxuICAgIGxldCBvYmogPSBzdXBlci5zZXJpYWxpemUoKTtcclxuXHJcbiAgICBpZiAodGhpcy5qb2ludHMpIHtcclxuICAgICAgbGV0IGlkcyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5qb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBpZih0aGlzLmpvaW50c1tpXS50eXBlTmFtZSkge1xyXG4gICAgICAgICAgaWRzLnB1c2godGhpcy5qb2ludHNbaV0uaWQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZHMucHVzaCh0aGlzLmpvaW50c1tpXSBhcyBhbnkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBvYmouam9pbnRzID0gaWRzO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnBHcnVwKSB7XHJcbiAgICAgIG9iai5wR3J1cCA9IHRoaXMucEdydXAuaWQ7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMubm90TnVsbEFuZE5vdFVuZGVmaW5lZCh0aGlzLnBsYXRlVGhpY2tuZXNzKSkge1xyXG4gICAgICBvYmoucGxhdGVUaGlja25lc3MgPSB0aGlzLnBsYXRlVGhpY2tuZXNzO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm5vdE51bGxBbmROb3RVbmRlZmluZWQodGhpcy5vZmZzZXRPcHRpb24pKSB7XHJcbiAgICAgIG9iai5vZmZzZXRPcHRpb24gPSB0aGlzLm9mZnNldE9wdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5vZmZzZXRzKSB7XHJcbiAgICAgIG9iai5vZmZzZXRzID0gdGhpcy5vZmZzZXRzO1xyXG4gICAgfVxyXG4gICAgLy8vXHJcbiAgICBpZiAodGhpcy5ub3ROdWxsQW5kTm90VW5kZWZpbmVkKHRoaXMucnBzaykpIHtcclxuICAgICAgb2JqLnJwc2sgPSB0aGlzLnJwc2s7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5ub3ROdWxsQW5kTm90VW5kZWZpbmVkKHRoaXMubWF0ZXJpYWxEYXRhX0UpKSB7XHJcbiAgICAgIG9iai5tYXRlcmlhbERhdGFfRSA9IHRoaXMubWF0ZXJpYWxEYXRhX0U7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5ub3ROdWxsQW5kTm90VW5kZWZpbmVkKHRoaXMucG9pc3NvblJhdGlvdSkpIHtcclxuICAgICAgb2JqLnBvaXNzb25SYXRpb3UgPSB0aGlzLnBvaXNzb25SYXRpb3U7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5ub3ROdWxsQW5kTm90VW5kZWZpbmVkKHRoaXMueWllbGRTdHJlc3MpKSB7XHJcbiAgICAgIG9iai55aWVsZFN0cmVzcyA9IHRoaXMueWllbGRTdHJlc3M7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5ub3ROdWxsQW5kTm90VW5kZWZpbmVkKHRoaXMud2VpZ2h0RGVuc2l0eSkpIHtcclxuICAgICAgb2JqLndlaWdodERlbnNpdHkgPSB0aGlzLndlaWdodERlbnNpdHk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5ub3ROdWxsQW5kTm90VW5kZWZpbmVkKHRoaXMucmVtYXJrcykpIHtcclxuICAgICAgb2JqLnJlbWFya3MgPSB0aGlzLnJlbWFya3M7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG9iajtcclxuICB9XHJcblxyXG4gIGRlc2VyaWFsaXplKG9iajogYW55LCBwbTogUGVyc2lzdGVuY2VNYW5hZ2VyKSB7XHJcbiAgICBzdXBlci5kZXNlcmlhbGl6ZShvYmosIHBtKTtcclxuXHJcbiAgICBpZiAob2JqLmpvaW50cykge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9iai5qb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsZXQgam9pbnQgPSBwbS5yZWZlcmVuY2VMaXN0LmdldChvYmouam9pbnRzW2ldKTtcclxuICAgICAgICBpZiAoam9pbnQpIHtcclxuICAgICAgICAgIHRoaXMuam9pbnRzLnB1c2goam9pbnQgYXMgSm9pbnRPYmplY3QpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmpvaW50cy5wdXNoKG9iai5qb2ludHNbaV0pO1xyXG4gICAgICAgICAgcG0ubmVlZFJlZmVyZW5jZUxpc3QuYWRkKHRoaXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChvYmoucEdydXApIHtcclxuICAgICAgbGV0IHBHcnVwID0gcG0ucmVmZXJlbmNlTGlzdC5nZXQob2JqLnBHcnVwKTtcclxuICAgICAgaWYgKHBHcnVwKSB7XHJcbiAgICAgICAgdGhpcy5wR3J1cCA9IHBHcnVwIGFzIFBHcnVwT2JqZWN0O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMucEdydXAgPSBvYmoucEdydXA7XHJcbiAgICAgICAgcG0ubmVlZFJlZmVyZW5jZUxpc3QuYWRkKHRoaXMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMubm90TnVsbEFuZE5vdFVuZGVmaW5lZChvYmoucGxhdGVUaGlja25lc3MpKSB7XHJcbiAgICAgIHRoaXMucGxhdGVUaGlja25lc3MgPSBvYmoucGxhdGVUaGlja25lc3M7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMubm90TnVsbEFuZE5vdFVuZGVmaW5lZChvYmoub2Zmc2V0T3B0aW9uKSkge1xyXG4gICAgICB0aGlzLl9vZmZzZXRPcHRpb24gPSBvYmoub2Zmc2V0T3B0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChvYmoub2Zmc2V0cykge1xyXG4gICAgICB0aGlzLl9vZmZzZXRzID0gQ2FlTnVtYmVyQXJyYXkob2JqLm9mZnNldHMpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm5vdE51bGxBbmROb3RVbmRlZmluZWQob2JqLnJwc2spKSB7XHJcbiAgICAgIHRoaXMucnBzayA9IG9iai5ycHNrO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubWF0ZXJpYWxEYXRhX0UgPSBDYWVOdW1iZXIob2JqLm1hdGVyaWFsRGF0YV9FKTtcclxuXHJcbiAgICB0aGlzLnBvaXNzb25SYXRpb3UgPSBDYWVOdW1iZXIob2JqLnBvaXNzb25SYXRpb3UpO1xyXG5cclxuICAgIHRoaXMueWllbGRTdHJlc3MgPSBDYWVOdW1iZXIob2JqLnlpZWxkU3RyZXNzKTtcclxuXHJcbiAgICB0aGlzLndlaWdodERlbnNpdHkgPSBDYWVOdW1iZXIob2JqLndlaWdodERlbnNpdHkpO1xyXG5cclxuICAgIGlmICh0aGlzLm5vdE51bGxBbmROb3RVbmRlZmluZWQob2JqLnJlbWFya3MpKSB7XHJcbiAgICAgIHRoaXMucmVtYXJrcyA9IG9iai5yZW1hcmtzO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc2V0TmVlZFVwZGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJvdGVjdGVkIGNsb25lKGNsb25lT2JqOiBhbnksIGNsb25lTWFuYWdlcj86IExvbmdhbi5DbG9uZU1hbmFnZXIpIHtcclxuICAgIGNsb25lT2JqLmpvaW50cyA9IFsuLi50aGlzLmpvaW50c107XHJcbiAgICBjbG9uZU9iai5wR3J1cCA9IHRoaXMucEdydXA7XHJcbiAgICBjbG9uZU9iai5wbGF0ZVRoaWNrbmVzcyA9IExvbmdhbi5kZWVwQ2xvbmUodGhpcy5wbGF0ZVRoaWNrbmVzcyk7XHJcbiAgICBjbG9uZU9iai5vZmZzZXRPcHRpb24gPSBMb25nYW4uZGVlcENsb25lKHRoaXMub2Zmc2V0T3B0aW9uKTtcclxuICAgIGlmICh0aGlzLm9mZnNldHMpIHtcclxuICAgICAgY2xvbmVPYmoub2Zmc2V0cyA9IExvbmdhbi5kZWVwQ2xvbmUodGhpcy5vZmZzZXRzKTtcclxuICAgIH1cclxuXHJcbiAgICBjbG9uZU9iaiA9IHN1cGVyLmNsb25lKGNsb25lT2JqKTtcclxuICAgIHJldHVybiBjbG9uZU9iajtcclxuICB9XHJcblxyXG4gIHNlcmlhbGl6ZVRvQ2FyZCgpIHtcclxuICAgIC8vXHJcbiAgICBsZXQgY2FyZFBsYXRlID0gbmV3IENhcmRQbGF0ZSgpO1xyXG4gICAgY2FyZFBsYXRlLmxpbmVMYWJlbC52YWx1ZSA9IFwiUExBVEVcIjtcclxuICAgIGNhcmRQbGF0ZS5wbGF0ZUxhYmVsLnZhbHVlID0gdGhpcy5uYW1lO1xyXG4gICAgY2FyZFBsYXRlLmpvaW50QV9OYW1lLnZhbHVlID0gdGhpcy5qb2ludHNbMF0ubmFtZTtcclxuICAgIGNhcmRQbGF0ZS5qb2ludEJfTmFtZS52YWx1ZSA9IHRoaXMuam9pbnRzWzFdLm5hbWU7XHJcbiAgICBjYXJkUGxhdGUuam9pbnRDX05hbWUudmFsdWUgPSB0aGlzLmpvaW50c1syXS5uYW1lO1xyXG4gICAgY2FyZFBsYXRlLmpvaW50RF9OYW1lLnZhbHVlID0gdGhpcy5qb2ludHNbM10gPyB0aGlzLmpvaW50c1szXS5uYW1lIDogXCJcIjtcclxuICAgIGNhcmRQbGF0ZS5wbGF0ZUdydXBMYWJlbC52YWx1ZSA9IHRoaXMucEdydXAgPyB0aGlzLnBHcnVwLm5hbWUgOiBcIlwiO1xyXG4gICAgY2FyZFBsYXRlLnJwc2sudmFsdWUgPSB0aGlzLnJwc2s7XHJcbiAgICBjYXJkUGxhdGUucGxhdGVUaGlja25lc3MudmFsdWUgPSB0aGlzLnBsYXRlVGhpY2tuZXNzO1xyXG4gICAgY2FyZFBsYXRlLm9mZnNldE9wdGlvbi52YWx1ZSA9IHRoaXMub2Zmc2V0T3B0aW9uO1xyXG4gICAgY2FyZFBsYXRlLm1hdGVyaWFsRGF0YV9FLnZhbHVlID0gdGhpcy5tYXRlcmlhbERhdGFfRTtcclxuICAgIGNhcmRQbGF0ZS5wb2lzc29uUmF0aW91LnZhbHVlID0gdGhpcy5wb2lzc29uUmF0aW91O1xyXG4gICAgY2FyZFBsYXRlLnlpZWxkU3RyZXNzLnZhbHVlID0gdGhpcy55aWVsZFN0cmVzcztcclxuICAgIGNhcmRQbGF0ZS53ZWlnaHREZW5zaXR5LnZhbHVlID0gdGhpcy53ZWlnaHREZW5zaXR5O1xyXG4gICAgY2FyZFBsYXRlLnJlbWFya3MudmFsdWUgPSB0aGlzLnJlbWFya3M7XHJcblxyXG4gICAgbGV0IHJlc3VsdCA9IGNhcmRQbGF0ZS5nZXRMaW5lKCk7XHJcbiAgICBpZiAodGhpcy5vZmZzZXRzPy5sZW5ndGggPj0gMykge1xyXG4gICAgICByZXN1bHQgKz0gXCJcXG5cIjtcclxuXHJcbiAgICAgIGxldCBjYXJkUGxhdGVPZmZzZXQxID0gbmV3IENhcmRQbGF0ZU9mZnNldHMoKTtcclxuICAgICAgY2FyZFBsYXRlT2Zmc2V0MS5saW5lTGFiZWwudmFsdWUgPSBcIlBMQVRFICBPRkZTRVRTXCI7XHJcbiAgICAgIGNhcmRQbGF0ZU9mZnNldDEuY29tbWVudHMudmFsdWUgPSBcIlwiO1xyXG4gICAgICBjYXJkUGxhdGVPZmZzZXQxLmZpcnN0Sm9pbnRfWE9mZnNldC52YWx1ZSA9IHRoaXMub2Zmc2V0c1swXS50b1N0cmluZygpO1xyXG4gICAgICBjYXJkUGxhdGVPZmZzZXQxLmZpcnN0Sm9pbnRfWU9mZnNldC52YWx1ZSA9IHRoaXMub2Zmc2V0c1sxXS50b1N0cmluZygpO1xyXG4gICAgICBjYXJkUGxhdGVPZmZzZXQxLmZpcnN0Sm9pbnRfWk9mZnNldC52YWx1ZSA9IHRoaXMub2Zmc2V0c1syXS50b1N0cmluZygpO1xyXG4gICAgICBjYXJkUGxhdGVPZmZzZXQxLnNlY29uZEpvaW50X1hPZmZzZXQudmFsdWUgPSAodGhpcy5vZmZzZXRzWzNdICE9PSBudWxsICYmIHRoaXMub2Zmc2V0c1szXSAhPT0gdW5kZWZpbmVkKSA/IHRoaXMub2Zmc2V0c1szXS50b1N0cmluZygpIDogXCJcIjtcclxuICAgICAgY2FyZFBsYXRlT2Zmc2V0MS5zZWNvbmRKb2ludF9ZT2Zmc2V0LnZhbHVlID0gKHRoaXMub2Zmc2V0c1s0XSAhPT0gbnVsbCAmJiB0aGlzLm9mZnNldHNbM10gIT09IHVuZGVmaW5lZCkgP3RoaXMub2Zmc2V0c1s0XS50b1N0cmluZygpIDogXCJcIjtcclxuICAgICAgY2FyZFBsYXRlT2Zmc2V0MS5zZWNvbmRKb2ludF9aT2Zmc2V0LnZhbHVlID0gKHRoaXMub2Zmc2V0c1s1XSAhPT0gbnVsbCAmJiB0aGlzLm9mZnNldHNbM10gIT09IHVuZGVmaW5lZCkgP3RoaXMub2Zmc2V0c1s1XS50b1N0cmluZygpIDogXCJcIjtcclxuXHJcbiAgICAgIHJlc3VsdCArPSBjYXJkUGxhdGVPZmZzZXQxLmdldExpbmUoKSArIFwiXFxuXCI7XHJcblxyXG4gICAgICBsZXQgY2FyZFBsYXRlT2Zmc2V0MiA9IG5ldyBDYXJkUGxhdGVPZmZzZXRzKCk7XHJcbiAgICAgIGNhcmRQbGF0ZU9mZnNldDIubGluZUxhYmVsLnZhbHVlID0gXCJQTEFURSAgT0ZGU0VUU1wiO1xyXG4gICAgICBjYXJkUGxhdGVPZmZzZXQyLmNvbW1lbnRzLnZhbHVlID0gXCJcIjtcclxuICAgICAgY2FyZFBsYXRlT2Zmc2V0Mi5maXJzdEpvaW50X1hPZmZzZXQudmFsdWUgPSAodGhpcy5vZmZzZXRzWzZdICE9PSBudWxsICYmIHRoaXMub2Zmc2V0c1szXSAhPT0gdW5kZWZpbmVkKSA/IHRoaXMub2Zmc2V0c1s2XS50b1N0cmluZygpOiBcIlwiO1xyXG4gICAgICBjYXJkUGxhdGVPZmZzZXQyLmZpcnN0Sm9pbnRfWU9mZnNldC52YWx1ZSA9ICh0aGlzLm9mZnNldHNbN10gIT09IG51bGwgJiYgdGhpcy5vZmZzZXRzWzNdICE9PSB1bmRlZmluZWQpID8gdGhpcy5vZmZzZXRzWzddLnRvU3RyaW5nKCk6IFwiXCI7XHJcbiAgICAgIGNhcmRQbGF0ZU9mZnNldDIuZmlyc3RKb2ludF9aT2Zmc2V0LnZhbHVlID0gKHRoaXMub2Zmc2V0c1s4XSAhPT0gbnVsbCAmJiB0aGlzLm9mZnNldHNbM10gIT09IHVuZGVmaW5lZCkgPyB0aGlzLm9mZnNldHNbOF0udG9TdHJpbmcoKTogXCJcIjtcclxuICAgICAgaWYgKHRoaXMub2Zmc2V0cy5sZW5ndGggPiA5KSB7XHJcbiAgICAgICAgaWYgKHRoaXMub2Zmc2V0c1s5XSAhPT0gbnVsbCAmJiB0aGlzLm9mZnNldHNbOV0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgY2FyZFBsYXRlT2Zmc2V0Mi5zZWNvbmRKb2ludF9YT2Zmc2V0LnZhbHVlID1cclxuICAgICAgICAgICAgdGhpcy5vZmZzZXRzWzldLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm9mZnNldHNbMTBdICE9PSBudWxsICYmIHRoaXMub2Zmc2V0c1sxMF0gIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgY2FyZFBsYXRlT2Zmc2V0Mi5zZWNvbmRKb2ludF9ZT2Zmc2V0LnZhbHVlID1cclxuICAgICAgICAgICAgdGhpcy5vZmZzZXRzWzEwXS50b1N0cmluZygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5vZmZzZXRzWzExXSAhPT0gbnVsbCAmJiB0aGlzLm9mZnNldHNbMTFdICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgIGNhcmRQbGF0ZU9mZnNldDIuc2Vjb25kSm9pbnRfWk9mZnNldC52YWx1ZSA9XHJcbiAgICAgICAgICAgIHRoaXMub2Zmc2V0c1sxMV0udG9TdHJpbmcoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY2FyZFBsYXRlT2Zmc2V0Mi5zZWNvbmRKb2ludF9YT2Zmc2V0LnZhbHVlID0gbnVsbDtcclxuICAgICAgICBjYXJkUGxhdGVPZmZzZXQyLnNlY29uZEpvaW50X1lPZmZzZXQudmFsdWUgPSBudWxsO1xyXG4gICAgICAgIGNhcmRQbGF0ZU9mZnNldDIuc2Vjb25kSm9pbnRfWk9mZnNldC52YWx1ZSA9IG51bGw7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJlc3VsdCArPSBjYXJkUGxhdGVPZmZzZXQyLmdldExpbmUoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgdGVtcERlbGV0ZSh2aWV3ZXI6IFZpZXdlcik6IHZvaWQge1xyXG4gICAgLy8g5LuO57uE5Lit5Yig6ZmkLlxyXG4gICAgbGV0IGNvbXBvbmVudEdyb3VwcyA9IHZpZXdlci5wcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RCeU5hbWUoXHJcbiAgICAgIFwi5p6E5Lu25YiG57uE5YiG6ImyXCJcclxuICAgICkgYXMgRGVzaWduQmFzZU9iamVjdDtcclxuICAgIGlmIChjb21wb25lbnRHcm91cHMpIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb21wb25lbnRHcm91cHMuY2hpbGRPYmplY3RzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbGV0IG9iaiA9IGNvbXBvbmVudEdyb3Vwcy5jaGlsZE9iamVjdHNbXHJcbiAgICAgICAgICBpXHJcbiAgICAgICAgXSBhcyBDb2xvckRpdkNvbXBvbmVudEdyb3VwT2JqZWN0O1xyXG5cclxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG9iai5yZWZlcmNlblBsYXRlSWRzLmNvdW50KCk7IGorKykge1xyXG4gICAgICAgICAgaWYgKG9iai5yZWZlcmNlblBsYXRlSWRzLml0ZW1zW2pdID09PSB0aGlzLmlkKSB7XHJcbiAgICAgICAgICAgIG9iai5yZWZlcmNlblBsYXRlSWRzLnJlbW92ZSh0aGlzLmlkKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHN1cGVyLnRlbXBEZWxldGUodmlld2VyKTtcclxuICB9XHJcblxyXG4gIHJldmVyc2VKb2ludEFuZE9mZnNldCgpIHtcclxuICAgIGlmICh0aGlzLmpvaW50cykge1xyXG4gICAgICB0aGlzLmpvaW50cyA9IHRoaXMuam9pbnRzLnJldmVyc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5vZmZzZXRzKSB7XHJcbiAgICAgIGxldCBvZmZzZXRzID0gbmV3IEFycmF5PG51bWJlcltdPigpO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMub2Zmc2V0cy5sZW5ndGg7IGkgKz0gMykge1xyXG4gICAgICAgIGxldCBvZmZzZXQgPSBuZXcgQXJyYXk8bnVtYmVyPihcclxuICAgICAgICAgIHRoaXMub2Zmc2V0c1tpXSxcclxuICAgICAgICAgIHRoaXMub2Zmc2V0c1tpICsgMV0sXHJcbiAgICAgICAgICB0aGlzLm9mZnNldHNbaSArIDJdXHJcbiAgICAgICAgKTtcclxuICAgICAgICBvZmZzZXRzLnB1c2gob2Zmc2V0KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IHJldmVyc2VPZmZzZXRzID0gbmV3IEFycmF5PG51bWJlcj4oKTtcclxuICAgICAgZm9yIChsZXQgaSA9IG9mZnNldHMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICBsZXQgb2Zmc2V0ID0gb2Zmc2V0c1tpXTtcclxuICAgICAgICByZXZlcnNlT2Zmc2V0cy5wdXNoKG9mZnNldFswXSk7XHJcbiAgICAgICAgcmV2ZXJzZU9mZnNldHMucHVzaChvZmZzZXRbMV0pO1xyXG4gICAgICAgIHJldmVyc2VPZmZzZXRzLnB1c2gob2Zmc2V0WzJdKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UG9zaXRpb25zQmVmb3JlUEdydXBaT2Zmc2V0KCkge1xyXG4gICAgbGV0IHBvc2l0aW9ucyA9IG5ldyBBcnJheTxudW1iZXI+KCk7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmpvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBwb3NpdGlvbnMucHVzaCh0aGlzLmpvaW50c1tpXS5wb3NpdGlvblswXSk7XHJcbiAgICAgIHBvc2l0aW9ucy5wdXNoKHRoaXMuam9pbnRzW2ldLnBvc2l0aW9uWzFdKTtcclxuICAgICAgcG9zaXRpb25zLnB1c2godGhpcy5qb2ludHNbaV0ucG9zaXRpb25bMl0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLm9mZnNldHMpIHtcclxuICAgICAgaWYgKHRoaXMub2Zmc2V0T3B0aW9uID09PSBcIjFcIikge1xyXG4gICAgICAgIC8vIOWFqOWxgOWBj+W/g1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5vZmZzZXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBpZiAocG9zaXRpb25zW2ldICE9PSBudWxsICYmIHBvc2l0aW9uc1tpXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uc1tpXSArPSB0aGlzLm9mZnNldHNbaV0gLyAxMDA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMub2Zmc2V0T3B0aW9uID09PSBcIjJcIikge1xyXG4gICAgICAgIC8vIOWxgOmDqOWBj+W/g++8jOacquWkhOeQhlxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5vZmZzZXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBpZiAocG9zaXRpb25zW2ldICE9PSBudWxsICYmIHBvc2l0aW9uc1tpXSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uc1tpXSArPSB0aGlzLm9mZnNldHNbaV0gLyAxMDA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHBvc2l0aW9ucztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOiOt+WPluadv+eahOS4iS/lm5vkuKrngrkuXHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICBnZXRQb3NpdGlvbnMoKSB7XHJcbiAgICBsZXQgcG9zaXRpb25zID0gbmV3IEFycmF5PG51bWJlcj4oKTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuam9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHBvc2l0aW9ucy5wdXNoKHRoaXMuam9pbnRzW2ldLnBvc2l0aW9uWzBdKTtcclxuICAgICAgcG9zaXRpb25zLnB1c2godGhpcy5qb2ludHNbaV0ucG9zaXRpb25bMV0pO1xyXG4gICAgICBwb3NpdGlvbnMucHVzaCh0aGlzLmpvaW50c1tpXS5wb3NpdGlvblsyXSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMub2Zmc2V0cykge1xyXG4gICAgICBpZiAodGhpcy5vZmZzZXRPcHRpb24gPT09IFwiMVwiKSB7XHJcbiAgICAgICAgLy8g5YWo5bGA5YGP5b+DXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm9mZnNldHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGlmIChwb3NpdGlvbnNbaV0gIT09IG51bGwgJiYgcG9zaXRpb25zW2ldICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcG9zaXRpb25zW2ldICs9IHRoaXMub2Zmc2V0c1tpXSAvIDEwMDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5vZmZzZXRPcHRpb24gPT09IFwiMlwiKSB7XHJcbiAgICAgICAgLy8g5bGA6YOo5YGP5b+D77yM5pyq5aSE55CGXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm9mZnNldHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGlmIChwb3NpdGlvbnNbaV0gIT09IG51bGwgJiYgcG9zaXRpb25zW2ldICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgcG9zaXRpb25zW2ldICs9IHRoaXMub2Zmc2V0c1tpXSAvIDEwMDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5wR3J1cCkge1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgdGhpcy5wR3J1cC5wbGF0ZVpPZmZzZXQgIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgIHRoaXMucEdydXAucGxhdGVaT2Zmc2V0ICE9PSBudWxsXHJcbiAgICAgICkge1xyXG4gICAgICAgIGxldCBub3JtYWwgPSB0aGlzLmdldE5vcm1hbCgpO1xyXG4gICAgICAgIGxldCBvZmZzZXQgPSBMb25nYW4uVmVjdG9yLm11bHRpcGx5KG5vcm1hbCwgdGhpcy5wR3J1cC5wbGF0ZVpPZmZzZXQgLyAxMDApO1xyXG5cclxuICAgICAgICBsZXQgcDAgPSBuZXcgRmxvYXQzMkFycmF5KFtwb3NpdGlvbnNbMF0sIHBvc2l0aW9uc1sxXSwgcG9zaXRpb25zWzJdXSk7XHJcbiAgICAgICAgbGV0IHAxID0gbmV3IEZsb2F0MzJBcnJheShbcG9zaXRpb25zWzNdLCBwb3NpdGlvbnNbNF0sIHBvc2l0aW9uc1s1XV0pO1xyXG4gICAgICAgIGxldCBwMiA9IG5ldyBGbG9hdDMyQXJyYXkoW3Bvc2l0aW9uc1s2XSwgcG9zaXRpb25zWzddLCBwb3NpdGlvbnNbOF1dKTtcclxuICAgICAgICBsZXQgcDMgPSBudWxsO1xyXG4gICAgICAgIGlmIChwb3NpdGlvbnMubGVuZ3RoID4gOSkge1xyXG4gICAgICAgICAgcDMgPSBuZXcgRmxvYXQzMkFycmF5KFtwb3NpdGlvbnNbOV0sIHBvc2l0aW9uc1sxMF0sIHBvc2l0aW9uc1sxMV1dKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHAwID0gTG9uZ2FuLlBvaW50LmFkZChwMCwgb2Zmc2V0KTtcclxuICAgICAgICBwMSA9IExvbmdhbi5Qb2ludC5hZGQocDEsIG9mZnNldCk7XHJcbiAgICAgICAgcDIgPSBMb25nYW4uUG9pbnQuYWRkKHAyLCBvZmZzZXQpO1xyXG4gICAgICAgIGlmIChwMykge1xyXG4gICAgICAgICAgcDMgPSBMb25nYW4uUG9pbnQuYWRkKHAzLCBvZmZzZXQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcG9zaXRpb25zID0gbmV3IEFycmF5PG51bWJlcj4oKTtcclxuICAgICAgICBwb3NpdGlvbnMucHVzaChwMFswXSk7XHJcbiAgICAgICAgcG9zaXRpb25zLnB1c2gocDBbMV0pO1xyXG4gICAgICAgIHBvc2l0aW9ucy5wdXNoKHAwWzJdKTtcclxuICAgICAgICBwb3NpdGlvbnMucHVzaChwMVswXSk7XHJcbiAgICAgICAgcG9zaXRpb25zLnB1c2gocDFbMV0pO1xyXG4gICAgICAgIHBvc2l0aW9ucy5wdXNoKHAxWzJdKTtcclxuICAgICAgICBwb3NpdGlvbnMucHVzaChwMlswXSk7XHJcbiAgICAgICAgcG9zaXRpb25zLnB1c2gocDJbMV0pO1xyXG4gICAgICAgIHBvc2l0aW9ucy5wdXNoKHAyWzJdKTtcclxuICAgICAgICBpZiAocDMpIHtcclxuICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKHAzWzBdKTtcclxuICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKHAzWzFdKTtcclxuICAgICAgICAgIHBvc2l0aW9ucy5wdXNoKHAzWzJdKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwb3NpdGlvbnMgPSB0aGlzLnByb2Nlc3NCeUNvZWZmKHBvc2l0aW9ucyk7XHJcblxyXG4gICAgcmV0dXJuIHBvc2l0aW9ucztcclxuICB9XHJcblxyXG4gIGdldFBvc2l0aW9uc05vdE9mZnNldCgpIHtcclxuICAgIGxldCBwb3NpdGlvbnMgPSBuZXcgQXJyYXk8bnVtYmVyPigpO1xyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5qb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgcG9zaXRpb25zLnB1c2godGhpcy5qb2ludHNbaV0ucG9zaXRpb25bMF0pO1xyXG4gICAgICBwb3NpdGlvbnMucHVzaCh0aGlzLmpvaW50c1tpXS5wb3NpdGlvblsxXSk7XHJcbiAgICAgIHBvc2l0aW9ucy5wdXNoKHRoaXMuam9pbnRzW2ldLnBvc2l0aW9uWzJdKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcG9zaXRpb25zXHJcbiAgfVxyXG5cclxuICAvLyDmnInpmZDlhYPnvZHmoLzlpITnkIYuXHJcbiAgcHJvY2Vzc0J5Q29lZmYocG9zaXRpb25zOiBudW1iZXJbXSk6IG51bWJlcltdIHtcclxuICAgIGxldCBwMCA9IG5ldyBGbG9hdDMyQXJyYXkoW3Bvc2l0aW9uc1swXSwgcG9zaXRpb25zWzFdLCBwb3NpdGlvbnNbMl1dKTtcclxuICAgIGxldCBwMSA9IG5ldyBGbG9hdDMyQXJyYXkoW3Bvc2l0aW9uc1szXSwgcG9zaXRpb25zWzRdLCBwb3NpdGlvbnNbNV1dKTtcclxuICAgIGxldCBwMiA9IG5ldyBGbG9hdDMyQXJyYXkoW3Bvc2l0aW9uc1s2XSwgcG9zaXRpb25zWzddLCBwb3NpdGlvbnNbOF1dKTtcclxuICAgIGxldCBwMyA9IG51bGw7XHJcbiAgICBpZiAocG9zaXRpb25zLmxlbmd0aCA+IDkpIHtcclxuICAgICAgcDMgPSBuZXcgRmxvYXQzMkFycmF5KFtwb3NpdGlvbnNbOV0sIHBvc2l0aW9uc1sxMF0sIHBvc2l0aW9uc1sxMV1dKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgY2VudGVyID0gbmV3IEZsb2F0MzJBcnJheShbXHJcbiAgICAgIChwMFswXSArIHAxWzBdICsgcDJbMF0pIC8gMyxcclxuICAgICAgKHAwWzFdICsgcDFbMV0gKyBwMlsxXSkgLyAzLFxyXG4gICAgICAocDBbMl0gKyBwMVsyXSArIHAyWzJdKSAvIDMsXHJcbiAgICBdKTtcclxuICAgIGlmIChwMykge1xyXG4gICAgICBjZW50ZXIgPSBuZXcgRmxvYXQzMkFycmF5KFtcclxuICAgICAgICAocDBbMF0gKyBwMVswXSArIHAyWzBdICsgcDNbMF0pIC8gNCxcclxuICAgICAgICAocDBbMV0gKyBwMVsxXSArIHAyWzFdICsgcDNbMV0pIC8gNCxcclxuICAgICAgICAocDBbMl0gKyBwMVsyXSArIHAyWzJdICsgcDNbMl0pIC8gNCxcclxuICAgICAgXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcDAgPSB0aGlzLmdldEZpbml0ZUVsZW1lbnRDb2VmZlBvaW50KHAwLCBjZW50ZXIpO1xyXG4gICAgcDEgPSB0aGlzLmdldEZpbml0ZUVsZW1lbnRDb2VmZlBvaW50KHAxLCBjZW50ZXIpO1xyXG4gICAgcDIgPSB0aGlzLmdldEZpbml0ZUVsZW1lbnRDb2VmZlBvaW50KHAyLCBjZW50ZXIpO1xyXG5cclxuICAgIGxldCByZXN1bHQgPSBuZXcgQXJyYXk8bnVtYmVyPigpO1xyXG4gICAgcmVzdWx0LnB1c2gocDBbMF0pO1xyXG4gICAgcmVzdWx0LnB1c2gocDBbMV0pO1xyXG4gICAgcmVzdWx0LnB1c2gocDBbMl0pO1xyXG4gICAgcmVzdWx0LnB1c2gocDFbMF0pO1xyXG4gICAgcmVzdWx0LnB1c2gocDFbMV0pO1xyXG4gICAgcmVzdWx0LnB1c2gocDFbMl0pO1xyXG4gICAgcmVzdWx0LnB1c2gocDJbMF0pO1xyXG4gICAgcmVzdWx0LnB1c2gocDJbMV0pO1xyXG4gICAgcmVzdWx0LnB1c2gocDJbMl0pO1xyXG5cclxuICAgIGlmIChwMykge1xyXG4gICAgICBwMyA9IHRoaXMuZ2V0RmluaXRlRWxlbWVudENvZWZmUG9pbnQocDMsIGNlbnRlcik7XHJcbiAgICAgIHJlc3VsdC5wdXNoKHAzWzBdKTtcclxuICAgICAgcmVzdWx0LnB1c2gocDNbMV0pO1xyXG4gICAgICByZXN1bHQucHVzaChwM1syXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIGdldEZpbml0ZUVsZW1lbnRDb2VmZlBvaW50KHBvaW50OiBGbG9hdDMyQXJyYXksIGNlbnRlcjogRmxvYXQzMkFycmF5KSB7XHJcbiAgICBsZXQgdjEgPSBMb25nYW4uUG9pbnQuc3VidHJhY3QocG9pbnQsIGNlbnRlcik7XHJcbiAgICBsZXQgbTEgPSBMb25nYW4uVmVjdG9yLm1vZHVsZSh2MSk7XHJcbiAgICBsZXQgcmVzdWx0ID0gTG9uZ2FuLlBvaW50LmFkZChcclxuICAgICAgY2VudGVyLFxyXG4gICAgICBMb25nYW4uVmVjdG9yLm11bHRpcGx5KExvbmdhbi5WZWN0b3Iubm9ybWFsaXplVmVjdG9yKHYxKSwgbTEgKiB0aGlzLmZpbml0ZUVsZW1lbnRDb2VmZilcclxuICAgICk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgcmVuZGVyKCkge1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJwbGF0ZU9iamVjdCByZW5kZXJcIik7XHJcbiAgICB0aGlzLmNsZWFyU3ZnKCk7XHJcbiAgICB0aGlzLmRyYXdTdmcoKTtcclxuXHJcbiAgICBpZiAodGhpcy5qb2ludHMgJiYgdGhpcy5qb2ludHMubGVuZ3RoID4gMCkge1xyXG4gICAgICBpZiAodHlwZW9mIHRoaXMuam9pbnRzWzBdID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyDnlLvnur9cclxuICAgIGlmICh0aGlzLmpvaW50cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIGxldCBwb3NpdGlvbnMgPSB0aGlzLmdldFBvc2l0aW9ucygpO1xyXG5cclxuICAgICAgLy8gbGV0IGlzTGVnYWwgPSBQbGF0ZU9iamVjdC5jaGVja1BsYXRlTGVnYWwocG9zaXRpb25zKTtcclxuICAgICAgLy8gaWYgKCFpc0xlZ2FsKSB7XHJcbiAgICAgIC8vICAgY29uc29sZS5sb2coXCLmnb/nmoTnqbrpl7TngrnkuI3mnoTmiJDlubPpnaI6XCIsIHRoaXMubmFtZSk7XHJcbiAgICAgIC8vICAgcmV0dXJuO1xyXG4gICAgICAvLyB9XHJcblxyXG4gICAgICAvL+mmluWwvuebuOi/nlxyXG4gICAgICB0aGlzLnBvaW50cyA9IFsuLi5wb3NpdGlvbnNdO1xyXG4gICAgICB0aGlzLnBvaW50cy5wdXNoKHBvc2l0aW9uc1swXSk7XHJcbiAgICAgIHRoaXMucG9pbnRzLnB1c2gocG9zaXRpb25zWzFdKTtcclxuICAgICAgdGhpcy5wb2ludHMucHVzaChwb3NpdGlvbnNbMl0pO1xyXG4gICAgICBzdXBlci5yZW5kZXIoKTtcclxuXHJcbiAgICAgIC8vIGlmICh0aGlzLnZpZXdPcHRpb24gPT09IFZpZXdPcHRpb24uQm9keSkge1xyXG4gICAgICAvLyAgIHRoaXMuZHJhd0JvZHkocG9zaXRpb25zKTtcclxuICAgICAgLy8gfSBlbHNlIHtcclxuICAgICAgLy8gICB0aGlzLmRyYXdMaW5lKHBvc2l0aW9ucyk7XHJcbiAgICAgIC8vIH1cclxuICAgICAgdGhpcy5kcmF3TGluZShwb3NpdGlvbnMpO1xyXG4gICAgICBpZiAodGhpcy5mYWNlQ29sb3IpIHtcclxuICAgICAgICB0aGlzLnNlZ21lbnQuY29sb3IuZmFjZUNvbG9yID0gdGhpcy5mYWNlQ29sb3I7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zZWdtZW50LmNvbG9yLmZhY2VDb2xvciA9IE9iamVjdENvbG9yLnBsYXRlQ29sb3I7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldE5vcm1hbCgpIHtcclxuICAgIGxldCBwb3NpdGlvbnMgPSB0aGlzLmdldFBvc2l0aW9uc0JlZm9yZVBHcnVwWk9mZnNldCgpO1xyXG5cclxuICAgIGxldCBwMDogRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShbXHJcbiAgICAgIHBvc2l0aW9uc1swXSxcclxuICAgICAgcG9zaXRpb25zWzFdLFxyXG4gICAgICBwb3NpdGlvbnNbMl0sXHJcbiAgICBdKTtcclxuICAgIGxldCBwMTogRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShbXHJcbiAgICAgIHBvc2l0aW9uc1szXSxcclxuICAgICAgcG9zaXRpb25zWzRdLFxyXG4gICAgICBwb3NpdGlvbnNbNV0sXHJcbiAgICBdKTtcclxuICAgIGxldCBwMjogRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShbXHJcbiAgICAgIHBvc2l0aW9uc1s2XSxcclxuICAgICAgcG9zaXRpb25zWzddLFxyXG4gICAgICBwb3NpdGlvbnNbOF0sXHJcbiAgICBdKTtcclxuXHJcbiAgICBsZXQgam9pbnRzID0gbmV3IEFycmF5PEZsb2F0MzJBcnJheT4oKTtcclxuICAgIGpvaW50cy5wdXNoKHAwKTtcclxuICAgIGpvaW50cy5wdXNoKHAxKTtcclxuICAgIGpvaW50cy5wdXNoKHAyKTtcclxuXHJcbiAgICBsZXQgcDBwMSA9IExvbmdhbi5Qb2ludC5zdWJ0cmFjdChwMSwgcDApO1xyXG4gICAgbGV0IHAxcDIgPSBMb25nYW4uUG9pbnQuc3VidHJhY3QocDIsIHAxKTtcclxuXHJcbiAgICBMb25nYW4uVmVjdG9yLm5vcm1hbGl6ZShwMHAxKTtcclxuICAgIExvbmdhbi5WZWN0b3Iubm9ybWFsaXplKHAxcDIpO1xyXG4gICAgbGV0IG5vcm1hbCA9IExvbmdhbi5WZWN0b3IuY3Jvc3MocDBwMSwgcDFwMik7XHJcbiAgICBMb25nYW4uVmVjdG9yLm5vcm1hbGl6ZShub3JtYWwpO1xyXG5cclxuICAgIHJldHVybiBub3JtYWw7XHJcbiAgfVxyXG5cclxuICAvLyBkcmF3Qm9keShwb3NpdGlvbnM6IG51bWJlcltdKSB7XHJcbiAgLy8gICBsZXQgcDA6IEZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoW1xyXG4gIC8vICAgICBwb3NpdGlvbnNbMF0sXHJcbiAgLy8gICAgIHBvc2l0aW9uc1sxXSxcclxuICAvLyAgICAgcG9zaXRpb25zWzJdLFxyXG4gIC8vICAgXSk7XHJcbiAgLy8gICBsZXQgcDE6IEZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoW1xyXG4gIC8vICAgICBwb3NpdGlvbnNbM10sXHJcbiAgLy8gICAgIHBvc2l0aW9uc1s0XSxcclxuICAvLyAgICAgcG9zaXRpb25zWzVdLFxyXG4gIC8vICAgXSk7XHJcbiAgLy8gICBsZXQgcDI6IEZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoW1xyXG4gIC8vICAgICBwb3NpdGlvbnNbNl0sXHJcbiAgLy8gICAgIHBvc2l0aW9uc1s3XSxcclxuICAvLyAgICAgcG9zaXRpb25zWzhdLFxyXG4gIC8vICAgXSk7XHJcblxyXG4gIC8vICAgbGV0IGpvaW50cyA9IG5ldyBBcnJheTxGbG9hdDMyQXJyYXk+KCk7XHJcbiAgLy8gICBqb2ludHMucHVzaChwMCk7XHJcbiAgLy8gICBqb2ludHMucHVzaChwMSk7XHJcbiAgLy8gICBqb2ludHMucHVzaChwMik7XHJcblxyXG4gIC8vICAgbGV0IHAzOiBGbG9hdDMyQXJyYXkgPSBudWxsO1xyXG4gIC8vICAgaWYgKHBvc2l0aW9ucy5sZW5ndGggPiA5KSB7XHJcbiAgLy8gICAgIHAzID0gbmV3IEZsb2F0MzJBcnJheShbcG9zaXRpb25zWzldLCBwb3NpdGlvbnNbMTBdLCBwb3NpdGlvbnNbMTFdXSk7XHJcbiAgLy8gICAgIGpvaW50cy5wdXNoKHAzKTtcclxuICAvLyAgIH1cclxuXHJcbiAgLy8gICBsZXQgcDBwMSA9IExvbmdhbi5Qb2ludC5zdWJ0cmFjdChwMSwgcDApO1xyXG4gIC8vICAgbGV0IHAxcDIgPSBMb25nYW4uUG9pbnQuc3VidHJhY3QocDIsIHAxKTtcclxuXHJcbiAgLy8gICBMb25nYW4uVmVjdG9yLm5vcm1hbGl6ZShwMHAxKTtcclxuICAvLyAgIExvbmdhbi5WZWN0b3Iubm9ybWFsaXplKHAxcDIpO1xyXG4gIC8vICAgbGV0IG5vcm1hbCA9IExvbmdhbi5WZWN0b3IuY3Jvc3MocDBwMSwgcDFwMik7XHJcbiAgLy8gICBMb25nYW4uVmVjdG9yLm5vcm1hbGl6ZShub3JtYWwpO1xyXG4gIC8vICAgbGV0IHRoaWNrbmVzcyA9IHRoaXMuZ2V0VGhpY2tuZXNzKCkgPyB0aGlzLmdldFRoaWNrbmVzcygpIDogMTtcclxuICAvLyAgIC8vIGNt6L2sbVxyXG4gIC8vICAgdGhpY2tuZXNzIC89IDEwMDtcclxuICAvLyAgIG5vcm1hbCA9IExvbmdhbi5WZWN0b3IubXVsdGlwbHkobm9ybWFsLCB0aGlja25lc3MpO1xyXG5cclxuICAvLyAgIGxldCByZXN1bHRQb3NpdGlvbnMgPSBuZXcgQXJyYXk8bnVtYmVyPigpO1xyXG4gIC8vICAgcmVzdWx0UG9zaXRpb25zID0gcmVzdWx0UG9zaXRpb25zLmNvbmNhdChbLi4uam9pbnRzWzBdXSk7XHJcbiAgLy8gICBmb3IgKGxldCBpID0gMTsgaSA8IGpvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gIC8vICAgICAvL1xyXG4gIC8vICAgICByZXN1bHRQb3NpdGlvbnMgPSByZXN1bHRQb3NpdGlvbnMuY29uY2F0KFsuLi5qb2ludHNbaV1dKTtcclxuICAvLyAgICAgcmVzdWx0UG9zaXRpb25zID0gcmVzdWx0UG9zaXRpb25zLmNvbmNhdChbLi4uam9pbnRzW2ldXSk7XHJcbiAgLy8gICB9XHJcbiAgLy8gICByZXN1bHRQb3NpdGlvbnMgPSByZXN1bHRQb3NpdGlvbnMuY29uY2F0KFsuLi5qb2ludHNbMF1dKTtcclxuICAvLyAgIGxldCBpbmRpY2VzID0gbmV3IEFycmF5PG51bWJlcj4oKTtcclxuICAvLyAgIGluZGljZXMucHVzaChyZXN1bHRQb3NpdGlvbnMubGVuZ3RoIC8gMyk7XHJcbiAgLy8gICBmb3IgKGxldCBpID0gMDsgaSA8IHJlc3VsdFBvc2l0aW9ucy5sZW5ndGggLyAzOyBpKyspIHtcclxuICAvLyAgICAgaW5kaWNlcy5wdXNoKGkpO1xyXG4gIC8vICAgfVxyXG5cclxuICAvLyAgIGxldCBhbmdlbCA9IExvbmdhbi5WZWN0b3IuYW5nbGUobm9ybWFsLCBuZXcgRmxvYXQzMkFycmF5KFswLCAwLCAxXSkpO1xyXG4gIC8vICAgaWYgKGFuZ2VsIDwgTWF0aC5QSSAvIDIpIHtcclxuICAvLyAgICAgLy9cclxuICAvLyAgIH0gZWxzZSBpZiAoYW5nZWwgPT0gTWF0aC5QSSAvIDIpIHtcclxuICAvLyAgICAgLy8g5Z6C6Z2iLlxyXG4gIC8vICAgfSBlbHNlIHtcclxuICAvLyAgICAgLy8g5Y+N5ZCRLlxyXG4gIC8vICAgICBsZXQgcmVzdWx0UG9zaXRpb25zID0gbmV3IEFycmF5PG51bWJlcj4oKTtcclxuICAvLyAgICAgcmVzdWx0UG9zaXRpb25zID0gcmVzdWx0UG9zaXRpb25zLmNvbmNhdChbLi4uam9pbnRzW2pvaW50cy5sZW5ndGggLSAxXV0pO1xyXG4gIC8vICAgICBmb3IgKGxldCBpID0gam9pbnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgLy8gICAgICAgLy9cclxuICAvLyAgICAgICByZXN1bHRQb3NpdGlvbnMgPSByZXN1bHRQb3NpdGlvbnMuY29uY2F0KFsuLi5qb2ludHNbaV1dKTtcclxuICAvLyAgICAgICByZXN1bHRQb3NpdGlvbnMgPSByZXN1bHRQb3NpdGlvbnMuY29uY2F0KFsuLi5qb2ludHNbaV1dKTtcclxuICAvLyAgICAgfVxyXG4gIC8vICAgICByZXN1bHRQb3NpdGlvbnMgPSByZXN1bHRQb3NpdGlvbnMuY29uY2F0KFsuLi5qb2ludHNbam9pbnRzLmxlbmd0aCAtIDFdXSk7XHJcbiAgLy8gICB9XHJcblxyXG4gIC8vICAgTG9uZ2FuQ29yZS5KU19PcGVuX1NlZ21lbnRfQnlfS2V5KHRoaXMuc2VnbWVudC5rZXkpO1xyXG4gIC8vICAge1xyXG4gIC8vICAgICBjb25zb2xlLmxvZyhcInBsYXRlU2VnS2V5OlwiLCB0aGlzLnNlZ21lbnQua2V5KTtcclxuICAvLyAgICAgbGV0IHBvbHlnb24gPSBMb25nYW5Db3JlLkpTX0ZlYXR1cmVfRXh0cnVkZShcclxuICAvLyAgICAgICBuZXcgRmxvYXQ2NEFycmF5KHJlc3VsdFBvc2l0aW9ucyksXHJcbiAgLy8gICAgICAgbmV3IEludDMyQXJyYXkoaW5kaWNlcyksXHJcbiAgLy8gICAgICAgbmV3IEZsb2F0NjRBcnJheShub3JtYWwpLFxyXG4gIC8vICAgICAgIFwiXCJcclxuICAvLyAgICAgKTtcclxuXHJcbiAgLy8gICAgIGxldCBzaGVsbF9rZXkgPSBMb25nYW5Db3JlLkpTX0luc2VydF9Ucmlhbmd1bGFyX1NoZWxsKFxyXG4gIC8vICAgICAgIHBvbHlnb24ucG9zaXRpb25zLFxyXG4gIC8vICAgICAgIHBvbHlnb24uaW5kZXhlc1xyXG4gIC8vICAgICApO1xyXG4gIC8vICAgICBMb25nYW5Db3JlLkpTX1VuU2V0X0dlb21ldHJ5X0NvbG9yKHNoZWxsX2tleSwgXCJmYWNlc1wiKTtcclxuICAvLyAgIH1cclxuICAvLyAgIExvbmdhbkNvcmUuSlNfQ2xvc2VfU2VnbWVudCgpO1xyXG4gIC8vIH1cclxuXHJcbiAgLy8g5Yik5pat6L6T5YWl54K55piv5ZCm6YO95YWx6Z2iLlxyXG5cclxuICAgc3RhdGljIGNoZWNrUGxhdGVMZWdhbChwb3NpdGlvbnM6IG51bWJlcltdKTogYm9vbGVhbiB7XHJcbiAgICAvLyDlhYjliKTmlq1wMCxwMSxwMuaYr+WQpuWcqOWQjOS4gOebtOe6v+S4ilxyXG4gICAgLy8g5pivLS0t6Iul5LiN5a2Y5Zyo56ysNOS4queCuS0tLee7mOWItuWksei0pS5cclxuICAgIC8vICAgLS0t5a2Y5Zyo56ysNOS4queCuS0tLeWIpOaWrXAwLHAxLHAy5piv5ZCm5Zyo5ZCM5LiA55u057q/5LiKLlxyXG4gICAgLy8g5ZCmLS0t6K6h566X56ys5LiJ5Liq54K55LiO5bmz6Z2i55qE6Led56a7LlxyXG4gICAgbGV0IGlzTGVnYWwgPSB0cnVlO1xyXG5cclxuICAgIGxldCBwMCA9IG5ldyBGbG9hdDMyQXJyYXkoW3Bvc2l0aW9uc1swXSwgcG9zaXRpb25zWzFdLCBwb3NpdGlvbnNbMl1dKTtcclxuICAgIGxldCBwMSA9IG5ldyBGbG9hdDMyQXJyYXkoW3Bvc2l0aW9uc1szXSwgcG9zaXRpb25zWzRdLCBwb3NpdGlvbnNbNV1dKTtcclxuICAgIGxldCBwMiA9IG5ldyBGbG9hdDMyQXJyYXkoW3Bvc2l0aW9uc1s2XSwgcG9zaXRpb25zWzddLCBwb3NpdGlvbnNbOF1dKTtcclxuICAgIGlzTGVnYWwgPSBQbGF0ZU9iamVjdC5pc1BsYXRlKHAwLCBwMSwgcDIpO1xyXG5cclxuICAgIGlmIChwb3NpdGlvbnMubGVuZ3RoID09PSA5KSB7XHJcbiAgICAgIC8vIOS4jemcgOimgeaTjeS9nC5cclxuICAgIH0gZWxzZSBpZiAocG9zaXRpb25zLmxlbmd0aCA9PT0gMTIpIHtcclxuICAgICAgLy9cclxuICAgICAgbGV0IHAzID0gbmV3IEZsb2F0MzJBcnJheShbcG9zaXRpb25zWzldLCBwb3NpdGlvbnNbMTBdLCBwb3NpdGlvbnNbMTFdXSk7XHJcblxyXG4gICAgICBpZiAoIWlzTGVnYWwpIHtcclxuICAgICAgICAvLyDkuInngrnlhbHnur9cclxuICAgICAgICBpc0xlZ2FsID0gUGxhdGVPYmplY3QuaXNQbGF0ZShwMCwgcDEsIHAzKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyDliKTmlq3ngrlwM+aYr+WQpuWcqOW5s+mdouWGhS5cclxuICAgICAgICBsZXQgYXhpczEgPSBMb25nYW4uUG9pbnQuc3VidHJhY3QocDEsIHAwKTtcclxuICAgICAgICBMb25nYW4uVmVjdG9yLm5vcm1hbGl6ZShheGlzMSk7XHJcbiAgICAgICAgbGV0IGF4aXMyID0gTG9uZ2FuLlBvaW50LnN1YnRyYWN0KHAyLCBwMCk7XHJcbiAgICAgICAgTG9uZ2FuLlZlY3Rvci5ub3JtYWxpemUoYXhpczIpO1xyXG5cclxuICAgICAgICBsZXQgbm9ybWFsID0gTG9uZ2FuLlZlY3Rvci5jcm9zcyhheGlzMSwgYXhpczIpO1xyXG4gICAgICAgIExvbmdhbi5WZWN0b3Iubm9ybWFsaXplKG5vcm1hbCk7XHJcblxyXG4gICAgICAgIGxldCBwcm9qZWN0UG9pbnQgPSBMb25nYW4uR2VvbWV0cnlPcGVyYXRvcnMucHJvamVjdFBvaW50VG9QbGFuZShcclxuICAgICAgICAgIHAzLFxyXG4gICAgICAgICAgcDAsXHJcbiAgICAgICAgICBub3JtYWxcclxuICAgICAgICApO1xyXG4gICAgICAgIGxldCB2ZWN0b3IgPSBMb25nYW4uUG9pbnQuc3VidHJhY3QocHJvamVjdFBvaW50LCBwMyk7XHJcbiAgICAgICAgaWYgKExvbmdhbi5HZW9tZXRyeU9wZXJhdG9ycy5zYW1lVmVjdG9yKHZlY3RvciwgbmV3IEZsb2F0MzJBcnJheShbMCwgMCwgMF0pKSkge1xyXG4gICAgICAgICAgLy8gcDPlnKjpnaLlhoUsaXNMZWdhbCA9IHRydWVcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaXNMZWdhbCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaXNMZWdhbCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBpc0xlZ2FsO1xyXG4gICAgLy8gcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgaXNQbGF0ZShwMDogRmxvYXQzMkFycmF5LCBwMTogRmxvYXQzMkFycmF5LCBwMjogRmxvYXQzMkFycmF5KSB7XHJcbiAgICBpZihMb25nYW4uR2VvbWV0cnlPcGVyYXRvcnMuc2FtZVBvaW50KHAxLCBwMikgJiYgTG9uZ2FuLkdlb21ldHJ5T3BlcmF0b3JzLnNhbWVQb2ludChwMSxwMikpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgbGV0IGF4aXMxID0gTG9uZ2FuLlBvaW50LnN1YnRyYWN0KHAxLCBwMCk7XHJcbiAgICBMb25nYW4uVmVjdG9yLm5vcm1hbGl6ZShheGlzMSk7XHJcbiAgICBsZXQgYXhpczIgPSBMb25nYW4uUG9pbnQuc3VidHJhY3QocDIsIHAwKTtcclxuICAgIExvbmdhbi5WZWN0b3Iubm9ybWFsaXplKGF4aXMyKTtcclxuXHJcbiAgICByZXR1cm4gIUxvbmdhbi5HZW9tZXRyeU9wZXJhdG9ycy5pc1BhcmFsbGVsKGF4aXMxLCBheGlzMik7XHJcbiAgfVxyXG5cclxuICBkcmF3TGluZShwb3NpdGlvbnM6IG51bWJlcltdKSB7XHJcbiAgICBsZXQgaW5kaWNlczEgPSBbMCwgMSwgMl07XHJcbiAgICBsZXQgaW5kaWNlczIgPSBbMiwgMSwgMF07XHJcblxyXG4gICAgaWYgKHBvc2l0aW9ucy5sZW5ndGggPT09IDkpIHtcclxuICAgICAgdGhpcy5zZWdtZW50Lmluc2VydFRyaWFuZ3VsYXJTaGVsbChwb3NpdGlvbnMsIGluZGljZXMxKTtcclxuICAgICAgdGhpcy5zZWdtZW50Lmluc2VydFRyaWFuZ3VsYXJTaGVsbChwb3NpdGlvbnMsIGluZGljZXMyKTtcclxuICAgIH0gZWxzZSBpZiAocG9zaXRpb25zLmxlbmd0aCA+IDkpIHtcclxuICAgICAgbGV0IHAwID0gbmV3IEZsb2F0MzJBcnJheShwb3NpdGlvbnMuc2xpY2UoMCwgMykpO1xyXG4gICAgICBsZXQgcDEgPSBuZXcgRmxvYXQzMkFycmF5KHBvc2l0aW9ucy5zbGljZSgzLCA2KSk7XHJcbiAgICAgIGxldCBwMiA9IG5ldyBGbG9hdDMyQXJyYXkocG9zaXRpb25zLnNsaWNlKDYsIDkpKTtcclxuICAgICAgbGV0IHAzID0gbmV3IEZsb2F0MzJBcnJheShwb3NpdGlvbnMuc2xpY2UoOSwgMTIpKTtcclxuXHJcbiAgICAgIGxldCBpbnRlcjAgPSBMb25nYW4uR2VvbWV0cnlPcGVyYXRvcnMuaW50ZXJzZWN0aW9uTGluZVNlZ21lbnRMaW5lU2VnbWVudChwMCwgcDEsIHAyLCBwMyk7XHJcbiAgICAgIGxldCBpbnRlcjEgPSBMb25nYW4uR2VvbWV0cnlPcGVyYXRvcnMuaW50ZXJzZWN0aW9uTGluZVNlZ21lbnRMaW5lU2VnbWVudChwMCwgcDIsIHAxLCBwMyk7XHJcbiAgICAgIC8vIGxldCBpbnRlcjIgPSBMb25nYW4uR2VvbWV0cnlPcGVyYXRvcnMuaW50ZXJzZWN0aW9uTGluZVNlZ21lbnRMaW5lU2VnbWVudChwMCwgcDMsIHAxLCBwMik7XHJcbiAgICAgIGlmKGludGVyMSkge1xyXG4gICAgICAgIGxldCBwb2ludHMxID0gcG9zaXRpb25zLnNsaWNlKDAsIDkpO1xyXG4gICAgICAgIGxldCBwb2ludHMyID0gcG9zaXRpb25zLnNsaWNlKDYsIDEyKS5jb25jYXQocG9zaXRpb25zLnNsaWNlKDAsIDMpKTtcclxuICAgICAgICB0aGlzLnNlZ21lbnQuaW5zZXJ0VHJpYW5ndWxhclNoZWxsKHBvaW50czEsIGluZGljZXMxKTtcclxuICAgICAgICB0aGlzLnNlZ21lbnQuaW5zZXJ0VHJpYW5ndWxhclNoZWxsKHBvaW50czIsIGluZGljZXMxKTtcclxuICBcclxuICAgICAgICB0aGlzLnNlZ21lbnQuaW5zZXJ0VHJpYW5ndWxhclNoZWxsKHBvaW50czEsIGluZGljZXMyKTtcclxuICAgICAgICB0aGlzLnNlZ21lbnQuaW5zZXJ0VHJpYW5ndWxhclNoZWxsKHBvaW50czIsIGluZGljZXMyKTtcclxuICAgICAgfSBlbHNlIGlmKGludGVyMCkge1xyXG4gICAgICAgIGxldCBwb2ludHMxID0gcG9zaXRpb25zLnNsaWNlKDAsIDkpO1xyXG4gICAgICAgIGxldCBwb2ludHMyID0gcG9zaXRpb25zLnNsaWNlKDAsIDYpLmNvbmNhdChwb3NpdGlvbnMuc2xpY2UoOSwgMTIpKTtcclxuICAgICAgICB0aGlzLnNlZ21lbnQuaW5zZXJ0VHJpYW5ndWxhclNoZWxsKHBvaW50czEsIGluZGljZXMxKTtcclxuICAgICAgICB0aGlzLnNlZ21lbnQuaW5zZXJ0VHJpYW5ndWxhclNoZWxsKHBvaW50czIsIGluZGljZXMxKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWdtZW50Lmluc2VydFRyaWFuZ3VsYXJTaGVsbChwb2ludHMxLCBpbmRpY2VzMik7XHJcbiAgICAgICAgdGhpcy5zZWdtZW50Lmluc2VydFRyaWFuZ3VsYXJTaGVsbChwb2ludHMyLCBpbmRpY2VzMik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGV0IHBvaW50czEgPSBwb3NpdGlvbnMuc2xpY2UoMCwgOSk7XHJcbiAgICAgICAgbGV0IHBvaW50czIgPSBwb3NpdGlvbnMuc2xpY2UoMywgMTIpO1xyXG4gICAgICAgIHRoaXMuc2VnbWVudC5pbnNlcnRUcmlhbmd1bGFyU2hlbGwocG9pbnRzMSwgaW5kaWNlczEpO1xyXG4gICAgICAgIHRoaXMuc2VnbWVudC5pbnNlcnRUcmlhbmd1bGFyU2hlbGwocG9pbnRzMiwgaW5kaWNlczEpO1xyXG5cclxuICAgICAgICB0aGlzLnNlZ21lbnQuaW5zZXJ0VHJpYW5ndWxhclNoZWxsKHBvaW50czEsIGluZGljZXMyKTtcclxuICAgICAgICB0aGlzLnNlZ21lbnQuaW5zZXJ0VHJpYW5ndWxhclNoZWxsKHBvaW50czIsIGluZGljZXMyKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIHRoaXMuc2VnbWVudC5yZW5kZXJpbmdPcHRpb25zLmN1bGxCYWNrRmFjZSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZHJhd1N2ZygpIHtcclxuICAgIGlmICghdGhpcy5jaGVja0J1c2luZXNzU3RhdGVJc0FjdGl2ZSgpKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaXJvID0gUHJvY2Vzcy5hY3RpdmVQcm9jZXNzLmFjdGl2ZVZpZXdlci5maW5kSW5zdGFuY2VPYmplY3QodGhpcyk7XHJcbiAgICBpZiAoaXJvICYmICFpcm8udmlzaWJsZSkge1xyXG4gICAgICB0aGlzLmNsZWFyU3ZnKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBpZiAodGhpcy5faXNEcmF3TGFiZWwpIHtcclxuICAgIC8vICAgdGhpcy5kcmF3TGFiZWwoKTtcclxuICAgIC8vIH1cclxuICAgIGlmICh0aGlzLl9pc0RyYXdBeGlzKSB7XHJcbiAgICAgIHRoaXMuZHJhd0F4aXMoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsZWFyU3ZnKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMubGFiZWxUZXh0KSB7XHJcbiAgICAgIHRoaXMubGFiZWxUZXh0LmNsZWFyKCk7XHJcbiAgICAgIHRoaXMubGFiZWxUZXh0ID0gbnVsbDtcclxuICAgICAgdGhpcy5sYWJlbFJlY3QucmVtb3ZlKCk7XHJcbiAgICAgIHRoaXMubGFiZWxSZWN0ID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5heGlzU2VnKSB7XHJcbiAgICAgIHRoaXMuYXhpc1NlZy5jbGVhckFsbCgpO1xyXG4gICAgICB0aGlzLmF4aXNTZWcgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHN1cGVyLmNsZWFyU3ZnKCk7XHJcbiAgfVxyXG5cclxuICBkcmF3TGFiZWwocG9zaXRpb246IFtudW1iZXIsIG51bWJlcl0pIHtcclxuICAgIGxldCB2aWV3ZXIgPSBQcm9jZXNzLmFjdGl2ZVByb2Nlc3MuYWN0aXZlVmlld2VyO1xyXG4gICAgbGV0IHggPSBwb3NpdGlvblswXTtcclxuICAgIGxldCB5ID0gcG9zaXRpb25bMV07XHJcbiAgICBpZiAodGhpcy5sYWJlbFJlY3QgJiYgdGhpcy5sYWJlbFRleHQpIHtcclxuICAgICAgdGhpcy5sYWJlbFJlY3QubW92ZSh4LCB5IC0gMjApO1xyXG4gICAgICB0aGlzLmxhYmVsVGV4dC5tb3ZlKHggKyA1LCB5IC0gMTgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IGRyYXcgPSBTdmdEcmF3LmdldEluc3RhbmNlKHZpZXdlci5jb250YWluZXIuaWQpLmRyYXc7XHJcblxyXG4gICAgICAvLyBpZiAoIXRoaXMuX2dyb3VwKSB7XHJcbiAgICAgIHRoaXMuX2dyb3VwID0gZHJhdy5ncm91cCgpO1xyXG4gICAgICAvLyB9XHJcblxyXG4gICAgICBsZXQgbmFtZSA9IHRoaXMubmFtZTtcclxuICAgICAgbGV0IHRoaWNrbmVzcyA9IHRoaXMuZ2V0VGhpY2tuZXNzKClcclxuICAgICAgICA/IHRoaXMuZ2V0VGhpY2tuZXNzKCkudG9TdHJpbmcoKVxyXG4gICAgICAgIDogXCIwXCI7XHJcblxyXG4gICAgICBsZXQgdGV4dFdpZHRoID1cclxuICAgICAgICBNYXRoLm1heCgzICsgbmFtZS5sZW5ndGgsIDcgKyB0aGlja25lc3MubGVuZ3RoKSAqXHJcbiAgICAgICAgRGVzaWduQmFzZU9iamVjdC5mb250U2l6ZTtcclxuXHJcbiAgICAgIGxldCByZWN0ID0gZHJhd1xyXG4gICAgICAgIC5yZWN0KHRleHRXaWR0aCwgMTIgKiA4KVxyXG4gICAgICAgIC5yYWRpdXMoMilcclxuICAgICAgICAuZmlsbChcIiNGRkZGRTFcIilcclxuICAgICAgICAvLyAuc3Ryb2tlKHsgY29sb3I6IFwiI2ZmZlwiLCB3aWR0aDogMSB9KVxyXG4gICAgICAgIC5tb3ZlKHgsIHkgLSAyMClcclxuICAgICAgICAuYXR0cihcInN0eWxlXCIsIGBwb2ludGVyLWV2ZW50czogbm9uZX1gKTtcclxuXHJcbiAgICAgIGxldCB0ZXh0ID0gZHJhd1xyXG4gICAgICAgIC50ZXh0KChhZGQpID0+IHtcclxuICAgICAgICAgIGFkZC50c3BhbihgTmFtZToke25hbWV9YCkubmV3TGluZSgpO1xyXG4gICAgICAgICAgYWRkLnRzcGFuKGBUaGlja25lc3MoY20pOiR7dGhpY2tuZXNzfWApLm5ld0xpbmUoKTtcclxuICAgICAgICAgIGFkZC50c3BhbihgSm9pbnRBOiR7dGhpcy5qb2ludHNbMF0ubmFtZX1gKS5uZXdMaW5lKCk7XHJcbiAgICAgICAgICBhZGQudHNwYW4oYEpvaW50Qjoke3RoaXMuam9pbnRzWzFdLm5hbWV9YCkubmV3TGluZSgpO1xyXG4gICAgICAgICAgYWRkLnRzcGFuKGBKb2ludEM6JHt0aGlzLmpvaW50c1syXS5uYW1lfWApLm5ld0xpbmUoKTtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5qb2ludHMubGVuZ3RoID4gMykge1xyXG4gICAgICAgICAgICBhZGQudHNwYW4oYEpvaW50RDoke3RoaXMuam9pbnRzWzNdLm5hbWV9YCkubmV3TGluZSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmZvbnQoeyBmaWxsOiBcIiMwMDBcIiB9KVxyXG4gICAgICAgIC5hdHRyKFwiZm9udC1zaXplXCIsIDEyKVxyXG4gICAgICAgIC5tb3ZlKHggKyA1LCB5IC0gMTgpO1xyXG4gICAgICB0aGlzLl9ncm91cC5hZGQocmVjdCkuYWRkKHRleHQpO1xyXG4gICAgICB0aGlzLmxhYmVsUmVjdCA9IHJlY3Q7XHJcbiAgICAgIHRoaXMubGFiZWxUZXh0ID0gdGV4dDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRyYXdBeGlzKCkge1xyXG4gICAgaWYgKCF0aGlzLmNoZWNrQnVzaW5lc3NTdGF0ZUlzQWN0aXZlKCkpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IHZpZXdlciA9IFByb2Nlc3MuYWN0aXZlUHJvY2Vzcy5hY3RpdmVWaWV3ZXI7XHJcbiAgICBsZXQgaXJvID0gdmlld2VyLmZpbmRJbnN0YW5jZU9iamVjdCh0aGlzKTtcclxuICAgIGlmIChpcm8gJiYgIWlyby52aXNpYmxlKSB7XHJcbiAgICAgIHRoaXMuaXNEcmF3QXhpcyA9IGZhbHNlO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHVuaXRMZW5ndGhhID0gdmlld2VyLnVuaXRMZW5ndGggLyA0O1xyXG4gICAgbGV0IHNjYWxlTWF0cml4ID0gTG9uZ2FuLk1hdHJpeDQuc2NhbGVNYXRyaXgoXHJcbiAgICAgIHVuaXRMZW5ndGhhLFxyXG4gICAgICB1bml0TGVuZ3RoYSxcclxuICAgICAgdW5pdExlbmd0aGFcclxuICAgICk7XHJcbiAgICBsZXQgY2VudGVyID0gdGhpcy5nZXRDZW50ZXIoKTtcclxuICAgIGxldCB0cmFuc2xhdGVNYXRyaXggPSBMb25nYW4uTWF0cml4NC50cmFuc2xhdGVNYXRyaXgoXHJcbiAgICAgIGNlbnRlclswXSxcclxuICAgICAgY2VudGVyWzFdLFxyXG4gICAgICBjZW50ZXJbMl1cclxuICAgICk7XHJcbiAgICBpZiAodGhpcy5heGlzU2VnKSB7XHJcbiAgICAgIC8vIHRoaXMuYXhpc1NlZy5tb2RlbGxpbmdNYXRyaXguc2V0KHNjYWxlTWF0cml4KTtcclxuICAgICAgLy8gdGhpcy5heGlzU2VnLmNsZWFyQWxsKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgdmlld2VyID0gUHJvY2Vzcy5hY3RpdmVQcm9jZXNzLmFjdGl2ZVZpZXdlcjtcclxuICAgICAgbGV0IHVuaXRMZW5ndGhhID0gdmlld2VyLnVuaXRMZW5ndGggLyAyO1xyXG4gICAgICBjb25zb2xlLmxvZyhcInVuaXRMZW5ndGhhXCIsIHVuaXRMZW5ndGhhKTtcclxuXHJcbiAgICAgIGxldCBheGlzID0gdGhpcy5nZXRMb2NhbEF4aXMoKTtcclxuICAgICAgbGV0IG9yaWdpbiA9IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsIDBdKTtcclxuXHJcbiAgICAgIGxldCB4UG9pbnQgPSBMb25nYW4uUG9pbnQuYWRkKG9yaWdpbiwgYXhpcy54QXhpcyk7XHJcbiAgICAgIGxldCB5UG9pbnQgPSBMb25nYW4uUG9pbnQuYWRkKG9yaWdpbiwgYXhpcy55QXhpcyk7XHJcbiAgICAgIGxldCB6UG9pbnQgPSBMb25nYW4uUG9pbnQuYWRkKG9yaWdpbiwgYXhpcy56QXhpcyk7XHJcblxyXG4gICAgICBsZXQgbWF0cml4ID0gTG9uZ2FuLk1hdHJpeDQuaWRlbnRpdHkoKTtcclxuICAgICAgaWYgKHRoaXMuc2VnbWVudC5hdHRyaWJ1dGVzLmluZGV4T2YoTG9uZ2FuLkxvbmdhbkNvcmUuT2JqZWN0VHlwZS5UWVBFX01vZGVsbGluZ01hdHJpeCkpIHtcclxuICAgICAgICBpZiAodGhpcy5zZWdtZW50Lm1vZGVsbGluZ01hdHJpeC5tYXRyaXgpIHtcclxuICAgICAgICAgIG1hdHJpeCA9IG5ldyBGbG9hdDMyQXJyYXkodGhpcy5zZWdtZW50Lm1vZGVsbGluZ01hdHJpeC5tYXRyaXgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBsZXQgYXhpc1BhcmVudCA9IHZpZXdlci5zY2VuZVNlZ21lbnQuc3Vic2VnbWVudChcImF4aXNQYXJcIiArIHRoaXMuaWQpO1xyXG4gICAgICBheGlzUGFyZW50Lm1vZGVsbGluZ01hdHJpeC5zZXQobWF0cml4KTtcclxuICAgICAgdGhpcy5heGlzU2VnID0gYXhpc1BhcmVudC5zdWJzZWdtZW50KFwiYXhpc1wiKTtcclxuXHJcbiAgICAgIHRoaXMuYXhpc1NlZy5yZW5kZXJpbmdPcHRpb25zLmRlcHRoUmFuZ2UgPSBbMCwgMC4xXTtcclxuXHJcbiAgICAgIGxldCB4U2VnID0gdGhpcy5heGlzU2VnLnN1YnNlZ21lbnQoXCJ4XCIpO1xyXG4gICAgICBsZXQgeVNlZyA9IHRoaXMuYXhpc1NlZy5zdWJzZWdtZW50KFwieVwiKTtcclxuICAgICAgbGV0IHpTZWcgPSB0aGlzLmF4aXNTZWcuc3Vic2VnbWVudChcInpcIik7XHJcblxyXG4gICAgICB4U2VnLmNvbG9yLnNldExpbmUoWzAsIDAsIDI1NV0pO1xyXG4gICAgICB4U2VnLmNvbG9yLnNldEZhY2UoWzAsIDAsIDI1NV0pO1xyXG4gICAgICB5U2VnLmNvbG9yLnNldExpbmUoWzAsIDI1NSwgMF0pO1xyXG4gICAgICB5U2VnLmNvbG9yLnNldEZhY2UoWzAsIDI1NSwgMF0pO1xyXG4gICAgICB6U2VnLmNvbG9yLnNldExpbmUoWzI1NSwgMCwgMF0pO1xyXG4gICAgICB6U2VnLmNvbG9yLnNldEZhY2UoWzI1NSwgMCwgMF0pO1xyXG5cclxuICAgICAgbGV0IHggPSB4U2VnLmluc2VydExpbmUob3JpZ2luLCB4UG9pbnQpO1xyXG4gICAgICBsZXQgeSA9IHlTZWcuaW5zZXJ0TGluZShvcmlnaW4sIHlQb2ludCk7XHJcbiAgICAgIGxldCB6ID0gelNlZy5pbnNlcnRMaW5lKG9yaWdpbiwgelBvaW50KTtcclxuXHJcbiAgICAgIHhTZWcuaW5zZXJ0UGFyYW1ldHJpY0dlb21ldHJ5KFwic2NvblwiLCBbXHJcbiAgICAgICAgLi4uTG9uZ2FuLlBvaW50LmFkZCh4UG9pbnQsIExvbmdhbi5WZWN0b3IubXVsdGlwbHkoYXhpcy54QXhpcywgMC41KSksXHJcbiAgICAgICAgLi4uTG9uZ2FuLlZlY3Rvci5tdWx0aXBseShheGlzLnhBeGlzLCAtMSksXHJcbiAgICAgICAgMC41LFxyXG4gICAgICAgIDAuMixcclxuICAgICAgXSk7XHJcbiAgICAgIHlTZWcuaW5zZXJ0UGFyYW1ldHJpY0dlb21ldHJ5KFwic2NvblwiLCBbXHJcbiAgICAgICAgLi4uTG9uZ2FuLlBvaW50LmFkZCh5UG9pbnQsIExvbmdhbi5WZWN0b3IubXVsdGlwbHkoYXhpcy55QXhpcywgMC41KSksXHJcbiAgICAgICAgLi4uTG9uZ2FuLlZlY3Rvci5tdWx0aXBseShheGlzLnlBeGlzLCAtMSksXHJcbiAgICAgICAgMC41LFxyXG4gICAgICAgIDAuMixcclxuICAgICAgXSk7XHJcbiAgICAgIHpTZWcuaW5zZXJ0UGFyYW1ldHJpY0dlb21ldHJ5KFwic2NvblwiLCBbXHJcbiAgICAgICAgLi4uTG9uZ2FuLlBvaW50LmFkZCh6UG9pbnQsIExvbmdhbi5WZWN0b3IubXVsdGlwbHkoYXhpcy56QXhpcywgMC41KSksXHJcbiAgICAgICAgLi4uTG9uZ2FuLlZlY3Rvci5tdWx0aXBseShheGlzLnpBeGlzLCAtMSksXHJcbiAgICAgICAgMC41LFxyXG4gICAgICAgIDAuMixcclxuICAgICAgXSk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IG1hdHJpeCA9IExvbmdhbi5NYXRyaXg0LmlkZW50aXR5KCk7XHJcbiAgICBtYXRyaXggPSBMb25nYW4uTWF0cml4NC5tdWx0aXBseShtYXRyaXgsIHRyYW5zbGF0ZU1hdHJpeCk7XHJcbiAgICBtYXRyaXggPSBMb25nYW4uTWF0cml4NC5tdWx0aXBseShtYXRyaXgsIHNjYWxlTWF0cml4KTtcclxuICAgIHRoaXMuYXhpc1NlZy5tb2RlbGxpbmdNYXRyaXguc2V0KG1hdHJpeCk7XHJcbiAgfVxyXG5cclxuICAvLyBnZXRUaGlja25lc3MoKSB7XHJcbiAgLy8gICByZXR1cm4gdGhpcy5fcGxhdGVUaGlja25lc3M7XHJcbiAgLy8gfVxyXG5cclxuICBwdWJsaWMgc2V0UmVmZXJlbmNlKHBtOiBQZXJzaXN0ZW5jZU1hbmFnZXIpIHtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5qb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGpvaW50ID0gdGhpcy5qb2ludHNbaV07XHJcblxyXG4gICAgICBpZiAodHlwZW9mIGpvaW50ID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdEpvaW50ID0gcG0ucmVmZXJlbmNlTGlzdC5nZXQoam9pbnQgYXMgc3RyaW5nKTtcclxuICAgICAgICBpZiAocmVzdWx0Sm9pbnQpIHtcclxuICAgICAgICAgIHRoaXMuam9pbnRzW2ldID0gcmVzdWx0Sm9pbnQgYXMgSm9pbnRPYmplY3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiB0aGlzLnBHcnVwID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgIGxldCBwR3J1cCA9IHBtLnJlZmVyZW5jZUxpc3QuZ2V0KHRoaXMucEdydXAgYXMgc3RyaW5nKTtcclxuICAgICAgaWYgKHBHcnVwKSB7XHJcbiAgICAgICAgdGhpcy5wR3J1cCA9IHBHcnVwIGFzIFBHcnVwT2JqZWN0O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZXROZWVkVXBkYXRlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDmm7/mjaLmnb/nmoTlhbbkuK3kuIDkuKrnqbrpl7Tngrku5aaC5p6c5Lik54K55Zyo5ZCM5LiA5p2/5YaF77yM6Iul5piv5Zub6L655b2i5p2/77yM5YiZ5Y+Y5oiQ5LiJ6KeS5b2i5p2/LlxyXG4gICAqIEBwYXJhbSByZXBsYWNpbmdKb2ludCDooqvmm7/mjaLnmoTnqbrpl7TngrlcclxuICAgKiBAcGFyYW0gYWZ0ZXJKb2ludCDmm7/mjaLlkI7nmoTnqbrpl7TngrlcclxuICAgKiBAcGFyYW0gaXNJblNhbWVQbGF0ZSDkuKTkuKrngrnmmK/lkKblnKjlkIzkuIDkuKrmnb/lhoVcclxuICAgKi9cclxuICBwdWJsaWMgam9pbnRSZXBsYWNlKFxyXG4gICAgcmVwbGFjaW5nSm9pbnQ6IEpvaW50T2JqZWN0LFxyXG4gICAgYWZ0ZXJKb2ludDogSm9pbnRPYmplY3QsXHJcbiAgICBpc0luU2FtZVBsYXRlOiBib29sZWFuXHJcbiAgKSB7XHJcbiAgICBpZiAoIWlzSW5TYW1lUGxhdGUpIHtcclxuICAgICAgbGV0IGpvaW50cyA9IHRoaXMuam9pbnRzO1xyXG5cclxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBqb2ludHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICBpZiAoam9pbnRzW2pdLmlkID09PSByZXBsYWNpbmdKb2ludC5pZCkge1xyXG4gICAgICAgICAgam9pbnRzW2pdID0gYWZ0ZXJKb2ludDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IGpvaW50cyA9IHRoaXMuam9pbnRzO1xyXG5cclxuICAgICAgbGV0IGRlbGV0ZUluZGV4ID0gLTE7XHJcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgam9pbnRzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgaWYgKGpvaW50c1tqXS5pZCA9PT0gcmVwbGFjaW5nSm9pbnQuaWQpIHtcclxuICAgICAgICAgIGRlbGV0ZUluZGV4ID0gajtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8g5LuO5pWw57uE5Lit5Yig6Zmk54K5LlxyXG4gICAgICBmb3IgKGxldCBqID0gZGVsZXRlSW5kZXg7IGogPCBqb2ludHMubGVuZ3RoIC0gMTsgaisrKSB7XHJcbiAgICAgICAgam9pbnRzW2pdID0gam9pbnRzW2ogKyAxXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICpcclxuICAgKiBAcGFyYW0gY29sb3IgcuOAgWfjgIFiKDI1NSwyNTUsMjU1KVxyXG4gICAqIEBwYXJhbSB0cmFuc3BhcmVuY3kgMC0xXHJcbiAgICovXHJcbiAgc2V0Q29sb3IoY29sb3I6IG51bWJlcltdLCB0cmFuc3BhcmVuY3k6IG51bWJlcikge1xyXG4gICAgdGhpcy5zZWdtZW50LmNvbG9yLnNldEZhY2UoY29sb3IuY29uY2F0KFt0cmFuc3BhcmVuY3ldKSk7XHJcbiAgfVxyXG5cclxuICBnZXRBc3BlY3RSYXRpbygpIHtcclxuICAgIC8vXHJcbiAgICBsZXQgYXNwZWN0UmF0aW86IGFueSA9IFwiXCI7XHJcbiAgICBsZXQgdmlld2VyID0gUHJvY2Vzcy5hY3RpdmVQcm9jZXNzLmFjdGl2ZVZpZXdlcjtcclxuICAgIGxldCBwb3NpdGlvbnMgPSB0aGlzLmdldFBvc2l0aW9ucygpO1xyXG4gICAgaWYgKHBvc2l0aW9ucykge1xyXG4gICAgICBpZiAocG9zaXRpb25zLmxlbmd0aCA9PT0gOSkge1xyXG4gICAgICAgIC8vIOS4ieinkuadvy5cclxuICAgICAgICBsZXQgcDAgPSBuZXcgRmxvYXQzMkFycmF5KFtwb3NpdGlvbnNbMF0sIHBvc2l0aW9uc1sxXSwgcG9zaXRpb25zWzJdXSk7XHJcbiAgICAgICAgbGV0IHAxID0gbmV3IEZsb2F0MzJBcnJheShbcG9zaXRpb25zWzNdLCBwb3NpdGlvbnNbNF0sIHBvc2l0aW9uc1s1XV0pO1xyXG4gICAgICAgIGxldCBwMiA9IG5ldyBGbG9hdDMyQXJyYXkoW3Bvc2l0aW9uc1s2XSwgcG9zaXRpb25zWzddLCBwb3NpdGlvbnNbOF1dKTtcclxuICAgICAgICBsZXQgcDBwMSA9IExvbmdhbi5Qb2ludC5zdWJ0cmFjdChwMSwgcDApO1xyXG4gICAgICAgIGxldCBwMHAyID0gTG9uZ2FuLlBvaW50LnN1YnRyYWN0KHAyLCBwMCk7XHJcbiAgICAgICAgbGV0IHAxcDIgPSBMb25nYW4uUG9pbnQuc3VidHJhY3QocDIsIHAxKTtcclxuICAgICAgICBsZXQgYSA9IExvbmdhbi5WZWN0b3IubW9kdWxlKHAwcDEpO1xyXG4gICAgICAgIGxldCBiID0gTG9uZ2FuLlZlY3Rvci5tb2R1bGUocDBwMik7XHJcbiAgICAgICAgbGV0IGMgPSBMb25nYW4uVmVjdG9yLm1vZHVsZShwMXAyKTtcclxuICAgICAgICBsZXQgbWF4TnVtID0gTWF0aC5tYXgoYSwgYiwgYyk7XHJcblxyXG4gICAgICAgIGxldCBub3IxID0gTG9uZ2FuLlZlY3Rvci5ub3JtYWxpemVWZWN0b3IocDBwMSk7XHJcbiAgICAgICAgbGV0IG5vcjIgPSBMb25nYW4uVmVjdG9yLm5vcm1hbGl6ZVZlY3RvcihwMHAyKTtcclxuICAgICAgICBsZXQgYXJlYSA9IDAuNSAqIGEgKiBiICogTWF0aC5zaW4oTG9uZ2FuLlZlY3Rvci5hbmdsZShub3IxLCBub3IyKSk7XHJcbiAgICAgICAgbGV0IGQxID0gbWF4TnVtICogKGEgKyBiICsgYyk7XHJcbiAgICAgICAgbGV0IGQyID0gNCAqIE1hdGguc3FydCgzKSAqIGFyZWE7XHJcbiAgICAgICAgYXNwZWN0UmF0aW8gPSBkMSAvIGQyO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIOWbm+i+ueW9ouadvy5cclxuICAgICAgICBsZXQgcDAgPSBuZXcgRmxvYXQzMkFycmF5KFtwb3NpdGlvbnNbMF0sIHBvc2l0aW9uc1sxXSwgcG9zaXRpb25zWzJdXSk7XHJcbiAgICAgICAgbGV0IHAxID0gbmV3IEZsb2F0MzJBcnJheShbcG9zaXRpb25zWzNdLCBwb3NpdGlvbnNbNF0sIHBvc2l0aW9uc1s1XV0pO1xyXG4gICAgICAgIGxldCBwMiA9IG5ldyBGbG9hdDMyQXJyYXkoW3Bvc2l0aW9uc1s2XSwgcG9zaXRpb25zWzddLCBwb3NpdGlvbnNbOF1dKTtcclxuICAgICAgICBsZXQgcDMgPSBuZXcgRmxvYXQzMkFycmF5KFtwb3NpdGlvbnNbOV0sIHBvc2l0aW9uc1sxMF0sIHBvc2l0aW9uc1sxMV1dKTtcclxuXHJcbiAgICAgICAgbGV0IHAwcDEgPSBMb25nYW4uUG9pbnQuc3VidHJhY3QocDEsIHAwKTtcclxuICAgICAgICBsZXQgcDBwMyA9IExvbmdhbi5Qb2ludC5zdWJ0cmFjdChwMywgcDApO1xyXG4gICAgICAgIGxldCBwMnAxID0gTG9uZ2FuLlBvaW50LnN1YnRyYWN0KHAxLCBwMik7XHJcbiAgICAgICAgbGV0IHAycDMgPSBMb25nYW4uUG9pbnQuc3VidHJhY3QocDMsIHAyKTtcclxuXHJcbiAgICAgICAgbGV0IGIwID0gTG9uZ2FuLlZlY3Rvci5tb2R1bGUocDBwMSk7XHJcbiAgICAgICAgbGV0IGIxID0gTG9uZ2FuLlZlY3Rvci5tb2R1bGUocDJwMSk7XHJcbiAgICAgICAgbGV0IGIyID0gTG9uZ2FuLlZlY3Rvci5tb2R1bGUocDJwMyk7XHJcbiAgICAgICAgbGV0IGIzID0gTG9uZ2FuLlZlY3Rvci5tb2R1bGUocDBwMyk7XHJcblxyXG4gICAgICAgIExvbmdhbi5WZWN0b3Iubm9ybWFsaXplKHAwcDEpO1xyXG4gICAgICAgIExvbmdhbi5WZWN0b3Iubm9ybWFsaXplKHAwcDMpO1xyXG4gICAgICAgIExvbmdhbi5WZWN0b3Iubm9ybWFsaXplKHAycDEpO1xyXG4gICAgICAgIExvbmdhbi5WZWN0b3Iubm9ybWFsaXplKHAycDMpO1xyXG5cclxuICAgICAgICBsZXQgZDEgPSBNYXRoLm1heChiMCwgYjEsIGIyLCBiMykgKiAoYjAgKyBiMSArIGIyICsgYjMpO1xyXG4gICAgICAgIGxldCBkMiA9XHJcbiAgICAgICAgICA0ICpcclxuICAgICAgICAgICgwLjUgKiBiMCAqIGIzICogTWF0aC5zaW4oTG9uZ2FuLlZlY3Rvci5hbmdsZShwMHAxLCBwMHAzKSkgK1xyXG4gICAgICAgICAgICAwLjUgKiBiMSAqIGIyICogTWF0aC5zaW4oTG9uZ2FuLlZlY3Rvci5hbmdsZShwMnAxLCBwMnAzKSkpO1xyXG4gICAgICAgIGFzcGVjdFJhdGlvID0gZDEgLyBkMjtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGFzcGVjdFJhdGlvO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q2VudGVyKCkge1xyXG4gICAgbGV0IHBvaW50cyA9IHRoaXMuZ2V0UG9zaXRpb25zKCk7XHJcbiAgICBsZXQgeEEgPSAwO1xyXG4gICAgbGV0IHlBID0gMDtcclxuICAgIGxldCB6QSA9IDA7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvaW50cy5sZW5ndGggLyAzOyBpKyspIHtcclxuICAgICAgeEEgKz0gcG9pbnRzWzMgKiBpICsgMF07XHJcbiAgICAgIHlBICs9IHBvaW50c1szICogaSArIDFdO1xyXG4gICAgICB6QSArPSBwb2ludHNbMyAqIGkgKyAyXTtcclxuICAgIH1cclxuICAgIHhBIC89IHBvaW50cy5sZW5ndGggLyAzO1xyXG4gICAgeUEgLz0gcG9pbnRzLmxlbmd0aCAvIDM7XHJcbiAgICB6QSAvPSBwb2ludHMubGVuZ3RoIC8gMztcclxuXHJcbiAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShbeEEsIHlBLCB6QV0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0TG9jYWxBeGlzKCkge1xyXG4gICAgbGV0IHBvaW50cyA9IHRoaXMuZ2V0UG9zaXRpb25zKCk7XHJcbiAgICBsZXQgcDAgPSBuZXcgRmxvYXQzMkFycmF5KFtwb2ludHNbMF0sIHBvaW50c1sxXSwgcG9pbnRzWzJdXSk7XHJcbiAgICBsZXQgcDEgPSBuZXcgRmxvYXQzMkFycmF5KFtwb2ludHNbM10sIHBvaW50c1s0XSwgcG9pbnRzWzVdXSk7XHJcbiAgICBsZXQgcDIgPSBuZXcgRmxvYXQzMkFycmF5KFtwb2ludHNbNl0sIHBvaW50c1s3XSwgcG9pbnRzWzhdXSk7XHJcblxyXG4gICAgbGV0IHhBeGlzID0gTG9uZ2FuLlBvaW50LnN1YnRyYWN0KHAxLCBwMCk7XHJcbiAgICBMb25nYW4uVmVjdG9yLm5vcm1hbGl6ZSh4QXhpcyk7XHJcbiAgICBsZXQgeUF4aXMgPSBMb25nYW4uUG9pbnQuc3VidHJhY3QocDIsIHAxKTtcclxuICAgIExvbmdhbi5WZWN0b3Iubm9ybWFsaXplKHlBeGlzKTtcclxuICAgIGxldCB6QXhpcyA9IExvbmdhbi5WZWN0b3IuY3Jvc3MoeEF4aXMsIHlBeGlzKTtcclxuICAgIExvbmdhbi5WZWN0b3Iubm9ybWFsaXplKHpBeGlzKTtcclxuICAgIHlBeGlzID0gTG9uZ2FuLlZlY3Rvci5jcm9zcyh6QXhpcywgeEF4aXMpO1xyXG4gICAgTG9uZ2FuLlZlY3Rvci5ub3JtYWxpemUoeUF4aXMpO1xyXG5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIHhBeGlzLFxyXG4gICAgICB5QXhpcyxcclxuICAgICAgekF4aXMsXHJcbiAgICB9O1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIOadv+mZhOWKoOWxnuaAp+e7hFxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFBsYXRlQWRkaXRpb25hbFByb3BlcnR5IHtcclxuICAvLyDliJvlu7rmnYbku7bml7bmmK/lkKbkvb/nlKjor6XlsZ7mgKcuXHJcbiAgdXNlRGVmYXVsdFByb3BlcnR5ID0gZmFsc2U7XHJcbiAgLy8g6K6h566X6YCJ6aG5XHJcbiAgcnBzazogc3RyaW5nID0gbnVsbDtcclxuICAvLyDlgY/lv4PpgInpobnjgIFcclxuICBvZmZzZXRPcHRpb246IHN0cmluZyA9IG51bGw7XHJcbiAgLy8g5ZCE54K55YGP5b+D6YePXHJcbiAgam9pbnRBID0gWzAsIDAsIDBdO1xyXG4gIGpvaW50QiA9IFswLCAwLCAwXTtcclxuICBqb2ludEMgPSBbMCwgMCwgMF07XHJcbiAgam9pbnREID0gWzAsIDAsIDBdO1xyXG4gIFxyXG4gIG92ZXJyaWVkU3RyZWVSZXBvcnQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBvdmVycmllZFBsYXRlT2Zmc2V0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgb3ZlcnJpZWRKb2ludEE6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBvdmVycmllZEpvaW50QjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIG92ZXJyaWVkSm9pbnRDOiBib29sZWFuID0gZmFsc2U7XHJcbiAgb3ZlcnJpZWRKb2ludEQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgX2luc3RhbmNlOiBQbGF0ZUFkZGl0aW9uYWxQcm9wZXJ0eTtcclxuICBwdWJsaWMgc3RhdGljIGdldEluc3RhbmNlKCk6IFBsYXRlQWRkaXRpb25hbFByb3BlcnR5IHtcclxuICAgIGlmICh0aGlzLl9pbnN0YW5jZSA9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuX2luc3RhbmNlID0gbmV3IFBsYXRlQWRkaXRpb25hbFByb3BlcnR5KCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5faW5zdGFuY2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN0YXRpYyBfaW5zdGFuY2U6IFBsYXRlQWRkaXRpb25hbFByb3BlcnR5O1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIC8vIHRoaXMucnBzayA9IFwi56m6XCI7XHJcbiAgICAvLyB0aGlzLm9mZnNldE9wdGlvbiA9IFwiMVwiO1xyXG4gICAgLy8gdGhpcy5vZmZzZXRzID0gWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdO1xyXG4gIH1cclxufVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFrQkE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQUE7QUFtUEE7QUFBQTtBQWxQQTtBQUVBO0FBTUE7QUFHQTtBQUtBO0FBUUE7QUFLQTtBQUtBO0FBSUE7QUFLQTtBQUtBO0FBSUE7QUFFQTtBQUVBO0FBRUE7QUFFQTtBQUdBO0FBTUE7QUErS0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7QUFHQTtBQXJMQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7Ozs7QUFFQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTs7QUFLQTs7QUFFQTs7OztBQUVBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBOzs7O0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFJQTs7OztBQUVBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBOzs7O0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFJQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7OztBQUVBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7Ozs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQWVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7O0FBR0E7QUFDQTs7QUFHQTtBQUNBOztBQUdBO0FBQ0E7O0FBR0E7QUFDQTs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBSUE7QUFDQTs7QUFHQTtBQUNBOztBQUdBO0FBQ0E7O0FBR0E7QUFDQTs7QUFHQTtBQUVBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7O0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUdBO0FBQ0E7QUFDQTtBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7QUFDQTs7QUFHQTtBQUNBOztBQUdBO0FBQ0E7QUFDQTtBQUNBOztBQUdBOztBQUdBO0FBQ0E7QUFFQTtBQUVBO0FBR0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBOzs7OztBQUtBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBRUE7QUFDQTtBQUNBOzs7OztBQU1BO0FBQ0E7QUFNQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFFQTtBQUNBO0FBQ0E7Ozs7O0FBTUE7QUFDQTtBQUlBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBS0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUdBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQTtBQUtBO0FBQ0E7O0FBT0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7OztBQUlBO0FBQ0E7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFFQTtBQUNBO0FBRUE7QUFLQTtBQUtBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBOEZBO0FBS0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBSUE7QUFFQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUtBO0FBQ0E7QUFHQTs7O0FBR0E7QUFDQTs7QUFHQTtBQUVBO0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBOzs7QUFLQTtBQUVBO0FBQ0E7QUFDQTs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFNQTtBQUNBOztBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUdBO0FBQ0E7QUFDQTs7QUFHQTtBQUNBO0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUdBO0FBQ0E7QUFJQTtBQUlBO0FBUUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQTtBQUNBO0FBS0E7QUFDQTtBQUtBO0FBSUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBTUE7QUFNQTs7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFLQTtBQUNBO0FBQ0E7QUFDQTs7O0FBSUE7QUFDQTtBQVFBO0FBS0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBS0E7QUFDQTs7O0FBR0E7QUFPQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBSUE7O0FBRUE7QUFDQTs7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUE5d0NBO0FBbXhDQTtBQThCQTtBQTVCQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWdCQTtBQWJBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBU0E7QUFBQTtBQW5DQTs7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./packages/caeDesign/src/gsDevFx/objects/caeObjects/plateObject.ts\n");
|
|
4475
4475
|
|
|
4476
4476
|
/***/ }),
|
|
4477
4477
|
|
|
@@ -4845,7 +4845,7 @@ eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPAC
|
|
|
4845
4845
|
/*! no static exports found */
|
|
4846
4846
|
/***/ (function(module, exports, __webpack_require__) {
|
|
4847
4847
|
|
|
4848
|
-
eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__, exports, __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\"), __webpack_require__(/*! gs-ceec-design */ \"./packages/ceecDesign/src/index.ts\"), __webpack_require__(/*! ../instancesObjects/instanceRenderObject */ \"./packages/caeDesign/src/gsDevFx/objects/instancesObjects/instanceRenderObject.ts\"), __webpack_require__(/*! ../../../caeCardEditor/caeCardObjects/seainp/cardLOADCN */ \"./packages/caeDesign/src/caeCardEditor/caeCardObjects/seainp/cardLOADCN.ts\"), __webpack_require__(/*! ./memberLoadBaseObject */ \"./packages/caeDesign/src/gsDevFx/objects/loadObjects/memberLoadBaseObject.ts\"), __webpack_require__(/*! ./jointLoadObject */ \"./packages/caeDesign/src/gsDevFx/objects/loadObjects/jointLoadObject.ts\"), __webpack_require__(/*! ../caeObjects/optionObjects/seastateWind */ \"./packages/caeDesign/src/gsDevFx/objects/caeObjects/optionObjects/seastateWind.ts\"), __webpack_require__(/*! ../caeObjects/optionObjects/seastateWave */ \"./packages/caeDesign/src/gsDevFx/objects/caeObjects/optionObjects/seastateWave.ts\"), __webpack_require__(/*! ../caeObjects/optionObjects/seastateCurr */ \"./packages/caeDesign/src/gsDevFx/objects/caeObjects/optionObjects/seastateCurr.ts\")], __WEBPACK_AMD_DEFINE_RESULT__ = (function (require, exports, tslib_1, gs_ceec_design_1, instanceRenderObject_1, cardLOADCN_1, memberLoadBaseObject_1, jointLoadObject_1, seastateWind_1, seastateWave_1, seastateCurr_1) {\n \"use strict\";\n\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n exports.LoadConditionObject = void 0;\n var LoadConditionObject = function (_super) {\n tslib_1.__extends(LoadConditionObject, _super);\n function LoadConditionObject(name) {\n var _this = _super.call(this) || this;\n _this.typeName = \"LoadConditionObject\";\n _this._loadConditionType = \"\";\n _this.incwgt = null;\n _this.accel = null;\n _this.deads = new Array();\n _this.name = name;\n _this.instanceTypes.add(\"main\", instanceRenderObject_1.InstanceRenderObject.prototype);\n return _this;\n }\n Object.defineProperty(LoadConditionObject.prototype, \"loadConditionType\", {\n get: function get() {\n return this._loadConditionType;\n },\n set: function set(value) {\n this._loadConditionType = value;\n },\n enumerable: false,\n configurable: true\n });\n LoadConditionObject.prototype.serialize = function () {\n var obj = _super.prototype.serialize.call(this);\n if (this.loadConditionType) {\n obj.loadConditionType = this.loadConditionType;\n }\n return obj;\n };\n LoadConditionObject.prototype.deserialize = function (obj, pm) {\n _super.prototype.deserialize.call(this, obj, pm);\n if (obj.loadConditionType) {\n this._loadConditionType = obj.loadConditionType;\n }\n };\n LoadConditionObject.checkNamelegal = function (name) {\n var reg = /^[A-Z0-9]*$/;\n if (!reg.test(name) || name.trimEnd().length > 4) {\n console.log(\"荷载工况名称不符合规范\");\n return false;\n }\n return true;\n };\n LoadConditionObject.checkLoadGroupNamelegal = function (name) {\n var reg = /^[A-Z0-9]*$/;\n if (!reg.test(name) || name.trimEnd().length > 8) {\n console.log(\"空间点名称不符合规范\");\n return false;\n }\n return true;\n };\n LoadConditionObject.prototype.active = function (viewer) {\n for (var i = 0; i < this.childObjects.length; i++) {\n var loadGroup = this.childObjects[i];\n loadGroup.active(viewer);\n }\n };\n LoadConditionObject.prototype.inactive = function (viewer) {\n for (var i = 0; i < this.childObjects.length; i++) {\n var loadGroup = this.childObjects[i];\n loadGroup.inactive(viewer);\n }\n };\n LoadConditionObject.prototype.serializeToCardSeaInp = function () {\n var card = new cardLOADCN_1.CardLOADCN();\n card.lineLabel.value = \"LOADCN\";\n card.loadConditionName.value = this.name;\n var text = card.getLine();\n text += \"\\n\";\n if (this.incwgt) {\n var result = this.incwgt.serializeToCard();\n text += result + \"\\n\";\n }\n if (this.accel) {\n var result = this.accel.serializeToCard();\n text += result + \"\\n\";\n }\n if (this.deads) {\n for (var i = 0; i < this.deads.length; i++) {\n var result = this.deads[i].serializeToCard();\n text += result + \"\\n\";\n }\n }\n for (var i = 0; i < this.childObjects.length; i++) {\n var child = this.childObjects[i];\n if (child.name === \"WINDLoads\") {\n text += \"WIND\\n\";\n } else if (child.name === \"WAVELoads\") {\n text += \"WAVE\\n\";\n } else if (child.name === \"CURRLoads\") {\n text += \"CURR\\n\";\n }\n for (var j = 0; j < child.childObjects.length; j++) {\n var grandChild = child.childObjects[j];\n if (grandChild instanceof jointLoadObject_1.JointLoadObject) {\n var result = grandChild.serializeToCard();\n if (result !== null) {\n text += result + \"\\n\";\n }\n } else if (grandChild instanceof seastateWind_1.SeastateWind) {\n var result = grandChild.serializeToCard();\n text += result + \"\\n\";\n } else if (grandChild instanceof seastateWave_1.SeastateWave) {\n var result = grandChild.serializeToCard();\n text += result + \"\\n\";\n } else if (grandChild instanceof seastateCurr_1.SeastateCurr) {\n var result = grandChild.serializeToCard();\n text += result + \"\\n\";\n }\n }\n }\n text += \"* CASE\" + card.loadConditionName.value;\n text += \"\\n\";\n return text;\n };\n LoadConditionObject.prototype.serializeToCardSacInp = function () {\n var card = new cardLOADCN_1.CardLOADCN();\n card.lineLabel.value = \"LOADCN\";\n card.loadConditionName.value = this.name;\n var text = card.getLine();\n text += \"\\n\";\n for (var i = 0; i < this.childObjects.length; i++) {\n var child = this.childObjects[i];\n for (var j = 0; j < child.childObjects.length; j++) {\n var grandChild = child.childObjects[j];\n if (grandChild instanceof memberLoadBaseObject_1.MemberLoadBaseObject) {\n var result = grandChild.serializeToCard();\n if (result !== null) {\n text += result + \"\\n\";\n }\n }\n }\n }\n text += \"* CASE\" + card.loadConditionName.value;\n text += \"\\n\";\n return text;\n };\n return LoadConditionObject;\n }(gs_ceec_design_1.DesignBaseObject);\n exports.LoadConditionObject = LoadConditionObject;\n}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9wYWNrYWdlcy9jYWVEZXNpZ24vc3JjL2dzRGV2Rngvb2JqZWN0cy9sb2FkT2JqZWN0cy9sb2FkQ29uZGl0aW9uT2JqZWN0LnRzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vW25hbWVdLy4vcGFja2FnZXMvY2FlRGVzaWduL3NyYy9nc0RldkZ4L29iamVjdHMvbG9hZE9iamVjdHMvbG9hZENvbmRpdGlvbk9iamVjdC50cz84ZWViIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlc2lnbkJhc2VPYmplY3QgfSBmcm9tIFwiZ3MtY2VlYy1kZXNpZ25cIjtcclxuaW1wb3J0IHsgTG9uZ2FuIH0gZnJvbSBcImdzLWJpbS1haXJcIjtcclxuaW1wb3J0IHsgSW5zdGFuY2VSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi4vaW5zdGFuY2VzT2JqZWN0cy9pbnN0YW5jZVJlbmRlck9iamVjdFwiO1xyXG5pbXBvcnQgeyBMb2FkR3JvdXBPYmplY3QgfSBmcm9tIFwiLi9sb2FkR3JvdXBPYmplY3RcIjtcclxuaW1wb3J0IHsgQ2FyZExPQURDTiB9IGZyb20gXCIuLi8uLi8uLi9jYWVDYXJkRWRpdG9yL2NhZUNhcmRPYmplY3RzL3NlYWlucC9jYXJkTE9BRENOXCI7XHJcbmltcG9ydCB7IE1lbWJlckxvYWRCYXNlT2JqZWN0IH0gZnJvbSBcIi4vbWVtYmVyTG9hZEJhc2VPYmplY3RcIjtcclxuaW1wb3J0IHsgTG9hZEJhc2VPYmplY3QgfSBmcm9tIFwiLi9sb2FkQmFzZU9iamVjdFwiO1xyXG5pbXBvcnQgeyBKb2ludExvYWRPYmplY3QgfSBmcm9tIFwiLi9qb2ludExvYWRPYmplY3RcIjtcclxuaW1wb3J0IHsgU2Vhc3RhdGVXaW5kIH0gZnJvbSBcIi4uL2NhZU9iamVjdHMvb3B0aW9uT2JqZWN0cy9zZWFzdGF0ZVdpbmRcIjtcclxuaW1wb3J0IHsgU2Vhc3RhdGVXYXZlIH0gZnJvbSBcIi4uL2NhZU9iamVjdHMvb3B0aW9uT2JqZWN0cy9zZWFzdGF0ZVdhdmVcIjtcclxuaW1wb3J0IHsgU2Vhc3RhdGVDdXJyIH0gZnJvbSBcIi4uL2NhZU9iamVjdHMvb3B0aW9uT2JqZWN0cy9zZWFzdGF0ZUN1cnJcIjtcclxuaW1wb3J0IHsgU2Vhc3RhdGVJbmN3Z3QgfSBmcm9tIFwiLi4vY2FlT2JqZWN0cy9vcHRpb25PYmplY3RzL3NlYXN0YXRlSW5jd2d0XCI7XHJcbmltcG9ydCB7IFNlYXN0YXRlQWNjZWwgfSBmcm9tIFwiLi4vY2FlT2JqZWN0cy9vcHRpb25PYmplY3RzL3NlYXN0YXRlQWNjZWxcIjtcclxuaW1wb3J0IHsgU2Vhc3RhdGVEZWFkIH0gZnJvbSBcIi4uL2NhZU9iamVjdHMvb3B0aW9uT2JqZWN0cy9zZWFzdGF0ZURlYWRcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBMb2FkQ29uZGl0aW9uT2JqZWN0IGV4dGVuZHMgRGVzaWduQmFzZU9iamVjdCB7XHJcbiAgcHVibGljIHR5cGVOYW1lID0gXCJMb2FkQ29uZGl0aW9uT2JqZWN0XCI7XHJcblxyXG4gIHByaXZhdGUgX2xvYWRDb25kaXRpb25UeXBlID0gXCJcIjtcclxuXHJcbiAgcHVibGljIGluY3dndDogU2Vhc3RhdGVJbmN3Z3QgPSBudWxsO1xyXG4gIHB1YmxpYyBhY2NlbDogU2Vhc3RhdGVBY2NlbCA9IG51bGw7XHJcbiAgcHVibGljIGRlYWRzOiBTZWFzdGF0ZURlYWRbXSA9IG5ldyBBcnJheTxTZWFzdGF0ZURlYWQ+KCk7XHJcblxyXG4gIGdldCBsb2FkQ29uZGl0aW9uVHlwZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9sb2FkQ29uZGl0aW9uVHlwZTtcclxuICB9XHJcblxyXG4gIHNldCBsb2FkQ29uZGl0aW9uVHlwZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9sb2FkQ29uZGl0aW9uVHlwZSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIHRoaXMubmFtZSA9IG5hbWU7XHJcbiAgICB0aGlzLmluc3RhbmNlVHlwZXMuYWRkKFwibWFpblwiLCBJbnN0YW5jZVJlbmRlck9iamVjdC5wcm90b3R5cGUpO1xyXG4gIH1cclxuXHJcbiAgc2VyaWFsaXplKCkge1xyXG4gICAgbGV0IG9iaiA9IHN1cGVyLnNlcmlhbGl6ZSgpO1xyXG5cclxuICAgIGlmICh0aGlzLmxvYWRDb25kaXRpb25UeXBlKSB7XHJcbiAgICAgIG9iai5sb2FkQ29uZGl0aW9uVHlwZSA9IHRoaXMubG9hZENvbmRpdGlvblR5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG9iajtcclxuICB9XHJcblxyXG4gIGRlc2VyaWFsaXplKG9iajogYW55LCBwbT86IExvbmdhbi5QZXJzaXN0ZW5jZU1hbmFnZXIpOiB2b2lkIHtcclxuICAgIHN1cGVyLmRlc2VyaWFsaXplKG9iaiwgcG0pO1xyXG5cclxuICAgIGlmIChvYmoubG9hZENvbmRpdGlvblR5cGUpIHtcclxuICAgICAgdGhpcy5fbG9hZENvbmRpdGlvblR5cGUgPSBvYmoubG9hZENvbmRpdGlvblR5cGU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgY2hlY2tOYW1lbGVnYWwobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgcmVnID0gL15bQS1aMC05XSokLztcclxuICAgIGlmICghcmVnLnRlc3QobmFtZSkgfHwgbmFtZS50cmltRW5kKCkubGVuZ3RoID4gNCkge1xyXG4gICAgICBjb25zb2xlLmxvZyhcIuiNt+i9veW3peWGteWQjeensOS4jeespuWQiOinhOiMg1wiKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgY2hlY2tMb2FkR3JvdXBOYW1lbGVnYWwobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgcmVnID0gL15bQS1aMC05XSokLztcclxuICAgIGlmICghcmVnLnRlc3QobmFtZSkgfHwgbmFtZS50cmltRW5kKCkubGVuZ3RoID4gOCkge1xyXG4gICAgICBjb25zb2xlLmxvZyhcIuepuumXtOeCueWQjeensOS4jeespuWQiOinhOiMg1wiKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBhY3RpdmUodmlld2VyOiBMb25nYW4uVmlld2VyKSB7XHJcbiAgICAvLyDnu5jliLbor6Xlt6XlhrXnmoTlhajpg6jojbfovb0uXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2hpbGRPYmplY3RzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBsb2FkR3JvdXAgPSB0aGlzLmNoaWxkT2JqZWN0c1tpXSBhcyBMb2FkR3JvdXBPYmplY3Q7XHJcbiAgICAgIGxvYWRHcm91cC5hY3RpdmUodmlld2VyKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGluYWN0aXZlKHZpZXdlcjogTG9uZ2FuLlZpZXdlcikge1xyXG4gICAgLy8g5Y+W5raI6K+l5bel5Ya15YWo6YOo6I236L2955qE57uY5Yi2LlxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNoaWxkT2JqZWN0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgbG9hZEdyb3VwID0gdGhpcy5jaGlsZE9iamVjdHNbaV0gYXMgTG9hZEdyb3VwT2JqZWN0O1xyXG4gICAgICBsb2FkR3JvdXAuaW5hY3RpdmUodmlld2VyKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNlcmlhbGl6ZVRvQ2FyZFNlYUlucCgpIHtcclxuICAgIC8vXHJcbiAgICBsZXQgY2FyZCA9IG5ldyBDYXJkTE9BRENOKCk7XHJcbiAgICBjYXJkLmxpbmVMYWJlbC52YWx1ZSA9IFwiTE9BRENOXCI7XHJcbiAgICBjYXJkLmxvYWRDb25kaXRpb25OYW1lLnZhbHVlID0gdGhpcy5uYW1lO1xyXG5cclxuICAgIGxldCB0ZXh0ID0gY2FyZC5nZXRMaW5lKCk7XHJcbiAgICB0ZXh0ICs9IFwiXFxuXCI7XHJcblxyXG4gICAgaWYgKHRoaXMuaW5jd2d0KSB7XHJcbiAgICAgIGxldCByZXN1bHQgPSB0aGlzLmluY3dndC5zZXJpYWxpemVUb0NhcmQoKTtcclxuICAgICAgdGV4dCArPSByZXN1bHQgKyBcIlxcblwiO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuYWNjZWwpIHtcclxuICAgICAgbGV0IHJlc3VsdCA9IHRoaXMuYWNjZWwuc2VyaWFsaXplVG9DYXJkKCk7XHJcbiAgICAgIHRleHQgKz0gcmVzdWx0ICsgXCJcXG5cIjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRlYWRzKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5kZWFkcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSB0aGlzLmRlYWRzW2ldLnNlcmlhbGl6ZVRvQ2FyZCgpO1xyXG4gICAgICAgIHRleHQgKz0gcmVzdWx0ICsgXCJcXG5cIjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jaGlsZE9iamVjdHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGNoaWxkID0gdGhpcy5jaGlsZE9iamVjdHNbaV07XHJcbiAgICAgIGlmIChjaGlsZC5uYW1lID09PSBcIldJTkRMb2Fkc1wiKSB7XHJcbiAgICAgICAgdGV4dCArPSBcIldJTkRcXG5cIjtcclxuICAgICAgfSBlbHNlIGlmIChjaGlsZC5uYW1lID09PSBcIldBVkVMb2Fkc1wiKSB7XHJcbiAgICAgICAgdGV4dCArPSBcIldBVkVcXG5cIjtcclxuICAgICAgfSBlbHNlIGlmIChjaGlsZC5uYW1lID09PSBcIkNVUlJMb2Fkc1wiKSB7XHJcbiAgICAgICAgdGV4dCArPSBcIkNVUlJcXG5cIjtcclxuICAgICAgfVxyXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNoaWxkLmNoaWxkT2JqZWN0cy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgIGxldCBncmFuZENoaWxkID0gY2hpbGQuY2hpbGRPYmplY3RzW2pdO1xyXG4gICAgICAgIGlmIChncmFuZENoaWxkIGluc3RhbmNlb2YgSm9pbnRMb2FkT2JqZWN0KSB7XHJcbiAgICAgICAgICBsZXQgcmVzdWx0ID0gKGdyYW5kQ2hpbGQgYXMgTG9hZEJhc2VPYmplY3QpLnNlcmlhbGl6ZVRvQ2FyZCgpO1xyXG4gICAgICAgICAgaWYocmVzdWx0ICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRleHQgKz0gcmVzdWx0ICsgXCJcXG5cIjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKGdyYW5kQ2hpbGQgaW5zdGFuY2VvZiBTZWFzdGF0ZVdpbmQpIHtcclxuICAgICAgICAgIGxldCByZXN1bHQgPSBncmFuZENoaWxkLnNlcmlhbGl6ZVRvQ2FyZCgpO1xyXG4gICAgICAgICAgdGV4dCArPSByZXN1bHQgKyBcIlxcblwiO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZ3JhbmRDaGlsZCBpbnN0YW5jZW9mIFNlYXN0YXRlV2F2ZSkge1xyXG4gICAgICAgICAgbGV0IHJlc3VsdCA9IGdyYW5kQ2hpbGQuc2VyaWFsaXplVG9DYXJkKCk7XHJcbiAgICAgICAgICB0ZXh0ICs9IHJlc3VsdCArIFwiXFxuXCI7XHJcbiAgICAgICAgfSBlbHNlIGlmIChncmFuZENoaWxkIGluc3RhbmNlb2YgU2Vhc3RhdGVDdXJyKSB7XHJcbiAgICAgICAgICBsZXQgcmVzdWx0ID0gZ3JhbmRDaGlsZC5zZXJpYWxpemVUb0NhcmQoKTtcclxuICAgICAgICAgIHRleHQgKz0gcmVzdWx0ICsgXCJcXG5cIjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0ZXh0ICs9IFwiKiBDQVNFXCIgKyBjYXJkLmxvYWRDb25kaXRpb25OYW1lLnZhbHVlO1xyXG4gICAgdGV4dCArPSBcIlxcblwiO1xyXG5cclxuICAgIHJldHVybiB0ZXh0O1xyXG4gIH1cclxuXHJcbiAgc2VyaWFsaXplVG9DYXJkU2FjSW5wKCkge1xyXG4gICAgLy9cclxuICAgIGxldCBjYXJkID0gbmV3IENhcmRMT0FEQ04oKTtcclxuICAgIGNhcmQubGluZUxhYmVsLnZhbHVlID0gXCJMT0FEQ05cIjtcclxuICAgIGNhcmQubG9hZENvbmRpdGlvbk5hbWUudmFsdWUgPSB0aGlzLm5hbWU7XHJcblxyXG4gICAgbGV0IHRleHQgPSBjYXJkLmdldExpbmUoKTtcclxuICAgIHRleHQgKz0gXCJcXG5cIjtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2hpbGRPYmplY3RzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBjaGlsZCA9IHRoaXMuY2hpbGRPYmplY3RzW2ldO1xyXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNoaWxkLmNoaWxkT2JqZWN0cy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgIGxldCBncmFuZENoaWxkID0gY2hpbGQuY2hpbGRPYmplY3RzW2pdO1xyXG4gICAgICAgIGlmIChncmFuZENoaWxkIGluc3RhbmNlb2YgTWVtYmVyTG9hZEJhc2VPYmplY3QpIHtcclxuICAgICAgICAgIGxldCByZXN1bHQgPSAoZ3JhbmRDaGlsZCBhcyBMb2FkQmFzZU9iamVjdCkuc2VyaWFsaXplVG9DYXJkKCk7XHJcbiAgICAgICAgICBpZihyZXN1bHQgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgdGV4dCArPSByZXN1bHQgKyBcIlxcblwiO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGV4dCArPSBcIiogQ0FTRVwiICsgY2FyZC5sb2FkQ29uZGl0aW9uTmFtZS52YWx1ZTtcclxuICAgIHRleHQgKz0gXCJcXG5cIjtcclxuXHJcbiAgICByZXR1cm4gdGV4dDtcclxuICB9XHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBZUE7QUFBQTtBQWlCQTtBQUFBO0FBaEJBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFZQTtBQUNBOztBQUNBO0FBWkE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7Ozs7QUFRQTtBQUNBO0FBRUE7QUFDQTs7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7O0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBS0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OztBQUtBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQWhLQTs7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./packages/caeDesign/src/gsDevFx/objects/loadObjects/loadConditionObject.ts\n");
|
|
4848
|
+
eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__, exports, __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\"), __webpack_require__(/*! gs-ceec-design */ \"./packages/ceecDesign/src/index.ts\"), __webpack_require__(/*! ../instancesObjects/instanceRenderObject */ \"./packages/caeDesign/src/gsDevFx/objects/instancesObjects/instanceRenderObject.ts\"), __webpack_require__(/*! ../../../caeCardEditor/caeCardObjects/seainp/cardLOADCN */ \"./packages/caeDesign/src/caeCardEditor/caeCardObjects/seainp/cardLOADCN.ts\"), __webpack_require__(/*! ./memberLoadBaseObject */ \"./packages/caeDesign/src/gsDevFx/objects/loadObjects/memberLoadBaseObject.ts\"), __webpack_require__(/*! ./jointLoadObject */ \"./packages/caeDesign/src/gsDevFx/objects/loadObjects/jointLoadObject.ts\"), __webpack_require__(/*! ../caeObjects/optionObjects/seastateWind */ \"./packages/caeDesign/src/gsDevFx/objects/caeObjects/optionObjects/seastateWind.ts\"), __webpack_require__(/*! ../caeObjects/optionObjects/seastateWave */ \"./packages/caeDesign/src/gsDevFx/objects/caeObjects/optionObjects/seastateWave.ts\"), __webpack_require__(/*! ../caeObjects/optionObjects/seastateCurr */ \"./packages/caeDesign/src/gsDevFx/objects/caeObjects/optionObjects/seastateCurr.ts\")], __WEBPACK_AMD_DEFINE_RESULT__ = (function (require, exports, tslib_1, gs_ceec_design_1, instanceRenderObject_1, cardLOADCN_1, memberLoadBaseObject_1, jointLoadObject_1, seastateWind_1, seastateWave_1, seastateCurr_1) {\n \"use strict\";\n\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n exports.LoadConditionObject = void 0;\n var LoadConditionObject = function (_super) {\n tslib_1.__extends(LoadConditionObject, _super);\n function LoadConditionObject(name) {\n var _this = _super.call(this) || this;\n _this.typeName = \"LoadConditionObject\";\n _this._loadConditionType = \"\";\n _this.incwgt = null;\n _this.accel = null;\n _this.deads = new Array();\n _this.name = name;\n _this.instanceTypes.add(\"main\", instanceRenderObject_1.InstanceRenderObject.prototype);\n return _this;\n }\n Object.defineProperty(LoadConditionObject.prototype, \"loadConditionType\", {\n get: function get() {\n return this._loadConditionType;\n },\n set: function set(value) {\n this._loadConditionType = value;\n },\n enumerable: false,\n configurable: true\n });\n LoadConditionObject.prototype.serialize = function () {\n var obj = _super.prototype.serialize.call(this);\n if (this.loadConditionType) {\n obj.loadConditionType = this.loadConditionType;\n }\n return obj;\n };\n LoadConditionObject.prototype.deserialize = function (obj, pm) {\n _super.prototype.deserialize.call(this, obj, pm);\n if (obj.loadConditionType) {\n this._loadConditionType = obj.loadConditionType;\n }\n };\n LoadConditionObject.checkNamelegal = function (name) {\n var reg = /^[A-Z0-9]*$/;\n if (!reg.test(name) || name.trimEnd().length > 4) {\n console.log(\"荷载工况名称不符合规范\");\n return false;\n }\n return true;\n };\n LoadConditionObject.checkLoadGroupNamelegal = function (name) {\n var reg = /^[A-Z0-9]*$/;\n if (!reg.test(name) || name.trimEnd().length > 8) {\n console.log(\"空间点名称不符合规范\");\n return false;\n }\n return true;\n };\n LoadConditionObject.prototype.active = function (viewer) {\n for (var i = 0; i < this.childObjects.length; i++) {\n var loadGroup = this.childObjects[i];\n loadGroup.active(viewer);\n }\n };\n LoadConditionObject.prototype.inactive = function (viewer) {\n for (var i = 0; i < this.childObjects.length; i++) {\n var loadGroup = this.childObjects[i];\n loadGroup.inactive(viewer);\n }\n };\n LoadConditionObject.prototype.serializeToCardSeaInp = function () {\n var card = new cardLOADCN_1.CardLOADCN();\n card.lineLabel.value = \"LOADCN\";\n card.loadConditionName.value = this.name;\n var text = card.getLine();\n text += \"\\n\";\n if (this.incwgt) {\n var result = this.incwgt.serializeToCard();\n text += result + \"\\n\";\n }\n if (this.accel) {\n var result = this.accel.serializeToCard();\n text += result + \"\\n\";\n }\n if (this.deads) {\n for (var i = 0; i < this.deads.length; i++) {\n var result = this.deads[i].serializeToCard();\n text += result + \"\\n\";\n }\n }\n for (var i = 0; i < this.childObjects.length; i++) {\n var child = this.childObjects[i];\n if (!child.checkBusinessStateIsActive()) {\n continue;\n }\n if (child.name === \"WINDLoads\") {\n text += \"WIND\\n\";\n } else if (child.name === \"WAVELoads\") {\n text += \"WAVE\\n\";\n } else if (child.name === \"CURRLoads\") {\n text += \"CURR\\n\";\n }\n for (var j = 0; j < child.childObjects.length; j++) {\n var grandChild = child.childObjects[j];\n if (!grandChild.checkBusinessStateIsActive()) {\n continue;\n }\n if (grandChild instanceof jointLoadObject_1.JointLoadObject) {\n var result = grandChild.serializeToCard();\n if (result !== null) {\n text += result + \"\\n\";\n }\n } else if (grandChild instanceof seastateWind_1.SeastateWind) {\n var result = grandChild.serializeToCard();\n text += result + \"\\n\";\n } else if (grandChild instanceof seastateWave_1.SeastateWave) {\n var result = grandChild.serializeToCard();\n text += result + \"\\n\";\n } else if (grandChild instanceof seastateCurr_1.SeastateCurr) {\n var result = grandChild.serializeToCard();\n text += result + \"\\n\";\n }\n }\n }\n text += \"* CASE\" + card.loadConditionName.value;\n text += \"\\n\";\n return text;\n };\n LoadConditionObject.prototype.serializeToCardSacInp = function () {\n var card = new cardLOADCN_1.CardLOADCN();\n card.lineLabel.value = \"LOADCN\";\n card.loadConditionName.value = this.name;\n var text = card.getLine();\n text += \"\\n\";\n for (var i = 0; i < this.childObjects.length; i++) {\n var child = this.childObjects[i];\n if (!child.checkBusinessStateIsActive()) {\n continue;\n }\n for (var j = 0; j < child.childObjects.length; j++) {\n var grandChild = child.childObjects[j];\n if (!grandChild.checkBusinessStateIsActive()) {\n continue;\n }\n if (grandChild instanceof memberLoadBaseObject_1.MemberLoadBaseObject) {\n var result = grandChild.serializeToCard();\n if (result !== null) {\n text += result + \"\\n\";\n }\n }\n }\n }\n text += \"* CASE\" + card.loadConditionName.value;\n text += \"\\n\";\n return text;\n };\n return LoadConditionObject;\n }(gs_ceec_design_1.DesignBaseObject);\n exports.LoadConditionObject = LoadConditionObject;\n}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9wYWNrYWdlcy9jYWVEZXNpZ24vc3JjL2dzRGV2Rngvb2JqZWN0cy9sb2FkT2JqZWN0cy9sb2FkQ29uZGl0aW9uT2JqZWN0LnRzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vW25hbWVdLy4vcGFja2FnZXMvY2FlRGVzaWduL3NyYy9nc0RldkZ4L29iamVjdHMvbG9hZE9iamVjdHMvbG9hZENvbmRpdGlvbk9iamVjdC50cz84ZWViIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERlc2lnbkJhc2VPYmplY3QgfSBmcm9tIFwiZ3MtY2VlYy1kZXNpZ25cIjtcclxuaW1wb3J0IHsgTG9uZ2FuIH0gZnJvbSBcImdzLWJpbS1haXJcIjtcclxuaW1wb3J0IHsgSW5zdGFuY2VSZW5kZXJPYmplY3QgfSBmcm9tIFwiLi4vaW5zdGFuY2VzT2JqZWN0cy9pbnN0YW5jZVJlbmRlck9iamVjdFwiO1xyXG5pbXBvcnQgeyBMb2FkR3JvdXBPYmplY3QgfSBmcm9tIFwiLi9sb2FkR3JvdXBPYmplY3RcIjtcclxuaW1wb3J0IHsgQ2FyZExPQURDTiB9IGZyb20gXCIuLi8uLi8uLi9jYWVDYXJkRWRpdG9yL2NhZUNhcmRPYmplY3RzL3NlYWlucC9jYXJkTE9BRENOXCI7XHJcbmltcG9ydCB7IE1lbWJlckxvYWRCYXNlT2JqZWN0IH0gZnJvbSBcIi4vbWVtYmVyTG9hZEJhc2VPYmplY3RcIjtcclxuaW1wb3J0IHsgTG9hZEJhc2VPYmplY3QgfSBmcm9tIFwiLi9sb2FkQmFzZU9iamVjdFwiO1xyXG5pbXBvcnQgeyBKb2ludExvYWRPYmplY3QgfSBmcm9tIFwiLi9qb2ludExvYWRPYmplY3RcIjtcclxuaW1wb3J0IHsgU2Vhc3RhdGVXaW5kIH0gZnJvbSBcIi4uL2NhZU9iamVjdHMvb3B0aW9uT2JqZWN0cy9zZWFzdGF0ZVdpbmRcIjtcclxuaW1wb3J0IHsgU2Vhc3RhdGVXYXZlIH0gZnJvbSBcIi4uL2NhZU9iamVjdHMvb3B0aW9uT2JqZWN0cy9zZWFzdGF0ZVdhdmVcIjtcclxuaW1wb3J0IHsgU2Vhc3RhdGVDdXJyIH0gZnJvbSBcIi4uL2NhZU9iamVjdHMvb3B0aW9uT2JqZWN0cy9zZWFzdGF0ZUN1cnJcIjtcclxuaW1wb3J0IHsgU2Vhc3RhdGVJbmN3Z3QgfSBmcm9tIFwiLi4vY2FlT2JqZWN0cy9vcHRpb25PYmplY3RzL3NlYXN0YXRlSW5jd2d0XCI7XHJcbmltcG9ydCB7IFNlYXN0YXRlQWNjZWwgfSBmcm9tIFwiLi4vY2FlT2JqZWN0cy9vcHRpb25PYmplY3RzL3NlYXN0YXRlQWNjZWxcIjtcclxuaW1wb3J0IHsgU2Vhc3RhdGVEZWFkIH0gZnJvbSBcIi4uL2NhZU9iamVjdHMvb3B0aW9uT2JqZWN0cy9zZWFzdGF0ZURlYWRcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBMb2FkQ29uZGl0aW9uT2JqZWN0IGV4dGVuZHMgRGVzaWduQmFzZU9iamVjdCB7XHJcbiAgcHVibGljIHR5cGVOYW1lID0gXCJMb2FkQ29uZGl0aW9uT2JqZWN0XCI7XHJcblxyXG4gIHByaXZhdGUgX2xvYWRDb25kaXRpb25UeXBlID0gXCJcIjtcclxuXHJcbiAgcHVibGljIGluY3dndDogU2Vhc3RhdGVJbmN3Z3QgPSBudWxsO1xyXG4gIHB1YmxpYyBhY2NlbDogU2Vhc3RhdGVBY2NlbCA9IG51bGw7XHJcbiAgcHVibGljIGRlYWRzOiBTZWFzdGF0ZURlYWRbXSA9IG5ldyBBcnJheTxTZWFzdGF0ZURlYWQ+KCk7XHJcblxyXG4gIGdldCBsb2FkQ29uZGl0aW9uVHlwZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl9sb2FkQ29uZGl0aW9uVHlwZTtcclxuICB9XHJcblxyXG4gIHNldCBsb2FkQ29uZGl0aW9uVHlwZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9sb2FkQ29uZGl0aW9uVHlwZSA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIHRoaXMubmFtZSA9IG5hbWU7XHJcbiAgICB0aGlzLmluc3RhbmNlVHlwZXMuYWRkKFwibWFpblwiLCBJbnN0YW5jZVJlbmRlck9iamVjdC5wcm90b3R5cGUpO1xyXG4gIH1cclxuXHJcbiAgc2VyaWFsaXplKCkge1xyXG4gICAgbGV0IG9iaiA9IHN1cGVyLnNlcmlhbGl6ZSgpO1xyXG5cclxuICAgIGlmICh0aGlzLmxvYWRDb25kaXRpb25UeXBlKSB7XHJcbiAgICAgIG9iai5sb2FkQ29uZGl0aW9uVHlwZSA9IHRoaXMubG9hZENvbmRpdGlvblR5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG9iajtcclxuICB9XHJcblxyXG4gIGRlc2VyaWFsaXplKG9iajogYW55LCBwbT86IExvbmdhbi5QZXJzaXN0ZW5jZU1hbmFnZXIpOiB2b2lkIHtcclxuICAgIHN1cGVyLmRlc2VyaWFsaXplKG9iaiwgcG0pO1xyXG5cclxuICAgIGlmIChvYmoubG9hZENvbmRpdGlvblR5cGUpIHtcclxuICAgICAgdGhpcy5fbG9hZENvbmRpdGlvblR5cGUgPSBvYmoubG9hZENvbmRpdGlvblR5cGU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgY2hlY2tOYW1lbGVnYWwobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgcmVnID0gL15bQS1aMC05XSokLztcclxuICAgIGlmICghcmVnLnRlc3QobmFtZSkgfHwgbmFtZS50cmltRW5kKCkubGVuZ3RoID4gNCkge1xyXG4gICAgICBjb25zb2xlLmxvZyhcIuiNt+i9veW3peWGteWQjeensOS4jeespuWQiOinhOiMg1wiKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgY2hlY2tMb2FkR3JvdXBOYW1lbGVnYWwobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgcmVnID0gL15bQS1aMC05XSokLztcclxuICAgIGlmICghcmVnLnRlc3QobmFtZSkgfHwgbmFtZS50cmltRW5kKCkubGVuZ3RoID4gOCkge1xyXG4gICAgICBjb25zb2xlLmxvZyhcIuepuumXtOeCueWQjeensOS4jeespuWQiOinhOiMg1wiKTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBhY3RpdmUodmlld2VyOiBMb25nYW4uVmlld2VyKSB7XHJcbiAgICAvLyDnu5jliLbor6Xlt6XlhrXnmoTlhajpg6jojbfovb0uXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2hpbGRPYmplY3RzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBsb2FkR3JvdXAgPSB0aGlzLmNoaWxkT2JqZWN0c1tpXSBhcyBMb2FkR3JvdXBPYmplY3Q7XHJcbiAgICAgIGxvYWRHcm91cC5hY3RpdmUodmlld2VyKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGluYWN0aXZlKHZpZXdlcjogTG9uZ2FuLlZpZXdlcikge1xyXG4gICAgLy8g5Y+W5raI6K+l5bel5Ya15YWo6YOo6I236L2955qE57uY5Yi2LlxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNoaWxkT2JqZWN0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgbG9hZEdyb3VwID0gdGhpcy5jaGlsZE9iamVjdHNbaV0gYXMgTG9hZEdyb3VwT2JqZWN0O1xyXG4gICAgICBsb2FkR3JvdXAuaW5hY3RpdmUodmlld2VyKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNlcmlhbGl6ZVRvQ2FyZFNlYUlucCgpIHtcclxuICAgIC8vXHJcbiAgICBsZXQgY2FyZCA9IG5ldyBDYXJkTE9BRENOKCk7XHJcbiAgICBjYXJkLmxpbmVMYWJlbC52YWx1ZSA9IFwiTE9BRENOXCI7XHJcbiAgICBjYXJkLmxvYWRDb25kaXRpb25OYW1lLnZhbHVlID0gdGhpcy5uYW1lO1xyXG5cclxuICAgIGxldCB0ZXh0ID0gY2FyZC5nZXRMaW5lKCk7XHJcbiAgICB0ZXh0ICs9IFwiXFxuXCI7XHJcblxyXG4gICAgaWYgKHRoaXMuaW5jd2d0KSB7XHJcbiAgICAgIGxldCByZXN1bHQgPSB0aGlzLmluY3dndC5zZXJpYWxpemVUb0NhcmQoKTtcclxuICAgICAgdGV4dCArPSByZXN1bHQgKyBcIlxcblwiO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuYWNjZWwpIHtcclxuICAgICAgbGV0IHJlc3VsdCA9IHRoaXMuYWNjZWwuc2VyaWFsaXplVG9DYXJkKCk7XHJcbiAgICAgIHRleHQgKz0gcmVzdWx0ICsgXCJcXG5cIjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmRlYWRzKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5kZWFkcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSB0aGlzLmRlYWRzW2ldLnNlcmlhbGl6ZVRvQ2FyZCgpO1xyXG4gICAgICAgIHRleHQgKz0gcmVzdWx0ICsgXCJcXG5cIjtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jaGlsZE9iamVjdHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGNoaWxkID0gdGhpcy5jaGlsZE9iamVjdHNbaV0gYXMgRGVzaWduQmFzZU9iamVjdDtcclxuICAgICAgaWYoIWNoaWxkLmNoZWNrQnVzaW5lc3NTdGF0ZUlzQWN0aXZlKCkpIHtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY2hpbGQubmFtZSA9PT0gXCJXSU5ETG9hZHNcIikge1xyXG4gICAgICAgIHRleHQgKz0gXCJXSU5EXFxuXCI7XHJcbiAgICAgIH0gZWxzZSBpZiAoY2hpbGQubmFtZSA9PT0gXCJXQVZFTG9hZHNcIikge1xyXG4gICAgICAgIHRleHQgKz0gXCJXQVZFXFxuXCI7XHJcbiAgICAgIH0gZWxzZSBpZiAoY2hpbGQubmFtZSA9PT0gXCJDVVJSTG9hZHNcIikge1xyXG4gICAgICAgIHRleHQgKz0gXCJDVVJSXFxuXCI7XHJcbiAgICAgIH1cclxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjaGlsZC5jaGlsZE9iamVjdHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICBsZXQgZ3JhbmRDaGlsZCA9IGNoaWxkLmNoaWxkT2JqZWN0c1tqXSBhcyBEZXNpZ25CYXNlT2JqZWN0O1xyXG4gICAgICAgIGlmKCFncmFuZENoaWxkLmNoZWNrQnVzaW5lc3NTdGF0ZUlzQWN0aXZlKCkpIHtcclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZ3JhbmRDaGlsZCBpbnN0YW5jZW9mIEpvaW50TG9hZE9iamVjdCkge1xyXG4gICAgICAgICAgbGV0IHJlc3VsdCA9IChncmFuZENoaWxkIGFzIExvYWRCYXNlT2JqZWN0KS5zZXJpYWxpemVUb0NhcmQoKTtcclxuICAgICAgICAgIGlmKHJlc3VsdCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0ZXh0ICs9IHJlc3VsdCArIFwiXFxuXCI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChncmFuZENoaWxkIGluc3RhbmNlb2YgU2Vhc3RhdGVXaW5kKSB7XHJcbiAgICAgICAgICBsZXQgcmVzdWx0ID0gZ3JhbmRDaGlsZC5zZXJpYWxpemVUb0NhcmQoKTtcclxuICAgICAgICAgIHRleHQgKz0gcmVzdWx0ICsgXCJcXG5cIjtcclxuICAgICAgICB9IGVsc2UgaWYgKGdyYW5kQ2hpbGQgaW5zdGFuY2VvZiBTZWFzdGF0ZVdhdmUpIHtcclxuICAgICAgICAgIGxldCByZXN1bHQgPSBncmFuZENoaWxkLnNlcmlhbGl6ZVRvQ2FyZCgpO1xyXG4gICAgICAgICAgdGV4dCArPSByZXN1bHQgKyBcIlxcblwiO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZ3JhbmRDaGlsZCBpbnN0YW5jZW9mIFNlYXN0YXRlQ3Vycikge1xyXG4gICAgICAgICAgbGV0IHJlc3VsdCA9IGdyYW5kQ2hpbGQuc2VyaWFsaXplVG9DYXJkKCk7XHJcbiAgICAgICAgICB0ZXh0ICs9IHJlc3VsdCArIFwiXFxuXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGV4dCArPSBcIiogQ0FTRVwiICsgY2FyZC5sb2FkQ29uZGl0aW9uTmFtZS52YWx1ZTtcclxuICAgIHRleHQgKz0gXCJcXG5cIjtcclxuXHJcbiAgICByZXR1cm4gdGV4dDtcclxuICB9XHJcblxyXG4gIHNlcmlhbGl6ZVRvQ2FyZFNhY0lucCgpIHtcclxuICAgIC8vXHJcbiAgICBsZXQgY2FyZCA9IG5ldyBDYXJkTE9BRENOKCk7XHJcbiAgICBjYXJkLmxpbmVMYWJlbC52YWx1ZSA9IFwiTE9BRENOXCI7XHJcbiAgICBjYXJkLmxvYWRDb25kaXRpb25OYW1lLnZhbHVlID0gdGhpcy5uYW1lO1xyXG5cclxuICAgIGxldCB0ZXh0ID0gY2FyZC5nZXRMaW5lKCk7XHJcbiAgICB0ZXh0ICs9IFwiXFxuXCI7XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNoaWxkT2JqZWN0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgY2hpbGQgPSB0aGlzLmNoaWxkT2JqZWN0c1tpXSBhcyBEZXNpZ25CYXNlT2JqZWN0O1xyXG4gICAgICBpZighY2hpbGQuY2hlY2tCdXNpbmVzc1N0YXRlSXNBY3RpdmUoKSkge1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY2hpbGQuY2hpbGRPYmplY3RzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgbGV0IGdyYW5kQ2hpbGQgPSBjaGlsZC5jaGlsZE9iamVjdHNbal0gYXMgRGVzaWduQmFzZU9iamVjdDtcclxuICAgICAgICBpZighZ3JhbmRDaGlsZC5jaGVja0J1c2luZXNzU3RhdGVJc0FjdGl2ZSgpKSB7XHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGdyYW5kQ2hpbGQgaW5zdGFuY2VvZiBNZW1iZXJMb2FkQmFzZU9iamVjdCkge1xyXG4gICAgICAgICAgbGV0IHJlc3VsdCA9IChncmFuZENoaWxkIGFzIExvYWRCYXNlT2JqZWN0KS5zZXJpYWxpemVUb0NhcmQoKTtcclxuICAgICAgICAgIGlmKHJlc3VsdCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0ZXh0ICs9IHJlc3VsdCArIFwiXFxuXCI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0ZXh0ICs9IFwiKiBDQVNFXCIgKyBjYXJkLmxvYWRDb25kaXRpb25OYW1lLnZhbHVlO1xyXG4gICAgdGV4dCArPSBcIlxcblwiO1xyXG5cclxuICAgIHJldHVybiB0ZXh0O1xyXG4gIH1cclxufVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFlQTtBQUFBO0FBaUJBO0FBQUE7QUFoQkE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQVlBO0FBQ0E7O0FBQ0E7QUFaQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTs7OztBQVFBO0FBQ0E7QUFFQTtBQUNBOztBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTs7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOzs7QUFJQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBS0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7QUFLQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUE1S0E7O0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./packages/caeDesign/src/gsDevFx/objects/loadObjects/loadConditionObject.ts\n");
|
|
4849
4849
|
|
|
4850
4850
|
/***/ }),
|
|
4851
4851
|
|
|
@@ -4856,7 +4856,7 @@ eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPAC
|
|
|
4856
4856
|
/*! no static exports found */
|
|
4857
4857
|
/***/ (function(module, exports, __webpack_require__) {
|
|
4858
4858
|
|
|
4859
|
-
eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__, exports, __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\"), __webpack_require__(/*! gs-ceec-design */ \"./packages/ceecDesign/src/index.ts\"), __webpack_require__(/*! ../instancesObjects/instanceRenderObject */ \"./packages/caeDesign/src/gsDevFx/objects/instancesObjects/instanceRenderObject.ts\"), __webpack_require__(/*! ../../../caeCardEditor/caeCardObjects/seainp/cardLOADCN */ \"./packages/caeDesign/src/caeCardEditor/caeCardObjects/seainp/cardLOADCN.ts\"), __webpack_require__(/*! ./jointLoadObject */ \"./packages/caeDesign/src/gsDevFx/objects/loadObjects/jointLoadObject.ts\"), __webpack_require__(/*! ./memberLoadBaseObject */ \"./packages/caeDesign/src/gsDevFx/objects/loadObjects/memberLoadBaseObject.ts\")], __WEBPACK_AMD_DEFINE_RESULT__ = (function (require, exports, tslib_1, gs_ceec_design_1, instanceRenderObject_1, cardLOADCN_1, jointLoadObject_1, memberLoadBaseObject_1) {\n \"use strict\";\n\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n exports.LoadGroupObject = void 0;\n var LoadGroupObject = function (_super) {\n tslib_1.__extends(LoadGroupObject, _super);\n function LoadGroupObject(loadGroupName) {\n var _this = _super.call(this) || this;\n _this.typeName = \"LoadGroupObject\";\n _this.name = loadGroupName;\n _this.loadGroup = loadGroupName;\n _this.instanceTypes.add(\"main\", instanceRenderObject_1.InstanceRenderObject.prototype);\n return _this;\n }\n LoadGroupObject.prototype.serialize = function () {\n var obj = _super.prototype.serialize.call(this);\n if (this.loadGroup) {\n obj.loadGroup = this.loadGroup;\n }\n return obj;\n };\n LoadGroupObject.prototype.deserialize = function (obj, pm) {\n _super.prototype.deserialize.call(this, obj, pm);\n if (obj.loadGroup) {\n this.loadGroup = obj.loadGroup;\n }\n };\n LoadGroupObject.prototype.active = function (viewer) {\n for (var i = 0; i < this.childObjects.length; i++) {\n var load = this.childObjects[i];\n if (load.checkBusinessStateIsActive()) {\n viewer.findInstanceObject(load).initSvg();\n }\n }\n };\n LoadGroupObject.prototype.inactive = function (viewer) {\n for (var i = 0; i < this.childObjects.length; i++) {\n var load = this.childObjects[i];\n viewer.findInstanceObject(load).removeSvg();\n }\n };\n LoadGroupObject.prototype.serializeToCard = function () {\n var card = new cardLOADCN_1.CardLOADCN();\n card.lineLabel.value = \"LOADCN\";\n card.loadConditionName.value = this.parent.name;\n var text = card.getLine();\n text += \"\\n\";\n for (var i = 0; i < this.childObjects.length; i++) {\n var result = this.childObjects[i].serializeToCard();\n if (result !== null) {\n text += result + \"\\n\";\n }\n }\n text += \"* CASE\" + card.loadConditionName.value;\n text += \"\\n\";\n return text;\n };\n LoadGroupObject.prototype.serializeToCardSeaInp = function () {\n var card = new cardLOADCN_1.CardLOADCN();\n card.lineLabel.value = \"LOADCN\";\n card.loadConditionName.value = this.parent.name;\n var text = card.getLine();\n text += \"\\n\";\n for (var i = 0; i < this.childObjects.length; i++) {\n if (this.childObjects[i] instanceof jointLoadObject_1.JointLoadObject) {\n var result = this.childObjects[i].serializeToCard();\n if (result !== null) {\n text += result + \"\\n\";\n }\n }\n }\n text += \"* CASE\" + card.loadConditionName.value;\n text += \"\\n\";\n return text;\n };\n LoadGroupObject.prototype.serializeToCardSacInp = function () {\n var card = new cardLOADCN_1.CardLOADCN();\n card.lineLabel.value = \"LOADCN\";\n if (this.parent) {\n card.loadConditionName.value = this.parent.name;\n var text = card.getLine();\n text += \"\\n\";\n for (var i = 0; i < this.childObjects.length; i++) {\n if (this.childObjects[i] instanceof memberLoadBaseObject_1.MemberLoadBaseObject) {\n var result = this.childObjects[i].serializeToCard();\n if (result !== null) {\n text += result + \"\\n\";\n }\n } else if (this.childObjects[i] instanceof jointLoadObject_1.JointLoadObject) {\n var result = this.childObjects[i].serializeToCard();\n if (result !== null) {\n text += result + \"\\n\";\n }\n }\n }\n text += \"* CASE\" + card.loadConditionName.value;\n text += \"\\n\";\n return text;\n }\n return \"\";\n };\n return LoadGroupObject;\n }(gs_ceec_design_1.DesignBaseObject);\n exports.LoadGroupObject = LoadGroupObject;\n}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9wYWNrYWdlcy9jYWVEZXNpZ24vc3JjL2dzRGV2Rngvb2JqZWN0cy9sb2FkT2JqZWN0cy9sb2FkR3JvdXBPYmplY3QudHMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9bbmFtZV0vLi9wYWNrYWdlcy9jYWVEZXNpZ24vc3JjL2dzRGV2Rngvb2JqZWN0cy9sb2FkT2JqZWN0cy9sb2FkR3JvdXBPYmplY3QudHM/N2E2NyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZXNpZ25CYXNlT2JqZWN0IH0gZnJvbSBcImdzLWNlZWMtZGVzaWduXCI7XHJcbmltcG9ydCB7IExvbmdhbiB9IGZyb20gXCJncy1iaW0tYWlyXCI7XHJcbmltcG9ydCB7IEluc3RhbmNlUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4uL2luc3RhbmNlc09iamVjdHMvaW5zdGFuY2VSZW5kZXJPYmplY3RcIjtcclxuaW1wb3J0IHsgSW5zdGFuY2VMb2FkQmFzZU9iamVjdCB9IGZyb20gXCIuL2luc3RhbmNlTG9hZEJhc2VPYmplY3RcIjtcclxuaW1wb3J0IHsgTG9hZEJhc2VPYmplY3QgfSBmcm9tIFwiLi9sb2FkQmFzZU9iamVjdFwiO1xyXG5pbXBvcnQgeyBDYXJkTE9BRENOIH0gZnJvbSBcIi4uLy4uLy4uL2NhZUNhcmRFZGl0b3IvY2FlQ2FyZE9iamVjdHMvc2VhaW5wL2NhcmRMT0FEQ05cIjtcclxuaW1wb3J0IHsgSm9pbnRMb2FkT2JqZWN0IH0gZnJvbSBcIi4vam9pbnRMb2FkT2JqZWN0XCI7XHJcbmltcG9ydCB7IE1lbWJlckxvYWRCYXNlT2JqZWN0IH0gZnJvbSBcIi4vbWVtYmVyTG9hZEJhc2VPYmplY3RcIjtcclxuXHJcbi8qKlxyXG4gKiDojbfovb3nu4Tnu5jliLblr7nosaEuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgTG9hZEdyb3VwT2JqZWN0IGV4dGVuZHMgRGVzaWduQmFzZU9iamVjdCB7XHJcbiAgcHVibGljIHR5cGVOYW1lID0gXCJMb2FkR3JvdXBPYmplY3RcIjtcclxuXHJcbiAgLyoqXHJcbiAgICog6I236L2957uE5ZCNLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBsb2FkR3JvdXA6IHN0cmluZztcclxuXHJcbiAgcHVibGljIGNvbnN0cnVjdG9yKGxvYWRHcm91cE5hbWU6IHN0cmluZykge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIHRoaXMubmFtZSA9IGxvYWRHcm91cE5hbWU7XHJcbiAgICB0aGlzLmxvYWRHcm91cCA9IGxvYWRHcm91cE5hbWU7XHJcbiAgICB0aGlzLmluc3RhbmNlVHlwZXMuYWRkKFwibWFpblwiLCBJbnN0YW5jZVJlbmRlck9iamVjdC5wcm90b3R5cGUpO1xyXG4gIH1cclxuXHJcbiAgc2VyaWFsaXplKCkge1xyXG4gICAgbGV0IG9iaiA9IHN1cGVyLnNlcmlhbGl6ZSgpO1xyXG5cclxuICAgIGlmICh0aGlzLmxvYWRHcm91cCkge1xyXG4gICAgICBvYmoubG9hZEdyb3VwID0gdGhpcy5sb2FkR3JvdXA7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG9iajtcclxuICB9XHJcblxyXG4gIGRlc2VyaWFsaXplKG9iajogYW55LCBwbT86IExvbmdhbi5QZXJzaXN0ZW5jZU1hbmFnZXIpOiB2b2lkIHtcclxuICAgIHN1cGVyLmRlc2VyaWFsaXplKG9iaiwgcG0pO1xyXG5cclxuICAgIGlmIChvYmoubG9hZEdyb3VwKSB7XHJcbiAgICAgIHRoaXMubG9hZEdyb3VwID0gb2JqLmxvYWRHcm91cDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgIC8vICAgY29uc29sZS5sb2coXCJhY3RpdmUtLS0tLVwiKTtcclxuICAgIC8vICAgdGhpcy5hY3RpdmUoUHJvY2Vzcy5hY3RpdmVQcm9jZXNzLmFjdGl2ZVZpZXdlcik7XHJcbiAgICAvLyB9LCA1MDAwKTtcclxuICB9XHJcblxyXG4gIGFjdGl2ZSh2aWV3ZXI6IExvbmdhbi5WaWV3ZXIpIHtcclxuICAgIC8vIOe7mOWItuivpeiNt+i9vee7hOeahOWFqOmDqOiNt+i9vS5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jaGlsZE9iamVjdHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGxvYWQgPSB0aGlzLmNoaWxkT2JqZWN0c1tpXSBhcyBMb2FkQmFzZU9iamVjdDtcclxuICAgICAgaWYobG9hZC5jaGVja0J1c2luZXNzU3RhdGVJc0FjdGl2ZSgpKSB7XHJcbiAgICAgICAgKHZpZXdlci5maW5kSW5zdGFuY2VPYmplY3QobG9hZCkgYXMgSW5zdGFuY2VMb2FkQmFzZU9iamVjdCkuaW5pdFN2ZygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbmFjdGl2ZSh2aWV3ZXI6IExvbmdhbi5WaWV3ZXIpIHtcclxuICAgIC8vIOWPlua2iOivpeiNt+i9vee7hOeahOe7mOWIti5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jaGlsZE9iamVjdHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGxvYWQgPSB0aGlzLmNoaWxkT2JqZWN0c1tpXSBhcyBMb2FkQmFzZU9iamVjdDtcclxuICAgICAgKHZpZXdlci5maW5kSW5zdGFuY2VPYmplY3QobG9hZCkgYXMgSW5zdGFuY2VMb2FkQmFzZU9iamVjdCkucmVtb3ZlU3ZnKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXJpYWxpemVUb0NhcmQoKSB7XHJcbiAgICAvL1xyXG4gICAgbGV0IGNhcmQgPSBuZXcgQ2FyZExPQURDTigpO1xyXG4gICAgY2FyZC5saW5lTGFiZWwudmFsdWUgPSBcIkxPQURDTlwiO1xyXG4gICAgY2FyZC5sb2FkQ29uZGl0aW9uTmFtZS52YWx1ZSA9IHRoaXMucGFyZW50Lm5hbWU7XHJcblxyXG4gICAgbGV0IHRleHQgPSBjYXJkLmdldExpbmUoKTtcclxuICAgIHRleHQgKz0gXCJcXG5cIjtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2hpbGRPYmplY3RzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCByZXN1bHQgPSAodGhpcy5jaGlsZE9iamVjdHNbaV0gYXMgTG9hZEJhc2VPYmplY3QpLnNlcmlhbGl6ZVRvQ2FyZCgpO1xyXG4gICAgICBpZihyZXN1bHQgIT09IG51bGwpIHtcclxuICAgICAgICB0ZXh0ICs9IHJlc3VsdCArIFwiXFxuXCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRleHQgKz0gXCIqIENBU0VcIiArIGNhcmQubG9hZENvbmRpdGlvbk5hbWUudmFsdWU7XHJcbiAgICB0ZXh0ICs9IFwiXFxuXCI7XHJcblxyXG4gICAgcmV0dXJuIHRleHQ7XHJcbiAgfVxyXG5cclxuICBzZXJpYWxpemVUb0NhcmRTZWFJbnAoKSB7XHJcbiAgICAvL1xyXG4gICAgbGV0IGNhcmQgPSBuZXcgQ2FyZExPQURDTigpO1xyXG4gICAgY2FyZC5saW5lTGFiZWwudmFsdWUgPSBcIkxPQURDTlwiO1xyXG4gICAgY2FyZC5sb2FkQ29uZGl0aW9uTmFtZS52YWx1ZSA9IHRoaXMucGFyZW50Lm5hbWU7XHJcblxyXG4gICAgbGV0IHRleHQgPSBjYXJkLmdldExpbmUoKTtcclxuICAgIHRleHQgKz0gXCJcXG5cIjtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2hpbGRPYmplY3RzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmICh0aGlzLmNoaWxkT2JqZWN0c1tpXSBpbnN0YW5jZW9mIEpvaW50TG9hZE9iamVjdCkge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSAodGhpcy5jaGlsZE9iamVjdHNbaV0gYXMgTG9hZEJhc2VPYmplY3QpLnNlcmlhbGl6ZVRvQ2FyZCgpO1xyXG4gICAgICAgIGlmKHJlc3VsdCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgdGV4dCArPSByZXN1bHQgKyBcIlxcblwiO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGV4dCArPSBcIiogQ0FTRVwiICsgY2FyZC5sb2FkQ29uZGl0aW9uTmFtZS52YWx1ZTtcclxuICAgIHRleHQgKz0gXCJcXG5cIjtcclxuXHJcbiAgICByZXR1cm4gdGV4dDtcclxuICB9XHJcblxyXG4gIHNlcmlhbGl6ZVRvQ2FyZFNhY0lucCgpIHtcclxuICAgIC8vXHJcbiAgICBsZXQgY2FyZCA9IG5ldyBDYXJkTE9BRENOKCk7XHJcbiAgICBjYXJkLmxpbmVMYWJlbC52YWx1ZSA9IFwiTE9BRENOXCI7XHJcbiAgICAvLyBpZiAoIXRoaXMucGFyZW50KSB7XHJcbiAgICBpZiAodGhpcy5wYXJlbnQpIHtcclxuICAgICAgY2FyZC5sb2FkQ29uZGl0aW9uTmFtZS52YWx1ZSA9IHRoaXMucGFyZW50Lm5hbWU7XHJcblxyXG4gICAgICBsZXQgdGV4dCA9IGNhcmQuZ2V0TGluZSgpO1xyXG4gICAgICB0ZXh0ICs9IFwiXFxuXCI7XHJcblxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2hpbGRPYmplY3RzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2hpbGRPYmplY3RzW2ldIGluc3RhbmNlb2YgTWVtYmVyTG9hZEJhc2VPYmplY3QpIHtcclxuICAgICAgICAgIGxldCByZXN1bHQgPSAoXHJcbiAgICAgICAgICAgIHRoaXMuY2hpbGRPYmplY3RzW2ldIGFzIExvYWRCYXNlT2JqZWN0XHJcbiAgICAgICAgICApLnNlcmlhbGl6ZVRvQ2FyZCgpO1xyXG4gICAgICAgICAgaWYocmVzdWx0ICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRleHQgKz0gcmVzdWx0ICsgXCJcXG5cIjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5jaGlsZE9iamVjdHNbaV0gaW5zdGFuY2VvZiBKb2ludExvYWRPYmplY3QpIHtcclxuICAgICAgICAgIGxldCByZXN1bHQgPSAoXHJcbiAgICAgICAgICAgIHRoaXMuY2hpbGRPYmplY3RzW2ldIGFzIExvYWRCYXNlT2JqZWN0XHJcbiAgICAgICAgICApLnNlcmlhbGl6ZVRvQ2FyZCgpO1xyXG4gICAgICAgICAgaWYocmVzdWx0ICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRleHQgKz0gcmVzdWx0ICsgXCJcXG5cIjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdGV4dCArPSBcIiogQ0FTRVwiICsgY2FyZC5sb2FkQ29uZGl0aW9uTmFtZS52YWx1ZTtcclxuICAgICAgdGV4dCArPSBcIlxcblwiO1xyXG5cclxuICAgICAgcmV0dXJuIHRleHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gXCJcIjtcclxuICB9XHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBWUE7QUFBQTtBQVFBO0FBQUE7QUFQQTtBQVNBO0FBQ0E7QUFDQTs7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBOztBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTs7QUFPQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBSUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7O0FBRUE7QUFFQTtBQUdBO0FBQ0E7Ozs7QUFJQTtBQUNBO0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQUE7QUF4SUE7O0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./packages/caeDesign/src/gsDevFx/objects/loadObjects/loadGroupObject.ts\n");
|
|
4859
|
+
eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__, exports, __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\"), __webpack_require__(/*! gs-ceec-design */ \"./packages/ceecDesign/src/index.ts\"), __webpack_require__(/*! ../instancesObjects/instanceRenderObject */ \"./packages/caeDesign/src/gsDevFx/objects/instancesObjects/instanceRenderObject.ts\"), __webpack_require__(/*! ../../../caeCardEditor/caeCardObjects/seainp/cardLOADCN */ \"./packages/caeDesign/src/caeCardEditor/caeCardObjects/seainp/cardLOADCN.ts\"), __webpack_require__(/*! ./jointLoadObject */ \"./packages/caeDesign/src/gsDevFx/objects/loadObjects/jointLoadObject.ts\"), __webpack_require__(/*! ./memberLoadBaseObject */ \"./packages/caeDesign/src/gsDevFx/objects/loadObjects/memberLoadBaseObject.ts\")], __WEBPACK_AMD_DEFINE_RESULT__ = (function (require, exports, tslib_1, gs_ceec_design_1, instanceRenderObject_1, cardLOADCN_1, jointLoadObject_1, memberLoadBaseObject_1) {\n \"use strict\";\n\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n exports.LoadGroupObject = void 0;\n var LoadGroupObject = function (_super) {\n tslib_1.__extends(LoadGroupObject, _super);\n function LoadGroupObject(loadGroupName) {\n var _this = _super.call(this) || this;\n _this.typeName = \"LoadGroupObject\";\n _this.name = loadGroupName;\n _this.loadGroup = loadGroupName;\n _this.instanceTypes.add(\"main\", instanceRenderObject_1.InstanceRenderObject.prototype);\n return _this;\n }\n LoadGroupObject.prototype.serialize = function () {\n var obj = _super.prototype.serialize.call(this);\n if (this.loadGroup) {\n obj.loadGroup = this.loadGroup;\n }\n return obj;\n };\n LoadGroupObject.prototype.deserialize = function (obj, pm) {\n _super.prototype.deserialize.call(this, obj, pm);\n if (obj.loadGroup) {\n this.loadGroup = obj.loadGroup;\n }\n };\n LoadGroupObject.prototype.active = function (viewer) {\n for (var i = 0; i < this.childObjects.length; i++) {\n var load = this.childObjects[i];\n if (load.checkBusinessStateIsActive()) {\n viewer.findInstanceObject(load).initSvg();\n }\n }\n };\n LoadGroupObject.prototype.inactive = function (viewer) {\n for (var i = 0; i < this.childObjects.length; i++) {\n var load = this.childObjects[i];\n viewer.findInstanceObject(load).removeSvg();\n }\n };\n LoadGroupObject.prototype.serializeToCard = function () {\n var card = new cardLOADCN_1.CardLOADCN();\n card.lineLabel.value = \"LOADCN\";\n card.loadConditionName.value = this.parent.name;\n var text = card.getLine();\n text += \"\\n\";\n for (var i = 0; i < this.childObjects.length; i++) {\n var result = this.childObjects[i].serializeToCard();\n if (result !== null) {\n text += result + \"\\n\";\n }\n }\n text += \"* CASE\" + card.loadConditionName.value;\n text += \"\\n\";\n return text;\n };\n LoadGroupObject.prototype.serializeToCardSeaInp = function () {\n var card = new cardLOADCN_1.CardLOADCN();\n card.lineLabel.value = \"LOADCN\";\n card.loadConditionName.value = this.parent.name;\n var text = card.getLine();\n text += \"\\n\";\n for (var i = 0; i < this.childObjects.length; i++) {\n if (!this.childObjects[i].checkBusinessStateIsActive()) {\n continue;\n }\n if (this.childObjects[i] instanceof jointLoadObject_1.JointLoadObject) {\n var result = this.childObjects[i].serializeToCard();\n if (result !== null) {\n text += result + \"\\n\";\n }\n }\n }\n text += \"* CASE\" + card.loadConditionName.value;\n text += \"\\n\";\n return text;\n };\n LoadGroupObject.prototype.serializeToCardSacInp = function () {\n var card = new cardLOADCN_1.CardLOADCN();\n card.lineLabel.value = \"LOADCN\";\n if (this.parent) {\n card.loadConditionName.value = this.parent.name;\n var text = card.getLine();\n text += \"\\n\";\n for (var i = 0; i < this.childObjects.length; i++) {\n if (!this.childObjects[i].checkBusinessStateIsActive()) {\n continue;\n }\n if (this.childObjects[i] instanceof memberLoadBaseObject_1.MemberLoadBaseObject) {\n var result = this.childObjects[i].serializeToCard();\n if (result !== null) {\n text += result + \"\\n\";\n }\n } else if (this.childObjects[i] instanceof jointLoadObject_1.JointLoadObject) {\n var result = this.childObjects[i].serializeToCard();\n if (result !== null) {\n text += result + \"\\n\";\n }\n }\n }\n text += \"* CASE\" + card.loadConditionName.value;\n text += \"\\n\";\n return text;\n }\n return \"\";\n };\n return LoadGroupObject;\n }(gs_ceec_design_1.DesignBaseObject);\n exports.LoadGroupObject = LoadGroupObject;\n}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9wYWNrYWdlcy9jYWVEZXNpZ24vc3JjL2dzRGV2Rngvb2JqZWN0cy9sb2FkT2JqZWN0cy9sb2FkR3JvdXBPYmplY3QudHMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9bbmFtZV0vLi9wYWNrYWdlcy9jYWVEZXNpZ24vc3JjL2dzRGV2Rngvb2JqZWN0cy9sb2FkT2JqZWN0cy9sb2FkR3JvdXBPYmplY3QudHM/N2E2NyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEZXNpZ25CYXNlT2JqZWN0IH0gZnJvbSBcImdzLWNlZWMtZGVzaWduXCI7XHJcbmltcG9ydCB7IExvbmdhbiB9IGZyb20gXCJncy1iaW0tYWlyXCI7XHJcbmltcG9ydCB7IEluc3RhbmNlUmVuZGVyT2JqZWN0IH0gZnJvbSBcIi4uL2luc3RhbmNlc09iamVjdHMvaW5zdGFuY2VSZW5kZXJPYmplY3RcIjtcclxuaW1wb3J0IHsgSW5zdGFuY2VMb2FkQmFzZU9iamVjdCB9IGZyb20gXCIuL2luc3RhbmNlTG9hZEJhc2VPYmplY3RcIjtcclxuaW1wb3J0IHsgTG9hZEJhc2VPYmplY3QgfSBmcm9tIFwiLi9sb2FkQmFzZU9iamVjdFwiO1xyXG5pbXBvcnQgeyBDYXJkTE9BRENOIH0gZnJvbSBcIi4uLy4uLy4uL2NhZUNhcmRFZGl0b3IvY2FlQ2FyZE9iamVjdHMvc2VhaW5wL2NhcmRMT0FEQ05cIjtcclxuaW1wb3J0IHsgSm9pbnRMb2FkT2JqZWN0IH0gZnJvbSBcIi4vam9pbnRMb2FkT2JqZWN0XCI7XHJcbmltcG9ydCB7IE1lbWJlckxvYWRCYXNlT2JqZWN0IH0gZnJvbSBcIi4vbWVtYmVyTG9hZEJhc2VPYmplY3RcIjtcclxuXHJcbi8qKlxyXG4gKiDojbfovb3nu4Tnu5jliLblr7nosaEuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgTG9hZEdyb3VwT2JqZWN0IGV4dGVuZHMgRGVzaWduQmFzZU9iamVjdCB7XHJcbiAgcHVibGljIHR5cGVOYW1lID0gXCJMb2FkR3JvdXBPYmplY3RcIjtcclxuXHJcbiAgLyoqXHJcbiAgICog6I236L2957uE5ZCNLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBsb2FkR3JvdXA6IHN0cmluZztcclxuXHJcbiAgcHVibGljIGNvbnN0cnVjdG9yKGxvYWRHcm91cE5hbWU6IHN0cmluZykge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIHRoaXMubmFtZSA9IGxvYWRHcm91cE5hbWU7XHJcbiAgICB0aGlzLmxvYWRHcm91cCA9IGxvYWRHcm91cE5hbWU7XHJcbiAgICB0aGlzLmluc3RhbmNlVHlwZXMuYWRkKFwibWFpblwiLCBJbnN0YW5jZVJlbmRlck9iamVjdC5wcm90b3R5cGUpO1xyXG4gIH1cclxuXHJcbiAgc2VyaWFsaXplKCkge1xyXG4gICAgbGV0IG9iaiA9IHN1cGVyLnNlcmlhbGl6ZSgpO1xyXG5cclxuICAgIGlmICh0aGlzLmxvYWRHcm91cCkge1xyXG4gICAgICBvYmoubG9hZEdyb3VwID0gdGhpcy5sb2FkR3JvdXA7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG9iajtcclxuICB9XHJcblxyXG4gIGRlc2VyaWFsaXplKG9iajogYW55LCBwbT86IExvbmdhbi5QZXJzaXN0ZW5jZU1hbmFnZXIpOiB2b2lkIHtcclxuICAgIHN1cGVyLmRlc2VyaWFsaXplKG9iaiwgcG0pO1xyXG5cclxuICAgIGlmIChvYmoubG9hZEdyb3VwKSB7XHJcbiAgICAgIHRoaXMubG9hZEdyb3VwID0gb2JqLmxvYWRHcm91cDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgIC8vICAgY29uc29sZS5sb2coXCJhY3RpdmUtLS0tLVwiKTtcclxuICAgIC8vICAgdGhpcy5hY3RpdmUoUHJvY2Vzcy5hY3RpdmVQcm9jZXNzLmFjdGl2ZVZpZXdlcik7XHJcbiAgICAvLyB9LCA1MDAwKTtcclxuICB9XHJcblxyXG4gIGFjdGl2ZSh2aWV3ZXI6IExvbmdhbi5WaWV3ZXIpIHtcclxuICAgIC8vIOe7mOWItuivpeiNt+i9vee7hOeahOWFqOmDqOiNt+i9vS5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jaGlsZE9iamVjdHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGxvYWQgPSB0aGlzLmNoaWxkT2JqZWN0c1tpXSBhcyBMb2FkQmFzZU9iamVjdDtcclxuICAgICAgaWYobG9hZC5jaGVja0J1c2luZXNzU3RhdGVJc0FjdGl2ZSgpKSB7XHJcbiAgICAgICAgKHZpZXdlci5maW5kSW5zdGFuY2VPYmplY3QobG9hZCkgYXMgSW5zdGFuY2VMb2FkQmFzZU9iamVjdCkuaW5pdFN2ZygpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbmFjdGl2ZSh2aWV3ZXI6IExvbmdhbi5WaWV3ZXIpIHtcclxuICAgIC8vIOWPlua2iOivpeiNt+i9vee7hOeahOe7mOWIti5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jaGlsZE9iamVjdHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGxvYWQgPSB0aGlzLmNoaWxkT2JqZWN0c1tpXSBhcyBMb2FkQmFzZU9iamVjdDtcclxuICAgICAgKHZpZXdlci5maW5kSW5zdGFuY2VPYmplY3QobG9hZCkgYXMgSW5zdGFuY2VMb2FkQmFzZU9iamVjdCkucmVtb3ZlU3ZnKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXJpYWxpemVUb0NhcmQoKSB7XHJcbiAgICAvL1xyXG4gICAgbGV0IGNhcmQgPSBuZXcgQ2FyZExPQURDTigpO1xyXG4gICAgY2FyZC5saW5lTGFiZWwudmFsdWUgPSBcIkxPQURDTlwiO1xyXG4gICAgY2FyZC5sb2FkQ29uZGl0aW9uTmFtZS52YWx1ZSA9IHRoaXMucGFyZW50Lm5hbWU7XHJcblxyXG4gICAgbGV0IHRleHQgPSBjYXJkLmdldExpbmUoKTtcclxuICAgIHRleHQgKz0gXCJcXG5cIjtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2hpbGRPYmplY3RzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCByZXN1bHQgPSAodGhpcy5jaGlsZE9iamVjdHNbaV0gYXMgTG9hZEJhc2VPYmplY3QpLnNlcmlhbGl6ZVRvQ2FyZCgpO1xyXG4gICAgICBpZihyZXN1bHQgIT09IG51bGwpIHtcclxuICAgICAgICB0ZXh0ICs9IHJlc3VsdCArIFwiXFxuXCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRleHQgKz0gXCIqIENBU0VcIiArIGNhcmQubG9hZENvbmRpdGlvbk5hbWUudmFsdWU7XHJcbiAgICB0ZXh0ICs9IFwiXFxuXCI7XHJcblxyXG4gICAgcmV0dXJuIHRleHQ7XHJcbiAgfVxyXG5cclxuICBzZXJpYWxpemVUb0NhcmRTZWFJbnAoKSB7XHJcbiAgICAvL1xyXG4gICAgbGV0IGNhcmQgPSBuZXcgQ2FyZExPQURDTigpO1xyXG4gICAgY2FyZC5saW5lTGFiZWwudmFsdWUgPSBcIkxPQURDTlwiO1xyXG4gICAgY2FyZC5sb2FkQ29uZGl0aW9uTmFtZS52YWx1ZSA9IHRoaXMucGFyZW50Lm5hbWU7XHJcblxyXG4gICAgbGV0IHRleHQgPSBjYXJkLmdldExpbmUoKTtcclxuICAgIHRleHQgKz0gXCJcXG5cIjtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2hpbGRPYmplY3RzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmKCEodGhpcy5jaGlsZE9iamVjdHNbaV0gYXMgRGVzaWduQmFzZU9iamVjdCkuY2hlY2tCdXNpbmVzc1N0YXRlSXNBY3RpdmUoKSkge1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmNoaWxkT2JqZWN0c1tpXSBpbnN0YW5jZW9mIEpvaW50TG9hZE9iamVjdCkge1xyXG4gICAgICAgIGxldCByZXN1bHQgPSAodGhpcy5jaGlsZE9iamVjdHNbaV0gYXMgTG9hZEJhc2VPYmplY3QpLnNlcmlhbGl6ZVRvQ2FyZCgpO1xyXG4gICAgICAgIGlmKHJlc3VsdCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgdGV4dCArPSByZXN1bHQgKyBcIlxcblwiO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGV4dCArPSBcIiogQ0FTRVwiICsgY2FyZC5sb2FkQ29uZGl0aW9uTmFtZS52YWx1ZTtcclxuICAgIHRleHQgKz0gXCJcXG5cIjtcclxuXHJcbiAgICByZXR1cm4gdGV4dDtcclxuICB9XHJcblxyXG4gIHNlcmlhbGl6ZVRvQ2FyZFNhY0lucCgpIHtcclxuICAgIC8vXHJcbiAgICBsZXQgY2FyZCA9IG5ldyBDYXJkTE9BRENOKCk7XHJcbiAgICBjYXJkLmxpbmVMYWJlbC52YWx1ZSA9IFwiTE9BRENOXCI7XHJcbiAgICAvLyBpZiAoIXRoaXMucGFyZW50KSB7XHJcbiAgICBpZiAodGhpcy5wYXJlbnQpIHtcclxuICAgICAgY2FyZC5sb2FkQ29uZGl0aW9uTmFtZS52YWx1ZSA9IHRoaXMucGFyZW50Lm5hbWU7XHJcblxyXG4gICAgICBsZXQgdGV4dCA9IGNhcmQuZ2V0TGluZSgpO1xyXG4gICAgICB0ZXh0ICs9IFwiXFxuXCI7XHJcblxyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2hpbGRPYmplY3RzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYoISh0aGlzLmNoaWxkT2JqZWN0c1tpXSBhcyBEZXNpZ25CYXNlT2JqZWN0KS5jaGVja0J1c2luZXNzU3RhdGVJc0FjdGl2ZSgpKSB7XHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuY2hpbGRPYmplY3RzW2ldIGluc3RhbmNlb2YgTWVtYmVyTG9hZEJhc2VPYmplY3QpIHtcclxuICAgICAgICAgIGxldCByZXN1bHQgPSAoXHJcbiAgICAgICAgICAgIHRoaXMuY2hpbGRPYmplY3RzW2ldIGFzIExvYWRCYXNlT2JqZWN0XHJcbiAgICAgICAgICApLnNlcmlhbGl6ZVRvQ2FyZCgpO1xyXG4gICAgICAgICAgaWYocmVzdWx0ICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRleHQgKz0gcmVzdWx0ICsgXCJcXG5cIjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5jaGlsZE9iamVjdHNbaV0gaW5zdGFuY2VvZiBKb2ludExvYWRPYmplY3QpIHtcclxuICAgICAgICAgIGxldCByZXN1bHQgPSAoXHJcbiAgICAgICAgICAgIHRoaXMuY2hpbGRPYmplY3RzW2ldIGFzIExvYWRCYXNlT2JqZWN0XHJcbiAgICAgICAgICApLnNlcmlhbGl6ZVRvQ2FyZCgpO1xyXG4gICAgICAgICAgaWYocmVzdWx0ICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRleHQgKz0gcmVzdWx0ICsgXCJcXG5cIjtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgdGV4dCArPSBcIiogQ0FTRVwiICsgY2FyZC5sb2FkQ29uZGl0aW9uTmFtZS52YWx1ZTtcclxuICAgICAgdGV4dCArPSBcIlxcblwiO1xyXG5cclxuICAgICAgcmV0dXJuIHRleHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gXCJcIjtcclxuICB9XHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBWUE7QUFBQTtBQVFBO0FBQUE7QUFQQTtBQVNBO0FBQ0E7QUFDQTs7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBOztBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTs7QUFPQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFHQTtBQUNBOztBQUVBO0FBRUE7QUFHQTtBQUNBOzs7O0FBSUE7QUFDQTtBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBOUlBOztBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./packages/caeDesign/src/gsDevFx/objects/loadObjects/loadGroupObject.ts\n");
|
|
4860
4860
|
|
|
4861
4861
|
/***/ }),
|
|
4862
4862
|
|
|
@@ -5565,7 +5565,7 @@ eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPAC
|
|
|
5565
5565
|
/*! no static exports found */
|
|
5566
5566
|
/***/ (function(module, exports, __webpack_require__) {
|
|
5567
5567
|
|
|
5568
|
-
eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\n!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__, exports, __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\"), __webpack_require__(/*! ../store */ \"./packages/caeDesign/src/store/index.ts\"), __webpack_require__(/*! gs-bim-air */ \"./node_modules/gs-bim-air/lib/BimAir.umd.min.js\"), __webpack_require__(/*! ./commands/commandSelect */ \"./packages/caeDesign/src/gsDevFx/commands/commandSelect.ts\"), __webpack_require__(/*! ./managers/panelManager */ \"./packages/caeDesign/src/gsDevFx/managers/panelManager.ts\"), __webpack_require__(/*! ./managers/structureTreeManager */ \"./packages/caeDesign/src/gsDevFx/managers/structureTreeManager.ts\"), __webpack_require__(/*! ../axiosRequestExport */ \"./packages/caeDesign/src/axiosRequestExport.ts\"), __webpack_require__(/*! ./process */ \"./packages/caeDesign/src/gsDevFx/process.ts\"), __webpack_require__(/*! gs-ceec-design */ \"./packages/ceecDesign/src/index.ts\"), __webpack_require__(/*! ./managers/interfaceManagers/viewInterfaceManager */ \"./packages/caeDesign/src/gsDevFx/managers/interfaceManagers/viewInterfaceManager.ts\"), __webpack_require__(/*! ./managers/interfaceManagers/selectionInterfaceManager */ \"./packages/caeDesign/src/gsDevFx/managers/interfaceManagers/selectionInterfaceManager.ts\"), __webpack_require__(/*! ./managers/interfaceManagers/commonInterfaceManager */ \"./packages/caeDesign/src/gsDevFx/managers/interfaceManagers/commonInterfaceManager.ts\"), __webpack_require__(/*! gs-bim-air */ \"./node_modules/gs-bim-air/lib/BimAir.umd.min.js\"), __webpack_require__(/*! gs-bim-air */ \"./node_modules/gs-bim-air/lib/BimAir.umd.min.js\"), __webpack_require__(/*! ./managers/interfaceManagers/commandInterfaceManager */ \"./packages/caeDesign/src/gsDevFx/managers/interfaceManagers/commandInterfaceManager.ts\"), __webpack_require__(/*! ./managers/datReaderManager */ \"./packages/caeDesign/src/gsDevFx/managers/datReaderManager.ts\"), __webpack_require__(/*! ./managers/datWriterManager */ \"./packages/caeDesign/src/gsDevFx/managers/datWriterManager.ts\"), __webpack_require__(/*! gs-ceec-design */ \"./packages/ceecDesign/src/index.ts\"), __webpack_require__(/*! ./objects/caeObjects/plateObject */ \"./packages/caeDesign/src/gsDevFx/objects/caeObjects/plateObject.ts\"), __webpack_require__(/*! ./objects/caeObjects/memberObject */ \"./packages/caeDesign/src/gsDevFx/objects/caeObjects/memberObject.ts\"), __webpack_require__(/*! ./objects/caeObjects/jointObject */ \"./packages/caeDesign/src/gsDevFx/objects/caeObjects/jointObject.ts\"), __webpack_require__(/*! gs-ceec-design */ \"./packages/ceecDesign/src/index.ts\"), __webpack_require__(/*! ./operators/cameraMouse */ \"./packages/caeDesign/src/gsDevFx/operators/cameraMouse.ts\"), __webpack_require__(/*! ./managers/interfaceManagers/postInterfaceManager */ \"./packages/caeDesign/src/gsDevFx/managers/interfaceManagers/postInterfaceManager.ts\")], __WEBPACK_AMD_DEFINE_RESULT__ = (function (require, exports, tslib_1, store_1, gs_bim_air_1, commandSelect_1, panelManager_1, structureTreeManager_1, axiosRequestExport_1, process_1, gs_ceec_design_1, viewInterfaceManager_1, selectionInterfaceManager_1, commonInterfaceManager_1, gs_bim_air_2, gs_bim_air_3, commandInterfaceManager_1, datReaderManager_1, datWriterManager_1, gs_ceec_design_2, plateObject_1, memberObject_1, jointObject_1, gs_ceec_design_3, cameraMouse_1, postInterfaceManager_1) {\n \"use strict\";\n\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n exports.Viewer = void 0;\n store_1 = tslib_1.__importDefault(store_1);\n axiosRequestExport_1 = tslib_1.__importDefault(axiosRequestExport_1);\n var Viewer = function (_super) {\n tslib_1.__extends(Viewer, _super);\n function Viewer(options, process) {\n if (process === void 0) {\n process = null;\n }\n var _this = _super.call(this, options) || this;\n _this.copyedObjects = new gs_bim_air_1.Longan.List();\n _this.initViewerOptions();\n _this.setViewerOptions(options, options);\n _this.addEvent();\n _this.addSvgRect(_this);\n _this.initManagers();\n var commandSelect = new commandSelect_1.CommandSelect();\n _this.process.commandManager.execute(commandSelect);\n store_1.default.commit(\"viewerInstance\", _this);\n window.viewer = _this;\n return _this;\n }\n Viewer.prototype.createProcess = function (isNewProcess) {\n if (isNewProcess) {\n var process = new process_1.Process();\n process.activate();\n process.addViewer(this);\n process.activeViewer = this;\n } else {\n var process = process_1.Process.activeProcess;\n process.activate();\n process.addViewer(this);\n process.activeViewer = this;\n }\n };\n Viewer.prototype.addSvgRect = function (viewer) {\n var svgDraw = gs_ceec_design_2.SvgDraw.getInstance(viewer.container.id);\n var draw = svgDraw.draw;\n var startX = null;\n var startY = null;\n var rect = null;\n var circle = null;\n gs_bim_air_1.Longan.CameraMouse.lButtonDown.add(function (cm, e) {\n startX = e.uiEvent.offsetX;\n startY = e.uiEvent.offsetY;\n });\n var self = this;\n gs_bim_air_1.Longan.CameraMouse.lButtonDownAndMove.add(function (cm, e) {\n var cameraMouse = self.operatorManager.find(\"CameraMouse\");\n if (cameraMouse) {\n if (cameraMouse.lButtonSate === gs_bim_air_1.Longan.LButtonState.scale || cameraMouse.lButtonSate === gs_bim_air_1.Longan.LButtonState.select) {\n var endX = e.uiEvent.offsetX;\n var endY = e.uiEvent.offsetY;\n if (rect) {\n rect.remove();\n rect = null;\n }\n if (startX && startY && endX && endY) {\n rect = self.drawRect(startX, startY, endX, endY, draw);\n }\n if (circle) {\n circle.remove();\n circle = null;\n }\n if (cameraMouse.lButtonSate === gs_bim_air_1.Longan.LButtonState.scale) {\n circle = self.drawCircle(startX, startY, endX, endY, draw);\n }\n }\n }\n });\n gs_bim_air_1.Longan.CameraMouse.lButtonUp.add(function (cm, e) {\n if (rect) {\n rect.remove();\n rect = null;\n }\n if (circle) {\n circle.remove();\n circle = null;\n }\n });\n };\n Viewer.prototype.drawRect = function (x1, y1, x2, y2, draw) {\n var X1 = Math.min(x1, x2);\n var Y1 = Math.min(y1, y2);\n var X2 = Math.max(x1, x2);\n var Y2 = Math.max(y1, y2);\n var rect = draw.rect(X2 - X1, Y2 - Y1).move(X1, Y1).fill(\"transparent\").stroke({\n color: \"#E09C0D\",\n width: 3\n });\n return rect;\n };\n Viewer.prototype.drawCircle = function (x1, y1, x2, y2, draw) {\n var centerx = (x1 + x2) / 2;\n var centery = (y1 + y2) / 2;\n var r = 10;\n var circle = draw.circle(r).move(centerx, centery).fill(\"transparent\").stroke({\n color: \"#E09C0D\",\n width: 3\n });\n return circle;\n };\n Viewer.prototype.addCompass = function (viewer) {\n gs_bim_air_1.Longan.LonganCore.JS_Open_Segment_By_Key(viewer.sceneKey);\n {\n var compassKey = gs_bim_air_1.Longan.LonganCore.JS_Open_Segment(\"Compass\");\n {\n gs_bim_air_1.Longan.LonganCore.JS_Set_Rendering_Options(\"depth range=(0.0, 0.1),sync update=on\");\n gs_bim_air_1.Longan.LonganCore.JS_Set_Visibility(\"borders=on\");\n gs_bim_air_1.Longan.LonganCore.JS_Set_Color(\"edges=(r=0.68,g=0.68,b=0.68)\");\n gs_bim_air_1.Longan.LonganCore.JS_Set_Heuristic_Options(\"exclude bounding=on\");\n gs_bim_air_1.Longan.LonganCore.JS_Set_Camera([10, 10, 10], [0, 0, 0], [0, 1, 0], 40, 40, \"orthographic\");\n gs_bim_air_1.Longan.LonganCore.JS_Set_ModellingMatrix([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);\n gs_bim_air_1.Longan.LonganCore.JS_Set_Viewport(-0.05, 0, 0.2, 0.2, \"window\");\n }\n gs_bim_air_1.Longan.LonganCore.JS_Close_Segment();\n this.addLineCompass(compassKey);\n this.roll(viewer);\n viewer.sceneCameraChanged.add(this.rollCompass);\n }\n gs_bim_air_1.Longan.LonganCore.JS_Close_Segment();\n };\n Viewer.prototype.addLineCompass = function (compassKey) {\n var origin = [0, 0, 0];\n var len = 10;\n var sconLen = 0.2 * len;\n var sconRad = 0.2 * len;\n var segment = new gs_bim_air_1.Longan.Segment(compassKey);\n segment.selectability.setFace(gs_bim_air_1.Longan.SelectabilityType.Off);\n segment.selectability.setLine(gs_bim_air_1.Longan.SelectabilityType.Off);\n var xAxis = segment.subsegment(\"xAxis\");\n xAxis.insertLine(origin, [len, 0, 0]);\n xAxis.color.setLine([0, 0, 255, 1]);\n xAxis.color.setFace([0, 0, 255, 1]);\n xAxis.insertParametricGeometry(\"scon\", tslib_1.__spreadArray(tslib_1.__spreadArray(tslib_1.__spreadArray([], [len, 0, 0], false), [-1, 0, 0], false), [sconLen, sconRad], false));\n var yAxis = segment.subsegment(\"yAxis\");\n yAxis.insertLine(origin, [0, len, 0]);\n yAxis.color.setLine([0, 255, 0, 1]);\n yAxis.color.setFace([0, 255, 0, 1]);\n this.sceneCameraChanged.add(function () {\n var camPos = new Float64Array(segment.camera.position);\n gs_bim_air_1.Longan.DVector.normalizeVector(camPos);\n var camUp = new Float64Array(segment.camera.up);\n gs_bim_air_1.Longan.DVector.normalize(camUp);\n var xa = gs_bim_air_1.Longan.DVector.cross(camUp, camPos);\n gs_bim_air_1.Longan.DVector.normalize(xa);\n var ya = gs_bim_air_1.Longan.DVector.cross(camPos, xa);\n gs_bim_air_1.Longan.DVector.normalize(ya);\n var yAxisCharSeg = yAxis.subsegment(\"char\");\n yAxisCharSeg.clearAll();\n yAxisCharSeg.insertVectorText(\"Y\", [0, len + 1, 0], xa, ya, 8);\n yAxisCharSeg.renderingOptions.cullBackFace = false;\n var xAxisCharSeg = xAxis.subsegment(\"char\");\n xAxisCharSeg.clearAll();\n xAxisCharSeg.insertVectorText(\"X\", [len + 1, 0, 0], xa, ya, 8);\n xAxisCharSeg.renderingOptions.cullBackFace = false;\n var zAxisCharSeg = zAxis.subsegment(\"char\");\n zAxisCharSeg.clearAll();\n zAxisCharSeg.insertVectorText(\"Z\", [0, 0, len + 1], xa, ya, 8);\n zAxisCharSeg.renderingOptions.cullBackFace = false;\n });\n yAxis.insertParametricGeometry(\"scon\", tslib_1.__spreadArray(tslib_1.__spreadArray(tslib_1.__spreadArray([], [0, len, 0], false), [0, -1, 0], false), [sconLen, sconRad], false));\n var zAxis = segment.subsegment(\"zAxis\");\n zAxis.insertLine(origin, [0, 0, len]);\n zAxis.color.setLine([255, 0, 0, 1]);\n zAxis.color.setFace([255, 0, 0, 1]);\n zAxis.insertParametricGeometry(\"scon\", tslib_1.__spreadArray(tslib_1.__spreadArray(tslib_1.__spreadArray([], [0, 0, len], false), [0, 0, -1], false), [sconLen, sconRad], false));\n };\n Viewer.prototype.initViewerOptions = function () {\n this.name = \"main\";\n this.backgroundColor = [0, 0, 0, 0];\n this.sceneSegment.renderingOptions.setDepthRange(0.1, 1).setCullingMaximumExtent(5);\n this.sceneSegment.camera.projection = gs_bim_air_1.Longan.ProjectionType.Orthographic;\n this.updateType = gs_bim_air_1.Longan.LonganCore.UpdateType.Synchronization;\n this.dynamicMemory = gs_bim_air_1.Longan.DynamicMemoryType.Client;\n this.geoDataIsCompression = true;\n gs_bim_air_1.Longan.LonganCore.JS_Open_Segment_By_Key(this.viewKey);\n {\n gs_bim_air_1.Longan.LonganCore.JS_Set_Driver_Options(\"selection tolerance=2\");\n }\n gs_bim_air_1.Longan.LonganCore.JS_Close_Segment();\n };\n Viewer.prototype.addEvent = function () {\n var _this = this;\n this.onWindowKeyDown.add(function (sender, event) {\n var ev = event.uiEvent;\n var key = ev.key;\n if (ev.ctrlKey == true && ev.keyCode == 90) {\n if (_this.process.historyManager.canRollBack) {\n _this.process.historyManager.rollBack();\n }\n console.log(\"rollBack\", _this.process.historyManager);\n } else if (ev.ctrlKey == true && ev.keyCode == 89) {\n if (_this.process.historyManager.canRollForward) {\n _this.process.historyManager.rollForward();\n }\n console.log(\"rollForward\", _this.process.historyManager);\n } else if (ev.keyCode === 9) {\n console.log(\"tab\");\n var camera = _this.operatorManager.find(\"CameraMouse\");\n if (camera instanceof cameraMouse_1.CameraMouse) {\n camera.lButtonSate = gs_bim_air_1.Longan.LButtonState.translation;\n }\n } else if (ev.keyCode === 16) {\n console.log(\"shift\");\n var camera = _this.operatorManager.find(\"CameraMouse\");\n if (camera instanceof cameraMouse_1.CameraMouse) {\n camera.lButtonSate = gs_bim_air_1.Longan.LButtonState.rotation;\n }\n } else if (ev.ctrlKey == true && key === \"c\") {} else if (ev.ctrlKey == true && key === \"v\") {} else if (ev.keyCode === 27) {\n console.log(\"esc\");\n var camera = _this.operatorManager.find(\"CameraMouse\");\n if (camera instanceof cameraMouse_1.CameraMouse) {\n var id = camera.continuousRotateAnimId;\n _this.process.animationManager.stopAnime(id);\n _this.process.animationManager.removeAnime(id);\n camera.continuousRotateAnimId = null;\n }\n }\n });\n this.onWindowKeyUp.add(function (sender, event) {\n var ev = event.uiEvent;\n if (ev.keyCode === 9) {\n console.log(\"tabUp\");\n var camera = _this.operatorManager.find(\"CameraMouse\");\n if (camera instanceof cameraMouse_1.CameraMouse) {\n camera.lButtonSate = gs_bim_air_1.Longan.LButtonState.select;\n }\n } else if (ev.keyCode === 16) {\n console.log(\"shiftUp\");\n var camera = _this.operatorManager.find(\"CameraMouse\");\n if (camera instanceof cameraMouse_1.CameraMouse) {\n camera.lButtonSate = gs_bim_air_1.Longan.LButtonState.select;\n }\n }\n });\n };\n Viewer.prototype.copyComponents = function () {\n var caeObjectSelector = this.operatorManager.find(\"CAEObjectSelector\");\n if (caeObjectSelector) {\n var selectedObjs = caeObjectSelector.selectedRenderObjects;\n this.copyedObjects.clear();\n if (selectedObjs.count() > 0) {\n if (this.commonInterfaceManager.copyedExternalEvent) {\n this.commonInterfaceManager.copyedExternalEvent();\n }\n console.log(\"copy success\");\n for (var i = 0; i < selectedObjs.count(); i++) {\n this.copyedObjects.add(selectedObjs.items[i]);\n }\n } else {\n console.log(\"copy fail\");\n }\n }\n return this.copyedObjects;\n };\n Viewer.prototype.pasteComponents = function () {\n var _this = this;\n var caeObjectSelector = this.operatorManager.find(\"CAEObjectSelector\");\n if (caeObjectSelector) {\n var newStates_1 = new Array();\n var selectedComponents = this.copyedObjects;\n if (selectedComponents.count() > 0) {\n var dataObj = this.computeClosestJoint(selectedComponents);\n var targetPosition = this.getTargetPosition();\n if (!targetPosition) {\n return;\n }\n var closetPosition = dataObj.closetPosition;\n var cloneJoints = dataObj.cloneJoints;\n var cloneMembers = dataObj.cloneMembers;\n var clonePlates = dataObj.clonePlates;\n var jointNameMapNewJoint = {};\n var vector = gs_bim_air_1.Longan.Point.subtract(targetPosition, closetPosition);\n for (var i = 0; i < cloneJoints.count(); i++) {\n var cloneJoint = cloneJoints.items[i];\n var newJoint = this.process.cloneManager.cloneObject(cloneJoint);\n newJoint.businessState = gs_ceec_design_3.BusinessState.Creating;\n newJoint.name = this.process.caeRenderObjectTreeManager.nameAscendingOrder(newJoint.name, 1)[0];\n newJoint.xOnMeter += vector[0];\n newJoint.yOnMeter += vector[1];\n newJoint.zOnMeter += vector[2];\n this.process.addRenderObject(this.process.caeRenderObjectTreeManager.jointNode, newJoint);\n newJoint.setNeedUpdate();\n newStates_1.push(newJoint);\n jointNameMapNewJoint[cloneJoint.name] = newJoint;\n }\n for (var i = 0; i < cloneMembers.count(); i++) {\n var cloneMember = cloneMembers.items[i];\n var neWMember = this.process.cloneManager.cloneObject(cloneMember);\n neWMember.businessState = gs_ceec_design_3.BusinessState.Creating;\n neWMember.name = this.process.caeRenderObjectTreeManager.nameAscendingOrder(neWMember.name, 1, this.process.nameMapMember)[0];\n var newStart = jointNameMapNewJoint[neWMember.start.name];\n if (newStart) {\n neWMember.start = newStart;\n }\n var newEnd = jointNameMapNewJoint[neWMember.end.name];\n if (newEnd) {\n neWMember.end = newEnd;\n }\n this.process.addRenderObject(this.process.caeRenderObjectTreeManager.memberNode, neWMember);\n neWMember.setNeedUpdate();\n newStates_1.push(neWMember);\n }\n for (var i = 0; i < clonePlates.count(); i++) {\n var clonePlate = clonePlates.items[i];\n var newPlate = this.process.cloneManager.cloneObject(clonePlate);\n newPlate.businessState = gs_ceec_design_3.BusinessState.Creating;\n newPlate.name = this.process.caeRenderObjectTreeManager.nameAscendingOrder(newPlate.name, 1, this.process.nameMapPlate)[0];\n var newJoints = new Array();\n for (var j = 0; j < newPlate.joints.length; j++) {\n var newJoint = jointNameMapNewJoint[newPlate.joints[j].name];\n if (newJoint) {\n newJoints.push(newJoint);\n }\n }\n newPlate.joints = newJoints;\n this.process.addRenderObject(this.process.caeRenderObjectTreeManager.plateNode, newPlate);\n newPlate.setNeedUpdate();\n newStates_1.push(newPlate);\n }\n this.addState(null, newStates_1, function (stateItem) {\n if (stateItem.newObj === null) {\n for (var i = 0; i < newStates_1.length; i++) {\n newStates_1[i].tempDelete(_this);\n }\n } else {\n for (var i = 0; i < newStates_1.length; i++) {\n newStates_1[i].tempCreate(_this);\n }\n }\n _this.updateDisplay();\n });\n this.selectionManager.clearAllSelectionAndHighlight();\n caeObjectSelector.selectedRenderObjects.clear();\n this.updateDisplay();\n this.viewInterfaceManager.resetView();\n }\n }\n };\n Viewer.prototype.getTargetPosition = function () {\n var caeObjectSelector = this.operatorManager.find(\"CAEObjectSelector\");\n if (this.selectionInterfaceManager.selectorFilter === selectionInterfaceManager_1.SelectorFiliter.Joint || this.selectionInterfaceManager.selectorFilter === selectionInterfaceManager_1.SelectorFiliter.All) {\n var objects = caeObjectSelector.selectedRenderObjects;\n if (objects.count() > 0) {\n var obj = objects.items[0];\n if (obj) {\n return new Float32Array(obj.position);\n } else {\n return null;\n }\n } else {\n return null;\n }\n } else {\n return null;\n }\n };\n Viewer.prototype.computeClosestJoint = function (componentList) {\n var clonePlates = new gs_bim_air_1.Longan.List();\n var cloneMembers = new gs_bim_air_1.Longan.List();\n var cloneJoints = new gs_bim_air_1.Longan.List();\n var closetPoint = null;\n var minDis = 99999;\n for (var i = 0; i < componentList.count(); i++) {\n var component = componentList.items[i];\n switch (component.typeName) {\n case \"JointObject\":\n {\n if (component instanceof jointObject_1.JointObject) {\n if (cloneJoints.indexOf(component) === -1) {\n cloneJoints.add(component);\n }\n var tempPoint = new Float32Array(component.position);\n var dis = gs_bim_air_1.Longan.Vector.module(tempPoint);\n if (dis < minDis) {\n minDis = dis;\n closetPoint = tempPoint;\n }\n }\n }\n break;\n case \"MemberObject\":\n {\n if (component instanceof memberObject_1.MemberObject) {\n cloneMembers.add(component);\n if (cloneJoints.indexOf(component.start) === -1) {\n cloneJoints.add(component.start);\n }\n if (cloneJoints.indexOf(component.end) === -1) {\n cloneJoints.add(component.end);\n }\n var p0 = new Float32Array(component.start.position);\n var p1 = new Float32Array(component.end.position);\n var dis0 = gs_bim_air_1.Longan.Vector.module(p0);\n var dis1 = gs_bim_air_1.Longan.Vector.module(p1);\n if (dis0 < minDis) {\n minDis = dis0;\n closetPoint = p0;\n }\n if (dis1 < minDis) {\n minDis = dis1;\n closetPoint = p1;\n }\n }\n }\n break;\n case \"PlateObject\":\n {\n if (component instanceof plateObject_1.PlateObject) {\n clonePlates.add(component);\n for (var j = 0; j < component.joints.length; j++) {\n var joint = component.joints[j];\n if (cloneJoints.indexOf(joint) === -1) {\n cloneJoints.add(joint);\n }\n var point = new Float32Array(joint.position);\n var dis = gs_bim_air_1.Longan.Vector.module(point);\n if (dis < minDis) {\n minDis = dis;\n closetPoint = point;\n }\n }\n }\n }\n break;\n }\n }\n return {\n closetPosition: closetPoint,\n cloneJoints: cloneJoints,\n cloneMembers: cloneMembers,\n clonePlates: clonePlates\n };\n };\n Viewer.prototype.setViewerOptions = function (options, config) {\n var _this = this;\n var keys = Object.keys(config);\n keys.forEach(function (key) {\n if (_typeof(options[key]) === \"object\") {\n _this.setViewerOptions(options[key], config[key]);\n } else {\n options[key] = config[key];\n }\n });\n };\n Viewer.prototype.addState = function (oldObj, newObj, afterRoll, deltaName) {\n var stateItem = new gs_bim_air_1.Longan.StateItem(oldObj, newObj);\n stateItem.afterRoll.add(function (process, rollType) {\n afterRoll(stateItem, process, rollType);\n });\n var statePack = new gs_bim_air_1.Longan.StatePack();\n statePack.add(stateItem);\n var deltaState = new gs_bim_air_1.Longan.DeltaState();\n deltaState.add(statePack);\n if (deltaName) {\n deltaState.name = deltaName;\n }\n this.process.historyManager.addState(deltaState);\n };\n Viewer.prototype.initManagers = function () {\n _super.prototype.initManagers.call(this);\n this.structureTreeManager = new structureTreeManager_1.StructureTreeManager(this);\n this.aysnTaskManager = new gs_bim_air_1.Longan.AysnTaskManager(this);\n this.viewInterfaceManager = new viewInterfaceManager_1.ViewInterfaceManager(this);\n this.selectionInterfaceManager = new selectionInterfaceManager_1.SelectionInterfaceManager(this);\n this.commonInterfaceManager = new commonInterfaceManager_1.CommonInterfaceManager(this);\n this.postInterfaceManager = new postInterfaceManager_1.PostInterfaceManager(this);\n this.commandInterfaceManager = new commandInterfaceManager_1.CommandInterfaceManager(this);\n this.datReaderManager = new datReaderManager_1.DatReaderManager(this);\n this.datWriterManager = new datWriterManager_1.DatWriterManager(this);\n this.caePanelManager = new panelManager_1.PanelManager(this);\n var material = new gs_bim_air_2.Material(this, \"highlight\", 2);\n material.setColor(255, 0, 0, 1);\n material.setFloat();\n this.highlightManager.styleManagerBase = new gs_bim_air_3.StyleManagerBase(material);\n };\n Viewer.prototype.loadModel = function (id, isReplace) {\n var _this = this;\n if (isReplace === void 0) {\n isReplace = false;\n }\n console.log(\"this.options.modelService:\", this.options.modelService);\n return new Promise(function (resolve, reject) {\n (0, axiosRequestExport_1.default)(\"/cae-service/projects/\".concat(id, \"/data\")).then(function (modelData) {\n if (modelData != null) {\n if (isReplace) {\n _this.disposeAllRenderObjects();\n _this.reset();\n }\n var renderObject = _this.process.persistenceManager.open(modelData);\n _this.process.renderObject = renderObject;\n _this.renderObject = renderObject;\n renderObject.visible = true;\n _this.process.persistenceManager.loadModels();\n _this.onModelLoaded();\n resolve(renderObject);\n }\n return null;\n });\n });\n };\n Viewer.prototype.onModelLoaded = function () {\n this.process.renderObject.segment.computeBoundingBox();\n this.setViewMode(gs_bim_air_1.Longan.ViewMode.Iso, true);\n };\n Viewer.prototype.disposeAllRenderObjects = function () {\n var process = this.process;\n var ros = process.renderObjects;\n ros.forEach(function (key, value) {\n value.delete();\n });\n console.log(\"clear all renderObjects---count:\", this.process.renderObjects.count());\n };\n return Viewer;\n }(gs_ceec_design_1.Viewer);\n exports.Viewer = Viewer;\n}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9wYWNrYWdlcy9jYWVEZXNpZ24vc3JjL2dzRGV2Rngvdmlld2VyLnRzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vW25hbWVdLy4vcGFja2FnZXMvY2FlRGVzaWduL3NyYy9nc0RldkZ4L3ZpZXdlci50cz8wMmM3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzdG9yZSBmcm9tIFwiLi4vc3RvcmVcIjtcbmltcG9ydCB7IERlc2lnbkJhc2VPYmplY3QgfSBmcm9tIFwiZ3MtY2VlYy1kZXNpZ25cIjtcbmltcG9ydCB7IExvbmdhbiB9IGZyb20gXCJncy1iaW0tYWlyXCI7XG5pbXBvcnQgeyBDb21tYW5kU2VsZWN0IH0gZnJvbSBcIi4vY29tbWFuZHMvY29tbWFuZFNlbGVjdFwiO1xuaW1wb3J0IHsgUGFuZWxNYW5hZ2VyIH0gZnJvbSBcIi4vbWFuYWdlcnMvcGFuZWxNYW5hZ2VyXCI7XG5pbXBvcnQgeyBTdHJ1Y3R1cmVUcmVlTWFuYWdlciB9IGZyb20gXCIuL21hbmFnZXJzL3N0cnVjdHVyZVRyZWVNYW5hZ2VyXCI7XG5pbXBvcnQgYXhpb3MgZnJvbSBcIi4uL2F4aW9zUmVxdWVzdEV4cG9ydFwiO1xuaW1wb3J0IHsgUHJvY2VzcyB9IGZyb20gXCIuL3Byb2Nlc3NcIjtcbmltcG9ydCB7IFZpZXdlciBhcyBDRUVDVmlld2VyIH0gZnJvbSBcImdzLWNlZWMtZGVzaWduXCI7XG5pbXBvcnQgeyBWaWV3SW50ZXJmYWNlTWFuYWdlciB9IGZyb20gXCIuL21hbmFnZXJzL2ludGVyZmFjZU1hbmFnZXJzL3ZpZXdJbnRlcmZhY2VNYW5hZ2VyXCI7XG5pbXBvcnQge1xuICBTZWxlY3Rpb25JbnRlcmZhY2VNYW5hZ2VyLFxuICBTZWxlY3RvckZpbGl0ZXIsXG59IGZyb20gXCIuL21hbmFnZXJzL2ludGVyZmFjZU1hbmFnZXJzL3NlbGVjdGlvbkludGVyZmFjZU1hbmFnZXJcIjtcbmltcG9ydCB7IENvbW1vbkludGVyZmFjZU1hbmFnZXIgfSBmcm9tIFwiLi9tYW5hZ2Vycy9pbnRlcmZhY2VNYW5hZ2Vycy9jb21tb25JbnRlcmZhY2VNYW5hZ2VyXCI7XG5pbXBvcnQgeyBNYXRlcmlhbCB9IGZyb20gXCJncy1iaW0tYWlyXCI7XG5pbXBvcnQgeyBTdHlsZU1hbmFnZXJCYXNlIH0gZnJvbSBcImdzLWJpbS1haXJcIjtcbmltcG9ydCB7IENvbW1hbmRJbnRlcmZhY2VNYW5hZ2VyIH0gZnJvbSBcIi4vbWFuYWdlcnMvaW50ZXJmYWNlTWFuYWdlcnMvY29tbWFuZEludGVyZmFjZU1hbmFnZXJcIjtcblxuaW1wb3J0IHsgQ0FFT2JqZWN0U2VsZWN0b3IgfSBmcm9tIFwiLi9vcGVyYXRvcnMvY2FlT2JqZWN0U2VsZWN0b3JcIjtcbmltcG9ydCB7IERhdFJlYWRlck1hbmFnZXIgfSBmcm9tIFwiLi9tYW5hZ2Vycy9kYXRSZWFkZXJNYW5hZ2VyXCI7XG5pbXBvcnQgeyBEYXRXcml0ZXJNYW5hZ2VyIH0gZnJvbSBcIi4vbWFuYWdlcnMvZGF0V3JpdGVyTWFuYWdlclwiO1xuaW1wb3J0IHsgU3ZnRHJhdyB9IGZyb20gXCJncy1jZWVjLWRlc2lnblwiO1xuaW1wb3J0IHsgQ29udGFpbmVyIH0gZnJvbSBcIkBzdmdkb3Rqcy9zdmcuanNcIjtcbmltcG9ydCB7IFBsYXRlT2JqZWN0IH0gZnJvbSBcIi4vb2JqZWN0cy9jYWVPYmplY3RzL3BsYXRlT2JqZWN0XCI7XG5pbXBvcnQgeyBNZW1iZXJPYmplY3QgfSBmcm9tIFwiLi9vYmplY3RzL2NhZU9iamVjdHMvbWVtYmVyT2JqZWN0XCI7XG5pbXBvcnQgeyBKb2ludE9iamVjdCB9IGZyb20gXCIuL29iamVjdHMvY2FlT2JqZWN0cy9qb2ludE9iamVjdFwiO1xuaW1wb3J0IHsgQnVzaW5lc3NTdGF0ZSB9IGZyb20gXCJncy1jZWVjLWRlc2lnblwiO1xuaW1wb3J0IHsgQ2FtZXJhTW91c2UgfSBmcm9tIFwiLi9vcGVyYXRvcnMvY2FtZXJhTW91c2VcIjtcbmltcG9ydCB7IFBvc3RJbnRlcmZhY2VNYW5hZ2VyIH0gZnJvbSBcIi4vbWFuYWdlcnMvaW50ZXJmYWNlTWFuYWdlcnMvcG9zdEludGVyZmFjZU1hbmFnZXJcIjtcblxuLyoqXG4gKiDop4blm77nsbvvvIzliqDovb3mqKHlnovnmoTlrrnlmahcbiAqL1xuLy8gZXhwb3J0IGNsYXNzIFZpZXdlciBleHRlbmRzIExvbmdhbi5WaWV3ZXIge1xuZXhwb3J0IGNsYXNzIFZpZXdlciBleHRlbmRzIENFRUNWaWV3ZXIge1xuICAvLyBwcm90ZWN0ZWQgX29wdGlvbnM6IE9wdGlvbnMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRlZmF1bHRPcHRpb25zKSk7XG4gIC8vIC8qKlxuICAvLyAgKiBWaWV3ZXLnmoTphY3nva5cbiAgLy8gICovXG4gIC8vIGdldCBvcHRpb25zKCk6IE9wdGlvbnMge1xuICAvLyAgIHJldHVybiB0aGlzLl9vcHRpb25zO1xuICAvLyB9XG4gIC8qKiDnu5PmnoTmoJHnrqHnkIblmaggKi9cbiAgc3RydWN0dXJlVHJlZU1hbmFnZXI6IFN0cnVjdHVyZVRyZWVNYW5hZ2VyO1xuXG4gIC8qKlxuICAgKiDop4blm77mjqXlj6PnrqHnkIblmahcbiAgICovXG4gIHZpZXdJbnRlcmZhY2VNYW5hZ2VyOiBWaWV3SW50ZXJmYWNlTWFuYWdlcjtcbiAgLyoqXG4gICAqIOmdouadv+euoeeQhuWZqFxuICAgKi9cbiAgY2FlUGFuZWxNYW5hZ2VyOiBQYW5lbE1hbmFnZXI7XG4gIC8qKlxuICAgKiDpgInmi6nmjqXlj6PnrqHnkIblmahcbiAgICovXG4gIHNlbGVjdGlvbkludGVyZmFjZU1hbmFnZXI6IFNlbGVjdGlvbkludGVyZmFjZU1hbmFnZXI7XG4gIC8qKlxuICAgKiDpgJrnlKjmjqXlj6PnrqHnkIblmahcbiAgICovXG4gIGNvbW1vbkludGVyZmFjZU1hbmFnZXI6IENvbW1vbkludGVyZmFjZU1hbmFnZXI7XG4gIC8qKlxuICAgKiDlkb3ku6TmjqXlj6PnrqHnkIblmahcbiAgICovXG4gIGNvbW1hbmRJbnRlcmZhY2VNYW5hZ2VyOiBDb21tYW5kSW50ZXJmYWNlTWFuYWdlcjtcbiAgLyoqXG4gICAqIOWQjuWkhOeQhuaOpeWPo+euoeeQhuWZqFxuICAgKi9cbiAgcG9zdEludGVyZmFjZU1hbmFnZXI6IFBvc3RJbnRlcmZhY2VNYW5hZ2VyO1xuXG4gIC8qKlxuICAgKiBkYXTmlbDmja7op6PmnpDlmahcbiAgICovXG4gIGRhdFJlYWRlck1hbmFnZXI6IERhdFJlYWRlck1hbmFnZXI7XG5cbiAgLyoqXG4gICAqIGRhdOaVsOaNruWvvOWHui5cbiAgICovXG4gIGRhdFdyaXRlck1hbmFnZXI6IERhdFdyaXRlck1hbmFnZXI7XG5cbiAgcHJvY2VzczogUHJvY2VzcztcblxuICAvLyBwcm9jZXNzOiBQcm9jZXNzO1xuXG4gIC8vIOiiq+WkjeWItueahOaehOS7tlxuICBjb3B5ZWRPYmplY3RzID0gbmV3IExvbmdhbi5MaXN0PERlc2lnbkJhc2VPYmplY3Q+KCk7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9ucywgcHJvY2VzcyA9IG51bGwpIHtcbiAgICAvLyBzdXBlcihvcHRpb25zLmVsZW1lbnRJZCk7XG4gICAgc3VwZXIob3B0aW9ucyk7XG5cbiAgICB0aGlzLmluaXRWaWV3ZXJPcHRpb25zKCk7XG4gICAgdGhpcy5zZXRWaWV3ZXJPcHRpb25zKG9wdGlvbnMsIG9wdGlvbnMpO1xuICAgIC8v5re75Yqg5pKk6ZSA5LiO5YmN6L+b5oyJ6ZKu5LqL5Lu2XG4gICAgdGhpcy5hZGRFdmVudCgpO1xuXG4gICAgdGhpcy5hZGRTdmdSZWN0KHRoaXMpO1xuICAgIHRoaXMuaW5pdE1hbmFnZXJzKCk7XG5cbiAgICAvL+aJp+ihjOm7mOiupGNhbWVyYea1j+iniOWRveS7pFxuICAgIGxldCBjb21tYW5kU2VsZWN0ID0gbmV3IENvbW1hbmRTZWxlY3QoKTtcbiAgICB0aGlzLnByb2Nlc3MuY29tbWFuZE1hbmFnZXIuZXhlY3V0ZShjb21tYW5kU2VsZWN0KTtcblxuICAgIHN0b3JlLmNvbW1pdChcInZpZXdlckluc3RhbmNlXCIsIHRoaXMpO1xuICAgICh3aW5kb3cgYXMgYW55KS52aWV3ZXIgPSB0aGlzO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZVByb2Nlc3MoaXNOZXdQcm9jZXNzOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKGlzTmV3UHJvY2Vzcykge1xuICAgICAgbGV0IHByb2Nlc3MgPSBuZXcgUHJvY2VzcygpO1xuICAgICAgcHJvY2Vzcy5hY3RpdmF0ZSgpO1xuICAgICAgcHJvY2Vzcy5hZGRWaWV3ZXIodGhpcyk7XG4gICAgICBwcm9jZXNzLmFjdGl2ZVZpZXdlciA9IHRoaXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBwcm9jZXNzID0gUHJvY2Vzcy5hY3RpdmVQcm9jZXNzO1xuICAgICAgcHJvY2Vzcy5hY3RpdmF0ZSgpO1xuICAgICAgcHJvY2Vzcy5hZGRWaWV3ZXIodGhpcyk7XG4gICAgICBwcm9jZXNzLmFjdGl2ZVZpZXdlciA9IHRoaXM7XG4gICAgfVxuICB9XG5cbiAgYWRkU3ZnUmVjdCh2aWV3ZXI6IFZpZXdlcikge1xuICAgIC8v5Y+z6ZSu5pi+56S655qEc3Zn5Lit5b+D54K5XG4gICAgbGV0IHN2Z0RyYXcgPSBTdmdEcmF3LmdldEluc3RhbmNlKHZpZXdlci5jb250YWluZXIuaWQpO1xuICAgIC8vIGxldCByb3RhdGVQb2ludFNWRyA9IHN2Z0RyYXcuZHJhdy5zdmcocm90YXRlUG9pbnQpLndpZHRoKDM2KS5oZWlnaHQoMzYpLmF0dHIoXCJzdHlsZVwiLCBcInBvaW50ZXItZXZlbnRzOiBhdXRvOyB0cmFuc2Zvcm0tb3JpZ2lu77yacm90YXRlUG9pbnRcIikuaGlkZSgpXG4gICAgbGV0IGRyYXcgPSBzdmdEcmF3LmRyYXcgYXMgQ29udGFpbmVyO1xuXG4gICAgLy8g5re75Yqgc3Zn6YCJ5qGGXG4gICAgbGV0IHN0YXJ0WCA9IG51bGw7XG4gICAgbGV0IHN0YXJ0WSA9IG51bGw7XG4gICAgbGV0IHJlY3QgPSBudWxsO1xuICAgIGxldCBjaXJjbGUgPSBudWxsO1xuXG4gICAgTG9uZ2FuLkNhbWVyYU1vdXNlLmxCdXR0b25Eb3duLmFkZCgoY20sIGUpID0+IHtcbiAgICAgIHN0YXJ0WCA9IChlLnVpRXZlbnQgYXMgTW91c2VFdmVudCkub2Zmc2V0WDtcbiAgICAgIHN0YXJ0WSA9IChlLnVpRXZlbnQgYXMgTW91c2VFdmVudCkub2Zmc2V0WTtcbiAgICB9KTtcblxuICAgIGxldCBzZWxmID0gdGhpcztcbiAgICBMb25nYW4uQ2FtZXJhTW91c2UubEJ1dHRvbkRvd25BbmRNb3ZlLmFkZCgoY20sIGUpID0+IHtcbiAgICAgIGxldCBjYW1lcmFNb3VzZSA9IHNlbGYub3BlcmF0b3JNYW5hZ2VyLmZpbmQoXCJDYW1lcmFNb3VzZVwiKSBhcyBDYW1lcmFNb3VzZTtcblxuICAgICAgaWYgKGNhbWVyYU1vdXNlKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjYW1lcmFNb3VzZS5sQnV0dG9uU2F0ZSA9PT0gTG9uZ2FuLkxCdXR0b25TdGF0ZS5zY2FsZSB8fFxuICAgICAgICAgIGNhbWVyYU1vdXNlLmxCdXR0b25TYXRlID09PSBMb25nYW4uTEJ1dHRvblN0YXRlLnNlbGVjdFxuICAgICAgICApIHtcbiAgICAgICAgICBsZXQgZW5kWCA9IChlLnVpRXZlbnQgYXMgTW91c2VFdmVudCkub2Zmc2V0WDtcbiAgICAgICAgICBsZXQgZW5kWSA9IChlLnVpRXZlbnQgYXMgTW91c2VFdmVudCkub2Zmc2V0WTtcbiAgICAgICAgICBpZiAocmVjdCkge1xuICAgICAgICAgICAgcmVjdC5yZW1vdmUoKTtcbiAgICAgICAgICAgIHJlY3QgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc3RhcnRYICYmIHN0YXJ0WSAmJiBlbmRYICYmIGVuZFkpIHtcbiAgICAgICAgICAgIHJlY3QgPSBzZWxmLmRyYXdSZWN0KHN0YXJ0WCwgc3RhcnRZLCBlbmRYLCBlbmRZLCBkcmF3KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY2lyY2xlKSB7XG4gICAgICAgICAgICBjaXJjbGUucmVtb3ZlKCk7XG4gICAgICAgICAgICBjaXJjbGUgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY2FtZXJhTW91c2UubEJ1dHRvblNhdGUgPT09IExvbmdhbi5MQnV0dG9uU3RhdGUuc2NhbGUpIHtcbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICBjaXJjbGUgPSBzZWxmLmRyYXdDaXJjbGUoc3RhcnRYLCBzdGFydFksIGVuZFgsIGVuZFksIGRyYXcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIExvbmdhbi5DYW1lcmFNb3VzZS5sQnV0dG9uVXAuYWRkKChjbSwgZSkgPT4ge1xuICAgICAgaWYgKHJlY3QpIHtcbiAgICAgICAgcmVjdC5yZW1vdmUoKTtcbiAgICAgICAgcmVjdCA9IG51bGw7XG4gICAgICB9XG4gICAgICBpZiAoY2lyY2xlKSB7XG4gICAgICAgIGNpcmNsZS5yZW1vdmUoKTtcbiAgICAgICAgY2lyY2xlID0gbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGRyYXdSZWN0KHgxLCB5MSwgeDIsIHkyLCBkcmF3KSB7XG4gICAgLy8gY29uc29sZS5sb2coXCJ4MSwgeTEsIHgyLCB5MlwiLCB4MSwgeTEsIHgyLCB5MilcbiAgICBjb25zdCBYMSA9IE1hdGgubWluKHgxLCB4Mik7XG4gICAgY29uc3QgWTEgPSBNYXRoLm1pbih5MSwgeTIpO1xuICAgIGNvbnN0IFgyID0gTWF0aC5tYXgoeDEsIHgyKTtcbiAgICBjb25zdCBZMiA9IE1hdGgubWF4KHkxLCB5Mik7XG4gICAgbGV0IHJlY3QgPSBkcmF3XG4gICAgICAucmVjdChYMiAtIFgxLCBZMiAtIFkxKVxuICAgICAgLm1vdmUoWDEsIFkxKVxuICAgICAgLmZpbGwoXCJ0cmFuc3BhcmVudFwiKVxuICAgICAgLnN0cm9rZSh7XG4gICAgICAgIGNvbG9yOiBcIiNFMDlDMERcIixcbiAgICAgICAgd2lkdGg6IDMsXG4gICAgICB9KTtcbiAgICByZXR1cm4gcmVjdDtcbiAgfVxuXG4gIGRyYXdDaXJjbGUoeDEsIHkxLCB4MiwgeTIsIGRyYXc6IENvbnRhaW5lcikge1xuICAgIGNvbnN0IGNlbnRlcnggPSAoeDEgKyB4MikgLyAyO1xuICAgIGNvbnN0IGNlbnRlcnkgPSAoeTEgKyB5MikgLyAyO1xuXG4gICAgbGV0IHIgPSAxMDtcblxuICAgIGxldCBjaXJjbGUgPSBkcmF3XG4gICAgICAuY2lyY2xlKHIpXG4gICAgICAubW92ZShjZW50ZXJ4LCBjZW50ZXJ5KVxuICAgICAgLmZpbGwoXCJ0cmFuc3BhcmVudFwiKVxuICAgICAgLnN0cm9rZSh7XG4gICAgICAgIGNvbG9yOiBcIiNFMDlDMERcIixcbiAgICAgICAgd2lkdGg6IDMsXG4gICAgICB9KTtcbiAgICByZXR1cm4gY2lyY2xlO1xuICB9XG5cbiAgLyoqXG4gICAqIOa3u+WKoENBRee9l+ebmFxuICAgKiBAcGFyYW0gdmlld2VyXG4gICAqL1xuICBhZGRDb21wYXNzKHZpZXdlcjogVmlld2VyKSB7XG4gICAgTG9uZ2FuLkxvbmdhbkNvcmUuSlNfT3Blbl9TZWdtZW50X0J5X0tleSh2aWV3ZXIuc2NlbmVLZXkpO1xuICAgIHtcbiAgICAgIC8v5re75Yqg572X55uYXG4gICAgICBsZXQgY29tcGFzc0tleSA9IExvbmdhbi5Mb25nYW5Db3JlLkpTX09wZW5fU2VnbWVudChcIkNvbXBhc3NcIik7XG4gICAgICB7XG4gICAgICAgIExvbmdhbi5Mb25nYW5Db3JlLkpTX1NldF9SZW5kZXJpbmdfT3B0aW9ucyhcbiAgICAgICAgICBcImRlcHRoIHJhbmdlPSgwLjAsIDAuMSksc3luYyB1cGRhdGU9b25cIlxuICAgICAgICApO1xuICAgICAgICBMb25nYW4uTG9uZ2FuQ29yZS5KU19TZXRfVmlzaWJpbGl0eShcImJvcmRlcnM9b25cIik7XG4gICAgICAgIExvbmdhbi5Mb25nYW5Db3JlLkpTX1NldF9Db2xvcihcImVkZ2VzPShyPTAuNjgsZz0wLjY4LGI9MC42OClcIik7XG4gICAgICAgIExvbmdhbi5Mb25nYW5Db3JlLkpTX1NldF9IZXVyaXN0aWNfT3B0aW9ucyhcImV4Y2x1ZGUgYm91bmRpbmc9b25cIik7XG5cbiAgICAgICAgLy8gTG9uZ2FuQ29yZS5KU19TZXRfQ2FtZXJhKFxuICAgICAgICAvLyAgIFsxMCwgMTAsIDEwXSxcbiAgICAgICAgLy8gICBbMCwgMCwgMF0sXG4gICAgICAgIC8vICAgWzAsIDEsIDBdLFxuICAgICAgICAvLyAgIDE2LjUsXG4gICAgICAgIC8vICAgMTYuNSxcbiAgICAgICAgLy8gICBcIm9ydGhvZ3JhcGhpY1wiXG4gICAgICAgIC8vICk7XG5cbiAgICAgICAgTG9uZ2FuLkxvbmdhbkNvcmUuSlNfU2V0X0NhbWVyYShcbiAgICAgICAgICBbMTAsIDEwLCAxMF0sXG4gICAgICAgICAgWzAsIDAsIDBdLFxuICAgICAgICAgIFswLCAxLCAwXSxcbiAgICAgICAgICA0MCxcbiAgICAgICAgICA0MCxcbiAgICAgICAgICBcIm9ydGhvZ3JhcGhpY1wiXG4gICAgICAgICk7XG5cbiAgICAgICAgTG9uZ2FuLkxvbmdhbkNvcmUuSlNfU2V0X01vZGVsbGluZ01hdHJpeChbXG4gICAgICAgICAgMSwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMSxcbiAgICAgICAgXSk7XG4gICAgICAgIExvbmdhbi5Mb25nYW5Db3JlLkpTX1NldF9WaWV3cG9ydCgtMC4wNSwgMCwgMC4yLCAwLjIsIFwid2luZG93XCIpO1xuICAgICAgfVxuICAgICAgTG9uZ2FuLkxvbmdhbkNvcmUuSlNfQ2xvc2VfU2VnbWVudCgpO1xuXG4gICAgICB0aGlzLmFkZExpbmVDb21wYXNzKGNvbXBhc3NLZXkpO1xuICAgICAgLy8gc2VnbWVudC5zZWxlY3RhYmlsaXR5LnNldEZhY2UoU2VsZWN0YWJpbGl0eVR5cGUuT2ZmKTtcblxuICAgICAgdGhpcy5yb2xsKHZpZXdlcik7XG5cbiAgICAgIC8v5re75Yqg572X55uY5peL6L2s5LqL5Lu2LlxuICAgICAgdmlld2VyLnNjZW5lQ2FtZXJhQ2hhbmdlZC5hZGQodGhpcy5yb2xsQ29tcGFzcyk7XG4gICAgfVxuICAgIExvbmdhbi5Mb25nYW5Db3JlLkpTX0Nsb3NlX1NlZ21lbnQoKTtcbiAgfVxuXG4gIGFkZExpbmVDb21wYXNzKGNvbXBhc3NLZXk6IG51bWJlcikge1xuICAgIGxldCBvcmlnaW4gPSBbMCwgMCwgMF07XG4gICAgbGV0IGxlbiA9IDEwO1xuXG4gICAgbGV0IHNjb25MZW4gPSAwLjIgKiBsZW47XG4gICAgbGV0IHNjb25SYWQgPSAwLjIgKiBsZW47XG5cbiAgICBsZXQgc2VnbWVudCA9IG5ldyBMb25nYW4uU2VnbWVudChjb21wYXNzS2V5KTtcbiAgICBzZWdtZW50LnNlbGVjdGFiaWxpdHkuc2V0RmFjZShMb25nYW4uU2VsZWN0YWJpbGl0eVR5cGUuT2ZmKTtcbiAgICBzZWdtZW50LnNlbGVjdGFiaWxpdHkuc2V0TGluZShMb25nYW4uU2VsZWN0YWJpbGl0eVR5cGUuT2ZmKTtcbiAgICBsZXQgeEF4aXMgPSBzZWdtZW50LnN1YnNlZ21lbnQoXCJ4QXhpc1wiKTtcbiAgICB4QXhpcy5pbnNlcnRMaW5lKG9yaWdpbiwgW2xlbiwgMCwgMF0pO1xuICAgIHhBeGlzLmNvbG9yLnNldExpbmUoWzAsIDAsIDI1NSwgMV0pO1xuICAgIHhBeGlzLmNvbG9yLnNldEZhY2UoWzAsIDAsIDI1NSwgMV0pO1xuXG4gICAgeEF4aXMuaW5zZXJ0UGFyYW1ldHJpY0dlb21ldHJ5KFwic2NvblwiLCBbXG4gICAgICAuLi5bbGVuLCAwLCAwXSxcbiAgICAgIC4uLlstMSwgMCwgMF0sXG4gICAgICBzY29uTGVuLFxuICAgICAgc2NvblJhZCxcbiAgICBdKTtcblxuICAgIGxldCB5QXhpcyA9IHNlZ21lbnQuc3Vic2VnbWVudChcInlBeGlzXCIpO1xuICAgIHlBeGlzLmluc2VydExpbmUob3JpZ2luLCBbMCwgbGVuLCAwXSk7XG4gICAgeUF4aXMuY29sb3Iuc2V0TGluZShbMCwgMjU1LCAwLCAxXSk7XG4gICAgeUF4aXMuY29sb3Iuc2V0RmFjZShbMCwgMjU1LCAwLCAxXSk7XG5cbiAgICB0aGlzLnNjZW5lQ2FtZXJhQ2hhbmdlZC5hZGQoKCkgPT4ge1xuICAgICAgbGV0IGNhbVBvcyA9IG5ldyBGbG9hdDY0QXJyYXkoc2VnbWVudC5jYW1lcmEucG9zaXRpb24pO1xuICAgICAgTG9uZ2FuLkRWZWN0b3Iubm9ybWFsaXplVmVjdG9yKGNhbVBvcyk7XG4gICAgICBsZXQgY2FtVXAgPSBuZXcgRmxvYXQ2NEFycmF5KHNlZ21lbnQuY2FtZXJhLnVwKTtcbiAgICAgIExvbmdhbi5EVmVjdG9yLm5vcm1hbGl6ZShjYW1VcCk7XG5cbiAgICAgIGxldCB4YSA9IExvbmdhbi5EVmVjdG9yLmNyb3NzKGNhbVVwLCBjYW1Qb3MpO1xuICAgICAgTG9uZ2FuLkRWZWN0b3Iubm9ybWFsaXplKHhhKTtcbiAgICAgIGxldCB5YSA9IExvbmdhbi5EVmVjdG9yLmNyb3NzKGNhbVBvcywgeGEpO1xuICAgICAgTG9uZ2FuLkRWZWN0b3Iubm9ybWFsaXplKHlhKTtcblxuICAgICAgbGV0IHlBeGlzQ2hhclNlZyA9IHlBeGlzLnN1YnNlZ21lbnQoXCJjaGFyXCIpO1xuICAgICAgeUF4aXNDaGFyU2VnLmNsZWFyQWxsKCk7XG4gICAgICB5QXhpc0NoYXJTZWcuaW5zZXJ0VmVjdG9yVGV4dChcIllcIiwgWzAsIGxlbiArIDEsIDBdLCB4YSwgeWEsIDgpO1xuICAgICAgeUF4aXNDaGFyU2VnLnJlbmRlcmluZ09wdGlvbnMuY3VsbEJhY2tGYWNlID0gZmFsc2U7IC8v5Y+M6Z2i57uY5Yi2XG5cbiAgICAgIGxldCB4QXhpc0NoYXJTZWcgPSB4QXhpcy5zdWJzZWdtZW50KFwiY2hhclwiKTtcbiAgICAgIHhBeGlzQ2hhclNlZy5jbGVhckFsbCgpO1xuICAgICAgeEF4aXNDaGFyU2VnLmluc2VydFZlY3RvclRleHQoXCJYXCIsIFtsZW4gKyAxLCAwLCAwXSwgeGEsIHlhLCA4KTtcbiAgICAgIHhBeGlzQ2hhclNlZy5yZW5kZXJpbmdPcHRpb25zLmN1bGxCYWNrRmFjZSA9IGZhbHNlOyAvL+WPjOmdoue7mOWItlxuXG4gICAgICBsZXQgekF4aXNDaGFyU2VnID0gekF4aXMuc3Vic2VnbWVudChcImNoYXJcIik7XG4gICAgICB6QXhpc0NoYXJTZWcuY2xlYXJBbGwoKTtcbiAgICAgIHpBeGlzQ2hhclNlZy5pbnNlcnRWZWN0b3JUZXh0KFwiWlwiLCBbMCwgMCwgbGVuICsgMV0sIHhhLCB5YSwgOCk7XG4gICAgICB6QXhpc0NoYXJTZWcucmVuZGVyaW5nT3B0aW9ucy5jdWxsQmFja0ZhY2UgPSBmYWxzZTsgLy/lj4zpnaLnu5jliLZcbiAgICB9KTtcblxuICAgIHlBeGlzLmluc2VydFBhcmFtZXRyaWNHZW9tZXRyeShcInNjb25cIiwgW1xuICAgICAgLi4uWzAsIGxlbiwgMF0sXG4gICAgICAuLi5bMCwgLTEsIDBdLFxuICAgICAgc2NvbkxlbixcbiAgICAgIHNjb25SYWQsXG4gICAgXSk7XG5cbiAgICBsZXQgekF4aXMgPSBzZWdtZW50LnN1YnNlZ21lbnQoXCJ6QXhpc1wiKTtcbiAgICB6QXhpcy5pbnNlcnRMaW5lKG9yaWdpbiwgWzAsIDAsIGxlbl0pO1xuICAgIHpBeGlzLmNvbG9yLnNldExpbmUoWzI1NSwgMCwgMCwgMV0pO1xuICAgIHpBeGlzLmNvbG9yLnNldEZhY2UoWzI1NSwgMCwgMCwgMV0pO1xuXG4gICAgekF4aXMuaW5zZXJ0UGFyYW1ldHJpY0dlb21ldHJ5KFwic2NvblwiLCBbXG4gICAgICAuLi5bMCwgMCwgbGVuXSxcbiAgICAgIC4uLlswLCAwLCAtMV0sXG4gICAgICBzY29uTGVuLFxuICAgICAgc2NvblJhZCxcbiAgICBdKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdFZpZXdlck9wdGlvbnMoKSB7XG4gICAgdGhpcy5uYW1lID0gXCJtYWluXCI7XG4gICAgdGhpcy5iYWNrZ3JvdW5kQ29sb3IgPSBbMCwgMCwgMCwgMF07XG4gICAgdGhpcy5zY2VuZVNlZ21lbnQucmVuZGVyaW5nT3B0aW9uc1xuICAgICAgLnNldERlcHRoUmFuZ2UoMC4xLCAxKVxuICAgICAgLnNldEN1bGxpbmdNYXhpbXVtRXh0ZW50KDUpO1xuXG4gICAgdGhpcy5zY2VuZVNlZ21lbnQuY2FtZXJhLnByb2plY3Rpb24gPSBMb25nYW4uUHJvamVjdGlvblR5cGUuT3J0aG9ncmFwaGljO1xuICAgIHRoaXMudXBkYXRlVHlwZSA9IExvbmdhbi5Mb25nYW5Db3JlLlVwZGF0ZVR5cGUuU3luY2hyb25pemF0aW9uO1xuICAgIHRoaXMuZHluYW1pY01lbW9yeSA9IExvbmdhbi5EeW5hbWljTWVtb3J5VHlwZS5DbGllbnQ7XG4gICAgdGhpcy5nZW9EYXRhSXNDb21wcmVzc2lvbiA9IHRydWU7XG5cbiAgICAvL+mAieaLqeWZqOeahOeBteaVj+W6plxuICAgIExvbmdhbi5Mb25nYW5Db3JlLkpTX09wZW5fU2VnbWVudF9CeV9LZXkodGhpcy52aWV3S2V5KTtcbiAgICB7XG4gICAgICAvLyBMb25nYW5Db3JlLkpTX1NldF9Ecml2ZXJfT3B0aW9ucyhcInNlbGVjdGlvbiB0b2xlcmFuY2U9MC41XCIpO1xuICAgICAgTG9uZ2FuLkxvbmdhbkNvcmUuSlNfU2V0X0RyaXZlcl9PcHRpb25zKFwic2VsZWN0aW9uIHRvbGVyYW5jZT0yXCIpO1xuICAgIH1cbiAgICBMb25nYW4uTG9uZ2FuQ29yZS5KU19DbG9zZV9TZWdtZW50KCk7XG4gIH1cblxuICBwcml2YXRlIGFkZEV2ZW50KCkge1xuICAgIC8vIHRoaXMucHJvY2Vzcy5oaXN0b3J5TWFuYWdlci5yZWNvcmRlZFN0YXRlQ291bnQgPSAzMFxuICAgIHRoaXMub25XaW5kb3dLZXlEb3duLmFkZCgoc2VuZGVyLCBldmVudCkgPT4ge1xuICAgICAgbGV0IGV2OiBhbnkgPSBldmVudC51aUV2ZW50O1xuICAgICAgbGV0IGtleSA9IGV2LmtleTtcblxuICAgICAgaWYgKGV2LmN0cmxLZXkgPT0gdHJ1ZSAmJiBldi5rZXlDb2RlID09IDkwKSB7XG4gICAgICAgIC8vQ3RybCtaXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwidGhpcy5fY3VycmVudFN0YXRlSW5kZXhcIiwgdGhpcy5wcm9jZXNzLmhpc3RvcnlNYW5hZ2VyLl9jdXJyZW50U3RhdGVJbmRleClcblxuICAgICAgICBpZiAodGhpcy5wcm9jZXNzLmhpc3RvcnlNYW5hZ2VyLmNhblJvbGxCYWNrKSB7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzLmhpc3RvcnlNYW5hZ2VyLnJvbGxCYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJ0aGlzLl9jdXJyZW50U3RhdGVJbmRleFwiLCB0aGlzLnByb2Nlc3MuaGlzdG9yeU1hbmFnZXIuX2N1cnJlbnRTdGF0ZUluZGV4KVxuXG4gICAgICAgIGNvbnNvbGUubG9nKFwicm9sbEJhY2tcIiwgdGhpcy5wcm9jZXNzLmhpc3RvcnlNYW5hZ2VyKTtcbiAgICAgIH0gZWxzZSBpZiAoZXYuY3RybEtleSA9PSB0cnVlICYmIGV2LmtleUNvZGUgPT0gODkpIHtcbiAgICAgICAgLy9DdHJsK1lcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJ0aGlzLl9jdXJyZW50U3RhdGVJbmRleFwiLCB0aGlzLnByb2Nlc3MuaGlzdG9yeU1hbmFnZXIuX2N1cnJlbnRTdGF0ZUluZGV4KVxuXG4gICAgICAgIGlmICh0aGlzLnByb2Nlc3MuaGlzdG9yeU1hbmFnZXIuY2FuUm9sbEZvcndhcmQpIHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3MuaGlzdG9yeU1hbmFnZXIucm9sbEZvcndhcmQoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcInRoaXMuX2N1cnJlbnRTdGF0ZUluZGV4XCIsIHRoaXMucHJvY2Vzcy5oaXN0b3J5TWFuYWdlci5fY3VycmVudFN0YXRlSW5kZXgpXG5cbiAgICAgICAgY29uc29sZS5sb2coXCJyb2xsRm9yd2FyZFwiLCB0aGlzLnByb2Nlc3MuaGlzdG9yeU1hbmFnZXIpO1xuICAgICAgfSBlbHNlIGlmIChldi5rZXlDb2RlID09PSA5KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwidGFiXCIpO1xuICAgICAgICBsZXQgY2FtZXJhID0gdGhpcy5vcGVyYXRvck1hbmFnZXIuZmluZChcIkNhbWVyYU1vdXNlXCIpO1xuICAgICAgICBpZiAoY2FtZXJhIGluc3RhbmNlb2YgQ2FtZXJhTW91c2UpIHtcbiAgICAgICAgICBjYW1lcmEubEJ1dHRvblNhdGUgPSBMb25nYW4uTEJ1dHRvblN0YXRlLnRyYW5zbGF0aW9uO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGV2LmtleUNvZGUgPT09IDE2KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwic2hpZnRcIik7XG4gICAgICAgIGxldCBjYW1lcmEgPSB0aGlzLm9wZXJhdG9yTWFuYWdlci5maW5kKFwiQ2FtZXJhTW91c2VcIik7XG4gICAgICAgIGlmIChjYW1lcmEgaW5zdGFuY2VvZiBDYW1lcmFNb3VzZSkge1xuICAgICAgICAgIGNhbWVyYS5sQnV0dG9uU2F0ZSA9IExvbmdhbi5MQnV0dG9uU3RhdGUucm90YXRpb247XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZXYuY3RybEtleSA9PSB0cnVlICYmIGtleSA9PT0gXCJjXCIpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJjb3B5XCIpO1xuICAgICAgICAvLyB0aGlzLmNvcHlDb21wb25lbnRzKCk7XG4gICAgICB9IGVsc2UgaWYgKGV2LmN0cmxLZXkgPT0gdHJ1ZSAmJiBrZXkgPT09IFwidlwiKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwicGFzdGVcIik7XG4gICAgICAgIC8vIHRoaXMucGFzdGVDb21wb25lbnRzKCk7XG4gICAgICB9IGVsc2UgaWYoZXYua2V5Q29kZSA9PT0gMjcpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJlc2NcIik7XG4gICAgICAgIGxldCBjYW1lcmEgPSB0aGlzLm9wZXJhdG9yTWFuYWdlci5maW5kKFwiQ2FtZXJhTW91c2VcIik7XG4gICAgICAgIGlmIChjYW1lcmEgaW5zdGFuY2VvZiBDYW1lcmFNb3VzZSkge1xuICAgICAgICAgIGxldCBpZCA9IGNhbWVyYS5jb250aW51b3VzUm90YXRlQW5pbUlkO1xuICAgICAgICAgIHRoaXMucHJvY2Vzcy5hbmltYXRpb25NYW5hZ2VyLnN0b3BBbmltZShpZCk7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzLmFuaW1hdGlvbk1hbmFnZXIucmVtb3ZlQW5pbWUoaWQpO1xuICAgICAgICAgIGNhbWVyYS5jb250aW51b3VzUm90YXRlQW5pbUlkID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5vbldpbmRvd0tleVVwLmFkZCgoc2VuZGVyLCBldmVudCkgPT4ge1xuICAgICAgbGV0IGV2OiBhbnkgPSBldmVudC51aUV2ZW50O1xuICAgICAgaWYgKGV2LmtleUNvZGUgPT09IDkpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJ0YWJVcFwiKTtcbiAgICAgICAgbGV0IGNhbWVyYSA9IHRoaXMub3BlcmF0b3JNYW5hZ2VyLmZpbmQoXCJDYW1lcmFNb3VzZVwiKTtcbiAgICAgICAgaWYgKGNhbWVyYSBpbnN0YW5jZW9mIENhbWVyYU1vdXNlKSB7XG4gICAgICAgICAgY2FtZXJhLmxCdXR0b25TYXRlID0gTG9uZ2FuLkxCdXR0b25TdGF0ZS5zZWxlY3Q7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZXYua2V5Q29kZSA9PT0gMTYpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJzaGlmdFVwXCIpO1xuICAgICAgICBsZXQgY2FtZXJhID0gdGhpcy5vcGVyYXRvck1hbmFnZXIuZmluZChcIkNhbWVyYU1vdXNlXCIpO1xuICAgICAgICBpZiAoY2FtZXJhIGluc3RhbmNlb2YgQ2FtZXJhTW91c2UpIHtcbiAgICAgICAgICBjYW1lcmEubEJ1dHRvblNhdGUgPSBMb25nYW4uTEJ1dHRvblN0YXRlLnNlbGVjdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGNvcHlDb21wb25lbnRzKCkge1xuICAgIGxldCBjYWVPYmplY3RTZWxlY3RvciA9IHRoaXMub3BlcmF0b3JNYW5hZ2VyLmZpbmQoXG4gICAgICBcIkNBRU9iamVjdFNlbGVjdG9yXCJcbiAgICApIGFzIENBRU9iamVjdFNlbGVjdG9yO1xuXG4gICAgaWYgKGNhZU9iamVjdFNlbGVjdG9yKSB7XG4gICAgICAvLyBjb3B5XG4gICAgICBsZXQgc2VsZWN0ZWRPYmpzID0gY2FlT2JqZWN0U2VsZWN0b3Iuc2VsZWN0ZWRSZW5kZXJPYmplY3RzO1xuICAgICAgdGhpcy5jb3B5ZWRPYmplY3RzLmNsZWFyKCk7XG5cblxuICAgICAgaWYoc2VsZWN0ZWRPYmpzLmNvdW50KCkgPiAwKSB7XG4gICAgICAgIGlmKHRoaXMuY29tbW9uSW50ZXJmYWNlTWFuYWdlci5jb3B5ZWRFeHRlcm5hbEV2ZW50KSB7XG4gICAgICAgICAgdGhpcy5jb21tb25JbnRlcmZhY2VNYW5hZ2VyLmNvcHllZEV4dGVybmFsRXZlbnQoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZyhcImNvcHkgc3VjY2Vzc1wiKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWxlY3RlZE9ianMuY291bnQoKTsgaSsrKSB7XG4gICAgICAgICAgdGhpcy5jb3B5ZWRPYmplY3RzLmFkZChzZWxlY3RlZE9ianMuaXRlbXNbaV0gYXMgRGVzaWduQmFzZU9iamVjdCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiY29weSBmYWlsXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNvcHllZE9iamVjdHM7XG4gIH1cblxuICBwcml2YXRlIHBhc3RlQ29tcG9uZW50cygpIHtcbiAgICBsZXQgY2FlT2JqZWN0U2VsZWN0b3IgPSB0aGlzLm9wZXJhdG9yTWFuYWdlci5maW5kKFxuICAgICAgXCJDQUVPYmplY3RTZWxlY3RvclwiXG4gICAgKSBhcyBDQUVPYmplY3RTZWxlY3RvcjtcbiAgICBpZiAoY2FlT2JqZWN0U2VsZWN0b3IpIHtcbiAgICAgIGxldCBuZXdTdGF0ZXMgPSBuZXcgQXJyYXk8RGVzaWduQmFzZU9iamVjdD4oKTtcblxuICAgICAgbGV0IHNlbGVjdGVkQ29tcG9uZW50cyA9IHRoaXMuY29weWVkT2JqZWN0cztcbiAgICAgIGlmIChzZWxlY3RlZENvbXBvbmVudHMuY291bnQoKSA+IDApIHtcbiAgICAgICAgLy8g6K6h566X5pyA6Z2g6L+R5LiW55WM5Z2Q5qCH5Y6f54K555qE5p6E5Lu2LlxuICAgICAgICBsZXQgZGF0YU9iaiA9IHRoaXMuY29tcHV0ZUNsb3Nlc3RKb2ludChzZWxlY3RlZENvbXBvbmVudHMpO1xuXG4gICAgICAgIGxldCB0YXJnZXRQb3NpdGlvbiA9IHRoaXMuZ2V0VGFyZ2V0UG9zaXRpb24oKTtcbiAgICAgICAgaWYgKCF0YXJnZXRQb3NpdGlvbikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgY2xvc2V0UG9zaXRpb24gPSBkYXRhT2JqLmNsb3NldFBvc2l0aW9uO1xuICAgICAgICBsZXQgY2xvbmVKb2ludHMgPSBkYXRhT2JqLmNsb25lSm9pbnRzO1xuICAgICAgICBsZXQgY2xvbmVNZW1iZXJzID0gZGF0YU9iai5jbG9uZU1lbWJlcnM7XG4gICAgICAgIGxldCBjbG9uZVBsYXRlcyA9IGRhdGFPYmouY2xvbmVQbGF0ZXM7XG5cbiAgICAgICAgbGV0IGpvaW50TmFtZU1hcE5ld0pvaW50OiB7IFtpZDogc3RyaW5nXTogSm9pbnRPYmplY3QgfSA9IHt9O1xuXG4gICAgICAgIGxldCB2ZWN0b3IgPSBMb25nYW4uUG9pbnQuc3VidHJhY3QodGFyZ2V0UG9zaXRpb24sIGNsb3NldFBvc2l0aW9uKTtcblxuICAgICAgICAvLyBwYXN0ZSBKb2ludHNcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjbG9uZUpvaW50cy5jb3VudCgpOyBpKyspIHtcbiAgICAgICAgICAvL1xuICAgICAgICAgIGxldCBjbG9uZUpvaW50ID0gY2xvbmVKb2ludHMuaXRlbXNbaV07XG4gICAgICAgICAgbGV0IG5ld0pvaW50ID0gdGhpcy5wcm9jZXNzLmNsb25lTWFuYWdlci5jbG9uZU9iamVjdChcbiAgICAgICAgICAgIGNsb25lSm9pbnRcbiAgICAgICAgICApIGFzIEpvaW50T2JqZWN0O1xuICAgICAgICAgIC8vIOiuvue9rueKtuaAgVxuICAgICAgICAgIG5ld0pvaW50LmJ1c2luZXNzU3RhdGUgPSBCdXNpbmVzc1N0YXRlLkNyZWF0aW5nO1xuICAgICAgICAgIC8vIOmHjeWRveWQjVxuICAgICAgICAgIG5ld0pvaW50Lm5hbWUgPVxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzLmNhZVJlbmRlck9iamVjdFRyZWVNYW5hZ2VyLm5hbWVBc2NlbmRpbmdPcmRlcihcbiAgICAgICAgICAgICAgbmV3Sm9pbnQubmFtZSxcbiAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgKVswXTtcbiAgICAgICAgICAvLyDmm7TmlrDkvY3nva4uXG4gICAgICAgICAgbmV3Sm9pbnQueE9uTWV0ZXIgKz0gdmVjdG9yWzBdO1xuICAgICAgICAgIG5ld0pvaW50LnlPbk1ldGVyICs9IHZlY3RvclsxXTtcbiAgICAgICAgICBuZXdKb2ludC56T25NZXRlciArPSB2ZWN0b3JbMl07XG5cbiAgICAgICAgICB0aGlzLnByb2Nlc3MuYWRkUmVuZGVyT2JqZWN0KFxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzLmNhZVJlbmRlck9iamVjdFRyZWVNYW5hZ2VyLmpvaW50Tm9kZSxcbiAgICAgICAgICAgIG5ld0pvaW50XG4gICAgICAgICAgKTtcbiAgICAgICAgICBuZXdKb2ludC5zZXROZWVkVXBkYXRlKCk7XG4gICAgICAgICAgbmV3U3RhdGVzLnB1c2gobmV3Sm9pbnQpO1xuXG4gICAgICAgICAgam9pbnROYW1lTWFwTmV3Sm9pbnRbY2xvbmVKb2ludC5uYW1lXSA9IG5ld0pvaW50O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcGFzdGUgbWVtYmVyc1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNsb25lTWVtYmVycy5jb3VudCgpOyBpKyspIHtcbiAgICAgICAgICBsZXQgY2xvbmVNZW1iZXIgPSBjbG9uZU1lbWJlcnMuaXRlbXNbaV07XG4gICAgICAgICAgbGV0IG5lV01lbWJlciA9IHRoaXMucHJvY2Vzcy5jbG9uZU1hbmFnZXIuY2xvbmVPYmplY3QoXG4gICAgICAgICAgICBjbG9uZU1lbWJlclxuICAgICAgICAgICkgYXMgTWVtYmVyT2JqZWN0O1xuICAgICAgICAgIG5lV01lbWJlci5idXNpbmVzc1N0YXRlID0gQnVzaW5lc3NTdGF0ZS5DcmVhdGluZztcbiAgICAgICAgICBuZVdNZW1iZXIubmFtZSA9XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3MuY2FlUmVuZGVyT2JqZWN0VHJlZU1hbmFnZXIubmFtZUFzY2VuZGluZ09yZGVyKFxuICAgICAgICAgICAgICBuZVdNZW1iZXIubmFtZSxcbiAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzLm5hbWVNYXBNZW1iZXIsXG4gICAgICAgICAgICApWzBdO1xuXG4gICAgICAgICAgbGV0IG5ld1N0YXJ0ID0gam9pbnROYW1lTWFwTmV3Sm9pbnRbbmVXTWVtYmVyLnN0YXJ0Lm5hbWVdO1xuICAgICAgICAgIGlmIChuZXdTdGFydCkge1xuICAgICAgICAgICAgbmVXTWVtYmVyLnN0YXJ0ID0gbmV3U3RhcnQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IG5ld0VuZCA9IGpvaW50TmFtZU1hcE5ld0pvaW50W25lV01lbWJlci5lbmQubmFtZV07XG4gICAgICAgICAgaWYgKG5ld0VuZCkge1xuICAgICAgICAgICAgbmVXTWVtYmVyLmVuZCA9IG5ld0VuZDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLnByb2Nlc3MuYWRkUmVuZGVyT2JqZWN0KFxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzLmNhZVJlbmRlck9iamVjdFRyZWVNYW5hZ2VyLm1lbWJlck5vZGUsXG4gICAgICAgICAgICBuZVdNZW1iZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIG5lV01lbWJlci5zZXROZWVkVXBkYXRlKCk7XG5cbiAgICAgICAgICBuZXdTdGF0ZXMucHVzaChuZVdNZW1iZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcGFzdGUgcGx0ZXNcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjbG9uZVBsYXRlcy5jb3VudCgpOyBpKyspIHtcbiAgICAgICAgICAvL1xuICAgICAgICAgIGxldCBjbG9uZVBsYXRlID0gY2xvbmVQbGF0ZXMuaXRlbXNbaV07XG4gICAgICAgICAgbGV0IG5ld1BsYXRlID0gdGhpcy5wcm9jZXNzLmNsb25lTWFuYWdlci5jbG9uZU9iamVjdChcbiAgICAgICAgICAgIGNsb25lUGxhdGVcbiAgICAgICAgICApIGFzIFBsYXRlT2JqZWN0O1xuICAgICAgICAgIG5ld1BsYXRlLmJ1c2luZXNzU3RhdGUgPSBCdXNpbmVzc1N0YXRlLkNyZWF0aW5nO1xuICAgICAgICAgIG5ld1BsYXRlLm5hbWUgPVxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzLmNhZVJlbmRlck9iamVjdFRyZWVNYW5hZ2VyLm5hbWVBc2NlbmRpbmdPcmRlcihcbiAgICAgICAgICAgICAgbmV3UGxhdGUubmFtZSxcbiAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzLm5hbWVNYXBQbGF0ZVxuICAgICAgICAgICAgKVswXTtcblxuICAgICAgICAgIGxldCBuZXdKb2ludHMgPSBuZXcgQXJyYXk8Sm9pbnRPYmplY3Q+KCk7XG4gICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBuZXdQbGF0ZS5qb2ludHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICBsZXQgbmV3Sm9pbnQgPSBqb2ludE5hbWVNYXBOZXdKb2ludFtuZXdQbGF0ZS5qb2ludHNbal0ubmFtZV07XG4gICAgICAgICAgICBpZiAobmV3Sm9pbnQpIHtcbiAgICAgICAgICAgICAgbmV3Sm9pbnRzLnB1c2gobmV3Sm9pbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBuZXdQbGF0ZS5qb2ludHMgPSBuZXdKb2ludHM7XG5cbiAgICAgICAgICB0aGlzLnByb2Nlc3MuYWRkUmVuZGVyT2JqZWN0KFxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzLmNhZVJlbmRlck9iamVjdFRyZWVNYW5hZ2VyLnBsYXRlTm9kZSxcbiAgICAgICAgICAgIG5ld1BsYXRlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBuZXdQbGF0ZS5zZXROZWVkVXBkYXRlKCk7XG5cbiAgICAgICAgICBuZXdTdGF0ZXMucHVzaChuZXdQbGF0ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFkZFN0YXRlKG51bGwsIG5ld1N0YXRlcywgKHN0YXRlSXRlbSkgPT4ge1xuICAgICAgICAgIGlmIChzdGF0ZUl0ZW0ubmV3T2JqID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyDmkqTplIBcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmV3U3RhdGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIG5ld1N0YXRlc1tpXS50ZW1wRGVsZXRlKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyDph43lgZpcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmV3U3RhdGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIG5ld1N0YXRlc1tpXS50ZW1wQ3JlYXRlKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnVwZGF0ZURpc3BsYXkoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5zZWxlY3Rpb25NYW5hZ2VyLmNsZWFyQWxsU2VsZWN0aW9uQW5kSGlnaGxpZ2h0KCk7XG4gICAgICAgIGNhZU9iamVjdFNlbGVjdG9yLnNlbGVjdGVkUmVuZGVyT2JqZWN0cy5jbGVhcigpO1xuXG4gICAgICAgIHRoaXMudXBkYXRlRGlzcGxheSgpO1xuICAgICAgICB0aGlzLnZpZXdJbnRlcmZhY2VNYW5hZ2VyLnJlc2V0VmlldygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGFyZ2V0UG9zaXRpb24oKSB7XG4gICAgbGV0IGNhZU9iamVjdFNlbGVjdG9yID0gdGhpcy5vcGVyYXRvck1hbmFnZXIuZmluZChcbiAgICAgIFwiQ0FFT2JqZWN0U2VsZWN0b3JcIlxuICAgICkgYXMgQ0FFT2JqZWN0U2VsZWN0b3I7XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnNlbGVjdGlvbkludGVyZmFjZU1hbmFnZXIuc2VsZWN0b3JGaWx0ZXIgPT09IFNlbGVjdG9yRmlsaXRlci5Kb2ludCB8fFxuICAgICAgdGhpcy5zZWxlY3Rpb25JbnRlcmZhY2VNYW5hZ2VyLnNlbGVjdG9yRmlsdGVyID09PSBTZWxlY3RvckZpbGl0ZXIuQWxsXG4gICAgKSB7XG4gICAgICAvLyDmm7TmlrDpnaLmnb/nmoTpgInkuK3ngrnliJfooaguXG4gICAgICBsZXQgb2JqZWN0cyA9IGNhZU9iamVjdFNlbGVjdG9yLnNlbGVjdGVkUmVuZGVyT2JqZWN0cztcbiAgICAgIGlmIChvYmplY3RzLmNvdW50KCkgPiAwKSB7XG4gICAgICAgIGxldCBvYmogPSBvYmplY3RzLml0ZW1zWzBdIGFzIEpvaW50T2JqZWN0O1xuICAgICAgICBpZiAob2JqKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkob2JqLnBvc2l0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29tcHV0ZUNsb3Nlc3RKb2ludChjb21wb25lbnRMaXN0OiBMb25nYW4uTGlzdDxEZXNpZ25CYXNlT2JqZWN0Pikge1xuICAgIC8vXG4gICAgbGV0IGNsb25lUGxhdGVzID0gbmV3IExvbmdhbi5MaXN0PFBsYXRlT2JqZWN0PigpO1xuICAgIGxldCBjbG9uZU1lbWJlcnMgPSBuZXcgTG9uZ2FuLkxpc3Q8TWVtYmVyT2JqZWN0PigpO1xuICAgIGxldCBjbG9uZUpvaW50cyA9IG5ldyBMb25nYW4uTGlzdDxKb2ludE9iamVjdD4oKTtcblxuICAgIGxldCBjbG9zZXRQb2ludDogRmxvYXQzMkFycmF5ID0gbnVsbDtcbiAgICBsZXQgbWluRGlzID0gOTk5OTk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb21wb25lbnRMaXN0LmNvdW50KCk7IGkrKykge1xuICAgICAgbGV0IGNvbXBvbmVudCA9IGNvbXBvbmVudExpc3QuaXRlbXNbaV07XG4gICAgICBzd2l0Y2ggKGNvbXBvbmVudC50eXBlTmFtZSkge1xuICAgICAgICBjYXNlIFwiSm9pbnRPYmplY3RcIjpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgSm9pbnRPYmplY3QpIHtcbiAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgaWYgKGNsb25lSm9pbnRzLmluZGV4T2YoY29tcG9uZW50KSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBjbG9uZUpvaW50cy5hZGQoY29tcG9uZW50KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBsZXQgdGVtcFBvaW50ID0gbmV3IEZsb2F0MzJBcnJheShjb21wb25lbnQucG9zaXRpb24pO1xuICAgICAgICAgICAgICBsZXQgZGlzID0gTG9uZ2FuLlZlY3Rvci5tb2R1bGUodGVtcFBvaW50KTtcbiAgICAgICAgICAgICAgaWYgKGRpcyA8IG1pbkRpcykge1xuICAgICAgICAgICAgICAgIG1pbkRpcyA9IGRpcztcbiAgICAgICAgICAgICAgICBjbG9zZXRQb2ludCA9IHRlbXBQb2ludDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIk1lbWJlck9iamVjdFwiOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmIChjb21wb25lbnQgaW5zdGFuY2VvZiBNZW1iZXJPYmplY3QpIHtcbiAgICAgICAgICAgICAgY2xvbmVNZW1iZXJzLmFkZChjb21wb25lbnQpO1xuICAgICAgICAgICAgICBpZiAoY2xvbmVKb2ludHMuaW5kZXhPZihjb21wb25lbnQuc3RhcnQpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIGNsb25lSm9pbnRzLmFkZChjb21wb25lbnQuc3RhcnQpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGNsb25lSm9pbnRzLmluZGV4T2YoY29tcG9uZW50LmVuZCkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgY2xvbmVKb2ludHMuYWRkKGNvbXBvbmVudC5lbmQpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgbGV0IHAwID0gbmV3IEZsb2F0MzJBcnJheShjb21wb25lbnQuc3RhcnQucG9zaXRpb24pO1xuICAgICAgICAgICAgICBsZXQgcDEgPSBuZXcgRmxvYXQzMkFycmF5KGNvbXBvbmVudC5lbmQucG9zaXRpb24pO1xuXG4gICAgICAgICAgICAgIGxldCBkaXMwID0gTG9uZ2FuLlZlY3Rvci5tb2R1bGUocDApO1xuICAgICAgICAgICAgICBsZXQgZGlzMSA9IExvbmdhbi5WZWN0b3IubW9kdWxlKHAxKTtcblxuICAgICAgICAgICAgICBpZiAoZGlzMCA8IG1pbkRpcykge1xuICAgICAgICAgICAgICAgIG1pbkRpcyA9IGRpczA7XG4gICAgICAgICAgICAgICAgY2xvc2V0UG9pbnQgPSBwMDtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChkaXMxIDwgbWluRGlzKSB7XG4gICAgICAgICAgICAgICAgbWluRGlzID0gZGlzMTtcbiAgICAgICAgICAgICAgICBjbG9zZXRQb2ludCA9IHAxO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiUGxhdGVPYmplY3RcIjpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgUGxhdGVPYmplY3QpIHtcbiAgICAgICAgICAgICAgY2xvbmVQbGF0ZXMuYWRkKGNvbXBvbmVudCk7XG4gICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29tcG9uZW50LmpvaW50cy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIGxldCBqb2ludCA9IGNvbXBvbmVudC5qb2ludHNbal07XG4gICAgICAgICAgICAgICAgaWYgKGNsb25lSm9pbnRzLmluZGV4T2Yoam9pbnQpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgY2xvbmVKb2ludHMuYWRkKGpvaW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IHBvaW50ID0gbmV3IEZsb2F0MzJBcnJheShqb2ludC5wb3NpdGlvbik7XG4gICAgICAgICAgICAgICAgbGV0IGRpcyA9IExvbmdhbi5WZWN0b3IubW9kdWxlKHBvaW50KTtcblxuICAgICAgICAgICAgICAgIGlmIChkaXMgPCBtaW5EaXMpIHtcbiAgICAgICAgICAgICAgICAgIG1pbkRpcyA9IGRpcztcbiAgICAgICAgICAgICAgICAgIGNsb3NldFBvaW50ID0gcG9pbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjbG9zZXRQb3NpdGlvbjogY2xvc2V0UG9pbnQsXG4gICAgICBjbG9uZUpvaW50cyxcbiAgICAgIGNsb25lTWVtYmVycyxcbiAgICAgIGNsb25lUGxhdGVzLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc2V0Vmlld2VyT3B0aW9ucyhvcHRpb25zLCBjb25maWcpIHtcbiAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKGNvbmZpZyk7XG4gICAga2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc1trZXldID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHRoaXMuc2V0Vmlld2VyT3B0aW9ucyhvcHRpb25zW2tleV0sIGNvbmZpZ1trZXldKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwib3B0aW9uc0NoYW5nZVwiLCBjb25maWcsIGtleSwgY29uZmlnW2tleV0pXG4gICAgICAgIC8vIFZ1ZS5zZXQob3B0aW9ucywga2V5LCBjb25maWdba2V5XSlcbiAgICAgICAgb3B0aW9uc1trZXldID0gY29uZmlnW2tleV07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYWRkU3RhdGUoXG4gICAgb2xkT2JqLFxuICAgIG5ld09iaixcbiAgICBhZnRlclJvbGw6IChcbiAgICAgIHN0YXRlSXRlbTogTG9uZ2FuLlN0YXRlSXRlbSxcbiAgICAgIHByb2Nlc3M6IExvbmdhbi5Qcm9jZXNzLFxuICAgICAgcm9sbFR5cGU6IExvbmdhbi5Sb2xsVHlwZVxuICAgICkgPT4gdm9pZCxcbiAgICBkZWx0YU5hbWU/OiBzdHJpbmdcbiAgKSB7XG4gICAgbGV0IHN0YXRlSXRlbSA9IG5ldyBMb25nYW4uU3RhdGVJdGVtKG9sZE9iaiwgbmV3T2JqKTtcbiAgICBzdGF0ZUl0ZW0uYWZ0ZXJSb2xsLmFkZCgocHJvY2VzczogTG9uZ2FuLlByb2Nlc3MsIHJvbGxUeXBlOiBMb25nYW4uUm9sbFR5cGUpID0+IHtcbiAgICAgIGFmdGVyUm9sbChzdGF0ZUl0ZW0sIHByb2Nlc3MsIHJvbGxUeXBlKTtcbiAgICB9KTtcblxuICAgIGxldCBzdGF0ZVBhY2sgPSBuZXcgTG9uZ2FuLlN0YXRlUGFjaygpO1xuICAgIHN0YXRlUGFjay5hZGQoc3RhdGVJdGVtKTtcbiAgICBsZXQgZGVsdGFTdGF0ZSA9IG5ldyBMb25nYW4uRGVsdGFTdGF0ZSgpO1xuICAgIGRlbHRhU3RhdGUuYWRkKHN0YXRlUGFjayk7XG4gICAgaWYgKGRlbHRhTmFtZSkge1xuICAgICAgZGVsdGFTdGF0ZS5uYW1lID0gZGVsdGFOYW1lO1xuICAgIH1cblxuICAgIHRoaXMucHJvY2Vzcy5oaXN0b3J5TWFuYWdlci5hZGRTdGF0ZShkZWx0YVN0YXRlKTtcbiAgfVxuXG4gIHB1YmxpYyBpbml0TWFuYWdlcnMoKTogdm9pZCB7XG4gICAgc3VwZXIuaW5pdE1hbmFnZXJzKCk7XG5cbiAgICB0aGlzLnN0cnVjdHVyZVRyZWVNYW5hZ2VyID0gbmV3IFN0cnVjdHVyZVRyZWVNYW5hZ2VyKHRoaXMpO1xuICAgIC8vIHRoaXMucGFuZWxNYW5hZ2VyID0gbmV3IFBhbmVsTWFuYWdlcih0aGlzKTtcbiAgICB0aGlzLmF5c25UYXNrTWFuYWdlciA9IG5ldyBMb25nYW4uQXlzblRhc2tNYW5hZ2VyKHRoaXMpO1xuICAgIHRoaXMudmlld0ludGVyZmFjZU1hbmFnZXIgPSBuZXcgVmlld0ludGVyZmFjZU1hbmFnZXIodGhpcyk7XG4gICAgdGhpcy5zZWxlY3Rpb25JbnRlcmZhY2VNYW5hZ2VyID0gbmV3IFNlbGVjdGlvbkludGVyZmFjZU1hbmFnZXIodGhpcyk7XG4gICAgdGhpcy5jb21tb25JbnRlcmZhY2VNYW5hZ2VyID0gbmV3IENvbW1vbkludGVyZmFjZU1hbmFnZXIodGhpcyk7XG4gICAgdGhpcy5wb3N0SW50ZXJmYWNlTWFuYWdlciA9IG5ldyBQb3N0SW50ZXJmYWNlTWFuYWdlcih0aGlzKTtcbiAgICB0aGlzLmNvbW1hbmRJbnRlcmZhY2VNYW5hZ2VyID0gbmV3IENvbW1hbmRJbnRlcmZhY2VNYW5hZ2VyKHRoaXMpO1xuICAgIHRoaXMuZGF0UmVhZGVyTWFuYWdlciA9IG5ldyBEYXRSZWFkZXJNYW5hZ2VyKHRoaXMpO1xuICAgIHRoaXMuZGF0V3JpdGVyTWFuYWdlciA9IG5ldyBEYXRXcml0ZXJNYW5hZ2VyKHRoaXMpO1xuICAgIHRoaXMuY2FlUGFuZWxNYW5hZ2VyID0gbmV3IFBhbmVsTWFuYWdlcih0aGlzKTtcblxuICAgIGxldCBtYXRlcmlhbCA9IG5ldyBNYXRlcmlhbCh0aGlzLCBcImhpZ2hsaWdodFwiLCAyKTtcbiAgICBtYXRlcmlhbC5zZXRDb2xvcigyNTUsIDAsIDAsIDEpO1xuICAgIG1hdGVyaWFsLnNldEZsb2F0KCk7XG4gICAgdGhpcy5oaWdobGlnaHRNYW5hZ2VyLnN0eWxlTWFuYWdlckJhc2UgPSBuZXcgU3R5bGVNYW5hZ2VyQmFzZShtYXRlcmlhbCk7XG4gIH1cblxuICAvKipcbiAgICog5Yqg6L295pyN5Yqh5Zmo5qih5Z6LXG4gICAqIEBwYXJhbSBtb2RlbElkcyDmnI3liqHlmahJROagh+ivhlxuICAgKiBAcGFyYW0gaXNSZXBsYWNlIOaYr+WQpuabv+aNouaXp+aooeWei1xuICAgKiBAcGFyYW0gaXNTaW5nbGVNb2RlbCDmmK/lkKblj6rliqDovb3kuIDkuKrmqKHlnotcbiAgICogQHJldHVybnMg6L+U5Zue5qih5Z6L5YiX6KGoXG4gICAqL1xuICBwdWJsaWMgbG9hZE1vZGVsKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgaXNSZXBsYWNlOiBib29sZWFuID0gZmFsc2VcbiAgKTogUHJvbWlzZTxMb25nYW4uUmVuZGVyT2JqZWN0PiB7XG4gICAgY29uc29sZS5sb2coXCJ0aGlzLm9wdGlvbnMubW9kZWxTZXJ2aWNlOlwiLCB0aGlzLm9wdGlvbnMubW9kZWxTZXJ2aWNlKTtcbiAgICAvL+azqOWGjOeJueacieeahFJlbmRlck9iamVjdFxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBheGlvcyhgL2NhZS1zZXJ2aWNlL3Byb2plY3RzLyR7aWR9L2RhdGFgKS50aGVuKChtb2RlbERhdGE6IGFueSkgPT4ge1xuICAgICAgICBpZiAobW9kZWxEYXRhICE9IG51bGwpIHtcblxuICAgICAgICAgIGlmKGlzUmVwbGFjZSkge1xuICAgICAgICAgICAgdGhpcy5kaXNwb3NlQWxsUmVuZGVyT2JqZWN0cygpO1xuICAgICAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxldCByZW5kZXJPYmplY3QgPSB0aGlzLnByb2Nlc3MucGVyc2lzdGVuY2VNYW5hZ2VyLm9wZW4obW9kZWxEYXRhKTtcbiAgICAgICAgICB0aGlzLnByb2Nlc3MucmVuZGVyT2JqZWN0ID0gcmVuZGVyT2JqZWN0O1xuICAgICAgICAgIHRoaXMucmVuZGVyT2JqZWN0ID0gcmVuZGVyT2JqZWN0O1xuICAgICAgICAgIHJlbmRlck9iamVjdC52aXNpYmxlID0gdHJ1ZTtcblxuICAgICAgICAgIHRoaXMucHJvY2Vzcy5wZXJzaXN0ZW5jZU1hbmFnZXIubG9hZE1vZGVscygpO1xuICAgICAgICAgIC8vIHRoaXMucHJvY2Vzcy5wZXJzaXN0ZW5jZU1hbmFnZXIubW9kZWxMb2FkZWQuYWRkKHRoaXMub25Nb2RlbExvYWRlZCk7XG4gICAgICAgICAgdGhpcy5vbk1vZGVsTG9hZGVkKCk7XG4gICAgICAgICAgcmVzb2x2ZShyZW5kZXJPYmplY3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb25Nb2RlbExvYWRlZCgpIHtcbiAgICB0aGlzLnByb2Nlc3MucmVuZGVyT2JqZWN0LnNlZ21lbnQuY29tcHV0ZUJvdW5kaW5nQm94KCk7XG4gICAgdGhpcy5zZXRWaWV3TW9kZShMb25nYW4uVmlld01vZGUuSXNvLCB0cnVlKTtcbiAgICAvLyB0aGlzLm9wdGlvbnMuaXNTaG93TG9hZGluZyA9IGZhbHNlO1xuICAgIC8vIGNvbnNvbGUubG9nKFwibG9hZGluZyBmYWxzZVwiKTtcbiAgfVxuXG4gIGRpc3Bvc2VBbGxSZW5kZXJPYmplY3RzKCkge1xuICAgIGxldCBwcm9jZXNzID0gdGhpcy5wcm9jZXNzO1xuICAgIGxldCByb3MgPSBwcm9jZXNzLnJlbmRlck9iamVjdHM7XG4gICAgcm9zLmZvckVhY2goKGtleSwgdmFsdWUpPT57XG4gICAgICB2YWx1ZS5kZWxldGUoKTtcbiAgICB9KVxuXG4gICAgY29uc29sZS5sb2coXCJjbGVhciBhbGwgcmVuZGVyT2JqZWN0cy0tLWNvdW50OlwiLCB0aGlzLnByb2Nlc3MucmVuZGVyT2JqZWN0cy5jb3VudCgpKTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBbUNBO0FBQUE7QUFxREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUZBO0FBTUE7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUdBO0FBQ0E7QUFFQTtBQUNBOztBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUVBO0FBRUE7QUFFQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUVBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQVdBO0FBU0E7QUFHQTs7QUFFQTtBQUVBO0FBR0E7QUFHQTs7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBTUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUVBOztBQUVBO0FBQ0E7QUFFQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFJQTtBQUNBOztBQUlBO0FBQ0E7QUFJQTtBQUNBOztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFJQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7OztBQUlBO0FBQ0E7QUFFQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUdBO0FBRUE7QUFDQTtBQUlBO0FBRUE7QUFNQTtBQUNBO0FBQ0E7QUFFQTtBQUlBO0FBQ0E7QUFFQTs7QUFJQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBT0E7QUFDQTtBQUNBOztBQUdBO0FBQ0E7QUFDQTs7QUFHQTtBQUlBO0FBRUE7O0FBSUE7QUFFQTtBQUNBO0FBR0E7QUFDQTtBQU9BO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBRUE7QUFJQTtBQUVBOztBQUdBO0FBQ0E7QUFFQTtBQUNBOztBQUVBO0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBOzs7QUFHQTtBQUVBO0FBQ0E7QUFJQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUdBO0FBQ0E7O0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7O0FBR0E7QUFDQTtBQUNBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7Ozs7O0FBS0E7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTs7QUFFQTtBQUNBO0FBRUE7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVNBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUdBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFueUJBOztBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./packages/caeDesign/src/gsDevFx/viewer.ts\n");
|
|
5568
|
+
eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;function _typeof(o) { \"@babel/helpers - typeof\"; return _typeof = \"function\" == typeof Symbol && \"symbol\" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && \"function\" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? \"symbol\" : typeof o; }, _typeof(o); }\n!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__, exports, __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\"), __webpack_require__(/*! ../store */ \"./packages/caeDesign/src/store/index.ts\"), __webpack_require__(/*! gs-bim-air */ \"./node_modules/gs-bim-air/lib/BimAir.umd.min.js\"), __webpack_require__(/*! ./commands/commandSelect */ \"./packages/caeDesign/src/gsDevFx/commands/commandSelect.ts\"), __webpack_require__(/*! ./managers/panelManager */ \"./packages/caeDesign/src/gsDevFx/managers/panelManager.ts\"), __webpack_require__(/*! ./managers/structureTreeManager */ \"./packages/caeDesign/src/gsDevFx/managers/structureTreeManager.ts\"), __webpack_require__(/*! ../axiosRequestExport */ \"./packages/caeDesign/src/axiosRequestExport.ts\"), __webpack_require__(/*! ./process */ \"./packages/caeDesign/src/gsDevFx/process.ts\"), __webpack_require__(/*! gs-ceec-design */ \"./packages/ceecDesign/src/index.ts\"), __webpack_require__(/*! ./managers/interfaceManagers/viewInterfaceManager */ \"./packages/caeDesign/src/gsDevFx/managers/interfaceManagers/viewInterfaceManager.ts\"), __webpack_require__(/*! ./managers/interfaceManagers/selectionInterfaceManager */ \"./packages/caeDesign/src/gsDevFx/managers/interfaceManagers/selectionInterfaceManager.ts\"), __webpack_require__(/*! ./managers/interfaceManagers/commonInterfaceManager */ \"./packages/caeDesign/src/gsDevFx/managers/interfaceManagers/commonInterfaceManager.ts\"), __webpack_require__(/*! gs-bim-air */ \"./node_modules/gs-bim-air/lib/BimAir.umd.min.js\"), __webpack_require__(/*! gs-bim-air */ \"./node_modules/gs-bim-air/lib/BimAir.umd.min.js\"), __webpack_require__(/*! ./managers/interfaceManagers/commandInterfaceManager */ \"./packages/caeDesign/src/gsDevFx/managers/interfaceManagers/commandInterfaceManager.ts\"), __webpack_require__(/*! ./managers/datReaderManager */ \"./packages/caeDesign/src/gsDevFx/managers/datReaderManager.ts\"), __webpack_require__(/*! ./managers/datWriterManager */ \"./packages/caeDesign/src/gsDevFx/managers/datWriterManager.ts\"), __webpack_require__(/*! gs-ceec-design */ \"./packages/ceecDesign/src/index.ts\"), __webpack_require__(/*! ./objects/caeObjects/plateObject */ \"./packages/caeDesign/src/gsDevFx/objects/caeObjects/plateObject.ts\"), __webpack_require__(/*! ./objects/caeObjects/memberObject */ \"./packages/caeDesign/src/gsDevFx/objects/caeObjects/memberObject.ts\"), __webpack_require__(/*! ./objects/caeObjects/jointObject */ \"./packages/caeDesign/src/gsDevFx/objects/caeObjects/jointObject.ts\"), __webpack_require__(/*! gs-ceec-design */ \"./packages/ceecDesign/src/index.ts\"), __webpack_require__(/*! ./operators/cameraMouse */ \"./packages/caeDesign/src/gsDevFx/operators/cameraMouse.ts\"), __webpack_require__(/*! ./managers/interfaceManagers/postInterfaceManager */ \"./packages/caeDesign/src/gsDevFx/managers/interfaceManagers/postInterfaceManager.ts\")], __WEBPACK_AMD_DEFINE_RESULT__ = (function (require, exports, tslib_1, store_1, gs_bim_air_1, commandSelect_1, panelManager_1, structureTreeManager_1, axiosRequestExport_1, process_1, gs_ceec_design_1, viewInterfaceManager_1, selectionInterfaceManager_1, commonInterfaceManager_1, gs_bim_air_2, gs_bim_air_3, commandInterfaceManager_1, datReaderManager_1, datWriterManager_1, gs_ceec_design_2, plateObject_1, memberObject_1, jointObject_1, gs_ceec_design_3, cameraMouse_1, postInterfaceManager_1) {\n \"use strict\";\n\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n exports.Viewer = void 0;\n store_1 = tslib_1.__importDefault(store_1);\n axiosRequestExport_1 = tslib_1.__importDefault(axiosRequestExport_1);\n var Viewer = function (_super) {\n tslib_1.__extends(Viewer, _super);\n function Viewer(options, process) {\n if (process === void 0) {\n process = null;\n }\n var _this = _super.call(this, options) || this;\n _this.copyedObjects = new gs_bim_air_1.Longan.List();\n _this.initViewerOptions();\n _this.setViewerOptions(options, options);\n _this.addEvent();\n _this.addSvgRect(_this);\n _this.initManagers();\n var commandSelect = new commandSelect_1.CommandSelect();\n _this.process.commandManager.execute(commandSelect);\n store_1.default.commit(\"viewerInstance\", _this);\n window.viewer = _this;\n return _this;\n }\n Viewer.prototype.createProcess = function (isNewProcess) {\n if (isNewProcess) {\n var process = new process_1.Process();\n process.activate();\n process.addViewer(this);\n process.activeViewer = this;\n } else {\n var process = process_1.Process.activeProcess;\n process.activate();\n process.addViewer(this);\n process.activeViewer = this;\n }\n };\n Viewer.prototype.addSvgRect = function (viewer) {\n var svgDraw = gs_ceec_design_2.SvgDraw.getInstance(viewer.container.id);\n var draw = svgDraw.draw;\n var startX = null;\n var startY = null;\n var rect = null;\n var circle = null;\n gs_bim_air_1.Longan.CameraMouse.lButtonDown.add(function (cm, e) {\n startX = e.uiEvent.offsetX;\n startY = e.uiEvent.offsetY;\n });\n var self = this;\n gs_bim_air_1.Longan.CameraMouse.lButtonDownAndMove.add(function (cm, e) {\n var cameraMouse = self.operatorManager.find(\"CameraMouse\");\n if (cameraMouse) {\n if (cameraMouse.lButtonSate === gs_bim_air_1.Longan.LButtonState.scale || cameraMouse.lButtonSate === gs_bim_air_1.Longan.LButtonState.select) {\n var endX = e.uiEvent.offsetX;\n var endY = e.uiEvent.offsetY;\n if (rect) {\n rect.remove();\n rect = null;\n }\n if (startX && startY && endX && endY) {\n rect = self.drawRect(startX, startY, endX, endY, draw);\n }\n if (circle) {\n circle.remove();\n circle = null;\n }\n if (cameraMouse.lButtonSate === gs_bim_air_1.Longan.LButtonState.scale) {\n circle = self.drawCircle(startX, startY, endX, endY, draw);\n }\n }\n }\n });\n gs_bim_air_1.Longan.CameraMouse.lButtonUp.add(function (cm, e) {\n if (rect) {\n rect.remove();\n rect = null;\n }\n if (circle) {\n circle.remove();\n circle = null;\n }\n });\n };\n Viewer.prototype.drawRect = function (x1, y1, x2, y2, draw) {\n var X1 = Math.min(x1, x2);\n var Y1 = Math.min(y1, y2);\n var X2 = Math.max(x1, x2);\n var Y2 = Math.max(y1, y2);\n var rect = draw.rect(X2 - X1, Y2 - Y1).move(X1, Y1).fill(\"transparent\").stroke({\n color: \"#E09C0D\",\n width: 3\n });\n return rect;\n };\n Viewer.prototype.drawCircle = function (x1, y1, x2, y2, draw) {\n var centerx = (x1 + x2) / 2;\n var centery = (y1 + y2) / 2;\n var r = 10;\n var circle = draw.circle(r).move(centerx, centery).fill(\"transparent\").stroke({\n color: \"#E09C0D\",\n width: 3\n });\n return circle;\n };\n Viewer.prototype.addCompass = function (viewer) {\n gs_bim_air_1.Longan.LonganCore.JS_Open_Segment_By_Key(viewer.sceneKey);\n {\n var compassKey = gs_bim_air_1.Longan.LonganCore.JS_Open_Segment(\"Compass\");\n {\n gs_bim_air_1.Longan.LonganCore.JS_Set_Rendering_Options(\"depth range=(0.0, 0.1),sync update=on\");\n gs_bim_air_1.Longan.LonganCore.JS_Set_Visibility(\"borders=on\");\n gs_bim_air_1.Longan.LonganCore.JS_Set_Color(\"edges=(r=0.68,g=0.68,b=0.68)\");\n gs_bim_air_1.Longan.LonganCore.JS_Set_Heuristic_Options(\"exclude bounding=on\");\n gs_bim_air_1.Longan.LonganCore.JS_Set_Camera([10, 10, 10], [0, 0, 0], [0, 1, 0], 40, 40, \"orthographic\");\n gs_bim_air_1.Longan.LonganCore.JS_Set_ModellingMatrix([1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);\n gs_bim_air_1.Longan.LonganCore.JS_Set_Viewport(-0.05, 0, 0.2, 0.2, \"window\");\n }\n gs_bim_air_1.Longan.LonganCore.JS_Close_Segment();\n this.addLineCompass(compassKey);\n this.roll(viewer);\n viewer.sceneCameraChanged.add(this.rollCompass);\n }\n gs_bim_air_1.Longan.LonganCore.JS_Close_Segment();\n };\n Viewer.prototype.addLineCompass = function (compassKey) {\n var origin = [0, 0, 0];\n var len = 10;\n var sconLen = 0.2 * len;\n var sconRad = 0.2 * len;\n var segment = new gs_bim_air_1.Longan.Segment(compassKey);\n segment.selectability.setFace(gs_bim_air_1.Longan.SelectabilityType.Off);\n segment.selectability.setLine(gs_bim_air_1.Longan.SelectabilityType.Off);\n var xAxis = segment.subsegment(\"xAxis\");\n xAxis.insertLine(origin, [len, 0, 0]);\n xAxis.color.setLine([0, 0, 255, 1]);\n xAxis.color.setFace([0, 0, 255, 1]);\n xAxis.insertParametricGeometry(\"scon\", tslib_1.__spreadArray(tslib_1.__spreadArray(tslib_1.__spreadArray([], [len, 0, 0], false), [-1, 0, 0], false), [sconLen, sconRad], false));\n var yAxis = segment.subsegment(\"yAxis\");\n yAxis.insertLine(origin, [0, len, 0]);\n yAxis.color.setLine([0, 255, 0, 1]);\n yAxis.color.setFace([0, 255, 0, 1]);\n this.sceneCameraChanged.add(function () {\n var camPos = new Float64Array(segment.camera.position);\n gs_bim_air_1.Longan.DVector.normalizeVector(camPos);\n var camUp = new Float64Array(segment.camera.up);\n gs_bim_air_1.Longan.DVector.normalize(camUp);\n var xa = gs_bim_air_1.Longan.DVector.cross(camUp, camPos);\n gs_bim_air_1.Longan.DVector.normalize(xa);\n var ya = gs_bim_air_1.Longan.DVector.cross(camPos, xa);\n gs_bim_air_1.Longan.DVector.normalize(ya);\n var yAxisCharSeg = yAxis.subsegment(\"char\");\n yAxisCharSeg.clearAll();\n yAxisCharSeg.insertVectorText(\"Y\", [0, len + 1, 0], xa, ya, 8);\n yAxisCharSeg.renderingOptions.cullBackFace = false;\n var xAxisCharSeg = xAxis.subsegment(\"char\");\n xAxisCharSeg.clearAll();\n xAxisCharSeg.insertVectorText(\"X\", [len + 1, 0, 0], xa, ya, 8);\n xAxisCharSeg.renderingOptions.cullBackFace = false;\n var zAxisCharSeg = zAxis.subsegment(\"char\");\n zAxisCharSeg.clearAll();\n zAxisCharSeg.insertVectorText(\"Z\", [0, 0, len + 1], xa, ya, 8);\n zAxisCharSeg.renderingOptions.cullBackFace = false;\n });\n yAxis.insertParametricGeometry(\"scon\", tslib_1.__spreadArray(tslib_1.__spreadArray(tslib_1.__spreadArray([], [0, len, 0], false), [0, -1, 0], false), [sconLen, sconRad], false));\n var zAxis = segment.subsegment(\"zAxis\");\n zAxis.insertLine(origin, [0, 0, len]);\n zAxis.color.setLine([255, 0, 0, 1]);\n zAxis.color.setFace([255, 0, 0, 1]);\n zAxis.insertParametricGeometry(\"scon\", tslib_1.__spreadArray(tslib_1.__spreadArray(tslib_1.__spreadArray([], [0, 0, len], false), [0, 0, -1], false), [sconLen, sconRad], false));\n };\n Viewer.prototype.initViewerOptions = function () {\n this.name = \"main\";\n this.backgroundColor = [0, 0, 0, 0];\n this.sceneSegment.renderingOptions.setDepthRange(0.1, 1).setCullingMaximumExtent(5);\n this.sceneSegment.camera.projection = gs_bim_air_1.Longan.ProjectionType.Orthographic;\n this.updateType = gs_bim_air_1.Longan.LonganCore.UpdateType.Synchronization;\n this.dynamicMemory = gs_bim_air_1.Longan.DynamicMemoryType.Client;\n this.geoDataIsCompression = true;\n gs_bim_air_1.Longan.LonganCore.JS_Open_Segment_By_Key(this.viewKey);\n {\n gs_bim_air_1.Longan.LonganCore.JS_Set_Driver_Options(\"selection tolerance=2\");\n }\n gs_bim_air_1.Longan.LonganCore.JS_Close_Segment();\n };\n Viewer.prototype.addEvent = function () {\n var _this = this;\n this.onWindowKeyDown.add(function (sender, event) {\n var ev = event.uiEvent;\n var key = ev.key;\n if (ev.ctrlKey == true && ev.keyCode == 90) {\n if (_this.process.historyManager.canRollBack) {\n _this.process.historyManager.rollBack();\n }\n console.log(\"rollBack\", _this.process.historyManager);\n } else if (ev.ctrlKey == true && ev.keyCode == 89) {\n if (_this.process.historyManager.canRollForward) {\n _this.process.historyManager.rollForward();\n }\n console.log(\"rollForward\", _this.process.historyManager);\n } else if (ev.keyCode === 9) {\n console.log(\"tab\");\n var camera = _this.operatorManager.find(\"CameraMouse\");\n if (camera instanceof cameraMouse_1.CameraMouse) {\n camera.lButtonSate = gs_bim_air_1.Longan.LButtonState.translation;\n }\n } else if (ev.keyCode === 16) {\n console.log(\"shift\");\n var camera = _this.operatorManager.find(\"CameraMouse\");\n if (camera instanceof cameraMouse_1.CameraMouse) {\n camera.lButtonSate = gs_bim_air_1.Longan.LButtonState.rotation;\n }\n } else if (ev.ctrlKey == true && key === \"c\") {} else if (ev.ctrlKey == true && key === \"v\") {} else if (ev.keyCode === 27) {\n console.log(\"esc\");\n var camera = _this.operatorManager.find(\"CameraMouse\");\n if (camera instanceof cameraMouse_1.CameraMouse) {\n var id = camera.continuousRotateAnimId;\n _this.process.animationManager.stopAnime(id);\n _this.process.animationManager.removeAnime(id);\n camera.continuousRotateAnimId = null;\n }\n }\n });\n this.onWindowKeyUp.add(function (sender, event) {\n var ev = event.uiEvent;\n if (ev.keyCode === 9) {\n console.log(\"tabUp\");\n var camera = _this.operatorManager.find(\"CameraMouse\");\n if (camera instanceof cameraMouse_1.CameraMouse) {\n camera.lButtonSate = gs_bim_air_1.Longan.LButtonState.select;\n }\n } else if (ev.keyCode === 16) {\n console.log(\"shiftUp\");\n var camera = _this.operatorManager.find(\"CameraMouse\");\n if (camera instanceof cameraMouse_1.CameraMouse) {\n camera.lButtonSate = gs_bim_air_1.Longan.LButtonState.select;\n }\n }\n });\n };\n Viewer.prototype.copyComponents = function () {\n var caeObjectSelector = this.operatorManager.find(\"CAEObjectSelector\");\n if (caeObjectSelector) {\n var selectedObjs = caeObjectSelector.selectedRenderObjects;\n this.copyedObjects.clear();\n if (selectedObjs.count() > 0) {\n if (this.commonInterfaceManager.copyedExternalEvent) {\n this.commonInterfaceManager.copyedExternalEvent();\n }\n console.log(\"copy success\");\n for (var i = 0; i < selectedObjs.count(); i++) {\n this.copyedObjects.add(selectedObjs.items[i]);\n }\n } else {\n console.log(\"copy fail\");\n }\n }\n return this.copyedObjects;\n };\n Viewer.prototype.pasteComponents = function () {\n var _this = this;\n var caeObjectSelector = this.operatorManager.find(\"CAEObjectSelector\");\n if (caeObjectSelector) {\n var newStates_1 = new Array();\n var selectedComponents = this.copyedObjects;\n if (selectedComponents.count() > 0) {\n var dataObj = this.computeClosestJoint(selectedComponents);\n var targetPosition = this.getTargetPosition();\n if (!targetPosition) {\n return;\n }\n var closetPosition = dataObj.closetPosition;\n var cloneJoints = dataObj.cloneJoints;\n var cloneMembers = dataObj.cloneMembers;\n var clonePlates = dataObj.clonePlates;\n var jointNameMapNewJoint = {};\n var vector = gs_bim_air_1.Longan.Point.subtract(targetPosition, closetPosition);\n for (var i = 0; i < cloneJoints.count(); i++) {\n var cloneJoint = cloneJoints.items[i];\n var newJoint = this.process.cloneManager.cloneObject(cloneJoint);\n newJoint.businessState = gs_ceec_design_3.BusinessState.Creating;\n newJoint.name = this.process.caeRenderObjectTreeManager.nameAscendingOrder(newJoint.name, 1)[0];\n newJoint.xOnMeter += vector[0];\n newJoint.yOnMeter += vector[1];\n newJoint.zOnMeter += vector[2];\n this.process.addRenderObject(this.process.caeRenderObjectTreeManager.jointNode, newJoint);\n newJoint.setNeedUpdate();\n newStates_1.push(newJoint);\n jointNameMapNewJoint[cloneJoint.name] = newJoint;\n }\n for (var i = 0; i < cloneMembers.count(); i++) {\n var cloneMember = cloneMembers.items[i];\n var neWMember = this.process.cloneManager.cloneObject(cloneMember);\n neWMember.businessState = gs_ceec_design_3.BusinessState.Creating;\n neWMember.name = this.process.caeRenderObjectTreeManager.nameAscendingOrder(neWMember.name, 1, this.process.nameMapMember)[0];\n var newStart = jointNameMapNewJoint[neWMember.start.name];\n if (newStart) {\n neWMember.start = newStart;\n }\n var newEnd = jointNameMapNewJoint[neWMember.end.name];\n if (newEnd) {\n neWMember.end = newEnd;\n }\n this.process.addRenderObject(this.process.caeRenderObjectTreeManager.memberNode, neWMember);\n neWMember.setNeedUpdate();\n newStates_1.push(neWMember);\n }\n for (var i = 0; i < clonePlates.count(); i++) {\n var clonePlate = clonePlates.items[i];\n var newPlate = this.process.cloneManager.cloneObject(clonePlate);\n newPlate.businessState = gs_ceec_design_3.BusinessState.Creating;\n newPlate.name = this.process.caeRenderObjectTreeManager.nameAscendingOrder(newPlate.name, 1, this.process.nameMapPlate)[0];\n var newJoints = new Array();\n for (var j = 0; j < newPlate.joints.length; j++) {\n var newJoint = jointNameMapNewJoint[newPlate.joints[j].name];\n if (newJoint) {\n newJoints.push(newJoint);\n }\n }\n newPlate.joints = newJoints;\n this.process.addRenderObject(this.process.caeRenderObjectTreeManager.plateNode, newPlate);\n newPlate.setNeedUpdate();\n newStates_1.push(newPlate);\n }\n this.addState(null, newStates_1, function (stateItem) {\n if (stateItem.newObj === null) {\n for (var i = 0; i < newStates_1.length; i++) {\n newStates_1[i].tempDelete(_this);\n }\n } else {\n for (var i = 0; i < newStates_1.length; i++) {\n newStates_1[i].tempCreate(_this);\n }\n }\n _this.updateDisplay();\n });\n this.selectionManager.clearAllSelectionAndHighlight();\n caeObjectSelector.selectedRenderObjects.clear();\n this.updateDisplay();\n this.viewInterfaceManager.resetView();\n }\n }\n };\n Viewer.prototype.getTargetPosition = function () {\n var caeObjectSelector = this.operatorManager.find(\"CAEObjectSelector\");\n if (this.selectionInterfaceManager.selectorFilter === selectionInterfaceManager_1.SelectorFiliter.Joint || this.selectionInterfaceManager.selectorFilter === selectionInterfaceManager_1.SelectorFiliter.All) {\n var objects = caeObjectSelector.selectedRenderObjects;\n if (objects.count() > 0) {\n var obj = objects.items[0];\n if (obj) {\n return new Float32Array(obj.position);\n } else {\n return null;\n }\n } else {\n return null;\n }\n } else {\n return null;\n }\n };\n Viewer.prototype.computeClosestJoint = function (componentList) {\n var clonePlates = new gs_bim_air_1.Longan.List();\n var cloneMembers = new gs_bim_air_1.Longan.List();\n var cloneJoints = new gs_bim_air_1.Longan.List();\n var closetPoint = null;\n var minDis = 99999;\n for (var i = 0; i < componentList.count(); i++) {\n var component = componentList.items[i];\n switch (component.typeName) {\n case \"JointObject\":\n {\n if (component instanceof jointObject_1.JointObject) {\n if (cloneJoints.indexOf(component) === -1) {\n cloneJoints.add(component);\n }\n var tempPoint = new Float32Array(component.position);\n var dis = gs_bim_air_1.Longan.Vector.module(tempPoint);\n if (dis < minDis) {\n minDis = dis;\n closetPoint = tempPoint;\n }\n }\n }\n break;\n case \"MemberObject\":\n {\n if (component instanceof memberObject_1.MemberObject) {\n cloneMembers.add(component);\n if (cloneJoints.indexOf(component.start) === -1) {\n cloneJoints.add(component.start);\n }\n if (cloneJoints.indexOf(component.end) === -1) {\n cloneJoints.add(component.end);\n }\n var p0 = new Float32Array(component.start.position);\n var p1 = new Float32Array(component.end.position);\n var dis0 = gs_bim_air_1.Longan.Vector.module(p0);\n var dis1 = gs_bim_air_1.Longan.Vector.module(p1);\n if (dis0 < minDis) {\n minDis = dis0;\n closetPoint = p0;\n }\n if (dis1 < minDis) {\n minDis = dis1;\n closetPoint = p1;\n }\n }\n }\n break;\n case \"PlateObject\":\n {\n if (component instanceof plateObject_1.PlateObject) {\n clonePlates.add(component);\n for (var j = 0; j < component.joints.length; j++) {\n var joint = component.joints[j];\n if (cloneJoints.indexOf(joint) === -1) {\n cloneJoints.add(joint);\n }\n var point = new Float32Array(joint.position);\n var dis = gs_bim_air_1.Longan.Vector.module(point);\n if (dis < minDis) {\n minDis = dis;\n closetPoint = point;\n }\n }\n }\n }\n break;\n }\n }\n return {\n closetPosition: closetPoint,\n cloneJoints: cloneJoints,\n cloneMembers: cloneMembers,\n clonePlates: clonePlates\n };\n };\n Viewer.prototype.setViewerOptions = function (options, config) {\n var _this = this;\n var keys = Object.keys(config);\n keys.forEach(function (key) {\n if (_typeof(options[key]) === \"object\") {\n _this.setViewerOptions(options[key], config[key]);\n } else {\n options[key] = config[key];\n }\n });\n };\n Viewer.prototype.addState = function (oldObj, newObj, afterRoll, deltaName) {\n var stateItem = new gs_bim_air_1.Longan.StateItem(oldObj, newObj);\n stateItem.afterRoll.add(function (process, rollType) {\n afterRoll(stateItem, process, rollType);\n });\n var statePack = new gs_bim_air_1.Longan.StatePack();\n statePack.add(stateItem);\n var deltaState = new gs_bim_air_1.Longan.DeltaState();\n deltaState.add(statePack);\n if (deltaName) {\n deltaState.name = deltaName;\n }\n this.process.historyManager.addState(deltaState);\n };\n Viewer.prototype.initManagers = function () {\n _super.prototype.initManagers.call(this);\n this.structureTreeManager = new structureTreeManager_1.StructureTreeManager(this);\n this.aysnTaskManager = new gs_bim_air_1.Longan.AysnTaskManager(this);\n this.viewInterfaceManager = new viewInterfaceManager_1.ViewInterfaceManager(this);\n this.selectionInterfaceManager = new selectionInterfaceManager_1.SelectionInterfaceManager(this);\n this.commonInterfaceManager = new commonInterfaceManager_1.CommonInterfaceManager(this);\n this.postInterfaceManager = new postInterfaceManager_1.PostInterfaceManager(this);\n this.commandInterfaceManager = new commandInterfaceManager_1.CommandInterfaceManager(this);\n this.datReaderManager = new datReaderManager_1.DatReaderManager(this);\n this.datWriterManager = new datWriterManager_1.DatWriterManager(this);\n this.caePanelManager = new panelManager_1.PanelManager(this);\n var material = new gs_bim_air_2.Material(this, \"highlight\", 2);\n material.setColor(255, 0, 0, 1);\n material.setFloat();\n this.highlightManager.styleManagerBase = new gs_bim_air_3.StyleManagerBase(material);\n };\n Viewer.prototype.loadModel = function (id, isReplace) {\n var _this = this;\n if (isReplace === void 0) {\n isReplace = false;\n }\n console.log(\"this.options.modelService:\", this.options.modelService);\n return new Promise(function (resolve, reject) {\n (0, axiosRequestExport_1.default)(\"/cae-service/projects/\".concat(id, \"/data\")).then(function (modelData) {\n if (modelData === false) {\n reject(\"请求模型文件失败:\" + id);\n }\n if (modelData != null) {\n if (isReplace) {\n _this.disposeAllRenderObjects();\n _this.reset();\n }\n var renderObject = _this.process.persistenceManager.open(modelData);\n _this.process.renderObject = renderObject;\n _this.renderObject = renderObject;\n renderObject.visible = true;\n _this.process.persistenceManager.loadModels();\n _this.onModelLoaded();\n resolve(renderObject);\n }\n return null;\n });\n });\n };\n Viewer.prototype.onModelLoaded = function () {\n this.process.renderObject.segment.computeBoundingBox();\n this.setViewMode(gs_bim_air_1.Longan.ViewMode.Iso, true);\n };\n Viewer.prototype.disposeAllRenderObjects = function () {\n var process = this.process;\n var ros = process.renderObjects;\n ros.forEach(function (key, value) {\n value.delete();\n });\n console.log(\"clear all renderObjects---count:\", this.process.renderObjects.count());\n };\n return Viewer;\n }(gs_ceec_design_1.Viewer);\n exports.Viewer = Viewer;\n}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9wYWNrYWdlcy9jYWVEZXNpZ24vc3JjL2dzRGV2Rngvdmlld2VyLnRzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vW25hbWVdLy4vcGFja2FnZXMvY2FlRGVzaWduL3NyYy9nc0RldkZ4L3ZpZXdlci50cz8wMmM3Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBzdG9yZSBmcm9tIFwiLi4vc3RvcmVcIjtcbmltcG9ydCB7IERlc2lnbkJhc2VPYmplY3QgfSBmcm9tIFwiZ3MtY2VlYy1kZXNpZ25cIjtcbmltcG9ydCB7IExvbmdhbiB9IGZyb20gXCJncy1iaW0tYWlyXCI7XG5pbXBvcnQgeyBDb21tYW5kU2VsZWN0IH0gZnJvbSBcIi4vY29tbWFuZHMvY29tbWFuZFNlbGVjdFwiO1xuaW1wb3J0IHsgUGFuZWxNYW5hZ2VyIH0gZnJvbSBcIi4vbWFuYWdlcnMvcGFuZWxNYW5hZ2VyXCI7XG5pbXBvcnQgeyBTdHJ1Y3R1cmVUcmVlTWFuYWdlciB9IGZyb20gXCIuL21hbmFnZXJzL3N0cnVjdHVyZVRyZWVNYW5hZ2VyXCI7XG5pbXBvcnQgYXhpb3MgZnJvbSBcIi4uL2F4aW9zUmVxdWVzdEV4cG9ydFwiO1xuaW1wb3J0IHsgUHJvY2VzcyB9IGZyb20gXCIuL3Byb2Nlc3NcIjtcbmltcG9ydCB7IFZpZXdlciBhcyBDRUVDVmlld2VyIH0gZnJvbSBcImdzLWNlZWMtZGVzaWduXCI7XG5pbXBvcnQgeyBWaWV3SW50ZXJmYWNlTWFuYWdlciB9IGZyb20gXCIuL21hbmFnZXJzL2ludGVyZmFjZU1hbmFnZXJzL3ZpZXdJbnRlcmZhY2VNYW5hZ2VyXCI7XG5pbXBvcnQge1xuICBTZWxlY3Rpb25JbnRlcmZhY2VNYW5hZ2VyLFxuICBTZWxlY3RvckZpbGl0ZXIsXG59IGZyb20gXCIuL21hbmFnZXJzL2ludGVyZmFjZU1hbmFnZXJzL3NlbGVjdGlvbkludGVyZmFjZU1hbmFnZXJcIjtcbmltcG9ydCB7IENvbW1vbkludGVyZmFjZU1hbmFnZXIgfSBmcm9tIFwiLi9tYW5hZ2Vycy9pbnRlcmZhY2VNYW5hZ2Vycy9jb21tb25JbnRlcmZhY2VNYW5hZ2VyXCI7XG5pbXBvcnQgeyBNYXRlcmlhbCB9IGZyb20gXCJncy1iaW0tYWlyXCI7XG5pbXBvcnQgeyBTdHlsZU1hbmFnZXJCYXNlIH0gZnJvbSBcImdzLWJpbS1haXJcIjtcbmltcG9ydCB7IENvbW1hbmRJbnRlcmZhY2VNYW5hZ2VyIH0gZnJvbSBcIi4vbWFuYWdlcnMvaW50ZXJmYWNlTWFuYWdlcnMvY29tbWFuZEludGVyZmFjZU1hbmFnZXJcIjtcblxuaW1wb3J0IHsgQ0FFT2JqZWN0U2VsZWN0b3IgfSBmcm9tIFwiLi9vcGVyYXRvcnMvY2FlT2JqZWN0U2VsZWN0b3JcIjtcbmltcG9ydCB7IERhdFJlYWRlck1hbmFnZXIgfSBmcm9tIFwiLi9tYW5hZ2Vycy9kYXRSZWFkZXJNYW5hZ2VyXCI7XG5pbXBvcnQgeyBEYXRXcml0ZXJNYW5hZ2VyIH0gZnJvbSBcIi4vbWFuYWdlcnMvZGF0V3JpdGVyTWFuYWdlclwiO1xuaW1wb3J0IHsgU3ZnRHJhdyB9IGZyb20gXCJncy1jZWVjLWRlc2lnblwiO1xuaW1wb3J0IHsgQ29udGFpbmVyIH0gZnJvbSBcIkBzdmdkb3Rqcy9zdmcuanNcIjtcbmltcG9ydCB7IFBsYXRlT2JqZWN0IH0gZnJvbSBcIi4vb2JqZWN0cy9jYWVPYmplY3RzL3BsYXRlT2JqZWN0XCI7XG5pbXBvcnQgeyBNZW1iZXJPYmplY3QgfSBmcm9tIFwiLi9vYmplY3RzL2NhZU9iamVjdHMvbWVtYmVyT2JqZWN0XCI7XG5pbXBvcnQgeyBKb2ludE9iamVjdCB9IGZyb20gXCIuL29iamVjdHMvY2FlT2JqZWN0cy9qb2ludE9iamVjdFwiO1xuaW1wb3J0IHsgQnVzaW5lc3NTdGF0ZSB9IGZyb20gXCJncy1jZWVjLWRlc2lnblwiO1xuaW1wb3J0IHsgQ2FtZXJhTW91c2UgfSBmcm9tIFwiLi9vcGVyYXRvcnMvY2FtZXJhTW91c2VcIjtcbmltcG9ydCB7IFBvc3RJbnRlcmZhY2VNYW5hZ2VyIH0gZnJvbSBcIi4vbWFuYWdlcnMvaW50ZXJmYWNlTWFuYWdlcnMvcG9zdEludGVyZmFjZU1hbmFnZXJcIjtcblxuLyoqXG4gKiDop4blm77nsbvvvIzliqDovb3mqKHlnovnmoTlrrnlmahcbiAqL1xuLy8gZXhwb3J0IGNsYXNzIFZpZXdlciBleHRlbmRzIExvbmdhbi5WaWV3ZXIge1xuZXhwb3J0IGNsYXNzIFZpZXdlciBleHRlbmRzIENFRUNWaWV3ZXIge1xuICAvLyBwcm90ZWN0ZWQgX29wdGlvbnM6IE9wdGlvbnMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRlZmF1bHRPcHRpb25zKSk7XG4gIC8vIC8qKlxuICAvLyAgKiBWaWV3ZXLnmoTphY3nva5cbiAgLy8gICovXG4gIC8vIGdldCBvcHRpb25zKCk6IE9wdGlvbnMge1xuICAvLyAgIHJldHVybiB0aGlzLl9vcHRpb25zO1xuICAvLyB9XG4gIC8qKiDnu5PmnoTmoJHnrqHnkIblmaggKi9cbiAgc3RydWN0dXJlVHJlZU1hbmFnZXI6IFN0cnVjdHVyZVRyZWVNYW5hZ2VyO1xuXG4gIC8qKlxuICAgKiDop4blm77mjqXlj6PnrqHnkIblmahcbiAgICovXG4gIHZpZXdJbnRlcmZhY2VNYW5hZ2VyOiBWaWV3SW50ZXJmYWNlTWFuYWdlcjtcbiAgLyoqXG4gICAqIOmdouadv+euoeeQhuWZqFxuICAgKi9cbiAgY2FlUGFuZWxNYW5hZ2VyOiBQYW5lbE1hbmFnZXI7XG4gIC8qKlxuICAgKiDpgInmi6nmjqXlj6PnrqHnkIblmahcbiAgICovXG4gIHNlbGVjdGlvbkludGVyZmFjZU1hbmFnZXI6IFNlbGVjdGlvbkludGVyZmFjZU1hbmFnZXI7XG4gIC8qKlxuICAgKiDpgJrnlKjmjqXlj6PnrqHnkIblmahcbiAgICovXG4gIGNvbW1vbkludGVyZmFjZU1hbmFnZXI6IENvbW1vbkludGVyZmFjZU1hbmFnZXI7XG4gIC8qKlxuICAgKiDlkb3ku6TmjqXlj6PnrqHnkIblmahcbiAgICovXG4gIGNvbW1hbmRJbnRlcmZhY2VNYW5hZ2VyOiBDb21tYW5kSW50ZXJmYWNlTWFuYWdlcjtcbiAgLyoqXG4gICAqIOWQjuWkhOeQhuaOpeWPo+euoeeQhuWZqFxuICAgKi9cbiAgcG9zdEludGVyZmFjZU1hbmFnZXI6IFBvc3RJbnRlcmZhY2VNYW5hZ2VyO1xuXG4gIC8qKlxuICAgKiBkYXTmlbDmja7op6PmnpDlmahcbiAgICovXG4gIGRhdFJlYWRlck1hbmFnZXI6IERhdFJlYWRlck1hbmFnZXI7XG5cbiAgLyoqXG4gICAqIGRhdOaVsOaNruWvvOWHui5cbiAgICovXG4gIGRhdFdyaXRlck1hbmFnZXI6IERhdFdyaXRlck1hbmFnZXI7XG5cbiAgcHJvY2VzczogUHJvY2VzcztcblxuICAvLyBwcm9jZXNzOiBQcm9jZXNzO1xuXG4gIC8vIOiiq+WkjeWItueahOaehOS7tlxuICBjb3B5ZWRPYmplY3RzID0gbmV3IExvbmdhbi5MaXN0PERlc2lnbkJhc2VPYmplY3Q+KCk7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9ucywgcHJvY2VzcyA9IG51bGwpIHtcbiAgICAvLyBzdXBlcihvcHRpb25zLmVsZW1lbnRJZCk7XG4gICAgc3VwZXIob3B0aW9ucyk7XG5cbiAgICB0aGlzLmluaXRWaWV3ZXJPcHRpb25zKCk7XG4gICAgdGhpcy5zZXRWaWV3ZXJPcHRpb25zKG9wdGlvbnMsIG9wdGlvbnMpO1xuICAgIC8v5re75Yqg5pKk6ZSA5LiO5YmN6L+b5oyJ6ZKu5LqL5Lu2XG4gICAgdGhpcy5hZGRFdmVudCgpO1xuXG4gICAgdGhpcy5hZGRTdmdSZWN0KHRoaXMpO1xuICAgIHRoaXMuaW5pdE1hbmFnZXJzKCk7XG5cbiAgICAvL+aJp+ihjOm7mOiupGNhbWVyYea1j+iniOWRveS7pFxuICAgIGxldCBjb21tYW5kU2VsZWN0ID0gbmV3IENvbW1hbmRTZWxlY3QoKTtcbiAgICB0aGlzLnByb2Nlc3MuY29tbWFuZE1hbmFnZXIuZXhlY3V0ZShjb21tYW5kU2VsZWN0KTtcblxuICAgIHN0b3JlLmNvbW1pdChcInZpZXdlckluc3RhbmNlXCIsIHRoaXMpO1xuICAgICh3aW5kb3cgYXMgYW55KS52aWV3ZXIgPSB0aGlzO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZVByb2Nlc3MoaXNOZXdQcm9jZXNzOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKGlzTmV3UHJvY2Vzcykge1xuICAgICAgbGV0IHByb2Nlc3MgPSBuZXcgUHJvY2VzcygpO1xuICAgICAgcHJvY2Vzcy5hY3RpdmF0ZSgpO1xuICAgICAgcHJvY2Vzcy5hZGRWaWV3ZXIodGhpcyk7XG4gICAgICBwcm9jZXNzLmFjdGl2ZVZpZXdlciA9IHRoaXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBwcm9jZXNzID0gUHJvY2Vzcy5hY3RpdmVQcm9jZXNzO1xuICAgICAgcHJvY2Vzcy5hY3RpdmF0ZSgpO1xuICAgICAgcHJvY2Vzcy5hZGRWaWV3ZXIodGhpcyk7XG4gICAgICBwcm9jZXNzLmFjdGl2ZVZpZXdlciA9IHRoaXM7XG4gICAgfVxuICB9XG5cbiAgYWRkU3ZnUmVjdCh2aWV3ZXI6IFZpZXdlcikge1xuICAgIC8v5Y+z6ZSu5pi+56S655qEc3Zn5Lit5b+D54K5XG4gICAgbGV0IHN2Z0RyYXcgPSBTdmdEcmF3LmdldEluc3RhbmNlKHZpZXdlci5jb250YWluZXIuaWQpO1xuICAgIC8vIGxldCByb3RhdGVQb2ludFNWRyA9IHN2Z0RyYXcuZHJhdy5zdmcocm90YXRlUG9pbnQpLndpZHRoKDM2KS5oZWlnaHQoMzYpLmF0dHIoXCJzdHlsZVwiLCBcInBvaW50ZXItZXZlbnRzOiBhdXRvOyB0cmFuc2Zvcm0tb3JpZ2lu77yacm90YXRlUG9pbnRcIikuaGlkZSgpXG4gICAgbGV0IGRyYXcgPSBzdmdEcmF3LmRyYXcgYXMgQ29udGFpbmVyO1xuXG4gICAgLy8g5re75Yqgc3Zn6YCJ5qGGXG4gICAgbGV0IHN0YXJ0WCA9IG51bGw7XG4gICAgbGV0IHN0YXJ0WSA9IG51bGw7XG4gICAgbGV0IHJlY3QgPSBudWxsO1xuICAgIGxldCBjaXJjbGUgPSBudWxsO1xuXG4gICAgTG9uZ2FuLkNhbWVyYU1vdXNlLmxCdXR0b25Eb3duLmFkZCgoY20sIGUpID0+IHtcbiAgICAgIHN0YXJ0WCA9IChlLnVpRXZlbnQgYXMgTW91c2VFdmVudCkub2Zmc2V0WDtcbiAgICAgIHN0YXJ0WSA9IChlLnVpRXZlbnQgYXMgTW91c2VFdmVudCkub2Zmc2V0WTtcbiAgICB9KTtcblxuICAgIGxldCBzZWxmID0gdGhpcztcbiAgICBMb25nYW4uQ2FtZXJhTW91c2UubEJ1dHRvbkRvd25BbmRNb3ZlLmFkZCgoY20sIGUpID0+IHtcbiAgICAgIGxldCBjYW1lcmFNb3VzZSA9IHNlbGYub3BlcmF0b3JNYW5hZ2VyLmZpbmQoXCJDYW1lcmFNb3VzZVwiKSBhcyBDYW1lcmFNb3VzZTtcblxuICAgICAgaWYgKGNhbWVyYU1vdXNlKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjYW1lcmFNb3VzZS5sQnV0dG9uU2F0ZSA9PT0gTG9uZ2FuLkxCdXR0b25TdGF0ZS5zY2FsZSB8fFxuICAgICAgICAgIGNhbWVyYU1vdXNlLmxCdXR0b25TYXRlID09PSBMb25nYW4uTEJ1dHRvblN0YXRlLnNlbGVjdFxuICAgICAgICApIHtcbiAgICAgICAgICBsZXQgZW5kWCA9IChlLnVpRXZlbnQgYXMgTW91c2VFdmVudCkub2Zmc2V0WDtcbiAgICAgICAgICBsZXQgZW5kWSA9IChlLnVpRXZlbnQgYXMgTW91c2VFdmVudCkub2Zmc2V0WTtcbiAgICAgICAgICBpZiAocmVjdCkge1xuICAgICAgICAgICAgcmVjdC5yZW1vdmUoKTtcbiAgICAgICAgICAgIHJlY3QgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoc3RhcnRYICYmIHN0YXJ0WSAmJiBlbmRYICYmIGVuZFkpIHtcbiAgICAgICAgICAgIHJlY3QgPSBzZWxmLmRyYXdSZWN0KHN0YXJ0WCwgc3RhcnRZLCBlbmRYLCBlbmRZLCBkcmF3KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoY2lyY2xlKSB7XG4gICAgICAgICAgICBjaXJjbGUucmVtb3ZlKCk7XG4gICAgICAgICAgICBjaXJjbGUgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY2FtZXJhTW91c2UubEJ1dHRvblNhdGUgPT09IExvbmdhbi5MQnV0dG9uU3RhdGUuc2NhbGUpIHtcbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICBjaXJjbGUgPSBzZWxmLmRyYXdDaXJjbGUoc3RhcnRYLCBzdGFydFksIGVuZFgsIGVuZFksIGRyYXcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIExvbmdhbi5DYW1lcmFNb3VzZS5sQnV0dG9uVXAuYWRkKChjbSwgZSkgPT4ge1xuICAgICAgaWYgKHJlY3QpIHtcbiAgICAgICAgcmVjdC5yZW1vdmUoKTtcbiAgICAgICAgcmVjdCA9IG51bGw7XG4gICAgICB9XG4gICAgICBpZiAoY2lyY2xlKSB7XG4gICAgICAgIGNpcmNsZS5yZW1vdmUoKTtcbiAgICAgICAgY2lyY2xlID0gbnVsbDtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGRyYXdSZWN0KHgxLCB5MSwgeDIsIHkyLCBkcmF3KSB7XG4gICAgLy8gY29uc29sZS5sb2coXCJ4MSwgeTEsIHgyLCB5MlwiLCB4MSwgeTEsIHgyLCB5MilcbiAgICBjb25zdCBYMSA9IE1hdGgubWluKHgxLCB4Mik7XG4gICAgY29uc3QgWTEgPSBNYXRoLm1pbih5MSwgeTIpO1xuICAgIGNvbnN0IFgyID0gTWF0aC5tYXgoeDEsIHgyKTtcbiAgICBjb25zdCBZMiA9IE1hdGgubWF4KHkxLCB5Mik7XG4gICAgbGV0IHJlY3QgPSBkcmF3XG4gICAgICAucmVjdChYMiAtIFgxLCBZMiAtIFkxKVxuICAgICAgLm1vdmUoWDEsIFkxKVxuICAgICAgLmZpbGwoXCJ0cmFuc3BhcmVudFwiKVxuICAgICAgLnN0cm9rZSh7XG4gICAgICAgIGNvbG9yOiBcIiNFMDlDMERcIixcbiAgICAgICAgd2lkdGg6IDMsXG4gICAgICB9KTtcbiAgICByZXR1cm4gcmVjdDtcbiAgfVxuXG4gIGRyYXdDaXJjbGUoeDEsIHkxLCB4MiwgeTIsIGRyYXc6IENvbnRhaW5lcikge1xuICAgIGNvbnN0IGNlbnRlcnggPSAoeDEgKyB4MikgLyAyO1xuICAgIGNvbnN0IGNlbnRlcnkgPSAoeTEgKyB5MikgLyAyO1xuXG4gICAgbGV0IHIgPSAxMDtcblxuICAgIGxldCBjaXJjbGUgPSBkcmF3XG4gICAgICAuY2lyY2xlKHIpXG4gICAgICAubW92ZShjZW50ZXJ4LCBjZW50ZXJ5KVxuICAgICAgLmZpbGwoXCJ0cmFuc3BhcmVudFwiKVxuICAgICAgLnN0cm9rZSh7XG4gICAgICAgIGNvbG9yOiBcIiNFMDlDMERcIixcbiAgICAgICAgd2lkdGg6IDMsXG4gICAgICB9KTtcbiAgICByZXR1cm4gY2lyY2xlO1xuICB9XG5cbiAgLyoqXG4gICAqIOa3u+WKoENBRee9l+ebmFxuICAgKiBAcGFyYW0gdmlld2VyXG4gICAqL1xuICBhZGRDb21wYXNzKHZpZXdlcjogVmlld2VyKSB7XG4gICAgTG9uZ2FuLkxvbmdhbkNvcmUuSlNfT3Blbl9TZWdtZW50X0J5X0tleSh2aWV3ZXIuc2NlbmVLZXkpO1xuICAgIHtcbiAgICAgIC8v5re75Yqg572X55uYXG4gICAgICBsZXQgY29tcGFzc0tleSA9IExvbmdhbi5Mb25nYW5Db3JlLkpTX09wZW5fU2VnbWVudChcIkNvbXBhc3NcIik7XG4gICAgICB7XG4gICAgICAgIExvbmdhbi5Mb25nYW5Db3JlLkpTX1NldF9SZW5kZXJpbmdfT3B0aW9ucyhcbiAgICAgICAgICBcImRlcHRoIHJhbmdlPSgwLjAsIDAuMSksc3luYyB1cGRhdGU9b25cIlxuICAgICAgICApO1xuICAgICAgICBMb25nYW4uTG9uZ2FuQ29yZS5KU19TZXRfVmlzaWJpbGl0eShcImJvcmRlcnM9b25cIik7XG4gICAgICAgIExvbmdhbi5Mb25nYW5Db3JlLkpTX1NldF9Db2xvcihcImVkZ2VzPShyPTAuNjgsZz0wLjY4LGI9MC42OClcIik7XG4gICAgICAgIExvbmdhbi5Mb25nYW5Db3JlLkpTX1NldF9IZXVyaXN0aWNfT3B0aW9ucyhcImV4Y2x1ZGUgYm91bmRpbmc9b25cIik7XG5cbiAgICAgICAgLy8gTG9uZ2FuQ29yZS5KU19TZXRfQ2FtZXJhKFxuICAgICAgICAvLyAgIFsxMCwgMTAsIDEwXSxcbiAgICAgICAgLy8gICBbMCwgMCwgMF0sXG4gICAgICAgIC8vICAgWzAsIDEsIDBdLFxuICAgICAgICAvLyAgIDE2LjUsXG4gICAgICAgIC8vICAgMTYuNSxcbiAgICAgICAgLy8gICBcIm9ydGhvZ3JhcGhpY1wiXG4gICAgICAgIC8vICk7XG5cbiAgICAgICAgTG9uZ2FuLkxvbmdhbkNvcmUuSlNfU2V0X0NhbWVyYShcbiAgICAgICAgICBbMTAsIDEwLCAxMF0sXG4gICAgICAgICAgWzAsIDAsIDBdLFxuICAgICAgICAgIFswLCAxLCAwXSxcbiAgICAgICAgICA0MCxcbiAgICAgICAgICA0MCxcbiAgICAgICAgICBcIm9ydGhvZ3JhcGhpY1wiXG4gICAgICAgICk7XG5cbiAgICAgICAgTG9uZ2FuLkxvbmdhbkNvcmUuSlNfU2V0X01vZGVsbGluZ01hdHJpeChbXG4gICAgICAgICAgMSwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMSxcbiAgICAgICAgXSk7XG4gICAgICAgIExvbmdhbi5Mb25nYW5Db3JlLkpTX1NldF9WaWV3cG9ydCgtMC4wNSwgMCwgMC4yLCAwLjIsIFwid2luZG93XCIpO1xuICAgICAgfVxuICAgICAgTG9uZ2FuLkxvbmdhbkNvcmUuSlNfQ2xvc2VfU2VnbWVudCgpO1xuXG4gICAgICB0aGlzLmFkZExpbmVDb21wYXNzKGNvbXBhc3NLZXkpO1xuICAgICAgLy8gc2VnbWVudC5zZWxlY3RhYmlsaXR5LnNldEZhY2UoU2VsZWN0YWJpbGl0eVR5cGUuT2ZmKTtcblxuICAgICAgdGhpcy5yb2xsKHZpZXdlcik7XG5cbiAgICAgIC8v5re75Yqg572X55uY5peL6L2s5LqL5Lu2LlxuICAgICAgdmlld2VyLnNjZW5lQ2FtZXJhQ2hhbmdlZC5hZGQodGhpcy5yb2xsQ29tcGFzcyk7XG4gICAgfVxuICAgIExvbmdhbi5Mb25nYW5Db3JlLkpTX0Nsb3NlX1NlZ21lbnQoKTtcbiAgfVxuXG4gIGFkZExpbmVDb21wYXNzKGNvbXBhc3NLZXk6IG51bWJlcikge1xuICAgIGxldCBvcmlnaW4gPSBbMCwgMCwgMF07XG4gICAgbGV0IGxlbiA9IDEwO1xuXG4gICAgbGV0IHNjb25MZW4gPSAwLjIgKiBsZW47XG4gICAgbGV0IHNjb25SYWQgPSAwLjIgKiBsZW47XG5cbiAgICBsZXQgc2VnbWVudCA9IG5ldyBMb25nYW4uU2VnbWVudChjb21wYXNzS2V5KTtcbiAgICBzZWdtZW50LnNlbGVjdGFiaWxpdHkuc2V0RmFjZShMb25nYW4uU2VsZWN0YWJpbGl0eVR5cGUuT2ZmKTtcbiAgICBzZWdtZW50LnNlbGVjdGFiaWxpdHkuc2V0TGluZShMb25nYW4uU2VsZWN0YWJpbGl0eVR5cGUuT2ZmKTtcbiAgICBsZXQgeEF4aXMgPSBzZWdtZW50LnN1YnNlZ21lbnQoXCJ4QXhpc1wiKTtcbiAgICB4QXhpcy5pbnNlcnRMaW5lKG9yaWdpbiwgW2xlbiwgMCwgMF0pO1xuICAgIHhBeGlzLmNvbG9yLnNldExpbmUoWzAsIDAsIDI1NSwgMV0pO1xuICAgIHhBeGlzLmNvbG9yLnNldEZhY2UoWzAsIDAsIDI1NSwgMV0pO1xuXG4gICAgeEF4aXMuaW5zZXJ0UGFyYW1ldHJpY0dlb21ldHJ5KFwic2NvblwiLCBbXG4gICAgICAuLi5bbGVuLCAwLCAwXSxcbiAgICAgIC4uLlstMSwgMCwgMF0sXG4gICAgICBzY29uTGVuLFxuICAgICAgc2NvblJhZCxcbiAgICBdKTtcblxuICAgIGxldCB5QXhpcyA9IHNlZ21lbnQuc3Vic2VnbWVudChcInlBeGlzXCIpO1xuICAgIHlBeGlzLmluc2VydExpbmUob3JpZ2luLCBbMCwgbGVuLCAwXSk7XG4gICAgeUF4aXMuY29sb3Iuc2V0TGluZShbMCwgMjU1LCAwLCAxXSk7XG4gICAgeUF4aXMuY29sb3Iuc2V0RmFjZShbMCwgMjU1LCAwLCAxXSk7XG5cbiAgICB0aGlzLnNjZW5lQ2FtZXJhQ2hhbmdlZC5hZGQoKCkgPT4ge1xuICAgICAgbGV0IGNhbVBvcyA9IG5ldyBGbG9hdDY0QXJyYXkoc2VnbWVudC5jYW1lcmEucG9zaXRpb24pO1xuICAgICAgTG9uZ2FuLkRWZWN0b3Iubm9ybWFsaXplVmVjdG9yKGNhbVBvcyk7XG4gICAgICBsZXQgY2FtVXAgPSBuZXcgRmxvYXQ2NEFycmF5KHNlZ21lbnQuY2FtZXJhLnVwKTtcbiAgICAgIExvbmdhbi5EVmVjdG9yLm5vcm1hbGl6ZShjYW1VcCk7XG5cbiAgICAgIGxldCB4YSA9IExvbmdhbi5EVmVjdG9yLmNyb3NzKGNhbVVwLCBjYW1Qb3MpO1xuICAgICAgTG9uZ2FuLkRWZWN0b3Iubm9ybWFsaXplKHhhKTtcbiAgICAgIGxldCB5YSA9IExvbmdhbi5EVmVjdG9yLmNyb3NzKGNhbVBvcywgeGEpO1xuICAgICAgTG9uZ2FuLkRWZWN0b3Iubm9ybWFsaXplKHlhKTtcblxuICAgICAgbGV0IHlBeGlzQ2hhclNlZyA9IHlBeGlzLnN1YnNlZ21lbnQoXCJjaGFyXCIpO1xuICAgICAgeUF4aXNDaGFyU2VnLmNsZWFyQWxsKCk7XG4gICAgICB5QXhpc0NoYXJTZWcuaW5zZXJ0VmVjdG9yVGV4dChcIllcIiwgWzAsIGxlbiArIDEsIDBdLCB4YSwgeWEsIDgpO1xuICAgICAgeUF4aXNDaGFyU2VnLnJlbmRlcmluZ09wdGlvbnMuY3VsbEJhY2tGYWNlID0gZmFsc2U7IC8v5Y+M6Z2i57uY5Yi2XG5cbiAgICAgIGxldCB4QXhpc0NoYXJTZWcgPSB4QXhpcy5zdWJzZWdtZW50KFwiY2hhclwiKTtcbiAgICAgIHhBeGlzQ2hhclNlZy5jbGVhckFsbCgpO1xuICAgICAgeEF4aXNDaGFyU2VnLmluc2VydFZlY3RvclRleHQoXCJYXCIsIFtsZW4gKyAxLCAwLCAwXSwgeGEsIHlhLCA4KTtcbiAgICAgIHhBeGlzQ2hhclNlZy5yZW5kZXJpbmdPcHRpb25zLmN1bGxCYWNrRmFjZSA9IGZhbHNlOyAvL+WPjOmdoue7mOWItlxuXG4gICAgICBsZXQgekF4aXNDaGFyU2VnID0gekF4aXMuc3Vic2VnbWVudChcImNoYXJcIik7XG4gICAgICB6QXhpc0NoYXJTZWcuY2xlYXJBbGwoKTtcbiAgICAgIHpBeGlzQ2hhclNlZy5pbnNlcnRWZWN0b3JUZXh0KFwiWlwiLCBbMCwgMCwgbGVuICsgMV0sIHhhLCB5YSwgOCk7XG4gICAgICB6QXhpc0NoYXJTZWcucmVuZGVyaW5nT3B0aW9ucy5jdWxsQmFja0ZhY2UgPSBmYWxzZTsgLy/lj4zpnaLnu5jliLZcbiAgICB9KTtcblxuICAgIHlBeGlzLmluc2VydFBhcmFtZXRyaWNHZW9tZXRyeShcInNjb25cIiwgW1xuICAgICAgLi4uWzAsIGxlbiwgMF0sXG4gICAgICAuLi5bMCwgLTEsIDBdLFxuICAgICAgc2NvbkxlbixcbiAgICAgIHNjb25SYWQsXG4gICAgXSk7XG5cbiAgICBsZXQgekF4aXMgPSBzZWdtZW50LnN1YnNlZ21lbnQoXCJ6QXhpc1wiKTtcbiAgICB6QXhpcy5pbnNlcnRMaW5lKG9yaWdpbiwgWzAsIDAsIGxlbl0pO1xuICAgIHpBeGlzLmNvbG9yLnNldExpbmUoWzI1NSwgMCwgMCwgMV0pO1xuICAgIHpBeGlzLmNvbG9yLnNldEZhY2UoWzI1NSwgMCwgMCwgMV0pO1xuXG4gICAgekF4aXMuaW5zZXJ0UGFyYW1ldHJpY0dlb21ldHJ5KFwic2NvblwiLCBbXG4gICAgICAuLi5bMCwgMCwgbGVuXSxcbiAgICAgIC4uLlswLCAwLCAtMV0sXG4gICAgICBzY29uTGVuLFxuICAgICAgc2NvblJhZCxcbiAgICBdKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdFZpZXdlck9wdGlvbnMoKSB7XG4gICAgdGhpcy5uYW1lID0gXCJtYWluXCI7XG4gICAgdGhpcy5iYWNrZ3JvdW5kQ29sb3IgPSBbMCwgMCwgMCwgMF07XG4gICAgdGhpcy5zY2VuZVNlZ21lbnQucmVuZGVyaW5nT3B0aW9uc1xuICAgICAgLnNldERlcHRoUmFuZ2UoMC4xLCAxKVxuICAgICAgLnNldEN1bGxpbmdNYXhpbXVtRXh0ZW50KDUpO1xuXG4gICAgdGhpcy5zY2VuZVNlZ21lbnQuY2FtZXJhLnByb2plY3Rpb24gPSBMb25nYW4uUHJvamVjdGlvblR5cGUuT3J0aG9ncmFwaGljO1xuICAgIHRoaXMudXBkYXRlVHlwZSA9IExvbmdhbi5Mb25nYW5Db3JlLlVwZGF0ZVR5cGUuU3luY2hyb25pemF0aW9uO1xuICAgIHRoaXMuZHluYW1pY01lbW9yeSA9IExvbmdhbi5EeW5hbWljTWVtb3J5VHlwZS5DbGllbnQ7XG4gICAgdGhpcy5nZW9EYXRhSXNDb21wcmVzc2lvbiA9IHRydWU7XG5cbiAgICAvL+mAieaLqeWZqOeahOeBteaVj+W6plxuICAgIExvbmdhbi5Mb25nYW5Db3JlLkpTX09wZW5fU2VnbWVudF9CeV9LZXkodGhpcy52aWV3S2V5KTtcbiAgICB7XG4gICAgICAvLyBMb25nYW5Db3JlLkpTX1NldF9Ecml2ZXJfT3B0aW9ucyhcInNlbGVjdGlvbiB0b2xlcmFuY2U9MC41XCIpO1xuICAgICAgTG9uZ2FuLkxvbmdhbkNvcmUuSlNfU2V0X0RyaXZlcl9PcHRpb25zKFwic2VsZWN0aW9uIHRvbGVyYW5jZT0yXCIpO1xuICAgIH1cbiAgICBMb25nYW4uTG9uZ2FuQ29yZS5KU19DbG9zZV9TZWdtZW50KCk7XG4gIH1cblxuICBwcml2YXRlIGFkZEV2ZW50KCkge1xuICAgIC8vIHRoaXMucHJvY2Vzcy5oaXN0b3J5TWFuYWdlci5yZWNvcmRlZFN0YXRlQ291bnQgPSAzMFxuICAgIHRoaXMub25XaW5kb3dLZXlEb3duLmFkZCgoc2VuZGVyLCBldmVudCkgPT4ge1xuICAgICAgbGV0IGV2OiBhbnkgPSBldmVudC51aUV2ZW50O1xuICAgICAgbGV0IGtleSA9IGV2LmtleTtcblxuICAgICAgaWYgKGV2LmN0cmxLZXkgPT0gdHJ1ZSAmJiBldi5rZXlDb2RlID09IDkwKSB7XG4gICAgICAgIC8vQ3RybCtaXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwidGhpcy5fY3VycmVudFN0YXRlSW5kZXhcIiwgdGhpcy5wcm9jZXNzLmhpc3RvcnlNYW5hZ2VyLl9jdXJyZW50U3RhdGVJbmRleClcblxuICAgICAgICBpZiAodGhpcy5wcm9jZXNzLmhpc3RvcnlNYW5hZ2VyLmNhblJvbGxCYWNrKSB7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzLmhpc3RvcnlNYW5hZ2VyLnJvbGxCYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJ0aGlzLl9jdXJyZW50U3RhdGVJbmRleFwiLCB0aGlzLnByb2Nlc3MuaGlzdG9yeU1hbmFnZXIuX2N1cnJlbnRTdGF0ZUluZGV4KVxuXG4gICAgICAgIGNvbnNvbGUubG9nKFwicm9sbEJhY2tcIiwgdGhpcy5wcm9jZXNzLmhpc3RvcnlNYW5hZ2VyKTtcbiAgICAgIH0gZWxzZSBpZiAoZXYuY3RybEtleSA9PSB0cnVlICYmIGV2LmtleUNvZGUgPT0gODkpIHtcbiAgICAgICAgLy9DdHJsK1lcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJ0aGlzLl9jdXJyZW50U3RhdGVJbmRleFwiLCB0aGlzLnByb2Nlc3MuaGlzdG9yeU1hbmFnZXIuX2N1cnJlbnRTdGF0ZUluZGV4KVxuXG4gICAgICAgIGlmICh0aGlzLnByb2Nlc3MuaGlzdG9yeU1hbmFnZXIuY2FuUm9sbEZvcndhcmQpIHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3MuaGlzdG9yeU1hbmFnZXIucm9sbEZvcndhcmQoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcInRoaXMuX2N1cnJlbnRTdGF0ZUluZGV4XCIsIHRoaXMucHJvY2Vzcy5oaXN0b3J5TWFuYWdlci5fY3VycmVudFN0YXRlSW5kZXgpXG5cbiAgICAgICAgY29uc29sZS5sb2coXCJyb2xsRm9yd2FyZFwiLCB0aGlzLnByb2Nlc3MuaGlzdG9yeU1hbmFnZXIpO1xuICAgICAgfSBlbHNlIGlmIChldi5rZXlDb2RlID09PSA5KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwidGFiXCIpO1xuICAgICAgICBsZXQgY2FtZXJhID0gdGhpcy5vcGVyYXRvck1hbmFnZXIuZmluZChcIkNhbWVyYU1vdXNlXCIpO1xuICAgICAgICBpZiAoY2FtZXJhIGluc3RhbmNlb2YgQ2FtZXJhTW91c2UpIHtcbiAgICAgICAgICBjYW1lcmEubEJ1dHRvblNhdGUgPSBMb25nYW4uTEJ1dHRvblN0YXRlLnRyYW5zbGF0aW9uO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGV2LmtleUNvZGUgPT09IDE2KSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwic2hpZnRcIik7XG4gICAgICAgIGxldCBjYW1lcmEgPSB0aGlzLm9wZXJhdG9yTWFuYWdlci5maW5kKFwiQ2FtZXJhTW91c2VcIik7XG4gICAgICAgIGlmIChjYW1lcmEgaW5zdGFuY2VvZiBDYW1lcmFNb3VzZSkge1xuICAgICAgICAgIGNhbWVyYS5sQnV0dG9uU2F0ZSA9IExvbmdhbi5MQnV0dG9uU3RhdGUucm90YXRpb247XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZXYuY3RybEtleSA9PSB0cnVlICYmIGtleSA9PT0gXCJjXCIpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJjb3B5XCIpO1xuICAgICAgICAvLyB0aGlzLmNvcHlDb21wb25lbnRzKCk7XG4gICAgICB9IGVsc2UgaWYgKGV2LmN0cmxLZXkgPT0gdHJ1ZSAmJiBrZXkgPT09IFwidlwiKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwicGFzdGVcIik7XG4gICAgICAgIC8vIHRoaXMucGFzdGVDb21wb25lbnRzKCk7XG4gICAgICB9IGVsc2UgaWYoZXYua2V5Q29kZSA9PT0gMjcpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJlc2NcIik7XG4gICAgICAgIGxldCBjYW1lcmEgPSB0aGlzLm9wZXJhdG9yTWFuYWdlci5maW5kKFwiQ2FtZXJhTW91c2VcIik7XG4gICAgICAgIGlmIChjYW1lcmEgaW5zdGFuY2VvZiBDYW1lcmFNb3VzZSkge1xuICAgICAgICAgIGxldCBpZCA9IGNhbWVyYS5jb250aW51b3VzUm90YXRlQW5pbUlkO1xuICAgICAgICAgIHRoaXMucHJvY2Vzcy5hbmltYXRpb25NYW5hZ2VyLnN0b3BBbmltZShpZCk7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzLmFuaW1hdGlvbk1hbmFnZXIucmVtb3ZlQW5pbWUoaWQpO1xuICAgICAgICAgIGNhbWVyYS5jb250aW51b3VzUm90YXRlQW5pbUlkID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5vbldpbmRvd0tleVVwLmFkZCgoc2VuZGVyLCBldmVudCkgPT4ge1xuICAgICAgbGV0IGV2OiBhbnkgPSBldmVudC51aUV2ZW50O1xuICAgICAgaWYgKGV2LmtleUNvZGUgPT09IDkpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJ0YWJVcFwiKTtcbiAgICAgICAgbGV0IGNhbWVyYSA9IHRoaXMub3BlcmF0b3JNYW5hZ2VyLmZpbmQoXCJDYW1lcmFNb3VzZVwiKTtcbiAgICAgICAgaWYgKGNhbWVyYSBpbnN0YW5jZW9mIENhbWVyYU1vdXNlKSB7XG4gICAgICAgICAgY2FtZXJhLmxCdXR0b25TYXRlID0gTG9uZ2FuLkxCdXR0b25TdGF0ZS5zZWxlY3Q7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoZXYua2V5Q29kZSA9PT0gMTYpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJzaGlmdFVwXCIpO1xuICAgICAgICBsZXQgY2FtZXJhID0gdGhpcy5vcGVyYXRvck1hbmFnZXIuZmluZChcIkNhbWVyYU1vdXNlXCIpO1xuICAgICAgICBpZiAoY2FtZXJhIGluc3RhbmNlb2YgQ2FtZXJhTW91c2UpIHtcbiAgICAgICAgICBjYW1lcmEubEJ1dHRvblNhdGUgPSBMb25nYW4uTEJ1dHRvblN0YXRlLnNlbGVjdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGNvcHlDb21wb25lbnRzKCkge1xuICAgIGxldCBjYWVPYmplY3RTZWxlY3RvciA9IHRoaXMub3BlcmF0b3JNYW5hZ2VyLmZpbmQoXG4gICAgICBcIkNBRU9iamVjdFNlbGVjdG9yXCJcbiAgICApIGFzIENBRU9iamVjdFNlbGVjdG9yO1xuXG4gICAgaWYgKGNhZU9iamVjdFNlbGVjdG9yKSB7XG4gICAgICAvLyBjb3B5XG4gICAgICBsZXQgc2VsZWN0ZWRPYmpzID0gY2FlT2JqZWN0U2VsZWN0b3Iuc2VsZWN0ZWRSZW5kZXJPYmplY3RzO1xuICAgICAgdGhpcy5jb3B5ZWRPYmplY3RzLmNsZWFyKCk7XG5cblxuICAgICAgaWYoc2VsZWN0ZWRPYmpzLmNvdW50KCkgPiAwKSB7XG4gICAgICAgIGlmKHRoaXMuY29tbW9uSW50ZXJmYWNlTWFuYWdlci5jb3B5ZWRFeHRlcm5hbEV2ZW50KSB7XG4gICAgICAgICAgdGhpcy5jb21tb25JbnRlcmZhY2VNYW5hZ2VyLmNvcHllZEV4dGVybmFsRXZlbnQoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zb2xlLmxvZyhcImNvcHkgc3VjY2Vzc1wiKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWxlY3RlZE9ianMuY291bnQoKTsgaSsrKSB7XG4gICAgICAgICAgdGhpcy5jb3B5ZWRPYmplY3RzLmFkZChzZWxlY3RlZE9ianMuaXRlbXNbaV0gYXMgRGVzaWduQmFzZU9iamVjdCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiY29weSBmYWlsXCIpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNvcHllZE9iamVjdHM7XG4gIH1cblxuICBwcml2YXRlIHBhc3RlQ29tcG9uZW50cygpIHtcbiAgICBsZXQgY2FlT2JqZWN0U2VsZWN0b3IgPSB0aGlzLm9wZXJhdG9yTWFuYWdlci5maW5kKFxuICAgICAgXCJDQUVPYmplY3RTZWxlY3RvclwiXG4gICAgKSBhcyBDQUVPYmplY3RTZWxlY3RvcjtcbiAgICBpZiAoY2FlT2JqZWN0U2VsZWN0b3IpIHtcbiAgICAgIGxldCBuZXdTdGF0ZXMgPSBuZXcgQXJyYXk8RGVzaWduQmFzZU9iamVjdD4oKTtcblxuICAgICAgbGV0IHNlbGVjdGVkQ29tcG9uZW50cyA9IHRoaXMuY29weWVkT2JqZWN0cztcbiAgICAgIGlmIChzZWxlY3RlZENvbXBvbmVudHMuY291bnQoKSA+IDApIHtcbiAgICAgICAgLy8g6K6h566X5pyA6Z2g6L+R5LiW55WM5Z2Q5qCH5Y6f54K555qE5p6E5Lu2LlxuICAgICAgICBsZXQgZGF0YU9iaiA9IHRoaXMuY29tcHV0ZUNsb3Nlc3RKb2ludChzZWxlY3RlZENvbXBvbmVudHMpO1xuXG4gICAgICAgIGxldCB0YXJnZXRQb3NpdGlvbiA9IHRoaXMuZ2V0VGFyZ2V0UG9zaXRpb24oKTtcbiAgICAgICAgaWYgKCF0YXJnZXRQb3NpdGlvbikge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgY2xvc2V0UG9zaXRpb24gPSBkYXRhT2JqLmNsb3NldFBvc2l0aW9uO1xuICAgICAgICBsZXQgY2xvbmVKb2ludHMgPSBkYXRhT2JqLmNsb25lSm9pbnRzO1xuICAgICAgICBsZXQgY2xvbmVNZW1iZXJzID0gZGF0YU9iai5jbG9uZU1lbWJlcnM7XG4gICAgICAgIGxldCBjbG9uZVBsYXRlcyA9IGRhdGFPYmouY2xvbmVQbGF0ZXM7XG5cbiAgICAgICAgbGV0IGpvaW50TmFtZU1hcE5ld0pvaW50OiB7IFtpZDogc3RyaW5nXTogSm9pbnRPYmplY3QgfSA9IHt9O1xuXG4gICAgICAgIGxldCB2ZWN0b3IgPSBMb25nYW4uUG9pbnQuc3VidHJhY3QodGFyZ2V0UG9zaXRpb24sIGNsb3NldFBvc2l0aW9uKTtcblxuICAgICAgICAvLyBwYXN0ZSBKb2ludHNcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjbG9uZUpvaW50cy5jb3VudCgpOyBpKyspIHtcbiAgICAgICAgICAvL1xuICAgICAgICAgIGxldCBjbG9uZUpvaW50ID0gY2xvbmVKb2ludHMuaXRlbXNbaV07XG4gICAgICAgICAgbGV0IG5ld0pvaW50ID0gdGhpcy5wcm9jZXNzLmNsb25lTWFuYWdlci5jbG9uZU9iamVjdChcbiAgICAgICAgICAgIGNsb25lSm9pbnRcbiAgICAgICAgICApIGFzIEpvaW50T2JqZWN0O1xuICAgICAgICAgIC8vIOiuvue9rueKtuaAgVxuICAgICAgICAgIG5ld0pvaW50LmJ1c2luZXNzU3RhdGUgPSBCdXNpbmVzc1N0YXRlLkNyZWF0aW5nO1xuICAgICAgICAgIC8vIOmHjeWRveWQjVxuICAgICAgICAgIG5ld0pvaW50Lm5hbWUgPVxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzLmNhZVJlbmRlck9iamVjdFRyZWVNYW5hZ2VyLm5hbWVBc2NlbmRpbmdPcmRlcihcbiAgICAgICAgICAgICAgbmV3Sm9pbnQubmFtZSxcbiAgICAgICAgICAgICAgMVxuICAgICAgICAgICAgKVswXTtcbiAgICAgICAgICAvLyDmm7TmlrDkvY3nva4uXG4gICAgICAgICAgbmV3Sm9pbnQueE9uTWV0ZXIgKz0gdmVjdG9yWzBdO1xuICAgICAgICAgIG5ld0pvaW50LnlPbk1ldGVyICs9IHZlY3RvclsxXTtcbiAgICAgICAgICBuZXdKb2ludC56T25NZXRlciArPSB2ZWN0b3JbMl07XG5cbiAgICAgICAgICB0aGlzLnByb2Nlc3MuYWRkUmVuZGVyT2JqZWN0KFxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzLmNhZVJlbmRlck9iamVjdFRyZWVNYW5hZ2VyLmpvaW50Tm9kZSxcbiAgICAgICAgICAgIG5ld0pvaW50XG4gICAgICAgICAgKTtcbiAgICAgICAgICBuZXdKb2ludC5zZXROZWVkVXBkYXRlKCk7XG4gICAgICAgICAgbmV3U3RhdGVzLnB1c2gobmV3Sm9pbnQpO1xuXG4gICAgICAgICAgam9pbnROYW1lTWFwTmV3Sm9pbnRbY2xvbmVKb2ludC5uYW1lXSA9IG5ld0pvaW50O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcGFzdGUgbWVtYmVyc1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNsb25lTWVtYmVycy5jb3VudCgpOyBpKyspIHtcbiAgICAgICAgICBsZXQgY2xvbmVNZW1iZXIgPSBjbG9uZU1lbWJlcnMuaXRlbXNbaV07XG4gICAgICAgICAgbGV0IG5lV01lbWJlciA9IHRoaXMucHJvY2Vzcy5jbG9uZU1hbmFnZXIuY2xvbmVPYmplY3QoXG4gICAgICAgICAgICBjbG9uZU1lbWJlclxuICAgICAgICAgICkgYXMgTWVtYmVyT2JqZWN0O1xuICAgICAgICAgIG5lV01lbWJlci5idXNpbmVzc1N0YXRlID0gQnVzaW5lc3NTdGF0ZS5DcmVhdGluZztcbiAgICAgICAgICBuZVdNZW1iZXIubmFtZSA9XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3MuY2FlUmVuZGVyT2JqZWN0VHJlZU1hbmFnZXIubmFtZUFzY2VuZGluZ09yZGVyKFxuICAgICAgICAgICAgICBuZVdNZW1iZXIubmFtZSxcbiAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzLm5hbWVNYXBNZW1iZXIsXG4gICAgICAgICAgICApWzBdO1xuXG4gICAgICAgICAgbGV0IG5ld1N0YXJ0ID0gam9pbnROYW1lTWFwTmV3Sm9pbnRbbmVXTWVtYmVyLnN0YXJ0Lm5hbWVdO1xuICAgICAgICAgIGlmIChuZXdTdGFydCkge1xuICAgICAgICAgICAgbmVXTWVtYmVyLnN0YXJ0ID0gbmV3U3RhcnQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IG5ld0VuZCA9IGpvaW50TmFtZU1hcE5ld0pvaW50W25lV01lbWJlci5lbmQubmFtZV07XG4gICAgICAgICAgaWYgKG5ld0VuZCkge1xuICAgICAgICAgICAgbmVXTWVtYmVyLmVuZCA9IG5ld0VuZDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLnByb2Nlc3MuYWRkUmVuZGVyT2JqZWN0KFxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzLmNhZVJlbmRlck9iamVjdFRyZWVNYW5hZ2VyLm1lbWJlck5vZGUsXG4gICAgICAgICAgICBuZVdNZW1iZXJcbiAgICAgICAgICApO1xuICAgICAgICAgIG5lV01lbWJlci5zZXROZWVkVXBkYXRlKCk7XG5cbiAgICAgICAgICBuZXdTdGF0ZXMucHVzaChuZVdNZW1iZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gcGFzdGUgcGx0ZXNcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjbG9uZVBsYXRlcy5jb3VudCgpOyBpKyspIHtcbiAgICAgICAgICAvL1xuICAgICAgICAgIGxldCBjbG9uZVBsYXRlID0gY2xvbmVQbGF0ZXMuaXRlbXNbaV07XG4gICAgICAgICAgbGV0IG5ld1BsYXRlID0gdGhpcy5wcm9jZXNzLmNsb25lTWFuYWdlci5jbG9uZU9iamVjdChcbiAgICAgICAgICAgIGNsb25lUGxhdGVcbiAgICAgICAgICApIGFzIFBsYXRlT2JqZWN0O1xuICAgICAgICAgIG5ld1BsYXRlLmJ1c2luZXNzU3RhdGUgPSBCdXNpbmVzc1N0YXRlLkNyZWF0aW5nO1xuICAgICAgICAgIG5ld1BsYXRlLm5hbWUgPVxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzLmNhZVJlbmRlck9iamVjdFRyZWVNYW5hZ2VyLm5hbWVBc2NlbmRpbmdPcmRlcihcbiAgICAgICAgICAgICAgbmV3UGxhdGUubmFtZSxcbiAgICAgICAgICAgICAgMSxcbiAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzLm5hbWVNYXBQbGF0ZVxuICAgICAgICAgICAgKVswXTtcblxuICAgICAgICAgIGxldCBuZXdKb2ludHMgPSBuZXcgQXJyYXk8Sm9pbnRPYmplY3Q+KCk7XG4gICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBuZXdQbGF0ZS5qb2ludHMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICBsZXQgbmV3Sm9pbnQgPSBqb2ludE5hbWVNYXBOZXdKb2ludFtuZXdQbGF0ZS5qb2ludHNbal0ubmFtZV07XG4gICAgICAgICAgICBpZiAobmV3Sm9pbnQpIHtcbiAgICAgICAgICAgICAgbmV3Sm9pbnRzLnB1c2gobmV3Sm9pbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBuZXdQbGF0ZS5qb2ludHMgPSBuZXdKb2ludHM7XG5cbiAgICAgICAgICB0aGlzLnByb2Nlc3MuYWRkUmVuZGVyT2JqZWN0KFxuICAgICAgICAgICAgdGhpcy5wcm9jZXNzLmNhZVJlbmRlck9iamVjdFRyZWVNYW5hZ2VyLnBsYXRlTm9kZSxcbiAgICAgICAgICAgIG5ld1BsYXRlXG4gICAgICAgICAgKTtcbiAgICAgICAgICBuZXdQbGF0ZS5zZXROZWVkVXBkYXRlKCk7XG5cbiAgICAgICAgICBuZXdTdGF0ZXMucHVzaChuZXdQbGF0ZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFkZFN0YXRlKG51bGwsIG5ld1N0YXRlcywgKHN0YXRlSXRlbSkgPT4ge1xuICAgICAgICAgIGlmIChzdGF0ZUl0ZW0ubmV3T2JqID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyDmkqTplIBcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmV3U3RhdGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIG5ld1N0YXRlc1tpXS50ZW1wRGVsZXRlKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyDph43lgZpcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmV3U3RhdGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIG5ld1N0YXRlc1tpXS50ZW1wQ3JlYXRlKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnVwZGF0ZURpc3BsYXkoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5zZWxlY3Rpb25NYW5hZ2VyLmNsZWFyQWxsU2VsZWN0aW9uQW5kSGlnaGxpZ2h0KCk7XG4gICAgICAgIGNhZU9iamVjdFNlbGVjdG9yLnNlbGVjdGVkUmVuZGVyT2JqZWN0cy5jbGVhcigpO1xuXG4gICAgICAgIHRoaXMudXBkYXRlRGlzcGxheSgpO1xuICAgICAgICB0aGlzLnZpZXdJbnRlcmZhY2VNYW5hZ2VyLnJlc2V0VmlldygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0VGFyZ2V0UG9zaXRpb24oKSB7XG4gICAgbGV0IGNhZU9iamVjdFNlbGVjdG9yID0gdGhpcy5vcGVyYXRvck1hbmFnZXIuZmluZChcbiAgICAgIFwiQ0FFT2JqZWN0U2VsZWN0b3JcIlxuICAgICkgYXMgQ0FFT2JqZWN0U2VsZWN0b3I7XG5cbiAgICBpZiAoXG4gICAgICB0aGlzLnNlbGVjdGlvbkludGVyZmFjZU1hbmFnZXIuc2VsZWN0b3JGaWx0ZXIgPT09IFNlbGVjdG9yRmlsaXRlci5Kb2ludCB8fFxuICAgICAgdGhpcy5zZWxlY3Rpb25JbnRlcmZhY2VNYW5hZ2VyLnNlbGVjdG9yRmlsdGVyID09PSBTZWxlY3RvckZpbGl0ZXIuQWxsXG4gICAgKSB7XG4gICAgICAvLyDmm7TmlrDpnaLmnb/nmoTpgInkuK3ngrnliJfooaguXG4gICAgICBsZXQgb2JqZWN0cyA9IGNhZU9iamVjdFNlbGVjdG9yLnNlbGVjdGVkUmVuZGVyT2JqZWN0cztcbiAgICAgIGlmIChvYmplY3RzLmNvdW50KCkgPiAwKSB7XG4gICAgICAgIGxldCBvYmogPSBvYmplY3RzLml0ZW1zWzBdIGFzIEpvaW50T2JqZWN0O1xuICAgICAgICBpZiAob2JqKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDMyQXJyYXkob2JqLnBvc2l0aW9uKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29tcHV0ZUNsb3Nlc3RKb2ludChjb21wb25lbnRMaXN0OiBMb25nYW4uTGlzdDxEZXNpZ25CYXNlT2JqZWN0Pikge1xuICAgIC8vXG4gICAgbGV0IGNsb25lUGxhdGVzID0gbmV3IExvbmdhbi5MaXN0PFBsYXRlT2JqZWN0PigpO1xuICAgIGxldCBjbG9uZU1lbWJlcnMgPSBuZXcgTG9uZ2FuLkxpc3Q8TWVtYmVyT2JqZWN0PigpO1xuICAgIGxldCBjbG9uZUpvaW50cyA9IG5ldyBMb25nYW4uTGlzdDxKb2ludE9iamVjdD4oKTtcblxuICAgIGxldCBjbG9zZXRQb2ludDogRmxvYXQzMkFycmF5ID0gbnVsbDtcbiAgICBsZXQgbWluRGlzID0gOTk5OTk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb21wb25lbnRMaXN0LmNvdW50KCk7IGkrKykge1xuICAgICAgbGV0IGNvbXBvbmVudCA9IGNvbXBvbmVudExpc3QuaXRlbXNbaV07XG4gICAgICBzd2l0Y2ggKGNvbXBvbmVudC50eXBlTmFtZSkge1xuICAgICAgICBjYXNlIFwiSm9pbnRPYmplY3RcIjpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgSm9pbnRPYmplY3QpIHtcbiAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgaWYgKGNsb25lSm9pbnRzLmluZGV4T2YoY29tcG9uZW50KSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICBjbG9uZUpvaW50cy5hZGQoY29tcG9uZW50KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBsZXQgdGVtcFBvaW50ID0gbmV3IEZsb2F0MzJBcnJheShjb21wb25lbnQucG9zaXRpb24pO1xuICAgICAgICAgICAgICBsZXQgZGlzID0gTG9uZ2FuLlZlY3Rvci5tb2R1bGUodGVtcFBvaW50KTtcbiAgICAgICAgICAgICAgaWYgKGRpcyA8IG1pbkRpcykge1xuICAgICAgICAgICAgICAgIG1pbkRpcyA9IGRpcztcbiAgICAgICAgICAgICAgICBjbG9zZXRQb2ludCA9IHRlbXBQb2ludDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIk1lbWJlck9iamVjdFwiOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlmIChjb21wb25lbnQgaW5zdGFuY2VvZiBNZW1iZXJPYmplY3QpIHtcbiAgICAgICAgICAgICAgY2xvbmVNZW1iZXJzLmFkZChjb21wb25lbnQpO1xuICAgICAgICAgICAgICBpZiAoY2xvbmVKb2ludHMuaW5kZXhPZihjb21wb25lbnQuc3RhcnQpID09PSAtMSkge1xuICAgICAgICAgICAgICAgIGNsb25lSm9pbnRzLmFkZChjb21wb25lbnQuc3RhcnQpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGNsb25lSm9pbnRzLmluZGV4T2YoY29tcG9uZW50LmVuZCkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgY2xvbmVKb2ludHMuYWRkKGNvbXBvbmVudC5lbmQpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgbGV0IHAwID0gbmV3IEZsb2F0MzJBcnJheShjb21wb25lbnQuc3RhcnQucG9zaXRpb24pO1xuICAgICAgICAgICAgICBsZXQgcDEgPSBuZXcgRmxvYXQzMkFycmF5KGNvbXBvbmVudC5lbmQucG9zaXRpb24pO1xuXG4gICAgICAgICAgICAgIGxldCBkaXMwID0gTG9uZ2FuLlZlY3Rvci5tb2R1bGUocDApO1xuICAgICAgICAgICAgICBsZXQgZGlzMSA9IExvbmdhbi5WZWN0b3IubW9kdWxlKHAxKTtcblxuICAgICAgICAgICAgICBpZiAoZGlzMCA8IG1pbkRpcykge1xuICAgICAgICAgICAgICAgIG1pbkRpcyA9IGRpczA7XG4gICAgICAgICAgICAgICAgY2xvc2V0UG9pbnQgPSBwMDtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChkaXMxIDwgbWluRGlzKSB7XG4gICAgICAgICAgICAgICAgbWluRGlzID0gZGlzMTtcbiAgICAgICAgICAgICAgICBjbG9zZXRQb2ludCA9IHAxO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiUGxhdGVPYmplY3RcIjpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBpZiAoY29tcG9uZW50IGluc3RhbmNlb2YgUGxhdGVPYmplY3QpIHtcbiAgICAgICAgICAgICAgY2xvbmVQbGF0ZXMuYWRkKGNvbXBvbmVudCk7XG4gICAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29tcG9uZW50LmpvaW50cy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIGxldCBqb2ludCA9IGNvbXBvbmVudC5qb2ludHNbal07XG4gICAgICAgICAgICAgICAgaWYgKGNsb25lSm9pbnRzLmluZGV4T2Yoam9pbnQpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgY2xvbmVKb2ludHMuYWRkKGpvaW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IHBvaW50ID0gbmV3IEZsb2F0MzJBcnJheShqb2ludC5wb3NpdGlvbik7XG4gICAgICAgICAgICAgICAgbGV0IGRpcyA9IExvbmdhbi5WZWN0b3IubW9kdWxlKHBvaW50KTtcblxuICAgICAgICAgICAgICAgIGlmIChkaXMgPCBtaW5EaXMpIHtcbiAgICAgICAgICAgICAgICAgIG1pbkRpcyA9IGRpcztcbiAgICAgICAgICAgICAgICAgIGNsb3NldFBvaW50ID0gcG9pbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBjbG9zZXRQb3NpdGlvbjogY2xvc2V0UG9pbnQsXG4gICAgICBjbG9uZUpvaW50cyxcbiAgICAgIGNsb25lTWVtYmVycyxcbiAgICAgIGNsb25lUGxhdGVzLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgc2V0Vmlld2VyT3B0aW9ucyhvcHRpb25zLCBjb25maWcpIHtcbiAgICBsZXQga2V5cyA9IE9iamVjdC5rZXlzKGNvbmZpZyk7XG4gICAga2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc1trZXldID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgIHRoaXMuc2V0Vmlld2VyT3B0aW9ucyhvcHRpb25zW2tleV0sIGNvbmZpZ1trZXldKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwib3B0aW9uc0NoYW5nZVwiLCBjb25maWcsIGtleSwgY29uZmlnW2tleV0pXG4gICAgICAgIC8vIFZ1ZS5zZXQob3B0aW9ucywga2V5LCBjb25maWdba2V5XSlcbiAgICAgICAgb3B0aW9uc1trZXldID0gY29uZmlnW2tleV07XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgYWRkU3RhdGUoXG4gICAgb2xkT2JqLFxuICAgIG5ld09iaixcbiAgICBhZnRlclJvbGw6IChcbiAgICAgIHN0YXRlSXRlbTogTG9uZ2FuLlN0YXRlSXRlbSxcbiAgICAgIHByb2Nlc3M6IExvbmdhbi5Qcm9jZXNzLFxuICAgICAgcm9sbFR5cGU6IExvbmdhbi5Sb2xsVHlwZVxuICAgICkgPT4gdm9pZCxcbiAgICBkZWx0YU5hbWU/OiBzdHJpbmdcbiAgKSB7XG4gICAgbGV0IHN0YXRlSXRlbSA9IG5ldyBMb25nYW4uU3RhdGVJdGVtKG9sZE9iaiwgbmV3T2JqKTtcbiAgICBzdGF0ZUl0ZW0uYWZ0ZXJSb2xsLmFkZCgocHJvY2VzczogTG9uZ2FuLlByb2Nlc3MsIHJvbGxUeXBlOiBMb25nYW4uUm9sbFR5cGUpID0+IHtcbiAgICAgIGFmdGVyUm9sbChzdGF0ZUl0ZW0sIHByb2Nlc3MsIHJvbGxUeXBlKTtcbiAgICB9KTtcblxuICAgIGxldCBzdGF0ZVBhY2sgPSBuZXcgTG9uZ2FuLlN0YXRlUGFjaygpO1xuICAgIHN0YXRlUGFjay5hZGQoc3RhdGVJdGVtKTtcbiAgICBsZXQgZGVsdGFTdGF0ZSA9IG5ldyBMb25nYW4uRGVsdGFTdGF0ZSgpO1xuICAgIGRlbHRhU3RhdGUuYWRkKHN0YXRlUGFjayk7XG4gICAgaWYgKGRlbHRhTmFtZSkge1xuICAgICAgZGVsdGFTdGF0ZS5uYW1lID0gZGVsdGFOYW1lO1xuICAgIH1cblxuICAgIHRoaXMucHJvY2Vzcy5oaXN0b3J5TWFuYWdlci5hZGRTdGF0ZShkZWx0YVN0YXRlKTtcbiAgfVxuXG4gIHB1YmxpYyBpbml0TWFuYWdlcnMoKTogdm9pZCB7XG4gICAgc3VwZXIuaW5pdE1hbmFnZXJzKCk7XG5cbiAgICB0aGlzLnN0cnVjdHVyZVRyZWVNYW5hZ2VyID0gbmV3IFN0cnVjdHVyZVRyZWVNYW5hZ2VyKHRoaXMpO1xuICAgIC8vIHRoaXMucGFuZWxNYW5hZ2VyID0gbmV3IFBhbmVsTWFuYWdlcih0aGlzKTtcbiAgICB0aGlzLmF5c25UYXNrTWFuYWdlciA9IG5ldyBMb25nYW4uQXlzblRhc2tNYW5hZ2VyKHRoaXMpO1xuICAgIHRoaXMudmlld0ludGVyZmFjZU1hbmFnZXIgPSBuZXcgVmlld0ludGVyZmFjZU1hbmFnZXIodGhpcyk7XG4gICAgdGhpcy5zZWxlY3Rpb25JbnRlcmZhY2VNYW5hZ2VyID0gbmV3IFNlbGVjdGlvbkludGVyZmFjZU1hbmFnZXIodGhpcyk7XG4gICAgdGhpcy5jb21tb25JbnRlcmZhY2VNYW5hZ2VyID0gbmV3IENvbW1vbkludGVyZmFjZU1hbmFnZXIodGhpcyk7XG4gICAgdGhpcy5wb3N0SW50ZXJmYWNlTWFuYWdlciA9IG5ldyBQb3N0SW50ZXJmYWNlTWFuYWdlcih0aGlzKTtcbiAgICB0aGlzLmNvbW1hbmRJbnRlcmZhY2VNYW5hZ2VyID0gbmV3IENvbW1hbmRJbnRlcmZhY2VNYW5hZ2VyKHRoaXMpO1xuICAgIHRoaXMuZGF0UmVhZGVyTWFuYWdlciA9IG5ldyBEYXRSZWFkZXJNYW5hZ2VyKHRoaXMpO1xuICAgIHRoaXMuZGF0V3JpdGVyTWFuYWdlciA9IG5ldyBEYXRXcml0ZXJNYW5hZ2VyKHRoaXMpO1xuICAgIHRoaXMuY2FlUGFuZWxNYW5hZ2VyID0gbmV3IFBhbmVsTWFuYWdlcih0aGlzKTtcblxuICAgIGxldCBtYXRlcmlhbCA9IG5ldyBNYXRlcmlhbCh0aGlzLCBcImhpZ2hsaWdodFwiLCAyKTtcbiAgICBtYXRlcmlhbC5zZXRDb2xvcigyNTUsIDAsIDAsIDEpO1xuICAgIG1hdGVyaWFsLnNldEZsb2F0KCk7XG4gICAgdGhpcy5oaWdobGlnaHRNYW5hZ2VyLnN0eWxlTWFuYWdlckJhc2UgPSBuZXcgU3R5bGVNYW5hZ2VyQmFzZShtYXRlcmlhbCk7XG4gIH1cblxuICAvKipcbiAgICog5Yqg6L295pyN5Yqh5Zmo5qih5Z6LXG4gICAqIEBwYXJhbSBtb2RlbElkcyDmnI3liqHlmahJROagh+ivhlxuICAgKiBAcGFyYW0gaXNSZXBsYWNlIOaYr+WQpuabv+aNouaXp+aooeWei1xuICAgKiBAcGFyYW0gaXNTaW5nbGVNb2RlbCDmmK/lkKblj6rliqDovb3kuIDkuKrmqKHlnotcbiAgICogQHJldHVybnMg6L+U5Zue5qih5Z6L5YiX6KGoXG4gICAqL1xuICBwdWJsaWMgbG9hZE1vZGVsKFxuICAgIGlkOiBzdHJpbmcsXG4gICAgaXNSZXBsYWNlOiBib29sZWFuID0gZmFsc2VcbiAgKTogUHJvbWlzZTxMb25nYW4uUmVuZGVyT2JqZWN0PiB7XG4gICAgY29uc29sZS5sb2coXCJ0aGlzLm9wdGlvbnMubW9kZWxTZXJ2aWNlOlwiLCB0aGlzLm9wdGlvbnMubW9kZWxTZXJ2aWNlKTtcbiAgICAvL+azqOWGjOeJueacieeahFJlbmRlck9iamVjdFxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBheGlvcyhgL2NhZS1zZXJ2aWNlL3Byb2plY3RzLyR7aWR9L2RhdGFgKS50aGVuKChtb2RlbERhdGE6IGFueSkgPT4ge1xuICAgICAgICBpZihtb2RlbERhdGEgPT09IGZhbHNlKSB7XG4gICAgICAgICAgcmVqZWN0KFwi6K+35rGC5qih5Z6L5paH5Lu25aSx6LSl77yaXCIgKyBpZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobW9kZWxEYXRhICE9IG51bGwpIHtcblxuICAgICAgICAgIGlmKGlzUmVwbGFjZSkge1xuICAgICAgICAgICAgdGhpcy5kaXNwb3NlQWxsUmVuZGVyT2JqZWN0cygpO1xuICAgICAgICAgICAgdGhpcy5yZXNldCgpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxldCByZW5kZXJPYmplY3QgPSB0aGlzLnByb2Nlc3MucGVyc2lzdGVuY2VNYW5hZ2VyLm9wZW4obW9kZWxEYXRhKTtcbiAgICAgICAgICB0aGlzLnByb2Nlc3MucmVuZGVyT2JqZWN0ID0gcmVuZGVyT2JqZWN0O1xuICAgICAgICAgIHRoaXMucmVuZGVyT2JqZWN0ID0gcmVuZGVyT2JqZWN0O1xuICAgICAgICAgIHJlbmRlck9iamVjdC52aXNpYmxlID0gdHJ1ZTtcblxuICAgICAgICAgIHRoaXMucHJvY2Vzcy5wZXJzaXN0ZW5jZU1hbmFnZXIubG9hZE1vZGVscygpO1xuICAgICAgICAgIC8vIHRoaXMucHJvY2Vzcy5wZXJzaXN0ZW5jZU1hbmFnZXIubW9kZWxMb2FkZWQuYWRkKHRoaXMub25Nb2RlbExvYWRlZCk7XG4gICAgICAgICAgdGhpcy5vbk1vZGVsTG9hZGVkKCk7XG4gICAgICAgICAgcmVzb2x2ZShyZW5kZXJPYmplY3QpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgb25Nb2RlbExvYWRlZCgpIHtcbiAgICB0aGlzLnByb2Nlc3MucmVuZGVyT2JqZWN0LnNlZ21lbnQuY29tcHV0ZUJvdW5kaW5nQm94KCk7XG4gICAgdGhpcy5zZXRWaWV3TW9kZShMb25nYW4uVmlld01vZGUuSXNvLCB0cnVlKTtcbiAgICAvLyB0aGlzLm9wdGlvbnMuaXNTaG93TG9hZGluZyA9IGZhbHNlO1xuICAgIC8vIGNvbnNvbGUubG9nKFwibG9hZGluZyBmYWxzZVwiKTtcbiAgfVxuXG4gIGRpc3Bvc2VBbGxSZW5kZXJPYmplY3RzKCkge1xuICAgIGxldCBwcm9jZXNzID0gdGhpcy5wcm9jZXNzO1xuICAgIGxldCByb3MgPSBwcm9jZXNzLnJlbmRlck9iamVjdHM7XG4gICAgcm9zLmZvckVhY2goKGtleSwgdmFsdWUpPT57XG4gICAgICB2YWx1ZS5kZWxldGUoKTtcbiAgICB9KVxuXG4gICAgY29uc29sZS5sb2coXCJjbGVhciBhbGwgcmVuZGVyT2JqZWN0cy0tLWNvdW50OlwiLCB0aGlzLnByb2Nlc3MucmVuZGVyT2JqZWN0cy5jb3VudCgpKTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBbUNBO0FBQUE7QUFxREE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUZBO0FBTUE7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUdBO0FBQ0E7QUFFQTtBQUNBOztBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUVBO0FBRUE7QUFFQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUVBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQVdBO0FBU0E7QUFHQTs7QUFFQTtBQUVBO0FBR0E7QUFHQTs7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBTUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUVBOztBQUVBO0FBQ0E7QUFFQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFJQTtBQUNBOztBQUlBO0FBQ0E7QUFJQTtBQUNBOztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFJQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7OztBQUlBO0FBQ0E7QUFFQTtBQUFBO0FBQ0E7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUdBO0FBRUE7QUFDQTtBQUlBO0FBRUE7QUFNQTtBQUNBO0FBQ0E7QUFFQTtBQUlBO0FBQ0E7QUFFQTs7QUFJQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBT0E7QUFDQTtBQUNBOztBQUdBO0FBQ0E7QUFDQTs7QUFHQTtBQUlBO0FBRUE7O0FBSUE7QUFFQTtBQUNBO0FBR0E7QUFDQTtBQU9BO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBRUE7QUFJQTtBQUVBOztBQUdBO0FBQ0E7QUFFQTtBQUNBOztBQUVBO0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBOzs7QUFHQTtBQUVBO0FBQ0E7QUFJQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUdBO0FBQ0E7O0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7O0FBR0E7QUFDQTtBQUNBOzs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7Ozs7O0FBS0E7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTs7QUFFQTtBQUNBO0FBRUE7QUFVQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQVNBO0FBQUE7QUFFQTtBQUFBO0FBQUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUdBO0FBRUE7QUFDQTtBQUNBOztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBOztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFBQTtBQXZ5QkE7O0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./packages/caeDesign/src/gsDevFx/viewer.ts\n");
|
|
5569
5569
|
|
|
5570
5570
|
/***/ }),
|
|
5571
5571
|
|
|
@@ -5730,7 +5730,7 @@ eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPAC
|
|
|
5730
5730
|
/*! no static exports found */
|
|
5731
5731
|
/***/ (function(module, exports, __webpack_require__) {
|
|
5732
5732
|
|
|
5733
|
-
eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__, exports, __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\"), __webpack_require__(/*! ../../../../gsDevFx/operators/cameraMouse */ \"./packages/caeDesign/src/gsDevFx/operators/cameraMouse.ts\"), __webpack_require__(/*! ../../../../gsDevFx/operators/cAEObjectPreSelector */ \"./packages/caeDesign/src/gsDevFx/operators/cAEObjectPreSelector.ts\"), __webpack_require__(/*! ../../../../gsDevFx/operators/caeObjectSelector */ \"./packages/caeDesign/src/gsDevFx/operators/caeObjectSelector.ts\"), __webpack_require__(/*! ../../../../gsDevFx/commands/commandSelect */ \"./packages/caeDesign/src/gsDevFx/commands/commandSelect.ts\"), __webpack_require__(/*! ../../commandComponent */ \"./packages/caeDesign/src/viewerWrapper/commands/commandComponent.ts\"), __webpack_require__(/*! ./distortionConfig */ \"./packages/caeDesign/src/viewerWrapper/commands/aftertreatment/distortion/distortionConfig.ts\"), __webpack_require__(/*! gs-ceec-design */ \"./packages/ceecDesign/src/index.ts\"), __webpack_require__(/*! ../../../../gsDevFx/objects/caeObjects/memberObject */ \"./packages/caeDesign/src/gsDevFx/objects/caeObjects/memberObject.ts\"), __webpack_require__(/*! ../../../../store */ \"./packages/caeDesign/src/store/index.ts\"), __webpack_require__(/*! gs-ceec-design */ \"./packages/ceecDesign/src/index.ts\"), __webpack_require__(/*! gs-bim-air */ \"./node_modules/gs-bim-air/lib/BimAir.umd.min.js\"), __webpack_require__(/*! gs-ceec-design */ \"./packages/ceecDesign/src/index.ts\"), __webpack_require__(/*! element-ui */ \"./node_modules/element-ui/lib/element-ui.common.js\"), __webpack_require__(/*! ../../../../gsDevFx/managers/interfaceManagers/commonInterfaceManager */ \"./packages/caeDesign/src/gsDevFx/managers/interfaceManagers/commonInterfaceManager.ts\")], __WEBPACK_AMD_DEFINE_RESULT__ = (function (require, exports, tslib_1, cameraMouse_1, cAEObjectPreSelector_1, caeObjectSelector_1, commandSelect_1, commandComponent_1, distortionConfig_1, gs_ceec_design_1, memberObject_1, store_1, gs_ceec_design_2, gs_bim_air_1, gs_ceec_design_3, element_ui_1, commonInterfaceManager_1) {\n \"use strict\";\n\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n distortionConfig_1 = tslib_1.__importDefault(distortionConfig_1);\n store_1 = tslib_1.__importDefault(store_1);\n var CommandDistortion = function (_super) {\n tslib_1.__extends(CommandDistortion, _super);\n function CommandDistortion() {\n var _this = _super.call(this) || this;\n _this.typeName = \"CommandDistortion\";\n _this.loadConditions = new Array();\n _this.postJointResult = null;\n _this._group = null;\n _this.labelJoints = new Array();\n _this.labelStrings = new Array();\n _this.resultLabel = new Array();\n _this.resultLabelDic = {};\n _this.labelColor = \"#ffffff\";\n _this.xPixelOffset = 1;\n _this.yPixelOffset = 15;\n _this.joints = new Array();\n _this.members = new Array();\n _this.plates = new Array();\n return _this;\n }\n CommandDistortion.prototype.begin = function () {\n var _this = this;\n this.changeOperators();\n console.log(\"CommandDistortion\");\n this.config = new distortionConfig_1.default();\n this.config.show();\n var postInterfaceManager = this.viewer.postInterfaceManager;\n if (postInterfaceManager.getFinish_distortion) {\n if (postInterfaceManager.distortion) {\n this.dataRequested();\n } else {\n element_ui_1.Message.info(\"R_POSTJOINTDISPLACEMENTRESULTS表不存在,请检查DB文件\");\n return;\n }\n } else {\n postInterfaceManager.tip_distortion = true;\n postInterfaceManager.requested_distortion = function () {\n _this.dataRequested();\n };\n if (!postInterfaceManager.message_distortion) {\n postInterfaceManager.message_distortion = element_ui_1.Message.info({\n message: \"结构变形仍在请求DB数据,请等待请求完成.\",\n duration: 0,\n showClose: true\n });\n }\n }\n var self = this;\n this.viewer.sceneCameraChanged.add(function () {\n for (var i = 0; i < self.labelJoints.length; i++) {\n self.drawSvg(_this.labelJoints[i], _this.labelStrings[i]);\n }\n });\n };\n CommandDistortion.prototype.restore = function () {\n this.changeOperators();\n this.config.show();\n };\n CommandDistortion.prototype.changeOperators = function () {\n var _this = this;\n this.viewer.selectionManager.clearAllSelectionAndHighlight();\n this.viewer.updateDisplay();\n this.viewer.operatorManager.clear();\n this.viewer.operatorManager.add(new cameraMouse_1.CameraMouse());\n this.preSelector = new cAEObjectPreSelector_1.CAEObjectPreSelector();\n this.viewer.operatorManager.add(this.preSelector);\n this.caeObjectSelector = new caeObjectSelector_1.CAEObjectSelector();\n this.viewer.operatorManager.add(this.caeObjectSelector);\n this.caeObjectSelector.lButtonUp.add(function () {\n setTimeout(function () {\n _this.updatePanel();\n }, 0);\n });\n };\n CommandDistortion.prototype.end = function () {\n var postInterfaceManager = this.viewer.postInterfaceManager;\n if (postInterfaceManager.message_distortion) {\n postInterfaceManager.message_distortion.close();\n postInterfaceManager.message_distortion = null;\n }\n this.resetScene();\n this.config.hide();\n _super.prototype.end.call(this);\n this.viewer.selectionManager.clearAllSelectionAndHighlight();\n this.viewer.updateDisplay();\n store_1.default.commit(\"structureTree/updateTreeData\", [this.viewer.structureTreeManager.rootNode]);\n var commandSelect = new commandSelect_1.CommandSelect();\n this.process.commandManager.execute(commandSelect);\n };\n CommandDistortion.prototype.commandOk = function () {\n var _this = this;\n var postInterfaceManager = this.viewer.postInterfaceManager;\n if (!postInterfaceManager.getFinish_distortion) {\n postInterfaceManager.tip_distortion = true;\n element_ui_1.Message.info({\n message: \"结构变形仍在请求DB数据,请等待请求完成.\"\n });\n return;\n }\n var data = this.config.properties.items[0].data;\n var factor = data.factor.value;\n if (!factor || !Number(factor)) {\n data.tip.value = 1;\n console.log(\"tip: 1-Please enter a value.\");\n return;\n }\n if (Number(factor) <= 0 || Number(factor) > 10000) {\n data.tip.value = 2;\n console.log(\"tip: 2-Factor must be greater than 0 and less than or equal to 100.\");\n return;\n }\n var loadConditionName = data.loadConditionName.value;\n if (this.loadConditions.indexOf(loadConditionName) === -1) {\n element_ui_1.Message.info(\"DB中没有工况:\" + loadConditionName + \"的数据\");\n data.tip.value = 4;\n return;\n }\n this.clearSvg();\n data.tip.value = 0;\n console.log(\"tip: 0-Results have been displayed.\");\n var aftertreatmentRO = this.viewer.process.findRenderObjectByName(\"后处理计算结果\");\n var distortionRO = this.viewer.process.findCaeObjectByNameInChildObject(aftertreatmentRO, \"结构变形\");\n if (distortionRO) {\n this.process.removeRenderObject(distortionRO);\n }\n console.log(\"结构变形\");\n this.viewer.commonInterfaceManager.colorSwitch(commonInterfaceManager_1.SwitchColorDivide.Cancel, false);\n postInterfaceManager.resetOhterPostResult();\n this.viewer.selectionManager.clearAllSelectionAndHighlight();\n distortionRO = new gs_ceec_design_1.DesignBaseObject();\n distortionRO.name = \"结构变形\";\n this.process.addRenderObject(aftertreatmentRO, distortionRO);\n var jointOffsets = this.postJointResult[loadConditionName];\n var joints = new Array();\n var offsets = new Array();\n var labelStrings = new Array();\n var newRotatePositions = new Array();\n for (var i = 0; i < jointOffsets.length; i++) {\n var jointID = jointOffsets[i].JointID;\n var joint = this.viewer.process.findRenderObjectByName(jointID);\n var xOffset = Number(jointOffsets[i].DeflectionX);\n var yOffset = Number(jointOffsets[i].DeflectionY);\n var zOffset = Number(jointOffsets[i].DeflectionZ);\n var xRotate = Number(jointOffsets[i].RotationX);\n var yRotate = Number(jointOffsets[i].RotationY);\n var zRotate = Number(jointOffsets[i].RotationZ);\n if (joint) {\n joints.push(joint);\n offsets.push([xOffset, yOffset, zOffset]);\n }\n switch (data.distortionParameter.value) {\n case \"0\":\n labelStrings.push(xOffset.toFixed(3));\n break;\n case \"1\":\n labelStrings.push(yOffset.toFixed(3));\n break;\n case \"2\":\n labelStrings.push(zOffset.toFixed(3));\n break;\n case \"3\":\n var sum = Math.sqrt(xOffset * xOffset + yOffset * yOffset + zOffset * zOffset);\n labelStrings.push(sum.toFixed(3));\n break;\n case \"4\":\n labelStrings.push(xRotate.toFixed(3));\n break;\n case \"5\":\n labelStrings.push(yRotate.toFixed(3));\n break;\n case \"6\":\n labelStrings.push(zRotate.toFixed(3));\n break;\n }\n }\n this.distortionOffset(joints, offsets, distortionRO, labelStrings);\n setTimeout(function () {\n var originShape = data.originShape.value;\n switch (originShape) {\n case \"1\":\n _this.clearInvisibleShape();\n _this.originModelChangeTransparency(1);\n break;\n case \"2\":\n _this.clearInvisibleShape();\n _this.originModelChangeTransparency(0.5);\n break;\n case \"3\":\n _this.invisibleShape();\n break;\n }\n _this.viewer.viewInterfaceManager.memberLineView(!_this.viewer.viewInterfaceManager.memberIsLine, false);\n _this.viewer.viewInterfaceManager.memberLineView(!_this.viewer.viewInterfaceManager.memberIsLine, false);\n _this.viewer.updateDisplay();\n }, 0);\n postInterfaceManager.active_distortion = true;\n store_1.default.commit(\"structureTree/updateTreeData\", [this.viewer.structureTreeManager.rootNode]);\n store_1.default.commit(\"setMsg\", \"Defl Shape LC:\" + loadConditionName);\n };\n CommandDistortion.prototype.setMaxDeflected = function () {\n var e_1, _a;\n var data = this.config.properties.items[0].data;\n if (this.postJointResult) {\n var maxDeflected = 0;\n var maxDeflected_item = \"\";\n try {\n for (var _b = tslib_1.__values(Object.keys(this.postJointResult)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var item = _c.value;\n var elementArr = this.postJointResult[item];\n var maxValue = 0;\n for (var index = 0; index < elementArr.length; index++) {\n var element = elementArr[index];\n var value = Math.sqrt(Math.pow(element.DeflectionX, 2) + Math.pow(element.DeflectionY, 2) + Math.pow(element.DeflectionZ, 2));\n if (value > maxValue) {\n maxValue = value;\n }\n }\n if (maxValue > maxDeflected) {\n maxDeflected = maxValue;\n maxDeflected_item = item;\n }\n }\n } catch (e_1_1) {\n e_1 = {\n error: e_1_1\n };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n data.loadConditionName.value = maxDeflected_item;\n }\n };\n CommandDistortion.prototype.updatePanel = function () {};\n CommandDistortion.prototype.getPoisitionByRotate = function (joint, p0, p1, rad) {\n var axis = gs_bim_air_1.Longan.Point.subtract(p1, p0);\n gs_bim_air_1.Longan.Vector.normalize(axis);\n var matrix = gs_bim_air_1.Longan.Matrix4.rotateByAxis(p0, axis, rad);\n var position = new Float32Array(joint.position);\n position = gs_bim_air_1.Longan.Matrix4.multiplyPoint(matrix, position);\n return position;\n };\n CommandDistortion.prototype.dataRequested = function () {\n var e_2, _a, e_3, _b;\n var postInterfaceManager = this.viewer.postInterfaceManager;\n this.postJointResult = postInterfaceManager.distortion;\n var counter = 0;\n try {\n for (var _c = tslib_1.__values(Object.keys(this.postJointResult)), _d = _c.next(); !_d.done; _d = _c.next()) {\n var i = _d.value;\n counter++;\n }\n } catch (e_2_1) {\n e_2 = {\n error: e_2_1\n };\n } finally {\n try {\n if (_d && !_d.done && (_a = _c.return)) _a.call(_c);\n } finally {\n if (e_2) throw e_2.error;\n }\n }\n if (counter === 0) {\n element_ui_1.Message.info(\"查询R_POSTJOINTDISPLACEMENTRESULTS表数据为空,请检查DB文件\");\n var data = this.config.properties.items[0].data;\n data.tip.value = 3;\n return;\n }\n this.config.properties.items[0].data.loadConditionName.selectOptions.selections = [];\n try {\n for (var _e = tslib_1.__values(Object.keys(this.postJointResult)), _f = _e.next(); !_f.done; _f = _e.next()) {\n var i = _f.value;\n if (this.postJointResult[i][0]) {\n var loadConditionName = this.postJointResult[i][0].LoadConditionName;\n this.config.properties.items[0].data.loadConditionName.selectOptions.selections.push({\n label: loadConditionName,\n value: loadConditionName\n });\n this.loadConditions.push(loadConditionName);\n }\n }\n } catch (e_3_1) {\n e_3 = {\n error: e_3_1\n };\n } finally {\n try {\n if (_f && !_f.done && (_b = _e.return)) _b.call(_e);\n } finally {\n if (e_3) throw e_3.error;\n }\n }\n };\n CommandDistortion.prototype.originModelChangeTransparency = function (transparency) {\n var members = this.process.caeRenderObjectTreeManager.memberNode;\n console.log(\"memberNode length:\", members.childObjects.length);\n for (var i = 0; i < members.childObjects.length; i++) {\n var member = members.childObjects[i];\n if (member) {\n if (transparency === 1) {\n member.isDottedLine = false;\n } else {\n member.isDottedLine = true;\n }\n if (member.faceColor) {\n member.faceColor[3] = transparency;\n } else {\n member.segment.color.faceTransparency = transparency;\n }\n member.setNeedUpdate();\n }\n }\n };\n CommandDistortion.prototype.invisibleShape = function () {\n var _this = this;\n var viewer = this.viewer;\n var joints = this.process.caeRenderObjectTreeManager.jointNode;\n joints.childObjects.forEach(function (ro) {\n var iro = viewer.findInstanceObject(ro);\n if (iro) {\n _this.joints.push(ro);\n iro.visible = false;\n }\n });\n var members = this.process.caeRenderObjectTreeManager.memberNode;\n members.childObjects.forEach(function (ro) {\n var iro = viewer.findInstanceObject(ro);\n if (iro) {\n _this.members.push(ro);\n iro.visible = false;\n }\n });\n var plates = this.process.caeRenderObjectTreeManager.plateNode;\n plates.childObjects.forEach(function (ro) {\n var iro = viewer.findInstanceObject(ro);\n if (iro) {\n _this.plates.push(ro);\n iro.visible = false;\n }\n });\n };\n CommandDistortion.prototype.clearInvisibleShape = function () {\n var viewer = this.viewer;\n var joints = this.joints;\n joints.forEach(function (ro) {\n var iro = viewer.findInstanceObject(ro);\n if (iro) {\n iro.visible = true;\n }\n });\n var members = this.members;\n members.forEach(function (ro) {\n var iro = viewer.findInstanceObject(ro);\n if (iro) {\n iro.visible = true;\n }\n });\n var plates = this.plates;\n plates.forEach(function (ro) {\n var iro = viewer.findInstanceObject(ro);\n if (iro) {\n iro.visible = true;\n }\n });\n };\n CommandDistortion.prototype.distortionOffset = function (joints, offsets, distortionRO, labelStrings) {\n this.labelStrings = new Array();\n this.labelJoints = new Array();\n var jointIdMapCloneObj = {};\n var addedObjects = new Array();\n var data = this.config.properties.items[0].data;\n var factor = data.factor.value ? data.factor.value : 1;\n for (var i = 0; i < joints.length; i++) {\n var joint = joints[i];\n var offset = offsets[i];\n for (var i_1 = 0; i_1 < offset.length; i_1++) {\n offset[i_1] *= factor;\n }\n var cloneObj = this.viewer.process.cloneManager.cloneObject(joint);\n var newPosition = [0, 0, 0];\n newPosition[0] = cloneObj.position[0] + offset[0] / 100;\n newPosition[1] = cloneObj.position[1] + offset[1] / 100;\n newPosition[2] = cloneObj.position[2] + offset[2] / 100;\n cloneObj.position = newPosition;\n cloneObj.businessState = gs_ceec_design_2.BusinessState.Living;\n cloneObj.setNeedUpdate();\n jointIdMapCloneObj[joint.id] = cloneObj;\n this.process.addRenderObject(distortionRO, cloneObj);\n this.labelJoints.push(cloneObj);\n this.labelStrings.push(labelStrings[i]);\n this.initDrawSvg(cloneObj, labelStrings[i]);\n }\n var memberNode = this.process.caeRenderObjectTreeManager.memberNode;\n for (var i = 0; i < memberNode.childObjects.length; i++) {\n var member = memberNode.childObjects[i];\n var cloneObj = this.viewer.process.cloneManager.cloneObject(member);\n cloneObj.start = jointIdMapCloneObj[cloneObj.start.id];\n cloneObj.end = jointIdMapCloneObj[cloneObj.end.id];\n cloneObj.businessState = gs_ceec_design_2.BusinessState.Living;\n if (cloneObj.start && cloneObj.end) {\n addedObjects.push(cloneObj);\n }\n }\n var plateNode = this.process.caeRenderObjectTreeManager.plateNode;\n for (var i = 0; i < plateNode.childObjects.length; i++) {\n var plate = plateNode.childObjects[i];\n var cloneObj = this.viewer.process.cloneManager.cloneObject(plate);\n var flag = true;\n for (var j = 0; j < cloneObj.joints.length; j++) {\n cloneObj.joints[j] = jointIdMapCloneObj[cloneObj.joints[j].id];\n if (!cloneObj.joints[j]) {\n flag = false;\n }\n }\n cloneObj.businessState = gs_ceec_design_2.BusinessState.Living;\n if (flag) {\n addedObjects.push(cloneObj);\n }\n }\n var distortionShape = data.distortionShape.value;\n for (var i = 0; i < addedObjects.length; i++) {\n var obj = addedObjects[i];\n this.process.addRenderObject(distortionRO, obj);\n obj.setNeedUpdate();\n if (obj instanceof memberObject_1.MemberObject) {\n if (distortionShape === \"1\") {\n this.distortionShapeChangeTransparency(obj, 1);\n obj.isDottedLine = false;\n } else if (distortionShape === \"2\") {\n this.distortionShapeChangeTransparency(obj, 0.5);\n obj.isDottedLine = true;\n }\n }\n }\n };\n CommandDistortion.prototype.clearSvg = function () {\n if (this.resultLabel) {\n this.resultLabel.forEach(function (item) {\n item.clear();\n item = null;\n });\n this.resultLabel = new Array();\n }\n this.labelJoints = new Array();\n this.labelStrings = new Array();\n this.resultLabelDic = {};\n };\n CommandDistortion.prototype.initDrawSvg = function (jointObject, labelData) {\n var position = jointObject.position;\n var curretPos = position;\n var point = this.viewer.worldPointToPixelPoint([curretPos])[0];\n var id = jointObject.name;\n if (this.resultLabelDic[id]) {\n this.resultLabelDic[id].move(point[0] + this.xPixelOffset, point[1] + this.yPixelOffset);\n this.resultLabelDic[id].attr(\"font-size\", gs_ceec_design_1.DesignBaseObject.fontSize);\n } else {\n var draw = gs_ceec_design_3.SvgDraw.getInstance(this.viewer.container.id).draw;\n this._group = draw.group();\n var resultText = draw.text(Number.isNaN(Number(labelData)) ? labelData : Number(labelData).toFixed(3)).font({\n fill: this.labelColor\n }).attr(\"font-size\", gs_ceec_design_1.DesignBaseObject.fontSize).move(point[0] + this.xPixelOffset, point[1] + this.yPixelOffset);\n this.resultLabel.push(resultText);\n this.resultLabelDic[id] = resultText;\n this._group.add(resultText);\n }\n };\n CommandDistortion.prototype.drawSvg = function (jointObject, labelData) {\n var position = jointObject.position;\n var curretPos = position;\n var point = this.viewer.worldPointToPixelPoint([curretPos])[0];\n var id = jointObject.name;\n if (this.resultLabelDic[id]) {\n this.resultLabelDic[id].move(point[0] + this.xPixelOffset, point[1] + this.yPixelOffset);\n this.resultLabelDic[id].attr(\"font-size\", gs_ceec_design_1.DesignBaseObject.fontSize);\n } else {\n var draw = gs_ceec_design_3.SvgDraw.getInstance(this.viewer.container.id).draw;\n this._group = draw.group();\n var resultText = draw.text(Number.isNaN(Number(labelData)) ? labelData : Number(labelData).toFixed(3)).font({\n fill: this.labelColor\n }).attr(\"font-size\", gs_ceec_design_1.DesignBaseObject.fontSize).move(point[0] + this.xPixelOffset, point[1] + this.yPixelOffset);\n this.resultLabel.push(resultText);\n this.resultLabelDic[id] = resultText;\n this._group.add(resultText);\n }\n };\n CommandDistortion.prototype.distortionPositions = function (joints, newPositions, distortionRO) {\n var jointIdMapCloneObj = {};\n var addedObjects = new Array();\n var data = this.config.properties.items[0].data;\n for (var i = 0; i < joints.length; i++) {\n var joint = joints[i];\n var cloneObj = this.viewer.process.cloneManager.cloneObject(joint);\n cloneObj.position = newPositions[i];\n cloneObj.businessState = gs_ceec_design_2.BusinessState.Living;\n cloneObj.setNeedUpdate();\n jointIdMapCloneObj[joint.id] = cloneObj;\n this.process.addRenderObject(distortionRO, cloneObj);\n }\n var memberNode = this.process.caeRenderObjectTreeManager.memberNode;\n for (var i = 0; i < memberNode.childObjects.length; i++) {\n var member = memberNode.childObjects[i];\n var cloneObj = this.viewer.process.cloneManager.cloneObject(member);\n cloneObj.start = jointIdMapCloneObj[cloneObj.start.id];\n cloneObj.end = jointIdMapCloneObj[cloneObj.end.id];\n cloneObj.businessState = gs_ceec_design_2.BusinessState.Living;\n if (cloneObj.start && cloneObj.end) {\n addedObjects.push(cloneObj);\n }\n }\n var plateNode = this.process.caeRenderObjectTreeManager.plateNode;\n for (var i = 0; i < plateNode.childObjects.length; i++) {\n var plate = plateNode.childObjects[i];\n var cloneObj = this.viewer.process.cloneManager.cloneObject(plate);\n var flag = true;\n for (var j = 0; j < cloneObj.joints.length; j++) {\n cloneObj.joints[j] = jointIdMapCloneObj[cloneObj.joints[j].id];\n if (!cloneObj.joints[j]) {\n flag = false;\n }\n }\n cloneObj.businessState = gs_ceec_design_2.BusinessState.Living;\n if (flag) {\n addedObjects.push(cloneObj);\n }\n }\n var distortionShape = data.distortionShape.value;\n for (var i = 0; i < addedObjects.length; i++) {\n var obj = addedObjects[i];\n this.process.addRenderObject(distortionRO, obj);\n obj.setNeedUpdate();\n if (obj instanceof memberObject_1.MemberObject) {\n if (distortionShape === \"1\") {\n this.distortionShapeChangeTransparency(obj, 1);\n obj.isDottedLine = false;\n } else if (distortionShape === \"2\") {\n this.distortionShapeChangeTransparency(obj, 0.5);\n obj.isDottedLine = true;\n }\n }\n }\n };\n CommandDistortion.prototype.distortionShapeChangeTransparency = function (member, transparency) {\n if (member) {\n if (member.faceColor) {\n member.faceColor[3] = transparency;\n } else {\n member.segment.color.faceTransparency = transparency;\n }\n }\n };\n CommandDistortion.prototype.resetScene = function () {\n var _this = this;\n this.clearSvg();\n this.clearInvisibleShape();\n var aftertreatmentRO = this.viewer.process.findRenderObjectByName(\"后处理计算结果\");\n var distortionRO = this.viewer.process.findCaeObjectByNameInChildObject(aftertreatmentRO, \"结构变形\");\n if (distortionRO) {\n distortionRO.childObjects.forEach(function (item) {\n item.delete();\n });\n distortionRO.delete();\n }\n store_1.default.commit(\"setMsg\", null);\n setTimeout(function () {\n _this.originModelChangeTransparency(1);\n }, 0);\n var postInterfaceManager = this.viewer.postInterfaceManager;\n postInterfaceManager.active_distortion = false;\n };\n return CommandDistortion;\n }(commandComponent_1.CommandComponent);\n exports.default = CommandDistortion;\n}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9wYWNrYWdlcy9jYWVEZXNpZ24vc3JjL3ZpZXdlcldyYXBwZXIvY29tbWFuZHMvYWZ0ZXJ0cmVhdG1lbnQvZGlzdG9ydGlvbi9jb21tYW5kRGlzdG9ydGlvbi50cy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1tuYW1lXS8uL3BhY2thZ2VzL2NhZURlc2lnbi9zcmMvdmlld2VyV3JhcHBlci9jb21tYW5kcy9hZnRlcnRyZWF0bWVudC9kaXN0b3J0aW9uL2NvbW1hbmREaXN0b3J0aW9uLnRzP2YyOTQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2FtZXJhTW91c2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vZ3NEZXZGeC9vcGVyYXRvcnMvY2FtZXJhTW91c2VcIjtcclxuaW1wb3J0IHsgQ0FFT2JqZWN0UHJlU2VsZWN0b3IgfSBmcm9tIFwiLi4vLi4vLi4vLi4vZ3NEZXZGeC9vcGVyYXRvcnMvY0FFT2JqZWN0UHJlU2VsZWN0b3JcIjtcclxuaW1wb3J0IHsgQ0FFT2JqZWN0U2VsZWN0b3IgfSBmcm9tIFwiLi4vLi4vLi4vLi4vZ3NEZXZGeC9vcGVyYXRvcnMvY2FlT2JqZWN0U2VsZWN0b3JcIjtcclxuaW1wb3J0IHsgQ29tbWFuZFNlbGVjdCB9IGZyb20gXCIuLi8uLi8uLi8uLi9nc0RldkZ4L2NvbW1hbmRzL2NvbW1hbmRTZWxlY3RcIjtcclxuaW1wb3J0IHsgQ29tbWFuZENvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9jb21tYW5kQ29tcG9uZW50XCI7XHJcbmltcG9ydCBEaXN0b3J0aW9uQ29uZmlnIGZyb20gXCIuL2Rpc3RvcnRpb25Db25maWdcIjtcclxuaW1wb3J0IHsgSm9pbnRPYmplY3QgfSBmcm9tIFwiLi4vLi4vLi4vLi4vZ3NEZXZGeC9vYmplY3RzL2NhZU9iamVjdHMvam9pbnRPYmplY3RcIjtcclxuaW1wb3J0IHsgRGVzaWduQmFzZU9iamVjdCB9IGZyb20gXCJncy1jZWVjLWRlc2lnblwiO1xyXG5pbXBvcnQgeyBNZW1iZXJPYmplY3QgfSBmcm9tIFwiLi4vLi4vLi4vLi4vZ3NEZXZGeC9vYmplY3RzL2NhZU9iamVjdHMvbWVtYmVyT2JqZWN0XCI7XHJcbmltcG9ydCB7IFBsYXRlT2JqZWN0IH0gZnJvbSBcIi4uLy4uLy4uLy4uL2dzRGV2Rngvb2JqZWN0cy9jYWVPYmplY3RzL3BsYXRlT2JqZWN0XCI7XHJcbmltcG9ydCBzdG9yZSBmcm9tIFwiLi4vLi4vLi4vLi4vc3RvcmVcIjtcclxuaW1wb3J0IHsgQnVzaW5lc3NTdGF0ZSB9IGZyb20gXCJncy1jZWVjLWRlc2lnblwiO1xyXG5pbXBvcnQgeyBMb25nYW4gfSBmcm9tIFwiZ3MtYmltLWFpclwiO1xyXG5pbXBvcnQgeyBHIH0gZnJvbSBcIkBzdmdkb3Rqcy9zdmcuanNcIjtcclxuaW1wb3J0IHsgU3ZnRHJhdyB9IGZyb20gXCJncy1jZWVjLWRlc2lnblwiO1xyXG5pbXBvcnQgeyBNZXNzYWdlIH0gZnJvbSBcImVsZW1lbnQtdWlcIjtcclxuaW1wb3J0IHsgU3dpdGNoQ29sb3JEaXZpZGUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vZ3NEZXZGeC9tYW5hZ2Vycy9pbnRlcmZhY2VNYW5hZ2Vycy9jb21tb25JbnRlcmZhY2VNYW5hZ2VyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb21tYW5kRGlzdG9ydGlvbiBleHRlbmRzIENvbW1hbmRDb21wb25lbnQge1xyXG4gIHR5cGVOYW1lID0gXCJDb21tYW5kRGlzdG9ydGlvblwiO1xyXG5cclxuICBjb25maWc6IERpc3RvcnRpb25Db25maWc7XHJcbiAgcHJlU2VsZWN0b3I6IENBRU9iamVjdFByZVNlbGVjdG9yO1xyXG4gIGNhZU9iamVjdFNlbGVjdG9yOiBDQUVPYmplY3RTZWxlY3RvcjtcclxuXHJcbiAgLy8gbG9hZENvbmRpdGlvblJPOiBMb2FkQ29uZGl0aW9uT2JqZWN0ID0gbnVsbDtcclxuICAvLyBsb2FkR3JvdXBSTzogTG9hZEdyb3VwT2JqZWN0ID0gbnVsbDtcclxuICAvKipcclxuICAgKiDlt6XlhrXlkI3liJfooaguXHJcbiAgICovXHJcbiAgbG9hZENvbmRpdGlvbnM6IHN0cmluZ1tdID0gbmV3IEFycmF5PHN0cmluZz4oKTtcclxuICAvLyDmn6Xor6Lnu5PmnpxcclxuICBwb3N0Sm9pbnRSZXN1bHQgPSBudWxsO1xyXG5cclxuICBfZ3JvdXA6IEcgPSBudWxsO1xyXG4gIGxhYmVsSm9pbnRzID0gbmV3IEFycmF5PEpvaW50T2JqZWN0PigpO1xyXG4gIGxhYmVsU3RyaW5ncyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XHJcblxyXG4gIHJlc3VsdExhYmVsID0gbmV3IEFycmF5PGFueT4oKTtcclxuICByZXN1bHRMYWJlbERpYzogeyBbaWQ6IHN0cmluZ106IGFueSB9ID0ge307XHJcbiAgbGFiZWxDb2xvciA9IFwiI2ZmZmZmZlwiO1xyXG5cclxuICB4UGl4ZWxPZmZzZXQgPSAxO1xyXG4gIHlQaXhlbE9mZnNldCA9IDE1O1xyXG5cclxuICAvKipcclxuICAgKiDooqvpmpDol4/nmoTngrnliJfooahcclxuICAgKi9cclxuICBqb2ludHMgPSBuZXcgQXJyYXk8Sm9pbnRPYmplY3Q+KCk7XHJcbiAgLyoqXHJcbiAgICog6KKr6ZqQ6JeP55qE5p2G5Lu25YiX6KGoXHJcbiAgICovXHJcbiAgbWVtYmVycyA9IG5ldyBBcnJheTxNZW1iZXJPYmplY3Q+KCk7XHJcbiAgLyoqXHJcbiAgICog6KKr6ZqQ6JeP55qE5p2/5YiX6KGoXHJcbiAgICovXHJcbiAgcGxhdGVzID0gbmV3IEFycmF5PFBsYXRlT2JqZWN0PigpO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBiZWdpbigpOiB2b2lkIHtcclxuICAgIHRoaXMuY2hhbmdlT3BlcmF0b3JzKCk7XHJcblxyXG4gICAgY29uc29sZS5sb2coXCJDb21tYW5kRGlzdG9ydGlvblwiKTtcclxuICAgIHRoaXMuY29uZmlnID0gbmV3IERpc3RvcnRpb25Db25maWcoKTtcclxuICAgIHRoaXMuY29uZmlnLnNob3coKTtcclxuXHJcbiAgICBsZXQgcG9zdEludGVyZmFjZU1hbmFnZXIgPSB0aGlzLnZpZXdlci5wb3N0SW50ZXJmYWNlTWFuYWdlcjtcclxuICAgIGlmIChwb3N0SW50ZXJmYWNlTWFuYWdlci5nZXRGaW5pc2hfZGlzdG9ydGlvbikge1xyXG4gICAgICBpZiAocG9zdEludGVyZmFjZU1hbmFnZXIuZGlzdG9ydGlvbikge1xyXG4gICAgICAgIHRoaXMuZGF0YVJlcXVlc3RlZCgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIE1lc3NhZ2UuaW5mbyhcIlJfUE9TVEpPSU5URElTUExBQ0VNRU5UUkVTVUxUU+ihqOS4jeWtmOWcqO+8jOivt+ajgOafpURC5paH5Lu2XCIpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcG9zdEludGVyZmFjZU1hbmFnZXIudGlwX2Rpc3RvcnRpb24gPSB0cnVlO1xyXG4gICAgICBwb3N0SW50ZXJmYWNlTWFuYWdlci5yZXF1ZXN0ZWRfZGlzdG9ydGlvbiA9ICgpID0+IHtcclxuICAgICAgICB0aGlzLmRhdGFSZXF1ZXN0ZWQoKTtcclxuICAgICAgfTtcclxuICAgICAgaWYgKCFwb3N0SW50ZXJmYWNlTWFuYWdlci5tZXNzYWdlX2Rpc3RvcnRpb24pIHtcclxuICAgICAgICBwb3N0SW50ZXJmYWNlTWFuYWdlci5tZXNzYWdlX2Rpc3RvcnRpb24gPSBNZXNzYWdlLmluZm8oe1xyXG4gICAgICAgICAgbWVzc2FnZTogXCLnu5PmnoTlj5jlvaLku43lnKjor7fmsYJEQuaVsOaNru+8jOivt+etieW+heivt+axguWujOaIkC5cIixcclxuICAgICAgICAgIGR1cmF0aW9uOiAwLFxyXG4gICAgICAgICAgc2hvd0Nsb3NlOiB0cnVlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHNlbGYgPSB0aGlzO1xyXG4gICAgdGhpcy52aWV3ZXIuc2NlbmVDYW1lcmFDaGFuZ2VkLmFkZCgoKSA9PiB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VsZi5sYWJlbEpvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHNlbGYuZHJhd1N2Zyh0aGlzLmxhYmVsSm9pbnRzW2ldLCB0aGlzLmxhYmVsU3RyaW5nc1tpXSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcmVzdG9yZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuY2hhbmdlT3BlcmF0b3JzKCk7XHJcbiAgICB0aGlzLmNvbmZpZy5zaG93KCk7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VPcGVyYXRvcnMoKTogdm9pZCB7XHJcbiAgICAvLyDov5vlhaXlkb3ku6TliY3muIXnqbrpgInkuK3kuI7pq5jkuq4uXHJcbiAgICB0aGlzLnZpZXdlci5zZWxlY3Rpb25NYW5hZ2VyLmNsZWFyQWxsU2VsZWN0aW9uQW5kSGlnaGxpZ2h0KCk7XHJcbiAgICB0aGlzLnZpZXdlci51cGRhdGVEaXNwbGF5KCk7XHJcblxyXG4gICAgLy8g5riF56m65pON5L2c5ZmoLlxyXG4gICAgdGhpcy52aWV3ZXIub3BlcmF0b3JNYW5hZ2VyLmNsZWFyKCk7XHJcbiAgICAvLyDmt7vliqDmk43kvZzlmahcclxuICAgIHRoaXMudmlld2VyLm9wZXJhdG9yTWFuYWdlci5hZGQobmV3IENhbWVyYU1vdXNlKCkpO1xyXG5cclxuICAgIHRoaXMucHJlU2VsZWN0b3IgPSBuZXcgQ0FFT2JqZWN0UHJlU2VsZWN0b3IoKTtcclxuICAgIHRoaXMudmlld2VyLm9wZXJhdG9yTWFuYWdlci5hZGQodGhpcy5wcmVTZWxlY3Rvcik7XHJcblxyXG4gICAgdGhpcy5jYWVPYmplY3RTZWxlY3RvciA9IG5ldyBDQUVPYmplY3RTZWxlY3RvcigpO1xyXG4gICAgdGhpcy52aWV3ZXIub3BlcmF0b3JNYW5hZ2VyLmFkZCh0aGlzLmNhZU9iamVjdFNlbGVjdG9yKTtcclxuXHJcbiAgICB0aGlzLmNhZU9iamVjdFNlbGVjdG9yLmxCdXR0b25VcC5hZGQoKCkgPT4ge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVBhbmVsKCk7XHJcbiAgICAgIH0sIDApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBlbmQoKTogdm9pZCB7XHJcbiAgICBsZXQgcG9zdEludGVyZmFjZU1hbmFnZXIgPSB0aGlzLnZpZXdlci5wb3N0SW50ZXJmYWNlTWFuYWdlcjtcclxuICAgIGlmIChwb3N0SW50ZXJmYWNlTWFuYWdlci5tZXNzYWdlX2Rpc3RvcnRpb24pIHtcclxuICAgICAgcG9zdEludGVyZmFjZU1hbmFnZXIubWVzc2FnZV9kaXN0b3J0aW9uLmNsb3NlKCk7XHJcbiAgICAgIHBvc3RJbnRlcmZhY2VNYW5hZ2VyLm1lc3NhZ2VfZGlzdG9ydGlvbiA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZXNldFNjZW5lKCk7XHJcblxyXG4gICAgdGhpcy5jb25maWcuaGlkZSgpO1xyXG4gICAgc3VwZXIuZW5kKCk7XHJcbiAgICB0aGlzLnZpZXdlci5zZWxlY3Rpb25NYW5hZ2VyLmNsZWFyQWxsU2VsZWN0aW9uQW5kSGlnaGxpZ2h0KCk7XHJcbiAgICB0aGlzLnZpZXdlci51cGRhdGVEaXNwbGF5KCk7XHJcblxyXG4gICAgLy8g5pu05paw5bem5L6n57uT5p6E5qCRXHJcbiAgICBzdG9yZS5jb21taXQoXCJzdHJ1Y3R1cmVUcmVlL3VwZGF0ZVRyZWVEYXRhXCIsIFtcclxuICAgICAgdGhpcy52aWV3ZXIuc3RydWN0dXJlVHJlZU1hbmFnZXIucm9vdE5vZGUsXHJcbiAgICBdKTtcclxuXHJcbiAgICBsZXQgY29tbWFuZFNlbGVjdCA9IG5ldyBDb21tYW5kU2VsZWN0KCk7XHJcbiAgICB0aGlzLnByb2Nlc3MuY29tbWFuZE1hbmFnZXIuZXhlY3V0ZShjb21tYW5kU2VsZWN0KTtcclxuICB9XHJcblxyXG4gIGNvbW1hbmRPaygpOiB2b2lkIHtcclxuICAgIGxldCBwb3N0SW50ZXJmYWNlTWFuYWdlciA9IHRoaXMudmlld2VyLnBvc3RJbnRlcmZhY2VNYW5hZ2VyO1xyXG4gICAgaWYgKCFwb3N0SW50ZXJmYWNlTWFuYWdlci5nZXRGaW5pc2hfZGlzdG9ydGlvbikge1xyXG4gICAgICBwb3N0SW50ZXJmYWNlTWFuYWdlci50aXBfZGlzdG9ydGlvbiA9IHRydWU7XHJcbiAgICAgIE1lc3NhZ2UuaW5mbyh7IG1lc3NhZ2U6IFwi57uT5p6E5Y+Y5b2i5LuN5Zyo6K+35rGCRELmlbDmja7vvIzor7fnrYnlvoXor7fmsYLlrozmiJAuXCIgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZGF0YSA9IHRoaXMuY29uZmlnLnByb3BlcnRpZXMuaXRlbXNbMF0uZGF0YTtcclxuICAgIGxldCBmYWN0b3IgPSBkYXRhLmZhY3Rvci52YWx1ZTtcclxuICAgIC8vIHRpcFxyXG4gICAgaWYgKCFmYWN0b3IgfHwgIU51bWJlcihmYWN0b3IpKSB7XHJcbiAgICAgIGRhdGEudGlwLnZhbHVlID0gMTtcclxuICAgICAgY29uc29sZS5sb2coXCJ0aXA6IDEtUGxlYXNlIGVudGVyIGEgdmFsdWUuXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKE51bWJlcihmYWN0b3IpIDw9IDAgfHwgTnVtYmVyKGZhY3RvcikgPiAxMDAwMCkge1xyXG4gICAgICBkYXRhLnRpcC52YWx1ZSA9IDI7XHJcbiAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgIFwidGlwOiAyLUZhY3RvciBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMTAwLlwiXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgbG9hZENvbmRpdGlvbk5hbWUgPSBkYXRhLmxvYWRDb25kaXRpb25OYW1lLnZhbHVlO1xyXG4gICAgaWYgKHRoaXMubG9hZENvbmRpdGlvbnMuaW5kZXhPZihsb2FkQ29uZGl0aW9uTmFtZSkgPT09IC0xKSB7XHJcbiAgICAgIE1lc3NhZ2UuaW5mbyhcIkRC5Lit5rKh5pyJ5bel5Ya1OlwiICsgbG9hZENvbmRpdGlvbk5hbWUgKyBcIueahOaVsOaNrlwiKTtcclxuICAgICAgZGF0YS50aXAudmFsdWUgPSA0O1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jbGVhclN2ZygpO1xyXG4gICAgZGF0YS50aXAudmFsdWUgPSAwO1xyXG4gICAgY29uc29sZS5sb2coXCJ0aXA6IDAtUmVzdWx0cyBoYXZlIGJlZW4gZGlzcGxheWVkLlwiKTtcclxuXHJcbiAgICBsZXQgYWZ0ZXJ0cmVhdG1lbnRSTyA9IHRoaXMudmlld2VyLnByb2Nlc3MuZmluZFJlbmRlck9iamVjdEJ5TmFtZShcclxuICAgICAgXCLlkI7lpITnkIborqHnrpfnu5PmnpxcIlxyXG4gICAgKSBhcyBEZXNpZ25CYXNlT2JqZWN0O1xyXG4gICAgbGV0IGRpc3RvcnRpb25STyA9IHRoaXMudmlld2VyLnByb2Nlc3MuZmluZENhZU9iamVjdEJ5TmFtZUluQ2hpbGRPYmplY3QoXHJcbiAgICAgIGFmdGVydHJlYXRtZW50Uk8sXHJcbiAgICAgIFwi57uT5p6E5Y+Y5b2iXCJcclxuICAgICk7XHJcbiAgICBpZiAoZGlzdG9ydGlvblJPKSB7XHJcbiAgICAgIHRoaXMucHJvY2Vzcy5yZW1vdmVSZW5kZXJPYmplY3QoZGlzdG9ydGlvblJPKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZyhcIue7k+aehOWPmOW9olwiKTtcclxuICAgIC8vIOWPlua2iOWJjeWkhOeQhuWIhuiJsuaViOaenFxyXG4gICAgdGhpcy52aWV3ZXIuY29tbW9uSW50ZXJmYWNlTWFuYWdlci5jb2xvclN3aXRjaChTd2l0Y2hDb2xvckRpdmlkZS5DYW5jZWwsIGZhbHNlKTtcclxuICAgIC8vIOWPlua2iOWFtuS7luWQjuWkhOeQhuWIhuiJsuaViOaenC5cclxuICAgIHBvc3RJbnRlcmZhY2VNYW5hZ2VyLnJlc2V0T2h0ZXJQb3N0UmVzdWx0KCk7XHJcblxyXG5cclxuICAgIHRoaXMudmlld2VyLnNlbGVjdGlvbk1hbmFnZXIuY2xlYXJBbGxTZWxlY3Rpb25BbmRIaWdobGlnaHQoKTtcclxuXHJcbiAgICBkaXN0b3J0aW9uUk8gPSBuZXcgRGVzaWduQmFzZU9iamVjdCgpO1xyXG4gICAgZGlzdG9ydGlvblJPLm5hbWUgPSBcIue7k+aehOWPmOW9olwiO1xyXG4gICAgdGhpcy5wcm9jZXNzLmFkZFJlbmRlck9iamVjdChhZnRlcnRyZWF0bWVudFJPLCBkaXN0b3J0aW9uUk8pO1xyXG5cclxuICAgIC8vIOaAu+S9k1jkvY3np7tcclxuICAgIGxldCBqb2ludE9mZnNldHMgPSB0aGlzLnBvc3RKb2ludFJlc3VsdFtsb2FkQ29uZGl0aW9uTmFtZV07XHJcbiAgICAvL+iwg+eUqOaOpeWPo+iOt+WPlnNxbGl0ZeaWh+S7tueahHjlgY/np7suXHJcbiAgICBsZXQgam9pbnRzID0gbmV3IEFycmF5PEpvaW50T2JqZWN0PigpO1xyXG4gICAgbGV0IG9mZnNldHMgPSBuZXcgQXJyYXk8bnVtYmVyW10+KCk7XHJcbiAgICBsZXQgbGFiZWxTdHJpbmdzID0gbmV3IEFycmF5PHN0cmluZz4oKTtcclxuICAgIGxldCBuZXdSb3RhdGVQb3NpdGlvbnMgPSBuZXcgQXJyYXk8bnVtYmVyW10+KCk7XHJcblxyXG4gICAgLy8g5oC75L2N56e7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGpvaW50T2Zmc2V0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgam9pbnRJRCA9IGpvaW50T2Zmc2V0c1tpXS5Kb2ludElEO1xyXG4gICAgICBsZXQgam9pbnQgPSB0aGlzLnZpZXdlci5wcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RCeU5hbWUoXHJcbiAgICAgICAgam9pbnRJRFxyXG4gICAgICApIGFzIEpvaW50T2JqZWN0O1xyXG4gICAgICBsZXQgeE9mZnNldCA9IE51bWJlcihqb2ludE9mZnNldHNbaV0uRGVmbGVjdGlvblgpO1xyXG4gICAgICBsZXQgeU9mZnNldCA9IE51bWJlcihqb2ludE9mZnNldHNbaV0uRGVmbGVjdGlvblkpO1xyXG4gICAgICBsZXQgek9mZnNldCA9IE51bWJlcihqb2ludE9mZnNldHNbaV0uRGVmbGVjdGlvblopO1xyXG4gICAgICBsZXQgeFJvdGF0ZSA9IE51bWJlcihqb2ludE9mZnNldHNbaV0uUm90YXRpb25YKTtcclxuICAgICAgbGV0IHlSb3RhdGUgPSBOdW1iZXIoam9pbnRPZmZzZXRzW2ldLlJvdGF0aW9uWSk7XHJcbiAgICAgIGxldCB6Um90YXRlID0gTnVtYmVyKGpvaW50T2Zmc2V0c1tpXS5Sb3RhdGlvblopO1xyXG5cclxuICAgICAgaWYgKGpvaW50KSB7XHJcbiAgICAgICAgam9pbnRzLnB1c2goam9pbnQpO1xyXG4gICAgICAgIG9mZnNldHMucHVzaChbeE9mZnNldCwgeU9mZnNldCwgek9mZnNldF0pO1xyXG4gICAgICB9XHJcbiAgICAgIHN3aXRjaCAoZGF0YS5kaXN0b3J0aW9uUGFyYW1ldGVyLnZhbHVlKSB7XHJcbiAgICAgICAgY2FzZSBcIjBcIjpcclxuICAgICAgICAgIGxhYmVsU3RyaW5ncy5wdXNoKHhPZmZzZXQudG9GaXhlZCgzKSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwiMVwiOlxyXG4gICAgICAgICAgbGFiZWxTdHJpbmdzLnB1c2goeU9mZnNldC50b0ZpeGVkKDMpKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCIyXCI6XHJcbiAgICAgICAgICBsYWJlbFN0cmluZ3MucHVzaCh6T2Zmc2V0LnRvRml4ZWQoMykpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcIjNcIjpcclxuICAgICAgICAgIGxldCBzdW0gPSBNYXRoLnNxcnQoXHJcbiAgICAgICAgICAgIHhPZmZzZXQgKiB4T2Zmc2V0ICsgeU9mZnNldCAqIHlPZmZzZXQgKyB6T2Zmc2V0ICogek9mZnNldFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGxhYmVsU3RyaW5ncy5wdXNoKHN1bS50b0ZpeGVkKDMpKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCI0XCI6XHJcbiAgICAgICAgICBsYWJlbFN0cmluZ3MucHVzaCh4Um90YXRlLnRvRml4ZWQoMykpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcIjVcIjpcclxuICAgICAgICAgIGxhYmVsU3RyaW5ncy5wdXNoKHlSb3RhdGUudG9GaXhlZCgzKSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwiNlwiOlxyXG4gICAgICAgICAgbGFiZWxTdHJpbmdzLnB1c2goelJvdGF0ZS50b0ZpeGVkKDMpKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLmRpc3RvcnRpb25PZmZzZXQoam9pbnRzLCBvZmZzZXRzLCBkaXN0b3J0aW9uUk8sIGxhYmVsU3RyaW5ncyk7XHJcbiAgICBcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBsZXQgb3JpZ2luU2hhcGUgPSBkYXRhLm9yaWdpblNoYXBlLnZhbHVlO1xyXG4gICAgICBzd2l0Y2ggKG9yaWdpblNoYXBlKSB7XHJcbiAgICAgICAgY2FzZSBcIjFcIjpcclxuICAgICAgICAgIHRoaXMuY2xlYXJJbnZpc2libGVTaGFwZSgpO1xyXG4gICAgICAgICAgdGhpcy5vcmlnaW5Nb2RlbENoYW5nZVRyYW5zcGFyZW5jeSgxKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCIyXCI6XHJcbiAgICAgICAgICB0aGlzLmNsZWFySW52aXNpYmxlU2hhcGUoKTtcclxuICAgICAgICAgIHRoaXMub3JpZ2luTW9kZWxDaGFuZ2VUcmFuc3BhcmVuY3koMC41KTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCIzXCI6XHJcbiAgICAgICAgICB0aGlzLmludmlzaWJsZVNoYXBlKCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnZpZXdlci52aWV3SW50ZXJmYWNlTWFuYWdlci5tZW1iZXJMaW5lVmlldyhcclxuICAgICAgICAhdGhpcy52aWV3ZXIudmlld0ludGVyZmFjZU1hbmFnZXIubWVtYmVySXNMaW5lLFxyXG4gICAgICAgIGZhbHNlXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMudmlld2VyLnZpZXdJbnRlcmZhY2VNYW5hZ2VyLm1lbWJlckxpbmVWaWV3KFxyXG4gICAgICAgICF0aGlzLnZpZXdlci52aWV3SW50ZXJmYWNlTWFuYWdlci5tZW1iZXJJc0xpbmUsXHJcbiAgICAgICAgZmFsc2VcclxuICAgICAgKTtcclxuICAgICAgdGhpcy52aWV3ZXIudXBkYXRlRGlzcGxheSgpO1xyXG4gICAgfSwgMCk7XHJcblxyXG4gICAgLy8gdGhpcy52aWV3ZXIudXBkYXRlRGlzcGxheSgpO1xyXG4gICAgcG9zdEludGVyZmFjZU1hbmFnZXIuYWN0aXZlX2Rpc3RvcnRpb24gPSB0cnVlO1xyXG5cclxuICAgIC8vIOabtOaWsOW3puS+p+e7k+aehOagkVxyXG4gICAgc3RvcmUuY29tbWl0KFwic3RydWN0dXJlVHJlZS91cGRhdGVUcmVlRGF0YVwiLCBbXHJcbiAgICAgIHRoaXMudmlld2VyLnN0cnVjdHVyZVRyZWVNYW5hZ2VyLnJvb3ROb2RlLFxyXG4gICAgXSk7XHJcblxyXG4gICAgc3RvcmUuY29tbWl0KFwic2V0TXNnXCIsIFwiRGVmbCBTaGFwZSBMQzpcIiArIGxvYWRDb25kaXRpb25OYW1lKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOaYr+WQpuiuvue9ruacgOWkp+WPmOW9oueahOiNt+i9veW3peWGtVxyXG4gICAqL1xyXG4gIHNldE1heERlZmxlY3RlZCgpIHtcclxuICAgIGxldCBkYXRhID0gdGhpcy5jb25maWcucHJvcGVydGllcy5pdGVtc1swXS5kYXRhO1xyXG5cclxuICAgIGlmICh0aGlzLnBvc3RKb2ludFJlc3VsdCkge1xyXG4gICAgICBsZXQgbWF4RGVmbGVjdGVkID0gMDtcclxuICAgICAgbGV0IG1heERlZmxlY3RlZF9pdGVtID0gXCJcIjtcclxuICAgICAgZm9yIChsZXQgaXRlbSBvZiBPYmplY3Qua2V5cyh0aGlzLnBvc3RKb2ludFJlc3VsdCkpIHtcclxuICAgICAgICBjb25zdCBlbGVtZW50QXJyID0gdGhpcy5wb3N0Sm9pbnRSZXN1bHRbaXRlbV07XHJcbiAgICAgICAgbGV0IG1heFZhbHVlID0gMDtcclxuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgZWxlbWVudEFyci5sZW5ndGg7IGluZGV4KyspIHtcclxuICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBlbGVtZW50QXJyW2luZGV4XTtcclxuICAgICAgICAgIGxldCB2YWx1ZSA9IE1hdGguc3FydChcclxuICAgICAgICAgICAgZWxlbWVudC5EZWZsZWN0aW9uWCAqKiAyICtcclxuICAgICAgICAgICAgICBlbGVtZW50LkRlZmxlY3Rpb25ZICoqIDIgK1xyXG4gICAgICAgICAgICAgIGVsZW1lbnQuRGVmbGVjdGlvblogKiogMlxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGlmICh2YWx1ZSA+IG1heFZhbHVlKSB7XHJcbiAgICAgICAgICAgIG1heFZhbHVlID0gdmFsdWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtYXhWYWx1ZSA+IG1heERlZmxlY3RlZCkge1xyXG4gICAgICAgICAgbWF4RGVmbGVjdGVkID0gbWF4VmFsdWU7XHJcbiAgICAgICAgICBtYXhEZWZsZWN0ZWRfaXRlbSA9IGl0ZW07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGRhdGEubG9hZENvbmRpdGlvbk5hbWUudmFsdWUgPSBtYXhEZWZsZWN0ZWRfaXRlbTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZVBhbmVsKCkge31cclxuXHJcbiAgZ2V0UG9pc2l0aW9uQnlSb3RhdGUoXHJcbiAgICBqb2ludDogSm9pbnRPYmplY3QsXHJcbiAgICBwMDogRmxvYXQzMkFycmF5LFxyXG4gICAgcDE6IEZsb2F0MzJBcnJheSxcclxuICAgIHJhZDogbnVtYmVyXHJcbiAgKSB7XHJcbiAgICAvL1xyXG4gICAgbGV0IGF4aXMgPSBMb25nYW4uUG9pbnQuc3VidHJhY3QocDEsIHAwKTtcclxuICAgIExvbmdhbi5WZWN0b3Iubm9ybWFsaXplKGF4aXMpO1xyXG4gICAgbGV0IG1hdHJpeCA9IExvbmdhbi5NYXRyaXg0LnJvdGF0ZUJ5QXhpcyhwMCwgYXhpcywgcmFkKTtcclxuICAgIGxldCBwb3NpdGlvbiA9IG5ldyBGbG9hdDMyQXJyYXkoam9pbnQucG9zaXRpb24pO1xyXG4gICAgcG9zaXRpb24gPSBMb25nYW4uTWF0cml4NC5tdWx0aXBseVBvaW50KG1hdHJpeCwgcG9zaXRpb24pO1xyXG5cclxuICAgIHJldHVybiBwb3NpdGlvbjtcclxuICAgIC8vIGpvaW50LnhPbk1ldGVyID0gcG9zaXRpb25bMF07XHJcbiAgICAvLyBqb2ludC55T25NZXRlciA9IHBvc2l0aW9uWzFdO1xyXG4gICAgLy8gam9pbnQuek9uTWV0ZXIgPSBwb3NpdGlvblsyXTtcclxuICAgIC8vIGpvaW50LnhPbkNlbnRpbWV0ZXIgPSAwO1xyXG4gICAgLy8gam9pbnQueU9uQ2VudGltZXRlciA9IDA7XHJcbiAgICAvLyBqb2ludC56T25DZW50aW1ldGVyID0gMDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZGF0YVJlcXVlc3RlZCgpIHtcclxuICAgIGxldCBwb3N0SW50ZXJmYWNlTWFuYWdlciA9IHRoaXMudmlld2VyLnBvc3RJbnRlcmZhY2VNYW5hZ2VyO1xyXG4gICAgdGhpcy5wb3N0Sm9pbnRSZXN1bHQgPSBwb3N0SW50ZXJmYWNlTWFuYWdlci5kaXN0b3J0aW9uO1xyXG5cclxuICAgIGxldCBjb3VudGVyID0gMDtcclxuICAgIGZvciAobGV0IGkgb2YgT2JqZWN0LmtleXModGhpcy5wb3N0Sm9pbnRSZXN1bHQpKSB7XHJcbiAgICAgIGNvdW50ZXIrKztcclxuICAgIH1cclxuICAgIGlmIChjb3VudGVyID09PSAwKSB7XHJcbiAgICAgIE1lc3NhZ2UuaW5mbyhcclxuICAgICAgICBcIuafpeivolJfUE9TVEpPSU5URElTUExBQ0VNRU5UUkVTVUxUU+ihqOaVsOaNruS4uuepuu+8jOivt+ajgOafpURC5paH5Lu2XCJcclxuICAgICAgKTtcclxuICAgICAgbGV0IGRhdGEgPSB0aGlzLmNvbmZpZy5wcm9wZXJ0aWVzLml0ZW1zWzBdLmRhdGE7XHJcbiAgICAgIGRhdGEudGlwLnZhbHVlID0gMztcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY29uZmlnLnByb3BlcnRpZXMuaXRlbXNbMF0uZGF0YS5sb2FkQ29uZGl0aW9uTmFtZS5zZWxlY3RPcHRpb25zLnNlbGVjdGlvbnMgPVxyXG4gICAgICBbXTtcclxuICAgIGZvciAobGV0IGkgb2YgT2JqZWN0LmtleXModGhpcy5wb3N0Sm9pbnRSZXN1bHQpKSB7XHJcbiAgICAgIGlmICh0aGlzLnBvc3RKb2ludFJlc3VsdFtpXVswXSkge1xyXG4gICAgICAgIGxldCBsb2FkQ29uZGl0aW9uTmFtZSA9IHRoaXMucG9zdEpvaW50UmVzdWx0W2ldWzBdLkxvYWRDb25kaXRpb25OYW1lO1xyXG4gICAgICAgIHRoaXMuY29uZmlnLnByb3BlcnRpZXMuaXRlbXNbMF0uZGF0YS5sb2FkQ29uZGl0aW9uTmFtZS5zZWxlY3RPcHRpb25zLnNlbGVjdGlvbnMucHVzaChcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbGFiZWw6IGxvYWRDb25kaXRpb25OYW1lLFxyXG4gICAgICAgICAgICB2YWx1ZTogbG9hZENvbmRpdGlvbk5hbWUsXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy5sb2FkQ29uZGl0aW9ucy5wdXNoKGxvYWRDb25kaXRpb25OYW1lKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8g5Y6f5qih5Z6L5aSE55CGKOmAj+aYjuOAgeiZmue6vylcclxuICBvcmlnaW5Nb2RlbENoYW5nZVRyYW5zcGFyZW5jeSh0cmFuc3BhcmVuY3k6IG51bWJlcikge1xyXG4gICAgbGV0IG1lbWJlcnMgPSB0aGlzLnByb2Nlc3MuY2FlUmVuZGVyT2JqZWN0VHJlZU1hbmFnZXIubWVtYmVyTm9kZTtcclxuICAgIGNvbnNvbGUubG9nKFwibWVtYmVyTm9kZSBsZW5ndGg6XCIsIG1lbWJlcnMuY2hpbGRPYmplY3RzLmxlbmd0aCk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1lbWJlcnMuY2hpbGRPYmplY3RzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBtZW1iZXIgPSBtZW1iZXJzLmNoaWxkT2JqZWN0c1tpXSBhcyBNZW1iZXJPYmplY3Q7XHJcbiAgICAgIGlmIChtZW1iZXIpIHtcclxuICAgICAgICBpZiAodHJhbnNwYXJlbmN5ID09PSAxKSB7XHJcbiAgICAgICAgICBtZW1iZXIuaXNEb3R0ZWRMaW5lID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIG1lbWJlci5pc0RvdHRlZExpbmUgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobWVtYmVyLmZhY2VDb2xvcikge1xyXG4gICAgICAgICAgbWVtYmVyLmZhY2VDb2xvclszXSA9IHRyYW5zcGFyZW5jeTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbWVtYmVyLnNlZ21lbnQuY29sb3IuZmFjZVRyYW5zcGFyZW5jeSA9IHRyYW5zcGFyZW5jeTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbWVtYmVyLnNldE5lZWRVcGRhdGUoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog6ZqQ6JeP5Y6f57uT5p6EXHJcbiAgICovXHJcbiAgaW52aXNpYmxlU2hhcGUoKSB7XHJcbiAgICBsZXQgdmlld2VyID0gdGhpcy52aWV3ZXI7XHJcblxyXG4gICAgbGV0IGpvaW50cyA9IHRoaXMucHJvY2Vzcy5jYWVSZW5kZXJPYmplY3RUcmVlTWFuYWdlci5qb2ludE5vZGU7XHJcbiAgICBqb2ludHMuY2hpbGRPYmplY3RzLmZvckVhY2goKHJvKSA9PiB7XHJcbiAgICAgIGxldCBpcm8gPSB2aWV3ZXIuZmluZEluc3RhbmNlT2JqZWN0KHJvKTtcclxuICAgICAgaWYgKGlybykge1xyXG4gICAgICAgIHRoaXMuam9pbnRzLnB1c2gocm8gYXMgSm9pbnRPYmplY3QpO1xyXG4gICAgICAgIGlyby52aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGxldCBtZW1iZXJzID0gdGhpcy5wcm9jZXNzLmNhZVJlbmRlck9iamVjdFRyZWVNYW5hZ2VyLm1lbWJlck5vZGU7XHJcbiAgICBtZW1iZXJzLmNoaWxkT2JqZWN0cy5mb3JFYWNoKChybykgPT4ge1xyXG4gICAgICBsZXQgaXJvID0gdmlld2VyLmZpbmRJbnN0YW5jZU9iamVjdChybyk7XHJcbiAgICAgIGlmIChpcm8pIHtcclxuICAgICAgICB0aGlzLm1lbWJlcnMucHVzaChybyBhcyBNZW1iZXJPYmplY3QpO1xyXG4gICAgICAgIGlyby52aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIGxldCBwbGF0ZXMgPSB0aGlzLnByb2Nlc3MuY2FlUmVuZGVyT2JqZWN0VHJlZU1hbmFnZXIucGxhdGVOb2RlO1xyXG4gICAgcGxhdGVzLmNoaWxkT2JqZWN0cy5mb3JFYWNoKChybykgPT4ge1xyXG4gICAgICBsZXQgaXJvID0gdmlld2VyLmZpbmRJbnN0YW5jZU9iamVjdChybyk7XHJcbiAgICAgIGlmIChpcm8pIHtcclxuICAgICAgICB0aGlzLnBsYXRlcy5wdXNoKHJvIGFzIFBsYXRlT2JqZWN0KTtcclxuICAgICAgICBpcm8udmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOWPlua2iOmakOiXj+WOn+e7k+aehFxyXG4gICAqL1xyXG4gIGNsZWFySW52aXNpYmxlU2hhcGUoKSB7XHJcbiAgICBsZXQgdmlld2VyID0gdGhpcy52aWV3ZXI7XHJcblxyXG4gICAgbGV0IGpvaW50cyA9IHRoaXMuam9pbnRzO1xyXG4gICAgam9pbnRzLmZvckVhY2goKHJvKSA9PiB7XHJcbiAgICAgIGxldCBpcm8gPSB2aWV3ZXIuZmluZEluc3RhbmNlT2JqZWN0KHJvKTtcclxuICAgICAgaWYgKGlybykge1xyXG4gICAgICAgIGlyby52aXNpYmxlID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgbGV0IG1lbWJlcnMgPSB0aGlzLm1lbWJlcnM7XHJcbiAgICBtZW1iZXJzLmZvckVhY2goKHJvKSA9PiB7XHJcbiAgICAgIGxldCBpcm8gPSB2aWV3ZXIuZmluZEluc3RhbmNlT2JqZWN0KHJvKTtcclxuICAgICAgaWYgKGlybykge1xyXG4gICAgICAgIGlyby52aXNpYmxlID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgbGV0IHBsYXRlcyA9IHRoaXMucGxhdGVzO1xyXG4gICAgcGxhdGVzLmZvckVhY2goKHJvKSA9PiB7XHJcbiAgICAgIGxldCBpcm8gPSB2aWV3ZXIuZmluZEluc3RhbmNlT2JqZWN0KHJvKTtcclxuICAgICAgaWYgKGlybykge1xyXG4gICAgICAgIGlyby52aXNpYmxlID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBkaXN0b3J0aW9uT2Zmc2V0KFxyXG4gICAgam9pbnRzOiBKb2ludE9iamVjdFtdLFxyXG4gICAgb2Zmc2V0czogbnVtYmVyW11bXSxcclxuICAgIGRpc3RvcnRpb25STzogRGVzaWduQmFzZU9iamVjdCxcclxuICAgIGxhYmVsU3RyaW5nczogc3RyaW5nW11cclxuICApIHtcclxuICAgIHRoaXMubGFiZWxTdHJpbmdzID0gbmV3IEFycmF5PHN0cmluZz4oKTtcclxuICAgIHRoaXMubGFiZWxKb2ludHMgPSBuZXcgQXJyYXk8Sm9pbnRPYmplY3Q+KCk7XHJcblxyXG4gICAgbGV0IGpvaW50SWRNYXBDbG9uZU9iajogeyBbaWQ6IHN0cmluZ106IEpvaW50T2JqZWN0IH0gPSB7fTtcclxuICAgIGxldCBhZGRlZE9iamVjdHMgPSBuZXcgQXJyYXk8RGVzaWduQmFzZU9iamVjdD4oKTtcclxuXHJcbiAgICBsZXQgZGF0YSA9IHRoaXMuY29uZmlnLnByb3BlcnRpZXMuaXRlbXNbMF0uZGF0YTtcclxuICAgIGxldCBmYWN0b3IgPSBkYXRhLmZhY3Rvci52YWx1ZSA/IGRhdGEuZmFjdG9yLnZhbHVlIDogMTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgam9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBqb2ludCA9IGpvaW50c1tpXTtcclxuICAgICAgbGV0IG9mZnNldCA9IG9mZnNldHNbaV07XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2Zmc2V0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgb2Zmc2V0W2ldICo9IGZhY3RvcjtcclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IGNsb25lT2JqID0gdGhpcy52aWV3ZXIucHJvY2Vzcy5jbG9uZU1hbmFnZXIuY2xvbmVPYmplY3QoXHJcbiAgICAgICAgam9pbnRcclxuICAgICAgKSBhcyBKb2ludE9iamVjdDtcclxuICAgICAgLy8g6K6+572u5L2N56e7XHJcbiAgICAgIGxldCBuZXdQb3NpdGlvbiA9IFswLCAwLCAwXTtcclxuICAgICAgbmV3UG9zaXRpb25bMF0gPSBjbG9uZU9iai5wb3NpdGlvblswXSArIG9mZnNldFswXSAvIDEwMDtcclxuICAgICAgbmV3UG9zaXRpb25bMV0gPSBjbG9uZU9iai5wb3NpdGlvblsxXSArIG9mZnNldFsxXSAvIDEwMDtcclxuICAgICAgbmV3UG9zaXRpb25bMl0gPSBjbG9uZU9iai5wb3NpdGlvblsyXSArIG9mZnNldFsyXSAvIDEwMDtcclxuICAgICAgY2xvbmVPYmoucG9zaXRpb24gPSBuZXdQb3NpdGlvbjtcclxuXHJcbiAgICAgIGNsb25lT2JqLmJ1c2luZXNzU3RhdGUgPSBCdXNpbmVzc1N0YXRlLkxpdmluZztcclxuICAgICAgY2xvbmVPYmouc2V0TmVlZFVwZGF0ZSgpO1xyXG5cclxuICAgICAgam9pbnRJZE1hcENsb25lT2JqW2pvaW50LmlkXSA9IGNsb25lT2JqO1xyXG4gICAgICB0aGlzLnByb2Nlc3MuYWRkUmVuZGVyT2JqZWN0KGRpc3RvcnRpb25STywgY2xvbmVPYmopO1xyXG5cclxuICAgICAgdGhpcy5sYWJlbEpvaW50cy5wdXNoKGNsb25lT2JqKTtcclxuICAgICAgdGhpcy5sYWJlbFN0cmluZ3MucHVzaChsYWJlbFN0cmluZ3NbaV0pO1xyXG5cclxuICAgICAgdGhpcy5pbml0RHJhd1N2ZyhjbG9uZU9iaiwgbGFiZWxTdHJpbmdzW2ldKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgbWVtYmVyTm9kZSA9IHRoaXMucHJvY2Vzcy5jYWVSZW5kZXJPYmplY3RUcmVlTWFuYWdlci5tZW1iZXJOb2RlO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZW1iZXJOb2RlLmNoaWxkT2JqZWN0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgbWVtYmVyID0gbWVtYmVyTm9kZS5jaGlsZE9iamVjdHNbaV0gYXMgTWVtYmVyT2JqZWN0O1xyXG5cclxuICAgICAgbGV0IGNsb25lT2JqID0gdGhpcy52aWV3ZXIucHJvY2Vzcy5jbG9uZU1hbmFnZXIuY2xvbmVPYmplY3QoXHJcbiAgICAgICAgbWVtYmVyXHJcbiAgICAgICkgYXMgTWVtYmVyT2JqZWN0O1xyXG5cclxuICAgICAgY2xvbmVPYmouc3RhcnQgPSBqb2ludElkTWFwQ2xvbmVPYmpbY2xvbmVPYmouc3RhcnQuaWRdO1xyXG4gICAgICBjbG9uZU9iai5lbmQgPSBqb2ludElkTWFwQ2xvbmVPYmpbY2xvbmVPYmouZW5kLmlkXTtcclxuXHJcbiAgICAgIGNsb25lT2JqLmJ1c2luZXNzU3RhdGUgPSBCdXNpbmVzc1N0YXRlLkxpdmluZztcclxuICAgICAgaWYgKGNsb25lT2JqLnN0YXJ0ICYmIGNsb25lT2JqLmVuZCkge1xyXG4gICAgICAgIGFkZGVkT2JqZWN0cy5wdXNoKGNsb25lT2JqKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBwbGF0ZU5vZGUgPSB0aGlzLnByb2Nlc3MuY2FlUmVuZGVyT2JqZWN0VHJlZU1hbmFnZXIucGxhdGVOb2RlO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwbGF0ZU5vZGUuY2hpbGRPYmplY3RzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBwbGF0ZSA9IHBsYXRlTm9kZS5jaGlsZE9iamVjdHNbaV0gYXMgUGxhdGVPYmplY3Q7XHJcbiAgICAgIGxldCBjbG9uZU9iaiA9IHRoaXMudmlld2VyLnByb2Nlc3MuY2xvbmVNYW5hZ2VyLmNsb25lT2JqZWN0KFxyXG4gICAgICAgIHBsYXRlXHJcbiAgICAgICkgYXMgUGxhdGVPYmplY3Q7XHJcblxyXG4gICAgICBsZXQgZmxhZyA9IHRydWU7XHJcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY2xvbmVPYmouam9pbnRzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgY2xvbmVPYmouam9pbnRzW2pdID0gam9pbnRJZE1hcENsb25lT2JqW2Nsb25lT2JqLmpvaW50c1tqXS5pZF07XHJcbiAgICAgICAgaWYgKCFjbG9uZU9iai5qb2ludHNbal0pIHtcclxuICAgICAgICAgIGZsYWcgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNsb25lT2JqLmJ1c2luZXNzU3RhdGUgPSBCdXNpbmVzc1N0YXRlLkxpdmluZztcclxuICAgICAgaWYgKGZsYWcpIHtcclxuICAgICAgICBhZGRlZE9iamVjdHMucHVzaChjbG9uZU9iaik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgZGlzdG9ydGlvblNoYXBlID0gZGF0YS5kaXN0b3J0aW9uU2hhcGUudmFsdWU7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFkZGVkT2JqZWN0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgb2JqID0gYWRkZWRPYmplY3RzW2ldO1xyXG4gICAgICB0aGlzLnByb2Nlc3MuYWRkUmVuZGVyT2JqZWN0KGRpc3RvcnRpb25STywgb2JqKTtcclxuICAgICAgb2JqLnNldE5lZWRVcGRhdGUoKTtcclxuXHJcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBNZW1iZXJPYmplY3QpIHtcclxuICAgICAgICBpZiAoZGlzdG9ydGlvblNoYXBlID09PSBcIjFcIikge1xyXG4gICAgICAgICAgdGhpcy5kaXN0b3J0aW9uU2hhcGVDaGFuZ2VUcmFuc3BhcmVuY3kob2JqLCAxKTtcclxuICAgICAgICAgIG9iai5pc0RvdHRlZExpbmUgPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2UgaWYgKGRpc3RvcnRpb25TaGFwZSA9PT0gXCIyXCIpIHtcclxuICAgICAgICAgIHRoaXMuZGlzdG9ydGlvblNoYXBlQ2hhbmdlVHJhbnNwYXJlbmN5KG9iaiwgMC41KTtcclxuICAgICAgICAgIG9iai5pc0RvdHRlZExpbmUgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xlYXJTdmcoKSB7XHJcbiAgICBpZiAodGhpcy5yZXN1bHRMYWJlbCkge1xyXG4gICAgICB0aGlzLnJlc3VsdExhYmVsLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICBpdGVtLmNsZWFyKCk7XHJcbiAgICAgICAgaXRlbSA9IG51bGw7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnJlc3VsdExhYmVsID0gbmV3IEFycmF5PGFueT4oKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxhYmVsSm9pbnRzID0gbmV3IEFycmF5PEpvaW50T2JqZWN0PigpO1xyXG4gICAgdGhpcy5sYWJlbFN0cmluZ3MgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xyXG4gICAgdGhpcy5yZXN1bHRMYWJlbERpYyA9IHt9O1xyXG4gIH1cclxuXHJcbiAgaW5pdERyYXdTdmcoam9pbnRPYmplY3Q6IEpvaW50T2JqZWN0LCBsYWJlbERhdGE6IHN0cmluZykge1xyXG4gICAgbGV0IHBvc2l0aW9uID0gam9pbnRPYmplY3QucG9zaXRpb247XHJcbiAgICBsZXQgY3VycmV0UG9zID0gcG9zaXRpb247XHJcblxyXG4gICAgLy8gZ2V0IHdpbnBvcy5cclxuICAgIGxldCBwb2ludCA9IHRoaXMudmlld2VyLndvcmxkUG9pbnRUb1BpeGVsUG9pbnQoW2N1cnJldFBvcyBhcyBhbnldKVswXTtcclxuXHJcbiAgICBsZXQgaWQgPSBqb2ludE9iamVjdC5uYW1lO1xyXG4gICAgaWYgKHRoaXMucmVzdWx0TGFiZWxEaWNbaWRdKSB7XHJcbiAgICAgIHRoaXMucmVzdWx0TGFiZWxEaWNbaWRdLm1vdmUoXHJcbiAgICAgICAgcG9pbnRbMF0gKyB0aGlzLnhQaXhlbE9mZnNldCxcclxuICAgICAgICBwb2ludFsxXSArIHRoaXMueVBpeGVsT2Zmc2V0XHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMucmVzdWx0TGFiZWxEaWNbaWRdLmF0dHIoXCJmb250LXNpemVcIiwgRGVzaWduQmFzZU9iamVjdC5mb250U2l6ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgZHJhdyA9IFN2Z0RyYXcuZ2V0SW5zdGFuY2UodGhpcy52aWV3ZXIuY29udGFpbmVyLmlkKS5kcmF3O1xyXG4gICAgICAvLyBpZiAoIXRoaXMuX2dyb3VwKSB7XHJcbiAgICAgIHRoaXMuX2dyb3VwID0gZHJhdy5ncm91cCgpO1xyXG4gICAgICAvLyB9XHJcbiAgICAgIGxldCByZXN1bHRUZXh0ID0gZHJhd1xyXG4gICAgICAgIC50ZXh0KFxyXG4gICAgICAgICAgTnVtYmVyLmlzTmFOKE51bWJlcihsYWJlbERhdGEpKVxyXG4gICAgICAgICAgICA/IGxhYmVsRGF0YVxyXG4gICAgICAgICAgICA6IE51bWJlcihsYWJlbERhdGEpLnRvRml4ZWQoMylcclxuICAgICAgICApXHJcbiAgICAgICAgLmZvbnQoeyBmaWxsOiB0aGlzLmxhYmVsQ29sb3IgfSlcclxuICAgICAgICAuYXR0cihcImZvbnQtc2l6ZVwiLCBEZXNpZ25CYXNlT2JqZWN0LmZvbnRTaXplKVxyXG4gICAgICAgIC5tb3ZlKHBvaW50WzBdICsgdGhpcy54UGl4ZWxPZmZzZXQsIHBvaW50WzFdICsgdGhpcy55UGl4ZWxPZmZzZXQpO1xyXG5cclxuICAgICAgdGhpcy5yZXN1bHRMYWJlbC5wdXNoKHJlc3VsdFRleHQpO1xyXG5cclxuICAgICAgdGhpcy5yZXN1bHRMYWJlbERpY1tpZF0gPSByZXN1bHRUZXh0O1xyXG4gICAgICB0aGlzLl9ncm91cC5hZGQocmVzdWx0VGV4dCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkcmF3U3ZnKGpvaW50T2JqZWN0OiBKb2ludE9iamVjdCwgbGFiZWxEYXRhOiBzdHJpbmcpIHtcclxuICAgIGxldCBwb3NpdGlvbiA9IGpvaW50T2JqZWN0LnBvc2l0aW9uO1xyXG4gICAgbGV0IGN1cnJldFBvcyA9IHBvc2l0aW9uO1xyXG5cclxuICAgIC8vIGdldCB3aW5wb3MuXHJcbiAgICBsZXQgcG9pbnQgPSB0aGlzLnZpZXdlci53b3JsZFBvaW50VG9QaXhlbFBvaW50KFtjdXJyZXRQb3MgYXMgYW55XSlbMF07XHJcblxyXG4gICAgbGV0IGlkID0gam9pbnRPYmplY3QubmFtZTtcclxuICAgIGlmICh0aGlzLnJlc3VsdExhYmVsRGljW2lkXSkge1xyXG4gICAgICB0aGlzLnJlc3VsdExhYmVsRGljW2lkXS5tb3ZlKFxyXG4gICAgICAgIHBvaW50WzBdICsgdGhpcy54UGl4ZWxPZmZzZXQsXHJcbiAgICAgICAgcG9pbnRbMV0gKyB0aGlzLnlQaXhlbE9mZnNldFxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLnJlc3VsdExhYmVsRGljW2lkXS5hdHRyKFwiZm9udC1zaXplXCIsIERlc2lnbkJhc2VPYmplY3QuZm9udFNpemUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IGRyYXcgPSBTdmdEcmF3LmdldEluc3RhbmNlKHRoaXMudmlld2VyLmNvbnRhaW5lci5pZCkuZHJhdztcclxuICAgICAgLy8gaWYgKCF0aGlzLl9ncm91cCkge1xyXG4gICAgICB0aGlzLl9ncm91cCA9IGRyYXcuZ3JvdXAoKTtcclxuICAgICAgLy8gfVxyXG4gICAgICBsZXQgcmVzdWx0VGV4dCA9IGRyYXdcclxuICAgICAgICAudGV4dChcclxuICAgICAgICAgIE51bWJlci5pc05hTihOdW1iZXIobGFiZWxEYXRhKSlcclxuICAgICAgICAgICAgPyBsYWJlbERhdGFcclxuICAgICAgICAgICAgOiBOdW1iZXIobGFiZWxEYXRhKS50b0ZpeGVkKDMpXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5mb250KHsgZmlsbDogdGhpcy5sYWJlbENvbG9yIH0pXHJcbiAgICAgICAgLmF0dHIoXCJmb250LXNpemVcIiwgRGVzaWduQmFzZU9iamVjdC5mb250U2l6ZSlcclxuICAgICAgICAubW92ZShwb2ludFswXSArIHRoaXMueFBpeGVsT2Zmc2V0LCBwb2ludFsxXSArIHRoaXMueVBpeGVsT2Zmc2V0KTtcclxuXHJcbiAgICAgIHRoaXMucmVzdWx0TGFiZWwucHVzaChyZXN1bHRUZXh0KTtcclxuXHJcbiAgICAgIHRoaXMucmVzdWx0TGFiZWxEaWNbaWRdID0gcmVzdWx0VGV4dDtcclxuICAgICAgdGhpcy5fZ3JvdXAuYWRkKHJlc3VsdFRleHQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZGlzdG9ydGlvblBvc2l0aW9ucyhcclxuICAgIGpvaW50czogSm9pbnRPYmplY3RbXSxcclxuICAgIG5ld1Bvc2l0aW9uczogbnVtYmVyW11bXSxcclxuICAgIGRpc3RvcnRpb25STzogRGVzaWduQmFzZU9iamVjdFxyXG4gICkge1xyXG4gICAgbGV0IGpvaW50SWRNYXBDbG9uZU9iajogeyBbaWQ6IHN0cmluZ106IEpvaW50T2JqZWN0IH0gPSB7fTtcclxuICAgIGxldCBhZGRlZE9iamVjdHMgPSBuZXcgQXJyYXk8RGVzaWduQmFzZU9iamVjdD4oKTtcclxuXHJcbiAgICBsZXQgZGF0YSA9IHRoaXMuY29uZmlnLnByb3BlcnRpZXMuaXRlbXNbMF0uZGF0YTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgam9pbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBqb2ludCA9IGpvaW50c1tpXTtcclxuXHJcbiAgICAgIGxldCBjbG9uZU9iaiA9IHRoaXMudmlld2VyLnByb2Nlc3MuY2xvbmVNYW5hZ2VyLmNsb25lT2JqZWN0KFxyXG4gICAgICAgIGpvaW50XHJcbiAgICAgICkgYXMgSm9pbnRPYmplY3Q7XHJcbiAgICAgIC8vIOiuvue9ruS9jeenu1xyXG4gICAgICBjbG9uZU9iai5wb3NpdGlvbiA9IG5ld1Bvc2l0aW9uc1tpXTtcclxuXHJcbiAgICAgIGNsb25lT2JqLmJ1c2luZXNzU3RhdGUgPSBCdXNpbmVzc1N0YXRlLkxpdmluZztcclxuICAgICAgY2xvbmVPYmouc2V0TmVlZFVwZGF0ZSgpO1xyXG5cclxuICAgICAgam9pbnRJZE1hcENsb25lT2JqW2pvaW50LmlkXSA9IGNsb25lT2JqO1xyXG4gICAgICB0aGlzLnByb2Nlc3MuYWRkUmVuZGVyT2JqZWN0KGRpc3RvcnRpb25STywgY2xvbmVPYmopO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBtZW1iZXJOb2RlID0gdGhpcy5wcm9jZXNzLmNhZVJlbmRlck9iamVjdFRyZWVNYW5hZ2VyLm1lbWJlck5vZGU7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1lbWJlck5vZGUuY2hpbGRPYmplY3RzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBtZW1iZXIgPSBtZW1iZXJOb2RlLmNoaWxkT2JqZWN0c1tpXSBhcyBNZW1iZXJPYmplY3Q7XHJcbiAgICAgIGxldCBjbG9uZU9iaiA9IHRoaXMudmlld2VyLnByb2Nlc3MuY2xvbmVNYW5hZ2VyLmNsb25lT2JqZWN0KFxyXG4gICAgICAgIG1lbWJlclxyXG4gICAgICApIGFzIE1lbWJlck9iamVjdDtcclxuXHJcbiAgICAgIGNsb25lT2JqLnN0YXJ0ID0gam9pbnRJZE1hcENsb25lT2JqW2Nsb25lT2JqLnN0YXJ0LmlkXTtcclxuICAgICAgY2xvbmVPYmouZW5kID0gam9pbnRJZE1hcENsb25lT2JqW2Nsb25lT2JqLmVuZC5pZF07XHJcblxyXG4gICAgICBjbG9uZU9iai5idXNpbmVzc1N0YXRlID0gQnVzaW5lc3NTdGF0ZS5MaXZpbmc7XHJcbiAgICAgIGlmIChjbG9uZU9iai5zdGFydCAmJiBjbG9uZU9iai5lbmQpIHtcclxuICAgICAgICBhZGRlZE9iamVjdHMucHVzaChjbG9uZU9iaik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgcGxhdGVOb2RlID0gdGhpcy5wcm9jZXNzLmNhZVJlbmRlck9iamVjdFRyZWVNYW5hZ2VyLnBsYXRlTm9kZTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGxhdGVOb2RlLmNoaWxkT2JqZWN0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgcGxhdGUgPSBwbGF0ZU5vZGUuY2hpbGRPYmplY3RzW2ldIGFzIFBsYXRlT2JqZWN0O1xyXG4gICAgICBsZXQgY2xvbmVPYmogPSB0aGlzLnZpZXdlci5wcm9jZXNzLmNsb25lTWFuYWdlci5jbG9uZU9iamVjdChcclxuICAgICAgICBwbGF0ZVxyXG4gICAgICApIGFzIFBsYXRlT2JqZWN0O1xyXG5cclxuICAgICAgbGV0IGZsYWcgPSB0cnVlO1xyXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNsb25lT2JqLmpvaW50cy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgIGNsb25lT2JqLmpvaW50c1tqXSA9IGpvaW50SWRNYXBDbG9uZU9ialtjbG9uZU9iai5qb2ludHNbal0uaWRdO1xyXG4gICAgICAgIGlmICghY2xvbmVPYmouam9pbnRzW2pdKSB7XHJcbiAgICAgICAgICBmbGFnID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBjbG9uZU9iai5idXNpbmVzc1N0YXRlID0gQnVzaW5lc3NTdGF0ZS5MaXZpbmc7XHJcbiAgICAgIGlmIChmbGFnKSB7XHJcbiAgICAgICAgYWRkZWRPYmplY3RzLnB1c2goY2xvbmVPYmopO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZm9yIChsZXQgaSA9IDA7IGkgPCBhZGRlZE9iamVjdHMubGVuZ3RoOyBpKyspIHtcclxuICAgIC8vICAgbGV0IG9iaiA9IGFkZGVkT2JqZWN0c1tpXTtcclxuICAgIC8vICAgdGhpcy5wcm9jZXNzLmFkZFJlbmRlck9iamVjdChkaXN0b3J0aW9uUk8sIG9iaik7XHJcbiAgICAvLyAgIG9iai5zZXROZWVkVXBkYXRlKCk7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgbGV0IGRpc3RvcnRpb25TaGFwZSA9IGRhdGEuZGlzdG9ydGlvblNoYXBlLnZhbHVlO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhZGRlZE9iamVjdHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IG9iaiA9IGFkZGVkT2JqZWN0c1tpXTtcclxuICAgICAgdGhpcy5wcm9jZXNzLmFkZFJlbmRlck9iamVjdChkaXN0b3J0aW9uUk8sIG9iaik7XHJcbiAgICAgIG9iai5zZXROZWVkVXBkYXRlKCk7XHJcblxyXG4gICAgICBpZiAob2JqIGluc3RhbmNlb2YgTWVtYmVyT2JqZWN0KSB7XHJcbiAgICAgICAgaWYgKGRpc3RvcnRpb25TaGFwZSA9PT0gXCIxXCIpIHtcclxuICAgICAgICAgIHRoaXMuZGlzdG9ydGlvblNoYXBlQ2hhbmdlVHJhbnNwYXJlbmN5KG9iaiwgMSk7XHJcbiAgICAgICAgICBvYmouaXNEb3R0ZWRMaW5lID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIGlmIChkaXN0b3J0aW9uU2hhcGUgPT09IFwiMlwiKSB7XHJcbiAgICAgICAgICB0aGlzLmRpc3RvcnRpb25TaGFwZUNoYW5nZVRyYW5zcGFyZW5jeShvYmosIDAuNSk7XHJcbiAgICAgICAgICBvYmouaXNEb3R0ZWRMaW5lID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIOWPmOW9ouWQjuaooeWei+WkhOeQhijpgI/mmI7jgIHomZrnur8pXHJcbiAgZGlzdG9ydGlvblNoYXBlQ2hhbmdlVHJhbnNwYXJlbmN5KFxyXG4gICAgbWVtYmVyOiBNZW1iZXJPYmplY3QsXHJcbiAgICB0cmFuc3BhcmVuY3k6IG51bWJlclxyXG4gICkge1xyXG4gICAgaWYgKG1lbWJlcikge1xyXG4gICAgICBpZiAobWVtYmVyLmZhY2VDb2xvcikge1xyXG4gICAgICAgIG1lbWJlci5mYWNlQ29sb3JbM10gPSB0cmFuc3BhcmVuY3k7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbWVtYmVyLnNlZ21lbnQuY29sb3IuZmFjZVRyYW5zcGFyZW5jeSA9IHRyYW5zcGFyZW5jeTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVzZXRTY2VuZSgpIHtcclxuICAgIHRoaXMuY2xlYXJTdmcoKTtcclxuICAgIHRoaXMuY2xlYXJJbnZpc2libGVTaGFwZSgpO1xyXG5cclxuICAgIGxldCBhZnRlcnRyZWF0bWVudFJPID0gdGhpcy52aWV3ZXIucHJvY2Vzcy5maW5kUmVuZGVyT2JqZWN0QnlOYW1lKFxyXG4gICAgICBcIuWQjuWkhOeQhuiuoeeul+e7k+aenFwiXHJcbiAgICApIGFzIERlc2lnbkJhc2VPYmplY3Q7XHJcbiAgICBsZXQgZGlzdG9ydGlvblJPID0gdGhpcy52aWV3ZXIucHJvY2Vzcy5maW5kQ2FlT2JqZWN0QnlOYW1lSW5DaGlsZE9iamVjdChcclxuICAgICAgYWZ0ZXJ0cmVhdG1lbnRSTyxcclxuICAgICAgXCLnu5PmnoTlj5jlvaJcIlxyXG4gICAgKTtcclxuICAgIGlmIChkaXN0b3J0aW9uUk8pIHtcclxuICAgICAgZGlzdG9ydGlvblJPLmNoaWxkT2JqZWN0cy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgaXRlbS5kZWxldGUoKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBkaXN0b3J0aW9uUk8uZGVsZXRlKCk7XHJcbiAgICB9XHJcbiAgICBzdG9yZS5jb21taXQoXCJzZXRNc2dcIiwgbnVsbCk7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMub3JpZ2luTW9kZWxDaGFuZ2VUcmFuc3BhcmVuY3koMSk7XHJcbiAgICAgIC8vIHRoaXMudmlld2VyLnVwZGF0ZURpc3BsYXkoKTtcclxuICAgIH0sIDApO1xyXG5cclxuICAgIGxldCBwb3N0SW50ZXJmYWNlTWFuYWdlciA9IHRoaXMudmlld2VyLnBvc3RJbnRlcmZhY2VNYW5hZ2VyO1xyXG4gICAgcG9zdEludGVyZmFjZU1hbmFnZXIuYWN0aXZlX2Rpc3RvcnRpb24gPSBmYWxzZTtcclxuICB9XHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQWtCQTtBQUFBO0FBd0NBO0FBQUE7QUF2Q0E7QUFXQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUtBO0FBSUE7QUFJQTs7QUFJQTtBQUVBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUlBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFFQTtBQUNBO0FBR0E7QUFFQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFJQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7O0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUdBO0FBQ0E7QUFDQTtBQUdBOztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFHQTtBQUlBO0FBQ0E7O0FBR0E7QUFFQTtBQUVBO0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUlBO0FBSUE7QUFDQTtBQUdBO0FBR0E7QUFJQTtBQUNBO0FBS0E7O0FBQ0E7QUFFQTtBQUNBO0FBQ0E7O0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7O0FBR0E7O0FBRUE7QUFFQTtBQUVBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBT0E7QUFFQTs7QUFDQTtBQUNBO0FBRUE7O0FBQ0E7QUFBQTtBQUNBOzs7Ozs7Ozs7Ozs7O0FBRUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTs7QUFHQTs7QUFFQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBR0E7Ozs7Ozs7Ozs7Ozs7O0FBR0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7O0FBR0E7QUFLQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUtBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUVBO0FBTUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTs7QUFHQTtBQUNBO0FBQ0E7QUFFQTtBQUlBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBSUE7QUFDQTtBQUNBOzs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBTUE7QUFBQTtBQUlBO0FBRUE7QUFDQTs7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUdBO0FBRUE7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQU1BO0FBQUE7QUFJQTtBQUVBO0FBQ0E7O0FBRUE7QUFFQTtBQUtBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUlBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBRUE7QUFDQTtBQUNBOzs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUlBO0FBQ0E7QUFDQTs7O0FBVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBSUE7QUFHQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUdBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7QUFFQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7OztBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./packages/caeDesign/src/viewerWrapper/commands/aftertreatment/distortion/commandDistortion.ts\n");
|
|
5733
|
+
eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__, exports, __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\"), __webpack_require__(/*! ../../../../gsDevFx/operators/cameraMouse */ \"./packages/caeDesign/src/gsDevFx/operators/cameraMouse.ts\"), __webpack_require__(/*! ../../../../gsDevFx/operators/cAEObjectPreSelector */ \"./packages/caeDesign/src/gsDevFx/operators/cAEObjectPreSelector.ts\"), __webpack_require__(/*! ../../../../gsDevFx/operators/caeObjectSelector */ \"./packages/caeDesign/src/gsDevFx/operators/caeObjectSelector.ts\"), __webpack_require__(/*! ../../../../gsDevFx/commands/commandSelect */ \"./packages/caeDesign/src/gsDevFx/commands/commandSelect.ts\"), __webpack_require__(/*! ../../commandComponent */ \"./packages/caeDesign/src/viewerWrapper/commands/commandComponent.ts\"), __webpack_require__(/*! ./distortionConfig */ \"./packages/caeDesign/src/viewerWrapper/commands/aftertreatment/distortion/distortionConfig.ts\"), __webpack_require__(/*! gs-ceec-design */ \"./packages/ceecDesign/src/index.ts\"), __webpack_require__(/*! ../../../../gsDevFx/objects/caeObjects/memberObject */ \"./packages/caeDesign/src/gsDevFx/objects/caeObjects/memberObject.ts\"), __webpack_require__(/*! ../../../../store */ \"./packages/caeDesign/src/store/index.ts\"), __webpack_require__(/*! gs-ceec-design */ \"./packages/ceecDesign/src/index.ts\"), __webpack_require__(/*! gs-bim-air */ \"./node_modules/gs-bim-air/lib/BimAir.umd.min.js\"), __webpack_require__(/*! gs-ceec-design */ \"./packages/ceecDesign/src/index.ts\"), __webpack_require__(/*! element-ui */ \"./node_modules/element-ui/lib/element-ui.common.js\"), __webpack_require__(/*! ../../../../gsDevFx/managers/interfaceManagers/commonInterfaceManager */ \"./packages/caeDesign/src/gsDevFx/managers/interfaceManagers/commonInterfaceManager.ts\")], __WEBPACK_AMD_DEFINE_RESULT__ = (function (require, exports, tslib_1, cameraMouse_1, cAEObjectPreSelector_1, caeObjectSelector_1, commandSelect_1, commandComponent_1, distortionConfig_1, gs_ceec_design_1, memberObject_1, store_1, gs_ceec_design_2, gs_bim_air_1, gs_ceec_design_3, element_ui_1, commonInterfaceManager_1) {\n \"use strict\";\n\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n distortionConfig_1 = tslib_1.__importDefault(distortionConfig_1);\n store_1 = tslib_1.__importDefault(store_1);\n var CommandDistortion = function (_super) {\n tslib_1.__extends(CommandDistortion, _super);\n function CommandDistortion() {\n var _this = _super.call(this) || this;\n _this.typeName = \"CommandDistortion\";\n _this.loadConditions = new Array();\n _this.postJointResult = null;\n _this._group = null;\n _this.labelJoints = new Array();\n _this.labelStrings = new Array();\n _this.resultLabel = new Array();\n _this.resultLabelDic = {};\n _this.labelColor = \"#ffffff\";\n _this.xPixelOffset = 1;\n _this.yPixelOffset = 15;\n _this.joints = new Array();\n _this.members = new Array();\n _this.plates = new Array();\n return _this;\n }\n CommandDistortion.prototype.begin = function () {\n var _this = this;\n this.changeOperators();\n console.log(\"CommandDistortion\");\n this.config = new distortionConfig_1.default();\n this.config.show();\n var postInterfaceManager = this.viewer.postInterfaceManager;\n if (postInterfaceManager.getFinish_distortion) {\n if (postInterfaceManager.distortion) {\n this.dataRequested();\n } else {\n element_ui_1.Message.info(\"R_POSTJOINTDISPLACEMENTRESULTS表不存在,请检查DB文件\");\n return;\n }\n } else {\n postInterfaceManager.tip_distortion = true;\n postInterfaceManager.requested_distortion = function () {\n _this.dataRequested();\n };\n if (!postInterfaceManager.message_distortion) {\n postInterfaceManager.message_distortion = element_ui_1.Message.info({\n message: \"结构变形仍在请求DB数据,请等待请求完成.\",\n duration: 0,\n showClose: true\n });\n }\n }\n var self = this;\n this.viewer.sceneCameraChanged.add(function () {\n for (var i = 0; i < self.labelJoints.length; i++) {\n self.drawSvg(_this.labelJoints[i], _this.labelStrings[i]);\n }\n });\n };\n CommandDistortion.prototype.restore = function () {\n this.changeOperators();\n this.config.show();\n };\n CommandDistortion.prototype.changeOperators = function () {\n var _this = this;\n this.viewer.selectionManager.clearAllSelectionAndHighlight();\n this.viewer.updateDisplay();\n this.viewer.operatorManager.clear();\n this.viewer.operatorManager.add(new cameraMouse_1.CameraMouse());\n this.preSelector = new cAEObjectPreSelector_1.CAEObjectPreSelector();\n this.viewer.operatorManager.add(this.preSelector);\n this.caeObjectSelector = new caeObjectSelector_1.CAEObjectSelector();\n this.viewer.operatorManager.add(this.caeObjectSelector);\n this.caeObjectSelector.lButtonUp.add(function () {\n setTimeout(function () {\n _this.updatePanel();\n }, 0);\n });\n };\n CommandDistortion.prototype.end = function () {\n var postInterfaceManager = this.viewer.postInterfaceManager;\n if (postInterfaceManager.message_distortion) {\n postInterfaceManager.message_distortion.close();\n postInterfaceManager.message_distortion = null;\n }\n this.resetScene();\n this.config.hide();\n _super.prototype.end.call(this);\n this.viewer.selectionManager.clearAllSelectionAndHighlight();\n this.viewer.updateDisplay();\n store_1.default.commit(\"structureTree/updateTreeData\", [this.viewer.structureTreeManager.rootNode]);\n var commandSelect = new commandSelect_1.CommandSelect();\n this.process.commandManager.execute(commandSelect);\n };\n CommandDistortion.prototype.commandOk = function () {\n var postInterfaceManager = this.viewer.postInterfaceManager;\n if (!postInterfaceManager.getFinish_distortion) {\n postInterfaceManager.tip_distortion = true;\n element_ui_1.Message.info({\n message: \"结构变形仍在请求DB数据,请等待请求完成.\"\n });\n return;\n }\n var data = this.config.properties.items[0].data;\n var factor = data.factor.value;\n if (!factor || !Number(factor)) {\n data.tip.value = 1;\n console.log(\"tip: 1-Please enter a value.\");\n return;\n }\n if (Number(factor) <= 0 || Number(factor) > 10000) {\n data.tip.value = 2;\n console.log(\"tip: 2-Factor must be greater than 0 and less than or equal to 100.\");\n return;\n }\n var loadConditionName = data.loadConditionName.value;\n if (this.loadConditions.indexOf(loadConditionName) === -1) {\n element_ui_1.Message.info(\"DB中没有工况:\" + loadConditionName + \"的数据\");\n data.tip.value = 4;\n return;\n }\n this.clearSvg();\n data.tip.value = 0;\n console.log(\"tip: 0-Results have been displayed.\");\n var aftertreatmentRO = this.viewer.process.findRenderObjectByName(\"后处理计算结果\");\n var distortionRO = this.viewer.process.findCaeObjectByNameInChildObject(aftertreatmentRO, \"结构变形\");\n if (distortionRO) {\n this.process.removeRenderObject(distortionRO);\n }\n console.log(\"结构变形\");\n this.viewer.commonInterfaceManager.colorSwitch(commonInterfaceManager_1.SwitchColorDivide.Cancel, false);\n postInterfaceManager.resetOhterPostResult();\n this.viewer.selectionManager.clearAllSelectionAndHighlight();\n distortionRO = new gs_ceec_design_1.DesignBaseObject();\n distortionRO.name = \"结构变形\";\n this.process.addRenderObject(aftertreatmentRO, distortionRO);\n var jointOffsets = this.postJointResult[loadConditionName];\n var joints = new Array();\n var offsets = new Array();\n var labelStrings = new Array();\n var newRotatePositions = new Array();\n for (var i = 0; i < jointOffsets.length; i++) {\n var jointID = jointOffsets[i].JointID;\n var joint = this.viewer.process.findRenderObjectByName(jointID);\n var xOffset = Number(jointOffsets[i].DeflectionX);\n var yOffset = Number(jointOffsets[i].DeflectionY);\n var zOffset = Number(jointOffsets[i].DeflectionZ);\n var xRotate = Number(jointOffsets[i].RotationX);\n var yRotate = Number(jointOffsets[i].RotationY);\n var zRotate = Number(jointOffsets[i].RotationZ);\n if (joint) {\n joints.push(joint);\n offsets.push([xOffset, yOffset, zOffset]);\n }\n switch (data.distortionParameter.value) {\n case \"0\":\n labelStrings.push(xOffset.toFixed(3));\n break;\n case \"1\":\n labelStrings.push(yOffset.toFixed(3));\n break;\n case \"2\":\n labelStrings.push(zOffset.toFixed(3));\n break;\n case \"3\":\n var sum = Math.sqrt(xOffset * xOffset + yOffset * yOffset + zOffset * zOffset);\n labelStrings.push(sum.toFixed(3));\n break;\n case \"4\":\n labelStrings.push(xRotate.toFixed(3));\n break;\n case \"5\":\n labelStrings.push(yRotate.toFixed(3));\n break;\n case \"6\":\n labelStrings.push(zRotate.toFixed(3));\n break;\n }\n }\n this.distortionOffset(joints, offsets, distortionRO, labelStrings);\n var originShape = data.originShape.value;\n this.viewer.updateDisplay();\n switch (originShape) {\n case \"1\":\n this.clearInvisibleShape();\n this.originModelChangeTransparency(1);\n break;\n case \"2\":\n this.clearInvisibleShape();\n this.originModelChangeTransparency(0.5);\n break;\n case \"3\":\n this.invisibleShape();\n break;\n }\n this.viewer.viewInterfaceManager.memberLineView(!this.viewer.viewInterfaceManager.memberIsLine, false);\n this.viewer.viewInterfaceManager.memberLineView(!this.viewer.viewInterfaceManager.memberIsLine, false);\n this.viewer.updateDisplay();\n postInterfaceManager.active_distortion = true;\n store_1.default.commit(\"structureTree/updateTreeData\", [this.viewer.structureTreeManager.rootNode]);\n store_1.default.commit(\"setMsg\", \"Defl Shape LC:\" + loadConditionName);\n };\n CommandDistortion.prototype.setMaxDeflected = function () {\n var e_1, _a;\n var data = this.config.properties.items[0].data;\n if (this.postJointResult) {\n var maxDeflected = 0;\n var maxDeflected_item = \"\";\n try {\n for (var _b = tslib_1.__values(Object.keys(this.postJointResult)), _c = _b.next(); !_c.done; _c = _b.next()) {\n var item = _c.value;\n var elementArr = this.postJointResult[item];\n var maxValue = 0;\n for (var index = 0; index < elementArr.length; index++) {\n var element = elementArr[index];\n var value = Math.sqrt(Math.pow(element.DeflectionX, 2) + Math.pow(element.DeflectionY, 2) + Math.pow(element.DeflectionZ, 2));\n if (value > maxValue) {\n maxValue = value;\n }\n }\n if (maxValue > maxDeflected) {\n maxDeflected = maxValue;\n maxDeflected_item = item;\n }\n }\n } catch (e_1_1) {\n e_1 = {\n error: e_1_1\n };\n } finally {\n try {\n if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n data.loadConditionName.value = maxDeflected_item;\n }\n };\n CommandDistortion.prototype.updatePanel = function () {};\n CommandDistortion.prototype.getPoisitionByRotate = function (joint, p0, p1, rad) {\n var axis = gs_bim_air_1.Longan.Point.subtract(p1, p0);\n gs_bim_air_1.Longan.Vector.normalize(axis);\n var matrix = gs_bim_air_1.Longan.Matrix4.rotateByAxis(p0, axis, rad);\n var position = new Float32Array(joint.position);\n position = gs_bim_air_1.Longan.Matrix4.multiplyPoint(matrix, position);\n return position;\n };\n CommandDistortion.prototype.dataRequested = function () {\n var e_2, _a, e_3, _b;\n var postInterfaceManager = this.viewer.postInterfaceManager;\n this.postJointResult = postInterfaceManager.distortion;\n var counter = 0;\n try {\n for (var _c = tslib_1.__values(Object.keys(this.postJointResult)), _d = _c.next(); !_d.done; _d = _c.next()) {\n var i = _d.value;\n counter++;\n }\n } catch (e_2_1) {\n e_2 = {\n error: e_2_1\n };\n } finally {\n try {\n if (_d && !_d.done && (_a = _c.return)) _a.call(_c);\n } finally {\n if (e_2) throw e_2.error;\n }\n }\n if (counter === 0) {\n element_ui_1.Message.info(\"查询R_POSTJOINTDISPLACEMENTRESULTS表数据为空,请检查DB文件\");\n var data = this.config.properties.items[0].data;\n data.tip.value = 3;\n return;\n }\n this.config.properties.items[0].data.loadConditionName.selectOptions.selections = [];\n try {\n for (var _e = tslib_1.__values(Object.keys(this.postJointResult)), _f = _e.next(); !_f.done; _f = _e.next()) {\n var i = _f.value;\n if (this.postJointResult[i][0]) {\n var loadConditionName = this.postJointResult[i][0].LoadConditionName;\n this.config.properties.items[0].data.loadConditionName.selectOptions.selections.push({\n label: loadConditionName,\n value: loadConditionName\n });\n this.loadConditions.push(loadConditionName);\n }\n }\n } catch (e_3_1) {\n e_3 = {\n error: e_3_1\n };\n } finally {\n try {\n if (_f && !_f.done && (_b = _e.return)) _b.call(_e);\n } finally {\n if (e_3) throw e_3.error;\n }\n }\n };\n CommandDistortion.prototype.originModelChangeTransparency = function (transparency) {\n var members = this.process.caeRenderObjectTreeManager.memberNode;\n console.log(\"memberNode length:\", members.childObjects.length);\n for (var i = 0; i < members.childObjects.length; i++) {\n var member = members.childObjects[i];\n if (member) {\n if (transparency === 1) {\n member.isDottedLine = false;\n } else {\n member.isDottedLine = true;\n }\n if (member.faceColor) {\n member.faceColor[3] = transparency;\n } else {\n member.segment.color.faceTransparency = transparency;\n }\n member.setNeedUpdate();\n }\n }\n };\n CommandDistortion.prototype.invisibleShape = function () {\n var _this = this;\n var viewer = this.viewer;\n var joints = this.process.caeRenderObjectTreeManager.jointNode;\n joints.childObjects.forEach(function (ro) {\n var iro = viewer.findInstanceObject(ro);\n if (iro) {\n _this.joints.push(ro);\n iro.visible = false;\n }\n });\n var members = this.process.caeRenderObjectTreeManager.memberNode;\n members.childObjects.forEach(function (ro) {\n var iro = viewer.findInstanceObject(ro);\n if (iro) {\n _this.members.push(ro);\n iro.visible = false;\n }\n });\n var plates = this.process.caeRenderObjectTreeManager.plateNode;\n plates.childObjects.forEach(function (ro) {\n var iro = viewer.findInstanceObject(ro);\n if (iro) {\n _this.plates.push(ro);\n iro.visible = false;\n }\n });\n };\n CommandDistortion.prototype.clearInvisibleShape = function () {\n var viewer = this.viewer;\n var joints = this.joints;\n joints.forEach(function (ro) {\n var iro = viewer.findInstanceObject(ro);\n if (iro) {\n iro.visible = true;\n }\n });\n var members = this.members;\n members.forEach(function (ro) {\n var iro = viewer.findInstanceObject(ro);\n if (iro) {\n iro.visible = true;\n }\n });\n var plates = this.plates;\n plates.forEach(function (ro) {\n var iro = viewer.findInstanceObject(ro);\n if (iro) {\n iro.visible = true;\n }\n });\n };\n CommandDistortion.prototype.distortionOffset = function (joints, offsets, distortionRO, labelStrings) {\n this.labelStrings = new Array();\n this.labelJoints = new Array();\n var jointIdMapCloneObj = {};\n var addedObjects = new Array();\n var data = this.config.properties.items[0].data;\n var factor = data.factor.value ? data.factor.value : 1;\n for (var i = 0; i < joints.length; i++) {\n var joint = joints[i];\n var offset = offsets[i];\n for (var i_1 = 0; i_1 < offset.length; i_1++) {\n offset[i_1] *= factor;\n }\n var cloneObj = this.viewer.process.cloneManager.cloneObject(joint);\n var newPosition = [0, 0, 0];\n newPosition[0] = cloneObj.position[0] + offset[0] / 100;\n newPosition[1] = cloneObj.position[1] + offset[1] / 100;\n newPosition[2] = cloneObj.position[2] + offset[2] / 100;\n cloneObj.position = newPosition;\n cloneObj.businessState = gs_ceec_design_2.BusinessState.Living;\n cloneObj.setNeedUpdate();\n jointIdMapCloneObj[joint.id] = cloneObj;\n this.process.addRenderObject(distortionRO, cloneObj);\n this.labelJoints.push(cloneObj);\n this.labelStrings.push(labelStrings[i]);\n this.initDrawSvg(cloneObj, labelStrings[i]);\n }\n var memberNode = this.process.caeRenderObjectTreeManager.memberNode;\n for (var i = 0; i < memberNode.childObjects.length; i++) {\n var member = memberNode.childObjects[i];\n var cloneObj = this.viewer.process.cloneManager.cloneObject(member);\n cloneObj.start = jointIdMapCloneObj[cloneObj.start.id];\n cloneObj.end = jointIdMapCloneObj[cloneObj.end.id];\n cloneObj.businessState = gs_ceec_design_2.BusinessState.Living;\n if (cloneObj.start && cloneObj.end) {\n addedObjects.push(cloneObj);\n }\n }\n var plateNode = this.process.caeRenderObjectTreeManager.plateNode;\n for (var i = 0; i < plateNode.childObjects.length; i++) {\n var plate = plateNode.childObjects[i];\n var cloneObj = this.viewer.process.cloneManager.cloneObject(plate);\n var flag = true;\n for (var j = 0; j < cloneObj.joints.length; j++) {\n cloneObj.joints[j] = jointIdMapCloneObj[cloneObj.joints[j].id];\n if (!cloneObj.joints[j]) {\n flag = false;\n }\n }\n cloneObj.businessState = gs_ceec_design_2.BusinessState.Living;\n if (flag) {\n addedObjects.push(cloneObj);\n }\n }\n var distortionShape = data.distortionShape.value;\n for (var i = 0; i < addedObjects.length; i++) {\n var obj = addedObjects[i];\n this.process.addRenderObject(distortionRO, obj);\n obj.setNeedUpdate();\n if (obj instanceof memberObject_1.MemberObject) {\n if (distortionShape === \"1\") {\n this.distortionShapeChangeTransparency(obj, 1);\n obj.isDottedLine = false;\n } else if (distortionShape === \"2\") {\n this.distortionShapeChangeTransparency(obj, 0.5);\n obj.isDottedLine = true;\n }\n }\n }\n };\n CommandDistortion.prototype.clearSvg = function () {\n if (this.resultLabel) {\n this.resultLabel.forEach(function (item) {\n item.clear();\n item = null;\n });\n this.resultLabel = new Array();\n }\n this.labelJoints = new Array();\n this.labelStrings = new Array();\n this.resultLabelDic = {};\n };\n CommandDistortion.prototype.initDrawSvg = function (jointObject, labelData) {\n var position = jointObject.position;\n var curretPos = position;\n var point = this.viewer.worldPointToPixelPoint([curretPos])[0];\n var id = jointObject.name;\n if (this.resultLabelDic[id]) {\n this.resultLabelDic[id].move(point[0] + this.xPixelOffset, point[1] + this.yPixelOffset);\n this.resultLabelDic[id].attr(\"font-size\", gs_ceec_design_1.DesignBaseObject.fontSize);\n } else {\n var draw = gs_ceec_design_3.SvgDraw.getInstance(this.viewer.container.id).draw;\n this._group = draw.group();\n var resultText = draw.text(Number.isNaN(Number(labelData)) ? labelData : Number(labelData).toFixed(3)).font({\n fill: this.labelColor\n }).attr(\"font-size\", gs_ceec_design_1.DesignBaseObject.fontSize).move(point[0] + this.xPixelOffset, point[1] + this.yPixelOffset);\n this.resultLabel.push(resultText);\n this.resultLabelDic[id] = resultText;\n this._group.add(resultText);\n }\n };\n CommandDistortion.prototype.drawSvg = function (jointObject, labelData) {\n var position = jointObject.position;\n var curretPos = position;\n var point = this.viewer.worldPointToPixelPoint([curretPos])[0];\n var id = jointObject.name;\n if (this.resultLabelDic[id]) {\n this.resultLabelDic[id].move(point[0] + this.xPixelOffset, point[1] + this.yPixelOffset);\n this.resultLabelDic[id].attr(\"font-size\", gs_ceec_design_1.DesignBaseObject.fontSize);\n } else {\n var draw = gs_ceec_design_3.SvgDraw.getInstance(this.viewer.container.id).draw;\n this._group = draw.group();\n var resultText = draw.text(Number.isNaN(Number(labelData)) ? labelData : Number(labelData).toFixed(3)).font({\n fill: this.labelColor\n }).attr(\"font-size\", gs_ceec_design_1.DesignBaseObject.fontSize).move(point[0] + this.xPixelOffset, point[1] + this.yPixelOffset);\n this.resultLabel.push(resultText);\n this.resultLabelDic[id] = resultText;\n this._group.add(resultText);\n }\n };\n CommandDistortion.prototype.distortionPositions = function (joints, newPositions, distortionRO) {\n var jointIdMapCloneObj = {};\n var addedObjects = new Array();\n var data = this.config.properties.items[0].data;\n for (var i = 0; i < joints.length; i++) {\n var joint = joints[i];\n var cloneObj = this.viewer.process.cloneManager.cloneObject(joint);\n cloneObj.position = newPositions[i];\n cloneObj.businessState = gs_ceec_design_2.BusinessState.Living;\n cloneObj.setNeedUpdate();\n jointIdMapCloneObj[joint.id] = cloneObj;\n this.process.addRenderObject(distortionRO, cloneObj);\n }\n var memberNode = this.process.caeRenderObjectTreeManager.memberNode;\n for (var i = 0; i < memberNode.childObjects.length; i++) {\n var member = memberNode.childObjects[i];\n var cloneObj = this.viewer.process.cloneManager.cloneObject(member);\n cloneObj.start = jointIdMapCloneObj[cloneObj.start.id];\n cloneObj.end = jointIdMapCloneObj[cloneObj.end.id];\n cloneObj.businessState = gs_ceec_design_2.BusinessState.Living;\n if (cloneObj.start && cloneObj.end) {\n addedObjects.push(cloneObj);\n }\n }\n var plateNode = this.process.caeRenderObjectTreeManager.plateNode;\n for (var i = 0; i < plateNode.childObjects.length; i++) {\n var plate = plateNode.childObjects[i];\n var cloneObj = this.viewer.process.cloneManager.cloneObject(plate);\n var flag = true;\n for (var j = 0; j < cloneObj.joints.length; j++) {\n cloneObj.joints[j] = jointIdMapCloneObj[cloneObj.joints[j].id];\n if (!cloneObj.joints[j]) {\n flag = false;\n }\n }\n cloneObj.businessState = gs_ceec_design_2.BusinessState.Living;\n if (flag) {\n addedObjects.push(cloneObj);\n }\n }\n var distortionShape = data.distortionShape.value;\n for (var i = 0; i < addedObjects.length; i++) {\n var obj = addedObjects[i];\n this.process.addRenderObject(distortionRO, obj);\n obj.setNeedUpdate();\n if (obj instanceof memberObject_1.MemberObject) {\n if (distortionShape === \"1\") {\n this.distortionShapeChangeTransparency(obj, 1);\n obj.isDottedLine = false;\n } else if (distortionShape === \"2\") {\n this.distortionShapeChangeTransparency(obj, 0.5);\n obj.isDottedLine = true;\n }\n }\n }\n };\n CommandDistortion.prototype.distortionShapeChangeTransparency = function (member, transparency) {\n if (member) {\n if (member.faceColor) {\n member.faceColor[3] = transparency;\n } else {\n member.segment.color.faceTransparency = transparency;\n }\n }\n };\n CommandDistortion.prototype.resetScene = function () {\n var _this = this;\n this.clearSvg();\n this.clearInvisibleShape();\n var aftertreatmentRO = this.viewer.process.findRenderObjectByName(\"后处理计算结果\");\n var distortionRO = this.viewer.process.findCaeObjectByNameInChildObject(aftertreatmentRO, \"结构变形\");\n if (distortionRO) {\n distortionRO.childObjects.forEach(function (item) {\n item.delete();\n });\n distortionRO.delete();\n }\n store_1.default.commit(\"setMsg\", null);\n setTimeout(function () {\n _this.originModelChangeTransparency(1);\n }, 0);\n var postInterfaceManager = this.viewer.postInterfaceManager;\n postInterfaceManager.active_distortion = false;\n };\n return CommandDistortion;\n }(commandComponent_1.CommandComponent);\n exports.default = CommandDistortion;\n}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9wYWNrYWdlcy9jYWVEZXNpZ24vc3JjL3ZpZXdlcldyYXBwZXIvY29tbWFuZHMvYWZ0ZXJ0cmVhdG1lbnQvZGlzdG9ydGlvbi9jb21tYW5kRGlzdG9ydGlvbi50cy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1tuYW1lXS8uL3BhY2thZ2VzL2NhZURlc2lnbi9zcmMvdmlld2VyV3JhcHBlci9jb21tYW5kcy9hZnRlcnRyZWF0bWVudC9kaXN0b3J0aW9uL2NvbW1hbmREaXN0b3J0aW9uLnRzP2YyOTQiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2FtZXJhTW91c2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vZ3NEZXZGeC9vcGVyYXRvcnMvY2FtZXJhTW91c2VcIjtcclxuaW1wb3J0IHsgQ0FFT2JqZWN0UHJlU2VsZWN0b3IgfSBmcm9tIFwiLi4vLi4vLi4vLi4vZ3NEZXZGeC9vcGVyYXRvcnMvY0FFT2JqZWN0UHJlU2VsZWN0b3JcIjtcclxuaW1wb3J0IHsgQ0FFT2JqZWN0U2VsZWN0b3IgfSBmcm9tIFwiLi4vLi4vLi4vLi4vZ3NEZXZGeC9vcGVyYXRvcnMvY2FlT2JqZWN0U2VsZWN0b3JcIjtcclxuaW1wb3J0IHsgQ29tbWFuZFNlbGVjdCB9IGZyb20gXCIuLi8uLi8uLi8uLi9nc0RldkZ4L2NvbW1hbmRzL2NvbW1hbmRTZWxlY3RcIjtcclxuaW1wb3J0IHsgQ29tbWFuZENvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9jb21tYW5kQ29tcG9uZW50XCI7XHJcbmltcG9ydCBEaXN0b3J0aW9uQ29uZmlnIGZyb20gXCIuL2Rpc3RvcnRpb25Db25maWdcIjtcclxuaW1wb3J0IHsgSm9pbnRPYmplY3QgfSBmcm9tIFwiLi4vLi4vLi4vLi4vZ3NEZXZGeC9vYmplY3RzL2NhZU9iamVjdHMvam9pbnRPYmplY3RcIjtcclxuaW1wb3J0IHsgRGVzaWduQmFzZU9iamVjdCB9IGZyb20gXCJncy1jZWVjLWRlc2lnblwiO1xyXG5pbXBvcnQgeyBNZW1iZXJPYmplY3QgfSBmcm9tIFwiLi4vLi4vLi4vLi4vZ3NEZXZGeC9vYmplY3RzL2NhZU9iamVjdHMvbWVtYmVyT2JqZWN0XCI7XHJcbmltcG9ydCB7IFBsYXRlT2JqZWN0IH0gZnJvbSBcIi4uLy4uLy4uLy4uL2dzRGV2Rngvb2JqZWN0cy9jYWVPYmplY3RzL3BsYXRlT2JqZWN0XCI7XHJcbmltcG9ydCBzdG9yZSBmcm9tIFwiLi4vLi4vLi4vLi4vc3RvcmVcIjtcclxuaW1wb3J0IHsgQnVzaW5lc3NTdGF0ZSB9IGZyb20gXCJncy1jZWVjLWRlc2lnblwiO1xyXG5pbXBvcnQgeyBMb25nYW4gfSBmcm9tIFwiZ3MtYmltLWFpclwiO1xyXG5pbXBvcnQgeyBHIH0gZnJvbSBcIkBzdmdkb3Rqcy9zdmcuanNcIjtcclxuaW1wb3J0IHsgU3ZnRHJhdyB9IGZyb20gXCJncy1jZWVjLWRlc2lnblwiO1xyXG5pbXBvcnQgeyBNZXNzYWdlIH0gZnJvbSBcImVsZW1lbnQtdWlcIjtcclxuaW1wb3J0IHsgU3dpdGNoQ29sb3JEaXZpZGUgfSBmcm9tIFwiLi4vLi4vLi4vLi4vZ3NEZXZGeC9tYW5hZ2Vycy9pbnRlcmZhY2VNYW5hZ2Vycy9jb21tb25JbnRlcmZhY2VNYW5hZ2VyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb21tYW5kRGlzdG9ydGlvbiBleHRlbmRzIENvbW1hbmRDb21wb25lbnQge1xyXG4gIHR5cGVOYW1lID0gXCJDb21tYW5kRGlzdG9ydGlvblwiO1xyXG5cclxuICBjb25maWc6IERpc3RvcnRpb25Db25maWc7XHJcbiAgcHJlU2VsZWN0b3I6IENBRU9iamVjdFByZVNlbGVjdG9yO1xyXG4gIGNhZU9iamVjdFNlbGVjdG9yOiBDQUVPYmplY3RTZWxlY3RvcjtcclxuXHJcbiAgLy8gbG9hZENvbmRpdGlvblJPOiBMb2FkQ29uZGl0aW9uT2JqZWN0ID0gbnVsbDtcclxuICAvLyBsb2FkR3JvdXBSTzogTG9hZEdyb3VwT2JqZWN0ID0gbnVsbDtcclxuICAvKipcclxuICAgKiDlt6XlhrXlkI3liJfooaguXHJcbiAgICovXHJcbiAgbG9hZENvbmRpdGlvbnM6IHN0cmluZ1tdID0gbmV3IEFycmF5PHN0cmluZz4oKTtcclxuICAvLyDmn6Xor6Lnu5PmnpxcclxuICBwb3N0Sm9pbnRSZXN1bHQgPSBudWxsO1xyXG5cclxuICBfZ3JvdXA6IEcgPSBudWxsO1xyXG4gIGxhYmVsSm9pbnRzID0gbmV3IEFycmF5PEpvaW50T2JqZWN0PigpO1xyXG4gIGxhYmVsU3RyaW5ncyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XHJcblxyXG4gIHJlc3VsdExhYmVsID0gbmV3IEFycmF5PGFueT4oKTtcclxuICByZXN1bHRMYWJlbERpYzogeyBbaWQ6IHN0cmluZ106IGFueSB9ID0ge307XHJcbiAgbGFiZWxDb2xvciA9IFwiI2ZmZmZmZlwiO1xyXG5cclxuICB4UGl4ZWxPZmZzZXQgPSAxO1xyXG4gIHlQaXhlbE9mZnNldCA9IDE1O1xyXG5cclxuICAvKipcclxuICAgKiDooqvpmpDol4/nmoTngrnliJfooahcclxuICAgKi9cclxuICBqb2ludHMgPSBuZXcgQXJyYXk8Sm9pbnRPYmplY3Q+KCk7XHJcbiAgLyoqXHJcbiAgICog6KKr6ZqQ6JeP55qE5p2G5Lu25YiX6KGoXHJcbiAgICovXHJcbiAgbWVtYmVycyA9IG5ldyBBcnJheTxNZW1iZXJPYmplY3Q+KCk7XHJcbiAgLyoqXHJcbiAgICog6KKr6ZqQ6JeP55qE5p2/5YiX6KGoXHJcbiAgICovXHJcbiAgcGxhdGVzID0gbmV3IEFycmF5PFBsYXRlT2JqZWN0PigpO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBiZWdpbigpOiB2b2lkIHtcclxuICAgIHRoaXMuY2hhbmdlT3BlcmF0b3JzKCk7XHJcblxyXG4gICAgY29uc29sZS5sb2coXCJDb21tYW5kRGlzdG9ydGlvblwiKTtcclxuICAgIHRoaXMuY29uZmlnID0gbmV3IERpc3RvcnRpb25Db25maWcoKTtcclxuICAgIHRoaXMuY29uZmlnLnNob3coKTtcclxuXHJcbiAgICBsZXQgcG9zdEludGVyZmFjZU1hbmFnZXIgPSB0aGlzLnZpZXdlci5wb3N0SW50ZXJmYWNlTWFuYWdlcjtcclxuICAgIGlmIChwb3N0SW50ZXJmYWNlTWFuYWdlci5nZXRGaW5pc2hfZGlzdG9ydGlvbikge1xyXG4gICAgICBpZiAocG9zdEludGVyZmFjZU1hbmFnZXIuZGlzdG9ydGlvbikge1xyXG4gICAgICAgIHRoaXMuZGF0YVJlcXVlc3RlZCgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIE1lc3NhZ2UuaW5mbyhcIlJfUE9TVEpPSU5URElTUExBQ0VNRU5UUkVTVUxUU+ihqOS4jeWtmOWcqO+8jOivt+ajgOafpURC5paH5Lu2XCIpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcG9zdEludGVyZmFjZU1hbmFnZXIudGlwX2Rpc3RvcnRpb24gPSB0cnVlO1xyXG4gICAgICBwb3N0SW50ZXJmYWNlTWFuYWdlci5yZXF1ZXN0ZWRfZGlzdG9ydGlvbiA9ICgpID0+IHtcclxuICAgICAgICB0aGlzLmRhdGFSZXF1ZXN0ZWQoKTtcclxuICAgICAgfTtcclxuICAgICAgaWYgKCFwb3N0SW50ZXJmYWNlTWFuYWdlci5tZXNzYWdlX2Rpc3RvcnRpb24pIHtcclxuICAgICAgICBwb3N0SW50ZXJmYWNlTWFuYWdlci5tZXNzYWdlX2Rpc3RvcnRpb24gPSBNZXNzYWdlLmluZm8oe1xyXG4gICAgICAgICAgbWVzc2FnZTogXCLnu5PmnoTlj5jlvaLku43lnKjor7fmsYJEQuaVsOaNru+8jOivt+etieW+heivt+axguWujOaIkC5cIixcclxuICAgICAgICAgIGR1cmF0aW9uOiAwLFxyXG4gICAgICAgICAgc2hvd0Nsb3NlOiB0cnVlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHNlbGYgPSB0aGlzO1xyXG4gICAgdGhpcy52aWV3ZXIuc2NlbmVDYW1lcmFDaGFuZ2VkLmFkZCgoKSA9PiB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VsZi5sYWJlbEpvaW50cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHNlbGYuZHJhd1N2Zyh0aGlzLmxhYmVsSm9pbnRzW2ldLCB0aGlzLmxhYmVsU3RyaW5nc1tpXSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcmVzdG9yZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuY2hhbmdlT3BlcmF0b3JzKCk7XHJcbiAgICB0aGlzLmNvbmZpZy5zaG93KCk7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VPcGVyYXRvcnMoKTogdm9pZCB7XHJcbiAgICAvLyDov5vlhaXlkb3ku6TliY3muIXnqbrpgInkuK3kuI7pq5jkuq4uXHJcbiAgICB0aGlzLnZpZXdlci5zZWxlY3Rpb25NYW5hZ2VyLmNsZWFyQWxsU2VsZWN0aW9uQW5kSGlnaGxpZ2h0KCk7XHJcbiAgICB0aGlzLnZpZXdlci51cGRhdGVEaXNwbGF5KCk7XHJcblxyXG4gICAgLy8g5riF56m65pON5L2c5ZmoLlxyXG4gICAgdGhpcy52aWV3ZXIub3BlcmF0b3JNYW5hZ2VyLmNsZWFyKCk7XHJcbiAgICAvLyDmt7vliqDmk43kvZzlmahcclxuICAgIHRoaXMudmlld2VyLm9wZXJhdG9yTWFuYWdlci5hZGQobmV3IENhbWVyYU1vdXNlKCkpO1xyXG5cclxuICAgIHRoaXMucHJlU2VsZWN0b3IgPSBuZXcgQ0FFT2JqZWN0UHJlU2VsZWN0b3IoKTtcclxuICAgIHRoaXMudmlld2VyLm9wZXJhdG9yTWFuYWdlci5hZGQodGhpcy5wcmVTZWxlY3Rvcik7XHJcblxyXG4gICAgdGhpcy5jYWVPYmplY3RTZWxlY3RvciA9IG5ldyBDQUVPYmplY3RTZWxlY3RvcigpO1xyXG4gICAgdGhpcy52aWV3ZXIub3BlcmF0b3JNYW5hZ2VyLmFkZCh0aGlzLmNhZU9iamVjdFNlbGVjdG9yKTtcclxuXHJcbiAgICB0aGlzLmNhZU9iamVjdFNlbGVjdG9yLmxCdXR0b25VcC5hZGQoKCkgPT4ge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVBhbmVsKCk7XHJcbiAgICAgIH0sIDApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBlbmQoKTogdm9pZCB7XHJcbiAgICBsZXQgcG9zdEludGVyZmFjZU1hbmFnZXIgPSB0aGlzLnZpZXdlci5wb3N0SW50ZXJmYWNlTWFuYWdlcjtcclxuICAgIGlmIChwb3N0SW50ZXJmYWNlTWFuYWdlci5tZXNzYWdlX2Rpc3RvcnRpb24pIHtcclxuICAgICAgcG9zdEludGVyZmFjZU1hbmFnZXIubWVzc2FnZV9kaXN0b3J0aW9uLmNsb3NlKCk7XHJcbiAgICAgIHBvc3RJbnRlcmZhY2VNYW5hZ2VyLm1lc3NhZ2VfZGlzdG9ydGlvbiA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZXNldFNjZW5lKCk7XHJcblxyXG4gICAgdGhpcy5jb25maWcuaGlkZSgpO1xyXG4gICAgc3VwZXIuZW5kKCk7XHJcbiAgICB0aGlzLnZpZXdlci5zZWxlY3Rpb25NYW5hZ2VyLmNsZWFyQWxsU2VsZWN0aW9uQW5kSGlnaGxpZ2h0KCk7XHJcbiAgICB0aGlzLnZpZXdlci51cGRhdGVEaXNwbGF5KCk7XHJcblxyXG4gICAgLy8g5pu05paw5bem5L6n57uT5p6E5qCRXHJcbiAgICBzdG9yZS5jb21taXQoXCJzdHJ1Y3R1cmVUcmVlL3VwZGF0ZVRyZWVEYXRhXCIsIFtcclxuICAgICAgdGhpcy52aWV3ZXIuc3RydWN0dXJlVHJlZU1hbmFnZXIucm9vdE5vZGUsXHJcbiAgICBdKTtcclxuXHJcbiAgICBsZXQgY29tbWFuZFNlbGVjdCA9IG5ldyBDb21tYW5kU2VsZWN0KCk7XHJcbiAgICB0aGlzLnByb2Nlc3MuY29tbWFuZE1hbmFnZXIuZXhlY3V0ZShjb21tYW5kU2VsZWN0KTtcclxuICB9XHJcblxyXG4gIGNvbW1hbmRPaygpOiB2b2lkIHtcclxuICAgIGxldCBwb3N0SW50ZXJmYWNlTWFuYWdlciA9IHRoaXMudmlld2VyLnBvc3RJbnRlcmZhY2VNYW5hZ2VyO1xyXG4gICAgaWYgKCFwb3N0SW50ZXJmYWNlTWFuYWdlci5nZXRGaW5pc2hfZGlzdG9ydGlvbikge1xyXG4gICAgICBwb3N0SW50ZXJmYWNlTWFuYWdlci50aXBfZGlzdG9ydGlvbiA9IHRydWU7XHJcbiAgICAgIE1lc3NhZ2UuaW5mbyh7IG1lc3NhZ2U6IFwi57uT5p6E5Y+Y5b2i5LuN5Zyo6K+35rGCRELmlbDmja7vvIzor7fnrYnlvoXor7fmsYLlrozmiJAuXCIgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZGF0YSA9IHRoaXMuY29uZmlnLnByb3BlcnRpZXMuaXRlbXNbMF0uZGF0YTtcclxuICAgIGxldCBmYWN0b3IgPSBkYXRhLmZhY3Rvci52YWx1ZTtcclxuICAgIC8vIHRpcFxyXG4gICAgaWYgKCFmYWN0b3IgfHwgIU51bWJlcihmYWN0b3IpKSB7XHJcbiAgICAgIGRhdGEudGlwLnZhbHVlID0gMTtcclxuICAgICAgY29uc29sZS5sb2coXCJ0aXA6IDEtUGxlYXNlIGVudGVyIGEgdmFsdWUuXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKE51bWJlcihmYWN0b3IpIDw9IDAgfHwgTnVtYmVyKGZhY3RvcikgPiAxMDAwMCkge1xyXG4gICAgICBkYXRhLnRpcC52YWx1ZSA9IDI7XHJcbiAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgIFwidGlwOiAyLUZhY3RvciBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAwIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMTAwLlwiXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgbG9hZENvbmRpdGlvbk5hbWUgPSBkYXRhLmxvYWRDb25kaXRpb25OYW1lLnZhbHVlO1xyXG4gICAgaWYgKHRoaXMubG9hZENvbmRpdGlvbnMuaW5kZXhPZihsb2FkQ29uZGl0aW9uTmFtZSkgPT09IC0xKSB7XHJcbiAgICAgIE1lc3NhZ2UuaW5mbyhcIkRC5Lit5rKh5pyJ5bel5Ya1OlwiICsgbG9hZENvbmRpdGlvbk5hbWUgKyBcIueahOaVsOaNrlwiKTtcclxuICAgICAgZGF0YS50aXAudmFsdWUgPSA0O1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jbGVhclN2ZygpO1xyXG4gICAgZGF0YS50aXAudmFsdWUgPSAwO1xyXG4gICAgY29uc29sZS5sb2coXCJ0aXA6IDAtUmVzdWx0cyBoYXZlIGJlZW4gZGlzcGxheWVkLlwiKTtcclxuXHJcbiAgICBsZXQgYWZ0ZXJ0cmVhdG1lbnRSTyA9IHRoaXMudmlld2VyLnByb2Nlc3MuZmluZFJlbmRlck9iamVjdEJ5TmFtZShcclxuICAgICAgXCLlkI7lpITnkIborqHnrpfnu5PmnpxcIlxyXG4gICAgKSBhcyBEZXNpZ25CYXNlT2JqZWN0O1xyXG4gICAgbGV0IGRpc3RvcnRpb25STyA9IHRoaXMudmlld2VyLnByb2Nlc3MuZmluZENhZU9iamVjdEJ5TmFtZUluQ2hpbGRPYmplY3QoXHJcbiAgICAgIGFmdGVydHJlYXRtZW50Uk8sXHJcbiAgICAgIFwi57uT5p6E5Y+Y5b2iXCJcclxuICAgICk7XHJcbiAgICBpZiAoZGlzdG9ydGlvblJPKSB7XHJcbiAgICAgIHRoaXMucHJvY2Vzcy5yZW1vdmVSZW5kZXJPYmplY3QoZGlzdG9ydGlvblJPKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZyhcIue7k+aehOWPmOW9olwiKTtcclxuICAgIC8vIOWPlua2iOWJjeWkhOeQhuWIhuiJsuaViOaenFxyXG4gICAgdGhpcy52aWV3ZXIuY29tbW9uSW50ZXJmYWNlTWFuYWdlci5jb2xvclN3aXRjaChcclxuICAgICAgU3dpdGNoQ29sb3JEaXZpZGUuQ2FuY2VsLFxyXG4gICAgICBmYWxzZVxyXG4gICAgKTtcclxuICAgIC8vIOWPlua2iOWFtuS7luWQjuWkhOeQhuWIhuiJsuaViOaenC5cclxuICAgIHBvc3RJbnRlcmZhY2VNYW5hZ2VyLnJlc2V0T2h0ZXJQb3N0UmVzdWx0KCk7XHJcblxyXG4gICAgdGhpcy52aWV3ZXIuc2VsZWN0aW9uTWFuYWdlci5jbGVhckFsbFNlbGVjdGlvbkFuZEhpZ2hsaWdodCgpO1xyXG5cclxuICAgIGRpc3RvcnRpb25STyA9IG5ldyBEZXNpZ25CYXNlT2JqZWN0KCk7XHJcbiAgICBkaXN0b3J0aW9uUk8ubmFtZSA9IFwi57uT5p6E5Y+Y5b2iXCI7XHJcbiAgICB0aGlzLnByb2Nlc3MuYWRkUmVuZGVyT2JqZWN0KGFmdGVydHJlYXRtZW50Uk8sIGRpc3RvcnRpb25STyk7XHJcblxyXG4gICAgLy8g5oC75L2TWOS9jeenu1xyXG4gICAgbGV0IGpvaW50T2Zmc2V0cyA9IHRoaXMucG9zdEpvaW50UmVzdWx0W2xvYWRDb25kaXRpb25OYW1lXTtcclxuICAgIC8v6LCD55So5o6l5Y+j6I635Y+Wc3FsaXRl5paH5Lu255qEeOWBj+enuy5cclxuICAgIGxldCBqb2ludHMgPSBuZXcgQXJyYXk8Sm9pbnRPYmplY3Q+KCk7XHJcbiAgICBsZXQgb2Zmc2V0cyA9IG5ldyBBcnJheTxudW1iZXJbXT4oKTtcclxuICAgIGxldCBsYWJlbFN0cmluZ3MgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xyXG4gICAgbGV0IG5ld1JvdGF0ZVBvc2l0aW9ucyA9IG5ldyBBcnJheTxudW1iZXJbXT4oKTtcclxuXHJcbiAgICAvLyDmgLvkvY3np7tcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgam9pbnRPZmZzZXRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBqb2ludElEID0gam9pbnRPZmZzZXRzW2ldLkpvaW50SUQ7XHJcbiAgICAgIGxldCBqb2ludCA9IHRoaXMudmlld2VyLnByb2Nlc3MuZmluZFJlbmRlck9iamVjdEJ5TmFtZShcclxuICAgICAgICBqb2ludElEXHJcbiAgICAgICkgYXMgSm9pbnRPYmplY3Q7XHJcbiAgICAgIGxldCB4T2Zmc2V0ID0gTnVtYmVyKGpvaW50T2Zmc2V0c1tpXS5EZWZsZWN0aW9uWCk7XHJcbiAgICAgIGxldCB5T2Zmc2V0ID0gTnVtYmVyKGpvaW50T2Zmc2V0c1tpXS5EZWZsZWN0aW9uWSk7XHJcbiAgICAgIGxldCB6T2Zmc2V0ID0gTnVtYmVyKGpvaW50T2Zmc2V0c1tpXS5EZWZsZWN0aW9uWik7XHJcbiAgICAgIGxldCB4Um90YXRlID0gTnVtYmVyKGpvaW50T2Zmc2V0c1tpXS5Sb3RhdGlvblgpO1xyXG4gICAgICBsZXQgeVJvdGF0ZSA9IE51bWJlcihqb2ludE9mZnNldHNbaV0uUm90YXRpb25ZKTtcclxuICAgICAgbGV0IHpSb3RhdGUgPSBOdW1iZXIoam9pbnRPZmZzZXRzW2ldLlJvdGF0aW9uWik7XHJcblxyXG4gICAgICBpZiAoam9pbnQpIHtcclxuICAgICAgICBqb2ludHMucHVzaChqb2ludCk7XHJcbiAgICAgICAgb2Zmc2V0cy5wdXNoKFt4T2Zmc2V0LCB5T2Zmc2V0LCB6T2Zmc2V0XSk7XHJcbiAgICAgIH1cclxuICAgICAgc3dpdGNoIChkYXRhLmRpc3RvcnRpb25QYXJhbWV0ZXIudmFsdWUpIHtcclxuICAgICAgICBjYXNlIFwiMFwiOlxyXG4gICAgICAgICAgbGFiZWxTdHJpbmdzLnB1c2goeE9mZnNldC50b0ZpeGVkKDMpKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCIxXCI6XHJcbiAgICAgICAgICBsYWJlbFN0cmluZ3MucHVzaCh5T2Zmc2V0LnRvRml4ZWQoMykpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcIjJcIjpcclxuICAgICAgICAgIGxhYmVsU3RyaW5ncy5wdXNoKHpPZmZzZXQudG9GaXhlZCgzKSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwiM1wiOlxyXG4gICAgICAgICAgbGV0IHN1bSA9IE1hdGguc3FydChcclxuICAgICAgICAgICAgeE9mZnNldCAqIHhPZmZzZXQgKyB5T2Zmc2V0ICogeU9mZnNldCArIHpPZmZzZXQgKiB6T2Zmc2V0XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgbGFiZWxTdHJpbmdzLnB1c2goc3VtLnRvRml4ZWQoMykpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBcIjRcIjpcclxuICAgICAgICAgIGxhYmVsU3RyaW5ncy5wdXNoKHhSb3RhdGUudG9GaXhlZCgzKSk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlIFwiNVwiOlxyXG4gICAgICAgICAgbGFiZWxTdHJpbmdzLnB1c2goeVJvdGF0ZS50b0ZpeGVkKDMpKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgXCI2XCI6XHJcbiAgICAgICAgICBsYWJlbFN0cmluZ3MucHVzaCh6Um90YXRlLnRvRml4ZWQoMykpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuZGlzdG9ydGlvbk9mZnNldChqb2ludHMsIG9mZnNldHMsIGRpc3RvcnRpb25STywgbGFiZWxTdHJpbmdzKTtcclxuICAgIGxldCBvcmlnaW5TaGFwZSA9IGRhdGEub3JpZ2luU2hhcGUudmFsdWU7XHJcblxyXG4gICAgdGhpcy52aWV3ZXIudXBkYXRlRGlzcGxheSgpO1xyXG5cclxuICAgIHN3aXRjaCAob3JpZ2luU2hhcGUpIHtcclxuICAgICAgY2FzZSBcIjFcIjpcclxuICAgICAgICB0aGlzLmNsZWFySW52aXNpYmxlU2hhcGUoKTtcclxuICAgICAgICB0aGlzLm9yaWdpbk1vZGVsQ2hhbmdlVHJhbnNwYXJlbmN5KDEpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiMlwiOlxyXG4gICAgICAgIHRoaXMuY2xlYXJJbnZpc2libGVTaGFwZSgpO1xyXG4gICAgICAgIHRoaXMub3JpZ2luTW9kZWxDaGFuZ2VUcmFuc3BhcmVuY3koMC41KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcIjNcIjpcclxuICAgICAgICB0aGlzLmludmlzaWJsZVNoYXBlKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy52aWV3ZXIudmlld0ludGVyZmFjZU1hbmFnZXIubWVtYmVyTGluZVZpZXcoXHJcbiAgICAgICF0aGlzLnZpZXdlci52aWV3SW50ZXJmYWNlTWFuYWdlci5tZW1iZXJJc0xpbmUsXHJcbiAgICAgIGZhbHNlXHJcbiAgICApO1xyXG4gICAgdGhpcy52aWV3ZXIudmlld0ludGVyZmFjZU1hbmFnZXIubWVtYmVyTGluZVZpZXcoXHJcbiAgICAgICF0aGlzLnZpZXdlci52aWV3SW50ZXJmYWNlTWFuYWdlci5tZW1iZXJJc0xpbmUsXHJcbiAgICAgIGZhbHNlXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMudmlld2VyLnVwZGF0ZURpc3BsYXkoKTtcclxuXHJcbiAgICAvLyB0aGlzLnZpZXdlci51cGRhdGVEaXNwbGF5KCk7XHJcbiAgICBwb3N0SW50ZXJmYWNlTWFuYWdlci5hY3RpdmVfZGlzdG9ydGlvbiA9IHRydWU7XHJcblxyXG4gICAgLy8g5pu05paw5bem5L6n57uT5p6E5qCRXHJcbiAgICBzdG9yZS5jb21taXQoXCJzdHJ1Y3R1cmVUcmVlL3VwZGF0ZVRyZWVEYXRhXCIsIFtcclxuICAgICAgdGhpcy52aWV3ZXIuc3RydWN0dXJlVHJlZU1hbmFnZXIucm9vdE5vZGUsXHJcbiAgICBdKTtcclxuXHJcbiAgICBzdG9yZS5jb21taXQoXCJzZXRNc2dcIiwgXCJEZWZsIFNoYXBlIExDOlwiICsgbG9hZENvbmRpdGlvbk5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5piv5ZCm6K6+572u5pyA5aSn5Y+Y5b2i55qE6I236L295bel5Ya1XHJcbiAgICovXHJcbiAgc2V0TWF4RGVmbGVjdGVkKCkge1xyXG4gICAgbGV0IGRhdGEgPSB0aGlzLmNvbmZpZy5wcm9wZXJ0aWVzLml0ZW1zWzBdLmRhdGE7XHJcblxyXG4gICAgaWYgKHRoaXMucG9zdEpvaW50UmVzdWx0KSB7XHJcbiAgICAgIGxldCBtYXhEZWZsZWN0ZWQgPSAwO1xyXG4gICAgICBsZXQgbWF4RGVmbGVjdGVkX2l0ZW0gPSBcIlwiO1xyXG4gICAgICBmb3IgKGxldCBpdGVtIG9mIE9iamVjdC5rZXlzKHRoaXMucG9zdEpvaW50UmVzdWx0KSkge1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnRBcnIgPSB0aGlzLnBvc3RKb2ludFJlc3VsdFtpdGVtXTtcclxuICAgICAgICBsZXQgbWF4VmFsdWUgPSAwO1xyXG4gICAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBlbGVtZW50QXJyLmxlbmd0aDsgaW5kZXgrKykge1xyXG4gICAgICAgICAgY29uc3QgZWxlbWVudCA9IGVsZW1lbnRBcnJbaW5kZXhdO1xyXG4gICAgICAgICAgbGV0IHZhbHVlID0gTWF0aC5zcXJ0KFxyXG4gICAgICAgICAgICBlbGVtZW50LkRlZmxlY3Rpb25YICoqIDIgK1xyXG4gICAgICAgICAgICAgIGVsZW1lbnQuRGVmbGVjdGlvblkgKiogMiArXHJcbiAgICAgICAgICAgICAgZWxlbWVudC5EZWZsZWN0aW9uWiAqKiAyXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgaWYgKHZhbHVlID4gbWF4VmFsdWUpIHtcclxuICAgICAgICAgICAgbWF4VmFsdWUgPSB2YWx1ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1heFZhbHVlID4gbWF4RGVmbGVjdGVkKSB7XHJcbiAgICAgICAgICBtYXhEZWZsZWN0ZWQgPSBtYXhWYWx1ZTtcclxuICAgICAgICAgIG1heERlZmxlY3RlZF9pdGVtID0gaXRlbTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgZGF0YS5sb2FkQ29uZGl0aW9uTmFtZS52YWx1ZSA9IG1heERlZmxlY3RlZF9pdGVtO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlUGFuZWwoKSB7fVxyXG5cclxuICBnZXRQb2lzaXRpb25CeVJvdGF0ZShcclxuICAgIGpvaW50OiBKb2ludE9iamVjdCxcclxuICAgIHAwOiBGbG9hdDMyQXJyYXksXHJcbiAgICBwMTogRmxvYXQzMkFycmF5LFxyXG4gICAgcmFkOiBudW1iZXJcclxuICApIHtcclxuICAgIC8vXHJcbiAgICBsZXQgYXhpcyA9IExvbmdhbi5Qb2ludC5zdWJ0cmFjdChwMSwgcDApO1xyXG4gICAgTG9uZ2FuLlZlY3Rvci5ub3JtYWxpemUoYXhpcyk7XHJcbiAgICBsZXQgbWF0cml4ID0gTG9uZ2FuLk1hdHJpeDQucm90YXRlQnlBeGlzKHAwLCBheGlzLCByYWQpO1xyXG4gICAgbGV0IHBvc2l0aW9uID0gbmV3IEZsb2F0MzJBcnJheShqb2ludC5wb3NpdGlvbik7XHJcbiAgICBwb3NpdGlvbiA9IExvbmdhbi5NYXRyaXg0Lm11bHRpcGx5UG9pbnQobWF0cml4LCBwb3NpdGlvbik7XHJcblxyXG4gICAgcmV0dXJuIHBvc2l0aW9uO1xyXG4gICAgLy8gam9pbnQueE9uTWV0ZXIgPSBwb3NpdGlvblswXTtcclxuICAgIC8vIGpvaW50LnlPbk1ldGVyID0gcG9zaXRpb25bMV07XHJcbiAgICAvLyBqb2ludC56T25NZXRlciA9IHBvc2l0aW9uWzJdO1xyXG4gICAgLy8gam9pbnQueE9uQ2VudGltZXRlciA9IDA7XHJcbiAgICAvLyBqb2ludC55T25DZW50aW1ldGVyID0gMDtcclxuICAgIC8vIGpvaW50LnpPbkNlbnRpbWV0ZXIgPSAwO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBkYXRhUmVxdWVzdGVkKCkge1xyXG4gICAgbGV0IHBvc3RJbnRlcmZhY2VNYW5hZ2VyID0gdGhpcy52aWV3ZXIucG9zdEludGVyZmFjZU1hbmFnZXI7XHJcbiAgICB0aGlzLnBvc3RKb2ludFJlc3VsdCA9IHBvc3RJbnRlcmZhY2VNYW5hZ2VyLmRpc3RvcnRpb247XHJcblxyXG4gICAgbGV0IGNvdW50ZXIgPSAwO1xyXG4gICAgZm9yIChsZXQgaSBvZiBPYmplY3Qua2V5cyh0aGlzLnBvc3RKb2ludFJlc3VsdCkpIHtcclxuICAgICAgY291bnRlcisrO1xyXG4gICAgfVxyXG4gICAgaWYgKGNvdW50ZXIgPT09IDApIHtcclxuICAgICAgTWVzc2FnZS5pbmZvKFxyXG4gICAgICAgIFwi5p+l6K+iUl9QT1NUSk9JTlRESVNQTEFDRU1FTlRSRVNVTFRT6KGo5pWw5o2u5Li656m677yM6K+35qOA5p+lRELmlofku7ZcIlxyXG4gICAgICApO1xyXG4gICAgICBsZXQgZGF0YSA9IHRoaXMuY29uZmlnLnByb3BlcnRpZXMuaXRlbXNbMF0uZGF0YTtcclxuICAgICAgZGF0YS50aXAudmFsdWUgPSAzO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jb25maWcucHJvcGVydGllcy5pdGVtc1swXS5kYXRhLmxvYWRDb25kaXRpb25OYW1lLnNlbGVjdE9wdGlvbnMuc2VsZWN0aW9ucyA9XHJcbiAgICAgIFtdO1xyXG4gICAgZm9yIChsZXQgaSBvZiBPYmplY3Qua2V5cyh0aGlzLnBvc3RKb2ludFJlc3VsdCkpIHtcclxuICAgICAgaWYgKHRoaXMucG9zdEpvaW50UmVzdWx0W2ldWzBdKSB7XHJcbiAgICAgICAgbGV0IGxvYWRDb25kaXRpb25OYW1lID0gdGhpcy5wb3N0Sm9pbnRSZXN1bHRbaV1bMF0uTG9hZENvbmRpdGlvbk5hbWU7XHJcbiAgICAgICAgdGhpcy5jb25maWcucHJvcGVydGllcy5pdGVtc1swXS5kYXRhLmxvYWRDb25kaXRpb25OYW1lLnNlbGVjdE9wdGlvbnMuc2VsZWN0aW9ucy5wdXNoKFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBsYWJlbDogbG9hZENvbmRpdGlvbk5hbWUsXHJcbiAgICAgICAgICAgIHZhbHVlOiBsb2FkQ29uZGl0aW9uTmFtZSxcclxuICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLmxvYWRDb25kaXRpb25zLnB1c2gobG9hZENvbmRpdGlvbk5hbWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyDljp/mqKHlnovlpITnkIYo6YCP5piO44CB6Jma57q/KVxyXG4gIG9yaWdpbk1vZGVsQ2hhbmdlVHJhbnNwYXJlbmN5KHRyYW5zcGFyZW5jeTogbnVtYmVyKSB7XHJcbiAgICBsZXQgbWVtYmVycyA9IHRoaXMucHJvY2Vzcy5jYWVSZW5kZXJPYmplY3RUcmVlTWFuYWdlci5tZW1iZXJOb2RlO1xyXG4gICAgY29uc29sZS5sb2coXCJtZW1iZXJOb2RlIGxlbmd0aDpcIiwgbWVtYmVycy5jaGlsZE9iamVjdHMubGVuZ3RoKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWVtYmVycy5jaGlsZE9iamVjdHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IG1lbWJlciA9IG1lbWJlcnMuY2hpbGRPYmplY3RzW2ldIGFzIE1lbWJlck9iamVjdDtcclxuICAgICAgaWYgKG1lbWJlcikge1xyXG4gICAgICAgIGlmICh0cmFuc3BhcmVuY3kgPT09IDEpIHtcclxuICAgICAgICAgIG1lbWJlci5pc0RvdHRlZExpbmUgPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbWVtYmVyLmlzRG90dGVkTGluZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtZW1iZXIuZmFjZUNvbG9yKSB7XHJcbiAgICAgICAgICBtZW1iZXIuZmFjZUNvbG9yWzNdID0gdHJhbnNwYXJlbmN5O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBtZW1iZXIuc2VnbWVudC5jb2xvci5mYWNlVHJhbnNwYXJlbmN5ID0gdHJhbnNwYXJlbmN5O1xyXG4gICAgICAgIH1cclxuICAgICAgICBtZW1iZXIuc2V0TmVlZFVwZGF0ZSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDpmpDol4/ljp/nu5PmnoRcclxuICAgKi9cclxuICBpbnZpc2libGVTaGFwZSgpIHtcclxuICAgIGxldCB2aWV3ZXIgPSB0aGlzLnZpZXdlcjtcclxuXHJcbiAgICBsZXQgam9pbnRzID0gdGhpcy5wcm9jZXNzLmNhZVJlbmRlck9iamVjdFRyZWVNYW5hZ2VyLmpvaW50Tm9kZTtcclxuICAgIGpvaW50cy5jaGlsZE9iamVjdHMuZm9yRWFjaCgocm8pID0+IHtcclxuICAgICAgbGV0IGlybyA9IHZpZXdlci5maW5kSW5zdGFuY2VPYmplY3Qocm8pO1xyXG4gICAgICBpZiAoaXJvKSB7XHJcbiAgICAgICAgdGhpcy5qb2ludHMucHVzaChybyBhcyBKb2ludE9iamVjdCk7XHJcbiAgICAgICAgaXJvLnZpc2libGUgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgbGV0IG1lbWJlcnMgPSB0aGlzLnByb2Nlc3MuY2FlUmVuZGVyT2JqZWN0VHJlZU1hbmFnZXIubWVtYmVyTm9kZTtcclxuICAgIG1lbWJlcnMuY2hpbGRPYmplY3RzLmZvckVhY2goKHJvKSA9PiB7XHJcbiAgICAgIGxldCBpcm8gPSB2aWV3ZXIuZmluZEluc3RhbmNlT2JqZWN0KHJvKTtcclxuICAgICAgaWYgKGlybykge1xyXG4gICAgICAgIHRoaXMubWVtYmVycy5wdXNoKHJvIGFzIE1lbWJlck9iamVjdCk7XHJcbiAgICAgICAgaXJvLnZpc2libGUgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgbGV0IHBsYXRlcyA9IHRoaXMucHJvY2Vzcy5jYWVSZW5kZXJPYmplY3RUcmVlTWFuYWdlci5wbGF0ZU5vZGU7XHJcbiAgICBwbGF0ZXMuY2hpbGRPYmplY3RzLmZvckVhY2goKHJvKSA9PiB7XHJcbiAgICAgIGxldCBpcm8gPSB2aWV3ZXIuZmluZEluc3RhbmNlT2JqZWN0KHJvKTtcclxuICAgICAgaWYgKGlybykge1xyXG4gICAgICAgIHRoaXMucGxhdGVzLnB1c2gocm8gYXMgUGxhdGVPYmplY3QpO1xyXG4gICAgICAgIGlyby52aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5Y+W5raI6ZqQ6JeP5Y6f57uT5p6EXHJcbiAgICovXHJcbiAgY2xlYXJJbnZpc2libGVTaGFwZSgpIHtcclxuICAgIGxldCB2aWV3ZXIgPSB0aGlzLnZpZXdlcjtcclxuXHJcbiAgICBsZXQgam9pbnRzID0gdGhpcy5qb2ludHM7XHJcbiAgICBqb2ludHMuZm9yRWFjaCgocm8pID0+IHtcclxuICAgICAgbGV0IGlybyA9IHZpZXdlci5maW5kSW5zdGFuY2VPYmplY3Qocm8pO1xyXG4gICAgICBpZiAoaXJvKSB7XHJcbiAgICAgICAgaXJvLnZpc2libGUgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBsZXQgbWVtYmVycyA9IHRoaXMubWVtYmVycztcclxuICAgIG1lbWJlcnMuZm9yRWFjaCgocm8pID0+IHtcclxuICAgICAgbGV0IGlybyA9IHZpZXdlci5maW5kSW5zdGFuY2VPYmplY3Qocm8pO1xyXG4gICAgICBpZiAoaXJvKSB7XHJcbiAgICAgICAgaXJvLnZpc2libGUgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBsZXQgcGxhdGVzID0gdGhpcy5wbGF0ZXM7XHJcbiAgICBwbGF0ZXMuZm9yRWFjaCgocm8pID0+IHtcclxuICAgICAgbGV0IGlybyA9IHZpZXdlci5maW5kSW5zdGFuY2VPYmplY3Qocm8pO1xyXG4gICAgICBpZiAoaXJvKSB7XHJcbiAgICAgICAgaXJvLnZpc2libGUgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGRpc3RvcnRpb25PZmZzZXQoXHJcbiAgICBqb2ludHM6IEpvaW50T2JqZWN0W10sXHJcbiAgICBvZmZzZXRzOiBudW1iZXJbXVtdLFxyXG4gICAgZGlzdG9ydGlvblJPOiBEZXNpZ25CYXNlT2JqZWN0LFxyXG4gICAgbGFiZWxTdHJpbmdzOiBzdHJpbmdbXVxyXG4gICkge1xyXG4gICAgdGhpcy5sYWJlbFN0cmluZ3MgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xyXG4gICAgdGhpcy5sYWJlbEpvaW50cyA9IG5ldyBBcnJheTxKb2ludE9iamVjdD4oKTtcclxuXHJcbiAgICBsZXQgam9pbnRJZE1hcENsb25lT2JqOiB7IFtpZDogc3RyaW5nXTogSm9pbnRPYmplY3QgfSA9IHt9O1xyXG4gICAgbGV0IGFkZGVkT2JqZWN0cyA9IG5ldyBBcnJheTxEZXNpZ25CYXNlT2JqZWN0PigpO1xyXG5cclxuICAgIGxldCBkYXRhID0gdGhpcy5jb25maWcucHJvcGVydGllcy5pdGVtc1swXS5kYXRhO1xyXG4gICAgbGV0IGZhY3RvciA9IGRhdGEuZmFjdG9yLnZhbHVlID8gZGF0YS5mYWN0b3IudmFsdWUgOiAxO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBqb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGpvaW50ID0gam9pbnRzW2ldO1xyXG4gICAgICBsZXQgb2Zmc2V0ID0gb2Zmc2V0c1tpXTtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvZmZzZXQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBvZmZzZXRbaV0gKj0gZmFjdG9yO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgY2xvbmVPYmogPSB0aGlzLnZpZXdlci5wcm9jZXNzLmNsb25lTWFuYWdlci5jbG9uZU9iamVjdChcclxuICAgICAgICBqb2ludFxyXG4gICAgICApIGFzIEpvaW50T2JqZWN0O1xyXG4gICAgICAvLyDorr7nva7kvY3np7tcclxuICAgICAgbGV0IG5ld1Bvc2l0aW9uID0gWzAsIDAsIDBdO1xyXG4gICAgICBuZXdQb3NpdGlvblswXSA9IGNsb25lT2JqLnBvc2l0aW9uWzBdICsgb2Zmc2V0WzBdIC8gMTAwO1xyXG4gICAgICBuZXdQb3NpdGlvblsxXSA9IGNsb25lT2JqLnBvc2l0aW9uWzFdICsgb2Zmc2V0WzFdIC8gMTAwO1xyXG4gICAgICBuZXdQb3NpdGlvblsyXSA9IGNsb25lT2JqLnBvc2l0aW9uWzJdICsgb2Zmc2V0WzJdIC8gMTAwO1xyXG4gICAgICBjbG9uZU9iai5wb3NpdGlvbiA9IG5ld1Bvc2l0aW9uO1xyXG5cclxuICAgICAgY2xvbmVPYmouYnVzaW5lc3NTdGF0ZSA9IEJ1c2luZXNzU3RhdGUuTGl2aW5nO1xyXG4gICAgICBjbG9uZU9iai5zZXROZWVkVXBkYXRlKCk7XHJcblxyXG4gICAgICBqb2ludElkTWFwQ2xvbmVPYmpbam9pbnQuaWRdID0gY2xvbmVPYmo7XHJcbiAgICAgIHRoaXMucHJvY2Vzcy5hZGRSZW5kZXJPYmplY3QoZGlzdG9ydGlvblJPLCBjbG9uZU9iaik7XHJcblxyXG4gICAgICB0aGlzLmxhYmVsSm9pbnRzLnB1c2goY2xvbmVPYmopO1xyXG4gICAgICB0aGlzLmxhYmVsU3RyaW5ncy5wdXNoKGxhYmVsU3RyaW5nc1tpXSk7XHJcblxyXG4gICAgICB0aGlzLmluaXREcmF3U3ZnKGNsb25lT2JqLCBsYWJlbFN0cmluZ3NbaV0pO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBtZW1iZXJOb2RlID0gdGhpcy5wcm9jZXNzLmNhZVJlbmRlck9iamVjdFRyZWVNYW5hZ2VyLm1lbWJlck5vZGU7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1lbWJlck5vZGUuY2hpbGRPYmplY3RzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBtZW1iZXIgPSBtZW1iZXJOb2RlLmNoaWxkT2JqZWN0c1tpXSBhcyBNZW1iZXJPYmplY3Q7XHJcblxyXG4gICAgICBsZXQgY2xvbmVPYmogPSB0aGlzLnZpZXdlci5wcm9jZXNzLmNsb25lTWFuYWdlci5jbG9uZU9iamVjdChcclxuICAgICAgICBtZW1iZXJcclxuICAgICAgKSBhcyBNZW1iZXJPYmplY3Q7XHJcblxyXG4gICAgICBjbG9uZU9iai5zdGFydCA9IGpvaW50SWRNYXBDbG9uZU9ialtjbG9uZU9iai5zdGFydC5pZF07XHJcbiAgICAgIGNsb25lT2JqLmVuZCA9IGpvaW50SWRNYXBDbG9uZU9ialtjbG9uZU9iai5lbmQuaWRdO1xyXG5cclxuICAgICAgY2xvbmVPYmouYnVzaW5lc3NTdGF0ZSA9IEJ1c2luZXNzU3RhdGUuTGl2aW5nO1xyXG4gICAgICBpZiAoY2xvbmVPYmouc3RhcnQgJiYgY2xvbmVPYmouZW5kKSB7XHJcbiAgICAgICAgYWRkZWRPYmplY3RzLnB1c2goY2xvbmVPYmopO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHBsYXRlTm9kZSA9IHRoaXMucHJvY2Vzcy5jYWVSZW5kZXJPYmplY3RUcmVlTWFuYWdlci5wbGF0ZU5vZGU7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBsYXRlTm9kZS5jaGlsZE9iamVjdHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IHBsYXRlID0gcGxhdGVOb2RlLmNoaWxkT2JqZWN0c1tpXSBhcyBQbGF0ZU9iamVjdDtcclxuICAgICAgbGV0IGNsb25lT2JqID0gdGhpcy52aWV3ZXIucHJvY2Vzcy5jbG9uZU1hbmFnZXIuY2xvbmVPYmplY3QoXHJcbiAgICAgICAgcGxhdGVcclxuICAgICAgKSBhcyBQbGF0ZU9iamVjdDtcclxuXHJcbiAgICAgIGxldCBmbGFnID0gdHJ1ZTtcclxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjbG9uZU9iai5qb2ludHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICBjbG9uZU9iai5qb2ludHNbal0gPSBqb2ludElkTWFwQ2xvbmVPYmpbY2xvbmVPYmouam9pbnRzW2pdLmlkXTtcclxuICAgICAgICBpZiAoIWNsb25lT2JqLmpvaW50c1tqXSkge1xyXG4gICAgICAgICAgZmxhZyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgY2xvbmVPYmouYnVzaW5lc3NTdGF0ZSA9IEJ1c2luZXNzU3RhdGUuTGl2aW5nO1xyXG4gICAgICBpZiAoZmxhZykge1xyXG4gICAgICAgIGFkZGVkT2JqZWN0cy5wdXNoKGNsb25lT2JqKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBkaXN0b3J0aW9uU2hhcGUgPSBkYXRhLmRpc3RvcnRpb25TaGFwZS52YWx1ZTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYWRkZWRPYmplY3RzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBvYmogPSBhZGRlZE9iamVjdHNbaV07XHJcbiAgICAgIHRoaXMucHJvY2Vzcy5hZGRSZW5kZXJPYmplY3QoZGlzdG9ydGlvblJPLCBvYmopO1xyXG4gICAgICBvYmouc2V0TmVlZFVwZGF0ZSgpO1xyXG5cclxuICAgICAgaWYgKG9iaiBpbnN0YW5jZW9mIE1lbWJlck9iamVjdCkge1xyXG4gICAgICAgIGlmIChkaXN0b3J0aW9uU2hhcGUgPT09IFwiMVwiKSB7XHJcbiAgICAgICAgICB0aGlzLmRpc3RvcnRpb25TaGFwZUNoYW5nZVRyYW5zcGFyZW5jeShvYmosIDEpO1xyXG4gICAgICAgICAgb2JqLmlzRG90dGVkTGluZSA9IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZGlzdG9ydGlvblNoYXBlID09PSBcIjJcIikge1xyXG4gICAgICAgICAgdGhpcy5kaXN0b3J0aW9uU2hhcGVDaGFuZ2VUcmFuc3BhcmVuY3kob2JqLCAwLjUpO1xyXG4gICAgICAgICAgb2JqLmlzRG90dGVkTGluZSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbGVhclN2ZygpIHtcclxuICAgIGlmICh0aGlzLnJlc3VsdExhYmVsKSB7XHJcbiAgICAgIHRoaXMucmVzdWx0TGFiZWwuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgIGl0ZW0uY2xlYXIoKTtcclxuICAgICAgICBpdGVtID0gbnVsbDtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMucmVzdWx0TGFiZWwgPSBuZXcgQXJyYXk8YW55PigpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubGFiZWxKb2ludHMgPSBuZXcgQXJyYXk8Sm9pbnRPYmplY3Q+KCk7XHJcbiAgICB0aGlzLmxhYmVsU3RyaW5ncyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XHJcbiAgICB0aGlzLnJlc3VsdExhYmVsRGljID0ge307XHJcbiAgfVxyXG5cclxuICBpbml0RHJhd1N2Zyhqb2ludE9iamVjdDogSm9pbnRPYmplY3QsIGxhYmVsRGF0YTogc3RyaW5nKSB7XHJcbiAgICBsZXQgcG9zaXRpb24gPSBqb2ludE9iamVjdC5wb3NpdGlvbjtcclxuICAgIGxldCBjdXJyZXRQb3MgPSBwb3NpdGlvbjtcclxuXHJcbiAgICAvLyBnZXQgd2lucG9zLlxyXG4gICAgbGV0IHBvaW50ID0gdGhpcy52aWV3ZXIud29ybGRQb2ludFRvUGl4ZWxQb2ludChbY3VycmV0UG9zIGFzIGFueV0pWzBdO1xyXG5cclxuICAgIGxldCBpZCA9IGpvaW50T2JqZWN0Lm5hbWU7XHJcbiAgICBpZiAodGhpcy5yZXN1bHRMYWJlbERpY1tpZF0pIHtcclxuICAgICAgdGhpcy5yZXN1bHRMYWJlbERpY1tpZF0ubW92ZShcclxuICAgICAgICBwb2ludFswXSArIHRoaXMueFBpeGVsT2Zmc2V0LFxyXG4gICAgICAgIHBvaW50WzFdICsgdGhpcy55UGl4ZWxPZmZzZXRcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5yZXN1bHRMYWJlbERpY1tpZF0uYXR0cihcImZvbnQtc2l6ZVwiLCBEZXNpZ25CYXNlT2JqZWN0LmZvbnRTaXplKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBkcmF3ID0gU3ZnRHJhdy5nZXRJbnN0YW5jZSh0aGlzLnZpZXdlci5jb250YWluZXIuaWQpLmRyYXc7XHJcbiAgICAgIC8vIGlmICghdGhpcy5fZ3JvdXApIHtcclxuICAgICAgdGhpcy5fZ3JvdXAgPSBkcmF3Lmdyb3VwKCk7XHJcbiAgICAgIC8vIH1cclxuICAgICAgbGV0IHJlc3VsdFRleHQgPSBkcmF3XHJcbiAgICAgICAgLnRleHQoXHJcbiAgICAgICAgICBOdW1iZXIuaXNOYU4oTnVtYmVyKGxhYmVsRGF0YSkpXHJcbiAgICAgICAgICAgID8gbGFiZWxEYXRhXHJcbiAgICAgICAgICAgIDogTnVtYmVyKGxhYmVsRGF0YSkudG9GaXhlZCgzKVxyXG4gICAgICAgIClcclxuICAgICAgICAuZm9udCh7IGZpbGw6IHRoaXMubGFiZWxDb2xvciB9KVxyXG4gICAgICAgIC5hdHRyKFwiZm9udC1zaXplXCIsIERlc2lnbkJhc2VPYmplY3QuZm9udFNpemUpXHJcbiAgICAgICAgLm1vdmUocG9pbnRbMF0gKyB0aGlzLnhQaXhlbE9mZnNldCwgcG9pbnRbMV0gKyB0aGlzLnlQaXhlbE9mZnNldCk7XHJcblxyXG4gICAgICB0aGlzLnJlc3VsdExhYmVsLnB1c2gocmVzdWx0VGV4dCk7XHJcblxyXG4gICAgICB0aGlzLnJlc3VsdExhYmVsRGljW2lkXSA9IHJlc3VsdFRleHQ7XHJcbiAgICAgIHRoaXMuX2dyb3VwLmFkZChyZXN1bHRUZXh0KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGRyYXdTdmcoam9pbnRPYmplY3Q6IEpvaW50T2JqZWN0LCBsYWJlbERhdGE6IHN0cmluZykge1xyXG4gICAgbGV0IHBvc2l0aW9uID0gam9pbnRPYmplY3QucG9zaXRpb247XHJcbiAgICBsZXQgY3VycmV0UG9zID0gcG9zaXRpb247XHJcblxyXG4gICAgLy8gZ2V0IHdpbnBvcy5cclxuICAgIGxldCBwb2ludCA9IHRoaXMudmlld2VyLndvcmxkUG9pbnRUb1BpeGVsUG9pbnQoW2N1cnJldFBvcyBhcyBhbnldKVswXTtcclxuXHJcbiAgICBsZXQgaWQgPSBqb2ludE9iamVjdC5uYW1lO1xyXG4gICAgaWYgKHRoaXMucmVzdWx0TGFiZWxEaWNbaWRdKSB7XHJcbiAgICAgIHRoaXMucmVzdWx0TGFiZWxEaWNbaWRdLm1vdmUoXHJcbiAgICAgICAgcG9pbnRbMF0gKyB0aGlzLnhQaXhlbE9mZnNldCxcclxuICAgICAgICBwb2ludFsxXSArIHRoaXMueVBpeGVsT2Zmc2V0XHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMucmVzdWx0TGFiZWxEaWNbaWRdLmF0dHIoXCJmb250LXNpemVcIiwgRGVzaWduQmFzZU9iamVjdC5mb250U2l6ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBsZXQgZHJhdyA9IFN2Z0RyYXcuZ2V0SW5zdGFuY2UodGhpcy52aWV3ZXIuY29udGFpbmVyLmlkKS5kcmF3O1xyXG4gICAgICAvLyBpZiAoIXRoaXMuX2dyb3VwKSB7XHJcbiAgICAgIHRoaXMuX2dyb3VwID0gZHJhdy5ncm91cCgpO1xyXG4gICAgICAvLyB9XHJcbiAgICAgIGxldCByZXN1bHRUZXh0ID0gZHJhd1xyXG4gICAgICAgIC50ZXh0KFxyXG4gICAgICAgICAgTnVtYmVyLmlzTmFOKE51bWJlcihsYWJlbERhdGEpKVxyXG4gICAgICAgICAgICA/IGxhYmVsRGF0YVxyXG4gICAgICAgICAgICA6IE51bWJlcihsYWJlbERhdGEpLnRvRml4ZWQoMylcclxuICAgICAgICApXHJcbiAgICAgICAgLmZvbnQoeyBmaWxsOiB0aGlzLmxhYmVsQ29sb3IgfSlcclxuICAgICAgICAuYXR0cihcImZvbnQtc2l6ZVwiLCBEZXNpZ25CYXNlT2JqZWN0LmZvbnRTaXplKVxyXG4gICAgICAgIC5tb3ZlKHBvaW50WzBdICsgdGhpcy54UGl4ZWxPZmZzZXQsIHBvaW50WzFdICsgdGhpcy55UGl4ZWxPZmZzZXQpO1xyXG5cclxuICAgICAgdGhpcy5yZXN1bHRMYWJlbC5wdXNoKHJlc3VsdFRleHQpO1xyXG5cclxuICAgICAgdGhpcy5yZXN1bHRMYWJlbERpY1tpZF0gPSByZXN1bHRUZXh0O1xyXG4gICAgICB0aGlzLl9ncm91cC5hZGQocmVzdWx0VGV4dCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkaXN0b3J0aW9uUG9zaXRpb25zKFxyXG4gICAgam9pbnRzOiBKb2ludE9iamVjdFtdLFxyXG4gICAgbmV3UG9zaXRpb25zOiBudW1iZXJbXVtdLFxyXG4gICAgZGlzdG9ydGlvblJPOiBEZXNpZ25CYXNlT2JqZWN0XHJcbiAgKSB7XHJcbiAgICBsZXQgam9pbnRJZE1hcENsb25lT2JqOiB7IFtpZDogc3RyaW5nXTogSm9pbnRPYmplY3QgfSA9IHt9O1xyXG4gICAgbGV0IGFkZGVkT2JqZWN0cyA9IG5ldyBBcnJheTxEZXNpZ25CYXNlT2JqZWN0PigpO1xyXG5cclxuICAgIGxldCBkYXRhID0gdGhpcy5jb25maWcucHJvcGVydGllcy5pdGVtc1swXS5kYXRhO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBqb2ludHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGpvaW50ID0gam9pbnRzW2ldO1xyXG5cclxuICAgICAgbGV0IGNsb25lT2JqID0gdGhpcy52aWV3ZXIucHJvY2Vzcy5jbG9uZU1hbmFnZXIuY2xvbmVPYmplY3QoXHJcbiAgICAgICAgam9pbnRcclxuICAgICAgKSBhcyBKb2ludE9iamVjdDtcclxuICAgICAgLy8g6K6+572u5L2N56e7XHJcbiAgICAgIGNsb25lT2JqLnBvc2l0aW9uID0gbmV3UG9zaXRpb25zW2ldO1xyXG5cclxuICAgICAgY2xvbmVPYmouYnVzaW5lc3NTdGF0ZSA9IEJ1c2luZXNzU3RhdGUuTGl2aW5nO1xyXG4gICAgICBjbG9uZU9iai5zZXROZWVkVXBkYXRlKCk7XHJcblxyXG4gICAgICBqb2ludElkTWFwQ2xvbmVPYmpbam9pbnQuaWRdID0gY2xvbmVPYmo7XHJcbiAgICAgIHRoaXMucHJvY2Vzcy5hZGRSZW5kZXJPYmplY3QoZGlzdG9ydGlvblJPLCBjbG9uZU9iaik7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IG1lbWJlck5vZGUgPSB0aGlzLnByb2Nlc3MuY2FlUmVuZGVyT2JqZWN0VHJlZU1hbmFnZXIubWVtYmVyTm9kZTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWVtYmVyTm9kZS5jaGlsZE9iamVjdHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IG1lbWJlciA9IG1lbWJlck5vZGUuY2hpbGRPYmplY3RzW2ldIGFzIE1lbWJlck9iamVjdDtcclxuICAgICAgbGV0IGNsb25lT2JqID0gdGhpcy52aWV3ZXIucHJvY2Vzcy5jbG9uZU1hbmFnZXIuY2xvbmVPYmplY3QoXHJcbiAgICAgICAgbWVtYmVyXHJcbiAgICAgICkgYXMgTWVtYmVyT2JqZWN0O1xyXG5cclxuICAgICAgY2xvbmVPYmouc3RhcnQgPSBqb2ludElkTWFwQ2xvbmVPYmpbY2xvbmVPYmouc3RhcnQuaWRdO1xyXG4gICAgICBjbG9uZU9iai5lbmQgPSBqb2ludElkTWFwQ2xvbmVPYmpbY2xvbmVPYmouZW5kLmlkXTtcclxuXHJcbiAgICAgIGNsb25lT2JqLmJ1c2luZXNzU3RhdGUgPSBCdXNpbmVzc1N0YXRlLkxpdmluZztcclxuICAgICAgaWYgKGNsb25lT2JqLnN0YXJ0ICYmIGNsb25lT2JqLmVuZCkge1xyXG4gICAgICAgIGFkZGVkT2JqZWN0cy5wdXNoKGNsb25lT2JqKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCBwbGF0ZU5vZGUgPSB0aGlzLnByb2Nlc3MuY2FlUmVuZGVyT2JqZWN0VHJlZU1hbmFnZXIucGxhdGVOb2RlO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwbGF0ZU5vZGUuY2hpbGRPYmplY3RzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBwbGF0ZSA9IHBsYXRlTm9kZS5jaGlsZE9iamVjdHNbaV0gYXMgUGxhdGVPYmplY3Q7XHJcbiAgICAgIGxldCBjbG9uZU9iaiA9IHRoaXMudmlld2VyLnByb2Nlc3MuY2xvbmVNYW5hZ2VyLmNsb25lT2JqZWN0KFxyXG4gICAgICAgIHBsYXRlXHJcbiAgICAgICkgYXMgUGxhdGVPYmplY3Q7XHJcblxyXG4gICAgICBsZXQgZmxhZyA9IHRydWU7XHJcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY2xvbmVPYmouam9pbnRzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgY2xvbmVPYmouam9pbnRzW2pdID0gam9pbnRJZE1hcENsb25lT2JqW2Nsb25lT2JqLmpvaW50c1tqXS5pZF07XHJcbiAgICAgICAgaWYgKCFjbG9uZU9iai5qb2ludHNbal0pIHtcclxuICAgICAgICAgIGZsYWcgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNsb25lT2JqLmJ1c2luZXNzU3RhdGUgPSBCdXNpbmVzc1N0YXRlLkxpdmluZztcclxuICAgICAgaWYgKGZsYWcpIHtcclxuICAgICAgICBhZGRlZE9iamVjdHMucHVzaChjbG9uZU9iaik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBmb3IgKGxldCBpID0gMDsgaSA8IGFkZGVkT2JqZWN0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgLy8gICBsZXQgb2JqID0gYWRkZWRPYmplY3RzW2ldO1xyXG4gICAgLy8gICB0aGlzLnByb2Nlc3MuYWRkUmVuZGVyT2JqZWN0KGRpc3RvcnRpb25STywgb2JqKTtcclxuICAgIC8vICAgb2JqLnNldE5lZWRVcGRhdGUoKTtcclxuICAgIC8vIH1cclxuXHJcbiAgICBsZXQgZGlzdG9ydGlvblNoYXBlID0gZGF0YS5kaXN0b3J0aW9uU2hhcGUudmFsdWU7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFkZGVkT2JqZWN0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgb2JqID0gYWRkZWRPYmplY3RzW2ldO1xyXG4gICAgICB0aGlzLnByb2Nlc3MuYWRkUmVuZGVyT2JqZWN0KGRpc3RvcnRpb25STywgb2JqKTtcclxuICAgICAgb2JqLnNldE5lZWRVcGRhdGUoKTtcclxuXHJcbiAgICAgIGlmIChvYmogaW5zdGFuY2VvZiBNZW1iZXJPYmplY3QpIHtcclxuICAgICAgICBpZiAoZGlzdG9ydGlvblNoYXBlID09PSBcIjFcIikge1xyXG4gICAgICAgICAgdGhpcy5kaXN0b3J0aW9uU2hhcGVDaGFuZ2VUcmFuc3BhcmVuY3kob2JqLCAxKTtcclxuICAgICAgICAgIG9iai5pc0RvdHRlZExpbmUgPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2UgaWYgKGRpc3RvcnRpb25TaGFwZSA9PT0gXCIyXCIpIHtcclxuICAgICAgICAgIHRoaXMuZGlzdG9ydGlvblNoYXBlQ2hhbmdlVHJhbnNwYXJlbmN5KG9iaiwgMC41KTtcclxuICAgICAgICAgIG9iai5pc0RvdHRlZExpbmUgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8g5Y+Y5b2i5ZCO5qih5Z6L5aSE55CGKOmAj+aYjuOAgeiZmue6vylcclxuICBkaXN0b3J0aW9uU2hhcGVDaGFuZ2VUcmFuc3BhcmVuY3koXHJcbiAgICBtZW1iZXI6IE1lbWJlck9iamVjdCxcclxuICAgIHRyYW5zcGFyZW5jeTogbnVtYmVyXHJcbiAgKSB7XHJcbiAgICBpZiAobWVtYmVyKSB7XHJcbiAgICAgIGlmIChtZW1iZXIuZmFjZUNvbG9yKSB7XHJcbiAgICAgICAgbWVtYmVyLmZhY2VDb2xvclszXSA9IHRyYW5zcGFyZW5jeTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBtZW1iZXIuc2VnbWVudC5jb2xvci5mYWNlVHJhbnNwYXJlbmN5ID0gdHJhbnNwYXJlbmN5O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZXNldFNjZW5lKCkge1xyXG4gICAgdGhpcy5jbGVhclN2ZygpO1xyXG4gICAgdGhpcy5jbGVhckludmlzaWJsZVNoYXBlKCk7XHJcblxyXG4gICAgbGV0IGFmdGVydHJlYXRtZW50Uk8gPSB0aGlzLnZpZXdlci5wcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RCeU5hbWUoXHJcbiAgICAgIFwi5ZCO5aSE55CG6K6h566X57uT5p6cXCJcclxuICAgICkgYXMgRGVzaWduQmFzZU9iamVjdDtcclxuICAgIGxldCBkaXN0b3J0aW9uUk8gPSB0aGlzLnZpZXdlci5wcm9jZXNzLmZpbmRDYWVPYmplY3RCeU5hbWVJbkNoaWxkT2JqZWN0KFxyXG4gICAgICBhZnRlcnRyZWF0bWVudFJPLFxyXG4gICAgICBcIue7k+aehOWPmOW9olwiXHJcbiAgICApO1xyXG4gICAgaWYgKGRpc3RvcnRpb25STykge1xyXG4gICAgICBkaXN0b3J0aW9uUk8uY2hpbGRPYmplY3RzLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICBpdGVtLmRlbGV0ZSgpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIGRpc3RvcnRpb25STy5kZWxldGUoKTtcclxuICAgIH1cclxuICAgIHN0b3JlLmNvbW1pdChcInNldE1zZ1wiLCBudWxsKTtcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5vcmlnaW5Nb2RlbENoYW5nZVRyYW5zcGFyZW5jeSgxKTtcclxuICAgICAgLy8gdGhpcy52aWV3ZXIudXBkYXRlRGlzcGxheSgpO1xyXG4gICAgfSwgMCk7XHJcblxyXG4gICAgbGV0IHBvc3RJbnRlcmZhY2VNYW5hZ2VyID0gdGhpcy52aWV3ZXIucG9zdEludGVyZmFjZU1hbmFnZXI7XHJcbiAgICBwb3N0SW50ZXJmYWNlTWFuYWdlci5hY3RpdmVfZGlzdG9ydGlvbiA9IGZhbHNlO1xyXG4gIH1cclxufVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBa0JBO0FBQUE7QUF3Q0E7QUFBQTtBQXZDQTtBQVdBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBS0E7QUFJQTtBQUlBOztBQUlBO0FBRUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUVBO0FBQ0E7QUFHQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUdBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUlBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7O0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUdBO0FBQ0E7QUFDQTtBQUdBOztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFHQTtBQUlBO0FBQ0E7O0FBR0E7QUFFQTtBQUtBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQTtBQUlBO0FBS0E7QUFHQTtBQUdBO0FBSUE7QUFDQTtBQUtBOztBQUNBO0FBRUE7QUFDQTtBQUNBOztBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7OztBQUdBOztBQUVBO0FBRUE7QUFFQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQU9BO0FBRUE7O0FBQ0E7QUFDQTtBQUVBOztBQUNBO0FBQUE7QUFDQTs7Ozs7Ozs7Ozs7OztBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7O0FBR0E7O0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUdBOzs7Ozs7Ozs7Ozs7OztBQUdBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7OztBQUdBO0FBS0E7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFLQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFFQTtBQU1BO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7O0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFJQTtBQUNBO0FBRUE7QUFDQTtBQUNBOzs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUlBO0FBQ0E7QUFDQTs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBSUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUdBO0FBRUE7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQU1BO0FBQUE7QUFJQTtBQUVBO0FBQ0E7O0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFNQTtBQUFBO0FBSUE7QUFFQTtBQUNBOztBQUVBO0FBRUE7QUFLQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFJQTtBQUVBO0FBQ0E7QUFFQTtBQUNBOztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFJQTtBQUNBO0FBQ0E7OztBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUlBO0FBR0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUVBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFHQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7O0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBOzs7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./packages/caeDesign/src/viewerWrapper/commands/aftertreatment/distortion/commandDistortion.ts\n");
|
|
5734
5734
|
|
|
5735
5735
|
/***/ }),
|
|
5736
5736
|
|
|
@@ -5752,7 +5752,7 @@ eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPAC
|
|
|
5752
5752
|
/*! no static exports found */
|
|
5753
5753
|
/***/ (function(module, exports, __webpack_require__) {
|
|
5754
5754
|
|
|
5755
|
-
eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__, exports, __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\"), __webpack_require__(/*! ../../../../gsDevFx/operators/cameraMouse */ \"./packages/caeDesign/src/gsDevFx/operators/cameraMouse.ts\"), __webpack_require__(/*! ../../../../gsDevFx/operators/cAEObjectPreSelector */ \"./packages/caeDesign/src/gsDevFx/operators/cAEObjectPreSelector.ts\"), __webpack_require__(/*! ../../../../gsDevFx/operators/caeObjectSelector */ \"./packages/caeDesign/src/gsDevFx/operators/caeObjectSelector.ts\"), __webpack_require__(/*! ../../../../gsDevFx/commands/commandSelect */ \"./packages/caeDesign/src/gsDevFx/commands/commandSelect.ts\"), __webpack_require__(/*! ../../commandComponent */ \"./packages/caeDesign/src/viewerWrapper/commands/commandComponent.ts\"), __webpack_require__(/*! gs-ceec-design */ \"./packages/ceecDesign/src/index.ts\"), __webpack_require__(/*! gs-ceec-design */ \"./packages/ceecDesign/src/index.ts\"), __webpack_require__(/*! ../../../../gsDevFx/objects/loadObjects/jointLoadObject */ \"./packages/caeDesign/src/gsDevFx/objects/loadObjects/jointLoadObject.ts\"), __webpack_require__(/*! ../../../../gsDevFx/objects/caeObjects/jointObject */ \"./packages/caeDesign/src/gsDevFx/objects/caeObjects/jointObject.ts\"), __webpack_require__(/*! ../../../../gsDevFx/managers/interfaceManagers/selectionInterfaceManager */ \"./packages/caeDesign/src/gsDevFx/managers/interfaceManagers/selectionInterfaceManager.ts\"), __webpack_require__(/*! gs-bim-air */ \"./node_modules/gs-bim-air/lib/BimAir.umd.min.js\"), __webpack_require__(/*! ../../../../utility/utility */ \"./packages/caeDesign/src/utility/utility.ts\"), __webpack_require__(/*! ./editJointLoadConfig */ \"./packages/caeDesign/src/viewerWrapper/commands/aftertreatment/editJointLoad/editJointLoadConfig.ts\")], __WEBPACK_AMD_DEFINE_RESULT__ = (function (require, exports, tslib_1, cameraMouse_1, cAEObjectPreSelector_1, caeObjectSelector_1, commandSelect_1, commandComponent_1, gs_ceec_design_1, gs_ceec_design_2, jointLoadObject_1, jointObject_1, selectionInterfaceManager_1, gs_bim_air_1, utility_1, editJointLoadConfig_1) {\n \"use strict\";\n\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n editJointLoadConfig_1 = tslib_1.__importDefault(editJointLoadConfig_1);\n var CommandEditJointLoad = function (_super) {\n tslib_1.__extends(CommandEditJointLoad, _super);\n function CommandEditJointLoad() {\n var _this = _super.call(this) || this;\n _this.typeName = \"CommandEditJointLoad\";\n _this.loadConditionRO = null;\n _this.loadGroupRO = null;\n _this.expectFilter = selectionInterfaceManager_1.SelectorFiliter.Joint;\n return _this;\n }\n CommandEditJointLoad.prototype.begin = function () {\n this.changeOperators();\n console.log(\"CommandEditJointLoad\");\n this.config = new editJointLoadConfig_1.default();\n this.config.show();\n };\n CommandEditJointLoad.prototype.restore = function () {\n this.changeOperators();\n this.config.show();\n };\n CommandEditJointLoad.prototype.changeOperators = function () {\n var _this = this;\n this.viewer.selectionManager.clearAllSelectionAndHighlight();\n this.viewer.updateDisplay();\n this.viewer.operatorManager.clear();\n this.viewer.operatorManager.add(new cameraMouse_1.CameraMouse());\n this.preSelector = new cAEObjectPreSelector_1.CAEObjectPreSelector();\n this.viewer.operatorManager.add(this.preSelector);\n this.viewer.selectionInterfaceManager.selectorFilter = this.expectFilter;\n this.caeObjectSelector = new caeObjectSelector_1.CAEObjectSelector();\n this.viewer.operatorManager.add(this.caeObjectSelector);\n this.caeObjectSelector.lButtonUp.add(function () {\n setTimeout(function () {\n _this.updatePanel();\n }, 0);\n });\n };\n CommandEditJointLoad.prototype.end = function () {\n this.config.hide();\n _super.prototype.end.call(this);\n this.viewer.selectionManager.clearAllSelectionAndHighlight();\n this.viewer.updateDisplay();\n if (this.loadConditionRO) {\n this.loadConditionRO.inactive(this.viewer);\n }\n var commandSelect = new commandSelect_1.CommandSelect();\n this.process.commandManager.execute(commandSelect);\n };\n CommandEditJointLoad.prototype.commandOk = function () {\n var data = this.config.properties.items[0].data;\n var loadCondition = data.loadCondition.value;\n var loadGroup = data.loadGroup.value;\n if (!loadCondition) {\n data.tip.value = 3;\n return;\n }\n if (!loadGroup) {\n data.tip.value = 3;\n return;\n }\n var selectedJoints = data.selectedJoints;\n var selectedObjects = new gs_bim_air_1.Longan.List();\n if (selectedJoints.listOptions.list.length === 0) {\n data.tip.value = 2;\n return;\n }\n var jointNames = new Array();\n for (var i = 0; i < data.selectedJoints.listOptions.list.length; i++) {\n jointNames.push(data.selectedJoints.listOptions.list[i].label);\n }\n for (var i = 0; i < jointNames.length; i++) {\n var joint = this.process.findCaeObjectByNameInChildObject(this.process.caeRenderObjectTreeManager.jointNode, jointNames[i]);\n if (joint instanceof jointObject_1.JointObject) {\n selectedObjects.add(joint);\n }\n }\n if (selectedObjects) {\n this.viewer.selectionManager.clearAllSelectionAndHighlight();\n this.loadConditionRO = this.getLoadConditionObjectByName(loadCondition);\n this.loadGroupRO = this.getLoadGroupByName(this.loadConditionRO, loadGroup);\n if (!this.loadConditionRO || !this.loadGroupRO) {\n data.tip.value = 4;\n return;\n }\n var counter = 0;\n for (var i = 0; i < selectedObjects.count(); i++) {\n var selectedObj = selectedObjects.items[i];\n var jointLoad = null;\n for (var j = 0; j < this.loadGroupRO.childObjects.length; j++) {\n var load = this.loadGroupRO.childObjects[j];\n if (load instanceof jointLoadObject_1.JointLoadObject) {\n if (load.jointName === selectedObj.name) {\n counter++;\n jointLoad = load;\n load.businessState = gs_ceec_design_2.BusinessState.Editing;\n break;\n }\n }\n }\n if (jointLoad) {\n var foreceData = this.config.properties.items[1].data;\n jointLoad.forceXDirection = (0, utility_1.CaeNumber)(foreceData.Fx.value);\n jointLoad.forceYDirection = (0, utility_1.CaeNumber)(foreceData.Fy.value);\n jointLoad.forceZDirection = (0, utility_1.CaeNumber)(foreceData.Fz.value);\n var momentData = this.config.properties.items[2].data;\n jointLoad.momentAboutXAxis = (0, utility_1.CaeNumber)(momentData.Mx.value);\n jointLoad.momentAboutYAxis = (0, utility_1.CaeNumber)(momentData.My.value);\n jointLoad.momentAboutZAxis = (0, utility_1.CaeNumber)(momentData.Mz.value);\n }\n }\n this.viewer.updateDisplay();\n data.tip.value = 1 + \",\" + counter;\n }\n };\n CommandEditJointLoad.prototype.updatePanel = function () {\n if (this.viewer.selectionInterfaceManager.selectorFilter === this.expectFilter) {\n var data = this.config.properties.items[0].data;\n data.selectedJoints.listOptions.list = [];\n var objects = this.caeObjectSelector.selectedRenderObjects;\n for (var i = 0; i < objects.count(); i++) {\n var object = objects.items[i];\n if (object instanceof jointObject_1.JointObject) {\n data.selectedJoints.listOptions.list.push({\n value: object.id,\n label: object.name\n });\n }\n }\n var selectedRenderObjects = this.caeObjectSelector.selectedRenderObjects;\n if (selectedRenderObjects.count() > 0) {\n var jointName = selectedRenderObjects.items[selectedRenderObjects.count() - 1].name;\n this.configChangeData(jointName);\n } else {}\n }\n };\n CommandEditJointLoad.prototype.configChangeData = function (jointName) {\n this.clearData();\n var data = this.config.properties.items[0].data;\n var loadConditionName = data.loadCondition.value;\n var loadGroupName = data.loadGroup.value;\n if (loadConditionName && loadGroupName) {\n var loadConditionRO = this.getLoadConditionObjectByName(loadConditionName);\n if (loadConditionRO) {\n var loadGroupRO = this.getLoadGroupByName(loadConditionRO, loadGroupName);\n if (loadGroupRO) {\n var jointLoad = null;\n for (var j = 0; j < loadGroupRO.childObjects.length; j++) {\n var child = loadGroupRO.childObjects[j];\n if (child instanceof jointLoadObject_1.JointLoadObject) {\n if (child.jointName === jointName) {\n jointLoad = child;\n break;\n }\n }\n }\n if (jointLoad) {\n this.showRenderObjectProperties(jointLoad);\n data.tip.value = 6;\n return;\n } else {\n data.tip.value = 5;\n return;\n }\n }\n }\n data.tip.value = 4;\n return;\n } else {\n data.tip.value = 3;\n return;\n }\n };\n CommandEditJointLoad.prototype.showRenderObjectProperties = function (ro) {\n var forceData = this.config.properties.items[1].data;\n var momentsData = this.config.properties.items[2].data;\n forceData.Fx.value = Number(ro.forceXDirection).toString();\n forceData.Fy.value = Number(ro.forceYDirection).toString();\n forceData.Fz.value = Number(ro.forceZDirection).toString();\n momentsData.Mx.value = Number(ro.momentAboutXAxis).toString();\n momentsData.My.value = Number(ro.momentAboutYAxis).toString();\n momentsData.Mz.value = Number(ro.momentAboutZAxis).toString();\n };\n CommandEditJointLoad.prototype.clearData = function () {\n var forceData = this.config.properties.items[1].data;\n var momentsData = this.config.properties.items[2].data;\n forceData.Fx.value = \"\";\n forceData.Fy.value = \"\";\n forceData.Fz.value = \"\";\n momentsData.Mx.value = \"\";\n momentsData.My.value = \"\";\n momentsData.Mz.value = \"\";\n };\n CommandEditJointLoad.prototype.getLoadConditionObjectByName = function (loadConditionName) {\n var pretreatmentRO = this.viewer.process.findRenderObjectByName(\"后处理计算结果\");\n var conditionParent = this.process.findCaeObjectByNameInChildObject(pretreatmentRO, \"荷载工况\");\n if (!conditionParent) {\n conditionParent = new gs_ceec_design_1.DesignBaseObject();\n conditionParent.businessState = gs_ceec_design_2.BusinessState.Creating;\n conditionParent.name = \"荷载工况\";\n this.process.addRenderObject(pretreatmentRO, conditionParent);\n }\n var loadConditionRO = this.process.findCaeObjectByNameInChildObject(conditionParent, loadConditionName);\n return loadConditionRO;\n };\n CommandEditJointLoad.prototype.getLoadGroupByName = function (loadCondition, loadGroupName) {\n var loadGroupRO = this.process.findCaeObjectByNameInChildObject(loadCondition, loadGroupName);\n return loadGroupRO;\n };\n CommandEditJointLoad.prototype.deleteLoadGroup = function (loadConditionName, loadGroupName) {\n var data = this.config.properties.items[0].data;\n var loadConditionRO = this.getLoadConditionObjectByName(loadConditionName);\n if (!loadConditionRO) {\n data.tip.value = 2;\n return;\n }\n var loadGroupRO = this.getLoadGroupByName(loadConditionRO, loadGroupName);\n if (!loadGroupRO) {\n data.tip.value = 2;\n return;\n }\n var deletingList = new Array();\n for (var i = 0; i < loadGroupRO.childObjects.length; i++) {\n var child = loadGroupRO.childObjects[i];\n if (child instanceof jointLoadObject_1.JointLoadObject) {\n deletingList.push(child);\n }\n }\n for (var i = 0; i < deletingList.length; i++) {\n deletingList[i].tempDelete(this.viewer);\n }\n this.viewer.updateDisplay();\n data.tip.value = 1;\n };\n CommandEditJointLoad.prototype.getLoadConditons = function () {\n var loadConditions = this.viewer.process.findRenderObjectsByType(\"LoadConditionObject\");\n return loadConditions;\n };\n CommandEditJointLoad.prototype.getLoadGroups = function (loadConditionName) {\n var conditions = this.getLoadConditons();\n var loadGroups = new Array();\n for (var i = 0; i < conditions.length; i++) {\n if (conditions[i].name === loadConditionName) {\n for (var j = 0; j < conditions[i].childObjects.length; j++) {\n var loadGroup = conditions[i].childObjects[j];\n if (loadGroup.checkBusinessStateIsActive()) {\n for (var k = 0; k < loadGroup.childObjects.length; k++) {\n var load = loadGroup.childObjects[k];\n if (load instanceof jointLoadObject_1.JointLoadObject && load.checkBusinessStateIsActive()) {\n loadGroups.push(loadGroup);\n break;\n }\n }\n }\n }\n }\n }\n return loadGroups;\n };\n CommandEditJointLoad.prototype.getCurrentGroupJointLoads = function (loadConditionName, loadGroupName) {\n var groups = this.getLoadGroups(loadConditionName);\n var jointLoads = new Array();\n for (var i = 0; i < groups.length; i++) {\n var loadGroup = groups[i];\n if (loadGroup.name === loadGroupName) {\n for (var j = 0; j < loadGroup.childObjects.length; j++) {\n var load = loadGroup.childObjects[j];\n if (load instanceof jointLoadObject_1.JointLoadObject && load.checkBusinessStateIsActive()) {\n jointLoads.push(load);\n }\n }\n break;\n }\n }\n return jointLoads;\n };\n return CommandEditJointLoad;\n }(commandComponent_1.CommandComponent);\n exports.default = CommandEditJointLoad;\n}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9wYWNrYWdlcy9jYWVEZXNpZ24vc3JjL3ZpZXdlcldyYXBwZXIvY29tbWFuZHMvYWZ0ZXJ0cmVhdG1lbnQvZWRpdEpvaW50TG9hZC9jb21tYW5kRWRpdEpvaW50TG9hZC50cy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1tuYW1lXS8uL3BhY2thZ2VzL2NhZURlc2lnbi9zcmMvdmlld2VyV3JhcHBlci9jb21tYW5kcy9hZnRlcnRyZWF0bWVudC9lZGl0Sm9pbnRMb2FkL2NvbW1hbmRFZGl0Sm9pbnRMb2FkLnRzP2Y0MWEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2FtZXJhTW91c2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vZ3NEZXZGeC9vcGVyYXRvcnMvY2FtZXJhTW91c2VcIjtcclxuaW1wb3J0IHsgQ0FFT2JqZWN0UHJlU2VsZWN0b3IgfSBmcm9tIFwiLi4vLi4vLi4vLi4vZ3NEZXZGeC9vcGVyYXRvcnMvY0FFT2JqZWN0UHJlU2VsZWN0b3JcIjtcclxuaW1wb3J0IHsgQ0FFT2JqZWN0U2VsZWN0b3IgfSBmcm9tIFwiLi4vLi4vLi4vLi4vZ3NEZXZGeC9vcGVyYXRvcnMvY2FlT2JqZWN0U2VsZWN0b3JcIjtcclxuaW1wb3J0IHsgQ29tbWFuZFNlbGVjdCB9IGZyb20gXCIuLi8uLi8uLi8uLi9nc0RldkZ4L2NvbW1hbmRzL2NvbW1hbmRTZWxlY3RcIjtcclxuaW1wb3J0IHsgQ29tbWFuZENvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9jb21tYW5kQ29tcG9uZW50XCI7XHJcbmltcG9ydCB7IERlc2lnbkJhc2VPYmplY3QgfSBmcm9tIFwiZ3MtY2VlYy1kZXNpZ25cIjtcclxuaW1wb3J0IHsgTG9hZENvbmRpdGlvbk9iamVjdCB9IGZyb20gXCIuLi8uLi8uLi8uLi9nc0RldkZ4L29iamVjdHMvbG9hZE9iamVjdHMvbG9hZENvbmRpdGlvbk9iamVjdFwiO1xyXG5pbXBvcnQgeyBCdXNpbmVzc1N0YXRlIH0gZnJvbSBcImdzLWNlZWMtZGVzaWduXCI7XHJcbmltcG9ydCB7IExvYWRHcm91cE9iamVjdCB9IGZyb20gXCIuLi8uLi8uLi8uLi9nc0RldkZ4L29iamVjdHMvbG9hZE9iamVjdHMvbG9hZEdyb3VwT2JqZWN0XCI7XHJcbmltcG9ydCB7IEpvaW50TG9hZE9iamVjdCB9IGZyb20gXCIuLi8uLi8uLi8uLi9nc0RldkZ4L29iamVjdHMvbG9hZE9iamVjdHMvam9pbnRMb2FkT2JqZWN0XCI7XHJcbmltcG9ydCB7IEpvaW50T2JqZWN0IH0gZnJvbSBcIi4uLy4uLy4uLy4uL2dzRGV2Rngvb2JqZWN0cy9jYWVPYmplY3RzL2pvaW50T2JqZWN0XCI7XHJcbmltcG9ydCB7IFNlbGVjdG9yRmlsaXRlciB9IGZyb20gXCIuLi8uLi8uLi8uLi9nc0RldkZ4L21hbmFnZXJzL2ludGVyZmFjZU1hbmFnZXJzL3NlbGVjdGlvbkludGVyZmFjZU1hbmFnZXJcIjtcclxuaW1wb3J0IHsgTG9uZ2FuIH0gZnJvbSBcImdzLWJpbS1haXJcIjtcclxuaW1wb3J0IHsgQ2FlTnVtYmVyIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3V0aWxpdHkvdXRpbGl0eVwiO1xyXG5pbXBvcnQgRWRpdEpvaW50TG9hZENvbmZpZyBmcm9tIFwiLi9lZGl0Sm9pbnRMb2FkQ29uZmlnXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb21tYW5kRWRpdEpvaW50TG9hZCBleHRlbmRzIENvbW1hbmRDb21wb25lbnQge1xyXG4gIHR5cGVOYW1lID0gXCJDb21tYW5kRWRpdEpvaW50TG9hZFwiO1xyXG5cclxuICBjb25maWc6IEVkaXRKb2ludExvYWRDb25maWc7XHJcbiAgcHJlU2VsZWN0b3I6IENBRU9iamVjdFByZVNlbGVjdG9yO1xyXG4gIGNhZU9iamVjdFNlbGVjdG9yOiBDQUVPYmplY3RTZWxlY3RvcjtcclxuXHJcbiAgbG9hZENvbmRpdGlvblJPOiBMb2FkQ29uZGl0aW9uT2JqZWN0ID0gbnVsbDtcclxuICBsb2FkR3JvdXBSTzogTG9hZEdyb3VwT2JqZWN0ID0gbnVsbDtcclxuICBleHBlY3RGaWx0ZXIgPSBTZWxlY3RvckZpbGl0ZXIuSm9pbnQ7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIGJlZ2luKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jaGFuZ2VPcGVyYXRvcnMoKTtcclxuXHJcbiAgICBjb25zb2xlLmxvZyhcIkNvbW1hbmRFZGl0Sm9pbnRMb2FkXCIpO1xyXG4gICAgdGhpcy5jb25maWcgPSBuZXcgRWRpdEpvaW50TG9hZENvbmZpZygpO1xyXG4gICAgdGhpcy5jb25maWcuc2hvdygpO1xyXG5cclxuICAgIC8vIHRoaXMudmlld2VyLm9uV2luZG93S2V5RG93bi5hZGQoKHZpZXdlciwgZSkgPT4ge1xyXG4gICAgLy8gICBsZXQgZXY6IGFueSA9IGUudWlFdmVudDtcclxuICAgIC8vICAgbGV0IGtleSA9IGV2LmtleTtcclxuXHJcbiAgICAvLyAgIGlmIChrZXkgPT09IFwielwiKSB7XHJcbiAgICAvLyAgICAgbGV0IGRhdGEgPSB0aGlzLmNvbmZpZy5wcm9wZXJ0aWVzLml0ZW1zWzBdLmRhdGE7XHJcbiAgICAvLyAgICAgbGV0IGxpc3QgPSBkYXRhLnNlbGVjdGVkSm9pbnRzLmxpc3RPcHRpb25zLmxpc3Q7XHJcbiAgICAvLyAgICAgaWYgKGxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgLy8gICAgICAgbGV0IG5hbWUgPSBsaXN0WzBdLmxhYmVsO1xyXG4gICAgLy8gICAgICAgdGhpcy5jb25maWdDaGFuZ2VEYXRhKG5hbWUpO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgfVxyXG5cclxuICAgIC8vICAgaWYgKGtleSA9PT0gXCJ4XCIpIHtcclxuICAgIC8vICAgICBsZXQgcmVzdWx0ID0gdGhpcy5nZXRMb2FkQ29uZGl0b25zKCk7XHJcbiAgICAvLyAgICAgY29uc29sZS5sb2coXCJyZXM6XCIsIHJlc3VsdCk7XHJcbiAgICAvLyAgIH1cclxuXHJcbiAgICAvLyAgIGlmIChrZXkgPT09IFwiY1wiKSB7XHJcbiAgICAvLyAgICAgbGV0IGxvYWRHcm91cHMgPSB0aGlzLmdldExvYWRHcm91cHMoXCJERUFEXCIpO1xyXG4gICAgLy8gICAgIGNvbnNvbGUubG9nKFwiZ3JvdXBzOlwiLCBsb2FkR3JvdXBzKTtcclxuICAgIC8vICAgfVxyXG5cclxuICAgIC8vICAgaWYgKGtleSA9PT0gXCJ2XCIpIHtcclxuICAgIC8vICAgICBsZXQgbG9hZEdyb3VwcyA9IHRoaXMuZ2V0TG9hZEdyb3VwcyhcIkRFQURcIik7XHJcbiAgICAvLyAgICAgdGhpcy5kZWxldGVMb2FkR3JvdXAoXCJERUFEXCIsIGxvYWRHcm91cHNbMF0ubmFtZSk7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH0pO1xyXG5cclxuICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgLy8gICBsZXQgcmVzID0gdGhpcy5nZXRMb2FkR3JvdXBzKFwiREVBRFwiKTtcclxuICAgIC8vICAgY29uc29sZS5sb2coXCJyZXM6XCIsIHJlcyk7XHJcbiAgICAvLyB9LCAyMDAwKTtcclxuICB9XHJcblxyXG4gIHJlc3RvcmUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNoYW5nZU9wZXJhdG9ycygpO1xyXG4gICAgdGhpcy5jb25maWcuc2hvdygpO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlT3BlcmF0b3JzKCk6IHZvaWQge1xyXG4gICAgLy8g6L+b5YWl5ZG95Luk5YmN5riF56m66YCJ5Lit5LiO6auY5LquLlxyXG4gICAgdGhpcy52aWV3ZXIuc2VsZWN0aW9uTWFuYWdlci5jbGVhckFsbFNlbGVjdGlvbkFuZEhpZ2hsaWdodCgpO1xyXG4gICAgdGhpcy52aWV3ZXIudXBkYXRlRGlzcGxheSgpO1xyXG5cclxuICAgIC8vIOa4heepuuaTjeS9nOWZqC5cclxuICAgIHRoaXMudmlld2VyLm9wZXJhdG9yTWFuYWdlci5jbGVhcigpO1xyXG4gICAgLy8g5re75Yqg5pON5L2c5ZmoXHJcbiAgICB0aGlzLnZpZXdlci5vcGVyYXRvck1hbmFnZXIuYWRkKG5ldyBDYW1lcmFNb3VzZSgpKTtcclxuXHJcbiAgICB0aGlzLnByZVNlbGVjdG9yID0gbmV3IENBRU9iamVjdFByZVNlbGVjdG9yKCk7XHJcbiAgICB0aGlzLnZpZXdlci5vcGVyYXRvck1hbmFnZXIuYWRkKHRoaXMucHJlU2VsZWN0b3IpO1xyXG4gICAgdGhpcy52aWV3ZXIuc2VsZWN0aW9uSW50ZXJmYWNlTWFuYWdlci5zZWxlY3RvckZpbHRlciA9IHRoaXMuZXhwZWN0RmlsdGVyO1xyXG5cclxuICAgIHRoaXMuY2FlT2JqZWN0U2VsZWN0b3IgPSBuZXcgQ0FFT2JqZWN0U2VsZWN0b3IoKTtcclxuICAgIHRoaXMudmlld2VyLm9wZXJhdG9yTWFuYWdlci5hZGQodGhpcy5jYWVPYmplY3RTZWxlY3Rvcik7XHJcbiAgICAvL3RoaXMuY2FlT2JqZWN0U2VsZWN0b3IuaXNNdWx0aVNlbGVjdCA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5jYWVPYmplY3RTZWxlY3Rvci5sQnV0dG9uVXAuYWRkKCgpID0+IHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVQYW5lbCgpO1xyXG4gICAgICB9LCAwKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZW5kKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jb25maWcuaGlkZSgpO1xyXG4gICAgc3VwZXIuZW5kKCk7XHJcblxyXG4gICAgdGhpcy52aWV3ZXIuc2VsZWN0aW9uTWFuYWdlci5jbGVhckFsbFNlbGVjdGlvbkFuZEhpZ2hsaWdodCgpO1xyXG4gICAgdGhpcy52aWV3ZXIudXBkYXRlRGlzcGxheSgpO1xyXG5cclxuICAgIGlmICh0aGlzLmxvYWRDb25kaXRpb25STykge1xyXG4gICAgICB0aGlzLmxvYWRDb25kaXRpb25STy5pbmFjdGl2ZSh0aGlzLnZpZXdlcik7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGNvbW1hbmRTZWxlY3QgPSBuZXcgQ29tbWFuZFNlbGVjdCgpO1xyXG4gICAgdGhpcy5wcm9jZXNzLmNvbW1hbmRNYW5hZ2VyLmV4ZWN1dGUoY29tbWFuZFNlbGVjdCk7XHJcbiAgfVxyXG5cclxuICBjb21tYW5kT2soKTogdm9pZCB7XHJcbiAgICBsZXQgZGF0YSA9IHRoaXMuY29uZmlnLnByb3BlcnRpZXMuaXRlbXNbMF0uZGF0YTtcclxuXHJcbiAgICBsZXQgbG9hZENvbmRpdGlvbiA9IGRhdGEubG9hZENvbmRpdGlvbi52YWx1ZTtcclxuICAgIGxldCBsb2FkR3JvdXAgPSBkYXRhLmxvYWRHcm91cC52YWx1ZTtcclxuICAgIGlmICghbG9hZENvbmRpdGlvbikge1xyXG4gICAgICAvLyDmsqHmnInloavlt6XlhrXlkI3mlbDnu4RcclxuICAgICAgZGF0YS50aXAudmFsdWUgPSAzO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoIWxvYWRHcm91cCkge1xyXG4gICAgICAvLyDmsqHmnInloavojbfovb3nu4TmlbDmja5cclxuICAgICAgZGF0YS50aXAudmFsdWUgPSAzO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHNlbGVjdGVkSm9pbnRzID0gZGF0YS5zZWxlY3RlZEpvaW50cztcclxuICAgIGxldCBzZWxlY3RlZE9iamVjdHMgPSBuZXcgTG9uZ2FuLkxpc3Q8Sm9pbnRPYmplY3Q+KCk7XHJcbiAgICBpZiAoc2VsZWN0ZWRKb2ludHMubGlzdE9wdGlvbnMubGlzdC5sZW5ndGggPT09IDApIHtcclxuICAgICAgLy8g5rKh5pyJ6YCJ5oup54K5XHJcbiAgICAgIGRhdGEudGlwLnZhbHVlID0gMjtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBqb2ludE5hbWVzID0gbmV3IEFycmF5PHN0cmluZz4oKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5zZWxlY3RlZEpvaW50cy5saXN0T3B0aW9ucy5saXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGpvaW50TmFtZXMucHVzaChkYXRhLnNlbGVjdGVkSm9pbnRzLmxpc3RPcHRpb25zLmxpc3RbaV0ubGFiZWwpO1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBqb2ludE5hbWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBqb2ludCA9IHRoaXMucHJvY2Vzcy5maW5kQ2FlT2JqZWN0QnlOYW1lSW5DaGlsZE9iamVjdChcclxuICAgICAgICB0aGlzLnByb2Nlc3MuY2FlUmVuZGVyT2JqZWN0VHJlZU1hbmFnZXIuam9pbnROb2RlLFxyXG4gICAgICAgIGpvaW50TmFtZXNbaV1cclxuICAgICAgKTtcclxuICAgICAgaWYgKGpvaW50IGluc3RhbmNlb2YgSm9pbnRPYmplY3QpIHtcclxuICAgICAgICBzZWxlY3RlZE9iamVjdHMuYWRkKGpvaW50KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBpZiAoc2VsZWN0ZWRPYmplY3RzKSB7XHJcbiAgICAgIHRoaXMudmlld2VyLnNlbGVjdGlvbk1hbmFnZXIuY2xlYXJBbGxTZWxlY3Rpb25BbmRIaWdobGlnaHQoKTtcclxuXHJcbiAgICAgIC8vIOa3u+WKoOaIluS/ruaUueW3peWGtS5cclxuICAgICAgdGhpcy5sb2FkQ29uZGl0aW9uUk8gPSB0aGlzLmdldExvYWRDb25kaXRpb25PYmplY3RCeU5hbWUobG9hZENvbmRpdGlvbik7XHJcbiAgICAgIHRoaXMubG9hZEdyb3VwUk8gPSB0aGlzLmdldExvYWRHcm91cEJ5TmFtZShcclxuICAgICAgICB0aGlzLmxvYWRDb25kaXRpb25STyxcclxuICAgICAgICBsb2FkR3JvdXBcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmICghdGhpcy5sb2FkQ29uZGl0aW9uUk8gfHwgIXRoaXMubG9hZEdyb3VwUk8pIHtcclxuICAgICAgICAvLyDmsqHmnInmn6Xmib7liLDlr7nlupTnmoTlt6XlhrXmiJbojbfovb3nu4RcclxuICAgICAgICBkYXRhLnRpcC52YWx1ZSA9IDQ7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgY291bnRlciA9IDA7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VsZWN0ZWRPYmplY3RzLmNvdW50KCk7IGkrKykge1xyXG4gICAgICAgIGxldCBzZWxlY3RlZE9iaiA9IHNlbGVjdGVkT2JqZWN0cy5pdGVtc1tpXTtcclxuICAgICAgICBsZXQgam9pbnRMb2FkID0gbnVsbDtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmxvYWRHcm91cFJPLmNoaWxkT2JqZWN0cy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgbGV0IGxvYWQgPSB0aGlzLmxvYWRHcm91cFJPLmNoaWxkT2JqZWN0c1tqXTtcclxuICAgICAgICAgIGlmIChsb2FkIGluc3RhbmNlb2YgSm9pbnRMb2FkT2JqZWN0KSB7XHJcbiAgICAgICAgICAgIGlmIChsb2FkLmpvaW50TmFtZSA9PT0gc2VsZWN0ZWRPYmoubmFtZSkge1xyXG4gICAgICAgICAgICAgIGNvdW50ZXIrKztcclxuICAgICAgICAgICAgICBqb2ludExvYWQgPSBsb2FkO1xyXG4gICAgICAgICAgICAgIGxvYWQuYnVzaW5lc3NTdGF0ZSA9IEJ1c2luZXNzU3RhdGUuRWRpdGluZztcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoam9pbnRMb2FkKSB7XHJcbiAgICAgICAgICBsZXQgZm9yZWNlRGF0YSA9IHRoaXMuY29uZmlnLnByb3BlcnRpZXMuaXRlbXNbMV0uZGF0YTtcclxuICAgICAgICAgIGpvaW50TG9hZC5mb3JjZVhEaXJlY3Rpb24gPSBDYWVOdW1iZXIoZm9yZWNlRGF0YS5GeC52YWx1ZSk7XHJcbiAgICAgICAgICBqb2ludExvYWQuZm9yY2VZRGlyZWN0aW9uID0gQ2FlTnVtYmVyKGZvcmVjZURhdGEuRnkudmFsdWUpO1xyXG4gICAgICAgICAgam9pbnRMb2FkLmZvcmNlWkRpcmVjdGlvbiA9IENhZU51bWJlcihmb3JlY2VEYXRhLkZ6LnZhbHVlKTtcclxuXHJcbiAgICAgICAgICBsZXQgbW9tZW50RGF0YSA9IHRoaXMuY29uZmlnLnByb3BlcnRpZXMuaXRlbXNbMl0uZGF0YTtcclxuICAgICAgICAgIGpvaW50TG9hZC5tb21lbnRBYm91dFhBeGlzID0gQ2FlTnVtYmVyKG1vbWVudERhdGEuTXgudmFsdWUpO1xyXG4gICAgICAgICAgam9pbnRMb2FkLm1vbWVudEFib3V0WUF4aXMgPSBDYWVOdW1iZXIobW9tZW50RGF0YS5NeS52YWx1ZSk7XHJcbiAgICAgICAgICBqb2ludExvYWQubW9tZW50QWJvdXRaQXhpcyA9IENhZU51bWJlcihtb21lbnREYXRhLk16LnZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMudmlld2VyLnVwZGF0ZURpc3BsYXkoKTtcclxuICAgICAgZGF0YS50aXAudmFsdWUgPSAxICsgXCIsXCIgKyBjb3VudGVyO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlUGFuZWwoKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMudmlld2VyLnNlbGVjdGlvbkludGVyZmFjZU1hbmFnZXIuc2VsZWN0b3JGaWx0ZXIgPT09IHRoaXMuZXhwZWN0RmlsdGVyXHJcbiAgICApIHtcclxuICAgICAgLy8g5pu05paw6Z2i5p2/55qE6YCJ5Lit54K55YiX6KGoLlxyXG4gICAgICBsZXQgZGF0YSA9IHRoaXMuY29uZmlnLnByb3BlcnRpZXMuaXRlbXNbMF0uZGF0YTtcclxuICAgICAgZGF0YS5zZWxlY3RlZEpvaW50cy5saXN0T3B0aW9ucy5saXN0ID0gW107XHJcbiAgICAgIGxldCBvYmplY3RzID0gdGhpcy5jYWVPYmplY3RTZWxlY3Rvci5zZWxlY3RlZFJlbmRlck9iamVjdHM7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2JqZWN0cy5jb3VudCgpOyBpKyspIHtcclxuICAgICAgICBsZXQgb2JqZWN0ID0gb2JqZWN0cy5pdGVtc1tpXTtcclxuICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgSm9pbnRPYmplY3QpIHtcclxuICAgICAgICAgIGRhdGEuc2VsZWN0ZWRKb2ludHMubGlzdE9wdGlvbnMubGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgdmFsdWU6IG9iamVjdC5pZCxcclxuICAgICAgICAgICAgbGFiZWw6IG9iamVjdC5uYW1lLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgc2VsZWN0ZWRSZW5kZXJPYmplY3RzID0gdGhpcy5jYWVPYmplY3RTZWxlY3Rvci5zZWxlY3RlZFJlbmRlck9iamVjdHM7XHJcbiAgICAgIGlmIChzZWxlY3RlZFJlbmRlck9iamVjdHMuY291bnQoKSA+IDApIHtcclxuICAgICAgICBsZXQgam9pbnROYW1lID1cclxuICAgICAgICAgIHNlbGVjdGVkUmVuZGVyT2JqZWN0cy5pdGVtc1tzZWxlY3RlZFJlbmRlck9iamVjdHMuY291bnQoKSAtIDFdLm5hbWU7XHJcbiAgICAgICAgdGhpcy5jb25maWdDaGFuZ2VEYXRhKGpvaW50TmFtZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gdGhpcy5jb25maWcuY2xlYXJWYWx1ZSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDlnKhjb25maWfkuK3loavlhYXlvZPliY3pgInkuK3ngrnnmoTngrnojbfovb3nmoTmlbDmja4uXHJcbiAgICovXHJcbiAgcHVibGljIGNvbmZpZ0NoYW5nZURhdGEoam9pbnROYW1lOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuY2xlYXJEYXRhKCk7XHJcbiAgICBsZXQgZGF0YSA9IHRoaXMuY29uZmlnLnByb3BlcnRpZXMuaXRlbXNbMF0uZGF0YTtcclxuXHJcbiAgICBsZXQgbG9hZENvbmRpdGlvbk5hbWUgPSBkYXRhLmxvYWRDb25kaXRpb24udmFsdWU7XHJcbiAgICBsZXQgbG9hZEdyb3VwTmFtZSA9IGRhdGEubG9hZEdyb3VwLnZhbHVlO1xyXG4gICAgaWYgKGxvYWRDb25kaXRpb25OYW1lICYmIGxvYWRHcm91cE5hbWUpIHtcclxuICAgICAgbGV0IGxvYWRDb25kaXRpb25STyA9XHJcbiAgICAgICAgdGhpcy5nZXRMb2FkQ29uZGl0aW9uT2JqZWN0QnlOYW1lKGxvYWRDb25kaXRpb25OYW1lKTtcclxuICAgICAgaWYgKGxvYWRDb25kaXRpb25STykge1xyXG4gICAgICAgIGxldCBsb2FkR3JvdXBSTyA9IHRoaXMuZ2V0TG9hZEdyb3VwQnlOYW1lKFxyXG4gICAgICAgICAgbG9hZENvbmRpdGlvblJPLFxyXG4gICAgICAgICAgbG9hZEdyb3VwTmFtZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGxvYWRHcm91cFJPKSB7XHJcbiAgICAgICAgICBsZXQgam9pbnRMb2FkOiBKb2ludExvYWRPYmplY3QgPSBudWxsO1xyXG4gICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBsb2FkR3JvdXBSTy5jaGlsZE9iamVjdHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgbGV0IGNoaWxkID0gbG9hZEdyb3VwUk8uY2hpbGRPYmplY3RzW2pdO1xyXG4gICAgICAgICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBKb2ludExvYWRPYmplY3QpIHtcclxuICAgICAgICAgICAgICBpZiAoY2hpbGQuam9pbnROYW1lID09PSBqb2ludE5hbWUpIHtcclxuICAgICAgICAgICAgICAgIGpvaW50TG9hZCA9IGNoaWxkO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoam9pbnRMb2FkKSB7XHJcbiAgICAgICAgICAgIC8vIOaYvuekuueCueiNt+i9veaVsOaNri5cclxuICAgICAgICAgICAgdGhpcy5zaG93UmVuZGVyT2JqZWN0UHJvcGVydGllcyhqb2ludExvYWQpO1xyXG4gICAgICAgICAgICBkYXRhLnRpcC52YWx1ZSA9IDY7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIOayoeacieafpeaJvuWIsOeCueiNt+i9vS5cclxuICAgICAgICAgICAgZGF0YS50aXAudmFsdWUgPSA1O1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyDml6Dms5Xmn6Xmib7liLDlt6XlhrXlkI3lr7nosaHmiJbojbfovb3nu4Tlr7nosaEuXHJcbiAgICAgIGRhdGEudGlwLnZhbHVlID0gNDtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8g5rKh5pyJ5aGr5YaZ5bel5Ya15ZCN5ZKM6I236L2957uE5ZCNXHJcbiAgICAgIGRhdGEudGlwLnZhbHVlID0gMztcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzaG93UmVuZGVyT2JqZWN0UHJvcGVydGllcyhybzogSm9pbnRMb2FkT2JqZWN0KSB7XHJcbiAgICBsZXQgZm9yY2VEYXRhID0gdGhpcy5jb25maWcucHJvcGVydGllcy5pdGVtc1sxXS5kYXRhO1xyXG4gICAgbGV0IG1vbWVudHNEYXRhID0gdGhpcy5jb25maWcucHJvcGVydGllcy5pdGVtc1syXS5kYXRhO1xyXG5cclxuICAgIGZvcmNlRGF0YS5GeC52YWx1ZSA9IE51bWJlcihyby5mb3JjZVhEaXJlY3Rpb24pLnRvU3RyaW5nKCk7XHJcbiAgICBmb3JjZURhdGEuRnkudmFsdWUgPSBOdW1iZXIocm8uZm9yY2VZRGlyZWN0aW9uKS50b1N0cmluZygpO1xyXG4gICAgZm9yY2VEYXRhLkZ6LnZhbHVlID0gTnVtYmVyKHJvLmZvcmNlWkRpcmVjdGlvbikudG9TdHJpbmcoKTtcclxuXHJcbiAgICBtb21lbnRzRGF0YS5NeC52YWx1ZSA9IE51bWJlcihyby5tb21lbnRBYm91dFhBeGlzKS50b1N0cmluZygpO1xyXG4gICAgbW9tZW50c0RhdGEuTXkudmFsdWUgPSBOdW1iZXIocm8ubW9tZW50QWJvdXRZQXhpcykudG9TdHJpbmcoKTtcclxuICAgIG1vbWVudHNEYXRhLk16LnZhbHVlID0gTnVtYmVyKHJvLm1vbWVudEFib3V0WkF4aXMpLnRvU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsZWFyRGF0YSgpIHtcclxuICAgIGxldCBmb3JjZURhdGEgPSB0aGlzLmNvbmZpZy5wcm9wZXJ0aWVzLml0ZW1zWzFdLmRhdGE7XHJcbiAgICBsZXQgbW9tZW50c0RhdGEgPSB0aGlzLmNvbmZpZy5wcm9wZXJ0aWVzLml0ZW1zWzJdLmRhdGE7XHJcblxyXG4gICAgZm9yY2VEYXRhLkZ4LnZhbHVlID0gXCJcIjtcclxuICAgIGZvcmNlRGF0YS5GeS52YWx1ZSA9IFwiXCI7XHJcbiAgICBmb3JjZURhdGEuRnoudmFsdWUgPSBcIlwiO1xyXG5cclxuICAgIG1vbWVudHNEYXRhLk14LnZhbHVlID0gXCJcIjtcclxuICAgIG1vbWVudHNEYXRhLk15LnZhbHVlID0gXCJcIjtcclxuICAgIG1vbWVudHNEYXRhLk16LnZhbHVlID0gXCJcIjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0TG9hZENvbmRpdGlvbk9iamVjdEJ5TmFtZShsb2FkQ29uZGl0aW9uTmFtZTogc3RyaW5nKSB7XHJcbiAgICBsZXQgcHJldHJlYXRtZW50Uk8gPSB0aGlzLnZpZXdlci5wcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RCeU5hbWUoXHJcbiAgICAgIFwi5ZCO5aSE55CG6K6h566X57uT5p6cXCJcclxuICAgICkgYXMgRGVzaWduQmFzZU9iamVjdDtcclxuXHJcbiAgICBsZXQgY29uZGl0aW9uUGFyZW50ID0gdGhpcy5wcm9jZXNzLmZpbmRDYWVPYmplY3RCeU5hbWVJbkNoaWxkT2JqZWN0KFxyXG4gICAgICBwcmV0cmVhdG1lbnRSTyxcclxuICAgICAgXCLojbfovb3lt6XlhrVcIlxyXG4gICAgKSBhcyBEZXNpZ25CYXNlT2JqZWN0O1xyXG5cclxuICAgIGlmICghY29uZGl0aW9uUGFyZW50KSB7XHJcbiAgICAgIGNvbmRpdGlvblBhcmVudCA9IG5ldyBEZXNpZ25CYXNlT2JqZWN0KCk7XHJcbiAgICAgIGNvbmRpdGlvblBhcmVudC5idXNpbmVzc1N0YXRlID0gQnVzaW5lc3NTdGF0ZS5DcmVhdGluZztcclxuICAgICAgY29uZGl0aW9uUGFyZW50Lm5hbWUgPSBcIuiNt+i9veW3peWGtVwiO1xyXG4gICAgICB0aGlzLnByb2Nlc3MuYWRkUmVuZGVyT2JqZWN0KHByZXRyZWF0bWVudFJPLCBjb25kaXRpb25QYXJlbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBsb2FkQ29uZGl0aW9uUk8gPSB0aGlzLnByb2Nlc3MuZmluZENhZU9iamVjdEJ5TmFtZUluQ2hpbGRPYmplY3QoXHJcbiAgICAgIGNvbmRpdGlvblBhcmVudCxcclxuICAgICAgbG9hZENvbmRpdGlvbk5hbWVcclxuICAgICkgYXMgTG9hZENvbmRpdGlvbk9iamVjdDtcclxuXHJcbiAgICByZXR1cm4gbG9hZENvbmRpdGlvblJPO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRMb2FkR3JvdXBCeU5hbWUoXHJcbiAgICBsb2FkQ29uZGl0aW9uOiBMb2FkQ29uZGl0aW9uT2JqZWN0LFxyXG4gICAgbG9hZEdyb3VwTmFtZTogc3RyaW5nXHJcbiAgKSB7XHJcbiAgICBsZXQgbG9hZEdyb3VwUk8gPSB0aGlzLnByb2Nlc3MuZmluZENhZU9iamVjdEJ5TmFtZUluQ2hpbGRPYmplY3QoXHJcbiAgICAgIGxvYWRDb25kaXRpb24sXHJcbiAgICAgIGxvYWRHcm91cE5hbWVcclxuICAgICkgYXMgTG9hZEdyb3VwT2JqZWN0O1xyXG5cclxuICAgIHJldHVybiBsb2FkR3JvdXBSTztcclxuICB9XHJcblxyXG4gIGRlbGV0ZUxvYWRHcm91cChsb2FkQ29uZGl0aW9uTmFtZTogc3RyaW5nLCBsb2FkR3JvdXBOYW1lOiBzdHJpbmcpIHtcclxuICAgIGxldCBkYXRhID0gdGhpcy5jb25maWcucHJvcGVydGllcy5pdGVtc1swXS5kYXRhO1xyXG5cclxuICAgIC8vIOa3u+WKoOaIluS/ruaUueW3peWGtS5cclxuICAgIGxldCBsb2FkQ29uZGl0aW9uUk8gPSB0aGlzLmdldExvYWRDb25kaXRpb25PYmplY3RCeU5hbWUobG9hZENvbmRpdGlvbk5hbWUpO1xyXG4gICAgaWYgKCFsb2FkQ29uZGl0aW9uUk8pIHtcclxuICAgICAgLy8g5rKh5pyJ5p+l5om+5Yiw5a+55bqU55qE5bel5Ya15oiW6I236L2957uEXHJcbiAgICAgIGRhdGEudGlwLnZhbHVlID0gMjtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBsb2FkR3JvdXBSTyA9IHRoaXMuZ2V0TG9hZEdyb3VwQnlOYW1lKGxvYWRDb25kaXRpb25STywgbG9hZEdyb3VwTmFtZSk7XHJcbiAgICBpZiAoIWxvYWRHcm91cFJPKSB7XHJcbiAgICAgIC8vIOayoeacieafpeaJvuWIsOWvueW6lOeahOW3peWGteaIluiNt+i9vee7hFxyXG4gICAgICBkYXRhLnRpcC52YWx1ZSA9IDI7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZGVsZXRpbmdMaXN0ID0gbmV3IEFycmF5PEpvaW50TG9hZE9iamVjdD4oKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbG9hZEdyb3VwUk8uY2hpbGRPYmplY3RzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBjaGlsZCA9IGxvYWRHcm91cFJPLmNoaWxkT2JqZWN0c1tpXTtcclxuICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgSm9pbnRMb2FkT2JqZWN0KSB7XHJcbiAgICAgICAgZGVsZXRpbmdMaXN0LnB1c2goY2hpbGQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZWxldGluZ0xpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgZGVsZXRpbmdMaXN0W2ldLnRlbXBEZWxldGUodGhpcy52aWV3ZXIpO1xyXG4gICAgICAvLyB0aGlzLnByb2Nlc3MucmVtb3ZlUmVuZGVyT2JqZWN0KGRlbGV0aW5nTGlzdFtpXSk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy52aWV3ZXIudXBkYXRlRGlzcGxheSgpO1xyXG4gICAgZGF0YS50aXAudmFsdWUgPSAxO1xyXG4gICAgLy8gdGhpcy5sb2FkR3JvdXBSTy50ZW1wRGVsZXRlKHRoaXMudmlld2VyKTtcclxuICB9XHJcblxyXG4gIGdldExvYWRDb25kaXRvbnMoKSB7XHJcbiAgICBsZXQgbG9hZENvbmRpdGlvbnMgPSB0aGlzLnZpZXdlci5wcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RzQnlUeXBlKFxyXG4gICAgICBcIkxvYWRDb25kaXRpb25PYmplY3RcIlxyXG4gICAgKTtcclxuICAgIHJldHVybiBsb2FkQ29uZGl0aW9ucztcclxuICB9XHJcblxyXG4gIGdldExvYWRHcm91cHMobG9hZENvbmRpdGlvbk5hbWU6IHN0cmluZykge1xyXG4gICAgbGV0IGNvbmRpdGlvbnMgPSB0aGlzLmdldExvYWRDb25kaXRvbnMoKTtcclxuICAgIGxldCBsb2FkR3JvdXBzID0gbmV3IEFycmF5PExvYWRHcm91cE9iamVjdD4oKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29uZGl0aW9ucy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoY29uZGl0aW9uc1tpXS5uYW1lID09PSBsb2FkQ29uZGl0aW9uTmFtZSkge1xyXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29uZGl0aW9uc1tpXS5jaGlsZE9iamVjdHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgIGxldCBsb2FkR3JvdXAgPSBjb25kaXRpb25zW2ldLmNoaWxkT2JqZWN0c1tqXSBhcyBMb2FkR3JvdXBPYmplY3Q7XHJcbiAgICAgICAgICBpZihsb2FkR3JvdXAuY2hlY2tCdXNpbmVzc1N0YXRlSXNBY3RpdmUoKSkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGxvYWRHcm91cC5jaGlsZE9iamVjdHMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAgICAgICBsZXQgbG9hZCA9IGxvYWRHcm91cC5jaGlsZE9iamVjdHNba107XHJcbiAgICAgICAgICAgICAgaWYgKGxvYWQgaW5zdGFuY2VvZiBKb2ludExvYWRPYmplY3QgJiYgbG9hZC5jaGVja0J1c2luZXNzU3RhdGVJc0FjdGl2ZSgpKSB7XHJcbiAgICAgICAgICAgICAgICBsb2FkR3JvdXBzLnB1c2gobG9hZEdyb3VwKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBsb2FkR3JvdXBzO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q3VycmVudEdyb3VwSm9pbnRMb2Fkcyhsb2FkQ29uZGl0aW9uTmFtZTogc3RyaW5nLCBsb2FkR3JvdXBOYW1lOiBzdHJpbmcpIHtcclxuICAgIGxldCBncm91cHMgPSB0aGlzLmdldExvYWRHcm91cHMobG9hZENvbmRpdGlvbk5hbWUpO1xyXG4gICAgbGV0IGpvaW50TG9hZHMgPSBuZXcgQXJyYXk8Sm9pbnRMb2FkT2JqZWN0PigpO1xyXG5cclxuICAgIGZvcihsZXQgaSA9IDA7IGkgPCBncm91cHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGxvYWRHcm91cCA9IGdyb3Vwc1tpXTtcclxuICAgICAgaWYobG9hZEdyb3VwLm5hbWUgPT09IGxvYWRHcm91cE5hbWUpIHtcclxuICAgICAgICBmb3IobGV0IGogPSAwOyBqIDwgbG9hZEdyb3VwLmNoaWxkT2JqZWN0cy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgbGV0IGxvYWQgPSBsb2FkR3JvdXAuY2hpbGRPYmplY3RzW2pdO1xyXG4gICAgICAgICAgaWYobG9hZCBpbnN0YW5jZW9mIEpvaW50TG9hZE9iamVjdCAmJiBsb2FkLmNoZWNrQnVzaW5lc3NTdGF0ZUlzQWN0aXZlKCkpIHtcclxuICAgICAgICAgICAgam9pbnRMb2Fkcy5wdXNoKGxvYWQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBqb2ludExvYWRzO1xyXG4gIH1cclxufVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFnQkE7QUFBQTtBQVdBO0FBQUE7QUFWQTtBQU1BO0FBQ0E7QUFDQTs7QUFJQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFtQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFFQTtBQUNBO0FBR0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTs7QUFHQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTs7QUFFQTtBQUVBO0FBQ0E7O0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFDQTs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUlBO0FBQ0E7OztBQUtBO0FBQ0E7QUFHQTtBQUNBO0FBS0E7QUFFQTtBQUNBOztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7O0FBSUE7QUFDQTs7QUFFQTtBQUVBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBSUE7QUFDQTtBQUNBO0FBRUE7QUFDQTs7QUFJQTtBQUtBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTs7OztBQU1BO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7O0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUlBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQTtBQUtBO0FBQ0E7QUFFQTtBQUlBO0FBS0E7QUFDQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBRUE7QUFDQTs7QUFHQTtBQUNBO0FBRUE7QUFDQTs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFJQTtBQUNBOztBQUlBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUFRQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOzs7QUFJQTtBQUNBO0FBQ0E7QUFBQTs7O0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./packages/caeDesign/src/viewerWrapper/commands/aftertreatment/editJointLoad/commandEditJointLoad.ts\n");
|
|
5755
|
+
eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__, exports, __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\"), __webpack_require__(/*! ../../../../gsDevFx/operators/cameraMouse */ \"./packages/caeDesign/src/gsDevFx/operators/cameraMouse.ts\"), __webpack_require__(/*! ../../../../gsDevFx/operators/cAEObjectPreSelector */ \"./packages/caeDesign/src/gsDevFx/operators/cAEObjectPreSelector.ts\"), __webpack_require__(/*! ../../../../gsDevFx/operators/caeObjectSelector */ \"./packages/caeDesign/src/gsDevFx/operators/caeObjectSelector.ts\"), __webpack_require__(/*! ../../../../gsDevFx/commands/commandSelect */ \"./packages/caeDesign/src/gsDevFx/commands/commandSelect.ts\"), __webpack_require__(/*! ../../commandComponent */ \"./packages/caeDesign/src/viewerWrapper/commands/commandComponent.ts\"), __webpack_require__(/*! gs-ceec-design */ \"./packages/ceecDesign/src/index.ts\"), __webpack_require__(/*! gs-ceec-design */ \"./packages/ceecDesign/src/index.ts\"), __webpack_require__(/*! ../../../../gsDevFx/objects/loadObjects/jointLoadObject */ \"./packages/caeDesign/src/gsDevFx/objects/loadObjects/jointLoadObject.ts\"), __webpack_require__(/*! ../../../../gsDevFx/objects/caeObjects/jointObject */ \"./packages/caeDesign/src/gsDevFx/objects/caeObjects/jointObject.ts\"), __webpack_require__(/*! ../../../../gsDevFx/managers/interfaceManagers/selectionInterfaceManager */ \"./packages/caeDesign/src/gsDevFx/managers/interfaceManagers/selectionInterfaceManager.ts\"), __webpack_require__(/*! gs-bim-air */ \"./node_modules/gs-bim-air/lib/BimAir.umd.min.js\"), __webpack_require__(/*! ../../../../utility/utility */ \"./packages/caeDesign/src/utility/utility.ts\"), __webpack_require__(/*! ./editJointLoadConfig */ \"./packages/caeDesign/src/viewerWrapper/commands/aftertreatment/editJointLoad/editJointLoadConfig.ts\")], __WEBPACK_AMD_DEFINE_RESULT__ = (function (require, exports, tslib_1, cameraMouse_1, cAEObjectPreSelector_1, caeObjectSelector_1, commandSelect_1, commandComponent_1, gs_ceec_design_1, gs_ceec_design_2, jointLoadObject_1, jointObject_1, selectionInterfaceManager_1, gs_bim_air_1, utility_1, editJointLoadConfig_1) {\n \"use strict\";\n\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n editJointLoadConfig_1 = tslib_1.__importDefault(editJointLoadConfig_1);\n var CommandEditJointLoad = function (_super) {\n tslib_1.__extends(CommandEditJointLoad, _super);\n function CommandEditJointLoad() {\n var _this = _super.call(this) || this;\n _this.typeName = \"CommandEditJointLoad\";\n _this.loadConditionRO = null;\n _this.loadGroupRO = null;\n _this.expectFilter = selectionInterfaceManager_1.SelectorFiliter.Joint;\n return _this;\n }\n CommandEditJointLoad.prototype.begin = function () {\n this.changeOperators();\n console.log(\"CommandEditJointLoad\");\n this.config = new editJointLoadConfig_1.default();\n this.config.show();\n };\n CommandEditJointLoad.prototype.restore = function () {\n this.changeOperators();\n this.config.show();\n };\n CommandEditJointLoad.prototype.changeOperators = function () {\n var _this = this;\n this.viewer.selectionManager.clearAllSelectionAndHighlight();\n this.viewer.updateDisplay();\n this.viewer.operatorManager.clear();\n this.viewer.operatorManager.add(new cameraMouse_1.CameraMouse());\n this.preSelector = new cAEObjectPreSelector_1.CAEObjectPreSelector();\n this.viewer.operatorManager.add(this.preSelector);\n this.viewer.selectionInterfaceManager.selectorFilter = this.expectFilter;\n this.caeObjectSelector = new caeObjectSelector_1.CAEObjectSelector();\n this.viewer.operatorManager.add(this.caeObjectSelector);\n this.caeObjectSelector.lButtonUp.add(function () {\n setTimeout(function () {\n _this.updatePanel();\n }, 0);\n });\n };\n CommandEditJointLoad.prototype.end = function () {\n this.config.hide();\n _super.prototype.end.call(this);\n this.viewer.selectionManager.clearAllSelectionAndHighlight();\n this.viewer.updateDisplay();\n if (this.loadConditionRO) {\n this.loadConditionRO.inactive(this.viewer);\n }\n var commandSelect = new commandSelect_1.CommandSelect();\n this.process.commandManager.execute(commandSelect);\n };\n CommandEditJointLoad.prototype.commandOk = function () {\n var data = this.config.properties.items[0].data;\n var loadCondition = data.loadCondition.value;\n var loadGroup = data.loadGroup.value;\n if (!loadCondition) {\n data.tip.value = 3;\n return;\n }\n if (!loadGroup) {\n data.tip.value = 3;\n return;\n }\n var selectedJoints = data.selectedJoints;\n var selectedObjects = new gs_bim_air_1.Longan.List();\n if (selectedJoints.listOptions.list.length === 0) {\n data.tip.value = 2;\n return;\n }\n var jointNames = new Array();\n for (var i = 0; i < data.selectedJoints.listOptions.list.length; i++) {\n jointNames.push(data.selectedJoints.listOptions.list[i].label);\n }\n for (var i = 0; i < jointNames.length; i++) {\n var joint = this.process.findCaeObjectByNameInChildObject(this.process.caeRenderObjectTreeManager.jointNode, jointNames[i]);\n if (joint instanceof jointObject_1.JointObject) {\n selectedObjects.add(joint);\n }\n }\n if (selectedObjects) {\n this.viewer.selectionManager.clearAllSelectionAndHighlight();\n this.loadConditionRO = this.getLoadConditionObjectByName(loadCondition);\n this.loadGroupRO = this.getLoadGroupByName(this.loadConditionRO, loadGroup);\n if (!this.loadConditionRO || !this.loadGroupRO) {\n data.tip.value = 4;\n return;\n }\n var counter = 0;\n for (var i = 0; i < selectedObjects.count(); i++) {\n var selectedObj = selectedObjects.items[i];\n var jointLoad = null;\n for (var j = 0; j < this.loadGroupRO.childObjects.length; j++) {\n var load = this.loadGroupRO.childObjects[j];\n if (load instanceof jointLoadObject_1.JointLoadObject) {\n if (load.jointName === selectedObj.name) {\n counter++;\n jointLoad = load;\n load.businessState = gs_ceec_design_2.BusinessState.Editing;\n break;\n }\n }\n }\n if (jointLoad) {\n var foreceData = this.config.properties.items[1].data;\n jointLoad.forceXDirection = (0, utility_1.CaeNumber)(foreceData.Fx.value);\n jointLoad.forceYDirection = (0, utility_1.CaeNumber)(foreceData.Fy.value);\n jointLoad.forceZDirection = (0, utility_1.CaeNumber)(foreceData.Fz.value);\n var momentData = this.config.properties.items[2].data;\n jointLoad.momentAboutXAxis = (0, utility_1.CaeNumber)(momentData.Mx.value);\n jointLoad.momentAboutYAxis = (0, utility_1.CaeNumber)(momentData.My.value);\n jointLoad.momentAboutZAxis = (0, utility_1.CaeNumber)(momentData.Mz.value);\n }\n }\n this.viewer.updateDisplay();\n data.tip.value = 1 + \",\" + counter;\n }\n };\n CommandEditJointLoad.prototype.updatePanel = function () {\n if (this.viewer.selectionInterfaceManager.selectorFilter === this.expectFilter) {\n var data = this.config.properties.items[0].data;\n data.selectedJoints.listOptions.list = [];\n var objects = this.caeObjectSelector.selectedRenderObjects;\n for (var i = 0; i < objects.count(); i++) {\n var object = objects.items[i];\n if (object instanceof jointObject_1.JointObject) {\n data.selectedJoints.listOptions.list.push({\n value: object.id,\n label: object.name\n });\n }\n }\n var selectedRenderObjects = this.caeObjectSelector.selectedRenderObjects;\n if (selectedRenderObjects.count() > 0) {\n var jointName = selectedRenderObjects.items[selectedRenderObjects.count() - 1].name;\n this.configChangeData(jointName);\n } else {}\n }\n };\n CommandEditJointLoad.prototype.configChangeData = function (jointName) {\n this.clearData();\n var data = this.config.properties.items[0].data;\n var loadConditionName = data.loadCondition.value;\n var loadGroupName = data.loadGroup.value;\n if (loadConditionName && loadGroupName) {\n var loadConditionRO = this.getLoadConditionObjectByName(loadConditionName);\n if (loadConditionRO) {\n var loadGroupRO = this.getLoadGroupByName(loadConditionRO, loadGroupName);\n if (loadGroupRO) {\n var jointLoad = null;\n for (var j = 0; j < loadGroupRO.childObjects.length; j++) {\n var child = loadGroupRO.childObjects[j];\n if (child instanceof jointLoadObject_1.JointLoadObject) {\n if (child.jointName === jointName) {\n jointLoad = child;\n break;\n }\n }\n }\n if (jointLoad) {\n this.showRenderObjectProperties(jointLoad);\n data.tip.value = 6;\n return;\n } else {\n data.tip.value = 5;\n return;\n }\n }\n }\n data.tip.value = 4;\n return;\n } else {\n data.tip.value = 3;\n return;\n }\n };\n CommandEditJointLoad.prototype.showRenderObjectProperties = function (ro) {\n var forceData = this.config.properties.items[1].data;\n var momentsData = this.config.properties.items[2].data;\n forceData.Fx.value = Number(ro.forceXDirection).toString();\n forceData.Fy.value = Number(ro.forceYDirection).toString();\n forceData.Fz.value = Number(ro.forceZDirection).toString();\n momentsData.Mx.value = Number(ro.momentAboutXAxis).toString();\n momentsData.My.value = Number(ro.momentAboutYAxis).toString();\n momentsData.Mz.value = Number(ro.momentAboutZAxis).toString();\n };\n CommandEditJointLoad.prototype.clearData = function () {\n var forceData = this.config.properties.items[1].data;\n var momentsData = this.config.properties.items[2].data;\n forceData.Fx.value = \"\";\n forceData.Fy.value = \"\";\n forceData.Fz.value = \"\";\n momentsData.Mx.value = \"\";\n momentsData.My.value = \"\";\n momentsData.Mz.value = \"\";\n };\n CommandEditJointLoad.prototype.getLoadConditionObjectByName = function (loadConditionName) {\n var pretreatmentRO = this.viewer.process.findRenderObjectByName(\"后处理计算结果\");\n var conditionParent = this.process.findCaeObjectByNameInChildObject(pretreatmentRO, \"荷载工况\");\n if (!conditionParent) {\n conditionParent = new gs_ceec_design_1.DesignBaseObject();\n conditionParent.businessState = gs_ceec_design_2.BusinessState.Creating;\n conditionParent.name = \"荷载工况\";\n this.process.addRenderObject(pretreatmentRO, conditionParent);\n }\n var loadConditionRO = this.process.findCaeObjectByNameInChildObject(conditionParent, loadConditionName);\n return loadConditionRO;\n };\n CommandEditJointLoad.prototype.getLoadGroupByName = function (loadCondition, loadGroupName) {\n var loadGroupRO = this.process.findCaeObjectByNameInChildObject(loadCondition, loadGroupName);\n return loadGroupRO;\n };\n CommandEditJointLoad.prototype.deleteLoadGroup = function (loadConditionName, loadGroupName) {\n var data = this.config.properties.items[0].data;\n var loadConditionRO = this.getLoadConditionObjectByName(loadConditionName);\n if (!loadConditionRO) {\n data.tip.value = 2;\n return;\n }\n var loadGroupRO = this.getLoadGroupByName(loadConditionRO, loadGroupName);\n if (!loadGroupRO) {\n data.tip.value = 2;\n return;\n }\n var deletingList = new Array();\n var restObject = 0;\n for (var i = 0; i < loadGroupRO.childObjects.length; i++) {\n var child = loadGroupRO.childObjects[i];\n if (child instanceof jointLoadObject_1.JointLoadObject) {\n deletingList.push(child);\n } else if (child.checkBusinessStateIsActive()) {\n restObject++;\n }\n }\n for (var i = 0; i < deletingList.length; i++) {\n deletingList[i].tempDelete(this.viewer);\n }\n if (restObject) {\n this.loadGroupRO.tempDelete(this.viewer);\n }\n this.viewer.updateDisplay();\n data.tip.value = 1;\n };\n CommandEditJointLoad.prototype.getLoadConditons = function () {\n var loadConditions = this.viewer.process.findRenderObjectsByType(\"LoadConditionObject\");\n return loadConditions;\n };\n CommandEditJointLoad.prototype.getLoadGroups = function (loadConditionName) {\n var conditions = this.getLoadConditons();\n var loadGroups = new Array();\n for (var i = 0; i < conditions.length; i++) {\n if (conditions[i].name === loadConditionName) {\n for (var j = 0; j < conditions[i].childObjects.length; j++) {\n var loadGroup = conditions[i].childObjects[j];\n if (loadGroup.checkBusinessStateIsActive()) {\n for (var k = 0; k < loadGroup.childObjects.length; k++) {\n var load = loadGroup.childObjects[k];\n if (load instanceof jointLoadObject_1.JointLoadObject && load.checkBusinessStateIsActive()) {\n loadGroups.push(loadGroup);\n break;\n }\n }\n }\n }\n }\n }\n return loadGroups;\n };\n CommandEditJointLoad.prototype.getCurrentGroupJointLoads = function (loadConditionName, loadGroupName) {\n var groups = this.getLoadGroups(loadConditionName);\n var jointLoads = new Array();\n for (var i = 0; i < groups.length; i++) {\n var loadGroup = groups[i];\n if (loadGroup.name === loadGroupName) {\n for (var j = 0; j < loadGroup.childObjects.length; j++) {\n var load = loadGroup.childObjects[j];\n if (load instanceof jointLoadObject_1.JointLoadObject && load.checkBusinessStateIsActive()) {\n jointLoads.push(load);\n }\n }\n break;\n }\n }\n return jointLoads;\n };\n return CommandEditJointLoad;\n }(commandComponent_1.CommandComponent);\n exports.default = CommandEditJointLoad;\n}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9wYWNrYWdlcy9jYWVEZXNpZ24vc3JjL3ZpZXdlcldyYXBwZXIvY29tbWFuZHMvYWZ0ZXJ0cmVhdG1lbnQvZWRpdEpvaW50TG9hZC9jb21tYW5kRWRpdEpvaW50TG9hZC50cy5qcyIsInNvdXJjZXMiOlsid2VicGFjazovL1tuYW1lXS8uL3BhY2thZ2VzL2NhZURlc2lnbi9zcmMvdmlld2VyV3JhcHBlci9jb21tYW5kcy9hZnRlcnRyZWF0bWVudC9lZGl0Sm9pbnRMb2FkL2NvbW1hbmRFZGl0Sm9pbnRMb2FkLnRzP2Y0MWEiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2FtZXJhTW91c2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vZ3NEZXZGeC9vcGVyYXRvcnMvY2FtZXJhTW91c2VcIjtcclxuaW1wb3J0IHsgQ0FFT2JqZWN0UHJlU2VsZWN0b3IgfSBmcm9tIFwiLi4vLi4vLi4vLi4vZ3NEZXZGeC9vcGVyYXRvcnMvY0FFT2JqZWN0UHJlU2VsZWN0b3JcIjtcclxuaW1wb3J0IHsgQ0FFT2JqZWN0U2VsZWN0b3IgfSBmcm9tIFwiLi4vLi4vLi4vLi4vZ3NEZXZGeC9vcGVyYXRvcnMvY2FlT2JqZWN0U2VsZWN0b3JcIjtcclxuaW1wb3J0IHsgQ29tbWFuZFNlbGVjdCB9IGZyb20gXCIuLi8uLi8uLi8uLi9nc0RldkZ4L2NvbW1hbmRzL2NvbW1hbmRTZWxlY3RcIjtcclxuaW1wb3J0IHsgQ29tbWFuZENvbXBvbmVudCB9IGZyb20gXCIuLi8uLi9jb21tYW5kQ29tcG9uZW50XCI7XHJcbmltcG9ydCB7IERlc2lnbkJhc2VPYmplY3QgfSBmcm9tIFwiZ3MtY2VlYy1kZXNpZ25cIjtcclxuaW1wb3J0IHsgTG9hZENvbmRpdGlvbk9iamVjdCB9IGZyb20gXCIuLi8uLi8uLi8uLi9nc0RldkZ4L29iamVjdHMvbG9hZE9iamVjdHMvbG9hZENvbmRpdGlvbk9iamVjdFwiO1xyXG5pbXBvcnQgeyBCdXNpbmVzc1N0YXRlIH0gZnJvbSBcImdzLWNlZWMtZGVzaWduXCI7XHJcbmltcG9ydCB7IExvYWRHcm91cE9iamVjdCB9IGZyb20gXCIuLi8uLi8uLi8uLi9nc0RldkZ4L29iamVjdHMvbG9hZE9iamVjdHMvbG9hZEdyb3VwT2JqZWN0XCI7XHJcbmltcG9ydCB7IEpvaW50TG9hZE9iamVjdCB9IGZyb20gXCIuLi8uLi8uLi8uLi9nc0RldkZ4L29iamVjdHMvbG9hZE9iamVjdHMvam9pbnRMb2FkT2JqZWN0XCI7XHJcbmltcG9ydCB7IEpvaW50T2JqZWN0IH0gZnJvbSBcIi4uLy4uLy4uLy4uL2dzRGV2Rngvb2JqZWN0cy9jYWVPYmplY3RzL2pvaW50T2JqZWN0XCI7XHJcbmltcG9ydCB7IFNlbGVjdG9yRmlsaXRlciB9IGZyb20gXCIuLi8uLi8uLi8uLi9nc0RldkZ4L21hbmFnZXJzL2ludGVyZmFjZU1hbmFnZXJzL3NlbGVjdGlvbkludGVyZmFjZU1hbmFnZXJcIjtcclxuaW1wb3J0IHsgTG9uZ2FuIH0gZnJvbSBcImdzLWJpbS1haXJcIjtcclxuaW1wb3J0IHsgQ2FlTnVtYmVyIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3V0aWxpdHkvdXRpbGl0eVwiO1xyXG5pbXBvcnQgRWRpdEpvaW50TG9hZENvbmZpZyBmcm9tIFwiLi9lZGl0Sm9pbnRMb2FkQ29uZmlnXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb21tYW5kRWRpdEpvaW50TG9hZCBleHRlbmRzIENvbW1hbmRDb21wb25lbnQge1xyXG4gIHR5cGVOYW1lID0gXCJDb21tYW5kRWRpdEpvaW50TG9hZFwiO1xyXG5cclxuICBjb25maWc6IEVkaXRKb2ludExvYWRDb25maWc7XHJcbiAgcHJlU2VsZWN0b3I6IENBRU9iamVjdFByZVNlbGVjdG9yO1xyXG4gIGNhZU9iamVjdFNlbGVjdG9yOiBDQUVPYmplY3RTZWxlY3RvcjtcclxuXHJcbiAgbG9hZENvbmRpdGlvblJPOiBMb2FkQ29uZGl0aW9uT2JqZWN0ID0gbnVsbDtcclxuICBsb2FkR3JvdXBSTzogTG9hZEdyb3VwT2JqZWN0ID0gbnVsbDtcclxuICBleHBlY3RGaWx0ZXIgPSBTZWxlY3RvckZpbGl0ZXIuSm9pbnQ7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIGJlZ2luKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jaGFuZ2VPcGVyYXRvcnMoKTtcclxuXHJcbiAgICBjb25zb2xlLmxvZyhcIkNvbW1hbmRFZGl0Sm9pbnRMb2FkXCIpO1xyXG4gICAgdGhpcy5jb25maWcgPSBuZXcgRWRpdEpvaW50TG9hZENvbmZpZygpO1xyXG4gICAgdGhpcy5jb25maWcuc2hvdygpO1xyXG5cclxuICAgIC8vIHRoaXMudmlld2VyLm9uV2luZG93S2V5RG93bi5hZGQoKHZpZXdlciwgZSkgPT4ge1xyXG4gICAgLy8gICBsZXQgZXY6IGFueSA9IGUudWlFdmVudDtcclxuICAgIC8vICAgbGV0IGtleSA9IGV2LmtleTtcclxuXHJcbiAgICAvLyAgIGlmIChrZXkgPT09IFwielwiKSB7XHJcbiAgICAvLyAgICAgbGV0IGRhdGEgPSB0aGlzLmNvbmZpZy5wcm9wZXJ0aWVzLml0ZW1zWzBdLmRhdGE7XHJcbiAgICAvLyAgICAgbGV0IGxpc3QgPSBkYXRhLnNlbGVjdGVkSm9pbnRzLmxpc3RPcHRpb25zLmxpc3Q7XHJcbiAgICAvLyAgICAgaWYgKGxpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgLy8gICAgICAgbGV0IG5hbWUgPSBsaXN0WzBdLmxhYmVsO1xyXG4gICAgLy8gICAgICAgdGhpcy5jb25maWdDaGFuZ2VEYXRhKG5hbWUpO1xyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgfVxyXG5cclxuICAgIC8vICAgaWYgKGtleSA9PT0gXCJ4XCIpIHtcclxuICAgIC8vICAgICBsZXQgcmVzdWx0ID0gdGhpcy5nZXRMb2FkQ29uZGl0b25zKCk7XHJcbiAgICAvLyAgICAgY29uc29sZS5sb2coXCJyZXM6XCIsIHJlc3VsdCk7XHJcbiAgICAvLyAgIH1cclxuXHJcbiAgICAvLyAgIGlmIChrZXkgPT09IFwiY1wiKSB7XHJcbiAgICAvLyAgICAgbGV0IGxvYWRHcm91cHMgPSB0aGlzLmdldExvYWRHcm91cHMoXCJERUFEXCIpO1xyXG4gICAgLy8gICAgIGNvbnNvbGUubG9nKFwiZ3JvdXBzOlwiLCBsb2FkR3JvdXBzKTtcclxuICAgIC8vICAgfVxyXG5cclxuICAgIC8vICAgaWYgKGtleSA9PT0gXCJ2XCIpIHtcclxuICAgIC8vICAgICBsZXQgbG9hZEdyb3VwcyA9IHRoaXMuZ2V0TG9hZEdyb3VwcyhcIkRFQURcIik7XHJcbiAgICAvLyAgICAgdGhpcy5kZWxldGVMb2FkR3JvdXAoXCJERUFEXCIsIGxvYWRHcm91cHNbMF0ubmFtZSk7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH0pO1xyXG5cclxuICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgLy8gICBsZXQgcmVzID0gdGhpcy5nZXRMb2FkR3JvdXBzKFwiREVBRFwiKTtcclxuICAgIC8vICAgY29uc29sZS5sb2coXCJyZXM6XCIsIHJlcyk7XHJcbiAgICAvLyB9LCAyMDAwKTtcclxuICB9XHJcblxyXG4gIHJlc3RvcmUoKTogdm9pZCB7XHJcbiAgICB0aGlzLmNoYW5nZU9wZXJhdG9ycygpO1xyXG4gICAgdGhpcy5jb25maWcuc2hvdygpO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlT3BlcmF0b3JzKCk6IHZvaWQge1xyXG4gICAgLy8g6L+b5YWl5ZG95Luk5YmN5riF56m66YCJ5Lit5LiO6auY5LquLlxyXG4gICAgdGhpcy52aWV3ZXIuc2VsZWN0aW9uTWFuYWdlci5jbGVhckFsbFNlbGVjdGlvbkFuZEhpZ2hsaWdodCgpO1xyXG4gICAgdGhpcy52aWV3ZXIudXBkYXRlRGlzcGxheSgpO1xyXG5cclxuICAgIC8vIOa4heepuuaTjeS9nOWZqC5cclxuICAgIHRoaXMudmlld2VyLm9wZXJhdG9yTWFuYWdlci5jbGVhcigpO1xyXG4gICAgLy8g5re75Yqg5pON5L2c5ZmoXHJcbiAgICB0aGlzLnZpZXdlci5vcGVyYXRvck1hbmFnZXIuYWRkKG5ldyBDYW1lcmFNb3VzZSgpKTtcclxuXHJcbiAgICB0aGlzLnByZVNlbGVjdG9yID0gbmV3IENBRU9iamVjdFByZVNlbGVjdG9yKCk7XHJcbiAgICB0aGlzLnZpZXdlci5vcGVyYXRvck1hbmFnZXIuYWRkKHRoaXMucHJlU2VsZWN0b3IpO1xyXG4gICAgdGhpcy52aWV3ZXIuc2VsZWN0aW9uSW50ZXJmYWNlTWFuYWdlci5zZWxlY3RvckZpbHRlciA9IHRoaXMuZXhwZWN0RmlsdGVyO1xyXG5cclxuICAgIHRoaXMuY2FlT2JqZWN0U2VsZWN0b3IgPSBuZXcgQ0FFT2JqZWN0U2VsZWN0b3IoKTtcclxuICAgIHRoaXMudmlld2VyLm9wZXJhdG9yTWFuYWdlci5hZGQodGhpcy5jYWVPYmplY3RTZWxlY3Rvcik7XHJcbiAgICAvL3RoaXMuY2FlT2JqZWN0U2VsZWN0b3IuaXNNdWx0aVNlbGVjdCA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5jYWVPYmplY3RTZWxlY3Rvci5sQnV0dG9uVXAuYWRkKCgpID0+IHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVQYW5lbCgpO1xyXG4gICAgICB9LCAwKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZW5kKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jb25maWcuaGlkZSgpO1xyXG4gICAgc3VwZXIuZW5kKCk7XHJcblxyXG4gICAgdGhpcy52aWV3ZXIuc2VsZWN0aW9uTWFuYWdlci5jbGVhckFsbFNlbGVjdGlvbkFuZEhpZ2hsaWdodCgpO1xyXG4gICAgdGhpcy52aWV3ZXIudXBkYXRlRGlzcGxheSgpO1xyXG5cclxuICAgIGlmICh0aGlzLmxvYWRDb25kaXRpb25STykge1xyXG4gICAgICB0aGlzLmxvYWRDb25kaXRpb25STy5pbmFjdGl2ZSh0aGlzLnZpZXdlcik7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGNvbW1hbmRTZWxlY3QgPSBuZXcgQ29tbWFuZFNlbGVjdCgpO1xyXG4gICAgdGhpcy5wcm9jZXNzLmNvbW1hbmRNYW5hZ2VyLmV4ZWN1dGUoY29tbWFuZFNlbGVjdCk7XHJcbiAgfVxyXG5cclxuICBjb21tYW5kT2soKTogdm9pZCB7XHJcbiAgICBsZXQgZGF0YSA9IHRoaXMuY29uZmlnLnByb3BlcnRpZXMuaXRlbXNbMF0uZGF0YTtcclxuXHJcbiAgICBsZXQgbG9hZENvbmRpdGlvbiA9IGRhdGEubG9hZENvbmRpdGlvbi52YWx1ZTtcclxuICAgIGxldCBsb2FkR3JvdXAgPSBkYXRhLmxvYWRHcm91cC52YWx1ZTtcclxuICAgIGlmICghbG9hZENvbmRpdGlvbikge1xyXG4gICAgICAvLyDmsqHmnInloavlt6XlhrXlkI3mlbDnu4RcclxuICAgICAgZGF0YS50aXAudmFsdWUgPSAzO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAoIWxvYWRHcm91cCkge1xyXG4gICAgICAvLyDmsqHmnInloavojbfovb3nu4TmlbDmja5cclxuICAgICAgZGF0YS50aXAudmFsdWUgPSAzO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHNlbGVjdGVkSm9pbnRzID0gZGF0YS5zZWxlY3RlZEpvaW50cztcclxuICAgIGxldCBzZWxlY3RlZE9iamVjdHMgPSBuZXcgTG9uZ2FuLkxpc3Q8Sm9pbnRPYmplY3Q+KCk7XHJcbiAgICBpZiAoc2VsZWN0ZWRKb2ludHMubGlzdE9wdGlvbnMubGlzdC5sZW5ndGggPT09IDApIHtcclxuICAgICAgLy8g5rKh5pyJ6YCJ5oup54K5XHJcbiAgICAgIGRhdGEudGlwLnZhbHVlID0gMjtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBqb2ludE5hbWVzID0gbmV3IEFycmF5PHN0cmluZz4oKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5zZWxlY3RlZEpvaW50cy5saXN0T3B0aW9ucy5saXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGpvaW50TmFtZXMucHVzaChkYXRhLnNlbGVjdGVkSm9pbnRzLmxpc3RPcHRpb25zLmxpc3RbaV0ubGFiZWwpO1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBqb2ludE5hbWVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBqb2ludCA9IHRoaXMucHJvY2Vzcy5maW5kQ2FlT2JqZWN0QnlOYW1lSW5DaGlsZE9iamVjdChcclxuICAgICAgICB0aGlzLnByb2Nlc3MuY2FlUmVuZGVyT2JqZWN0VHJlZU1hbmFnZXIuam9pbnROb2RlLFxyXG4gICAgICAgIGpvaW50TmFtZXNbaV1cclxuICAgICAgKTtcclxuICAgICAgaWYgKGpvaW50IGluc3RhbmNlb2YgSm9pbnRPYmplY3QpIHtcclxuICAgICAgICBzZWxlY3RlZE9iamVjdHMuYWRkKGpvaW50KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuXHJcbiAgICBpZiAoc2VsZWN0ZWRPYmplY3RzKSB7XHJcbiAgICAgIHRoaXMudmlld2VyLnNlbGVjdGlvbk1hbmFnZXIuY2xlYXJBbGxTZWxlY3Rpb25BbmRIaWdobGlnaHQoKTtcclxuXHJcbiAgICAgIC8vIOa3u+WKoOaIluS/ruaUueW3peWGtS5cclxuICAgICAgdGhpcy5sb2FkQ29uZGl0aW9uUk8gPSB0aGlzLmdldExvYWRDb25kaXRpb25PYmplY3RCeU5hbWUobG9hZENvbmRpdGlvbik7XHJcbiAgICAgIHRoaXMubG9hZEdyb3VwUk8gPSB0aGlzLmdldExvYWRHcm91cEJ5TmFtZShcclxuICAgICAgICB0aGlzLmxvYWRDb25kaXRpb25STyxcclxuICAgICAgICBsb2FkR3JvdXBcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmICghdGhpcy5sb2FkQ29uZGl0aW9uUk8gfHwgIXRoaXMubG9hZEdyb3VwUk8pIHtcclxuICAgICAgICAvLyDmsqHmnInmn6Xmib7liLDlr7nlupTnmoTlt6XlhrXmiJbojbfovb3nu4RcclxuICAgICAgICBkYXRhLnRpcC52YWx1ZSA9IDQ7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgY291bnRlciA9IDA7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VsZWN0ZWRPYmplY3RzLmNvdW50KCk7IGkrKykge1xyXG4gICAgICAgIGxldCBzZWxlY3RlZE9iaiA9IHNlbGVjdGVkT2JqZWN0cy5pdGVtc1tpXTtcclxuICAgICAgICBsZXQgam9pbnRMb2FkID0gbnVsbDtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCB0aGlzLmxvYWRHcm91cFJPLmNoaWxkT2JqZWN0cy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgbGV0IGxvYWQgPSB0aGlzLmxvYWRHcm91cFJPLmNoaWxkT2JqZWN0c1tqXTtcclxuICAgICAgICAgIGlmIChsb2FkIGluc3RhbmNlb2YgSm9pbnRMb2FkT2JqZWN0KSB7XHJcbiAgICAgICAgICAgIGlmIChsb2FkLmpvaW50TmFtZSA9PT0gc2VsZWN0ZWRPYmoubmFtZSkge1xyXG4gICAgICAgICAgICAgIGNvdW50ZXIrKztcclxuICAgICAgICAgICAgICBqb2ludExvYWQgPSBsb2FkO1xyXG4gICAgICAgICAgICAgIGxvYWQuYnVzaW5lc3NTdGF0ZSA9IEJ1c2luZXNzU3RhdGUuRWRpdGluZztcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoam9pbnRMb2FkKSB7XHJcbiAgICAgICAgICBsZXQgZm9yZWNlRGF0YSA9IHRoaXMuY29uZmlnLnByb3BlcnRpZXMuaXRlbXNbMV0uZGF0YTtcclxuICAgICAgICAgIGpvaW50TG9hZC5mb3JjZVhEaXJlY3Rpb24gPSBDYWVOdW1iZXIoZm9yZWNlRGF0YS5GeC52YWx1ZSk7XHJcbiAgICAgICAgICBqb2ludExvYWQuZm9yY2VZRGlyZWN0aW9uID0gQ2FlTnVtYmVyKGZvcmVjZURhdGEuRnkudmFsdWUpO1xyXG4gICAgICAgICAgam9pbnRMb2FkLmZvcmNlWkRpcmVjdGlvbiA9IENhZU51bWJlcihmb3JlY2VEYXRhLkZ6LnZhbHVlKTtcclxuXHJcbiAgICAgICAgICBsZXQgbW9tZW50RGF0YSA9IHRoaXMuY29uZmlnLnByb3BlcnRpZXMuaXRlbXNbMl0uZGF0YTtcclxuICAgICAgICAgIGpvaW50TG9hZC5tb21lbnRBYm91dFhBeGlzID0gQ2FlTnVtYmVyKG1vbWVudERhdGEuTXgudmFsdWUpO1xyXG4gICAgICAgICAgam9pbnRMb2FkLm1vbWVudEFib3V0WUF4aXMgPSBDYWVOdW1iZXIobW9tZW50RGF0YS5NeS52YWx1ZSk7XHJcbiAgICAgICAgICBqb2ludExvYWQubW9tZW50QWJvdXRaQXhpcyA9IENhZU51bWJlcihtb21lbnREYXRhLk16LnZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMudmlld2VyLnVwZGF0ZURpc3BsYXkoKTtcclxuICAgICAgZGF0YS50aXAudmFsdWUgPSAxICsgXCIsXCIgKyBjb3VudGVyO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlUGFuZWwoKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMudmlld2VyLnNlbGVjdGlvbkludGVyZmFjZU1hbmFnZXIuc2VsZWN0b3JGaWx0ZXIgPT09IHRoaXMuZXhwZWN0RmlsdGVyXHJcbiAgICApIHtcclxuICAgICAgLy8g5pu05paw6Z2i5p2/55qE6YCJ5Lit54K55YiX6KGoLlxyXG4gICAgICBsZXQgZGF0YSA9IHRoaXMuY29uZmlnLnByb3BlcnRpZXMuaXRlbXNbMF0uZGF0YTtcclxuICAgICAgZGF0YS5zZWxlY3RlZEpvaW50cy5saXN0T3B0aW9ucy5saXN0ID0gW107XHJcbiAgICAgIGxldCBvYmplY3RzID0gdGhpcy5jYWVPYmplY3RTZWxlY3Rvci5zZWxlY3RlZFJlbmRlck9iamVjdHM7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2JqZWN0cy5jb3VudCgpOyBpKyspIHtcclxuICAgICAgICBsZXQgb2JqZWN0ID0gb2JqZWN0cy5pdGVtc1tpXTtcclxuICAgICAgICBpZiAob2JqZWN0IGluc3RhbmNlb2YgSm9pbnRPYmplY3QpIHtcclxuICAgICAgICAgIGRhdGEuc2VsZWN0ZWRKb2ludHMubGlzdE9wdGlvbnMubGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgdmFsdWU6IG9iamVjdC5pZCxcclxuICAgICAgICAgICAgbGFiZWw6IG9iamVjdC5uYW1lLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgc2VsZWN0ZWRSZW5kZXJPYmplY3RzID0gdGhpcy5jYWVPYmplY3RTZWxlY3Rvci5zZWxlY3RlZFJlbmRlck9iamVjdHM7XHJcbiAgICAgIGlmIChzZWxlY3RlZFJlbmRlck9iamVjdHMuY291bnQoKSA+IDApIHtcclxuICAgICAgICBsZXQgam9pbnROYW1lID1cclxuICAgICAgICAgIHNlbGVjdGVkUmVuZGVyT2JqZWN0cy5pdGVtc1tzZWxlY3RlZFJlbmRlck9iamVjdHMuY291bnQoKSAtIDFdLm5hbWU7XHJcbiAgICAgICAgdGhpcy5jb25maWdDaGFuZ2VEYXRhKGpvaW50TmFtZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gdGhpcy5jb25maWcuY2xlYXJWYWx1ZSgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDlnKhjb25maWfkuK3loavlhYXlvZPliY3pgInkuK3ngrnnmoTngrnojbfovb3nmoTmlbDmja4uXHJcbiAgICovXHJcbiAgcHVibGljIGNvbmZpZ0NoYW5nZURhdGEoam9pbnROYW1lOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuY2xlYXJEYXRhKCk7XHJcbiAgICBsZXQgZGF0YSA9IHRoaXMuY29uZmlnLnByb3BlcnRpZXMuaXRlbXNbMF0uZGF0YTtcclxuXHJcbiAgICBsZXQgbG9hZENvbmRpdGlvbk5hbWUgPSBkYXRhLmxvYWRDb25kaXRpb24udmFsdWU7XHJcbiAgICBsZXQgbG9hZEdyb3VwTmFtZSA9IGRhdGEubG9hZEdyb3VwLnZhbHVlO1xyXG4gICAgaWYgKGxvYWRDb25kaXRpb25OYW1lICYmIGxvYWRHcm91cE5hbWUpIHtcclxuICAgICAgbGV0IGxvYWRDb25kaXRpb25STyA9XHJcbiAgICAgICAgdGhpcy5nZXRMb2FkQ29uZGl0aW9uT2JqZWN0QnlOYW1lKGxvYWRDb25kaXRpb25OYW1lKTtcclxuICAgICAgaWYgKGxvYWRDb25kaXRpb25STykge1xyXG4gICAgICAgIGxldCBsb2FkR3JvdXBSTyA9IHRoaXMuZ2V0TG9hZEdyb3VwQnlOYW1lKFxyXG4gICAgICAgICAgbG9hZENvbmRpdGlvblJPLFxyXG4gICAgICAgICAgbG9hZEdyb3VwTmFtZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGxvYWRHcm91cFJPKSB7XHJcbiAgICAgICAgICBsZXQgam9pbnRMb2FkOiBKb2ludExvYWRPYmplY3QgPSBudWxsO1xyXG4gICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBsb2FkR3JvdXBSTy5jaGlsZE9iamVjdHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgbGV0IGNoaWxkID0gbG9hZEdyb3VwUk8uY2hpbGRPYmplY3RzW2pdO1xyXG4gICAgICAgICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBKb2ludExvYWRPYmplY3QpIHtcclxuICAgICAgICAgICAgICBpZiAoY2hpbGQuam9pbnROYW1lID09PSBqb2ludE5hbWUpIHtcclxuICAgICAgICAgICAgICAgIGpvaW50TG9hZCA9IGNoaWxkO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoam9pbnRMb2FkKSB7XHJcbiAgICAgICAgICAgIC8vIOaYvuekuueCueiNt+i9veaVsOaNri5cclxuICAgICAgICAgICAgdGhpcy5zaG93UmVuZGVyT2JqZWN0UHJvcGVydGllcyhqb2ludExvYWQpO1xyXG4gICAgICAgICAgICBkYXRhLnRpcC52YWx1ZSA9IDY7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIOayoeacieafpeaJvuWIsOeCueiNt+i9vS5cclxuICAgICAgICAgICAgZGF0YS50aXAudmFsdWUgPSA1O1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyDml6Dms5Xmn6Xmib7liLDlt6XlhrXlkI3lr7nosaHmiJbojbfovb3nu4Tlr7nosaEuXHJcbiAgICAgIGRhdGEudGlwLnZhbHVlID0gNDtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8g5rKh5pyJ5aGr5YaZ5bel5Ya15ZCN5ZKM6I236L2957uE5ZCNXHJcbiAgICAgIGRhdGEudGlwLnZhbHVlID0gMztcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzaG93UmVuZGVyT2JqZWN0UHJvcGVydGllcyhybzogSm9pbnRMb2FkT2JqZWN0KSB7XHJcbiAgICBsZXQgZm9yY2VEYXRhID0gdGhpcy5jb25maWcucHJvcGVydGllcy5pdGVtc1sxXS5kYXRhO1xyXG4gICAgbGV0IG1vbWVudHNEYXRhID0gdGhpcy5jb25maWcucHJvcGVydGllcy5pdGVtc1syXS5kYXRhO1xyXG5cclxuICAgIGZvcmNlRGF0YS5GeC52YWx1ZSA9IE51bWJlcihyby5mb3JjZVhEaXJlY3Rpb24pLnRvU3RyaW5nKCk7XHJcbiAgICBmb3JjZURhdGEuRnkudmFsdWUgPSBOdW1iZXIocm8uZm9yY2VZRGlyZWN0aW9uKS50b1N0cmluZygpO1xyXG4gICAgZm9yY2VEYXRhLkZ6LnZhbHVlID0gTnVtYmVyKHJvLmZvcmNlWkRpcmVjdGlvbikudG9TdHJpbmcoKTtcclxuXHJcbiAgICBtb21lbnRzRGF0YS5NeC52YWx1ZSA9IE51bWJlcihyby5tb21lbnRBYm91dFhBeGlzKS50b1N0cmluZygpO1xyXG4gICAgbW9tZW50c0RhdGEuTXkudmFsdWUgPSBOdW1iZXIocm8ubW9tZW50QWJvdXRZQXhpcykudG9TdHJpbmcoKTtcclxuICAgIG1vbWVudHNEYXRhLk16LnZhbHVlID0gTnVtYmVyKHJvLm1vbWVudEFib3V0WkF4aXMpLnRvU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsZWFyRGF0YSgpIHtcclxuICAgIGxldCBmb3JjZURhdGEgPSB0aGlzLmNvbmZpZy5wcm9wZXJ0aWVzLml0ZW1zWzFdLmRhdGE7XHJcbiAgICBsZXQgbW9tZW50c0RhdGEgPSB0aGlzLmNvbmZpZy5wcm9wZXJ0aWVzLml0ZW1zWzJdLmRhdGE7XHJcblxyXG4gICAgZm9yY2VEYXRhLkZ4LnZhbHVlID0gXCJcIjtcclxuICAgIGZvcmNlRGF0YS5GeS52YWx1ZSA9IFwiXCI7XHJcbiAgICBmb3JjZURhdGEuRnoudmFsdWUgPSBcIlwiO1xyXG5cclxuICAgIG1vbWVudHNEYXRhLk14LnZhbHVlID0gXCJcIjtcclxuICAgIG1vbWVudHNEYXRhLk15LnZhbHVlID0gXCJcIjtcclxuICAgIG1vbWVudHNEYXRhLk16LnZhbHVlID0gXCJcIjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0TG9hZENvbmRpdGlvbk9iamVjdEJ5TmFtZShsb2FkQ29uZGl0aW9uTmFtZTogc3RyaW5nKSB7XHJcbiAgICBsZXQgcHJldHJlYXRtZW50Uk8gPSB0aGlzLnZpZXdlci5wcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RCeU5hbWUoXHJcbiAgICAgIFwi5ZCO5aSE55CG6K6h566X57uT5p6cXCJcclxuICAgICkgYXMgRGVzaWduQmFzZU9iamVjdDtcclxuXHJcbiAgICBsZXQgY29uZGl0aW9uUGFyZW50ID0gdGhpcy5wcm9jZXNzLmZpbmRDYWVPYmplY3RCeU5hbWVJbkNoaWxkT2JqZWN0KFxyXG4gICAgICBwcmV0cmVhdG1lbnRSTyxcclxuICAgICAgXCLojbfovb3lt6XlhrVcIlxyXG4gICAgKSBhcyBEZXNpZ25CYXNlT2JqZWN0O1xyXG5cclxuICAgIGlmICghY29uZGl0aW9uUGFyZW50KSB7XHJcbiAgICAgIGNvbmRpdGlvblBhcmVudCA9IG5ldyBEZXNpZ25CYXNlT2JqZWN0KCk7XHJcbiAgICAgIGNvbmRpdGlvblBhcmVudC5idXNpbmVzc1N0YXRlID0gQnVzaW5lc3NTdGF0ZS5DcmVhdGluZztcclxuICAgICAgY29uZGl0aW9uUGFyZW50Lm5hbWUgPSBcIuiNt+i9veW3peWGtVwiO1xyXG4gICAgICB0aGlzLnByb2Nlc3MuYWRkUmVuZGVyT2JqZWN0KHByZXRyZWF0bWVudFJPLCBjb25kaXRpb25QYXJlbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBsb2FkQ29uZGl0aW9uUk8gPSB0aGlzLnByb2Nlc3MuZmluZENhZU9iamVjdEJ5TmFtZUluQ2hpbGRPYmplY3QoXHJcbiAgICAgIGNvbmRpdGlvblBhcmVudCxcclxuICAgICAgbG9hZENvbmRpdGlvbk5hbWVcclxuICAgICkgYXMgTG9hZENvbmRpdGlvbk9iamVjdDtcclxuXHJcbiAgICByZXR1cm4gbG9hZENvbmRpdGlvblJPO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBnZXRMb2FkR3JvdXBCeU5hbWUoXHJcbiAgICBsb2FkQ29uZGl0aW9uOiBMb2FkQ29uZGl0aW9uT2JqZWN0LFxyXG4gICAgbG9hZEdyb3VwTmFtZTogc3RyaW5nXHJcbiAgKSB7XHJcbiAgICBsZXQgbG9hZEdyb3VwUk8gPSB0aGlzLnByb2Nlc3MuZmluZENhZU9iamVjdEJ5TmFtZUluQ2hpbGRPYmplY3QoXHJcbiAgICAgIGxvYWRDb25kaXRpb24sXHJcbiAgICAgIGxvYWRHcm91cE5hbWVcclxuICAgICkgYXMgTG9hZEdyb3VwT2JqZWN0O1xyXG5cclxuICAgIHJldHVybiBsb2FkR3JvdXBSTztcclxuICB9XHJcblxyXG4gIGRlbGV0ZUxvYWRHcm91cChsb2FkQ29uZGl0aW9uTmFtZTogc3RyaW5nLCBsb2FkR3JvdXBOYW1lOiBzdHJpbmcpIHtcclxuICAgIGxldCBkYXRhID0gdGhpcy5jb25maWcucHJvcGVydGllcy5pdGVtc1swXS5kYXRhO1xyXG5cclxuICAgIC8vIOa3u+WKoOaIluS/ruaUueW3peWGtS5cclxuICAgIGxldCBsb2FkQ29uZGl0aW9uUk8gPSB0aGlzLmdldExvYWRDb25kaXRpb25PYmplY3RCeU5hbWUobG9hZENvbmRpdGlvbk5hbWUpO1xyXG4gICAgaWYgKCFsb2FkQ29uZGl0aW9uUk8pIHtcclxuICAgICAgLy8g5rKh5pyJ5p+l5om+5Yiw5a+55bqU55qE5bel5Ya15oiW6I236L2957uEXHJcbiAgICAgIGRhdGEudGlwLnZhbHVlID0gMjtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBsb2FkR3JvdXBSTyA9IHRoaXMuZ2V0TG9hZEdyb3VwQnlOYW1lKGxvYWRDb25kaXRpb25STywgbG9hZEdyb3VwTmFtZSk7XHJcbiAgICBpZiAoIWxvYWRHcm91cFJPKSB7XHJcbiAgICAgIC8vIOayoeacieafpeaJvuWIsOWvueW6lOeahOW3peWGteaIluiNt+i9vee7hFxyXG4gICAgICBkYXRhLnRpcC52YWx1ZSA9IDI7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZGVsZXRpbmdMaXN0ID0gbmV3IEFycmF5PEpvaW50TG9hZE9iamVjdD4oKTtcclxuICAgIGxldCByZXN0T2JqZWN0ID0gMDtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbG9hZEdyb3VwUk8uY2hpbGRPYmplY3RzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBjaGlsZCA9IGxvYWRHcm91cFJPLmNoaWxkT2JqZWN0c1tpXSBhcyBEZXNpZ25CYXNlT2JqZWN0O1xyXG4gICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBKb2ludExvYWRPYmplY3QpIHtcclxuICAgICAgICBkZWxldGluZ0xpc3QucHVzaChjaGlsZCk7XHJcbiAgICAgIH0gZWxzZSBpZihjaGlsZC5jaGVja0J1c2luZXNzU3RhdGVJc0FjdGl2ZSgpKSB7XHJcbiAgICAgICAgcmVzdE9iamVjdCsrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkZWxldGluZ0xpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgZGVsZXRpbmdMaXN0W2ldLnRlbXBEZWxldGUodGhpcy52aWV3ZXIpO1xyXG4gICAgICAvLyB0aGlzLnByb2Nlc3MucmVtb3ZlUmVuZGVyT2JqZWN0KGRlbGV0aW5nTGlzdFtpXSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYocmVzdE9iamVjdCkge1xyXG4gICAgICB0aGlzLmxvYWRHcm91cFJPLnRlbXBEZWxldGUodGhpcy52aWV3ZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudmlld2VyLnVwZGF0ZURpc3BsYXkoKTtcclxuICAgIGRhdGEudGlwLnZhbHVlID0gMTtcclxuICAgIC8vIHRoaXMubG9hZEdyb3VwUk8udGVtcERlbGV0ZSh0aGlzLnZpZXdlcik7XHJcbiAgfVxyXG5cclxuICBnZXRMb2FkQ29uZGl0b25zKCkge1xyXG4gICAgbGV0IGxvYWRDb25kaXRpb25zID0gdGhpcy52aWV3ZXIucHJvY2Vzcy5maW5kUmVuZGVyT2JqZWN0c0J5VHlwZShcclxuICAgICAgXCJMb2FkQ29uZGl0aW9uT2JqZWN0XCJcclxuICAgICk7XHJcbiAgICByZXR1cm4gbG9hZENvbmRpdGlvbnM7XHJcbiAgfVxyXG5cclxuICBnZXRMb2FkR3JvdXBzKGxvYWRDb25kaXRpb25OYW1lOiBzdHJpbmcpIHtcclxuICAgIGxldCBjb25kaXRpb25zID0gdGhpcy5nZXRMb2FkQ29uZGl0b25zKCk7XHJcbiAgICBsZXQgbG9hZEdyb3VwcyA9IG5ldyBBcnJheTxMb2FkR3JvdXBPYmplY3Q+KCk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbmRpdGlvbnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKGNvbmRpdGlvbnNbaV0ubmFtZSA9PT0gbG9hZENvbmRpdGlvbk5hbWUpIHtcclxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvbmRpdGlvbnNbaV0uY2hpbGRPYmplY3RzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICBsZXQgbG9hZEdyb3VwID0gY29uZGl0aW9uc1tpXS5jaGlsZE9iamVjdHNbal0gYXMgTG9hZEdyb3VwT2JqZWN0O1xyXG4gICAgICAgICAgaWYobG9hZEdyb3VwLmNoZWNrQnVzaW5lc3NTdGF0ZUlzQWN0aXZlKCkpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBsb2FkR3JvdXAuY2hpbGRPYmplY3RzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgICAgICAgbGV0IGxvYWQgPSBsb2FkR3JvdXAuY2hpbGRPYmplY3RzW2tdO1xyXG4gICAgICAgICAgICAgIGlmIChsb2FkIGluc3RhbmNlb2YgSm9pbnRMb2FkT2JqZWN0ICYmIGxvYWQuY2hlY2tCdXNpbmVzc1N0YXRlSXNBY3RpdmUoKSkge1xyXG4gICAgICAgICAgICAgICAgbG9hZEdyb3Vwcy5wdXNoKGxvYWRHcm91cCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbG9hZEdyb3VwcztcclxuICB9XHJcblxyXG4gIGdldEN1cnJlbnRHcm91cEpvaW50TG9hZHMobG9hZENvbmRpdGlvbk5hbWU6IHN0cmluZywgbG9hZEdyb3VwTmFtZTogc3RyaW5nKSB7XHJcbiAgICBsZXQgZ3JvdXBzID0gdGhpcy5nZXRMb2FkR3JvdXBzKGxvYWRDb25kaXRpb25OYW1lKTtcclxuICAgIGxldCBqb2ludExvYWRzID0gbmV3IEFycmF5PEpvaW50TG9hZE9iamVjdD4oKTtcclxuXHJcbiAgICBmb3IobGV0IGkgPSAwOyBpIDwgZ3JvdXBzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBsb2FkR3JvdXAgPSBncm91cHNbaV07XHJcbiAgICAgIGlmKGxvYWRHcm91cC5uYW1lID09PSBsb2FkR3JvdXBOYW1lKSB7XHJcbiAgICAgICAgZm9yKGxldCBqID0gMDsgaiA8IGxvYWRHcm91cC5jaGlsZE9iamVjdHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgIGxldCBsb2FkID0gbG9hZEdyb3VwLmNoaWxkT2JqZWN0c1tqXTtcclxuICAgICAgICAgIGlmKGxvYWQgaW5zdGFuY2VvZiBKb2ludExvYWRPYmplY3QgJiYgbG9hZC5jaGVja0J1c2luZXNzU3RhdGVJc0FjdGl2ZSgpKSB7XHJcbiAgICAgICAgICAgIGpvaW50TG9hZHMucHVzaChsb2FkKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gam9pbnRMb2FkcztcclxuICB9XHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBZ0JBO0FBQUE7QUFXQTtBQUFBO0FBVkE7QUFNQTtBQUNBO0FBQ0E7O0FBSUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBbUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBRUE7QUFDQTtBQUdBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7O0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7O0FBRUE7QUFFQTtBQUNBOztBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFJQTtBQUNBOzs7QUFLQTtBQUNBO0FBR0E7QUFDQTtBQUtBO0FBRUE7QUFDQTs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7OztBQUlBO0FBQ0E7O0FBRUE7QUFFQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUlBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7O0FBSUE7QUFLQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBSUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7Ozs7QUFNQTtBQUNBO0FBQ0E7QUFFQTtBQUNBOztBQUVBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFJQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7QUFLQTtBQUNBO0FBRUE7QUFJQTtBQUtBO0FBQ0E7QUFFQTtBQUNBO0FBR0E7QUFDQTtBQUVBO0FBQ0E7O0FBR0E7QUFDQTtBQUVBO0FBQ0E7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBSUE7QUFDQTs7QUFJQTtBQUNBOztBQUdBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7QUFRQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOzs7QUFJQTtBQUNBO0FBQ0E7QUFBQTs7O0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./packages/caeDesign/src/viewerWrapper/commands/aftertreatment/editJointLoad/commandEditJointLoad.ts\n");
|
|
5756
5756
|
|
|
5757
5757
|
/***/ }),
|
|
5758
5758
|
|
|
@@ -5796,7 +5796,7 @@ eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPAC
|
|
|
5796
5796
|
/*! no static exports found */
|
|
5797
5797
|
/***/ (function(module, exports, __webpack_require__) {
|
|
5798
5798
|
|
|
5799
|
-
eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__, exports, __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\"), __webpack_require__(/*! ../../../../gsDevFx/operators/cameraMouse */ \"./packages/caeDesign/src/gsDevFx/operators/cameraMouse.ts\"), __webpack_require__(/*! ../../../../gsDevFx/operators/cAEObjectPreSelector */ \"./packages/caeDesign/src/gsDevFx/operators/cAEObjectPreSelector.ts\"), __webpack_require__(/*! ../../../../gsDevFx/operators/caeObjectSelector */ \"./packages/caeDesign/src/gsDevFx/operators/caeObjectSelector.ts\"), __webpack_require__(/*! ../../../../gsDevFx/commands/commandSelect */ \"./packages/caeDesign/src/gsDevFx/commands/commandSelect.ts\"), __webpack_require__(/*! ../../commandComponent */ \"./packages/caeDesign/src/viewerWrapper/commands/commandComponent.ts\"), __webpack_require__(/*! ./postResultCloudConfig */ \"./packages/caeDesign/src/viewerWrapper/commands/aftertreatment/postResultCloud/postResultCloudConfig.ts\"), __webpack_require__(/*! gs-ceec-design */ \"./packages/ceecDesign/src/index.ts\"), __webpack_require__(/*! ../../../../store */ \"./packages/caeDesign/src/store/index.ts\"), __webpack_require__(/*! gs-ceec-design */ \"./packages/ceecDesign/src/index.ts\"), __webpack_require__(/*! ../../../../gsDevFx/objects/pretreatmentObjects/cutlinePostMemberResultObject */ \"./packages/caeDesign/src/gsDevFx/objects/pretreatmentObjects/cutlinePostMemberResultObject.ts\"), __webpack_require__(/*! gs-bim-air */ \"./node_modules/gs-bim-air/lib/BimAir.umd.min.js\"), __webpack_require__(/*! gs-ceec-design */ \"./packages/ceecDesign/src/index.ts\"), __webpack_require__(/*! ../../../../gsDevFx/managers/interfaceManagers/commonInterfaceManager */ \"./packages/caeDesign/src/gsDevFx/managers/interfaceManagers/commonInterfaceManager.ts\"), __webpack_require__(/*! ../../commandUtilities/commandUtilities */ \"./packages/caeDesign/src/viewerWrapper/commands/commandUtilities/commandUtilities.ts\"), __webpack_require__(/*! element-ui */ \"./node_modules/element-ui/lib/element-ui.common.js\"), __webpack_require__(/*! ../../../../viewerWrapper/module/legendManage */ \"./packages/caeDesign/src/viewerWrapper/module/legendManage.ts\")], __WEBPACK_AMD_DEFINE_RESULT__ = (function (require, exports, tslib_1, cameraMouse_1, cAEObjectPreSelector_1, caeObjectSelector_1, commandSelect_1, commandComponent_1, postResultCloudConfig_1, gs_ceec_design_1, store_1, gs_ceec_design_2, cutlinePostMemberResultObject_1, gs_bim_air_1, gs_ceec_design_3, commonInterfaceManager_1, commandUtilities_1, element_ui_1, legendManage_1) {\n \"use strict\";\n\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n postResultCloudConfig_1 = tslib_1.__importStar(postResultCloudConfig_1);\n store_1 = tslib_1.__importDefault(store_1);\n var CommandPostResultCloud = function (_super) {\n tslib_1.__extends(CommandPostResultCloud, _super);\n function CommandPostResultCloud() {\n var _this = _super.call(this) || this;\n _this.typeName = \"CommandPostResultCloud\";\n _this.postResult = null;\n _this.postResultElementUC = null;\n _this.cutlineObject = null;\n _this.postResultCloudObject = null;\n _this.members = new Array();\n _this.cloudMembers = new Array();\n _this._group = null;\n _this.labelMembers = new Array();\n _this.datas = new Array();\n _this.labelDatas = new Array();\n _this.labelDistances = new Array();\n _this.resultLabel = new Array();\n _this.resultLabelDic = {};\n _this.drawSvgEvent = null;\n _this.resultParameterText = \"最大合成应力比\";\n _this.labelColor = \"#ffffff\";\n _this.elementKey = \"cutline\";\n return _this;\n }\n CommandPostResultCloud.prototype.begin = function () {\n var aftertreatmentRO = this.process.caeRenderObjectTreeManager.postResultNode;\n var postResultCloudRO = this.viewer.process.findCaeObjectByNameInChildObject(aftertreatmentRO, \"构件结算结果在位云图\");\n if (!postResultCloudRO) {\n postResultCloudRO = new gs_ceec_design_1.DesignBaseObject();\n postResultCloudRO.businessState = gs_ceec_design_2.BusinessState.Creating;\n postResultCloudRO.name = \"构件结算结果在位云图\";\n this.process.addRenderObject(aftertreatmentRO, postResultCloudRO);\n }\n var postInterfaceManager = this.viewer.postInterfaceManager;\n if (!postInterfaceManager.getFinish_postResult) {\n postInterfaceManager.tip_postResult = true;\n if (!postInterfaceManager.message_postResult) {\n postInterfaceManager.message_postResult = element_ui_1.Message.info({\n message: \"杆件结果仍在请求DB数据,请等待请求完成.\",\n duration: 0,\n showClose: true\n });\n }\n }\n this.cutlineObject = this.viewer.process.findCaeObjectByNameInChildObject(postResultCloudRO, \"构件计算结果图例数据\");\n if (!this.cutlineObject) {\n this.cutlineObject = new cutlinePostMemberResultObject_1.CutlinePostMemberResultObject();\n this.cutlineObject.businessState = gs_ceec_design_2.BusinessState.Creating;\n this.cutlineObject.name = \"构件计算结果图例数据\";\n this.cutlineObject.title = \"最大合成应力比\";\n this.cutlineObject.ucRanges = [0, 0.2, 0.35, 0.9, 1.0];\n this.cutlineObject.ucRangesColors = [0.82, 0.82, 0.82, 1, 0.5, 0.5, 0.5, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1];\n this.cutlineObject.stressLevelsActual = [-20, -15, -10, -5, 0, 5, 10, 20];\n this.cutlineObject.stressLevelsColors = [0.82, 0.82, 0.82, 1, 0.5, 0.5, 0.5, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1];\n this.process.addRenderObject(postResultCloudRO, this.cutlineObject);\n } else {}\n this.changeOperators();\n this.config = new postResultCloudConfig_1.default();\n this.config.show();\n var self = this;\n this.drawSvgEvent = function () {\n var minMagnitude = Number(self.config.properties.items[0].data.minMagnitude.value);\n for (var i = 0; i < self.labelMembers.length; i++) {\n self.drawSvg(self.labelMembers[i], self.datas[i], self.labelDatas[i], self.labelDistances[i], minMagnitude);\n }\n };\n this.viewer.sceneCameraChanged.add(this.drawSvgEvent);\n };\n CommandPostResultCloud.prototype.restore = function () {\n this.changeOperators();\n this.config.show();\n };\n CommandPostResultCloud.prototype.changeOperators = function () {\n var _this = this;\n this.viewer.selectionManager.clearAllSelectionAndHighlight();\n this.viewer.updateDisplay();\n this.viewer.operatorManager.clear();\n this.viewer.operatorManager.add(new cameraMouse_1.CameraMouse());\n this.preSelector = new cAEObjectPreSelector_1.CAEObjectPreSelector();\n this.viewer.operatorManager.add(this.preSelector);\n this.caeObjectSelector = new caeObjectSelector_1.CAEObjectSelector();\n this.viewer.operatorManager.add(this.caeObjectSelector);\n this.caeObjectSelector.lButtonUp.add(function () {\n setTimeout(function () {\n _this.updatePanel();\n }, 0);\n });\n };\n CommandPostResultCloud.prototype.end = function () {\n var postInterfaceManager = this.viewer.postInterfaceManager;\n if (postInterfaceManager.message_postResult) {\n postInterfaceManager.message_postResult.close();\n postInterfaceManager.message_postResult = null;\n }\n this.resetScene();\n this.viewer.sceneCameraChanged.remove(this.drawSvgEvent);\n this.config.hide();\n _super.prototype.end.call(this);\n this.viewer.selectionManager.clearAllSelectionAndHighlight();\n this.viewer.updateDisplay();\n store_1.default.commit(\"structureTree/updateTreeData\", [this.viewer.structureTreeManager.rootNode]);\n var commandSelect = new commandSelect_1.CommandSelect();\n this.process.commandManager.execute(commandSelect);\n };\n CommandPostResultCloud.prototype.clearSvg = function () {\n if (this.resultLabel) {\n this.resultLabel.forEach(function (item) {\n item.clear();\n item = null;\n });\n this.resultLabel = new Array();\n }\n this.labelMembers = new Array();\n this.datas = new Array();\n this.labelDatas = new Array();\n this.labelDistances = new Array();\n this.resultLabelDic = {};\n };\n CommandPostResultCloud.prototype.initDrawSvg = function (member, datas, labelDatas, distances, minMagnitude) {\n var data = this.config.properties.items[0].data;\n var onlyShowMax = data.showMaxPerGroup.value;\n var hasAddFlag = false;\n var maxValue = -9999;\n for (var i = 0; i < datas.length; i++) {\n if (datas[i] > maxValue) {\n maxValue = datas[i];\n }\n }\n for (var j = 0; j < distances.length; j++) {\n var data_1 = datas[j];\n var labelData = labelDatas[j];\n if (minMagnitude !== null && minMagnitude !== undefined && data_1 < minMagnitude) {\n continue;\n }\n if (data_1 < maxValue) {\n if (onlyShowMax) {\n continue;\n }\n }\n if (!hasAddFlag) {\n this.labelMembers.push(member);\n }\n if (!hasAddFlag) {\n this.datas.push(datas);\n }\n if (!hasAddFlag) {\n this.labelDatas.push(labelDatas);\n }\n if (!hasAddFlag) {\n this.labelDistances.push(tslib_1.__spreadArray([], tslib_1.__read(distances), false));\n }\n var origin_1 = new Float32Array(member.getStartPosition());\n var vector = member.getVector();\n var curretPos = gs_bim_air_1.Longan.Point.add(origin_1, gs_bim_air_1.Longan.Vector.multiply(vector, distances[j]));\n var point = this.viewer.worldPointToPixelPoint([curretPos])[0];\n var id = member.name + distances[j].toFixed(6);\n if (this.resultLabelDic[id]) {\n this.resultLabelDic[id].move(point[0] + 1, point[1] + 1);\n this.resultLabelDic[id].attr(\"font-size\", gs_ceec_design_1.DesignBaseObject.fontSize);\n } else {\n var draw = gs_ceec_design_3.SvgDraw.getInstance(this.viewer.container.id).draw;\n this._group = draw.group();\n var resultText = draw.text(Number.isNaN(Number(labelData)) ? labelData : Number(labelData).toFixed(3)).font({\n fill: this.labelColor\n }).attr(\"font-size\", gs_ceec_design_1.DesignBaseObject.fontSize).move(point[0] + 1, point[1] + 1);\n this.resultLabel.push(resultText);\n this.resultLabelDic[id] = resultText;\n this._group.add(resultText);\n }\n hasAddFlag = true;\n }\n };\n CommandPostResultCloud.prototype.drawSvg = function (member, datas, labelDatas, distances, minMagnitude) {\n var data = this.config.properties.items[0].data;\n var onlyShowMax = data.showMaxPerGroup.value;\n var maxValue = -9999;\n for (var i = 0; i < datas.length; i++) {\n if (datas[i] > maxValue) {\n maxValue = datas[i];\n }\n }\n for (var j = 0; j < distances.length; j++) {\n var data_2 = datas[j];\n var labelData = labelDatas[j];\n if (minMagnitude !== null && minMagnitude !== undefined && data_2 < minMagnitude) {\n continue;\n }\n if (data_2 < maxValue) {\n if (onlyShowMax) {\n continue;\n }\n }\n var origin_2 = new Float32Array(member.getStartPosition());\n var vector = member.getVector();\n var curretPos = gs_bim_air_1.Longan.Point.add(origin_2, gs_bim_air_1.Longan.Vector.multiply(vector, distances[j]));\n var point = this.viewer.worldPointToPixelPoint([curretPos])[0];\n var id = member.name + distances[j].toFixed(6);\n if (this.resultLabelDic[id]) {\n this.resultLabelDic[id].move(point[0] + 1, point[1] + 1);\n this.resultLabelDic[id].attr(\"font-size\", gs_ceec_design_1.DesignBaseObject.fontSize);\n } else {\n var draw = gs_ceec_design_3.SvgDraw.getInstance(this.viewer.container.id).draw;\n this._group = draw.group();\n var resultText = draw.text(Number.isNaN(Number(labelData)) ? labelData : Number(labelData).toFixed(3)).font({\n fill: this.labelColor\n }).attr(\"font-size\", gs_ceec_design_1.DesignBaseObject.fontSize).move(point[0] + 1, point[1] + 1);\n this.resultLabel.push(resultText);\n this.resultLabelDic[id] = resultText;\n this._group.add(resultText);\n }\n }\n };\n CommandPostResultCloud.prototype.commandOk = function () {\n var e_1, _a, e_2, _b, e_3, _c;\n var postInterfaceManager = this.viewer.postInterfaceManager;\n if (!postInterfaceManager.getFinish_postResult) {\n postInterfaceManager.tip_postResult = true;\n element_ui_1.Message.info({\n message: \"杆件结果仍在请求DB数据,请等待请求完成.\"\n });\n return;\n }\n if (postInterfaceManager.postResult) {\n this.postResult = postInterfaceManager.postResult;\n var counter = 0;\n try {\n for (var _d = tslib_1.__values(Object.keys(this.postResult)), _e = _d.next(); !_e.done; _e = _d.next()) {\n var i = _e.value;\n counter++;\n }\n } catch (e_1_1) {\n e_1 = {\n error: e_1_1\n };\n } finally {\n try {\n if (_e && !_e.done && (_a = _d.return)) _a.call(_d);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n if (counter === 0) {\n element_ui_1.Message.info(\"查询R_POSTMEMBERRESULTS表返回数据为空,请检查DB文件\");\n this.viewer.updateDisplay();\n return;\n }\n } else {\n element_ui_1.Message.info(\"R_POSTMEMBERRESULTS表不存在,请检查DB文件\");\n this.viewer.updateDisplay();\n return;\n }\n this.resultParameterText = \"无\";\n this.viewer.commonInterfaceManager.colorSwitch(commonInterfaceManager_1.SwitchColorDivide.Cancel);\n postInterfaceManager.resetOhterPostResult();\n var data = this.config.properties.items[0].data;\n var aftertreatmentRO = this.process.caeRenderObjectTreeManager.postResultNode;\n var postResultCloudRO = this.viewer.process.findCaeObjectByNameInChildObject(aftertreatmentRO, \"构件结算结果在位云图\");\n var loadConditionName = null;\n try {\n for (var _f = tslib_1.__values(Object.keys(this.postResult)), _g = _f.next(); !_g.done; _g = _f.next()) {\n var i = _g.value;\n if (loadConditionName === null) {\n loadConditionName = this.postResult[i][0].LoadConditionName;\n }\n }\n } catch (e_2_1) {\n e_2 = {\n error: e_2_1\n };\n } finally {\n try {\n if (_g && !_g.done && (_b = _f.return)) _b.call(_f);\n } finally {\n if (e_2) throw e_2.error;\n }\n }\n var memberPostResult = this.postResult[loadConditionName];\n var colorCode = data.colorCode.value;\n var blendRenderedColor = data.blendRenderedColor.value;\n var minMagnitude = Number(data.minMagnitude.value);\n this.postResultCloudObject = new gs_ceec_design_1.DesignBaseObject();\n this.postResultCloudObject.name = loadConditionName + \"最大合成应力比\";\n this.process.addRenderObject(postResultCloudRO, this.postResultCloudObject);\n var members = this.process.caeRenderObjectTreeManager.memberNode.childObjects;\n if (data.resultParameter.value === -1 || !(0, commandUtilities_1.checkNotNullOrUndefinded)(data.resultParameter.value)) {} else {\n for (var i = 0; i < members.length; i++) {\n var member = members[i];\n switch (data.resultParameter.value) {\n case postResultCloudConfig_1.ResultParameterType.TotalShearUC:\n case postResultCloudConfig_1.ResultParameterType.CriticalLC:\n case postResultCloudConfig_1.ResultParameterType.CriticalLC_MaxUC:\n if (postInterfaceManager.post_jointCanSummaryUC) {\n this.postResultElementUC = postInterfaceManager.post_jointCanSummaryUC;\n var counter = 0;\n try {\n for (var _h = (e_3 = void 0, tslib_1.__values(Object.keys(this.postResultElementUC))), _j = _h.next(); !_j.done; _j = _h.next()) {\n var i_1 = _j.value;\n counter++;\n }\n } catch (e_3_1) {\n e_3 = {\n error: e_3_1\n };\n } finally {\n try {\n if (_j && !_j.done && (_c = _h.return)) _c.call(_h);\n } finally {\n if (e_3) throw e_3.error;\n }\n }\n if (counter === 0) {\n element_ui_1.Message.info(\"查询ElementUC表返回数据为空,请检查DB文件\");\n this.viewer.updateDisplay();\n return;\n }\n } else {\n element_ui_1.Message.info(\"ElementUC表不存在,请检查DB文件\");\n this.viewer.updateDisplay();\n return;\n }\n for (var j = 0; j < this.postResultElementUC.length; j++) {\n if (member.name === this.postResultElementUC[j].MemberName) {\n loadConditionName = this.postResultElementUC[j].LoadCondition;\n memberPostResult = this.postResult[loadConditionName];\n }\n }\n break;\n }\n if (memberPostResult) {\n var distances = new Array();\n var datas = new Array();\n var labelDatas = new Array();\n var isShowEnglishText = this.viewer.commonInterfaceManager.showEnglishText;\n var resultMembers = new Array();\n for (var j = 0; j < memberPostResult.length; j++) {\n var memberName = memberPostResult[j].MemberName;\n if (memberName === member.name) {\n distances.push(Number(memberPostResult[j].Distance));\n switch (Number(data.resultParameter.value)) {\n case postResultCloudConfig_1.ResultParameterType.MaxUC:\n if (isShowEnglishText) {\n this.resultParameterText = \"MaxUC\";\n } else {\n this.resultParameterText = \"最大合成应力比\";\n }\n this.cutlineObject.currentCutlineType = cutlinePostMemberResultObject_1.CutlineType.UCRanges;\n datas.push(Number(memberPostResult[j].MaxUC));\n labelDatas.push(memberPostResult[j].MaxUC);\n break;\n case postResultCloudConfig_1.ResultParameterType.AxialUC:\n if (isShowEnglishText) {\n this.resultParameterText = \"AxialUC\";\n } else {\n this.resultParameterText = \"轴向应力比\";\n }\n this.cutlineObject.currentCutlineType = cutlinePostMemberResultObject_1.CutlineType.UCRanges;\n datas.push(Number(memberPostResult[j].AxialUC));\n labelDatas.push(memberPostResult[j].AxialUC);\n break;\n case postResultCloudConfig_1.ResultParameterType.YYBendingUC:\n if (isShowEnglishText) {\n this.resultParameterText = \"YYBendingUC\";\n } else {\n this.resultParameterText = \"局部Y轴弯曲应力比\";\n }\n this.cutlineObject.currentCutlineType = cutlinePostMemberResultObject_1.CutlineType.UCRanges;\n datas.push(Number(memberPostResult[j].YYBendingUC));\n labelDatas.push(memberPostResult[j].YYBendingUC);\n break;\n case postResultCloudConfig_1.ResultParameterType.ZZBendingUC:\n if (isShowEnglishText) {\n this.resultParameterText = \"ZZBendingUC\";\n } else {\n this.resultParameterText = \"局部Z轴弯曲应力比\";\n }\n this.cutlineObject.currentCutlineType = cutlinePostMemberResultObject_1.CutlineType.UCRanges;\n datas.push(Number(memberPostResult[j].ZZBendingUC));\n labelDatas.push(memberPostResult[j].ZZBendingUC);\n break;\n case postResultCloudConfig_1.ResultParameterType.TotalShearUC:\n if (isShowEnglishText) {\n this.resultParameterText = \"TotalShearUC\";\n } else {\n this.resultParameterText = \"最大剪切应力比\";\n }\n if (!this.postResultElementUC) {\n console.log(\"没有获取到ElementUC表的数据.\");\n return;\n }\n this.cutlineObject.currentCutlineType = cutlinePostMemberResultObject_1.CutlineType.UCRanges;\n datas.push(Number(memberPostResult[j].TotalShearUC));\n labelDatas.push(memberPostResult[j].TotalShearUC);\n break;\n case postResultCloudConfig_1.ResultParameterType.CriticalLC:\n if (isShowEnglishText) {\n this.resultParameterText = \"CriticalLC\";\n } else {\n this.resultParameterText = \"最危险工况\";\n }\n if (!this.postResultElementUC) {\n console.log(\"没有获取到ElementUC表的数据.\");\n return;\n }\n this.cutlineObject.currentCutlineType = cutlinePostMemberResultObject_1.CutlineType.UCRanges;\n datas.push(Number(memberPostResult[j].MaxUC));\n labelDatas.push(loadConditionName);\n break;\n case postResultCloudConfig_1.ResultParameterType.CriticalLC_MaxUC:\n if (isShowEnglishText) {\n this.resultParameterText = \"CriticalLC_MaxUC\";\n } else {\n this.resultParameterText = \"最危险工况+应力比\";\n }\n if (!this.postResultElementUC) {\n console.log(\"没有获取到ElementUC表的数据.\");\n return;\n }\n this.cutlineObject.currentCutlineType = cutlinePostMemberResultObject_1.CutlineType.UCRanges;\n datas.push(Number(memberPostResult[j].MaxUC));\n labelDatas.push(loadConditionName + \" (\" + Number(memberPostResult[j].MaxUC).toFixed(3) + \")\");\n break;\n case postResultCloudConfig_1.ResultParameterType.AXStress:\n if (isShowEnglishText) {\n this.resultParameterText = \"AXStress\";\n } else {\n this.resultParameterText = \"轴向应力\";\n }\n this.cutlineObject.currentCutlineType = cutlinePostMemberResultObject_1.CutlineType.StressLevels;\n datas.push(Number(memberPostResult[j].AXStress));\n labelDatas.push(memberPostResult[j].AXStress);\n break;\n case postResultCloudConfig_1.ResultParameterType.AXStress_YaYingLi:\n if (isShowEnglishText) {\n this.resultParameterText = \"压应力\";\n } else {\n this.resultParameterText = \"压应力\";\n }\n this.cutlineObject.currentCutlineType = cutlinePostMemberResultObject_1.CutlineType.StressLevels;\n datas.push(Number(memberPostResult[j].AXStress));\n labelDatas.push(memberPostResult[j].AXStress);\n break;\n case postResultCloudConfig_1.ResultParameterType.AXStress_LaYingLi:\n if (isShowEnglishText) {\n this.resultParameterText = \"拉应力\";\n } else {\n this.resultParameterText = \"拉应力\";\n }\n this.cutlineObject.currentCutlineType = cutlinePostMemberResultObject_1.CutlineType.StressLevels;\n datas.push(Number(memberPostResult[j].AXStress));\n labelDatas.push(memberPostResult[j].AXStress);\n break;\n case postResultCloudConfig_1.ResultParameterType.YYBendingStress:\n if (isShowEnglishText) {\n this.resultParameterText = \"YYBendingStress\";\n } else {\n this.resultParameterText = \"局部Y轴弯曲应力\";\n }\n this.cutlineObject.currentCutlineType = cutlinePostMemberResultObject_1.CutlineType.StressLevels;\n datas.push(Number(memberPostResult[j].YYBendingStress));\n labelDatas.push(memberPostResult[j].YYBendingStress);\n break;\n case postResultCloudConfig_1.ResultParameterType.ZZBendingStress:\n if (isShowEnglishText) {\n this.resultParameterText = \"ZZBendingStress\";\n } else {\n this.resultParameterText = \"局部Z轴弯曲应力\";\n }\n this.cutlineObject.currentCutlineType = cutlinePostMemberResultObject_1.CutlineType.StressLevels;\n datas.push(Number(memberPostResult[j].ZZBendingStress));\n labelDatas.push(memberPostResult[j].ZZBendingStress);\n break;\n case postResultCloudConfig_1.ResultParameterType.YShearStress:\n if (isShowEnglishText) {\n this.resultParameterText = \"YShearStress\";\n } else {\n this.resultParameterText = \"局部Y轴剪应力\";\n }\n this.cutlineObject.currentCutlineType = cutlinePostMemberResultObject_1.CutlineType.StressLevels;\n datas.push(Number(memberPostResult[j].YShearStress));\n labelDatas.push(memberPostResult[j].YShearStress);\n break;\n case postResultCloudConfig_1.ResultParameterType.ZShearStress:\n if (isShowEnglishText) {\n this.resultParameterText = \"ZShearStress\";\n } else {\n this.resultParameterText = \"局部Z轴剪应力\";\n }\n this.cutlineObject.currentCutlineType = cutlinePostMemberResultObject_1.CutlineType.StressLevels;\n datas.push(Number(memberPostResult[j].ZShearStress));\n labelDatas.push(memberPostResult[j].ZShearStress);\n break;\n case postResultCloudConfig_1.ResultParameterType.AxialLoad:\n if (isShowEnglishText) {\n this.resultParameterText = \"AxialLoad\";\n } else {\n this.resultParameterText = \"轴向内力\";\n }\n this.cutlineObject.currentCutlineType = cutlinePostMemberResultObject_1.CutlineType.StressLevels;\n datas.push(Number(memberPostResult[j].AxialLoad));\n labelDatas.push(memberPostResult[j].AxialLoad);\n break;\n case postResultCloudConfig_1.ResultParameterType.AxialLoad_YaNeiLi:\n if (isShowEnglishText) {\n this.resultParameterText = \"压内力\";\n } else {\n this.resultParameterText = \"压内力\";\n }\n this.cutlineObject.currentCutlineType = cutlinePostMemberResultObject_1.CutlineType.StressLevels;\n datas.push(Number(memberPostResult[j].AxialLoad));\n labelDatas.push(memberPostResult[j].AxialLoad);\n break;\n case postResultCloudConfig_1.ResultParameterType.AxialLoad_LaNeiLi:\n if (isShowEnglishText) {\n this.resultParameterText = \"拉内力\";\n } else {\n this.resultParameterText = \"拉内力\";\n }\n this.cutlineObject.currentCutlineType = cutlinePostMemberResultObject_1.CutlineType.StressLevels;\n datas.push(Number(memberPostResult[j].AxialLoad));\n labelDatas.push(memberPostResult[j].AxialLoad);\n break;\n case postResultCloudConfig_1.ResultParameterType.YYBendingMoment:\n if (isShowEnglishText) {\n this.resultParameterText = \"YYBendingMoment\";\n } else {\n this.resultParameterText = \"局部Y轴弯矩\";\n }\n this.cutlineObject.currentCutlineType = cutlinePostMemberResultObject_1.CutlineType.UCRanges;\n datas.push(Number(memberPostResult[j].YYBendingMoment));\n labelDatas.push(memberPostResult[j].YYBendingMoment);\n break;\n case postResultCloudConfig_1.ResultParameterType.ZZBendingMoment:\n if (isShowEnglishText) {\n this.resultParameterText = \"ZZBendingMoment\";\n } else {\n this.resultParameterText = \"局部Z轴弯矩\";\n }\n this.cutlineObject.currentCutlineType = cutlinePostMemberResultObject_1.CutlineType.UCRanges;\n datas.push(Number(memberPostResult[j].ZZBendingMoment));\n labelDatas.push(memberPostResult[j].ZZBendingMoment);\n break;\n }\n }\n }\n if (data.displayLabels.value) {\n this.initDrawSvg(member, datas, labelDatas, distances, minMagnitude);\n }\n distances[0] = 0;\n distances[distances.length - 1] = member.getMemberLength();\n if (this.cutlineObject.currentCutlineType === cutlinePostMemberResultObject_1.CutlineType.UCRanges) {\n var colors = this.cutlineObject.getColorsByDatas(datas, this.cutlineObject.ucRanges, this.cutlineObject.ucRangesColors);\n resultMembers = this.viewer.process.cloudMemberTransformManager.createCloudMember(member, tslib_1.__spreadArray([], tslib_1.__read(distances), false), colors, colorCode, blendRenderedColor);\n } else if (this.cutlineObject.currentCutlineType === cutlinePostMemberResultObject_1.CutlineType.StressLevels) {\n var colors = this.cutlineObject.getColorsByDatas(datas, this.cutlineObject.stressLevelsActual, this.cutlineObject.stressLevelsColors);\n resultMembers = this.viewer.process.cloudMemberTransformManager.createCloudMember(member, tslib_1.__spreadArray([], tslib_1.__read(distances), false), colors, colorCode, blendRenderedColor);\n }\n if (resultMembers && resultMembers.length > 0) {\n var iro = this.viewer.findInstanceObject(member);\n if (iro) {\n iro.visible = false;\n }\n for (var j = 0; j < resultMembers.length; j++) {\n this.viewer.process.addRenderObject(this.postResultCloudObject, resultMembers[j]);\n resultMembers[j].setNeedUpdate();\n this.cloudMembers.push(resultMembers[j]);\n }\n this.members.push(member);\n }\n }\n }\n }\n this.viewer.selectionManager.clearAllSelectionAndHighlight();\n this.viewer.updateDisplay();\n this.caeObjectSelector.selectedRenderObjects.clear();\n this.updatePanel();\n if (data.displayCutline.value && data.colorCode.value) {\n this.refreshCutline();\n } else {\n legendManage_1.LegendManage.destory(this.elementKey);\n }\n postInterfaceManager.active_postResult = true;\n data.tip.value = 0;\n store_1.default.commit(\"structureTree/updateTreeData\", [this.viewer.structureTreeManager.rootNode]);\n };\n CommandPostResultCloud.prototype.updatePanel = function () {};\n CommandPostResultCloud.prototype.getColorByIndex = function (colors, index) {\n var color = colors.slice(4 * index, 4 * (index + 1));\n return color;\n };\n CommandPostResultCloud.prototype.resetScene = function () {\n legendManage_1.LegendManage.destory(this.elementKey);\n this.clearSvg();\n for (var i = 0; i < this.members.length; i++) {\n var iro = this.viewer.findInstanceObject(this.members[i]);\n if (iro) {\n iro.visible = true;\n }\n }\n for (var i = 0; i < this.cloudMembers.length; i++) {\n this.viewer.process.removeRenderObject(this.cloudMembers[i]);\n }\n if (this.postResultCloudObject) {\n this.postResultCloudObject.delete();\n }\n this.members = [];\n this.cloudMembers = [];\n var postInterfaceManager = this.viewer.postInterfaceManager;\n postInterfaceManager.active_postResult = false;\n };\n CommandPostResultCloud.prototype.refreshCutline = function () {\n var component = legendManage_1.LegendManage.create(this.elementKey, this.cutlineObject.geCutline(), \"\", \"\", \"\");\n if (this.viewer.commonInterfaceManager.showEnglishText) {\n component.title = \"MemberResult:\" + this.resultParameterText;\n component.leftText = \"Color\";\n component.rightText = \"Range\";\n } else {\n component.title = \"构件结果:\" + this.resultParameterText;\n component.leftText = \"颜色\";\n component.rightText = \"范围\";\n }\n };\n return CommandPostResultCloud;\n }(commandComponent_1.CommandComponent);\n exports.default = CommandPostResultCloud;\n}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9wYWNrYWdlcy9jYWVEZXNpZ24vc3JjL3ZpZXdlcldyYXBwZXIvY29tbWFuZHMvYWZ0ZXJ0cmVhdG1lbnQvcG9zdFJlc3VsdENsb3VkL2NvbW1hbmRQb3N0UmVzdWx0Q2xvdWQudHMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9bbmFtZV0vLi9wYWNrYWdlcy9jYWVEZXNpZ24vc3JjL3ZpZXdlcldyYXBwZXIvY29tbWFuZHMvYWZ0ZXJ0cmVhdG1lbnQvcG9zdFJlc3VsdENsb3VkL2NvbW1hbmRQb3N0UmVzdWx0Q2xvdWQudHM/MWQ5MiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDYW1lcmFNb3VzZSB9IGZyb20gXCIuLi8uLi8uLi8uLi9nc0RldkZ4L29wZXJhdG9ycy9jYW1lcmFNb3VzZVwiO1xyXG5pbXBvcnQgeyBDQUVPYmplY3RQcmVTZWxlY3RvciB9IGZyb20gXCIuLi8uLi8uLi8uLi9nc0RldkZ4L29wZXJhdG9ycy9jQUVPYmplY3RQcmVTZWxlY3RvclwiO1xyXG5pbXBvcnQgeyBDQUVPYmplY3RTZWxlY3RvciB9IGZyb20gXCIuLi8uLi8uLi8uLi9nc0RldkZ4L29wZXJhdG9ycy9jYWVPYmplY3RTZWxlY3RvclwiO1xyXG5pbXBvcnQgeyBDb21tYW5kU2VsZWN0IH0gZnJvbSBcIi4uLy4uLy4uLy4uL2dzRGV2RngvY29tbWFuZHMvY29tbWFuZFNlbGVjdFwiO1xyXG5pbXBvcnQgeyBDb21tYW5kQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2NvbW1hbmRDb21wb25lbnRcIjtcclxuaW1wb3J0IFBvc3RSZXN1bHRDbG91ZENvbmZpZywge1xyXG4gIFJlc3VsdFBhcmFtZXRlclR5cGUsXHJcbn0gZnJvbSBcIi4vcG9zdFJlc3VsdENsb3VkQ29uZmlnXCI7XHJcbmltcG9ydCB7IERlc2lnbkJhc2VPYmplY3QgfSBmcm9tIFwiZ3MtY2VlYy1kZXNpZ25cIjtcclxuaW1wb3J0IHN0b3JlIGZyb20gXCIuLi8uLi8uLi8uLi9zdG9yZVwiO1xyXG5pbXBvcnQgcmVuZGVyT2JqZWN0U2VydmljZSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBpL3JlbmRlck9iamVjdFNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTWVtYmVyT2JqZWN0IH0gZnJvbSBcIi4uLy4uLy4uLy4uL2dzRGV2Rngvb2JqZWN0cy9jYWVPYmplY3RzL21lbWJlck9iamVjdFwiO1xyXG5pbXBvcnQgeyBCdXNpbmVzc1N0YXRlIH0gZnJvbSBcImdzLWNlZWMtZGVzaWduXCI7XHJcbmltcG9ydCB7XHJcbiAgQ3V0bGluZVBvc3RNZW1iZXJSZXN1bHRPYmplY3QsXHJcbiAgQ3V0bGluZVR5cGUsXHJcbn0gZnJvbSBcIi4uLy4uLy4uLy4uL2dzRGV2Rngvb2JqZWN0cy9wcmV0cmVhdG1lbnRPYmplY3RzL2N1dGxpbmVQb3N0TWVtYmVyUmVzdWx0T2JqZWN0XCI7XHJcbmltcG9ydCB7IExvbmdhbiB9IGZyb20gXCJncy1iaW0tYWlyXCI7XHJcbmltcG9ydCB7IFN2Z0RyYXcgfSBmcm9tIFwiZ3MtY2VlYy1kZXNpZ25cIjtcclxuaW1wb3J0IHsgRyB9IGZyb20gXCJAc3ZnZG90anMvc3ZnLmpzXCI7XHJcbmltcG9ydCB7IFN3aXRjaENvbG9yRGl2aWRlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2dzRGV2RngvbWFuYWdlcnMvaW50ZXJmYWNlTWFuYWdlcnMvY29tbW9uSW50ZXJmYWNlTWFuYWdlclwiO1xyXG5pbXBvcnQgeyBjaGVja05vdE51bGxPclVuZGVmaW5kZWQgfSBmcm9tIFwiLi4vLi4vY29tbWFuZFV0aWxpdGllcy9jb21tYW5kVXRpbGl0aWVzXCI7XHJcbmltcG9ydCB7IE1lc3NhZ2UgfSBmcm9tIFwiZWxlbWVudC11aVwiO1xyXG5pbXBvcnQgeyBMZWdlbmRNYW5hZ2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vdmlld2VyV3JhcHBlci9tb2R1bGUvbGVnZW5kTWFuYWdlXCI7XHJcblxyXG4vKipcclxuICog5p6E5Lu26K6h566X57uT5p6c5Zyo5L2N5LqR5Zu+LlxyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29tbWFuZFBvc3RSZXN1bHRDbG91ZCBleHRlbmRzIENvbW1hbmRDb21wb25lbnQge1xyXG4gIHR5cGVOYW1lID0gXCJDb21tYW5kUG9zdFJlc3VsdENsb3VkXCI7XHJcbiAgY29uZmlnOiBQb3N0UmVzdWx0Q2xvdWRDb25maWc7XHJcbiAgcHJlU2VsZWN0b3I6IENBRU9iamVjdFByZVNlbGVjdG9yO1xyXG4gIGNhZU9iamVjdFNlbGVjdG9yOiBDQUVPYmplY3RTZWxlY3RvcjtcclxuXHJcbiAgLy8g5o6l5Y+j6I635Y+W55qEUl9QT1NUTUVNQkVSUkVTVUxUU+ihqOeahOWQjuWkhOeQhuaVsOaNri5cclxuICBwb3N0UmVzdWx0ID0gbnVsbDtcclxuICAvLyDmjqXlj6Pojrflj5bnmoRFbGVtZW50VUPooajnmoTlkI7lpITnkIbmlbDmja4uXHJcbiAgcG9zdFJlc3VsdEVsZW1lbnRVQyA9IG51bGw7XHJcblxyXG4gIC8vIOWbvuS+i1JPLlxyXG4gIGN1dGxpbmVPYmplY3Q6IEN1dGxpbmVQb3N0TWVtYmVyUmVzdWx0T2JqZWN0ID0gbnVsbDtcclxuICAvLyDlkI7lpITnkIbmlYjmnpznmoRST+eItuiKgueCuS5cclxuICBwb3N0UmVzdWx0Q2xvdWRPYmplY3Q6IERlc2lnbkJhc2VPYmplY3QgPSBudWxsO1xyXG5cclxuICAvKipcclxuICAgKiDooqvovazmjaLnmoTmnYbku7bliJfooahcclxuICAgKi9cclxuICBtZW1iZXJzID0gbmV3IEFycmF5PE1lbWJlck9iamVjdD4oKTtcclxuICAvKipcclxuICAgKiDovazmjaLlkI7nmoTkupHlm77mnYbku7bliJfooahcclxuICAgKi9cclxuICBjbG91ZE1lbWJlcnM6IE1lbWJlck9iamVjdFtdID0gbmV3IEFycmF5PE1lbWJlck9iamVjdD4oKTtcclxuXHJcbiAgX2dyb3VwOiBHID0gbnVsbDtcclxuICBsYWJlbE1lbWJlcnMgPSBuZXcgQXJyYXk8TWVtYmVyT2JqZWN0PigpO1xyXG4gIGRhdGFzID0gbmV3IEFycmF5PG51bWJlcltdPigpO1xyXG4gIGxhYmVsRGF0YXMgPSBuZXcgQXJyYXk8c3RyaW5nW10+KCk7XHJcbiAgbGFiZWxEaXN0YW5jZXMgPSBuZXcgQXJyYXk8bnVtYmVyW10+KCk7XHJcbiAgcmVzdWx0TGFiZWwgPSBuZXcgQXJyYXk8YW55PigpO1xyXG4gIHJlc3VsdExhYmVsRGljOiB7IFtpZDogc3RyaW5nXTogYW55IH0gPSB7fTtcclxuXHJcbiAgZHJhd1N2Z0V2ZW50ID0gbnVsbDtcclxuXHJcbiAgcmVzdWx0UGFyYW1ldGVyVGV4dCA9IFwi5pyA5aSn5ZCI5oiQ5bqU5Yqb5q+UXCI7XHJcblxyXG4gIGxhYmVsQ29sb3IgPSBcIiNmZmZmZmZcIjtcclxuXHJcbiAgZWxlbWVudEtleSA9IFwiY3V0bGluZVwiO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBiZWdpbigpOiB2b2lkIHtcclxuICAgIGxldCBhZnRlcnRyZWF0bWVudFJPID1cclxuICAgICAgdGhpcy5wcm9jZXNzLmNhZVJlbmRlck9iamVjdFRyZWVNYW5hZ2VyLnBvc3RSZXN1bHROb2RlO1xyXG5cclxuICAgIGxldCBwb3N0UmVzdWx0Q2xvdWRSTyA9XHJcbiAgICAgIHRoaXMudmlld2VyLnByb2Nlc3MuZmluZENhZU9iamVjdEJ5TmFtZUluQ2hpbGRPYmplY3QoXHJcbiAgICAgICAgYWZ0ZXJ0cmVhdG1lbnRSTyxcclxuICAgICAgICBcIuaehOS7tue7k+eul+e7k+aenOWcqOS9jeS6keWbvlwiXHJcbiAgICAgICkgYXMgRGVzaWduQmFzZU9iamVjdDtcclxuXHJcbiAgICBpZiAoIXBvc3RSZXN1bHRDbG91ZFJPKSB7XHJcbiAgICAgIHBvc3RSZXN1bHRDbG91ZFJPID0gbmV3IERlc2lnbkJhc2VPYmplY3QoKTtcclxuICAgICAgcG9zdFJlc3VsdENsb3VkUk8uYnVzaW5lc3NTdGF0ZSA9IEJ1c2luZXNzU3RhdGUuQ3JlYXRpbmc7XHJcbiAgICAgIHBvc3RSZXN1bHRDbG91ZFJPLm5hbWUgPSBcIuaehOS7tue7k+eul+e7k+aenOWcqOS9jeS6keWbvlwiO1xyXG4gICAgICB0aGlzLnByb2Nlc3MuYWRkUmVuZGVyT2JqZWN0KGFmdGVydHJlYXRtZW50Uk8sIHBvc3RSZXN1bHRDbG91ZFJPKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgcG9zdEludGVyZmFjZU1hbmFnZXIgPSB0aGlzLnZpZXdlci5wb3N0SW50ZXJmYWNlTWFuYWdlcjtcclxuICAgIGlmICghcG9zdEludGVyZmFjZU1hbmFnZXIuZ2V0RmluaXNoX3Bvc3RSZXN1bHQpIHtcclxuICAgICAgcG9zdEludGVyZmFjZU1hbmFnZXIudGlwX3Bvc3RSZXN1bHQgPSB0cnVlO1xyXG4gICAgICBpZiAoIXBvc3RJbnRlcmZhY2VNYW5hZ2VyLm1lc3NhZ2VfcG9zdFJlc3VsdCkge1xyXG4gICAgICAgIHBvc3RJbnRlcmZhY2VNYW5hZ2VyLm1lc3NhZ2VfcG9zdFJlc3VsdCA9IE1lc3NhZ2UuaW5mbyh7XHJcbiAgICAgICAgICBtZXNzYWdlOiBcIuadhuS7tue7k+aenOS7jeWcqOivt+axgkRC5pWw5o2u77yM6K+3562J5b6F6K+35rGC5a6M5oiQLlwiLFxyXG4gICAgICAgICAgZHVyYXRpb246IDAsXHJcbiAgICAgICAgICBzaG93Q2xvc2U6IHRydWUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmN1dGxpbmVPYmplY3QgPSB0aGlzLnZpZXdlci5wcm9jZXNzLmZpbmRDYWVPYmplY3RCeU5hbWVJbkNoaWxkT2JqZWN0KFxyXG4gICAgICBwb3N0UmVzdWx0Q2xvdWRSTyxcclxuICAgICAgXCLmnoTku7borqHnrpfnu5Pmnpzlm77kvovmlbDmja5cIlxyXG4gICAgKSBhcyBDdXRsaW5lUG9zdE1lbWJlclJlc3VsdE9iamVjdDtcclxuXHJcbiAgICBpZiAoIXRoaXMuY3V0bGluZU9iamVjdCkge1xyXG4gICAgICAvLyDmt7vliqDlm77kvovmlbDmja5STyjopoHmjIHkuYXljJbkv53lrZgpLlxyXG4gICAgICB0aGlzLmN1dGxpbmVPYmplY3QgPSBuZXcgQ3V0bGluZVBvc3RNZW1iZXJSZXN1bHRPYmplY3QoKTtcclxuICAgICAgdGhpcy5jdXRsaW5lT2JqZWN0LmJ1c2luZXNzU3RhdGUgPSBCdXNpbmVzc1N0YXRlLkNyZWF0aW5nO1xyXG4gICAgICB0aGlzLmN1dGxpbmVPYmplY3QubmFtZSA9IFwi5p6E5Lu26K6h566X57uT5p6c5Zu+5L6L5pWw5o2uXCI7XHJcbiAgICAgIHRoaXMuY3V0bGluZU9iamVjdC50aXRsZSA9IFwi5pyA5aSn5ZCI5oiQ5bqU5Yqb5q+UXCI7XHJcbiAgICAgIHRoaXMuY3V0bGluZU9iamVjdC51Y1JhbmdlcyA9IFswLCAwLjIsIDAuMzUsIDAuOSwgMS4wXTtcclxuICAgICAgdGhpcy5jdXRsaW5lT2JqZWN0LnVjUmFuZ2VzQ29sb3JzID0gW1xyXG4gICAgICAgIDAuODIsIDAuODIsIDAuODIsIDEsIDAuNSwgMC41LCAwLjUsIDEsIDAsIDEsIDAsIDEsIDEsIDEsIDAsIDEsIDEsIDAsIDAsXHJcbiAgICAgICAgMSxcclxuICAgICAgXTtcclxuICAgICAgLy8gdGhpcy5jdXRsaW5lT2JqZWN0LnN0cmVzc0xldmVsc0FjdHVhbCA9IFtcclxuICAgICAgLy8gICAxMCwgMjAsIDQwLCA1MCwgNzUsIDEwMCwgMTMzLCAxNDgsXHJcbiAgICAgIC8vIF07XHJcbiAgICAgIHRoaXMuY3V0bGluZU9iamVjdC5zdHJlc3NMZXZlbHNBY3R1YWwgPSBbLTIwLCAtMTUsIC0xMCwgLTUsIDAsIDUsIDEwLCAyMF07XHJcbiAgICAgIHRoaXMuY3V0bGluZU9iamVjdC5zdHJlc3NMZXZlbHNDb2xvcnMgPSBbXHJcbiAgICAgICAgMC44MixcclxuICAgICAgICAwLjgyLFxyXG4gICAgICAgIDAuODIsXHJcbiAgICAgICAgMSwgLy8g5rWF54GwXHJcbiAgICAgICAgMC41LFxyXG4gICAgICAgIDAuNSxcclxuICAgICAgICAwLjUsXHJcbiAgICAgICAgMSwgLy8g54GwXHJcbiAgICAgICAgMCxcclxuICAgICAgICAwLFxyXG4gICAgICAgIDEsXHJcbiAgICAgICAgMSwgLy8g6JOdXHJcbiAgICAgICAgMSxcclxuICAgICAgICAwLFxyXG4gICAgICAgIDEsXHJcbiAgICAgICAgMSwgLy8g5rSL57qiXHJcbiAgICAgICAgMCxcclxuICAgICAgICAxLFxyXG4gICAgICAgIDEsXHJcbiAgICAgICAgMSwgLy8g5rWF57u/XHJcbiAgICAgICAgMCxcclxuICAgICAgICAxLFxyXG4gICAgICAgIDAsXHJcbiAgICAgICAgMSwgLy8g57u/XHJcbiAgICAgICAgMSxcclxuICAgICAgICAxLFxyXG4gICAgICAgIDAsXHJcbiAgICAgICAgMSwgLy/pu4RcclxuICAgICAgICAxLFxyXG4gICAgICAgIDAsXHJcbiAgICAgICAgMCxcclxuICAgICAgICAxLCAvL+e6olxyXG4gICAgICBdO1xyXG5cclxuICAgICAgdGhpcy5wcm9jZXNzLmFkZFJlbmRlck9iamVjdChwb3N0UmVzdWx0Q2xvdWRSTywgdGhpcy5jdXRsaW5lT2JqZWN0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jaGFuZ2VPcGVyYXRvcnMoKTtcclxuXHJcbiAgICB0aGlzLmNvbmZpZyA9IG5ldyBQb3N0UmVzdWx0Q2xvdWRDb25maWcoKTtcclxuICAgIHRoaXMuY29uZmlnLnNob3coKTtcclxuXHJcbiAgICBsZXQgc2VsZiA9IHRoaXM7XHJcbiAgICB0aGlzLmRyYXdTdmdFdmVudCA9ICgpID0+IHtcclxuICAgICAgbGV0IG1pbk1hZ25pdHVkZSA9IE51bWJlcihcclxuICAgICAgICBzZWxmLmNvbmZpZy5wcm9wZXJ0aWVzLml0ZW1zWzBdLmRhdGEubWluTWFnbml0dWRlLnZhbHVlXHJcbiAgICAgICk7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VsZi5sYWJlbE1lbWJlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBzZWxmLmRyYXdTdmcoXHJcbiAgICAgICAgICBzZWxmLmxhYmVsTWVtYmVyc1tpXSxcclxuICAgICAgICAgIHNlbGYuZGF0YXNbaV0sXHJcbiAgICAgICAgICBzZWxmLmxhYmVsRGF0YXNbaV0sXHJcbiAgICAgICAgICBzZWxmLmxhYmVsRGlzdGFuY2VzW2ldLFxyXG4gICAgICAgICAgbWluTWFnbml0dWRlXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICAgIHRoaXMudmlld2VyLnNjZW5lQ2FtZXJhQ2hhbmdlZC5hZGQodGhpcy5kcmF3U3ZnRXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgcmVzdG9yZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuY2hhbmdlT3BlcmF0b3JzKCk7XHJcbiAgICB0aGlzLmNvbmZpZy5zaG93KCk7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VPcGVyYXRvcnMoKTogdm9pZCB7XHJcbiAgICAvLyDov5vlhaXlkb3ku6TliY3muIXnqbrpgInkuK3kuI7pq5jkuq4uXHJcbiAgICB0aGlzLnZpZXdlci5zZWxlY3Rpb25NYW5hZ2VyLmNsZWFyQWxsU2VsZWN0aW9uQW5kSGlnaGxpZ2h0KCk7XHJcbiAgICB0aGlzLnZpZXdlci51cGRhdGVEaXNwbGF5KCk7XHJcblxyXG4gICAgLy8g5riF56m65pON5L2c5ZmoLlxyXG4gICAgdGhpcy52aWV3ZXIub3BlcmF0b3JNYW5hZ2VyLmNsZWFyKCk7XHJcbiAgICAvLyDmt7vliqDmk43kvZzlmahcclxuICAgIHRoaXMudmlld2VyLm9wZXJhdG9yTWFuYWdlci5hZGQobmV3IENhbWVyYU1vdXNlKCkpO1xyXG5cclxuICAgIHRoaXMucHJlU2VsZWN0b3IgPSBuZXcgQ0FFT2JqZWN0UHJlU2VsZWN0b3IoKTtcclxuICAgIHRoaXMudmlld2VyLm9wZXJhdG9yTWFuYWdlci5hZGQodGhpcy5wcmVTZWxlY3Rvcik7XHJcblxyXG4gICAgdGhpcy5jYWVPYmplY3RTZWxlY3RvciA9IG5ldyBDQUVPYmplY3RTZWxlY3RvcigpO1xyXG4gICAgdGhpcy52aWV3ZXIub3BlcmF0b3JNYW5hZ2VyLmFkZCh0aGlzLmNhZU9iamVjdFNlbGVjdG9yKTtcclxuXHJcbiAgICB0aGlzLmNhZU9iamVjdFNlbGVjdG9yLmxCdXR0b25VcC5hZGQoKCkgPT4ge1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVBhbmVsKCk7XHJcbiAgICAgIH0sIDApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBlbmQoKTogdm9pZCB7XHJcbiAgICBsZXQgcG9zdEludGVyZmFjZU1hbmFnZXIgPSB0aGlzLnZpZXdlci5wb3N0SW50ZXJmYWNlTWFuYWdlcjtcclxuICAgIGlmIChwb3N0SW50ZXJmYWNlTWFuYWdlci5tZXNzYWdlX3Bvc3RSZXN1bHQpIHtcclxuICAgICAgcG9zdEludGVyZmFjZU1hbmFnZXIubWVzc2FnZV9wb3N0UmVzdWx0LmNsb3NlKCk7XHJcbiAgICAgIHBvc3RJbnRlcmZhY2VNYW5hZ2VyLm1lc3NhZ2VfcG9zdFJlc3VsdCA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZXNldFNjZW5lKCk7XHJcblxyXG4gICAgdGhpcy52aWV3ZXIuc2NlbmVDYW1lcmFDaGFuZ2VkLnJlbW92ZSh0aGlzLmRyYXdTdmdFdmVudCk7XHJcbiAgICB0aGlzLmNvbmZpZy5oaWRlKCk7XHJcbiAgICBzdXBlci5lbmQoKTtcclxuXHJcbiAgICB0aGlzLnZpZXdlci5zZWxlY3Rpb25NYW5hZ2VyLmNsZWFyQWxsU2VsZWN0aW9uQW5kSGlnaGxpZ2h0KCk7XHJcbiAgICB0aGlzLnZpZXdlci51cGRhdGVEaXNwbGF5KCk7XHJcblxyXG4gICAgLy8g5pu05paw5bem5L6n57uT5p6E5qCRXHJcbiAgICBzdG9yZS5jb21taXQoXCJzdHJ1Y3R1cmVUcmVlL3VwZGF0ZVRyZWVEYXRhXCIsIFtcclxuICAgICAgdGhpcy52aWV3ZXIuc3RydWN0dXJlVHJlZU1hbmFnZXIucm9vdE5vZGUsXHJcbiAgICBdKTtcclxuXHJcbiAgICBsZXQgY29tbWFuZFNlbGVjdCA9IG5ldyBDb21tYW5kU2VsZWN0KCk7XHJcbiAgICB0aGlzLnByb2Nlc3MuY29tbWFuZE1hbmFnZXIuZXhlY3V0ZShjb21tYW5kU2VsZWN0KTtcclxuICB9XHJcblxyXG4gIGNsZWFyU3ZnKCkge1xyXG4gICAgaWYgKHRoaXMucmVzdWx0TGFiZWwpIHtcclxuICAgICAgdGhpcy5yZXN1bHRMYWJlbC5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgaXRlbS5jbGVhcigpO1xyXG4gICAgICAgIGl0ZW0gPSBudWxsO1xyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5yZXN1bHRMYWJlbCA9IG5ldyBBcnJheTxhbnk+KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5sYWJlbE1lbWJlcnMgPSBuZXcgQXJyYXk8TWVtYmVyT2JqZWN0PigpO1xyXG4gICAgdGhpcy5kYXRhcyA9IG5ldyBBcnJheTxudW1iZXJbXT4oKTtcclxuICAgIHRoaXMubGFiZWxEYXRhcyA9IG5ldyBBcnJheTxzdHJpbmdbXT4oKTtcclxuICAgIHRoaXMubGFiZWxEaXN0YW5jZXMgPSBuZXcgQXJyYXk8bnVtYmVyW10+KCk7XHJcbiAgICB0aGlzLnJlc3VsdExhYmVsRGljID0ge307XHJcbiAgfVxyXG5cclxuICBpbml0RHJhd1N2ZyhcclxuICAgIG1lbWJlcjogTWVtYmVyT2JqZWN0LFxyXG4gICAgZGF0YXM6IG51bWJlcltdLFxyXG4gICAgbGFiZWxEYXRhczogc3RyaW5nW10sXHJcbiAgICBkaXN0YW5jZXM6IG51bWJlcltdLFxyXG4gICAgbWluTWFnbml0dWRlOiBudW1iZXJcclxuICApIHtcclxuICAgIGxldCBkYXRhID0gdGhpcy5jb25maWcucHJvcGVydGllcy5pdGVtc1swXS5kYXRhO1xyXG4gICAgbGV0IG9ubHlTaG93TWF4ID0gZGF0YS5zaG93TWF4UGVyR3JvdXAudmFsdWU7XHJcblxyXG4gICAgbGV0IGhhc0FkZEZsYWcgPSBmYWxzZTtcclxuICAgIGxldCBtYXhWYWx1ZSA9IC05OTk5O1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoZGF0YXNbaV0gPiBtYXhWYWx1ZSkge1xyXG4gICAgICAgIG1heFZhbHVlID0gZGF0YXNbaV07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBqID0gMDsgaiA8IGRpc3RhbmNlcy5sZW5ndGg7IGorKykge1xyXG4gICAgICBsZXQgZGF0YSA9IGRhdGFzW2pdO1xyXG4gICAgICBsZXQgbGFiZWxEYXRhID0gbGFiZWxEYXRhc1tqXTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIG1pbk1hZ25pdHVkZSAhPT0gbnVsbCAmJlxyXG4gICAgICAgIG1pbk1hZ25pdHVkZSAhPT0gdW5kZWZpbmVkICYmXHJcbiAgICAgICAgZGF0YSA8IG1pbk1hZ25pdHVkZVxyXG4gICAgICApIHtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGRhdGEgPCBtYXhWYWx1ZSkge1xyXG4gICAgICAgIGlmIChvbmx5U2hvd01heCkge1xyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIWhhc0FkZEZsYWcpIHtcclxuICAgICAgICB0aGlzLmxhYmVsTWVtYmVycy5wdXNoKG1lbWJlcik7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFoYXNBZGRGbGFnKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhcy5wdXNoKGRhdGFzKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIWhhc0FkZEZsYWcpIHtcclxuICAgICAgICB0aGlzLmxhYmVsRGF0YXMucHVzaChsYWJlbERhdGFzKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIWhhc0FkZEZsYWcpIHtcclxuICAgICAgICB0aGlzLmxhYmVsRGlzdGFuY2VzLnB1c2goWy4uLmRpc3RhbmNlc10pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgb3JpZ2luID0gbmV3IEZsb2F0MzJBcnJheShtZW1iZXIuZ2V0U3RhcnRQb3NpdGlvbigpKTtcclxuICAgICAgbGV0IHZlY3RvciA9IG1lbWJlci5nZXRWZWN0b3IoKTtcclxuICAgICAgbGV0IGN1cnJldFBvcyA9IExvbmdhbi5Qb2ludC5hZGQob3JpZ2luLCBMb25nYW4uVmVjdG9yLm11bHRpcGx5KHZlY3RvciwgZGlzdGFuY2VzW2pdKSk7XHJcblxyXG4gICAgICAvLyBnZXQgd2lucG9zLlxyXG4gICAgICBsZXQgcG9pbnQgPSB0aGlzLnZpZXdlci53b3JsZFBvaW50VG9QaXhlbFBvaW50KFtjdXJyZXRQb3MgYXMgYW55XSlbMF07XHJcblxyXG4gICAgICBsZXQgaWQgPSBtZW1iZXIubmFtZSArIGRpc3RhbmNlc1tqXS50b0ZpeGVkKDYpO1xyXG4gICAgICBpZiAodGhpcy5yZXN1bHRMYWJlbERpY1tpZF0pIHtcclxuICAgICAgICB0aGlzLnJlc3VsdExhYmVsRGljW2lkXS5tb3ZlKHBvaW50WzBdICsgMSwgcG9pbnRbMV0gKyAxKTtcclxuICAgICAgICB0aGlzLnJlc3VsdExhYmVsRGljW2lkXS5hdHRyKFwiZm9udC1zaXplXCIsIERlc2lnbkJhc2VPYmplY3QuZm9udFNpemUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBkcmF3ID0gU3ZnRHJhdy5nZXRJbnN0YW5jZSh0aGlzLnZpZXdlci5jb250YWluZXIuaWQpLmRyYXc7XHJcbiAgICAgICAgLy8gaWYgKCF0aGlzLl9ncm91cCkge1xyXG4gICAgICAgIHRoaXMuX2dyb3VwID0gZHJhdy5ncm91cCgpO1xyXG4gICAgICAgIC8vIH1cclxuICAgICAgICBsZXQgcmVzdWx0VGV4dCA9IGRyYXdcclxuICAgICAgICAgIC50ZXh0KFxyXG4gICAgICAgICAgICBOdW1iZXIuaXNOYU4oTnVtYmVyKGxhYmVsRGF0YSkpXHJcbiAgICAgICAgICAgICAgPyBsYWJlbERhdGFcclxuICAgICAgICAgICAgICA6IE51bWJlcihsYWJlbERhdGEpLnRvRml4ZWQoMylcclxuICAgICAgICAgIClcclxuICAgICAgICAgIC5mb250KHsgZmlsbDogdGhpcy5sYWJlbENvbG9yIH0pXHJcbiAgICAgICAgICAuYXR0cihcImZvbnQtc2l6ZVwiLCBEZXNpZ25CYXNlT2JqZWN0LmZvbnRTaXplKVxyXG4gICAgICAgICAgLm1vdmUocG9pbnRbMF0gKyAxLCBwb2ludFsxXSArIDEpO1xyXG5cclxuICAgICAgICB0aGlzLnJlc3VsdExhYmVsLnB1c2gocmVzdWx0VGV4dCk7XHJcblxyXG4gICAgICAgIHRoaXMucmVzdWx0TGFiZWxEaWNbaWRdID0gcmVzdWx0VGV4dDtcclxuICAgICAgICB0aGlzLl9ncm91cC5hZGQocmVzdWx0VGV4dCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGhhc0FkZEZsYWcgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZHJhd1N2ZyhcclxuICAgIG1lbWJlcjogTWVtYmVyT2JqZWN0LFxyXG4gICAgZGF0YXM6IG51bWJlcltdLFxyXG4gICAgbGFiZWxEYXRhczogc3RyaW5nW10sXHJcbiAgICBkaXN0YW5jZXM6IG51bWJlcltdLFxyXG4gICAgbWluTWFnbml0dWRlOiBudW1iZXJcclxuICApIHtcclxuICAgIGxldCBkYXRhID0gdGhpcy5jb25maWcucHJvcGVydGllcy5pdGVtc1swXS5kYXRhO1xyXG4gICAgbGV0IG9ubHlTaG93TWF4ID0gZGF0YS5zaG93TWF4UGVyR3JvdXAudmFsdWU7XHJcblxyXG4gICAgbGV0IG1heFZhbHVlID0gLTk5OTk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGFzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChkYXRhc1tpXSA+IG1heFZhbHVlKSB7XHJcbiAgICAgICAgbWF4VmFsdWUgPSBkYXRhc1tpXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgZGlzdGFuY2VzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgIGxldCBkYXRhID0gZGF0YXNbal07XHJcbiAgICAgIGxldCBsYWJlbERhdGEgPSBsYWJlbERhdGFzW2pdO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgbWluTWFnbml0dWRlICE9PSBudWxsICYmXHJcbiAgICAgICAgbWluTWFnbml0dWRlICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgICBkYXRhIDwgbWluTWFnbml0dWRlXHJcbiAgICAgICkge1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZGF0YSA8IG1heFZhbHVlKSB7XHJcbiAgICAgICAgaWYgKG9ubHlTaG93TWF4KSB7XHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBvcmlnaW4gPSBuZXcgRmxvYXQzMkFycmF5KG1lbWJlci5nZXRTdGFydFBvc2l0aW9uKCkpO1xyXG4gICAgICBsZXQgdmVjdG9yID0gbWVtYmVyLmdldFZlY3RvcigpO1xyXG4gICAgICBsZXQgY3VycmV0UG9zID0gTG9uZ2FuLlBvaW50LmFkZChvcmlnaW4sIExvbmdhbi5WZWN0b3IubXVsdGlwbHkodmVjdG9yLCBkaXN0YW5jZXNbal0pKTtcclxuXHJcbiAgICAgIC8vIGdldCB3aW5wb3MuXHJcbiAgICAgIGxldCBwb2ludCA9IHRoaXMudmlld2VyLndvcmxkUG9pbnRUb1BpeGVsUG9pbnQoW2N1cnJldFBvcyBhcyBhbnldKVswXTtcclxuXHJcbiAgICAgIGxldCBpZCA9IG1lbWJlci5uYW1lICsgZGlzdGFuY2VzW2pdLnRvRml4ZWQoNik7XHJcbiAgICAgIGlmICh0aGlzLnJlc3VsdExhYmVsRGljW2lkXSkge1xyXG4gICAgICAgIHRoaXMucmVzdWx0TGFiZWxEaWNbaWRdLm1vdmUocG9pbnRbMF0gKyAxLCBwb2ludFsxXSArIDEpO1xyXG4gICAgICAgIHRoaXMucmVzdWx0TGFiZWxEaWNbaWRdLmF0dHIoXCJmb250LXNpemVcIiwgRGVzaWduQmFzZU9iamVjdC5mb250U2l6ZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGV0IGRyYXcgPSBTdmdEcmF3LmdldEluc3RhbmNlKHRoaXMudmlld2VyLmNvbnRhaW5lci5pZCkuZHJhdztcclxuICAgICAgICAvLyBpZiAoIXRoaXMuX2dyb3VwKSB7XHJcbiAgICAgICAgdGhpcy5fZ3JvdXAgPSBkcmF3Lmdyb3VwKCk7XHJcbiAgICAgICAgLy8gfVxyXG5cclxuICAgICAgICBsZXQgcmVzdWx0VGV4dCA9IGRyYXdcclxuICAgICAgICAgIC50ZXh0KFxyXG4gICAgICAgICAgICBOdW1iZXIuaXNOYU4oTnVtYmVyKGxhYmVsRGF0YSkpXHJcbiAgICAgICAgICAgICAgPyBsYWJlbERhdGFcclxuICAgICAgICAgICAgICA6IE51bWJlcihsYWJlbERhdGEpLnRvRml4ZWQoMylcclxuICAgICAgICAgIClcclxuICAgICAgICAgIC5mb250KHsgZmlsbDogdGhpcy5sYWJlbENvbG9yIH0pXHJcbiAgICAgICAgICAuYXR0cihcImZvbnQtc2l6ZVwiLCBEZXNpZ25CYXNlT2JqZWN0LmZvbnRTaXplKVxyXG4gICAgICAgICAgLm1vdmUocG9pbnRbMF0gKyAxLCBwb2ludFsxXSArIDEpO1xyXG5cclxuICAgICAgICB0aGlzLnJlc3VsdExhYmVsLnB1c2gocmVzdWx0VGV4dCk7XHJcblxyXG4gICAgICAgIHRoaXMucmVzdWx0TGFiZWxEaWNbaWRdID0gcmVzdWx0VGV4dDtcclxuICAgICAgICB0aGlzLl9ncm91cC5hZGQocmVzdWx0VGV4dCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbW1hbmRPaygpOiB2b2lkIHtcclxuICAgIGxldCBwb3N0SW50ZXJmYWNlTWFuYWdlciA9IHRoaXMudmlld2VyLnBvc3RJbnRlcmZhY2VNYW5hZ2VyO1xyXG4gICAgaWYgKCFwb3N0SW50ZXJmYWNlTWFuYWdlci5nZXRGaW5pc2hfcG9zdFJlc3VsdCkge1xyXG4gICAgICBwb3N0SW50ZXJmYWNlTWFuYWdlci50aXBfcG9zdFJlc3VsdCA9IHRydWU7XHJcbiAgICAgIE1lc3NhZ2UuaW5mbyh7XHJcbiAgICAgICAgbWVzc2FnZTogXCLmnYbku7bnu5Pmnpzku43lnKjor7fmsYJEQuaVsOaNru+8jOivt+etieW+heivt+axguWujOaIkC5cIixcclxuICAgICAgfSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmIChwb3N0SW50ZXJmYWNlTWFuYWdlci5wb3N0UmVzdWx0KSB7XHJcbiAgICAgIHRoaXMucG9zdFJlc3VsdCA9IHBvc3RJbnRlcmZhY2VNYW5hZ2VyLnBvc3RSZXN1bHQ7XHJcblxyXG4gICAgICBsZXQgY291bnRlciA9IDA7XHJcbiAgICAgIGZvciAobGV0IGkgb2YgT2JqZWN0LmtleXModGhpcy5wb3N0UmVzdWx0KSkge1xyXG4gICAgICAgIGNvdW50ZXIrKztcclxuICAgICAgfVxyXG4gICAgICBpZiAoY291bnRlciA9PT0gMCkge1xyXG4gICAgICAgIE1lc3NhZ2UuaW5mbyhcIuafpeivolJfUE9TVE1FTUJFUlJFU1VMVFPooajov5Tlm57mlbDmja7kuLrnqbrvvIzor7fmo4Dmn6VEQuaWh+S7tlwiKTtcclxuICAgICAgICB0aGlzLnZpZXdlci51cGRhdGVEaXNwbGF5KCk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBNZXNzYWdlLmluZm8oXCJSX1BPU1RNRU1CRVJSRVNVTFRT6KGo5LiN5a2Y5Zyo77yM6K+35qOA5p+lRELmlofku7ZcIik7XHJcbiAgICAgIHRoaXMudmlld2VyLnVwZGF0ZURpc3BsYXkoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIOWQjuWkhOeQhuadhuS7tue7k+aenFxyXG4gICAgdGhpcy5yZXN1bHRQYXJhbWV0ZXJUZXh0ID0gXCLml6BcIjtcclxuICAgIC8vIOWPlua2iOWJjeWkhOeQhuWIhuiJsuaViOaenFxyXG4gICAgdGhpcy52aWV3ZXIuY29tbW9uSW50ZXJmYWNlTWFuYWdlci5jb2xvclN3aXRjaChTd2l0Y2hDb2xvckRpdmlkZS5DYW5jZWwpO1xyXG4gICAgLy8g5Y+W5raI5YW25LuW5ZCO5aSE55CG5YiG6Imy5pWI5p6cLlxyXG4gICAgcG9zdEludGVyZmFjZU1hbmFnZXIucmVzZXRPaHRlclBvc3RSZXN1bHQoKTtcclxuXHJcbiAgICBsZXQgZGF0YSA9IHRoaXMuY29uZmlnLnByb3BlcnRpZXMuaXRlbXNbMF0uZGF0YTtcclxuICAgIGxldCBhZnRlcnRyZWF0bWVudFJPID1cclxuICAgICAgdGhpcy5wcm9jZXNzLmNhZVJlbmRlck9iamVjdFRyZWVNYW5hZ2VyLnBvc3RSZXN1bHROb2RlO1xyXG5cclxuICAgIGxldCBwb3N0UmVzdWx0Q2xvdWRSTyA9XHJcbiAgICAgIHRoaXMudmlld2VyLnByb2Nlc3MuZmluZENhZU9iamVjdEJ5TmFtZUluQ2hpbGRPYmplY3QoXHJcbiAgICAgICAgYWZ0ZXJ0cmVhdG1lbnRSTyxcclxuICAgICAgICBcIuaehOS7tue7k+eul+e7k+aenOWcqOS9jeS6keWbvlwiXHJcbiAgICAgICkgYXMgRGVzaWduQmFzZU9iamVjdDtcclxuXHJcbiAgICAvLyBsZXQgbG9hZENvbmRpdGlvbk5hbWUgPSBkYXRhLmxvYWRDb25kaXRpb25OYW1lLnZhbHVlO1xyXG4gICAgbGV0IGxvYWRDb25kaXRpb25OYW1lID0gbnVsbDtcclxuICAgIGZvciAobGV0IGkgb2YgT2JqZWN0LmtleXModGhpcy5wb3N0UmVzdWx0KSkge1xyXG4gICAgICBpZiAobG9hZENvbmRpdGlvbk5hbWUgPT09IG51bGwpIHtcclxuICAgICAgICBsb2FkQ29uZGl0aW9uTmFtZSA9IHRoaXMucG9zdFJlc3VsdFtpXVswXS5Mb2FkQ29uZGl0aW9uTmFtZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IG1lbWJlclBvc3RSZXN1bHQgPSB0aGlzLnBvc3RSZXN1bHRbbG9hZENvbmRpdGlvbk5hbWVdO1xyXG5cclxuICAgIGxldCBjb2xvckNvZGUgPSBkYXRhLmNvbG9yQ29kZS52YWx1ZTtcclxuICAgIGxldCBibGVuZFJlbmRlcmVkQ29sb3IgPSBkYXRhLmJsZW5kUmVuZGVyZWRDb2xvci52YWx1ZTtcclxuICAgIC8vIOaYvuekuuagh+etvueahOacgOWwj+W5heW6plxyXG4gICAgbGV0IG1pbk1hZ25pdHVkZSA9IE51bWJlcihkYXRhLm1pbk1hZ25pdHVkZS52YWx1ZSk7XHJcblxyXG4gICAgLy8g5Yib5bu6Uk9cclxuICAgIHRoaXMucG9zdFJlc3VsdENsb3VkT2JqZWN0ID0gbmV3IERlc2lnbkJhc2VPYmplY3QoKTtcclxuICAgIC8vIHBvc3RSZXN1bHRDbG91ZFJPLmJ1c2luZXNzU3RhdGUgPSBCdXNpbmVzc1N0YXRlLkNyZWF0aW5nO1xyXG4gICAgdGhpcy5wb3N0UmVzdWx0Q2xvdWRPYmplY3QubmFtZSA9IGxvYWRDb25kaXRpb25OYW1lICsgXCLmnIDlpKflkIjmiJDlupTlipvmr5RcIjtcclxuXHJcbiAgICB0aGlzLnByb2Nlc3MuYWRkUmVuZGVyT2JqZWN0KHBvc3RSZXN1bHRDbG91ZFJPLCB0aGlzLnBvc3RSZXN1bHRDbG91ZE9iamVjdCk7XHJcblxyXG4gICAgbGV0IG1lbWJlcnMgPVxyXG4gICAgICB0aGlzLnByb2Nlc3MuY2FlUmVuZGVyT2JqZWN0VHJlZU1hbmFnZXIubWVtYmVyTm9kZS5jaGlsZE9iamVjdHM7XHJcblxyXG4gICAgaWYgKFxyXG4gICAgICBkYXRhLnJlc3VsdFBhcmFtZXRlci52YWx1ZSA9PT0gLTEgfHxcclxuICAgICAgIWNoZWNrTm90TnVsbE9yVW5kZWZpbmRlZChkYXRhLnJlc3VsdFBhcmFtZXRlci52YWx1ZSlcclxuICAgICkge1xyXG4gICAgICAvL1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZW1iZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgbGV0IG1lbWJlciA9IG1lbWJlcnNbaV0gYXMgTWVtYmVyT2JqZWN0O1xyXG5cclxuICAgICAgICAvLyDlpoLmnpzmmK/pnIDopoHku45FbGVtZW50VUPooajojrflj5bmnIDljbHpmanlt6XlhrXnmoTlkI7lpITnkIbmlYjmnpzvvIzliJnpnIDopoHmm7TmlrDojrflj5bnmoTlt6XlhrXmlbDmja4uXHJcbiAgICAgICAgc3dpdGNoIChkYXRhLnJlc3VsdFBhcmFtZXRlci52YWx1ZSkge1xyXG4gICAgICAgICAgY2FzZSBSZXN1bHRQYXJhbWV0ZXJUeXBlLlRvdGFsU2hlYXJVQzpcclxuICAgICAgICAgIGNhc2UgUmVzdWx0UGFyYW1ldGVyVHlwZS5Dcml0aWNhbExDOlxyXG4gICAgICAgICAgY2FzZSBSZXN1bHRQYXJhbWV0ZXJUeXBlLkNyaXRpY2FsTENfTWF4VUM6XHJcbiAgICAgICAgICAgIGlmIChwb3N0SW50ZXJmYWNlTWFuYWdlci5wb3N0X2pvaW50Q2FuU3VtbWFyeVVDKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5wb3N0UmVzdWx0RWxlbWVudFVDID1cclxuICAgICAgICAgICAgICAgIHBvc3RJbnRlcmZhY2VNYW5hZ2VyLnBvc3Rfam9pbnRDYW5TdW1tYXJ5VUM7XHJcblxyXG4gICAgICAgICAgICAgIGxldCBjb3VudGVyID0gMDtcclxuICAgICAgICAgICAgICBmb3IgKGxldCBpIG9mIE9iamVjdC5rZXlzKHRoaXMucG9zdFJlc3VsdEVsZW1lbnRVQykpIHtcclxuICAgICAgICAgICAgICAgIGNvdW50ZXIrKztcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgaWYgKGNvdW50ZXIgPT09IDApIHtcclxuICAgICAgICAgICAgICAgIE1lc3NhZ2UuaW5mbyhcIuafpeivokVsZW1lbnRVQ+ihqOi/lOWbnuaVsOaNruS4uuepuu+8jOivt+ajgOafpURC5paH5Lu2XCIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy52aWV3ZXIudXBkYXRlRGlzcGxheSgpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBNZXNzYWdlLmluZm8oXCJFbGVtZW50VUPooajkuI3lrZjlnKjvvIzor7fmo4Dmn6VEQuaWh+S7tlwiKTtcclxuICAgICAgICAgICAgICB0aGlzLnZpZXdlci51cGRhdGVEaXNwbGF5KCk7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHRoaXMucG9zdFJlc3VsdEVsZW1lbnRVQy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgIGlmIChtZW1iZXIubmFtZSA9PT0gdGhpcy5wb3N0UmVzdWx0RWxlbWVudFVDW2pdLk1lbWJlck5hbWUpIHtcclxuICAgICAgICAgICAgICAgIGxvYWRDb25kaXRpb25OYW1lID0gdGhpcy5wb3N0UmVzdWx0RWxlbWVudFVDW2pdLkxvYWRDb25kaXRpb247XHJcbiAgICAgICAgICAgICAgICBtZW1iZXJQb3N0UmVzdWx0ID0gdGhpcy5wb3N0UmVzdWx0W2xvYWRDb25kaXRpb25OYW1lXTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyDnpLrkvovmlbDmja7kuK1FbGVtZW50VUPooajlh7rnjrDkuobkuIDpoblsb2FkQ29uZGl0aW9uTmFtZeaVsOaNru+8jOWunumZheWcqOihqDEx5Lit5rKh5pyJ5a+55bqU55qE5bel5Ya15pWw5o2uLlxyXG4gICAgICAgIGlmIChtZW1iZXJQb3N0UmVzdWx0KSB7XHJcbiAgICAgICAgICBsZXQgZGlzdGFuY2VzID0gbmV3IEFycmF5PG51bWJlcj4oKTtcclxuICAgICAgICAgIC8vIOS+neaNrumAiemhue+8jOWPr+S7peaYr01heFVD44CBQXhpYWxVQ+OAgVlZQmVuZGluZ1VDIOetieetiS5cclxuICAgICAgICAgIGxldCBkYXRhcyA9IG5ldyBBcnJheTxudW1iZXI+KCk7XHJcbiAgICAgICAgICBsZXQgbGFiZWxEYXRhcyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XHJcblxyXG4gICAgICAgICAgbGV0IGlzU2hvd0VuZ2xpc2hUZXh0ID1cclxuICAgICAgICAgICAgdGhpcy52aWV3ZXIuY29tbW9uSW50ZXJmYWNlTWFuYWdlci5zaG93RW5nbGlzaFRleHQ7XHJcbiAgICAgICAgICBsZXQgcmVzdWx0TWVtYmVycyA9IG5ldyBBcnJheTxNZW1iZXJPYmplY3Q+KCk7XHJcbiAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IG1lbWJlclBvc3RSZXN1bHQubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgbGV0IG1lbWJlck5hbWUgPSBtZW1iZXJQb3N0UmVzdWx0W2pdLk1lbWJlck5hbWU7XHJcblxyXG4gICAgICAgICAgICBpZiAobWVtYmVyTmFtZSA9PT0gbWVtYmVyLm5hbWUpIHtcclxuICAgICAgICAgICAgICBkaXN0YW5jZXMucHVzaChOdW1iZXIobWVtYmVyUG9zdFJlc3VsdFtqXS5EaXN0YW5jZSkpO1xyXG5cclxuICAgICAgICAgICAgICBzd2l0Y2ggKE51bWJlcihkYXRhLnJlc3VsdFBhcmFtZXRlci52YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgUmVzdWx0UGFyYW1ldGVyVHlwZS5NYXhVQzpcclxuICAgICAgICAgICAgICAgICAgaWYgKGlzU2hvd0VuZ2xpc2hUZXh0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRQYXJhbWV0ZXJUZXh0ID0gXCJNYXhVQ1wiO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0UGFyYW1ldGVyVGV4dCA9IFwi5pyA5aSn5ZCI5oiQ5bqU5Yqb5q+UXCI7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgLy8g5pyA5aSn5ZCI5oiQ5bqU5Yqb5q+UXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY3V0bGluZU9iamVjdC5jdXJyZW50Q3V0bGluZVR5cGUgPSBDdXRsaW5lVHlwZS5VQ1JhbmdlcztcclxuICAgICAgICAgICAgICAgICAgZGF0YXMucHVzaChOdW1iZXIobWVtYmVyUG9zdFJlc3VsdFtqXS5NYXhVQykpO1xyXG4gICAgICAgICAgICAgICAgICBsYWJlbERhdGFzLnB1c2gobWVtYmVyUG9zdFJlc3VsdFtqXS5NYXhVQyk7XHJcbiAgICAgICAgICAgICAgICAgIC8vIGxldCB0ZW1wTWF4VUNzID0gW21heFVDc1swXSwgbWF4VUNzW2Rpc3RhbmNlcy5sZW5ndGggLSAxXV07XHJcbiAgICAgICAgICAgICAgICAgIC8vIG1heFVDcyA9IHRlbXBNYXhVQ3M7XHJcbiAgICAgICAgICAgICAgICAgIC8vIGxldCB0ZW1wRGlzdGFuY2VzID0gW2Rpc3RhbmNlc1swXSwgZGlzdGFuY2VzW2Rpc3RhbmNlcy5sZW5ndGggLSAxXV07XHJcbiAgICAgICAgICAgICAgICAgIC8vIGRpc3RhbmNlcyA9IHRlbXBEaXN0YW5jZXM7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBSZXN1bHRQYXJhbWV0ZXJUeXBlLkF4aWFsVUM6XHJcbiAgICAgICAgICAgICAgICAgIGlmIChpc1Nob3dFbmdsaXNoVGV4dCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0UGFyYW1ldGVyVGV4dCA9IFwiQXhpYWxVQ1wiO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0UGFyYW1ldGVyVGV4dCA9IFwi6L205ZCR5bqU5Yqb5q+UXCI7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgLy8g6L205ZCR5bqU5Yqb5q+UXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY3V0bGluZU9iamVjdC5jdXJyZW50Q3V0bGluZVR5cGUgPSBDdXRsaW5lVHlwZS5VQ1JhbmdlcztcclxuICAgICAgICAgICAgICAgICAgZGF0YXMucHVzaChOdW1iZXIobWVtYmVyUG9zdFJlc3VsdFtqXS5BeGlhbFVDKSk7XHJcbiAgICAgICAgICAgICAgICAgIGxhYmVsRGF0YXMucHVzaChtZW1iZXJQb3N0UmVzdWx0W2pdLkF4aWFsVUMpO1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgUmVzdWx0UGFyYW1ldGVyVHlwZS5ZWUJlbmRpbmdVQzpcclxuICAgICAgICAgICAgICAgICAgaWYgKGlzU2hvd0VuZ2xpc2hUZXh0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRQYXJhbWV0ZXJUZXh0ID0gXCJZWUJlbmRpbmdVQ1wiO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0UGFyYW1ldGVyVGV4dCA9IFwi5bGA6YOoWei9tOW8r+absuW6lOWKm+avlFwiO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIC8vIOWxgOmDqFnovbTlvK/mm7LlupTlipvmr5RcclxuICAgICAgICAgICAgICAgICAgdGhpcy5jdXRsaW5lT2JqZWN0LmN1cnJlbnRDdXRsaW5lVHlwZSA9IEN1dGxpbmVUeXBlLlVDUmFuZ2VzO1xyXG4gICAgICAgICAgICAgICAgICBkYXRhcy5wdXNoKE51bWJlcihtZW1iZXJQb3N0UmVzdWx0W2pdLllZQmVuZGluZ1VDKSk7XHJcbiAgICAgICAgICAgICAgICAgIGxhYmVsRGF0YXMucHVzaChtZW1iZXJQb3N0UmVzdWx0W2pdLllZQmVuZGluZ1VDKTtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFJlc3VsdFBhcmFtZXRlclR5cGUuWlpCZW5kaW5nVUM6XHJcbiAgICAgICAgICAgICAgICAgIGlmIChpc1Nob3dFbmdsaXNoVGV4dCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0UGFyYW1ldGVyVGV4dCA9IFwiWlpCZW5kaW5nVUNcIjtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdFBhcmFtZXRlclRleHQgPSBcIuWxgOmDqFrovbTlvK/mm7LlupTlipvmr5RcIjtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAvLyDlsYDpg6ha6L205byv5puy5bqU5Yqb5q+UXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY3V0bGluZU9iamVjdC5jdXJyZW50Q3V0bGluZVR5cGUgPSBDdXRsaW5lVHlwZS5VQ1JhbmdlcztcclxuICAgICAgICAgICAgICAgICAgZGF0YXMucHVzaChOdW1iZXIobWVtYmVyUG9zdFJlc3VsdFtqXS5aWkJlbmRpbmdVQykpO1xyXG4gICAgICAgICAgICAgICAgICBsYWJlbERhdGFzLnB1c2gobWVtYmVyUG9zdFJlc3VsdFtqXS5aWkJlbmRpbmdVQyk7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBSZXN1bHRQYXJhbWV0ZXJUeXBlLlRvdGFsU2hlYXJVQzpcclxuICAgICAgICAgICAgICAgICAgaWYgKGlzU2hvd0VuZ2xpc2hUZXh0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRQYXJhbWV0ZXJUZXh0ID0gXCJUb3RhbFNoZWFyVUNcIjtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdFBhcmFtZXRlclRleHQgPSBcIuacgOWkp+WJquWIh+W6lOWKm+avlFwiO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIC8vIOacgOWkp+WJquWIh+W6lOWKm+avlFxyXG4gICAgICAgICAgICAgICAgICBpZiAoIXRoaXMucG9zdFJlc3VsdEVsZW1lbnRVQykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi5rKh5pyJ6I635Y+W5YiwRWxlbWVudFVD6KGo55qE5pWw5o2uLlwiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgdGhpcy5jdXRsaW5lT2JqZWN0LmN1cnJlbnRDdXRsaW5lVHlwZSA9IEN1dGxpbmVUeXBlLlVDUmFuZ2VzO1xyXG4gICAgICAgICAgICAgICAgICBkYXRhcy5wdXNoKE51bWJlcihtZW1iZXJQb3N0UmVzdWx0W2pdLlRvdGFsU2hlYXJVQykpO1xyXG4gICAgICAgICAgICAgICAgICBsYWJlbERhdGFzLnB1c2gobWVtYmVyUG9zdFJlc3VsdFtqXS5Ub3RhbFNoZWFyVUMpO1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgUmVzdWx0UGFyYW1ldGVyVHlwZS5Dcml0aWNhbExDOlxyXG4gICAgICAgICAgICAgICAgICBpZiAoaXNTaG93RW5nbGlzaFRleHQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdFBhcmFtZXRlclRleHQgPSBcIkNyaXRpY2FsTENcIjtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdFBhcmFtZXRlclRleHQgPSBcIuacgOWNsemZqeW3peWGtVwiO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIC8vIOacgOWNsemZqeW3peWGtVxyXG4gICAgICAgICAgICAgICAgICBpZiAoIXRoaXMucG9zdFJlc3VsdEVsZW1lbnRVQykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi5rKh5pyJ6I635Y+W5YiwRWxlbWVudFVD6KGo55qE5pWw5o2uLlwiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgdGhpcy5jdXRsaW5lT2JqZWN0LmN1cnJlbnRDdXRsaW5lVHlwZSA9IEN1dGxpbmVUeXBlLlVDUmFuZ2VzO1xyXG4gICAgICAgICAgICAgICAgICBkYXRhcy5wdXNoKE51bWJlcihtZW1iZXJQb3N0UmVzdWx0W2pdLk1heFVDKSk7XHJcbiAgICAgICAgICAgICAgICAgIGxhYmVsRGF0YXMucHVzaChsb2FkQ29uZGl0aW9uTmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBSZXN1bHRQYXJhbWV0ZXJUeXBlLkNyaXRpY2FsTENfTWF4VUM6XHJcbiAgICAgICAgICAgICAgICAgIGlmIChpc1Nob3dFbmdsaXNoVGV4dCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0UGFyYW1ldGVyVGV4dCA9IFwiQ3JpdGljYWxMQ19NYXhVQ1wiO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0UGFyYW1ldGVyVGV4dCA9IFwi5pyA5Y2x6Zmp5bel5Ya1K+W6lOWKm+avlFwiO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIC8vIOacgOWNsemZqeW3peWGtSArIOW6lOWKm+avlC5cclxuICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnBvc3RSZXN1bHRFbGVtZW50VUMpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIuayoeacieiOt+WPluWIsEVsZW1lbnRVQ+ihqOeahOaVsOaNri5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY3V0bGluZU9iamVjdC5jdXJyZW50Q3V0bGluZVR5cGUgPSBDdXRsaW5lVHlwZS5VQ1JhbmdlcztcclxuICAgICAgICAgICAgICAgICAgZGF0YXMucHVzaChOdW1iZXIobWVtYmVyUG9zdFJlc3VsdFtqXS5NYXhVQykpO1xyXG4gICAgICAgICAgICAgICAgICBsYWJlbERhdGFzLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgbG9hZENvbmRpdGlvbk5hbWUgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgXCIgKFwiICtcclxuICAgICAgICAgICAgICAgICAgICAgIE51bWJlcihtZW1iZXJQb3N0UmVzdWx0W2pdLk1heFVDKS50b0ZpeGVkKDMpICtcclxuICAgICAgICAgICAgICAgICAgICAgIFwiKVwiXHJcbiAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBSZXN1bHRQYXJhbWV0ZXJUeXBlLkFYU3RyZXNzOlxyXG4gICAgICAgICAgICAgICAgICBpZiAoaXNTaG93RW5nbGlzaFRleHQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdFBhcmFtZXRlclRleHQgPSBcIkFYU3RyZXNzXCI7XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRQYXJhbWV0ZXJUZXh0ID0gXCLovbTlkJHlupTliptcIjtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAvLyDovbTlkJHlupTliptcclxuICAgICAgICAgICAgICAgICAgdGhpcy5jdXRsaW5lT2JqZWN0LmN1cnJlbnRDdXRsaW5lVHlwZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgQ3V0bGluZVR5cGUuU3RyZXNzTGV2ZWxzO1xyXG4gICAgICAgICAgICAgICAgICBkYXRhcy5wdXNoKE51bWJlcihtZW1iZXJQb3N0UmVzdWx0W2pdLkFYU3RyZXNzKSk7XHJcbiAgICAgICAgICAgICAgICAgIGxhYmVsRGF0YXMucHVzaChtZW1iZXJQb3N0UmVzdWx0W2pdLkFYU3RyZXNzKTtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFJlc3VsdFBhcmFtZXRlclR5cGUuQVhTdHJlc3NfWWFZaW5nTGk6XHJcbiAgICAgICAgICAgICAgICAgIGlmIChpc1Nob3dFbmdsaXNoVGV4dCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0UGFyYW1ldGVyVGV4dCA9IFwi5Y6L5bqU5YqbXCI7XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRQYXJhbWV0ZXJUZXh0ID0gXCLljovlupTliptcIjtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAvLyDljovlupTliptcclxuICAgICAgICAgICAgICAgICAgdGhpcy5jdXRsaW5lT2JqZWN0LmN1cnJlbnRDdXRsaW5lVHlwZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgQ3V0bGluZVR5cGUuU3RyZXNzTGV2ZWxzO1xyXG4gICAgICAgICAgICAgICAgICBkYXRhcy5wdXNoKE51bWJlcihtZW1iZXJQb3N0UmVzdWx0W2pdLkFYU3RyZXNzKSk7XHJcbiAgICAgICAgICAgICAgICAgIGxhYmVsRGF0YXMucHVzaChtZW1iZXJQb3N0UmVzdWx0W2pdLkFYU3RyZXNzKTtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFJlc3VsdFBhcmFtZXRlclR5cGUuQVhTdHJlc3NfTGFZaW5nTGk6XHJcbiAgICAgICAgICAgICAgICAgIGlmIChpc1Nob3dFbmdsaXNoVGV4dCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0UGFyYW1ldGVyVGV4dCA9IFwi5ouJ5bqU5YqbXCI7XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRQYXJhbWV0ZXJUZXh0ID0gXCLmi4nlupTliptcIjtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAvLyDmi4nlupTliptcclxuICAgICAgICAgICAgICAgICAgdGhpcy5jdXRsaW5lT2JqZWN0LmN1cnJlbnRDdXRsaW5lVHlwZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgQ3V0bGluZVR5cGUuU3RyZXNzTGV2ZWxzO1xyXG4gICAgICAgICAgICAgICAgICBkYXRhcy5wdXNoKE51bWJlcihtZW1iZXJQb3N0UmVzdWx0W2pdLkFYU3RyZXNzKSk7XHJcbiAgICAgICAgICAgICAgICAgIGxhYmVsRGF0YXMucHVzaChtZW1iZXJQb3N0UmVzdWx0W2pdLkFYU3RyZXNzKTtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFJlc3VsdFBhcmFtZXRlclR5cGUuWVlCZW5kaW5nU3RyZXNzOlxyXG4gICAgICAgICAgICAgICAgICBpZiAoaXNTaG93RW5nbGlzaFRleHQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdFBhcmFtZXRlclRleHQgPSBcIllZQmVuZGluZ1N0cmVzc1wiO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0UGFyYW1ldGVyVGV4dCA9IFwi5bGA6YOoWei9tOW8r+absuW6lOWKm1wiO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIC8vIOWxgOmDqFnovbTlvK/mm7LlupTliptcclxuICAgICAgICAgICAgICAgICAgdGhpcy5jdXRsaW5lT2JqZWN0LmN1cnJlbnRDdXRsaW5lVHlwZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgQ3V0bGluZVR5cGUuU3RyZXNzTGV2ZWxzO1xyXG4gICAgICAgICAgICAgICAgICBkYXRhcy5wdXNoKE51bWJlcihtZW1iZXJQb3N0UmVzdWx0W2pdLllZQmVuZGluZ1N0cmVzcykpO1xyXG4gICAgICAgICAgICAgICAgICBsYWJlbERhdGFzLnB1c2gobWVtYmVyUG9zdFJlc3VsdFtqXS5ZWUJlbmRpbmdTdHJlc3MpO1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgUmVzdWx0UGFyYW1ldGVyVHlwZS5aWkJlbmRpbmdTdHJlc3M6XHJcbiAgICAgICAgICAgICAgICAgIGlmIChpc1Nob3dFbmdsaXNoVGV4dCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0UGFyYW1ldGVyVGV4dCA9IFwiWlpCZW5kaW5nU3RyZXNzXCI7XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRQYXJhbWV0ZXJUZXh0ID0gXCLlsYDpg6ha6L205byv5puy5bqU5YqbXCI7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgLy8g5bGA6YOoWui9tOW8r+absuW6lOWKm1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmN1dGxpbmVPYmplY3QuY3VycmVudEN1dGxpbmVUeXBlID1cclxuICAgICAgICAgICAgICAgICAgICBDdXRsaW5lVHlwZS5TdHJlc3NMZXZlbHM7XHJcbiAgICAgICAgICAgICAgICAgIGRhdGFzLnB1c2goTnVtYmVyKG1lbWJlclBvc3RSZXN1bHRbal0uWlpCZW5kaW5nU3RyZXNzKSk7XHJcbiAgICAgICAgICAgICAgICAgIGxhYmVsRGF0YXMucHVzaChtZW1iZXJQb3N0UmVzdWx0W2pdLlpaQmVuZGluZ1N0cmVzcyk7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBSZXN1bHRQYXJhbWV0ZXJUeXBlLllTaGVhclN0cmVzczpcclxuICAgICAgICAgICAgICAgICAgaWYgKGlzU2hvd0VuZ2xpc2hUZXh0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRQYXJhbWV0ZXJUZXh0ID0gXCJZU2hlYXJTdHJlc3NcIjtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdFBhcmFtZXRlclRleHQgPSBcIuWxgOmDqFnovbTliarlupTliptcIjtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAvLyDlsYDpg6hZ6L205Ymq5bqU5YqbXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY3V0bGluZU9iamVjdC5jdXJyZW50Q3V0bGluZVR5cGUgPVxyXG4gICAgICAgICAgICAgICAgICAgIEN1dGxpbmVUeXBlLlN0cmVzc0xldmVscztcclxuICAgICAgICAgICAgICAgICAgZGF0YXMucHVzaChOdW1iZXIobWVtYmVyUG9zdFJlc3VsdFtqXS5ZU2hlYXJTdHJlc3MpKTtcclxuICAgICAgICAgICAgICAgICAgbGFiZWxEYXRhcy5wdXNoKG1lbWJlclBvc3RSZXN1bHRbal0uWVNoZWFyU3RyZXNzKTtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFJlc3VsdFBhcmFtZXRlclR5cGUuWlNoZWFyU3RyZXNzOlxyXG4gICAgICAgICAgICAgICAgICBpZiAoaXNTaG93RW5nbGlzaFRleHQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdFBhcmFtZXRlclRleHQgPSBcIlpTaGVhclN0cmVzc1wiO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0UGFyYW1ldGVyVGV4dCA9IFwi5bGA6YOoWui9tOWJquW6lOWKm1wiO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIC8vIOWxgOmDqFrovbTliarlupTliptcclxuICAgICAgICAgICAgICAgICAgdGhpcy5jdXRsaW5lT2JqZWN0LmN1cnJlbnRDdXRsaW5lVHlwZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgQ3V0bGluZVR5cGUuU3RyZXNzTGV2ZWxzO1xyXG4gICAgICAgICAgICAgICAgICBkYXRhcy5wdXNoKE51bWJlcihtZW1iZXJQb3N0UmVzdWx0W2pdLlpTaGVhclN0cmVzcykpO1xyXG4gICAgICAgICAgICAgICAgICBsYWJlbERhdGFzLnB1c2gobWVtYmVyUG9zdFJlc3VsdFtqXS5aU2hlYXJTdHJlc3MpO1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgUmVzdWx0UGFyYW1ldGVyVHlwZS5BeGlhbExvYWQ6XHJcbiAgICAgICAgICAgICAgICAgIGlmIChpc1Nob3dFbmdsaXNoVGV4dCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0UGFyYW1ldGVyVGV4dCA9IFwiQXhpYWxMb2FkXCI7XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRQYXJhbWV0ZXJUZXh0ID0gXCLovbTlkJHlhoXliptcIjtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAvLyDovbTlkJHlhoXlipss55yLU0FDU+aViOaenOWPqumcgOimgeWBmuagh+etvuWwseihjOS6hlxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmN1dGxpbmVPYmplY3QuY3VycmVudEN1dGxpbmVUeXBlID1cclxuICAgICAgICAgICAgICAgICAgICBDdXRsaW5lVHlwZS5TdHJlc3NMZXZlbHM7XHJcbiAgICAgICAgICAgICAgICAgIGRhdGFzLnB1c2goTnVtYmVyKG1lbWJlclBvc3RSZXN1bHRbal0uQXhpYWxMb2FkKSk7XHJcbiAgICAgICAgICAgICAgICAgIGxhYmVsRGF0YXMucHVzaChtZW1iZXJQb3N0UmVzdWx0W2pdLkF4aWFsTG9hZCk7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBSZXN1bHRQYXJhbWV0ZXJUeXBlLkF4aWFsTG9hZF9ZYU5laUxpOlxyXG4gICAgICAgICAgICAgICAgICBpZiAoaXNTaG93RW5nbGlzaFRleHQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdFBhcmFtZXRlclRleHQgPSBcIuWOi+WGheWKm1wiO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0UGFyYW1ldGVyVGV4dCA9IFwi5Y6L5YaF5YqbXCI7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgLy8g5Y6L5YaF5YqbLOeci1NBQ1PmlYjmnpzlj6rpnIDopoHlgZrmoIfnrb7lsLHooYzkuoZcclxuICAgICAgICAgICAgICAgICAgdGhpcy5jdXRsaW5lT2JqZWN0LmN1cnJlbnRDdXRsaW5lVHlwZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgQ3V0bGluZVR5cGUuU3RyZXNzTGV2ZWxzO1xyXG4gICAgICAgICAgICAgICAgICBkYXRhcy5wdXNoKE51bWJlcihtZW1iZXJQb3N0UmVzdWx0W2pdLkF4aWFsTG9hZCkpO1xyXG4gICAgICAgICAgICAgICAgICBsYWJlbERhdGFzLnB1c2gobWVtYmVyUG9zdFJlc3VsdFtqXS5BeGlhbExvYWQpO1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgUmVzdWx0UGFyYW1ldGVyVHlwZS5BeGlhbExvYWRfTGFOZWlMaTpcclxuICAgICAgICAgICAgICAgICAgaWYgKGlzU2hvd0VuZ2xpc2hUZXh0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRQYXJhbWV0ZXJUZXh0ID0gXCLmi4nlhoXliptcIjtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdFBhcmFtZXRlclRleHQgPSBcIuaLieWGheWKm1wiO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIC8vIOaLieWGheWKmyznnItTQUNT5pWI5p6c5Y+q6ZyA6KaB5YGa5qCH562+5bCx6KGM5LqGXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY3V0bGluZU9iamVjdC5jdXJyZW50Q3V0bGluZVR5cGUgPVxyXG4gICAgICAgICAgICAgICAgICAgIEN1dGxpbmVUeXBlLlN0cmVzc0xldmVscztcclxuICAgICAgICAgICAgICAgICAgZGF0YXMucHVzaChOdW1iZXIobWVtYmVyUG9zdFJlc3VsdFtqXS5BeGlhbExvYWQpKTtcclxuICAgICAgICAgICAgICAgICAgbGFiZWxEYXRhcy5wdXNoKG1lbWJlclBvc3RSZXN1bHRbal0uQXhpYWxMb2FkKTtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFJlc3VsdFBhcmFtZXRlclR5cGUuWVlCZW5kaW5nTW9tZW50OlxyXG4gICAgICAgICAgICAgICAgICBpZiAoaXNTaG93RW5nbGlzaFRleHQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdFBhcmFtZXRlclRleHQgPSBcIllZQmVuZGluZ01vbWVudFwiO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0UGFyYW1ldGVyVGV4dCA9IFwi5bGA6YOoWei9tOW8r+efqVwiO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIC8vIOWxgOmDqFnovbTlvK/nn6lcclxuICAgICAgICAgICAgICAgICAgdGhpcy5jdXRsaW5lT2JqZWN0LmN1cnJlbnRDdXRsaW5lVHlwZSA9IEN1dGxpbmVUeXBlLlVDUmFuZ2VzO1xyXG4gICAgICAgICAgICAgICAgICBkYXRhcy5wdXNoKE51bWJlcihtZW1iZXJQb3N0UmVzdWx0W2pdLllZQmVuZGluZ01vbWVudCkpO1xyXG4gICAgICAgICAgICAgICAgICBsYWJlbERhdGFzLnB1c2gobWVtYmVyUG9zdFJlc3VsdFtqXS5ZWUJlbmRpbmdNb21lbnQpO1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgUmVzdWx0UGFyYW1ldGVyVHlwZS5aWkJlbmRpbmdNb21lbnQ6XHJcbiAgICAgICAgICAgICAgICAgIGlmIChpc1Nob3dFbmdsaXNoVGV4dCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0UGFyYW1ldGVyVGV4dCA9IFwiWlpCZW5kaW5nTW9tZW50XCI7XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRQYXJhbWV0ZXJUZXh0ID0gXCLlsYDpg6ha6L205byv55+pXCI7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgLy8g5bGA6YOoWui9tOW8r+efqVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmN1dGxpbmVPYmplY3QuY3VycmVudEN1dGxpbmVUeXBlID0gQ3V0bGluZVR5cGUuVUNSYW5nZXM7XHJcbiAgICAgICAgICAgICAgICAgIGRhdGFzLnB1c2goTnVtYmVyKG1lbWJlclBvc3RSZXN1bHRbal0uWlpCZW5kaW5nTW9tZW50KSk7XHJcbiAgICAgICAgICAgICAgICAgIGxhYmVsRGF0YXMucHVzaChtZW1iZXJQb3N0UmVzdWx0W2pdLlpaQmVuZGluZ01vbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIOe7mOWItuagh+etvi5cclxuICAgICAgICAgIGlmIChkYXRhLmRpc3BsYXlMYWJlbHMudmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5pbml0RHJhd1N2ZyhcclxuICAgICAgICAgICAgICBtZW1iZXIsXHJcbiAgICAgICAgICAgICAgZGF0YXMsXHJcbiAgICAgICAgICAgICAgbGFiZWxEYXRhcyxcclxuICAgICAgICAgICAgICBkaXN0YW5jZXMsXHJcbiAgICAgICAgICAgICAgbWluTWFnbml0dWRlXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgZGlzdGFuY2VzWzBdID0gMDtcclxuICAgICAgICAgIGRpc3RhbmNlc1tkaXN0YW5jZXMubGVuZ3RoIC0gMV0gPSBtZW1iZXIuZ2V0TWVtYmVyTGVuZ3RoKCk7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuY3V0bGluZU9iamVjdC5jdXJyZW50Q3V0bGluZVR5cGUgPT09IEN1dGxpbmVUeXBlLlVDUmFuZ2VzKSB7XHJcbiAgICAgICAgICAgIGxldCBjb2xvcnMgPSB0aGlzLmN1dGxpbmVPYmplY3QuZ2V0Q29sb3JzQnlEYXRhcyhcclxuICAgICAgICAgICAgICBkYXRhcyxcclxuICAgICAgICAgICAgICB0aGlzLmN1dGxpbmVPYmplY3QudWNSYW5nZXMsXHJcbiAgICAgICAgICAgICAgdGhpcy5jdXRsaW5lT2JqZWN0LnVjUmFuZ2VzQ29sb3JzXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICByZXN1bHRNZW1iZXJzID1cclxuICAgICAgICAgICAgICB0aGlzLnZpZXdlci5wcm9jZXNzLmNsb3VkTWVtYmVyVHJhbnNmb3JtTWFuYWdlci5jcmVhdGVDbG91ZE1lbWJlcihcclxuICAgICAgICAgICAgICAgIG1lbWJlcixcclxuICAgICAgICAgICAgICAgIFsuLi5kaXN0YW5jZXNdLFxyXG4gICAgICAgICAgICAgICAgY29sb3JzLFxyXG4gICAgICAgICAgICAgICAgY29sb3JDb2RlLFxyXG4gICAgICAgICAgICAgICAgYmxlbmRSZW5kZXJlZENvbG9yXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMuY3V0bGluZU9iamVjdC5jdXJyZW50Q3V0bGluZVR5cGUgPT09IEN1dGxpbmVUeXBlLlN0cmVzc0xldmVsc1xyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGxldCBjb2xvcnMgPSB0aGlzLmN1dGxpbmVPYmplY3QuZ2V0Q29sb3JzQnlEYXRhcyhcclxuICAgICAgICAgICAgICBkYXRhcyxcclxuICAgICAgICAgICAgICB0aGlzLmN1dGxpbmVPYmplY3Quc3RyZXNzTGV2ZWxzQWN0dWFsLFxyXG4gICAgICAgICAgICAgIHRoaXMuY3V0bGluZU9iamVjdC5zdHJlc3NMZXZlbHNDb2xvcnNcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIHJlc3VsdE1lbWJlcnMgPVxyXG4gICAgICAgICAgICAgIHRoaXMudmlld2VyLnByb2Nlc3MuY2xvdWRNZW1iZXJUcmFuc2Zvcm1NYW5hZ2VyLmNyZWF0ZUNsb3VkTWVtYmVyKFxyXG4gICAgICAgICAgICAgICAgbWVtYmVyLFxyXG4gICAgICAgICAgICAgICAgWy4uLmRpc3RhbmNlc10sXHJcbiAgICAgICAgICAgICAgICBjb2xvcnMsXHJcbiAgICAgICAgICAgICAgICBjb2xvckNvZGUsXHJcbiAgICAgICAgICAgICAgICBibGVuZFJlbmRlcmVkQ29sb3JcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGlmIChyZXN1bHRNZW1iZXJzICYmIHJlc3VsdE1lbWJlcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAvLyBtZW1iZXIudmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBsZXQgaXJvID0gdGhpcy52aWV3ZXIuZmluZEluc3RhbmNlT2JqZWN0KG1lbWJlcik7XHJcbiAgICAgICAgICAgIGlmIChpcm8pIHtcclxuICAgICAgICAgICAgICBpcm8udmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHJlc3VsdE1lbWJlcnMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICB0aGlzLnZpZXdlci5wcm9jZXNzLmFkZFJlbmRlck9iamVjdChcclxuICAgICAgICAgICAgICAgIHRoaXMucG9zdFJlc3VsdENsb3VkT2JqZWN0LFxyXG4gICAgICAgICAgICAgICAgcmVzdWx0TWVtYmVyc1tqXVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgcmVzdWx0TWVtYmVyc1tqXS5zZXROZWVkVXBkYXRlKCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5jbG91ZE1lbWJlcnMucHVzaChyZXN1bHRNZW1iZXJzW2pdKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5tZW1iZXJzLnB1c2gobWVtYmVyKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyAgIHRoaXMudmlld2VyLmFkZFN0YXRlKG9sZE9iaiwgbmV3T2JqLCAoc3RhdGVJdGVtKSA9PiB7XHJcbiAgICAvLyAgICAgbGV0IG9iaiA9IHN0YXRlSXRlbS5uZXdPYmoub2JqO1xyXG4gICAgLy8gICAgIG9iai5vZmZzZXRzID0gc3RhdGVJdGVtLm5ld09iai5vZmZzZXRzO1xyXG4gICAgLy8gICAgIG9iai5idXNpbmVzc1N0YXRlID0gQnVzaW5lc3NTdGF0ZS5FZGl0aW5nO1xyXG5cclxuICAgIC8vICAgICBvYmouc2V0TmVlZFVwZGF0ZSgpO1xyXG4gICAgLy8gICAgIHRoaXMudmlld2VyLnVwZGF0ZURpc3BsYXkoKTtcclxuICAgIC8vICAgfSk7XHJcblxyXG4gICAgdGhpcy52aWV3ZXIuc2VsZWN0aW9uTWFuYWdlci5jbGVhckFsbFNlbGVjdGlvbkFuZEhpZ2hsaWdodCgpO1xyXG4gICAgdGhpcy52aWV3ZXIudXBkYXRlRGlzcGxheSgpO1xyXG4gICAgdGhpcy5jYWVPYmplY3RTZWxlY3Rvci5zZWxlY3RlZFJlbmRlck9iamVjdHMuY2xlYXIoKTtcclxuICAgIHRoaXMudXBkYXRlUGFuZWwoKTtcclxuXHJcbiAgICBpZiAoZGF0YS5kaXNwbGF5Q3V0bGluZS52YWx1ZSAmJiBkYXRhLmNvbG9yQ29kZS52YWx1ZSkge1xyXG4gICAgICB0aGlzLnJlZnJlc2hDdXRsaW5lKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBzdG9yZS5jb21taXQoXCJzZXRMZWdlbmRcIiwge30pO1xyXG4gICAgICBMZWdlbmRNYW5hZ2UuZGVzdG9yeSh0aGlzLmVsZW1lbnRLZXkpO1xyXG4gICAgfVxyXG5cclxuICAgIHBvc3RJbnRlcmZhY2VNYW5hZ2VyLmFjdGl2ZV9wb3N0UmVzdWx0ID0gdHJ1ZTtcclxuICAgIGRhdGEudGlwLnZhbHVlID0gMDtcclxuXHJcbiAgICAvLyDmm7TmlrDlt6bkvqfnu5PmnoTmoJFcclxuICAgIHN0b3JlLmNvbW1pdChcInN0cnVjdHVyZVRyZWUvdXBkYXRlVHJlZURhdGFcIiwgW1xyXG4gICAgICB0aGlzLnZpZXdlci5zdHJ1Y3R1cmVUcmVlTWFuYWdlci5yb290Tm9kZSxcclxuICAgIF0pO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlUGFuZWwoKSB7fVxyXG5cclxuICBnZXRDb2xvckJ5SW5kZXgoY29sb3JzOiBudW1iZXJbXSwgaW5kZXg6IG51bWJlcikge1xyXG4gICAgLy9cclxuICAgIGxldCBjb2xvciA9IGNvbG9ycy5zbGljZSg0ICogaW5kZXgsIDQgKiAoaW5kZXggKyAxKSk7XHJcbiAgICByZXR1cm4gY29sb3I7XHJcbiAgfVxyXG5cclxuICByZXNldFNjZW5lKCkge1xyXG4gICAgTGVnZW5kTWFuYWdlLmRlc3RvcnkodGhpcy5lbGVtZW50S2V5KTtcclxuICAgIHRoaXMuY2xlYXJTdmcoKTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5tZW1iZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIC8vIHRoaXMubWVtYmVyc1tpXS52aXNpYmxlID0gdHJ1ZTtcclxuICAgICAgbGV0IGlybyA9IHRoaXMudmlld2VyLmZpbmRJbnN0YW5jZU9iamVjdCh0aGlzLm1lbWJlcnNbaV0pO1xyXG4gICAgICBpZiAoaXJvKSB7XHJcbiAgICAgICAgaXJvLnZpc2libGUgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNsb3VkTWVtYmVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICB0aGlzLnZpZXdlci5wcm9jZXNzLnJlbW92ZVJlbmRlck9iamVjdCh0aGlzLmNsb3VkTWVtYmVyc1tpXSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMucG9zdFJlc3VsdENsb3VkT2JqZWN0KSB7XHJcbiAgICAgIHRoaXMucG9zdFJlc3VsdENsb3VkT2JqZWN0LmRlbGV0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubWVtYmVycyA9IFtdO1xyXG4gICAgdGhpcy5jbG91ZE1lbWJlcnMgPSBbXTtcclxuXHJcbiAgICBsZXQgcG9zdEludGVyZmFjZU1hbmFnZXIgPSB0aGlzLnZpZXdlci5wb3N0SW50ZXJmYWNlTWFuYWdlcjtcclxuICAgIHBvc3RJbnRlcmZhY2VNYW5hZ2VyLmFjdGl2ZV9wb3N0UmVzdWx0ID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICByZWZyZXNoQ3V0bGluZSgpIHtcclxuICAgIC8vXHJcbiAgICBsZXQgY29tcG9uZW50ID0gTGVnZW5kTWFuYWdlLmNyZWF0ZShcclxuICAgICAgdGhpcy5lbGVtZW50S2V5LFxyXG4gICAgICB0aGlzLmN1dGxpbmVPYmplY3QuZ2VDdXRsaW5lKCksXHJcbiAgICAgIFwiXCIsXHJcbiAgICAgIFwiXCIsXHJcbiAgICAgIFwiXCJcclxuICAgICk7XHJcbiAgICBpZiAodGhpcy52aWV3ZXIuY29tbW9uSW50ZXJmYWNlTWFuYWdlci5zaG93RW5nbGlzaFRleHQpIHtcclxuICAgICAgY29tcG9uZW50LnRpdGxlID0gXCJNZW1iZXJSZXN1bHTvvJpcIiArIHRoaXMucmVzdWx0UGFyYW1ldGVyVGV4dDtcclxuICAgICAgY29tcG9uZW50LmxlZnRUZXh0ID0gXCJDb2xvclwiO1xyXG4gICAgICBjb21wb25lbnQucmlnaHRUZXh0ID0gXCJSYW5nZVwiO1xyXG5cclxuICAgICAgLy8gc3RvcmUuY29tbWl0KFwic2V0TGVnZW5kVGl0bGVcIiwgXCJNZW1iZXJSZXN1bHTvvJpcIiArIHRoaXMucmVzdWx0UGFyYW1ldGVyVGV4dCk7XHJcbiAgICAgIC8vIHN0b3JlLmNvbW1pdChcInNldExlZ2VuZExlZnRUZXh0XCIsIFwiQ29sb3JcIik7XHJcbiAgICAgIC8vIHN0b3JlLmNvbW1pdChcclxuICAgICAgLy8gICBcInNldExlZ2VuZFJpZ2h0VGV4dFwiLFxyXG4gICAgICAvLyAgIFwiUmFuZ2VcIlxyXG4gICAgICAvLyApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29tcG9uZW50LnRpdGxlID0gXCLmnoTku7bnu5PmnpzvvJpcIiArIHRoaXMucmVzdWx0UGFyYW1ldGVyVGV4dDtcclxuICAgICAgY29tcG9uZW50LmxlZnRUZXh0ID0gXCLpopzoibJcIjtcclxuICAgICAgY29tcG9uZW50LnJpZ2h0VGV4dCA9IFwi6IyD5Zu0XCI7XHJcblxyXG4gICAgICAvLyBzdG9yZS5jb21taXQoXCJzZXRMZWdlbmRUaXRsZVwiLCBcIuaehOS7tue7k+aenO+8mlwiICsgdGhpcy5yZXN1bHRQYXJhbWV0ZXJUZXh0KTtcclxuICAgICAgLy8gc3RvcmUuY29tbWl0KFwic2V0TGVnZW5kTGVmdFRleHRcIiwgXCLpopzoibJcIik7XHJcbiAgICAgIC8vIHN0b3JlLmNvbW1pdChcInNldExlZ2VuZFJpZ2h0VGV4dFwiLCBcIuiMg+WbtFwiKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQTRCQTtBQUFBO0FBeUNBO0FBQUE7QUF4Q0E7QUFNQTtBQUVBO0FBR0E7QUFFQTtBQUtBO0FBSUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUVBOztBQUlBO0FBRUE7QUFDQTtBQUdBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUlBO0FBS0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFPQTtBQUNBO0FBbUNBO0FBQ0E7QUFJQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFHQTtBQUNBOztBQVFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUVBO0FBQ0E7QUFHQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUdBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUdBO0FBSUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFPQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFLQTs7QUFHQTtBQUNBO0FBQ0E7OztBQUlBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBR0E7QUFDQTtBQUNBO0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBTUE7QUFBQTtBQUlBO0FBRUE7QUFDQTs7QUFHQTs7QUFFQTtBQUVBO0FBT0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBOzs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUtBOztBQUdBO0FBQ0E7QUFDQTs7O0FBSUE7QUFDQTtBQUNBO0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUdBO0FBTUE7QUFBQTtBQUlBO0FBRUE7QUFDQTs7O0FBR0E7QUFFQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBRUE7O0FBQ0E7QUFBQTtBQUNBOzs7Ozs7Ozs7Ozs7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBSUE7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUdBO0FBT0E7O0FBQ0E7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7O0FBR0E7QUFFQTtBQUNBO0FBRUE7QUFHQTtBQUVBO0FBRUE7QUFFQTtBQUdBO0FBTUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBOztBQUNBO0FBQUE7QUFDQTs7Ozs7Ozs7Ozs7OztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUdBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTs7QUFJQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUdBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUdBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUdBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7OztBQU1BO0FBQ0E7O0FBU0E7QUFDQTtBQUVBO0FBQ0E7QUFNQTtBQVFBO0FBR0E7QUFNQTs7QUFVQTtBQUVBO0FBQ0E7QUFDQTs7QUFHQTtBQUNBO0FBSUE7QUFDQTs7QUFHQTs7Ozs7QUFlQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBOztBQUdBO0FBQ0E7QUFHQTtBQUdBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBOzs7QUFJQTtBQUNBOztBQUdBO0FBQ0E7O0FBR0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQVFBO0FBQ0E7QUFDQTtBQUNBOztBQU1BO0FBQ0E7QUFBQTs7O0EiLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./packages/caeDesign/src/viewerWrapper/commands/aftertreatment/postResultCloud/commandPostResultCloud.ts\n");
|
|
5799
|
+
eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__, exports, __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\"), __webpack_require__(/*! ../../../../gsDevFx/operators/cameraMouse */ \"./packages/caeDesign/src/gsDevFx/operators/cameraMouse.ts\"), __webpack_require__(/*! ../../../../gsDevFx/operators/cAEObjectPreSelector */ \"./packages/caeDesign/src/gsDevFx/operators/cAEObjectPreSelector.ts\"), __webpack_require__(/*! ../../../../gsDevFx/operators/caeObjectSelector */ \"./packages/caeDesign/src/gsDevFx/operators/caeObjectSelector.ts\"), __webpack_require__(/*! ../../../../gsDevFx/commands/commandSelect */ \"./packages/caeDesign/src/gsDevFx/commands/commandSelect.ts\"), __webpack_require__(/*! ../../commandComponent */ \"./packages/caeDesign/src/viewerWrapper/commands/commandComponent.ts\"), __webpack_require__(/*! ./postResultCloudConfig */ \"./packages/caeDesign/src/viewerWrapper/commands/aftertreatment/postResultCloud/postResultCloudConfig.ts\"), __webpack_require__(/*! gs-ceec-design */ \"./packages/ceecDesign/src/index.ts\"), __webpack_require__(/*! ../../../../store */ \"./packages/caeDesign/src/store/index.ts\"), __webpack_require__(/*! gs-ceec-design */ \"./packages/ceecDesign/src/index.ts\"), __webpack_require__(/*! ../../../../gsDevFx/objects/pretreatmentObjects/cutlinePostMemberResultObject */ \"./packages/caeDesign/src/gsDevFx/objects/pretreatmentObjects/cutlinePostMemberResultObject.ts\"), __webpack_require__(/*! gs-bim-air */ \"./node_modules/gs-bim-air/lib/BimAir.umd.min.js\"), __webpack_require__(/*! gs-ceec-design */ \"./packages/ceecDesign/src/index.ts\"), __webpack_require__(/*! ../../../../gsDevFx/managers/interfaceManagers/commonInterfaceManager */ \"./packages/caeDesign/src/gsDevFx/managers/interfaceManagers/commonInterfaceManager.ts\"), __webpack_require__(/*! ../../commandUtilities/commandUtilities */ \"./packages/caeDesign/src/viewerWrapper/commands/commandUtilities/commandUtilities.ts\"), __webpack_require__(/*! element-ui */ \"./node_modules/element-ui/lib/element-ui.common.js\"), __webpack_require__(/*! ../../../../viewerWrapper/module/legendManage */ \"./packages/caeDesign/src/viewerWrapper/module/legendManage.ts\")], __WEBPACK_AMD_DEFINE_RESULT__ = (function (require, exports, tslib_1, cameraMouse_1, cAEObjectPreSelector_1, caeObjectSelector_1, commandSelect_1, commandComponent_1, postResultCloudConfig_1, gs_ceec_design_1, store_1, gs_ceec_design_2, cutlinePostMemberResultObject_1, gs_bim_air_1, gs_ceec_design_3, commonInterfaceManager_1, commandUtilities_1, element_ui_1, legendManage_1) {\n \"use strict\";\n\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n postResultCloudConfig_1 = tslib_1.__importStar(postResultCloudConfig_1);\n store_1 = tslib_1.__importDefault(store_1);\n var CommandPostResultCloud = function (_super) {\n tslib_1.__extends(CommandPostResultCloud, _super);\n function CommandPostResultCloud() {\n var _this = _super.call(this) || this;\n _this.typeName = \"CommandPostResultCloud\";\n _this.postResult = null;\n _this.postResultElementUC = null;\n _this.cutlineObject = null;\n _this.postResultCloudObject = null;\n _this.members = new Array();\n _this.cloudMembers = new Array();\n _this._group = null;\n _this.labelMembers = new Array();\n _this.datas = new Array();\n _this.labelDatas = new Array();\n _this.labelDistances = new Array();\n _this.resultLabel = new Array();\n _this.resultLabelDic = {};\n _this.drawSvgEvent = null;\n _this.resultParameterText = \"最大合成应力比\";\n _this.labelColor = \"#ffffff\";\n _this.elementKey = \"cutline\";\n return _this;\n }\n CommandPostResultCloud.prototype.begin = function () {\n var aftertreatmentRO = this.process.caeRenderObjectTreeManager.postResultNode;\n var postResultCloudRO = this.viewer.process.findCaeObjectByNameInChildObject(aftertreatmentRO, \"构件结算结果在位云图\");\n if (!postResultCloudRO) {\n postResultCloudRO = new gs_ceec_design_1.DesignBaseObject();\n postResultCloudRO.businessState = gs_ceec_design_2.BusinessState.Creating;\n postResultCloudRO.name = \"构件结算结果在位云图\";\n this.process.addRenderObject(aftertreatmentRO, postResultCloudRO);\n }\n var postInterfaceManager = this.viewer.postInterfaceManager;\n if (!postInterfaceManager.getFinish_postResult) {\n postInterfaceManager.tip_postResult = true;\n if (!postInterfaceManager.message_postResult) {\n postInterfaceManager.message_postResult = element_ui_1.Message.info({\n message: \"杆件结果仍在请求DB数据,请等待请求完成.\",\n duration: 0,\n showClose: true\n });\n }\n }\n this.cutlineObject = this.viewer.process.findCaeObjectByNameInChildObject(postResultCloudRO, \"构件计算结果图例数据\");\n if (!this.cutlineObject) {\n this.cutlineObject = new cutlinePostMemberResultObject_1.CutlinePostMemberResultObject();\n this.cutlineObject.businessState = gs_ceec_design_2.BusinessState.Creating;\n this.cutlineObject.name = \"构件计算结果图例数据\";\n this.cutlineObject.title = \"最大合成应力比\";\n this.cutlineObject.ucRanges = [0, 0.4, 0.6, 0.8, 1.0];\n this.cutlineObject.ucRangesColors = [0.82, 0.82, 0.82, 1, 0.5, 0.5, 0.5, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1];\n this.cutlineObject.stressLevelsActual = [-20, -15, -10, -5, 0, 5, 10, 20];\n this.cutlineObject.stressLevelsColors = [0.82, 0.82, 0.82, 1, 0.5, 0.5, 0.5, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1];\n this.process.addRenderObject(postResultCloudRO, this.cutlineObject);\n } else {}\n this.changeOperators();\n this.config = new postResultCloudConfig_1.default();\n this.config.show();\n var self = this;\n this.drawSvgEvent = function () {\n var minMagnitude = Number(self.config.properties.items[0].data.minMagnitude.value);\n for (var i = 0; i < self.labelMembers.length; i++) {\n self.drawSvg(self.labelMembers[i], self.datas[i], self.labelDatas[i], self.labelDistances[i], minMagnitude);\n }\n };\n this.viewer.sceneCameraChanged.add(this.drawSvgEvent);\n };\n CommandPostResultCloud.prototype.restore = function () {\n this.changeOperators();\n this.config.show();\n };\n CommandPostResultCloud.prototype.changeOperators = function () {\n var _this = this;\n this.viewer.selectionManager.clearAllSelectionAndHighlight();\n this.viewer.updateDisplay();\n this.viewer.operatorManager.clear();\n this.viewer.operatorManager.add(new cameraMouse_1.CameraMouse());\n this.preSelector = new cAEObjectPreSelector_1.CAEObjectPreSelector();\n this.viewer.operatorManager.add(this.preSelector);\n this.caeObjectSelector = new caeObjectSelector_1.CAEObjectSelector();\n this.viewer.operatorManager.add(this.caeObjectSelector);\n this.caeObjectSelector.lButtonUp.add(function () {\n setTimeout(function () {\n _this.updatePanel();\n }, 0);\n });\n };\n CommandPostResultCloud.prototype.end = function () {\n var postInterfaceManager = this.viewer.postInterfaceManager;\n if (postInterfaceManager.message_postResult) {\n postInterfaceManager.message_postResult.close();\n postInterfaceManager.message_postResult = null;\n }\n this.resetScene();\n this.viewer.sceneCameraChanged.remove(this.drawSvgEvent);\n this.config.hide();\n _super.prototype.end.call(this);\n this.viewer.selectionManager.clearAllSelectionAndHighlight();\n this.viewer.updateDisplay();\n store_1.default.commit(\"structureTree/updateTreeData\", [this.viewer.structureTreeManager.rootNode]);\n var commandSelect = new commandSelect_1.CommandSelect();\n this.process.commandManager.execute(commandSelect);\n };\n CommandPostResultCloud.prototype.clearSvg = function () {\n if (this.resultLabel) {\n this.resultLabel.forEach(function (item) {\n item.clear();\n item = null;\n });\n this.resultLabel = new Array();\n }\n this.labelMembers = new Array();\n this.datas = new Array();\n this.labelDatas = new Array();\n this.labelDistances = new Array();\n this.resultLabelDic = {};\n };\n CommandPostResultCloud.prototype.initDrawSvg = function (member, datas, labelDatas, distances, minMagnitude) {\n var data = this.config.properties.items[0].data;\n var onlyShowMax = data.showMaxPerGroup.value;\n var hasAddFlag = false;\n var maxValue = -9999;\n for (var i = 0; i < datas.length; i++) {\n if (datas[i] > maxValue) {\n maxValue = datas[i];\n }\n }\n for (var j = 0; j < distances.length; j++) {\n var data_1 = datas[j];\n var labelData = labelDatas[j];\n if (minMagnitude !== null && minMagnitude !== undefined && data_1 < minMagnitude) {\n continue;\n }\n if (data_1 < maxValue) {\n if (onlyShowMax) {\n continue;\n }\n }\n if (!hasAddFlag) {\n this.labelMembers.push(member);\n }\n if (!hasAddFlag) {\n this.datas.push(datas);\n }\n if (!hasAddFlag) {\n this.labelDatas.push(labelDatas);\n }\n if (!hasAddFlag) {\n this.labelDistances.push(tslib_1.__spreadArray([], tslib_1.__read(distances), false));\n }\n var origin_1 = new Float32Array(member.getStartPosition());\n var vector = member.getVector();\n var curretPos = gs_bim_air_1.Longan.Point.add(origin_1, gs_bim_air_1.Longan.Vector.multiply(vector, distances[j]));\n var point = this.viewer.worldPointToPixelPoint([curretPos])[0];\n var id = member.name + distances[j].toFixed(6);\n if (this.resultLabelDic[id]) {\n this.resultLabelDic[id].move(point[0] + 1, point[1] + 1);\n this.resultLabelDic[id].attr(\"font-size\", gs_ceec_design_1.DesignBaseObject.fontSize);\n } else {\n var draw = gs_ceec_design_3.SvgDraw.getInstance(this.viewer.container.id).draw;\n this._group = draw.group();\n var resultText = draw.text(Number.isNaN(Number(labelData)) ? labelData : Number(labelData).toFixed(3)).font({\n fill: this.labelColor\n }).attr(\"font-size\", gs_ceec_design_1.DesignBaseObject.fontSize).move(point[0] + 1, point[1] + 1);\n this.resultLabel.push(resultText);\n this.resultLabelDic[id] = resultText;\n this._group.add(resultText);\n }\n hasAddFlag = true;\n }\n };\n CommandPostResultCloud.prototype.drawSvg = function (member, datas, labelDatas, distances, minMagnitude) {\n var data = this.config.properties.items[0].data;\n var onlyShowMax = data.showMaxPerGroup.value;\n var maxValue = -9999;\n for (var i = 0; i < datas.length; i++) {\n if (datas[i] > maxValue) {\n maxValue = datas[i];\n }\n }\n for (var j = 0; j < distances.length; j++) {\n var data_2 = datas[j];\n var labelData = labelDatas[j];\n if (minMagnitude !== null && minMagnitude !== undefined && data_2 < minMagnitude) {\n continue;\n }\n if (data_2 < maxValue) {\n if (onlyShowMax) {\n continue;\n }\n }\n var origin_2 = new Float32Array(member.getStartPosition());\n var vector = member.getVector();\n var curretPos = gs_bim_air_1.Longan.Point.add(origin_2, gs_bim_air_1.Longan.Vector.multiply(vector, distances[j]));\n var point = this.viewer.worldPointToPixelPoint([curretPos])[0];\n var id = member.name + distances[j].toFixed(6);\n if (this.resultLabelDic[id]) {\n this.resultLabelDic[id].move(point[0] + 1, point[1] + 1);\n this.resultLabelDic[id].attr(\"font-size\", gs_ceec_design_1.DesignBaseObject.fontSize);\n } else {\n var draw = gs_ceec_design_3.SvgDraw.getInstance(this.viewer.container.id).draw;\n this._group = draw.group();\n var resultText = draw.text(Number.isNaN(Number(labelData)) ? labelData : Number(labelData).toFixed(3)).font({\n fill: this.labelColor\n }).attr(\"font-size\", gs_ceec_design_1.DesignBaseObject.fontSize).move(point[0] + 1, point[1] + 1);\n this.resultLabel.push(resultText);\n this.resultLabelDic[id] = resultText;\n this._group.add(resultText);\n }\n }\n };\n CommandPostResultCloud.prototype.commandOk = function () {\n var e_1, _a, e_2, _b, e_3, _c;\n var postInterfaceManager = this.viewer.postInterfaceManager;\n if (!postInterfaceManager.getFinish_postResult) {\n postInterfaceManager.tip_postResult = true;\n element_ui_1.Message.info({\n message: \"杆件结果仍在请求DB数据,请等待请求完成.\"\n });\n return;\n }\n if (postInterfaceManager.postResult) {\n this.postResult = postInterfaceManager.postResult;\n var counter = 0;\n try {\n for (var _d = tslib_1.__values(Object.keys(this.postResult)), _e = _d.next(); !_e.done; _e = _d.next()) {\n var i = _e.value;\n counter++;\n }\n } catch (e_1_1) {\n e_1 = {\n error: e_1_1\n };\n } finally {\n try {\n if (_e && !_e.done && (_a = _d.return)) _a.call(_d);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n if (counter === 0) {\n element_ui_1.Message.info(\"查询R_POSTMEMBERRESULTS表返回数据为空,请检查DB文件\");\n this.viewer.updateDisplay();\n return;\n }\n } else {\n element_ui_1.Message.info(\"R_POSTMEMBERRESULTS表不存在,请检查DB文件\");\n this.viewer.updateDisplay();\n return;\n }\n this.resultParameterText = \"无\";\n this.viewer.commonInterfaceManager.colorSwitch(commonInterfaceManager_1.SwitchColorDivide.Cancel);\n postInterfaceManager.resetOhterPostResult();\n var data = this.config.properties.items[0].data;\n var aftertreatmentRO = this.process.caeRenderObjectTreeManager.postResultNode;\n var postResultCloudRO = this.viewer.process.findCaeObjectByNameInChildObject(aftertreatmentRO, \"构件结算结果在位云图\");\n var loadConditionName = null;\n try {\n for (var _f = tslib_1.__values(Object.keys(this.postResult)), _g = _f.next(); !_g.done; _g = _f.next()) {\n var i = _g.value;\n if (loadConditionName === null) {\n loadConditionName = this.postResult[i][0].LoadConditionName;\n }\n }\n } catch (e_2_1) {\n e_2 = {\n error: e_2_1\n };\n } finally {\n try {\n if (_g && !_g.done && (_b = _f.return)) _b.call(_f);\n } finally {\n if (e_2) throw e_2.error;\n }\n }\n var memberPostResult = this.postResult[loadConditionName];\n var colorCode = data.colorCode.value;\n var blendRenderedColor = data.blendRenderedColor.value;\n var minMagnitude = Number(data.minMagnitude.value);\n this.postResultCloudObject = new gs_ceec_design_1.DesignBaseObject();\n this.postResultCloudObject.name = loadConditionName + \"最大合成应力比\";\n this.process.addRenderObject(postResultCloudRO, this.postResultCloudObject);\n var members = this.process.caeRenderObjectTreeManager.memberNode.childObjects;\n if (data.resultParameter.value === -1 || !(0, commandUtilities_1.checkNotNullOrUndefinded)(data.resultParameter.value)) {} else {\n for (var i = 0; i < members.length; i++) {\n var member = members[i];\n switch (data.resultParameter.value) {\n case postResultCloudConfig_1.ResultParameterType.TotalShearUC:\n case postResultCloudConfig_1.ResultParameterType.CriticalLC:\n case postResultCloudConfig_1.ResultParameterType.CriticalLC_MaxUC:\n if (postInterfaceManager.post_jointCanSummaryUC) {\n this.postResultElementUC = postInterfaceManager.post_jointCanSummaryUC;\n var counter = 0;\n try {\n for (var _h = (e_3 = void 0, tslib_1.__values(Object.keys(this.postResultElementUC))), _j = _h.next(); !_j.done; _j = _h.next()) {\n var i_1 = _j.value;\n counter++;\n }\n } catch (e_3_1) {\n e_3 = {\n error: e_3_1\n };\n } finally {\n try {\n if (_j && !_j.done && (_c = _h.return)) _c.call(_h);\n } finally {\n if (e_3) throw e_3.error;\n }\n }\n if (counter === 0) {\n element_ui_1.Message.info(\"查询ElementUC表返回数据为空,请检查DB文件\");\n this.viewer.updateDisplay();\n return;\n }\n } else {\n element_ui_1.Message.info(\"ElementUC表不存在,请检查DB文件\");\n this.viewer.updateDisplay();\n return;\n }\n for (var j = 0; j < this.postResultElementUC.length; j++) {\n if (member.name === this.postResultElementUC[j].MemberName) {\n loadConditionName = this.postResultElementUC[j].LoadCondition;\n memberPostResult = this.postResult[loadConditionName];\n }\n }\n break;\n }\n if (memberPostResult) {\n var distances = new Array();\n var datas = new Array();\n var labelDatas = new Array();\n var isShowEnglishText = this.viewer.commonInterfaceManager.showEnglishText;\n var resultMembers = new Array();\n for (var j = 0; j < memberPostResult.length; j++) {\n var memberName = memberPostResult[j].MemberName;\n if (memberName === member.name) {\n distances.push(Number(memberPostResult[j].Distance));\n switch (Number(data.resultParameter.value)) {\n case postResultCloudConfig_1.ResultParameterType.MaxUC:\n if (isShowEnglishText) {\n this.resultParameterText = \"MaxUC\";\n } else {\n this.resultParameterText = \"最大合成应力比\";\n }\n this.cutlineObject.currentCutlineType = cutlinePostMemberResultObject_1.CutlineType.UCRanges;\n datas.push(Number(memberPostResult[j].MaxUC));\n labelDatas.push(memberPostResult[j].MaxUC);\n break;\n case postResultCloudConfig_1.ResultParameterType.AxialUC:\n if (isShowEnglishText) {\n this.resultParameterText = \"AxialUC\";\n } else {\n this.resultParameterText = \"轴向应力比\";\n }\n this.cutlineObject.currentCutlineType = cutlinePostMemberResultObject_1.CutlineType.UCRanges;\n datas.push(Number(memberPostResult[j].AxialUC));\n labelDatas.push(memberPostResult[j].AxialUC);\n break;\n case postResultCloudConfig_1.ResultParameterType.YYBendingUC:\n if (isShowEnglishText) {\n this.resultParameterText = \"YYBendingUC\";\n } else {\n this.resultParameterText = \"局部Y轴弯曲应力比\";\n }\n this.cutlineObject.currentCutlineType = cutlinePostMemberResultObject_1.CutlineType.UCRanges;\n datas.push(Number(memberPostResult[j].YYBendingUC));\n labelDatas.push(memberPostResult[j].YYBendingUC);\n break;\n case postResultCloudConfig_1.ResultParameterType.ZZBendingUC:\n if (isShowEnglishText) {\n this.resultParameterText = \"ZZBendingUC\";\n } else {\n this.resultParameterText = \"局部Z轴弯曲应力比\";\n }\n this.cutlineObject.currentCutlineType = cutlinePostMemberResultObject_1.CutlineType.UCRanges;\n datas.push(Number(memberPostResult[j].ZZBendingUC));\n labelDatas.push(memberPostResult[j].ZZBendingUC);\n break;\n case postResultCloudConfig_1.ResultParameterType.TotalShearUC:\n if (isShowEnglishText) {\n this.resultParameterText = \"TotalShearUC\";\n } else {\n this.resultParameterText = \"最大剪切应力比\";\n }\n if (!this.postResultElementUC) {\n console.log(\"没有获取到ElementUC表的数据.\");\n return;\n }\n this.cutlineObject.currentCutlineType = cutlinePostMemberResultObject_1.CutlineType.UCRanges;\n datas.push(Number(memberPostResult[j].TotalShearUC));\n labelDatas.push(memberPostResult[j].TotalShearUC);\n break;\n case postResultCloudConfig_1.ResultParameterType.CriticalLC:\n if (isShowEnglishText) {\n this.resultParameterText = \"CriticalLC\";\n } else {\n this.resultParameterText = \"最危险工况\";\n }\n if (!this.postResultElementUC) {\n console.log(\"没有获取到ElementUC表的数据.\");\n return;\n }\n this.cutlineObject.currentCutlineType = cutlinePostMemberResultObject_1.CutlineType.UCRanges;\n datas.push(Number(memberPostResult[j].MaxUC));\n labelDatas.push(loadConditionName);\n break;\n case postResultCloudConfig_1.ResultParameterType.CriticalLC_MaxUC:\n if (isShowEnglishText) {\n this.resultParameterText = \"CriticalLC_MaxUC\";\n } else {\n this.resultParameterText = \"最危险工况+应力比\";\n }\n if (!this.postResultElementUC) {\n console.log(\"没有获取到ElementUC表的数据.\");\n return;\n }\n this.cutlineObject.currentCutlineType = cutlinePostMemberResultObject_1.CutlineType.UCRanges;\n datas.push(Number(memberPostResult[j].MaxUC));\n labelDatas.push(loadConditionName + \" (\" + Number(memberPostResult[j].MaxUC).toFixed(3) + \")\");\n break;\n case postResultCloudConfig_1.ResultParameterType.AXStress:\n if (isShowEnglishText) {\n this.resultParameterText = \"AXStress\";\n } else {\n this.resultParameterText = \"轴向应力\";\n }\n this.cutlineObject.currentCutlineType = cutlinePostMemberResultObject_1.CutlineType.StressLevels;\n datas.push(Number(memberPostResult[j].AXStress));\n labelDatas.push(memberPostResult[j].AXStress);\n break;\n case postResultCloudConfig_1.ResultParameterType.AXStress_YaYingLi:\n if (isShowEnglishText) {\n this.resultParameterText = \"压应力\";\n } else {\n this.resultParameterText = \"压应力\";\n }\n this.cutlineObject.currentCutlineType = cutlinePostMemberResultObject_1.CutlineType.StressLevels;\n datas.push(Number(memberPostResult[j].AXStress));\n labelDatas.push(memberPostResult[j].AXStress);\n break;\n case postResultCloudConfig_1.ResultParameterType.AXStress_LaYingLi:\n if (isShowEnglishText) {\n this.resultParameterText = \"拉应力\";\n } else {\n this.resultParameterText = \"拉应力\";\n }\n this.cutlineObject.currentCutlineType = cutlinePostMemberResultObject_1.CutlineType.StressLevels;\n datas.push(Number(memberPostResult[j].AXStress));\n labelDatas.push(memberPostResult[j].AXStress);\n break;\n case postResultCloudConfig_1.ResultParameterType.YYBendingStress:\n if (isShowEnglishText) {\n this.resultParameterText = \"YYBendingStress\";\n } else {\n this.resultParameterText = \"局部Y轴弯曲应力\";\n }\n this.cutlineObject.currentCutlineType = cutlinePostMemberResultObject_1.CutlineType.StressLevels;\n datas.push(Number(memberPostResult[j].YYBendingStress));\n labelDatas.push(memberPostResult[j].YYBendingStress);\n break;\n case postResultCloudConfig_1.ResultParameterType.ZZBendingStress:\n if (isShowEnglishText) {\n this.resultParameterText = \"ZZBendingStress\";\n } else {\n this.resultParameterText = \"局部Z轴弯曲应力\";\n }\n this.cutlineObject.currentCutlineType = cutlinePostMemberResultObject_1.CutlineType.StressLevels;\n datas.push(Number(memberPostResult[j].ZZBendingStress));\n labelDatas.push(memberPostResult[j].ZZBendingStress);\n break;\n case postResultCloudConfig_1.ResultParameterType.YShearStress:\n if (isShowEnglishText) {\n this.resultParameterText = \"YShearStress\";\n } else {\n this.resultParameterText = \"局部Y轴剪应力\";\n }\n this.cutlineObject.currentCutlineType = cutlinePostMemberResultObject_1.CutlineType.StressLevels;\n datas.push(Number(memberPostResult[j].YShearStress));\n labelDatas.push(memberPostResult[j].YShearStress);\n break;\n case postResultCloudConfig_1.ResultParameterType.ZShearStress:\n if (isShowEnglishText) {\n this.resultParameterText = \"ZShearStress\";\n } else {\n this.resultParameterText = \"局部Z轴剪应力\";\n }\n this.cutlineObject.currentCutlineType = cutlinePostMemberResultObject_1.CutlineType.StressLevels;\n datas.push(Number(memberPostResult[j].ZShearStress));\n labelDatas.push(memberPostResult[j].ZShearStress);\n break;\n case postResultCloudConfig_1.ResultParameterType.AxialLoad:\n if (isShowEnglishText) {\n this.resultParameterText = \"AxialLoad\";\n } else {\n this.resultParameterText = \"轴向内力\";\n }\n this.cutlineObject.currentCutlineType = cutlinePostMemberResultObject_1.CutlineType.StressLevels;\n datas.push(Number(memberPostResult[j].AxialLoad));\n labelDatas.push(memberPostResult[j].AxialLoad);\n break;\n case postResultCloudConfig_1.ResultParameterType.AxialLoad_YaNeiLi:\n if (isShowEnglishText) {\n this.resultParameterText = \"压内力\";\n } else {\n this.resultParameterText = \"压内力\";\n }\n this.cutlineObject.currentCutlineType = cutlinePostMemberResultObject_1.CutlineType.StressLevels;\n datas.push(Number(memberPostResult[j].AxialLoad));\n labelDatas.push(memberPostResult[j].AxialLoad);\n break;\n case postResultCloudConfig_1.ResultParameterType.AxialLoad_LaNeiLi:\n if (isShowEnglishText) {\n this.resultParameterText = \"拉内力\";\n } else {\n this.resultParameterText = \"拉内力\";\n }\n this.cutlineObject.currentCutlineType = cutlinePostMemberResultObject_1.CutlineType.StressLevels;\n datas.push(Number(memberPostResult[j].AxialLoad));\n labelDatas.push(memberPostResult[j].AxialLoad);\n break;\n case postResultCloudConfig_1.ResultParameterType.YYBendingMoment:\n if (isShowEnglishText) {\n this.resultParameterText = \"YYBendingMoment\";\n } else {\n this.resultParameterText = \"局部Y轴弯矩\";\n }\n this.cutlineObject.currentCutlineType = cutlinePostMemberResultObject_1.CutlineType.UCRanges;\n datas.push(Number(memberPostResult[j].YYBendingMoment));\n labelDatas.push(memberPostResult[j].YYBendingMoment);\n break;\n case postResultCloudConfig_1.ResultParameterType.ZZBendingMoment:\n if (isShowEnglishText) {\n this.resultParameterText = \"ZZBendingMoment\";\n } else {\n this.resultParameterText = \"局部Z轴弯矩\";\n }\n this.cutlineObject.currentCutlineType = cutlinePostMemberResultObject_1.CutlineType.UCRanges;\n datas.push(Number(memberPostResult[j].ZZBendingMoment));\n labelDatas.push(memberPostResult[j].ZZBendingMoment);\n break;\n }\n }\n }\n if (data.displayLabels.value) {\n this.initDrawSvg(member, datas, labelDatas, distances, minMagnitude);\n }\n distances[0] = 0;\n distances[distances.length - 1] = member.getMemberLength();\n if (this.cutlineObject.currentCutlineType === cutlinePostMemberResultObject_1.CutlineType.UCRanges) {\n var colors = this.cutlineObject.getColorsByDatas(datas, this.cutlineObject.ucRanges, this.cutlineObject.ucRangesColors);\n resultMembers = this.viewer.process.cloudMemberTransformManager.createCloudMember(member, tslib_1.__spreadArray([], tslib_1.__read(distances), false), colors, colorCode, blendRenderedColor);\n } else if (this.cutlineObject.currentCutlineType === cutlinePostMemberResultObject_1.CutlineType.StressLevels) {\n var colors = this.cutlineObject.getColorsByDatas(datas, this.cutlineObject.stressLevelsActual, this.cutlineObject.stressLevelsColors);\n resultMembers = this.viewer.process.cloudMemberTransformManager.createCloudMember(member, tslib_1.__spreadArray([], tslib_1.__read(distances), false), colors, colorCode, blendRenderedColor);\n }\n if (resultMembers && resultMembers.length > 0) {\n var iro = this.viewer.findInstanceObject(member);\n if (iro) {\n iro.visible = false;\n }\n for (var j = 0; j < resultMembers.length; j++) {\n this.viewer.process.addRenderObject(this.postResultCloudObject, resultMembers[j]);\n resultMembers[j].setNeedUpdate();\n this.cloudMembers.push(resultMembers[j]);\n }\n this.members.push(member);\n }\n }\n }\n }\n this.viewer.selectionManager.clearAllSelectionAndHighlight();\n this.viewer.updateDisplay();\n this.caeObjectSelector.selectedRenderObjects.clear();\n this.updatePanel();\n if (data.displayCutline.value && data.colorCode.value) {\n this.refreshCutline();\n } else {\n legendManage_1.LegendManage.destory(this.elementKey);\n }\n postInterfaceManager.active_postResult = true;\n data.tip.value = 0;\n store_1.default.commit(\"structureTree/updateTreeData\", [this.viewer.structureTreeManager.rootNode]);\n };\n CommandPostResultCloud.prototype.updatePanel = function () {};\n CommandPostResultCloud.prototype.getColorByIndex = function (colors, index) {\n var color = colors.slice(4 * index, 4 * (index + 1));\n return color;\n };\n CommandPostResultCloud.prototype.resetScene = function () {\n legendManage_1.LegendManage.destory(this.elementKey);\n this.clearSvg();\n for (var i = 0; i < this.members.length; i++) {\n var iro = this.viewer.findInstanceObject(this.members[i]);\n if (iro) {\n iro.visible = true;\n }\n }\n for (var i = 0; i < this.cloudMembers.length; i++) {\n this.viewer.process.removeRenderObject(this.cloudMembers[i]);\n }\n if (this.postResultCloudObject) {\n this.postResultCloudObject.delete();\n }\n this.members = [];\n this.cloudMembers = [];\n var postInterfaceManager = this.viewer.postInterfaceManager;\n postInterfaceManager.active_postResult = false;\n };\n CommandPostResultCloud.prototype.refreshCutline = function () {\n var component = legendManage_1.LegendManage.create(this.elementKey, this.cutlineObject.geCutline(), \"\", \"\", \"\");\n if (this.viewer.commonInterfaceManager.showEnglishText) {\n component.title = \"MemberResult:\" + this.resultParameterText;\n component.leftText = \"Color\";\n component.rightText = \"Range\";\n } else {\n component.title = \"构件结果:\" + this.resultParameterText;\n component.leftText = \"颜色\";\n component.rightText = \"范围\";\n }\n };\n return CommandPostResultCloud;\n }(commandComponent_1.CommandComponent);\n exports.default = CommandPostResultCloud;\n}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9wYWNrYWdlcy9jYWVEZXNpZ24vc3JjL3ZpZXdlcldyYXBwZXIvY29tbWFuZHMvYWZ0ZXJ0cmVhdG1lbnQvcG9zdFJlc3VsdENsb3VkL2NvbW1hbmRQb3N0UmVzdWx0Q2xvdWQudHMuanMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9bbmFtZV0vLi9wYWNrYWdlcy9jYWVEZXNpZ24vc3JjL3ZpZXdlcldyYXBwZXIvY29tbWFuZHMvYWZ0ZXJ0cmVhdG1lbnQvcG9zdFJlc3VsdENsb3VkL2NvbW1hbmRQb3N0UmVzdWx0Q2xvdWQudHM/MWQ5MiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDYW1lcmFNb3VzZSB9IGZyb20gXCIuLi8uLi8uLi8uLi9nc0RldkZ4L29wZXJhdG9ycy9jYW1lcmFNb3VzZVwiO1xyXG5pbXBvcnQgeyBDQUVPYmplY3RQcmVTZWxlY3RvciB9IGZyb20gXCIuLi8uLi8uLi8uLi9nc0RldkZ4L29wZXJhdG9ycy9jQUVPYmplY3RQcmVTZWxlY3RvclwiO1xyXG5pbXBvcnQgeyBDQUVPYmplY3RTZWxlY3RvciB9IGZyb20gXCIuLi8uLi8uLi8uLi9nc0RldkZ4L29wZXJhdG9ycy9jYWVPYmplY3RTZWxlY3RvclwiO1xyXG5pbXBvcnQgeyBDb21tYW5kU2VsZWN0IH0gZnJvbSBcIi4uLy4uLy4uLy4uL2dzRGV2RngvY29tbWFuZHMvY29tbWFuZFNlbGVjdFwiO1xyXG5pbXBvcnQgeyBDb21tYW5kQ29tcG9uZW50IH0gZnJvbSBcIi4uLy4uL2NvbW1hbmRDb21wb25lbnRcIjtcclxuaW1wb3J0IFBvc3RSZXN1bHRDbG91ZENvbmZpZywge1xyXG4gIFJlc3VsdFBhcmFtZXRlclR5cGUsXHJcbn0gZnJvbSBcIi4vcG9zdFJlc3VsdENsb3VkQ29uZmlnXCI7XHJcbmltcG9ydCB7IERlc2lnbkJhc2VPYmplY3QgfSBmcm9tIFwiZ3MtY2VlYy1kZXNpZ25cIjtcclxuaW1wb3J0IHN0b3JlIGZyb20gXCIuLi8uLi8uLi8uLi9zdG9yZVwiO1xyXG5pbXBvcnQgcmVuZGVyT2JqZWN0U2VydmljZSBmcm9tIFwiLi4vLi4vLi4vLi4vYXBpL3JlbmRlck9iamVjdFNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTWVtYmVyT2JqZWN0IH0gZnJvbSBcIi4uLy4uLy4uLy4uL2dzRGV2Rngvb2JqZWN0cy9jYWVPYmplY3RzL21lbWJlck9iamVjdFwiO1xyXG5pbXBvcnQgeyBCdXNpbmVzc1N0YXRlIH0gZnJvbSBcImdzLWNlZWMtZGVzaWduXCI7XHJcbmltcG9ydCB7XHJcbiAgQ3V0bGluZVBvc3RNZW1iZXJSZXN1bHRPYmplY3QsXHJcbiAgQ3V0bGluZVR5cGUsXHJcbn0gZnJvbSBcIi4uLy4uLy4uLy4uL2dzRGV2Rngvb2JqZWN0cy9wcmV0cmVhdG1lbnRPYmplY3RzL2N1dGxpbmVQb3N0TWVtYmVyUmVzdWx0T2JqZWN0XCI7XHJcbmltcG9ydCB7IExvbmdhbiB9IGZyb20gXCJncy1iaW0tYWlyXCI7XHJcbmltcG9ydCB7IFN2Z0RyYXcgfSBmcm9tIFwiZ3MtY2VlYy1kZXNpZ25cIjtcclxuaW1wb3J0IHsgRyB9IGZyb20gXCJAc3ZnZG90anMvc3ZnLmpzXCI7XHJcbmltcG9ydCB7IFN3aXRjaENvbG9yRGl2aWRlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2dzRGV2RngvbWFuYWdlcnMvaW50ZXJmYWNlTWFuYWdlcnMvY29tbW9uSW50ZXJmYWNlTWFuYWdlclwiO1xyXG5pbXBvcnQgeyBjaGVja05vdE51bGxPclVuZGVmaW5kZWQgfSBmcm9tIFwiLi4vLi4vY29tbWFuZFV0aWxpdGllcy9jb21tYW5kVXRpbGl0aWVzXCI7XHJcbmltcG9ydCB7IE1lc3NhZ2UgfSBmcm9tIFwiZWxlbWVudC11aVwiO1xyXG5pbXBvcnQgeyBMZWdlbmRNYW5hZ2UgfSBmcm9tIFwiLi4vLi4vLi4vLi4vdmlld2VyV3JhcHBlci9tb2R1bGUvbGVnZW5kTWFuYWdlXCI7XHJcblxyXG4vKipcclxuICog5p6E5Lu26K6h566X57uT5p6c5Zyo5L2N5LqR5Zu+LlxyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29tbWFuZFBvc3RSZXN1bHRDbG91ZCBleHRlbmRzIENvbW1hbmRDb21wb25lbnQge1xyXG4gIHR5cGVOYW1lID0gXCJDb21tYW5kUG9zdFJlc3VsdENsb3VkXCI7XHJcbiAgY29uZmlnOiBQb3N0UmVzdWx0Q2xvdWRDb25maWc7XHJcbiAgcHJlU2VsZWN0b3I6IENBRU9iamVjdFByZVNlbGVjdG9yO1xyXG4gIGNhZU9iamVjdFNlbGVjdG9yOiBDQUVPYmplY3RTZWxlY3RvcjtcclxuXHJcbiAgLy8g5o6l5Y+j6I635Y+W55qEUl9QT1NUTUVNQkVSUkVTVUxUU+ihqOeahOWQjuWkhOeQhuaVsOaNri5cclxuICBwb3N0UmVzdWx0ID0gbnVsbDtcclxuICAvLyDmjqXlj6Pojrflj5bnmoRFbGVtZW50VUPooajnmoTlkI7lpITnkIbmlbDmja4uXHJcbiAgcG9zdFJlc3VsdEVsZW1lbnRVQyA9IG51bGw7XHJcblxyXG4gIC8vIOWbvuS+i1JPLlxyXG4gIGN1dGxpbmVPYmplY3Q6IEN1dGxpbmVQb3N0TWVtYmVyUmVzdWx0T2JqZWN0ID0gbnVsbDtcclxuICAvLyDlkI7lpITnkIbmlYjmnpznmoRST+eItuiKgueCuS5cclxuICBwb3N0UmVzdWx0Q2xvdWRPYmplY3Q6IERlc2lnbkJhc2VPYmplY3QgPSBudWxsO1xyXG5cclxuICAvKipcclxuICAgKiDooqvovazmjaLnmoTmnYbku7bliJfooahcclxuICAgKi9cclxuICBtZW1iZXJzID0gbmV3IEFycmF5PE1lbWJlck9iamVjdD4oKTtcclxuICAvKipcclxuICAgKiDovazmjaLlkI7nmoTkupHlm77mnYbku7bliJfooahcclxuICAgKi9cclxuICBjbG91ZE1lbWJlcnM6IE1lbWJlck9iamVjdFtdID0gbmV3IEFycmF5PE1lbWJlck9iamVjdD4oKTtcclxuXHJcbiAgX2dyb3VwOiBHID0gbnVsbDtcclxuICBsYWJlbE1lbWJlcnMgPSBuZXcgQXJyYXk8TWVtYmVyT2JqZWN0PigpO1xyXG4gIGRhdGFzID0gbmV3IEFycmF5PG51bWJlcltdPigpO1xyXG4gIGxhYmVsRGF0YXMgPSBuZXcgQXJyYXk8c3RyaW5nW10+KCk7XHJcbiAgbGFiZWxEaXN0YW5jZXMgPSBuZXcgQXJyYXk8bnVtYmVyW10+KCk7XHJcbiAgcmVzdWx0TGFiZWwgPSBuZXcgQXJyYXk8YW55PigpO1xyXG4gIHJlc3VsdExhYmVsRGljOiB7IFtpZDogc3RyaW5nXTogYW55IH0gPSB7fTtcclxuXHJcbiAgZHJhd1N2Z0V2ZW50ID0gbnVsbDtcclxuXHJcbiAgcmVzdWx0UGFyYW1ldGVyVGV4dCA9IFwi5pyA5aSn5ZCI5oiQ5bqU5Yqb5q+UXCI7XHJcblxyXG4gIGxhYmVsQ29sb3IgPSBcIiNmZmZmZmZcIjtcclxuXHJcbiAgZWxlbWVudEtleSA9IFwiY3V0bGluZVwiO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBiZWdpbigpOiB2b2lkIHtcclxuICAgIGxldCBhZnRlcnRyZWF0bWVudFJPID1cclxuICAgICAgdGhpcy5wcm9jZXNzLmNhZVJlbmRlck9iamVjdFRyZWVNYW5hZ2VyLnBvc3RSZXN1bHROb2RlO1xyXG5cclxuICAgIGxldCBwb3N0UmVzdWx0Q2xvdWRSTyA9XHJcbiAgICAgIHRoaXMudmlld2VyLnByb2Nlc3MuZmluZENhZU9iamVjdEJ5TmFtZUluQ2hpbGRPYmplY3QoXHJcbiAgICAgICAgYWZ0ZXJ0cmVhdG1lbnRSTyxcclxuICAgICAgICBcIuaehOS7tue7k+eul+e7k+aenOWcqOS9jeS6keWbvlwiXHJcbiAgICAgICkgYXMgRGVzaWduQmFzZU9iamVjdDtcclxuXHJcbiAgICBpZiAoIXBvc3RSZXN1bHRDbG91ZFJPKSB7XHJcbiAgICAgIHBvc3RSZXN1bHRDbG91ZFJPID0gbmV3IERlc2lnbkJhc2VPYmplY3QoKTtcclxuICAgICAgcG9zdFJlc3VsdENsb3VkUk8uYnVzaW5lc3NTdGF0ZSA9IEJ1c2luZXNzU3RhdGUuQ3JlYXRpbmc7XHJcbiAgICAgIHBvc3RSZXN1bHRDbG91ZFJPLm5hbWUgPSBcIuaehOS7tue7k+eul+e7k+aenOWcqOS9jeS6keWbvlwiO1xyXG4gICAgICB0aGlzLnByb2Nlc3MuYWRkUmVuZGVyT2JqZWN0KGFmdGVydHJlYXRtZW50Uk8sIHBvc3RSZXN1bHRDbG91ZFJPKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgcG9zdEludGVyZmFjZU1hbmFnZXIgPSB0aGlzLnZpZXdlci5wb3N0SW50ZXJmYWNlTWFuYWdlcjtcclxuICAgIGlmICghcG9zdEludGVyZmFjZU1hbmFnZXIuZ2V0RmluaXNoX3Bvc3RSZXN1bHQpIHtcclxuICAgICAgcG9zdEludGVyZmFjZU1hbmFnZXIudGlwX3Bvc3RSZXN1bHQgPSB0cnVlO1xyXG4gICAgICBpZiAoIXBvc3RJbnRlcmZhY2VNYW5hZ2VyLm1lc3NhZ2VfcG9zdFJlc3VsdCkge1xyXG4gICAgICAgIHBvc3RJbnRlcmZhY2VNYW5hZ2VyLm1lc3NhZ2VfcG9zdFJlc3VsdCA9IE1lc3NhZ2UuaW5mbyh7XHJcbiAgICAgICAgICBtZXNzYWdlOiBcIuadhuS7tue7k+aenOS7jeWcqOivt+axgkRC5pWw5o2u77yM6K+3562J5b6F6K+35rGC5a6M5oiQLlwiLFxyXG4gICAgICAgICAgZHVyYXRpb246IDAsXHJcbiAgICAgICAgICBzaG93Q2xvc2U6IHRydWUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmN1dGxpbmVPYmplY3QgPSB0aGlzLnZpZXdlci5wcm9jZXNzLmZpbmRDYWVPYmplY3RCeU5hbWVJbkNoaWxkT2JqZWN0KFxyXG4gICAgICBwb3N0UmVzdWx0Q2xvdWRSTyxcclxuICAgICAgXCLmnoTku7borqHnrpfnu5Pmnpzlm77kvovmlbDmja5cIlxyXG4gICAgKSBhcyBDdXRsaW5lUG9zdE1lbWJlclJlc3VsdE9iamVjdDtcclxuXHJcbiAgICBpZiAoIXRoaXMuY3V0bGluZU9iamVjdCkge1xyXG4gICAgICAvLyDmt7vliqDlm77kvovmlbDmja5STyjopoHmjIHkuYXljJbkv53lrZgpLlxyXG4gICAgICB0aGlzLmN1dGxpbmVPYmplY3QgPSBuZXcgQ3V0bGluZVBvc3RNZW1iZXJSZXN1bHRPYmplY3QoKTtcclxuICAgICAgdGhpcy5jdXRsaW5lT2JqZWN0LmJ1c2luZXNzU3RhdGUgPSBCdXNpbmVzc1N0YXRlLkNyZWF0aW5nO1xyXG4gICAgICB0aGlzLmN1dGxpbmVPYmplY3QubmFtZSA9IFwi5p6E5Lu26K6h566X57uT5p6c5Zu+5L6L5pWw5o2uXCI7XHJcbiAgICAgIHRoaXMuY3V0bGluZU9iamVjdC50aXRsZSA9IFwi5pyA5aSn5ZCI5oiQ5bqU5Yqb5q+UXCI7XHJcbiAgICAgIHRoaXMuY3V0bGluZU9iamVjdC51Y1JhbmdlcyA9IFswLCAwLjQsIDAuNiwgMC44LCAxLjBdO1xyXG4gICAgICB0aGlzLmN1dGxpbmVPYmplY3QudWNSYW5nZXNDb2xvcnMgPSBbXHJcbiAgICAgICAgMC44MiwgMC44MiwgMC44MiwgMSwgMC41LCAwLjUsIDAuNSwgMSwgMCwgMSwgMCwgMSwgMSwgMSwgMCwgMSwgMSwgMCwgMCxcclxuICAgICAgICAxLFxyXG4gICAgICBdO1xyXG4gICAgICAvLyB0aGlzLmN1dGxpbmVPYmplY3Quc3RyZXNzTGV2ZWxzQWN0dWFsID0gW1xyXG4gICAgICAvLyAgIDEwLCAyMCwgNDAsIDUwLCA3NSwgMTAwLCAxMzMsIDE0OCxcclxuICAgICAgLy8gXTtcclxuICAgICAgdGhpcy5jdXRsaW5lT2JqZWN0LnN0cmVzc0xldmVsc0FjdHVhbCA9IFstMjAsIC0xNSwgLTEwLCAtNSwgMCwgNSwgMTAsIDIwXTtcclxuICAgICAgdGhpcy5jdXRsaW5lT2JqZWN0LnN0cmVzc0xldmVsc0NvbG9ycyA9IFtcclxuICAgICAgICAwLjgyLFxyXG4gICAgICAgIDAuODIsXHJcbiAgICAgICAgMC44MixcclxuICAgICAgICAxLCAvLyDmtYXngbBcclxuICAgICAgICAwLjUsXHJcbiAgICAgICAgMC41LFxyXG4gICAgICAgIDAuNSxcclxuICAgICAgICAxLCAvLyDngbBcclxuICAgICAgICAwLFxyXG4gICAgICAgIDAsXHJcbiAgICAgICAgMSxcclxuICAgICAgICAxLCAvLyDok51cclxuICAgICAgICAxLFxyXG4gICAgICAgIDAsXHJcbiAgICAgICAgMSxcclxuICAgICAgICAxLCAvLyDmtIvnuqJcclxuICAgICAgICAwLFxyXG4gICAgICAgIDEsXHJcbiAgICAgICAgMSxcclxuICAgICAgICAxLCAvLyDmtYXnu79cclxuICAgICAgICAwLFxyXG4gICAgICAgIDEsXHJcbiAgICAgICAgMCxcclxuICAgICAgICAxLCAvLyDnu79cclxuICAgICAgICAxLFxyXG4gICAgICAgIDEsXHJcbiAgICAgICAgMCxcclxuICAgICAgICAxLCAvL+m7hFxyXG4gICAgICAgIDEsXHJcbiAgICAgICAgMCxcclxuICAgICAgICAwLFxyXG4gICAgICAgIDEsIC8v57qiXHJcbiAgICAgIF07XHJcblxyXG4gICAgICB0aGlzLnByb2Nlc3MuYWRkUmVuZGVyT2JqZWN0KHBvc3RSZXN1bHRDbG91ZFJPLCB0aGlzLmN1dGxpbmVPYmplY3QpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy9cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNoYW5nZU9wZXJhdG9ycygpO1xyXG5cclxuICAgIHRoaXMuY29uZmlnID0gbmV3IFBvc3RSZXN1bHRDbG91ZENvbmZpZygpO1xyXG4gICAgdGhpcy5jb25maWcuc2hvdygpO1xyXG5cclxuICAgIGxldCBzZWxmID0gdGhpcztcclxuICAgIHRoaXMuZHJhd1N2Z0V2ZW50ID0gKCkgPT4ge1xyXG4gICAgICBsZXQgbWluTWFnbml0dWRlID0gTnVtYmVyKFxyXG4gICAgICAgIHNlbGYuY29uZmlnLnByb3BlcnRpZXMuaXRlbXNbMF0uZGF0YS5taW5NYWduaXR1ZGUudmFsdWVcclxuICAgICAgKTtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWxmLmxhYmVsTWVtYmVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHNlbGYuZHJhd1N2ZyhcclxuICAgICAgICAgIHNlbGYubGFiZWxNZW1iZXJzW2ldLFxyXG4gICAgICAgICAgc2VsZi5kYXRhc1tpXSxcclxuICAgICAgICAgIHNlbGYubGFiZWxEYXRhc1tpXSxcclxuICAgICAgICAgIHNlbGYubGFiZWxEaXN0YW5jZXNbaV0sXHJcbiAgICAgICAgICBtaW5NYWduaXR1ZGVcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgdGhpcy52aWV3ZXIuc2NlbmVDYW1lcmFDaGFuZ2VkLmFkZCh0aGlzLmRyYXdTdmdFdmVudCk7XHJcbiAgfVxyXG5cclxuICByZXN0b3JlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jaGFuZ2VPcGVyYXRvcnMoKTtcclxuICAgIHRoaXMuY29uZmlnLnNob3coKTtcclxuICB9XHJcblxyXG4gIGNoYW5nZU9wZXJhdG9ycygpOiB2b2lkIHtcclxuICAgIC8vIOi/m+WFpeWRveS7pOWJjea4heepuumAieS4reS4jumrmOS6ri5cclxuICAgIHRoaXMudmlld2VyLnNlbGVjdGlvbk1hbmFnZXIuY2xlYXJBbGxTZWxlY3Rpb25BbmRIaWdobGlnaHQoKTtcclxuICAgIHRoaXMudmlld2VyLnVwZGF0ZURpc3BsYXkoKTtcclxuXHJcbiAgICAvLyDmuIXnqbrmk43kvZzlmaguXHJcbiAgICB0aGlzLnZpZXdlci5vcGVyYXRvck1hbmFnZXIuY2xlYXIoKTtcclxuICAgIC8vIOa3u+WKoOaTjeS9nOWZqFxyXG4gICAgdGhpcy52aWV3ZXIub3BlcmF0b3JNYW5hZ2VyLmFkZChuZXcgQ2FtZXJhTW91c2UoKSk7XHJcblxyXG4gICAgdGhpcy5wcmVTZWxlY3RvciA9IG5ldyBDQUVPYmplY3RQcmVTZWxlY3RvcigpO1xyXG4gICAgdGhpcy52aWV3ZXIub3BlcmF0b3JNYW5hZ2VyLmFkZCh0aGlzLnByZVNlbGVjdG9yKTtcclxuXHJcbiAgICB0aGlzLmNhZU9iamVjdFNlbGVjdG9yID0gbmV3IENBRU9iamVjdFNlbGVjdG9yKCk7XHJcbiAgICB0aGlzLnZpZXdlci5vcGVyYXRvck1hbmFnZXIuYWRkKHRoaXMuY2FlT2JqZWN0U2VsZWN0b3IpO1xyXG5cclxuICAgIHRoaXMuY2FlT2JqZWN0U2VsZWN0b3IubEJ1dHRvblVwLmFkZCgoKSA9PiB7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMudXBkYXRlUGFuZWwoKTtcclxuICAgICAgfSwgMCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGVuZCgpOiB2b2lkIHtcclxuICAgIGxldCBwb3N0SW50ZXJmYWNlTWFuYWdlciA9IHRoaXMudmlld2VyLnBvc3RJbnRlcmZhY2VNYW5hZ2VyO1xyXG4gICAgaWYgKHBvc3RJbnRlcmZhY2VNYW5hZ2VyLm1lc3NhZ2VfcG9zdFJlc3VsdCkge1xyXG4gICAgICBwb3N0SW50ZXJmYWNlTWFuYWdlci5tZXNzYWdlX3Bvc3RSZXN1bHQuY2xvc2UoKTtcclxuICAgICAgcG9zdEludGVyZmFjZU1hbmFnZXIubWVzc2FnZV9wb3N0UmVzdWx0ID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlc2V0U2NlbmUoKTtcclxuXHJcbiAgICB0aGlzLnZpZXdlci5zY2VuZUNhbWVyYUNoYW5nZWQucmVtb3ZlKHRoaXMuZHJhd1N2Z0V2ZW50KTtcclxuICAgIHRoaXMuY29uZmlnLmhpZGUoKTtcclxuICAgIHN1cGVyLmVuZCgpO1xyXG5cclxuICAgIHRoaXMudmlld2VyLnNlbGVjdGlvbk1hbmFnZXIuY2xlYXJBbGxTZWxlY3Rpb25BbmRIaWdobGlnaHQoKTtcclxuICAgIHRoaXMudmlld2VyLnVwZGF0ZURpc3BsYXkoKTtcclxuXHJcbiAgICAvLyDmm7TmlrDlt6bkvqfnu5PmnoTmoJFcclxuICAgIHN0b3JlLmNvbW1pdChcInN0cnVjdHVyZVRyZWUvdXBkYXRlVHJlZURhdGFcIiwgW1xyXG4gICAgICB0aGlzLnZpZXdlci5zdHJ1Y3R1cmVUcmVlTWFuYWdlci5yb290Tm9kZSxcclxuICAgIF0pO1xyXG5cclxuICAgIGxldCBjb21tYW5kU2VsZWN0ID0gbmV3IENvbW1hbmRTZWxlY3QoKTtcclxuICAgIHRoaXMucHJvY2Vzcy5jb21tYW5kTWFuYWdlci5leGVjdXRlKGNvbW1hbmRTZWxlY3QpO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJTdmcoKSB7XHJcbiAgICBpZiAodGhpcy5yZXN1bHRMYWJlbCkge1xyXG4gICAgICB0aGlzLnJlc3VsdExhYmVsLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICBpdGVtLmNsZWFyKCk7XHJcbiAgICAgICAgaXRlbSA9IG51bGw7XHJcbiAgICAgIH0pO1xyXG4gICAgICB0aGlzLnJlc3VsdExhYmVsID0gbmV3IEFycmF5PGFueT4oKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxhYmVsTWVtYmVycyA9IG5ldyBBcnJheTxNZW1iZXJPYmplY3Q+KCk7XHJcbiAgICB0aGlzLmRhdGFzID0gbmV3IEFycmF5PG51bWJlcltdPigpO1xyXG4gICAgdGhpcy5sYWJlbERhdGFzID0gbmV3IEFycmF5PHN0cmluZ1tdPigpO1xyXG4gICAgdGhpcy5sYWJlbERpc3RhbmNlcyA9IG5ldyBBcnJheTxudW1iZXJbXT4oKTtcclxuICAgIHRoaXMucmVzdWx0TGFiZWxEaWMgPSB7fTtcclxuICB9XHJcblxyXG4gIGluaXREcmF3U3ZnKFxyXG4gICAgbWVtYmVyOiBNZW1iZXJPYmplY3QsXHJcbiAgICBkYXRhczogbnVtYmVyW10sXHJcbiAgICBsYWJlbERhdGFzOiBzdHJpbmdbXSxcclxuICAgIGRpc3RhbmNlczogbnVtYmVyW10sXHJcbiAgICBtaW5NYWduaXR1ZGU6IG51bWJlclxyXG4gICkge1xyXG4gICAgbGV0IGRhdGEgPSB0aGlzLmNvbmZpZy5wcm9wZXJ0aWVzLml0ZW1zWzBdLmRhdGE7XHJcbiAgICBsZXQgb25seVNob3dNYXggPSBkYXRhLnNob3dNYXhQZXJHcm91cC52YWx1ZTtcclxuXHJcbiAgICBsZXQgaGFzQWRkRmxhZyA9IGZhbHNlO1xyXG4gICAgbGV0IG1heFZhbHVlID0gLTk5OTk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGFzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGlmIChkYXRhc1tpXSA+IG1heFZhbHVlKSB7XHJcbiAgICAgICAgbWF4VmFsdWUgPSBkYXRhc1tpXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgZGlzdGFuY2VzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgIGxldCBkYXRhID0gZGF0YXNbal07XHJcbiAgICAgIGxldCBsYWJlbERhdGEgPSBsYWJlbERhdGFzW2pdO1xyXG4gICAgICBpZiAoXHJcbiAgICAgICAgbWluTWFnbml0dWRlICE9PSBudWxsICYmXHJcbiAgICAgICAgbWluTWFnbml0dWRlICE9PSB1bmRlZmluZWQgJiZcclxuICAgICAgICBkYXRhIDwgbWluTWFnbml0dWRlXHJcbiAgICAgICkge1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoZGF0YSA8IG1heFZhbHVlKSB7XHJcbiAgICAgICAgaWYgKG9ubHlTaG93TWF4KSB7XHJcbiAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghaGFzQWRkRmxhZykge1xyXG4gICAgICAgIHRoaXMubGFiZWxNZW1iZXJzLnB1c2gobWVtYmVyKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIWhhc0FkZEZsYWcpIHtcclxuICAgICAgICB0aGlzLmRhdGFzLnB1c2goZGF0YXMpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghaGFzQWRkRmxhZykge1xyXG4gICAgICAgIHRoaXMubGFiZWxEYXRhcy5wdXNoKGxhYmVsRGF0YXMpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghaGFzQWRkRmxhZykge1xyXG4gICAgICAgIHRoaXMubGFiZWxEaXN0YW5jZXMucHVzaChbLi4uZGlzdGFuY2VzXSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBvcmlnaW4gPSBuZXcgRmxvYXQzMkFycmF5KG1lbWJlci5nZXRTdGFydFBvc2l0aW9uKCkpO1xyXG4gICAgICBsZXQgdmVjdG9yID0gbWVtYmVyLmdldFZlY3RvcigpO1xyXG4gICAgICBsZXQgY3VycmV0UG9zID0gTG9uZ2FuLlBvaW50LmFkZChvcmlnaW4sIExvbmdhbi5WZWN0b3IubXVsdGlwbHkodmVjdG9yLCBkaXN0YW5jZXNbal0pKTtcclxuXHJcbiAgICAgIC8vIGdldCB3aW5wb3MuXHJcbiAgICAgIGxldCBwb2ludCA9IHRoaXMudmlld2VyLndvcmxkUG9pbnRUb1BpeGVsUG9pbnQoW2N1cnJldFBvcyBhcyBhbnldKVswXTtcclxuXHJcbiAgICAgIGxldCBpZCA9IG1lbWJlci5uYW1lICsgZGlzdGFuY2VzW2pdLnRvRml4ZWQoNik7XHJcbiAgICAgIGlmICh0aGlzLnJlc3VsdExhYmVsRGljW2lkXSkge1xyXG4gICAgICAgIHRoaXMucmVzdWx0TGFiZWxEaWNbaWRdLm1vdmUocG9pbnRbMF0gKyAxLCBwb2ludFsxXSArIDEpO1xyXG4gICAgICAgIHRoaXMucmVzdWx0TGFiZWxEaWNbaWRdLmF0dHIoXCJmb250LXNpemVcIiwgRGVzaWduQmFzZU9iamVjdC5mb250U2l6ZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbGV0IGRyYXcgPSBTdmdEcmF3LmdldEluc3RhbmNlKHRoaXMudmlld2VyLmNvbnRhaW5lci5pZCkuZHJhdztcclxuICAgICAgICAvLyBpZiAoIXRoaXMuX2dyb3VwKSB7XHJcbiAgICAgICAgdGhpcy5fZ3JvdXAgPSBkcmF3Lmdyb3VwKCk7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICAgIGxldCByZXN1bHRUZXh0ID0gZHJhd1xyXG4gICAgICAgICAgLnRleHQoXHJcbiAgICAgICAgICAgIE51bWJlci5pc05hTihOdW1iZXIobGFiZWxEYXRhKSlcclxuICAgICAgICAgICAgICA/IGxhYmVsRGF0YVxyXG4gICAgICAgICAgICAgIDogTnVtYmVyKGxhYmVsRGF0YSkudG9GaXhlZCgzKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgLmZvbnQoeyBmaWxsOiB0aGlzLmxhYmVsQ29sb3IgfSlcclxuICAgICAgICAgIC5hdHRyKFwiZm9udC1zaXplXCIsIERlc2lnbkJhc2VPYmplY3QuZm9udFNpemUpXHJcbiAgICAgICAgICAubW92ZShwb2ludFswXSArIDEsIHBvaW50WzFdICsgMSk7XHJcblxyXG4gICAgICAgIHRoaXMucmVzdWx0TGFiZWwucHVzaChyZXN1bHRUZXh0KTtcclxuXHJcbiAgICAgICAgdGhpcy5yZXN1bHRMYWJlbERpY1tpZF0gPSByZXN1bHRUZXh0O1xyXG4gICAgICAgIHRoaXMuX2dyb3VwLmFkZChyZXN1bHRUZXh0KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaGFzQWRkRmxhZyA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkcmF3U3ZnKFxyXG4gICAgbWVtYmVyOiBNZW1iZXJPYmplY3QsXHJcbiAgICBkYXRhczogbnVtYmVyW10sXHJcbiAgICBsYWJlbERhdGFzOiBzdHJpbmdbXSxcclxuICAgIGRpc3RhbmNlczogbnVtYmVyW10sXHJcbiAgICBtaW5NYWduaXR1ZGU6IG51bWJlclxyXG4gICkge1xyXG4gICAgbGV0IGRhdGEgPSB0aGlzLmNvbmZpZy5wcm9wZXJ0aWVzLml0ZW1zWzBdLmRhdGE7XHJcbiAgICBsZXQgb25seVNob3dNYXggPSBkYXRhLnNob3dNYXhQZXJHcm91cC52YWx1ZTtcclxuXHJcbiAgICBsZXQgbWF4VmFsdWUgPSAtOTk5OTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKGRhdGFzW2ldID4gbWF4VmFsdWUpIHtcclxuICAgICAgICBtYXhWYWx1ZSA9IGRhdGFzW2ldO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBkaXN0YW5jZXMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgbGV0IGRhdGEgPSBkYXRhc1tqXTtcclxuICAgICAgbGV0IGxhYmVsRGF0YSA9IGxhYmVsRGF0YXNbal07XHJcbiAgICAgIGlmIChcclxuICAgICAgICBtaW5NYWduaXR1ZGUgIT09IG51bGwgJiZcclxuICAgICAgICBtaW5NYWduaXR1ZGUgIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgIGRhdGEgPCBtaW5NYWduaXR1ZGVcclxuICAgICAgKSB7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChkYXRhIDwgbWF4VmFsdWUpIHtcclxuICAgICAgICBpZiAob25seVNob3dNYXgpIHtcclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgbGV0IG9yaWdpbiA9IG5ldyBGbG9hdDMyQXJyYXkobWVtYmVyLmdldFN0YXJ0UG9zaXRpb24oKSk7XHJcbiAgICAgIGxldCB2ZWN0b3IgPSBtZW1iZXIuZ2V0VmVjdG9yKCk7XHJcbiAgICAgIGxldCBjdXJyZXRQb3MgPSBMb25nYW4uUG9pbnQuYWRkKG9yaWdpbiwgTG9uZ2FuLlZlY3Rvci5tdWx0aXBseSh2ZWN0b3IsIGRpc3RhbmNlc1tqXSkpO1xyXG5cclxuICAgICAgLy8gZ2V0IHdpbnBvcy5cclxuICAgICAgbGV0IHBvaW50ID0gdGhpcy52aWV3ZXIud29ybGRQb2ludFRvUGl4ZWxQb2ludChbY3VycmV0UG9zIGFzIGFueV0pWzBdO1xyXG5cclxuICAgICAgbGV0IGlkID0gbWVtYmVyLm5hbWUgKyBkaXN0YW5jZXNbal0udG9GaXhlZCg2KTtcclxuICAgICAgaWYgKHRoaXMucmVzdWx0TGFiZWxEaWNbaWRdKSB7XHJcbiAgICAgICAgdGhpcy5yZXN1bHRMYWJlbERpY1tpZF0ubW92ZShwb2ludFswXSArIDEsIHBvaW50WzFdICsgMSk7XHJcbiAgICAgICAgdGhpcy5yZXN1bHRMYWJlbERpY1tpZF0uYXR0cihcImZvbnQtc2l6ZVwiLCBEZXNpZ25CYXNlT2JqZWN0LmZvbnRTaXplKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgZHJhdyA9IFN2Z0RyYXcuZ2V0SW5zdGFuY2UodGhpcy52aWV3ZXIuY29udGFpbmVyLmlkKS5kcmF3O1xyXG4gICAgICAgIC8vIGlmICghdGhpcy5fZ3JvdXApIHtcclxuICAgICAgICB0aGlzLl9ncm91cCA9IGRyYXcuZ3JvdXAoKTtcclxuICAgICAgICAvLyB9XHJcblxyXG4gICAgICAgIGxldCByZXN1bHRUZXh0ID0gZHJhd1xyXG4gICAgICAgICAgLnRleHQoXHJcbiAgICAgICAgICAgIE51bWJlci5pc05hTihOdW1iZXIobGFiZWxEYXRhKSlcclxuICAgICAgICAgICAgICA/IGxhYmVsRGF0YVxyXG4gICAgICAgICAgICAgIDogTnVtYmVyKGxhYmVsRGF0YSkudG9GaXhlZCgzKVxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICAgLmZvbnQoeyBmaWxsOiB0aGlzLmxhYmVsQ29sb3IgfSlcclxuICAgICAgICAgIC5hdHRyKFwiZm9udC1zaXplXCIsIERlc2lnbkJhc2VPYmplY3QuZm9udFNpemUpXHJcbiAgICAgICAgICAubW92ZShwb2ludFswXSArIDEsIHBvaW50WzFdICsgMSk7XHJcblxyXG4gICAgICAgIHRoaXMucmVzdWx0TGFiZWwucHVzaChyZXN1bHRUZXh0KTtcclxuXHJcbiAgICAgICAgdGhpcy5yZXN1bHRMYWJlbERpY1tpZF0gPSByZXN1bHRUZXh0O1xyXG4gICAgICAgIHRoaXMuX2dyb3VwLmFkZChyZXN1bHRUZXh0KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29tbWFuZE9rKCk6IHZvaWQge1xyXG4gICAgbGV0IHBvc3RJbnRlcmZhY2VNYW5hZ2VyID0gdGhpcy52aWV3ZXIucG9zdEludGVyZmFjZU1hbmFnZXI7XHJcbiAgICBpZiAoIXBvc3RJbnRlcmZhY2VNYW5hZ2VyLmdldEZpbmlzaF9wb3N0UmVzdWx0KSB7XHJcbiAgICAgIHBvc3RJbnRlcmZhY2VNYW5hZ2VyLnRpcF9wb3N0UmVzdWx0ID0gdHJ1ZTtcclxuICAgICAgTWVzc2FnZS5pbmZvKHtcclxuICAgICAgICBtZXNzYWdlOiBcIuadhuS7tue7k+aenOS7jeWcqOivt+axgkRC5pWw5o2u77yM6K+3562J5b6F6K+35rGC5a6M5oiQLlwiLFxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKHBvc3RJbnRlcmZhY2VNYW5hZ2VyLnBvc3RSZXN1bHQpIHtcclxuICAgICAgdGhpcy5wb3N0UmVzdWx0ID0gcG9zdEludGVyZmFjZU1hbmFnZXIucG9zdFJlc3VsdDtcclxuXHJcbiAgICAgIGxldCBjb3VudGVyID0gMDtcclxuICAgICAgZm9yIChsZXQgaSBvZiBPYmplY3Qua2V5cyh0aGlzLnBvc3RSZXN1bHQpKSB7XHJcbiAgICAgICAgY291bnRlcisrO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChjb3VudGVyID09PSAwKSB7XHJcbiAgICAgICAgTWVzc2FnZS5pbmZvKFwi5p+l6K+iUl9QT1NUTUVNQkVSUkVTVUxUU+ihqOi/lOWbnuaVsOaNruS4uuepuu+8jOivt+ajgOafpURC5paH5Lu2XCIpO1xyXG4gICAgICAgIHRoaXMudmlld2VyLnVwZGF0ZURpc3BsYXkoKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIE1lc3NhZ2UuaW5mbyhcIlJfUE9TVE1FTUJFUlJFU1VMVFPooajkuI3lrZjlnKjvvIzor7fmo4Dmn6VEQuaWh+S7tlwiKTtcclxuICAgICAgdGhpcy52aWV3ZXIudXBkYXRlRGlzcGxheSgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5ZCO5aSE55CG5p2G5Lu257uT5p6cXHJcbiAgICB0aGlzLnJlc3VsdFBhcmFtZXRlclRleHQgPSBcIuaXoFwiO1xyXG4gICAgLy8g5Y+W5raI5YmN5aSE55CG5YiG6Imy5pWI5p6cXHJcbiAgICB0aGlzLnZpZXdlci5jb21tb25JbnRlcmZhY2VNYW5hZ2VyLmNvbG9yU3dpdGNoKFN3aXRjaENvbG9yRGl2aWRlLkNhbmNlbCk7XHJcbiAgICAvLyDlj5bmtojlhbbku5blkI7lpITnkIbliIboibLmlYjmnpwuXHJcbiAgICBwb3N0SW50ZXJmYWNlTWFuYWdlci5yZXNldE9odGVyUG9zdFJlc3VsdCgpO1xyXG5cclxuICAgIGxldCBkYXRhID0gdGhpcy5jb25maWcucHJvcGVydGllcy5pdGVtc1swXS5kYXRhO1xyXG4gICAgbGV0IGFmdGVydHJlYXRtZW50Uk8gPVxyXG4gICAgICB0aGlzLnByb2Nlc3MuY2FlUmVuZGVyT2JqZWN0VHJlZU1hbmFnZXIucG9zdFJlc3VsdE5vZGU7XHJcblxyXG4gICAgbGV0IHBvc3RSZXN1bHRDbG91ZFJPID1cclxuICAgICAgdGhpcy52aWV3ZXIucHJvY2Vzcy5maW5kQ2FlT2JqZWN0QnlOYW1lSW5DaGlsZE9iamVjdChcclxuICAgICAgICBhZnRlcnRyZWF0bWVudFJPLFxyXG4gICAgICAgIFwi5p6E5Lu257uT566X57uT5p6c5Zyo5L2N5LqR5Zu+XCJcclxuICAgICAgKSBhcyBEZXNpZ25CYXNlT2JqZWN0O1xyXG5cclxuICAgIC8vIGxldCBsb2FkQ29uZGl0aW9uTmFtZSA9IGRhdGEubG9hZENvbmRpdGlvbk5hbWUudmFsdWU7XHJcbiAgICBsZXQgbG9hZENvbmRpdGlvbk5hbWUgPSBudWxsO1xyXG4gICAgZm9yIChsZXQgaSBvZiBPYmplY3Qua2V5cyh0aGlzLnBvc3RSZXN1bHQpKSB7XHJcbiAgICAgIGlmIChsb2FkQ29uZGl0aW9uTmFtZSA9PT0gbnVsbCkge1xyXG4gICAgICAgIGxvYWRDb25kaXRpb25OYW1lID0gdGhpcy5wb3N0UmVzdWx0W2ldWzBdLkxvYWRDb25kaXRpb25OYW1lO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBsZXQgbWVtYmVyUG9zdFJlc3VsdCA9IHRoaXMucG9zdFJlc3VsdFtsb2FkQ29uZGl0aW9uTmFtZV07XHJcblxyXG4gICAgbGV0IGNvbG9yQ29kZSA9IGRhdGEuY29sb3JDb2RlLnZhbHVlO1xyXG4gICAgbGV0IGJsZW5kUmVuZGVyZWRDb2xvciA9IGRhdGEuYmxlbmRSZW5kZXJlZENvbG9yLnZhbHVlO1xyXG4gICAgLy8g5pi+56S65qCH562+55qE5pyA5bCP5bmF5bqmXHJcbiAgICBsZXQgbWluTWFnbml0dWRlID0gTnVtYmVyKGRhdGEubWluTWFnbml0dWRlLnZhbHVlKTtcclxuXHJcbiAgICAvLyDliJvlu7pST1xyXG4gICAgdGhpcy5wb3N0UmVzdWx0Q2xvdWRPYmplY3QgPSBuZXcgRGVzaWduQmFzZU9iamVjdCgpO1xyXG4gICAgLy8gcG9zdFJlc3VsdENsb3VkUk8uYnVzaW5lc3NTdGF0ZSA9IEJ1c2luZXNzU3RhdGUuQ3JlYXRpbmc7XHJcbiAgICB0aGlzLnBvc3RSZXN1bHRDbG91ZE9iamVjdC5uYW1lID0gbG9hZENvbmRpdGlvbk5hbWUgKyBcIuacgOWkp+WQiOaIkOW6lOWKm+avlFwiO1xyXG5cclxuICAgIHRoaXMucHJvY2Vzcy5hZGRSZW5kZXJPYmplY3QocG9zdFJlc3VsdENsb3VkUk8sIHRoaXMucG9zdFJlc3VsdENsb3VkT2JqZWN0KTtcclxuXHJcbiAgICBsZXQgbWVtYmVycyA9XHJcbiAgICAgIHRoaXMucHJvY2Vzcy5jYWVSZW5kZXJPYmplY3RUcmVlTWFuYWdlci5tZW1iZXJOb2RlLmNoaWxkT2JqZWN0cztcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgIGRhdGEucmVzdWx0UGFyYW1ldGVyLnZhbHVlID09PSAtMSB8fFxyXG4gICAgICAhY2hlY2tOb3ROdWxsT3JVbmRlZmluZGVkKGRhdGEucmVzdWx0UGFyYW1ldGVyLnZhbHVlKVxyXG4gICAgKSB7XHJcbiAgICAgIC8vXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1lbWJlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBsZXQgbWVtYmVyID0gbWVtYmVyc1tpXSBhcyBNZW1iZXJPYmplY3Q7XHJcblxyXG4gICAgICAgIC8vIOWmguaenOaYr+mcgOimgeS7jkVsZW1lbnRVQ+ihqOiOt+WPluacgOWNsemZqeW3peWGteeahOWQjuWkhOeQhuaViOaenO+8jOWImemcgOimgeabtOaWsOiOt+WPlueahOW3peWGteaVsOaNri5cclxuICAgICAgICBzd2l0Y2ggKGRhdGEucmVzdWx0UGFyYW1ldGVyLnZhbHVlKSB7XHJcbiAgICAgICAgICBjYXNlIFJlc3VsdFBhcmFtZXRlclR5cGUuVG90YWxTaGVhclVDOlxyXG4gICAgICAgICAgY2FzZSBSZXN1bHRQYXJhbWV0ZXJUeXBlLkNyaXRpY2FsTEM6XHJcbiAgICAgICAgICBjYXNlIFJlc3VsdFBhcmFtZXRlclR5cGUuQ3JpdGljYWxMQ19NYXhVQzpcclxuICAgICAgICAgICAgaWYgKHBvc3RJbnRlcmZhY2VNYW5hZ2VyLnBvc3Rfam9pbnRDYW5TdW1tYXJ5VUMpIHtcclxuICAgICAgICAgICAgICB0aGlzLnBvc3RSZXN1bHRFbGVtZW50VUMgPVxyXG4gICAgICAgICAgICAgICAgcG9zdEludGVyZmFjZU1hbmFnZXIucG9zdF9qb2ludENhblN1bW1hcnlVQztcclxuXHJcbiAgICAgICAgICAgICAgbGV0IGNvdW50ZXIgPSAwO1xyXG4gICAgICAgICAgICAgIGZvciAobGV0IGkgb2YgT2JqZWN0LmtleXModGhpcy5wb3N0UmVzdWx0RWxlbWVudFVDKSkge1xyXG4gICAgICAgICAgICAgICAgY291bnRlcisrO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoY291bnRlciA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgTWVzc2FnZS5pbmZvKFwi5p+l6K+iRWxlbWVudFVD6KGo6L+U5Zue5pWw5o2u5Li656m677yM6K+35qOA5p+lRELmlofku7ZcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXdlci51cGRhdGVEaXNwbGF5KCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIE1lc3NhZ2UuaW5mbyhcIkVsZW1lbnRVQ+ihqOS4jeWtmOWcqO+8jOivt+ajgOafpURC5paH5Lu2XCIpO1xyXG4gICAgICAgICAgICAgIHRoaXMudmlld2VyLnVwZGF0ZURpc3BsYXkoKTtcclxuICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdGhpcy5wb3N0UmVzdWx0RWxlbWVudFVDLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgICAgaWYgKG1lbWJlci5uYW1lID09PSB0aGlzLnBvc3RSZXN1bHRFbGVtZW50VUNbal0uTWVtYmVyTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgbG9hZENvbmRpdGlvbk5hbWUgPSB0aGlzLnBvc3RSZXN1bHRFbGVtZW50VUNbal0uTG9hZENvbmRpdGlvbjtcclxuICAgICAgICAgICAgICAgIG1lbWJlclBvc3RSZXN1bHQgPSB0aGlzLnBvc3RSZXN1bHRbbG9hZENvbmRpdGlvbk5hbWVdO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIOekuuS+i+aVsOaNruS4rUVsZW1lbnRVQ+ihqOWHuueOsOS6huS4gOmhuWxvYWRDb25kaXRpb25OYW1l5pWw5o2u77yM5a6e6ZmF5Zyo6KGoMTHkuK3msqHmnInlr7nlupTnmoTlt6XlhrXmlbDmja4uXHJcbiAgICAgICAgaWYgKG1lbWJlclBvc3RSZXN1bHQpIHtcclxuICAgICAgICAgIGxldCBkaXN0YW5jZXMgPSBuZXcgQXJyYXk8bnVtYmVyPigpO1xyXG4gICAgICAgICAgLy8g5L6d5o2u6YCJ6aG577yM5Y+v5Lul5pivTWF4VUPjgIFBeGlhbFVD44CBWVlCZW5kaW5nVUMg562J562JLlxyXG4gICAgICAgICAgbGV0IGRhdGFzID0gbmV3IEFycmF5PG51bWJlcj4oKTtcclxuICAgICAgICAgIGxldCBsYWJlbERhdGFzID0gbmV3IEFycmF5PHN0cmluZz4oKTtcclxuXHJcbiAgICAgICAgICBsZXQgaXNTaG93RW5nbGlzaFRleHQgPVxyXG4gICAgICAgICAgICB0aGlzLnZpZXdlci5jb21tb25JbnRlcmZhY2VNYW5hZ2VyLnNob3dFbmdsaXNoVGV4dDtcclxuICAgICAgICAgIGxldCByZXN1bHRNZW1iZXJzID0gbmV3IEFycmF5PE1lbWJlck9iamVjdD4oKTtcclxuICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgbWVtYmVyUG9zdFJlc3VsdC5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICBsZXQgbWVtYmVyTmFtZSA9IG1lbWJlclBvc3RSZXN1bHRbal0uTWVtYmVyTmFtZTtcclxuXHJcbiAgICAgICAgICAgIGlmIChtZW1iZXJOYW1lID09PSBtZW1iZXIubmFtZSkge1xyXG4gICAgICAgICAgICAgIGRpc3RhbmNlcy5wdXNoKE51bWJlcihtZW1iZXJQb3N0UmVzdWx0W2pdLkRpc3RhbmNlKSk7XHJcblxyXG4gICAgICAgICAgICAgIHN3aXRjaCAoTnVtYmVyKGRhdGEucmVzdWx0UGFyYW1ldGVyLnZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSBSZXN1bHRQYXJhbWV0ZXJUeXBlLk1heFVDOlxyXG4gICAgICAgICAgICAgICAgICBpZiAoaXNTaG93RW5nbGlzaFRleHQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdFBhcmFtZXRlclRleHQgPSBcIk1heFVDXCI7XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRQYXJhbWV0ZXJUZXh0ID0gXCLmnIDlpKflkIjmiJDlupTlipvmr5RcIjtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAvLyDmnIDlpKflkIjmiJDlupTlipvmr5RcclxuICAgICAgICAgICAgICAgICAgdGhpcy5jdXRsaW5lT2JqZWN0LmN1cnJlbnRDdXRsaW5lVHlwZSA9IEN1dGxpbmVUeXBlLlVDUmFuZ2VzO1xyXG4gICAgICAgICAgICAgICAgICBkYXRhcy5wdXNoKE51bWJlcihtZW1iZXJQb3N0UmVzdWx0W2pdLk1heFVDKSk7XHJcbiAgICAgICAgICAgICAgICAgIGxhYmVsRGF0YXMucHVzaChtZW1iZXJQb3N0UmVzdWx0W2pdLk1heFVDKTtcclxuICAgICAgICAgICAgICAgICAgLy8gbGV0IHRlbXBNYXhVQ3MgPSBbbWF4VUNzWzBdLCBtYXhVQ3NbZGlzdGFuY2VzLmxlbmd0aCAtIDFdXTtcclxuICAgICAgICAgICAgICAgICAgLy8gbWF4VUNzID0gdGVtcE1heFVDcztcclxuICAgICAgICAgICAgICAgICAgLy8gbGV0IHRlbXBEaXN0YW5jZXMgPSBbZGlzdGFuY2VzWzBdLCBkaXN0YW5jZXNbZGlzdGFuY2VzLmxlbmd0aCAtIDFdXTtcclxuICAgICAgICAgICAgICAgICAgLy8gZGlzdGFuY2VzID0gdGVtcERpc3RhbmNlcztcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFJlc3VsdFBhcmFtZXRlclR5cGUuQXhpYWxVQzpcclxuICAgICAgICAgICAgICAgICAgaWYgKGlzU2hvd0VuZ2xpc2hUZXh0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRQYXJhbWV0ZXJUZXh0ID0gXCJBeGlhbFVDXCI7XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRQYXJhbWV0ZXJUZXh0ID0gXCLovbTlkJHlupTlipvmr5RcIjtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAvLyDovbTlkJHlupTlipvmr5RcclxuICAgICAgICAgICAgICAgICAgdGhpcy5jdXRsaW5lT2JqZWN0LmN1cnJlbnRDdXRsaW5lVHlwZSA9IEN1dGxpbmVUeXBlLlVDUmFuZ2VzO1xyXG4gICAgICAgICAgICAgICAgICBkYXRhcy5wdXNoKE51bWJlcihtZW1iZXJQb3N0UmVzdWx0W2pdLkF4aWFsVUMpKTtcclxuICAgICAgICAgICAgICAgICAgbGFiZWxEYXRhcy5wdXNoKG1lbWJlclBvc3RSZXN1bHRbal0uQXhpYWxVQyk7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBSZXN1bHRQYXJhbWV0ZXJUeXBlLllZQmVuZGluZ1VDOlxyXG4gICAgICAgICAgICAgICAgICBpZiAoaXNTaG93RW5nbGlzaFRleHQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdFBhcmFtZXRlclRleHQgPSBcIllZQmVuZGluZ1VDXCI7XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRQYXJhbWV0ZXJUZXh0ID0gXCLlsYDpg6hZ6L205byv5puy5bqU5Yqb5q+UXCI7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgLy8g5bGA6YOoWei9tOW8r+absuW6lOWKm+avlFxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmN1dGxpbmVPYmplY3QuY3VycmVudEN1dGxpbmVUeXBlID0gQ3V0bGluZVR5cGUuVUNSYW5nZXM7XHJcbiAgICAgICAgICAgICAgICAgIGRhdGFzLnB1c2goTnVtYmVyKG1lbWJlclBvc3RSZXN1bHRbal0uWVlCZW5kaW5nVUMpKTtcclxuICAgICAgICAgICAgICAgICAgbGFiZWxEYXRhcy5wdXNoKG1lbWJlclBvc3RSZXN1bHRbal0uWVlCZW5kaW5nVUMpO1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgUmVzdWx0UGFyYW1ldGVyVHlwZS5aWkJlbmRpbmdVQzpcclxuICAgICAgICAgICAgICAgICAgaWYgKGlzU2hvd0VuZ2xpc2hUZXh0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRQYXJhbWV0ZXJUZXh0ID0gXCJaWkJlbmRpbmdVQ1wiO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0UGFyYW1ldGVyVGV4dCA9IFwi5bGA6YOoWui9tOW8r+absuW6lOWKm+avlFwiO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIC8vIOWxgOmDqFrovbTlvK/mm7LlupTlipvmr5RcclxuICAgICAgICAgICAgICAgICAgdGhpcy5jdXRsaW5lT2JqZWN0LmN1cnJlbnRDdXRsaW5lVHlwZSA9IEN1dGxpbmVUeXBlLlVDUmFuZ2VzO1xyXG4gICAgICAgICAgICAgICAgICBkYXRhcy5wdXNoKE51bWJlcihtZW1iZXJQb3N0UmVzdWx0W2pdLlpaQmVuZGluZ1VDKSk7XHJcbiAgICAgICAgICAgICAgICAgIGxhYmVsRGF0YXMucHVzaChtZW1iZXJQb3N0UmVzdWx0W2pdLlpaQmVuZGluZ1VDKTtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFJlc3VsdFBhcmFtZXRlclR5cGUuVG90YWxTaGVhclVDOlxyXG4gICAgICAgICAgICAgICAgICBpZiAoaXNTaG93RW5nbGlzaFRleHQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdFBhcmFtZXRlclRleHQgPSBcIlRvdGFsU2hlYXJVQ1wiO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0UGFyYW1ldGVyVGV4dCA9IFwi5pyA5aSn5Ymq5YiH5bqU5Yqb5q+UXCI7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgLy8g5pyA5aSn5Ymq5YiH5bqU5Yqb5q+UXHJcbiAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5wb3N0UmVzdWx0RWxlbWVudFVDKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCLmsqHmnInojrflj5bliLBFbGVtZW50VUPooajnmoTmlbDmja4uXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmN1dGxpbmVPYmplY3QuY3VycmVudEN1dGxpbmVUeXBlID0gQ3V0bGluZVR5cGUuVUNSYW5nZXM7XHJcbiAgICAgICAgICAgICAgICAgIGRhdGFzLnB1c2goTnVtYmVyKG1lbWJlclBvc3RSZXN1bHRbal0uVG90YWxTaGVhclVDKSk7XHJcbiAgICAgICAgICAgICAgICAgIGxhYmVsRGF0YXMucHVzaChtZW1iZXJQb3N0UmVzdWx0W2pdLlRvdGFsU2hlYXJVQyk7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBSZXN1bHRQYXJhbWV0ZXJUeXBlLkNyaXRpY2FsTEM6XHJcbiAgICAgICAgICAgICAgICAgIGlmIChpc1Nob3dFbmdsaXNoVGV4dCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0UGFyYW1ldGVyVGV4dCA9IFwiQ3JpdGljYWxMQ1wiO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0UGFyYW1ldGVyVGV4dCA9IFwi5pyA5Y2x6Zmp5bel5Ya1XCI7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgLy8g5pyA5Y2x6Zmp5bel5Ya1XHJcbiAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5wb3N0UmVzdWx0RWxlbWVudFVDKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCLmsqHmnInojrflj5bliLBFbGVtZW50VUPooajnmoTmlbDmja4uXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmN1dGxpbmVPYmplY3QuY3VycmVudEN1dGxpbmVUeXBlID0gQ3V0bGluZVR5cGUuVUNSYW5nZXM7XHJcbiAgICAgICAgICAgICAgICAgIGRhdGFzLnB1c2goTnVtYmVyKG1lbWJlclBvc3RSZXN1bHRbal0uTWF4VUMpKTtcclxuICAgICAgICAgICAgICAgICAgbGFiZWxEYXRhcy5wdXNoKGxvYWRDb25kaXRpb25OYW1lKTtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFJlc3VsdFBhcmFtZXRlclR5cGUuQ3JpdGljYWxMQ19NYXhVQzpcclxuICAgICAgICAgICAgICAgICAgaWYgKGlzU2hvd0VuZ2xpc2hUZXh0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRQYXJhbWV0ZXJUZXh0ID0gXCJDcml0aWNhbExDX01heFVDXCI7XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRQYXJhbWV0ZXJUZXh0ID0gXCLmnIDljbHpmanlt6XlhrUr5bqU5Yqb5q+UXCI7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgLy8g5pyA5Y2x6Zmp5bel5Ya1ICsg5bqU5Yqb5q+ULlxyXG4gICAgICAgICAgICAgICAgICBpZiAoIXRoaXMucG9zdFJlc3VsdEVsZW1lbnRVQykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwi5rKh5pyJ6I635Y+W5YiwRWxlbWVudFVD6KGo55qE5pWw5o2uLlwiKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgdGhpcy5jdXRsaW5lT2JqZWN0LmN1cnJlbnRDdXRsaW5lVHlwZSA9IEN1dGxpbmVUeXBlLlVDUmFuZ2VzO1xyXG4gICAgICAgICAgICAgICAgICBkYXRhcy5wdXNoKE51bWJlcihtZW1iZXJQb3N0UmVzdWx0W2pdLk1heFVDKSk7XHJcbiAgICAgICAgICAgICAgICAgIGxhYmVsRGF0YXMucHVzaChcclxuICAgICAgICAgICAgICAgICAgICBsb2FkQ29uZGl0aW9uTmFtZSArXHJcbiAgICAgICAgICAgICAgICAgICAgICBcIiAoXCIgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgTnVtYmVyKG1lbWJlclBvc3RSZXN1bHRbal0uTWF4VUMpLnRvRml4ZWQoMykgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgXCIpXCJcclxuICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFJlc3VsdFBhcmFtZXRlclR5cGUuQVhTdHJlc3M6XHJcbiAgICAgICAgICAgICAgICAgIGlmIChpc1Nob3dFbmdsaXNoVGV4dCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0UGFyYW1ldGVyVGV4dCA9IFwiQVhTdHJlc3NcIjtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdFBhcmFtZXRlclRleHQgPSBcIui9tOWQkeW6lOWKm1wiO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIC8vIOi9tOWQkeW6lOWKm1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmN1dGxpbmVPYmplY3QuY3VycmVudEN1dGxpbmVUeXBlID1cclxuICAgICAgICAgICAgICAgICAgICBDdXRsaW5lVHlwZS5TdHJlc3NMZXZlbHM7XHJcbiAgICAgICAgICAgICAgICAgIGRhdGFzLnB1c2goTnVtYmVyKG1lbWJlclBvc3RSZXN1bHRbal0uQVhTdHJlc3MpKTtcclxuICAgICAgICAgICAgICAgICAgbGFiZWxEYXRhcy5wdXNoKG1lbWJlclBvc3RSZXN1bHRbal0uQVhTdHJlc3MpO1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgUmVzdWx0UGFyYW1ldGVyVHlwZS5BWFN0cmVzc19ZYVlpbmdMaTpcclxuICAgICAgICAgICAgICAgICAgaWYgKGlzU2hvd0VuZ2xpc2hUZXh0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRQYXJhbWV0ZXJUZXh0ID0gXCLljovlupTliptcIjtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdFBhcmFtZXRlclRleHQgPSBcIuWOi+W6lOWKm1wiO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIC8vIOWOi+W6lOWKm1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmN1dGxpbmVPYmplY3QuY3VycmVudEN1dGxpbmVUeXBlID1cclxuICAgICAgICAgICAgICAgICAgICBDdXRsaW5lVHlwZS5TdHJlc3NMZXZlbHM7XHJcbiAgICAgICAgICAgICAgICAgIGRhdGFzLnB1c2goTnVtYmVyKG1lbWJlclBvc3RSZXN1bHRbal0uQVhTdHJlc3MpKTtcclxuICAgICAgICAgICAgICAgICAgbGFiZWxEYXRhcy5wdXNoKG1lbWJlclBvc3RSZXN1bHRbal0uQVhTdHJlc3MpO1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgUmVzdWx0UGFyYW1ldGVyVHlwZS5BWFN0cmVzc19MYVlpbmdMaTpcclxuICAgICAgICAgICAgICAgICAgaWYgKGlzU2hvd0VuZ2xpc2hUZXh0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRQYXJhbWV0ZXJUZXh0ID0gXCLmi4nlupTliptcIjtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdFBhcmFtZXRlclRleHQgPSBcIuaLieW6lOWKm1wiO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIC8vIOaLieW6lOWKm1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmN1dGxpbmVPYmplY3QuY3VycmVudEN1dGxpbmVUeXBlID1cclxuICAgICAgICAgICAgICAgICAgICBDdXRsaW5lVHlwZS5TdHJlc3NMZXZlbHM7XHJcbiAgICAgICAgICAgICAgICAgIGRhdGFzLnB1c2goTnVtYmVyKG1lbWJlclBvc3RSZXN1bHRbal0uQVhTdHJlc3MpKTtcclxuICAgICAgICAgICAgICAgICAgbGFiZWxEYXRhcy5wdXNoKG1lbWJlclBvc3RSZXN1bHRbal0uQVhTdHJlc3MpO1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgUmVzdWx0UGFyYW1ldGVyVHlwZS5ZWUJlbmRpbmdTdHJlc3M6XHJcbiAgICAgICAgICAgICAgICAgIGlmIChpc1Nob3dFbmdsaXNoVGV4dCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0UGFyYW1ldGVyVGV4dCA9IFwiWVlCZW5kaW5nU3RyZXNzXCI7XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRQYXJhbWV0ZXJUZXh0ID0gXCLlsYDpg6hZ6L205byv5puy5bqU5YqbXCI7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgLy8g5bGA6YOoWei9tOW8r+absuW6lOWKm1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmN1dGxpbmVPYmplY3QuY3VycmVudEN1dGxpbmVUeXBlID1cclxuICAgICAgICAgICAgICAgICAgICBDdXRsaW5lVHlwZS5TdHJlc3NMZXZlbHM7XHJcbiAgICAgICAgICAgICAgICAgIGRhdGFzLnB1c2goTnVtYmVyKG1lbWJlclBvc3RSZXN1bHRbal0uWVlCZW5kaW5nU3RyZXNzKSk7XHJcbiAgICAgICAgICAgICAgICAgIGxhYmVsRGF0YXMucHVzaChtZW1iZXJQb3N0UmVzdWx0W2pdLllZQmVuZGluZ1N0cmVzcyk7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBSZXN1bHRQYXJhbWV0ZXJUeXBlLlpaQmVuZGluZ1N0cmVzczpcclxuICAgICAgICAgICAgICAgICAgaWYgKGlzU2hvd0VuZ2xpc2hUZXh0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRQYXJhbWV0ZXJUZXh0ID0gXCJaWkJlbmRpbmdTdHJlc3NcIjtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdFBhcmFtZXRlclRleHQgPSBcIuWxgOmDqFrovbTlvK/mm7LlupTliptcIjtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAvLyDlsYDpg6ha6L205byv5puy5bqU5YqbXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY3V0bGluZU9iamVjdC5jdXJyZW50Q3V0bGluZVR5cGUgPVxyXG4gICAgICAgICAgICAgICAgICAgIEN1dGxpbmVUeXBlLlN0cmVzc0xldmVscztcclxuICAgICAgICAgICAgICAgICAgZGF0YXMucHVzaChOdW1iZXIobWVtYmVyUG9zdFJlc3VsdFtqXS5aWkJlbmRpbmdTdHJlc3MpKTtcclxuICAgICAgICAgICAgICAgICAgbGFiZWxEYXRhcy5wdXNoKG1lbWJlclBvc3RSZXN1bHRbal0uWlpCZW5kaW5nU3RyZXNzKTtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFJlc3VsdFBhcmFtZXRlclR5cGUuWVNoZWFyU3RyZXNzOlxyXG4gICAgICAgICAgICAgICAgICBpZiAoaXNTaG93RW5nbGlzaFRleHQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdFBhcmFtZXRlclRleHQgPSBcIllTaGVhclN0cmVzc1wiO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0UGFyYW1ldGVyVGV4dCA9IFwi5bGA6YOoWei9tOWJquW6lOWKm1wiO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIC8vIOWxgOmDqFnovbTliarlupTliptcclxuICAgICAgICAgICAgICAgICAgdGhpcy5jdXRsaW5lT2JqZWN0LmN1cnJlbnRDdXRsaW5lVHlwZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgQ3V0bGluZVR5cGUuU3RyZXNzTGV2ZWxzO1xyXG4gICAgICAgICAgICAgICAgICBkYXRhcy5wdXNoKE51bWJlcihtZW1iZXJQb3N0UmVzdWx0W2pdLllTaGVhclN0cmVzcykpO1xyXG4gICAgICAgICAgICAgICAgICBsYWJlbERhdGFzLnB1c2gobWVtYmVyUG9zdFJlc3VsdFtqXS5ZU2hlYXJTdHJlc3MpO1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgUmVzdWx0UGFyYW1ldGVyVHlwZS5aU2hlYXJTdHJlc3M6XHJcbiAgICAgICAgICAgICAgICAgIGlmIChpc1Nob3dFbmdsaXNoVGV4dCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0UGFyYW1ldGVyVGV4dCA9IFwiWlNoZWFyU3RyZXNzXCI7XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRQYXJhbWV0ZXJUZXh0ID0gXCLlsYDpg6ha6L205Ymq5bqU5YqbXCI7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgLy8g5bGA6YOoWui9tOWJquW6lOWKm1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmN1dGxpbmVPYmplY3QuY3VycmVudEN1dGxpbmVUeXBlID1cclxuICAgICAgICAgICAgICAgICAgICBDdXRsaW5lVHlwZS5TdHJlc3NMZXZlbHM7XHJcbiAgICAgICAgICAgICAgICAgIGRhdGFzLnB1c2goTnVtYmVyKG1lbWJlclBvc3RSZXN1bHRbal0uWlNoZWFyU3RyZXNzKSk7XHJcbiAgICAgICAgICAgICAgICAgIGxhYmVsRGF0YXMucHVzaChtZW1iZXJQb3N0UmVzdWx0W2pdLlpTaGVhclN0cmVzcyk7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBSZXN1bHRQYXJhbWV0ZXJUeXBlLkF4aWFsTG9hZDpcclxuICAgICAgICAgICAgICAgICAgaWYgKGlzU2hvd0VuZ2xpc2hUZXh0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRQYXJhbWV0ZXJUZXh0ID0gXCJBeGlhbExvYWRcIjtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdFBhcmFtZXRlclRleHQgPSBcIui9tOWQkeWGheWKm1wiO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIC8vIOi9tOWQkeWGheWKmyznnItTQUNT5pWI5p6c5Y+q6ZyA6KaB5YGa5qCH562+5bCx6KGM5LqGXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY3V0bGluZU9iamVjdC5jdXJyZW50Q3V0bGluZVR5cGUgPVxyXG4gICAgICAgICAgICAgICAgICAgIEN1dGxpbmVUeXBlLlN0cmVzc0xldmVscztcclxuICAgICAgICAgICAgICAgICAgZGF0YXMucHVzaChOdW1iZXIobWVtYmVyUG9zdFJlc3VsdFtqXS5BeGlhbExvYWQpKTtcclxuICAgICAgICAgICAgICAgICAgbGFiZWxEYXRhcy5wdXNoKG1lbWJlclBvc3RSZXN1bHRbal0uQXhpYWxMb2FkKTtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFJlc3VsdFBhcmFtZXRlclR5cGUuQXhpYWxMb2FkX1lhTmVpTGk6XHJcbiAgICAgICAgICAgICAgICAgIGlmIChpc1Nob3dFbmdsaXNoVGV4dCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0UGFyYW1ldGVyVGV4dCA9IFwi5Y6L5YaF5YqbXCI7XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRQYXJhbWV0ZXJUZXh0ID0gXCLljovlhoXliptcIjtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAvLyDljovlhoXlipss55yLU0FDU+aViOaenOWPqumcgOimgeWBmuagh+etvuWwseihjOS6hlxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmN1dGxpbmVPYmplY3QuY3VycmVudEN1dGxpbmVUeXBlID1cclxuICAgICAgICAgICAgICAgICAgICBDdXRsaW5lVHlwZS5TdHJlc3NMZXZlbHM7XHJcbiAgICAgICAgICAgICAgICAgIGRhdGFzLnB1c2goTnVtYmVyKG1lbWJlclBvc3RSZXN1bHRbal0uQXhpYWxMb2FkKSk7XHJcbiAgICAgICAgICAgICAgICAgIGxhYmVsRGF0YXMucHVzaChtZW1iZXJQb3N0UmVzdWx0W2pdLkF4aWFsTG9hZCk7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBSZXN1bHRQYXJhbWV0ZXJUeXBlLkF4aWFsTG9hZF9MYU5laUxpOlxyXG4gICAgICAgICAgICAgICAgICBpZiAoaXNTaG93RW5nbGlzaFRleHQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdFBhcmFtZXRlclRleHQgPSBcIuaLieWGheWKm1wiO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0UGFyYW1ldGVyVGV4dCA9IFwi5ouJ5YaF5YqbXCI7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgLy8g5ouJ5YaF5YqbLOeci1NBQ1PmlYjmnpzlj6rpnIDopoHlgZrmoIfnrb7lsLHooYzkuoZcclxuICAgICAgICAgICAgICAgICAgdGhpcy5jdXRsaW5lT2JqZWN0LmN1cnJlbnRDdXRsaW5lVHlwZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgQ3V0bGluZVR5cGUuU3RyZXNzTGV2ZWxzO1xyXG4gICAgICAgICAgICAgICAgICBkYXRhcy5wdXNoKE51bWJlcihtZW1iZXJQb3N0UmVzdWx0W2pdLkF4aWFsTG9hZCkpO1xyXG4gICAgICAgICAgICAgICAgICBsYWJlbERhdGFzLnB1c2gobWVtYmVyUG9zdFJlc3VsdFtqXS5BeGlhbExvYWQpO1xyXG4gICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgUmVzdWx0UGFyYW1ldGVyVHlwZS5ZWUJlbmRpbmdNb21lbnQ6XHJcbiAgICAgICAgICAgICAgICAgIGlmIChpc1Nob3dFbmdsaXNoVGV4dCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0UGFyYW1ldGVyVGV4dCA9IFwiWVlCZW5kaW5nTW9tZW50XCI7XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRQYXJhbWV0ZXJUZXh0ID0gXCLlsYDpg6hZ6L205byv55+pXCI7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgLy8g5bGA6YOoWei9tOW8r+efqVxyXG4gICAgICAgICAgICAgICAgICB0aGlzLmN1dGxpbmVPYmplY3QuY3VycmVudEN1dGxpbmVUeXBlID0gQ3V0bGluZVR5cGUuVUNSYW5nZXM7XHJcbiAgICAgICAgICAgICAgICAgIGRhdGFzLnB1c2goTnVtYmVyKG1lbWJlclBvc3RSZXN1bHRbal0uWVlCZW5kaW5nTW9tZW50KSk7XHJcbiAgICAgICAgICAgICAgICAgIGxhYmVsRGF0YXMucHVzaChtZW1iZXJQb3N0UmVzdWx0W2pdLllZQmVuZGluZ01vbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBSZXN1bHRQYXJhbWV0ZXJUeXBlLlpaQmVuZGluZ01vbWVudDpcclxuICAgICAgICAgICAgICAgICAgaWYgKGlzU2hvd0VuZ2xpc2hUZXh0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZXN1bHRQYXJhbWV0ZXJUZXh0ID0gXCJaWkJlbmRpbmdNb21lbnRcIjtcclxuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdFBhcmFtZXRlclRleHQgPSBcIuWxgOmDqFrovbTlvK/nn6lcIjtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAvLyDlsYDpg6ha6L205byv55+pXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuY3V0bGluZU9iamVjdC5jdXJyZW50Q3V0bGluZVR5cGUgPSBDdXRsaW5lVHlwZS5VQ1JhbmdlcztcclxuICAgICAgICAgICAgICAgICAgZGF0YXMucHVzaChOdW1iZXIobWVtYmVyUG9zdFJlc3VsdFtqXS5aWkJlbmRpbmdNb21lbnQpKTtcclxuICAgICAgICAgICAgICAgICAgbGFiZWxEYXRhcy5wdXNoKG1lbWJlclBvc3RSZXN1bHRbal0uWlpCZW5kaW5nTW9tZW50KTtcclxuICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8g57uY5Yi25qCH562+LlxyXG4gICAgICAgICAgaWYgKGRhdGEuZGlzcGxheUxhYmVscy52YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmluaXREcmF3U3ZnKFxyXG4gICAgICAgICAgICAgIG1lbWJlcixcclxuICAgICAgICAgICAgICBkYXRhcyxcclxuICAgICAgICAgICAgICBsYWJlbERhdGFzLFxyXG4gICAgICAgICAgICAgIGRpc3RhbmNlcyxcclxuICAgICAgICAgICAgICBtaW5NYWduaXR1ZGVcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBkaXN0YW5jZXNbMF0gPSAwO1xyXG4gICAgICAgICAgZGlzdGFuY2VzW2Rpc3RhbmNlcy5sZW5ndGggLSAxXSA9IG1lbWJlci5nZXRNZW1iZXJMZW5ndGgoKTtcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5jdXRsaW5lT2JqZWN0LmN1cnJlbnRDdXRsaW5lVHlwZSA9PT0gQ3V0bGluZVR5cGUuVUNSYW5nZXMpIHtcclxuICAgICAgICAgICAgbGV0IGNvbG9ycyA9IHRoaXMuY3V0bGluZU9iamVjdC5nZXRDb2xvcnNCeURhdGFzKFxyXG4gICAgICAgICAgICAgIGRhdGFzLFxyXG4gICAgICAgICAgICAgIHRoaXMuY3V0bGluZU9iamVjdC51Y1JhbmdlcyxcclxuICAgICAgICAgICAgICB0aGlzLmN1dGxpbmVPYmplY3QudWNSYW5nZXNDb2xvcnNcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIHJlc3VsdE1lbWJlcnMgPVxyXG4gICAgICAgICAgICAgIHRoaXMudmlld2VyLnByb2Nlc3MuY2xvdWRNZW1iZXJUcmFuc2Zvcm1NYW5hZ2VyLmNyZWF0ZUNsb3VkTWVtYmVyKFxyXG4gICAgICAgICAgICAgICAgbWVtYmVyLFxyXG4gICAgICAgICAgICAgICAgWy4uLmRpc3RhbmNlc10sXHJcbiAgICAgICAgICAgICAgICBjb2xvcnMsXHJcbiAgICAgICAgICAgICAgICBjb2xvckNvZGUsXHJcbiAgICAgICAgICAgICAgICBibGVuZFJlbmRlcmVkQ29sb3JcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgdGhpcy5jdXRsaW5lT2JqZWN0LmN1cnJlbnRDdXRsaW5lVHlwZSA9PT0gQ3V0bGluZVR5cGUuU3RyZXNzTGV2ZWxzXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgbGV0IGNvbG9ycyA9IHRoaXMuY3V0bGluZU9iamVjdC5nZXRDb2xvcnNCeURhdGFzKFxyXG4gICAgICAgICAgICAgIGRhdGFzLFxyXG4gICAgICAgICAgICAgIHRoaXMuY3V0bGluZU9iamVjdC5zdHJlc3NMZXZlbHNBY3R1YWwsXHJcbiAgICAgICAgICAgICAgdGhpcy5jdXRsaW5lT2JqZWN0LnN0cmVzc0xldmVsc0NvbG9yc1xyXG4gICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgcmVzdWx0TWVtYmVycyA9XHJcbiAgICAgICAgICAgICAgdGhpcy52aWV3ZXIucHJvY2Vzcy5jbG91ZE1lbWJlclRyYW5zZm9ybU1hbmFnZXIuY3JlYXRlQ2xvdWRNZW1iZXIoXHJcbiAgICAgICAgICAgICAgICBtZW1iZXIsXHJcbiAgICAgICAgICAgICAgICBbLi4uZGlzdGFuY2VzXSxcclxuICAgICAgICAgICAgICAgIGNvbG9ycyxcclxuICAgICAgICAgICAgICAgIGNvbG9yQ29kZSxcclxuICAgICAgICAgICAgICAgIGJsZW5kUmVuZGVyZWRDb2xvclxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgaWYgKHJlc3VsdE1lbWJlcnMgJiYgcmVzdWx0TWVtYmVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIC8vIG1lbWJlci52aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGxldCBpcm8gPSB0aGlzLnZpZXdlci5maW5kSW5zdGFuY2VPYmplY3QobWVtYmVyKTtcclxuICAgICAgICAgICAgaWYgKGlybykge1xyXG4gICAgICAgICAgICAgIGlyby52aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgcmVzdWx0TWVtYmVycy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgIHRoaXMudmlld2VyLnByb2Nlc3MuYWRkUmVuZGVyT2JqZWN0KFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wb3N0UmVzdWx0Q2xvdWRPYmplY3QsXHJcbiAgICAgICAgICAgICAgICByZXN1bHRNZW1iZXJzW2pdXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICByZXN1bHRNZW1iZXJzW2pdLnNldE5lZWRVcGRhdGUoKTtcclxuICAgICAgICAgICAgICB0aGlzLmNsb3VkTWVtYmVycy5wdXNoKHJlc3VsdE1lbWJlcnNbal0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLm1lbWJlcnMucHVzaChtZW1iZXIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vICAgdGhpcy52aWV3ZXIuYWRkU3RhdGUob2xkT2JqLCBuZXdPYmosIChzdGF0ZUl0ZW0pID0+IHtcclxuICAgIC8vICAgICBsZXQgb2JqID0gc3RhdGVJdGVtLm5ld09iai5vYmo7XHJcbiAgICAvLyAgICAgb2JqLm9mZnNldHMgPSBzdGF0ZUl0ZW0ubmV3T2JqLm9mZnNldHM7XHJcbiAgICAvLyAgICAgb2JqLmJ1c2luZXNzU3RhdGUgPSBCdXNpbmVzc1N0YXRlLkVkaXRpbmc7XHJcblxyXG4gICAgLy8gICAgIG9iai5zZXROZWVkVXBkYXRlKCk7XHJcbiAgICAvLyAgICAgdGhpcy52aWV3ZXIudXBkYXRlRGlzcGxheSgpO1xyXG4gICAgLy8gICB9KTtcclxuXHJcbiAgICB0aGlzLnZpZXdlci5zZWxlY3Rpb25NYW5hZ2VyLmNsZWFyQWxsU2VsZWN0aW9uQW5kSGlnaGxpZ2h0KCk7XHJcbiAgICB0aGlzLnZpZXdlci51cGRhdGVEaXNwbGF5KCk7XHJcbiAgICB0aGlzLmNhZU9iamVjdFNlbGVjdG9yLnNlbGVjdGVkUmVuZGVyT2JqZWN0cy5jbGVhcigpO1xyXG4gICAgdGhpcy51cGRhdGVQYW5lbCgpO1xyXG5cclxuICAgIGlmIChkYXRhLmRpc3BsYXlDdXRsaW5lLnZhbHVlICYmIGRhdGEuY29sb3JDb2RlLnZhbHVlKSB7XHJcbiAgICAgIHRoaXMucmVmcmVzaEN1dGxpbmUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIHN0b3JlLmNvbW1pdChcInNldExlZ2VuZFwiLCB7fSk7XHJcbiAgICAgIExlZ2VuZE1hbmFnZS5kZXN0b3J5KHRoaXMuZWxlbWVudEtleSk7XHJcbiAgICB9XHJcblxyXG4gICAgcG9zdEludGVyZmFjZU1hbmFnZXIuYWN0aXZlX3Bvc3RSZXN1bHQgPSB0cnVlO1xyXG4gICAgZGF0YS50aXAudmFsdWUgPSAwO1xyXG5cclxuICAgIC8vIOabtOaWsOW3puS+p+e7k+aehOagkVxyXG4gICAgc3RvcmUuY29tbWl0KFwic3RydWN0dXJlVHJlZS91cGRhdGVUcmVlRGF0YVwiLCBbXHJcbiAgICAgIHRoaXMudmlld2VyLnN0cnVjdHVyZVRyZWVNYW5hZ2VyLnJvb3ROb2RlLFxyXG4gICAgXSk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVQYW5lbCgpIHt9XHJcblxyXG4gIGdldENvbG9yQnlJbmRleChjb2xvcnM6IG51bWJlcltdLCBpbmRleDogbnVtYmVyKSB7XHJcbiAgICAvL1xyXG4gICAgbGV0IGNvbG9yID0gY29sb3JzLnNsaWNlKDQgKiBpbmRleCwgNCAqIChpbmRleCArIDEpKTtcclxuICAgIHJldHVybiBjb2xvcjtcclxuICB9XHJcblxyXG4gIHJlc2V0U2NlbmUoKSB7XHJcbiAgICBMZWdlbmRNYW5hZ2UuZGVzdG9yeSh0aGlzLmVsZW1lbnRLZXkpO1xyXG4gICAgdGhpcy5jbGVhclN2ZygpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm1lbWJlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgLy8gdGhpcy5tZW1iZXJzW2ldLnZpc2libGUgPSB0cnVlO1xyXG4gICAgICBsZXQgaXJvID0gdGhpcy52aWV3ZXIuZmluZEluc3RhbmNlT2JqZWN0KHRoaXMubWVtYmVyc1tpXSk7XHJcbiAgICAgIGlmIChpcm8pIHtcclxuICAgICAgICBpcm8udmlzaWJsZSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2xvdWRNZW1iZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHRoaXMudmlld2VyLnByb2Nlc3MucmVtb3ZlUmVuZGVyT2JqZWN0KHRoaXMuY2xvdWRNZW1iZXJzW2ldKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5wb3N0UmVzdWx0Q2xvdWRPYmplY3QpIHtcclxuICAgICAgdGhpcy5wb3N0UmVzdWx0Q2xvdWRPYmplY3QuZGVsZXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5tZW1iZXJzID0gW107XHJcbiAgICB0aGlzLmNsb3VkTWVtYmVycyA9IFtdO1xyXG5cclxuICAgIGxldCBwb3N0SW50ZXJmYWNlTWFuYWdlciA9IHRoaXMudmlld2VyLnBvc3RJbnRlcmZhY2VNYW5hZ2VyO1xyXG4gICAgcG9zdEludGVyZmFjZU1hbmFnZXIuYWN0aXZlX3Bvc3RSZXN1bHQgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHJlZnJlc2hDdXRsaW5lKCkge1xyXG4gICAgLy9cclxuICAgIGxldCBjb21wb25lbnQgPSBMZWdlbmRNYW5hZ2UuY3JlYXRlKFxyXG4gICAgICB0aGlzLmVsZW1lbnRLZXksXHJcbiAgICAgIHRoaXMuY3V0bGluZU9iamVjdC5nZUN1dGxpbmUoKSxcclxuICAgICAgXCJcIixcclxuICAgICAgXCJcIixcclxuICAgICAgXCJcIlxyXG4gICAgKTtcclxuICAgIGlmICh0aGlzLnZpZXdlci5jb21tb25JbnRlcmZhY2VNYW5hZ2VyLnNob3dFbmdsaXNoVGV4dCkge1xyXG4gICAgICBjb21wb25lbnQudGl0bGUgPSBcIk1lbWJlclJlc3VsdO+8mlwiICsgdGhpcy5yZXN1bHRQYXJhbWV0ZXJUZXh0O1xyXG4gICAgICBjb21wb25lbnQubGVmdFRleHQgPSBcIkNvbG9yXCI7XHJcbiAgICAgIGNvbXBvbmVudC5yaWdodFRleHQgPSBcIlJhbmdlXCI7XHJcblxyXG4gICAgICAvLyBzdG9yZS5jb21taXQoXCJzZXRMZWdlbmRUaXRsZVwiLCBcIk1lbWJlclJlc3VsdO+8mlwiICsgdGhpcy5yZXN1bHRQYXJhbWV0ZXJUZXh0KTtcclxuICAgICAgLy8gc3RvcmUuY29tbWl0KFwic2V0TGVnZW5kTGVmdFRleHRcIiwgXCJDb2xvclwiKTtcclxuICAgICAgLy8gc3RvcmUuY29tbWl0KFxyXG4gICAgICAvLyAgIFwic2V0TGVnZW5kUmlnaHRUZXh0XCIsXHJcbiAgICAgIC8vICAgXCJSYW5nZVwiXHJcbiAgICAgIC8vICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb21wb25lbnQudGl0bGUgPSBcIuaehOS7tue7k+aenO+8mlwiICsgdGhpcy5yZXN1bHRQYXJhbWV0ZXJUZXh0O1xyXG4gICAgICBjb21wb25lbnQubGVmdFRleHQgPSBcIuminOiJslwiO1xyXG4gICAgICBjb21wb25lbnQucmlnaHRUZXh0ID0gXCLojIPlm7RcIjtcclxuXHJcbiAgICAgIC8vIHN0b3JlLmNvbW1pdChcInNldExlZ2VuZFRpdGxlXCIsIFwi5p6E5Lu257uT5p6c77yaXCIgKyB0aGlzLnJlc3VsdFBhcmFtZXRlclRleHQpO1xyXG4gICAgICAvLyBzdG9yZS5jb21taXQoXCJzZXRMZWdlbmRMZWZ0VGV4dFwiLCBcIuminOiJslwiKTtcclxuICAgICAgLy8gc3RvcmUuY29tbWl0KFwic2V0TGVnZW5kUmlnaHRUZXh0XCIsIFwi6IyD5Zu0XCIpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBNEJBO0FBQUE7QUF5Q0E7QUFBQTtBQXhDQTtBQU1BO0FBRUE7QUFHQTtBQUVBO0FBS0E7QUFJQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBRUE7O0FBSUE7QUFFQTtBQUNBO0FBR0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBSUE7QUFLQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU9BO0FBQ0E7QUFtQ0E7QUFDQTtBQUlBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7O0FBUUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBRUE7QUFDQTtBQUdBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBR0E7QUFJQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQU9BO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUtBOztBQUdBO0FBQ0E7QUFDQTs7O0FBSUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFHQTtBQUNBO0FBQ0E7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFNQTtBQUFBO0FBSUE7QUFFQTtBQUNBOztBQUdBOztBQUVBO0FBRUE7QUFPQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7O0FBR0E7QUFDQTtBQUNBOzs7QUFJQTtBQUNBO0FBQ0E7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBR0E7QUFNQTtBQUFBO0FBSUE7QUFFQTtBQUNBOzs7QUFHQTtBQUVBOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFFQTs7QUFDQTtBQUFBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFJQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBR0E7QUFPQTs7QUFDQTtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7QUFHQTtBQUVBO0FBQ0E7QUFFQTtBQUdBO0FBRUE7QUFFQTtBQUVBO0FBR0E7QUFNQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7O0FBQ0E7QUFBQTtBQUNBOzs7Ozs7Ozs7Ozs7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBOztBQUlBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUdBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUdBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUdBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUdBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUdBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBTUE7QUFDQTs7QUFTQTtBQUNBO0FBRUE7QUFDQTtBQU1BO0FBUUE7QUFHQTtBQU1BOztBQVVBO0FBRUE7QUFDQTtBQUNBOztBQUdBO0FBQ0E7QUFJQTtBQUNBOztBQUdBOzs7OztBQWVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7O0FBR0E7QUFDQTtBQUdBO0FBR0E7QUFFQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7OztBQUlBO0FBQ0E7O0FBR0E7QUFDQTs7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7O0FBTUE7QUFDQTtBQUFBOzs7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./packages/caeDesign/src/viewerWrapper/commands/aftertreatment/postResultCloud/commandPostResultCloud.ts\n");
|
|
5800
5800
|
|
|
5801
5801
|
/***/ }),
|
|
5802
5802
|
|
|
@@ -5884,7 +5884,7 @@ eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPAC
|
|
|
5884
5884
|
/*! no static exports found */
|
|
5885
5885
|
/***/ (function(module, exports, __webpack_require__) {
|
|
5886
5886
|
|
|
5887
|
-
eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__, exports, __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\"), __webpack_require__(/*! ../../../../gsDevFx/operators/cameraMouse */ \"./packages/caeDesign/src/gsDevFx/operators/cameraMouse.ts\"), __webpack_require__(/*! ../../../../gsDevFx/operators/cAEObjectPreSelector */ \"./packages/caeDesign/src/gsDevFx/operators/cAEObjectPreSelector.ts\"), __webpack_require__(/*! ../../../../gsDevFx/operators/caeObjectSelector */ \"./packages/caeDesign/src/gsDevFx/operators/caeObjectSelector.ts\"), __webpack_require__(/*! ../../../../gsDevFx/commands/commandSelect */ \"./packages/caeDesign/src/gsDevFx/commands/commandSelect.ts\"), __webpack_require__(/*! ../../commandComponent */ \"./packages/caeDesign/src/viewerWrapper/commands/commandComponent.ts\"), __webpack_require__(/*! ./showJointCanUCConfig */ \"./packages/caeDesign/src/viewerWrapper/commands/aftertreatment/showJointCanUC/showJointCanUCConfig.ts\"), __webpack_require__(/*! gs-ceec-design */ \"./packages/ceecDesign/src/index.ts\"), __webpack_require__(/*! ../../../../store */ \"./packages/caeDesign/src/store/index.ts\"), __webpack_require__(/*! ../../../../gsDevFx/managers/interfaceManagers/selectionInterfaceManager */ \"./packages/caeDesign/src/gsDevFx/managers/interfaceManagers/selectionInterfaceManager.ts\"), __webpack_require__(/*! ../../../../gsDevFx/objects/pretreatmentObjects/cutlinePostJointUCObject */ \"./packages/caeDesign/src/gsDevFx/objects/pretreatmentObjects/cutlinePostJointUCObject.ts\"), __webpack_require__(/*! gs-ceec-design */ \"./packages/ceecDesign/src/index.ts\"), __webpack_require__(/*! gs-bim-air */ \"./node_modules/gs-bim-air/lib/BimAir.umd.min.js\"), __webpack_require__(/*! gs-ceec-design */ \"./packages/ceecDesign/src/index.ts\"), __webpack_require__(/*! ../../../../gsDevFx/managers/interfaceManagers/commonInterfaceManager */ \"./packages/caeDesign/src/gsDevFx/managers/interfaceManagers/commonInterfaceManager.ts\"), __webpack_require__(/*! element-ui */ \"./node_modules/element-ui/lib/element-ui.common.js\"), __webpack_require__(/*! ../../../../viewerWrapper/module/legendManage */ \"./packages/caeDesign/src/viewerWrapper/module/legendManage.ts\")], __WEBPACK_AMD_DEFINE_RESULT__ = (function (require, exports, tslib_1, cameraMouse_1, cAEObjectPreSelector_1, caeObjectSelector_1, commandSelect_1, commandComponent_1, showJointCanUCConfig_1, gs_ceec_design_1, store_1, selectionInterfaceManager_1, cutlinePostJointUCObject_1, gs_ceec_design_2, gs_bim_air_1, gs_ceec_design_3, commonInterfaceManager_1, element_ui_1, legendManage_1) {\n \"use strict\";\n\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n showJointCanUCConfig_1 = tslib_1.__importDefault(showJointCanUCConfig_1);\n store_1 = tslib_1.__importDefault(store_1);\n var CommandShowJointCanUC = function (_super) {\n tslib_1.__extends(CommandShowJointCanUC, _super);\n function CommandShowJointCanUC() {\n var _this = _super.call(this) || this;\n _this.typeName = \"CommandShowJointCanUC\";\n _this.postResult = null;\n _this.jointCanSummaryUC = null;\n _this.cutlineObject = null;\n _this.members = new Array();\n _this.cloudMembers = new Array();\n _this._group = null;\n _this.labelMembers = new Array();\n _this.labelDatas = new Array();\n _this.labelDistances = new Array();\n _this.resultLabel = new Array();\n _this.resultLabelDic = {};\n _this.labelColor = \"#ffffff\";\n _this.elementKey = \"cutline\";\n return _this;\n }\n CommandShowJointCanUC.prototype.begin = function () {\n var _this = this;\n this.changeOperators();\n console.log(\"CommandShowJointCanUC\");\n this.config = new showJointCanUCConfig_1.default();\n this.config.show();\n var postInterfaceManager = this.viewer.postInterfaceManager;\n if (!postInterfaceManager.getFinish_jointCanUC) {\n postInterfaceManager.tip_jointCanUC = true;\n if (!postInterfaceManager.message_jointCanUC) {\n postInterfaceManager.message_jointCanUC = element_ui_1.Message.info({\n message: \"节点冲切仍在请求DB数据,请等待请求完成.\",\n duration: 0,\n showClose: true\n });\n }\n }\n setTimeout(function () {\n var data = _this.config.properties.items[0].data;\n data.minMagnitude.value = 0;\n data.displayLabels.value = true;\n data.displayCutline.value = true;\n data.colorCode.value = true;\n }, 100);\n this.viewer.sceneCameraChanged.add(function () {\n var minMagnitude = Number(_this.config.properties.items[0].data.minMagnitude.value);\n for (var i = 0; i < _this.labelMembers.length; i++) {\n _this.drawSvg(_this.labelMembers[i], _this.labelDatas[i], _this.labelDistances[i], minMagnitude);\n }\n });\n };\n CommandShowJointCanUC.prototype.restore = function () {\n this.changeOperators();\n this.config.show();\n };\n CommandShowJointCanUC.prototype.changeOperators = function () {\n var _this = this;\n this.viewer.selectionManager.clearAllSelectionAndHighlight();\n this.viewer.updateDisplay();\n this.viewer.operatorManager.clear();\n this.viewer.operatorManager.add(new cameraMouse_1.CameraMouse());\n this.preSelector = new cAEObjectPreSelector_1.CAEObjectPreSelector();\n this.viewer.operatorManager.add(this.preSelector);\n this.caeObjectSelector = new caeObjectSelector_1.CAEObjectSelector();\n this.viewer.operatorManager.add(this.caeObjectSelector);\n this.viewer.selectionInterfaceManager.selectorFilter = selectionInterfaceManager_1.SelectorFiliter.Member;\n this.caeObjectSelector.lButtonUp.add(function () {\n setTimeout(function () {\n _this.updatePanel();\n }, 0);\n });\n };\n CommandShowJointCanUC.prototype.end = function () {\n var postInterfaceManager = this.viewer.postInterfaceManager;\n if (postInterfaceManager.message_jointCanUC) {\n postInterfaceManager.message_jointCanUC.close();\n postInterfaceManager.message_jointCanUC = null;\n }\n this.config.hide();\n _super.prototype.end.call(this);\n this.viewer.selectionManager.clearAllSelectionAndHighlight();\n this.resetScene();\n this.viewer.updateDisplay();\n store_1.default.commit(\"structureTree/updateTreeData\", [this.viewer.structureTreeManager.rootNode]);\n var commandSelect = new commandSelect_1.CommandSelect();\n this.process.commandManager.execute(commandSelect);\n };\n CommandShowJointCanUC.prototype.clearSvg = function () {\n if (this.resultLabel) {\n this.resultLabel.forEach(function (item) {\n item.clear();\n item = null;\n });\n this.resultLabel = new Array();\n }\n this.labelMembers = new Array();\n this.labelDatas = new Array();\n this.labelDistances = new Array();\n this.resultLabelDic = {};\n };\n CommandShowJointCanUC.prototype.drawSvg = function (member, datas, distances, minMagnitude) {\n for (var j = 0; j < distances.length; j++) {\n var data = datas[j];\n if (minMagnitude !== null && minMagnitude !== undefined && data < minMagnitude) {\n continue;\n }\n var origin_1 = new Float32Array(member.getStartPosition());\n var vector = member.getVector();\n var curretPos = gs_bim_air_1.Longan.Point.add(origin_1, gs_bim_air_1.Longan.Vector.multiply(vector, distances[j]));\n var point = this.viewer.worldPointToPixelPoint([curretPos])[0];\n var id = member.name + distances[j];\n if (this.resultLabelDic[id]) {\n this.resultLabelDic[id].move(point[0] + 1, point[1] + 1);\n this.resultLabelDic[id].attr(\"font-size\", gs_ceec_design_1.DesignBaseObject.fontSize);\n } else {\n var draw = gs_ceec_design_3.SvgDraw.getInstance(this.viewer.container.id).draw;\n this._group = draw.group();\n var resultText = draw.text(Number(data).toFixed(3)).font({\n fill: this.labelColor\n }).attr(\"font-size\", gs_ceec_design_1.DesignBaseObject.fontSize).move(point[0] + 1, point[1] + 1);\n this.resultLabel.push(resultText);\n var id_1 = member.name + distances[j];\n this.resultLabelDic[id_1] = resultText;\n this._group.add(resultText);\n }\n }\n };\n CommandShowJointCanUC.prototype.commandOk = function () {\n var e_1, _a, e_2, _b, e_3, _c;\n var postInterfaceManager = this.viewer.postInterfaceManager;\n if (!postInterfaceManager.getFinish_jointCanUC) {\n postInterfaceManager.tip_jointCanUC = true;\n element_ui_1.Message.info({\n message: \"节点冲切仍在请求DB数据,请等待请求完成.\"\n });\n return;\n }\n if (postInterfaceManager.jointCanUC) {\n this.postResult = postInterfaceManager.jointCanUC;\n var counter = 0;\n try {\n for (var _d = tslib_1.__values(Object.keys(postInterfaceManager.jointCanUC)), _e = _d.next(); !_e.done; _e = _d.next()) {\n var i = _e.value;\n counter++;\n }\n } catch (e_1_1) {\n e_1 = {\n error: e_1_1\n };\n } finally {\n try {\n if (_e && !_e.done && (_a = _d.return)) _a.call(_d);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n if (counter === 0) {\n element_ui_1.Message.info(\"查询JointCanUC表返回数据为空,请检查DB文件\");\n var data_1 = this.config.properties.items[0].data;\n data_1.tip.value = 2;\n return;\n }\n this.config.properties.items[0].data.loadConditionName.selectOptions.selections = [];\n try {\n for (var _f = tslib_1.__values(Object.keys(postInterfaceManager.jointCanUC)), _g = _f.next(); !_g.done; _g = _f.next()) {\n var i = _g.value;\n if (postInterfaceManager.jointCanUC[i][0]) {\n var loadConditionName_1 = postInterfaceManager.jointCanUC[i][0].LoadCase;\n this.config.properties.items[0].data.loadConditionName.selectOptions.selections.push({\n label: loadConditionName_1,\n value: loadConditionName_1\n });\n }\n }\n } catch (e_2_1) {\n e_2 = {\n error: e_2_1\n };\n } finally {\n try {\n if (_g && !_g.done && (_b = _f.return)) _b.call(_f);\n } finally {\n if (e_2) throw e_2.error;\n }\n }\n } else {\n element_ui_1.Message.info(\"JointCanUC表不存在,请检查DB文件\");\n var data_2 = this.config.properties.items[0].data;\n data_2.tip.value = 2;\n return;\n }\n if (postInterfaceManager.jointCanSummaryUC) {\n this.jointCanSummaryUC = postInterfaceManager.jointCanSummaryUC;\n } else {\n element_ui_1.Message.info(\"jointCanSummaryUC表不存在,请检查DB文件\");\n var data_3 = this.config.properties.items[0].data;\n data_3.tip.value = 2;\n return;\n }\n console.log(\"管节点冲切应力比在位显示\");\n this.viewer.commonInterfaceManager.colorSwitch(commonInterfaceManager_1.SwitchColorDivide.Cancel);\n postInterfaceManager.resetOhterPostResult();\n var data = this.config.properties.items[0].data;\n var colorCode = data.colorCode.value;\n var minMagnitude = Number(data.minMagnitude.value);\n var aftertreatmentRO = this.viewer.process.findRenderObjectByName(\"后处理计算结果\");\n var showJointCanUCRO = this.viewer.process.findCaeObjectByNameInChildObject(aftertreatmentRO, \"管节点冲切应力比在位显示\");\n showJointCanUCRO = new gs_ceec_design_1.DesignBaseObject();\n showJointCanUCRO.name = \"管节点冲切应力比在位显示\";\n this.process.addRenderObject(aftertreatmentRO, showJointCanUCRO);\n this.cutlineObject = this.viewer.process.findCaeObjectByNameInChildObject(showJointCanUCRO, \"管节点冲切应力图例数据\");\n if (!this.cutlineObject) {\n this.cutlineObject = new cutlinePostJointUCObject_1.CutlinePostJointUCObject();\n this.cutlineObject.name = \"管节点冲切应力比图例\";\n this.cutlineObject.businessState = gs_ceec_design_2.BusinessState.Creating;\n this.cutlineObject.title = \"管节点冲切应力比\";\n this.cutlineObject.ucRanges = [0, 0.2, 0.35, 0.9, 1.0];\n this.cutlineObject.ucRangesColors = [0.82, 0.82, 0.82, 1, 0.5, 0.5, 0.5, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1];\n this.process.addRenderObject(showJointCanUCRO, this.cutlineObject);\n } else {}\n var loadConditionName = null;\n try {\n for (var _h = tslib_1.__values(Object.keys(this.postResult)), _j = _h.next(); !_j.done; _j = _h.next()) {\n var i = _j.value;\n if (loadConditionName === null) {\n loadConditionName = this.postResult[i][0].LoadCase;\n }\n }\n } catch (e_3_1) {\n e_3 = {\n error: e_3_1\n };\n } finally {\n try {\n if (_j && !_j.done && (_c = _h.return)) _c.call(_h);\n } finally {\n if (e_3) throw e_3.error;\n }\n }\n var jointCanUC = this.postResult[loadConditionName];\n var hasReadJointName = new Array();\n var memberMapColors = new Map();\n for (var i = 0; i < this.jointCanSummaryUC.length; i++) {\n var summaryItem = this.jointCanSummaryUC[i];\n var jointName = summaryItem.JointName;\n var OrigLoadUC = summaryItem.OrigLoadUC;\n var sabraceJointName = summaryItem.SABraceJoint;\n var colors = this.cutlineObject.getColorsByDatas([OrigLoadUC], this.cutlineObject.ucRanges, this.cutlineObject.ucRangesColors);\n var braceJointName = sabraceJointName;\n var members = this.viewer.process.findRenderObjectsByType(\"MemberObject\");\n for (var k = 0; k < members.length; k++) {\n var member = members[k];\n var cloudMemberTransformManager = this.viewer.process.cloudMemberTransformManager;\n var length_1 = member.getMemberLength();\n var memberColor = tslib_1.__spreadArray([], tslib_1.__read(member.faceColor), false);\n memberColor[0] /= 255;\n memberColor[1] /= 255;\n memberColor[2] /= 255;\n var resultMembers = new Array();\n if (member.start.name === jointName && member.end.name === braceJointName) {\n if (member.divDistances) {\n member.delete();\n continue;\n }\n var distances = [0, length_1 / 3, length_1 / 3, length_1];\n var divColors = colors.concat(colors).concat(memberColor).concat(memberColor);\n if (member.visible === false) {\n var currentColors = memberMapColors.get(member.id);\n distances = [0, length_1 / 3, length_1 / 3, 2 * length_1 / 3, 2 * length_1 / 3, length_1];\n divColors = colors.concat(colors).concat(currentColors);\n } else {\n memberMapColors.set(member.id, divColors);\n }\n resultMembers = cloudMemberTransformManager.createCloudMember(member, distances, divColors, colorCode);\n for (var l = 0; l < resultMembers.length; l++) {\n resultMembers[l].visible = true;\n resultMembers[l].divDistances = distances;\n resultMembers[l].divColors = divColors;\n }\n } else if (member.end.name === jointName && member.start.name === braceJointName) {\n if (member.divDistances) {\n member.delete();\n this.viewer.updateDisplay();\n continue;\n }\n var distances = [0, 2 * length_1 / 3, 2 * length_1 / 3, length_1];\n var divColors = memberColor.concat(memberColor).concat(colors).concat(colors);\n if (member.visible === false) {\n var currentColors = memberMapColors.get(member.id);\n distances = [0, length_1 / 3, length_1 / 3, 2 * length_1 / 3, 2 * length_1 / 3, length_1];\n divColors = currentColors.concat(colors).concat(colors);\n } else {\n memberMapColors.set(member.id, divColors);\n }\n resultMembers = cloudMemberTransformManager.createCloudMember(member, distances, divColors, colorCode);\n for (var l = 0; l < resultMembers.length; l++) {\n resultMembers[l].visible = true;\n resultMembers[l].divDistances = distances;\n resultMembers[l].divColors = divColors;\n }\n }\n if (resultMembers && resultMembers.length > 0) {\n if (data.displayLabels.value) {\n var n = 6;\n var dis = length_1 / n;\n if (member.end.name === jointName && member.start.name === braceJointName) {\n dis = length_1 * (n - 1) / n;\n }\n this.labelMembers.push(member);\n this.labelDatas.push([OrigLoadUC]);\n this.labelDistances.push([dis]);\n this.drawSvg(member, [OrigLoadUC, OrigLoadUC], [dis], minMagnitude);\n }\n var parentRO = this.process.caeRenderObjectTreeManager.tempNode;\n member.visible = false;\n for (var j = 0; j < resultMembers.length; j++) {\n this.viewer.process.addRenderObject(parentRO, resultMembers[j]);\n resultMembers[j].setNeedUpdate();\n this.cloudMembers.push(resultMembers[j]);\n }\n this.members.push(member);\n }\n }\n }\n console.log(\"jointCanUC:\", jointCanUC);\n this.viewer.selectionManager.clearAllSelectionAndHighlight();\n this.viewer.updateDisplay();\n this.caeObjectSelector.selectedRenderObjects.clear();\n this.updatePanel();\n if (data.displayCutline.value && data.colorCode.value) {\n this.refreshCutline();\n } else {\n legendManage_1.LegendManage.destory(this.elementKey);\n }\n postInterfaceManager.active_jointCanUC = true;\n data.tip.value = 1;\n store_1.default.commit(\"structureTree/updateTreeData\", [this.viewer.structureTreeManager.rootNode]);\n };\n CommandShowJointCanUC.prototype.resetScene = function () {\n this.clearSvg();\n this.deleteJointCanUCRO();\n legendManage_1.LegendManage.destory(this.elementKey);\n var postInterfaceManager = this.viewer.postInterfaceManager;\n postInterfaceManager.active_distortion = false;\n };\n CommandShowJointCanUC.prototype.updatePanel = function () {};\n CommandShowJointCanUC.prototype.refreshCutline = function () {\n var component = legendManage_1.LegendManage.create(this.elementKey, this.cutlineObject.geCutline(), \"节点冲切\", \"颜色\", \"冲切值\");\n };\n CommandShowJointCanUC.prototype.deleteJointCanUCRO = function () {\n for (var i = 0; i < this.members.length; i++) {\n this.members[i].visible = true;\n }\n for (var i = 0; i < this.cloudMembers.length; i++) {\n this.viewer.process.removeRenderObject(this.cloudMembers[i]);\n }\n var aftertreatmentRO = this.viewer.process.findRenderObjectByName(\"后处理计算结果\");\n var showJointCanUCRO = this.viewer.process.findCaeObjectByNameInChildObject(aftertreatmentRO, \"管节点冲切应力比在位显示\");\n if (showJointCanUCRO) {\n showJointCanUCRO.childObjects.forEach(function (item) {\n item.delete();\n });\n showJointCanUCRO.delete();\n }\n this.viewer.updateDisplay();\n };\n return CommandShowJointCanUC;\n }(commandComponent_1.CommandComponent);\n exports.default = CommandShowJointCanUC;\n}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9wYWNrYWdlcy9jYWVEZXNpZ24vc3JjL3ZpZXdlcldyYXBwZXIvY29tbWFuZHMvYWZ0ZXJ0cmVhdG1lbnQvc2hvd0pvaW50Q2FuVUMvY29tbWFuZFNob3dKb2ludENhblVDLnRzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vW25hbWVdLy4vcGFja2FnZXMvY2FlRGVzaWduL3NyYy92aWV3ZXJXcmFwcGVyL2NvbW1hbmRzL2FmdGVydHJlYXRtZW50L3Nob3dKb2ludENhblVDL2NvbW1hbmRTaG93Sm9pbnRDYW5VQy50cz8yZmMxIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENhbWVyYU1vdXNlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2dzRGV2Rngvb3BlcmF0b3JzL2NhbWVyYU1vdXNlXCI7XHJcbmltcG9ydCB7IENBRU9iamVjdFByZVNlbGVjdG9yIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2dzRGV2Rngvb3BlcmF0b3JzL2NBRU9iamVjdFByZVNlbGVjdG9yXCI7XHJcbmltcG9ydCB7IENBRU9iamVjdFNlbGVjdG9yIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2dzRGV2Rngvb3BlcmF0b3JzL2NhZU9iamVjdFNlbGVjdG9yXCI7XHJcbmltcG9ydCB7IENvbW1hbmRTZWxlY3QgfSBmcm9tIFwiLi4vLi4vLi4vLi4vZ3NEZXZGeC9jb21tYW5kcy9jb21tYW5kU2VsZWN0XCI7XHJcbmltcG9ydCB7IENvbW1hbmRDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vY29tbWFuZENvbXBvbmVudFwiO1xyXG5pbXBvcnQgU2hvd0pvaW50Q2FuVUNDb25maWcgZnJvbSBcIi4vc2hvd0pvaW50Q2FuVUNDb25maWdcIjtcclxuaW1wb3J0IHsgRGVzaWduQmFzZU9iamVjdCB9IGZyb20gXCJncy1jZWVjLWRlc2lnblwiO1xyXG5pbXBvcnQgc3RvcmUgZnJvbSBcIi4uLy4uLy4uLy4uL3N0b3JlXCI7XHJcbmltcG9ydCByZW5kZXJPYmplY3RTZXJ2aWNlIGZyb20gXCIuLi8uLi8uLi8uLi9hcGkvcmVuZGVyT2JqZWN0U2VydmljZVwiO1xyXG5pbXBvcnQgeyBNZW1iZXJPYmplY3QgfSBmcm9tIFwiLi4vLi4vLi4vLi4vZ3NEZXZGeC9vYmplY3RzL2NhZU9iamVjdHMvbWVtYmVyT2JqZWN0XCI7XHJcbmltcG9ydCB7IFNlbGVjdG9yRmlsaXRlciB9IGZyb20gXCIuLi8uLi8uLi8uLi9nc0RldkZ4L21hbmFnZXJzL2ludGVyZmFjZU1hbmFnZXJzL3NlbGVjdGlvbkludGVyZmFjZU1hbmFnZXJcIjtcclxuaW1wb3J0IHsgQ3V0bGluZVBvc3RKb2ludFVDT2JqZWN0IH0gZnJvbSBcIi4uLy4uLy4uLy4uL2dzRGV2Rngvb2JqZWN0cy9wcmV0cmVhdG1lbnRPYmplY3RzL2N1dGxpbmVQb3N0Sm9pbnRVQ09iamVjdFwiO1xyXG5pbXBvcnQgeyBCdXNpbmVzc1N0YXRlIH0gZnJvbSBcImdzLWNlZWMtZGVzaWduXCI7XHJcbmltcG9ydCB7IEcgfSBmcm9tIFwiQHN2Z2RvdGpzL3N2Zy5qc1wiO1xyXG5pbXBvcnQgeyBMb25nYW4gfSBmcm9tIFwiZ3MtYmltLWFpclwiO1xyXG5pbXBvcnQgeyBTdmdEcmF3IH0gZnJvbSBcImdzLWNlZWMtZGVzaWduXCI7XHJcbmltcG9ydCB7IFN3aXRjaENvbG9yRGl2aWRlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2dzRGV2RngvbWFuYWdlcnMvaW50ZXJmYWNlTWFuYWdlcnMvY29tbW9uSW50ZXJmYWNlTWFuYWdlclwiO1xyXG5pbXBvcnQgeyBNZXNzYWdlIH0gZnJvbSBcImVsZW1lbnQtdWlcIjtcclxuaW1wb3J0IHsgTGVnZW5kTWFuYWdlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3ZpZXdlcldyYXBwZXIvbW9kdWxlL2xlZ2VuZE1hbmFnZVwiO1xyXG5cclxuLyoqXHJcbiAqIOeuoeiKgueCueWGsuWIh+W6lOWKm+avlFxyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29tbWFuZFNob3dKb2ludENhblVDIGV4dGVuZHMgQ29tbWFuZENvbXBvbmVudCB7XHJcbiAgdHlwZU5hbWUgPSBcIkNvbW1hbmRTaG93Sm9pbnRDYW5VQ1wiO1xyXG5cclxuICBjb25maWc6IFNob3dKb2ludENhblVDQ29uZmlnO1xyXG4gIHByZVNlbGVjdG9yOiBDQUVPYmplY3RQcmVTZWxlY3RvcjtcclxuICBjYWVPYmplY3RTZWxlY3RvcjogQ0FFT2JqZWN0U2VsZWN0b3I7XHJcblxyXG4gIHBvc3RSZXN1bHQgPSBudWxsO1xyXG4gIGpvaW50Q2FuU3VtbWFyeVVDID0gbnVsbDtcclxuXHJcbiAgY3V0bGluZU9iamVjdDogQ3V0bGluZVBvc3RKb2ludFVDT2JqZWN0ID0gbnVsbDtcclxuXHJcbiAgLyoqXHJcbiAgICog6KKr6L2s5o2i55qE5p2G5Lu25YiX6KGoXHJcbiAgICovXHJcbiAgbWVtYmVycyA9IG5ldyBBcnJheTxNZW1iZXJPYmplY3Q+KCk7XHJcbiAgLyoqXHJcbiAgICog6L2s5o2i5ZCO55qE5LqR5Zu+5p2G5Lu25YiX6KGoXHJcbiAgICovXHJcbiAgY2xvdWRNZW1iZXJzOiBNZW1iZXJPYmplY3RbXSA9IG5ldyBBcnJheTxNZW1iZXJPYmplY3Q+KCk7XHJcblxyXG4gIF9ncm91cDogRyA9IG51bGw7XHJcbiAgbGFiZWxNZW1iZXJzID0gbmV3IEFycmF5PE1lbWJlck9iamVjdD4oKTtcclxuICBsYWJlbERhdGFzID0gbmV3IEFycmF5PG51bWJlcltdPigpO1xyXG4gIGxhYmVsRGlzdGFuY2VzID0gbmV3IEFycmF5PG51bWJlcltdPigpO1xyXG4gIHJlc3VsdExhYmVsID0gbmV3IEFycmF5PGFueT4oKTtcclxuICByZXN1bHRMYWJlbERpYzogeyBbaWQ6IHN0cmluZ106IGFueSB9ID0ge307XHJcbiAgbGFiZWxDb2xvciA9IFwiI2ZmZmZmZlwiO1xyXG5cclxuICBlbGVtZW50S2V5ID0gXCJjdXRsaW5lXCI7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIGJlZ2luKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jaGFuZ2VPcGVyYXRvcnMoKTtcclxuXHJcbiAgICBjb25zb2xlLmxvZyhcIkNvbW1hbmRTaG93Sm9pbnRDYW5VQ1wiKTtcclxuICAgIHRoaXMuY29uZmlnID0gbmV3IFNob3dKb2ludENhblVDQ29uZmlnKCk7XHJcbiAgICB0aGlzLmNvbmZpZy5zaG93KCk7XHJcblxyXG4gICAgbGV0IHBvc3RJbnRlcmZhY2VNYW5hZ2VyID0gdGhpcy52aWV3ZXIucG9zdEludGVyZmFjZU1hbmFnZXI7XHJcbiAgICBpZiAoIXBvc3RJbnRlcmZhY2VNYW5hZ2VyLmdldEZpbmlzaF9qb2ludENhblVDKSB7XHJcbiAgICAgIHBvc3RJbnRlcmZhY2VNYW5hZ2VyLnRpcF9qb2ludENhblVDID0gdHJ1ZTtcclxuICAgICAgaWYgKCFwb3N0SW50ZXJmYWNlTWFuYWdlci5tZXNzYWdlX2pvaW50Q2FuVUMpIHtcclxuICAgICAgICBwb3N0SW50ZXJmYWNlTWFuYWdlci5tZXNzYWdlX2pvaW50Q2FuVUMgPSBNZXNzYWdlLmluZm8oe1xyXG4gICAgICAgICAgbWVzc2FnZTogXCLoioLngrnlhrLliIfku43lnKjor7fmsYJEQuaVsOaNru+8jOivt+etieW+heivt+axguWujOaIkC5cIixcclxuICAgICAgICAgIGR1cmF0aW9uOiAwLFxyXG4gICAgICAgICAgc2hvd0Nsb3NlOiB0cnVlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGxldCBkYXRhID0gdGhpcy5jb25maWcucHJvcGVydGllcy5pdGVtc1swXS5kYXRhO1xyXG4gICAgICBkYXRhLm1pbk1hZ25pdHVkZS52YWx1ZSA9IDA7XHJcbiAgICAgIGRhdGEuZGlzcGxheUxhYmVscy52YWx1ZSA9IHRydWU7XHJcbiAgICAgIGRhdGEuZGlzcGxheUN1dGxpbmUudmFsdWUgPSB0cnVlO1xyXG4gICAgICBkYXRhLmNvbG9yQ29kZS52YWx1ZSA9IHRydWU7XHJcbiAgICB9LCAxMDApO1xyXG5cclxuICAgIHRoaXMudmlld2VyLnNjZW5lQ2FtZXJhQ2hhbmdlZC5hZGQoKCkgPT4ge1xyXG4gICAgICBsZXQgbWluTWFnbml0dWRlID0gTnVtYmVyKFxyXG4gICAgICAgIHRoaXMuY29uZmlnLnByb3BlcnRpZXMuaXRlbXNbMF0uZGF0YS5taW5NYWduaXR1ZGUudmFsdWVcclxuICAgICAgKTtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxhYmVsTWVtYmVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHRoaXMuZHJhd1N2ZyhcclxuICAgICAgICAgIHRoaXMubGFiZWxNZW1iZXJzW2ldLFxyXG4gICAgICAgICAgdGhpcy5sYWJlbERhdGFzW2ldLFxyXG4gICAgICAgICAgdGhpcy5sYWJlbERpc3RhbmNlc1tpXSxcclxuICAgICAgICAgIG1pbk1hZ25pdHVkZVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcmVzdG9yZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuY2hhbmdlT3BlcmF0b3JzKCk7XHJcbiAgICB0aGlzLmNvbmZpZy5zaG93KCk7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VPcGVyYXRvcnMoKTogdm9pZCB7XHJcbiAgICAvLyDov5vlhaXlkb3ku6TliY3muIXnqbrpgInkuK3kuI7pq5jkuq4uXHJcbiAgICB0aGlzLnZpZXdlci5zZWxlY3Rpb25NYW5hZ2VyLmNsZWFyQWxsU2VsZWN0aW9uQW5kSGlnaGxpZ2h0KCk7XHJcbiAgICB0aGlzLnZpZXdlci51cGRhdGVEaXNwbGF5KCk7XHJcblxyXG4gICAgLy8g5riF56m65pON5L2c5ZmoLlxyXG4gICAgdGhpcy52aWV3ZXIub3BlcmF0b3JNYW5hZ2VyLmNsZWFyKCk7XHJcbiAgICAvLyDmt7vliqDmk43kvZzlmahcclxuICAgIHRoaXMudmlld2VyLm9wZXJhdG9yTWFuYWdlci5hZGQobmV3IENhbWVyYU1vdXNlKCkpO1xyXG5cclxuICAgIHRoaXMucHJlU2VsZWN0b3IgPSBuZXcgQ0FFT2JqZWN0UHJlU2VsZWN0b3IoKTtcclxuICAgIHRoaXMudmlld2VyLm9wZXJhdG9yTWFuYWdlci5hZGQodGhpcy5wcmVTZWxlY3Rvcik7XHJcblxyXG4gICAgdGhpcy5jYWVPYmplY3RTZWxlY3RvciA9IG5ldyBDQUVPYmplY3RTZWxlY3RvcigpO1xyXG4gICAgdGhpcy52aWV3ZXIub3BlcmF0b3JNYW5hZ2VyLmFkZCh0aGlzLmNhZU9iamVjdFNlbGVjdG9yKTtcclxuXHJcbiAgICAvL3RoaXMuY2FlT2JqZWN0U2VsZWN0b3IuaXNNdWx0aVNlbGVjdCA9IHRydWU7XHJcblxyXG4gICAgdGhpcy52aWV3ZXIuc2VsZWN0aW9uSW50ZXJmYWNlTWFuYWdlci5zZWxlY3RvckZpbHRlciA9XHJcbiAgICAgIFNlbGVjdG9yRmlsaXRlci5NZW1iZXI7XHJcblxyXG4gICAgdGhpcy5jYWVPYmplY3RTZWxlY3Rvci5sQnV0dG9uVXAuYWRkKCgpID0+IHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVQYW5lbCgpO1xyXG4gICAgICB9LCAwKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZW5kKCk6IHZvaWQge1xyXG4gICAgbGV0IHBvc3RJbnRlcmZhY2VNYW5hZ2VyID0gdGhpcy52aWV3ZXIucG9zdEludGVyZmFjZU1hbmFnZXI7XHJcbiAgICBpZiAocG9zdEludGVyZmFjZU1hbmFnZXIubWVzc2FnZV9qb2ludENhblVDKSB7XHJcbiAgICAgIHBvc3RJbnRlcmZhY2VNYW5hZ2VyLm1lc3NhZ2Vfam9pbnRDYW5VQy5jbG9zZSgpO1xyXG4gICAgICBwb3N0SW50ZXJmYWNlTWFuYWdlci5tZXNzYWdlX2pvaW50Q2FuVUMgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY29uZmlnLmhpZGUoKTtcclxuICAgIHN1cGVyLmVuZCgpO1xyXG5cclxuICAgIHRoaXMudmlld2VyLnNlbGVjdGlvbk1hbmFnZXIuY2xlYXJBbGxTZWxlY3Rpb25BbmRIaWdobGlnaHQoKTtcclxuXHJcbiAgICB0aGlzLnJlc2V0U2NlbmUoKTtcclxuICAgIHRoaXMudmlld2VyLnVwZGF0ZURpc3BsYXkoKTtcclxuXHJcbiAgICAvLyBzdG9yZS5jb21taXQoXCJzZXRMZWdlbmRcIiwge30pO1xyXG5cclxuICAgIC8vIOabtOaWsOW3puS+p+e7k+aehOagkVxyXG4gICAgc3RvcmUuY29tbWl0KFwic3RydWN0dXJlVHJlZS91cGRhdGVUcmVlRGF0YVwiLCBbXHJcbiAgICAgIHRoaXMudmlld2VyLnN0cnVjdHVyZVRyZWVNYW5hZ2VyLnJvb3ROb2RlLFxyXG4gICAgXSk7XHJcblxyXG4gICAgbGV0IGNvbW1hbmRTZWxlY3QgPSBuZXcgQ29tbWFuZFNlbGVjdCgpO1xyXG4gICAgdGhpcy5wcm9jZXNzLmNvbW1hbmRNYW5hZ2VyLmV4ZWN1dGUoY29tbWFuZFNlbGVjdCk7XHJcbiAgfVxyXG5cclxuICBjbGVhclN2ZygpIHtcclxuICAgIGlmICh0aGlzLnJlc3VsdExhYmVsKSB7XHJcbiAgICAgIHRoaXMucmVzdWx0TGFiZWwuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgIGl0ZW0uY2xlYXIoKTtcclxuICAgICAgICBpdGVtID0gbnVsbDtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMucmVzdWx0TGFiZWwgPSBuZXcgQXJyYXk8YW55PigpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubGFiZWxNZW1iZXJzID0gbmV3IEFycmF5PE1lbWJlck9iamVjdD4oKTtcclxuICAgIHRoaXMubGFiZWxEYXRhcyA9IG5ldyBBcnJheTxudW1iZXJbXT4oKTtcclxuICAgIHRoaXMubGFiZWxEaXN0YW5jZXMgPSBuZXcgQXJyYXk8bnVtYmVyW10+KCk7XHJcbiAgICB0aGlzLnJlc3VsdExhYmVsRGljID0ge307XHJcbiAgfVxyXG5cclxuICBkcmF3U3ZnKFxyXG4gICAgbWVtYmVyOiBNZW1iZXJPYmplY3QsXHJcbiAgICBkYXRhczogbnVtYmVyW10sXHJcbiAgICBkaXN0YW5jZXM6IG51bWJlcltdLFxyXG4gICAgbWluTWFnbml0dWRlOiBudW1iZXJcclxuICApIHtcclxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgZGlzdGFuY2VzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgIGxldCBkYXRhID0gZGF0YXNbal07XHJcbiAgICAgIGlmIChcclxuICAgICAgICBtaW5NYWduaXR1ZGUgIT09IG51bGwgJiZcclxuICAgICAgICBtaW5NYWduaXR1ZGUgIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgIGRhdGEgPCBtaW5NYWduaXR1ZGVcclxuICAgICAgKSB7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBvcmlnaW4gPSBuZXcgRmxvYXQzMkFycmF5KG1lbWJlci5nZXRTdGFydFBvc2l0aW9uKCkpO1xyXG4gICAgICBsZXQgdmVjdG9yID0gbWVtYmVyLmdldFZlY3RvcigpO1xyXG4gICAgICBsZXQgY3VycmV0UG9zID0gTG9uZ2FuLlBvaW50LmFkZChvcmlnaW4sIExvbmdhbi5WZWN0b3IubXVsdGlwbHkodmVjdG9yLCBkaXN0YW5jZXNbal0pKTtcclxuXHJcbiAgICAgIC8vIGdldCB3aW5wb3MuXHJcbiAgICAgIGxldCBwb2ludCA9IHRoaXMudmlld2VyLndvcmxkUG9pbnRUb1BpeGVsUG9pbnQoW2N1cnJldFBvcyBhcyBhbnldKVswXTtcclxuXHJcbiAgICAgIGxldCBpZCA9IG1lbWJlci5uYW1lICsgZGlzdGFuY2VzW2pdO1xyXG4gICAgICBpZiAodGhpcy5yZXN1bHRMYWJlbERpY1tpZF0pIHtcclxuICAgICAgICB0aGlzLnJlc3VsdExhYmVsRGljW2lkXS5tb3ZlKHBvaW50WzBdICsgMSwgcG9pbnRbMV0gKyAxKTtcclxuICAgICAgICB0aGlzLnJlc3VsdExhYmVsRGljW2lkXS5hdHRyKFwiZm9udC1zaXplXCIsIERlc2lnbkJhc2VPYmplY3QuZm9udFNpemUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBkcmF3ID0gU3ZnRHJhdy5nZXRJbnN0YW5jZSh0aGlzLnZpZXdlci5jb250YWluZXIuaWQpLmRyYXc7XHJcbiAgICAgICAgLy8gaWYgKCF0aGlzLl9ncm91cCkge1xyXG4gICAgICAgIHRoaXMuX2dyb3VwID0gZHJhdy5ncm91cCgpO1xyXG4gICAgICAgIC8vIH1cclxuICAgICAgICBsZXQgcmVzdWx0VGV4dCA9IGRyYXdcclxuICAgICAgICAgIC50ZXh0KE51bWJlcihkYXRhKS50b0ZpeGVkKDMpKVxyXG4gICAgICAgICAgLmZvbnQoeyBmaWxsOiB0aGlzLmxhYmVsQ29sb3IgfSlcclxuICAgICAgICAgIC5hdHRyKFwiZm9udC1zaXplXCIsIERlc2lnbkJhc2VPYmplY3QuZm9udFNpemUpXHJcbiAgICAgICAgICAubW92ZShwb2ludFswXSArIDEsIHBvaW50WzFdICsgMSk7XHJcblxyXG4gICAgICAgIHRoaXMucmVzdWx0TGFiZWwucHVzaChyZXN1bHRUZXh0KTtcclxuXHJcbiAgICAgICAgbGV0IGlkID0gbWVtYmVyLm5hbWUgKyBkaXN0YW5jZXNbal07XHJcbiAgICAgICAgdGhpcy5yZXN1bHRMYWJlbERpY1tpZF0gPSByZXN1bHRUZXh0O1xyXG4gICAgICAgIHRoaXMuX2dyb3VwLmFkZChyZXN1bHRUZXh0KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29tbWFuZE9rKCk6IHZvaWQge1xyXG4gICAgbGV0IHBvc3RJbnRlcmZhY2VNYW5hZ2VyID0gdGhpcy52aWV3ZXIucG9zdEludGVyZmFjZU1hbmFnZXI7XHJcbiAgICBpZiAoIXBvc3RJbnRlcmZhY2VNYW5hZ2VyLmdldEZpbmlzaF9qb2ludENhblVDKSB7XHJcbiAgICAgIHBvc3RJbnRlcmZhY2VNYW5hZ2VyLnRpcF9qb2ludENhblVDID0gdHJ1ZTtcclxuICAgICAgTWVzc2FnZS5pbmZvKHtcclxuICAgICAgICBtZXNzYWdlOiBcIuiKgueCueWGsuWIh+S7jeWcqOivt+axgkRC5pWw5o2u77yM6K+3562J5b6F6K+35rGC5a6M5oiQLlwiLFxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChwb3N0SW50ZXJmYWNlTWFuYWdlci5qb2ludENhblVDKSB7XHJcbiAgICAgIHRoaXMucG9zdFJlc3VsdCA9IHBvc3RJbnRlcmZhY2VNYW5hZ2VyLmpvaW50Q2FuVUM7XHJcblxyXG4gICAgICBsZXQgY291bnRlciA9IDA7XHJcbiAgICAgIGZvciAobGV0IGkgb2YgT2JqZWN0LmtleXMocG9zdEludGVyZmFjZU1hbmFnZXIuam9pbnRDYW5VQykpIHtcclxuICAgICAgICBjb3VudGVyKys7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvdW50ZXIgPT09IDApIHtcclxuICAgICAgICBNZXNzYWdlLmluZm8oXCLmn6Xor6JKb2ludENhblVD6KGo6L+U5Zue5pWw5o2u5Li656m677yM6K+35qOA5p+lRELmlofku7ZcIik7XHJcbiAgICAgICAgbGV0IGRhdGEgPSB0aGlzLmNvbmZpZy5wcm9wZXJ0aWVzLml0ZW1zWzBdLmRhdGE7XHJcbiAgICAgICAgZGF0YS50aXAudmFsdWUgPSAyO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5jb25maWcucHJvcGVydGllcy5pdGVtc1swXS5kYXRhLmxvYWRDb25kaXRpb25OYW1lLnNlbGVjdE9wdGlvbnMuc2VsZWN0aW9ucyA9XHJcbiAgICAgICAgW107XHJcbiAgICAgIGZvciAobGV0IGkgb2YgT2JqZWN0LmtleXMocG9zdEludGVyZmFjZU1hbmFnZXIuam9pbnRDYW5VQykpIHtcclxuICAgICAgICBpZiAocG9zdEludGVyZmFjZU1hbmFnZXIuam9pbnRDYW5VQ1tpXVswXSkge1xyXG4gICAgICAgICAgbGV0IGxvYWRDb25kaXRpb25OYW1lID1cclxuICAgICAgICAgICAgcG9zdEludGVyZmFjZU1hbmFnZXIuam9pbnRDYW5VQ1tpXVswXS5Mb2FkQ2FzZTtcclxuICAgICAgICAgIHRoaXMuY29uZmlnLnByb3BlcnRpZXMuaXRlbXNbMF0uZGF0YS5sb2FkQ29uZGl0aW9uTmFtZS5zZWxlY3RPcHRpb25zLnNlbGVjdGlvbnMucHVzaChcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGxhYmVsOiBsb2FkQ29uZGl0aW9uTmFtZSxcclxuICAgICAgICAgICAgICB2YWx1ZTogbG9hZENvbmRpdGlvbk5hbWUsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBNZXNzYWdlLmluZm8oXCJKb2ludENhblVD6KGo5LiN5a2Y5Zyo77yM6K+35qOA5p+lRELmlofku7ZcIik7XHJcbiAgICAgIGxldCBkYXRhID0gdGhpcy5jb25maWcucHJvcGVydGllcy5pdGVtc1swXS5kYXRhO1xyXG4gICAgICBkYXRhLnRpcC52YWx1ZSA9IDI7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocG9zdEludGVyZmFjZU1hbmFnZXIuam9pbnRDYW5TdW1tYXJ5VUMpIHtcclxuICAgICAgdGhpcy5qb2ludENhblN1bW1hcnlVQyA9IHBvc3RJbnRlcmZhY2VNYW5hZ2VyLmpvaW50Q2FuU3VtbWFyeVVDO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgTWVzc2FnZS5pbmZvKFwiam9pbnRDYW5TdW1tYXJ5VUPooajkuI3lrZjlnKjvvIzor7fmo4Dmn6VEQuaWh+S7tlwiKTtcclxuICAgICAgbGV0IGRhdGEgPSB0aGlzLmNvbmZpZy5wcm9wZXJ0aWVzLml0ZW1zWzBdLmRhdGE7XHJcbiAgICAgIGRhdGEudGlwLnZhbHVlID0gMjtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnNvbGUubG9nKFwi566h6IqC54K55Yay5YiH5bqU5Yqb5q+U5Zyo5L2N5pi+56S6XCIpO1xyXG4gICAgLy8g5Y+W5raI5YmN5aSE55CG5YiG6Imy5pWI5p6cXHJcbiAgICB0aGlzLnZpZXdlci5jb21tb25JbnRlcmZhY2VNYW5hZ2VyLmNvbG9yU3dpdGNoKFN3aXRjaENvbG9yRGl2aWRlLkNhbmNlbCk7XHJcbiAgICAvLyDlj5bmtojlhbbku5blkI7lpITnkIbliIboibLmlYjmnpwuXHJcbiAgICBwb3N0SW50ZXJmYWNlTWFuYWdlci5yZXNldE9odGVyUG9zdFJlc3VsdCgpO1xyXG5cclxuICAgIGxldCBkYXRhID0gdGhpcy5jb25maWcucHJvcGVydGllcy5pdGVtc1swXS5kYXRhO1xyXG4gICAgbGV0IGNvbG9yQ29kZSA9IGRhdGEuY29sb3JDb2RlLnZhbHVlO1xyXG4gICAgbGV0IG1pbk1hZ25pdHVkZSA9IE51bWJlcihkYXRhLm1pbk1hZ25pdHVkZS52YWx1ZSk7XHJcblxyXG4gICAgbGV0IGFmdGVydHJlYXRtZW50Uk8gPSB0aGlzLnZpZXdlci5wcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RCeU5hbWUoXHJcbiAgICAgIFwi5ZCO5aSE55CG6K6h566X57uT5p6cXCJcclxuICAgICkgYXMgRGVzaWduQmFzZU9iamVjdDtcclxuICAgIGxldCBzaG93Sm9pbnRDYW5VQ1JPID0gdGhpcy52aWV3ZXIucHJvY2Vzcy5maW5kQ2FlT2JqZWN0QnlOYW1lSW5DaGlsZE9iamVjdChcclxuICAgICAgYWZ0ZXJ0cmVhdG1lbnRSTyxcclxuICAgICAgXCLnrqHoioLngrnlhrLliIflupTlipvmr5TlnKjkvY3mmL7npLpcIlxyXG4gICAgKSBhcyBEZXNpZ25CYXNlT2JqZWN0O1xyXG5cclxuICAgIHNob3dKb2ludENhblVDUk8gPSBuZXcgRGVzaWduQmFzZU9iamVjdCgpO1xyXG4gICAgLy8gc2hvd0pvaW50Q2FuVUNSTy5idXNpbmVzc1N0YXRlID0gQnVzaW5lc3NTdGF0ZS5DcmVhdGluZztcclxuICAgIHNob3dKb2ludENhblVDUk8ubmFtZSA9IFwi566h6IqC54K55Yay5YiH5bqU5Yqb5q+U5Zyo5L2N5pi+56S6XCI7XHJcbiAgICB0aGlzLnByb2Nlc3MuYWRkUmVuZGVyT2JqZWN0KGFmdGVydHJlYXRtZW50Uk8sIHNob3dKb2ludENhblVDUk8pO1xyXG5cclxuICAgIHRoaXMuY3V0bGluZU9iamVjdCA9IHRoaXMudmlld2VyLnByb2Nlc3MuZmluZENhZU9iamVjdEJ5TmFtZUluQ2hpbGRPYmplY3QoXHJcbiAgICAgIHNob3dKb2ludENhblVDUk8sXHJcbiAgICAgIFwi566h6IqC54K55Yay5YiH5bqU5Yqb5Zu+5L6L5pWw5o2uXCJcclxuICAgICkgYXMgQ3V0bGluZVBvc3RKb2ludFVDT2JqZWN0O1xyXG5cclxuICAgIGlmICghdGhpcy5jdXRsaW5lT2JqZWN0KSB7XHJcbiAgICAgIC8vIOa3u+WKoOWbvuS+i+aVsOaNrlJPKOimgeaMgeS5heWMluS/neWtmCkuXHJcbiAgICAgIHRoaXMuY3V0bGluZU9iamVjdCA9IG5ldyBDdXRsaW5lUG9zdEpvaW50VUNPYmplY3QoKTtcclxuICAgICAgdGhpcy5jdXRsaW5lT2JqZWN0Lm5hbWUgPSBcIueuoeiKgueCueWGsuWIh+W6lOWKm+avlOWbvuS+i1wiO1xyXG4gICAgICB0aGlzLmN1dGxpbmVPYmplY3QuYnVzaW5lc3NTdGF0ZSA9IEJ1c2luZXNzU3RhdGUuQ3JlYXRpbmc7XHJcbiAgICAgIHRoaXMuY3V0bGluZU9iamVjdC50aXRsZSA9IFwi566h6IqC54K55Yay5YiH5bqU5Yqb5q+UXCI7XHJcbiAgICAgIHRoaXMuY3V0bGluZU9iamVjdC51Y1JhbmdlcyA9IFswLCAwLjIsIDAuMzUsIDAuOSwgMS4wXTtcclxuICAgICAgdGhpcy5jdXRsaW5lT2JqZWN0LnVjUmFuZ2VzQ29sb3JzID0gW1xyXG4gICAgICAgIDAuODIsIDAuODIsIDAuODIsIDEsIDAuNSwgMC41LCAwLjUsIDEsIDAsIDEsIDAsIDEsIDEsIDEsIDAsIDEsIDEsIDAsIDAsXHJcbiAgICAgICAgMSxcclxuICAgICAgXTtcclxuXHJcbiAgICAgIHRoaXMucHJvY2Vzcy5hZGRSZW5kZXJPYmplY3Qoc2hvd0pvaW50Q2FuVUNSTywgdGhpcy5jdXRsaW5lT2JqZWN0KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vXHJcbiAgICB9XHJcblxyXG4gICAgLy8gbGV0IGxvYWRDb25kaXRpb25OYW1lID0gZGF0YS5sb2FkQ29uZGl0aW9uTmFtZS52YWx1ZTtcclxuICAgIGxldCBsb2FkQ29uZGl0aW9uTmFtZSA9IG51bGw7XHJcbiAgICBmb3IgKGxldCBpIG9mIE9iamVjdC5rZXlzKHRoaXMucG9zdFJlc3VsdCkpIHtcclxuICAgICAgaWYgKGxvYWRDb25kaXRpb25OYW1lID09PSBudWxsKSB7XHJcbiAgICAgICAgbG9hZENvbmRpdGlvbk5hbWUgPSB0aGlzLnBvc3RSZXN1bHRbaV1bMF0uTG9hZENhc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCBqb2ludENhblVDID0gdGhpcy5wb3N0UmVzdWx0W2xvYWRDb25kaXRpb25OYW1lXTtcclxuXHJcbiAgICBsZXQgaGFzUmVhZEpvaW50TmFtZSA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XHJcbiAgICBsZXQgbWVtYmVyTWFwQ29sb3JzID0gbmV3IE1hcDxzdHJpbmcsIG51bWJlcltdPigpO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmpvaW50Q2FuU3VtbWFyeVVDLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIC8vXHJcbiAgICAgIGxldCBzdW1tYXJ5SXRlbSA9IHRoaXMuam9pbnRDYW5TdW1tYXJ5VUNbaV07XHJcbiAgICAgIGxldCBqb2ludE5hbWUgPSBzdW1tYXJ5SXRlbS5Kb2ludE5hbWU7XHJcbiAgICAgIGxldCBPcmlnTG9hZFVDID0gc3VtbWFyeUl0ZW0uT3JpZ0xvYWRVQztcclxuICAgICAgbGV0IHNhYnJhY2VKb2ludE5hbWUgPSBzdW1tYXJ5SXRlbS5TQUJyYWNlSm9pbnQ7XHJcblxyXG4gICAgICAvLyBpZiAoaGFzUmVhZEpvaW50TmFtZS5pbmRleE9mKGpvaW50TmFtZSkgPiAtMSkge1xyXG4gICAgICAvLyAgIGNvbnRpbnVlO1xyXG4gICAgICAvLyB9XHJcbiAgICAgIC8vIGhhc1JlYWRKb2ludE5hbWUucHVzaChqb2ludE5hbWUpO1xyXG5cclxuICAgICAgLy8g5qC55o2uTE9Mb2FkVUPlkozoibLpmLbojrflj5bpopzoibIuXHJcbiAgICAgIGxldCBjb2xvcnMgPSB0aGlzLmN1dGxpbmVPYmplY3QuZ2V0Q29sb3JzQnlEYXRhcyhcclxuICAgICAgICBbT3JpZ0xvYWRVQ10sXHJcbiAgICAgICAgdGhpcy5jdXRsaW5lT2JqZWN0LnVjUmFuZ2VzLFxyXG4gICAgICAgIHRoaXMuY3V0bGluZU9iamVjdC51Y1Jhbmdlc0NvbG9yc1xyXG4gICAgICApO1xyXG4gICAgICAvLyBmb3IgKGxldCBqID0gMDsgaiA8IGpvaW50Q2FuVUMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgLy8gICAvL1xyXG4gICAgICAvLyAgIGxldCBpdGVtID0gam9pbnRDYW5VQ1tqXTtcclxuICAgICAgLy8gICBpZiAoaXRlbS5Db21tb25Kb2ludE5hbWUgPT09IGpvaW50TmFtZSkge1xyXG4gICAgICAvLyAgICAgbGV0IGJyYWNlSm9pbnROYW1lID0gaXRlbS5CcmFjZUpvaW50TmFtZTtcclxuICAgICAgbGV0IGJyYWNlSm9pbnROYW1lID0gc2FicmFjZUpvaW50TmFtZTtcclxuXHJcbiAgICAgIC8vIOafpeaJvuWvueW6lOaSkeadhi5cclxuICAgICAgbGV0IG1lbWJlcnMgPSB0aGlzLnZpZXdlci5wcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RzQnlUeXBlKFwiTWVtYmVyT2JqZWN0XCIpO1xyXG4gICAgICBmb3IgKGxldCBrID0gMDsgayA8IG1lbWJlcnMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICBsZXQgbWVtYmVyID0gbWVtYmVyc1trXSBhcyBNZW1iZXJPYmplY3Q7XHJcblxyXG4gICAgICAgIC8v6K6+572u5pKR5p2G55qE5LqR5Zu+5pWI5p6cLlxyXG4gICAgICAgIGxldCBjbG91ZE1lbWJlclRyYW5zZm9ybU1hbmFnZXIgPVxyXG4gICAgICAgICAgdGhpcy52aWV3ZXIucHJvY2Vzcy5jbG91ZE1lbWJlclRyYW5zZm9ybU1hbmFnZXI7XHJcblxyXG4gICAgICAgIGxldCBsZW5ndGggPSBtZW1iZXIuZ2V0TWVtYmVyTGVuZ3RoKCk7XHJcbiAgICAgICAgbGV0IG1lbWJlckNvbG9yID0gWy4uLm1lbWJlci5mYWNlQ29sb3JdO1xyXG4gICAgICAgIG1lbWJlckNvbG9yWzBdIC89IDI1NTtcclxuICAgICAgICBtZW1iZXJDb2xvclsxXSAvPSAyNTU7XHJcbiAgICAgICAgbWVtYmVyQ29sb3JbMl0gLz0gMjU1O1xyXG5cclxuICAgICAgICBsZXQgcmVzdWx0TWVtYmVycyA9IG5ldyBBcnJheTxNZW1iZXJPYmplY3Q+KCk7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgbWVtYmVyLnN0YXJ0Lm5hbWUgPT09IGpvaW50TmFtZSAmJlxyXG4gICAgICAgICAgbWVtYmVyLmVuZC5uYW1lID09PSBicmFjZUpvaW50TmFtZVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgaWYgKG1lbWJlci5kaXZEaXN0YW5jZXMpIHtcclxuICAgICAgICAgICAgbWVtYmVyLmRlbGV0ZSgpO1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGxldCBkaXN0YW5jZXMgPSBbMCwgbGVuZ3RoIC8gMywgbGVuZ3RoIC8gMywgbGVuZ3RoXTtcclxuICAgICAgICAgIGxldCBkaXZDb2xvcnMgPSBjb2xvcnNcclxuICAgICAgICAgICAgLmNvbmNhdChjb2xvcnMpXHJcbiAgICAgICAgICAgIC5jb25jYXQobWVtYmVyQ29sb3IpXHJcbiAgICAgICAgICAgIC5jb25jYXQobWVtYmVyQ29sb3IpO1xyXG4gICAgICAgICAgaWYgKG1lbWJlci52aXNpYmxlID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICBsZXQgY3VycmVudENvbG9ycyA9IG1lbWJlck1hcENvbG9ycy5nZXQobWVtYmVyLmlkKTtcclxuICAgICAgICAgICAgLy8g56ys5LqM5qyh6L+b5p2lLlxyXG4gICAgICAgICAgICBkaXN0YW5jZXMgPSBbXHJcbiAgICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgICBsZW5ndGggLyAzLFxyXG4gICAgICAgICAgICAgIGxlbmd0aCAvIDMsXHJcbiAgICAgICAgICAgICAgKDIgKiBsZW5ndGgpIC8gMyxcclxuICAgICAgICAgICAgICAoMiAqIGxlbmd0aCkgLyAzLFxyXG4gICAgICAgICAgICAgIGxlbmd0aCxcclxuICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgZGl2Q29sb3JzID0gY29sb3JzLmNvbmNhdChjb2xvcnMpLmNvbmNhdChjdXJyZW50Q29sb3JzKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG1lbWJlck1hcENvbG9ycy5zZXQobWVtYmVyLmlkLCBkaXZDb2xvcnMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmVzdWx0TWVtYmVycyA9IGNsb3VkTWVtYmVyVHJhbnNmb3JtTWFuYWdlci5jcmVhdGVDbG91ZE1lbWJlcihcclxuICAgICAgICAgICAgbWVtYmVyLFxyXG4gICAgICAgICAgICBkaXN0YW5jZXMsXHJcbiAgICAgICAgICAgIGRpdkNvbG9ycyxcclxuICAgICAgICAgICAgY29sb3JDb2RlXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIGZvciAobGV0IGwgPSAwOyBsIDwgcmVzdWx0TWVtYmVycy5sZW5ndGg7IGwrKykge1xyXG4gICAgICAgICAgICByZXN1bHRNZW1iZXJzW2xdLnZpc2libGUgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXN1bHRNZW1iZXJzW2xdLmRpdkRpc3RhbmNlcyA9IGRpc3RhbmNlcztcclxuICAgICAgICAgICAgcmVzdWx0TWVtYmVyc1tsXS5kaXZDb2xvcnMgPSBkaXZDb2xvcnM7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgIG1lbWJlci5lbmQubmFtZSA9PT0gam9pbnROYW1lICYmXHJcbiAgICAgICAgICBtZW1iZXIuc3RhcnQubmFtZSA9PT0gYnJhY2VKb2ludE5hbWVcclxuICAgICAgICApIHtcclxuICAgICAgICAgIGlmIChtZW1iZXIuZGl2RGlzdGFuY2VzKSB7XHJcbiAgICAgICAgICAgIG1lbWJlci5kZWxldGUoKTtcclxuICAgICAgICAgICAgdGhpcy52aWV3ZXIudXBkYXRlRGlzcGxheSgpO1xyXG4gICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBsZXQgZGlzdGFuY2VzID0gWzAsICgyICogbGVuZ3RoKSAvIDMsICgyICogbGVuZ3RoKSAvIDMsIGxlbmd0aF07XHJcbiAgICAgICAgICBsZXQgZGl2Q29sb3JzID0gbWVtYmVyQ29sb3JcclxuICAgICAgICAgICAgLmNvbmNhdChtZW1iZXJDb2xvcilcclxuICAgICAgICAgICAgLmNvbmNhdChjb2xvcnMpXHJcbiAgICAgICAgICAgIC5jb25jYXQoY29sb3JzKTtcclxuICAgICAgICAgIGlmIChtZW1iZXIudmlzaWJsZSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgbGV0IGN1cnJlbnRDb2xvcnMgPSBtZW1iZXJNYXBDb2xvcnMuZ2V0KG1lbWJlci5pZCk7XHJcbiAgICAgICAgICAgIC8vIOesrOS6jOasoei/m+adpS5cclxuICAgICAgICAgICAgZGlzdGFuY2VzID0gW1xyXG4gICAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgICAgbGVuZ3RoIC8gMyxcclxuICAgICAgICAgICAgICBsZW5ndGggLyAzLFxyXG4gICAgICAgICAgICAgICgyICogbGVuZ3RoKSAvIDMsXHJcbiAgICAgICAgICAgICAgKDIgKiBsZW5ndGgpIC8gMyxcclxuICAgICAgICAgICAgICBsZW5ndGgsXHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgIGRpdkNvbG9ycyA9IGN1cnJlbnRDb2xvcnMuY29uY2F0KGNvbG9ycykuY29uY2F0KGNvbG9ycyk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBtZW1iZXJNYXBDb2xvcnMuc2V0KG1lbWJlci5pZCwgZGl2Q29sb3JzKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJlc3VsdE1lbWJlcnMgPSBjbG91ZE1lbWJlclRyYW5zZm9ybU1hbmFnZXIuY3JlYXRlQ2xvdWRNZW1iZXIoXHJcbiAgICAgICAgICAgIG1lbWJlcixcclxuICAgICAgICAgICAgZGlzdGFuY2VzLFxyXG4gICAgICAgICAgICBkaXZDb2xvcnMsXHJcbiAgICAgICAgICAgIGNvbG9yQ29kZVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICBmb3IgKGxldCBsID0gMDsgbCA8IHJlc3VsdE1lbWJlcnMubGVuZ3RoOyBsKyspIHtcclxuICAgICAgICAgICAgcmVzdWx0TWVtYmVyc1tsXS52aXNpYmxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgcmVzdWx0TWVtYmVyc1tsXS5kaXZEaXN0YW5jZXMgPSBkaXN0YW5jZXM7XHJcbiAgICAgICAgICAgIHJlc3VsdE1lbWJlcnNbbF0uZGl2Q29sb3JzID0gZGl2Q29sb3JzO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHJlc3VsdE1lbWJlcnMgJiYgcmVzdWx0TWVtYmVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAvLyDnu5jliLbmoIfnrb4uXHJcbiAgICAgICAgICBpZiAoZGF0YS5kaXNwbGF5TGFiZWxzLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIGxldCBuID0gNjtcclxuICAgICAgICAgICAgbGV0IGRpcyA9IGxlbmd0aCAvIG47XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICBtZW1iZXIuZW5kLm5hbWUgPT09IGpvaW50TmFtZSAmJlxyXG4gICAgICAgICAgICAgIG1lbWJlci5zdGFydC5uYW1lID09PSBicmFjZUpvaW50TmFtZVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICBkaXMgPSAobGVuZ3RoICogKG4gLSAxKSkgLyBuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMubGFiZWxNZW1iZXJzLnB1c2gobWVtYmVyKTtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbERhdGFzLnB1c2goW09yaWdMb2FkVUNdKTtcclxuICAgICAgICAgICAgdGhpcy5sYWJlbERpc3RhbmNlcy5wdXNoKFtkaXNdKTtcclxuICAgICAgICAgICAgdGhpcy5kcmF3U3ZnKG1lbWJlciwgW09yaWdMb2FkVUMsIE9yaWdMb2FkVUNdLCBbZGlzXSwgbWluTWFnbml0dWRlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGxldCBwYXJlbnRSTyA9IHRoaXMucHJvY2Vzcy5jYWVSZW5kZXJPYmplY3RUcmVlTWFuYWdlci50ZW1wTm9kZTtcclxuXHJcbiAgICAgICAgICBtZW1iZXIudmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCByZXN1bHRNZW1iZXJzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICAgIHRoaXMudmlld2VyLnByb2Nlc3MuYWRkUmVuZGVyT2JqZWN0KHBhcmVudFJPLCByZXN1bHRNZW1iZXJzW2pdKTtcclxuICAgICAgICAgICAgcmVzdWx0TWVtYmVyc1tqXS5zZXROZWVkVXBkYXRlKCk7XHJcbiAgICAgICAgICAgIHRoaXMuY2xvdWRNZW1iZXJzLnB1c2gocmVzdWx0TWVtYmVyc1tqXSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5tZW1iZXJzLnB1c2gobWVtYmVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICAgIC8vIH1cclxuXHJcbiAgICAgICAgLy8gaWYgKGl0ZW0uQ29tbW9uSm9pbnROYW1lID09PSBqb2ludE5hbWUpIHtcclxuICAgICAgICAvLyAgIGxldCBjaG9yZEpvaW50TmFtZSA9IGl0ZW0uQ2hvcmRKb2ludE5hbWU7XHJcblxyXG4gICAgICAgIC8vICAgLy8g5p+l5om+5a+55bqU5pKR5p2GLlxyXG4gICAgICAgIC8vICAgbGV0IG1lbWJlcnMgPVxyXG4gICAgICAgIC8vICAgICB0aGlzLnZpZXdlci5wcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RzQnlUeXBlKFwiTWVtYmVyT2JqZWN0XCIpO1xyXG4gICAgICAgIC8vICAgZm9yIChsZXQgayA9IDA7IGsgPCBtZW1iZXJzLmxlbmd0aDsgaysrKSB7XHJcbiAgICAgICAgLy8gICAgIGxldCBtZW1iZXIgPSBtZW1iZXJzW2tdIGFzIE1lbWJlck9iamVjdDtcclxuXHJcbiAgICAgICAgLy8gICAgIC8v6K6+572u5pKR5p2G55qE5LqR5Zu+5pWI5p6cLlxyXG4gICAgICAgIC8vICAgICBsZXQgY2xvdWRNZW1iZXJUcmFuc2Zvcm1NYW5hZ2VyID1cclxuICAgICAgICAvLyAgICAgICB0aGlzLnZpZXdlci5wcm9jZXNzLmNsb3VkTWVtYmVyVHJhbnNmb3JtTWFuYWdlcjtcclxuXHJcbiAgICAgICAgLy8gICAgIGxldCBsZW5ndGggPSBtZW1iZXIuZ2V0TWVtYmVyTGVuZ3RoKCk7XHJcbiAgICAgICAgLy8gICAgIGxldCBtZW1iZXJDb2xvciA9IFsuLi5tZW1iZXIuZmFjZUNvbG9yXTtcclxuICAgICAgICAvLyAgICAgbWVtYmVyQ29sb3JbMF0gLz0gMjU1O1xyXG4gICAgICAgIC8vICAgICBtZW1iZXJDb2xvclsxXSAvPSAyNTU7XHJcbiAgICAgICAgLy8gICAgIG1lbWJlckNvbG9yWzJdIC89IDI1NTtcclxuXHJcbiAgICAgICAgLy8gICAgIGxldCByZXN1bHRNZW1iZXJzID0gbmV3IEFycmF5PE1lbWJlck9iamVjdD4oKTtcclxuICAgICAgICAvLyAgICAgaWYgKFxyXG4gICAgICAgIC8vICAgICAgIG1lbWJlci5zdGFydC5uYW1lID09PSBqb2ludE5hbWUgJiZcclxuICAgICAgICAvLyAgICAgICBtZW1iZXIuZW5kLm5hbWUgPT09IGNob3JkSm9pbnROYW1lXHJcbiAgICAgICAgLy8gICAgICkge1xyXG4gICAgICAgIC8vICAgICAgIGlmIChtZW1iZXIuZGl2RGlzdGFuY2VzKSB7XHJcbiAgICAgICAgLy8gICAgICAgICBtZW1iZXIuZGVsZXRlKCk7XHJcbiAgICAgICAgLy8gICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAvLyAgICAgICB9XHJcbiAgICAgICAgLy8gICAgICAgbGV0IGRpc3RhbmNlcyA9IFswLCBsZW5ndGggLyAzLCBsZW5ndGggLyAzLCBsZW5ndGhdO1xyXG4gICAgICAgIC8vICAgICAgIGxldCBkaXZDb2xvcnMgPSBjb2xvcnNcclxuICAgICAgICAvLyAgICAgICAgIC5jb25jYXQoY29sb3JzKVxyXG4gICAgICAgIC8vICAgICAgICAgLmNvbmNhdChtZW1iZXJDb2xvcilcclxuICAgICAgICAvLyAgICAgICAgIC5jb25jYXQobWVtYmVyQ29sb3IpO1xyXG4gICAgICAgIC8vICAgICAgIGlmIChtZW1iZXIudmlzaWJsZSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAvLyAgICAgICAgIC8vIOesrOS6jOasoei/m+adpS5cclxuICAgICAgICAvLyAgICAgICAgIGRpc3RhbmNlcyA9IFswLCBsZW5ndGggLyAzLCAoMiAqIGxlbmd0aCkgLyAzLCBsZW5ndGhdO1xyXG4gICAgICAgIC8vICAgICAgICAgZGl2Q29sb3JzID0gY29sb3JzXHJcbiAgICAgICAgLy8gICAgICAgICAgIC5jb25jYXQobWVtYmVyQ29sb3IpXHJcbiAgICAgICAgLy8gICAgICAgICAgIC5jb25jYXQobWVtYmVyQ29sb3IpXHJcbiAgICAgICAgLy8gICAgICAgICAgIC5jb25jYXQoY29sb3JzKTtcclxuICAgICAgICAvLyAgICAgICB9XHJcbiAgICAgICAgLy8gICAgICAgcmVzdWx0TWVtYmVycyA9IGNsb3VkTWVtYmVyVHJhbnNmb3JtTWFuYWdlci5jcmVhdGVDbG91ZE1lbWJlcihcclxuICAgICAgICAvLyAgICAgICAgIG1lbWJlcixcclxuICAgICAgICAvLyAgICAgICAgIGRpc3RhbmNlcyxcclxuICAgICAgICAvLyAgICAgICAgIGRpdkNvbG9ycyxcclxuICAgICAgICAvLyAgICAgICAgIGNvbG9yQ29kZVxyXG4gICAgICAgIC8vICAgICAgICk7XHJcblxyXG4gICAgICAgIC8vICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVzdWx0TWVtYmVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIC8vICAgICAgICAgcmVzdWx0TWVtYmVyc1tpXS52aXNpYmxlID0gdHJ1ZTtcclxuICAgICAgICAvLyAgICAgICAgIHJlc3VsdE1lbWJlcnNbaV0uZGl2RGlzdGFuY2VzID0gZGlzdGFuY2VzO1xyXG4gICAgICAgIC8vICAgICAgICAgcmVzdWx0TWVtYmVyc1tpXS5kaXZDb2xvcnMgPSBkaXZDb2xvcnM7XHJcbiAgICAgICAgLy8gICAgICAgfVxyXG4gICAgICAgIC8vICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgIC8vICAgICAgIG1lbWJlci5lbmQubmFtZSA9PT0gam9pbnROYW1lICYmXHJcbiAgICAgICAgLy8gICAgICAgbWVtYmVyLnN0YXJ0Lm5hbWUgPT09IGNob3JkSm9pbnROYW1lXHJcbiAgICAgICAgLy8gICAgICkge1xyXG4gICAgICAgIC8vICAgICAgIGlmIChtZW1iZXIuZGl2RGlzdGFuY2VzKSB7XHJcbiAgICAgICAgLy8gICAgICAgICBtZW1iZXIuZGVsZXRlKCk7XHJcbiAgICAgICAgLy8gICAgICAgICB0aGlzLnZpZXdlci51cGRhdGVEaXNwbGF5KCk7XHJcbiAgICAgICAgLy8gICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAvLyAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICAgICAgIGxldCBkaXN0YW5jZXMgPSBbMCwgKDIgKiBsZW5ndGgpIC8gMywgKDIgKiBsZW5ndGgpIC8gMywgbGVuZ3RoXTtcclxuICAgICAgICAvLyAgICAgICBsZXQgZGl2Q29sb3JzID0gbWVtYmVyQ29sb3JcclxuICAgICAgICAvLyAgICAgICAgIC5jb25jYXQobWVtYmVyQ29sb3IpXHJcbiAgICAgICAgLy8gICAgICAgICAuY29uY2F0KGNvbG9ycylcclxuICAgICAgICAvLyAgICAgICAgIC5jb25jYXQoY29sb3JzKTtcclxuICAgICAgICAvLyAgICAgICBpZiAobWVtYmVyLnZpc2libGUgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgLy8gICAgICAgICAvLyDnrKzkuozmrKHov5vmnaUuXHJcbiAgICAgICAgLy8gICAgICAgICBkaXN0YW5jZXMgPSBbMCwgbGVuZ3RoIC8gMywgKDIgKiBsZW5ndGgpIC8gMywgbGVuZ3RoXTtcclxuICAgICAgICAvLyAgICAgICAgIGRpdkNvbG9ycyA9IGNvbG9yc1xyXG4gICAgICAgIC8vICAgICAgICAgICAuY29uY2F0KG1lbWJlckNvbG9yKVxyXG4gICAgICAgIC8vICAgICAgICAgICAuY29uY2F0KG1lbWJlckNvbG9yKVxyXG4gICAgICAgIC8vICAgICAgICAgICAuY29uY2F0KGNvbG9ycyk7XHJcbiAgICAgICAgLy8gICAgICAgfVxyXG4gICAgICAgIC8vICAgICAgIHJlc3VsdE1lbWJlcnMgPSBjbG91ZE1lbWJlclRyYW5zZm9ybU1hbmFnZXIuY3JlYXRlQ2xvdWRNZW1iZXIoXHJcbiAgICAgICAgLy8gICAgICAgICBtZW1iZXIsXHJcbiAgICAgICAgLy8gICAgICAgICBkaXN0YW5jZXMsXHJcbiAgICAgICAgLy8gICAgICAgICBkaXZDb2xvcnMsXHJcbiAgICAgICAgLy8gICAgICAgICBjb2xvckNvZGVcclxuICAgICAgICAvLyAgICAgICApO1xyXG5cclxuICAgICAgICAvLyAgICAgICBmb3IgKGxldCBsID0gMDsgbCA8IHJlc3VsdE1lbWJlcnMubGVuZ3RoOyBsKyspIHtcclxuICAgICAgICAvLyAgICAgICAgIHJlc3VsdE1lbWJlcnNbbF0udmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgLy8gICAgICAgICByZXN1bHRNZW1iZXJzW2xdLmRpdkRpc3RhbmNlcyA9IGRpc3RhbmNlcztcclxuICAgICAgICAvLyAgICAgICAgIHJlc3VsdE1lbWJlcnNbbF0uZGl2Q29sb3JzID0gZGl2Q29sb3JzO1xyXG4gICAgICAgIC8vICAgICAgIH1cclxuICAgICAgICAvLyAgICAgfVxyXG5cclxuICAgICAgICAvLyAgICAgaWYgKHJlc3VsdE1lbWJlcnMgJiYgcmVzdWx0TWVtYmVycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgLy8gICAgICAgLy8g57uY5Yi25qCH562+LlxyXG4gICAgICAgIC8vICAgICAgIGlmIChkYXRhLmRpc3BsYXlMYWJlbHMudmFsdWUpIHtcclxuICAgICAgICAvLyAgICAgICAgIGxldCBuID0gNjtcclxuICAgICAgICAvLyAgICAgICAgIGxldCBkaXMgPSBsZW5ndGggLyBuO1xyXG4gICAgICAgIC8vICAgICAgICAgaWYgKFxyXG4gICAgICAgIC8vICAgICAgICAgICBtZW1iZXIuZW5kLm5hbWUgPT09IGpvaW50TmFtZSAmJlxyXG4gICAgICAgIC8vICAgICAgICAgICBtZW1iZXIuc3RhcnQubmFtZSA9PT0gY2hvcmRKb2ludE5hbWVcclxuICAgICAgICAvLyAgICAgICAgICkge1xyXG4gICAgICAgIC8vICAgICAgICAgICBkaXMgPSAobGVuZ3RoICogKG4gLSAxKSkgLyBuO1xyXG4gICAgICAgIC8vICAgICAgICAgfVxyXG4gICAgICAgIC8vICAgICAgICAgdGhpcy5sYWJlbE1lbWJlcnMucHVzaChtZW1iZXIpO1xyXG4gICAgICAgIC8vICAgICAgICAgdGhpcy5sYWJlbERhdGFzLnB1c2goW09yaWdMb2FkVUNdKTtcclxuICAgICAgICAvLyAgICAgICAgIHRoaXMubGFiZWxEaXN0YW5jZXMucHVzaChbZGlzXSk7XHJcbiAgICAgICAgLy8gICAgICAgICB0aGlzLmRyYXdTdmcoXHJcbiAgICAgICAgLy8gICAgICAgICAgIG1lbWJlcixcclxuICAgICAgICAvLyAgICAgICAgICAgW09yaWdMb2FkVUMsIE9yaWdMb2FkVUNdLFxyXG4gICAgICAgIC8vICAgICAgICAgICBbZGlzXSxcclxuICAgICAgICAvLyAgICAgICAgICAgbWluTWFnbml0dWRlXHJcbiAgICAgICAgLy8gICAgICAgICApO1xyXG4gICAgICAgIC8vICAgICAgIH1cclxuICAgICAgICAvLyAgICAgICBsZXQgcGFyZW50Uk8gPSB0aGlzLnByb2Nlc3MuY2FlUmVuZGVyT2JqZWN0VHJlZU1hbmFnZXIudGVtcE5vZGU7XHJcblxyXG4gICAgICAgIC8vICAgICAgIG1lbWJlci52aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgLy8gICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCByZXN1bHRNZW1iZXJzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgLy8gICAgICAgICB0aGlzLnZpZXdlci5wcm9jZXNzLmFkZFJlbmRlck9iamVjdChwYXJlbnRSTywgcmVzdWx0TWVtYmVyc1tqXSk7XHJcbiAgICAgICAgLy8gICAgICAgICByZXN1bHRNZW1iZXJzW2pdLnNldE5lZWRVcGRhdGUoKTtcclxuICAgICAgICAvLyAgICAgICAgIHRoaXMuY2xvdWRNZW1iZXJzLnB1c2gocmVzdWx0TWVtYmVyc1tqXSk7XHJcbiAgICAgICAgLy8gICAgICAgfVxyXG5cclxuICAgICAgICAvLyAgICAgICB0aGlzLm1lbWJlcnMucHVzaChtZW1iZXIpO1xyXG4gICAgICAgIC8vICAgICB9XHJcbiAgICAgICAgLy8gICB9XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY29uc29sZS5sb2coXCJqb2ludENhblVDOlwiLCBqb2ludENhblVDKTtcclxuXHJcbiAgICB0aGlzLnZpZXdlci5zZWxlY3Rpb25NYW5hZ2VyLmNsZWFyQWxsU2VsZWN0aW9uQW5kSGlnaGxpZ2h0KCk7XHJcbiAgICB0aGlzLnZpZXdlci51cGRhdGVEaXNwbGF5KCk7XHJcbiAgICB0aGlzLmNhZU9iamVjdFNlbGVjdG9yLnNlbGVjdGVkUmVuZGVyT2JqZWN0cy5jbGVhcigpO1xyXG4gICAgdGhpcy51cGRhdGVQYW5lbCgpO1xyXG5cclxuICAgIGlmIChkYXRhLmRpc3BsYXlDdXRsaW5lLnZhbHVlICYmIGRhdGEuY29sb3JDb2RlLnZhbHVlKSB7XHJcbiAgICAgIHRoaXMucmVmcmVzaEN1dGxpbmUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIHN0b3JlLmNvbW1pdChcInNldExlZ2VuZFwiLCB7fSk7XHJcbiAgICAgIExlZ2VuZE1hbmFnZS5kZXN0b3J5KHRoaXMuZWxlbWVudEtleSk7XHJcbiAgICB9XHJcbiAgICBwb3N0SW50ZXJmYWNlTWFuYWdlci5hY3RpdmVfam9pbnRDYW5VQyA9IHRydWU7XHJcblxyXG4gICAgZGF0YS50aXAudmFsdWUgPSAxO1xyXG5cclxuICAgIC8vIOabtOaWsOW3puS+p+e7k+aehOagkVxyXG4gICAgc3RvcmUuY29tbWl0KFwic3RydWN0dXJlVHJlZS91cGRhdGVUcmVlRGF0YVwiLCBbXHJcbiAgICAgIHRoaXMudmlld2VyLnN0cnVjdHVyZVRyZWVNYW5hZ2VyLnJvb3ROb2RlLFxyXG4gICAgXSk7XHJcbiAgfVxyXG5cclxuICByZXNldFNjZW5lKCkge1xyXG4gICAgdGhpcy5jbGVhclN2ZygpO1xyXG4gICAgdGhpcy5kZWxldGVKb2ludENhblVDUk8oKTtcclxuICAgIExlZ2VuZE1hbmFnZS5kZXN0b3J5KHRoaXMuZWxlbWVudEtleSk7XHJcbiAgICBsZXQgcG9zdEludGVyZmFjZU1hbmFnZXIgPSB0aGlzLnZpZXdlci5wb3N0SW50ZXJmYWNlTWFuYWdlcjtcclxuICAgIHBvc3RJbnRlcmZhY2VNYW5hZ2VyLmFjdGl2ZV9kaXN0b3J0aW9uID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVQYW5lbCgpIHtcclxuICAgIC8vIGlmIChcclxuICAgIC8vICAgdGhpcy52aWV3ZXIuc2VsZWN0aW9uSW50ZXJmYWNlTWFuYWdlci5zZWxlY3RvckZpbHRlciA9PT1cclxuICAgIC8vICAgU2VsZWN0b3JGaWxpdGVyLk1lbWJlclxyXG4gICAgLy8gKSB7XHJcbiAgICAvLyAgIC8vIOabtOaWsOmdouadv+eahOmAieS4reeCueWIl+ihqC5cclxuICAgIC8vICAgdGhpcy5jb25maWcucHJvcGVydGllcy5pdGVtc1swXS5kYXRhLnNlbGVjdGVkTWVtYmVycy5saXN0T3B0aW9ucy5saXN0ID1cclxuICAgIC8vICAgICBbXTtcclxuICAgIC8vICAgbGV0IG9iamVjdHMgPSB0aGlzLmNhZU9iamVjdFNlbGVjdG9yLnNlbGVjdGVkUmVuZGVyT2JqZWN0cztcclxuICAgIC8vICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvYmplY3RzLmNvdW50KCk7IGkrKykge1xyXG4gICAgLy8gICAgIGxldCBvYmplY3QgPSBvYmplY3RzLml0ZW1zW2ldO1xyXG4gICAgLy8gICAgIHRoaXMuY29uZmlnLnByb3BlcnRpZXMuaXRlbXNbMF0uZGF0YS5zZWxlY3RlZE1lbWJlcnMubGlzdE9wdGlvbnMubGlzdC5wdXNoKFxyXG4gICAgLy8gICAgICAge1xyXG4gICAgLy8gICAgICAgICB2YWx1ZTogb2JqZWN0LmlkLFxyXG4gICAgLy8gICAgICAgICBsYWJlbDogb2JqZWN0Lm5hbWUsXHJcbiAgICAvLyAgICAgICB9XHJcbiAgICAvLyAgICAgKTtcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfVxyXG4gIH1cclxuXHJcbiAgcmVmcmVzaEN1dGxpbmUoKSB7XHJcbiAgICAvL1xyXG4gICAgbGV0IGNvbXBvbmVudCA9IExlZ2VuZE1hbmFnZS5jcmVhdGUoXHJcbiAgICAgIHRoaXMuZWxlbWVudEtleSxcclxuICAgICAgdGhpcy5jdXRsaW5lT2JqZWN0LmdlQ3V0bGluZSgpLFxyXG4gICAgICBcIuiKgueCueWGsuWIh1wiLFxyXG4gICAgICBcIuminOiJslwiLFxyXG4gICAgICBcIuWGsuWIh+WAvFwiXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlSm9pbnRDYW5VQ1JPKCkge1xyXG4gICAgLy8gbGV0IGFmdGVydHJlYXRtZW50Uk8gPVxyXG4gICAgLy8gICB0aGlzLnZpZXdlci5wcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RCeU5hbWUoXCLlkI7lpITnkIborqHnrpfnu5PmnpxcIik7XHJcbiAgICAvLyBsZXQgc2hvd0pvaW50Q2FuVUNSTyA9XHJcbiAgICAvLyAgIHRoaXMudmlld2VyLnByb2Nlc3MuZmluZENhZU9iamVjdEJ5TmFtZUluQ2hpbGRPYmplY3QoXHJcbiAgICAvLyAgICAgYWZ0ZXJ0cmVhdG1lbnRSTyxcclxuICAgIC8vICAgICBcIueuoeiKgueCueWGsuWIh+W6lOWKm+avlOWcqOS9jeaYvuekulwiXHJcbiAgICAvLyAgICk7XHJcbiAgICAvLyBpZiAoc2hvd0pvaW50Q2FuVUNSTykge1xyXG4gICAgLy8gICBzaG93Sm9pbnRDYW5VQ1JPLmNoaWxkT2JqZWN0cy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAvLyAgICAgaXRlbS5kZWxldGUoKTtcclxuICAgIC8vICAgfSk7XHJcblxyXG4gICAgLy8gICBzaG93Sm9pbnRDYW5VQ1JPLmRlbGV0ZSgpO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5tZW1iZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHRoaXMubWVtYmVyc1tpXS52aXNpYmxlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY2xvdWRNZW1iZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHRoaXMudmlld2VyLnByb2Nlc3MucmVtb3ZlUmVuZGVyT2JqZWN0KHRoaXMuY2xvdWRNZW1iZXJzW2ldKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgYWZ0ZXJ0cmVhdG1lbnRSTyA9IHRoaXMudmlld2VyLnByb2Nlc3MuZmluZFJlbmRlck9iamVjdEJ5TmFtZShcclxuICAgICAgXCLlkI7lpITnkIborqHnrpfnu5PmnpxcIlxyXG4gICAgKSBhcyBEZXNpZ25CYXNlT2JqZWN0O1xyXG4gICAgbGV0IHNob3dKb2ludENhblVDUk8gPSB0aGlzLnZpZXdlci5wcm9jZXNzLmZpbmRDYWVPYmplY3RCeU5hbWVJbkNoaWxkT2JqZWN0KFxyXG4gICAgICBhZnRlcnRyZWF0bWVudFJPLFxyXG4gICAgICBcIueuoeiKgueCueWGsuWIh+W6lOWKm+avlOWcqOS9jeaYvuekulwiXHJcbiAgICApO1xyXG4gICAgaWYgKHNob3dKb2ludENhblVDUk8pIHtcclxuICAgICAgc2hvd0pvaW50Q2FuVUNSTy5jaGlsZE9iamVjdHMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgIGl0ZW0uZGVsZXRlKCk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgc2hvd0pvaW50Q2FuVUNSTy5kZWxldGUoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnZpZXdlci51cGRhdGVEaXNwbGF5KCk7XHJcbiAgfVxyXG59XHJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUF1QkE7QUFBQTtBQStCQTtBQUFBO0FBOUJBO0FBTUE7QUFDQTtBQUVBO0FBS0E7QUFJQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7O0FBSUE7QUFFQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUdBO0FBQ0E7O0FBT0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUVBO0FBQ0E7QUFHQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFJQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUtBO0FBSUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBTUE7QUFDQTtBQUNBO0FBS0E7O0FBR0E7QUFDQTtBQUNBO0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBRUE7QUFBQTtBQUlBO0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUVBOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUdBO0FBQ0E7QUFFQTs7QUFDQTtBQUFBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUdBOztBQUVBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUdBO0FBS0E7QUFFQTtBQUNBO0FBRUE7QUFLQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFLQTs7QUFDQTtBQUFBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBUUE7QUFVQTtBQUdBO0FBQ0E7QUFDQTtBQUdBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUlBO0FBQ0E7QUFFQTtBQVFBO0FBQ0E7QUFDQTs7QUFFQTtBQU9BO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7QUFDQTtBQUlBO0FBQ0E7QUFFQTtBQVFBO0FBQ0E7QUFDQTs7QUFFQTtBQU9BO0FBQ0E7QUFDQTtBQUNBOzs7QUFJQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUdBOzs7O0FBb0lBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTs7QUFFQTtBQUVBO0FBR0E7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFxQkE7QUFFQTtBQU9BO0FBRUE7QUFnQkE7QUFDQTs7QUFHQTtBQUNBOztBQUdBO0FBR0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOztBQUdBO0FBQ0E7QUFDQTtBQUFBOzs7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./packages/caeDesign/src/viewerWrapper/commands/aftertreatment/showJointCanUC/commandShowJointCanUC.ts\n");
|
|
5887
|
+
eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__, exports, __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\"), __webpack_require__(/*! ../../../../gsDevFx/operators/cameraMouse */ \"./packages/caeDesign/src/gsDevFx/operators/cameraMouse.ts\"), __webpack_require__(/*! ../../../../gsDevFx/operators/cAEObjectPreSelector */ \"./packages/caeDesign/src/gsDevFx/operators/cAEObjectPreSelector.ts\"), __webpack_require__(/*! ../../../../gsDevFx/operators/caeObjectSelector */ \"./packages/caeDesign/src/gsDevFx/operators/caeObjectSelector.ts\"), __webpack_require__(/*! ../../../../gsDevFx/commands/commandSelect */ \"./packages/caeDesign/src/gsDevFx/commands/commandSelect.ts\"), __webpack_require__(/*! ../../commandComponent */ \"./packages/caeDesign/src/viewerWrapper/commands/commandComponent.ts\"), __webpack_require__(/*! ./showJointCanUCConfig */ \"./packages/caeDesign/src/viewerWrapper/commands/aftertreatment/showJointCanUC/showJointCanUCConfig.ts\"), __webpack_require__(/*! gs-ceec-design */ \"./packages/ceecDesign/src/index.ts\"), __webpack_require__(/*! ../../../../store */ \"./packages/caeDesign/src/store/index.ts\"), __webpack_require__(/*! ../../../../gsDevFx/managers/interfaceManagers/selectionInterfaceManager */ \"./packages/caeDesign/src/gsDevFx/managers/interfaceManagers/selectionInterfaceManager.ts\"), __webpack_require__(/*! ../../../../gsDevFx/objects/pretreatmentObjects/cutlinePostJointUCObject */ \"./packages/caeDesign/src/gsDevFx/objects/pretreatmentObjects/cutlinePostJointUCObject.ts\"), __webpack_require__(/*! gs-ceec-design */ \"./packages/ceecDesign/src/index.ts\"), __webpack_require__(/*! gs-bim-air */ \"./node_modules/gs-bim-air/lib/BimAir.umd.min.js\"), __webpack_require__(/*! gs-ceec-design */ \"./packages/ceecDesign/src/index.ts\"), __webpack_require__(/*! ../../../../gsDevFx/managers/interfaceManagers/commonInterfaceManager */ \"./packages/caeDesign/src/gsDevFx/managers/interfaceManagers/commonInterfaceManager.ts\"), __webpack_require__(/*! element-ui */ \"./node_modules/element-ui/lib/element-ui.common.js\"), __webpack_require__(/*! ../../../../viewerWrapper/module/legendManage */ \"./packages/caeDesign/src/viewerWrapper/module/legendManage.ts\")], __WEBPACK_AMD_DEFINE_RESULT__ = (function (require, exports, tslib_1, cameraMouse_1, cAEObjectPreSelector_1, caeObjectSelector_1, commandSelect_1, commandComponent_1, showJointCanUCConfig_1, gs_ceec_design_1, store_1, selectionInterfaceManager_1, cutlinePostJointUCObject_1, gs_ceec_design_2, gs_bim_air_1, gs_ceec_design_3, commonInterfaceManager_1, element_ui_1, legendManage_1) {\n \"use strict\";\n\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n showJointCanUCConfig_1 = tslib_1.__importDefault(showJointCanUCConfig_1);\n store_1 = tslib_1.__importDefault(store_1);\n var CommandShowJointCanUC = function (_super) {\n tslib_1.__extends(CommandShowJointCanUC, _super);\n function CommandShowJointCanUC() {\n var _this = _super.call(this) || this;\n _this.typeName = \"CommandShowJointCanUC\";\n _this.postResult = null;\n _this.jointCanSummaryUC = null;\n _this.cutlineObject = null;\n _this.members = new Array();\n _this.cloudMembers = new Array();\n _this._group = null;\n _this.labelMembers = new Array();\n _this.labelDatas = new Array();\n _this.labelDistances = new Array();\n _this.resultLabel = new Array();\n _this.resultLabelDic = {};\n _this.labelColor = \"#ffffff\";\n _this.elementKey = \"cutline\";\n return _this;\n }\n CommandShowJointCanUC.prototype.begin = function () {\n var _this = this;\n this.changeOperators();\n console.log(\"CommandShowJointCanUC\");\n this.config = new showJointCanUCConfig_1.default();\n this.config.show();\n var postInterfaceManager = this.viewer.postInterfaceManager;\n if (!postInterfaceManager.getFinish_jointCanUC) {\n postInterfaceManager.tip_jointCanUC = true;\n if (!postInterfaceManager.message_jointCanUC) {\n postInterfaceManager.message_jointCanUC = element_ui_1.Message.info({\n message: \"节点冲切仍在请求DB数据,请等待请求完成.\",\n duration: 0,\n showClose: true\n });\n }\n }\n setTimeout(function () {\n var data = _this.config.properties.items[0].data;\n data.minMagnitude.value = 0;\n data.displayLabels.value = true;\n data.displayCutline.value = true;\n data.colorCode.value = true;\n }, 100);\n this.viewer.sceneCameraChanged.add(function () {\n var minMagnitude = Number(_this.config.properties.items[0].data.minMagnitude.value);\n for (var i = 0; i < _this.labelMembers.length; i++) {\n _this.drawSvg(_this.labelMembers[i], _this.labelDatas[i], _this.labelDistances[i], minMagnitude);\n }\n });\n };\n CommandShowJointCanUC.prototype.restore = function () {\n this.changeOperators();\n this.config.show();\n };\n CommandShowJointCanUC.prototype.changeOperators = function () {\n var _this = this;\n this.viewer.selectionManager.clearAllSelectionAndHighlight();\n this.viewer.updateDisplay();\n this.viewer.operatorManager.clear();\n this.viewer.operatorManager.add(new cameraMouse_1.CameraMouse());\n this.preSelector = new cAEObjectPreSelector_1.CAEObjectPreSelector();\n this.viewer.operatorManager.add(this.preSelector);\n this.caeObjectSelector = new caeObjectSelector_1.CAEObjectSelector();\n this.viewer.operatorManager.add(this.caeObjectSelector);\n this.viewer.selectionInterfaceManager.selectorFilter = selectionInterfaceManager_1.SelectorFiliter.Member;\n this.caeObjectSelector.lButtonUp.add(function () {\n setTimeout(function () {\n _this.updatePanel();\n }, 0);\n });\n };\n CommandShowJointCanUC.prototype.end = function () {\n var postInterfaceManager = this.viewer.postInterfaceManager;\n if (postInterfaceManager.message_jointCanUC) {\n postInterfaceManager.message_jointCanUC.close();\n postInterfaceManager.message_jointCanUC = null;\n }\n this.config.hide();\n _super.prototype.end.call(this);\n this.viewer.selectionManager.clearAllSelectionAndHighlight();\n this.resetScene();\n this.viewer.updateDisplay();\n store_1.default.commit(\"structureTree/updateTreeData\", [this.viewer.structureTreeManager.rootNode]);\n var commandSelect = new commandSelect_1.CommandSelect();\n this.process.commandManager.execute(commandSelect);\n };\n CommandShowJointCanUC.prototype.clearSvg = function () {\n if (this.resultLabel) {\n this.resultLabel.forEach(function (item) {\n item.clear();\n item = null;\n });\n this.resultLabel = new Array();\n }\n this.labelMembers = new Array();\n this.labelDatas = new Array();\n this.labelDistances = new Array();\n this.resultLabelDic = {};\n };\n CommandShowJointCanUC.prototype.drawSvg = function (member, datas, distances, minMagnitude) {\n for (var j = 0; j < distances.length; j++) {\n var data = datas[j];\n if (minMagnitude !== null && minMagnitude !== undefined && data < minMagnitude) {\n continue;\n }\n var origin_1 = new Float32Array(member.getStartPosition());\n var vector = member.getVector();\n var curretPos = gs_bim_air_1.Longan.Point.add(origin_1, gs_bim_air_1.Longan.Vector.multiply(vector, distances[j]));\n var point = this.viewer.worldPointToPixelPoint([curretPos])[0];\n var id = member.name + distances[j];\n if (this.resultLabelDic[id]) {\n this.resultLabelDic[id].move(point[0] + 1, point[1] + 1);\n this.resultLabelDic[id].attr(\"font-size\", gs_ceec_design_1.DesignBaseObject.fontSize);\n } else {\n var draw = gs_ceec_design_3.SvgDraw.getInstance(this.viewer.container.id).draw;\n this._group = draw.group();\n var resultText = draw.text(Number(data).toFixed(3)).font({\n fill: this.labelColor\n }).attr(\"font-size\", gs_ceec_design_1.DesignBaseObject.fontSize).move(point[0] + 1, point[1] + 1);\n this.resultLabel.push(resultText);\n var id_1 = member.name + distances[j];\n this.resultLabelDic[id_1] = resultText;\n this._group.add(resultText);\n }\n }\n };\n CommandShowJointCanUC.prototype.commandOk = function () {\n var e_1, _a, e_2, _b, e_3, _c;\n var postInterfaceManager = this.viewer.postInterfaceManager;\n if (!postInterfaceManager.getFinish_jointCanUC) {\n postInterfaceManager.tip_jointCanUC = true;\n element_ui_1.Message.info({\n message: \"节点冲切仍在请求DB数据,请等待请求完成.\"\n });\n return;\n }\n if (postInterfaceManager.jointCanUC) {\n this.postResult = postInterfaceManager.jointCanUC;\n var counter = 0;\n try {\n for (var _d = tslib_1.__values(Object.keys(postInterfaceManager.jointCanUC)), _e = _d.next(); !_e.done; _e = _d.next()) {\n var i = _e.value;\n counter++;\n }\n } catch (e_1_1) {\n e_1 = {\n error: e_1_1\n };\n } finally {\n try {\n if (_e && !_e.done && (_a = _d.return)) _a.call(_d);\n } finally {\n if (e_1) throw e_1.error;\n }\n }\n if (counter === 0) {\n element_ui_1.Message.info(\"查询JointCanUC表返回数据为空,请检查DB文件\");\n var data_1 = this.config.properties.items[0].data;\n data_1.tip.value = 2;\n return;\n }\n this.config.properties.items[0].data.loadConditionName.selectOptions.selections = [];\n try {\n for (var _f = tslib_1.__values(Object.keys(postInterfaceManager.jointCanUC)), _g = _f.next(); !_g.done; _g = _f.next()) {\n var i = _g.value;\n if (postInterfaceManager.jointCanUC[i][0]) {\n var loadConditionName_1 = postInterfaceManager.jointCanUC[i][0].LoadCase;\n this.config.properties.items[0].data.loadConditionName.selectOptions.selections.push({\n label: loadConditionName_1,\n value: loadConditionName_1\n });\n }\n }\n } catch (e_2_1) {\n e_2 = {\n error: e_2_1\n };\n } finally {\n try {\n if (_g && !_g.done && (_b = _f.return)) _b.call(_f);\n } finally {\n if (e_2) throw e_2.error;\n }\n }\n } else {\n element_ui_1.Message.info(\"JointCanUC表不存在,请检查DB文件\");\n var data_2 = this.config.properties.items[0].data;\n data_2.tip.value = 2;\n return;\n }\n if (postInterfaceManager.jointCanSummaryUC) {\n this.jointCanSummaryUC = postInterfaceManager.jointCanSummaryUC;\n } else {\n element_ui_1.Message.info(\"jointCanSummaryUC表不存在,请检查DB文件\");\n var data_3 = this.config.properties.items[0].data;\n data_3.tip.value = 2;\n return;\n }\n console.log(\"管节点冲切应力比在位显示\");\n this.viewer.commonInterfaceManager.colorSwitch(commonInterfaceManager_1.SwitchColorDivide.Cancel);\n postInterfaceManager.resetOhterPostResult();\n var data = this.config.properties.items[0].data;\n var colorCode = data.colorCode.value;\n var minMagnitude = Number(data.minMagnitude.value);\n var aftertreatmentRO = this.viewer.process.findRenderObjectByName(\"后处理计算结果\");\n var showJointCanUCRO = this.viewer.process.findCaeObjectByNameInChildObject(aftertreatmentRO, \"管节点冲切应力比在位显示\");\n showJointCanUCRO = new gs_ceec_design_1.DesignBaseObject();\n showJointCanUCRO.name = \"管节点冲切应力比在位显示\";\n this.process.addRenderObject(aftertreatmentRO, showJointCanUCRO);\n this.cutlineObject = this.viewer.process.findCaeObjectByNameInChildObject(showJointCanUCRO, \"管节点冲切应力图例数据\");\n if (!this.cutlineObject) {\n this.cutlineObject = new cutlinePostJointUCObject_1.CutlinePostJointUCObject();\n this.cutlineObject.name = \"管节点冲切应力比图例\";\n this.cutlineObject.businessState = gs_ceec_design_2.BusinessState.Creating;\n this.cutlineObject.title = \"管节点冲切应力比\";\n this.cutlineObject.ucRanges = [0, 0.4, 0.6, 0.8, 1.0];\n this.cutlineObject.ucRangesColors = [0.82, 0.82, 0.82, 1, 0.5, 0.5, 0.5, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1];\n this.process.addRenderObject(showJointCanUCRO, this.cutlineObject);\n } else {}\n var loadConditionName = null;\n try {\n for (var _h = tslib_1.__values(Object.keys(this.postResult)), _j = _h.next(); !_j.done; _j = _h.next()) {\n var i = _j.value;\n if (loadConditionName === null) {\n loadConditionName = this.postResult[i][0].LoadCase;\n }\n }\n } catch (e_3_1) {\n e_3 = {\n error: e_3_1\n };\n } finally {\n try {\n if (_j && !_j.done && (_c = _h.return)) _c.call(_h);\n } finally {\n if (e_3) throw e_3.error;\n }\n }\n var jointCanUC = this.postResult[loadConditionName];\n var hasReadJointName = new Array();\n var memberMapColors = new Map();\n for (var i = 0; i < this.jointCanSummaryUC.length; i++) {\n var summaryItem = this.jointCanSummaryUC[i];\n var jointName = summaryItem.JointName;\n var OrigLoadUC = summaryItem.OrigLoadUC;\n var sabraceJointName = summaryItem.SABraceJoint;\n var colors = this.cutlineObject.getColorsByDatas([OrigLoadUC], this.cutlineObject.ucRanges, this.cutlineObject.ucRangesColors);\n var braceJointName = sabraceJointName;\n var members = this.viewer.process.findRenderObjectsByType(\"MemberObject\");\n for (var k = 0; k < members.length; k++) {\n var member = members[k];\n var cloudMemberTransformManager = this.viewer.process.cloudMemberTransformManager;\n var length_1 = member.getMemberLength();\n var memberColor = tslib_1.__spreadArray([], tslib_1.__read(member.faceColor), false);\n memberColor[0] /= 255;\n memberColor[1] /= 255;\n memberColor[2] /= 255;\n var resultMembers = new Array();\n if (member.start.name === jointName && member.end.name === braceJointName) {\n if (member.divDistances) {\n member.delete();\n continue;\n }\n var distances = [0, length_1 / 3, length_1 / 3, length_1];\n var divColors = colors.concat(colors).concat(memberColor).concat(memberColor);\n if (member.visible === false) {\n var currentColors = memberMapColors.get(member.id);\n distances = [0, length_1 / 3, length_1 / 3, 2 * length_1 / 3, 2 * length_1 / 3, length_1];\n divColors = colors.concat(colors).concat(currentColors);\n } else {\n memberMapColors.set(member.id, divColors);\n }\n resultMembers = cloudMemberTransformManager.createCloudMember(member, distances, divColors, colorCode);\n for (var l = 0; l < resultMembers.length; l++) {\n resultMembers[l].visible = true;\n resultMembers[l].divDistances = distances;\n resultMembers[l].divColors = divColors;\n }\n } else if (member.end.name === jointName && member.start.name === braceJointName) {\n if (member.divDistances) {\n member.delete();\n this.viewer.updateDisplay();\n continue;\n }\n var distances = [0, 2 * length_1 / 3, 2 * length_1 / 3, length_1];\n var divColors = memberColor.concat(memberColor).concat(colors).concat(colors);\n if (member.visible === false) {\n var currentColors = memberMapColors.get(member.id);\n distances = [0, length_1 / 3, length_1 / 3, 2 * length_1 / 3, 2 * length_1 / 3, length_1];\n divColors = currentColors.concat(colors).concat(colors);\n } else {\n memberMapColors.set(member.id, divColors);\n }\n resultMembers = cloudMemberTransformManager.createCloudMember(member, distances, divColors, colorCode);\n for (var l = 0; l < resultMembers.length; l++) {\n resultMembers[l].visible = true;\n resultMembers[l].divDistances = distances;\n resultMembers[l].divColors = divColors;\n }\n }\n if (resultMembers && resultMembers.length > 0) {\n if (data.displayLabels.value) {\n var n = 6;\n var dis = length_1 / n;\n if (member.end.name === jointName && member.start.name === braceJointName) {\n dis = length_1 * (n - 1) / n;\n }\n this.labelMembers.push(member);\n this.labelDatas.push([OrigLoadUC]);\n this.labelDistances.push([dis]);\n this.drawSvg(member, [OrigLoadUC, OrigLoadUC], [dis], minMagnitude);\n }\n var parentRO = this.process.caeRenderObjectTreeManager.tempNode;\n member.visible = false;\n for (var j = 0; j < resultMembers.length; j++) {\n this.viewer.process.addRenderObject(parentRO, resultMembers[j]);\n resultMembers[j].setNeedUpdate();\n this.cloudMembers.push(resultMembers[j]);\n }\n this.members.push(member);\n }\n }\n }\n console.log(\"jointCanUC:\", jointCanUC);\n this.viewer.selectionManager.clearAllSelectionAndHighlight();\n this.viewer.updateDisplay();\n this.caeObjectSelector.selectedRenderObjects.clear();\n this.updatePanel();\n if (data.displayCutline.value && data.colorCode.value) {\n this.refreshCutline();\n } else {\n legendManage_1.LegendManage.destory(this.elementKey);\n }\n postInterfaceManager.active_jointCanUC = true;\n data.tip.value = 1;\n store_1.default.commit(\"structureTree/updateTreeData\", [this.viewer.structureTreeManager.rootNode]);\n };\n CommandShowJointCanUC.prototype.resetScene = function () {\n this.clearSvg();\n this.deleteJointCanUCRO();\n legendManage_1.LegendManage.destory(this.elementKey);\n var postInterfaceManager = this.viewer.postInterfaceManager;\n postInterfaceManager.active_distortion = false;\n };\n CommandShowJointCanUC.prototype.updatePanel = function () {};\n CommandShowJointCanUC.prototype.refreshCutline = function () {\n var component = legendManage_1.LegendManage.create(this.elementKey, this.cutlineObject.geCutline(), \"节点冲切\", \"颜色\", \"冲切值\");\n };\n CommandShowJointCanUC.prototype.deleteJointCanUCRO = function () {\n for (var i = 0; i < this.members.length; i++) {\n this.members[i].visible = true;\n }\n for (var i = 0; i < this.cloudMembers.length; i++) {\n this.viewer.process.removeRenderObject(this.cloudMembers[i]);\n }\n var aftertreatmentRO = this.viewer.process.findRenderObjectByName(\"后处理计算结果\");\n var showJointCanUCRO = this.viewer.process.findCaeObjectByNameInChildObject(aftertreatmentRO, \"管节点冲切应力比在位显示\");\n if (showJointCanUCRO) {\n showJointCanUCRO.childObjects.forEach(function (item) {\n item.delete();\n });\n showJointCanUCRO.delete();\n }\n this.viewer.updateDisplay();\n };\n return CommandShowJointCanUC;\n }(commandComponent_1.CommandComponent);\n exports.default = CommandShowJointCanUC;\n}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9wYWNrYWdlcy9jYWVEZXNpZ24vc3JjL3ZpZXdlcldyYXBwZXIvY29tbWFuZHMvYWZ0ZXJ0cmVhdG1lbnQvc2hvd0pvaW50Q2FuVUMvY29tbWFuZFNob3dKb2ludENhblVDLnRzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vW25hbWVdLy4vcGFja2FnZXMvY2FlRGVzaWduL3NyYy92aWV3ZXJXcmFwcGVyL2NvbW1hbmRzL2FmdGVydHJlYXRtZW50L3Nob3dKb2ludENhblVDL2NvbW1hbmRTaG93Sm9pbnRDYW5VQy50cz8yZmMxIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENhbWVyYU1vdXNlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2dzRGV2Rngvb3BlcmF0b3JzL2NhbWVyYU1vdXNlXCI7XHJcbmltcG9ydCB7IENBRU9iamVjdFByZVNlbGVjdG9yIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2dzRGV2Rngvb3BlcmF0b3JzL2NBRU9iamVjdFByZVNlbGVjdG9yXCI7XHJcbmltcG9ydCB7IENBRU9iamVjdFNlbGVjdG9yIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2dzRGV2Rngvb3BlcmF0b3JzL2NhZU9iamVjdFNlbGVjdG9yXCI7XHJcbmltcG9ydCB7IENvbW1hbmRTZWxlY3QgfSBmcm9tIFwiLi4vLi4vLi4vLi4vZ3NEZXZGeC9jb21tYW5kcy9jb21tYW5kU2VsZWN0XCI7XHJcbmltcG9ydCB7IENvbW1hbmRDb21wb25lbnQgfSBmcm9tIFwiLi4vLi4vY29tbWFuZENvbXBvbmVudFwiO1xyXG5pbXBvcnQgU2hvd0pvaW50Q2FuVUNDb25maWcgZnJvbSBcIi4vc2hvd0pvaW50Q2FuVUNDb25maWdcIjtcclxuaW1wb3J0IHsgRGVzaWduQmFzZU9iamVjdCB9IGZyb20gXCJncy1jZWVjLWRlc2lnblwiO1xyXG5pbXBvcnQgc3RvcmUgZnJvbSBcIi4uLy4uLy4uLy4uL3N0b3JlXCI7XHJcbmltcG9ydCByZW5kZXJPYmplY3RTZXJ2aWNlIGZyb20gXCIuLi8uLi8uLi8uLi9hcGkvcmVuZGVyT2JqZWN0U2VydmljZVwiO1xyXG5pbXBvcnQgeyBNZW1iZXJPYmplY3QgfSBmcm9tIFwiLi4vLi4vLi4vLi4vZ3NEZXZGeC9vYmplY3RzL2NhZU9iamVjdHMvbWVtYmVyT2JqZWN0XCI7XHJcbmltcG9ydCB7IFNlbGVjdG9yRmlsaXRlciB9IGZyb20gXCIuLi8uLi8uLi8uLi9nc0RldkZ4L21hbmFnZXJzL2ludGVyZmFjZU1hbmFnZXJzL3NlbGVjdGlvbkludGVyZmFjZU1hbmFnZXJcIjtcclxuaW1wb3J0IHsgQ3V0bGluZVBvc3RKb2ludFVDT2JqZWN0IH0gZnJvbSBcIi4uLy4uLy4uLy4uL2dzRGV2Rngvb2JqZWN0cy9wcmV0cmVhdG1lbnRPYmplY3RzL2N1dGxpbmVQb3N0Sm9pbnRVQ09iamVjdFwiO1xyXG5pbXBvcnQgeyBCdXNpbmVzc1N0YXRlIH0gZnJvbSBcImdzLWNlZWMtZGVzaWduXCI7XHJcbmltcG9ydCB7IEcgfSBmcm9tIFwiQHN2Z2RvdGpzL3N2Zy5qc1wiO1xyXG5pbXBvcnQgeyBMb25nYW4gfSBmcm9tIFwiZ3MtYmltLWFpclwiO1xyXG5pbXBvcnQgeyBTdmdEcmF3IH0gZnJvbSBcImdzLWNlZWMtZGVzaWduXCI7XHJcbmltcG9ydCB7IFN3aXRjaENvbG9yRGl2aWRlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2dzRGV2RngvbWFuYWdlcnMvaW50ZXJmYWNlTWFuYWdlcnMvY29tbW9uSW50ZXJmYWNlTWFuYWdlclwiO1xyXG5pbXBvcnQgeyBNZXNzYWdlIH0gZnJvbSBcImVsZW1lbnQtdWlcIjtcclxuaW1wb3J0IHsgTGVnZW5kTWFuYWdlIH0gZnJvbSBcIi4uLy4uLy4uLy4uL3ZpZXdlcldyYXBwZXIvbW9kdWxlL2xlZ2VuZE1hbmFnZVwiO1xyXG5cclxuLyoqXHJcbiAqIOeuoeiKgueCueWGsuWIh+W6lOWKm+avlFxyXG4gKi9cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29tbWFuZFNob3dKb2ludENhblVDIGV4dGVuZHMgQ29tbWFuZENvbXBvbmVudCB7XHJcbiAgdHlwZU5hbWUgPSBcIkNvbW1hbmRTaG93Sm9pbnRDYW5VQ1wiO1xyXG5cclxuICBjb25maWc6IFNob3dKb2ludENhblVDQ29uZmlnO1xyXG4gIHByZVNlbGVjdG9yOiBDQUVPYmplY3RQcmVTZWxlY3RvcjtcclxuICBjYWVPYmplY3RTZWxlY3RvcjogQ0FFT2JqZWN0U2VsZWN0b3I7XHJcblxyXG4gIHBvc3RSZXN1bHQgPSBudWxsO1xyXG4gIGpvaW50Q2FuU3VtbWFyeVVDID0gbnVsbDtcclxuXHJcbiAgY3V0bGluZU9iamVjdDogQ3V0bGluZVBvc3RKb2ludFVDT2JqZWN0ID0gbnVsbDtcclxuXHJcbiAgLyoqXHJcbiAgICog6KKr6L2s5o2i55qE5p2G5Lu25YiX6KGoXHJcbiAgICovXHJcbiAgbWVtYmVycyA9IG5ldyBBcnJheTxNZW1iZXJPYmplY3Q+KCk7XHJcbiAgLyoqXHJcbiAgICog6L2s5o2i5ZCO55qE5LqR5Zu+5p2G5Lu25YiX6KGoXHJcbiAgICovXHJcbiAgY2xvdWRNZW1iZXJzOiBNZW1iZXJPYmplY3RbXSA9IG5ldyBBcnJheTxNZW1iZXJPYmplY3Q+KCk7XHJcblxyXG4gIF9ncm91cDogRyA9IG51bGw7XHJcbiAgbGFiZWxNZW1iZXJzID0gbmV3IEFycmF5PE1lbWJlck9iamVjdD4oKTtcclxuICBsYWJlbERhdGFzID0gbmV3IEFycmF5PG51bWJlcltdPigpO1xyXG4gIGxhYmVsRGlzdGFuY2VzID0gbmV3IEFycmF5PG51bWJlcltdPigpO1xyXG4gIHJlc3VsdExhYmVsID0gbmV3IEFycmF5PGFueT4oKTtcclxuICByZXN1bHRMYWJlbERpYzogeyBbaWQ6IHN0cmluZ106IGFueSB9ID0ge307XHJcbiAgbGFiZWxDb2xvciA9IFwiI2ZmZmZmZlwiO1xyXG5cclxuICBlbGVtZW50S2V5ID0gXCJjdXRsaW5lXCI7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgc3VwZXIoKTtcclxuICB9XHJcblxyXG4gIGJlZ2luKCk6IHZvaWQge1xyXG4gICAgdGhpcy5jaGFuZ2VPcGVyYXRvcnMoKTtcclxuXHJcbiAgICBjb25zb2xlLmxvZyhcIkNvbW1hbmRTaG93Sm9pbnRDYW5VQ1wiKTtcclxuICAgIHRoaXMuY29uZmlnID0gbmV3IFNob3dKb2ludENhblVDQ29uZmlnKCk7XHJcbiAgICB0aGlzLmNvbmZpZy5zaG93KCk7XHJcblxyXG4gICAgbGV0IHBvc3RJbnRlcmZhY2VNYW5hZ2VyID0gdGhpcy52aWV3ZXIucG9zdEludGVyZmFjZU1hbmFnZXI7XHJcbiAgICBpZiAoIXBvc3RJbnRlcmZhY2VNYW5hZ2VyLmdldEZpbmlzaF9qb2ludENhblVDKSB7XHJcbiAgICAgIHBvc3RJbnRlcmZhY2VNYW5hZ2VyLnRpcF9qb2ludENhblVDID0gdHJ1ZTtcclxuICAgICAgaWYgKCFwb3N0SW50ZXJmYWNlTWFuYWdlci5tZXNzYWdlX2pvaW50Q2FuVUMpIHtcclxuICAgICAgICBwb3N0SW50ZXJmYWNlTWFuYWdlci5tZXNzYWdlX2pvaW50Q2FuVUMgPSBNZXNzYWdlLmluZm8oe1xyXG4gICAgICAgICAgbWVzc2FnZTogXCLoioLngrnlhrLliIfku43lnKjor7fmsYJEQuaVsOaNru+8jOivt+etieW+heivt+axguWujOaIkC5cIixcclxuICAgICAgICAgIGR1cmF0aW9uOiAwLFxyXG4gICAgICAgICAgc2hvd0Nsb3NlOiB0cnVlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGxldCBkYXRhID0gdGhpcy5jb25maWcucHJvcGVydGllcy5pdGVtc1swXS5kYXRhO1xyXG4gICAgICBkYXRhLm1pbk1hZ25pdHVkZS52YWx1ZSA9IDA7XHJcbiAgICAgIGRhdGEuZGlzcGxheUxhYmVscy52YWx1ZSA9IHRydWU7XHJcbiAgICAgIGRhdGEuZGlzcGxheUN1dGxpbmUudmFsdWUgPSB0cnVlO1xyXG4gICAgICBkYXRhLmNvbG9yQ29kZS52YWx1ZSA9IHRydWU7XHJcbiAgICB9LCAxMDApO1xyXG5cclxuICAgIHRoaXMudmlld2VyLnNjZW5lQ2FtZXJhQ2hhbmdlZC5hZGQoKCkgPT4ge1xyXG4gICAgICBsZXQgbWluTWFnbml0dWRlID0gTnVtYmVyKFxyXG4gICAgICAgIHRoaXMuY29uZmlnLnByb3BlcnRpZXMuaXRlbXNbMF0uZGF0YS5taW5NYWduaXR1ZGUudmFsdWVcclxuICAgICAgKTtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmxhYmVsTWVtYmVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHRoaXMuZHJhd1N2ZyhcclxuICAgICAgICAgIHRoaXMubGFiZWxNZW1iZXJzW2ldLFxyXG4gICAgICAgICAgdGhpcy5sYWJlbERhdGFzW2ldLFxyXG4gICAgICAgICAgdGhpcy5sYWJlbERpc3RhbmNlc1tpXSxcclxuICAgICAgICAgIG1pbk1hZ25pdHVkZVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcmVzdG9yZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuY2hhbmdlT3BlcmF0b3JzKCk7XHJcbiAgICB0aGlzLmNvbmZpZy5zaG93KCk7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VPcGVyYXRvcnMoKTogdm9pZCB7XHJcbiAgICAvLyDov5vlhaXlkb3ku6TliY3muIXnqbrpgInkuK3kuI7pq5jkuq4uXHJcbiAgICB0aGlzLnZpZXdlci5zZWxlY3Rpb25NYW5hZ2VyLmNsZWFyQWxsU2VsZWN0aW9uQW5kSGlnaGxpZ2h0KCk7XHJcbiAgICB0aGlzLnZpZXdlci51cGRhdGVEaXNwbGF5KCk7XHJcblxyXG4gICAgLy8g5riF56m65pON5L2c5ZmoLlxyXG4gICAgdGhpcy52aWV3ZXIub3BlcmF0b3JNYW5hZ2VyLmNsZWFyKCk7XHJcbiAgICAvLyDmt7vliqDmk43kvZzlmahcclxuICAgIHRoaXMudmlld2VyLm9wZXJhdG9yTWFuYWdlci5hZGQobmV3IENhbWVyYU1vdXNlKCkpO1xyXG5cclxuICAgIHRoaXMucHJlU2VsZWN0b3IgPSBuZXcgQ0FFT2JqZWN0UHJlU2VsZWN0b3IoKTtcclxuICAgIHRoaXMudmlld2VyLm9wZXJhdG9yTWFuYWdlci5hZGQodGhpcy5wcmVTZWxlY3Rvcik7XHJcblxyXG4gICAgdGhpcy5jYWVPYmplY3RTZWxlY3RvciA9IG5ldyBDQUVPYmplY3RTZWxlY3RvcigpO1xyXG4gICAgdGhpcy52aWV3ZXIub3BlcmF0b3JNYW5hZ2VyLmFkZCh0aGlzLmNhZU9iamVjdFNlbGVjdG9yKTtcclxuXHJcbiAgICAvL3RoaXMuY2FlT2JqZWN0U2VsZWN0b3IuaXNNdWx0aVNlbGVjdCA9IHRydWU7XHJcblxyXG4gICAgdGhpcy52aWV3ZXIuc2VsZWN0aW9uSW50ZXJmYWNlTWFuYWdlci5zZWxlY3RvckZpbHRlciA9XHJcbiAgICAgIFNlbGVjdG9yRmlsaXRlci5NZW1iZXI7XHJcblxyXG4gICAgdGhpcy5jYWVPYmplY3RTZWxlY3Rvci5sQnV0dG9uVXAuYWRkKCgpID0+IHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVQYW5lbCgpO1xyXG4gICAgICB9LCAwKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZW5kKCk6IHZvaWQge1xyXG4gICAgbGV0IHBvc3RJbnRlcmZhY2VNYW5hZ2VyID0gdGhpcy52aWV3ZXIucG9zdEludGVyZmFjZU1hbmFnZXI7XHJcbiAgICBpZiAocG9zdEludGVyZmFjZU1hbmFnZXIubWVzc2FnZV9qb2ludENhblVDKSB7XHJcbiAgICAgIHBvc3RJbnRlcmZhY2VNYW5hZ2VyLm1lc3NhZ2Vfam9pbnRDYW5VQy5jbG9zZSgpO1xyXG4gICAgICBwb3N0SW50ZXJmYWNlTWFuYWdlci5tZXNzYWdlX2pvaW50Q2FuVUMgPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY29uZmlnLmhpZGUoKTtcclxuICAgIHN1cGVyLmVuZCgpO1xyXG5cclxuICAgIHRoaXMudmlld2VyLnNlbGVjdGlvbk1hbmFnZXIuY2xlYXJBbGxTZWxlY3Rpb25BbmRIaWdobGlnaHQoKTtcclxuXHJcbiAgICB0aGlzLnJlc2V0U2NlbmUoKTtcclxuICAgIHRoaXMudmlld2VyLnVwZGF0ZURpc3BsYXkoKTtcclxuXHJcbiAgICAvLyBzdG9yZS5jb21taXQoXCJzZXRMZWdlbmRcIiwge30pO1xyXG5cclxuICAgIC8vIOabtOaWsOW3puS+p+e7k+aehOagkVxyXG4gICAgc3RvcmUuY29tbWl0KFwic3RydWN0dXJlVHJlZS91cGRhdGVUcmVlRGF0YVwiLCBbXHJcbiAgICAgIHRoaXMudmlld2VyLnN0cnVjdHVyZVRyZWVNYW5hZ2VyLnJvb3ROb2RlLFxyXG4gICAgXSk7XHJcblxyXG4gICAgbGV0IGNvbW1hbmRTZWxlY3QgPSBuZXcgQ29tbWFuZFNlbGVjdCgpO1xyXG4gICAgdGhpcy5wcm9jZXNzLmNvbW1hbmRNYW5hZ2VyLmV4ZWN1dGUoY29tbWFuZFNlbGVjdCk7XHJcbiAgfVxyXG5cclxuICBjbGVhclN2ZygpIHtcclxuICAgIGlmICh0aGlzLnJlc3VsdExhYmVsKSB7XHJcbiAgICAgIHRoaXMucmVzdWx0TGFiZWwuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgIGl0ZW0uY2xlYXIoKTtcclxuICAgICAgICBpdGVtID0gbnVsbDtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMucmVzdWx0TGFiZWwgPSBuZXcgQXJyYXk8YW55PigpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMubGFiZWxNZW1iZXJzID0gbmV3IEFycmF5PE1lbWJlck9iamVjdD4oKTtcclxuICAgIHRoaXMubGFiZWxEYXRhcyA9IG5ldyBBcnJheTxudW1iZXJbXT4oKTtcclxuICAgIHRoaXMubGFiZWxEaXN0YW5jZXMgPSBuZXcgQXJyYXk8bnVtYmVyW10+KCk7XHJcbiAgICB0aGlzLnJlc3VsdExhYmVsRGljID0ge307XHJcbiAgfVxyXG5cclxuICBkcmF3U3ZnKFxyXG4gICAgbWVtYmVyOiBNZW1iZXJPYmplY3QsXHJcbiAgICBkYXRhczogbnVtYmVyW10sXHJcbiAgICBkaXN0YW5jZXM6IG51bWJlcltdLFxyXG4gICAgbWluTWFnbml0dWRlOiBudW1iZXJcclxuICApIHtcclxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgZGlzdGFuY2VzLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgIGxldCBkYXRhID0gZGF0YXNbal07XHJcbiAgICAgIGlmIChcclxuICAgICAgICBtaW5NYWduaXR1ZGUgIT09IG51bGwgJiZcclxuICAgICAgICBtaW5NYWduaXR1ZGUgIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICAgIGRhdGEgPCBtaW5NYWduaXR1ZGVcclxuICAgICAgKSB7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBvcmlnaW4gPSBuZXcgRmxvYXQzMkFycmF5KG1lbWJlci5nZXRTdGFydFBvc2l0aW9uKCkpO1xyXG4gICAgICBsZXQgdmVjdG9yID0gbWVtYmVyLmdldFZlY3RvcigpO1xyXG4gICAgICBsZXQgY3VycmV0UG9zID0gTG9uZ2FuLlBvaW50LmFkZChvcmlnaW4sIExvbmdhbi5WZWN0b3IubXVsdGlwbHkodmVjdG9yLCBkaXN0YW5jZXNbal0pKTtcclxuXHJcbiAgICAgIC8vIGdldCB3aW5wb3MuXHJcbiAgICAgIGxldCBwb2ludCA9IHRoaXMudmlld2VyLndvcmxkUG9pbnRUb1BpeGVsUG9pbnQoW2N1cnJldFBvcyBhcyBhbnldKVswXTtcclxuXHJcbiAgICAgIGxldCBpZCA9IG1lbWJlci5uYW1lICsgZGlzdGFuY2VzW2pdO1xyXG4gICAgICBpZiAodGhpcy5yZXN1bHRMYWJlbERpY1tpZF0pIHtcclxuICAgICAgICB0aGlzLnJlc3VsdExhYmVsRGljW2lkXS5tb3ZlKHBvaW50WzBdICsgMSwgcG9pbnRbMV0gKyAxKTtcclxuICAgICAgICB0aGlzLnJlc3VsdExhYmVsRGljW2lkXS5hdHRyKFwiZm9udC1zaXplXCIsIERlc2lnbkJhc2VPYmplY3QuZm9udFNpemUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBkcmF3ID0gU3ZnRHJhdy5nZXRJbnN0YW5jZSh0aGlzLnZpZXdlci5jb250YWluZXIuaWQpLmRyYXc7XHJcbiAgICAgICAgLy8gaWYgKCF0aGlzLl9ncm91cCkge1xyXG4gICAgICAgIHRoaXMuX2dyb3VwID0gZHJhdy5ncm91cCgpO1xyXG4gICAgICAgIC8vIH1cclxuICAgICAgICBsZXQgcmVzdWx0VGV4dCA9IGRyYXdcclxuICAgICAgICAgIC50ZXh0KE51bWJlcihkYXRhKS50b0ZpeGVkKDMpKVxyXG4gICAgICAgICAgLmZvbnQoeyBmaWxsOiB0aGlzLmxhYmVsQ29sb3IgfSlcclxuICAgICAgICAgIC5hdHRyKFwiZm9udC1zaXplXCIsIERlc2lnbkJhc2VPYmplY3QuZm9udFNpemUpXHJcbiAgICAgICAgICAubW92ZShwb2ludFswXSArIDEsIHBvaW50WzFdICsgMSk7XHJcblxyXG4gICAgICAgIHRoaXMucmVzdWx0TGFiZWwucHVzaChyZXN1bHRUZXh0KTtcclxuXHJcbiAgICAgICAgbGV0IGlkID0gbWVtYmVyLm5hbWUgKyBkaXN0YW5jZXNbal07XHJcbiAgICAgICAgdGhpcy5yZXN1bHRMYWJlbERpY1tpZF0gPSByZXN1bHRUZXh0O1xyXG4gICAgICAgIHRoaXMuX2dyb3VwLmFkZChyZXN1bHRUZXh0KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29tbWFuZE9rKCk6IHZvaWQge1xyXG4gICAgbGV0IHBvc3RJbnRlcmZhY2VNYW5hZ2VyID0gdGhpcy52aWV3ZXIucG9zdEludGVyZmFjZU1hbmFnZXI7XHJcbiAgICBpZiAoIXBvc3RJbnRlcmZhY2VNYW5hZ2VyLmdldEZpbmlzaF9qb2ludENhblVDKSB7XHJcbiAgICAgIHBvc3RJbnRlcmZhY2VNYW5hZ2VyLnRpcF9qb2ludENhblVDID0gdHJ1ZTtcclxuICAgICAgTWVzc2FnZS5pbmZvKHtcclxuICAgICAgICBtZXNzYWdlOiBcIuiKgueCueWGsuWIh+S7jeWcqOivt+axgkRC5pWw5o2u77yM6K+3562J5b6F6K+35rGC5a6M5oiQLlwiLFxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChwb3N0SW50ZXJmYWNlTWFuYWdlci5qb2ludENhblVDKSB7XHJcbiAgICAgIHRoaXMucG9zdFJlc3VsdCA9IHBvc3RJbnRlcmZhY2VNYW5hZ2VyLmpvaW50Q2FuVUM7XHJcblxyXG4gICAgICBsZXQgY291bnRlciA9IDA7XHJcbiAgICAgIGZvciAobGV0IGkgb2YgT2JqZWN0LmtleXMocG9zdEludGVyZmFjZU1hbmFnZXIuam9pbnRDYW5VQykpIHtcclxuICAgICAgICBjb3VudGVyKys7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGNvdW50ZXIgPT09IDApIHtcclxuICAgICAgICBNZXNzYWdlLmluZm8oXCLmn6Xor6JKb2ludENhblVD6KGo6L+U5Zue5pWw5o2u5Li656m677yM6K+35qOA5p+lRELmlofku7ZcIik7XHJcbiAgICAgICAgbGV0IGRhdGEgPSB0aGlzLmNvbmZpZy5wcm9wZXJ0aWVzLml0ZW1zWzBdLmRhdGE7XHJcbiAgICAgICAgZGF0YS50aXAudmFsdWUgPSAyO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5jb25maWcucHJvcGVydGllcy5pdGVtc1swXS5kYXRhLmxvYWRDb25kaXRpb25OYW1lLnNlbGVjdE9wdGlvbnMuc2VsZWN0aW9ucyA9XHJcbiAgICAgICAgW107XHJcbiAgICAgIGZvciAobGV0IGkgb2YgT2JqZWN0LmtleXMocG9zdEludGVyZmFjZU1hbmFnZXIuam9pbnRDYW5VQykpIHtcclxuICAgICAgICBpZiAocG9zdEludGVyZmFjZU1hbmFnZXIuam9pbnRDYW5VQ1tpXVswXSkge1xyXG4gICAgICAgICAgbGV0IGxvYWRDb25kaXRpb25OYW1lID1cclxuICAgICAgICAgICAgcG9zdEludGVyZmFjZU1hbmFnZXIuam9pbnRDYW5VQ1tpXVswXS5Mb2FkQ2FzZTtcclxuICAgICAgICAgIHRoaXMuY29uZmlnLnByb3BlcnRpZXMuaXRlbXNbMF0uZGF0YS5sb2FkQ29uZGl0aW9uTmFtZS5zZWxlY3RPcHRpb25zLnNlbGVjdGlvbnMucHVzaChcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIGxhYmVsOiBsb2FkQ29uZGl0aW9uTmFtZSxcclxuICAgICAgICAgICAgICB2YWx1ZTogbG9hZENvbmRpdGlvbk5hbWUsXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBNZXNzYWdlLmluZm8oXCJKb2ludENhblVD6KGo5LiN5a2Y5Zyo77yM6K+35qOA5p+lRELmlofku7ZcIik7XHJcbiAgICAgIGxldCBkYXRhID0gdGhpcy5jb25maWcucHJvcGVydGllcy5pdGVtc1swXS5kYXRhO1xyXG4gICAgICBkYXRhLnRpcC52YWx1ZSA9IDI7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocG9zdEludGVyZmFjZU1hbmFnZXIuam9pbnRDYW5TdW1tYXJ5VUMpIHtcclxuICAgICAgdGhpcy5qb2ludENhblN1bW1hcnlVQyA9IHBvc3RJbnRlcmZhY2VNYW5hZ2VyLmpvaW50Q2FuU3VtbWFyeVVDO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgTWVzc2FnZS5pbmZvKFwiam9pbnRDYW5TdW1tYXJ5VUPooajkuI3lrZjlnKjvvIzor7fmo4Dmn6VEQuaWh+S7tlwiKTtcclxuICAgICAgbGV0IGRhdGEgPSB0aGlzLmNvbmZpZy5wcm9wZXJ0aWVzLml0ZW1zWzBdLmRhdGE7XHJcbiAgICAgIGRhdGEudGlwLnZhbHVlID0gMjtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnNvbGUubG9nKFwi566h6IqC54K55Yay5YiH5bqU5Yqb5q+U5Zyo5L2N5pi+56S6XCIpO1xyXG4gICAgLy8g5Y+W5raI5YmN5aSE55CG5YiG6Imy5pWI5p6cXHJcbiAgICB0aGlzLnZpZXdlci5jb21tb25JbnRlcmZhY2VNYW5hZ2VyLmNvbG9yU3dpdGNoKFN3aXRjaENvbG9yRGl2aWRlLkNhbmNlbCk7XHJcbiAgICAvLyDlj5bmtojlhbbku5blkI7lpITnkIbliIboibLmlYjmnpwuXHJcbiAgICBwb3N0SW50ZXJmYWNlTWFuYWdlci5yZXNldE9odGVyUG9zdFJlc3VsdCgpO1xyXG5cclxuICAgIGxldCBkYXRhID0gdGhpcy5jb25maWcucHJvcGVydGllcy5pdGVtc1swXS5kYXRhO1xyXG4gICAgbGV0IGNvbG9yQ29kZSA9IGRhdGEuY29sb3JDb2RlLnZhbHVlO1xyXG4gICAgbGV0IG1pbk1hZ25pdHVkZSA9IE51bWJlcihkYXRhLm1pbk1hZ25pdHVkZS52YWx1ZSk7XHJcblxyXG4gICAgbGV0IGFmdGVydHJlYXRtZW50Uk8gPSB0aGlzLnZpZXdlci5wcm9jZXNzLmZpbmRSZW5kZXJPYmplY3RCeU5hbWUoXHJcbiAgICAgIFwi5ZCO5aSE55CG6K6h566X57uT5p6cXCJcclxuICAgICkgYXMgRGVzaWduQmFzZU9iamVjdDtcclxuICAgIGxldCBzaG93Sm9pbnRDYW5VQ1JPID0gdGhpcy52aWV3ZXIucHJvY2Vzcy5maW5kQ2FlT2JqZWN0QnlOYW1lSW5DaGlsZE9iamVjdChcclxuICAgICAgYWZ0ZXJ0cmVhdG1lbnRSTyxcclxuICAgICAgXCLnrqHoioLngrnlhrLliIflupTlipvmr5TlnKjkvY3mmL7npLpcIlxyXG4gICAgKSBhcyBEZXNpZ25CYXNlT2JqZWN0O1xyXG5cclxuICAgIHNob3dKb2ludENhblVDUk8gPSBuZXcgRGVzaWduQmFzZU9iamVjdCgpO1xyXG4gICAgLy8gc2hvd0pvaW50Q2FuVUNSTy5idXNpbmVzc1N0YXRlID0gQnVzaW5lc3NTdGF0ZS5DcmVhdGluZztcclxuICAgIHNob3dKb2ludENhblVDUk8ubmFtZSA9IFwi566h6IqC54K55Yay5YiH5bqU5Yqb5q+U5Zyo5L2N5pi+56S6XCI7XHJcbiAgICB0aGlzLnByb2Nlc3MuYWRkUmVuZGVyT2JqZWN0KGFmdGVydHJlYXRtZW50Uk8sIHNob3dKb2ludENhblVDUk8pO1xyXG5cclxuICAgIHRoaXMuY3V0bGluZU9iamVjdCA9IHRoaXMudmlld2VyLnByb2Nlc3MuZmluZENhZU9iamVjdEJ5TmFtZUluQ2hpbGRPYmplY3QoXHJcbiAgICAgIHNob3dKb2ludENhblVDUk8sXHJcbiAgICAgIFwi566h6IqC54K55Yay5YiH5bqU5Yqb5Zu+5L6L5pWw5o2uXCJcclxuICAgICkgYXMgQ3V0bGluZVBvc3RKb2ludFVDT2JqZWN0O1xyXG5cclxuICAgIGlmICghdGhpcy5jdXRsaW5lT2JqZWN0KSB7XHJcbiAgICAgIC8vIOa3u+WKoOWbvuS+i+aVsOaNrlJPKOimgeaMgeS5heWMluS/neWtmCkuXHJcbiAgICAgIHRoaXMuY3V0bGluZU9iamVjdCA9IG5ldyBDdXRsaW5lUG9zdEpvaW50VUNPYmplY3QoKTtcclxuICAgICAgdGhpcy5jdXRsaW5lT2JqZWN0Lm5hbWUgPSBcIueuoeiKgueCueWGsuWIh+W6lOWKm+avlOWbvuS+i1wiO1xyXG4gICAgICB0aGlzLmN1dGxpbmVPYmplY3QuYnVzaW5lc3NTdGF0ZSA9IEJ1c2luZXNzU3RhdGUuQ3JlYXRpbmc7XHJcbiAgICAgIHRoaXMuY3V0bGluZU9iamVjdC50aXRsZSA9IFwi566h6IqC54K55Yay5YiH5bqU5Yqb5q+UXCI7XHJcbiAgICAgIHRoaXMuY3V0bGluZU9iamVjdC51Y1JhbmdlcyA9IFswLCAwLjQsIDAuNiwgMC44LCAxLjBdO1xyXG4gICAgICB0aGlzLmN1dGxpbmVPYmplY3QudWNSYW5nZXNDb2xvcnMgPSBbXHJcbiAgICAgICAgMC44MiwgMC44MiwgMC44MiwgMSwgMC41LCAwLjUsIDAuNSwgMSwgMCwgMSwgMCwgMSwgMSwgMSwgMCwgMSwgMSwgMCwgMCxcclxuICAgICAgICAxLFxyXG4gICAgICBdO1xyXG5cclxuICAgICAgdGhpcy5wcm9jZXNzLmFkZFJlbmRlck9iamVjdChzaG93Sm9pbnRDYW5VQ1JPLCB0aGlzLmN1dGxpbmVPYmplY3QpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy9cclxuICAgIH1cclxuXHJcbiAgICAvLyBsZXQgbG9hZENvbmRpdGlvbk5hbWUgPSBkYXRhLmxvYWRDb25kaXRpb25OYW1lLnZhbHVlO1xyXG4gICAgbGV0IGxvYWRDb25kaXRpb25OYW1lID0gbnVsbDtcclxuICAgIGZvciAobGV0IGkgb2YgT2JqZWN0LmtleXModGhpcy5wb3N0UmVzdWx0KSkge1xyXG4gICAgICBpZiAobG9hZENvbmRpdGlvbk5hbWUgPT09IG51bGwpIHtcclxuICAgICAgICBsb2FkQ29uZGl0aW9uTmFtZSA9IHRoaXMucG9zdFJlc3VsdFtpXVswXS5Mb2FkQ2FzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IGpvaW50Q2FuVUMgPSB0aGlzLnBvc3RSZXN1bHRbbG9hZENvbmRpdGlvbk5hbWVdO1xyXG5cclxuICAgIGxldCBoYXNSZWFkSm9pbnROYW1lID0gbmV3IEFycmF5PHN0cmluZz4oKTtcclxuICAgIGxldCBtZW1iZXJNYXBDb2xvcnMgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyW10+KCk7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuam9pbnRDYW5TdW1tYXJ5VUMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgLy9cclxuICAgICAgbGV0IHN1bW1hcnlJdGVtID0gdGhpcy5qb2ludENhblN1bW1hcnlVQ1tpXTtcclxuICAgICAgbGV0IGpvaW50TmFtZSA9IHN1bW1hcnlJdGVtLkpvaW50TmFtZTtcclxuICAgICAgbGV0IE9yaWdMb2FkVUMgPSBzdW1tYXJ5SXRlbS5PcmlnTG9hZFVDO1xyXG4gICAgICBsZXQgc2FicmFjZUpvaW50TmFtZSA9IHN1bW1hcnlJdGVtLlNBQnJhY2VKb2ludDtcclxuXHJcbiAgICAgIC8vIGlmIChoYXNSZWFkSm9pbnROYW1lLmluZGV4T2Yoam9pbnROYW1lKSA+IC0xKSB7XHJcbiAgICAgIC8vICAgY29udGludWU7XHJcbiAgICAgIC8vIH1cclxuICAgICAgLy8gaGFzUmVhZEpvaW50TmFtZS5wdXNoKGpvaW50TmFtZSk7XHJcblxyXG4gICAgICAvLyDmoLnmja5MT0xvYWRVQ+WSjOiJsumYtuiOt+WPluminOiJsi5cclxuICAgICAgbGV0IGNvbG9ycyA9IHRoaXMuY3V0bGluZU9iamVjdC5nZXRDb2xvcnNCeURhdGFzKFxyXG4gICAgICAgIFtPcmlnTG9hZFVDXSxcclxuICAgICAgICB0aGlzLmN1dGxpbmVPYmplY3QudWNSYW5nZXMsXHJcbiAgICAgICAgdGhpcy5jdXRsaW5lT2JqZWN0LnVjUmFuZ2VzQ29sb3JzXHJcbiAgICAgICk7XHJcbiAgICAgIC8vIGZvciAobGV0IGogPSAwOyBqIDwgam9pbnRDYW5VQy5sZW5ndGg7IGorKykge1xyXG4gICAgICAvLyAgIC8vXHJcbiAgICAgIC8vICAgbGV0IGl0ZW0gPSBqb2ludENhblVDW2pdO1xyXG4gICAgICAvLyAgIGlmIChpdGVtLkNvbW1vbkpvaW50TmFtZSA9PT0gam9pbnROYW1lKSB7XHJcbiAgICAgIC8vICAgICBsZXQgYnJhY2VKb2ludE5hbWUgPSBpdGVtLkJyYWNlSm9pbnROYW1lO1xyXG4gICAgICBsZXQgYnJhY2VKb2ludE5hbWUgPSBzYWJyYWNlSm9pbnROYW1lO1xyXG5cclxuICAgICAgLy8g5p+l5om+5a+55bqU5pKR5p2GLlxyXG4gICAgICBsZXQgbWVtYmVycyA9IHRoaXMudmlld2VyLnByb2Nlc3MuZmluZFJlbmRlck9iamVjdHNCeVR5cGUoXCJNZW1iZXJPYmplY3RcIik7XHJcbiAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgbWVtYmVycy5sZW5ndGg7IGsrKykge1xyXG4gICAgICAgIGxldCBtZW1iZXIgPSBtZW1iZXJzW2tdIGFzIE1lbWJlck9iamVjdDtcclxuXHJcbiAgICAgICAgLy/orr7nva7mkpHmnYbnmoTkupHlm77mlYjmnpwuXHJcbiAgICAgICAgbGV0IGNsb3VkTWVtYmVyVHJhbnNmb3JtTWFuYWdlciA9XHJcbiAgICAgICAgICB0aGlzLnZpZXdlci5wcm9jZXNzLmNsb3VkTWVtYmVyVHJhbnNmb3JtTWFuYWdlcjtcclxuXHJcbiAgICAgICAgbGV0IGxlbmd0aCA9IG1lbWJlci5nZXRNZW1iZXJMZW5ndGgoKTtcclxuICAgICAgICBsZXQgbWVtYmVyQ29sb3IgPSBbLi4ubWVtYmVyLmZhY2VDb2xvcl07XHJcbiAgICAgICAgbWVtYmVyQ29sb3JbMF0gLz0gMjU1O1xyXG4gICAgICAgIG1lbWJlckNvbG9yWzFdIC89IDI1NTtcclxuICAgICAgICBtZW1iZXJDb2xvclsyXSAvPSAyNTU7XHJcblxyXG4gICAgICAgIGxldCByZXN1bHRNZW1iZXJzID0gbmV3IEFycmF5PE1lbWJlck9iamVjdD4oKTtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICBtZW1iZXIuc3RhcnQubmFtZSA9PT0gam9pbnROYW1lICYmXHJcbiAgICAgICAgICBtZW1iZXIuZW5kLm5hbWUgPT09IGJyYWNlSm9pbnROYW1lXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICBpZiAobWVtYmVyLmRpdkRpc3RhbmNlcykge1xyXG4gICAgICAgICAgICBtZW1iZXIuZGVsZXRlKCk7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgbGV0IGRpc3RhbmNlcyA9IFswLCBsZW5ndGggLyAzLCBsZW5ndGggLyAzLCBsZW5ndGhdO1xyXG4gICAgICAgICAgbGV0IGRpdkNvbG9ycyA9IGNvbG9yc1xyXG4gICAgICAgICAgICAuY29uY2F0KGNvbG9ycylcclxuICAgICAgICAgICAgLmNvbmNhdChtZW1iZXJDb2xvcilcclxuICAgICAgICAgICAgLmNvbmNhdChtZW1iZXJDb2xvcik7XHJcbiAgICAgICAgICBpZiAobWVtYmVyLnZpc2libGUgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIGxldCBjdXJyZW50Q29sb3JzID0gbWVtYmVyTWFwQ29sb3JzLmdldChtZW1iZXIuaWQpO1xyXG4gICAgICAgICAgICAvLyDnrKzkuozmrKHov5vmnaUuXHJcbiAgICAgICAgICAgIGRpc3RhbmNlcyA9IFtcclxuICAgICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAgIGxlbmd0aCAvIDMsXHJcbiAgICAgICAgICAgICAgbGVuZ3RoIC8gMyxcclxuICAgICAgICAgICAgICAoMiAqIGxlbmd0aCkgLyAzLFxyXG4gICAgICAgICAgICAgICgyICogbGVuZ3RoKSAvIDMsXHJcbiAgICAgICAgICAgICAgbGVuZ3RoLFxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICBkaXZDb2xvcnMgPSBjb2xvcnMuY29uY2F0KGNvbG9ycykuY29uY2F0KGN1cnJlbnRDb2xvcnMpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbWVtYmVyTWFwQ29sb3JzLnNldChtZW1iZXIuaWQsIGRpdkNvbG9ycyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXN1bHRNZW1iZXJzID0gY2xvdWRNZW1iZXJUcmFuc2Zvcm1NYW5hZ2VyLmNyZWF0ZUNsb3VkTWVtYmVyKFxyXG4gICAgICAgICAgICBtZW1iZXIsXHJcbiAgICAgICAgICAgIGRpc3RhbmNlcyxcclxuICAgICAgICAgICAgZGl2Q29sb3JzLFxyXG4gICAgICAgICAgICBjb2xvckNvZGVcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgZm9yIChsZXQgbCA9IDA7IGwgPCByZXN1bHRNZW1iZXJzLmxlbmd0aDsgbCsrKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdE1lbWJlcnNbbF0udmlzaWJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHJlc3VsdE1lbWJlcnNbbF0uZGl2RGlzdGFuY2VzID0gZGlzdGFuY2VzO1xyXG4gICAgICAgICAgICByZXN1bHRNZW1iZXJzW2xdLmRpdkNvbG9ycyA9IGRpdkNvbG9ycztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgbWVtYmVyLmVuZC5uYW1lID09PSBqb2ludE5hbWUgJiZcclxuICAgICAgICAgIG1lbWJlci5zdGFydC5uYW1lID09PSBicmFjZUpvaW50TmFtZVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgaWYgKG1lbWJlci5kaXZEaXN0YW5jZXMpIHtcclxuICAgICAgICAgICAgbWVtYmVyLmRlbGV0ZSgpO1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdlci51cGRhdGVEaXNwbGF5KCk7XHJcbiAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGxldCBkaXN0YW5jZXMgPSBbMCwgKDIgKiBsZW5ndGgpIC8gMywgKDIgKiBsZW5ndGgpIC8gMywgbGVuZ3RoXTtcclxuICAgICAgICAgIGxldCBkaXZDb2xvcnMgPSBtZW1iZXJDb2xvclxyXG4gICAgICAgICAgICAuY29uY2F0KG1lbWJlckNvbG9yKVxyXG4gICAgICAgICAgICAuY29uY2F0KGNvbG9ycylcclxuICAgICAgICAgICAgLmNvbmNhdChjb2xvcnMpO1xyXG4gICAgICAgICAgaWYgKG1lbWJlci52aXNpYmxlID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICBsZXQgY3VycmVudENvbG9ycyA9IG1lbWJlck1hcENvbG9ycy5nZXQobWVtYmVyLmlkKTtcclxuICAgICAgICAgICAgLy8g56ys5LqM5qyh6L+b5p2lLlxyXG4gICAgICAgICAgICBkaXN0YW5jZXMgPSBbXHJcbiAgICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgICBsZW5ndGggLyAzLFxyXG4gICAgICAgICAgICAgIGxlbmd0aCAvIDMsXHJcbiAgICAgICAgICAgICAgKDIgKiBsZW5ndGgpIC8gMyxcclxuICAgICAgICAgICAgICAoMiAqIGxlbmd0aCkgLyAzLFxyXG4gICAgICAgICAgICAgIGxlbmd0aCxcclxuICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgZGl2Q29sb3JzID0gY3VycmVudENvbG9ycy5jb25jYXQoY29sb3JzKS5jb25jYXQoY29sb3JzKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIG1lbWJlck1hcENvbG9ycy5zZXQobWVtYmVyLmlkLCBkaXZDb2xvcnMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmVzdWx0TWVtYmVycyA9IGNsb3VkTWVtYmVyVHJhbnNmb3JtTWFuYWdlci5jcmVhdGVDbG91ZE1lbWJlcihcclxuICAgICAgICAgICAgbWVtYmVyLFxyXG4gICAgICAgICAgICBkaXN0YW5jZXMsXHJcbiAgICAgICAgICAgIGRpdkNvbG9ycyxcclxuICAgICAgICAgICAgY29sb3JDb2RlXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIGZvciAobGV0IGwgPSAwOyBsIDwgcmVzdWx0TWVtYmVycy5sZW5ndGg7IGwrKykge1xyXG4gICAgICAgICAgICByZXN1bHRNZW1iZXJzW2xdLnZpc2libGUgPSB0cnVlO1xyXG4gICAgICAgICAgICByZXN1bHRNZW1iZXJzW2xdLmRpdkRpc3RhbmNlcyA9IGRpc3RhbmNlcztcclxuICAgICAgICAgICAgcmVzdWx0TWVtYmVyc1tsXS5kaXZDb2xvcnMgPSBkaXZDb2xvcnM7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocmVzdWx0TWVtYmVycyAmJiByZXN1bHRNZW1iZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIC8vIOe7mOWItuagh+etvi5cclxuICAgICAgICAgIGlmIChkYXRhLmRpc3BsYXlMYWJlbHMudmFsdWUpIHtcclxuICAgICAgICAgICAgbGV0IG4gPSA2O1xyXG4gICAgICAgICAgICBsZXQgZGlzID0gbGVuZ3RoIC8gbjtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgIG1lbWJlci5lbmQubmFtZSA9PT0gam9pbnROYW1lICYmXHJcbiAgICAgICAgICAgICAgbWVtYmVyLnN0YXJ0Lm5hbWUgPT09IGJyYWNlSm9pbnROYW1lXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgIGRpcyA9IChsZW5ndGggKiAobiAtIDEpKSAvIG47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5sYWJlbE1lbWJlcnMucHVzaChtZW1iZXIpO1xyXG4gICAgICAgICAgICB0aGlzLmxhYmVsRGF0YXMucHVzaChbT3JpZ0xvYWRVQ10pO1xyXG4gICAgICAgICAgICB0aGlzLmxhYmVsRGlzdGFuY2VzLnB1c2goW2Rpc10pO1xyXG4gICAgICAgICAgICB0aGlzLmRyYXdTdmcobWVtYmVyLCBbT3JpZ0xvYWRVQywgT3JpZ0xvYWRVQ10sIFtkaXNdLCBtaW5NYWduaXR1ZGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgbGV0IHBhcmVudFJPID0gdGhpcy5wcm9jZXNzLmNhZVJlbmRlck9iamVjdFRyZWVNYW5hZ2VyLnRlbXBOb2RlO1xyXG5cclxuICAgICAgICAgIG1lbWJlci52aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHJlc3VsdE1lbWJlcnMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgdGhpcy52aWV3ZXIucHJvY2Vzcy5hZGRSZW5kZXJPYmplY3QocGFyZW50Uk8sIHJlc3VsdE1lbWJlcnNbal0pO1xyXG4gICAgICAgICAgICByZXN1bHRNZW1iZXJzW2pdLnNldE5lZWRVcGRhdGUoKTtcclxuICAgICAgICAgICAgdGhpcy5jbG91ZE1lbWJlcnMucHVzaChyZXN1bHRNZW1iZXJzW2pdKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLm1lbWJlcnMucHVzaChtZW1iZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyB9XHJcbiAgICAgICAgLy8gfVxyXG5cclxuICAgICAgICAvLyBpZiAoaXRlbS5Db21tb25Kb2ludE5hbWUgPT09IGpvaW50TmFtZSkge1xyXG4gICAgICAgIC8vICAgbGV0IGNob3JkSm9pbnROYW1lID0gaXRlbS5DaG9yZEpvaW50TmFtZTtcclxuXHJcbiAgICAgICAgLy8gICAvLyDmn6Xmib7lr7nlupTmkpHmnYYuXHJcbiAgICAgICAgLy8gICBsZXQgbWVtYmVycyA9XHJcbiAgICAgICAgLy8gICAgIHRoaXMudmlld2VyLnByb2Nlc3MuZmluZFJlbmRlck9iamVjdHNCeVR5cGUoXCJNZW1iZXJPYmplY3RcIik7XHJcbiAgICAgICAgLy8gICBmb3IgKGxldCBrID0gMDsgayA8IG1lbWJlcnMubGVuZ3RoOyBrKyspIHtcclxuICAgICAgICAvLyAgICAgbGV0IG1lbWJlciA9IG1lbWJlcnNba10gYXMgTWVtYmVyT2JqZWN0O1xyXG5cclxuICAgICAgICAvLyAgICAgLy/orr7nva7mkpHmnYbnmoTkupHlm77mlYjmnpwuXHJcbiAgICAgICAgLy8gICAgIGxldCBjbG91ZE1lbWJlclRyYW5zZm9ybU1hbmFnZXIgPVxyXG4gICAgICAgIC8vICAgICAgIHRoaXMudmlld2VyLnByb2Nlc3MuY2xvdWRNZW1iZXJUcmFuc2Zvcm1NYW5hZ2VyO1xyXG5cclxuICAgICAgICAvLyAgICAgbGV0IGxlbmd0aCA9IG1lbWJlci5nZXRNZW1iZXJMZW5ndGgoKTtcclxuICAgICAgICAvLyAgICAgbGV0IG1lbWJlckNvbG9yID0gWy4uLm1lbWJlci5mYWNlQ29sb3JdO1xyXG4gICAgICAgIC8vICAgICBtZW1iZXJDb2xvclswXSAvPSAyNTU7XHJcbiAgICAgICAgLy8gICAgIG1lbWJlckNvbG9yWzFdIC89IDI1NTtcclxuICAgICAgICAvLyAgICAgbWVtYmVyQ29sb3JbMl0gLz0gMjU1O1xyXG5cclxuICAgICAgICAvLyAgICAgbGV0IHJlc3VsdE1lbWJlcnMgPSBuZXcgQXJyYXk8TWVtYmVyT2JqZWN0PigpO1xyXG4gICAgICAgIC8vICAgICBpZiAoXHJcbiAgICAgICAgLy8gICAgICAgbWVtYmVyLnN0YXJ0Lm5hbWUgPT09IGpvaW50TmFtZSAmJlxyXG4gICAgICAgIC8vICAgICAgIG1lbWJlci5lbmQubmFtZSA9PT0gY2hvcmRKb2ludE5hbWVcclxuICAgICAgICAvLyAgICAgKSB7XHJcbiAgICAgICAgLy8gICAgICAgaWYgKG1lbWJlci5kaXZEaXN0YW5jZXMpIHtcclxuICAgICAgICAvLyAgICAgICAgIG1lbWJlci5kZWxldGUoKTtcclxuICAgICAgICAvLyAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIC8vICAgICAgIH1cclxuICAgICAgICAvLyAgICAgICBsZXQgZGlzdGFuY2VzID0gWzAsIGxlbmd0aCAvIDMsIGxlbmd0aCAvIDMsIGxlbmd0aF07XHJcbiAgICAgICAgLy8gICAgICAgbGV0IGRpdkNvbG9ycyA9IGNvbG9yc1xyXG4gICAgICAgIC8vICAgICAgICAgLmNvbmNhdChjb2xvcnMpXHJcbiAgICAgICAgLy8gICAgICAgICAuY29uY2F0KG1lbWJlckNvbG9yKVxyXG4gICAgICAgIC8vICAgICAgICAgLmNvbmNhdChtZW1iZXJDb2xvcik7XHJcbiAgICAgICAgLy8gICAgICAgaWYgKG1lbWJlci52aXNpYmxlID09PSBmYWxzZSkge1xyXG4gICAgICAgIC8vICAgICAgICAgLy8g56ys5LqM5qyh6L+b5p2lLlxyXG4gICAgICAgIC8vICAgICAgICAgZGlzdGFuY2VzID0gWzAsIGxlbmd0aCAvIDMsICgyICogbGVuZ3RoKSAvIDMsIGxlbmd0aF07XHJcbiAgICAgICAgLy8gICAgICAgICBkaXZDb2xvcnMgPSBjb2xvcnNcclxuICAgICAgICAvLyAgICAgICAgICAgLmNvbmNhdChtZW1iZXJDb2xvcilcclxuICAgICAgICAvLyAgICAgICAgICAgLmNvbmNhdChtZW1iZXJDb2xvcilcclxuICAgICAgICAvLyAgICAgICAgICAgLmNvbmNhdChjb2xvcnMpO1xyXG4gICAgICAgIC8vICAgICAgIH1cclxuICAgICAgICAvLyAgICAgICByZXN1bHRNZW1iZXJzID0gY2xvdWRNZW1iZXJUcmFuc2Zvcm1NYW5hZ2VyLmNyZWF0ZUNsb3VkTWVtYmVyKFxyXG4gICAgICAgIC8vICAgICAgICAgbWVtYmVyLFxyXG4gICAgICAgIC8vICAgICAgICAgZGlzdGFuY2VzLFxyXG4gICAgICAgIC8vICAgICAgICAgZGl2Q29sb3JzLFxyXG4gICAgICAgIC8vICAgICAgICAgY29sb3JDb2RlXHJcbiAgICAgICAgLy8gICAgICAgKTtcclxuXHJcbiAgICAgICAgLy8gICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXN1bHRNZW1iZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgLy8gICAgICAgICByZXN1bHRNZW1iZXJzW2ldLnZpc2libGUgPSB0cnVlO1xyXG4gICAgICAgIC8vICAgICAgICAgcmVzdWx0TWVtYmVyc1tpXS5kaXZEaXN0YW5jZXMgPSBkaXN0YW5jZXM7XHJcbiAgICAgICAgLy8gICAgICAgICByZXN1bHRNZW1iZXJzW2ldLmRpdkNvbG9ycyA9IGRpdkNvbG9ycztcclxuICAgICAgICAvLyAgICAgICB9XHJcbiAgICAgICAgLy8gICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgLy8gICAgICAgbWVtYmVyLmVuZC5uYW1lID09PSBqb2ludE5hbWUgJiZcclxuICAgICAgICAvLyAgICAgICBtZW1iZXIuc3RhcnQubmFtZSA9PT0gY2hvcmRKb2ludE5hbWVcclxuICAgICAgICAvLyAgICAgKSB7XHJcbiAgICAgICAgLy8gICAgICAgaWYgKG1lbWJlci5kaXZEaXN0YW5jZXMpIHtcclxuICAgICAgICAvLyAgICAgICAgIG1lbWJlci5kZWxldGUoKTtcclxuICAgICAgICAvLyAgICAgICAgIHRoaXMudmlld2VyLnVwZGF0ZURpc3BsYXkoKTtcclxuICAgICAgICAvLyAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIC8vICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gICAgICAgbGV0IGRpc3RhbmNlcyA9IFswLCAoMiAqIGxlbmd0aCkgLyAzLCAoMiAqIGxlbmd0aCkgLyAzLCBsZW5ndGhdO1xyXG4gICAgICAgIC8vICAgICAgIGxldCBkaXZDb2xvcnMgPSBtZW1iZXJDb2xvclxyXG4gICAgICAgIC8vICAgICAgICAgLmNvbmNhdChtZW1iZXJDb2xvcilcclxuICAgICAgICAvLyAgICAgICAgIC5jb25jYXQoY29sb3JzKVxyXG4gICAgICAgIC8vICAgICAgICAgLmNvbmNhdChjb2xvcnMpO1xyXG4gICAgICAgIC8vICAgICAgIGlmIChtZW1iZXIudmlzaWJsZSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAvLyAgICAgICAgIC8vIOesrOS6jOasoei/m+adpS5cclxuICAgICAgICAvLyAgICAgICAgIGRpc3RhbmNlcyA9IFswLCBsZW5ndGggLyAzLCAoMiAqIGxlbmd0aCkgLyAzLCBsZW5ndGhdO1xyXG4gICAgICAgIC8vICAgICAgICAgZGl2Q29sb3JzID0gY29sb3JzXHJcbiAgICAgICAgLy8gICAgICAgICAgIC5jb25jYXQobWVtYmVyQ29sb3IpXHJcbiAgICAgICAgLy8gICAgICAgICAgIC5jb25jYXQobWVtYmVyQ29sb3IpXHJcbiAgICAgICAgLy8gICAgICAgICAgIC5jb25jYXQoY29sb3JzKTtcclxuICAgICAgICAvLyAgICAgICB9XHJcbiAgICAgICAgLy8gICAgICAgcmVzdWx0TWVtYmVycyA9IGNsb3VkTWVtYmVyVHJhbnNmb3JtTWFuYWdlci5jcmVhdGVDbG91ZE1lbWJlcihcclxuICAgICAgICAvLyAgICAgICAgIG1lbWJlcixcclxuICAgICAgICAvLyAgICAgICAgIGRpc3RhbmNlcyxcclxuICAgICAgICAvLyAgICAgICAgIGRpdkNvbG9ycyxcclxuICAgICAgICAvLyAgICAgICAgIGNvbG9yQ29kZVxyXG4gICAgICAgIC8vICAgICAgICk7XHJcblxyXG4gICAgICAgIC8vICAgICAgIGZvciAobGV0IGwgPSAwOyBsIDwgcmVzdWx0TWVtYmVycy5sZW5ndGg7IGwrKykge1xyXG4gICAgICAgIC8vICAgICAgICAgcmVzdWx0TWVtYmVyc1tsXS52aXNpYmxlID0gdHJ1ZTtcclxuICAgICAgICAvLyAgICAgICAgIHJlc3VsdE1lbWJlcnNbbF0uZGl2RGlzdGFuY2VzID0gZGlzdGFuY2VzO1xyXG4gICAgICAgIC8vICAgICAgICAgcmVzdWx0TWVtYmVyc1tsXS5kaXZDb2xvcnMgPSBkaXZDb2xvcnM7XHJcbiAgICAgICAgLy8gICAgICAgfVxyXG4gICAgICAgIC8vICAgICB9XHJcblxyXG4gICAgICAgIC8vICAgICBpZiAocmVzdWx0TWVtYmVycyAmJiByZXN1bHRNZW1iZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAvLyAgICAgICAvLyDnu5jliLbmoIfnrb4uXHJcbiAgICAgICAgLy8gICAgICAgaWYgKGRhdGEuZGlzcGxheUxhYmVscy52YWx1ZSkge1xyXG4gICAgICAgIC8vICAgICAgICAgbGV0IG4gPSA2O1xyXG4gICAgICAgIC8vICAgICAgICAgbGV0IGRpcyA9IGxlbmd0aCAvIG47XHJcbiAgICAgICAgLy8gICAgICAgICBpZiAoXHJcbiAgICAgICAgLy8gICAgICAgICAgIG1lbWJlci5lbmQubmFtZSA9PT0gam9pbnROYW1lICYmXHJcbiAgICAgICAgLy8gICAgICAgICAgIG1lbWJlci5zdGFydC5uYW1lID09PSBjaG9yZEpvaW50TmFtZVxyXG4gICAgICAgIC8vICAgICAgICAgKSB7XHJcbiAgICAgICAgLy8gICAgICAgICAgIGRpcyA9IChsZW5ndGggKiAobiAtIDEpKSAvIG47XHJcbiAgICAgICAgLy8gICAgICAgICB9XHJcbiAgICAgICAgLy8gICAgICAgICB0aGlzLmxhYmVsTWVtYmVycy5wdXNoKG1lbWJlcik7XHJcbiAgICAgICAgLy8gICAgICAgICB0aGlzLmxhYmVsRGF0YXMucHVzaChbT3JpZ0xvYWRVQ10pO1xyXG4gICAgICAgIC8vICAgICAgICAgdGhpcy5sYWJlbERpc3RhbmNlcy5wdXNoKFtkaXNdKTtcclxuICAgICAgICAvLyAgICAgICAgIHRoaXMuZHJhd1N2ZyhcclxuICAgICAgICAvLyAgICAgICAgICAgbWVtYmVyLFxyXG4gICAgICAgIC8vICAgICAgICAgICBbT3JpZ0xvYWRVQywgT3JpZ0xvYWRVQ10sXHJcbiAgICAgICAgLy8gICAgICAgICAgIFtkaXNdLFxyXG4gICAgICAgIC8vICAgICAgICAgICBtaW5NYWduaXR1ZGVcclxuICAgICAgICAvLyAgICAgICAgICk7XHJcbiAgICAgICAgLy8gICAgICAgfVxyXG4gICAgICAgIC8vICAgICAgIGxldCBwYXJlbnRSTyA9IHRoaXMucHJvY2Vzcy5jYWVSZW5kZXJPYmplY3RUcmVlTWFuYWdlci50ZW1wTm9kZTtcclxuXHJcbiAgICAgICAgLy8gICAgICAgbWVtYmVyLnZpc2libGUgPSBmYWxzZTtcclxuICAgICAgICAvLyAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHJlc3VsdE1lbWJlcnMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAvLyAgICAgICAgIHRoaXMudmlld2VyLnByb2Nlc3MuYWRkUmVuZGVyT2JqZWN0KHBhcmVudFJPLCByZXN1bHRNZW1iZXJzW2pdKTtcclxuICAgICAgICAvLyAgICAgICAgIHJlc3VsdE1lbWJlcnNbal0uc2V0TmVlZFVwZGF0ZSgpO1xyXG4gICAgICAgIC8vICAgICAgICAgdGhpcy5jbG91ZE1lbWJlcnMucHVzaChyZXN1bHRNZW1iZXJzW2pdKTtcclxuICAgICAgICAvLyAgICAgICB9XHJcblxyXG4gICAgICAgIC8vICAgICAgIHRoaXMubWVtYmVycy5wdXNoKG1lbWJlcik7XHJcbiAgICAgICAgLy8gICAgIH1cclxuICAgICAgICAvLyAgIH1cclxuICAgICAgICAvLyB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zb2xlLmxvZyhcImpvaW50Q2FuVUM6XCIsIGpvaW50Q2FuVUMpO1xyXG5cclxuICAgIHRoaXMudmlld2VyLnNlbGVjdGlvbk1hbmFnZXIuY2xlYXJBbGxTZWxlY3Rpb25BbmRIaWdobGlnaHQoKTtcclxuICAgIHRoaXMudmlld2VyLnVwZGF0ZURpc3BsYXkoKTtcclxuICAgIHRoaXMuY2FlT2JqZWN0U2VsZWN0b3Iuc2VsZWN0ZWRSZW5kZXJPYmplY3RzLmNsZWFyKCk7XHJcbiAgICB0aGlzLnVwZGF0ZVBhbmVsKCk7XHJcblxyXG4gICAgaWYgKGRhdGEuZGlzcGxheUN1dGxpbmUudmFsdWUgJiYgZGF0YS5jb2xvckNvZGUudmFsdWUpIHtcclxuICAgICAgdGhpcy5yZWZyZXNoQ3V0bGluZSgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gc3RvcmUuY29tbWl0KFwic2V0TGVnZW5kXCIsIHt9KTtcclxuICAgICAgTGVnZW5kTWFuYWdlLmRlc3RvcnkodGhpcy5lbGVtZW50S2V5KTtcclxuICAgIH1cclxuICAgIHBvc3RJbnRlcmZhY2VNYW5hZ2VyLmFjdGl2ZV9qb2ludENhblVDID0gdHJ1ZTtcclxuXHJcbiAgICBkYXRhLnRpcC52YWx1ZSA9IDE7XHJcblxyXG4gICAgLy8g5pu05paw5bem5L6n57uT5p6E5qCRXHJcbiAgICBzdG9yZS5jb21taXQoXCJzdHJ1Y3R1cmVUcmVlL3VwZGF0ZVRyZWVEYXRhXCIsIFtcclxuICAgICAgdGhpcy52aWV3ZXIuc3RydWN0dXJlVHJlZU1hbmFnZXIucm9vdE5vZGUsXHJcbiAgICBdKTtcclxuICB9XHJcblxyXG4gIHJlc2V0U2NlbmUoKSB7XHJcbiAgICB0aGlzLmNsZWFyU3ZnKCk7XHJcbiAgICB0aGlzLmRlbGV0ZUpvaW50Q2FuVUNSTygpO1xyXG4gICAgTGVnZW5kTWFuYWdlLmRlc3RvcnkodGhpcy5lbGVtZW50S2V5KTtcclxuICAgIGxldCBwb3N0SW50ZXJmYWNlTWFuYWdlciA9IHRoaXMudmlld2VyLnBvc3RJbnRlcmZhY2VNYW5hZ2VyO1xyXG4gICAgcG9zdEludGVyZmFjZU1hbmFnZXIuYWN0aXZlX2Rpc3RvcnRpb24gPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVBhbmVsKCkge1xyXG4gICAgLy8gaWYgKFxyXG4gICAgLy8gICB0aGlzLnZpZXdlci5zZWxlY3Rpb25JbnRlcmZhY2VNYW5hZ2VyLnNlbGVjdG9yRmlsdGVyID09PVxyXG4gICAgLy8gICBTZWxlY3RvckZpbGl0ZXIuTWVtYmVyXHJcbiAgICAvLyApIHtcclxuICAgIC8vICAgLy8g5pu05paw6Z2i5p2/55qE6YCJ5Lit54K55YiX6KGoLlxyXG4gICAgLy8gICB0aGlzLmNvbmZpZy5wcm9wZXJ0aWVzLml0ZW1zWzBdLmRhdGEuc2VsZWN0ZWRNZW1iZXJzLmxpc3RPcHRpb25zLmxpc3QgPVxyXG4gICAgLy8gICAgIFtdO1xyXG4gICAgLy8gICBsZXQgb2JqZWN0cyA9IHRoaXMuY2FlT2JqZWN0U2VsZWN0b3Iuc2VsZWN0ZWRSZW5kZXJPYmplY3RzO1xyXG4gICAgLy8gICBmb3IgKGxldCBpID0gMDsgaSA8IG9iamVjdHMuY291bnQoKTsgaSsrKSB7XHJcbiAgICAvLyAgICAgbGV0IG9iamVjdCA9IG9iamVjdHMuaXRlbXNbaV07XHJcbiAgICAvLyAgICAgdGhpcy5jb25maWcucHJvcGVydGllcy5pdGVtc1swXS5kYXRhLnNlbGVjdGVkTWVtYmVycy5saXN0T3B0aW9ucy5saXN0LnB1c2goXHJcbiAgICAvLyAgICAgICB7XHJcbiAgICAvLyAgICAgICAgIHZhbHVlOiBvYmplY3QuaWQsXHJcbiAgICAvLyAgICAgICAgIGxhYmVsOiBvYmplY3QubmFtZSxcclxuICAgIC8vICAgICAgIH1cclxuICAgIC8vICAgICApO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuICByZWZyZXNoQ3V0bGluZSgpIHtcclxuICAgIC8vXHJcbiAgICBsZXQgY29tcG9uZW50ID0gTGVnZW5kTWFuYWdlLmNyZWF0ZShcclxuICAgICAgdGhpcy5lbGVtZW50S2V5LFxyXG4gICAgICB0aGlzLmN1dGxpbmVPYmplY3QuZ2VDdXRsaW5lKCksXHJcbiAgICAgIFwi6IqC54K55Yay5YiHXCIsXHJcbiAgICAgIFwi6aKc6ImyXCIsXHJcbiAgICAgIFwi5Yay5YiH5YC8XCJcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBkZWxldGVKb2ludENhblVDUk8oKSB7XHJcbiAgICAvLyBsZXQgYWZ0ZXJ0cmVhdG1lbnRSTyA9XHJcbiAgICAvLyAgIHRoaXMudmlld2VyLnByb2Nlc3MuZmluZFJlbmRlck9iamVjdEJ5TmFtZShcIuWQjuWkhOeQhuiuoeeul+e7k+aenFwiKTtcclxuICAgIC8vIGxldCBzaG93Sm9pbnRDYW5VQ1JPID1cclxuICAgIC8vICAgdGhpcy52aWV3ZXIucHJvY2Vzcy5maW5kQ2FlT2JqZWN0QnlOYW1lSW5DaGlsZE9iamVjdChcclxuICAgIC8vICAgICBhZnRlcnRyZWF0bWVudFJPLFxyXG4gICAgLy8gICAgIFwi566h6IqC54K55Yay5YiH5bqU5Yqb5q+U5Zyo5L2N5pi+56S6XCJcclxuICAgIC8vICAgKTtcclxuICAgIC8vIGlmIChzaG93Sm9pbnRDYW5VQ1JPKSB7XHJcbiAgICAvLyAgIHNob3dKb2ludENhblVDUk8uY2hpbGRPYmplY3RzLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgIC8vICAgICBpdGVtLmRlbGV0ZSgpO1xyXG4gICAgLy8gICB9KTtcclxuXHJcbiAgICAvLyAgIHNob3dKb2ludENhblVDUk8uZGVsZXRlKCk7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm1lbWJlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgdGhpcy5tZW1iZXJzW2ldLnZpc2libGUgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jbG91ZE1lbWJlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgdGhpcy52aWV3ZXIucHJvY2Vzcy5yZW1vdmVSZW5kZXJPYmplY3QodGhpcy5jbG91ZE1lbWJlcnNbaV0pO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBhZnRlcnRyZWF0bWVudFJPID0gdGhpcy52aWV3ZXIucHJvY2Vzcy5maW5kUmVuZGVyT2JqZWN0QnlOYW1lKFxyXG4gICAgICBcIuWQjuWkhOeQhuiuoeeul+e7k+aenFwiXHJcbiAgICApIGFzIERlc2lnbkJhc2VPYmplY3Q7XHJcbiAgICBsZXQgc2hvd0pvaW50Q2FuVUNSTyA9IHRoaXMudmlld2VyLnByb2Nlc3MuZmluZENhZU9iamVjdEJ5TmFtZUluQ2hpbGRPYmplY3QoXHJcbiAgICAgIGFmdGVydHJlYXRtZW50Uk8sXHJcbiAgICAgIFwi566h6IqC54K55Yay5YiH5bqU5Yqb5q+U5Zyo5L2N5pi+56S6XCJcclxuICAgICk7XHJcbiAgICBpZiAoc2hvd0pvaW50Q2FuVUNSTykge1xyXG4gICAgICBzaG93Sm9pbnRDYW5VQ1JPLmNoaWxkT2JqZWN0cy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICAgaXRlbS5kZWxldGUoKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBzaG93Sm9pbnRDYW5VQ1JPLmRlbGV0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudmlld2VyLnVwZGF0ZURpc3BsYXkoKTtcclxuICB9XHJcbn1cclxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQXVCQTtBQUFBO0FBK0JBO0FBQUE7QUE5QkE7QUFNQTtBQUNBO0FBRUE7QUFLQTtBQUlBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7QUFJQTtBQUVBO0FBQUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBR0E7QUFDQTs7QUFPQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBRUE7QUFDQTtBQUdBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUlBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBS0E7QUFJQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFNQTtBQUNBO0FBQ0E7QUFLQTs7QUFHQTtBQUNBO0FBQ0E7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUFBO0FBSUE7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBRUE7O0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7QUFDQTtBQUVBOztBQUNBO0FBQUE7QUFDQTs7Ozs7Ozs7Ozs7OztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7O0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTs7Ozs7Ozs7Ozs7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUdBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBR0E7QUFLQTtBQUVBO0FBQ0E7QUFFQTtBQUtBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUtBOztBQUNBO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7OztBQUdBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFRQTtBQVVBO0FBR0E7QUFDQTtBQUNBO0FBR0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUlBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBSUE7QUFDQTtBQUVBO0FBUUE7QUFDQTtBQUNBOztBQUVBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQTtBQUNBO0FBSUE7QUFDQTtBQUVBO0FBUUE7QUFDQTtBQUNBOztBQUVBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7OztBQUlBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFJQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7Ozs7QUFvSUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBOztBQUVBO0FBRUE7QUFHQTtBQUdBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQXFCQTtBQUVBO0FBT0E7QUFFQTtBQWdCQTtBQUNBOztBQUdBO0FBQ0E7O0FBR0E7QUFHQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7O0FBR0E7QUFDQTtBQUNBO0FBQUE7OztBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./packages/caeDesign/src/viewerWrapper/commands/aftertreatment/showJointCanUC/commandShowJointCanUC.ts\n");
|
|
5888
5888
|
|
|
5889
5889
|
/***/ }),
|
|
5890
5890
|
|
|
@@ -6786,7 +6786,7 @@ eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPAC
|
|
|
6786
6786
|
/*! no static exports found */
|
|
6787
6787
|
/***/ (function(module, exports, __webpack_require__) {
|
|
6788
6788
|
|
|
6789
|
-
eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__, exports, __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\"), __webpack_require__(/*! ../../../gsDevFx/operators/cameraMouse */ \"./packages/caeDesign/src/gsDevFx/operators/cameraMouse.ts\"), __webpack_require__(/*! ../commandComponent */ \"./packages/caeDesign/src/viewerWrapper/commands/commandComponent.ts\"), __webpack_require__(/*! ../../../store */ \"./packages/caeDesign/src/store/index.ts\"), __webpack_require__(/*! ../../../gsDevFx/operators/cAEObjectPreSelector */ \"./packages/caeDesign/src/gsDevFx/operators/cAEObjectPreSelector.ts\"), __webpack_require__(/*! ../../../gsDevFx/commands/commandSelect */ \"./packages/caeDesign/src/gsDevFx/commands/commandSelect.ts\"), __webpack_require__(/*! ../../../gsDevFx/operators/caeObjectSelector */ \"./packages/caeDesign/src/gsDevFx/operators/caeObjectSelector.ts\"), __webpack_require__(/*! ../../../gsDevFx/objects/caeObjects/jointObject */ \"./packages/caeDesign/src/gsDevFx/objects/caeObjects/jointObject.ts\"), __webpack_require__(/*! ./moveJointByMirrorConfig */ \"./packages/caeDesign/src/viewerWrapper/commands/moveJointByMirror/moveJointByMirrorConfig.ts\"), __webpack_require__(/*! gs-ceec-design */ \"./packages/ceecDesign/src/index.ts\"), __webpack_require__(/*! ../../../gsDevFx/managers/interfaceManagers/selectionInterfaceManager */ \"./packages/caeDesign/src/gsDevFx/managers/interfaceManagers/selectionInterfaceManager.ts\"), __webpack_require__(/*! gs-bim-air */ \"./node_modules/gs-bim-air/lib/BimAir.umd.min.js\")], __WEBPACK_AMD_DEFINE_RESULT__ = (function (require, exports, tslib_1, cameraMouse_1, commandComponent_1, store_1, cAEObjectPreSelector_1, commandSelect_1, caeObjectSelector_1, jointObject_1, moveJointByMirrorConfig_1, gs_ceec_design_1, selectionInterfaceManager_1, gs_bim_air_1) {\n \"use strict\";\n\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n store_1 = tslib_1.__importDefault(store_1);\n moveJointByMirrorConfig_1 = tslib_1.__importDefault(moveJointByMirrorConfig_1);\n var FocusOption;\n (function (FocusOption) {\n FocusOption[\"selectedPoints\"] = \"selectedPoints\";\n FocusOption[\"jointA\"] = \"jointA\";\n FocusOption[\"jointB\"] = \"jointB\";\n FocusOption[\"jointC\"] = \"jointC\";\n })(FocusOption || (FocusOption = {}));\n var CommandMoveJointByMirror = function (_super) {\n tslib_1.__extends(CommandMoveJointByMirror, _super);\n function CommandMoveJointByMirror() {\n var _this = _super.call(this) || this;\n _this.typeName = \"CommandMoveJointByMirror\";\n _this.preSelector = null;\n _this.caeObjectSelector = null;\n _this.mirrorSelector = null;\n _this.currentFocus = FocusOption.selectedPoints;\n return _this;\n }\n CommandMoveJointByMirror.prototype.begin = function () {\n var _this = this;\n this.changeOperators();\n this.config = new moveJointByMirrorConfig_1.default();\n var data = this.config.properties.items[0].data;\n data.selectedPoints.focus = function () {\n _this.selectedPointsActive();\n };\n data.jointA.focus = function () {\n _this.jointAActive();\n };\n data.jointB.focus = function () {\n _this.jointBActive();\n };\n data.jointC.focus = function () {\n _this.jointCActive();\n };\n this.config.show();\n };\n CommandMoveJointByMirror.prototype.selectedPointsActive = function () {\n this.currentFocus = FocusOption.selectedPoints;\n };\n CommandMoveJointByMirror.prototype.jointAActive = function () {\n this.currentFocus = FocusOption.jointA;\n };\n CommandMoveJointByMirror.prototype.jointBActive = function () {\n this.currentFocus = FocusOption.jointB;\n };\n CommandMoveJointByMirror.prototype.jointCActive = function () {\n this.currentFocus = FocusOption.jointC;\n };\n CommandMoveJointByMirror.prototype.restore = function () {\n this.changeOperators();\n this.config.show();\n };\n CommandMoveJointByMirror.prototype.changeOperators = function () {\n var _this = this;\n this.viewer.selectionManager.clearAllSelectionAndHighlight();\n this.viewer.updateDisplay();\n this.viewer.operatorManager.clear();\n this.viewer.operatorManager.add(new cameraMouse_1.CameraMouse());\n this.preSelector = new cAEObjectPreSelector_1.CAEObjectPreSelector();\n this.viewer.operatorManager.add(this.preSelector);\n this.viewer.selectionInterfaceManager.selectorFilter = selectionInterfaceManager_1.SelectorFiliter.Joint;\n this.caeObjectSelector = new caeObjectSelector_1.CAEObjectSelector();\n this.viewer.operatorManager.add(this.caeObjectSelector);\n this.mirrorSelector = new caeObjectSelector_1.CAEObjectSelector();\n this.viewer.operatorManager.add(this.mirrorSelector);\n this.caeObjectSelector.lButtonUp.add(function () {\n setTimeout(function () {\n _this.updatePanel();\n }, 0);\n });\n };\n CommandMoveJointByMirror.prototype.end = function () {\n this.config.hide();\n _super.prototype.end.call(this);\n this.viewer.selectionManager.clearAllSelectionAndHighlight();\n this.viewer.updateDisplay();\n var commandSelect = new commandSelect_1.CommandSelect();\n this.process.commandManager.execute(commandSelect);\n };\n CommandMoveJointByMirror.prototype.commandOk = function () {\n var _this = this;\n var optionData = this.config.properties.items[0].data;\n var selectedPoints = optionData.selectedPoints;\n var selectedObjects = new gs_bim_air_1.Longan.List();\n for (var i = 0; i < selectedPoints.listOptions.list.length; i++) {\n var objectId = selectedPoints.listOptions.list[i].value;\n var object = this.process.findRenderObjectById(objectId);\n if (object) {\n selectedObjects.add(object);\n }\n }\n if (selectedObjects.count() === 0) {\n optionData.tip.value = 1;\n return;\n }\n var effectObj = new Array();\n var oldState = new Array();\n var newState = new Array();\n var p0 = null;\n var p1 = null;\n var p2 = null;\n if (optionData.transformOption.value === \"1\") {\n var p0Name = optionData.jointA.value;\n var p1Name = optionData.jointB.value;\n var p2Name = optionData.jointC.value;\n var jointA = this.process.findCaeObjectByNameInChildObject(this.process.caeRenderObjectTreeManager.jointNode, p0Name);\n var jointB = this.process.findCaeObjectByNameInChildObject(this.process.caeRenderObjectTreeManager.jointNode, p1Name);\n var jointC = this.process.findCaeObjectByNameInChildObject(this.process.caeRenderObjectTreeManager.jointNode, p2Name);\n if (!jointA) {\n optionData.tip.value = 2 + \",\" + p0Name;\n return;\n }\n if (!jointB) {\n optionData.tip.value = 2 + \",\" + p1Name;\n return;\n }\n if (!jointB) {\n optionData.tip.value = 2 + \",\" + p2Name;\n return;\n }\n if (jointA instanceof jointObject_1.JointObject) {\n p0 = new Float32Array(jointA.position);\n }\n if (jointB instanceof jointObject_1.JointObject) {\n p1 = new Float32Array(jointB.position);\n }\n if (jointC instanceof jointObject_1.JointObject) {\n p2 = new Float32Array(jointC.position);\n }\n } else {\n var p0Data = this.config.properties.items[1].data;\n p0 = new Float32Array([p0Data.x.value, p0Data.y.value, p0Data.z.value]);\n var p1Data = this.config.properties.items[2].data;\n p1 = new Float32Array([p1Data.x.value, p1Data.y.value, p1Data.z.value]);\n var p2Data = this.config.properties.items[3].data;\n p2 = new Float32Array([p2Data.x.value, p2Data.y.value, p2Data.z.value]);\n }\n if (this.checkPlateIsIllegal(p0, p1, p2)) {\n console.log(\"Mirror illegal\");\n optionData.tip.value = 4;\n return;\n }\n var cloneMemberArray = new Array();\n var clonePlateArray = new Array();\n for (var i = 0; i < selectedObjects.items.length; i++) {\n var joint = selectedObjects.items[i];\n if (optionData.copyJointOption.value === \"1\") {\n oldState = null;\n var cloneJoint = null;\n if (optionData.copyReleatesOption.value === \"1\") {\n var clones = joint.cloneWithReleate(this.viewer);\n cloneJoint = clones.cloneJointArray[0];\n clones.cloneMemberArray.forEach(function (item) {\n cloneMemberArray.push(item);\n });\n clones.clonePlateArray.forEach(function (item) {\n clonePlateArray.push(item);\n });\n }\n if (!cloneJoint) {\n cloneJoint = this.viewer.process.cloneManager.cloneObject(joint);\n }\n cloneJoint.businessState = gs_ceec_design_1.BusinessState.Creating;\n var nameList = this.process.caeRenderObjectTreeManager.nameAscendingOrder(joint.name, 1);\n cloneJoint.name = nameList[0];\n this.setJointPoisitionByMirror(cloneJoint, p0, p1, p2);\n effectObj.push(cloneJoint);\n this.process.addRenderObject(this.process.caeRenderObjectTreeManager.jointNode, cloneJoint);\n cloneJoint.setNeedUpdate();\n this.viewer.updateDisplay();\n } else {\n effectObj.push(joint);\n oldState.push(joint.backUp());\n joint.businessState = gs_ceec_design_1.BusinessState.Editing;\n this.setJointPoisitionByMirror(joint, p0, p1, p2);\n newState.push(joint.backUp());\n joint.setNeedUpdate();\n }\n }\n for (var i = 0; i < cloneMemberArray.length; i++) {\n effectObj.push(cloneMemberArray[i]);\n this.process.addRenderObject(this.process.caeRenderObjectTreeManager.memberNode, cloneMemberArray[i]);\n cloneMemberArray[i].setNeedUpdate();\n }\n for (var i = 0; i < clonePlateArray.length; i++) {\n effectObj.push(clonePlateArray[i]);\n this.process.addRenderObject(this.process.caeRenderObjectTreeManager.plateNode, clonePlateArray[i]);\n clonePlateArray[i].setNeedUpdate();\n }\n var data = this.config.properties.items[0].data;\n var copyJointOption = data.copyJointOption.value;\n this.viewer.addState(oldState, newState, function (stateItem) {\n if (copyJointOption === \"1\") {\n if (stateItem.newObj) {\n for (var i = 0; i < effectObj.length; i++) {\n effectObj[i].tempCreate(_this.viewer);\n }\n } else {\n for (var i = 0; i < effectObj.length; i++) {\n effectObj[i].tempDelete(_this.viewer);\n }\n }\n } else {\n for (var i = 0; i < effectObj.length; i++) {\n var obj = effectObj[i];\n if (obj instanceof jointObject_1.JointObject) {\n obj.xOnMeter = stateItem.newObj[i].xOnMeter;\n obj.yOnMeter = stateItem.newObj[i].yOnMeter;\n obj.zOnMeter = stateItem.newObj[i].zOnMeter;\n obj.xOnCentimeter = stateItem.newObj[i].xOnCentimeter;\n obj.yOnCentimeter = stateItem.newObj[i].yOnCentimeter;\n obj.zOnCentimeter = stateItem.newObj[i].zOnCentimeter;\n effectObj[i].setNeedUpdate();\n }\n }\n }\n _this.viewer.updateDisplay();\n }, \"通过镜像移动点\");\n this.viewer.selectionManager.clearAllSelectionAndHighlight();\n this.caeObjectSelector.selectedRenderObjects.clear();\n this.mirrorSelector.selectedRenderObjects.clear();\n this.updatePanel();\n this.viewer.updateDisplay();\n this.viewer.viewInterfaceManager.resetJointView();\n optionData.tip.value = 3;\n store_1.default.commit(\"structureTree/updateTreeData\", [this.viewer.structureTreeManager.rootNode]);\n };\n CommandMoveJointByMirror.prototype.checkPlateIsIllegal = function (p0, p1, p2) {\n var axis1 = gs_bim_air_1.Longan.Point.subtract(p1, p0);\n gs_bim_air_1.Longan.Vector.normalize(axis1);\n var axis2 = gs_bim_air_1.Longan.Point.subtract(p2, p0);\n gs_bim_air_1.Longan.Vector.normalize(axis2);\n return gs_bim_air_1.Longan.GeometryOperators.isParallel(axis1, axis2);\n };\n CommandMoveJointByMirror.prototype.setJointPoisitionByMirror = function (joint, p0, p1, p2) {\n var axis1 = gs_bim_air_1.Longan.Point.subtract(p1, p0);\n gs_bim_air_1.Longan.Vector.normalize(axis1);\n var axis2 = gs_bim_air_1.Longan.Point.subtract(p2, p0);\n gs_bim_air_1.Longan.Vector.normalize(axis2);\n var normal = gs_bim_air_1.Longan.Vector.cross(axis1, axis2);\n gs_bim_air_1.Longan.Vector.normalize(normal);\n var position = new Float32Array(joint.position);\n var projectPoint = gs_bim_air_1.Longan.GeometryOperators.projectPointToPlane(position, p0, normal);\n var vector = gs_bim_air_1.Longan.Point.subtract(projectPoint, position);\n var newPosition = gs_bim_air_1.Longan.Point.add(projectPoint, vector);\n joint.xOnMeter = newPosition[0];\n joint.yOnMeter = newPosition[1];\n joint.zOnMeter = newPosition[2];\n joint.xOnCentimeter = 0;\n joint.yOnCentimeter = 0;\n joint.zOnCentimeter = 0;\n };\n CommandMoveJointByMirror.prototype.updatePanel = function () {\n var data = this.config.properties.items[0].data;\n if (this.viewer.selectionInterfaceManager.selectorFilter === selectionInterfaceManager_1.SelectorFiliter.Joint) {\n var objects = this.caeObjectSelector.selectedRenderObjects;\n if (this.currentFocus == FocusOption.selectedPoints) {\n data.selectedPoints.listOptions.list = [];\n for (var i = 0; i < objects.count(); i++) {\n var object = objects.items[i];\n this.config.properties.items[0].data.selectedPoints.listOptions.list.push({\n value: object.id,\n label: object.name\n });\n }\n } else if (objects.count() > 0 && !this.caeObjectSelector.isMultiSelect) {\n var object = objects.items[0];\n this.config.properties.items[0].data[this.currentFocus].value = object.name;\n }\n }\n };\n CommandMoveJointByMirror.prototype.updateMirrorPanel = function () {\n var data = this.config.properties.items[0].data;\n var objects = this.mirrorSelector.selectedRenderObjects;\n if (objects && objects.count() > 0) {\n if (!data.jointA.value) {\n data.jointA.value = objects.items[0].name;\n } else if (!data.jointB.value) {\n data.jointB.value = objects.items[0].name;\n } else if (!data.jointC.value) {\n data.jointC.value = objects.items[0].name;\n }\n }\n };\n return CommandMoveJointByMirror;\n }(commandComponent_1.CommandComponent);\n exports.default = CommandMoveJointByMirror;\n}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9wYWNrYWdlcy9jYWVEZXNpZ24vc3JjL3ZpZXdlcldyYXBwZXIvY29tbWFuZHMvbW92ZUpvaW50QnlNaXJyb3IvY29tbWFuZE1vdmVKb2ludEJ5TWlycm9yLnRzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vW25hbWVdLy4vcGFja2FnZXMvY2FlRGVzaWduL3NyYy92aWV3ZXJXcmFwcGVyL2NvbW1hbmRzL21vdmVKb2ludEJ5TWlycm9yL2NvbW1hbmRNb3ZlSm9pbnRCeU1pcnJvci50cz81YzczIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENhbWVyYU1vdXNlIH0gZnJvbSBcIi4uLy4uLy4uL2dzRGV2Rngvb3BlcmF0b3JzL2NhbWVyYU1vdXNlXCI7XG5pbXBvcnQgeyBDb21tYW5kQ29tcG9uZW50IH0gZnJvbSBcIi4uL2NvbW1hbmRDb21wb25lbnRcIjtcbmltcG9ydCBzdG9yZSBmcm9tIFwiLi4vLi4vLi4vc3RvcmVcIjtcbmltcG9ydCB7IENBRU9iamVjdFByZVNlbGVjdG9yIH0gZnJvbSBcIi4uLy4uLy4uL2dzRGV2Rngvb3BlcmF0b3JzL2NBRU9iamVjdFByZVNlbGVjdG9yXCI7XG5pbXBvcnQgeyBDb21tYW5kU2VsZWN0IH0gZnJvbSBcIi4uLy4uLy4uL2dzRGV2RngvY29tbWFuZHMvY29tbWFuZFNlbGVjdFwiO1xuaW1wb3J0IHsgQ0FFT2JqZWN0U2VsZWN0b3IgfSBmcm9tIFwiLi4vLi4vLi4vZ3NEZXZGeC9vcGVyYXRvcnMvY2FlT2JqZWN0U2VsZWN0b3JcIjtcbmltcG9ydCB7IEpvaW50T2JqZWN0IH0gZnJvbSBcIi4uLy4uLy4uL2dzRGV2Rngvb2JqZWN0cy9jYWVPYmplY3RzL2pvaW50T2JqZWN0XCI7XG5pbXBvcnQgeyBNZW1iZXJPYmplY3QgfSBmcm9tIFwiLi4vLi4vLi4vZ3NEZXZGeC9vYmplY3RzL2NhZU9iamVjdHMvbWVtYmVyT2JqZWN0XCI7XG5pbXBvcnQgeyBQbGF0ZU9iamVjdCB9IGZyb20gXCIuLi8uLi8uLi9nc0RldkZ4L29iamVjdHMvY2FlT2JqZWN0cy9wbGF0ZU9iamVjdFwiO1xuaW1wb3J0IE1vdmVKb2ludEJ5TWlycm9yQ29uZmlnIGZyb20gXCIuL21vdmVKb2ludEJ5TWlycm9yQ29uZmlnXCI7XG5pbXBvcnQge1xuICBCdXNpbmVzc1N0YXRlLFxuICBEZXNpZ25CYXNlT2JqZWN0LFxufSBmcm9tIFwiZ3MtY2VlYy1kZXNpZ25cIjtcbmltcG9ydCB7IFNlbGVjdG9yRmlsaXRlciB9IGZyb20gXCIuLi8uLi8uLi9nc0RldkZ4L21hbmFnZXJzL2ludGVyZmFjZU1hbmFnZXJzL3NlbGVjdGlvbkludGVyZmFjZU1hbmFnZXJcIjtcbmltcG9ydCB7IExvbmdhbiB9IGZyb20gXCJncy1iaW0tYWlyXCI7XG5lbnVtIEZvY3VzT3B0aW9uIHtcbiAgc2VsZWN0ZWRQb2ludHMgPSBcInNlbGVjdGVkUG9pbnRzXCIsXG4gIGpvaW50QSA9IFwiam9pbnRBXCIsXG4gIGpvaW50QiA9IFwiam9pbnRCXCIsXG4gIGpvaW50QyA9IFwiam9pbnRDXCIsXG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb21tYW5kTW92ZUpvaW50QnlNaXJyb3IgZXh0ZW5kcyBDb21tYW5kQ29tcG9uZW50IHtcbiAgdHlwZU5hbWU6IHN0cmluZyA9IFwiQ29tbWFuZE1vdmVKb2ludEJ5TWlycm9yXCI7XG5cbiAgcHJlU2VsZWN0b3I6IENBRU9iamVjdFByZVNlbGVjdG9yID0gbnVsbDtcbiAgY2FlT2JqZWN0U2VsZWN0b3I6IENBRU9iamVjdFNlbGVjdG9yID0gbnVsbDtcbiAgY29uZmlnOiBNb3ZlSm9pbnRCeU1pcnJvckNvbmZpZztcblxuICBtaXJyb3JTZWxlY3RvcjogQ0FFT2JqZWN0U2VsZWN0b3IgPSBudWxsO1xuICBjdXJyZW50Rm9jdXMgPSBGb2N1c09wdGlvbi5zZWxlY3RlZFBvaW50cztcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIC8vIHRoaXMuYmluZENvbXBvbmVudCA9ICgpID0+IGltcG9ydChcIi4uL3Byb3BlcnR5Q29tcG9uZW50LnZ1ZVwiKTtcbiAgfVxuXG4gIGJlZ2luKCk6IHZvaWQge1xuICAgIHRoaXMuY2hhbmdlT3BlcmF0b3JzKCk7XG5cbiAgICAvLyDlkb3ku6TmlbDmja4uXG4gICAgdGhpcy5jb25maWcgPSBuZXcgTW92ZUpvaW50QnlNaXJyb3JDb25maWcoKTtcbiAgICBsZXQgZGF0YSA9IHRoaXMuY29uZmlnLnByb3BlcnRpZXMuaXRlbXNbMF0uZGF0YTtcbiAgICBkYXRhLnNlbGVjdGVkUG9pbnRzLmZvY3VzID0gKCkgPT4ge1xuICAgICAgdGhpcy5zZWxlY3RlZFBvaW50c0FjdGl2ZSgpO1xuICAgIH07XG4gICAgZGF0YS5qb2ludEEuZm9jdXMgPSAoKSA9PiB7XG4gICAgICB0aGlzLmpvaW50QUFjdGl2ZSgpO1xuICAgIH07XG4gICAgZGF0YS5qb2ludEIuZm9jdXMgPSAoKSA9PiB7XG4gICAgICB0aGlzLmpvaW50QkFjdGl2ZSgpO1xuICAgIH07XG4gICAgZGF0YS5qb2ludEMuZm9jdXMgPSAoKSA9PiB7XG4gICAgICB0aGlzLmpvaW50Q0FjdGl2ZSgpO1xuICAgIH07XG4gICAgdGhpcy5jb25maWcuc2hvdygpO1xuICB9XG5cbiAgc2VsZWN0ZWRQb2ludHNBY3RpdmUoKSB7XG4gICAgdGhpcy5jdXJyZW50Rm9jdXMgPSBGb2N1c09wdGlvbi5zZWxlY3RlZFBvaW50cztcbiAgfVxuICBqb2ludEFBY3RpdmUoKSB7XG4gICAgdGhpcy5jdXJyZW50Rm9jdXMgPSBGb2N1c09wdGlvbi5qb2ludEE7XG4gIH1cbiAgam9pbnRCQWN0aXZlKCkge1xuICAgIHRoaXMuY3VycmVudEZvY3VzID0gRm9jdXNPcHRpb24uam9pbnRCO1xuICB9XG4gIGpvaW50Q0FjdGl2ZSgpIHtcbiAgICB0aGlzLmN1cnJlbnRGb2N1cyA9IEZvY3VzT3B0aW9uLmpvaW50QztcbiAgfVxuXG4gIHJlc3RvcmUoKTogdm9pZCB7XG4gICAgdGhpcy5jaGFuZ2VPcGVyYXRvcnMoKTtcbiAgICB0aGlzLmNvbmZpZy5zaG93KCk7XG4gIH1cblxuICBjaGFuZ2VPcGVyYXRvcnMoKTogdm9pZCB7XG4gICAgLy8g6L+b5YWl5ZG95Luk5YmN5riF56m66YCJ5Lit5LiO6auY5LquLlxuICAgIHRoaXMudmlld2VyLnNlbGVjdGlvbk1hbmFnZXIuY2xlYXJBbGxTZWxlY3Rpb25BbmRIaWdobGlnaHQoKTtcbiAgICB0aGlzLnZpZXdlci51cGRhdGVEaXNwbGF5KCk7XG5cbiAgICAvLyDmuIXnqbrmk43kvZzlmaguXG4gICAgdGhpcy52aWV3ZXIub3BlcmF0b3JNYW5hZ2VyLmNsZWFyKCk7XG4gICAgLy8g5re75Yqg5pON5L2c5ZmoXG4gICAgdGhpcy52aWV3ZXIub3BlcmF0b3JNYW5hZ2VyLmFkZChuZXcgQ2FtZXJhTW91c2UoKSk7XG5cbiAgICB0aGlzLnByZVNlbGVjdG9yID0gbmV3IENBRU9iamVjdFByZVNlbGVjdG9yKCk7XG4gICAgdGhpcy52aWV3ZXIub3BlcmF0b3JNYW5hZ2VyLmFkZCh0aGlzLnByZVNlbGVjdG9yKTtcbiAgICB0aGlzLnZpZXdlci5zZWxlY3Rpb25JbnRlcmZhY2VNYW5hZ2VyLnNlbGVjdG9yRmlsdGVyID1cbiAgICAgIFNlbGVjdG9yRmlsaXRlci5Kb2ludDtcblxuICAgIHRoaXMuY2FlT2JqZWN0U2VsZWN0b3IgPSBuZXcgQ0FFT2JqZWN0U2VsZWN0b3IoKTtcbiAgICB0aGlzLnZpZXdlci5vcGVyYXRvck1hbmFnZXIuYWRkKHRoaXMuY2FlT2JqZWN0U2VsZWN0b3IpO1xuICAgIC8vIOW8gOWQr+WkmumAiS5cbiAgICAvL3RoaXMuY2FlT2JqZWN0U2VsZWN0b3IuaXNNdWx0aVNlbGVjdCA9IHRydWU7XG5cbiAgICB0aGlzLm1pcnJvclNlbGVjdG9yID0gbmV3IENBRU9iamVjdFNlbGVjdG9yKCk7XG4gICAgdGhpcy52aWV3ZXIub3BlcmF0b3JNYW5hZ2VyLmFkZCh0aGlzLm1pcnJvclNlbGVjdG9yKTtcbiAgICAvLyB0aGlzLm1pcnJvclNlbGVjdG9yLmlzTXVsdGlTZWxlY3QgPSB0cnVlO1xuXG4gICAgLy8g57uZ6YCJ5oup5Zmo5re75Yqg6K+l5ZG95Luk5a6a5Yi255qE5LqL5Lu2LlxuICAgIHRoaXMuY2FlT2JqZWN0U2VsZWN0b3IubEJ1dHRvblVwLmFkZCgoKSA9PiB7XG4gICAgICAvLyDmm7TmlrDlkb3ku6TpnaLmnb8uXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVQYW5lbCgpO1xuICAgICAgfSwgMCk7XG4gICAgfSk7XG5cbiAgICAvLyB0aGlzLm1pcnJvclNlbGVjdG9yLmxCdXR0b25VcC5hZGQoKCkgPT4ge1xuICAgIC8vICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICAgIHRoaXMudXBkYXRlTWlycm9yUGFuZWwoKTtcbiAgICAvLyAgIH0sIDApO1xuICAgIC8vIH0pO1xuICB9XG5cbiAgZW5kKCk6IHZvaWQge1xuICAgIHRoaXMuY29uZmlnLmhpZGUoKTtcbiAgICBzdXBlci5lbmQoKTtcblxuICAgIHRoaXMudmlld2VyLnNlbGVjdGlvbk1hbmFnZXIuY2xlYXJBbGxTZWxlY3Rpb25BbmRIaWdobGlnaHQoKTtcbiAgICB0aGlzLnZpZXdlci51cGRhdGVEaXNwbGF5KCk7XG5cbiAgICBsZXQgY29tbWFuZFNlbGVjdCA9IG5ldyBDb21tYW5kU2VsZWN0KCk7XG4gICAgdGhpcy5wcm9jZXNzLmNvbW1hbmRNYW5hZ2VyLmV4ZWN1dGUoY29tbWFuZFNlbGVjdCk7XG4gIH1cblxuICBjb21tYW5kT2soKTogdm9pZCB7XG4gICAgbGV0IG9wdGlvbkRhdGEgPSB0aGlzLmNvbmZpZy5wcm9wZXJ0aWVzLml0ZW1zWzBdLmRhdGE7XG4gICAgbGV0IHNlbGVjdGVkUG9pbnRzID0gb3B0aW9uRGF0YS5zZWxlY3RlZFBvaW50cztcbiAgICBsZXQgc2VsZWN0ZWRPYmplY3RzID0gbmV3IExvbmdhbi5MaXN0PEpvaW50T2JqZWN0PigpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VsZWN0ZWRQb2ludHMubGlzdE9wdGlvbnMubGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IG9iamVjdElkID0gc2VsZWN0ZWRQb2ludHMubGlzdE9wdGlvbnMubGlzdFtpXS52YWx1ZTtcbiAgICAgIGxldCBvYmplY3QgPSB0aGlzLnByb2Nlc3MuZmluZFJlbmRlck9iamVjdEJ5SWQob2JqZWN0SWQpIGFzIEpvaW50T2JqZWN0O1xuICAgICAgaWYgKG9iamVjdCkge1xuICAgICAgICBzZWxlY3RlZE9iamVjdHMuYWRkKG9iamVjdCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzZWxlY3RlZE9iamVjdHMuY291bnQoKSA9PT0gMCkge1xuICAgICAgb3B0aW9uRGF0YS50aXAudmFsdWUgPSAxO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBlZmZlY3RPYmogPSBuZXcgQXJyYXk8RGVzaWduQmFzZU9iamVjdD4oKTtcbiAgICBsZXQgb2xkU3RhdGUgPSBuZXcgQXJyYXk8Sm9pbnRPYmplY3Q+KCk7XG4gICAgbGV0IG5ld1N0YXRlID0gbmV3IEFycmF5PEpvaW50T2JqZWN0PigpO1xuXG4gICAgLy8gVG9kbzrojrflj5bplZzlg4/mlbDmja4uXG5cbiAgICBsZXQgcDA6IEZsb2F0MzJBcnJheSA9IG51bGw7XG4gICAgbGV0IHAxOiBGbG9hdDMyQXJyYXkgPSBudWxsO1xuICAgIGxldCBwMjogRmxvYXQzMkFycmF5ID0gbnVsbDtcbiAgICBpZiAob3B0aW9uRGF0YS50cmFuc2Zvcm1PcHRpb24udmFsdWUgPT09IFwiMVwiKSB7XG4gICAgICBsZXQgcDBOYW1lID0gb3B0aW9uRGF0YS5qb2ludEEudmFsdWU7XG4gICAgICBsZXQgcDFOYW1lID0gb3B0aW9uRGF0YS5qb2ludEIudmFsdWU7XG4gICAgICBsZXQgcDJOYW1lID0gb3B0aW9uRGF0YS5qb2ludEMudmFsdWU7XG5cbiAgICAgIGxldCBqb2ludEEgPSB0aGlzLnByb2Nlc3MuZmluZENhZU9iamVjdEJ5TmFtZUluQ2hpbGRPYmplY3QoXG4gICAgICAgIHRoaXMucHJvY2Vzcy5jYWVSZW5kZXJPYmplY3RUcmVlTWFuYWdlci5qb2ludE5vZGUsXG4gICAgICAgIHAwTmFtZVxuICAgICAgKTtcblxuICAgICAgbGV0IGpvaW50QiA9IHRoaXMucHJvY2Vzcy5maW5kQ2FlT2JqZWN0QnlOYW1lSW5DaGlsZE9iamVjdChcbiAgICAgICAgdGhpcy5wcm9jZXNzLmNhZVJlbmRlck9iamVjdFRyZWVNYW5hZ2VyLmpvaW50Tm9kZSxcbiAgICAgICAgcDFOYW1lXG4gICAgICApO1xuXG4gICAgICBsZXQgam9pbnRDID0gdGhpcy5wcm9jZXNzLmZpbmRDYWVPYmplY3RCeU5hbWVJbkNoaWxkT2JqZWN0KFxuICAgICAgICB0aGlzLnByb2Nlc3MuY2FlUmVuZGVyT2JqZWN0VHJlZU1hbmFnZXIuam9pbnROb2RlLFxuICAgICAgICBwMk5hbWVcbiAgICAgICk7XG5cbiAgICAgIGlmICgham9pbnRBKSB7XG4gICAgICAgIG9wdGlvbkRhdGEudGlwLnZhbHVlID0gMiArIFwiLFwiICsgcDBOYW1lO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICgham9pbnRCKSB7XG4gICAgICAgIG9wdGlvbkRhdGEudGlwLnZhbHVlID0gMiArIFwiLFwiICsgcDFOYW1lO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICgham9pbnRCKSB7XG4gICAgICAgIG9wdGlvbkRhdGEudGlwLnZhbHVlID0gMiArIFwiLFwiICsgcDJOYW1lO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChqb2ludEEgaW5zdGFuY2VvZiBKb2ludE9iamVjdCkge1xuICAgICAgICBwMCA9IG5ldyBGbG9hdDMyQXJyYXkoam9pbnRBLnBvc2l0aW9uKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGpvaW50QiBpbnN0YW5jZW9mIEpvaW50T2JqZWN0KSB7XG4gICAgICAgIHAxID0gbmV3IEZsb2F0MzJBcnJheShqb2ludEIucG9zaXRpb24pO1xuICAgICAgfVxuXG4gICAgICBpZiAoam9pbnRDIGluc3RhbmNlb2YgSm9pbnRPYmplY3QpIHtcbiAgICAgICAgcDIgPSBuZXcgRmxvYXQzMkFycmF5KGpvaW50Qy5wb3NpdGlvbik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBwMERhdGEgPSB0aGlzLmNvbmZpZy5wcm9wZXJ0aWVzLml0ZW1zWzFdLmRhdGE7XG4gICAgICBwMCA9IG5ldyBGbG9hdDMyQXJyYXkoW3AwRGF0YS54LnZhbHVlLCBwMERhdGEueS52YWx1ZSwgcDBEYXRhLnoudmFsdWVdKTtcbiAgICAgIGxldCBwMURhdGEgPSB0aGlzLmNvbmZpZy5wcm9wZXJ0aWVzLml0ZW1zWzJdLmRhdGE7XG4gICAgICBwMSA9IG5ldyBGbG9hdDMyQXJyYXkoW3AxRGF0YS54LnZhbHVlLCBwMURhdGEueS52YWx1ZSwgcDFEYXRhLnoudmFsdWVdKTtcbiAgICAgIGxldCBwMkRhdGEgPSB0aGlzLmNvbmZpZy5wcm9wZXJ0aWVzLml0ZW1zWzNdLmRhdGE7XG4gICAgICBwMiA9IG5ldyBGbG9hdDMyQXJyYXkoW3AyRGF0YS54LnZhbHVlLCBwMkRhdGEueS52YWx1ZSwgcDJEYXRhLnoudmFsdWVdKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jaGVja1BsYXRlSXNJbGxlZ2FsKHAwLCBwMSwgcDIpKSB7XG4gICAgICAvLyDplZzpnaLkuI3lkIjms5UuXG4gICAgICBjb25zb2xlLmxvZyhcIk1pcnJvciBpbGxlZ2FsXCIpO1xuICAgICAgb3B0aW9uRGF0YS50aXAudmFsdWUgPSA0O1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIOWkjeWItuWQjueahOWFs+iBlOadhuS7tuWSjOadv+WFiOS4jeimgea3u+WKoOWIsOe7k+aehOagkeaYr++8jOmYsuatouS4iuS4gOS4quepuumXtOeCueWkjeWItueahOadhuS7tu+8jOW9seWTjeWIsOS4i+S4gOS4quepuumXtOeCueiuoeeul+ivpeepuumXtOeCueeahOWFs+iBlOadhuS7ti5cbiAgICBsZXQgY2xvbmVNZW1iZXJBcnJheSA9IG5ldyBBcnJheTxNZW1iZXJPYmplY3Q+KCk7XG4gICAgbGV0IGNsb25lUGxhdGVBcnJheSA9IG5ldyBBcnJheTxQbGF0ZU9iamVjdD4oKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VsZWN0ZWRPYmplY3RzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgam9pbnQgPSBzZWxlY3RlZE9iamVjdHMuaXRlbXNbaV0gYXMgSm9pbnRPYmplY3Q7XG5cbiAgICAgIC8vIOWmguaenOaYr+WkjeWItuepuumXtOeCuVxuICAgICAgaWYgKG9wdGlvbkRhdGEuY29weUpvaW50T3B0aW9uLnZhbHVlID09PSBcIjFcIikge1xuICAgICAgICBvbGRTdGF0ZSA9IG51bGw7XG5cbiAgICAgICAgbGV0IGNsb25lSm9pbnQgPSBudWxsO1xuICAgICAgICAvLyDkuJTlpI3liLblhbPogZTmnYbku7blkozmnb8uXG4gICAgICAgIGlmIChvcHRpb25EYXRhLmNvcHlSZWxlYXRlc09wdGlvbi52YWx1ZSA9PT0gXCIxXCIpIHtcbiAgICAgICAgICBsZXQgY2xvbmVzID0gam9pbnQuY2xvbmVXaXRoUmVsZWF0ZSh0aGlzLnZpZXdlcik7XG4gICAgICAgICAgY2xvbmVKb2ludCA9IGNsb25lcy5jbG9uZUpvaW50QXJyYXlbMF07XG4gICAgICAgICAgY2xvbmVzLmNsb25lTWVtYmVyQXJyYXkuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgY2xvbmVNZW1iZXJBcnJheS5wdXNoKGl0ZW0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNsb25lcy5jbG9uZVBsYXRlQXJyYXkuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgY2xvbmVQbGF0ZUFycmF5LnB1c2goaXRlbSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNsb25lSm9pbnQpIHtcbiAgICAgICAgICBjbG9uZUpvaW50ID0gdGhpcy52aWV3ZXIucHJvY2Vzcy5jbG9uZU1hbmFnZXIuY2xvbmVPYmplY3QoXG4gICAgICAgICAgICBqb2ludFxuICAgICAgICAgICkgYXMgSm9pbnRPYmplY3Q7XG4gICAgICAgIH1cblxuICAgICAgICBjbG9uZUpvaW50LmJ1c2luZXNzU3RhdGUgPSBCdXNpbmVzc1N0YXRlLkNyZWF0aW5nO1xuICAgICAgICBsZXQgbmFtZUxpc3QgPVxuICAgICAgICAgIHRoaXMucHJvY2Vzcy5jYWVSZW5kZXJPYmplY3RUcmVlTWFuYWdlci5uYW1lQXNjZW5kaW5nT3JkZXIoXG4gICAgICAgICAgICBqb2ludC5uYW1lLFxuICAgICAgICAgICAgMVxuICAgICAgICAgICk7XG4gICAgICAgIGNsb25lSm9pbnQubmFtZSA9IG5hbWVMaXN0WzBdO1xuXG4gICAgICAgIC8vIFRvZG866K6+572u56m66Ze054K55paw6ZWc5YOP5L2N572uLlxuICAgICAgICB0aGlzLnNldEpvaW50UG9pc2l0aW9uQnlNaXJyb3IoY2xvbmVKb2ludCwgcDAsIHAxLCBwMik7XG4gICAgICAgIGVmZmVjdE9iai5wdXNoKGNsb25lSm9pbnQpO1xuXG4gICAgICAgIHRoaXMucHJvY2Vzcy5hZGRSZW5kZXJPYmplY3QoXG4gICAgICAgICAgdGhpcy5wcm9jZXNzLmNhZVJlbmRlck9iamVjdFRyZWVNYW5hZ2VyLmpvaW50Tm9kZSxcbiAgICAgICAgICBjbG9uZUpvaW50XG4gICAgICAgICk7XG4gICAgICAgIGNsb25lSm9pbnQuc2V0TmVlZFVwZGF0ZSgpO1xuXG4gICAgICAgIHRoaXMudmlld2VyLnVwZGF0ZURpc3BsYXkoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRvZG866K6+572u56m66Ze054K55paw6ZWc5YOP5L2N572uLlxuICAgICAgICBlZmZlY3RPYmoucHVzaChqb2ludCk7XG4gICAgICAgIG9sZFN0YXRlLnB1c2goam9pbnQuYmFja1VwKCkpO1xuXG4gICAgICAgIGpvaW50LmJ1c2luZXNzU3RhdGUgPSBCdXNpbmVzc1N0YXRlLkVkaXRpbmc7XG4gICAgICAgIC8vIFRvZG866K6+572u56m66Ze054K55paw5peL6L2s5L2N572uLlxuICAgICAgICB0aGlzLnNldEpvaW50UG9pc2l0aW9uQnlNaXJyb3Ioam9pbnQsIHAwLCBwMSwgcDIpO1xuXG4gICAgICAgIG5ld1N0YXRlLnB1c2goam9pbnQuYmFja1VwKCkpO1xuXG4gICAgICAgIGpvaW50LnNldE5lZWRVcGRhdGUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNsb25lTWVtYmVyQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIGVmZmVjdE9iai5wdXNoKGNsb25lTWVtYmVyQXJyYXlbaV0pO1xuXG4gICAgICB0aGlzLnByb2Nlc3MuYWRkUmVuZGVyT2JqZWN0KFxuICAgICAgICB0aGlzLnByb2Nlc3MuY2FlUmVuZGVyT2JqZWN0VHJlZU1hbmFnZXIubWVtYmVyTm9kZSxcbiAgICAgICAgY2xvbmVNZW1iZXJBcnJheVtpXVxuICAgICAgKTtcblxuICAgICAgY2xvbmVNZW1iZXJBcnJheVtpXS5zZXROZWVkVXBkYXRlKCk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjbG9uZVBsYXRlQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIGVmZmVjdE9iai5wdXNoKGNsb25lUGxhdGVBcnJheVtpXSk7XG5cbiAgICAgIHRoaXMucHJvY2Vzcy5hZGRSZW5kZXJPYmplY3QoXG4gICAgICAgIHRoaXMucHJvY2Vzcy5jYWVSZW5kZXJPYmplY3RUcmVlTWFuYWdlci5wbGF0ZU5vZGUsXG4gICAgICAgIGNsb25lUGxhdGVBcnJheVtpXVxuICAgICAgKTtcblxuICAgICAgY2xvbmVQbGF0ZUFycmF5W2ldLnNldE5lZWRVcGRhdGUoKTtcbiAgICB9XG5cbiAgICBsZXQgZGF0YSA9IHRoaXMuY29uZmlnLnByb3BlcnRpZXMuaXRlbXNbMF0uZGF0YTtcbiAgICBsZXQgY29weUpvaW50T3B0aW9uID0gZGF0YS5jb3B5Sm9pbnRPcHRpb24udmFsdWU7XG4gICAgdGhpcy52aWV3ZXIuYWRkU3RhdGUoXG4gICAgICBvbGRTdGF0ZSxcbiAgICAgIG5ld1N0YXRlLFxuICAgICAgKHN0YXRlSXRlbSkgPT4ge1xuICAgICAgICAvL1xuICAgICAgICBpZiAoY29weUpvaW50T3B0aW9uID09PSBcIjFcIikge1xuICAgICAgICAgIC8vXG4gICAgICAgICAgaWYgKHN0YXRlSXRlbS5uZXdPYmopIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWZmZWN0T2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIGVmZmVjdE9ialtpXS50ZW1wQ3JlYXRlKHRoaXMudmlld2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gbnVsbCzmkqTplIDliJvlu7pcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWZmZWN0T2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIGVmZmVjdE9ialtpXS50ZW1wRGVsZXRlKHRoaXMudmlld2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlZmZlY3RPYmoubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBvYmogPSBlZmZlY3RPYmpbaV07XG4gICAgICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgSm9pbnRPYmplY3QpIHtcbiAgICAgICAgICAgICAgb2JqLnhPbk1ldGVyID0gc3RhdGVJdGVtLm5ld09ialtpXS54T25NZXRlcjtcbiAgICAgICAgICAgICAgb2JqLnlPbk1ldGVyID0gc3RhdGVJdGVtLm5ld09ialtpXS55T25NZXRlcjtcbiAgICAgICAgICAgICAgb2JqLnpPbk1ldGVyID0gc3RhdGVJdGVtLm5ld09ialtpXS56T25NZXRlcjtcblxuICAgICAgICAgICAgICBvYmoueE9uQ2VudGltZXRlciA9IHN0YXRlSXRlbS5uZXdPYmpbaV0ueE9uQ2VudGltZXRlcjtcbiAgICAgICAgICAgICAgb2JqLnlPbkNlbnRpbWV0ZXIgPSBzdGF0ZUl0ZW0ubmV3T2JqW2ldLnlPbkNlbnRpbWV0ZXI7XG4gICAgICAgICAgICAgIG9iai56T25DZW50aW1ldGVyID0gc3RhdGVJdGVtLm5ld09ialtpXS56T25DZW50aW1ldGVyO1xuXG4gICAgICAgICAgICAgIGVmZmVjdE9ialtpXS5zZXROZWVkVXBkYXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy52aWV3ZXIudXBkYXRlRGlzcGxheSgpO1xuICAgICAgfSxcbiAgICAgIFwi6YCa6L+H6ZWc5YOP56e75Yqo54K5XCJcbiAgICApO1xuXG4gICAgLy8g5riF56m66YCJ5oupLlxuICAgIHRoaXMudmlld2VyLnNlbGVjdGlvbk1hbmFnZXIuY2xlYXJBbGxTZWxlY3Rpb25BbmRIaWdobGlnaHQoKTtcbiAgICB0aGlzLmNhZU9iamVjdFNlbGVjdG9yLnNlbGVjdGVkUmVuZGVyT2JqZWN0cy5jbGVhcigpO1xuICAgIHRoaXMubWlycm9yU2VsZWN0b3Iuc2VsZWN0ZWRSZW5kZXJPYmplY3RzLmNsZWFyKCk7XG4gICAgdGhpcy51cGRhdGVQYW5lbCgpO1xuICAgIHRoaXMudmlld2VyLnVwZGF0ZURpc3BsYXkoKTtcbiAgICAvLyB0aGlzLnZpZXdlci52aWV3SW50ZXJmYWNlTWFuYWdlci5yZXNldFZpZXcoKTtcbiAgICB0aGlzLnZpZXdlci52aWV3SW50ZXJmYWNlTWFuYWdlci5yZXNldEpvaW50VmlldygpO1xuXG5cbiAgICBvcHRpb25EYXRhLnRpcC52YWx1ZSA9IDM7XG5cbiAgICAvLyDmm7TmlrDlt6bkvqfnu5PmnoTmoJFcbiAgICBzdG9yZS5jb21taXQoXCJzdHJ1Y3R1cmVUcmVlL3VwZGF0ZVRyZWVEYXRhXCIsIFtcbiAgICAgIHRoaXMudmlld2VyLnN0cnVjdHVyZVRyZWVNYW5hZ2VyLnJvb3ROb2RlLFxuICAgIF0pO1xuICB9XG5cbiAgY2hlY2tQbGF0ZUlzSWxsZWdhbChwMDogRmxvYXQzMkFycmF5LCBwMTogRmxvYXQzMkFycmF5LCBwMjogRmxvYXQzMkFycmF5KSB7XG4gICAgbGV0IGF4aXMxID0gTG9uZ2FuLlBvaW50LnN1YnRyYWN0KHAxLCBwMCk7XG4gICAgTG9uZ2FuLlZlY3Rvci5ub3JtYWxpemUoYXhpczEpO1xuICAgIGxldCBheGlzMiA9IExvbmdhbi5Qb2ludC5zdWJ0cmFjdChwMiwgcDApO1xuICAgIExvbmdhbi5WZWN0b3Iubm9ybWFsaXplKGF4aXMyKTtcblxuICAgIHJldHVybiBMb25nYW4uR2VvbWV0cnlPcGVyYXRvcnMuaXNQYXJhbGxlbChheGlzMSwgYXhpczIpO1xuICB9XG5cbiAgc2V0Sm9pbnRQb2lzaXRpb25CeU1pcnJvcihcbiAgICBqb2ludDogSm9pbnRPYmplY3QsXG4gICAgcDA6IEZsb2F0MzJBcnJheSxcbiAgICBwMTogRmxvYXQzMkFycmF5LFxuICAgIHAyOiBGbG9hdDMyQXJyYXlcbiAgKSB7XG4gICAgLy9cbiAgICBsZXQgYXhpczEgPSBMb25nYW4uUG9pbnQuc3VidHJhY3QocDEsIHAwKTtcbiAgICBMb25nYW4uVmVjdG9yLm5vcm1hbGl6ZShheGlzMSk7XG4gICAgbGV0IGF4aXMyID0gTG9uZ2FuLlBvaW50LnN1YnRyYWN0KHAyLCBwMCk7XG4gICAgTG9uZ2FuLlZlY3Rvci5ub3JtYWxpemUoYXhpczIpO1xuXG4gICAgbGV0IG5vcm1hbCA9IExvbmdhbi5WZWN0b3IuY3Jvc3MoYXhpczEsIGF4aXMyKTtcbiAgICBMb25nYW4uVmVjdG9yLm5vcm1hbGl6ZShub3JtYWwpO1xuXG4gICAgbGV0IHBvc2l0aW9uID0gbmV3IEZsb2F0MzJBcnJheShqb2ludC5wb3NpdGlvbik7XG4gICAgbGV0IHByb2plY3RQb2ludCA9IExvbmdhbi5HZW9tZXRyeU9wZXJhdG9ycy5wcm9qZWN0UG9pbnRUb1BsYW5lKFxuICAgICAgcG9zaXRpb24sXG4gICAgICBwMCxcbiAgICAgIG5vcm1hbFxuICAgICk7XG4gICAgbGV0IHZlY3RvciA9IExvbmdhbi5Qb2ludC5zdWJ0cmFjdChwcm9qZWN0UG9pbnQsIHBvc2l0aW9uKTtcbiAgICBsZXQgbmV3UG9zaXRpb24gPSBMb25nYW4uUG9pbnQuYWRkKHByb2plY3RQb2ludCwgdmVjdG9yKTtcblxuICAgIGpvaW50LnhPbk1ldGVyID0gbmV3UG9zaXRpb25bMF07XG4gICAgam9pbnQueU9uTWV0ZXIgPSBuZXdQb3NpdGlvblsxXTtcbiAgICBqb2ludC56T25NZXRlciA9IG5ld1Bvc2l0aW9uWzJdO1xuICAgIGpvaW50LnhPbkNlbnRpbWV0ZXIgPSAwO1xuICAgIGpvaW50LnlPbkNlbnRpbWV0ZXIgPSAwO1xuICAgIGpvaW50LnpPbkNlbnRpbWV0ZXIgPSAwO1xuICB9XG5cbiAgdXBkYXRlUGFuZWwoKSB7XG4gICAgbGV0IGRhdGEgPSB0aGlzLmNvbmZpZy5wcm9wZXJ0aWVzLml0ZW1zWzBdLmRhdGE7XG4gICAgaWYgKFxuICAgICAgdGhpcy52aWV3ZXIuc2VsZWN0aW9uSW50ZXJmYWNlTWFuYWdlci5zZWxlY3RvckZpbHRlciA9PT1cbiAgICAgIFNlbGVjdG9yRmlsaXRlci5Kb2ludFxuICAgICkge1xuICAgICAgbGV0IG9iamVjdHMgPSB0aGlzLmNhZU9iamVjdFNlbGVjdG9yLnNlbGVjdGVkUmVuZGVyT2JqZWN0cztcbiAgICAgIGlmICh0aGlzLmN1cnJlbnRGb2N1cyA9PSBGb2N1c09wdGlvbi5zZWxlY3RlZFBvaW50cykge1xuICAgICAgICAvLyDmm7TmlrDpnaLmnb/nmoTpgInkuK3ngrnliJfooaguXG4gICAgICAgIGRhdGEuc2VsZWN0ZWRQb2ludHMubGlzdE9wdGlvbnMubGlzdCA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9iamVjdHMuY291bnQoKTsgaSsrKSB7XG4gICAgICAgICAgbGV0IG9iamVjdCA9IG9iamVjdHMuaXRlbXNbaV07XG4gICAgICAgICAgdGhpcy5jb25maWcucHJvcGVydGllcy5pdGVtc1swXS5kYXRhLnNlbGVjdGVkUG9pbnRzLmxpc3RPcHRpb25zLmxpc3QucHVzaChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgdmFsdWU6IG9iamVjdC5pZCxcbiAgICAgICAgICAgICAgbGFiZWw6IG9iamVjdC5uYW1lLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAob2JqZWN0cy5jb3VudCgpID4gMCAmJiAhdGhpcy5jYWVPYmplY3RTZWxlY3Rvci5pc011bHRpU2VsZWN0KSB7XG4gICAgICAgIGxldCBvYmplY3QgPSBvYmplY3RzLml0ZW1zWzBdO1xuICAgICAgICB0aGlzLmNvbmZpZy5wcm9wZXJ0aWVzLml0ZW1zWzBdLmRhdGFbdGhpcy5jdXJyZW50Rm9jdXNdLnZhbHVlID1cbiAgICAgICAgICBvYmplY3QubmFtZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB1cGRhdGVNaXJyb3JQYW5lbCgpIHtcbiAgICBsZXQgZGF0YSA9IHRoaXMuY29uZmlnLnByb3BlcnRpZXMuaXRlbXNbMF0uZGF0YTtcbiAgICBsZXQgb2JqZWN0cyA9IHRoaXMubWlycm9yU2VsZWN0b3Iuc2VsZWN0ZWRSZW5kZXJPYmplY3RzO1xuXG4gICAgaWYgKG9iamVjdHMgJiYgb2JqZWN0cy5jb3VudCgpID4gMCkge1xuICAgICAgaWYgKCFkYXRhLmpvaW50QS52YWx1ZSkge1xuICAgICAgICBkYXRhLmpvaW50QS52YWx1ZSA9IG9iamVjdHMuaXRlbXNbMF0ubmFtZTtcbiAgICAgIH0gZWxzZSBpZiAoIWRhdGEuam9pbnRCLnZhbHVlKSB7XG4gICAgICAgIGRhdGEuam9pbnRCLnZhbHVlID0gb2JqZWN0cy5pdGVtc1swXS5uYW1lO1xuICAgICAgfSBlbHNlIGlmICghZGF0YS5qb2ludEMudmFsdWUpIHtcbiAgICAgICAgZGF0YS5qb2ludEMudmFsdWUgPSBvYmplY3RzLml0ZW1zWzBdLm5hbWU7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBZ0JBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQVVBO0FBQUE7QUFUQTtBQUVBO0FBQ0E7QUFHQTtBQUNBOztBQUtBO0FBRUE7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFFQTtBQUNBO0FBR0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFJQTtBQUNBO0FBSUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQU9BO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7O0FBR0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUtBO0FBS0E7QUFLQTtBQUNBO0FBQ0E7O0FBR0E7QUFDQTtBQUNBOztBQUdBO0FBQ0E7QUFDQTs7QUFHQTtBQUNBOztBQUdBO0FBQ0E7O0FBR0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQTtBQUVBO0FBQ0E7QUFDQTs7QUFJQTtBQUNBO0FBRUE7QUFDQTtBQUdBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQTtBQUNBOztBQUtBO0FBQ0E7QUFLQTtBQUdBO0FBQ0E7QUFFQTtBQUlBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBRUE7QUFFQTs7O0FBSUE7QUFDQTtBQUVBO0FBS0E7O0FBR0E7QUFDQTtBQUVBO0FBS0E7O0FBR0E7QUFDQTtBQUNBO0FBS0E7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFFQTtBQUNBOzs7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBOzs7O0FBS0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUdBO0FBR0E7QUFHQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBS0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBOztBQUdBO0FBQ0E7QUFDQTs7O0FBSUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUFBOzs7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./packages/caeDesign/src/viewerWrapper/commands/moveJointByMirror/commandMoveJointByMirror.ts\n");
|
|
6789
|
+
eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__, exports, __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\"), __webpack_require__(/*! ../../../gsDevFx/operators/cameraMouse */ \"./packages/caeDesign/src/gsDevFx/operators/cameraMouse.ts\"), __webpack_require__(/*! ../commandComponent */ \"./packages/caeDesign/src/viewerWrapper/commands/commandComponent.ts\"), __webpack_require__(/*! ../../../store */ \"./packages/caeDesign/src/store/index.ts\"), __webpack_require__(/*! ../../../gsDevFx/operators/cAEObjectPreSelector */ \"./packages/caeDesign/src/gsDevFx/operators/cAEObjectPreSelector.ts\"), __webpack_require__(/*! ../../../gsDevFx/commands/commandSelect */ \"./packages/caeDesign/src/gsDevFx/commands/commandSelect.ts\"), __webpack_require__(/*! ../../../gsDevFx/operators/caeObjectSelector */ \"./packages/caeDesign/src/gsDevFx/operators/caeObjectSelector.ts\"), __webpack_require__(/*! ../../../gsDevFx/objects/caeObjects/jointObject */ \"./packages/caeDesign/src/gsDevFx/objects/caeObjects/jointObject.ts\"), __webpack_require__(/*! ./moveJointByMirrorConfig */ \"./packages/caeDesign/src/viewerWrapper/commands/moveJointByMirror/moveJointByMirrorConfig.ts\"), __webpack_require__(/*! gs-ceec-design */ \"./packages/ceecDesign/src/index.ts\"), __webpack_require__(/*! ../../../gsDevFx/managers/interfaceManagers/selectionInterfaceManager */ \"./packages/caeDesign/src/gsDevFx/managers/interfaceManagers/selectionInterfaceManager.ts\"), __webpack_require__(/*! gs-bim-air */ \"./node_modules/gs-bim-air/lib/BimAir.umd.min.js\")], __WEBPACK_AMD_DEFINE_RESULT__ = (function (require, exports, tslib_1, cameraMouse_1, commandComponent_1, store_1, cAEObjectPreSelector_1, commandSelect_1, caeObjectSelector_1, jointObject_1, moveJointByMirrorConfig_1, gs_ceec_design_1, selectionInterfaceManager_1, gs_bim_air_1) {\n \"use strict\";\n\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n store_1 = tslib_1.__importDefault(store_1);\n moveJointByMirrorConfig_1 = tslib_1.__importDefault(moveJointByMirrorConfig_1);\n var FocusOption;\n (function (FocusOption) {\n FocusOption[\"selectedPoints\"] = \"selectedPoints\";\n FocusOption[\"jointA\"] = \"jointA\";\n FocusOption[\"jointB\"] = \"jointB\";\n FocusOption[\"jointC\"] = \"jointC\";\n })(FocusOption || (FocusOption = {}));\n var CommandMoveJointByMirror = function (_super) {\n tslib_1.__extends(CommandMoveJointByMirror, _super);\n function CommandMoveJointByMirror() {\n var _this = _super.call(this) || this;\n _this.typeName = \"CommandMoveJointByMirror\";\n _this.preSelector = null;\n _this.caeObjectSelector = null;\n _this.mirrorSelector = null;\n _this.currentFocus = FocusOption.selectedPoints;\n return _this;\n }\n CommandMoveJointByMirror.prototype.begin = function () {\n var _this = this;\n this.changeOperators();\n this.config = new moveJointByMirrorConfig_1.default();\n var data = this.config.properties.items[0].data;\n data.selectedPoints.focus = function () {\n _this.selectedPointsActive();\n };\n data.jointA.focus = function () {\n _this.jointAActive();\n };\n data.jointB.focus = function () {\n _this.jointBActive();\n };\n data.jointC.focus = function () {\n _this.jointCActive();\n };\n this.config.show();\n };\n CommandMoveJointByMirror.prototype.selectedPointsActive = function () {\n this.currentFocus = FocusOption.selectedPoints;\n };\n CommandMoveJointByMirror.prototype.jointAActive = function () {\n this.currentFocus = FocusOption.jointA;\n };\n CommandMoveJointByMirror.prototype.jointBActive = function () {\n this.currentFocus = FocusOption.jointB;\n };\n CommandMoveJointByMirror.prototype.jointCActive = function () {\n this.currentFocus = FocusOption.jointC;\n };\n CommandMoveJointByMirror.prototype.restore = function () {\n this.changeOperators();\n this.config.show();\n };\n CommandMoveJointByMirror.prototype.changeOperators = function () {\n var _this = this;\n this.viewer.selectionManager.clearAllSelectionAndHighlight();\n this.viewer.updateDisplay();\n this.viewer.operatorManager.clear();\n this.viewer.operatorManager.add(new cameraMouse_1.CameraMouse());\n this.preSelector = new cAEObjectPreSelector_1.CAEObjectPreSelector();\n this.viewer.operatorManager.add(this.preSelector);\n this.viewer.selectionInterfaceManager.selectorFilter = selectionInterfaceManager_1.SelectorFiliter.Joint;\n this.caeObjectSelector = new caeObjectSelector_1.CAEObjectSelector();\n this.viewer.operatorManager.add(this.caeObjectSelector);\n this.mirrorSelector = new caeObjectSelector_1.CAEObjectSelector();\n this.viewer.operatorManager.add(this.mirrorSelector);\n this.caeObjectSelector.lButtonUp.add(function () {\n setTimeout(function () {\n _this.updatePanel();\n }, 0);\n });\n };\n CommandMoveJointByMirror.prototype.end = function () {\n this.config.hide();\n _super.prototype.end.call(this);\n this.viewer.selectionManager.clearAllSelectionAndHighlight();\n this.viewer.updateDisplay();\n var commandSelect = new commandSelect_1.CommandSelect();\n this.process.commandManager.execute(commandSelect);\n };\n CommandMoveJointByMirror.prototype.commandOk = function () {\n var _this = this;\n var optionData = this.config.properties.items[0].data;\n var selectedPoints = optionData.selectedPoints;\n var selectedObjects = new gs_bim_air_1.Longan.List();\n for (var i = 0; i < selectedPoints.listOptions.list.length; i++) {\n var objectId = selectedPoints.listOptions.list[i].value;\n var object = this.process.findRenderObjectById(objectId);\n if (object) {\n selectedObjects.add(object);\n }\n }\n if (selectedObjects.count() === 0) {\n optionData.tip.value = 1;\n return;\n }\n var effectObj = new Array();\n var oldState = new Array();\n var newState = new Array();\n var p0 = null;\n var p1 = null;\n var p2 = null;\n if (optionData.transformOption.value === \"1\") {\n var p0Name = optionData.jointA.value;\n var p1Name = optionData.jointB.value;\n var p2Name = optionData.jointC.value;\n var jointA = this.process.findCaeObjectByNameInChildObject(this.process.caeRenderObjectTreeManager.jointNode, p0Name);\n var jointB = this.process.findCaeObjectByNameInChildObject(this.process.caeRenderObjectTreeManager.jointNode, p1Name);\n var jointC = this.process.findCaeObjectByNameInChildObject(this.process.caeRenderObjectTreeManager.jointNode, p2Name);\n if (!jointA) {\n optionData.tip.value = 2 + \",\" + p0Name;\n return;\n }\n if (!jointB) {\n optionData.tip.value = 2 + \",\" + p1Name;\n return;\n }\n if (!jointB) {\n optionData.tip.value = 2 + \",\" + p2Name;\n return;\n }\n if (jointA instanceof jointObject_1.JointObject) {\n p0 = new Float32Array(jointA.position);\n }\n if (jointB instanceof jointObject_1.JointObject) {\n p1 = new Float32Array(jointB.position);\n }\n if (jointC instanceof jointObject_1.JointObject) {\n p2 = new Float32Array(jointC.position);\n }\n } else {\n var p0Data = this.config.properties.items[1].data;\n p0 = new Float32Array([p0Data.x.value, p0Data.y.value, p0Data.z.value]);\n var p1Data = this.config.properties.items[2].data;\n p1 = new Float32Array([p1Data.x.value, p1Data.y.value, p1Data.z.value]);\n var p2Data = this.config.properties.items[3].data;\n p2 = new Float32Array([p2Data.x.value, p2Data.y.value, p2Data.z.value]);\n }\n if (this.checkPlateIsIllegal(p0, p1, p2)) {\n console.log(\"Mirror illegal\");\n optionData.tip.value = 4;\n return;\n }\n var cloneMemberArray = new Array();\n var clonePlateArray = new Array();\n for (var i = 0; i < selectedObjects.items.length; i++) {\n var joint = selectedObjects.items[i];\n if (optionData.copyJointOption.value === \"1\") {\n oldState = null;\n var cloneJoint = null;\n if (optionData.copyReleatesOption.value === \"1\") {\n var clones = joint.cloneWithReleate(this.viewer);\n cloneJoint = clones.cloneJointArray[0];\n clones.cloneMemberArray.forEach(function (item) {\n cloneMemberArray.push(item);\n });\n clones.clonePlateArray.forEach(function (item) {\n clonePlateArray.push(item);\n });\n }\n if (!cloneJoint) {\n cloneJoint = this.viewer.process.cloneManager.cloneObject(joint);\n }\n cloneJoint.businessState = gs_ceec_design_1.BusinessState.Creating;\n var nameList = this.process.caeRenderObjectTreeManager.nameAscendingOrder(joint.name, 1);\n cloneJoint.name = nameList[0];\n this.setJointPoisitionByMirror(cloneJoint, p0, p1, p2);\n effectObj.push(cloneJoint);\n this.process.addRenderObject(this.process.caeRenderObjectTreeManager.jointNode, cloneJoint);\n cloneJoint.setNeedUpdate();\n this.viewer.updateDisplay();\n } else {\n effectObj.push(joint);\n oldState.push(joint.backUp());\n joint.businessState = gs_ceec_design_1.BusinessState.Editing;\n this.setJointPoisitionByMirror(joint, p0, p1, p2);\n newState.push(joint.backUp());\n joint.setNeedUpdate();\n }\n }\n for (var i = 0; i < cloneMemberArray.length; i++) {\n effectObj.push(cloneMemberArray[i]);\n this.process.addRenderObject(this.process.caeRenderObjectTreeManager.memberNode, cloneMemberArray[i]);\n cloneMemberArray[i].setNeedUpdate();\n }\n for (var i = 0; i < clonePlateArray.length; i++) {\n effectObj.push(clonePlateArray[i]);\n this.process.addRenderObject(this.process.caeRenderObjectTreeManager.plateNode, clonePlateArray[i]);\n clonePlateArray[i].setNeedUpdate();\n }\n var data = this.config.properties.items[0].data;\n var copyJointOption = data.copyJointOption.value;\n this.viewer.addState(oldState, newState, function (stateItem) {\n if (copyJointOption === \"1\") {\n if (stateItem.newObj) {\n for (var i = 0; i < effectObj.length; i++) {\n effectObj[i].tempCreate(_this.viewer);\n }\n } else {\n for (var i = 0; i < effectObj.length; i++) {\n effectObj[i].tempDelete(_this.viewer);\n }\n }\n } else {\n for (var i = 0; i < effectObj.length; i++) {\n var obj = effectObj[i];\n if (obj instanceof jointObject_1.JointObject) {\n obj.xOnMeter = stateItem.newObj[i].xOnMeter;\n obj.yOnMeter = stateItem.newObj[i].yOnMeter;\n obj.zOnMeter = stateItem.newObj[i].zOnMeter;\n obj.xOnCentimeter = stateItem.newObj[i].xOnCentimeter;\n obj.yOnCentimeter = stateItem.newObj[i].yOnCentimeter;\n obj.zOnCentimeter = stateItem.newObj[i].zOnCentimeter;\n effectObj[i].setNeedUpdate();\n }\n }\n }\n _this.viewer.updateDisplay();\n }, \"通过镜像移动点\");\n this.viewer.selectionManager.clearAllSelectionAndHighlight();\n this.caeObjectSelector.selectedRenderObjects.clear();\n this.mirrorSelector.selectedRenderObjects.clear();\n this.updatePanel();\n this.viewer.updateDisplay();\n this.viewer.viewInterfaceManager.resetJointView();\n optionData.tip.value = 3;\n store_1.default.commit(\"structureTree/updateTreeData\", [this.viewer.structureTreeManager.rootNode]);\n };\n CommandMoveJointByMirror.prototype.checkPlateIsIllegal = function (p0, p1, p2) {\n if (gs_bim_air_1.Longan.GeometryOperators.samePoint(p1, p2) && gs_bim_air_1.Longan.GeometryOperators.samePoint(p1, p2)) {\n return false;\n }\n var axis1 = gs_bim_air_1.Longan.Point.subtract(p1, p0);\n gs_bim_air_1.Longan.Vector.normalize(axis1);\n var axis2 = gs_bim_air_1.Longan.Point.subtract(p2, p0);\n gs_bim_air_1.Longan.Vector.normalize(axis2);\n return gs_bim_air_1.Longan.GeometryOperators.isParallel(axis1, axis2);\n };\n CommandMoveJointByMirror.prototype.setJointPoisitionByMirror = function (joint, p0, p1, p2) {\n var axis1 = gs_bim_air_1.Longan.Point.subtract(p1, p0);\n gs_bim_air_1.Longan.Vector.normalize(axis1);\n var axis2 = gs_bim_air_1.Longan.Point.subtract(p2, p0);\n gs_bim_air_1.Longan.Vector.normalize(axis2);\n var normal = gs_bim_air_1.Longan.Vector.cross(axis1, axis2);\n gs_bim_air_1.Longan.Vector.normalize(normal);\n var position = new Float32Array(joint.position);\n var projectPoint = gs_bim_air_1.Longan.GeometryOperators.projectPointToPlane(position, p0, normal);\n var vector = gs_bim_air_1.Longan.Point.subtract(projectPoint, position);\n var newPosition = gs_bim_air_1.Longan.Point.add(projectPoint, vector);\n joint.xOnMeter = newPosition[0];\n joint.yOnMeter = newPosition[1];\n joint.zOnMeter = newPosition[2];\n joint.xOnCentimeter = 0;\n joint.yOnCentimeter = 0;\n joint.zOnCentimeter = 0;\n };\n CommandMoveJointByMirror.prototype.updatePanel = function () {\n var data = this.config.properties.items[0].data;\n if (this.viewer.selectionInterfaceManager.selectorFilter === selectionInterfaceManager_1.SelectorFiliter.Joint) {\n var objects = this.caeObjectSelector.selectedRenderObjects;\n if (this.currentFocus == FocusOption.selectedPoints) {\n data.selectedPoints.listOptions.list = [];\n for (var i = 0; i < objects.count(); i++) {\n var object = objects.items[i];\n this.config.properties.items[0].data.selectedPoints.listOptions.list.push({\n value: object.id,\n label: object.name\n });\n }\n } else if (objects.count() > 0 && !this.caeObjectSelector.isMultiSelect) {\n var object = objects.items[0];\n this.config.properties.items[0].data[this.currentFocus].value = object.name;\n }\n }\n };\n CommandMoveJointByMirror.prototype.updateMirrorPanel = function () {\n var data = this.config.properties.items[0].data;\n var objects = this.mirrorSelector.selectedRenderObjects;\n if (objects && objects.count() > 0) {\n if (!data.jointA.value) {\n data.jointA.value = objects.items[0].name;\n } else if (!data.jointB.value) {\n data.jointB.value = objects.items[0].name;\n } else if (!data.jointC.value) {\n data.jointC.value = objects.items[0].name;\n }\n }\n };\n return CommandMoveJointByMirror;\n }(commandComponent_1.CommandComponent);\n exports.default = CommandMoveJointByMirror;\n}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9wYWNrYWdlcy9jYWVEZXNpZ24vc3JjL3ZpZXdlcldyYXBwZXIvY29tbWFuZHMvbW92ZUpvaW50QnlNaXJyb3IvY29tbWFuZE1vdmVKb2ludEJ5TWlycm9yLnRzLmpzIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vW25hbWVdLy4vcGFja2FnZXMvY2FlRGVzaWduL3NyYy92aWV3ZXJXcmFwcGVyL2NvbW1hbmRzL21vdmVKb2ludEJ5TWlycm9yL2NvbW1hbmRNb3ZlSm9pbnRCeU1pcnJvci50cz81YzczIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENhbWVyYU1vdXNlIH0gZnJvbSBcIi4uLy4uLy4uL2dzRGV2Rngvb3BlcmF0b3JzL2NhbWVyYU1vdXNlXCI7XG5pbXBvcnQgeyBDb21tYW5kQ29tcG9uZW50IH0gZnJvbSBcIi4uL2NvbW1hbmRDb21wb25lbnRcIjtcbmltcG9ydCBzdG9yZSBmcm9tIFwiLi4vLi4vLi4vc3RvcmVcIjtcbmltcG9ydCB7IENBRU9iamVjdFByZVNlbGVjdG9yIH0gZnJvbSBcIi4uLy4uLy4uL2dzRGV2Rngvb3BlcmF0b3JzL2NBRU9iamVjdFByZVNlbGVjdG9yXCI7XG5pbXBvcnQgeyBDb21tYW5kU2VsZWN0IH0gZnJvbSBcIi4uLy4uLy4uL2dzRGV2RngvY29tbWFuZHMvY29tbWFuZFNlbGVjdFwiO1xuaW1wb3J0IHsgQ0FFT2JqZWN0U2VsZWN0b3IgfSBmcm9tIFwiLi4vLi4vLi4vZ3NEZXZGeC9vcGVyYXRvcnMvY2FlT2JqZWN0U2VsZWN0b3JcIjtcbmltcG9ydCB7IEpvaW50T2JqZWN0IH0gZnJvbSBcIi4uLy4uLy4uL2dzRGV2Rngvb2JqZWN0cy9jYWVPYmplY3RzL2pvaW50T2JqZWN0XCI7XG5pbXBvcnQgeyBNZW1iZXJPYmplY3QgfSBmcm9tIFwiLi4vLi4vLi4vZ3NEZXZGeC9vYmplY3RzL2NhZU9iamVjdHMvbWVtYmVyT2JqZWN0XCI7XG5pbXBvcnQgeyBQbGF0ZU9iamVjdCB9IGZyb20gXCIuLi8uLi8uLi9nc0RldkZ4L29iamVjdHMvY2FlT2JqZWN0cy9wbGF0ZU9iamVjdFwiO1xuaW1wb3J0IE1vdmVKb2ludEJ5TWlycm9yQ29uZmlnIGZyb20gXCIuL21vdmVKb2ludEJ5TWlycm9yQ29uZmlnXCI7XG5pbXBvcnQge1xuICBCdXNpbmVzc1N0YXRlLFxuICBEZXNpZ25CYXNlT2JqZWN0LFxufSBmcm9tIFwiZ3MtY2VlYy1kZXNpZ25cIjtcbmltcG9ydCB7IFNlbGVjdG9yRmlsaXRlciB9IGZyb20gXCIuLi8uLi8uLi9nc0RldkZ4L21hbmFnZXJzL2ludGVyZmFjZU1hbmFnZXJzL3NlbGVjdGlvbkludGVyZmFjZU1hbmFnZXJcIjtcbmltcG9ydCB7IExvbmdhbiB9IGZyb20gXCJncy1iaW0tYWlyXCI7XG5lbnVtIEZvY3VzT3B0aW9uIHtcbiAgc2VsZWN0ZWRQb2ludHMgPSBcInNlbGVjdGVkUG9pbnRzXCIsXG4gIGpvaW50QSA9IFwiam9pbnRBXCIsXG4gIGpvaW50QiA9IFwiam9pbnRCXCIsXG4gIGpvaW50QyA9IFwiam9pbnRDXCIsXG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb21tYW5kTW92ZUpvaW50QnlNaXJyb3IgZXh0ZW5kcyBDb21tYW5kQ29tcG9uZW50IHtcbiAgdHlwZU5hbWU6IHN0cmluZyA9IFwiQ29tbWFuZE1vdmVKb2ludEJ5TWlycm9yXCI7XG5cbiAgcHJlU2VsZWN0b3I6IENBRU9iamVjdFByZVNlbGVjdG9yID0gbnVsbDtcbiAgY2FlT2JqZWN0U2VsZWN0b3I6IENBRU9iamVjdFNlbGVjdG9yID0gbnVsbDtcbiAgY29uZmlnOiBNb3ZlSm9pbnRCeU1pcnJvckNvbmZpZztcblxuICBtaXJyb3JTZWxlY3RvcjogQ0FFT2JqZWN0U2VsZWN0b3IgPSBudWxsO1xuICBjdXJyZW50Rm9jdXMgPSBGb2N1c09wdGlvbi5zZWxlY3RlZFBvaW50cztcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIC8vIHRoaXMuYmluZENvbXBvbmVudCA9ICgpID0+IGltcG9ydChcIi4uL3Byb3BlcnR5Q29tcG9uZW50LnZ1ZVwiKTtcbiAgfVxuXG4gIGJlZ2luKCk6IHZvaWQge1xuICAgIHRoaXMuY2hhbmdlT3BlcmF0b3JzKCk7XG5cbiAgICAvLyDlkb3ku6TmlbDmja4uXG4gICAgdGhpcy5jb25maWcgPSBuZXcgTW92ZUpvaW50QnlNaXJyb3JDb25maWcoKTtcbiAgICBsZXQgZGF0YSA9IHRoaXMuY29uZmlnLnByb3BlcnRpZXMuaXRlbXNbMF0uZGF0YTtcbiAgICBkYXRhLnNlbGVjdGVkUG9pbnRzLmZvY3VzID0gKCkgPT4ge1xuICAgICAgdGhpcy5zZWxlY3RlZFBvaW50c0FjdGl2ZSgpO1xuICAgIH07XG4gICAgZGF0YS5qb2ludEEuZm9jdXMgPSAoKSA9PiB7XG4gICAgICB0aGlzLmpvaW50QUFjdGl2ZSgpO1xuICAgIH07XG4gICAgZGF0YS5qb2ludEIuZm9jdXMgPSAoKSA9PiB7XG4gICAgICB0aGlzLmpvaW50QkFjdGl2ZSgpO1xuICAgIH07XG4gICAgZGF0YS5qb2ludEMuZm9jdXMgPSAoKSA9PiB7XG4gICAgICB0aGlzLmpvaW50Q0FjdGl2ZSgpO1xuICAgIH07XG4gICAgdGhpcy5jb25maWcuc2hvdygpO1xuICB9XG5cbiAgc2VsZWN0ZWRQb2ludHNBY3RpdmUoKSB7XG4gICAgdGhpcy5jdXJyZW50Rm9jdXMgPSBGb2N1c09wdGlvbi5zZWxlY3RlZFBvaW50cztcbiAgfVxuICBqb2ludEFBY3RpdmUoKSB7XG4gICAgdGhpcy5jdXJyZW50Rm9jdXMgPSBGb2N1c09wdGlvbi5qb2ludEE7XG4gIH1cbiAgam9pbnRCQWN0aXZlKCkge1xuICAgIHRoaXMuY3VycmVudEZvY3VzID0gRm9jdXNPcHRpb24uam9pbnRCO1xuICB9XG4gIGpvaW50Q0FjdGl2ZSgpIHtcbiAgICB0aGlzLmN1cnJlbnRGb2N1cyA9IEZvY3VzT3B0aW9uLmpvaW50QztcbiAgfVxuXG4gIHJlc3RvcmUoKTogdm9pZCB7XG4gICAgdGhpcy5jaGFuZ2VPcGVyYXRvcnMoKTtcbiAgICB0aGlzLmNvbmZpZy5zaG93KCk7XG4gIH1cblxuICBjaGFuZ2VPcGVyYXRvcnMoKTogdm9pZCB7XG4gICAgLy8g6L+b5YWl5ZG95Luk5YmN5riF56m66YCJ5Lit5LiO6auY5LquLlxuICAgIHRoaXMudmlld2VyLnNlbGVjdGlvbk1hbmFnZXIuY2xlYXJBbGxTZWxlY3Rpb25BbmRIaWdobGlnaHQoKTtcbiAgICB0aGlzLnZpZXdlci51cGRhdGVEaXNwbGF5KCk7XG5cbiAgICAvLyDmuIXnqbrmk43kvZzlmaguXG4gICAgdGhpcy52aWV3ZXIub3BlcmF0b3JNYW5hZ2VyLmNsZWFyKCk7XG4gICAgLy8g5re75Yqg5pON5L2c5ZmoXG4gICAgdGhpcy52aWV3ZXIub3BlcmF0b3JNYW5hZ2VyLmFkZChuZXcgQ2FtZXJhTW91c2UoKSk7XG5cbiAgICB0aGlzLnByZVNlbGVjdG9yID0gbmV3IENBRU9iamVjdFByZVNlbGVjdG9yKCk7XG4gICAgdGhpcy52aWV3ZXIub3BlcmF0b3JNYW5hZ2VyLmFkZCh0aGlzLnByZVNlbGVjdG9yKTtcbiAgICB0aGlzLnZpZXdlci5zZWxlY3Rpb25JbnRlcmZhY2VNYW5hZ2VyLnNlbGVjdG9yRmlsdGVyID1cbiAgICAgIFNlbGVjdG9yRmlsaXRlci5Kb2ludDtcblxuICAgIHRoaXMuY2FlT2JqZWN0U2VsZWN0b3IgPSBuZXcgQ0FFT2JqZWN0U2VsZWN0b3IoKTtcbiAgICB0aGlzLnZpZXdlci5vcGVyYXRvck1hbmFnZXIuYWRkKHRoaXMuY2FlT2JqZWN0U2VsZWN0b3IpO1xuICAgIC8vIOW8gOWQr+WkmumAiS5cbiAgICAvL3RoaXMuY2FlT2JqZWN0U2VsZWN0b3IuaXNNdWx0aVNlbGVjdCA9IHRydWU7XG5cbiAgICB0aGlzLm1pcnJvclNlbGVjdG9yID0gbmV3IENBRU9iamVjdFNlbGVjdG9yKCk7XG4gICAgdGhpcy52aWV3ZXIub3BlcmF0b3JNYW5hZ2VyLmFkZCh0aGlzLm1pcnJvclNlbGVjdG9yKTtcbiAgICAvLyB0aGlzLm1pcnJvclNlbGVjdG9yLmlzTXVsdGlTZWxlY3QgPSB0cnVlO1xuXG4gICAgLy8g57uZ6YCJ5oup5Zmo5re75Yqg6K+l5ZG95Luk5a6a5Yi255qE5LqL5Lu2LlxuICAgIHRoaXMuY2FlT2JqZWN0U2VsZWN0b3IubEJ1dHRvblVwLmFkZCgoKSA9PiB7XG4gICAgICAvLyDmm7TmlrDlkb3ku6TpnaLmnb8uXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy51cGRhdGVQYW5lbCgpO1xuICAgICAgfSwgMCk7XG4gICAgfSk7XG5cbiAgICAvLyB0aGlzLm1pcnJvclNlbGVjdG9yLmxCdXR0b25VcC5hZGQoKCkgPT4ge1xuICAgIC8vICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgLy8gICAgIHRoaXMudXBkYXRlTWlycm9yUGFuZWwoKTtcbiAgICAvLyAgIH0sIDApO1xuICAgIC8vIH0pO1xuICB9XG5cbiAgZW5kKCk6IHZvaWQge1xuICAgIHRoaXMuY29uZmlnLmhpZGUoKTtcbiAgICBzdXBlci5lbmQoKTtcblxuICAgIHRoaXMudmlld2VyLnNlbGVjdGlvbk1hbmFnZXIuY2xlYXJBbGxTZWxlY3Rpb25BbmRIaWdobGlnaHQoKTtcbiAgICB0aGlzLnZpZXdlci51cGRhdGVEaXNwbGF5KCk7XG5cbiAgICBsZXQgY29tbWFuZFNlbGVjdCA9IG5ldyBDb21tYW5kU2VsZWN0KCk7XG4gICAgdGhpcy5wcm9jZXNzLmNvbW1hbmRNYW5hZ2VyLmV4ZWN1dGUoY29tbWFuZFNlbGVjdCk7XG4gIH1cblxuICBjb21tYW5kT2soKTogdm9pZCB7XG4gICAgbGV0IG9wdGlvbkRhdGEgPSB0aGlzLmNvbmZpZy5wcm9wZXJ0aWVzLml0ZW1zWzBdLmRhdGE7XG4gICAgbGV0IHNlbGVjdGVkUG9pbnRzID0gb3B0aW9uRGF0YS5zZWxlY3RlZFBvaW50cztcbiAgICBsZXQgc2VsZWN0ZWRPYmplY3RzID0gbmV3IExvbmdhbi5MaXN0PEpvaW50T2JqZWN0PigpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VsZWN0ZWRQb2ludHMubGlzdE9wdGlvbnMubGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IG9iamVjdElkID0gc2VsZWN0ZWRQb2ludHMubGlzdE9wdGlvbnMubGlzdFtpXS52YWx1ZTtcbiAgICAgIGxldCBvYmplY3QgPSB0aGlzLnByb2Nlc3MuZmluZFJlbmRlck9iamVjdEJ5SWQob2JqZWN0SWQpIGFzIEpvaW50T2JqZWN0O1xuICAgICAgaWYgKG9iamVjdCkge1xuICAgICAgICBzZWxlY3RlZE9iamVjdHMuYWRkKG9iamVjdCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChzZWxlY3RlZE9iamVjdHMuY291bnQoKSA9PT0gMCkge1xuICAgICAgb3B0aW9uRGF0YS50aXAudmFsdWUgPSAxO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBlZmZlY3RPYmogPSBuZXcgQXJyYXk8RGVzaWduQmFzZU9iamVjdD4oKTtcbiAgICBsZXQgb2xkU3RhdGUgPSBuZXcgQXJyYXk8Sm9pbnRPYmplY3Q+KCk7XG4gICAgbGV0IG5ld1N0YXRlID0gbmV3IEFycmF5PEpvaW50T2JqZWN0PigpO1xuXG4gICAgLy8gVG9kbzrojrflj5bplZzlg4/mlbDmja4uXG5cbiAgICBsZXQgcDA6IEZsb2F0MzJBcnJheSA9IG51bGw7XG4gICAgbGV0IHAxOiBGbG9hdDMyQXJyYXkgPSBudWxsO1xuICAgIGxldCBwMjogRmxvYXQzMkFycmF5ID0gbnVsbDtcbiAgICBpZiAob3B0aW9uRGF0YS50cmFuc2Zvcm1PcHRpb24udmFsdWUgPT09IFwiMVwiKSB7XG4gICAgICBsZXQgcDBOYW1lID0gb3B0aW9uRGF0YS5qb2ludEEudmFsdWU7XG4gICAgICBsZXQgcDFOYW1lID0gb3B0aW9uRGF0YS5qb2ludEIudmFsdWU7XG4gICAgICBsZXQgcDJOYW1lID0gb3B0aW9uRGF0YS5qb2ludEMudmFsdWU7XG5cbiAgICAgIGxldCBqb2ludEEgPSB0aGlzLnByb2Nlc3MuZmluZENhZU9iamVjdEJ5TmFtZUluQ2hpbGRPYmplY3QoXG4gICAgICAgIHRoaXMucHJvY2Vzcy5jYWVSZW5kZXJPYmplY3RUcmVlTWFuYWdlci5qb2ludE5vZGUsXG4gICAgICAgIHAwTmFtZVxuICAgICAgKTtcblxuICAgICAgbGV0IGpvaW50QiA9IHRoaXMucHJvY2Vzcy5maW5kQ2FlT2JqZWN0QnlOYW1lSW5DaGlsZE9iamVjdChcbiAgICAgICAgdGhpcy5wcm9jZXNzLmNhZVJlbmRlck9iamVjdFRyZWVNYW5hZ2VyLmpvaW50Tm9kZSxcbiAgICAgICAgcDFOYW1lXG4gICAgICApO1xuXG4gICAgICBsZXQgam9pbnRDID0gdGhpcy5wcm9jZXNzLmZpbmRDYWVPYmplY3RCeU5hbWVJbkNoaWxkT2JqZWN0KFxuICAgICAgICB0aGlzLnByb2Nlc3MuY2FlUmVuZGVyT2JqZWN0VHJlZU1hbmFnZXIuam9pbnROb2RlLFxuICAgICAgICBwMk5hbWVcbiAgICAgICk7XG5cbiAgICAgIGlmICgham9pbnRBKSB7XG4gICAgICAgIG9wdGlvbkRhdGEudGlwLnZhbHVlID0gMiArIFwiLFwiICsgcDBOYW1lO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICgham9pbnRCKSB7XG4gICAgICAgIG9wdGlvbkRhdGEudGlwLnZhbHVlID0gMiArIFwiLFwiICsgcDFOYW1lO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICgham9pbnRCKSB7XG4gICAgICAgIG9wdGlvbkRhdGEudGlwLnZhbHVlID0gMiArIFwiLFwiICsgcDJOYW1lO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChqb2ludEEgaW5zdGFuY2VvZiBKb2ludE9iamVjdCkge1xuICAgICAgICBwMCA9IG5ldyBGbG9hdDMyQXJyYXkoam9pbnRBLnBvc2l0aW9uKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGpvaW50QiBpbnN0YW5jZW9mIEpvaW50T2JqZWN0KSB7XG4gICAgICAgIHAxID0gbmV3IEZsb2F0MzJBcnJheShqb2ludEIucG9zaXRpb24pO1xuICAgICAgfVxuXG4gICAgICBpZiAoam9pbnRDIGluc3RhbmNlb2YgSm9pbnRPYmplY3QpIHtcbiAgICAgICAgcDIgPSBuZXcgRmxvYXQzMkFycmF5KGpvaW50Qy5wb3NpdGlvbik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBwMERhdGEgPSB0aGlzLmNvbmZpZy5wcm9wZXJ0aWVzLml0ZW1zWzFdLmRhdGE7XG4gICAgICBwMCA9IG5ldyBGbG9hdDMyQXJyYXkoW3AwRGF0YS54LnZhbHVlLCBwMERhdGEueS52YWx1ZSwgcDBEYXRhLnoudmFsdWVdKTtcbiAgICAgIGxldCBwMURhdGEgPSB0aGlzLmNvbmZpZy5wcm9wZXJ0aWVzLml0ZW1zWzJdLmRhdGE7XG4gICAgICBwMSA9IG5ldyBGbG9hdDMyQXJyYXkoW3AxRGF0YS54LnZhbHVlLCBwMURhdGEueS52YWx1ZSwgcDFEYXRhLnoudmFsdWVdKTtcbiAgICAgIGxldCBwMkRhdGEgPSB0aGlzLmNvbmZpZy5wcm9wZXJ0aWVzLml0ZW1zWzNdLmRhdGE7XG4gICAgICBwMiA9IG5ldyBGbG9hdDMyQXJyYXkoW3AyRGF0YS54LnZhbHVlLCBwMkRhdGEueS52YWx1ZSwgcDJEYXRhLnoudmFsdWVdKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5jaGVja1BsYXRlSXNJbGxlZ2FsKHAwLCBwMSwgcDIpKSB7XG4gICAgICAvLyDplZzpnaLkuI3lkIjms5UuXG4gICAgICBjb25zb2xlLmxvZyhcIk1pcnJvciBpbGxlZ2FsXCIpO1xuICAgICAgb3B0aW9uRGF0YS50aXAudmFsdWUgPSA0O1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIOWkjeWItuWQjueahOWFs+iBlOadhuS7tuWSjOadv+WFiOS4jeimgea3u+WKoOWIsOe7k+aehOagkeaYr++8jOmYsuatouS4iuS4gOS4quepuumXtOeCueWkjeWItueahOadhuS7tu+8jOW9seWTjeWIsOS4i+S4gOS4quepuumXtOeCueiuoeeul+ivpeepuumXtOeCueeahOWFs+iBlOadhuS7ti5cbiAgICBsZXQgY2xvbmVNZW1iZXJBcnJheSA9IG5ldyBBcnJheTxNZW1iZXJPYmplY3Q+KCk7XG4gICAgbGV0IGNsb25lUGxhdGVBcnJheSA9IG5ldyBBcnJheTxQbGF0ZU9iamVjdD4oKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VsZWN0ZWRPYmplY3RzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgam9pbnQgPSBzZWxlY3RlZE9iamVjdHMuaXRlbXNbaV0gYXMgSm9pbnRPYmplY3Q7XG5cbiAgICAgIC8vIOWmguaenOaYr+WkjeWItuepuumXtOeCuVxuICAgICAgaWYgKG9wdGlvbkRhdGEuY29weUpvaW50T3B0aW9uLnZhbHVlID09PSBcIjFcIikge1xuICAgICAgICBvbGRTdGF0ZSA9IG51bGw7XG5cbiAgICAgICAgbGV0IGNsb25lSm9pbnQgPSBudWxsO1xuICAgICAgICAvLyDkuJTlpI3liLblhbPogZTmnYbku7blkozmnb8uXG4gICAgICAgIGlmIChvcHRpb25EYXRhLmNvcHlSZWxlYXRlc09wdGlvbi52YWx1ZSA9PT0gXCIxXCIpIHtcbiAgICAgICAgICBsZXQgY2xvbmVzID0gam9pbnQuY2xvbmVXaXRoUmVsZWF0ZSh0aGlzLnZpZXdlcik7XG4gICAgICAgICAgY2xvbmVKb2ludCA9IGNsb25lcy5jbG9uZUpvaW50QXJyYXlbMF07XG4gICAgICAgICAgY2xvbmVzLmNsb25lTWVtYmVyQXJyYXkuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgY2xvbmVNZW1iZXJBcnJheS5wdXNoKGl0ZW0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNsb25lcy5jbG9uZVBsYXRlQXJyYXkuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgY2xvbmVQbGF0ZUFycmF5LnB1c2goaXRlbSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNsb25lSm9pbnQpIHtcbiAgICAgICAgICBjbG9uZUpvaW50ID0gdGhpcy52aWV3ZXIucHJvY2Vzcy5jbG9uZU1hbmFnZXIuY2xvbmVPYmplY3QoXG4gICAgICAgICAgICBqb2ludFxuICAgICAgICAgICkgYXMgSm9pbnRPYmplY3Q7XG4gICAgICAgIH1cblxuICAgICAgICBjbG9uZUpvaW50LmJ1c2luZXNzU3RhdGUgPSBCdXNpbmVzc1N0YXRlLkNyZWF0aW5nO1xuICAgICAgICBsZXQgbmFtZUxpc3QgPVxuICAgICAgICAgIHRoaXMucHJvY2Vzcy5jYWVSZW5kZXJPYmplY3RUcmVlTWFuYWdlci5uYW1lQXNjZW5kaW5nT3JkZXIoXG4gICAgICAgICAgICBqb2ludC5uYW1lLFxuICAgICAgICAgICAgMVxuICAgICAgICAgICk7XG4gICAgICAgIGNsb25lSm9pbnQubmFtZSA9IG5hbWVMaXN0WzBdO1xuXG4gICAgICAgIC8vIFRvZG866K6+572u56m66Ze054K55paw6ZWc5YOP5L2N572uLlxuICAgICAgICB0aGlzLnNldEpvaW50UG9pc2l0aW9uQnlNaXJyb3IoY2xvbmVKb2ludCwgcDAsIHAxLCBwMik7XG4gICAgICAgIGVmZmVjdE9iai5wdXNoKGNsb25lSm9pbnQpO1xuXG4gICAgICAgIHRoaXMucHJvY2Vzcy5hZGRSZW5kZXJPYmplY3QoXG4gICAgICAgICAgdGhpcy5wcm9jZXNzLmNhZVJlbmRlck9iamVjdFRyZWVNYW5hZ2VyLmpvaW50Tm9kZSxcbiAgICAgICAgICBjbG9uZUpvaW50XG4gICAgICAgICk7XG4gICAgICAgIGNsb25lSm9pbnQuc2V0TmVlZFVwZGF0ZSgpO1xuXG4gICAgICAgIHRoaXMudmlld2VyLnVwZGF0ZURpc3BsYXkoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRvZG866K6+572u56m66Ze054K55paw6ZWc5YOP5L2N572uLlxuICAgICAgICBlZmZlY3RPYmoucHVzaChqb2ludCk7XG4gICAgICAgIG9sZFN0YXRlLnB1c2goam9pbnQuYmFja1VwKCkpO1xuXG4gICAgICAgIGpvaW50LmJ1c2luZXNzU3RhdGUgPSBCdXNpbmVzc1N0YXRlLkVkaXRpbmc7XG4gICAgICAgIC8vIFRvZG866K6+572u56m66Ze054K55paw5peL6L2s5L2N572uLlxuICAgICAgICB0aGlzLnNldEpvaW50UG9pc2l0aW9uQnlNaXJyb3Ioam9pbnQsIHAwLCBwMSwgcDIpO1xuXG4gICAgICAgIG5ld1N0YXRlLnB1c2goam9pbnQuYmFja1VwKCkpO1xuXG4gICAgICAgIGpvaW50LnNldE5lZWRVcGRhdGUoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNsb25lTWVtYmVyQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIGVmZmVjdE9iai5wdXNoKGNsb25lTWVtYmVyQXJyYXlbaV0pO1xuXG4gICAgICB0aGlzLnByb2Nlc3MuYWRkUmVuZGVyT2JqZWN0KFxuICAgICAgICB0aGlzLnByb2Nlc3MuY2FlUmVuZGVyT2JqZWN0VHJlZU1hbmFnZXIubWVtYmVyTm9kZSxcbiAgICAgICAgY2xvbmVNZW1iZXJBcnJheVtpXVxuICAgICAgKTtcblxuICAgICAgY2xvbmVNZW1iZXJBcnJheVtpXS5zZXROZWVkVXBkYXRlKCk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjbG9uZVBsYXRlQXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIGVmZmVjdE9iai5wdXNoKGNsb25lUGxhdGVBcnJheVtpXSk7XG5cbiAgICAgIHRoaXMucHJvY2Vzcy5hZGRSZW5kZXJPYmplY3QoXG4gICAgICAgIHRoaXMucHJvY2Vzcy5jYWVSZW5kZXJPYmplY3RUcmVlTWFuYWdlci5wbGF0ZU5vZGUsXG4gICAgICAgIGNsb25lUGxhdGVBcnJheVtpXVxuICAgICAgKTtcblxuICAgICAgY2xvbmVQbGF0ZUFycmF5W2ldLnNldE5lZWRVcGRhdGUoKTtcbiAgICB9XG5cbiAgICBsZXQgZGF0YSA9IHRoaXMuY29uZmlnLnByb3BlcnRpZXMuaXRlbXNbMF0uZGF0YTtcbiAgICBsZXQgY29weUpvaW50T3B0aW9uID0gZGF0YS5jb3B5Sm9pbnRPcHRpb24udmFsdWU7XG4gICAgdGhpcy52aWV3ZXIuYWRkU3RhdGUoXG4gICAgICBvbGRTdGF0ZSxcbiAgICAgIG5ld1N0YXRlLFxuICAgICAgKHN0YXRlSXRlbSkgPT4ge1xuICAgICAgICAvL1xuICAgICAgICBpZiAoY29weUpvaW50T3B0aW9uID09PSBcIjFcIikge1xuICAgICAgICAgIC8vXG4gICAgICAgICAgaWYgKHN0YXRlSXRlbS5uZXdPYmopIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWZmZWN0T2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIGVmZmVjdE9ialtpXS50ZW1wQ3JlYXRlKHRoaXMudmlld2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gbnVsbCzmkqTplIDliJvlu7pcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWZmZWN0T2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIGVmZmVjdE9ialtpXS50ZW1wRGVsZXRlKHRoaXMudmlld2VyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlZmZlY3RPYmoubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBvYmogPSBlZmZlY3RPYmpbaV07XG4gICAgICAgICAgICBpZiAob2JqIGluc3RhbmNlb2YgSm9pbnRPYmplY3QpIHtcbiAgICAgICAgICAgICAgb2JqLnhPbk1ldGVyID0gc3RhdGVJdGVtLm5ld09ialtpXS54T25NZXRlcjtcbiAgICAgICAgICAgICAgb2JqLnlPbk1ldGVyID0gc3RhdGVJdGVtLm5ld09ialtpXS55T25NZXRlcjtcbiAgICAgICAgICAgICAgb2JqLnpPbk1ldGVyID0gc3RhdGVJdGVtLm5ld09ialtpXS56T25NZXRlcjtcblxuICAgICAgICAgICAgICBvYmoueE9uQ2VudGltZXRlciA9IHN0YXRlSXRlbS5uZXdPYmpbaV0ueE9uQ2VudGltZXRlcjtcbiAgICAgICAgICAgICAgb2JqLnlPbkNlbnRpbWV0ZXIgPSBzdGF0ZUl0ZW0ubmV3T2JqW2ldLnlPbkNlbnRpbWV0ZXI7XG4gICAgICAgICAgICAgIG9iai56T25DZW50aW1ldGVyID0gc3RhdGVJdGVtLm5ld09ialtpXS56T25DZW50aW1ldGVyO1xuXG4gICAgICAgICAgICAgIGVmZmVjdE9ialtpXS5zZXROZWVkVXBkYXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy52aWV3ZXIudXBkYXRlRGlzcGxheSgpO1xuICAgICAgfSxcbiAgICAgIFwi6YCa6L+H6ZWc5YOP56e75Yqo54K5XCJcbiAgICApO1xuXG4gICAgLy8g5riF56m66YCJ5oupLlxuICAgIHRoaXMudmlld2VyLnNlbGVjdGlvbk1hbmFnZXIuY2xlYXJBbGxTZWxlY3Rpb25BbmRIaWdobGlnaHQoKTtcbiAgICB0aGlzLmNhZU9iamVjdFNlbGVjdG9yLnNlbGVjdGVkUmVuZGVyT2JqZWN0cy5jbGVhcigpO1xuICAgIHRoaXMubWlycm9yU2VsZWN0b3Iuc2VsZWN0ZWRSZW5kZXJPYmplY3RzLmNsZWFyKCk7XG4gICAgdGhpcy51cGRhdGVQYW5lbCgpO1xuICAgIHRoaXMudmlld2VyLnVwZGF0ZURpc3BsYXkoKTtcbiAgICAvLyB0aGlzLnZpZXdlci52aWV3SW50ZXJmYWNlTWFuYWdlci5yZXNldFZpZXcoKTtcbiAgICB0aGlzLnZpZXdlci52aWV3SW50ZXJmYWNlTWFuYWdlci5yZXNldEpvaW50VmlldygpO1xuXG5cbiAgICBvcHRpb25EYXRhLnRpcC52YWx1ZSA9IDM7XG5cbiAgICAvLyDmm7TmlrDlt6bkvqfnu5PmnoTmoJFcbiAgICBzdG9yZS5jb21taXQoXCJzdHJ1Y3R1cmVUcmVlL3VwZGF0ZVRyZWVEYXRhXCIsIFtcbiAgICAgIHRoaXMudmlld2VyLnN0cnVjdHVyZVRyZWVNYW5hZ2VyLnJvb3ROb2RlLFxuICAgIF0pO1xuICB9XG5cbiAgY2hlY2tQbGF0ZUlzSWxsZWdhbChwMDogRmxvYXQzMkFycmF5LCBwMTogRmxvYXQzMkFycmF5LCBwMjogRmxvYXQzMkFycmF5KSB7XG4gICAgaWYoTG9uZ2FuLkdlb21ldHJ5T3BlcmF0b3JzLnNhbWVQb2ludChwMSwgcDIpICYmIExvbmdhbi5HZW9tZXRyeU9wZXJhdG9ycy5zYW1lUG9pbnQocDEscDIpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIFxuICAgIGxldCBheGlzMSA9IExvbmdhbi5Qb2ludC5zdWJ0cmFjdChwMSwgcDApO1xuICAgIExvbmdhbi5WZWN0b3Iubm9ybWFsaXplKGF4aXMxKTtcbiAgICBsZXQgYXhpczIgPSBMb25nYW4uUG9pbnQuc3VidHJhY3QocDIsIHAwKTtcbiAgICBMb25nYW4uVmVjdG9yLm5vcm1hbGl6ZShheGlzMik7XG5cbiAgICByZXR1cm4gTG9uZ2FuLkdlb21ldHJ5T3BlcmF0b3JzLmlzUGFyYWxsZWwoYXhpczEsIGF4aXMyKTtcbiAgfVxuXG4gIHNldEpvaW50UG9pc2l0aW9uQnlNaXJyb3IoXG4gICAgam9pbnQ6IEpvaW50T2JqZWN0LFxuICAgIHAwOiBGbG9hdDMyQXJyYXksXG4gICAgcDE6IEZsb2F0MzJBcnJheSxcbiAgICBwMjogRmxvYXQzMkFycmF5XG4gICkge1xuICAgIC8vXG4gICAgbGV0IGF4aXMxID0gTG9uZ2FuLlBvaW50LnN1YnRyYWN0KHAxLCBwMCk7XG4gICAgTG9uZ2FuLlZlY3Rvci5ub3JtYWxpemUoYXhpczEpO1xuICAgIGxldCBheGlzMiA9IExvbmdhbi5Qb2ludC5zdWJ0cmFjdChwMiwgcDApO1xuICAgIExvbmdhbi5WZWN0b3Iubm9ybWFsaXplKGF4aXMyKTtcblxuICAgIGxldCBub3JtYWwgPSBMb25nYW4uVmVjdG9yLmNyb3NzKGF4aXMxLCBheGlzMik7XG4gICAgTG9uZ2FuLlZlY3Rvci5ub3JtYWxpemUobm9ybWFsKTtcblxuICAgIGxldCBwb3NpdGlvbiA9IG5ldyBGbG9hdDMyQXJyYXkoam9pbnQucG9zaXRpb24pO1xuICAgIGxldCBwcm9qZWN0UG9pbnQgPSBMb25nYW4uR2VvbWV0cnlPcGVyYXRvcnMucHJvamVjdFBvaW50VG9QbGFuZShcbiAgICAgIHBvc2l0aW9uLFxuICAgICAgcDAsXG4gICAgICBub3JtYWxcbiAgICApO1xuICAgIGxldCB2ZWN0b3IgPSBMb25nYW4uUG9pbnQuc3VidHJhY3QocHJvamVjdFBvaW50LCBwb3NpdGlvbik7XG4gICAgbGV0IG5ld1Bvc2l0aW9uID0gTG9uZ2FuLlBvaW50LmFkZChwcm9qZWN0UG9pbnQsIHZlY3Rvcik7XG5cbiAgICBqb2ludC54T25NZXRlciA9IG5ld1Bvc2l0aW9uWzBdO1xuICAgIGpvaW50LnlPbk1ldGVyID0gbmV3UG9zaXRpb25bMV07XG4gICAgam9pbnQuek9uTWV0ZXIgPSBuZXdQb3NpdGlvblsyXTtcbiAgICBqb2ludC54T25DZW50aW1ldGVyID0gMDtcbiAgICBqb2ludC55T25DZW50aW1ldGVyID0gMDtcbiAgICBqb2ludC56T25DZW50aW1ldGVyID0gMDtcbiAgfVxuXG4gIHVwZGF0ZVBhbmVsKCkge1xuICAgIGxldCBkYXRhID0gdGhpcy5jb25maWcucHJvcGVydGllcy5pdGVtc1swXS5kYXRhO1xuICAgIGlmIChcbiAgICAgIHRoaXMudmlld2VyLnNlbGVjdGlvbkludGVyZmFjZU1hbmFnZXIuc2VsZWN0b3JGaWx0ZXIgPT09XG4gICAgICBTZWxlY3RvckZpbGl0ZXIuSm9pbnRcbiAgICApIHtcbiAgICAgIGxldCBvYmplY3RzID0gdGhpcy5jYWVPYmplY3RTZWxlY3Rvci5zZWxlY3RlZFJlbmRlck9iamVjdHM7XG4gICAgICBpZiAodGhpcy5jdXJyZW50Rm9jdXMgPT0gRm9jdXNPcHRpb24uc2VsZWN0ZWRQb2ludHMpIHtcbiAgICAgICAgLy8g5pu05paw6Z2i5p2/55qE6YCJ5Lit54K55YiX6KGoLlxuICAgICAgICBkYXRhLnNlbGVjdGVkUG9pbnRzLmxpc3RPcHRpb25zLmxpc3QgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvYmplY3RzLmNvdW50KCk7IGkrKykge1xuICAgICAgICAgIGxldCBvYmplY3QgPSBvYmplY3RzLml0ZW1zW2ldO1xuICAgICAgICAgIHRoaXMuY29uZmlnLnByb3BlcnRpZXMuaXRlbXNbMF0uZGF0YS5zZWxlY3RlZFBvaW50cy5saXN0T3B0aW9ucy5saXN0LnB1c2goXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHZhbHVlOiBvYmplY3QuaWQsXG4gICAgICAgICAgICAgIGxhYmVsOiBvYmplY3QubmFtZSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG9iamVjdHMuY291bnQoKSA+IDAgJiYgIXRoaXMuY2FlT2JqZWN0U2VsZWN0b3IuaXNNdWx0aVNlbGVjdCkge1xuICAgICAgICBsZXQgb2JqZWN0ID0gb2JqZWN0cy5pdGVtc1swXTtcbiAgICAgICAgdGhpcy5jb25maWcucHJvcGVydGllcy5pdGVtc1swXS5kYXRhW3RoaXMuY3VycmVudEZvY3VzXS52YWx1ZSA9XG4gICAgICAgICAgb2JqZWN0Lm5hbWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlTWlycm9yUGFuZWwoKSB7XG4gICAgbGV0IGRhdGEgPSB0aGlzLmNvbmZpZy5wcm9wZXJ0aWVzLml0ZW1zWzBdLmRhdGE7XG4gICAgbGV0IG9iamVjdHMgPSB0aGlzLm1pcnJvclNlbGVjdG9yLnNlbGVjdGVkUmVuZGVyT2JqZWN0cztcblxuICAgIGlmIChvYmplY3RzICYmIG9iamVjdHMuY291bnQoKSA+IDApIHtcbiAgICAgIGlmICghZGF0YS5qb2ludEEudmFsdWUpIHtcbiAgICAgICAgZGF0YS5qb2ludEEudmFsdWUgPSBvYmplY3RzLml0ZW1zWzBdLm5hbWU7XG4gICAgICB9IGVsc2UgaWYgKCFkYXRhLmpvaW50Qi52YWx1ZSkge1xuICAgICAgICBkYXRhLmpvaW50Qi52YWx1ZSA9IG9iamVjdHMuaXRlbXNbMF0ubmFtZTtcbiAgICAgIH0gZWxzZSBpZiAoIWRhdGEuam9pbnRDLnZhbHVlKSB7XG4gICAgICAgIGRhdGEuam9pbnRDLnZhbHVlID0gb2JqZWN0cy5pdGVtc1swXS5uYW1lO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQWdCQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFVQTtBQUFBO0FBVEE7QUFFQTtBQUNBO0FBR0E7QUFDQTs7QUFLQTtBQUVBO0FBQUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBRUE7QUFDQTtBQUdBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBSUE7QUFDQTtBQUlBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFPQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUNBOztBQUdBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFLQTtBQUtBO0FBS0E7QUFDQTtBQUNBOztBQUdBO0FBQ0E7QUFDQTs7QUFHQTtBQUNBO0FBQ0E7O0FBR0E7QUFDQTs7QUFHQTtBQUNBOztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7QUFFQTtBQUNBO0FBQ0E7O0FBSUE7QUFDQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7QUFDQTs7QUFLQTtBQUNBO0FBS0E7QUFHQTtBQUNBO0FBRUE7QUFJQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBRUE7OztBQUlBO0FBQ0E7QUFFQTtBQUtBOztBQUdBO0FBQ0E7QUFFQTtBQUtBOztBQUdBO0FBQ0E7QUFDQTtBQUtBO0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBRUE7QUFDQTs7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTs7OztBQUtBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFHQTtBQUdBO0FBR0E7QUFFQTtBQUNBO0FBQ0E7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBS0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBOztBQUdBO0FBQ0E7QUFDQTs7O0FBSUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUFBOzs7QSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./packages/caeDesign/src/viewerWrapper/commands/moveJointByMirror/commandMoveJointByMirror.ts\n");
|
|
6790
6790
|
|
|
6791
6791
|
/***/ }),
|
|
6792
6792
|
|