{"remainingRequest":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\thread-loader\\dist\\cjs.js!D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\babel-loader\\lib\\index.js!D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\cache-loader\\dist\\cjs.js??ref--0-0!D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\vue-loader\\lib\\index.js??vue-loader-options!D:\\jenkins\\workspace\\xcjy-fvue\\src\\views\\patrolAndRescue\\commandDispatch\\EventManagement\\components\\DetailPage\\index.vue?vue&type=script&lang=js","dependencies":[{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\src\\views\\patrolAndRescue\\commandDispatch\\EventManagement\\components\\DetailPage\\index.vue","mtime":1751451388948},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\babel.config.js","mtime":1741314102158},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\thread-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\babel-loader\\lib\\index.js","mtime":456789000000},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\cache-loader\\dist\\cjs.js","mtime":499162500000},{"path":"D:\\jenkins\\workspace\\xcjy-fvue\\node_modules\\vue-loader\\lib\\index.js","mtime":499162500000}],"contextDependencies":[],"result":[{"type":"Buffer","data":"base64:aW1wb3J0IF9vYmplY3RTcHJlYWQgZnJvbSAiRDovamVua2lucy93b3Jrc3BhY2UveGNqeS1mdnVlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RTcHJlYWQyLmpzIjsKaW1wb3J0IF9yZWdlbmVyYXRvclJ1bnRpbWUgZnJvbSAiRDovamVua2lucy93b3Jrc3BhY2UveGNqeS1mdnVlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9yZWdlbmVyYXRvclJ1bnRpbWUuanMiOwppbXBvcnQgX2FzeW5jVG9HZW5lcmF0b3IgZnJvbSAiRDovamVua2lucy93b3Jrc3BhY2UveGNqeS1mdnVlL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3luY1RvR2VuZXJhdG9yLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZmlsdGVyLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuZmluZC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5Lm1hcC5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LnB1c2guanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5zbGljZS5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLmZ1bmN0aW9uLm5hbWUuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5pdGVyYXRvci5jb25zdHJ1Y3Rvci5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLml0ZXJhdG9yLmZpbHRlci5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLml0ZXJhdG9yLmZpbmQuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5pdGVyYXRvci5tYXAuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5pdGVyYXRvci5zb21lLmpzIjsKaW1wb3J0ICJjb3JlLWpzL21vZHVsZXMvZXMuanNvbi5zdHJpbmdpZnkuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5vYmplY3Qua2V5cy5qcyI7CmltcG9ydCAiY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC50by1zdHJpbmcuanMiOwppbXBvcnQgImNvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAudG8tc3RyaW5nLmpzIjsKLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KLy8KCmltcG9ydCB7IHJlZmluZVJlcXVlc3RCb2R5IH0gZnJvbSAnQC91dGlscy9yZXF1ZXN0V3JhcHBlcnMnOwppbXBvcnQgeyBkaWN0aW9uYXJ5RXNjYXBlLCBnZXREaWN0aW9uYXJ5QnlDb2RlIH0gZnJvbSAnQC91dGlscy9kaWN0aW9uYXJ5JzsKaW1wb3J0IHsgZGVyZWd1bGF0aW9uLCBldmVudENvbXBsZXRlZCwgdGFibGVEZXRhaWwsIHRhYmxlRWRpdCB9IGZyb20gJ0AvYXBpL3BhdHJvbEFuZFJlc2N1ZS9jb21tYW5kRGlzcGF0Y2gvZXZlbnRNYW5hZ2VtZW50JzsKaW1wb3J0IFB1YlN1YiBmcm9tICdwdWJzdWItanMnOwppbXBvcnQgbW9tZW50IGZyb20gJ21vbWVudCc7CmltcG9ydCBCYXNpY3NJbmZvIGZyb20gJy4uL0Jhc2ljc0luZm8nOwppbXBvcnQgeyB0YWJsZURhdGEgYXMgcm9hZFNlY3Rpb25JbmZvSW50ZXIgfSBmcm9tICdAL2FwaS9wYXRyb2xBbmRSZXNjdWUvaW5mb01nbXRQYXRyb2xzUmVzY3Vlcy9yb2FkU2VjdGlvbkluZm8nOwppbXBvcnQgeyB0YWJsZURhdGEgYXMgYWxvbmdSb3V0ZUluZm9JbnRlciB9IGZyb20gJ0AvYXBpL3BhdHJvbEFuZFJlc2N1ZS9pbmZvTWdtdFBhdHJvbHNSZXNjdWVzL2Fsb25nUm91dGVJbmZvJzsKaW1wb3J0IHsgdGFibGVEYXRhIGFzIHRlYW1EYXRhIH0gZnJvbSAnQC9hcGkvcGF0cm9sQW5kUmVzY3VlL2luZm9NZ210UGF0cm9sc1Jlc2N1ZXMvcGF0cm9sQW5kUmVzY3VlVGVhbXNNZ210JzsKaW1wb3J0IEFwcG9pbnREaWFsb2cgZnJvbSAnLi4vQXBwb2ludERpYWxvZyc7CmltcG9ydCBkaXNwb3NhbFByb2Nlc3MgZnJvbSAnLi4vRGlzcG9zYWxQcm9jZXNzJzsKaW1wb3J0IHsgY29tcGVuc2F0aW9uQWRkLCBjb21wZW5zYXRpb25EZWxldGUsIGNvbXBlbnNhdGlvbkVkaXQsIHJlc2N1ZUZlZURlbGV0ZSwgdHJhZmZpY0NvbnRyb2xEZWxldGUsIHRyYWZmaWNKYW1EZWxldGUsIHRyYWZmaWNKYW1FZGl0IH0gZnJvbSAnQC9hcGkvcGF0cm9sQW5kUmVzY3VlL2NvbW1hbmREaXNwYXRjaC9ldmVudE1hbmFnZW1lbnQvZXZlbnRFZGl0JzsKaW1wb3J0IERldGFpbGVkTGlzdEdpYWxvZyBmcm9tICdAL3ZpZXdzL3BhdHJvbEFuZFJlc2N1ZS9yb2FkRGFtYWdlQ29tcC9Sb2FkRGFtYWdlUmVnaXN0ZXIvY29tcG9uZW50cy9FZGl0QWRkUGFnZS9jb21wb25lbnRzL0RldGFpbGVkTGlzdEdpYWxvZyc7IC8vIOi1lOWBv+a4heWNleW8ueeqlwppbXBvcnQgcmVzY3VlQ29zdERpYWxvZyBmcm9tICcuL3Jlc2N1ZUNvc3REaWFsb2cvaW5kZXgudnVlJzsgLy8g5pWR5o+06LS555So5L+h5oGv5by556qXCmltcG9ydCB0cmFmZmljQ29udHJvbERpYWxvZyBmcm9tICcuL3RyYWZmaWNDb250cm9sRGlhbG9nL2luZGV4LnZ1ZSc7IC8vIOaLpeWgteWIl+ihqOW8ueeqlwppbXBvcnQgVHJhZmZpY0phbURpYWxvZyBmcm9tICcuL3RyYWZmaWNKYW1EaWFsb2cvaW5kZXgudnVlJzsKaW1wb3J0IFNhdmVEZXRhaWxEaWFsb2cgZnJvbSAnQC92aWV3cy9wYXRyb2xBbmRSZXNjdWUvY29tbWFuZERpc3BhdGNoL0V2ZW50SW5xdWlyeS9jb21wb25lbnRzL1NhdmVEZXRhaWxEaWFsb2cvaW5kZXgudnVlJzsgLy8g5oul5aC15YiX6KGo5by556qXCmV4cG9ydCBkZWZhdWx0IHsKICBuYW1lOiAnRGV0YWlsUGFnZScsCiAgcHJvcHM6IHsKICAgIGNvbXBvbmVudE5hbWU6IHsKICAgICAgZGVmYXVsdDogJ1RhYmxlUGFnZScsCiAgICAgIHR5cGU6IFN0cmluZwogICAgfQogIH0sCiAgY29tcG9uZW50czogewogICAgU2F2ZURldGFpbERpYWxvZzogU2F2ZURldGFpbERpYWxvZywKICAgIEJhc2ljc0luZm86IEJhc2ljc0luZm8sCiAgICBBcHBvaW50RGlhbG9nOiBBcHBvaW50RGlhbG9nLAogICAgZGlzcG9zYWxQcm9jZXNzOiBkaXNwb3NhbFByb2Nlc3MsCiAgICBEZXRhaWxlZExpc3RHaWFsb2c6IERldGFpbGVkTGlzdEdpYWxvZywKICAgIHJlc2N1ZUNvc3REaWFsb2c6IHJlc2N1ZUNvc3REaWFsb2csCiAgICBUcmFmZmljSmFtRGlhbG9nOiBUcmFmZmljSmFtRGlhbG9nLAogICAgdHJhZmZpY0NvbnRyb2xEaWFsb2c6IHRyYWZmaWNDb250cm9sRGlhbG9nCiAgfSwKICBkYXRhOiBmdW5jdGlvbiBkYXRhKCkgewogICAgcmV0dXJuIHsKICAgICAgYXBwb2ludERpYWxvZzogZmFsc2UsCiAgICAgIGVkaXRTYXZlTG9hZGluZzogZmFsc2UsCiAgICAgIHBhZ2VUeXBlOiAnZWRpdCcsCiAgICAgIGRldGFpbEZvcm06IHt9LAogICAgICBwdWJTdWI6IG51bGwsCiAgICAgIGV2ZW50U3RhdHVzOiAwLAogICAgICBjb25maXJtTG9hZGluZzogZmFsc2UsCiAgICAgIHJldmVyc2U6IHRydWUsCiAgICAgIG1hcDogbnVsbCwKICAgICAgbWFwTG9hZGluZzogdHJ1ZSwKICAgICAgbWFwRGVmYXVsdE9wdGlvbnM6IHsKICAgICAgICBjZW50ZXI6IFsxMDYuNTUwNywgMjkuNTY0N10gLyrlnLDlm77kuK3lv4PngrkqLywKICAgICAgICB6b29tOiA5IC8q5Zyw5Zu+6buY6K6k57yp5pS+562J57qnKi8KICAgICAgfSwKICAgICAgZXZlbnRHcmFkZU9wdGlvbnM6IFsKICAgICAgLy/kuovku7bnrYnnuqcKICAgICAgewogICAgICAgIGxhYmVsOiAnMee6pycsCiAgICAgICAgdmFsdWU6IDEKICAgICAgfSwgewogICAgICAgIGxhYmVsOiAnMue6pycsCiAgICAgICAgdmFsdWU6IDIKICAgICAgfSwgewogICAgICAgIGxhYmVsOiAnM+e6pycsCiAgICAgICAgdmFsdWU6IDMKICAgICAgfSwgewogICAgICAgIGxhYmVsOiAnNOe6pycsCiAgICAgICAgdmFsdWU6IDQKICAgICAgfV0sCiAgICAgIG1hcmtlcnM6IFtdLAogICAgICByb2FkT3B0aW9uczogW10sCiAgICAgIGFsb25nUm91dGVJbmZvRGF0YTogW10sCiAgICAgIHRlYW1PcHRpb25zOiBbXSwKICAgICAgZWRpdERpYWxvZzogZmFsc2UsCiAgICAgIGV2ZW50VHlwZTogJycsCiAgICAgIGJhc2VJbmZvOiB7fSwKICAgICAgZGlzcG9zYWxQcm9jZXNzOiBmYWxzZSwKICAgICAgY29tcGVuc2F0ZURpYWxvZzogZmFsc2UsCiAgICAgIC8vIOi1lOWBv+a4heWNleW8ueeqlwogICAgICBjb21wZW5zYXRlRGlhbG9nRGV0YWlsOiB7fSwKICAgICAgcmVzY3VlRGlhbG9nOiBmYWxzZSwKICAgICAgLy8g5pWR5o+06LS555So5L+h5oGv5by556qXCiAgICAgIHJlc2N1ZURpYWxvZ0RldGFpbDoge30sCiAgICAgIGNvbnRyb2xEaWFsb2c6IGZhbHNlLAogICAgICAvLyDnrqHliLbliJfooajlvLnnqpcKICAgICAgY29udHJvbERpYWxvZ0RldGFpbDoge30sCiAgICAgIHRyYWZmaWNKYW1EaWFsb2c6IGZhbHNlLAogICAgICAvLyDmi6XloLXliJfooajlvLnnqpcKICAgICAgdHJhZmZpY0phbURpYWxvZ0RldGFpbDoge30sCiAgICAgIHJlbGVhc2VUaW1lOiBuZXcgRGF0ZSgpLAogICAgICBqaWVjaHVUaW1lOiBuZXcgRGF0ZSgpLAogICAgICBTYXZlRGV0YWlsRGlhbG9nOiBmYWxzZSwKICAgICAgc2F2ZURldGFpbEZvcm06IHt9LAogICAgICBpbnNwZWN0T3B0aW9uczogW10KICAgIH07CiAgfSwKICBjb21wdXRlZDoge30sCiAgd2F0Y2g6IHsKICAgIGNvbXBvbmVudE5hbWU6IHsKICAgICAgaGFuZGxlcjogZnVuY3Rpb24gaGFuZGxlcihuZXdWYWwpIHsKICAgICAgICBpZiAobmV3VmFsID09PSB0aGlzLiRvcHRpb25zLm5hbWUpIHsKICAgICAgICAgIHRoaXMub3BlblBhZ2UoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy5jbG9zZVBhZ2UoKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9LAogIG1vdW50ZWQ6IGZ1bmN0aW9uIG1vdW50ZWQoKSB7CiAgICB2YXIgX3RoaXMgPSB0aGlzOwogICAgdGhpcy5wdWJTdWIgPSBQdWJTdWIuc3Vic2NyaWJlKCdEZXRhaWxQYWdlJywgZnVuY3Rpb24gKF8sIGRhdGEpIHsKICAgICAgaWYgKGRhdGEuaWQpIHsKICAgICAgICBfdGhpcy5ldmVudFN0YXR1cyA9IGRhdGEuc3RhdHVzOwogICAgICAgIF90aGlzLmdldERldGFpbChkYXRhLmlkKTsKICAgICAgfQogICAgICBfdGhpcy5nZXRSb2FkT3B0aW9ucygpOwogICAgfSk7CiAgfSwKICBtZXRob2RzOiB7CiAgICBkaWN0aW9uQ2hhbmdlOiBmdW5jdGlvbiBkaWN0aW9uQ2hhbmdlKHZhbHVlLCBldmVudFBsYWNlKSB7CiAgICAgIGlmICh2YWx1ZSAmJiBldmVudFBsYWNlKSB7CiAgICAgICAgdmFyIGRhdGEgPSB0aGlzLmdldERpY3Rpb25hcnlCeUNvZGUoJ3NqZnNxeScpOwogICAgICAgIHZhciBhcnJheSA9IGRhdGEuZmlsdGVyKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgICAgICByZXR1cm4gaXRlbS52YWx1ZSA9PT0gZXZlbnRQbGFjZTsKICAgICAgICB9KVswXS5sb3dlckRpY1snanRnei1meCddOwogICAgICAgIHJldHVybiBhcnJheS5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgICAgIHJldHVybiBpdGVtLnZhbHVlID09PSB2YWx1ZTsKICAgICAgICB9KVswXS5uYW1lOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiAnLSc7CiAgICAgIH0KICAgIH0sCiAgICByZXNjdWVJbmNpZGVudHM6IGZ1bmN0aW9uIHJlc2N1ZUluY2lkZW50cyhyb3cpIHsKICAgICAgdGhpcy5TYXZlRGV0YWlsRGlhbG9nID0gdHJ1ZTsKICAgICAgdGhpcy5zYXZlRGV0YWlsRm9ybSA9IHJvdzsKICAgIH0sCiAgICBoYW5kbGVBZGQ6IGZ1bmN0aW9uIGhhbmRsZUFkZCh0eXBlKSB7CiAgICAgIGlmICh0aGlzLnBhZ2VUeXBlID09PSAnZWRpdCcpIHsKICAgICAgICBpZiAodHlwZSA9PT0gJ2NvbXBlbnNhdGVEaWFsb2cnICYmIHRoaXMuZGV0YWlsRm9ybS5jb21wZW5zYXRpb25JbmZvKSB7CiAgICAgICAgICB0aGlzW3R5cGVdID0gdHJ1ZTsKICAgICAgICAgIHRoaXNbdHlwZSArICdEZXRhaWwnXSA9IHsKICAgICAgICAgICAgZXZlbnRJZDogdGhpcy5kZXRhaWxGb3JtLmlkLAogICAgICAgICAgICByb2FkSWQ6IHRoaXMuZGV0YWlsRm9ybS5yb2FkSWQKICAgICAgICAgIH07CiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSAnY29tcGVuc2F0ZURpYWxvZycgJiYgIXRoaXMuZGV0YWlsRm9ybS5jb21wZW5zYXRpb25JbmZvKSB7CiAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7CiAgICAgICAgICAgIG5hbWU6ICdyb2FkRGFtYWdlUmVnaXN0ZXInCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgaWYgKHR5cGUgIT09ICdjb21wZW5zYXRlRGlhbG9nJykgewogICAgICAgICAgdGhpc1t0eXBlXSA9IHRydWU7CiAgICAgICAgICB0aGlzW3R5cGUgKyAnRGV0YWlsJ10gPSB7CiAgICAgICAgICAgIGV2ZW50SWQ6IHRoaXMuZGV0YWlsRm9ybS5pZCwKICAgICAgICAgICAgcm9hZElkOiB0aGlzLmRldGFpbEZvcm0ucm9hZElkCiAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLiRtZXNzYWdlLndhcm5pbmcoJ+ivt+WFiOS/neWtmOW9k+WJjee8lui+keeahOS6i+S7tuWfuuehgOS/oeaBrycpOwogICAgICB9CiAgICB9LAogICAgc2F2ZUNvbXBlbnNhdGlvbjogZnVuY3Rpb24gc2F2ZUNvbXBlbnNhdGlvbihkYXRhKSB7CiAgICAgIHZhciBfdGhpczIgPSB0aGlzOwogICAgICByZXR1cm4gX2FzeW5jVG9HZW5lcmF0b3IoLyojX19QVVJFX18qL19yZWdlbmVyYXRvclJ1bnRpbWUoKS5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUoKSB7CiAgICAgICAgdmFyIF90aGlzMiRjb21wZW5zYXRlRGlhbCwgaWQsIHVuaXQsIHByaWNlLCBwcm9wZXJ0eVN1YmplY3RJZCwgcHJvcGVydHlTdWJqZWN0TmFtZSwgcHJvcGVydHlTdWJqZWN0VHlwZSwgcHJvcGVydHlUeXBlSWQsIHRvdGxlLCBudW0sIG1lbW8sIG1vZGxlLCBjb21wZW5zYXRpb25JZCwgcGFyYW1zLCBBUEksIHR5cGUsIF95aWVsZCRBUEksIHN0YXRlLCBtZXNzYWdlOwogICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lKCkud3JhcChmdW5jdGlvbiBfY2FsbGVlJChfY29udGV4dCkgewogICAgICAgICAgd2hpbGUgKDEpIHN3aXRjaCAoX2NvbnRleHQucHJldiA9IF9jb250ZXh0Lm5leHQpIHsKICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgIF90aGlzMi5jb21wZW5zYXRlRGlhbG9nRGV0YWlsID0gZGF0YTsKICAgICAgICAgICAgICBfdGhpczIuY29tcGVuc2F0ZURpYWxvZyA9IGZhbHNlOwogICAgICAgICAgICAgIF90aGlzMiRjb21wZW5zYXRlRGlhbCA9IF90aGlzMi5jb21wZW5zYXRlRGlhbG9nRGV0YWlsLCBpZCA9IF90aGlzMiRjb21wZW5zYXRlRGlhbC5pZCwgdW5pdCA9IF90aGlzMiRjb21wZW5zYXRlRGlhbC51bml0LCBwcmljZSA9IF90aGlzMiRjb21wZW5zYXRlRGlhbC5wcmljZSwgcHJvcGVydHlTdWJqZWN0SWQgPSBfdGhpczIkY29tcGVuc2F0ZURpYWwucHJvcGVydHlTdWJqZWN0SWQsIHByb3BlcnR5U3ViamVjdE5hbWUgPSBfdGhpczIkY29tcGVuc2F0ZURpYWwucHJvcGVydHlTdWJqZWN0TmFtZSwgcHJvcGVydHlTdWJqZWN0VHlwZSA9IF90aGlzMiRjb21wZW5zYXRlRGlhbC5wcm9wZXJ0eVN1YmplY3RUeXBlLCBwcm9wZXJ0eVR5cGVJZCA9IF90aGlzMiRjb21wZW5zYXRlRGlhbC5wcm9wZXJ0eVR5cGVJZCwgdG90bGUgPSBfdGhpczIkY29tcGVuc2F0ZURpYWwudG90bGUsIG51bSA9IF90aGlzMiRjb21wZW5zYXRlRGlhbC5udW0sIG1lbW8gPSBfdGhpczIkY29tcGVuc2F0ZURpYWwubWVtbywgbW9kbGUgPSBfdGhpczIkY29tcGVuc2F0ZURpYWwubW9kbGUsIGNvbXBlbnNhdGlvbklkID0gX3RoaXMyJGNvbXBlbnNhdGVEaWFsLmNvbXBlbnNhdGlvbklkOwogICAgICAgICAgICAgIHBhcmFtcyA9IHsKICAgICAgICAgICAgICAgIGlkOiBpZCwKICAgICAgICAgICAgICAgIHVuaXQ6IHVuaXQsCiAgICAgICAgICAgICAgICBwcmljZTogcHJpY2UsCiAgICAgICAgICAgICAgICBwcm9wZXJ0eVN1YmplY3RJZDogcHJvcGVydHlTdWJqZWN0SWQsCiAgICAgICAgICAgICAgICBwcm9wZXJ0eVN1YmplY3ROYW1lOiBwcm9wZXJ0eVN1YmplY3ROYW1lLAogICAgICAgICAgICAgICAgcHJvcGVydHlTdWJqZWN0VHlwZTogcHJvcGVydHlTdWJqZWN0VHlwZSwKICAgICAgICAgICAgICAgIHByb3BlcnR5VHlwZUlkOiBwcm9wZXJ0eVR5cGVJZCwKICAgICAgICAgICAgICAgIHRvdGxlOiB0b3RsZSwKICAgICAgICAgICAgICAgIG51bTogbnVtLAogICAgICAgICAgICAgICAgbWVtbzogbWVtbywKICAgICAgICAgICAgICAgIG1vZGxlOiBtb2RsZSwKICAgICAgICAgICAgICAgIGV2ZW50SWQ6IF90aGlzMi5kZXRhaWxGb3JtLmlkLAogICAgICAgICAgICAgICAgY29tcGVuc2F0aW9uSWQ6IF90aGlzMi5kZXRhaWxGb3JtLmNvbXBlbnNhdGlvbkluZm8uaWQKICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgIF9jb250ZXh0LnByZXYgPSA0OwogICAgICAgICAgICAgIEFQSSA9IGRhdGEuaWQgPyBjb21wZW5zYXRpb25FZGl0IDogY29tcGVuc2F0aW9uQWRkOwogICAgICAgICAgICAgIHR5cGUgPSBkYXRhLmlkID8gJ+e8lui+kScgOiAn5paw5aKeJzsKICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gOTsKICAgICAgICAgICAgICByZXR1cm4gQVBJKHBhcmFtcyk7CiAgICAgICAgICAgIGNhc2UgOToKICAgICAgICAgICAgICBfeWllbGQkQVBJID0gX2NvbnRleHQuc2VudDsKICAgICAgICAgICAgICBzdGF0ZSA9IF95aWVsZCRBUEkuc3RhdGU7CiAgICAgICAgICAgICAgbWVzc2FnZSA9IF95aWVsZCRBUEkubWVzc2FnZTsKICAgICAgICAgICAgICBpZiAoc3RhdGUpIHsKICAgICAgICAgICAgICAgIF90aGlzMi5yZWxvYWQoKTsKICAgICAgICAgICAgICAgIF90aGlzMi4kbWVzc2FnZS5zdWNjZXNzKCfot6/kuqfotZTlgb/muIXljZUnICsgdHlwZSArICfmiJDlip/vvIEnKTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgX3RoaXMyLiRtZXNzYWdlLmVycm9yKG1lc3NhZ2UgfHwgJ+i3r+S6p+i1lOWBv+a4heWNlScgKyB0eXBlICsgJ+Wksei0pe+8gScpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBfY29udGV4dC5uZXh0ID0gMTg7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMTU6CiAgICAgICAgICAgICAgX2NvbnRleHQucHJldiA9IDE1OwogICAgICAgICAgICAgIF9jb250ZXh0LnQwID0gX2NvbnRleHRbImNhdGNoIl0oNCk7CiAgICAgICAgICAgICAgX3RoaXMyLiRtZXNzYWdlLmVycm9yKF9jb250ZXh0LnQwIHx8ICfot6/kuqfotZTlgb/muIXljZXkv53lrZjlpLHotKXvvIEnKTsKICAgICAgICAgICAgY2FzZSAxODoKICAgICAgICAgICAgY2FzZSAiZW5kIjoKICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQuc3RvcCgpOwogICAgICAgICAgfQogICAgICAgIH0sIF9jYWxsZWUsIG51bGwsIFtbNCwgMTVdXSk7CiAgICAgIH0pKSgpOwogICAgfSwKICAgIGhhbmRsZUVkaXQ6IGZ1bmN0aW9uIGhhbmRsZUVkaXQocm93LCB0eXBlKSB7CiAgICAgIHRoaXNbdHlwZSArICdEZXRhaWwnXSA9IHJvdzsKICAgICAgdGhpc1t0eXBlXSA9IHRydWU7CiAgICB9LAogICAgLy8g5oul5aC16Kej6ZmkCiAgICBoYW5kbGVSZWxlYXNlOiBmdW5jdGlvbiBoYW5kbGVSZWxlYXNlKHJvdykgewogICAgICB2YXIgX3RoaXMzID0gdGhpczsKICAgICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3JSdW50aW1lKCkubWFyayhmdW5jdGlvbiBfY2FsbGVlMigpIHsKICAgICAgICB2YXIgX3lpZWxkJHRyYWZmaWNKYW1FZGl0LCBzdGF0ZSwgdmFsdWUsIG1lc3NhZ2U7CiAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUoKS53cmFwKGZ1bmN0aW9uIF9jYWxsZWUyJChfY29udGV4dDIpIHsKICAgICAgICAgIHdoaWxlICgxKSBzd2l0Y2ggKF9jb250ZXh0Mi5wcmV2ID0gX2NvbnRleHQyLm5leHQpIHsKICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgIGlmICghX3RoaXMzLnJlbGVhc2VUaW1lKSB7CiAgICAgICAgICAgICAgICBfY29udGV4dDIubmV4dCA9IDExOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJvdy5lbmRUaW1lID0gbW9tZW50KF90aGlzMy5yZWxlYXNlVGltZSkuZm9ybWF0KCdZWVlZLU1NLUREIEhIOm1tOnNzJyk7CiAgICAgICAgICAgICAgX2NvbnRleHQyLm5leHQgPSA0OwogICAgICAgICAgICAgIHJldHVybiB0cmFmZmljSmFtRWRpdChyb3cpOwogICAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgICAgX3lpZWxkJHRyYWZmaWNKYW1FZGl0ID0gX2NvbnRleHQyLnNlbnQ7CiAgICAgICAgICAgICAgc3RhdGUgPSBfeWllbGQkdHJhZmZpY0phbUVkaXQuc3RhdGU7CiAgICAgICAgICAgICAgdmFsdWUgPSBfeWllbGQkdHJhZmZpY0phbUVkaXQudmFsdWU7CiAgICAgICAgICAgICAgbWVzc2FnZSA9IF95aWVsZCR0cmFmZmljSmFtRWRpdC5tZXNzYWdlOwogICAgICAgICAgICAgIGlmIChzdGF0ZSkgewogICAgICAgICAgICAgICAgX3RoaXMzLiRtZXNzYWdlLnN1Y2Nlc3MoJ+aLpeWgteino+mZpOaIkOWKnycpOwogICAgICAgICAgICAgICAgX3RoaXMzLnJlbG9hZCgpOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBfdGhpczMuJG1lc3NhZ2UuZXJyb3IobWVzc2FnZSB8fCAn5oul5aC16Kej6Zmk5aSx6LSlJyk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9jb250ZXh0Mi5uZXh0ID0gMTI7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMTE6CiAgICAgICAgICAgICAgX3RoaXMzLiRtZXNzYWdlLndhcm5pbmcoJ+ivt+mAieaLqeino+mZpOaXtumXtCcpOwogICAgICAgICAgICBjYXNlIDEyOgogICAgICAgICAgICBjYXNlICJlbmQiOgogICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDIuc3RvcCgpOwogICAgICAgICAgfQogICAgICAgIH0sIF9jYWxsZWUyKTsKICAgICAgfSkpKCk7CiAgICB9LAogICAgaGFuZGxlRGVsZXRlOiBmdW5jdGlvbiBoYW5kbGVEZWxldGUoZGF0YSwgdHlwZSkgewogICAgICB2YXIgX3RoaXM0ID0gdGhpczsKICAgICAgdGhpcy4kY29uZmlybSgn5piv5ZCm5Yig6Zmk6K+l5pWw5o2u77yfJywgJ+aPkOekuicsIHsKICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogJ+ehruWumicsCiAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogJ+WPlua2iCcsCiAgICAgICAgdHlwZTogJ3dhcm5pbmcnCiAgICAgIH0pLnRoZW4oLyojX19QVVJFX18qL19hc3luY1RvR2VuZXJhdG9yKC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3JSdW50aW1lKCkubWFyayhmdW5jdGlvbiBfY2FsbGVlMygpIHsKICAgICAgICB2YXIgQVBJLCBfeWllbGQkQVBJMiwgc3RhdGU7CiAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUoKS53cmFwKGZ1bmN0aW9uIF9jYWxsZWUzJChfY29udGV4dDMpIHsKICAgICAgICAgIHdoaWxlICgxKSBzd2l0Y2ggKF9jb250ZXh0My5wcmV2ID0gX2NvbnRleHQzLm5leHQpIHsKICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgIF9jb250ZXh0My5wcmV2ID0gMDsKICAgICAgICAgICAgICBfY29udGV4dDMudDAgPSB0eXBlOwogICAgICAgICAgICAgIF9jb250ZXh0My5uZXh0ID0gX2NvbnRleHQzLnQwID09PSAnY29tcGVuc2F0ZURpYWxvZycgPyA0IDogX2NvbnRleHQzLnQwID09PSAndHJhZmZpY0phbURpYWxvZycgPyA2IDogX2NvbnRleHQzLnQwID09PSAnY29udHJvbERpYWxvZycgPyA4IDogX2NvbnRleHQzLnQwID09PSAncmVzY3VlRGlhbG9nJyA/IDEwIDogMTI7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgNDoKICAgICAgICAgICAgICBBUEkgPSBjb21wZW5zYXRpb25EZWxldGU7CiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0My5hYnJ1cHQoImJyZWFrIiwgMTIpOwogICAgICAgICAgICBjYXNlIDY6CiAgICAgICAgICAgICAgQVBJID0gdHJhZmZpY0phbURlbGV0ZTsKICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQzLmFicnVwdCgiYnJlYWsiLCAxMik7CiAgICAgICAgICAgIGNhc2UgODoKICAgICAgICAgICAgICBBUEkgPSB0cmFmZmljQ29udHJvbERlbGV0ZTsKICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQzLmFicnVwdCgiYnJlYWsiLCAxMik7CiAgICAgICAgICAgIGNhc2UgMTA6CiAgICAgICAgICAgICAgQVBJID0gcmVzY3VlRmVlRGVsZXRlOwogICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDMuYWJydXB0KCJicmVhayIsIDEyKTsKICAgICAgICAgICAgY2FzZSAxMjoKICAgICAgICAgICAgICBfY29udGV4dDMubmV4dCA9IDE0OwogICAgICAgICAgICAgIHJldHVybiBBUEkoZGF0YS5pZCk7CiAgICAgICAgICAgIGNhc2UgMTQ6CiAgICAgICAgICAgICAgX3lpZWxkJEFQSTIgPSBfY29udGV4dDMuc2VudDsKICAgICAgICAgICAgICBzdGF0ZSA9IF95aWVsZCRBUEkyLnN0YXRlOwogICAgICAgICAgICAgIGlmIChzdGF0ZSkgewogICAgICAgICAgICAgICAgX3RoaXM0LiRtZXNzYWdlLnN1Y2Nlc3MoJ+WIoOmZpOaIkOWKnycpOwogICAgICAgICAgICAgICAgX3RoaXM0LnJlbG9hZCgpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBfY29udGV4dDMubmV4dCA9IDIyOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDE5OgogICAgICAgICAgICAgIF9jb250ZXh0My5wcmV2ID0gMTk7CiAgICAgICAgICAgICAgX2NvbnRleHQzLnQxID0gX2NvbnRleHQzWyJjYXRjaCJdKDApOwogICAgICAgICAgICAgIF90aGlzNC4kbWVzc2FnZS5lcnJvcihfY29udGV4dDMudDEgfHwgJ+WIoOmZpOWksei0pe+8gScpOwogICAgICAgICAgICBjYXNlIDIyOgogICAgICAgICAgICBjYXNlICJlbmQiOgogICAgICAgICAgICAgIHJldHVybiBfY29udGV4dDMuc3RvcCgpOwogICAgICAgICAgfQogICAgICAgIH0sIF9jYWxsZWUzLCBudWxsLCBbWzAsIDE5XV0pOwogICAgICB9KSkpOwogICAgfSwKICAgIHJlbG9hZDogZnVuY3Rpb24gcmVsb2FkKCkgewogICAgICB0aGlzLmdldERldGFpbCh0aGlzLmRldGFpbEZvcm0uaWQpOwogICAgfSwKICAgIGdldERpY3Rpb25hcnlCeUNvZGU6IGdldERpY3Rpb25hcnlCeUNvZGUsCiAgICBkaWN0aW9uYXJ5RXNjYXBlOiBkaWN0aW9uYXJ5RXNjYXBlLAogICAgc2hvd0FwcG9pbnREaWFsb2c6IGZ1bmN0aW9uIHNob3dBcHBvaW50RGlhbG9nKCkgewogICAgICAvLyB0aGlzLmJhc2VJbmZvID0gdGhpcy4kcmVmcy5iYXNpY3NDb250ZW50LnNlbmRCYXNlRGF0YSgpCiAgICAgIC8vIHRoaXMuJHJlZnMuYWRkRWRpdEZvcm0udmFsaWRhdGUoYXN5bmMgKHZhbGlkLCBvYmplY3QpID0+IHsKICAgICAgLy8gICBpZiAoIXZhbGlkKSB7CiAgICAgIC8vICAgICB0aGlzLiRtZXNzYWdlLndhcm5pbmcoCiAgICAgIC8vICAgICAgIGDmnIkke09iamVjdC5rZXlzKG9iamVjdCkubGVuZ3RoICsgKGJhc2ljZURhdGEuZmllbGROdW0gfHwgMCkKICAgICAgLy8gICAgICAgfeS4quWtl+auteacqumAmui/h+agoemqjO+8jOivt+ato+ehruWhq+WGmeihqOWNleWGheWuueOAgmAKICAgICAgLy8gICAgICkKICAgICAgLy8gICB9IGVsc2UgewoKICAgICAgLy8gICB9CiAgICAgIC8vIH0pCiAgICAgIHRoaXMuYXBwb2ludERpYWxvZyA9IHRydWU7CiAgICB9LAogICAgaGFuZGxlVXBkYXRhSGFuZGxlczogZnVuY3Rpb24gaGFuZGxlVXBkYXRhSGFuZGxlcygpIHsKICAgICAgY29uc29sZS5sb2coJ+abtOaWsOa1geeoi+iusOW9lScpOwogICAgICB0aGlzLmdldERldGFpbCh0aGlzLmRldGFpbEZvcm0uaWQpOwogICAgfSwKICAgIC8vIOa3u+WKoOWkhOe9rueOr+iKggogICAgaGFuZGxlQWRkRGlzcG9zYWw6IGZ1bmN0aW9uIGhhbmRsZUFkZERpc3Bvc2FsKCkgewogICAgICB0aGlzLmRpc3Bvc2FsUHJvY2VzcyA9IHRydWU7CiAgICB9LAogICAgY2xpY2tFZGl0OiBmdW5jdGlvbiBjbGlja0VkaXQoKSB7CiAgICAgIHZhciBfdGhpczUgPSB0aGlzOwogICAgICB0aGlzLnBhZ2VUeXBlID0gdGhpcy5wYWdlVHlwZSA9PT0gJ2VkaXQnID8gJ2RldGFpbCcgOiAnZWRpdCc7CiAgICAgIGlmICh0aGlzLnBhZ2VUeXBlICE9PSAnZWRpdCcpIHsKICAgICAgICB0aGlzLiRuZXh0VGljayhmdW5jdGlvbiAoKSB7CiAgICAgICAgICBfdGhpczUuJHJlZnMuYmFzaWNzQ29udGVudC5nZXREZXRhaWwoX3RoaXM1LmRldGFpbEZvcm0pOwogICAgICAgIH0pOwogICAgICB9CiAgICB9LAogICAgY2xpY2tTYXZlOiBmdW5jdGlvbiBjbGlja1NhdmUoKSB7CiAgICAgIHZhciBfdGhpczYgPSB0aGlzOwogICAgICByZXR1cm4gX2FzeW5jVG9HZW5lcmF0b3IoLyojX19QVVJFX18qL19yZWdlbmVyYXRvclJ1bnRpbWUoKS5tYXJrKGZ1bmN0aW9uIF9jYWxsZWU0KCkgewogICAgICAgIHZhciBkYXRhLCBxdWVyeSwgX3lpZWxkJHRhYmxlRWRpdCwgc3RhdGUsIG1lc3NhZ2UsIHZhbHVlLCBfdGhpczYkZGV0YWlsRm9ybTsKICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZSgpLndyYXAoZnVuY3Rpb24gX2NhbGxlZTQkKF9jb250ZXh0NCkgewogICAgICAgICAgd2hpbGUgKDEpIHN3aXRjaCAoX2NvbnRleHQ0LnByZXYgPSBfY29udGV4dDQubmV4dCkgewogICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgZGF0YSA9IF90aGlzNi4kcmVmcy5iYXNpY3NDb250ZW50LnNlbmRCYXNlRGF0YSgpOwogICAgICAgICAgICAgIGlmICghZGF0YS5maWVsZE51bSkgewogICAgICAgICAgICAgICAgX2NvbnRleHQ0Lm5leHQgPSA1OwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF90aGlzNi4kbWVzc2FnZS53YXJuaW5nKCJcdTY3MDkiLmNvbmNhdChkYXRhLmZpZWxkTnVtLCAiXHU0RTJBXHU1QjU3XHU2QkI1XHU2NzJBXHU5MDFBXHU4RkM3XHU2ODIxXHU5QThDXHVGRjBDXHU4QkY3XHU2QjYzXHU3ODZFXHU1ODZCXHU1MTk5XHU4ODY4XHU1MzU1XHU1MTg1XHU1QkI5XHUzMDAyIikpOwogICAgICAgICAgICAgIF9jb250ZXh0NC5uZXh0ID0gMjM7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgNToKICAgICAgICAgICAgICBxdWVyeSA9IF9vYmplY3RTcHJlYWQoe30sIGRhdGEpOwogICAgICAgICAgICAgIGRlbGV0ZSBxdWVyeS5oYW5kbGVzOwogICAgICAgICAgICAgIGRlbGV0ZSBxdWVyeS5jb21wZW5zYXRpb25JbmZvOwogICAgICAgICAgICAgIGRlbGV0ZSBxdWVyeS50cmFmZmljQ29uZ2VzdGlvbnM7CiAgICAgICAgICAgICAgZGVsZXRlIHF1ZXJ5LnRyYWZmaWNDb250cm9sczsKICAgICAgICAgICAgICBxdWVyeS5ldmVudFR5cGUgPSBKU09OLnN0cmluZ2lmeShxdWVyeS5ldmVudFR5cGUpOwogICAgICAgICAgICAgIF9jb250ZXh0NC5wcmV2ID0gMTE7CiAgICAgICAgICAgICAgX3RoaXM2LmVkaXRTYXZlTG9hZGluZyA9IHRydWU7CiAgICAgICAgICAgICAgX2NvbnRleHQ0Lm5leHQgPSAxNTsKICAgICAgICAgICAgICByZXR1cm4gdGFibGVFZGl0KHF1ZXJ5KTsKICAgICAgICAgICAgY2FzZSAxNToKICAgICAgICAgICAgICBfeWllbGQkdGFibGVFZGl0ID0gX2NvbnRleHQ0LnNlbnQ7CiAgICAgICAgICAgICAgc3RhdGUgPSBfeWllbGQkdGFibGVFZGl0LnN0YXRlOwogICAgICAgICAgICAgIG1lc3NhZ2UgPSBfeWllbGQkdGFibGVFZGl0Lm1lc3NhZ2U7CiAgICAgICAgICAgICAgdmFsdWUgPSBfeWllbGQkdGFibGVFZGl0LnZhbHVlOwogICAgICAgICAgICAgIGlmIChzdGF0ZSkgewogICAgICAgICAgICAgICAgX3RoaXM2LiRtZXNzYWdlLnN1Y2Nlc3MoIlx1N0YxNlx1OEY5MVx1NEZERFx1NUI1OFx1NjIxMFx1NTI5RiIpOwogICAgICAgICAgICAgICAgX3RoaXM2LnBhZ2VUeXBlID0gJ2VkaXQnOwogICAgICAgICAgICAgICAgX3RoaXM2LmRldGFpbEZvcm0gPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIF90aGlzNi5kZXRhaWxGb3JtKSwgZGF0YSk7CiAgICAgICAgICAgICAgICBfdGhpczYuZGV0YWlsRm9ybS5jb21wZW5zYXRpb25EZXRhaWxzID0gKChfdGhpczYkZGV0YWlsRm9ybSA9IF90aGlzNi5kZXRhaWxGb3JtKSA9PT0gbnVsbCB8fCBfdGhpczYkZGV0YWlsRm9ybSA9PT0gdm9pZCAwIHx8IChfdGhpczYkZGV0YWlsRm9ybSA9IF90aGlzNiRkZXRhaWxGb3JtLmNvbXBlbnNhdGlvbkluZm8pID09PSBudWxsIHx8IF90aGlzNiRkZXRhaWxGb3JtID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfdGhpczYkZGV0YWlsRm9ybS5jb21wZW5zYXRpb25EZXRhaWxzKSB8fCBbXTsKICAgICAgICAgICAgICAgIF90aGlzNi5kZXRhaWxGb3JtLmV2ZW50VHlwZSA9IEpTT04ucGFyc2UoZGF0YS5ldmVudFR5cGUpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgY2FzZSAyMDoKICAgICAgICAgICAgICBfY29udGV4dDQucHJldiA9IDIwOwogICAgICAgICAgICAgIF90aGlzNi5lZGl0U2F2ZUxvYWRpbmcgPSBmYWxzZTsKICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ0LmZpbmlzaCgyMCk7CiAgICAgICAgICAgIGNhc2UgMjM6CiAgICAgICAgICAgIGNhc2UgImVuZCI6CiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0NC5zdG9wKCk7CiAgICAgICAgICB9CiAgICAgICAgfSwgX2NhbGxlZTQsIG51bGwsIFtbMTEsLCAyMCwgMjNdXSk7CiAgICAgIH0pKSgpOwogICAgfSwKICAgIC8vIOS6i+S7tuWujOe7kwogICAgaGFuZGxlRXZlbnRDb21wbGV0ZWQ6IGZ1bmN0aW9uIGhhbmRsZUV2ZW50Q29tcGxldGVkKCkgewogICAgICB2YXIgX3RoaXM3ID0gdGhpczsKICAgICAgdGhpcy4kY29uZmlybSgn56Gu5a6a5LqL5Lu25bey5a6M57uT5ZCX77yfJywgJ+aPkOekuicsIHsKICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogJ+ehruiupCcsCiAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogJ+WPlua2iCcsCiAgICAgICAgdHlwZTogJ3dhcm5pbmcnCiAgICAgIH0pLnRoZW4oLyojX19QVVJFX18qL19hc3luY1RvR2VuZXJhdG9yKC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3JSdW50aW1lKCkubWFyayhmdW5jdGlvbiBfY2FsbGVlNSgpIHsKICAgICAgICB2YXIgZGF0YSwgX3lpZWxkJGV2ZW50Q29tcGxldGVkLCBzdGF0ZTsKICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZSgpLndyYXAoZnVuY3Rpb24gX2NhbGxlZTUkKF9jb250ZXh0NSkgewogICAgICAgICAgd2hpbGUgKDEpIHN3aXRjaCAoX2NvbnRleHQ1LnByZXYgPSBfY29udGV4dDUubmV4dCkgewogICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgZGF0YSA9IHsKICAgICAgICAgICAgICAgIGV2ZW50SWQ6IF90aGlzNy5kZXRhaWxGb3JtLmlkLAogICAgICAgICAgICAgICAgZXZlbnROb2RlOiA5CiAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICBfY29udGV4dDUubmV4dCA9IDM7CiAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50Q29tcGxldGVkKGRhdGEpOwogICAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgICAgX3lpZWxkJGV2ZW50Q29tcGxldGVkID0gX2NvbnRleHQ1LnNlbnQ7CiAgICAgICAgICAgICAgc3RhdGUgPSBfeWllbGQkZXZlbnRDb21wbGV0ZWQuc3RhdGU7CiAgICAgICAgICAgICAgaWYgKHN0YXRlKSB7CiAgICAgICAgICAgICAgICBfdGhpczcuJG1lc3NhZ2Uuc3VjY2Vzcygn5LqL5Lu25a6M57uT5oiQ5Yqf77yBJyk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICBjYXNlIDY6CiAgICAgICAgICAgIGNhc2UgImVuZCI6CiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0NS5zdG9wKCk7CiAgICAgICAgICB9CiAgICAgICAgfSwgX2NhbGxlZTUpOwogICAgICB9KSkpOwogICAgfSwKICAgIC8vIOi3r+auteaVsOaNruafpeivogogICAgZ2V0Um9hZE9wdGlvbnM6IGZ1bmN0aW9uIGdldFJvYWRPcHRpb25zKCkgewogICAgICB2YXIgX3RoaXM4ID0gdGhpczsKICAgICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3JSdW50aW1lKCkubWFyayhmdW5jdGlvbiBfY2FsbGVlNigpIHsKICAgICAgICB2YXIgX3lpZWxkJHJvYWRTZWN0aW9uSW5mLCBfeWllbGQkcm9hZFNlY3Rpb25JbmYyLCByb3dzOwogICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lKCkud3JhcChmdW5jdGlvbiBfY2FsbGVlNiQoX2NvbnRleHQ2KSB7CiAgICAgICAgICB3aGlsZSAoMSkgc3dpdGNoIChfY29udGV4dDYucHJldiA9IF9jb250ZXh0Ni5uZXh0KSB7CiAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICBfY29udGV4dDYubmV4dCA9IDI7CiAgICAgICAgICAgICAgcmV0dXJuIHJvYWRTZWN0aW9uSW5mb0ludGVyKHsKICAgICAgICAgICAgICAgIHBhZ2VCZWFuOiB7CiAgICAgICAgICAgICAgICAgIHBhZ2VTaXplOiAtMQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgX3lpZWxkJHJvYWRTZWN0aW9uSW5mID0gX2NvbnRleHQ2LnNlbnQ7CiAgICAgICAgICAgICAgX3lpZWxkJHJvYWRTZWN0aW9uSW5mMiA9IF95aWVsZCRyb2FkU2VjdGlvbkluZi5yb3dzOwogICAgICAgICAgICAgIHJvd3MgPSBfeWllbGQkcm9hZFNlY3Rpb25JbmYyID09PSB2b2lkIDAgPyBbXSA6IF95aWVsZCRyb2FkU2VjdGlvbkluZjI7CiAgICAgICAgICAgICAgX3RoaXM4LnJvYWRPcHRpb25zID0gcm93cy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHsKICAgICAgICAgICAgICAgIGl0ZW0ucm9hZE5hbWUgPSBpdGVtLm5hbWUgKyAnICcgKyBpdGVtLmNvZGU7CiAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAvLyBpZighdGhpcy5pZCkgewogICAgICAgICAgICAgIC8vICAgdGhpcy4kc2V0KHRoaXMuZGV0YWlsRm9ybSwgJ3JvYWRJZCcsIHRoaXMucm9hZE9wdGlvbnNbMF0uaWQpCiAgICAgICAgICAgICAgLy8gICB0aGlzLnJvYWRDaGFuZ2UodGhpcy5yb2FkT3B0aW9uc1swXS5pZCkKICAgICAgICAgICAgICAvLyB9CiAgICAgICAgICAgIGNhc2UgNjoKICAgICAgICAgICAgY2FzZSAiZW5kIjoKICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ2LnN0b3AoKTsKICAgICAgICAgIH0KICAgICAgICB9LCBfY2FsbGVlNik7CiAgICAgIH0pKSgpOwogICAgfSwKICAgIC8vIOi3r+autemAieaLqeWPmOWMlgogICAgcm9hZENoYW5nZTogZnVuY3Rpb24gcm9hZENoYW5nZSh2YWx1ZSkgewogICAgICB2YXIgX3RoaXM5ID0gdGhpczsKICAgICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3JSdW50aW1lKCkubWFyayhmdW5jdGlvbiBfY2FsbGVlNygpIHsKICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZSgpLndyYXAoZnVuY3Rpb24gX2NhbGxlZTckKF9jb250ZXh0NykgewogICAgICAgICAgd2hpbGUgKDEpIHN3aXRjaCAoX2NvbnRleHQ3LnByZXYgPSBfY29udGV4dDcubmV4dCkgewogICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgX3RoaXM5LmdldFRlYW1EYXRhKHZhbHVlKTsKICAgICAgICAgICAgICBfdGhpczkuZ2V0SW5zcGVjdERhdGEodmFsdWUpOwogICAgICAgICAgICAgIC8vIOmAmui/h+i3r+auteS/oeaBr+iOt+WPluayv+e6v+iuvuWkh+S/oeaBrwogICAgICAgICAgICAgIF90aGlzOS5nZXRBbG9uZ1JvdXRlSW5mbyh2YWx1ZSwgZnVuY3Rpb24gKGRhdGEpIHsKICAgICAgICAgICAgICAgIHZhciBfdGhpczkkZGV0YWlsRm9ybSA9IF90aGlzOS5kZXRhaWxGb3JtLAogICAgICAgICAgICAgICAgICBzdGFydFBhdHJvbElkID0gX3RoaXM5JGRldGFpbEZvcm0uc3RhcnRQYXRyb2xJZCwKICAgICAgICAgICAgICAgICAgZW5kUGF0cm9sSWQgPSBfdGhpczkkZGV0YWlsRm9ybS5lbmRQYXRyb2xJZDsKCiAgICAgICAgICAgICAgICAvKg0KICAgICAgICAgICAgICAgICAqIOW3oeajgOW8gOWni++8jOe7k+adn+ermQ0KICAgICAgICAgICAgICAgICAqICovCiAgICAgICAgICAgICAgICBpZiAoc3RhcnRQYXRyb2xJZCkgewogICAgICAgICAgICAgICAgICBpZiAoIWRhdGEuc29tZShmdW5jdGlvbiAoaSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBpLmlkID09PSBzdGFydFBhdHJvbElkOwogICAgICAgICAgICAgICAgICB9KSkgewogICAgICAgICAgICAgICAgICAgIF90aGlzOS5kZXRhaWxGb3JtLnN0YXJ0UGF0cm9sSWQgPSAnJzsKICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uIChfKSB7CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX3RoaXM5LiRtZXNzYWdlLndhcm5pbmcoJ+ivt+mHjeaWsOmAieaLqeW3oeajgOW8gOWni+ermS4uJyk7CiAgICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChlbmRQYXRyb2xJZCkgewogICAgICAgICAgICAgICAgICBpZiAoIWRhdGEuc29tZShmdW5jdGlvbiAoaSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBpLmlkID09PSBlbmRQYXRyb2xJZDsKICAgICAgICAgICAgICAgICAgfSkpIHsKICAgICAgICAgICAgICAgICAgICBfdGhpczkuZGV0YWlsRm9ybS5lbmRQYXRyb2xJZCA9ICcnOwogICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKF8pIHsKICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfdGhpczkuJG1lc3NhZ2Uud2FybmluZygn6K+36YeN5paw6YCJ5oup5beh5qOA57uT5p2f56uZLi4nKTsKICAgICAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgIGNhc2UgImVuZCI6CiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0Ny5zdG9wKCk7CiAgICAgICAgICB9CiAgICAgICAgfSwgX2NhbGxlZTcpOwogICAgICB9KSkoKTsKICAgIH0sCiAgICAvLyDpgJrov4fot6/mrrXkv6Hmga/ojrflj5bmsr/nur/orr7lpIfkv6Hmga8KICAgIGdldEFsb25nUm91dGVJbmZvOiBmdW5jdGlvbiBnZXRBbG9uZ1JvdXRlSW5mbyh2YWx1ZSwgY2FsbGJhY2spIHsKICAgICAgdmFyIF90aGlzMTAgPSB0aGlzOwogICAgICByZXR1cm4gX2FzeW5jVG9HZW5lcmF0b3IoLyojX19QVVJFX18qL19yZWdlbmVyYXRvclJ1bnRpbWUoKS5tYXJrKGZ1bmN0aW9uIF9jYWxsZWU4KCkgewogICAgICAgIHZhciBfd2lwZURhdGEsIF95aWVsZCRhbG9uZ1JvdXRlSW5mbywgX3lpZWxkJGFsb25nUm91dGVJbmZvMiwgcm93czsKICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZSgpLndyYXAoZnVuY3Rpb24gX2NhbGxlZTgkKF9jb250ZXh0OCkgewogICAgICAgICAgd2hpbGUgKDEpIHN3aXRjaCAoX2NvbnRleHQ4LnByZXYgPSBfY29udGV4dDgubmV4dCkgewogICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgX3dpcGVEYXRhID0gZnVuY3Rpb24gX3dpcGVEYXRhKCkgewogICAgICAgICAgICAgICAgX3RoaXMxMC5hbG9uZ1JvdXRlSW5mb0RhdGEgPSBbXTsKICAgICAgICAgICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKF90aGlzMTAuYWxvbmdSb3V0ZUluZm9EYXRhKTsKICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgIF9jb250ZXh0OC5wcmV2ID0gMTsKICAgICAgICAgICAgICBfY29udGV4dDgubmV4dCA9IDQ7CiAgICAgICAgICAgICAgcmV0dXJuIGFsb25nUm91dGVJbmZvSW50ZXIocmVmaW5lUmVxdWVzdEJvZHkoewogICAgICAgICAgICAgICAgcXVlcnlzOiBbewogICAgICAgICAgICAgICAgICBvcGVyYXRpb246ICdJTicsCiAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiAncm9hZF9zZWdtZW50X2lkXycsCiAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZQogICAgICAgICAgICAgICAgfV0KICAgICAgICAgICAgICB9KSwgJ2FkZEVkaXQnKTsKICAgICAgICAgICAgY2FzZSA0OgogICAgICAgICAgICAgIF95aWVsZCRhbG9uZ1JvdXRlSW5mbyA9IF9jb250ZXh0OC5zZW50OwogICAgICAgICAgICAgIF95aWVsZCRhbG9uZ1JvdXRlSW5mbzIgPSBfeWllbGQkYWxvbmdSb3V0ZUluZm8ucm93czsKICAgICAgICAgICAgICByb3dzID0gX3lpZWxkJGFsb25nUm91dGVJbmZvMiA9PT0gdm9pZCAwID8gW10gOiBfeWllbGQkYWxvbmdSb3V0ZUluZm8yOwogICAgICAgICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKHJvd3MpOwogICAgICAgICAgICAgIF90aGlzMTAuYWxvbmdSb3V0ZUluZm9EYXRhID0gcm93czsKICAgICAgICAgICAgICBfY29udGV4dDgubmV4dCA9IDE0OwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIDExOgogICAgICAgICAgICAgIF9jb250ZXh0OC5wcmV2ID0gMTE7CiAgICAgICAgICAgICAgX2NvbnRleHQ4LnQwID0gX2NvbnRleHQ4WyJjYXRjaCJdKDEpOwogICAgICAgICAgICAgIC8vIOS4jeS4uuivt+axgui/h+W/q+e7k+adn+eahOaDheWGteS4i++8jOmHjee9rgogICAgICAgICAgICAgIGlmIChfY29udGV4dDgudDAubWVzc2FnZSAhPT0gJ2NhbmNlbGVkJykgX3dpcGVEYXRhKCk7CiAgICAgICAgICAgIGNhc2UgMTQ6CiAgICAgICAgICAgIGNhc2UgImVuZCI6CiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0OC5zdG9wKCk7CiAgICAgICAgICB9CiAgICAgICAgfSwgX2NhbGxlZTgsIG51bGwsIFtbMSwgMTFdXSk7CiAgICAgIH0pKSgpOwogICAgfSwKICAgIHNpdGVDaGFuZ2U6IGZ1bmN0aW9uIHNpdGVDaGFuZ2UoZSwgdHlwZSkgewogICAgICB2YXIgc2l0ZUluZm8gPSB0aGlzLmFsb25nUm91dGVJbmZvRGF0YS5maW5kKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgICAgcmV0dXJuIGl0ZW0uaWQgPT09IGU7CiAgICAgIH0pOwogICAgICB0aGlzLmRldGFpbEZvcm1bIiIuY29uY2F0KHR5cGUsICJOYW1lIildID0gc2l0ZUluZm8ubmFtZTsKICAgIH0sCiAgICAvLyDpgJrov4fot6/mrrXkv6Hmga/ojrflj5blt6Hmn6XmlZHmj7TpmJ/kvI3kv6Hmga8KICAgIGdldFRlYW1EYXRhOiBmdW5jdGlvbiBnZXRUZWFtRGF0YSh2YWx1ZSkgewogICAgICB2YXIgX3RoaXMxMSA9IHRoaXM7CiAgICAgIHJldHVybiBfYXN5bmNUb0dlbmVyYXRvcigvKiNfX1BVUkVfXyovX3JlZ2VuZXJhdG9yUnVudGltZSgpLm1hcmsoZnVuY3Rpb24gX2NhbGxlZTkoKSB7CiAgICAgICAgdmFyIF95aWVsZCR0ZWFtRGF0YSwgX3lpZWxkJHRlYW1EYXRhJHJvd3MsIHJvd3M7CiAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUoKS53cmFwKGZ1bmN0aW9uIF9jYWxsZWU5JChfY29udGV4dDkpIHsKICAgICAgICAgIHdoaWxlICgxKSBzd2l0Y2ggKF9jb250ZXh0OS5wcmV2ID0gX2NvbnRleHQ5Lm5leHQpIHsKICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgIF9jb250ZXh0OS5uZXh0ID0gMjsKICAgICAgICAgICAgICByZXR1cm4gdGVhbURhdGEocmVmaW5lUmVxdWVzdEJvZHkoewogICAgICAgICAgICAgICAgcXVlcnlzOiBbewogICAgICAgICAgICAgICAgICBvcGVyYXRpb246ICdJTicsCiAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiAnci5pZF8nLAogICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUKICAgICAgICAgICAgICAgIH0sIHsKICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uOiAnRVFVQUwnLAogICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogJ3QudHlwZV8nLAogICAgICAgICAgICAgICAgICB2YWx1ZTogJzInCiAgICAgICAgICAgICAgICB9XQogICAgICAgICAgICAgIH0pLCAnYWRkRWRpdCcpOwogICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgX3lpZWxkJHRlYW1EYXRhID0gX2NvbnRleHQ5LnNlbnQ7CiAgICAgICAgICAgICAgX3lpZWxkJHRlYW1EYXRhJHJvd3MgPSBfeWllbGQkdGVhbURhdGEucm93czsKICAgICAgICAgICAgICByb3dzID0gX3lpZWxkJHRlYW1EYXRhJHJvd3MgPT09IHZvaWQgMCA/IFtdIDogX3lpZWxkJHRlYW1EYXRhJHJvd3M7CiAgICAgICAgICAgICAgX3RoaXMxMS50ZWFtT3B0aW9ucyA9IHJvd3M7CiAgICAgICAgICAgIGNhc2UgNjoKICAgICAgICAgICAgY2FzZSAiZW5kIjoKICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQ5LnN0b3AoKTsKICAgICAgICAgIH0KICAgICAgICB9LCBfY2FsbGVlOSk7CiAgICAgIH0pKSgpOwogICAgfSwKICAgIC8vIOmAmui/h+i3r+auteS/oeaBr+iOt+WPluW3oeafpeaVkeaPtOmYn+S8jeS/oeaBrwogICAgZ2V0SW5zcGVjdERhdGE6IGZ1bmN0aW9uIGdldEluc3BlY3REYXRhKHZhbHVlKSB7CiAgICAgIHZhciBfdGhpczEyID0gdGhpczsKICAgICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3JSdW50aW1lKCkubWFyayhmdW5jdGlvbiBfY2FsbGVlMTAoKSB7CiAgICAgICAgdmFyIF95aWVsZCR0ZWFtRGF0YTIsIF95aWVsZCR0ZWFtRGF0YTIkcm93cywgcm93czsKICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZSgpLndyYXAoZnVuY3Rpb24gX2NhbGxlZTEwJChfY29udGV4dDEwKSB7CiAgICAgICAgICB3aGlsZSAoMSkgc3dpdGNoIChfY29udGV4dDEwLnByZXYgPSBfY29udGV4dDEwLm5leHQpIHsKICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgIF9jb250ZXh0MTAubmV4dCA9IDI7CiAgICAgICAgICAgICAgcmV0dXJuIHRlYW1EYXRhKHJlZmluZVJlcXVlc3RCb2R5KHsKICAgICAgICAgICAgICAgIHF1ZXJ5czogW3sKICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uOiAnSU4nLAogICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogJ3IuaWRfJywKICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlCiAgICAgICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbjogJ0VRVUFMJywKICAgICAgICAgICAgICAgICAgcHJvcGVydHk6ICd0LnR5cGVfJywKICAgICAgICAgICAgICAgICAgdmFsdWU6ICcxJwogICAgICAgICAgICAgICAgfV0KICAgICAgICAgICAgICB9KSwgJ2FkZEVkaXQnKTsKICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgIF95aWVsZCR0ZWFtRGF0YTIgPSBfY29udGV4dDEwLnNlbnQ7CiAgICAgICAgICAgICAgX3lpZWxkJHRlYW1EYXRhMiRyb3dzID0gX3lpZWxkJHRlYW1EYXRhMi5yb3dzOwogICAgICAgICAgICAgIHJvd3MgPSBfeWllbGQkdGVhbURhdGEyJHJvd3MgPT09IHZvaWQgMCA/IFtdIDogX3lpZWxkJHRlYW1EYXRhMiRyb3dzOwogICAgICAgICAgICAgIF90aGlzMTIuaW5zcGVjdE9wdGlvbnMgPSByb3dzOwogICAgICAgICAgICBjYXNlIDY6CiAgICAgICAgICAgIGNhc2UgImVuZCI6CiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0MTAuc3RvcCgpOwogICAgICAgICAgfQogICAgICAgIH0sIF9jYWxsZWUxMCk7CiAgICAgIH0pKSgpOwogICAgfSwKICAgIC8vIOmZhOS7tumihOiniGxpc3QKICAgIGdldEZpbGVQcmV2aWV3VXJsTGlzdDogZnVuY3Rpb24gZ2V0RmlsZVByZXZpZXdVcmxMaXN0KGZpbGVzKSB7CiAgICAgIHZhciBzcmNMaXN0ID0gZmlsZXMubWFwKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgICAgcmV0dXJuIGl0ZW0uZmlsZVByZXZpZXdVcmw7CiAgICAgIH0pOwogICAgICByZXR1cm4gc3JjTGlzdDsKICAgIH0sCiAgICBldmVudENvbmZpcm06IGZ1bmN0aW9uIChfZXZlbnRDb25maXJtKSB7CiAgICAgIGZ1bmN0aW9uIGV2ZW50Q29uZmlybSgpIHsKICAgICAgICByZXR1cm4gX2V2ZW50Q29uZmlybS5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwogICAgICB9CiAgICAgIGV2ZW50Q29uZmlybS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHsKICAgICAgICByZXR1cm4gX2V2ZW50Q29uZmlybS50b1N0cmluZygpOwogICAgICB9OwogICAgICByZXR1cm4gZXZlbnRDb25maXJtOwogICAgfShmdW5jdGlvbiAoKSB7CiAgICAgIHZhciBfdGhpczEzID0gdGhpczsKICAgICAgdGhpcy4kY29uZmlybSgn56Gu5a6a5LqL5Lu25qC45a6e56Gu6K6k5ZCX77yfJywgJ+aPkOekuicsIHsKICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogJ+ehruiupCcsCiAgICAgICAgY2FuY2VsQnV0dG9uVGV4dDogJ+WPlua2iCcsCiAgICAgICAgdHlwZTogJ3dhcm5pbmcnCiAgICAgIH0pLnRoZW4oLyojX19QVVJFX18qL19hc3luY1RvR2VuZXJhdG9yKC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3JSdW50aW1lKCkubWFyayhmdW5jdGlvbiBfY2FsbGVlMTEoKSB7CiAgICAgICAgdmFyIF95aWVsZCRldmVudENvbmZpcm0sIHN0YXRlOwogICAgICAgIHJldHVybiBfcmVnZW5lcmF0b3JSdW50aW1lKCkud3JhcChmdW5jdGlvbiBfY2FsbGVlMTEkKF9jb250ZXh0MTEpIHsKICAgICAgICAgIHdoaWxlICgxKSBzd2l0Y2ggKF9jb250ZXh0MTEucHJldiA9IF9jb250ZXh0MTEubmV4dCkgewogICAgICAgICAgICBjYXNlIDA6CiAgICAgICAgICAgICAgX3RoaXMxMy5jb25maXJtTG9hZGluZyA9IHRydWU7CiAgICAgICAgICAgICAgX2NvbnRleHQxMS5uZXh0ID0gMzsKICAgICAgICAgICAgICByZXR1cm4gZXZlbnRDb25maXJtKF90aGlzMTMuZGV0YWlsRm9ybS5pZCk7CiAgICAgICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgICBfeWllbGQkZXZlbnRDb25maXJtID0gX2NvbnRleHQxMS5zZW50OwogICAgICAgICAgICAgIHN0YXRlID0gX3lpZWxkJGV2ZW50Q29uZmlybS5zdGF0ZTsKICAgICAgICAgICAgICBpZiAoc3RhdGUpIHsKICAgICAgICAgICAgICAgIF90aGlzMTMuJG1lc3NhZ2Uuc3VjY2VzcygiXHU0RThCXHU0RUY2XHU3ODZFXHU4QkE0XHU2MjEwXHU1MjlGIik7CiAgICAgICAgICAgICAgICBfdGhpczEzLmNvbmZpcm1Mb2FkaW5nID0gZmFsc2U7CiAgICAgICAgICAgICAgICBfdGhpczEzLmNoYW5nZVBhZ2UoJ1RhYmxlUGFnZScsICdhZGQnKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIGNhc2UgNjoKICAgICAgICAgICAgY2FzZSAiZW5kIjoKICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQxMS5zdG9wKCk7CiAgICAgICAgICB9CiAgICAgICAgfSwgX2NhbGxlZTExKTsKICAgICAgfSkpKTsKICAgIH0pLAogICAgLy8g5omT5byA6aG16Z2i5omn6KGMCiAgICBvcGVuUGFnZTogZnVuY3Rpb24gb3BlblBhZ2UoKSB7CiAgICAgIC8vIHRoaXMuJHJlZnMubWluZU1hcD8ubWFwPy5yZXNpemUoKQogICAgfSwKICAgIGNoYW5nZVBhZ2U6IGZ1bmN0aW9uIGNoYW5nZVBhZ2UoKSB7CiAgICAgIHZhciBwYWdlTmFtZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogJyc7CiAgICAgIHZhciB0eXBlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAnJzsKICAgICAgaWYgKCFwYWdlTmFtZSkgcmV0dXJuOwogICAgICB0aGlzLiRlbWl0KCdjaGFuZ2VQYWdlJywgcGFnZU5hbWUsIGZ1bmN0aW9uIChfKSB7CiAgICAgICAgUHViU3ViLnB1Ymxpc2gocGFnZU5hbWUsIHsKICAgICAgICAgIHR5cGU6IHR5cGUKICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9LAogICAgLy8g5YWz6Zet6aG16Z2i5omn6KGMCiAgICBjbG9zZVBhZ2U6IGZ1bmN0aW9uIGNsb3NlUGFnZSgpIHsKICAgICAgdmFyIF90aGlzMTQgPSB0aGlzOwogICAgICB2YXIgcHViU3ViID0gdGhpcy5wdWJTdWIsCiAgICAgICAgYWRkRWRpdFJ1bGVzID0gdGhpcy5hZGRFZGl0UnVsZXMsCiAgICAgICAgcm9hZE9wdGlvbnMgPSB0aGlzLnJvYWRPcHRpb25zOwogICAgICAvLyDph43nva7nu4Tku7bmlbDmja4KICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLiRkYXRhLCB0aGlzLiRvcHRpb25zLmRhdGEuY2FsbCh0aGlzKSwgewogICAgICAgIHB1YlN1YjogcHViU3ViLAogICAgICAgIHJvYWRPcHRpb25zOiByb2FkT3B0aW9ucwogICAgICB9KTsKICAgICAgLy8gdGhpcy4kcmVmcy5taW5lTWFwPy5yZXNldE1hcChfID0+IHRoaXMubWFwTG9hZGluZyA9IGZhbHNlKSAvLyDph43nva7lnLDlm74KICAgICAgdGhpcy4kbmV4dFRpY2soZnVuY3Rpb24gKF8pIHsKICAgICAgICBfdGhpczE0LiRyZWZzLmZvcm1JbmZvLiRlbC5zY3JvbGxUb3AgPSAwOwogICAgICB9KTsKICAgIH0sCiAgICBtYXBMb2FkOiBmdW5jdGlvbiBtYXBMb2FkKCkgewogICAgICB0aGlzLm1hcExvYWRpbmcgPSBmYWxzZTsKICAgIH0sCiAgICAvLyDoh6rlrprkuYnmoIforrDngrkKICAgIGN1c3RvbVRhZ1BvaW50czogZnVuY3Rpb24gY3VzdG9tVGFnUG9pbnRzKCkgewogICAgICB2YXIgX3RoaXMkbWFya2VyczsKICAgICAgdmFyIGxuZ2xhdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogW107CiAgICAgIChfdGhpcyRtYXJrZXJzID0gdGhpcy5tYXJrZXJzW3RoaXMubWFya2Vycy5sZW5ndGggLSAxXSkgPT09IG51bGwgfHwgX3RoaXMkbWFya2VycyA9PT0gdm9pZCAwIHx8IF90aGlzJG1hcmtlcnMucmVtb3ZlKCk7CiAgICAgIC8vIOiHquWumuS5ieeCueagh+iusOeahOWGhemDqERPTeWFg+e0oAogICAgICB2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICAgICAgZWwuY2xhc3NOYW1lID0gJ21hcmtlci10aXAnOwogICAgICAvLyBNYXJrZXLmnoTpgKDlh73mlbDmjqXmlLbkuKTkuKrlj4LmlbDvvIzkuIDkuKrkuLroh6rlrprkuYnnmoRET03lhYPntKDvvIzkuIDkuKrmmK9PYmplY3Tlj4LmlbDvvIzlhbbkuK3ljIXmi6zlgY/np7vph4/nrYkKICAgICAgdmFyIG1hcmtlciA9IG5ldyB0aGlzLiRyZWZzLm1pbmVNYXAubWluZU1hcC5NYXJrZXIoZWwsIHsKICAgICAgICBhbmNob3I6ICdjZW50ZXInLAogICAgICAgIG9mZnNldDogWzAsIDBdIC8vIG9mZnNldOWPguaVsOS4uuagh+azqOeCueebuOWvueS6juWFtuW3puS4iuinkuWBj+enu+WDj+e0oOWkp+WwjwogICAgICB9KQogICAgICAvLyDosIPnlKhzZXRMbmdMYXTmlrnms5XmjIflrppNYXJrZXLnmoTlnZDmoIfkvY3nva4KICAgICAgLnNldExuZ0xhdChsbmdsYXQpLmFkZFRvKHRoaXMuJHJlZnMubWluZU1hcC5tYXApOwogICAgICB0aGlzLm1hcmtlcnMucHVzaChtYXJrZXIpOwogICAgfSwKICAgIC8vIOiOt+WPluivpuaDhQogICAgZ2V0RGV0YWlsOiBmdW5jdGlvbiBnZXREZXRhaWwoaWQpIHsKICAgICAgdmFyIF90aGlzMTUgPSB0aGlzOwogICAgICByZXR1cm4gX2FzeW5jVG9HZW5lcmF0b3IoLyojX19QVVJFX18qL19yZWdlbmVyYXRvclJ1bnRpbWUoKS5tYXJrKGZ1bmN0aW9uIF9jYWxsZWUxMigpIHsKICAgICAgICB2YXIgX3RoaXMxNSRkZXRhaWxGb3JtMjsKICAgICAgICB2YXIgX3RoaXMxNSRkZXRhaWxGb3JtLCBfdGhpczE1JGRldGFpbEZvcm0kcGUsIHBlZ1NWYWwsIF90aGlzMTUkZGV0YWlsRm9ybSRwZTIsIHBlZ0VWYWwsIHN0YXJ0UGVnQXJyLCBlbmRQZWdBcnI7CiAgICAgICAgcmV0dXJuIF9yZWdlbmVyYXRvclJ1bnRpbWUoKS53cmFwKGZ1bmN0aW9uIF9jYWxsZWUxMiQoX2NvbnRleHQxMikgewogICAgICAgICAgd2hpbGUgKDEpIHN3aXRjaCAoX2NvbnRleHQxMi5wcmV2ID0gX2NvbnRleHQxMi5uZXh0KSB7CiAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICBfY29udGV4dDEyLm5leHQgPSAyOwogICAgICAgICAgICAgIHJldHVybiB0YWJsZURldGFpbChpZCk7CiAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICBfdGhpczE1LmRldGFpbEZvcm0gPSBfY29udGV4dDEyLnNlbnQ7CiAgICAgICAgICAgICAgX3RoaXMxNSRkZXRhaWxGb3JtID0gX3RoaXMxNS5kZXRhaWxGb3JtLCBfdGhpczE1JGRldGFpbEZvcm0kcGUgPSBfdGhpczE1JGRldGFpbEZvcm0ucGVnU1ZhbCwgcGVnU1ZhbCA9IF90aGlzMTUkZGV0YWlsRm9ybSRwZSA9PT0gdm9pZCAwID8gJycgOiBfdGhpczE1JGRldGFpbEZvcm0kcGUsIF90aGlzMTUkZGV0YWlsRm9ybSRwZTIgPSBfdGhpczE1JGRldGFpbEZvcm0ucGVnRVZhbCwgcGVnRVZhbCA9IF90aGlzMTUkZGV0YWlsRm9ybSRwZTIgPT09IHZvaWQgMCA/ICcnIDogX3RoaXMxNSRkZXRhaWxGb3JtJHBlMjsKICAgICAgICAgICAgICBpZiAocGVnU1ZhbCkgewogICAgICAgICAgICAgICAgc3RhcnRQZWdBcnIgPSBwZWdTVmFsLnNwbGl0KCcrJyk7CiAgICAgICAgICAgICAgICBfdGhpczE1LmRldGFpbEZvcm0uc3RhcnRQZWcgPSBzdGFydFBlZ0FyclswXS5zbGljZSgxKTsKICAgICAgICAgICAgICAgIF90aGlzMTUuZGV0YWlsRm9ybS5zdGFydFBlZ0FkZCA9IHN0YXJ0UGVnQXJyWzFdOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAocGVnRVZhbCkgewogICAgICAgICAgICAgICAgZW5kUGVnQXJyID0gcGVnRVZhbC5zcGxpdCgnKycpOwogICAgICAgICAgICAgICAgX3RoaXMxNS5kZXRhaWxGb3JtLmVuZFBlZyA9IGVuZFBlZ0FyclswXS5zbGljZSgxKTsKICAgICAgICAgICAgICAgIF90aGlzMTUuZGV0YWlsRm9ybS5lbmRQZWdBZGQgPSBlbmRQZWdBcnJbMV07CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF90aGlzMTUuZGV0YWlsRm9ybS5jb21wZW5zYXRpb25EZXRhaWxzID0gKChfdGhpczE1JGRldGFpbEZvcm0yID0gX3RoaXMxNS5kZXRhaWxGb3JtKSA9PT0gbnVsbCB8fCBfdGhpczE1JGRldGFpbEZvcm0yID09PSB2b2lkIDAgfHwgKF90aGlzMTUkZGV0YWlsRm9ybTIgPSBfdGhpczE1JGRldGFpbEZvcm0yLmNvbXBlbnNhdGlvbkluZm8pID09PSBudWxsIHx8IF90aGlzMTUkZGV0YWlsRm9ybTIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF90aGlzMTUkZGV0YWlsRm9ybTIuY29tcGVuc2F0aW9uRGV0YWlscykgfHwgW107CiAgICAgICAgICAgICAgX3RoaXMxNS5kZXRhaWxGb3JtLmV2ZW50VHlwZSA9IEpTT04ucGFyc2UoX3RoaXMxNS5kZXRhaWxGb3JtLmV2ZW50VHlwZSk7CiAgICAgICAgICAgICAgX3RoaXMxNS5yb2FkQ2hhbmdlKF90aGlzMTUuZGV0YWlsRm9ybS5yb2FkSWQpOwogICAgICAgICAgICAgIGNvbnNvbGUubG9nKF90aGlzMTUuZGV0YWlsRm9ybSwgJ+ivpuaDheaVsOaNri8vLy8vJyk7CiAgICAgICAgICAgIGNhc2UgMTA6CiAgICAgICAgICAgIGNhc2UgImVuZCI6CiAgICAgICAgICAgICAgcmV0dXJuIF9jb250ZXh0MTIuc3RvcCgpOwogICAgICAgICAgfQogICAgICAgIH0sIF9jYWxsZWUxMik7CiAgICAgIH0pKSgpOwogICAgfSwKICAgIGdldEV2ZW50VHlwZTogZnVuY3Rpb24gZ2V0RXZlbnRUeXBlKCkgewogICAgICB2YXIgZXZlbnRUeXBlID0gdGhpcy5kZXRhaWxGb3JtLmV2ZW50VHlwZTsKICAgICAgaWYgKGV2ZW50VHlwZSkgewogICAgICAgIGlmIChldmVudFR5cGUubGVuZ3RoID4gMSkgewogICAgICAgICAgcmV0dXJuIHRoaXMuZGljdGlvbmFyeUVzY2FwZSgnbHhfc2pseHhxJywgZXZlbnRUeXBlWzFdICsgJycpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gJy0nOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gJy0nOwogICAgICB9CiAgICB9LAogICAgaGFuZGxlUmVsaWV2ZTogZnVuY3Rpb24gaGFuZGxlUmVsaWV2ZShyb3csIGluZGV4KSB7CiAgICAgIHZhciBfdGhpczE2ID0gdGhpczsKICAgICAgcmV0dXJuIF9hc3luY1RvR2VuZXJhdG9yKC8qI19fUFVSRV9fKi9fcmVnZW5lcmF0b3JSdW50aW1lKCkubWFyayhmdW5jdGlvbiBfY2FsbGVlMTMoKSB7CiAgICAgICAgdmFyIF95aWVsZCRkZXJlZ3VsYXRpb24sIHN0YXRlLCB2YWx1ZSwgbWVzc2FnZTsKICAgICAgICByZXR1cm4gX3JlZ2VuZXJhdG9yUnVudGltZSgpLndyYXAoZnVuY3Rpb24gX2NhbGxlZTEzJChfY29udGV4dDEzKSB7CiAgICAgICAgICB3aGlsZSAoMSkgc3dpdGNoIChfY29udGV4dDEzLnByZXYgPSBfY29udGV4dDEzLm5leHQpIHsKICAgICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgIGlmICghX3RoaXMxNi5qaWVjaHVUaW1lKSB7CiAgICAgICAgICAgICAgICBfY29udGV4dDEzLm5leHQgPSAxMjsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICByb3cuZW5kVGltZSA9IG1vbWVudChfdGhpczE2LmppZWNodVRpbWUpLmZvcm1hdCgnWVlZWS1NTS1ERCBISDptbTpzcycpOwogICAgICAgICAgICAgIHJvdy5zdGF0dXMgPSAyOwogICAgICAgICAgICAgIF9jb250ZXh0MTMubmV4dCA9IDU7CiAgICAgICAgICAgICAgcmV0dXJuIGRlcmVndWxhdGlvbihyb3cpOwogICAgICAgICAgICBjYXNlIDU6CiAgICAgICAgICAgICAgX3lpZWxkJGRlcmVndWxhdGlvbiA9IF9jb250ZXh0MTMuc2VudDsKICAgICAgICAgICAgICBzdGF0ZSA9IF95aWVsZCRkZXJlZ3VsYXRpb24uc3RhdGU7CiAgICAgICAgICAgICAgdmFsdWUgPSBfeWllbGQkZGVyZWd1bGF0aW9uLnZhbHVlOwogICAgICAgICAgICAgIG1lc3NhZ2UgPSBfeWllbGQkZGVyZWd1bGF0aW9uLm1lc3NhZ2U7CiAgICAgICAgICAgICAgaWYgKHN0YXRlKSB7CiAgICAgICAgICAgICAgICBfdGhpczE2LiRtZXNzYWdlLnN1Y2Nlc3MoJ+ino+mZpOeuoeWItuaIkOWKnycpOwogICAgICAgICAgICAgICAgX3RoaXMxNi5yZWxvYWQoKTsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgX3RoaXMxNi4kbWVzc2FnZS5lcnJvcihtZXNzYWdlIHx8ICfop6PpmaTnrqHliLblpLHotKUnKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX2NvbnRleHQxMy5uZXh0ID0gMTM7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMTI6CiAgICAgICAgICAgICAgX3RoaXMxNi4kbWVzc2FnZS53YXJuaW5nKCfor7fpgInmi6nop6PpmaTml7bpl7QnKTsKICAgICAgICAgICAgY2FzZSAxMzoKICAgICAgICAgICAgY2FzZSAiZW5kIjoKICAgICAgICAgICAgICByZXR1cm4gX2NvbnRleHQxMy5zdG9wKCk7CiAgICAgICAgICB9CiAgICAgICAgfSwgX2NhbGxlZTEzKTsKICAgICAgfSkpKCk7CiAgICB9CiAgfSwKICBiZWZvcmVEZXN0cm95OiBmdW5jdGlvbiBiZWZvcmVEZXN0cm95KCkgewogICAgLy8g5Zyo57uE5Lu26ZSA5q+B5LmL5YmNIOa4hemZpOiuoumYhea2iOaBrwogICAgUHViU3ViLnVuc3Vic2NyaWJlKHRoaXMucHViU3ViKTsKICB9Cn07"},null]}