{"remainingRequest":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js!/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js??ref--7-2!/Users/jaslan/Development/nifi-fds/webapp/components/flow-design-system/fds-demo.js","dependencies":[{"path":"/Users/jaslan/Development/nifi-fds/webapp/components/flow-design-system/fds-demo.js","mtime":1563472991608},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/cache-loader/dist/cjs.js","mtime":499162500000},{"path":"/Users/jaslan/Development/nifi-fds/angular-url-loader.js","mtime":1562689731025},{"path":"/Users/jaslan/Development/nifi-fds/node_modules/babel-loader/lib/index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:ZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgaWYgKHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gInN5bWJvbCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/ICJzeW1ib2wiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9CgovKgogKiBMaWNlbnNlZCB0byB0aGUgQXBhY2hlIFNvZnR3YXJlIEZvdW5kYXRpb24gKEFTRikgdW5kZXIgb25lIG9yIG1vcmUKICogY29udHJpYnV0b3IgbGljZW5zZSBhZ3JlZW1lbnRzLiAgU2VlIHRoZSBOT1RJQ0UgZmlsZSBkaXN0cmlidXRlZCB3aXRoCiAqIHRoaXMgd29yayBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgY29weXJpZ2h0IG93bmVyc2hpcC4KICogVGhlIEFTRiBsaWNlbnNlcyB0aGlzIGZpbGUgdG8gWW91IHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAKICogKHRoZSAnTGljZW5zZScpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGgKICogdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKICoKICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogKgogKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgQkFTSVMsCiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKi8KaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7CmltcG9ydCB7IFRkRGF0YVRhYmxlU2VydmljZSB9IGZyb20gJ0Bjb3ZhbGVudC9jb3JlL2RhdGEtdGFibGUnOwppbXBvcnQgeyBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbCc7CmltcG9ydCB7IEZkc0RpYWxvZ1NlcnZpY2UsIEZkc1NuYWNrQmFyU2VydmljZSwgRmRzQW5pbWF0aW9ucyB9IGZyb20gJ0BuaWZpLWZkcy9jb3JlJzsKaW1wb3J0IEZkc1NlcnZpY2UgZnJvbSAnd2ViYXBwL3NlcnZpY2VzL2Zkcy5zZXJ2aWNlLmpzJzsKaW1wb3J0IEZkc0RlbW9EaWFsb2cgZnJvbSAnd2ViYXBwL2NvbXBvbmVudHMvZmxvdy1kZXNpZ24tc3lzdGVtL2RpYWxvZ3MvZGVtby9mZHMtZGVtby1kaWFsb2cuanMnOwoKdmFyIE5VTUJFUl9GT1JNQVQgPSBmdW5jdGlvbiBOVU1CRVJfRk9STUFUKHYpIHsKICByZXR1cm4gdjsKfTsKCnZhciBERUNJTUFMX0ZPUk1BVCA9IGZ1bmN0aW9uIERFQ0lNQUxfRk9STUFUKHYpIHsKICByZXR1cm4gdi50b0ZpeGVkKDIpOwp9OwoKdmFyIGRhdGUgPSBuZXcgRGF0ZSgpOwovKioKICogRmRzRGVtbyBjb25zdHJ1Y3Rvci4KICoKICogQHBhcmFtIEZkc1NuYWNrQmFyU2VydmljZSAgICBUaGUgRkRTIHNuYWNrIGJhciBzZXJ2aWNlIG1vZHVsZS4KICogQHBhcmFtIEZkc1NlcnZpY2UgICAgICAgICAgICBUaGUgRkRTIHNlcnZpY2UgbW9kdWxlLgogKiBAcGFyYW0gZGlhbG9nICAgICAgICAgICAgICAgIFRoZSBhbmd1bGFyIG1hdGVyaWFsIGRpYWxvZyBtb2R1bGUuCiAqIEBwYXJhbSBUZERpYWxvZ1NlcnZpY2UgICAgICAgVGhlIGNvdmFsZW50IGRpYWxvZyBzZXJ2aWNlIG1vZHVsZS4KICogQHBhcmFtIFRkRGF0YVRhYmxlU2VydmljZSAgICBUaGUgY292YWxlbnQgZGF0YSB0YWJsZSBzZXJ2aWNlIG1vZHVsZS4KICogQGNvbnN0cnVjdG9yCiAqLwoKZnVuY3Rpb24gRmRzRGVtbyhGZHNTbmFja0JhclNlcnZpY2UsIEZkc1NlcnZpY2UsIGRpYWxvZywgVGREYXRhVGFibGVTZXJ2aWNlLCBGZHNEaWFsb2dTZXJ2aWNlKSB7CiAgdGhpcy5mZHNTZXJ2aWNlID0gRmRzU2VydmljZTsgLy88ZWRpdG9yLWZvbGQgZGVzYz0nU25hY2sgQmFycyc+CgogIHRoaXMuc25hY2tCYXJTZXJ2aWNlID0gRmRzU25hY2tCYXJTZXJ2aWNlOyAvLzwvZWRpdG9yLWZvbGQ+CiAgLy88ZWRpdG9yLWZvbGQgZGVzYz0nRGlhbG9nJz4KCiAgdGhpcy5kaWFsb2cgPSBkaWFsb2c7IC8vPC9lZGl0b3ItZm9sZD4KICAvLzxlZGl0b3ItZm9sZCBkZXNjPSdTaW1wbGUgRGlhbG9ncyc+CgogIHRoaXMuZGlhbG9nU2VydmljZSA9IEZkc0RpYWxvZ1NlcnZpY2U7IC8vPC9lZGl0b3ItZm9sZD4KICAvLzxlZGl0b3ItZm9sZCBkZXNjPSdFeHBhbnNpb24gUGFuZWwnPgoKICB0aGlzLmV4cGFuZENvbGxhcHNlRXhwYW5zaW9uMU1zZyA9ICdObyBleHBhbmRlZC9jb2xsYXBzZWQgZGV0ZWN0ZWQgeWV0JzsKICB0aGlzLmV4cGFuc2lvbjEgPSBmYWxzZTsKICB0aGlzLmRpc2FibGVkID0gZmFsc2U7IC8vPC9lZGl0b3ItZm9sZD4KICAvLzxlZGl0b3ItZm9sZCBkZXNjPSdBdXRvY29tcGxldGUnPgoKICB0aGlzLmN1cnJlbnRTdGF0ZSA9ICcnOwogIHRoaXMucmVhY3RpdmVTdGF0ZXMgPSAnJzsKICB0aGlzLnRkU3RhdGVzID0gW107CiAgdGhpcy50ZERpc2FibGVkID0gZmFsc2U7CiAgdGhpcy5zdGF0ZXMgPSBbewogICAgY29kZTogJ0FMJywKICAgIG5hbWU6ICdBbGFiYW1hJwogIH0sIHsKICAgIGNvZGU6ICdBSycsCiAgICBuYW1lOiAnQWxhc2thJwogIH0sIHsKICAgIGNvZGU6ICdBWicsCiAgICBuYW1lOiAnQXJpem9uYScKICB9LCB7CiAgICBjb2RlOiAnQVInLAogICAgbmFtZTogJ0Fya2Fuc2FzJwogIH0sIHsKICAgIGNvZGU6ICdDQScsCiAgICBuYW1lOiAnQ2FsaWZvcm5pYScKICB9LCB7CiAgICBjb2RlOiAnQ08nLAogICAgbmFtZTogJ0NvbG9yYWRvJwogIH0sIHsKICAgIGNvZGU6ICdDVCcsCiAgICBuYW1lOiAnQ29ubmVjdGljdXQnCiAgfSwgewogICAgY29kZTogJ0RFJywKICAgIG5hbWU6ICdEZWxhd2FyZScKICB9LCB7CiAgICBjb2RlOiAnRkwnLAogICAgbmFtZTogJ0Zsb3JpZGEnCiAgfSwgewogICAgY29kZTogJ0dBJywKICAgIG5hbWU6ICdHZW9yZ2lhJwogIH0sIHsKICAgIGNvZGU6ICdISScsCiAgICBuYW1lOiAnSGF3YWlpJwogIH0sIHsKICAgIGNvZGU6ICdJRCcsCiAgICBuYW1lOiAnSWRhaG8nCiAgfSwgewogICAgY29kZTogJ0lMJywKICAgIG5hbWU6ICdJbGxpbm9pcycKICB9LCB7CiAgICBjb2RlOiAnSU4nLAogICAgbmFtZTogJ0luZGlhbmEnCiAgfSwgewogICAgY29kZTogJ0lBJywKICAgIG5hbWU6ICdJb3dhJwogIH0sIHsKICAgIGNvZGU6ICdLUycsCiAgICBuYW1lOiAnS2Fuc2FzJwogIH0sIHsKICAgIGNvZGU6ICdLWScsCiAgICBuYW1lOiAnS2VudHVja3knCiAgfSwgewogICAgY29kZTogJ0xBJywKICAgIG5hbWU6ICdMb3Vpc2lhbmEnCiAgfSwgewogICAgY29kZTogJ01FJywKICAgIG5hbWU6ICdNYWluZScKICB9LCB7CiAgICBjb2RlOiAnTUQnLAogICAgbmFtZTogJ01hcnlsYW5kJwogIH0sIHsKICAgIGNvZGU6ICdNQScsCiAgICBuYW1lOiAnTWFzc2FjaHVzZXR0cycKICB9LCB7CiAgICBjb2RlOiAnTUknLAogICAgbmFtZTogJ01pY2hpZ2FuJwogIH0sIHsKICAgIGNvZGU6ICdNTicsCiAgICBuYW1lOiAnTWlubmVzb3RhJwogIH0sIHsKICAgIGNvZGU6ICdNUycsCiAgICBuYW1lOiAnTWlzc2lzc2lwcGknCiAgfSwgewogICAgY29kZTogJ01PJywKICAgIG5hbWU6ICdNaXNzb3VyaScKICB9LCB7CiAgICBjb2RlOiAnTVQnLAogICAgbmFtZTogJ01vbnRhbmEnCiAgfSwgewogICAgY29kZTogJ05FJywKICAgIG5hbWU6ICdOZWJyYXNrYScKICB9LCB7CiAgICBjb2RlOiAnTlYnLAogICAgbmFtZTogJ05ldmFkYScKICB9LCB7CiAgICBjb2RlOiAnTkgnLAogICAgbmFtZTogJ05ldyBIYW1wc2hpcmUnCiAgfSwgewogICAgY29kZTogJ05KJywKICAgIG5hbWU6ICdOZXcgSmVyc2V5JwogIH0sIHsKICAgIGNvZGU6ICdOTScsCiAgICBuYW1lOiAnTmV3IE1leGljbycKICB9LCB7CiAgICBjb2RlOiAnTlknLAogICAgbmFtZTogJ05ldyBZb3JrJwogIH0sIHsKICAgIGNvZGU6ICdOQycsCiAgICBuYW1lOiAnTm9ydGggQ2Fyb2xpbmEnCiAgfSwgewogICAgY29kZTogJ05EJywKICAgIG5hbWU6ICdOb3J0aCBEYWtvdGEnCiAgfSwgewogICAgY29kZTogJ09IJywKICAgIG5hbWU6ICdPaGlvJwogIH0sIHsKICAgIGNvZGU6ICdPSycsCiAgICBuYW1lOiAnT2tsYWhvbWEnCiAgfSwgewogICAgY29kZTogJ09SJywKICAgIG5hbWU6ICdPcmVnb24nCiAgfSwgewogICAgY29kZTogJ1BBJywKICAgIG5hbWU6ICdQZW5uc3lsdmFuaWEnCiAgfSwgewogICAgY29kZTogJ1JJJywKICAgIG5hbWU6ICdSaG9kZSBJc2xhbmQnCiAgfSwgewogICAgY29kZTogJ1NDJywKICAgIG5hbWU6ICdTb3V0aCBDYXJvbGluYScKICB9LCB7CiAgICBjb2RlOiAnU0QnLAogICAgbmFtZTogJ1NvdXRoIERha290YScKICB9LCB7CiAgICBjb2RlOiAnVE4nLAogICAgbmFtZTogJ1Rlbm5lc3NlZScKICB9LCB7CiAgICBjb2RlOiAnVFgnLAogICAgbmFtZTogJ1RleGFzJwogIH0sIHsKICAgIGNvZGU6ICdVVCcsCiAgICBuYW1lOiAnVXRhaCcKICB9LCB7CiAgICBjb2RlOiAnVlQnLAogICAgbmFtZTogJ1Zlcm1vbnQnCiAgfSwgewogICAgY29kZTogJ1ZBJywKICAgIG5hbWU6ICdWaXJnaW5pYScKICB9LCB7CiAgICBjb2RlOiAnV0EnLAogICAgbmFtZTogJ1dhc2hpbmd0b24nCiAgfSwgewogICAgY29kZTogJ1dWJywKICAgIG5hbWU6ICdXZXN0IFZpcmdpbmlhJwogIH0sIHsKICAgIGNvZGU6ICdXSScsCiAgICBuYW1lOiAnV2lzY29uc2luJwogIH0sIHsKICAgIGNvZGU6ICdXWScsCiAgICBuYW1lOiAnV3lvbWluZycKICB9XTsgLy88L2VkaXRvci1mb2xkPgogIC8vPGVkaXRvci1mb2xkIGRlc2M9J1NlYXJjaGFibGUgRXhwYW5zaW9uIFBhbmVscyc+CgogIHRoaXMuZGF0YVRhYmxlU2VydmljZSA9IFRkRGF0YVRhYmxlU2VydmljZTsKICB0aGlzLmRyb3BsZXRzID0gW3sKICAgIGlkOiAnMjNmNmNjNTktMDE1Ni0xMDAwLTA5YjQtMmIwNjEwMDg5MDkwJywKICAgIG5hbWU6ICdEZWNvbXByZXNzaW9uX0NpcmN1bGFyX0Zsb3cnLAogICAgZGlzcGxheU5hbWU6ICdEZWNvbXByZXNzZWQgQ2lyY3VsYXIgZmxvdycsCiAgICB0eXBlOiAnZmxvdycsCiAgICBzdWJsYWJlbDogJ0Egc3VibGFiZWwnLAogICAgY29tcGxpYW50OiB7CiAgICAgIGlkOiAnMjVmZDZ2djg3LTM1NDktMDAwMS0wNWc2LTRkNDU2Nzg5MDc2NScsCiAgICAgIGxhYmVsOiAnQ29tcGxpYW50JywKICAgICAgdHlwZTogJ2NlcnRpZmljYXRpb24nCiAgICB9LAogICAgZmxlZXQ6IHsKICAgICAgaWQ6ICcyM2Y2Y2M1OS0zNTQ5LTAwMDEtMDVnNi00ZDQ1Njc4OTA3NjUnLAogICAgICBsYWJlbDogJ0ZsZWV0JywKICAgICAgdHlwZTogJ2NlcnRpZmljYXRpb24nCiAgICB9LAogICAgcHJvZDogewogICAgICBpZDogJzUyZmQ2dnY4Ny0zNTQ5LTAwMDEtMDVnNi00ZDQ1Njc4OTA3NjUnLAogICAgICBsYWJlbDogJ1Byb2R1Y3Rpb24gUmVhZHknLAogICAgICB0eXBlOiAnY2VydGlmaWNhdGlvbicKICAgIH0sCiAgICBzZWN1cmU6IHsKICAgICAgaWQ6ICczMmY2Y2M1OS0zNTQ5LTAwMDEtMDVnNi00ZDQ1Njc4OTA3NjUnLAogICAgICBsYWJlbDogJ1NlY3VyZScsCiAgICAgIHR5cGU6ICdjZXJ0aWZpY2F0aW9uJwogICAgfSwKICAgIHZlcnNpb25zOiBbewogICAgICBpZDogJzIzZjZjYzU5LTAxNTYtMTAwMC0wNmI0LTJiMDgxMDA4OTA5MCcsCiAgICAgIHJldmlzaW9uOiAnMScsCiAgICAgIGRlcGVuZGVudEZsb3dzOiBbewogICAgICAgIGlkOiAnMjVmZDZ2djg3LTM1NDktMDAwMS0wNWc2LTRkNDU2Nzg5MDc2NScKICAgICAgfV0sCiAgICAgIGNyZWF0ZWQ6IGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSAtIDEpLAogICAgICB1cGRhdGVkOiBuZXcgRGF0ZSgpCiAgICB9LCB7CiAgICAgIGlkOiAnMjVmZDZ2djg3LTM1NDktMDAwMS0wNWc2LTRkNDU2Nzg5MDc2NScsCiAgICAgIHJldmlzaW9uOiAnMicsCiAgICAgIGRlcGVuZGVudEZsb3dzOiBbewogICAgICAgIGlkOiAnMjNmNmNjNTktMDE1Ni0xMDAwLTA2YjQtMmIwODEwMDg5MDkwJwogICAgICB9XSwKICAgICAgY3JlYXRlZDogbmV3IERhdGUoKSwKICAgICAgdXBkYXRlZDogbmV3IERhdGUoKQogICAgfV0sCiAgICBmbG93czogW10sCiAgICBleHRlbnNpb25zOiBbXSwKICAgIGFzc2V0czogW10sCiAgICBhY3Rpb25zOiBbewogICAgICAnbmFtZSc6ICdEZWxldGUnLAogICAgICAnaWNvbic6ICdmYSBmYS1jbG9zZScsCiAgICAgICd0b29sdGlwJzogJ0RlbGV0ZSBVc2VyJwogICAgfSwgewogICAgICAnbmFtZSc6ICdNYW5hZ2UnLAogICAgICAnaWNvbic6ICdmYSBmYS11c2VyJywKICAgICAgJ3Rvb2x0aXAnOiAnTWFuYWdlIFVzZXInCiAgICB9LCB7CiAgICAgICduYW1lJzogJ0FjdGlvbiAzJywKICAgICAgJ2ljb24nOiAnZmEgZmEtcXVlc3Rpb24nLAogICAgICAndG9vbHRpcCc6ICdXaGF0ZXZlciBlbHNlIHdlIHdhbnQgdG8gZG8uLi4nCiAgICB9XQogIH0sIHsKICAgIGlkOiAnMjVmZDZ2djg3LTMyNDktMDAwMS0wNWc2LTRkNDc2Nzg5MDc2NScsCiAgICBuYW1lOiAnRGF0ZUNvbnZlcnNpb24nLAogICAgZGlzcGxheU5hbWU6ICdEYXRlIGNvbnZlcnNpb24nLAogICAgdHlwZTogJ2Fzc2V0JywKICAgIHN1YmxhYmVsOiAnQSBzdWJsYWJlbCcsCiAgICBjb21wbGlhbnQ6IHsKICAgICAgaWQ6ICcyNWZkNnZ2MzQtMzU0OS0wMDAxLTA1ZzYtNGQ0NTY3ODkwNzY1JywKICAgICAgbGFiZWw6ICdDb21wbGlhbnQnLAogICAgICB0eXBlOiAnY2VydGlmaWNhdGlvbicKICAgIH0sCiAgICBwcm9kOiB7CiAgICAgIGlkOiAnNTJ2bjZ2djg3LTM1NDktMDAwMS0wNWc2LTRkNDU2Nzg5MDc2NScsCiAgICAgIGxhYmVsOiAnUHJvZHVjdGlvbiBSZWFkeScsCiAgICAgIHR5cGU6ICdjZXJ0aWZpY2F0aW9uJwogICAgfSwKICAgIHZlcnNpb25zOiBbewogICAgICBpZDogJzIzZjZpYzU5LTAxNTYtMTAwMC0wNmI0LTJiMDgxMDA4OTA5MCcsCiAgICAgIHJldmlzaW9uOiAnMScsCiAgICAgIGRlcGVuZGVudEZsb3dzOiBbewogICAgICAgIGlkOiAnMjNmNmNjMTktMDE1Ni0xMDAwLTA2YjQtMmIwODEwMDg5MDkwJwogICAgICB9XSwKICAgICAgY3JlYXRlZDogbmV3IERhdGUoKSwKICAgICAgdXBkYXRlZDogbmV3IERhdGUoKQogICAgfV0sCiAgICBmbG93czogW10sCiAgICBleHRlbnNpb25zOiBbXSwKICAgIGFzc2V0czogW10sCiAgICBhY3Rpb25zOiBbewogICAgICAnbmFtZSc6ICdEZWxldGUnLAogICAgICAnaWNvbic6ICdmYSBmYS1jbG9zZScsCiAgICAgICd0b29sdGlwJzogJ0RlbGV0ZSBVc2VyJwogICAgfV0KICB9LCB7CiAgICBpZDogJzUyZmQ2dnY4Ny0zMjk0LTAwMDEtMDVnNi00ZDQ3Njc4OTA3NjUnLAogICAgbmFtZTogJ25pZmktZW1haWwtYnVuZGxlJywKICAgIGRpc3BsYXlOYW1lOiAnbmlmaS1lbWFpbC1idW5kbGUnLAogICAgdHlwZTogJ2V4dGVuc2lvbicsCiAgICBzdWJsYWJlbDogJ0Egc3VibGFiZWwnLAogICAgY29tcGxpYW50OiB7CiAgICAgIGlkOiAnMzNmZDZ2djg3LTM1NDktMDAwMS0wNWc2LTRkNDU2Nzg5MDc2NScsCiAgICAgIGxhYmVsOiAnQ29tcGxpYW50JywKICAgICAgdGVzdDogewogICAgICAgIGxhYmVsOiAndGVzdCcKICAgICAgfSwKICAgICAgdHlwZTogJ2NlcnRpZmljYXRpb24nCiAgICB9LAogICAgdmVyc2lvbnM6IFt7CiAgICAgIGlkOiAnMjNkM2NjNTktMDE1Ni0xMDAwLTA2YjQtMmIwODEwMDg5MDkwJywKICAgICAgcmV2aXNpb246ICcxJywKICAgICAgZGVwZW5kZW50Rmxvd3M6IFt7CiAgICAgICAgaWQ6ICcyM2Y2Y2M4OS0wMTU2LTEwMDAtMDZiNC0yYjA4MTAwODkwOTAnCiAgICAgIH1dLAogICAgICBjcmVhdGVkOiBuZXcgRGF0ZSgpLAogICAgICB1cGRhdGVkOiBuZXcgRGF0ZSgpCiAgICB9XSwKICAgIGZsb3dzOiBbXSwKICAgIGV4dGVuc2lvbnM6IFtdLAogICAgYXNzZXRzOiBbXSwKICAgIGFjdGlvbnM6IFt7CiAgICAgICduYW1lJzogJ0RlbGV0ZScsCiAgICAgICdpY29uJzogJ2ZhIGZhLWNsb3NlJywKICAgICAgJ3Rvb2x0aXAnOiAnRGVsZXRlIFVzZXInCiAgICB9LCB7CiAgICAgICduYW1lJzogJ01hbmFnZScsCiAgICAgICdpY29uJzogJ2ZhIGZhLXVzZXInLAogICAgICAndG9vbHRpcCc6ICdNYW5hZ2UgVXNlcicKICAgIH1dCiAgfV07CiAgdGhpcy5maWx0ZXJlZERyb3BsZXRzID0gW107CiAgdGhpcy5kcm9wbGV0Q29sdW1ucyA9IFt7CiAgICBuYW1lOiAnaWQnLAogICAgbGFiZWw6ICdJRCcsCiAgICBzb3J0YWJsZTogdHJ1ZQogIH0sIHsKICAgIG5hbWU6ICduYW1lJywKICAgIGxhYmVsOiAnTmFtZScsCiAgICBzb3J0YWJsZTogdHJ1ZQogIH0sIHsKICAgIG5hbWU6ICdkaXNwbGF5TmFtZScsCiAgICBsYWJlbDogJ0Rpc3BsYXkgTmFtZScsCiAgICBzb3J0YWJsZTogdHJ1ZQogIH0sIHsKICAgIG5hbWU6ICdzdWJsYWJlbCcsCiAgICBsYWJlbDogJ0xhYmVsJywKICAgIHNvcnRhYmxlOiB0cnVlCiAgfSwgewogICAgbmFtZTogJ3R5cGUnLAogICAgbGFiZWw6ICdUeXBlJywKICAgIHNvcnRhYmxlOiB0cnVlCiAgfV07CiAgdGhpcy5hY3RpdmVEcm9wbGV0Q29sdW1uID0gdGhpcy5kcm9wbGV0Q29sdW1uc1swXTsKICB0aGlzLmF1dG9Db21wbGV0ZURyb3BsZXRzID0gW107CiAgdGhpcy5kcm9wbGV0c1NlYXJjaFRlcm1zID0gW107IC8vPC9lZGl0b3ItZm9sZD4KICAvLzxlZGl0b3ItZm9sZCBkZXNjPSdEYXRhIFRhYmxlcyc+CgogIHRoaXMuZGF0YSA9IFt7CiAgICAnaWQnOiAxLAogICAgJ25hbWUnOiAnRnJvemVuIHlvZ3VydCcsCiAgICAndHlwZSc6ICdJY2UgY3JlYW0nLAogICAgJ2NhbG9yaWVzJzogMTU5LjAsCiAgICAnZmF0JzogNi4wLAogICAgJ2NhcmJzJzogMjQuMCwKICAgICdwcm90ZWluJzogNC4wLAogICAgJ3NvZGl1bSc6IDg3LjAsCiAgICAnY2FsY2l1bSc6IDE0LjAsCiAgICAnaXJvbic6IDEuMCwKICAgICdjb21tZW50cyc6ICdJIGxvdmUgZnJveW8hJywKICAgICdhY3Rpb25zJzogW3sKICAgICAgJ25hbWUnOiAnQWN0aW9uIDEnLAogICAgICAnaWNvbic6ICdmYSBmYS11c2VyJywKICAgICAgJ3Rvb2x0aXAnOiAnTWFuYWdlIFVzZXJzJwogICAgfSwgewogICAgICAnbmFtZSc6ICdBY3Rpb24gMicsCiAgICAgICdpY29uJzogJ2ZhIGZhLWtleScsCiAgICAgICd0b29sdGlwJzogJ01hbmFnZSBQZXJtaXNzaW9ucycKICAgIH1dCiAgfSwgewogICAgJ2lkJzogMiwKICAgICduYW1lJzogJ0ljZSBjcmVhbSBzYW5kd2ljaCcsCiAgICAndHlwZSc6ICdJY2UgY3JlYW0nLAogICAgJ2NhbG9yaWVzJzogMjM3LjAsCiAgICAnZmF0JzogOS4wLAogICAgJ2NhcmJzJzogMzcuMCwKICAgICdwcm90ZWluJzogNC4zLAogICAgJ3NvZGl1bSc6IDEyOS4wLAogICAgJ2NhbGNpdW0nOiA4LjAsCiAgICAnaXJvbic6IDEuMCwKICAgICdhY3Rpb25zJzogW3sKICAgICAgJ25hbWUnOiAnQWN0aW9uIDEnLAogICAgICAnaWNvbic6ICdmYSBmYS11c2VyJywKICAgICAgJ3Rvb2x0aXAnOiAnTWFuYWdlIFVzZXJzJwogICAgfSwgewogICAgICAnbmFtZSc6ICdBY3Rpb24gMicsCiAgICAgICdpY29uJzogJ2ZhIGZhLWtleScsCiAgICAgICd0b29sdGlwJzogJ01hbmFnZSBQZXJtaXNzaW9ucycKICAgIH0sIHsKICAgICAgJ25hbWUnOiAnQWN0aW9uIDMnLAogICAgICAndG9vbHRpcCc6ICdBY3Rpb24gMycKICAgIH0sIHsKICAgICAgJ25hbWUnOiAnQWN0aW9uIDQnLAogICAgICAnZGlzYWJsZWQnOiB0cnVlLAogICAgICAndG9vbHRpcCc6ICdBY3Rpb24gNCcKICAgIH0sIHsKICAgICAgJ25hbWUnOiAnQWN0aW9uIDUnLAogICAgICAndG9vbHRpcCc6ICdBY3Rpb24gNScKICAgIH1dCiAgfSwgewogICAgJ2lkJzogMywKICAgICduYW1lJzogJ0VjbGFpcicsCiAgICAndHlwZSc6ICdQYXN0cnknLAogICAgJ2NhbG9yaWVzJzogMjYyLjAsCiAgICAnZmF0JzogMTYuMCwKICAgICdjYXJicyc6IDI0LjAsCiAgICAncHJvdGVpbic6IDYuMCwKICAgICdzb2RpdW0nOiAzMzcuMCwKICAgICdjYWxjaXVtJzogNi4wLAogICAgJ2lyb24nOiA3LjAsCiAgICAnYWN0aW9ucyc6IFt7CiAgICAgICduYW1lJzogJ0FjdGlvbiAxJywKICAgICAgJ2ljb24nOiAnZmEgZmEtdXNlcicsCiAgICAgICd0b29sdGlwJzogJ01hbmFnZSBVc2VycycKICAgIH0sIHsKICAgICAgJ25hbWUnOiAnQWN0aW9uIDInLAogICAgICAnaWNvbic6ICdmYSBmYS1rZXknLAogICAgICAndG9vbHRpcCc6ICdNYW5hZ2UgUGVybWlzc2lvbnMnCiAgICB9LCB7CiAgICAgICduYW1lJzogJ0FjdGlvbiAzJywKICAgICAgJ3Rvb2x0aXAnOiAnQWN0aW9uIDMnCiAgICB9LCB7CiAgICAgICduYW1lJzogJ0FjdGlvbiA0JywKICAgICAgJ2Rpc2FibGVkJzogdHJ1ZSwKICAgICAgJ3Rvb2x0aXAnOiAnQWN0aW9uIDQnCiAgICB9LCB7CiAgICAgICduYW1lJzogJ0FjdGlvbiA1JywKICAgICAgJ3Rvb2x0aXAnOiAnQWN0aW9uIDUnCiAgICB9XQogIH0sIHsKICAgICdpZCc6IDQsCiAgICAnbmFtZSc6ICdDdXBjYWtlJywKICAgICd0eXBlJzogJ1Bhc3RyeScsCiAgICAnY2Fsb3JpZXMnOiAzMDUuMCwKICAgICdmYXQnOiAzLjcsCiAgICAnY2FyYnMnOiA2Ny4wLAogICAgJ3Byb3RlaW4nOiA0LjMsCiAgICAnc29kaXVtJzogNDEzLjAsCiAgICAnY2FsY2l1bSc6IDMuMCwKICAgICdpcm9uJzogOC4wLAogICAgJ2FjdGlvbnMnOiBbewogICAgICAnbmFtZSc6ICdBY3Rpb24gMScsCiAgICAgICdpY29uJzogJ2ZhIGZhLXVzZXInLAogICAgICAndG9vbHRpcCc6ICdNYW5hZ2UgVXNlcnMnCiAgICB9LCB7CiAgICAgICduYW1lJzogJ0FjdGlvbiAyJywKICAgICAgJ2ljb24nOiAnZmEgZmEta2V5JywKICAgICAgJ3Rvb2x0aXAnOiAnTWFuYWdlIFBlcm1pc3Npb25zJwogICAgfSwgewogICAgICAnbmFtZSc6ICdBY3Rpb24gMycsCiAgICAgICd0b29sdGlwJzogJ0FjdGlvbiAzJwogICAgfSwgewogICAgICAnbmFtZSc6ICdBY3Rpb24gNCcsCiAgICAgICdkaXNhYmxlZCc6IHRydWUsCiAgICAgICd0b29sdGlwJzogJ0FjdGlvbiA0JwogICAgfSwgewogICAgICAnbmFtZSc6ICdBY3Rpb24gNScsCiAgICAgICd0b29sdGlwJzogJ0FjdGlvbiA1JwogICAgfV0KICB9LCB7CiAgICAnaWQnOiA1LAogICAgJ25hbWUnOiAnSmVsbHkgYmVhbicsCiAgICAndHlwZSc6ICdDYW5keScsCiAgICAnY2Fsb3JpZXMnOiAzNzUuMCwKICAgICdmYXQnOiAwLjAsCiAgICAnY2FyYnMnOiA5NC4wLAogICAgJ3Byb3RlaW4nOiAwLjAsCiAgICAnc29kaXVtJzogNTAuMCwKICAgICdjYWxjaXVtJzogMC4wLAogICAgJ2lyb24nOiAwLjAKICB9LCB7CiAgICAnaWQnOiA2LAogICAgJ25hbWUnOiAnTG9sbGlwb3AnLAogICAgJ3R5cGUnOiAnQ2FuZHknLAogICAgJ2NhbG9yaWVzJzogMzkyLjAsCiAgICAnZmF0JzogMC4yLAogICAgJ2NhcmJzJzogOTguMCwKICAgICdwcm90ZWluJzogMC4wLAogICAgJ3NvZGl1bSc6IDM4LjAsCiAgICAnY2FsY2l1bSc6IDAuMCwKICAgICdpcm9uJzogMi4wCiAgfSwgewogICAgJ2lkJzogNywKICAgICduYW1lJzogJ0hvbmV5Y29tYicsCiAgICAndHlwZSc6ICdPdGhlcicsCiAgICAnY2Fsb3JpZXMnOiA0MDguMCwKICAgICdmYXQnOiAzLjIsCiAgICAnY2FyYnMnOiA4Ny4wLAogICAgJ3Byb3RlaW4nOiA2LjUsCiAgICAnc29kaXVtJzogNTYyLjAsCiAgICAnY2FsY2l1bSc6IDAuMCwKICAgICdpcm9uJzogNDUuMAogIH0sIHsKICAgICdpZCc6IDgsCiAgICAnbmFtZSc6ICdEb251dCcsCiAgICAndHlwZSc6ICdQYXN0cnknLAogICAgJ2NhbG9yaWVzJzogNDUyLjAsCiAgICAnZmF0JzogMjUuMCwKICAgICdjYXJicyc6IDUxLjAsCiAgICAncHJvdGVpbic6IDQuOSwKICAgICdzb2RpdW0nOiAzMjYuMCwKICAgICdjYWxjaXVtJzogMi4wLAogICAgJ2lyb24nOiAyMi4wCiAgfSwgewogICAgJ2lkJzogOSwKICAgICduYW1lJzogJ0tpdEthdCcsCiAgICAndHlwZSc6ICdDYW5keScsCiAgICAnY2Fsb3JpZXMnOiA1MTguMCwKICAgICdmYXQnOiAyNi4wLAogICAgJ2NhcmJzJzogNjUuMCwKICAgICdwcm90ZWluJzogNy4wLAogICAgJ3NvZGl1bSc6IDU0LjAsCiAgICAnY2FsY2l1bSc6IDEyLjAsCiAgICAnaXJvbic6IDYuMAogIH0sIHsKICAgICdpZCc6IDEwLAogICAgJ25hbWUnOiAnQ2hvY29sYXRlJywKICAgICd0eXBlJzogJ0NhbmR5JywKICAgICdjYWxvcmllcyc6IDUxOC4wLAogICAgJ2ZhdCc6IDI2LjAsCiAgICAnY2FyYnMnOiA2NS4wLAogICAgJ3Byb3RlaW4nOiA3LjAsCiAgICAnc29kaXVtJzogNTQuMCwKICAgICdjYWxjaXVtJzogMTIuMCwKICAgICdpcm9uJzogNi4wCiAgfSwgewogICAgJ2lkJzogMTEsCiAgICAnbmFtZSc6ICdDaGFtb3knLAogICAgJ3R5cGUnOiAnQ2FuZHknLAogICAgJ2NhbG9yaWVzJzogNTE4LjAsCiAgICAnZmF0JzogMjYuMCwKICAgICdjYXJicyc6IDY1LjAsCiAgICAncHJvdGVpbic6IDcuMCwKICAgICdzb2RpdW0nOiA1NC4wLAogICAgJ2NhbGNpdW0nOiAxMi4wLAogICAgJ2lyb24nOiA2LjAKICB9XTsKICB0aGlzLmZpbHRlcmVkRGF0YSA9IHRoaXMuZGF0YTsKICB0aGlzLmZpbHRlcmVkVG90YWwgPSB0aGlzLmRhdGEubGVuZ3RoOwogIHRoaXMuY29sdW1ucyA9IFt7CiAgICBuYW1lOiAnY29tbWVudHMnLAogICAgbGFiZWw6ICdDb21tZW50cycsCiAgICB3aWR0aDogMTAKICB9LCB7CiAgICBuYW1lOiAnbmFtZScsCiAgICBsYWJlbDogJ0Rlc3NlcnQgKDEwMGcgc2VydmluZyknLAogICAgc29ydGFibGU6IHRydWUsCiAgICB3aWR0aDogMTAKICB9LCB7CiAgICBuYW1lOiAndHlwZScsCiAgICBsYWJlbDogJ1R5cGUnLAogICAgc29ydGFibGU6IHRydWUsCiAgICB3aWR0aDogMTAKICB9LCB7CiAgICBuYW1lOiAnY2Fsb3JpZXMnLAogICAgbGFiZWw6ICdDYWxvcmllcycsCiAgICBudW1lcmljOiB0cnVlLAogICAgZm9ybWF0OiBOVU1CRVJfRk9STUFULAogICAgc29ydGFibGU6IHRydWUsCiAgICB3aWR0aDogMTAKICB9LCB7CiAgICBuYW1lOiAnZmF0JywKICAgIGxhYmVsOiAnRmF0IChnKScsCiAgICBudW1lcmljOiB0cnVlLAogICAgZm9ybWF0OiBERUNJTUFMX0ZPUk1BVCwKICAgIHNvcnRhYmxlOiB0cnVlLAogICAgd2lkdGg6IDEwCiAgfSwgewogICAgbmFtZTogJ2NhcmJzJywKICAgIGxhYmVsOiAnQ2FyYnMgKGcpJywKICAgIG51bWVyaWM6IHRydWUsCiAgICBmb3JtYXQ6IE5VTUJFUl9GT1JNQVQsCiAgICBzb3J0YWJsZTogdHJ1ZSwKICAgIHdpZHRoOiAxMAogIH0sIHsKICAgIG5hbWU6ICdwcm90ZWluJywKICAgIGxhYmVsOiAnUHJvdGVpbiAoZyknLAogICAgbnVtZXJpYzogdHJ1ZSwKICAgIGZvcm1hdDogREVDSU1BTF9GT1JNQVQsCiAgICBzb3J0YWJsZTogdHJ1ZSwKICAgIHdpZHRoOiAxMAogIH0sIHsKICAgIG5hbWU6ICdzb2RpdW0nLAogICAgbGFiZWw6ICdTb2RpdW0gKG1nKScsCiAgICBudW1lcmljOiB0cnVlLAogICAgZm9ybWF0OiBOVU1CRVJfRk9STUFULAogICAgc29ydGFibGU6IHRydWUsCiAgICB3aWR0aDogMTAKICB9LCB7CiAgICBuYW1lOiAnY2FsY2l1bScsCiAgICBsYWJlbDogJ0NhbGNpdW0gKCUpJywKICAgIG51bWVyaWM6IHRydWUsCiAgICBmb3JtYXQ6IE5VTUJFUl9GT1JNQVQsCiAgICBzb3J0YWJsZTogdHJ1ZSwKICAgIHdpZHRoOiAxMAogIH0sIHsKICAgIG5hbWU6ICdpcm9uJywKICAgIGxhYmVsOiAnSXJvbiAoJSknLAogICAgbnVtZXJpYzogdHJ1ZSwKICAgIGZvcm1hdDogTlVNQkVSX0ZPUk1BVCwKICAgIHdpZHRoOiAxMAogIH1dOwogIHRoaXMuYWxsUm93c1NlbGVjdGVkID0gZmFsc2U7CiAgdGhpcy5hdXRvQ29tcGxldGVEYXRhID0gW107CiAgdGhpcy5zZWxlY3RlZFJvd3MgPSBbXTsKICB0aGlzLnNlYXJjaFRlcm0gPSBbXTsKICB0aGlzLmZyb21Sb3cgPSAxOwogIHRoaXMuY3VycmVudFBhZ2UgPSAxOwogIHRoaXMucGFnZVNpemUgPSA1OwogIHRoaXMucGFnZUNvdW50ID0gMDsgLy88L2VkaXRvci1mb2xkPgogIC8vPGVkaXRvci1mb2xkIGRlc2M9J0NoaXBzICQgQXV0b2NvbXBsZXRlJz4KCiAgdGhpcy5yZWFkT25seSA9IGZhbHNlOwogIHRoaXMuaXRlbXMgPSBbJ3N0ZXBwZXInLCAnZXhwYW5zaW9uLXBhbmVsJywgJ21hcmtkb3duJywgJ2hpZ2hsaWdodCcsICdsb2FkaW5nJywgJ21lZGlhJywgJ2NoaXBzJywgJ2h0dHAnLCAnanNvbi1mb3JtYXR0ZXInLCAncGlwZXMnLCAnbmVlZCBtb3JlPyddOwogIHRoaXMuaXRlbXNSZXF1aXJlTWF0Y2ggPSB0aGlzLml0ZW1zLnNsaWNlKDAsIDYpOyAvLzwvZWRpdG9yLWZvbGQ+CiAgLy88ZWRpdG9yLWZvbGQgZGVzYz0nUmFkaW9zJz4KCiAgdGhpcy5mYXZvcml0ZVNlYXNvbiA9ICdBdXR1bW4nOwogIHRoaXMuc2Vhc29uT3B0aW9ucyA9IFsnV2ludGVyJywgJ1NwcmluZycsICdTdW1tZXInLCAnQXV0dW1uJ107IC8vPC9lZGl0b3ItZm9sZD4KICAvLzxlZGl0b3ItZm9sZCBkZXNjPSdTZWxlY3QnPgoKICB0aGlzLnNlbGVjdGVkVmFsdWUgPSAnJzsKICB0aGlzLmZvb2RzID0gW3sKICAgIHZhbHVlOiAnc3RlYWstMCcsCiAgICB2aWV3VmFsdWU6ICdTdGVhaycKICB9LCB7CiAgICB2YWx1ZTogJ3BpenphLTEnLAogICAgdmlld1ZhbHVlOiAnUGl6emEnCiAgfSwgewogICAgdmFsdWU6ICd0YWNvcy0yJywKICAgIHZpZXdWYWx1ZTogJ1RhY29zJwogIH1dOyAvLzwvZWRpdG9yLWZvbGQ+CiAgLy88ZWRpdG9yLWZvbGQgZGVzYz0nQ2hlY2tib3gnPgoKICB0aGlzLnVzZXIgPSB7CiAgICBhZ3JlZXNUb1RPUzogZmFsc2UKICB9OwogIHRoaXMuZ3JvY2VyaWVzID0gW3sKICAgIGJvdWdodDogdHJ1ZSwKICAgIG5hbWU6ICdTZWl0YW4nCiAgfSwgewogICAgYm91Z2h0OiBmYWxzZSwKICAgIG5hbWU6ICdBbG1vbmQgTWVhbCBGbG91cicKICB9LCB7CiAgICBib3VnaHQ6IGZhbHNlLAogICAgbmFtZTogJ09yZ2FuaWMgRWdncycKICB9XTsgLy88L2VkaXRvci1mb2xkPgogIC8vPGVkaXRvci1mb2xkIGRlc2M9J1NsaWRlIFRvZ2dsZSc+CgogIHRoaXMuc3lzdGVtcyA9IFt7CiAgICBuYW1lOiAnTGlnaHRzJywKICAgIG9uOiBmYWxzZSwKICAgIGNvbG9yOiAncHJpbWFyeScKICB9LCB7CiAgICBuYW1lOiAnU3Vycm91bmQgU291bmQnLAogICAgb246IHRydWUsCiAgICBjb2xvcjogJ2FjY2VudCcKICB9LCB7CiAgICBuYW1lOiAnVC5WLicsCiAgICBvbjogdHJ1ZSwKICAgIGNvbG9yOiAnd2FybicKICB9XTsKICB0aGlzLmhvdXNlID0gewogICAgbG9ja0hvdXNlOiBmYWxzZQogIH07IC8vPC9lZGl0b3ItZm9sZD4KfQoKRmRzRGVtby5wcm90b3R5cGUgPSB7CiAgY29uc3RydWN0b3I6IEZkc0RlbW8sCiAgLy88ZWRpdG9yLWZvbGQgZGVzYz0nQXV0b2NvbXBsZXRlJz4KICBkaXNwbGF5Rm46IGZ1bmN0aW9uIGRpc3BsYXlGbih2YWx1ZSkgewogICAgcmV0dXJuIHZhbHVlICYmIF90eXBlb2YodmFsdWUpID09PSAnb2JqZWN0JyA/IHZhbHVlLm5hbWUgOiB2YWx1ZTsKICB9LAogIGZpbHRlclN0YXRlczogZnVuY3Rpb24gZmlsdGVyU3RhdGVzKHZhbCkgewogICAgcmV0dXJuIHZhbCA/IHRoaXMuc3RhdGVzLmZpbHRlcihmdW5jdGlvbiAocykgewogICAgICByZXR1cm4gcy5uYW1lLm1hdGNoKG5ldyBSZWdFeHAodmFsLCAnZ2knKSk7CiAgICB9KSA6IHRoaXMuc3RhdGVzOwogIH0sCiAgLy88L2VkaXRvci1mb2xkPgogIC8vPGVkaXRvci1mb2xkIGRlc2M9J1NuYWNrIEJhcnMnPgogIHNob3dTdWNjZXNzU25hY2tCYXI6IGZ1bmN0aW9uIHNob3dTdWNjZXNzU25hY2tCYXIoKSB7CiAgICB0aGlzLnNuYWNrQmFyU2VydmljZS5vcGVuQ29hc3Rlcih7CiAgICAgIHRpdGxlOiAnU3VjY2VzcycsCiAgICAgIG1lc3NhZ2U6ICdTb21lIGhlbHAgdGV4dCByZWdhcmRpbmcgdGhlIHN1Y2Nlc3NmdWwgZXZlbnQuJywKICAgICAgdmVydGljYWxQb3NpdGlvbjogJ3RvcCcsCiAgICAgIGhvcml6b250YWxQb3NpdGlvbjogJ3JpZ2h0JywKICAgICAgaWNvbjogJ2ZhIGZhLWNoZWNrLWNpcmNsZS1vJywKICAgICAgY29sb3I6ICcjMUVCNDc1JywKICAgICAgZHVyYXRpb246IDMwMDAKICAgIH0pOwogIH0sCiAgc2hvd1dhcm5TbmFja0JhcjogZnVuY3Rpb24gc2hvd1dhcm5TbmFja0JhcigpIHsKICAgIHRoaXMuc25hY2tCYXJTZXJ2aWNlLm9wZW5Db2FzdGVyKHsKICAgICAgdGl0bGU6ICdXYXJuaW5nJywKICAgICAgbWVzc2FnZTogJ1NvbWUgaGVscCB0ZXh0IHJlZ2FyZGluZyB0aGUgd2FybmluZy4nLAogICAgICB2ZXJ0aWNhbFBvc2l0aW9uOiAndG9wJywKICAgICAgaG9yaXpvbnRhbFBvc2l0aW9uOiAnbGVmdCcsCiAgICAgIGljb246ICdmYSBmYS1leGNsYW1hdGlvbi10cmlhbmdsZScsCiAgICAgIGNvbG9yOiAnI0U5OEE0MCcsCiAgICAgIGR1cmF0aW9uOiAzMDAwCiAgICB9KTsKICB9LAogIHNob3dFcnJvclNuYWNrQmFyOiBmdW5jdGlvbiBzaG93RXJyb3JTbmFja0JhcigpIHsKICAgIHRoaXMuc25hY2tCYXJTZXJ2aWNlLm9wZW5Db2FzdGVyKHsKICAgICAgdGl0bGU6ICdFcnJvcicsCiAgICAgIG1lc3NhZ2U6ICdTb21lIGhlbHAgdGV4dCByZWdhcmRpbmcgdGhlIGNyaXRpY2FsIGVycm9yLiBUaGlzIGNvYXN0ZXIgd2lsbCBzdGF5IG9wZW4gdW50aWwgY2xvc2VkIHdpdGggdGhlIGB4YCBvciBpZiBhbm90aGVyIGNvYXN0ZXIgaXMgY3JlYXRlZC4nLAogICAgICB2ZXJ0aWNhbFBvc2l0aW9uOiAnYm90dG9tJywKICAgICAgaG9yaXpvbnRhbFBvc2l0aW9uOiAncmlnaHQnLAogICAgICBpY29uOiAnZmEgZmEtdGltZXMtY2lyY2xlLW8nLAogICAgICBjb2xvcjogJyNFRjYxNjInCiAgICB9KTsKICB9LAogIHNob3dSZWd1bGFyU25hY2tCYXI6IGZ1bmN0aW9uIHNob3dSZWd1bGFyU25hY2tCYXIoKSB7CiAgICB0aGlzLnNuYWNrQmFyU2VydmljZS5vcGVuQ29hc3Rlcih7CiAgICAgIHRpdGxlOiAnUmVndWxhcicsCiAgICAgIG1lc3NhZ2U6ICdTb21ldGhpbmcgaW50ZXJlc3RpbmcuJywKICAgICAgdmVydGljYWxQb3NpdGlvbjogJ2JvdHRvbScsCiAgICAgIGhvcml6b250YWxQb3NpdGlvbjogJ2xlZnQnLAogICAgICBjb2xvcjogJyM4MDg3OTMnLAogICAgICBkdXJhdGlvbjogMzAwMAogICAgfSk7CiAgfSwKICAvLzwvZWRpdG9yLWZvbGQ+CiAgLy88ZWRpdG9yLWZvbGQgZGVzYz0nRGlhbG9nJz4KICBvcGVuRGlhbG9nOiBmdW5jdGlvbiBvcGVuRGlhbG9nKCkgewogICAgdGhpcy5kaWFsb2cub3BlbihGZHNEZW1vRGlhbG9nKTsKICB9LAogIC8vPC9lZGl0b3ItZm9sZD4KICAvLzxlZGl0b3ItZm9sZCBkZXNjPSdFeHBhbnNpb24gUGFuZWwnPgogIHRvZ2dsZUV4cGFuc2lvbjE6IGZ1bmN0aW9uIHRvZ2dsZUV4cGFuc2lvbjEoKSB7CiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHsKICAgICAgdGhpcy5leHBhbnNpb24xID0gIXRoaXMuZXhwYW5zaW9uMTsKICAgIH0KICB9LAogIHRvZ2dsZURpc2FibGVkOiBmdW5jdGlvbiB0b2dnbGVEaXNhYmxlZCgpIHsKICAgIHRoaXMuZGlzYWJsZWQgPSAhdGhpcy5kaXNhYmxlZDsKICB9LAogIGV4cGFuZEV4cGFuc2lvbjFFdmVudDogZnVuY3Rpb24gZXhwYW5kRXhwYW5zaW9uMUV2ZW50KCkgewogICAgdGhpcy5leHBhbmRDb2xsYXBzZUV4cGFuc2lvbjFNc2cgPSAnRXhwYW5kIGV2ZW50IGVtaXR0ZWQuJzsKICB9LAogIGNvbGxhcHNlRXhwYW5zaW9uMUV2ZW50OiBmdW5jdGlvbiBjb2xsYXBzZUV4cGFuc2lvbjFFdmVudCgpIHsKICAgIHRoaXMuZXhwYW5kQ29sbGFwc2VFeHBhbnNpb24xTXNnID0gJ0NvbGxhcHNlIGV2ZW50IGVtaXR0ZWQuJzsKICB9LAogIC8vPC9lZGl0b3ItZm9sZD4KICAvLzxlZGl0b3ItZm9sZCBkZXNjPSdTaW1wbGUgRGlhbG9ncyc+CiAgb3BlbkFsZXJ0OiBmdW5jdGlvbiBvcGVuQWxlcnQoKSB7CiAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uub3BlbkFsZXJ0KHsKICAgICAgdGl0bGU6ICdBbGVydCcsCiAgICAgIGRpc2FibGVDbG9zZTogdHJ1ZSwKICAgICAgbWVzc2FnZTogJ1RoaXMgaXMgaG93IHNpbXBsZSBpdCBpcyB0byBjcmVhdGUgYW4gYWxlcnQgd2l0aCB0aGlzIHdyYXBwZXIgc2VydmljZS4nCiAgICB9KTsKICB9LAogIG9wZW5Db25maXJtOiBmdW5jdGlvbiBvcGVuQ29uZmlybSgpIHsKICAgIHRoaXMuZGlhbG9nU2VydmljZS5vcGVuQ29uZmlybSh7CiAgICAgIHRpdGxlOiAnQ29uZmlybScsCiAgICAgIG1lc3NhZ2U6ICdUaGlzIGlzIGhvdyBzaW1wbGUgaXQgaXMgdG8gY3JlYXRlIGEgY29uZmlybSB3aXRoIHRoaXMgd3JhcHBlciBzZXJ2aWNlLiBEbyB5b3UgYWdyZWU/JywKICAgICAgY2FuY2VsQnV0dG9uOiAnRGlzYWdyZWUnLAogICAgICBhY2NlcHRCdXR0b246ICdBZ3JlZScKICAgIH0pOwogIH0sCiAgb3BlblByb21wdDogZnVuY3Rpb24gb3BlblByb21wdCgpIHsKICAgIHRoaXMuZGlhbG9nU2VydmljZS5vcGVuUHJvbXB0KHsKICAgICAgdGl0bGU6ICdQcm9tcHQnLAogICAgICBtZXNzYWdlOiAnVGhpcyBpcyBob3cgc2ltcGxlIGl0IGlzIHRvIGNyZWF0ZSBhIHByb21wdCB3aXRoIHRoaXMgd3JhcHBlciBzZXJ2aWNlLiBQcm9tcHQgc29tZXRoaW5nLicsCiAgICAgIHZhbHVlOiAnUG9wdWxhdGVkIHZhbHVlJywKICAgICAgY2FuY2VsQnV0dG9uOiAnQ2FuY2VsJywKICAgICAgYWNjZXB0QnV0dG9uOiAnT2snCiAgICB9KTsKICB9LAogIC8vPC9lZGl0b3ItZm9sZD4KICAvLzxlZGl0b3ItZm9sZCBkZXNjPSdTZWFyY2hhYmxlIEV4cGFuc2lvbiBQYW5lbHMnPgogIGlzRHJvcGxldEZpbHRlckNoZWNrZWQ6IGZ1bmN0aW9uIGlzRHJvcGxldEZpbHRlckNoZWNrZWQodGVybSkgewogICAgcmV0dXJuIHRoaXMuZHJvcGxldHNTZWFyY2hUZXJtcy5pbmRleE9mKHRlcm0pID4gLTE7CiAgfSwKICBnZXREcm9wbGV0VHlwZUNvdW50OiBmdW5jdGlvbiBnZXREcm9wbGV0VHlwZUNvdW50KHR5cGUpIHsKICAgIHJldHVybiB0aGlzLmZpbHRlcmVkRHJvcGxldHMuZmlsdGVyKGZ1bmN0aW9uIChkcm9wbGV0KSB7CiAgICAgIHJldHVybiBkcm9wbGV0LnR5cGUgPT09IHR5cGU7CiAgICB9KS5sZW5ndGg7CiAgfSwKICBnZXREcm9wbGV0Q2VydGlmaWNhdGlvbkNvdW50OiBmdW5jdGlvbiBnZXREcm9wbGV0Q2VydGlmaWNhdGlvbkNvdW50KGNlcnRpZmljYXRpb24pIHsKICAgIHJldHVybiB0aGlzLmZpbHRlcmVkRHJvcGxldHMuZmlsdGVyKGZ1bmN0aW9uIChkcm9wbGV0KSB7CiAgICAgIHJldHVybiBPYmplY3Qua2V5cyhkcm9wbGV0KS5maW5kKGZ1bmN0aW9uIChrZXkpIHsKICAgICAgICBpZiAoa2V5ID09PSBjZXJ0aWZpY2F0aW9uICYmIGRyb3BsZXRbY2VydGlmaWNhdGlvbl0udHlwZSA9PT0gJ2NlcnRpZmljYXRpb24nKSB7CiAgICAgICAgICByZXR1cm4gZHJvcGxldDsKICAgICAgICB9CgogICAgICAgIHJldHVybiBudWxsOwogICAgICB9KTsKICAgIH0pLmxlbmd0aDsKICB9LAogIGdldFNvcnRCeTogZnVuY3Rpb24gZ2V0U29ydEJ5KCkgewogICAgdmFyIHNvcnRCeUNvbHVtbkxhYmVsOwogICAgdmFyIGFycmF5TGVuZ3RoID0gdGhpcy5kcm9wbGV0Q29sdW1ucy5sZW5ndGg7CgogICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheUxlbmd0aDsgaSsrKSB7CiAgICAgIGlmICh0aGlzLmRyb3BsZXRDb2x1bW5zW2ldLmFjdGl2ZSA9PT0gdHJ1ZSkgewogICAgICAgIHNvcnRCeUNvbHVtbkxhYmVsID0gdGhpcy5kcm9wbGV0Q29sdW1uc1tpXS5sYWJlbDsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQoKICAgIHJldHVybiBzb3J0QnlDb2x1bW5MYWJlbDsKICB9LAogIHNvcnREcm9wbGV0czogZnVuY3Rpb24gc29ydERyb3BsZXRzKGNvbHVtbikgewogICAgaWYgKGNvbHVtbi5zb3J0YWJsZSA9PT0gdHJ1ZSkgewogICAgICAvLyB0b2dnbGUgY29sdW1uIHNvcnQgb3JkZXIKICAgICAgY29sdW1uLnNvcnRPcmRlciA9IGNvbHVtbi5zb3J0T3JkZXIgPT09ICdBU0MnID8gJ0RFU0MnIDogJ0FTQyc7CiAgICAgIHZhciBzb3J0T3JkZXIgPSBjb2x1bW4uc29ydE9yZGVyOwogICAgICB0aGlzLmZpbHRlckRyb3BsZXRzKGNvbHVtbi5uYW1lLCBzb3J0T3JkZXIpOyAvL29ubHkgb25lIGNvbHVtbiBjYW4gYmUgYWN0aXZlbHkgc29ydGVkIHNvIHdlIHJlc2V0IGFsbCB0byBpbmFjdGl2ZQoKICAgICAgdGhpcy5kcm9wbGV0Q29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7CiAgICAgICAgYy5hY3RpdmUgPSBmYWxzZTsKICAgICAgfSk7IC8vYW5kIHNldCB0aGlzIGNvbHVtbiBhcyB0aGUgYWN0aXZlbHkgc29ydGVkIGNvbHVtbgoKICAgICAgY29sdW1uLmFjdGl2ZSA9IHRydWU7CiAgICAgIHRoaXMuYWN0aXZlRHJvcGxldENvbHVtbiA9IGNvbHVtbjsKICAgIH0KICB9LAogIHRvZ2dsZURyb3BsZXRzRmlsdGVyOiBmdW5jdGlvbiB0b2dnbGVEcm9wbGV0c0ZpbHRlcihzZWFyY2hUZXJtKSB7CiAgICB2YXIgYXBwbHlTZWFyY2hUZXJtID0gdHJ1ZTsgLy8gY2hlY2sgaWYgdGhlIHNlYXJjaCB0ZXJtIGlzIGFscmVhZHkgYXBwbGllZCBhbmQgcmVtb3ZlIGl0IGlmIHRydWUKCiAgICBpZiAodGhpcy5kcm9wbGV0c1NlYXJjaFRlcm1zLmxlbmd0aCA+IDApIHsKICAgICAgdmFyIGFycmF5TGVuZ3RoID0gdGhpcy5kcm9wbGV0c1NlYXJjaFRlcm1zLmxlbmd0aDsKCiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXlMZW5ndGg7IGkrKykgewogICAgICAgIHZhciBpbmRleCA9IHRoaXMuZHJvcGxldHNTZWFyY2hUZXJtcy5pbmRleE9mKHNlYXJjaFRlcm0pOwoKICAgICAgICBpZiAoaW5kZXggPiAtMSkgewogICAgICAgICAgdGhpcy5kcm9wbGV0c1NlYXJjaFRlcm1zLnNwbGljZShpbmRleCwgMSk7CiAgICAgICAgICBhcHBseVNlYXJjaFRlcm0gPSBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gLy8gaWYgd2UganVzdCByZW1vdmVkIHRoZSBzZWFyY2ggdGVybSBkbyBOT1QgYXBwbHkgaXQgYWdhaW4KCgogICAgaWYgKGFwcGx5U2VhcmNoVGVybSkgewogICAgICB0aGlzLmRyb3BsZXRzU2VhcmNoVGVybXMucHVzaChzZWFyY2hUZXJtKTsKICAgIH0KCiAgICB0aGlzLmZpbHRlckRyb3BsZXRzKHRoaXMuYWN0aXZlRHJvcGxldENvbHVtbi5uYW1lLCB0aGlzLmFjdGl2ZURyb3BsZXRDb2x1bW4uc29ydE9yZGVyKTsKICB9LAogIGZpbHRlckRyb3BsZXRzOiBmdW5jdGlvbiBmaWx0ZXJEcm9wbGV0cyhzb3J0QnksIHNvcnRPcmRlcikgewogICAgLy8gaWYgYHNvcnRPcmRlcmAgaXMgYHVuZGVmaW5lZGAgdGhlbiB1c2UgJ0FTQycKICAgIGlmIChzb3J0T3JkZXIgPT09IHVuZGVmaW5lZCkgewogICAgICBzb3J0T3JkZXIgPSAnQVNDJzsKICAgIH0gLy8gaWYgYHNvcnRCeWAgaXMgYHVuZGVmaW5lZGAgdGhlbiBmaW5kIHRoZSBmaXJzdCBzb3J0YWJsZSBjb2x1bW4gaW4gdGhpcy5kcm9wbGV0Q29sdW1ucwoKCiAgICBpZiAoc29ydEJ5ID09PSB1bmRlZmluZWQpIHsKICAgICAgdmFyIGFycmF5TGVuZ3RoID0gdGhpcy5kcm9wbGV0Q29sdW1ucy5sZW5ndGg7CgogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5TGVuZ3RoOyBpKyspIHsKICAgICAgICBpZiAodGhpcy5kcm9wbGV0Q29sdW1uc1tpXS5zb3J0YWJsZSA9PT0gdHJ1ZSkgewogICAgICAgICAgc29ydEJ5ID0gdGhpcy5kcm9wbGV0Q29sdW1uc1tpXS5uYW1lOwogICAgICAgICAgdGhpcy5hY3RpdmVEcm9wbGV0Q29sdW1uID0gdGhpcy5kcm9wbGV0Q29sdW1uc1tpXTsgLy9vbmx5IG9uZSBjb2x1bW4gY2FuIGJlIGFjdGl2ZWx5IHNvcnRlZCBzbyB3ZSByZXNldCBhbGwgdG8gaW5hY3RpdmUKCiAgICAgICAgICB0aGlzLmRyb3BsZXRDb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGMpIHsKICAgICAgICAgICAgYy5hY3RpdmUgPSBmYWxzZTsKICAgICAgICAgIH0pOyAvL2FuZCBzZXQgdGhpcyBjb2x1bW4gYXMgdGhlIGFjdGl2ZWx5IHNvcnRlZCBjb2x1bW4KCiAgICAgICAgICB0aGlzLmRyb3BsZXRDb2x1bW5zW2ldLmFjdGl2ZSA9IHRydWU7CiAgICAgICAgICB0aGlzLmRyb3BsZXRDb2x1bW5zW2ldLnNvcnRPcmRlciA9IHNvcnRPcmRlcjsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICAgIHZhciBuZXdEYXRhID0gdGhpcy5kcm9wbGV0czsKCiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgdGhpcy5kcm9wbGV0c1NlYXJjaFRlcm1zLmxlbmd0aDsgX2krKykgewogICAgICBuZXdEYXRhID0gdGhpcy5maWx0ZXJEYXRhKG5ld0RhdGEsIHRoaXMuZHJvcGxldHNTZWFyY2hUZXJtc1tfaV0sIHRydWUsIHRoaXMuYWN0aXZlRHJvcGxldENvbHVtbi5uYW1lKTsKICAgIH0KCiAgICBuZXdEYXRhID0gdGhpcy5kYXRhVGFibGVTZXJ2aWNlLnNvcnREYXRhKG5ld0RhdGEsIHNvcnRCeSwgc29ydE9yZGVyKTsKICAgIHRoaXMuZmlsdGVyZWREcm9wbGV0cyA9IG5ld0RhdGE7CiAgICB0aGlzLmdldEF1dG9Db21wbGV0ZURyb3BsZXRzKCk7CiAgfSwKICBnZXRBdXRvQ29tcGxldGVEcm9wbGV0czogZnVuY3Rpb24gZ2V0QXV0b0NvbXBsZXRlRHJvcGxldHMoKSB7CiAgICB2YXIgc2VsZiA9IHRoaXM7CiAgICB0aGlzLmF1dG9Db21wbGV0ZURyb3BsZXRzID0gW107CiAgICB0aGlzLmRyb3BsZXRDb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGMpIHsKICAgICAgc2VsZi5maWx0ZXJlZERyb3BsZXRzLmZvckVhY2goZnVuY3Rpb24gKHIpIHsKICAgICAgICByZXR1cm4gcltjLm5hbWUudG9Mb3dlckNhc2UoKV0gPyBzZWxmLmF1dG9Db21wbGV0ZURyb3BsZXRzLnB1c2gocltjLm5hbWUudG9Mb3dlckNhc2UoKV0udG9TdHJpbmcoKSkgOiAnJzsKICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8vPC9lZGl0b3ItZm9sZD4KICBmaWx0ZXJEYXRhOiBmdW5jdGlvbiBmaWx0ZXJEYXRhKGRhdGEsIHNlYXJjaFRlcm0sIGlnbm9yZUNhc2UpIHsKICAgIHZhciBmaWVsZCA9ICcnOwoKICAgIGlmIChzZWFyY2hUZXJtLmluZGV4T2YoJzonKSA+IC0xKSB7CiAgICAgIGZpZWxkID0gc2VhcmNoVGVybS5zcGxpdCgnOicpWzBdLnRyaW0oKTsKICAgICAgc2VhcmNoVGVybSA9IHNlYXJjaFRlcm0uc3BsaXQoJzonKVsxXS50cmltKCk7CiAgICB9CgogICAgdmFyIGZpbHRlciA9IHNlYXJjaFRlcm0gPyBpZ25vcmVDYXNlID8gc2VhcmNoVGVybS50b0xvd2VyQ2FzZSgpIDogc2VhcmNoVGVybSA6ICcnOwoKICAgIGlmIChmaWx0ZXIpIHsKICAgICAgZGF0YSA9IGRhdGEuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgICAgdmFyIHJlcyA9IE9iamVjdC5rZXlzKGl0ZW0pLmZpbmQoZnVuY3Rpb24gKGtleSkgewogICAgICAgICAgaWYgKGZpZWxkLmluZGV4T2YoJy4nKSA+IC0xKSB7CiAgICAgICAgICAgIHZhciBvYmpBcnJheSA9IGZpZWxkLnNwbGl0KCcuJyk7CiAgICAgICAgICAgIHZhciBvYmogPSBpdGVtOwogICAgICAgICAgICB2YXIgYXJyYXlMZW5ndGggPSBvYmpBcnJheS5sZW5ndGg7CgogICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5TGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgb2JqID0gb2JqW29iakFycmF5W2ldXTsKICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICB2YXIgX3ByZUl0ZW1WYWx1ZSA9ICcnICsgb2JqOwoKICAgICAgICAgICAgdmFyIF9pdGVtVmFsdWUgPSBpZ25vcmVDYXNlID8gX3ByZUl0ZW1WYWx1ZS50b0xvd2VyQ2FzZSgpIDogX3ByZUl0ZW1WYWx1ZTsKCiAgICAgICAgICAgIHJldHVybiBfaXRlbVZhbHVlLmluZGV4T2YoZmlsdGVyKSA+IC0xOwogICAgICAgICAgfQoKICAgICAgICAgIGlmIChrZXkgIT09IGZpZWxkICYmIGZpZWxkICE9PSAnJykgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9CgogICAgICAgICAgdmFyIHByZUl0ZW1WYWx1ZSA9ICcnICsgaXRlbVtrZXldOwogICAgICAgICAgdmFyIGl0ZW1WYWx1ZSA9IGlnbm9yZUNhc2UgPyBwcmVJdGVtVmFsdWUudG9Mb3dlckNhc2UoKSA6IHByZUl0ZW1WYWx1ZTsKICAgICAgICAgIHJldHVybiBpdGVtVmFsdWUuaW5kZXhPZihmaWx0ZXIpID4gLTE7CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuICEodHlwZW9mIHJlcyA9PT0gJ3VuZGVmaW5lZCcpOwogICAgICB9KTsKICAgIH0KCiAgICByZXR1cm4gZGF0YTsKICB9LAogIC8vPGVkaXRvci1mb2xkIGRlc2M9J0RhdGEgVGFibGVzJz4KICBzb3J0OiBmdW5jdGlvbiBzb3J0KHNvcnRFdmVudCwgY29sdW1uKSB7CiAgICBpZiAoY29sdW1uLnNvcnRhYmxlKSB7CiAgICAgIHZhciBzb3J0QnkgPSBjb2x1bW4ubmFtZTsKICAgICAgY29sdW1uLnNvcnRPcmRlciA9IGNvbHVtbi5zb3J0T3JkZXIgPT09ICdBU0MnID8gJ0RFU0MnIDogJ0FTQyc7CiAgICAgIHZhciBzb3J0T3JkZXIgPSBjb2x1bW4uc29ydE9yZGVyOwogICAgICB0aGlzLmZpbHRlcihzb3J0QnksIHNvcnRPcmRlcik7IC8vb25seSBvbmUgY29sdW1uIGNhbiBiZSBhY3RpdmVseSBzb3J0ZWQgc28gd2UgcmVzZXQgYWxsIHRvIGluYWN0aXZlCgogICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoYykgewogICAgICAgIGMuYWN0aXZlID0gZmFsc2U7CiAgICAgIH0pOyAvL2FuZCBzZXQgdGhpcyBjb2x1bW4gYXMgdGhlIGFjdGl2ZWx5IHNvcnRlZCBjb2x1bW4KCiAgICAgIGNvbHVtbi5hY3RpdmUgPSB0cnVlOwogICAgfQogIH0sCiAgc2VhcmNoUmVtb3ZlOiBmdW5jdGlvbiBzZWFyY2hSZW1vdmUoc2VhcmNoVGVybSkgewogICAgLy9vbmx5IHJlbW92ZSB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiB0aGUgc2VhcmNoIHRlcm0KICAgIHZhciBpbmRleCA9IHRoaXMuc2VhcmNoVGVybS5pbmRleE9mKHNlYXJjaFRlcm0pOwoKICAgIGlmIChpbmRleCAhPT0gLTEpIHsKICAgICAgdGhpcy5zZWFyY2hUZXJtLnNwbGljZShpbmRleCwgMSk7CiAgICB9CgogICAgdGhpcy5mcm9tUm93ID0gMTsKICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxOwogICAgdGhpcy5maWx0ZXIoKTsKICB9LAogIHNlYXJjaEFkZDogZnVuY3Rpb24gc2VhcmNoQWRkKHNlYXJjaFRlcm0pIHsKICAgIHRoaXMuc2VhcmNoVGVybS5wdXNoKHNlYXJjaFRlcm0pOwogICAgdGhpcy5mcm9tUm93ID0gMTsKICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxOwogICAgdGhpcy5maWx0ZXIoKTsKICB9LAogIHBhZ2U6IGZ1bmN0aW9uIHBhZ2UocGFnaW5nRXZlbnQpIHsKICAgIHRoaXMuZnJvbVJvdyA9IHBhZ2luZ0V2ZW50LmZyb21Sb3c7CiAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnaW5nRXZlbnQucGFnZTsKICAgIHRoaXMucGFnZVNpemUgPSBwYWdpbmdFdmVudC5wYWdlU2l6ZTsKICAgIHRoaXMuYWxsUm93c1NlbGVjdGVkID0gZmFsc2U7CiAgICB0aGlzLmZpbHRlcigpOwogIH0sCiAgZmlsdGVyOiBmdW5jdGlvbiBmaWx0ZXIoc29ydEJ5LCBzb3J0T3JkZXIpIHsKICAgIGlmICh0aGlzLmFsbFJvd3NTZWxlY3RlZCkgewogICAgICB0aGlzLnRvZ2dsZVNlbGVjdEFsbCgpOwogICAgfQoKICAgIHRoaXMuZGVzZWxlY3RBbGwoKTsKICAgIHZhciBuZXdEYXRhID0gdGhpcy5kYXRhOwoKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5zZWFyY2hUZXJtLmxlbmd0aDsgaSsrKSB7CiAgICAgIG5ld0RhdGEgPSB0aGlzLmZpbHRlckRhdGEobmV3RGF0YSwgdGhpcy5zZWFyY2hUZXJtW2ldLCB0cnVlKTsKICAgIH0KCiAgICB0aGlzLmZpbHRlcmVkVG90YWwgPSBuZXdEYXRhLmxlbmd0aDsKICAgIG5ld0RhdGEgPSB0aGlzLmRhdGFUYWJsZVNlcnZpY2Uuc29ydERhdGEobmV3RGF0YSwgc29ydEJ5LCBzb3J0T3JkZXIpOwogICAgdGhpcy5wYWdlQ291bnQgPSBuZXdEYXRhLmxlbmd0aDsKICAgIG5ld0RhdGEgPSB0aGlzLmRhdGFUYWJsZVNlcnZpY2UucGFnZURhdGEobmV3RGF0YSwgdGhpcy5mcm9tUm93LCB0aGlzLmN1cnJlbnRQYWdlICogdGhpcy5wYWdlU2l6ZSk7CiAgICB0aGlzLmZpbHRlcmVkRGF0YSA9IG5ld0RhdGE7CiAgICB0aGlzLmdldEF1dG9Db21wbGV0ZURhdGEoKTsKICB9LAogIHRvZ2dsZVNlbGVjdDogZnVuY3Rpb24gdG9nZ2xlU2VsZWN0KHJvdykgewogICAgaWYgKHRoaXMuYWxsRmlsdGVyZWRSb3dzU2VsZWN0ZWQoKSkgewogICAgICB0aGlzLmFsbFJvd3NTZWxlY3RlZCA9IHRydWU7CiAgICB9IGVsc2UgewogICAgICB0aGlzLmFsbFJvd3NTZWxlY3RlZCA9IGZhbHNlOwogICAgfQogIH0sCiAgdG9nZ2xlU2VsZWN0QWxsOiBmdW5jdGlvbiB0b2dnbGVTZWxlY3RBbGwoKSB7CiAgICBpZiAodGhpcy5hbGxSb3dzU2VsZWN0ZWQpIHsKICAgICAgdGhpcy5zZWxlY3RBbGwoKTsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuZGVzZWxlY3RBbGwoKTsKICAgIH0KICB9LAogIHNlbGVjdEFsbDogZnVuY3Rpb24gc2VsZWN0QWxsKCkgewogICAgdGhpcy5maWx0ZXJlZERhdGEuZm9yRWFjaChmdW5jdGlvbiAoYykgewogICAgICBjLmNoZWNrZWQgPSB0cnVlOwogICAgfSk7CiAgfSwKICBkZXNlbGVjdEFsbDogZnVuY3Rpb24gZGVzZWxlY3RBbGwoKSB7CiAgICB0aGlzLmZpbHRlcmVkRGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7CiAgICAgIGMuY2hlY2tlZCA9IGZhbHNlOwogICAgfSk7CiAgfSwKICBhbGxGaWx0ZXJlZFJvd3NTZWxlY3RlZDogZnVuY3Rpb24gYWxsRmlsdGVyZWRSb3dzU2VsZWN0ZWQoKSB7CiAgICB2YXIgYWxsRmlsdGVyZWRSb3dzU2VsZWN0ZWQgPSB0cnVlOwogICAgdGhpcy5maWx0ZXJlZERhdGEuZm9yRWFjaChmdW5jdGlvbiAoYykgewogICAgICBpZiAoYy5jaGVja2VkID09PSB1bmRlZmluZWQgfHwgYy5jaGVja2VkID09PSBmYWxzZSkgewogICAgICAgIGFsbEZpbHRlcmVkUm93c1NlbGVjdGVkID0gZmFsc2U7CiAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIGFsbEZpbHRlcmVkUm93c1NlbGVjdGVkOwogIH0sCiAgYXJlVG9vbHRpcHNPbjogZnVuY3Rpb24gYXJlVG9vbHRpcHNPbigpIHsKICAgIHJldHVybiB0aGlzLmNvbHVtbnNbMF0uaGFzT3duUHJvcGVydHkoJ3Rvb2x0aXAnKTsKICB9LAogIHRvZ2dsZVRvb2x0aXBzOiBmdW5jdGlvbiB0b2dnbGVUb29sdGlwcygpIHsKICAgIGlmICh0aGlzLmNvbHVtbnNbMF0udG9vbHRpcCkgewogICAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoYykgewogICAgICAgIGRlbGV0ZSBjLnRvb2x0aXA7CiAgICAgIH0pOwogICAgfSBlbHNlIHsKICAgICAgdGhpcy5jb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGMpIHsKICAgICAgICBjLnRvb2x0aXAgPSAnVGhpcyBpcyAnICsgYy5sYWJlbCArICchJzsKICAgICAgfSk7CiAgICB9CiAgfSwKICBvcGVuRGF0YVRhYmxlUHJvbXB0OiBmdW5jdGlvbiBvcGVuRGF0YVRhYmxlUHJvbXB0KHJvdywgbmFtZSkgewogICAgdGhpcy5kaWFsb2dTZXJ2aWNlLm9wZW5Qcm9tcHQoewogICAgICBtZXNzYWdlOiAnRW50ZXIgY29tbWVudD8nLAogICAgICB2YWx1ZTogcm93W25hbWVdCiAgICB9KS5hZnRlckNsb3NlZCgpLnN1YnNjcmliZShmdW5jdGlvbiAodmFsdWUpIHsKICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHsKICAgICAgICByb3dbbmFtZV0gPSB2YWx1ZTsKICAgICAgfQogICAgfSk7CiAgfSwKICBnZXRBdXRvQ29tcGxldGVEYXRhOiBmdW5jdGlvbiBnZXRBdXRvQ29tcGxldGVEYXRhKCkgewogICAgdmFyIHNlbGYgPSB0aGlzOwogICAgdGhpcy5hdXRvQ29tcGxldGVEYXRhID0gW107CiAgICB0aGlzLmNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoYykgewogICAgICBzZWxmLmZpbHRlcmVkRGF0YS5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7CiAgICAgICAgcmV0dXJuIHJbYy5uYW1lLnRvTG93ZXJDYXNlKCldID8gc2VsZi5hdXRvQ29tcGxldGVEYXRhLnB1c2gocltjLm5hbWUudG9Mb3dlckNhc2UoKV0udG9TdHJpbmcoKSkgOiAnJzsKICAgICAgfSk7CiAgICB9KTsKICB9LAogIC8vPC9lZGl0b3ItZm9sZD4KICAvLzxlZGl0b3ItZm9sZCBkZXNjPSdDaGlwcyAkIEF1dG9jb21wbGV0ZSc+CiAgdG9nZ2xlUmVhZE9ubHk6IGZ1bmN0aW9uIHRvZ2dsZVJlYWRPbmx5KCkgewogICAgdGhpcy5yZWFkT25seSA9ICF0aGlzLnJlYWRPbmx5OwogIH0sCiAgLy88L2VkaXRvci1mb2xkPgogIC8vPGVkaXRvci1mb2xkIGRlc2M9J0xpZmUgQ3ljbGUgTGlzdGVuZXJzJz4KCiAgLyoqCiAgICogSW5pdGlhbGl6ZSB0aGUgY29tcG9uZW50CiAgICovCiAgbmdPbkluaXQ6IGZ1bmN0aW9uIG5nT25Jbml0KCkgewogICAgdGhpcy5maWx0ZXIoKTsKICAgIHRoaXMuZmlsdGVyRHJvcGxldHMoKTsKICB9LAoKICAvKioKICAgKiBSZXNwb25kIGFmdGVyIEFuZ3VsYXIgY2hlY2tzIHRoZSBjb21wb25lbnQncyB2aWV3cyBhbmQgY2hpbGQgdmlld3MKICAgKi8KICBuZ0FmdGVyVmlld0NoZWNrZWQ6IGZ1bmN0aW9uIG5nQWZ0ZXJWaWV3Q2hlY2tlZCgpIHsKICAgIHRoaXMuZmRzU2VydmljZS5pblByb2dyZXNzID0gZmFsc2U7CiAgfSAvLzwvZWRpdG9yLWZvbGQ+Cgp9OwpGZHNEZW1vLmFubm90YXRpb25zID0gW25ldyBDb21wb25lbnQoewogIHRlbXBsYXRlOiByZXF1aXJlKCcuL2Zkcy1kZW1vLmh0bWwnKSwKICBhbmltYXRpb25zOiBbRmRzQW5pbWF0aW9ucy5zbGlkZUluTGVmdEFuaW1hdGlvbl0sCiAgaG9zdDogewogICAgJ1tAcm91dGVBbmltYXRpb25dJzogJ3JvdXRlQW5pbWF0aW9uJwogIH0KfSldOwpGZHNEZW1vLnBhcmFtZXRlcnMgPSBbRmRzU25hY2tCYXJTZXJ2aWNlLCBGZHNTZXJ2aWNlLCBNYXREaWFsb2csIFRkRGF0YVRhYmxlU2VydmljZSwgRmRzRGlhbG9nU2VydmljZV07CmV4cG9ydCBkZWZhdWx0IEZkc0RlbW87"}]} |