tnx-shared 5.3.342 → 5.3.343
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/bundles/tnx-shared.umd.js +75 -4
- package/bundles/tnx-shared.umd.js.map +1 -1
- package/bundles/tnx-shared.umd.min.js +1 -1
- package/bundles/tnx-shared.umd.min.js.map +1 -1
- package/classes/base/list-component-base.d.ts +1 -0
- package/classes/base/list-component-base.d.ts.map +1 -1
- package/classes/constants.d.ts +2 -0
- package/classes/constants.d.ts.map +1 -1
- package/esm2015/classes/base/list-component-base.js +43 -2
- package/esm2015/classes/constants.js +3 -1
- package/esm2015/services/base.service.js +12 -1
- package/esm2015/services/workflow-permission-detail.service.js +7 -5
- package/fesm2015/tnx-shared.js +61 -5
- package/fesm2015/tnx-shared.js.map +1 -1
- package/package.json +2 -2
- package/services/base.service.d.ts +1 -0
- package/services/base.service.d.ts.map +1 -1
- package/services/workflow-permission-detail.service.d.ts +1 -0
- package/services/workflow-permission-detail.service.d.ts.map +1 -1
- package/tnx-shared.metadata.json +1 -1
|
@@ -207,5 +207,7 @@ export const MaActionBatDauQuyTrinh = '_START_';
|
|
|
207
207
|
export const ActionThuHoiBase = '__THU_HOI';
|
|
208
208
|
export const ActionChoYKienBase = '__CHO_Y_KIEN';
|
|
209
209
|
export const ActionUpdateModel = '__UPDATE_MODEL';
|
|
210
|
+
export const ActionChuyenXuLyBase = '__CHUYEN_XU_LY';
|
|
211
|
+
export const TextActionChuyenXuLyBase = 'Chuyển xử lý';
|
|
210
212
|
export const FieldDefineHasTask = '__idTask';
|
|
211
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliL2NsYXNzZXMvY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1DQUFtQztBQUVuQyxNQUFNLENBQU4sSUFBWSxTQUlYO0FBSkQsV0FBWSxTQUFTO0lBQ2pCLHVDQUFPLENBQUE7SUFDUCx5Q0FBUSxDQUFBO0lBQ1IseUNBQVEsQ0FBQTtBQUNaLENBQUMsRUFKVyxTQUFTLEtBQVQsU0FBUyxRQUlwQjtBQUVELE1BQU0sQ0FBTixJQUFZLGVBR1g7QUFIRCxXQUFZLGVBQWU7SUFDdkIscURBQVEsQ0FBQTtJQUNSLDJEQUFXLENBQUE7QUFDZixDQUFDLEVBSFcsZUFBZSxLQUFmLGVBQWUsUUFHMUI7QUFHRCxNQUFNLENBQU4sSUFBWSxzQkFFWDtBQUZELFdBQVksc0JBQXNCO0lBQzlCLGlEQUF1QixDQUFBLENBQUMsd0JBQXdCO0FBQ3BELENBQUMsRUFGVyxzQkFBc0IsS0FBdEIsc0JBQXNCLFFBRWpDO0FBR0QsTUFBTSxDQUFOLElBQVksWUFHWDtBQUhELFdBQVksWUFBWTtJQUNwQiw4R0FBOEYsQ0FBQTtJQUM5RixrSEFBa0csQ0FBQTtBQUN0RyxDQUFDLEVBSFcsWUFBWSxLQUFaLFlBQVksUUFHdkI7QUFFRCxNQUFNLENBQU4sSUFBWSxTQUdYO0FBSEQsV0FBWSxTQUFTO0lBQ2pCLHNDQUF5QixDQUFBO0lBQ3pCLG9DQUF1QixDQUFBO0FBQzNCLENBQUMsRUFIVyxTQUFTLEtBQVQsU0FBUyxRQUdwQjtBQUVELE1BQU0sQ0FBTixJQUFZLE9BRVg7QUFGRCxXQUFZLE9BQU87SUFDZixnRkFBd0UsQ0FBQTtBQUM1RSxDQUFDLEVBRlcsT0FBTyxLQUFQLE9BQU8sUUFFbEI7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHO0lBQzlCLGdCQUFnQixFQUFFLGdC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TUFBTSxPQUFPLFNBQVM7Q0FTckI7QUFDRCxNQUFNLE9BQU8sUUFBUTtDQWdCcEI7QUFDRCxNQUFNLE9BQU8sMEJBQTBCO0NBWXRDO0FBQ0QsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsbUJBQW1CLENBQUM7QUFDckQsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsU0FBUyxDQUFDO0FBQ2hELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLFdBQVcsQ0FBQztBQUM1QyxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxjQUFjLENBQUM7QUFDakQsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsZ0JBQWdCLENBQUM7QUFDbEQsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsVUFBVSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cblxuZXhwb3J0IGVudW0gRm9ybVN0YXRlIHtcbiAgICBBREQgPSAwLFxuICAgIFZJRVcgPSAxLFxuICAgIEVESVQgPSAyXG59XG5cbmV4cG9ydCBlbnVtIFBlcm1pc3Npb25UeXBlcyB7XG4gICAgUEFHRSA9IDEsXG4gICAgQ09OVFJPTCA9IDJcbn1cblxuXG5leHBvcnQgZW51bSBOb3RpZmljYXRpb25PYmplY3RUeXBlIHtcbiAgICBDQVRFR09SWV9VUERBVEVEID0gJy0xJyAvLyBD4bqtcCBuaOG6rXQgbeG7m2kgZGFuaCBt4bulY1xufVxuXG5cbmV4cG9ydCBlbnVtIFRlbXBsYXRlVHlwZSB7XG4gICAgRVhDRUxfVFlQRSA9ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldDtjaGFyc2V0PVVURi04JyxcbiAgICBET0NfVFlQRSA9ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudDtjaGFyc2V0PVVURi04J1xufVxuXG5leHBvcnQgZW51bSBFeHRlbnNpb24ge1xuICAgIEVYQ0VMX0VYVEVOU0lPTiA9ICcueGxzeCcsXG4gICAgRE9DX0VYVEVOU0lPTiA9ICcuZG9jeCdcbn1cblxuZXhwb3J0IGVudW0gUGF0dGVybiB7XG4gICAgZGF0ZXRpbWUgPSAnXihbMC0yXVswLTldfCgzKVswLTFdKShcXC8pKCgoMClbMC05XSl8KCgxKVswLTJdKSkoXFwvKVxcZHs0fSQnXG59XG5cbi8qKlxuICogMDAuMDAuMDAwLnh4eDRcbiAqIHgxOiBDaMawYSBwaMOibiBsb+G6oWlcbiAqIHgyOiAgQ2jGsGEgcGjDom4gbG/huqFpXG4gKiB4MzogIENoxrBhIHBow6JuIGxv4bqhaVxuICogeDQ6IE3DoyBjb21wb25lbnRcbiAqXG4gKiAwMSAtIFMgPSBUTiBTaGFyZSAtIEThu4tjaCB24bulIGNoaWEgc+G6uyBjaHVuZ1xuICovXG5leHBvcnQgY29uc3QgU0hBUkVfQ09NUE9ORU5UX0lEID0ge1xuICAgIFNfQURWQU5DRV9TRUFSQ0g6ICcwMC4wMC4wMDAuMDAwMSdcbn07XG5cbmV4cG9ydCBjb25zdCBTSEFSRV9FVkVOVCA9IHtcbiAgICBGT1JDRV9NQVJLX0RJUlRZX0ZPUk06ICdGT1JDRV9NQVJLX0RJUlRZX0ZPUk0nXG59O1xuXG5leHBvcnQgY29uc3Qga2V5VXNlclN1cnZleUxvY2FsID0gJ19pbmZvVXNlckRvU3VydmV5JztcbmV4cG9ydCBjb25zdCBXb3JrZmxvd0ZpZWxkU3RhdGVDb2RlID0gJ2N1cnJlbnRTdGF0ZUNvZGUnO1xuXG5leHBvcnQgY29uc3QgVHlwZURhbmhNdWNBUEkgPSB7XG4gICAgRE9DX0xBUDogMSxcbiAgICBQSFVfVEhVT0M6IDJcbn07XG5cbmV4cG9ydCBjb25zdCBUcmFuZ1RoYWlzID0ge1xuICAgIEluQWN0aXZlOiBmYWxzZSxcbiAgICBBY3RpdmU6IHRydWVcbn07XG5cbmV4cG9ydCBjb25zdCBTb3J0RGlycyA9IHtcbiAgICBEZXNjOiAtMSxcbiAgICBBc2M6IDFcbn07XG5cbmV4cG9ydCBjb25zdCBTZXNzaW9uVHlwZXMgPSB7XG4gICAgTW9ybmluZzogMSxcbiAgICBBZnRlcm5vb246IDIsXG4gICAgRXZlbmluZzogM1xufTtcblxuZXhwb3J0IGNvbnN0IEVYUExPUkVSX1RZUEVTID0ge1xuICAgIEZJTEU6IDAsXG4gICAgRk9MREVSOiAxXG59O1xuXG5leHBvcnQgY29uc3QgRklMRV9UWVBFUyA9IHtcbiAgICBJTUFHRTogJ2ltYWdlJyxcbiAgICBWSURFTzogJ3ZpZGVvJyxcbiAgICBBVURJTzogJ2F1ZGlvJyxcbiAgICBURVhUOiAndGV4dCcsXG4gICAgU1BSRUFEU0hFRVQ6ICdzcHJlYWRzaGVldCcsXG4gICAgUFJFU0VOVEFUSU9OOiAncHJlc2VudGF0aW9uJyxcbiAgICBPVEhFUjogJ290aGVyJyxcbiAgICBQREY6ICdwZGYnXG59O1xuXG5leHBvcnQgZW51bSBTaGFyZWRGb2xkZXJUeXBlIHtcbiAgICBaaXBwZWRGaWxlID0gMSxcbiAgICBBdmF0YXIgPSAyLFxuICAgIFRlbXB0ID0gMyxcbiAgICBUZW1wbGF0ZSA9IDQsXG4gICAgSW50ZXJuYWwgPSA1LFxuICAgIFNjYW5uZWRGaWxlID0gNixcbn1cblxuZXhwb3J0IGVudW0gR2VuZGVyIHtcbiAgICBGZW1hbGUgPSAwLFxuICAgIE1hbGUgPSAxLFxufVxuXG5leHBvcnQgZW51bSBFeHBvcnRJdGVtVHlwZSB7XG4gICAgRm9sZGVyID0gMSxcbiAgICBFeGNlbEZpbGUgPSAyLFxuICAgIEV4Y2VsU2hlZXQgPSAzXG59XG5cbmV4cG9ydCBlbnVtIEVudW1Db250cm9sUGlja2VyVHlwZSB7XG4gICAgVVNFUiA9IDAsXG4gICAgU1RVREVOVCA9IDEsXG4gICAgVEVBQ0hFUiA9IDIsXG4gICAgUk9PTSA9IDMsXG4gICAgQ0xBU1MgPSA0LFxuICAgIFNVQkpFQ1QgPSA1LFxuICAgIE5HVU9JX1RIVUUgPSA2LFxuICAgIERPTl9WSSA9IDcsXG4gICAgS0hPID0gOCxcbiAgICBOR0FOSCA9IDksXG4gICAgVEhJRVRCSSA9IDEwLFxuICAgIEhPQ1BIQU5fUkFOR0JVT0MgPSAxMSxcbiAgICBPUkdBTklaQVRJT04gPSAxMixcbiAgICBIT1BET05HID0gMTMsXG4gICAgVEVBQ0hFUlBMVVMgPSAxNCxcbiAgICBERV9UQUkgPSAxNSxcbiAgICBCSUVVX01BVSA9IDE2LFxuICAgIFRFQUNIRVJGVUxMID0gMTcsXG4gICAgQ0FOQk8gPSAxNyxcbiAgICBET0lUQUMgPSAxOFxufVxuXG5leHBvcnQgZW51bSBFbnVtR2V0UmVmVHlwZSB7XG4gICAgTE9DQUwgPSAxLFxuICAgIFNFUlZFUiA9IDJcbn1cblxuZXhwb3J0IGNvbnN0IEtleUZsYXNoU2hvdyA9ICdfZmxhc2hTaG93JztcbmV4cG9ydCBjb25zdCBLZXlGaWVsZEdldFJlZlR5cGUgPSAnX3R5cGVHZXRSZWYnO1xuXG5leHBvcnQgZW51bSBFbnVtV29ya2Zsb3dDb3JlQ29kZVNldHRpbmdLZXkge1xuICAgIE1BQ19ESU5IID0gJ3dvcmtmbG93Q29yZVRyaW5oS3knLFxuICAgIFBIRV9EVVlFVF8yX0JVT0MgPSAnd29ya2Zsb3dDb3JlVHJpbmhLeTJCdW9jJyxcbiAgICBQSEVfRFVZRVRfM19CVU9DID0gJ3dvcmtmbG93Q29yZVRyaW5oS3kzQnVvYydcbn1cblxuZXhwb3J0IGNvbnN0IFJFTE9BRF9GSUxFX0xJU1QgPSAnUkVMT0FEX0ZJTEVfTElTVCc7XG5cbmV4cG9ydCBlbnVtIEJ1dHRvblRleHRBY3Rpb25Db25nVmllYyB7XG4gICAgWEVNX0xJQ0hfU1UgPSAnWGVtIGzhu4tjaCBz4butJ1xufVxuXG5leHBvcnQgY29uc3QgZGF0YVNvdXJjZUljb24gPSBbXG4gICAgeyBpZDogJ3JlcGxheScsIHRlbjogJ3BpIHBpLXJlcGxheScgfSxcbiAgICB7IGlkOiAnc2hhcmUnLCB0ZW46ICdwaSBwaS1zZW5kJyB9LFxuICAgIHsgaWQ6ICdjaGVjaycsIHRlbjogJ3BpIHBpLWNoZWNrJyB9LFxuICAgIHsgaWQ6ICd0aW1lcycsIHRlbjogJ3BpIHBpLXRpbWVzJyB9LFxuICAgIHsgaWQ6ICdiYW4nLCB0ZW46ICdwaSBwaS1iYW4nIH0sXG4gICAgeyBpZDogJ2ZvcndhcmQnLCB0ZW46ICdwaSBwaS1mb3J3YXJkJyB9LFxuICAgIHsgaWQ6ICdsaW5rJywgdGVuOiAncGkgcGktbGluaycgfSxcbiAgICB7IGlkOiAnY29tbWVudCcsIHRlbjogJ3BpIHBpLWNvbW1lbnRzJyB9XG5dO1xuXG5leHBvcnQgZW51bSBFbnVtU3RhdGVUeXBlIHtcbiAgICBTVEFSVCA9IDEsXG4gICAgTk9STUFMID0gMixcbiAgICBDVVJSRU5UID0gMyxcbiAgICBESVNBQkxFID0gNCxcbiAgICBTVE9QID0gNVxufVxuZXhwb3J0IGVudW0gRW51bVRhcmdldFR5cGUge1xuICAgIFVTRVIgPSAxLFxuICAgIERFUEFSVE1FTlQgPSAyLFxuICAgIEdST1VQID0gM1xufVxuZXhwb3J0IGVudW0gRW51bVVzZXJSdWxlIHtcbiAgICBDQVBfVFJFTiA9IDIsXG4gICAgTkdVT0lfQ1VPSV9DVU5HID0gMyxcbiAgICBOR1VPSV9USEFNX0dJQV9RVVlfVFJJTkggPSA0LFxuICAgIE5HVU9JX05IQU4gPSA3LFxuICAgIE5HVU9JX1RIRU9fRE9JID0gOCxcbiAgICBOR1VPSV9USEFPX1RBQyA9IDlcbn1cbmV4cG9ydCBlbnVtIEVudW1Xb3JrZmxvd0hpc3RvcnlTdGF0dXMge1xuICAgIElOX01BSU5fVEhSRUFEID0gMCxcbiAgICBOT1RfSU5fTUFJTl9USFJFQUQgPSAxLFxuICAgIFJFQ0FMTEVEID0gMlxufVxuZXhwb3J0IGVudW0gRW51bVBlcm1pc3Npb25UeXBlIHtcbiAgICBNQUlOID0gMCxcbiAgICBTSEFSRSA9IDFcbn1cbmV4cG9ydCBlbnVtIEVudW1Xb3JrZmxvd0NoZWNrYm94T3B0aW9uIHtcbiAgICBUQU9fQ09OR19WSUVDID0gMSxcbiAgICBBVVRPX05FWFRfU1RFUCA9IDIsXG4gICAgQVVUT19TVEFSVF9UQVNLID0gM1xufVxuZXhwb3J0IGVudW0gRW51bVByb2Nlc3NXb3JrZmxvd1R5cGUge1xuICAgIEVESVQgPSAxLFxuICAgIFZJRVcgPSAyXG59XG5leHBvcnQgaW50ZXJmYWNlIER5bmFtaWNOb2RlIHtcbiAgICBpZDogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB0eXBlOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBXZkl0ZW0ge1xuICAgIGNvZGU6IHN0cmluZztcbiAgICBkYXRhOiBXZlNjaGVtYTtcbiAgICB0aXRsZTogc3RyaW5nO1xufVxuZXhwb3J0IGNsYXNzIFdmU2NoZW1hIHtcbiAgICBtYWNoaW5lczogV2ZNYWNoaW5lW107XG4gICAgY29ubmVjdGlvbnM6IFdmQWN0aW9uW107XG4gICAgYWN0aW9ucz86IHtcbiAgICAgICAgW2tleTogc3RyaW5nXTogV2ZBY3Rpb25bXTtcbiAgICB9O1xufVxuZXhwb3J0IGNsYXNzIFdmTWFjaGluZSB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBjb2RlOiBzdHJpbmc7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIHR5cGU6IEVudW1TdGF0ZVR5cGU7XG4gICAgbG9jYXRpb246IG51bWJlcltdO1xuICAgIGVkaXRpbmc6IGJvb2xlYW47XG4gICAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgICBkYXRhOiBhbnk7XG59XG5leHBvcnQgY2xhc3MgV2ZBY3Rpb24ge1xuICAgIHNvVGh1VHU6IG51bWJlcjtcbiAgICBjb2RlOiBzdHJpbmc7XG4gICAgZGF0YTogYW55O1xuICAgIGVkaXRpbmc6IGJvb2xlYW47XG4gICAgaWNvbjogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICBvcGVuUG9wdXA6IGJvb2xlYW47XG4gICAgb3Blbk5ld1RhYjogYm9vbGVhbjtcbiAgICBkb21haW5OZXdUYWI6IHN0cmluZztcbiAgICBsaW5rTmV3VGFiOiBzdHJpbmc7XG4gICAgc291cmNlOiBzdHJpbmc7XG4gICAgc291cmNlQW5jaG9yOiBzdHJpbmc7XG4gICAgdGFyZ2V0OiBzdHJpbmc7XG4gICAgdGFyZ2V0QW5jaG9yOiBzdHJpbmc7XG4gICAgdGFyZ2V0c0FsbG93TW9kaWZ5OiBudW1iZXJbXTtcbn1cbmV4cG9ydCBjbGFzcyBXb3JrZmxvd1RhcmdldERlZmF1bHRWYWx1ZSB7XG4gICAgbHN0VXNlcklkOiBzdHJpbmdbXTtcbiAgICBsc3RVc2VyVmlld0lkOiBzdHJpbmdbXTtcbiAgICBsc3REb25WaUlkOiBzdHJpbmdbXTtcbiAgICBsc3REb25WaVZpZXdJZDogc3RyaW5nW107XG4gICAgbHN0R3JvdXBJZDogc3RyaW5nW107XG4gICAgbHN0R3JvdXBWaWV3SWQ6IHN0cmluZ1tdO1xuICAgIGxzdFJvbGVJZDogc3RyaW5nW107XG4gICAgbHN0Um9sZVZpZXdJZDogc3RyaW5nW107XG4gICAgbHN0VXNlcklkSW5Xb3JrZmxvdzogc3RyaW5nW107XG4gICAgbHN0RG9uVmlJZEluV29ya2Zsb3c6IHN0cmluZ1tdO1xuICAgIGxzdEdyb3VwSWRJbldvcmtmbG93OiBzdHJpbmdbXTtcbn1cbmV4cG9ydCBjb25zdCBEdW1teVdvcmtmbG93Q29kZSA9ICdEdW1teVdvcmtmbG93Q29kZSc7XG5leHBvcnQgY29uc3QgTWFBY3Rpb25CYXREYXVRdXlUcmluaCA9ICdfU1RBUlRfJztcbmV4cG9ydCBjb25zdCBBY3Rpb25UaHVIb2lCYXNlID0gJ19fVEhVX0hPSSc7XG5leHBvcnQgY29uc3QgQWN0aW9uQ2hvWUtpZW5CYXNlID0gJ19fQ0hPX1lfS0lFTic7XG5leHBvcnQgY29uc3QgQWN0aW9uVXBkYXRlTW9kZWwgPSAnX19VUERBVEVfTU9ERUwnO1xuZXhwb3J0IGNvbnN0IEZpZWxkRGVmaW5lSGFzVGFzayA9ICdfX2lkVGFzayc7XG4iXX0=
|
|
213
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliL2NsYXNzZXMvY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLG1DQUFtQztBQUVuQyxNQUFNLENBQU4sSUFBWSxTQUlYO0FBSkQsV0FBWSxTQUFTO0lBQ2pCLHVDQUFPLENBQUE7SUFDUCx5Q0FBUSxDQUFBO0lBQ1IseUNBQVEsQ0FBQTtBQUNaLENBQUMsRUFKVyxTQUFTLEtBQVQsU0FBUyxRQUlwQjtBQUVELE1BQU0sQ0FBTixJQUFZLGVBR1g7QUFIRCxXQUFZLGVBQWU7SUFDdkIscURBQVEsQ0FBQTtJQUNSLDJEQUFXLENBQUE7QUFDZixDQUFDLEVBSFcsZUFBZSxLQUFmLGVBQWUsUUFHMUI7QUFHRCxNQUFNLENBQU4sSUFBWSxzQkFFWDtBQUZELFdBQVksc0JBQXNCO0lBQzlCLGlEQUF1QixDQUFBLENBQUMsd0JBQXdCO0FBQ3BELENBQUMsRUFGVyxzQkFBc0IsS0FBdEIsc0JBQXNCLFFBRWpDO0FBR0QsTUFBTSxDQUFOLElBQVksWUFHWDtBQUhELFdBQVksWUFBWTtJQUNwQiw4R0FBOEYsQ0FBQTtJQUM5RixrSEFBa0csQ0FBQTtBQUN0RyxDQUFDLEVBSFcsWUFBWSxLQUFaLFlBQVksUUFHdkI7QUFFRCxNQUFNLENBQU4sSUFBWSxTQUdYO0FBSEQsV0FBWSxTQUFTO0lBQ2pCLHNDQUF5QixDQUFBO0lBQ3pCLG9DQUF1QixDQUFBO0FBQzNCLENBQUMsRUFIVyxTQUFTLEtBQVQsU0FBUyxRQUdwQjtBQUVELE1BQU0sQ0FBTixJQUFZLE9BRVg7QUFGRCxXQUFZLE9BQU87SUFDZixnRkFBd0UsQ0FBQTtBQUM1RSxDQUFDLEVBRlcsT0FBTyxLQUFQLE9BQU8sUUFFbEI7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHO0lBQzlCLGdCQUFnQixFQUFFLGdC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TUFBTSxPQUFPLFNBQVM7Q0FTckI7QUFDRCxNQUFNLE9BQU8sUUFBUTtDQWdCcEI7QUFDRCxNQUFNLE9BQU8sMEJBQTBCO0NBWXRDO0FBQ0QsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsbUJBQW1CLENBQUM7QUFDckQsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUcsU0FBUyxDQUFDO0FBQ2hELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLFdBQVcsQ0FBQztBQUM1QyxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxjQUFjLENBQUM7QUFDakQsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQUcsZ0JBQWdCLENBQUM7QUFDbEQsTUFBTSxDQUFDLE1BQU0sb0JBQW9CLEdBQUcsZ0JBQWdCLENBQUM7QUFDckQsTUFBTSxDQUFDLE1BQU0sd0JBQXdCLEdBQUcsY0FBYyxDQUFDO0FBQ3ZELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLFVBQVUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG5cbmV4cG9ydCBlbnVtIEZvcm1TdGF0ZSB7XG4gICAgQUREID0gMCxcbiAgICBWSUVXID0gMSxcbiAgICBFRElUID0gMlxufVxuXG5leHBvcnQgZW51bSBQZXJtaXNzaW9uVHlwZXMge1xuICAgIFBBR0UgPSAxLFxuICAgIENPTlRST0wgPSAyXG59XG5cblxuZXhwb3J0IGVudW0gTm90aWZpY2F0aW9uT2JqZWN0VHlwZSB7XG4gICAgQ0FURUdPUllfVVBEQVRFRCA9ICctMScgLy8gQ+G6rXAgbmjhuq10IG3hu5tpIGRhbmggbeG7pWNcbn1cblxuXG5leHBvcnQgZW51bSBUZW1wbGF0ZVR5cGUge1xuICAgIEVYQ0VMX1RZUEUgPSAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQ7Y2hhcnNldD1VVEYtOCcsXG4gICAgRE9DX1RZUEUgPSAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnQ7Y2hhcnNldD1VVEYtOCdcbn1cblxuZXhwb3J0IGVudW0gRXh0ZW5zaW9uIHtcbiAgICBFWENFTF9FWFRFTlNJT04gPSAnLnhsc3gnLFxuICAgIERPQ19FWFRFTlNJT04gPSAnLmRvY3gnXG59XG5cbmV4cG9ydCBlbnVtIFBhdHRlcm4ge1xuICAgIGRhdGV0aW1lID0gJ14oWzAtMl1bMC05XXwoMylbMC0xXSkoXFwvKSgoKDApWzAtOV0pfCgoMSlbMC0yXSkpKFxcLylcXGR7NH0kJ1xufVxuXG4vKipcbiAqIDAwLjAwLjAwMC54eHg0XG4gKiB4MTogQ2jGsGEgcGjDom4gbG/huqFpXG4gKiB4MjogIENoxrBhIHBow6JuIGxv4bqhaVxuICogeDM6ICBDaMawYSBwaMOibiBsb+G6oWlcbiAqIHg0OiBNw6MgY29tcG9uZW50XG4gKlxuICogMDEgLSBTID0gVE4gU2hhcmUgLSBE4buLY2ggduG7pSBjaGlhIHPhursgY2h1bmdcbiAqL1xuZXhwb3J0IGNvbnN0IFNIQVJFX0NPTVBPTkVOVF9JRCA9IHtcbiAgICBTX0FEVkFOQ0VfU0VBUkNIOiAnMDAuMDAuMDAwLjAwMDEnXG59O1xuXG5leHBvcnQgY29uc3QgU0hBUkVfRVZFTlQgPSB7XG4gICAgRk9SQ0VfTUFSS19ESVJUWV9GT1JNOiAnRk9SQ0VfTUFSS19ESVJUWV9GT1JNJ1xufTtcblxuZXhwb3J0IGNvbnN0IGtleVVzZXJTdXJ2ZXlMb2NhbCA9ICdfaW5mb1VzZXJEb1N1cnZleSc7XG5leHBvcnQgY29uc3QgV29ya2Zsb3dGaWVsZFN0YXRlQ29kZSA9ICdjdXJyZW50U3RhdGVDb2RlJztcblxuZXhwb3J0IGNvbnN0IFR5cGVEYW5oTXVjQVBJID0ge1xuICAgIERPQ19MQVA6IDEsXG4gICAgUEhVX1RIVU9DOiAyXG59O1xuXG5leHBvcnQgY29uc3QgVHJhbmdUaGFpcyA9IHtcbiAgICBJbkFjdGl2ZTogZmFsc2UsXG4gICAgQWN0aXZlOiB0cnVlXG59O1xuXG5leHBvcnQgY29uc3QgU29ydERpcnMgPSB7XG4gICAgRGVzYzogLTEsXG4gICAgQXNjOiAxXG59O1xuXG5leHBvcnQgY29uc3QgU2Vzc2lvblR5cGVzID0ge1xuICAgIE1vcm5pbmc6IDEsXG4gICAgQWZ0ZXJub29uOiAyLFxuICAgIEV2ZW5pbmc6IDNcbn07XG5cbmV4cG9ydCBjb25zdCBFWFBMT1JFUl9UWVBFUyA9IHtcbiAgICBGSUxFOiAwLFxuICAgIEZPTERFUjogMVxufTtcblxuZXhwb3J0IGNvbnN0IEZJTEVfVFlQRVMgPSB7XG4gICAgSU1BR0U6ICdpbWFnZScsXG4gICAgVklERU86ICd2aWRlbycsXG4gICAgQVVESU86ICdhdWRpbycsXG4gICAgVEVYVDogJ3RleHQnLFxuICAgIFNQUkVBRFNIRUVUOiAnc3ByZWFkc2hlZXQnLFxuICAgIFBSRVNFTlRBVElPTjogJ3ByZXNlbnRhdGlvbicsXG4gICAgT1RIRVI6ICdvdGhlcicsXG4gICAgUERGOiAncGRmJ1xufTtcblxuZXhwb3J0IGVudW0gU2hhcmVkRm9sZGVyVHlwZSB7XG4gICAgWmlwcGVkRmlsZSA9IDEsXG4gICAgQXZhdGFyID0gMixcbiAgICBUZW1wdCA9IDMsXG4gICAgVGVtcGxhdGUgPSA0LFxuICAgIEludGVybmFsID0gNSxcbiAgICBTY2FubmVkRmlsZSA9IDYsXG59XG5cbmV4cG9ydCBlbnVtIEdlbmRlciB7XG4gICAgRmVtYWxlID0gMCxcbiAgICBNYWxlID0gMSxcbn1cblxuZXhwb3J0IGVudW0gRXhwb3J0SXRlbVR5cGUge1xuICAgIEZvbGRlciA9IDEsXG4gICAgRXhjZWxGaWxlID0gMixcbiAgICBFeGNlbFNoZWV0ID0gM1xufVxuXG5leHBvcnQgZW51bSBFbnVtQ29udHJvbFBpY2tlclR5cGUge1xuICAgIFVTRVIgPSAwLFxuICAgIFNUVURFTlQgPSAxLFxuICAgIFRFQUNIRVIgPSAyLFxuICAgIFJPT00gPSAzLFxuICAgIENMQVNTID0gNCxcbiAgICBTVUJKRUNUID0gNSxcbiAgICBOR1VPSV9USFVFID0gNixcbiAgICBET05fVkkgPSA3LFxuICAgIEtITyA9IDgsXG4gICAgTkdBTkggPSA5LFxuICAgIFRISUVUQkkgPSAxMCxcbiAgICBIT0NQSEFOX1JBTkdCVU9DID0gMTEsXG4gICAgT1JHQU5JWkFUSU9OID0gMTIsXG4gICAgSE9QRE9ORyA9IDEzLFxuICAgIFRFQUNIRVJQTFVTID0gMTQsXG4gICAgREVfVEFJID0gMTUsXG4gICAgQklFVV9NQVUgPSAxNixcbiAgICBURUFDSEVSRlVMTCA9IDE3LFxuICAgIENBTkJPID0gMTcsXG4gICAgRE9JVEFDID0gMThcbn1cblxuZXhwb3J0IGVudW0gRW51bUdldFJlZlR5cGUge1xuICAgIExPQ0FMID0gMSxcbiAgICBTRVJWRVIgPSAyXG59XG5cbmV4cG9ydCBjb25zdCBLZXlGbGFzaFNob3cgPSAnX2ZsYXNoU2hvdyc7XG5leHBvcnQgY29uc3QgS2V5RmllbGRHZXRSZWZUeXBlID0gJ190eXBlR2V0UmVmJztcblxuZXhwb3J0IGVudW0gRW51bVdvcmtmbG93Q29yZUNvZGVTZXR0aW5nS2V5IHtcbiAgICBNQUNfRElOSCA9ICd3b3JrZmxvd0NvcmVUcmluaEt5JyxcbiAgICBQSEVfRFVZRVRfMl9CVU9DID0gJ3dvcmtmbG93Q29yZVRyaW5oS3kyQnVvYycsXG4gICAgUEhFX0RVWUVUXzNfQlVPQyA9ICd3b3JrZmxvd0NvcmVUcmluaEt5M0J1b2MnXG59XG5cbmV4cG9ydCBjb25zdCBSRUxPQURfRklMRV9MSVNUID0gJ1JFTE9BRF9GSUxFX0xJU1QnO1xuXG5leHBvcnQgZW51bSBCdXR0b25UZXh0QWN0aW9uQ29uZ1ZpZWMge1xuICAgIFhFTV9MSUNIX1NVID0gJ1hlbSBs4buLY2ggc+G7rSdcbn1cblxuZXhwb3J0IGNvbnN0IGRhdGFTb3VyY2VJY29uID0gW1xuICAgIHsgaWQ6ICdyZXBsYXknLCB0ZW46ICdwaSBwaS1yZXBsYXknIH0sXG4gICAgeyBpZDogJ3NoYXJlJywgdGVuOiAncGkgcGktc2VuZCcgfSxcbiAgICB7IGlkOiAnY2hlY2snLCB0ZW46ICdwaSBwaS1jaGVjaycgfSxcbiAgICB7IGlkOiAndGltZXMnLCB0ZW46ICdwaSBwaS10aW1lcycgfSxcbiAgICB7IGlkOiAnYmFuJywgdGVuOiAncGkgcGktYmFuJyB9LFxuICAgIHsgaWQ6ICdmb3J3YXJkJywgdGVuOiAncGkgcGktZm9yd2FyZCcgfSxcbiAgICB7IGlkOiAnbGluaycsIHRlbjogJ3BpIHBpLWxpbmsnIH0sXG4gICAgeyBpZDogJ2NvbW1lbnQnLCB0ZW46ICdwaSBwaS1jb21tZW50cycgfVxuXTtcblxuZXhwb3J0IGVudW0gRW51bVN0YXRlVHlwZSB7XG4gICAgU1RBUlQgPSAxLFxuICAgIE5PUk1BTCA9IDIsXG4gICAgQ1VSUkVOVCA9IDMsXG4gICAgRElTQUJMRSA9IDQsXG4gICAgU1RPUCA9IDVcbn1cbmV4cG9ydCBlbnVtIEVudW1UYXJnZXRUeXBlIHtcbiAgICBVU0VSID0gMSxcbiAgICBERVBBUlRNRU5UID0gMixcbiAgICBHUk9VUCA9IDNcbn1cbmV4cG9ydCBlbnVtIEVudW1Vc2VyUnVsZSB7XG4gICAgQ0FQX1RSRU4gPSAyLFxuICAgIE5HVU9JX0NVT0lfQ1VORyA9IDMsXG4gICAgTkdVT0lfVEhBTV9HSUFfUVVZX1RSSU5IID0gNCxcbiAgICBOR1VPSV9OSEFOID0gNyxcbiAgICBOR1VPSV9USEVPX0RPSSA9IDgsXG4gICAgTkdVT0lfVEhBT19UQUMgPSA5XG59XG5leHBvcnQgZW51bSBFbnVtV29ya2Zsb3dIaXN0b3J5U3RhdHVzIHtcbiAgICBJTl9NQUlOX1RIUkVBRCA9IDAsXG4gICAgTk9UX0lOX01BSU5fVEhSRUFEID0gMSxcbiAgICBSRUNBTExFRCA9IDJcbn1cbmV4cG9ydCBlbnVtIEVudW1QZXJtaXNzaW9uVHlwZSB7XG4gICAgTUFJTiA9IDAsXG4gICAgU0hBUkUgPSAxXG59XG5leHBvcnQgZW51bSBFbnVtV29ya2Zsb3dDaGVja2JveE9wdGlvbiB7XG4gICAgVEFPX0NPTkdfVklFQyA9IDEsXG4gICAgQVVUT19ORVhUX1NURVAgPSAyLFxuICAgIEFVVE9fU1RBUlRfVEFTSyA9IDNcbn1cbmV4cG9ydCBlbnVtIEVudW1Qcm9jZXNzV29ya2Zsb3dUeXBlIHtcbiAgICBFRElUID0gMSxcbiAgICBWSUVXID0gMlxufVxuZXhwb3J0IGludGVyZmFjZSBEeW5hbWljTm9kZSB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgdHlwZTogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgV2ZJdGVtIHtcbiAgICBjb2RlOiBzdHJpbmc7XG4gICAgZGF0YTogV2ZTY2hlbWE7XG4gICAgdGl0bGU6IHN0cmluZztcbn1cbmV4cG9ydCBjbGFzcyBXZlNjaGVtYSB7XG4gICAgbWFjaGluZXM6IFdmTWFjaGluZVtdO1xuICAgIGNvbm5lY3Rpb25zOiBXZkFjdGlvbltdO1xuICAgIGFjdGlvbnM/OiB7XG4gICAgICAgIFtrZXk6IHN0cmluZ106IFdmQWN0aW9uW107XG4gICAgfTtcbn1cbmV4cG9ydCBjbGFzcyBXZk1hY2hpbmUge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgY29kZTogc3RyaW5nO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB0eXBlOiBFbnVtU3RhdGVUeXBlO1xuICAgIGxvY2F0aW9uOiBudW1iZXJbXTtcbiAgICBlZGl0aW5nOiBib29sZWFuO1xuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICAgZGF0YTogYW55O1xufVxuZXhwb3J0IGNsYXNzIFdmQWN0aW9uIHtcbiAgICBzb1RodVR1OiBudW1iZXI7XG4gICAgY29kZTogc3RyaW5nO1xuICAgIGRhdGE6IGFueTtcbiAgICBlZGl0aW5nOiBib29sZWFuO1xuICAgIGljb246IHN0cmluZztcbiAgICBuYW1lOiBzdHJpbmc7XG4gICAgb3BlblBvcHVwOiBib29sZWFuO1xuICAgIG9wZW5OZXdUYWI6IGJvb2xlYW47XG4gICAgZG9tYWluTmV3VGFiOiBzdHJpbmc7XG4gICAgbGlua05ld1RhYjogc3RyaW5nO1xuICAgIHNvdXJjZTogc3RyaW5nO1xuICAgIHNvdXJjZUFuY2hvcjogc3RyaW5nO1xuICAgIHRhcmdldDogc3RyaW5nO1xuICAgIHRhcmdldEFuY2hvcjogc3RyaW5nO1xuICAgIHRhcmdldHNBbGxvd01vZGlmeTogbnVtYmVyW107XG59XG5leHBvcnQgY2xhc3MgV29ya2Zsb3dUYXJnZXREZWZhdWx0VmFsdWUge1xuICAgIGxzdFVzZXJJZDogc3RyaW5nW107XG4gICAgbHN0VXNlclZpZXdJZDogc3RyaW5nW107XG4gICAgbHN0RG9uVmlJZDogc3RyaW5nW107XG4gICAgbHN0RG9uVmlWaWV3SWQ6IHN0cmluZ1tdO1xuICAgIGxzdEdyb3VwSWQ6IHN0cmluZ1tdO1xuICAgIGxzdEdyb3VwVmlld0lkOiBzdHJpbmdbXTtcbiAgICBsc3RSb2xlSWQ6IHN0cmluZ1tdO1xuICAgIGxzdFJvbGVWaWV3SWQ6IHN0cmluZ1tdO1xuICAgIGxzdFVzZXJJZEluV29ya2Zsb3c6IHN0cmluZ1tdO1xuICAgIGxzdERvblZpSWRJbldvcmtmbG93OiBzdHJpbmdbXTtcbiAgICBsc3RHcm91cElkSW5Xb3JrZmxvdzogc3RyaW5nW107XG59XG5leHBvcnQgY29uc3QgRHVtbXlXb3JrZmxvd0NvZGUgPSAnRHVtbXlXb3JrZmxvd0NvZGUnO1xuZXhwb3J0IGNvbnN0IE1hQWN0aW9uQmF0RGF1UXV5VHJpbmggPSAnX1NUQVJUXyc7XG5leHBvcnQgY29uc3QgQWN0aW9uVGh1SG9pQmFzZSA9ICdfX1RIVV9IT0knO1xuZXhwb3J0IGNvbnN0IEFjdGlvbkNob1lLaWVuQmFzZSA9ICdfX0NIT19ZX0tJRU4nO1xuZXhwb3J0IGNvbnN0IEFjdGlvblVwZGF0ZU1vZGVsID0gJ19fVVBEQVRFX01PREVMJztcbmV4cG9ydCBjb25zdCBBY3Rpb25DaHV5ZW5YdUx5QmFzZSA9ICdfX0NIVVlFTl9YVV9MWSc7XG5leHBvcnQgY29uc3QgVGV4dEFjdGlvbkNodXllblh1THlCYXNlID0gJ0NodXnhu4NuIHjhu60gbMO9JztcbmV4cG9ydCBjb25zdCBGaWVsZERlZmluZUhhc1Rhc2sgPSAnX19pZFRhc2snO1xuIl19
|
|
@@ -897,6 +897,17 @@ export class BaseService {
|
|
|
897
897
|
}
|
|
898
898
|
return this.defaultPost(`${this.serviceUri}/ChangeStateBase`, itemWorkflowHistory);
|
|
899
899
|
}
|
|
900
|
+
chuyenXuLyBase(itemWorkflowHistory) {
|
|
901
|
+
if (itemWorkflowHistory) {
|
|
902
|
+
if (itemWorkflowHistory.departmentIds) {
|
|
903
|
+
itemWorkflowHistory.donViIds = itemWorkflowHistory.departmentIds;
|
|
904
|
+
}
|
|
905
|
+
if (itemWorkflowHistory.departmentViewIds) {
|
|
906
|
+
itemWorkflowHistory.donViViewIds = itemWorkflowHistory.departmentViewIds;
|
|
907
|
+
}
|
|
908
|
+
}
|
|
909
|
+
return this.defaultPost(`${this.serviceUri}/ChuyenXuLyBase`, itemWorkflowHistory);
|
|
910
|
+
}
|
|
900
911
|
choYKien(itemWorkflowHistory) {
|
|
901
912
|
return this.defaultPost(`${this.serviceUri}/ChoYKienBase`, itemWorkflowHistory);
|
|
902
913
|
}
|
|
@@ -953,4 +964,4 @@ export class BaseService {
|
|
|
953
964
|
}
|
|
954
965
|
export class HttpOptions {
|
|
955
966
|
}
|
|
956
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliL3NlcnZpY2VzL2Jhc2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFpQyxXQUFXLEVBQWMsTUFBTSxzQkFBc0IsQ0FBQztBQUU5RixPQUFPLEtBQUssU0FBUyxNQUFNLFlBQVksQ0FBQztBQUV4QyxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRSxPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRW5FLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBVyxJQUFJLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV0RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHOUQsTUFBTSxVQUFVLEdBQUcsaUZBQWlGLENBQUM7QUFDckcsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDO0FBRWhDLE1BQU0sT0FBZ0IsV0FBVztJQXNCN0IsWUFDSSxJQUFnQixFQUNoQixRQUFrQixFQUNsQixVQUFrQjs7UUFwQnRCLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFDaEIsYUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNkLGdCQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFDaEIsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNoQixnQkFB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QUUsRUFBRSxDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVELGVBQWU7UUFDWCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxrQkFBa0IsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN0RSxDQUFDO0lBRUQsa0JBQWtCLENBQUMsSUFBSTtRQUNuQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxxQkFBcUIsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMzRSxDQUFDO0NBQ0o7QUFFRCxNQUFNLE9BQU8sV0FBVztDQVd2QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBFcnJvclJlc3BvbnNlLCBIdHRwSGVhZGVycywgSHR0cFBhcmFtcyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgKiBhcyBGaWxlU2F2ZXIgZnJvbSAnZmlsZS1zYXZlcic7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCByZXRyeSwgc2hhcmVSZXBsYXkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IERyb3Bkb3duT3B0aW9ucywgT3BlcmF0b3IgfSBmcm9tICcuLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcbmltcG9ydCB7IE1vZGVsU2hhcmVMaW5rQnlQZXJtaXNzaW9uIH0gZnJvbSAnLi4vY29tcG9uZW50cy9zaGFyZS1saW5rLWJ5LXBlcm1pc3Npb24vbW9kZWxzL3NoYXJlLWxpbmstYnktcGVybWlzc2lvbic7XG5pbXBvcnQgeyBUcmVlTm9kZSB9IGZyb20gJy4uL21vZGVscy9iYXNpYy10cmVlLW5vZGUnO1xuaW1wb3J0IHsgRmlsdGVyLCBHcmlkSW5mbywgSW5jbHVkZSwgU29ydCB9IGZyb20gJy4uL21vZGVscy9ncmlkLWluZm8nO1xuaW1wb3J0IHsgUmVzcG9uc2VSZXN1bHQgfSBmcm9tICcuLi9tb2RlbHMvcmVzcG9uc2UtcmVzdWx0JztcbmltcG9ydCB7IGdldFN0cmluZ0RhdGVWTiB9IGZyb20gJy4uL3V0aWxzL2RhdGUnO1xuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gJy4vY29tbW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgU2lnbmFsUlNlcnZpY2UgfSBmcm9tICcuL3NpZ25hbHIuc2VydmljZSc7XG5pbXBvcnQgeyBNb2R1bGVDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi9tb2R1bGUtY29uZmlnLnNlcnZpY2UnO1xuXG5cbmNvbnN0IEVYQ0VMX1RZUEUgPSAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQ7Y2hhcnNldD1VVEYtOCc7XG5jb25zdCBFWENFTF9FWFRFTlNJT04gPSAnLnhsc3gnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZVNlcnZpY2Uge1xuICAgIF9odHRwOiBIdHRwQ2xpZW50O1xuICAgIF9pbmplY3RvcjogSW5qZWN0b3I7XG4gICAgX3NpZ25hbHJTZXJ2aWNlUHJpdmF0ZTogU2lnbmFsUlNlcnZpY2U7XG5cbiAgICBzZXJ2aWNlVXJpID0gJyc7XG4gICAgZW5kUG9pbnQgPSAnJztcbiAgICBzZXJ2aWNlQ29kZSA9ICcnO1xuICAgIGVudGl0eU5hbWUgPSAnJztcbiAgICBvYmplY3ROYW1lID0gJyc7XG4gICAgdXNlV29ya2Zsb3cgPSBmYWxzZTtcbiAgICBhcGlHZXREYXRhID0gJ0dldERhdGEnO1xuICAgIGFwaUdldEFsbCA9ICdHZXRBbGxCeUZpbHRlcic7XG4gICAgYXBpR2V0RGV0YWlsQnlGaWx0ZXIgPSAnR2V0QnlGaWx0ZXInO1xuICAgIGRpc2FibGVGaWVsZE5vdFVzZSA9IGZhbHNlO1xuXG4gICAgcmVhZG9ubHkgUkVUUllfQ09VTlQ6IG51bWJlciA9IDA7XG4gICAgcmVhZG9ubHkgUkVQTEFZX0NPVU5UOiBudW1iZXIgPSAxO1xuICAgIHJlYWRvbmx5IExJTUlUX0RFRkFVTFQ6IG51bWJlciA9IDEwMDA7XG5cbiAgICBwcm90ZWN0ZWQgX2NvbW1vblNlcnZpY2U6IENvbW1vblNlcnZpY2U7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgaHR0cDogSHR0cENsaWVudCxcbiAgICAgICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgICAgICBzZXJ2aWNlVXJpOiBzdHJpbmcsXG4gICAgKSB7XG4gICAgICAgIHRoaXMuX2h0dHAgPSBodHRwO1xuICAgICAgICB0aGlzLl9pbmplY3RvciA9IGluamVjdG9yO1xuICAgICAgICB0aGlzLnNlcnZpY2VVcmkgPSBzZXJ2aWNlVXJpO1xuICAgICAgICB0aGlzLl9jb21tb25TZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KENvbW1vblNlcnZpY2UpO1xuICAgICAgICB0aGlzLl9zaWduYWxyU2VydmljZVByaXZhdGUgPSBpbmplY3Rvci5nZXQoU2lnbmFsUlNlcnZpY2UpO1xuICAgICAgICBjb25zdCBlbnZpcm9ubWVudCA9IHRoaXMuX2luamVjdG9yLmdldChNb2R1bGVDb25maWdTZXJ2aWNlKS5nZXRDb25maWcoKS5lbnZpcm9ubWVudDtcbiAgICAgICAgdGhpcy5kaXNhYmxlRmllbGROb3RVc2UgPSBlbnZpcm9ubWVudD8uY2F1SGluaE5naGllcFZ1Py5kaXNhYmxlRmllbGROb3RVc2UgPz8gZmFsc2U7XG4gICAgfVxuXG5cbiAgICBzZXRDdXJyZW50U2VydmljZVVyaShrZXk6IHN0cmluZykge1xuICAgIH1cblxuICAgIGdldEtleVdvcmtmbG93U2V0dGluZygpIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuZW50aXR5TmFtZX1gO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3Vic2NyaWJlU2lnbmFsUihjYWxsQmFjaykge1xuICAgICAgICBjb25zdCB0b3BpYyA9IHRoaXMuX2NvbW1vblNlcnZpY2UuZ3VpZCgpO1xuICAgICAgICAvLyBC4bqvdCDEkeG6p3UgY2jhuqF5XG4gICAgICAgIHRoaXMuX3NpZ25hbHJTZXJ2aWNlUHJpdmF0ZS5zdGFydCgnQ29tbW9uSHViJywgdG9waWMsIChtZXNzYWdlKSA9PiB7XG4gICAgICAgICAgICAvLyB1bnN1YnNjcmliZSBjw6FjIHRvcGljIMSRw6MgbOG6r25nIG5naGUgdHLGsOG7m2MgxJHDs1xuICAgICAgICAgICAgdGhpcy5fc2lnbmFsclNlcnZpY2VQcml2YXRlLnVuU3Vic2NyaWJlVmlld0NvZGUoJ0NvbW1vbkh1YicsIHRvcGljKTtcbiAgICAgICAgICAgIGNhbGxCYWNrKG1lc3NhZ2UpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRvcGljO1xuICAgIH1cblxuICAgIHByaXZhdGUgdW5TdWJzY3JpYmVTaWduYWxSKGtleSkge1xuICAgICAgICB0aGlzLl9zaWduYWxyU2VydmljZVByaXZhdGUudW5TdWJzY3JpYmVWaWV3Q29kZSgnQ29tbW9uSHViJywga2V5KTtcbiAgICB9XG5cbiAgICBkZWZhdWx0R2V0U2lnbmFsUihhcGlVcmwpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0b3BpYyA9IHRoaXMuc3Vic2NyaWJlU2lnbmFsUihmID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBycyA9IEpTT04ucGFyc2UoZik7XG4gICAgICAgICAgICAgICAgaWYgKHJzLmRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gPT0gLTEgbMOgIHRyxrDhu51uZyBo4bujcCBzZXQga2V5IGLhu4sgbOG7l2lcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJzLmRhdGEgIT0gJy0xJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRDYWNoZVJlc3BvbnNlKHJzLmRhdGEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChhcGlVcmwuaW5kZXhPZignPycpID09IC0xKSB7XG4gICAgICAgICAgICAgICAgYXBpVXJsICs9IGA/YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFwaVVybCArPSBgJmA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhcGlVcmwgKz0gYF9rZXlTaWduYWxyPSR7dG9waWN9YDtcbiAgICAgICAgICAgIHRoaXMuX2h0dHAuZ2V0PFJlc3BvbnNlUmVzdWx0PihhcGlVcmwpXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIHNoYXJlUmVwbGF5KHRoaXMuUkVQTEFZX0NPVU5UKSxcbiAgICAgICAgICAgICAgICAgICAgcmV0cnkodGhpcy5SRVRSWV9DT1VOVCksXG4gICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpXG4gICAgICAgICAgICAgICAgKS50b1Byb21pc2UoKVxuICAgICAgICAgICAgICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51blN1YnNjcmliZVNpZ25hbFIodG9waWMpO1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZGVmYXVsdFBvc3RTaWduYWxSKGFwaVVybCwgZGF0YTogYW55KTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdG9waWMgPSB0aGlzLnN1YnNjcmliZVNpZ25hbFIoZiA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcnMgPSBKU09OLnBhcnNlKGYpO1xuICAgICAgICAgICAgICAgIGlmIChycy5kYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vID09IC0xIGzDoCB0csaw4budbmcgaOG7o3Agc2V0IGtleSBi4buLIGzhu5dpXG4gICAgICAgICAgICAgICAgICAgIGlmIChycy5kYXRhICE9ICctMScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q2FjaGVSZXNwb25zZShycy5kYXRhKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoSlNPTi5wYXJzZShyZXMuZGF0YSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoYXBpVXJsLmluZGV4T2YoJz8nKSA9PSAtMSkge1xuICAgICAgICAgICAgICAgIGFwaVVybCArPSBgP2A7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhcGlVcmwgKz0gYCZgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYXBpVXJsICs9IGBfa2V5U2lnbmFscj0ke3RvcGljfWA7XG4gICAgICAgICAgICB0aGlzLl9odHRwLnBvc3Q8UmVzcG9uc2VSZXN1bHQ+KGFwaVVybCwgZGF0YSlcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgc2hhcmVSZXBsYXkodGhpcy5SRVBMQVlfQ09VTlQpLFxuICAgICAgICAgICAgICAgICAgICByZXRyeSh0aGlzLlJFVFJZX0NPVU5UKSxcbiAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSlcbiAgICAgICAgICAgICAgICApLnRvUHJvbWlzZSgpXG4gICAgICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVuU3Vic2NyaWJlU2lnbmFsUih0b3BpYyk7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRDYWNoZVJlc3BvbnNlKGtleTogYW55KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vQmFzZUdldENhY2hlSW5mby8ke2tleX1gLCB7fSk7XG4gICAgfVxuXG4gICAgZ2V0T2JqZWN0RGlzcGxheU1vZGVsKGlkOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRPYmplY3REaXNwbGF5TW9kZWwvJHtpZH1gLCB7fSk7XG4gICAgfVxuXG4gICAgcG9zdEdyaWRJbmZvKHVybDogc3RyaW5nLCBncmlkSW5mbzogR3JpZEluZm8pOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIGlmICghZ3JpZEluZm8pIGdyaWRJbmZvID0gbmV3IEdyaWRJbmZvKCk7XG4gICAgICAgIGlmIChncmlkSW5mby5maWVsZHMgJiYgZ3JpZEluZm8uZmllbGRzLnN0YXJ0c1dpdGgoJywnKSkge1xuICAgICAgICAgICAgZ3JpZEluZm8uZmllbGRzID0gZ3JpZEluZm8uZmllbGRzLnN1YnN0cmluZygxKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9LyR7dXJsfWAsIGdyaWRJbmZvKTtcbiAgICB9XG5cbiAgICBnZXRCeUdyaWRSZXF1ZXN0KGdyaWRJbmZvOiBHcmlkSW5mbywgcGx1c1VybDogc3RyaW5nID0gJycpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIGxldCBhcGlVcmwgPSB0aGlzLmFwaUdldERhdGE7XG4gICAgICAgIGlmIChwbHVzVXJsICE9IG51bGwgJiYgcGx1c1VybCAhPSAnJykge1xuICAgICAgICAgICAgYXBpVXJsICs9ICcvJyArIHBsdXNVcmw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucG9zdEdyaWRJbmZvKGFwaVVybCwgZ3JpZEluZm8pO1xuICAgIH1cblxuICAgIGdldEJ5R3JpZFJlcXVlc3RXaXRoQm9keU9sZChncmlkSW5mbzogR3JpZEluZm8sIHBsdXNVcmw6IHN0cmluZyA9ICcnKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBsZXQgYXBpVXJsID0gdGhpcy5hcGlHZXREYXRhO1xuICAgICAgICBpZiAocGx1c1VybCAhPSBudWxsICYmIHBsdXNVcmwgIT0gJycpIHtcbiAgICAgICAgICAgIGFwaVVybCArPSAnLycgKyBwbHVzVXJsO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY29udmVydFZhbHVlRmlsdGVyVG9PbGRCYXNlKGdyaWRJbmZvLmZpbHRlcnMpO1xuICAgICAgICByZXR1cm4gdGhpcy5wb3N0R3JpZEluZm8oYXBpVXJsLCBncmlkSW5mbyk7XG4gICAgfVxuXG4gICAgYmFzZUdldFRyZWVEYXRhKGdyaWRJbmZvOiBHcmlkSW5mbywgcGx1c1VybDogc3RyaW5nID0gJycpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIGxldCBhcGlVcmwgPSAnR2V0VHJlZURhdGEnO1xuICAgICAgICBpZiAocGx1c1VybCAhPSBudWxsICYmIHBsdXNVcmwgIT0gJycpIHtcbiAgICAgICAgICAgIGFwaVVybCArPSAnLycgKyBwbHVzVXJsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnBvc3RHcmlkSW5mbyhhcGlVcmwsIGdyaWRJbmZvKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbnZlcnRWYWx1ZUZpbHRlclRvT2xkQmFzZShmaWx0ZXJzOiBGaWx0ZXJbXSkge1xuICAgICAgICBmaWx0ZXJzLmZvckVhY2goZmlsdGVyID0+IHtcbiAgICAgICAgICAgIGlmIChmaWx0ZXIuZmlsdGVycyAmJiBmaWx0ZXIuZmlsdGVycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb252ZXJ0VmFsdWVGaWx0ZXJUb09sZEJhc2UoZmlsdGVyLmZpbHRlcnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBKU09OLnBhcnNlKGZpbHRlci52YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyVmFsdWUgPSB2YWx1ZS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICAvLyBMw6AgdmFsdWUga2nhu4N1IGRhdGVcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0clZhbHVlLmluZGV4T2YoJy0nKSA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGUgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTihkYXRlLmdldFRpbWUoKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIudmFsdWUgPSBnZXRTdHJpbmdEYXRlVk4oZGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIudmFsdWUgPSBzdHJWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci52YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENo4buJIGTDuW5nIHRyb25nIHRyxrDhu51uZyBo4bujcCBtdeG7kW4gZ+G7rWkgcmVxdWVzdCDEkeG6v24gY3VzdG9tIHJvdXRlIEdldERhdGEve3BsdXNVcmx9XG4gICAgICovXG4gICAgZ2V0RGF0YUN1c3RvbVJvdXRlKHBsdXNVcmw6IHN0cmluZywgZmlsdGVycz86IEZpbHRlcltdLCBmaWVsZHM6IHN0cmluZyA9ICcnLCBzb3J0czogU29ydFtdID0gW10sIHBhZ2VTaXplOiBudW1iZXIgPSAxLCBwYWdlOiBudW1iZXIgPSAxKSB7XG4gICAgICAgIGNvbnN0IGdyaWRJbmZvID0gbmV3IEdyaWRJbmZvKHtcbiAgICAgICAgICAgIGZpZWxkcyxcbiAgICAgICAgICAgIHBhZ2VJbmZvOiB7XG4gICAgICAgICAgICAgICAgcGFnZSxcbiAgICAgICAgICAgICAgICBwYWdlU2l6ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNvcnRzLFxuICAgICAgICAgICAgZmlsdGVyczogZmlsdGVycyA/IGZpbHRlcnMgOiBbXVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QnlHcmlkUmVxdWVzdChncmlkSW5mbywgcGx1c1VybCk7XG4gICAgfVxuXG4gICAgZ2V0QWxsV2l0aEluY2x1ZGUoZmlsdGVycz86IEZpbHRlcltdLCBmaWVsZHM6IHN0cmluZyA9ICcnLCBzb3J0czogU29ydFtdID0gW10sIGluY2x1ZGVzOiBJbmNsdWRlW10gPSBbXSwgcGx1c1VybDogc3RyaW5nID0gJycpIHtcbiAgICAgICAgbGV0IGFwaVVybCA9IHRoaXMuYXBpR2V0QWxsO1xuICAgICAgICBpZiAocGx1c1VybCAhPSBudWxsICYmIHBsdXNVcmwgIT0gJycpIHtcbiAgICAgICAgICAgIGFwaVVybCArPSBgLyR7cGx1c1VybH1gO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGdyaWRJbmZvID0gbmV3IEdyaWRJbmZvKHtcbiAgICAgICAgICAgIGZpZWxkcyxcbiAgICAgICAgICAgIHBhZ2VJbmZvOiB7XG4gICAgICAgICAgICAgICAgcGFnZTogMSxcbiAgICAgICAgICAgICAgICBwYWdlU2l6ZTogOTk5OTlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzb3J0cyxcbiAgICAgICAgICAgIGZpbHRlcnM6IGZpbHRlcnMgPyBmaWx0ZXJzIDogW10sXG4gICAgICAgICAgICBpbmNsdWRlc1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMucG9zdEdyaWRJbmZvKGFwaVVybCwgZ3JpZEluZm8pO1xuICAgIH1cblxuICAgIGdldEJ5SWRzKGlkczogc3RyaW5nW10sIGZpZWxkczogc3RyaW5nID0gJycsIHNvcnRzOiBTb3J0W10gPSBbXSwgcGx1c1VybDogc3RyaW5nID0gJycpIHtcbiAgICAgICAgY29uc3QgZmlsdGVycyA9IFtcbiAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKCdpZCcsIE9wZXJhdG9yLmluLCBpZHMpXG4gICAgICAgIF07XG4gICAgICAgIHJldHVybiB0aGlzLmdldEFsbChmaWx0ZXJzLCBmaWVsZHMsIHNvcnRzLCBwbHVzVXJsKTtcbiAgICB9XG5cbiAgICBnZXRBbGxXaXRoSWdub3JlKGZpbHRlcnM/OiBGaWx0ZXJbXSwgZmllbGRzOiBzdHJpbmcgPSAnJywgc29ydHM6IFNvcnRbXSA9IFtdKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEFsbChmaWx0ZXJzLCBmaWVsZHMsIHNvcnRzLCAnSWdub3JlQWxsQmFzZUZpbHRlcicpO1xuICAgIH1cblxuICAgIGdldEFsbChmaWx0ZXJzPzogRmlsdGVyW10sIGZpZWxkczogc3RyaW5nID0gJycsIHNvcnRzOiBTb3J0W10gPSBbXSwgcGx1c1VybDogc3RyaW5nID0gJycpIHtcbiAgICAgICAgbGV0IGFwaVVybCA9IHRoaXMuYXBpR2V0QWxsO1xuICAgICAgICBpZiAocGx1c1VybCAhPSBudWxsICYmIHBsdXNVcmwgIT0gJycpIHtcbiAgICAgICAgICAgIGFwaVVybCArPSBgLyR7cGx1c1VybH1gO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGdyaWRJbmZvID0gbmV3IEdyaWRJbmZvKHtcbiAgICAgICAgICAgIGZpZWxkcyxcbiAgICAgICAgICAgIHBhZ2VJbmZvOiB7XG4gICAgICAgICAgICAgICAgcGFnZTogMSxcbiAgICAgICAgICAgICAgICBwYWdlU2l6ZTogOTk5XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc29ydHMsXG4gICAgICAgICAgICBmaWx0ZXJzOiBmaWx0ZXJzID8gZmlsdGVycyA6IFtdXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5wb3N0R3JpZEluZm8oYXBpVXJsLCBncmlkSW5mbyk7XG4gICAgfVxuXG4gICAgZ2V0QWxsQnlHcmlkSW5mbyhncmlkSW5mbzogR3JpZEluZm8sIHBsdXNVcmw6IHN0cmluZyA9ICcnKSB7XG4gICAgICAgIGxldCBhcGlVcmwgPSB0aGlzLmFwaUdldEFsbDtcbiAgICAgICAgaWYgKHBsdXNVcmwgIT0gbnVsbCAmJiBwbHVzVXJsICE9ICcnKSB7XG4gICAgICAgICAgICBhcGlVcmwgKz0gYC8ke3BsdXNVcmx9YDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5wb3N0R3JpZEluZm8oYXBpVXJsLCBncmlkSW5mbyk7XG4gICAgfVxuXG4gICAgY2hlY2tFeGlzdEJ5RmlsdGVyKGZpbHRlcnM6IEZpbHRlcltdKSB7XG4gICAgICAgIGNvbnN0IGFwaVVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vQ2hlY2tFeGlzdGA7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGFwaVVybCwgZmlsdGVycyk7XG4gICAgfVxuXG4gICAgYXN5bmMgY2hlY2tEdXBsaWNhdGVkQnlGaWVsZChmaWVsZDogc3RyaW5nLCB2YWx1ZTogYW55LCBpZDogYW55KSB7XG4gICAgICAgIGNvbnN0IGZpbHRlcnMgPSBbXG4gICAgICAgICAgICBuZXcgRmlsdGVyKHtcbiAgICAgICAgICAgICAgICBmaWVsZDogJ2lkJyxcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3IuZXF1YWwsXG4gICAgICAgICAgICAgICAgdmFsdWU6IEpTT04uc3RyaW5naWZ5KGlkKVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBuZXcgRmlsdGVyKHtcbiAgICAgICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3IuZXF1YWwsXG4gICAgICAgICAgICAgICAgdmFsdWU6IEpTT04uc3RyaW5naWZ5KHZhbHVlKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgXTtcblxuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmNoZWNrRXhpc3RCeUZpbHRlcihmaWx0ZXJzKTtcbiAgICAgICAgaWYgKCFyZXN1bHQuc3VjY2VzcykgcmV0dXJuIHRydWU7XG4gICAgICAgIHJldHVybiByZXN1bHQuZGF0YTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdlbmVyYXRlR3JpZEluZm9Ecm9wZG93bihmaWx0ZXJzOiBGaWx0ZXJbXSwgb3B0aW9uczogRHJvcGRvd25PcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGdyaWRJbmZvID0ge1xuICAgICAgICAgICAgcGFnZUluZm86IHtcbiAgICAgICAgICAgICAgICBwYWdlOiBvcHRpb25zLnBhZ2UsXG4gICAgICAgICAgICAgICAgcGFnZVNpemU6IG9wdGlvbnMucGFnZVNpemVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmaWx0ZXJzLFxuICAgICAgICAgICAgc29ydHM6IFtdLFxuICAgICAgICAgICAgZmllbGRzOiBudWxsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGxzdEZpZWxkID0gW1xuICAgICAgICAgICAgb3B0aW9ucy52YWx1ZUZpZWxkLFxuICAgICAgICAgICAgb3B0aW9ucy5kaXNwbGF5RmllbGRcbiAgICAgICAgXTtcbiAgICAgICAgbHN0RmllbGQucHVzaCguLi5vcHRpb25zLmZpZWxkUGx1cy5zcGxpdCgnLCcpLmZpbHRlcihxID0+ICEhcSAmJiBxICE9PSAnJykpO1xuICAgICAgICBncmlkSW5mby5maWVsZHMgPSB0aGlzLl9jb21tb25TZXJ2aWNlLmFkZERpc3RpbmN0KGxzdEZpZWxkLCBbXSkudG9TdHJpbmcoKTtcbiAgICAgICAgaWYgKG9wdGlvbnMuc29ydHMgIT0gbnVsbCAmJiBvcHRpb25zLnNvcnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGdyaWRJbmZvLnNvcnRzID0gWy4uLm9wdGlvbnMuc29ydHNdO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zLnNvcnRGaWVsZCAhPSBudWxsICYmIG9wdGlvbnMuc29ydEZpZWxkICE9ICcnKSB7XG5cbiAgICAgICAgICAgIGdyaWRJbmZvLnNvcnRzLnB1c2goeyBmaWVsZDogb3B0aW9ucy5zb3J0RmllbGQsIGRpcjogb3B0aW9ucy5zb3J0RGlyIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBncmlkSW5mbztcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldERlZmF1bHRPcHRpb25zKG9wdGlvbnM6IERyb3Bkb3duT3B0aW9ucykge1xuICAgICAgICBpZiAob3B0aW9ucy5maWVsZFBsdXMubGVuZ3RoICYmICFvcHRpb25zLmZpZWxkUGx1cy5zdGFydHNXaXRoKCcsJykpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuZmllbGRQbHVzID0gJywnICsgb3B0aW9ucy5maWVsZFBsdXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuc29ydEZpZWxkID09ICcnKSB7XG4gICAgICAgICAgICBvcHRpb25zLnNvcnRGaWVsZCA9IG9wdGlvbnMuZGlzcGxheUZpZWxkO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXREZWZhdWx0T3B0aW9uc1RyZWUob3B0aW9uczogRHJvcGRvd25PcHRpb25zLCBmaWVsZFBhcmVudDogc3RyaW5nKSB7XG4gICAgICAgIGlmIChvcHRpb25zLmZpZWxkUGx1cy5sZW5ndGggJiYgIW9wdGlvbnMuZmllbGRQbHVzLnN0YXJ0c1dpdGgoJywnKSkge1xuICAgICAgICAgICAgb3B0aW9ucy5maWVsZFBsdXMgPSAnLCcgKyBvcHRpb25zLmZpZWxkUGx1cztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvcHRpb25zLmZpZWxkUGx1cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBvcHRpb25zLmZpZWxkUGx1cyArPSAnLCc7XG4gICAgICAgIH1cbiAgICAgICAgb3B0aW9ucy5maWVsZFBsdXMgKz0gZmllbGRQYXJlbnQ7XG4gICAgfVxuXG4gICAgZ2V0RGF0YURyb3Bkb3duKG9wdGlvbnM/OiBEcm9wZG93bk9wdGlvbnMpOiBQcm9taXNlPGFueVtdPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldERhdGFEcm9wZG93bkJ5RmlsdGVyKFtdLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBnZXREYXRhRHJvcGRvd25CeUZpbHRlcihmaWx0ZXJzOiBGaWx0ZXJbXSwgb3B0aW9ucz86IERyb3Bkb3duT3B0aW9ucyk6IFByb21pc2U8YW55W10+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZ2V0RGF0YURyb3Bkb3duQnlGaWx0ZXJSYXcoZmlsdGVycywgb3B0aW9ucylcbiAgICAgICAgICAgICAgICAudGhlbihyZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcy5kYXRhKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaChlcnIgPT4gcmVqZWN0KGVycikpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXREYXRhRHJvcGRvd25CeUZpbHRlclJhdyhmaWx0ZXJzOiBGaWx0ZXJbXSwgb3B0aW9ucz86IERyb3Bkb3duT3B0aW9ucyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgaWYgKG9wdGlvbnMgPT0gbnVsbCkgb3B0aW9ucyA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcbiAgICAgICAgdGhpcy5zZXREZWZhdWx0T3B0aW9ucyhvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldERhdGFEcm9wZG93bkJ5RmlsdGVyKGZpbHRlcnMsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldERhdGFEcm9wZG93bkJ5RmlsdGVyKGZpbHRlcnM6IEZpbHRlcltdLCBvcHRpb25zOiBEcm9wZG93bk9wdGlvbnMpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBncmlkSW5mbyA9IHRoaXMuZ2VuZXJhdGVHcmlkSW5mb0Ryb3Bkb3duKGZpbHRlcnMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuaXNTZXJ2ZXJMb2FkICYmICFvcHRpb25zLmlzR2V0QWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRCeUdyaWRSZXF1ZXN0KGdyaWRJbmZvLCBvcHRpb25zLnBsdXNVcmwpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcyk7XG4gICAgICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiByZWplY3QoZXJyKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdldEFsbEJ5R3JpZEluZm8oZ3JpZEluZm8sIG9wdGlvbnMucGx1c1VybClcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHJlamVjdChlcnIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGFvIHRyZWUgbGlzdCB0dSBkdSBsaWV1IGR1b2MgY2hvLCBjdSB0aGUgbGEgZHUgbGlldSBUcmVlTW9kZWwgPT4gZGEgZHVvYyBzb3J0IHRoZW8gVHJ1b25nIE1hUGhhbkNhcFxuICAgICAqIEBwYXJhbSByYXdEYXRhXG4gICAgICogQHBhcmFtIGZpZWxkUGFyZW50IGZpZWxkIGdpYSB0cmkgY2hhIHRyb25nIG1vZGVsIGNvbi4gVkQ6IElkQ2hhXG4gICAgICogQHBhcmFtIGZpZWxkUGFyZW50VHJlZUl0ZW0gZmllbGQgZ2lhIHRyaSBjdWEgbW9kZWwgY2hhLiBWRDogSWRcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuICAgIGdldFRyZWVNb2RlbEJhc2UocmF3RGF0YTogYW55W10sIGZpZWxkUGFyZW50OiBzdHJpbmcsIGZpZWxkUGFyZW50VHJlZUl0ZW06IHN0cmluZykge1xuICAgICAgICBpZiAocmF3RGF0YSA9PSBudWxsIHx8IHJhd0RhdGEubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRhdGFNYXAgPSBuZXcgTWFwPGFueSwgYW55PigpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBkYXRhIG9mIHJhd0RhdGEpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGVLZXkgPSBkYXRhW2ZpZWxkUGFyZW50VHJlZUl0ZW1dO1xuICAgICAgICAgICAgY29uc3QgZmllbGRQYXJlbnRWYWx1ZSA9IGRhdGFbZmllbGRQYXJlbnRdO1xuICAgICAgICAgICAgZGF0YS5fbGV2ZWwgPSAwO1xuICAgICAgICAgICAgZGF0YS5fcHJlZml4ID0gJyc7XG4gICAgICAgICAgICBjb25zdCBkYXRhUGFyZW50ID0gZmllbGRQYXJlbnRWYWx1ZSAhPSBudWxsID8gZGF0YU1hcC5nZXQoZmllbGRQYXJlbnRWYWx1ZSkgOiBudWxsO1xuICAgICAgICAgICAgaWYgKGRhdGFQYXJlbnQgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jb21tb25TZXJ2aWNlLmlzVmFsaWRHdWlkKGZpZWxkUGFyZW50VmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEuX2Vycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGF0YS5fcm9vdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgZGF0YU1hcC5zZXQobm9kZUtleSwgZGF0YSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goZGF0YSk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRhdGEuX2xldmVsID0gZGF0YVBhcmVudC5fbGV2ZWwgKyAxO1xuICAgICAgICAgICAgZGF0YS5fcHJlZml4ID0gZGF0YVBhcmVudC5fcm9vdCA9PT0gdHJ1ZVxuICAgICAgICAgICAgICAgID8gJ3wtLSdcbiAgICAgICAgICAgICAgICA6IGRhdGFQYXJlbnQuX3ByZWZpeCArICctLS0nO1xuICAgICAgICAgICAgZGF0YU1hcC5zZXQobm9kZUtleSwgZGF0YSk7XG4gICAgICAgICAgICByZXN1bHQucHVzaChkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRhbyB0cmVlIGRhdGEgdHUgZHUgbGlldSBkdW9jIGNob1xuICAgICAqIEBwYXJhbSByYXdEYXRhXG4gICAgICogQHBhcmFtIGZpZWxkUGFyZW50IGZpZWxkIGdpYSB0cmkgY2hhIHRyb25nIG1vZGVsIGNvblxuICAgICAqIEBwYXJhbSBmaWVsZFBhcmVudFRyZWVJdGVtIGZpZWxkIGdpYSB0cmkgY3VhIG1vZGVsIGNoYVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgZ2V0VHJlZURhdGEocmF3RGF0YSwgZmllbGRQYXJlbnQ6IHN0cmluZywgZmllbGRQYXJlbnRUcmVlSXRlbTogc3RyaW5nKSB7XG4gICAgICAgIGlmIChyYXdEYXRhID09IG51bGwpIHJldHVybiBbXTtcbiAgICAgICAgLy8gbGV0IGNvdW50ID0gMDtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgICAgIC8vIGNvbnN0IGZ1bmNEZVF1eSA9IChyZXN1bHQsIGRhdGFzLCBwcmVmaXgsIGxldmVsKSA9PiB7XG4gICAgICAgIC8vICAgICBjb25zdCBpdGVtUGFyZW50ID0gcmVzdWx0W3Jlc3VsdC5sZW5ndGggLSAxXTtcbiAgICAgICAgLy8gICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgLy8gICAgICAgICBjb3VudCsrO1xuICAgICAgICAvLyAgICAgICAgIGlmIChkYXRhc1tpXVtmaWVsZFBhcmVudF0gPT0gaXRlbVBhcmVudFtvcHRpb25zLmZpZWxkUGFyZW50VHJlZUl0ZW1dKSB7XG4gICAgICAgIC8vICAgICAgICAgICAgIGRhdGFzW2ldLl9wcmVmaXggPSBgJHtwcmVmaXh9IGA7XG4gICAgICAgIC8vICAgICAgICAgICAgIGRhdGFzW2ldLl9pbmRleCA9IGk7XG4gICAgICAgIC8vICAgICAgICAgICAgIGRhdGFzW2ldLl9sZXZlbCA9IGxldmVsO1xuICAgICAgICAvLyAgICAgICAgICAgICByZXN1bHQucHVzaChkYXRhc1tpXSk7XG4gICAgICAgIC8vICAgICAgICAgICAgIGZ1bmNEZVF1eShyZXN1bHQsIGRhdGFzLCBwcmVmaXggKyAnLS0tJywgbGV2ZWwgKyAxKTtcbiAgICAgICAgLy8gICAgICAgICB9XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vIH07XG4gICAgICAgIC8vIGZvciAobGV0IGkgPSAwOyBpIDwgcmF3RGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgICAvLyAgICAgY291bnQrKztcbiAgICAgICAgLy8gICAgIGlmIChyYXdEYXRhW2ldW2ZpZWxkUGFyZW50XSA9PSB2YWx1ZVBhcmVudFJvb3QpIHtcbiAgICAgICAgLy8gICAgICAgICByYXdEYXRhW2ldLl9wcmVmaXggPSAnJztcbiAgICAgICAgLy8gICAgICAgICByYXdEYXRhW2ldLl9pbmRleCA9IGk7XG4gICAgICAgIC8vICAgICAgICAgcmF3RGF0YVtpXS5fbGV2ZWwgPSAxO1xuICAgICAgICAvLyAgICAgICAgIHJlc3VsdC5wdXNoKHJhd0RhdGFbaV0pO1xuICAgICAgICAvLyAgICAgICAgIGZ1bmNEZVF1eShyZXN1bHQsIHJhd0RhdGEsICd8LS0tJywgMik7XG4gICAgICAgIC8vICAgICB9XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy8gY29uc29sZS5sb2coYGxvb3AgY291bnQgb2xkICR7Y291bnR9YCk7XG4gICAgICAgIC8vIGNvdW50ID0gMDtcbiAgICAgICAgY29uc3Qgbm9kZU1hcCA9IG5ldyBNYXA8YW55LCBUcmVlTm9kZT4oKTtcbiAgICAgICAgY29uc3Qgcm9vdHMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBkYXRhIG9mIHJhd0RhdGEpIHtcbiAgICAgICAgICAgIC8vIGNvdW50Kys7XG4gICAgICAgICAgICBjb25zdCBub2RlS2V5ID0gZGF0YVtmaWVsZFBhcmVudFRyZWVJdGVtXTtcbiAgICAgICAgICAgIGNvbnN0IHBhcmVudEtleSA9IGRhdGFbZmllbGRQYXJlbnRdO1xuICAgICAgICAgICAgbGV0IG5vZGUgPSBub2RlTWFwLmdldChub2RlS2V5KTtcbiAgICAgICAgICAgIGxldCBpc05ld05vZGUgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKG5vZGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIG5vZGUuZGF0YSA9IGRhdGE7XG4gICAgICAgICAgICAgICAgbm9kZS5wYXJlbnQgPSBwYXJlbnRLZXk7XG4gICAgICAgICAgICAgICAgaXNOZXdOb2RlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0eXBlb2YgcGFyZW50S2V5ID09ICdzdHJpbmcnICYmICF0aGlzLl9jb21tb25TZXJ2aWNlLmlzVmFsaWRHdWlkKHBhcmVudEtleSlcbiAgICAgICAgICAgICAgICB8fCBwYXJlbnRLZXkgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChpc05ld05vZGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV3Tm9kZSA9IG5ldyBUcmVlTm9kZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICByb290OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGVhZjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIG5vZGVNYXAuc2V0KG5vZGVLZXksIG5ld05vZGUpO1xuICAgICAgICAgICAgICAgICAgICByb290cy5wdXNoKG5vZGVLZXkpO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBub2RlLnJvb3QgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJvb3RzLnB1c2gobm9kZUtleSk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG5vZGUgPz89IG5ldyBUcmVlTm9kZSh7XG4gICAgICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogW10sXG4gICAgICAgICAgICAgICAgcGFyZW50OiBwYXJlbnRLZXlcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBpZiAoaXNOZXdOb2RlKSB7XG4gICAgICAgICAgICAgICAgbm9kZU1hcC5zZXQobm9kZUtleSwgbm9kZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBwYXJlbnROb2RlID0gbm9kZU1hcC5nZXQocGFyZW50S2V5KTtcbiAgICAgICAgICAgIGlmIChwYXJlbnROb2RlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICBwYXJlbnROb2RlLmNoaWxkcmVuLnB1c2gobm9kZSk7XG4gICAgICAgICAgICAgICAgcGFyZW50Tm9kZS5sZWFmID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBhcmVudE5vZGUgPSBuZXcgVHJlZU5vZGUoe1xuICAgICAgICAgICAgICAgIGxlYWY6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbbm9kZV0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIG5vZGVNYXAuc2V0KHBhcmVudEtleSwgcGFyZW50Tm9kZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZnVuY1NldFByZWZpeCA9IGZ1bmN0aW9uIChub2RlOiBUcmVlTm9kZSwgcGFyZW50Tm9kZTogVHJlZU5vZGUsIHByZWZpeDogc3RyaW5nKSB7XG4gICAgICAgICAgICAvLyBjb3VudCsrO1xuICAgICAgICAgICAgbm9kZS5kYXRhLl9wcmVmaXggPSBwcmVmaXg7XG4gICAgICAgICAgICBub2RlLmRhdGEuX2xldmVsID0gcGFyZW50Tm9kZS5kYXRhLl9sZXZlbCArIDE7XG4gICAgICAgICAgICByZXN1bHQucHVzaChub2RlLmRhdGEpO1xuICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW4gPT0gbnVsbCB8fCBub2RlLmNoaWxkcmVuLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBub2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgICAgZnVuY1NldFByZWZpeChjaGlsZCwgbm9kZSwgcHJlZml4ICsgJy0tLScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBmb3IgKGNvbnN0IHJvb3Qgb2Ygcm9vdHMpIHtcbiAgICAgICAgICAgIC8vIGNvdW50Kys7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gbm9kZU1hcC5nZXQocm9vdCk7XG4gICAgICAgICAgICBpZiAobm9kZSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBub2RlLmRhdGEuX3ByZWZpeCA9ICcnO1xuICAgICAgICAgICAgbm9kZS5kYXRhLl9sZXZlbCA9IDE7XG4gICAgICAgICAgICByZXN1bHQucHVzaChub2RlLmRhdGEpO1xuICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGRyZW4gPT0gbnVsbCB8fCBub2RlLmNoaWxkcmVuLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBmdW5jU2V0UHJlZml4KGNoaWxkLCBub2RlLCAnfC0tJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjb25zb2xlLmxvZyhgbG9vcCBjb3VudCBuZXcgJHtjb3VudH1gKTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGdldFRyZWVEYXRhRHJvcGRvd24oZmllbGRQYXJlbnQ6IHN0cmluZywgdmFsdWVQYXJlbnRSb290OiBudW1iZXIgPSAtMSwgb3B0aW9ucz86IERyb3Bkb3duT3B0aW9ucyk6IFByb21pc2U8YW55W10+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHJlZURhdGFEcm9wZG93bkJ5RmlsdGVyKFtdLCBmaWVsZFBhcmVudCwgdmFsdWVQYXJlbnRSb290LCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBnZXRUcmVlRGF0YURyb3Bkb3duQnlGaWx0ZXIoZmlsdGVyczogRmlsdGVyW10sIGZpZWxkUGFyZW50OiBzdHJpbmcsIHZhbHVlUGFyZW50Um9vdDogbnVtYmVyID0gLTEsIG9wdGlvbnM/OiBEcm9wZG93bk9wdGlvbnMpOiBQcm9taXNlPGFueVtdPiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmdldFRyZWVEYXRhRHJvcGRvd25CeUZpbHRlclJhdyhmaWx0ZXJzLCBmaWVsZFBhcmVudCwgdmFsdWVQYXJlbnRSb290LCBvcHRpb25zKVxuICAgICAgICAgICAgICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzLmRhdGEpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGVyciA9PiByZWplY3QoZXJyKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldFRyZWVEYXRhRHJvcGRvd25CeUZpbHRlclJhdyhmaWx0ZXJzOiBGaWx0ZXJbXSwgZmllbGRQYXJlbnQ6IHN0cmluZywgdmFsdWVQYXJlbnRSb290OiBudW1iZXIgPSAtMSwgb3B0aW9ucz86IERyb3Bkb3duT3B0aW9ucyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgaWYgKG9wdGlvbnMgPT0gbnVsbCkgb3B0aW9ucyA9IG5ldyBEcm9wZG93bk9wdGlvbnMoKTtcbiAgICAgICAgdGhpcy5zZXREZWZhdWx0T3B0aW9uc1RyZWUob3B0aW9ucywgZmllbGRQYXJlbnQpO1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMuaXNUcmVlQmFzZU1vZGVsKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZ3JpZEluZm8gPSB0aGlzLmdlbmVyYXRlR3JpZEluZm9Ecm9wZG93bihmaWx0ZXJzLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICB0aGlzLmJhc2VHZXRUcmVlRGF0YShncmlkSW5mbylcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyZWVEYXRhID0gdGhpcy5nZXRUcmVlTW9kZWxCYXNlKHJlcy5kYXRhLCBmaWVsZFBhcmVudCwgb3B0aW9ucy5maWVsZFBhcmVudFRyZWVJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5kYXRhID0gdHJlZURhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcyk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaChlcnIgPT4gcmVqZWN0KGVycikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZ2V0RGF0YURyb3Bkb3duQnlGaWx0ZXIoZmlsdGVycywgb3B0aW9ucylcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRyZWVEYXRhID0gdGhpcy5nZXRUcmVlRGF0YShyZXMuZGF0YSwgZmllbGRQYXJlbnQsIG9wdGlvbnMuZmllbGRQYXJlbnRUcmVlSXRlbSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXMuZGF0YSA9IHRyZWVEYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXMpO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZXJyID0+IHJlamVjdChlcnIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGaWVsZHNGcm9tRHJvcGRvd25PcHRpb25zKG9wdGlvbnM6IERyb3Bkb3duT3B0aW9ucykge1xuICAgICAgICBjb25zdCBmaWVsZHMgPSBbXTtcbiAgICAgICAgaWYgKG9wdGlvbnMudmFsdWVGaWVsZCAmJiBvcHRpb25zLnZhbHVlRmllbGQgIT09ICcnKSB7XG4gICAgICAgICAgICBmaWVsZHMucHVzaChvcHRpb25zLnZhbHVlRmllbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuZGlzcGxheUZpZWxkICYmIG9wdGlvbnMuZGlzcGxheUZpZWxkICE9PSAnJykge1xuICAgICAgICAgICAgZmllbGRzLnB1c2gob3B0aW9ucy5kaXNwbGF5RmllbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuZmllbGRQYXJlbnRUcmVlSXRlbSAmJiBvcHRpb25zLmZpZWxkUGFyZW50VHJlZUl0ZW0gIT09ICcnKSB7XG4gICAgICAgICAgICBmaWVsZHMucHVzaChvcHRpb25zLmZpZWxkUGFyZW50VHJlZUl0ZW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuZmllbGRUcmVlICYmIG9wdGlvbnMuZmllbGRUcmVlICE9PSAnJykge1xuICAgICAgICAgICAgZmllbGRzLnB1c2gob3B0aW9ucy5maWVsZFRyZWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuZmllbGRQbHVzICYmIG9wdGlvbnMuZmllbGRQbHVzICE9PSAnJykge1xuICAgICAgICAgICAgZmllbGRzLnB1c2goLi4ub3B0aW9ucy5maWVsZFBsdXMuc3BsaXQoJywnKS5maWx0ZXIoeCA9PiB4ICE9PSAnJykpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20obmV3IFNldChmaWVsZHMpKS5qb2luKCcsJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZ2V0IGRldGFpbCB24bubaSBhcGkgZG8gRGV2IHThu7Egdmnhur90LCBt4bq3YyDEkeG7i25oIHVybCAnQ3VzdG9tL3tpZH0nXG4gICAgICogQHBhcmFtIGlkIC0gaWQgYuG6o24gZ2hpXG4gICAgICogQHBhcmFtIHBsdXNVcmwgLSBhcGkgc+G6vSB0aMOgbmggPT4gJ1BsdXNVcmwve2lkfSdcbiAgICAgKiBAcGFyYW0gcXVlcnlQYXJhbSAtIHF1ZXJ5UGFyYW0gdGjDqm0gdsOgbyBzYXUgdXJsLCBu4bq/dSBj4bqnblxuICAgICAqL1xuICAgIGdldERldGFpbEN1c3RvbShpZDogc3RyaW5nLCBwbHVzVXJsOiBzdHJpbmcgPSAnQ3VzdG9tJywgcXVlcnlQYXJhbTogc3RyaW5nID0gJycpIHtcbiAgICAgICAgbGV0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vJHtwbHVzVXJsfS8ke2lkfWA7XG4gICAgICAgIHVybCArPSBxdWVyeVBhcmFtICE9ICcnID8gYCYke3F1ZXJ5UGFyYW19YCA6ICcnO1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KHVybCk7XG4gICAgfVxuXG4gICAgZ2V0RGV0YWlsKGlkOiBhbnkpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vJHtpZH1gO1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KHVybCk7XG4gICAgfVxuXG4gICAgZ2V0RGV0YWlsV2l0aEZpZWxkcyhpZDogc3RyaW5nLCBmaWVsZHMgPSAnJywgc29ydHM6IFNvcnRbXSA9IFtdLCBpbmNsdWRlczogSW5jbHVkZVtdID0gW10pOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IGZpbHRlcnMgPSBbXG4gICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcignaWQnLCBPcGVyYXRvci5lcXVhbCwgaWQpXG4gICAgICAgIF07XG4gICAgICAgIHJldHVybiB0aGlzLmdldERldGFpbEJ5RmlsdGVyKGZpbHRlcnMsIHNvcnRzLCBmaWVsZHMsIGluY2x1ZGVzKTtcbiAgICB9XG5cbiAgICBnZXREZXRhaWxXaXRoUGVybWlzc2lvbihpZDogYW55LCBwaWQ6IHN0cmluZyA9IG51bGwsIHBsdXNVcmw6IHN0cmluZyA9ICcnKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBpZiAocGlkID09IG51bGwpIHtcbiAgICAgICAgICAgIHBpZCA9IHRoaXMuX2NvbW1vblNlcnZpY2UuZ3VpZEVtcHR5KCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vRGV0YWlsV2l0aFBlcm1pc3Npb24vJHtpZH0/cGlkPSR7cGlkfWA7XG4gICAgICAgIGlmIChwbHVzVXJsKSB7XG4gICAgICAgICAgICB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0RldGFpbFdpdGhQZXJtaXNzaW9uLyR7cGx1c1VybH0vJHtpZH0/cGlkPSR7cGlkfWA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldCh1cmwpO1xuICAgIH1cblxuICAgIGdldERldGFpbEJ5UGlkKHBpZDogYW55KTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0RldGFpbFdpdGhCeVBpZC8ke3BpZH1gO1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KHVybCk7XG4gICAgfVxuXG4gICAgZ2V0QnlJbnN0YW5jZUlkKGluc3RhbmNlSWQ6IGFueSk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRCeUluc3RhY2VJZC8ke2luc3RhbmNlSWR9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldCh1cmwpO1xuICAgIH1cblxuICAgIGdldERldGFpbEJ5Q29kZShjb2RlOiBzdHJpbmcpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0QnlDb2RlLyR7Y29kZX1gO1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KHVybCk7XG4gICAgfVxuXG4gICAgZ2V0RGV0YWlsQnlGaWx0ZXIoZmlsdGVyczogRmlsdGVyW10gPSBbXSwgc29ydHM6IFNvcnRbXSA9IFtdLCBmaWVsZHMgPSAnJywgaW5jbHVkZXM6IEluY2x1ZGVbXSA9IFtdKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9LyR7dGhpcy5hcGlHZXREZXRhaWxCeUZpbHRlcn1gO1xuICAgICAgICBjb25zdCBncmlkSW5mbyA9IHtcbiAgICAgICAgICAgIHBhZ2VJbmZvOiB7XG4gICAgICAgICAgICAgICAgcGFnZTogMSxcbiAgICAgICAgICAgICAgICBwYWdlU2l6ZTogMVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZpbHRlcnMsXG4gICAgICAgICAgICBzb3J0cyxcbiAgICAgICAgICAgIGluY2x1ZGVzLFxuICAgICAgICAgICAgZmllbGRzLFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdCh1cmwsIGdyaWRJbmZvKTtcbiAgICB9XG5cbiAgICBjb3VudEJ5RmlsdGVyKGZpbHRlcnM6IEZpbHRlcltdID0gW10pIHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9Db3VudEJ5RmlsdGVyYDtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QodXJsLCBmaWx0ZXJzKTtcbiAgICB9XG5cbiAgICBnZXRMYXN0RGV0YWlsQnlGaWx0ZXIoZmlsdGVyczogRmlsdGVyW10gPSBbXSwgc29ydHM6IFNvcnRbXSA9IFtdKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldExhc3RCeUZpbHRlcmA7XG4gICAgICAgIGNvbnN0IGdyaWRJbmZvID0ge1xuICAgICAgICAgICAgcGFnZUluZm86IHtcbiAgICAgICAgICAgICAgICBwYWdlOiAxLFxuICAgICAgICAgICAgICAgIHBhZ2VTaXplOiAxXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmlsdGVycyxcbiAgICAgICAgICAgIHNvcnRzXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KHVybCwgZ3JpZEluZm8pO1xuICAgIH1cblxuICAgIGFzeW5jIGdldFdvcmtmbG93U2V0dGluZ0J5Q29kZSh3b3JrZmxvd0NvZGU6IHN0cmluZykge1xuICAgICAgICBjb25zdCB3b3JrZmxvd1NldHRpbmcgPSAoYXdhaXQgdGhpcy5nZXREZXRhaWxCeUZpbHRlcihcbiAgICAgICAgICAgIFtcbiAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcignY29kZScsIE9wZXJhdG9yLmVxdWFsLCB3b3JrZmxvd0NvZGUpXG4gICAgICAgICAgICBdXG4gICAgICAgICkpLmRhdGE7XG4gICAgICAgIGlmICh3b3JrZmxvd1NldHRpbmcgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgICAgIGNvbnN0IGpzb25TY2hlbWEgPSA8YW55PndvcmtmbG93U2V0dGluZ1snZGF0YSddO1xuICAgICAgICB3b3JrZmxvd1NldHRpbmcuZGF0YSA9IEpTT04ucGFyc2UoanNvblNjaGVtYSk7XG4gICAgICAgIGNvbnN0IHN0YXRlTWFjaGluZURhdGEgPSB3b3JrZmxvd1NldHRpbmcuZGF0YTtcbiAgICAgICAgc3RhdGVNYWNoaW5lRGF0YS5hY3Rpb25zID0ge307XG4gICAgICAgIHN0YXRlTWFjaGluZURhdGEubWFjaGluZXMuZm9yRWFjaChtYWNoaW5lID0+IHtcbiAgICAgICAgICAgIHN0YXRlTWFjaGluZURhdGEuYWN0aW9uc1ttYWNoaW5lLmNvZGVdID0gW107XG4gICAgICAgICAgICBzdGF0ZU1hY2hpbmVEYXRhLmNvbm5lY3Rpb25zLmZvckVhY2goY29ubiA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbm4uc291cmNlID09IG1hY2hpbmUuaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGVNYWNoaW5lRGF0YS5hY3Rpb25zW21hY2hpbmUuY29kZV0ucHVzaChjb25uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB3b3JrZmxvd1NldHRpbmc7XG4gICAgfVxuXG4gICAgZ2V0QWxsQXN5bmMoKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldEFzeW5jYDtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdEdldCh1cmwpO1xuICAgIH1cblxuICAgIHBvc3QoaXRlbTogYW55LCBwbHVzVXJsOiBzdHJpbmcgPSAnJyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgdXJpID0gcGx1c1VybCA/IGAke3RoaXMuc2VydmljZVVyaX0vJHtwbHVzVXJsfWAgOiB0aGlzLnNlcnZpY2VVcmk7XG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwXG4gICAgICAgICAgICAucG9zdDxSZXNwb25zZVJlc3VsdD4odXJpLCBpdGVtKVxuICAgICAgICAgICAgLnBpcGUoY2F0Y2hFcnJvcihlcnIgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSkpLnRvUHJvbWlzZSgpO1xuICAgIH1cblxuICAgIHB1dChpZDogc3RyaW5nLCBpdGVtOiBhbnksIHBsdXNVcmw6IHN0cmluZyA9ICcnKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCB1cmwgPSBwbHVzVXJsID8gYCR7dGhpcy5zZXJ2aWNlVXJpfS8ke3BsdXNVcmx9LyR7aWR9YCA6IGAke3RoaXMuc2VydmljZVVyaX0vJHtpZH1gO1xuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5wdXQ8UmVzcG9uc2VSZXN1bHQ+KHVybCwgaXRlbSkudG9Qcm9taXNlKCk7XG4gICAgfVxuXG4gICAgZGVsZXRlKGlkOiBudW1iZXIsIHBsdXNVcmw6IHN0cmluZyA9ICcnKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCB1cmwgPSBwbHVzVXJsID8gYCR7dGhpcy5zZXJ2aWNlVXJpfS8ke3BsdXNVcmx9LyR7aWR9YCA6IGAke3RoaXMuc2VydmljZVVyaX0vJHtpZH1gO1xuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5kZWxldGU8UmVzcG9uc2VSZXN1bHQ+KHVybCkudG9Qcm9taXNlKCk7XG4gICAgfVxuXG4gICAgZGVsZXRlQnlJZChpZDogc3RyaW5nKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9LyR7aWR9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZGVsZXRlPFJlc3BvbnNlUmVzdWx0Pih1cmwpLnBpcGUoXG4gICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKVxuICAgICAgICApLnRvUHJvbWlzZSgpO1xuICAgIH1cblxuICAgIGRlbGV0ZU1hbnkobHN0SWQ6IHN0cmluZywgcGx1c1VybDogc3RyaW5nID0gJycpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IHVybCA9IHBsdXNVcmwgPyBgJHt0aGlzLnNlcnZpY2VVcml9L0RlbGV0ZU1hbnlBc3luYy8ke3BsdXNVcmx9LyR7bHN0SWR9YCA6IGAke3RoaXMuc2VydmljZVVyaX0vRGVsZXRlTWFueUFzeW5jLyR7bHN0SWR9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZGVsZXRlPFJlc3BvbnNlUmVzdWx0Pih1cmwpLnRvUHJvbWlzZSgpO1xuICAgIH1cblxuICAgIGRlZmF1bHRHZXQoYXBpVXJsLCBvcHRpb25zPzogSHR0cE9wdGlvbnMpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLmdldDxSZXNwb25zZVJlc3VsdD4oYXBpVXJsLCBvcHRpb25zKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgc2hhcmVSZXBsYXkodGhpcy5SRVBMQVlfQ09VTlQpLFxuICAgICAgICAgICAgICAgIHJldHJ5KHRoaXMuUkVUUllfQ09VTlQpLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpXG4gICAgICAgICAgICApLnRvUHJvbWlzZSgpO1xuICAgIH1cblxuICAgIGdldElnbm9yZUNsaWVudENhY2hlKGFwaVVybCk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIdHRwSGVhZGVycyh7ICdDYWNoZS1Db250cm9sJzogJ25vLWNhY2hlJyB9KSxcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5nZXQ8UmVzcG9uc2VSZXN1bHQ+KGFwaVVybCwgb3B0aW9ucylcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHNoYXJlUmVwbGF5KHRoaXMuUkVQTEFZX0NPVU5UKSxcbiAgICAgICAgICAgICAgICByZXRyeSh0aGlzLlJFVFJZX0NPVU5UKSxcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKVxuICAgICAgICAgICAgKS50b1Byb21pc2UoKTtcbiAgICB9XG5cbiAgICBkZWZhdWx0UG9zdChhcGlVcmwsIGRhdGEsIG9wdGlvbnM/OiBIdHRwT3B0aW9ucyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAucG9zdDxSZXNwb25zZVJlc3VsdD4oYXBpVXJsLCBkYXRhLCBvcHRpb25zKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgc2hhcmVSZXBsYXkodGhpcy5SRVBMQVlfQ09VTlQpLFxuICAgICAgICAgICAgICAgIHJldHJ5KHRoaXMuUkVUUllfQ09VTlQpLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpXG4gICAgICAgICAgICApLnRvUHJvbWlzZSgpO1xuICAgIH1cblxuICAgIGRlZmF1bHRQdXQoYXBpVXJsLCBkYXRhKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5wdXQ8UmVzcG9uc2VSZXN1bHQ+KGFwaVVybCwgZGF0YSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHNoYXJlUmVwbGF5KHRoaXMuUkVQTEFZX0NPVU5UKSxcbiAgICAgICAgICAgICAgICByZXRyeSh0aGlzLlJFVFJZX0NPVU5UKSxcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKVxuICAgICAgICAgICAgKS50b1Byb21pc2UoKTtcbiAgICB9XG5cbiAgICBkZWZhdWx0RGVsZXRlKGFwaVVybCk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZGVsZXRlPFJlc3BvbnNlUmVzdWx0PihhcGlVcmwpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBzaGFyZVJlcGxheSh0aGlzLlJFUExBWV9DT1VOVCksXG4gICAgICAgICAgICAgICAgcmV0cnkodGhpcy5SRVRSWV9DT1VOVCksXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSlcbiAgICAgICAgICAgICkudG9Qcm9taXNlKCk7XG4gICAgfVxuXG4gICAgZ2V0RmlsZUJ5R2V0UmVxdWVzdCh1cmwsIGZpbGVOYW1lKSB7XG4gICAgICAgIHRoaXMuc2F2ZUZpbGVGcm9tT2JzZXJ2YWJsZShcbiAgICAgICAgICAgIHRoaXMuX2h0dHAuZ2V0KHVybCwgeyByZXNwb25zZVR5cGU6ICdibG9iJyBhcyAnanNvbicgfSksXG4gICAgICAgICAgICBmaWxlTmFtZVxuICAgICAgICApO1xuICAgIH1cblxuICAgIGdldEZpbGVCeVBvc3RSZXF1ZXN0KHVybCwgZGF0YTogYW55LCBmaWxlTmFtZSkge1xuICAgICAgICB0aGlzLnNhdmVGaWxlRnJvbU9ic2VydmFibGUoXG4gICAgICAgICAgICB0aGlzLl9odHRwLnBvc3QodXJsLCBkYXRhLCB7IHJlc3BvbnNlVHlwZTogJ2Jsb2InIGFzICdqc29uJyB9KSxcbiAgICAgICAgICAgIGZpbGVOYW1lXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzYXZlRmlsZUZyb21PYnNlcnZhYmxlKG9iOiBPYnNlcnZhYmxlPGFueT4sIGZpbGVOYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgb2IudG9Qcm9taXNlKCkudGhlbihyZXMgPT4ge1xuICAgICAgICAgICAgRmlsZVNhdmVyLnNhdmVBcyhyZXMsIGZpbGVOYW1lKTtcbiAgICAgICAgfSkuY2F0Y2goYXN5bmMgZXJyID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVycm9yVGV4dCA9IGF3YWl0IGVyci5lcnJvci50ZXh0KCk7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yVGV4dCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldEVudGl0eU1ldGFkYXRhKCk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgYXBpVXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRFbnRpdHlNZXRhZGF0YWA7XG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLmdldDxSZXNwb25zZVJlc3VsdD4oYXBpVXJsKVxuICAgICAgICAgICAgLnBpcGUoY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSkpXG4gICAgICAgICAgICAudG9Qcm9taXNlKCk7XG4gICAgfVxuXG4gICAgc2F2ZUVudGl0eU1ldGFkYXRhKGRhdGEpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IGFwaVVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vU2F2ZUVudGl0eU1ldGFkYXRhYDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAucG9zdDxSZXNwb25zZVJlc3VsdD4oYXBpVXJsLCBkYXRhKVxuICAgICAgICAgICAgLnBpcGUoY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSkpXG4gICAgICAgICAgICAudG9Qcm9taXNlKCk7XG4gICAgfVxuXG4gICAgY2hhbmdlTWV0YWRhdGFTdGF0dXMoaWQ6IG51bWJlciwgbWV0YWRhdGFUeXBlOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgYXBpVXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9jaGFuZ2VNZXRhZGF0YVN0YXR1cz9pZD0ke2lkfSZtZXRhZGF0YVN0YXR1c1R5cGU9JHttZXRhZGF0YVR5cGV9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAucG9zdDxSZXNwb25zZVJlc3VsdD4oYXBpVXJsLCB7fSkucGlwZShjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKSlcbiAgICAgICAgICAgIC50b1Byb21pc2UoKTtcbiAgICB9XG5cbiAgICBzYXZlQW5kQ2hhbmdlTWV0YWRhdGFTdGF0dXMoaWQ6IG51bWJlciwgbWV0YWRhdGFUeXBlOiBzdHJpbmcsIGRhdGE6IGFueSkge1xuICAgICAgICBjb25zdCBhcGlVcmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L3NhdmVBbmRDaGFuZ2VNZXRhZGF0YVN0YXR1cz9pZD0ke2lkfSZtZXRhZGF0YVN0YXR1c1R5cGU9JHttZXRhZGF0YVR5cGV9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAucG9zdDxSZXNwb25zZVJlc3VsdD4oYXBpVXJsLCBkYXRhKS5waXBlKGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpKVxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpO1xuICAgIH1cblxuICAgIGdldEVudGl0eVBlcm1pc3Npb24oKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCBhcGlVcmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldEVudGl0eVBlcm1pc3Npb25gO1xuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5nZXQ8UmVzcG9uc2VSZXN1bHQ+KGFwaVVybClcbiAgICAgICAgICAgIC5waXBlKGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpKVxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpO1xuICAgIH1cblxuICAgIHNhdmVFbnRpdHlQZXJtaXNzaW9uKGRhdGEpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IGFwaVVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vU2F2ZUVudGl0eVBlcm1pc3Npb25gO1xuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5wb3N0PFJlc3BvbnNlUmVzdWx0PihhcGlVcmwsIGRhdGEpXG4gICAgICAgICAgICAucGlwZShjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKSlcbiAgICAgICAgICAgIC50b1Byb21pc2UoKTtcbiAgICB9XG5cbiAgICB1cGRhdGVFbnRpdHlQZXJtaXNzaW9uKGlkOiBzdHJpbmcsIGl0ZW06IGFueSk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9VcGRhdEVudGl0eVBlcm1pc3Npb24vJHtpZH1gO1xuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5wdXQ8UmVzcG9uc2VSZXN1bHQ+KHVybCwgaXRlbSkudG9Qcm9taXNlKCk7XG4gICAgfVxuXG4gICAgZGVsZXRlRW50aXR5UGVybWlzc2lvbihpZDogbnVtYmVyKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0RlbGV0ZUVudGl0eVBlcm1pc3Npb24vJHtpZH1gO1xuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5kZWxldGU8UmVzcG9uc2VSZXN1bHQ+KHVybCkudG9Qcm9taXNlKCk7XG4gICAgfVxuXG4gICAgZ2V0V2ZIaXN0b3J5QnlFbnRpdHlJdGVtKGlkOiBudW1iZXIpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0V2ZIaXN0b3J5QnlFbnRpdHlJdGVtLyR7aWR9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZ2V0PFJlc3BvbnNlUmVzdWx0Pih1cmwpLnRvUHJvbWlzZSgpO1xuICAgIH1cblxuICAgIGdldERpY1N0YXR1c05ob21UcmFuZ1RoYWkoc3RhdHVzZXM6IHN0cmluZ1tdKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldERpY1N0YXR1c05ob21UcmFuZ1RoYWlgO1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdCh1cmwsIHtcbiAgICAgICAgICAgIGxpc3RTdHJpbmdWYWx1ZTogc3RhdHVzZXNcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdmFsaWRhdGVQcm9jZXNzV29ya2Zsb3coaWQ6IG51bWJlciwgYWN0aW9uQ29kZTogc3RyaW5nLCBkYXRhOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9WYWxpZGF0ZVByb2Nlc3NXRi8ke2lkfS8ke2FjdGlvbkNvZGV9YCwgZGF0YSk7XG4gICAgfVxuXG4gICAgcHJvY2Vzc1dvcmtmbG93KGlkOiBudW1iZXIsIGFjdGlvbkNvZGU6IHN0cmluZywgZGF0YTogYW55KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vUHJvY2Vzc1dvcmtmbG93LyR7aWR9LyR7YWN0aW9uQ29kZX1gLCBkYXRhKTtcbiAgICB9XG5cbiAgICBnZXRVc2VySW5Qcm9jZXNzRm9ybSh3b3JrZmxvd0NvZGU6IHN0cmluZywgc3RhdGVDb2RlOiBzdHJpbmcsIGFjdGlvbkNvZGU6IHN0cmluZywgaXRlbUlkOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRVc2VySW5Qcm9jZXNzRm9ybUJhc2UvJHt3b3JrZmxvd0NvZGV9LyR7c3RhdGVDb2RlfS8ke2FjdGlvbkNvZGV9LyR7aXRlbUlkfWAsIHt9KTtcbiAgICB9XG5cbiAgICBoYW5kbGVFcnJvcihlcnJvcjogYW55LCBpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICAgICAgY29uc3QgY29tbW9uU2VydmljZSA9IGluamVjdG9yLmdldChDb21tb25TZXJ2aWNlKTtcbiAgICAgICAgcmV0dXJuIGNvbW1vblNlcnZpY2UuaGFuZGxlRXJyb3IoZXJyb3IsIGluamVjdG9yKTtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgc2F2ZUFzRXhjZWxGaWxlKGJ1ZmZlcjogYW55LCBmaWxlTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRhdGE6IEJsb2IgPSBuZXcgQmxvYihbYnVmZmVyXSwge1xuICAgICAgICAgICAgdHlwZTogRVhDRUxfVFlQRVxuICAgICAgICB9KTtcbiAgICAgICAgRmlsZVNhdmVyLnNhdmVBcyhkYXRhLCBmaWxlTmFtZSArICdfJyArIG5ldyBEYXRlKCkuZ2V0VGltZSgpICsgRVhDRUxfRVhURU5TSU9OKTtcbiAgICB9XG5cbiAgICBwdXRXaXRoUGx1c1VybChpZDogc3RyaW5nLCBpdGVtOiBhbnksIHBsdXNVcmw6IHN0cmluZyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS8ke2lkfS8ke3BsdXNVcmx9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAucHV0PFJlc3BvbnNlUmVzdWx0Pih1cmwsIGl0ZW0pLnRvUHJvbWlzZSgpO1xuICAgIH1cblxuICAgIGFzeW5jIGdldEJ5RmllbGQoZmllbGQ6IHN0cmluZywgYXJyVmFsdWUsIGdldEZpZWxkcyA9ICcnLCBzb3J0RmllbGQgPSBudWxsLCBzb3J0RGlyID0gbnVsbCk6IFByb21pc2U8YW55W10+IHtcbiAgICAgICAgYXJyVmFsdWUgPSAoYXJyVmFsdWUgfHwgW10pLmZpbHRlcigodmFsLCBpbmQsIGFycikgPT4gKHZhbCA9PT0gMCB8fCB2YWwpICYmIGFyci5pbmRleE9mKHZhbCkgPT09IGluZCk7XG5cbiAgICAgICAgaWYgKCFhcnJWYWx1ZSB8fCAhYXJyVmFsdWUubGVuZ3RoKSByZXR1cm4gW107XG5cbiAgICAgICAgY29uc3QgYXJyRmlsdGVyID0gW25ldyBGaWx0ZXIoe1xuICAgICAgICAgICAgZmllbGQsXG4gICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3IuaW4sXG4gICAgICAgICAgICB2YWx1ZTogYXJyVmFsdWUudG9TdHJpbmcoKVxuICAgICAgICB9KV07XG5cbiAgICAgICAgY29uc3QgYXJyU29ydCA9IFtdO1xuICAgICAgICBpZiAoc29ydEZpZWxkKSB7XG4gICAgICAgICAgICBhcnJTb3J0LnB1c2gobmV3IFNvcnQoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiBzb3J0RmllbGQsXG4gICAgICAgICAgICAgICAgZGlyOiBzb3J0RGlyIHwgMVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXJyUmVzdWx0ID0gKGF3YWl0IHRoaXMuZ2V0QWxsKGFyckZpbHRlciwgZ2V0RmllbGRzLCBhcnJTb3J0KSkuZGF0YTtcbiAgICAgICAgcmV0dXJuIChhcnJSZXN1bHQgfHwgW10pO1xuICAgIH1cblxuICAgIGFzeW5jIGdldEJ5RmllbGRUb0RpYyhmaWVsZDogc3RyaW5nLCBhcnJWYWx1ZSwgZ2V0RmllbGRzLCBrZXlGaWVsZCA9IG51bGwsIHZhbHVlRmllbGQgPSBudWxsKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgY29uc3QgYXJyUmVzdWx0ID0gYXdhaXQgdGhpcy5nZXRCeUZpZWxkKGZpZWxkLCBhcnJWYWx1ZSwgZ2V0RmllbGRzKTtcbiAgICAgICAgY29uc3QgcnNEaWMgPSB7fTtcbiAgICAgICAgaWYgKCFhcnJSZXN1bHQubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gcnNEaWM7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoa2V5RmllbGQpIHtcbiAgICAgICAgICAgIGtleUZpZWxkID0gZmllbGQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWVGaWVsZCkge1xuICAgICAgICAgICAgYXJyUmVzdWx0LmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgcnNEaWNbaXRlbVtrZXlGaWVsZF1dID0gaXRlbVt2YWx1ZUZpZWxkXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYXJyUmVzdWx0LmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgcnNEaWNbaXRlbVtrZXlGaWVsZF1dID0gaXRlbTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJzRGljO1xuICAgIH1cblxuICAgIG5ld0ZpbHRlcihmaWVsZDogc3RyaW5nLCBvcGVyYXRvcjogT3BlcmF0b3IsIHZhbHVlOiBhbnksIHZhbHVlSXNGaWVsZDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBuZXcgRmlsdGVyKHtcbiAgICAgICAgICAgIGZpZWxkLCBvcGVyYXRvcixcbiAgICAgICAgICAgIHZhbHVlOiBKU09OLnN0cmluZ2lmeSh2YWx1ZSksXG4gICAgICAgICAgICB2YWx1ZUlzRmllbGRcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmV3RmlsdGVyVjQoZmllbGQ6IHN0cmluZywgb3BlcmF0b3I6IE9wZXJhdG9yLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBuZXcgRmlsdGVyKHtcbiAgICAgICAgICAgIGZpZWxkLCBvcGVyYXRvcixcbiAgICAgICAgICAgIHZhbHVlXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5ld0JpbmRpbmdGaWx0ZXIoY29sdW1uOiBzdHJpbmcsIG9wZXJhdG9yOiBPcGVyYXRvciwgc291cmNlRmllbGQ6IHN0cmluZywgc3ViRmllbGQ/OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGaWx0ZXIoe1xuICAgICAgICAgICAgZmllbGQ6IGNvbHVtbixcbiAgICAgICAgICAgIG9wZXJhdG9yLFxuICAgICAgICAgICAgc291cmNlRmllbGQsXG4gICAgICAgICAgICBzdWJGaWVsZFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBnZXREYXRhVHJpbmhLeShpdGVtOiBhbnksIHJvd0RhdGE/OiBhbnkpOiBQcm9taXNlPGFueVtdPiB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBleHBvcnRUb1BkZihpZDogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9FeHBvcnRUb1BkZi8ke2lkfWAsIHtcbiAgICAgICAgICAgIHN0cmluZ1ZhbHVlOiBjb250ZW50XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0YXJ0V29ya2Zsb3coaWQ6IHN0cmluZywgd29ya2Zsb3dDb2RlOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9TdGFydFdvcmtmbG93QmFzZS8ke3dvcmtmbG93Q29kZX0vJHtpZH1gLCB7fSk7XG4gICAgfVxuXG4gICAgZ2V0QWN0aW9uQWxsb3coaWQ6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L0dldEFjdGlvbkFsbG93LyR7aWR9YCwge30pO1xuICAgIH1cblxuICAgIGdldEFjdGlvbkFsbG93SW5TdGFydCh3b3JrZmxvd0NvZGU6IHN0cmluZywgc2VydmljZUNvZGU6IHN0cmluZyA9ICcnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vR2V0QWN0aW9uQWxsb3dJblN0YXJ0LyR7d29ya2Zsb3dDb2RlfT9zZXJ2aWNlQ29kZT0ke3NlcnZpY2VDb2RlfWAsIHt9KTtcbiAgICB9XG5cbiAgICB2YWxpZGF0ZUNoYW5nZVN0YXRlKGl0ZW1Xb3JrZmxvd0hpc3Rvcnk6IGFueSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L1ZhbGlkYXRlQ2hhbmdlU3RhdGVCYXNlYCwgaXRlbVdvcmtmbG93SGlzdG9yeSk7XG4gICAgfVxuXG4gICAgaW5zZXJ0QnVsa0FzeW5jKG1vZGVsczogYW55KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vSW5zZXJ0QnVsa0FzeW5jYCwgbW9kZWxzKTtcbiAgICB9XG5cbiAgICB1cGRhdGVCdWxrQXN5bmMobW9kZWxzOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9VcGRhdGVCdWxrQXN5bmNgLCBtb2RlbHMpO1xuICAgIH1cblxuICAgIGF1dG9OZXh0U3RlcChpdGVtSWQ6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L0F1dG9OZXh0U3RlcC8ke2l0ZW1JZH1gLCB7fSk7XG4gICAgfVxuXG4gICAgY2hhbmdlU3RhdGVCYXNlQnlBY3Rpb24oaXRlbUlkOiBzdHJpbmcsIGFjdGlvbkNvZGU6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L0NoYW5nZVN0YXRlQmFzZUJ5QWN0aW9uLyR7aXRlbUlkfS8ke2FjdGlvbkNvZGV9YCwge30pO1xuICAgIH1cblxuICAgIGNoYW5nZVN0YXRlKGl0ZW1Xb3JrZmxvd0hpc3Rvcnk6IGFueSkge1xuICAgICAgICBpZiAoaXRlbVdvcmtmbG93SGlzdG9yeSkge1xuICAgICAgICAgICAgaWYgKGl0ZW1Xb3JrZmxvd0hpc3RvcnkuZGVwYXJ0bWVudElkcykge1xuICAgICAgICAgICAgICAgIGl0ZW1Xb3JrZmxvd0hpc3RvcnkuZG9uVmlJZHMgPSBpdGVtV29ya2Zsb3dIaXN0b3J5LmRlcGFydG1lbnRJZHM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXRlbVdvcmtmbG93SGlzdG9yeS5kZXBhcnRtZW50Vmlld0lkcykge1xuICAgICAgICAgICAgICAgIGl0ZW1Xb3JrZmxvd0hpc3RvcnkuZG9uVmlWaWV3SWRzID0gaXRlbVdvcmtmbG93SGlzdG9yeS5kZXBhcnRtZW50Vmlld0lkcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L0NoYW5nZVN0YXRlQmFzZWAsIGl0ZW1Xb3JrZmxvd0hpc3RvcnkpO1xuICAgIH1cblxuICAgIGNob1lLaWVuKGl0ZW1Xb3JrZmxvd0hpc3Rvcnk6IGFueSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L0Nob1lLaWVuQmFzZWAsIGl0ZW1Xb3JrZmxvd0hpc3RvcnkpO1xuICAgIH1cblxuICAgIGdldFBlcm1pc3Npb25TaGFyZWRCeUl0ZW1JZHMoaWRzOiBzdHJpbmdbXSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L0dldFBlcm1pc3Npb25TaGFyZWRCeUl0ZW1JZHNgLCB7XG4gICAgICAgICAgICBsaXN0R3VpZFZhbHVlOiBpZHNcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0U2hhcmVkS2V5KGRhdGE6IE1vZGVsU2hhcmVMaW5rQnlQZXJtaXNzaW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vR2V0U2hhcmVkS2V5SXRlbUJhc2VgLCBkYXRhKTtcbiAgICB9XG5cbiAgICBkZWxldGVMaW5rU2hhcmluZyhpZHM6IHN0cmluZ1tdKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vRGVsZXRlTGlua1NoYXJpbmdgLCB7XG4gICAgICAgICAgICBsaXN0R3VpZFZhbHVlOiBpZHNcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcm9sbGJhY2socm93RGF0YSwgbHN0T2JqZWN0TmFtZTogc3RyaW5nW10pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9Sb2xsYmFja0Jhc2UvJHtyb3dEYXRhLl9fd29ya2Zsb3dDb2RlfS8ke3Jvd0RhdGEuaWR9YCwge1xuICAgICAgICAgICAgTGlzdFN0cmluZ1ZhbHVlOiBsc3RPYmplY3ROYW1lXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJvbGxiYWNrQnlIaXN0b3J5KGl0ZW1JZDogc3RyaW5nLCBpZEhpc3Rvcnk6IHN0cmluZywgbHN0T2JqZWN0TmFtZTogc3RyaW5nW10pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9Sb2xsYmFja0Jhc2VCeUhpc3RvcnkvJHtpdGVtSWR9LyR7aWRIaXN0b3J5fWAsIHtcbiAgICAgICAgICAgIExpc3RTdHJpbmdWYWx1ZTogbHN0T2JqZWN0TmFtZVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSb2xsYmFjayBxdXkgdHLDrG5oIHbhu4EgdHLhuqFuZyB0aMOhaSB0csaw4bubY1xuICAgICAqIEBwYXJhbSBpZCBpZCBj4bunYSBi4bqjbiBnaGlcbiAgICAgKi9cbiAgICByb2xsYmFja1dvcmtmbG93KGlkOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9Sb2xsYmFja1dvcmtmbG93LyR7aWR9YCwge30pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZSB0cuG6oW5nIHRow6FpIHdvcmtmbG93IGNvcmUgc2FuZyDEkcOjIGR1eeG7h3QgcXV54bq/dCDEkeG7i25oXG4gICAgICovXG4gICAgdXBkYXRlRGFEdXlldFF1eWV0RGluaChpZDogc3RyaW5nLCBpZFF1eWV0RGluaDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vVXBkYXRlRGFEdXlldFF1eWV0RGluaC8ke2lkfWAsIHtcbiAgICAgICAgICAgIGd1aWRWYWx1ZTogaWRRdXlldERpbmhcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgdXBkYXRlTWFQaGFuQ2FwQmFzZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9VcGRhdGVNYVBoYW5DYXBCYXNlYCwge30pO1xuICAgIH1cblxuICAgIHNvcnRHcm91cExhc3RNb2RlbEJhc2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vVXBkYXRlVGh1VGh1R3JvdXBgLCB7fSk7XG4gICAgfVxuXG4gICAgZ2V0VHJlZURhdGFCYXNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L0dldFRyZWVEYXRhQmFzZWAsIHt9KTtcbiAgICB9XG5cbiAgICByZW9yZGVyRGF0YUJ5RmllbGQoZGF0YSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L1Jlb3JkZXJEYXRhQnlGaWVsZGAsIGRhdGEpO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEh0dHBPcHRpb25zIHtcbiAgICBoZWFkZXJzPzogSHR0cEhlYWRlcnMgfCB7XG4gICAgICAgIFtoZWFkZXI6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgIH07XG4gICAgb2JzZXJ2ZT86ICdib2R5JztcbiAgICBwYXJhbXM/OiBIdHRwUGFyYW1zIHwge1xuICAgICAgICBbcGFyYW06IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdO1xuICAgIH07XG4gICAgcmVwb3J0UHJvZ3Jlc3M/OiBib29sZWFuO1xuICAgIHJlc3BvbnNlVHlwZT86ICdqc29uJztcbiAgICB3aXRoQ3JlZGVudGlhbHM/OiBib29sZWFuO1xufVxuIl19
|
|
967
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliL3NlcnZpY2VzL2Jhc2Uuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFpQyxXQUFXLEVBQWMsTUFBTSxzQkFBc0IsQ0FBQztBQUU5RixPQUFPLEtBQUssU0FBUyxNQUFNLFlBQVksQ0FBQztBQUV4QyxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVoRSxPQUFPLEVBQUUsZUFBZSxFQUFFLFFBQVEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBRW5FLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBVyxJQUFJLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV0RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHOUQsTUFBTSxVQUFVLEdBQUcsaUZBQWlGLENBQUM7QUFDckcsTUFBTSxlQUFlLEdBQUcsT0FBTyxDQUFDO0FBRWhDLE1BQU0sT0FBZ0IsV0FBVztJQXNCN0IsWUFDSSxJQUFnQixFQUNoQixRQUFrQixFQUNsQixVQUFrQjs7UUFwQnRCLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFDaEIsYUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNkLGdCQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ2pCLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFDaEIsZUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNoQixnQkFB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Q0gsc0JBQXNCLENBQUMsRUFBVSxFQUFFLFdBQW1CO1FBQ2xELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLDJCQUEyQixFQUFFLEVBQUUsRUFBRTtZQUN2RSxTQUFTLEVBQUUsV0FBVztTQUN6QixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsbUJBQW1CO1FBQ2YsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsc0JBQXNCLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVELHNCQUFzQjtRQUNsQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUMsVUFBVSxvQkFBb0IsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQsZUFBZTtRQUNYLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLGtCQUFrQixFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3RFLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxJQUFJO1FBQ25CLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLHFCQUFxQixFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzNFLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyxXQUFXO0NBV3ZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEVycm9yUmVzcG9uc2UsIEh0dHBIZWFkZXJzLCBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCAqIGFzIEZpbGVTYXZlciBmcm9tICdmaWxlLXNhdmVyJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIHJldHJ5LCBzaGFyZVJlcGxheSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgRHJvcGRvd25PcHRpb25zLCBPcGVyYXRvciB9IGZyb20gJy4uL2NsYXNzZXMvZm9ybS1zY2hlbWEnO1xuaW1wb3J0IHsgTW9kZWxTaGFyZUxpbmtCeVBlcm1pc3Npb24gfSBmcm9tICcuLi9jb21wb25lbnRzL3NoYXJlLWxpbmstYnktcGVybWlzc2lvbi9tb2RlbHMvc2hhcmUtbGluay1ieS1wZXJtaXNzaW9uJztcbmltcG9ydCB7IFRyZWVOb2RlIH0gZnJvbSAnLi4vbW9kZWxzL2Jhc2ljLXRyZWUtbm9kZSc7XG5pbXBvcnQgeyBGaWx0ZXIsIEdyaWRJbmZvLCBJbmNsdWRlLCBTb3J0IH0gZnJvbSAnLi4vbW9kZWxzL2dyaWQtaW5mbyc7XG5pbXBvcnQgeyBSZXNwb25zZVJlc3VsdCB9IGZyb20gJy4uL21vZGVscy9yZXNwb25zZS1yZXN1bHQnO1xuaW1wb3J0IHsgZ2V0U3RyaW5nRGF0ZVZOIH0gZnJvbSAnLi4vdXRpbHMvZGF0ZSc7XG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi9jb21tb24uc2VydmljZSc7XG5pbXBvcnQgeyBTaWduYWxSU2VydmljZSB9IGZyb20gJy4vc2lnbmFsci5zZXJ2aWNlJztcbmltcG9ydCB7IE1vZHVsZUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuL21vZHVsZS1jb25maWcuc2VydmljZSc7XG5cblxuY29uc3QgRVhDRUxfVFlQRSA9ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldDtjaGFyc2V0PVVURi04JztcbmNvbnN0IEVYQ0VMX0VYVEVOU0lPTiA9ICcueGxzeCc7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlU2VydmljZSB7XG4gICAgX2h0dHA6IEh0dHBDbGllbnQ7XG4gICAgX2luamVjdG9yOiBJbmplY3RvcjtcbiAgICBfc2lnbmFsclNlcnZpY2VQcml2YXRlOiBTaWduYWxSU2VydmljZTtcblxuICAgIHNlcnZpY2VVcmkgPSAnJztcbiAgICBlbmRQb2ludCA9ICcnO1xuICAgIHNlcnZpY2VDb2RlID0gJyc7XG4gICAgZW50aXR5TmFtZSA9ICcnO1xuICAgIG9iamVjdE5hbWUgPSAnJztcbiAgICB1c2VXb3JrZmxvdyA9IGZhbHNlO1xuICAgIGFwaUdldERhdGEgPSAnR2V0RGF0YSc7XG4gICAgYXBpR2V0QWxsID0gJ0dldEFsbEJ5RmlsdGVyJztcbiAgICBhcGlHZXREZXRhaWxCeUZpbHRlciA9ICdHZXRCeUZpbHRlcic7XG4gICAgZGlzYWJsZUZpZWxkTm90VXNlID0gZmFsc2U7XG5cbiAgICByZWFkb25seSBSRVRSWV9DT1VOVDogbnVtYmVyID0gMDtcbiAgICByZWFkb25seSBSRVBMQVlfQ09VTlQ6IG51bWJlciA9IDE7XG4gICAgcmVhZG9ubHkgTElNSVRfREVGQVVMVDogbnVtYmVyID0gMTAwMDtcblxuICAgIHByb3RlY3RlZCBfY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBodHRwOiBIdHRwQ2xpZW50LFxuICAgICAgICBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgICAgIHNlcnZpY2VVcmk6IHN0cmluZyxcbiAgICApIHtcbiAgICAgICAgdGhpcy5faHR0cCA9IGh0dHA7XG4gICAgICAgIHRoaXMuX2luamVjdG9yID0gaW5qZWN0b3I7XG4gICAgICAgIHRoaXMuc2VydmljZVVyaSA9IHNlcnZpY2VVcmk7XG4gICAgICAgIHRoaXMuX2NvbW1vblNlcnZpY2UgPSBpbmplY3Rvci5nZXQoQ29tbW9uU2VydmljZSk7XG4gICAgICAgIHRoaXMuX3NpZ25hbHJTZXJ2aWNlUHJpdmF0ZSA9IGluamVjdG9yLmdldChTaWduYWxSU2VydmljZSk7XG4gICAgICAgIGNvbnN0IGVudmlyb25tZW50ID0gdGhpcy5faW5qZWN0b3IuZ2V0KE1vZHVsZUNvbmZpZ1NlcnZpY2UpLmdldENvbmZpZygpLmVudmlyb25tZW50O1xuICAgICAgICB0aGlzLmRpc2FibGVGaWVsZE5vdFVzZSA9IGVudmlyb25tZW50Py5jYXVIaW5oTmdoaWVwVnU/LmRpc2FibGVGaWVsZE5vdFVzZSA/PyBmYWxzZTtcbiAgICB9XG5cblxuICAgIHNldEN1cnJlbnRTZXJ2aWNlVXJpKGtleTogc3RyaW5nKSB7XG4gICAgfVxuXG4gICAgZ2V0S2V5V29ya2Zsb3dTZXR0aW5nKCkge1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5lbnRpdHlOYW1lfWA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdWJzY3JpYmVTaWduYWxSKGNhbGxCYWNrKSB7XG4gICAgICAgIGNvbnN0IHRvcGljID0gdGhpcy5fY29tbW9uU2VydmljZS5ndWlkKCk7XG4gICAgICAgIC8vIELhuq90IMSR4bqndSBjaOG6oXlcbiAgICAgICAgdGhpcy5fc2lnbmFsclNlcnZpY2VQcml2YXRlLnN0YXJ0KCdDb21tb25IdWInLCB0b3BpYywgKG1lc3NhZ2UpID0+IHtcbiAgICAgICAgICAgIC8vIHVuc3Vic2NyaWJlIGPDoWMgdG9waWMgxJHDoyBs4bqvbmcgbmdoZSB0csaw4bubYyDEkcOzXG4gICAgICAgICAgICB0aGlzLl9zaWduYWxyU2VydmljZVByaXZhdGUudW5TdWJzY3JpYmVWaWV3Q29kZSgnQ29tbW9uSHViJywgdG9waWMpO1xuICAgICAgICAgICAgY2FsbEJhY2sobWVzc2FnZSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdG9waWM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1blN1YnNjcmliZVNpZ25hbFIoa2V5KSB7XG4gICAgICAgIHRoaXMuX3NpZ25hbHJTZXJ2aWNlUHJpdmF0ZS51blN1YnNjcmliZVZpZXdDb2RlKCdDb21tb25IdWInLCBrZXkpO1xuICAgIH1cblxuICAgIGRlZmF1bHRHZXRTaWduYWxSKGFwaVVybCk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHRvcGljID0gdGhpcy5zdWJzY3JpYmVTaWduYWxSKGYgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJzID0gSlNPTi5wYXJzZShmKTtcbiAgICAgICAgICAgICAgICBpZiAocnMuZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAvLyA9PSAtMSBsw6AgdHLGsOG7nW5nIGjhu6NwIHNldCBrZXkgYuG7iyBs4buXaVxuICAgICAgICAgICAgICAgICAgICBpZiAocnMuZGF0YSAhPSAnLTEnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldENhY2hlUmVzcG9uc2UocnMuZGF0YSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAudGhlbihyZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGFwaVVybC5pbmRleE9mKCc/JykgPT0gLTEpIHtcbiAgICAgICAgICAgICAgICBhcGlVcmwgKz0gYD9gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYXBpVXJsICs9IGAmYDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFwaVVybCArPSBgX2tleVNpZ25hbHI9JHt0b3BpY31gO1xuICAgICAgICAgICAgdGhpcy5faHR0cC5nZXQ8UmVzcG9uc2VSZXN1bHQ+KGFwaVVybClcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgc2hhcmVSZXBsYXkodGhpcy5SRVBMQVlfQ09VTlQpLFxuICAgICAgICAgICAgICAgICAgICByZXRyeSh0aGlzLlJFVFJZX0NPVU5UKSxcbiAgICAgICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSlcbiAgICAgICAgICAgICAgICApLnRvUHJvbWlzZSgpXG4gICAgICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVuU3Vic2NyaWJlU2lnbmFsUih0b3BpYyk7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBkZWZhdWx0UG9zdFNpZ25hbFIoYXBpVXJsLCBkYXRhOiBhbnkpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0b3BpYyA9IHRoaXMuc3Vic2NyaWJlU2lnbmFsUihmID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBycyA9IEpTT04ucGFyc2UoZik7XG4gICAgICAgICAgICAgICAgaWYgKHJzLmRhdGEpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gPT0gLTEgbMOgIHRyxrDhu51uZyBo4bujcCBzZXQga2V5IGLhu4sgbOG7l2lcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJzLmRhdGEgIT0gJy0xJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRDYWNoZVJlc3BvbnNlKHJzLmRhdGEpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShKU09OLnBhcnNlKHJlcy5kYXRhKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChhcGlVcmwuaW5kZXhPZignPycpID09IC0xKSB7XG4gICAgICAgICAgICAgICAgYXBpVXJsICs9IGA/YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGFwaVVybCArPSBgJmA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhcGlVcmwgKz0gYF9rZXlTaWduYWxyPSR7dG9waWN9YDtcbiAgICAgICAgICAgIHRoaXMuX2h0dHAucG9zdDxSZXNwb25zZVJlc3VsdD4oYXBpVXJsLCBkYXRhKVxuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICBzaGFyZVJlcGxheSh0aGlzLlJFUExBWV9DT1VOVCksXG4gICAgICAgICAgICAgICAgICAgIHJldHJ5KHRoaXMuUkVUUllfQ09VTlQpLFxuICAgICAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKVxuICAgICAgICAgICAgICAgICkudG9Qcm9taXNlKClcbiAgICAgICAgICAgICAgICAudGhlbihyZXMgPT4ge1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudW5TdWJzY3JpYmVTaWduYWxSKHRvcGljKTtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldENhY2hlUmVzcG9uc2Uoa2V5OiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9CYXNlR2V0Q2FjaGVJbmZvLyR7a2V5fWAsIHt9KTtcbiAgICB9XG5cbiAgICBnZXRPYmplY3REaXNwbGF5TW9kZWwoaWQ6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L0dldE9iamVjdERpc3BsYXlNb2RlbC8ke2lkfWAsIHt9KTtcbiAgICB9XG5cbiAgICBwb3N0R3JpZEluZm8odXJsOiBzdHJpbmcsIGdyaWRJbmZvOiBHcmlkSW5mbyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgaWYgKCFncmlkSW5mbykgZ3JpZEluZm8gPSBuZXcgR3JpZEluZm8oKTtcbiAgICAgICAgaWYgKGdyaWRJbmZvLmZpZWxkcyAmJiBncmlkSW5mby5maWVsZHMuc3RhcnRzV2l0aCgnLCcpKSB7XG4gICAgICAgICAgICBncmlkSW5mby5maWVsZHMgPSBncmlkSW5mby5maWVsZHMuc3Vic3RyaW5nKDEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vJHt1cmx9YCwgZ3JpZEluZm8pO1xuICAgIH1cblxuICAgIGdldEJ5R3JpZFJlcXVlc3QoZ3JpZEluZm86IEdyaWRJbmZvLCBwbHVzVXJsOiBzdHJpbmcgPSAnJyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgbGV0IGFwaVVybCA9IHRoaXMuYXBpR2V0RGF0YTtcbiAgICAgICAgaWYgKHBsdXNVcmwgIT0gbnVsbCAmJiBwbHVzVXJsICE9ICcnKSB7XG4gICAgICAgICAgICBhcGlVcmwgKz0gJy8nICsgcGx1c1VybDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5wb3N0R3JpZEluZm8oYXBpVXJsLCBncmlkSW5mbyk7XG4gICAgfVxuXG4gICAgZ2V0QnlHcmlkUmVxdWVzdFdpdGhCb2R5T2xkKGdyaWRJbmZvOiBHcmlkSW5mbywgcGx1c1VybDogc3RyaW5nID0gJycpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIGxldCBhcGlVcmwgPSB0aGlzLmFwaUdldERhdGE7XG4gICAgICAgIGlmIChwbHVzVXJsICE9IG51bGwgJiYgcGx1c1VybCAhPSAnJykge1xuICAgICAgICAgICAgYXBpVXJsICs9ICcvJyArIHBsdXNVcmw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb252ZXJ0VmFsdWVGaWx0ZXJUb09sZEJhc2UoZ3JpZEluZm8uZmlsdGVycyk7XG4gICAgICAgIHJldHVybiB0aGlzLnBvc3RHcmlkSW5mbyhhcGlVcmwsIGdyaWRJbmZvKTtcbiAgICB9XG5cbiAgICBiYXNlR2V0VHJlZURhdGEoZ3JpZEluZm86IEdyaWRJbmZvLCBwbHVzVXJsOiBzdHJpbmcgPSAnJyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgbGV0IGFwaVVybCA9ICdHZXRUcmVlRGF0YSc7XG4gICAgICAgIGlmIChwbHVzVXJsICE9IG51bGwgJiYgcGx1c1VybCAhPSAnJykge1xuICAgICAgICAgICAgYXBpVXJsICs9ICcvJyArIHBsdXNVcmw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucG9zdEdyaWRJbmZvKGFwaVVybCwgZ3JpZEluZm8pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29udmVydFZhbHVlRmlsdGVyVG9PbGRCYXNlKGZpbHRlcnM6IEZpbHRlcltdKSB7XG4gICAgICAgIGZpbHRlcnMuZm9yRWFjaChmaWx0ZXIgPT4ge1xuICAgICAgICAgICAgaWYgKGZpbHRlci5maWx0ZXJzICYmIGZpbHRlci5maWx0ZXJzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnZlcnRWYWx1ZUZpbHRlclRvT2xkQmFzZShmaWx0ZXIuZmlsdGVycyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IEpTT04ucGFyc2UoZmlsdGVyLnZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgICAgIC8vIEzDoCB2YWx1ZSBraeG7g3UgZGF0ZVxuICAgICAgICAgICAgICAgICAgICBpZiAoc3RyVmFsdWUuaW5kZXhPZignLScpID4gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0ZSBpbnN0YW5jZW9mIERhdGUgJiYgIWlzTmFOKGRhdGUuZ2V0VGltZSgpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci52YWx1ZSA9IGdldFN0cmluZ0RhdGVWTihkYXRlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci52YWx1ZSA9IHN0clZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLnZhbHVlID0gdmFsdWUudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2jhu4kgZMO5bmcgdHJvbmcgdHLGsOG7nW5nIGjhu6NwIG114buRbiBn4butaSByZXF1ZXN0IMSR4bq/biBjdXN0b20gcm91dGUgR2V0RGF0YS97cGx1c1VybH1cbiAgICAgKi9cbiAgICBnZXREYXRhQ3VzdG9tUm91dGUocGx1c1VybDogc3RyaW5nLCBmaWx0ZXJzPzogRmlsdGVyW10sIGZpZWxkczogc3RyaW5nID0gJycsIHNvcnRzOiBTb3J0W10gPSBbXSwgcGFnZVNpemU6IG51bWJlciA9IDEsIHBhZ2U6IG51bWJlciA9IDEpIHtcbiAgICAgICAgY29uc3QgZ3JpZEluZm8gPSBuZXcgR3JpZEluZm8oe1xuICAgICAgICAgICAgZmllbGRzLFxuICAgICAgICAgICAgcGFnZUluZm86IHtcbiAgICAgICAgICAgICAgICBwYWdlLFxuICAgICAgICAgICAgICAgIHBhZ2VTaXplXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc29ydHMsXG4gICAgICAgICAgICBmaWx0ZXJzOiBmaWx0ZXJzID8gZmlsdGVycyA6IFtdXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRCeUdyaWRSZXF1ZXN0KGdyaWRJbmZvLCBwbHVzVXJsKTtcbiAgICB9XG5cbiAgICBnZXRBbGxXaXRoSW5jbHVkZShmaWx0ZXJzPzogRmlsdGVyW10sIGZpZWxkczogc3RyaW5nID0gJycsIHNvcnRzOiBTb3J0W10gPSBbXSwgaW5jbHVkZXM6IEluY2x1ZGVbXSA9IFtdLCBwbHVzVXJsOiBzdHJpbmcgPSAnJykge1xuICAgICAgICBsZXQgYXBpVXJsID0gdGhpcy5hcGlHZXRBbGw7XG4gICAgICAgIGlmIChwbHVzVXJsICE9IG51bGwgJiYgcGx1c1VybCAhPSAnJykge1xuICAgICAgICAgICAgYXBpVXJsICs9IGAvJHtwbHVzVXJsfWA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZ3JpZEluZm8gPSBuZXcgR3JpZEluZm8oe1xuICAgICAgICAgICAgZmllbGRzLFxuICAgICAgICAgICAgcGFnZUluZm86IHtcbiAgICAgICAgICAgICAgICBwYWdlOiAxLFxuICAgICAgICAgICAgICAgIHBhZ2VTaXplOiA5OTk5OVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHNvcnRzLFxuICAgICAgICAgICAgZmlsdGVyczogZmlsdGVycyA/IGZpbHRlcnMgOiBbXSxcbiAgICAgICAgICAgIGluY2x1ZGVzXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5wb3N0R3JpZEluZm8oYXBpVXJsLCBncmlkSW5mbyk7XG4gICAgfVxuXG4gICAgZ2V0QnlJZHMoaWRzOiBzdHJpbmdbXSwgZmllbGRzOiBzdHJpbmcgPSAnJywgc29ydHM6IFNvcnRbXSA9IFtdLCBwbHVzVXJsOiBzdHJpbmcgPSAnJykge1xuICAgICAgICBjb25zdCBmaWx0ZXJzID0gW1xuICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIoJ2lkJywgT3BlcmF0b3IuaW4sIGlkcylcbiAgICAgICAgXTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QWxsKGZpbHRlcnMsIGZpZWxkcywgc29ydHMsIHBsdXNVcmwpO1xuICAgIH1cblxuICAgIGdldEFsbFdpdGhJZ25vcmUoZmlsdGVycz86IEZpbHRlcltdLCBmaWVsZHM6IHN0cmluZyA9ICcnLCBzb3J0czogU29ydFtdID0gW10pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0QWxsKGZpbHRlcnMsIGZpZWxkcywgc29ydHMsICdJZ25vcmVBbGxCYXNlRmlsdGVyJyk7XG4gICAgfVxuXG4gICAgZ2V0QWxsKGZpbHRlcnM/OiBGaWx0ZXJbXSwgZmllbGRzOiBzdHJpbmcgPSAnJywgc29ydHM6IFNvcnRbXSA9IFtdLCBwbHVzVXJsOiBzdHJpbmcgPSAnJykge1xuICAgICAgICBsZXQgYXBpVXJsID0gdGhpcy5hcGlHZXRBbGw7XG4gICAgICAgIGlmIChwbHVzVXJsICE9IG51bGwgJiYgcGx1c1VybCAhPSAnJykge1xuICAgICAgICAgICAgYXBpVXJsICs9IGAvJHtwbHVzVXJsfWA7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZ3JpZEluZm8gPSBuZXcgR3JpZEluZm8oe1xuICAgICAgICAgICAgZmllbGRzLFxuICAgICAgICAgICAgcGFnZUluZm86IHtcbiAgICAgICAgICAgICAgICBwYWdlOiAxLFxuICAgICAgICAgICAgICAgIHBhZ2VTaXplOiA5OTlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzb3J0cyxcbiAgICAgICAgICAgIGZpbHRlcnM6IGZpbHRlcnMgPyBmaWx0ZXJzIDogW11cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLnBvc3RHcmlkSW5mbyhhcGlVcmwsIGdyaWRJbmZvKTtcbiAgICB9XG5cbiAgICBnZXRBbGxCeUdyaWRJbmZvKGdyaWRJbmZvOiBHcmlkSW5mbywgcGx1c1VybDogc3RyaW5nID0gJycpIHtcbiAgICAgICAgbGV0IGFwaVVybCA9IHRoaXMuYXBpR2V0QWxsO1xuICAgICAgICBpZiAocGx1c1VybCAhPSBudWxsICYmIHBsdXNVcmwgIT0gJycpIHtcbiAgICAgICAgICAgIGFwaVVybCArPSBgLyR7cGx1c1VybH1gO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnBvc3RHcmlkSW5mbyhhcGlVcmwsIGdyaWRJbmZvKTtcbiAgICB9XG5cbiAgICBjaGVja0V4aXN0QnlGaWx0ZXIoZmlsdGVyczogRmlsdGVyW10pIHtcbiAgICAgICAgY29uc3QgYXBpVXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9DaGVja0V4aXN0YDtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYXBpVXJsLCBmaWx0ZXJzKTtcbiAgICB9XG5cbiAgICBhc3luYyBjaGVja0R1cGxpY2F0ZWRCeUZpZWxkKGZpZWxkOiBzdHJpbmcsIHZhbHVlOiBhbnksIGlkOiBhbnkpIHtcbiAgICAgICAgY29uc3QgZmlsdGVycyA9IFtcbiAgICAgICAgICAgIG5ldyBGaWx0ZXIoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiAnaWQnLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5lcXVhbCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogSlNPTi5zdHJpbmdpZnkoaWQpXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGaWx0ZXIoe1xuICAgICAgICAgICAgICAgIGZpZWxkLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5lcXVhbCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogSlNPTi5zdHJpbmdpZnkodmFsdWUpXG4gICAgICAgICAgICB9KVxuICAgICAgICBdO1xuXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuY2hlY2tFeGlzdEJ5RmlsdGVyKGZpbHRlcnMpO1xuICAgICAgICBpZiAoIXJlc3VsdC5zdWNjZXNzKSByZXR1cm4gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5kYXRhO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2VuZXJhdGVHcmlkSW5mb0Ryb3Bkb3duKGZpbHRlcnM6IEZpbHRlcltdLCBvcHRpb25zOiBEcm9wZG93bk9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgZ3JpZEluZm8gPSB7XG4gICAgICAgICAgICBwYWdlSW5mbzoge1xuICAgICAgICAgICAgICAgIHBhZ2U6IG9wdGlvbnMucGFnZSxcbiAgICAgICAgICAgICAgICBwYWdlU2l6ZTogb3B0aW9ucy5wYWdlU2l6ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZpbHRlcnMsXG4gICAgICAgICAgICBzb3J0czogW10sXG4gICAgICAgICAgICBmaWVsZHM6IG51bGxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgbHN0RmllbGQgPSBbXG4gICAgICAgICAgICBvcHRpb25zLnZhbHVlRmllbGQsXG4gICAgICAgICAgICBvcHRpb25zLmRpc3BsYXlGaWVsZFxuICAgICAgICBdO1xuICAgICAgICBsc3RGaWVsZC5wdXNoKC4uLm9wdGlvbnMuZmllbGRQbHVzLnNwbGl0KCcsJykuZmlsdGVyKHEgPT4gISFxICYmIHEgIT09ICcnKSk7XG4gICAgICAgIGdyaWRJbmZvLmZpZWxkcyA9IHRoaXMuX2NvbW1vblNlcnZpY2UuYWRkRGlzdGluY3QobHN0RmllbGQsIFtdKS50b1N0cmluZygpO1xuICAgICAgICBpZiAob3B0aW9ucy5zb3J0cyAhPSBudWxsICYmIG9wdGlvbnMuc29ydHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZ3JpZEluZm8uc29ydHMgPSBbLi4ub3B0aW9ucy5zb3J0c107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuc29ydEZpZWxkICE9IG51bGwgJiYgb3B0aW9ucy5zb3J0RmllbGQgIT0gJycpIHtcblxuICAgICAgICAgICAgZ3JpZEluZm8uc29ydHMucHVzaCh7IGZpZWxkOiBvcHRpb25zLnNvcnRGaWVsZCwgZGlyOiBvcHRpb25zLnNvcnREaXIgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGdyaWRJbmZvO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0RGVmYXVsdE9wdGlvbnMob3B0aW9uczogRHJvcGRvd25PcHRpb25zKSB7XG4gICAgICAgIGlmIChvcHRpb25zLmZpZWxkUGx1cy5sZW5ndGggJiYgIW9wdGlvbnMuZmllbGRQbHVzLnN0YXJ0c1dpdGgoJywnKSkge1xuICAgICAgICAgICAgb3B0aW9ucy5maWVsZFBsdXMgPSAnLCcgKyBvcHRpb25zLmZpZWxkUGx1cztcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5zb3J0RmllbGQgPT0gJycpIHtcbiAgICAgICAgICAgIG9wdGlvbnMuc29ydEZpZWxkID0gb3B0aW9ucy5kaXNwbGF5RmllbGQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldERlZmF1bHRPcHRpb25zVHJlZShvcHRpb25zOiBEcm9wZG93bk9wdGlvbnMsIGZpZWxkUGFyZW50OiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKG9wdGlvbnMuZmllbGRQbHVzLmxlbmd0aCAmJiAhb3B0aW9ucy5maWVsZFBsdXMuc3RhcnRzV2l0aCgnLCcpKSB7XG4gICAgICAgICAgICBvcHRpb25zLmZpZWxkUGx1cyA9ICcsJyArIG9wdGlvbnMuZmllbGRQbHVzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuZmllbGRQbHVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIG9wdGlvbnMuZmllbGRQbHVzICs9ICcsJztcbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zLmZpZWxkUGx1cyArPSBmaWVsZFBhcmVudDtcbiAgICB9XG5cbiAgICBnZXREYXRhRHJvcGRvd24ob3B0aW9ucz86IERyb3Bkb3duT3B0aW9ucyk6IFByb21pc2U8YW55W10+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGF0YURyb3Bkb3duQnlGaWx0ZXIoW10sIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGdldERhdGFEcm9wZG93bkJ5RmlsdGVyKGZpbHRlcnM6IEZpbHRlcltdLCBvcHRpb25zPzogRHJvcGRvd25PcHRpb25zKTogUHJvbWlzZTxhbnlbXT4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5nZXREYXRhRHJvcGRvd25CeUZpbHRlclJhdyhmaWx0ZXJzLCBvcHRpb25zKVxuICAgICAgICAgICAgICAgIC50aGVuKHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzLmRhdGEpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGVyciA9PiByZWplY3QoZXJyKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGdldERhdGFEcm9wZG93bkJ5RmlsdGVyUmF3KGZpbHRlcnM6IEZpbHRlcltdLCBvcHRpb25zPzogRHJvcGRvd25PcHRpb25zKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBpZiAob3B0aW9ucyA9PSBudWxsKSBvcHRpb25zID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xuICAgICAgICB0aGlzLnNldERlZmF1bHRPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0RGF0YURyb3Bkb3duQnlGaWx0ZXIoZmlsdGVycywgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0RGF0YURyb3Bkb3duQnlGaWx0ZXIoZmlsdGVyczogRmlsdGVyW10sIG9wdGlvbnM6IERyb3Bkb3duT3B0aW9ucyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGdyaWRJbmZvID0gdGhpcy5nZW5lcmF0ZUdyaWRJbmZvRHJvcGRvd24oZmlsdGVycywgb3B0aW9ucyk7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5pc1NlcnZlckxvYWQgJiYgIW9wdGlvbnMuaXNHZXRBbGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdldEJ5R3JpZFJlcXVlc3QoZ3JpZEluZm8sIG9wdGlvbnMucGx1c1VybClcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgICAgICAgICAgICAgICAgfSkuY2F0Y2goZXJyID0+IHJlamVjdChlcnIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuZ2V0QWxsQnlHcmlkSW5mbyhncmlkSW5mbywgb3B0aW9ucy5wbHVzVXJsKVxuICAgICAgICAgICAgICAgICAgICAudGhlbihyZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXMpO1xuICAgICAgICAgICAgICAgICAgICB9KS5jYXRjaChlcnIgPT4gcmVqZWN0KGVycikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUYW8gdHJlZSBsaXN0IHR1IGR1IGxpZXUgZHVvYyBjaG8sIGN1IHRoZSBsYSBkdSBsaWV1IFRyZWVNb2RlbCA9PiBkYSBkdW9jIHNvcnQgdGhlbyBUcnVvbmcgTWFQaGFuQ2FwXG4gICAgICogQHBhcmFtIHJhd0RhdGFcbiAgICAgKiBAcGFyYW0gZmllbGRQYXJlbnQgZmllbGQgZ2lhIHRyaSBjaGEgdHJvbmcgbW9kZWwgY29uLiBWRDogSWRDaGFcbiAgICAgKiBAcGFyYW0gZmllbGRQYXJlbnRUcmVlSXRlbSBmaWVsZCBnaWEgdHJpIGN1YSBtb2RlbCBjaGEuIFZEOiBJZFxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgZ2V0VHJlZU1vZGVsQmFzZShyYXdEYXRhOiBhbnlbXSwgZmllbGRQYXJlbnQ6IHN0cmluZywgZmllbGRQYXJlbnRUcmVlSXRlbTogc3RyaW5nKSB7XG4gICAgICAgIGlmIChyYXdEYXRhID09IG51bGwgfHwgcmF3RGF0YS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF0YU1hcCA9IG5ldyBNYXA8YW55LCBhbnk+KCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGRhdGEgb2YgcmF3RGF0YSkge1xuICAgICAgICAgICAgY29uc3Qgbm9kZUtleSA9IGRhdGFbZmllbGRQYXJlbnRUcmVlSXRlbV07XG4gICAgICAgICAgICBjb25zdCBmaWVsZFBhcmVudFZhbHVlID0gZGF0YVtmaWVsZFBhcmVudF07XG4gICAgICAgICAgICBkYXRhLl9sZXZlbCA9IDA7XG4gICAgICAgICAgICBkYXRhLl9wcmVmaXggPSAnJztcbiAgICAgICAgICAgIGNvbnN0IGRhdGFQYXJlbnQgPSBmaWVsZFBhcmVudFZhbHVlICE9IG51bGwgPyBkYXRhTWFwLmdldChmaWVsZFBhcmVudFZhbHVlKSA6IG51bGw7XG4gICAgICAgICAgICBpZiAoZGF0YVBhcmVudCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2NvbW1vblNlcnZpY2UuaXNWYWxpZEd1aWQoZmllbGRQYXJlbnRWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5fZXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkYXRhLl9yb290ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBkYXRhTWFwLnNldChub2RlS2V5LCBkYXRhKTtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaChkYXRhKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGF0YS5fbGV2ZWwgPSBkYXRhUGFyZW50Ll9sZXZlbCArIDE7XG4gICAgICAgICAgICBkYXRhLl9wcmVmaXggPSBkYXRhUGFyZW50Ll9yb290ID09PSB0cnVlXG4gICAgICAgICAgICAgICAgPyAnfC0tJ1xuICAgICAgICAgICAgICAgIDogZGF0YVBhcmVudC5fcHJlZml4ICsgJy0tLSc7XG4gICAgICAgICAgICBkYXRhTWFwLnNldChub2RlS2V5LCBkYXRhKTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGFvIHRyZWUgZGF0YSB0dSBkdSBsaWV1IGR1b2MgY2hvXG4gICAgICogQHBhcmFtIHJhd0RhdGFcbiAgICAgKiBAcGFyYW0gZmllbGRQYXJlbnQgZmllbGQgZ2lhIHRyaSBjaGEgdHJvbmcgbW9kZWwgY29uXG4gICAgICogQHBhcmFtIGZpZWxkUGFyZW50VHJlZUl0ZW0gZmllbGQgZ2lhIHRyaSBjdWEgbW9kZWwgY2hhXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBnZXRUcmVlRGF0YShyYXdEYXRhLCBmaWVsZFBhcmVudDogc3RyaW5nLCBmaWVsZFBhcmVudFRyZWVJdGVtOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHJhd0RhdGEgPT0gbnVsbCkgcmV0dXJuIFtdO1xuICAgICAgICAvLyBsZXQgY291bnQgPSAwO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgLy8gY29uc3QgZnVuY0RlUXV5ID0gKHJlc3VsdCwgZGF0YXMsIHByZWZpeCwgbGV2ZWwpID0+IHtcbiAgICAgICAgLy8gICAgIGNvbnN0IGl0ZW1QYXJlbnQgPSByZXN1bHRbcmVzdWx0Lmxlbmd0aCAtIDFdO1xuICAgICAgICAvLyAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAvLyAgICAgICAgIGNvdW50Kys7XG4gICAgICAgIC8vICAgICAgICAgaWYgKGRhdGFzW2ldW2ZpZWxkUGFyZW50XSA9PSBpdGVtUGFyZW50W29wdGlvbnMuZmllbGRQYXJlbnRUcmVlSXRlbV0pIHtcbiAgICAgICAgLy8gICAgICAgICAgICAgZGF0YXNbaV0uX3ByZWZpeCA9IGAke3ByZWZpeH0gYDtcbiAgICAgICAgLy8gICAgICAgICAgICAgZGF0YXNbaV0uX2luZGV4ID0gaTtcbiAgICAgICAgLy8gICAgICAgICAgICAgZGF0YXNbaV0uX2xldmVsID0gbGV2ZWw7XG4gICAgICAgIC8vICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGRhdGFzW2ldKTtcbiAgICAgICAgLy8gICAgICAgICAgICAgZnVuY0RlUXV5KHJlc3VsdCwgZGF0YXMsIHByZWZpeCArICctLS0nLCBsZXZlbCArIDEpO1xuICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy8gfTtcbiAgICAgICAgLy8gZm9yIChsZXQgaSA9IDA7IGkgPCByYXdEYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIC8vICAgICBjb3VudCsrO1xuICAgICAgICAvLyAgICAgaWYgKHJhd0RhdGFbaV1bZmllbGRQYXJlbnRdID09IHZhbHVlUGFyZW50Um9vdCkge1xuICAgICAgICAvLyAgICAgICAgIHJhd0RhdGFbaV0uX3ByZWZpeCA9ICcnO1xuICAgICAgICAvLyAgICAgICAgIHJhd0RhdGFbaV0uX2luZGV4ID0gaTtcbiAgICAgICAgLy8gICAgICAgICByYXdEYXRhW2ldLl9sZXZlbCA9IDE7XG4gICAgICAgIC8vICAgICAgICAgcmVzdWx0LnB1c2gocmF3RGF0YVtpXSk7XG4gICAgICAgIC8vICAgICAgICAgZnVuY0RlUXV5KHJlc3VsdCwgcmF3RGF0YSwgJ3wtLS0nLCAyKTtcbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy8gfVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhgbG9vcCBjb3VudCBvbGQgJHtjb3VudH1gKTtcbiAgICAgICAgLy8gY291bnQgPSAwO1xuICAgICAgICBjb25zdCBub2RlTWFwID0gbmV3IE1hcDxhbnksIFRyZWVOb2RlPigpO1xuICAgICAgICBjb25zdCByb290cyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGRhdGEgb2YgcmF3RGF0YSkge1xuICAgICAgICAgICAgLy8gY291bnQrKztcbiAgICAgICAgICAgIGNvbnN0IG5vZGVLZXkgPSBkYXRhW2ZpZWxkUGFyZW50VHJlZUl0ZW1dO1xuICAgICAgICAgICAgY29uc3QgcGFyZW50S2V5ID0gZGF0YVtmaWVsZFBhcmVudF07XG4gICAgICAgICAgICBsZXQgbm9kZSA9IG5vZGVNYXAuZ2V0KG5vZGVLZXkpO1xuICAgICAgICAgICAgbGV0IGlzTmV3Tm9kZSA9IHRydWU7XG4gICAgICAgICAgICBpZiAobm9kZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5kYXRhID0gZGF0YTtcbiAgICAgICAgICAgICAgICBub2RlLnBhcmVudCA9IHBhcmVudEtleTtcbiAgICAgICAgICAgICAgICBpc05ld05vZGUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHR5cGVvZiBwYXJlbnRLZXkgPT0gJ3N0cmluZycgJiYgIXRoaXMuX2NvbW1vblNlcnZpY2UuaXNWYWxpZEd1aWQocGFyZW50S2V5KVxuICAgICAgICAgICAgICAgIHx8IHBhcmVudEtleSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzTmV3Tm9kZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXdOb2RlID0gbmV3IFRyZWVOb2RlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvb3Q6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBsZWFmOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRyZW46IFtdLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudDogbnVsbFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgbm9kZU1hcC5zZXQobm9kZUtleSwgbmV3Tm9kZSk7XG4gICAgICAgICAgICAgICAgICAgIHJvb3RzLnB1c2gobm9kZUtleSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIG5vZGUucm9vdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgcm9vdHMucHVzaChub2RlS2V5KTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbm9kZSA/Pz0gbmV3IFRyZWVOb2RlKHtcbiAgICAgICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgICAgIGNoaWxkcmVuOiBbXSxcbiAgICAgICAgICAgICAgICBwYXJlbnQ6IHBhcmVudEtleVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChpc05ld05vZGUpIHtcbiAgICAgICAgICAgICAgICBub2RlTWFwLnNldChub2RlS2V5LCBub2RlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHBhcmVudE5vZGUgPSBub2RlTWFwLmdldChwYXJlbnRLZXkpO1xuICAgICAgICAgICAgaWYgKHBhcmVudE5vZGUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHBhcmVudE5vZGUuY2hpbGRyZW4ucHVzaChub2RlKTtcbiAgICAgICAgICAgICAgICBwYXJlbnROb2RlLmxlYWYgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcGFyZW50Tm9kZSA9IG5ldyBUcmVlTm9kZSh7XG4gICAgICAgICAgICAgICAgbGVhZjogZmFsc2UsXG4gICAgICAgICAgICAgICAgY2hpbGRyZW46IFtub2RlXSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbm9kZU1hcC5zZXQocGFyZW50S2V5LCBwYXJlbnROb2RlKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmdW5jU2V0UHJlZml4ID0gZnVuY3Rpb24gKG5vZGU6IFRyZWVOb2RlLCBwYXJlbnROb2RlOiBUcmVlTm9kZSwgcHJlZml4OiBzdHJpbmcpIHtcbiAgICAgICAgICAgIC8vIGNvdW50Kys7XG4gICAgICAgICAgICBub2RlLmRhdGEuX3ByZWZpeCA9IHByZWZpeDtcbiAgICAgICAgICAgIG5vZGUuZGF0YS5fbGV2ZWwgPSBwYXJlbnROb2RlLmRhdGEuX2xldmVsICsgMTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5vZGUuZGF0YSk7XG4gICAgICAgICAgICBpZiAobm9kZS5jaGlsZHJlbiA9PSBudWxsIHx8IG5vZGUuY2hpbGRyZW4ubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIG5vZGUuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBmdW5jU2V0UHJlZml4KGNoaWxkLCBub2RlLCBwcmVmaXggKyAnLS0tJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGZvciAoY29uc3Qgcm9vdCBvZiByb290cykge1xuICAgICAgICAgICAgLy8gY291bnQrKztcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBub2RlTWFwLmdldChyb290KTtcbiAgICAgICAgICAgIGlmIChub2RlID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5vZGUuZGF0YS5fcHJlZml4ID0gJyc7XG4gICAgICAgICAgICBub2RlLmRhdGEuX2xldmVsID0gMTtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKG5vZGUuZGF0YSk7XG4gICAgICAgICAgICBpZiAobm9kZS5jaGlsZHJlbiA9PSBudWxsIHx8IG5vZGUuY2hpbGRyZW4ubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2Ygbm9kZS5jaGlsZHJlbikge1xuICAgICAgICAgICAgICAgIGZ1bmNTZXRQcmVmaXgoY2hpbGQsIG5vZGUsICd8LS0nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGBsb29wIGNvdW50IG5ldyAke2NvdW50fWApO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZ2V0VHJlZURhdGFEcm9wZG93bihmaWVsZFBhcmVudDogc3RyaW5nLCB2YWx1ZVBhcmVudFJvb3Q6IG51bWJlciA9IC0xLCBvcHRpb25zPzogRHJvcGRvd25PcHRpb25zKTogUHJvbWlzZTxhbnlbXT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUcmVlRGF0YURyb3Bkb3duQnlGaWx0ZXIoW10sIGZpZWxkUGFyZW50LCB2YWx1ZVBhcmVudFJvb3QsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGdldFRyZWVEYXRhRHJvcGRvd25CeUZpbHRlcihmaWx0ZXJzOiBGaWx0ZXJbXSwgZmllbGRQYXJlbnQ6IHN0cmluZywgdmFsdWVQYXJlbnRSb290OiBudW1iZXIgPSAtMSwgb3B0aW9ucz86IERyb3Bkb3duT3B0aW9ucyk6IFByb21pc2U8YW55W10+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZ2V0VHJlZURhdGFEcm9wZG93bkJ5RmlsdGVyUmF3KGZpbHRlcnMsIGZpZWxkUGFyZW50LCB2YWx1ZVBhcmVudFJvb3QsIG9wdGlvbnMpXG4gICAgICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXMuZGF0YSk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goZXJyID0+IHJlamVjdChlcnIpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0VHJlZURhdGFEcm9wZG93bkJ5RmlsdGVyUmF3KGZpbHRlcnM6IEZpbHRlcltdLCBmaWVsZFBhcmVudDogc3RyaW5nLCB2YWx1ZVBhcmVudFJvb3Q6IG51bWJlciA9IC0xLCBvcHRpb25zPzogRHJvcGRvd25PcHRpb25zKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBpZiAob3B0aW9ucyA9PSBudWxsKSBvcHRpb25zID0gbmV3IERyb3Bkb3duT3B0aW9ucygpO1xuICAgICAgICB0aGlzLnNldERlZmF1bHRPcHRpb25zVHJlZShvcHRpb25zLCBmaWVsZFBhcmVudCk7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy5pc1RyZWVCYXNlTW9kZWwpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBncmlkSW5mbyA9IHRoaXMuZ2VuZXJhdGVHcmlkSW5mb0Ryb3Bkb3duKGZpbHRlcnMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIHRoaXMuYmFzZUdldFRyZWVEYXRhKGdyaWRJbmZvKVxuICAgICAgICAgICAgICAgICAgICAudGhlbihyZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJlZURhdGEgPSB0aGlzLmdldFRyZWVNb2RlbEJhc2UocmVzLmRhdGEsIGZpZWxkUGFyZW50LCBvcHRpb25zLmZpZWxkUGFyZW50VHJlZUl0ZW0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzLmRhdGEgPSB0cmVlRGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGVyciA9PiByZWplY3QoZXJyKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9nZXREYXRhRHJvcGRvd25CeUZpbHRlcihmaWx0ZXJzLCBvcHRpb25zKVxuICAgICAgICAgICAgICAgICAgICAudGhlbihyZXMgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdHJlZURhdGEgPSB0aGlzLmdldFRyZWVEYXRhKHJlcy5kYXRhLCBmaWVsZFBhcmVudCwgb3B0aW9ucy5maWVsZFBhcmVudFRyZWVJdGVtKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcy5kYXRhID0gdHJlZURhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcyk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaChlcnIgPT4gcmVqZWN0KGVycikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEZpZWxkc0Zyb21Ecm9wZG93bk9wdGlvbnMob3B0aW9uczogRHJvcGRvd25PcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkcyA9IFtdO1xuICAgICAgICBpZiAob3B0aW9ucy52YWx1ZUZpZWxkICYmIG9wdGlvbnMudmFsdWVGaWVsZCAhPT0gJycpIHtcbiAgICAgICAgICAgIGZpZWxkcy5wdXNoKG9wdGlvbnMudmFsdWVGaWVsZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5kaXNwbGF5RmllbGQgJiYgb3B0aW9ucy5kaXNwbGF5RmllbGQgIT09ICcnKSB7XG4gICAgICAgICAgICBmaWVsZHMucHVzaChvcHRpb25zLmRpc3BsYXlGaWVsZCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5maWVsZFBhcmVudFRyZWVJdGVtICYmIG9wdGlvbnMuZmllbGRQYXJlbnRUcmVlSXRlbSAhPT0gJycpIHtcbiAgICAgICAgICAgIGZpZWxkcy5wdXNoKG9wdGlvbnMuZmllbGRQYXJlbnRUcmVlSXRlbSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5maWVsZFRyZWUgJiYgb3B0aW9ucy5maWVsZFRyZWUgIT09ICcnKSB7XG4gICAgICAgICAgICBmaWVsZHMucHVzaChvcHRpb25zLmZpZWxkVHJlZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5maWVsZFBsdXMgJiYgb3B0aW9ucy5maWVsZFBsdXMgIT09ICcnKSB7XG4gICAgICAgICAgICBmaWVsZHMucHVzaCguLi5vcHRpb25zLmZpZWxkUGx1cy5zcGxpdCgnLCcpLmZpbHRlcih4ID0+IHggIT09ICcnKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KGZpZWxkcykpLmpvaW4oJywnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBnZXQgZGV0YWlsIHbhu5tpIGFwaSBkbyBEZXYgdOG7sSB2aeG6v3QsIG3hurdjIMSR4buLbmggdXJsICdDdXN0b20ve2lkfSdcbiAgICAgKiBAcGFyYW0gaWQgLSBpZCBi4bqjbiBnaGlcbiAgICAgKiBAcGFyYW0gcGx1c1VybCAtIGFwaSBz4bq9IHRow6BuaCA9PiAnUGx1c1VybC97aWR9J1xuICAgICAqIEBwYXJhbSBxdWVyeVBhcmFtIC0gcXVlcnlQYXJhbSB0aMOqbSB2w6BvIHNhdSB1cmwsIG7hur91IGPhuqduXG4gICAgICovXG4gICAgZ2V0RGV0YWlsQ3VzdG9tKGlkOiBzdHJpbmcsIHBsdXNVcmw6IHN0cmluZyA9ICdDdXN0b20nLCBxdWVyeVBhcmFtOiBzdHJpbmcgPSAnJykge1xuICAgICAgICBsZXQgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS8ke3BsdXNVcmx9LyR7aWR9YDtcbiAgICAgICAgdXJsICs9IHF1ZXJ5UGFyYW0gIT0gJycgPyBgJiR7cXVlcnlQYXJhbX1gIDogJyc7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQodXJsKTtcbiAgICB9XG5cbiAgICBnZXREZXRhaWwoaWQ6IGFueSk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS8ke2lkfWA7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQodXJsKTtcbiAgICB9XG5cbiAgICBnZXREZXRhaWxXaXRoRmllbGRzKGlkOiBzdHJpbmcsIGZpZWxkcyA9ICcnLCBzb3J0czogU29ydFtdID0gW10sIGluY2x1ZGVzOiBJbmNsdWRlW10gPSBbXSk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgZmlsdGVycyA9IFtcbiAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKCdpZCcsIE9wZXJhdG9yLmVxdWFsLCBpZClcbiAgICAgICAgXTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGV0YWlsQnlGaWx0ZXIoZmlsdGVycywgc29ydHMsIGZpZWxkcywgaW5jbHVkZXMpO1xuICAgIH1cblxuICAgIGdldERldGFpbFdpdGhQZXJtaXNzaW9uKGlkOiBhbnksIHBpZDogc3RyaW5nID0gbnVsbCwgcGx1c1VybDogc3RyaW5nID0gJycpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIGlmIChwaWQgPT0gbnVsbCkge1xuICAgICAgICAgICAgcGlkID0gdGhpcy5fY29tbW9uU2VydmljZS5ndWlkRW1wdHkoKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9EZXRhaWxXaXRoUGVybWlzc2lvbi8ke2lkfT9waWQ9JHtwaWR9YDtcbiAgICAgICAgaWYgKHBsdXNVcmwpIHtcbiAgICAgICAgICAgIHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vRGV0YWlsV2l0aFBlcm1pc3Npb24vJHtwbHVzVXJsfS8ke2lkfT9waWQ9JHtwaWR9YDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KHVybCk7XG4gICAgfVxuXG4gICAgZ2V0RGV0YWlsQnlQaWQocGlkOiBhbnkpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vRGV0YWlsV2l0aEJ5UGlkLyR7cGlkfWA7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQodXJsKTtcbiAgICB9XG5cbiAgICBnZXRCeUluc3RhbmNlSWQoaW5zdGFuY2VJZDogYW55KTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldEJ5SW5zdGFjZUlkLyR7aW5zdGFuY2VJZH1gO1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KHVybCk7XG4gICAgfVxuXG4gICAgZ2V0RGV0YWlsQnlDb2RlKGNvZGU6IHN0cmluZyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRCeUNvZGUvJHtjb2RlfWA7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRHZXQodXJsKTtcbiAgICB9XG5cbiAgICBnZXREZXRhaWxCeUZpbHRlcihmaWx0ZXJzOiBGaWx0ZXJbXSA9IFtdLCBzb3J0czogU29ydFtdID0gW10sIGZpZWxkcyA9ICcnLCBpbmNsdWRlczogSW5jbHVkZVtdID0gW10pOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vJHt0aGlzLmFwaUdldERldGFpbEJ5RmlsdGVyfWA7XG4gICAgICAgIGNvbnN0IGdyaWRJbmZvID0ge1xuICAgICAgICAgICAgcGFnZUluZm86IHtcbiAgICAgICAgICAgICAgICBwYWdlOiAxLFxuICAgICAgICAgICAgICAgIHBhZ2VTaXplOiAxXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZmlsdGVycyxcbiAgICAgICAgICAgIHNvcnRzLFxuICAgICAgICAgICAgaW5jbHVkZXMsXG4gICAgICAgICAgICBmaWVsZHMsXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KHVybCwgZ3JpZEluZm8pO1xuICAgIH1cblxuICAgIGNvdW50QnlGaWx0ZXIoZmlsdGVyczogRmlsdGVyW10gPSBbXSkge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0NvdW50QnlGaWx0ZXJgO1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdCh1cmwsIGZpbHRlcnMpO1xuICAgIH1cblxuICAgIGdldExhc3REZXRhaWxCeUZpbHRlcihmaWx0ZXJzOiBGaWx0ZXJbXSA9IFtdLCBzb3J0czogU29ydFtdID0gW10pOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0TGFzdEJ5RmlsdGVyYDtcbiAgICAgICAgY29uc3QgZ3JpZEluZm8gPSB7XG4gICAgICAgICAgICBwYWdlSW5mbzoge1xuICAgICAgICAgICAgICAgIHBhZ2U6IDEsXG4gICAgICAgICAgICAgICAgcGFnZVNpemU6IDFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmaWx0ZXJzLFxuICAgICAgICAgICAgc29ydHNcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QodXJsLCBncmlkSW5mbyk7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0V29ya2Zsb3dTZXR0aW5nQnlDb2RlKHdvcmtmbG93Q29kZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHdvcmtmbG93U2V0dGluZyA9IChhd2FpdCB0aGlzLmdldERldGFpbEJ5RmlsdGVyKFxuICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKCdjb2RlJywgT3BlcmF0b3IuZXF1YWwsIHdvcmtmbG93Q29kZSlcbiAgICAgICAgICAgIF1cbiAgICAgICAgKSkuZGF0YTtcbiAgICAgICAgaWYgKHdvcmtmbG93U2V0dGluZyA9PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICAgICAgY29uc3QganNvblNjaGVtYSA9IDxhbnk+d29ya2Zsb3dTZXR0aW5nWydkYXRhJ107XG4gICAgICAgIHdvcmtmbG93U2V0dGluZy5kYXRhID0gSlNPTi5wYXJzZShqc29uU2NoZW1hKTtcbiAgICAgICAgY29uc3Qgc3RhdGVNYWNoaW5lRGF0YSA9IHdvcmtmbG93U2V0dGluZy5kYXRhO1xuICAgICAgICBzdGF0ZU1hY2hpbmVEYXRhLmFjdGlvbnMgPSB7fTtcbiAgICAgICAgc3RhdGVNYWNoaW5lRGF0YS5tYWNoaW5lcy5mb3JFYWNoKG1hY2hpbmUgPT4ge1xuICAgICAgICAgICAgc3RhdGVNYWNoaW5lRGF0YS5hY3Rpb25zW21hY2hpbmUuY29kZV0gPSBbXTtcbiAgICAgICAgICAgIHN0YXRlTWFjaGluZURhdGEuY29ubmVjdGlvbnMuZm9yRWFjaChjb25uID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY29ubi5zb3VyY2UgPT0gbWFjaGluZS5pZCkge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZU1hY2hpbmVEYXRhLmFjdGlvbnNbbWFjaGluZS5jb2RlXS5wdXNoKGNvbm4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHdvcmtmbG93U2V0dGluZztcbiAgICB9XG5cbiAgICBnZXRBbGxBc3luYygpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0QXN5bmNgO1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0R2V0KHVybCk7XG4gICAgfVxuXG4gICAgcG9zdChpdGVtOiBhbnksIHBsdXNVcmw6IHN0cmluZyA9ICcnKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCB1cmkgPSBwbHVzVXJsID8gYCR7dGhpcy5zZXJ2aWNlVXJpfS8ke3BsdXNVcmx9YCA6IHRoaXMuc2VydmljZVVyaTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHBcbiAgICAgICAgICAgIC5wb3N0PFJlc3BvbnNlUmVzdWx0Pih1cmksIGl0ZW0pXG4gICAgICAgICAgICAucGlwZShjYXRjaEVycm9yKGVyciA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKSkudG9Qcm9taXNlKCk7XG4gICAgfVxuXG4gICAgcHV0KGlkOiBzdHJpbmcsIGl0ZW06IGFueSwgcGx1c1VybDogc3RyaW5nID0gJycpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IHVybCA9IHBsdXNVcmwgPyBgJHt0aGlzLnNlcnZpY2VVcml9LyR7cGx1c1VybH0vJHtpZH1gIDogYCR7dGhpcy5zZXJ2aWNlVXJpfS8ke2lkfWA7XG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLnB1dDxSZXNwb25zZVJlc3VsdD4odXJsLCBpdGVtKS50b1Byb21pc2UoKTtcbiAgICB9XG5cbiAgICBkZWxldGUoaWQ6IG51bWJlciwgcGx1c1VybDogc3RyaW5nID0gJycpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IHVybCA9IHBsdXNVcmwgPyBgJHt0aGlzLnNlcnZpY2VVcml9LyR7cGx1c1VybH0vJHtpZH1gIDogYCR7dGhpcy5zZXJ2aWNlVXJpfS8ke2lkfWA7XG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLmRlbGV0ZTxSZXNwb25zZVJlc3VsdD4odXJsKS50b1Byb21pc2UoKTtcbiAgICB9XG5cbiAgICBkZWxldGVCeUlkKGlkOiBzdHJpbmcpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vJHtpZH1gO1xuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5kZWxldGU8UmVzcG9uc2VSZXN1bHQ+KHVybCkucGlwZShcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpXG4gICAgICAgICkudG9Qcm9taXNlKCk7XG4gICAgfVxuXG4gICAgZGVsZXRlTWFueShsc3RJZDogc3RyaW5nLCBwbHVzVXJsOiBzdHJpbmcgPSAnJyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgdXJsID0gcGx1c1VybCA/IGAke3RoaXMuc2VydmljZVVyaX0vRGVsZXRlTWFueUFzeW5jLyR7cGx1c1VybH0vJHtsc3RJZH1gIDogYCR7dGhpcy5zZXJ2aWNlVXJpfS9EZWxldGVNYW55QXN5bmMvJHtsc3RJZH1gO1xuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5kZWxldGU8UmVzcG9uc2VSZXN1bHQ+KHVybCkudG9Qcm9taXNlKCk7XG4gICAgfVxuXG4gICAgZGVmYXVsdEdldChhcGlVcmwsIG9wdGlvbnM/OiBIdHRwT3B0aW9ucyk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZ2V0PFJlc3BvbnNlUmVzdWx0PihhcGlVcmwsIG9wdGlvbnMpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBzaGFyZVJlcGxheSh0aGlzLlJFUExBWV9DT1VOVCksXG4gICAgICAgICAgICAgICAgcmV0cnkodGhpcy5SRVRSWV9DT1VOVCksXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSlcbiAgICAgICAgICAgICkudG9Qcm9taXNlKCk7XG4gICAgfVxuXG4gICAgZ2V0SWdub3JlQ2xpZW50Q2FjaGUoYXBpVXJsKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgaGVhZGVyczogbmV3IEh0dHBIZWFkZXJzKHsgJ0NhY2hlLUNvbnRyb2wnOiAnbm8tY2FjaGUnIH0pLFxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLmdldDxSZXNwb25zZVJlc3VsdD4oYXBpVXJsLCBvcHRpb25zKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgc2hhcmVSZXBsYXkodGhpcy5SRVBMQVlfQ09VTlQpLFxuICAgICAgICAgICAgICAgIHJldHJ5KHRoaXMuUkVUUllfQ09VTlQpLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpXG4gICAgICAgICAgICApLnRvUHJvbWlzZSgpO1xuICAgIH1cblxuICAgIGRlZmF1bHRQb3N0KGFwaVVybCwgZGF0YSwgb3B0aW9ucz86IEh0dHBPcHRpb25zKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5wb3N0PFJlc3BvbnNlUmVzdWx0PihhcGlVcmwsIGRhdGEsIG9wdGlvbnMpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBzaGFyZVJlcGxheSh0aGlzLlJFUExBWV9DT1VOVCksXG4gICAgICAgICAgICAgICAgcmV0cnkodGhpcy5SRVRSWV9DT1VOVCksXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSlcbiAgICAgICAgICAgICkudG9Qcm9taXNlKCk7XG4gICAgfVxuXG4gICAgZGVmYXVsdFB1dChhcGlVcmwsIGRhdGEpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLnB1dDxSZXNwb25zZVJlc3VsdD4oYXBpVXJsLCBkYXRhKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgc2hhcmVSZXBsYXkodGhpcy5SRVBMQVlfQ09VTlQpLFxuICAgICAgICAgICAgICAgIHJldHJ5KHRoaXMuUkVUUllfQ09VTlQpLFxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpXG4gICAgICAgICAgICApLnRvUHJvbWlzZSgpO1xuICAgIH1cblxuICAgIGRlZmF1bHREZWxldGUoYXBpVXJsKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5kZWxldGU8UmVzcG9uc2VSZXN1bHQ+KGFwaVVybClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHNoYXJlUmVwbGF5KHRoaXMuUkVQTEFZX0NPVU5UKSxcbiAgICAgICAgICAgICAgICByZXRyeSh0aGlzLlJFVFJZX0NPVU5UKSxcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKVxuICAgICAgICAgICAgKS50b1Byb21pc2UoKTtcbiAgICB9XG5cbiAgICBnZXRGaWxlQnlHZXRSZXF1ZXN0KHVybCwgZmlsZU5hbWUpIHtcbiAgICAgICAgdGhpcy5zYXZlRmlsZUZyb21PYnNlcnZhYmxlKFxuICAgICAgICAgICAgdGhpcy5faHR0cC5nZXQodXJsLCB7IHJlc3BvbnNlVHlwZTogJ2Jsb2InIGFzICdqc29uJyB9KSxcbiAgICAgICAgICAgIGZpbGVOYW1lXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgZ2V0RmlsZUJ5UG9zdFJlcXVlc3QodXJsLCBkYXRhOiBhbnksIGZpbGVOYW1lKSB7XG4gICAgICAgIHRoaXMuc2F2ZUZpbGVGcm9tT2JzZXJ2YWJsZShcbiAgICAgICAgICAgIHRoaXMuX2h0dHAucG9zdCh1cmwsIGRhdGEsIHsgcmVzcG9uc2VUeXBlOiAnYmxvYicgYXMgJ2pzb24nIH0pLFxuICAgICAgICAgICAgZmlsZU5hbWVcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNhdmVGaWxlRnJvbU9ic2VydmFibGUob2I6IE9ic2VydmFibGU8YW55PiwgZmlsZU5hbWU6IHN0cmluZykge1xuICAgICAgICBvYi50b1Byb21pc2UoKS50aGVuKHJlcyA9PiB7XG4gICAgICAgICAgICBGaWxlU2F2ZXIuc2F2ZUFzKHJlcywgZmlsZU5hbWUpO1xuICAgICAgICB9KS5jYXRjaChhc3luYyBlcnIgPT4ge1xuICAgICAgICAgICAgY29uc3QgZXJyb3JUZXh0ID0gYXdhaXQgZXJyLmVycm9yLnRleHQoKTtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3JUZXh0KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0RW50aXR5TWV0YWRhdGEoKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCBhcGlVcmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L0dldEVudGl0eU1ldGFkYXRhYDtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2h0dHAuZ2V0PFJlc3BvbnNlUmVzdWx0PihhcGlVcmwpXG4gICAgICAgICAgICAucGlwZShjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKSlcbiAgICAgICAgICAgIC50b1Byb21pc2UoKTtcbiAgICB9XG5cbiAgICBzYXZlRW50aXR5TWV0YWRhdGEoZGF0YSk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgYXBpVXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9TYXZlRW50aXR5TWV0YWRhdGFgO1xuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5wb3N0PFJlc3BvbnNlUmVzdWx0PihhcGlVcmwsIGRhdGEpXG4gICAgICAgICAgICAucGlwZShjYXRjaEVycm9yKChlcnI6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB0aGlzLmhhbmRsZUVycm9yKGVyciwgdGhpcy5faW5qZWN0b3IpKSlcbiAgICAgICAgICAgIC50b1Byb21pc2UoKTtcbiAgICB9XG5cbiAgICBjaGFuZ2VNZXRhZGF0YVN0YXR1cyhpZDogbnVtYmVyLCBtZXRhZGF0YVR5cGU6IHN0cmluZykge1xuICAgICAgICBjb25zdCBhcGlVcmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L2NoYW5nZU1ldGFkYXRhU3RhdHVzP2lkPSR7aWR9Jm1ldGFkYXRhU3RhdHVzVHlwZT0ke21ldGFkYXRhVHlwZX1gO1xuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5wb3N0PFJlc3BvbnNlUmVzdWx0PihhcGlVcmwsIHt9KS5waXBlKGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpKVxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpO1xuICAgIH1cblxuICAgIHNhdmVBbmRDaGFuZ2VNZXRhZGF0YVN0YXR1cyhpZDogbnVtYmVyLCBtZXRhZGF0YVR5cGU6IHN0cmluZywgZGF0YTogYW55KSB7XG4gICAgICAgIGNvbnN0IGFwaVVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vc2F2ZUFuZENoYW5nZU1ldGFkYXRhU3RhdHVzP2lkPSR7aWR9Jm1ldGFkYXRhU3RhdHVzVHlwZT0ke21ldGFkYXRhVHlwZX1gO1xuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5wb3N0PFJlc3BvbnNlUmVzdWx0PihhcGlVcmwsIGRhdGEpLnBpcGUoY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSkpXG4gICAgICAgICAgICAudG9Qcm9taXNlKCk7XG4gICAgfVxuXG4gICAgZ2V0RW50aXR5UGVybWlzc2lvbigpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IGFwaVVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0RW50aXR5UGVybWlzc2lvbmA7XG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLmdldDxSZXNwb25zZVJlc3VsdD4oYXBpVXJsKVxuICAgICAgICAgICAgLnBpcGUoY2F0Y2hFcnJvcigoZXJyOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4gdGhpcy5oYW5kbGVFcnJvcihlcnIsIHRoaXMuX2luamVjdG9yKSkpXG4gICAgICAgICAgICAudG9Qcm9taXNlKCk7XG4gICAgfVxuXG4gICAgc2F2ZUVudGl0eVBlcm1pc3Npb24oZGF0YSk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgYXBpVXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9TYXZlRW50aXR5UGVybWlzc2lvbmA7XG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLnBvc3Q8UmVzcG9uc2VSZXN1bHQ+KGFwaVVybCwgZGF0YSlcbiAgICAgICAgICAgIC5waXBlKGNhdGNoRXJyb3IoKGVycjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHRoaXMuaGFuZGxlRXJyb3IoZXJyLCB0aGlzLl9pbmplY3RvcikpKVxuICAgICAgICAgICAgLnRvUHJvbWlzZSgpO1xuICAgIH1cblxuICAgIHVwZGF0ZUVudGl0eVBlcm1pc3Npb24oaWQ6IHN0cmluZywgaXRlbTogYW55KTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9L1VwZGF0RW50aXR5UGVybWlzc2lvbi8ke2lkfWA7XG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLnB1dDxSZXNwb25zZVJlc3VsdD4odXJsLCBpdGVtKS50b1Byb21pc2UoKTtcbiAgICB9XG5cbiAgICBkZWxldGVFbnRpdHlQZXJtaXNzaW9uKGlkOiBudW1iZXIpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vRGVsZXRlRW50aXR5UGVybWlzc2lvbi8ke2lkfWA7XG4gICAgICAgIHJldHVybiB0aGlzLl9odHRwLmRlbGV0ZTxSZXNwb25zZVJlc3VsdD4odXJsKS50b1Byb21pc2UoKTtcbiAgICB9XG5cbiAgICBnZXRXZkhpc3RvcnlCeUVudGl0eUl0ZW0oaWQ6IG51bWJlcik6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgdXJsID0gYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRXZkhpc3RvcnlCeUVudGl0eUl0ZW0vJHtpZH1gO1xuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5nZXQ8UmVzcG9uc2VSZXN1bHQ+KHVybCkudG9Qcm9taXNlKCk7XG4gICAgfVxuXG4gICAgZ2V0RGljU3RhdHVzTmhvbVRyYW5nVGhhaShzdGF0dXNlczogc3RyaW5nW10pOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3RoaXMuc2VydmljZVVyaX0vR2V0RGljU3RhdHVzTmhvbVRyYW5nVGhhaWA7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KHVybCwge1xuICAgICAgICAgICAgbGlzdFN0cmluZ1ZhbHVlOiBzdGF0dXNlc1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB2YWxpZGF0ZVByb2Nlc3NXb3JrZmxvdyhpZDogbnVtYmVyLCBhY3Rpb25Db2RlOiBzdHJpbmcsIGRhdGE6IGFueSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L1ZhbGlkYXRlUHJvY2Vzc1dGLyR7aWR9LyR7YWN0aW9uQ29kZX1gLCBkYXRhKTtcbiAgICB9XG5cbiAgICBwcm9jZXNzV29ya2Zsb3coaWQ6IG51bWJlciwgYWN0aW9uQ29kZTogc3RyaW5nLCBkYXRhOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9Qcm9jZXNzV29ya2Zsb3cvJHtpZH0vJHthY3Rpb25Db2RlfWAsIGRhdGEpO1xuICAgIH1cblxuICAgIGdldFVzZXJJblByb2Nlc3NGb3JtKHdvcmtmbG93Q29kZTogc3RyaW5nLCBzdGF0ZUNvZGU6IHN0cmluZywgYWN0aW9uQ29kZTogc3RyaW5nLCBpdGVtSWQ6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L0dldFVzZXJJblByb2Nlc3NGb3JtQmFzZS8ke3dvcmtmbG93Q29kZX0vJHtzdGF0ZUNvZGV9LyR7YWN0aW9uQ29kZX0vJHtpdGVtSWR9YCwge30pO1xuICAgIH1cblxuICAgIGhhbmRsZUVycm9yKGVycm9yOiBhbnksIGluamVjdG9yOiBJbmplY3Rvcikge1xuICAgICAgICBjb25zdCBjb21tb25TZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KENvbW1vblNlcnZpY2UpO1xuICAgICAgICByZXR1cm4gY29tbW9uU2VydmljZS5oYW5kbGVFcnJvcihlcnJvciwgaW5qZWN0b3IpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBzYXZlQXNFeGNlbEZpbGUoYnVmZmVyOiBhbnksIGZpbGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGF0YTogQmxvYiA9IG5ldyBCbG9iKFtidWZmZXJdLCB7XG4gICAgICAgICAgICB0eXBlOiBFWENFTF9UWVBFXG4gICAgICAgIH0pO1xuICAgICAgICBGaWxlU2F2ZXIuc2F2ZUFzKGRhdGEsIGZpbGVOYW1lICsgJ18nICsgbmV3IERhdGUoKS5nZXRUaW1lKCkgKyBFWENFTF9FWFRFTlNJT04pO1xuICAgIH1cblxuICAgIHB1dFdpdGhQbHVzVXJsKGlkOiBzdHJpbmcsIGl0ZW06IGFueSwgcGx1c1VybDogc3RyaW5nKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnNlcnZpY2VVcml9LyR7aWR9LyR7cGx1c1VybH1gO1xuICAgICAgICByZXR1cm4gdGhpcy5faHR0cC5wdXQ8UmVzcG9uc2VSZXN1bHQ+KHVybCwgaXRlbSkudG9Qcm9taXNlKCk7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0QnlGaWVsZChmaWVsZDogc3RyaW5nLCBhcnJWYWx1ZSwgZ2V0RmllbGRzID0gJycsIHNvcnRGaWVsZCA9IG51bGwsIHNvcnREaXIgPSBudWxsKTogUHJvbWlzZTxhbnlbXT4ge1xuICAgICAgICBhcnJWYWx1ZSA9IChhcnJWYWx1ZSB8fCBbXSkuZmlsdGVyKCh2YWwsIGluZCwgYXJyKSA9PiAodmFsID09PSAwIHx8IHZhbCkgJiYgYXJyLmluZGV4T2YodmFsKSA9PT0gaW5kKTtcblxuICAgICAgICBpZiAoIWFyclZhbHVlIHx8ICFhcnJWYWx1ZS5sZW5ndGgpIHJldHVybiBbXTtcblxuICAgICAgICBjb25zdCBhcnJGaWx0ZXIgPSBbbmV3IEZpbHRlcih7XG4gICAgICAgICAgICBmaWVsZCxcbiAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5pbixcbiAgICAgICAgICAgIHZhbHVlOiBhcnJWYWx1ZS50b1N0cmluZygpXG4gICAgICAgIH0pXTtcblxuICAgICAgICBjb25zdCBhcnJTb3J0ID0gW107XG4gICAgICAgIGlmIChzb3J0RmllbGQpIHtcbiAgICAgICAgICAgIGFyclNvcnQucHVzaChuZXcgU29ydCh7XG4gICAgICAgICAgICAgICAgZmllbGQ6IHNvcnRGaWVsZCxcbiAgICAgICAgICAgICAgICBkaXI6IHNvcnREaXIgfCAxXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhcnJSZXN1bHQgPSAoYXdhaXQgdGhpcy5nZXRBbGwoYXJyRmlsdGVyLCBnZXRGaWVsZHMsIGFyclNvcnQpKS5kYXRhO1xuICAgICAgICByZXR1cm4gKGFyclJlc3VsdCB8fCBbXSk7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0QnlGaWVsZFRvRGljKGZpZWxkOiBzdHJpbmcsIGFyclZhbHVlLCBnZXRGaWVsZHMsIGtleUZpZWxkID0gbnVsbCwgdmFsdWVGaWVsZCA9IG51bGwpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBjb25zdCBhcnJSZXN1bHQgPSBhd2FpdCB0aGlzLmdldEJ5RmllbGQoZmllbGQsIGFyclZhbHVlLCBnZXRGaWVsZHMpO1xuICAgICAgICBjb25zdCByc0RpYyA9IHt9O1xuICAgICAgICBpZiAoIWFyclJlc3VsdC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiByc0RpYztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChrZXlGaWVsZCkge1xuICAgICAgICAgICAga2V5RmllbGQgPSBmaWVsZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh2YWx1ZUZpZWxkKSB7XG4gICAgICAgICAgICBhcnJSZXN1bHQuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICByc0RpY1tpdGVtW2tleUZpZWxkXV0gPSBpdGVtW3ZhbHVlRmllbGRdO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhcnJSZXN1bHQuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICByc0RpY1tpdGVtW2tleUZpZWxkXV0gPSBpdGVtO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcnNEaWM7XG4gICAgfVxuXG4gICAgbmV3RmlsdGVyKGZpZWxkOiBzdHJpbmcsIG9wZXJhdG9yOiBPcGVyYXRvciwgdmFsdWU6IGFueSwgdmFsdWVJc0ZpZWxkOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGaWx0ZXIoe1xuICAgICAgICAgICAgZmllbGQsIG9wZXJhdG9yLFxuICAgICAgICAgICAgdmFsdWU6IEpTT04uc3RyaW5naWZ5KHZhbHVlKSxcbiAgICAgICAgICAgIHZhbHVlSXNGaWVsZFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZXdGaWx0ZXJWNChmaWVsZDogc3RyaW5nLCBvcGVyYXRvcjogT3BlcmF0b3IsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGaWx0ZXIoe1xuICAgICAgICAgICAgZmllbGQsIG9wZXJhdG9yLFxuICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmV3QmluZGluZ0ZpbHRlcihjb2x1bW46IHN0cmluZywgb3BlcmF0b3I6IE9wZXJhdG9yLCBzb3VyY2VGaWVsZDogc3RyaW5nLCBzdWJGaWVsZD86IHN0cmluZykge1xuICAgICAgICByZXR1cm4gbmV3IEZpbHRlcih7XG4gICAgICAgICAgICBmaWVsZDogY29sdW1uLFxuICAgICAgICAgICAgb3BlcmF0b3IsXG4gICAgICAgICAgICBzb3VyY2VGaWVsZCxcbiAgICAgICAgICAgIHN1YkZpZWxkXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFzeW5jIGdldERhdGFUcmluaEt5KGl0ZW06IGFueSwgcm93RGF0YT86IGFueSk6IFByb21pc2U8YW55W10+IHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGV4cG9ydFRvUGRmKGlkOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L0V4cG9ydFRvUGRmLyR7aWR9YCwge1xuICAgICAgICAgICAgc3RyaW5nVmFsdWU6IGNvbnRlbnRcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc3RhcnRXb3JrZmxvdyhpZDogc3RyaW5nLCB3b3JrZmxvd0NvZGU6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L1N0YXJ0V29ya2Zsb3dCYXNlLyR7d29ya2Zsb3dDb2RlfS8ke2lkfWAsIHt9KTtcbiAgICB9XG5cbiAgICBnZXRBY3Rpb25BbGxvdyhpZDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vR2V0QWN0aW9uQWxsb3cvJHtpZH1gLCB7fSk7XG4gICAgfVxuXG4gICAgZ2V0QWN0aW9uQWxsb3dJblN0YXJ0KHdvcmtmbG93Q29kZTogc3RyaW5nLCBzZXJ2aWNlQ29kZTogc3RyaW5nID0gJycpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRBY3Rpb25BbGxvd0luU3RhcnQvJHt3b3JrZmxvd0NvZGV9P3NlcnZpY2VDb2RlPSR7c2VydmljZUNvZGV9YCwge30pO1xuICAgIH1cblxuICAgIHZhbGlkYXRlQ2hhbmdlU3RhdGUoaXRlbVdvcmtmbG93SGlzdG9yeTogYW55KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vVmFsaWRhdGVDaGFuZ2VTdGF0ZUJhc2VgLCBpdGVtV29ya2Zsb3dIaXN0b3J5KTtcbiAgICB9XG5cbiAgICBpbnNlcnRCdWxrQXN5bmMobW9kZWxzOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9JbnNlcnRCdWxrQXN5bmNgLCBtb2RlbHMpO1xuICAgIH1cblxuICAgIHVwZGF0ZUJ1bGtBc3luYyhtb2RlbHM6IGFueSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L1VwZGF0ZUJ1bGtBc3luY2AsIG1vZGVscyk7XG4gICAgfVxuXG4gICAgYXV0b05leHRTdGVwKGl0ZW1JZDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vQXV0b05leHRTdGVwLyR7aXRlbUlkfWAsIHt9KTtcbiAgICB9XG5cbiAgICBjaGFuZ2VTdGF0ZUJhc2VCeUFjdGlvbihpdGVtSWQ6IHN0cmluZywgYWN0aW9uQ29kZTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vQ2hhbmdlU3RhdGVCYXNlQnlBY3Rpb24vJHtpdGVtSWR9LyR7YWN0aW9uQ29kZX1gLCB7fSk7XG4gICAgfVxuXG4gICAgY2hhbmdlU3RhdGUoaXRlbVdvcmtmbG93SGlzdG9yeTogYW55KSB7XG4gICAgICAgIGlmIChpdGVtV29ya2Zsb3dIaXN0b3J5KSB7XG4gICAgICAgICAgICBpZiAoaXRlbVdvcmtmbG93SGlzdG9yeS5kZXBhcnRtZW50SWRzKSB7XG4gICAgICAgICAgICAgICAgaXRlbVdvcmtmbG93SGlzdG9yeS5kb25WaUlkcyA9IGl0ZW1Xb3JrZmxvd0hpc3RvcnkuZGVwYXJ0bWVudElkcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpdGVtV29ya2Zsb3dIaXN0b3J5LmRlcGFydG1lbnRWaWV3SWRzKSB7XG4gICAgICAgICAgICAgICAgaXRlbVdvcmtmbG93SGlzdG9yeS5kb25WaVZpZXdJZHMgPSBpdGVtV29ya2Zsb3dIaXN0b3J5LmRlcGFydG1lbnRWaWV3SWRzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vQ2hhbmdlU3RhdGVCYXNlYCwgaXRlbVdvcmtmbG93SGlzdG9yeSk7XG4gICAgfVxuICAgIGNodXllblh1THlCYXNlKGl0ZW1Xb3JrZmxvd0hpc3Rvcnk6IGFueSkge1xuICAgICAgICBpZiAoaXRlbVdvcmtmbG93SGlzdG9yeSkge1xuICAgICAgICAgICAgaWYgKGl0ZW1Xb3JrZmxvd0hpc3RvcnkuZGVwYXJ0bWVudElkcykge1xuICAgICAgICAgICAgICAgIGl0ZW1Xb3JrZmxvd0hpc3RvcnkuZG9uVmlJZHMgPSBpdGVtV29ya2Zsb3dIaXN0b3J5LmRlcGFydG1lbnRJZHM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXRlbVdvcmtmbG93SGlzdG9yeS5kZXBhcnRtZW50Vmlld0lkcykge1xuICAgICAgICAgICAgICAgIGl0ZW1Xb3JrZmxvd0hpc3RvcnkuZG9uVmlWaWV3SWRzID0gaXRlbVdvcmtmbG93SGlzdG9yeS5kZXBhcnRtZW50Vmlld0lkcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L0NodXllblh1THlCYXNlYCwgaXRlbVdvcmtmbG93SGlzdG9yeSk7XG4gICAgfVxuXG4gICAgY2hvWUtpZW4oaXRlbVdvcmtmbG93SGlzdG9yeTogYW55KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vQ2hvWUtpZW5CYXNlYCwgaXRlbVdvcmtmbG93SGlzdG9yeSk7XG4gICAgfVxuXG4gICAgZ2V0UGVybWlzc2lvblNoYXJlZEJ5SXRlbUlkcyhpZHM6IHN0cmluZ1tdKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vR2V0UGVybWlzc2lvblNoYXJlZEJ5SXRlbUlkc2AsIHtcbiAgICAgICAgICAgIGxpc3RHdWlkVmFsdWU6IGlkc1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRTaGFyZWRLZXkoZGF0YTogTW9kZWxTaGFyZUxpbmtCeVBlcm1pc3Npb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9HZXRTaGFyZWRLZXlJdGVtQmFzZWAsIGRhdGEpO1xuICAgIH1cblxuICAgIGRlbGV0ZUxpbmtTaGFyaW5nKGlkczogc3RyaW5nW10pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9EZWxldGVMaW5rU2hhcmluZ2AsIHtcbiAgICAgICAgICAgIGxpc3RHdWlkVmFsdWU6IGlkc1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICByb2xsYmFjayhyb3dEYXRhLCBsc3RPYmplY3ROYW1lOiBzdHJpbmdbXSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L1JvbGxiYWNrQmFzZS8ke3Jvd0RhdGEuX193b3JrZmxvd0NvZGV9LyR7cm93RGF0YS5pZH1gLCB7XG4gICAgICAgICAgICBMaXN0U3RyaW5nVmFsdWU6IGxzdE9iamVjdE5hbWVcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcm9sbGJhY2tCeUhpc3RvcnkoaXRlbUlkOiBzdHJpbmcsIGlkSGlzdG9yeTogc3RyaW5nLCBsc3RPYmplY3ROYW1lOiBzdHJpbmdbXSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L1JvbGxiYWNrQmFzZUJ5SGlzdG9yeS8ke2l0ZW1JZH0vJHtpZEhpc3Rvcnl9YCwge1xuICAgICAgICAgICAgTGlzdFN0cmluZ1ZhbHVlOiBsc3RPYmplY3ROYW1lXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJvbGxiYWNrIHF1eSB0csOsbmggduG7gSB0cuG6oW5nIHRow6FpIHRyxrDhu5tjXG4gICAgICogQHBhcmFtIGlkIGlkIGPhu6dhIGLhuqNuIGdoaVxuICAgICAqL1xuICAgIHJvbGxiYWNrV29ya2Zsb3coaWQ6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L1JvbGxiYWNrV29ya2Zsb3cvJHtpZH1gLCB7fSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlIHRy4bqhbmcgdGjDoWkgd29ya2Zsb3cgY29yZSBzYW5nIMSRw6MgZHV54buHdCBxdXnhur90IMSR4buLbmhcbiAgICAgKi9cbiAgICB1cGRhdGVEYUR1eWV0UXV5ZXREaW5oKGlkOiBzdHJpbmcsIGlkUXV5ZXREaW5oOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9VcGRhdGVEYUR1eWV0UXV5ZXREaW5oLyR7aWR9YCwge1xuICAgICAgICAgICAgZ3VpZFZhbHVlOiBpZFF1eWV0RGluaFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB1cGRhdGVNYVBoYW5DYXBCYXNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UG9zdChgJHt0aGlzLnNlcnZpY2VVcml9L1VwZGF0ZU1hUGhhbkNhcEJhc2VgLCB7fSk7XG4gICAgfVxuXG4gICAgc29ydEdyb3VwTGFzdE1vZGVsQmFzZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdFBvc3QoYCR7dGhpcy5zZXJ2aWNlVXJpfS9VcGRhdGVUaHVUaHVHcm91cGAsIHt9KTtcbiAgICB9XG5cbiAgICBnZXRUcmVlRGF0YUJhc2UoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vR2V0VHJlZURhdGFCYXNlYCwge30pO1xuICAgIH1cblxuICAgIHJlb3JkZXJEYXRhQnlGaWVsZChkYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQb3N0KGAke3RoaXMuc2VydmljZVVyaX0vUmVvcmRlckRhdGFCeUZpZWxkYCwgZGF0YSk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgSHR0cE9wdGlvbnMge1xuICAgIGhlYWRlcnM/OiBIdHRwSGVhZGVycyB8IHtcbiAgICAgICAgW2hlYWRlcjogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW107XG4gICAgfTtcbiAgICBvYnNlcnZlPzogJ2JvZHknO1xuICAgIHBhcmFtcz86IEh0dHBQYXJhbXMgfCB7XG4gICAgICAgIFtwYXJhbTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW107XG4gICAgfTtcbiAgICByZXBvcnRQcm9ncmVzcz86IGJvb2xlYW47XG4gICAgcmVzcG9uc2VUeXBlPzogJ2pzb24nO1xuICAgIHdpdGhDcmVkZW50aWFscz86IGJvb2xlYW47XG59XG4iXX0=
|