@bikdotai/bik-component-library 0.0.777-beta.1 → 0.0.777-beta.12

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.
Files changed (93) hide show
  1. package/dist/cjs/assets/icons/magic-line.svg.js +1 -0
  2. package/dist/cjs/assets/icons/rewind.svg.js +1 -0
  3. package/dist/cjs/assets/icons/thumbs_down.svg.js +1 -0
  4. package/dist/cjs/assets/icons/thumbs_up.svg.js +1 -0
  5. package/dist/cjs/components/TablePagination/TablePagination.d.ts +0 -1
  6. package/dist/cjs/components/TablePagination/TablePagination.js +1 -1
  7. package/dist/cjs/components/WhatsAppTextEditor/AIRephrase.styled.d.ts +10 -0
  8. package/dist/cjs/components/WhatsAppTextEditor/AIRephrase.styled.js +1 -0
  9. package/dist/cjs/components/WhatsAppTextEditor/AIRephraseButton.d.ts +17 -0
  10. package/dist/cjs/components/WhatsAppTextEditor/AIRephraseButton.js +1 -0
  11. package/dist/cjs/components/WhatsAppTextEditor/BorderAnimation.d.ts +11 -0
  12. package/dist/cjs/components/WhatsAppTextEditor/BorderAnimation.js +1 -0
  13. package/dist/cjs/components/WhatsAppTextEditor/CustomEditor.styled.d.ts +13 -0
  14. package/dist/cjs/components/WhatsAppTextEditor/CustomEditor.styled.js +1 -1
  15. package/dist/cjs/components/WhatsAppTextEditor/WhatsAppTextEditor.d.ts +118 -3
  16. package/dist/cjs/components/WhatsAppTextEditor/WhatsAppTextEditor.js +5 -1
  17. package/dist/cjs/components/WhatsAppTextEditor/WhatsAppTextEditorHeader.d.ts +42 -1
  18. package/dist/cjs/components/WhatsAppTextEditor/WhatsAppTextEditorHeader.js +1 -1
  19. package/dist/cjs/components/WhatsAppTextEditor/ai/actionRegistry.d.ts +14 -0
  20. package/dist/cjs/components/WhatsAppTextEditor/ai/actionRegistry.js +1 -0
  21. package/dist/cjs/components/WhatsAppTextEditor/ai/aiTag.d.ts +42 -0
  22. package/dist/cjs/components/WhatsAppTextEditor/ai/aiTag.js +1 -0
  23. package/dist/cjs/components/WhatsAppTextEditor/ai/api.d.ts +22 -0
  24. package/dist/cjs/components/WhatsAppTextEditor/ai/api.js +1 -0
  25. package/dist/cjs/components/alerts/Alert.styled.js +1 -0
  26. package/dist/cjs/components/feature-announcements/MajorUpdatePopup.js +1 -1
  27. package/dist/cjs/components/feature-announcements/MinorUpdatePopup.js +1 -1
  28. package/dist/cjs/components/multi-level-dropdown/GroupedMenuList.d.ts +4 -0
  29. package/dist/cjs/components/multi-level-dropdown/GroupedMenuList.js +1 -1
  30. package/dist/cjs/components/multi-level-dropdown/MenuItem.d.ts +3 -0
  31. package/dist/cjs/components/multi-level-dropdown/MenuItem.js +1 -1
  32. package/dist/cjs/components/multi-level-dropdown/MenuList.d.ts +4 -0
  33. package/dist/cjs/components/multi-level-dropdown/MenuList.js +1 -1
  34. package/dist/cjs/components/multi-level-dropdown/MultiLevelDropdown.js +1 -1
  35. package/dist/cjs/components/multi-level-dropdown/type.d.ts +3 -0
  36. package/dist/cjs/components/radioButton/RadioButton.d.ts +1 -0
  37. package/dist/cjs/components/radioButton/RadioButton.js +1 -1
  38. package/dist/cjs/components/tag/Tag.d.ts +1 -1
  39. package/dist/cjs/components/tag/Tag.js +1 -1
  40. package/dist/cjs/components/tag/Tag.stories.d.ts +5 -5
  41. package/dist/cjs/components/tag/Tag.styled.d.ts +3 -0
  42. package/dist/cjs/components/tag/Tag.styled.js +1 -1
  43. package/dist/cjs/components/tag/model.d.ts +15 -0
  44. package/dist/cjs/components/template-preview/TemplatePreview.js +1 -1
  45. package/dist/cjs/helpers/BaseWhatsappContentLang.helper.js +1 -1
  46. package/dist/cjs/index.js +1 -1
  47. package/dist/esm/assets/icons/magic-line.svg.js +1 -0
  48. package/dist/esm/assets/icons/rewind.svg.js +1 -0
  49. package/dist/esm/assets/icons/thumbs_down.svg.js +1 -0
  50. package/dist/esm/assets/icons/thumbs_up.svg.js +1 -0
  51. package/dist/esm/components/TablePagination/TablePagination.d.ts +0 -1
  52. package/dist/esm/components/TablePagination/TablePagination.js +1 -1
  53. package/dist/esm/components/WhatsAppTextEditor/AIRephrase.styled.d.ts +10 -0
  54. package/dist/esm/components/WhatsAppTextEditor/AIRephrase.styled.js +1 -0
  55. package/dist/esm/components/WhatsAppTextEditor/AIRephraseButton.d.ts +17 -0
  56. package/dist/esm/components/WhatsAppTextEditor/AIRephraseButton.js +1 -0
  57. package/dist/esm/components/WhatsAppTextEditor/BorderAnimation.d.ts +11 -0
  58. package/dist/esm/components/WhatsAppTextEditor/BorderAnimation.js +1 -0
  59. package/dist/esm/components/WhatsAppTextEditor/CustomEditor.styled.d.ts +13 -0
  60. package/dist/esm/components/WhatsAppTextEditor/CustomEditor.styled.js +1 -1
  61. package/dist/esm/components/WhatsAppTextEditor/WhatsAppTextEditor.d.ts +118 -3
  62. package/dist/esm/components/WhatsAppTextEditor/WhatsAppTextEditor.js +5 -1
  63. package/dist/esm/components/WhatsAppTextEditor/WhatsAppTextEditorHeader.d.ts +42 -1
  64. package/dist/esm/components/WhatsAppTextEditor/WhatsAppTextEditorHeader.js +1 -1
  65. package/dist/esm/components/WhatsAppTextEditor/ai/actionRegistry.d.ts +14 -0
  66. package/dist/esm/components/WhatsAppTextEditor/ai/actionRegistry.js +1 -0
  67. package/dist/esm/components/WhatsAppTextEditor/ai/aiTag.d.ts +42 -0
  68. package/dist/esm/components/WhatsAppTextEditor/ai/aiTag.js +1 -0
  69. package/dist/esm/components/WhatsAppTextEditor/ai/api.d.ts +22 -0
  70. package/dist/esm/components/WhatsAppTextEditor/ai/api.js +1 -0
  71. package/dist/esm/components/alerts/Alert.styled.js +9 -8
  72. package/dist/esm/components/feature-announcements/MajorUpdatePopup.js +1 -1
  73. package/dist/esm/components/feature-announcements/MinorUpdatePopup.js +1 -1
  74. package/dist/esm/components/multi-level-dropdown/GroupedMenuList.d.ts +4 -0
  75. package/dist/esm/components/multi-level-dropdown/GroupedMenuList.js +1 -1
  76. package/dist/esm/components/multi-level-dropdown/MenuItem.d.ts +3 -0
  77. package/dist/esm/components/multi-level-dropdown/MenuItem.js +1 -1
  78. package/dist/esm/components/multi-level-dropdown/MenuList.d.ts +4 -0
  79. package/dist/esm/components/multi-level-dropdown/MenuList.js +1 -1
  80. package/dist/esm/components/multi-level-dropdown/MultiLevelDropdown.js +1 -1
  81. package/dist/esm/components/multi-level-dropdown/type.d.ts +3 -0
  82. package/dist/esm/components/radioButton/RadioButton.d.ts +1 -0
  83. package/dist/esm/components/radioButton/RadioButton.js +1 -1
  84. package/dist/esm/components/tag/Tag.d.ts +1 -1
  85. package/dist/esm/components/tag/Tag.js +1 -1
  86. package/dist/esm/components/tag/Tag.stories.d.ts +5 -5
  87. package/dist/esm/components/tag/Tag.styled.d.ts +3 -0
  88. package/dist/esm/components/tag/Tag.styled.js +1 -1
  89. package/dist/esm/components/tag/model.d.ts +15 -0
  90. package/dist/esm/components/template-preview/TemplatePreview.js +1 -1
  91. package/dist/esm/helpers/BaseWhatsappContentLang.helper.js +1 -1
  92. package/dist/esm/index.js +1 -1
  93. package/package.json +1 -1
@@ -1 +1,5 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../../_virtual/_tslib.js"),t=require("react/jsx-runtime"),n=require("../../assets/icons/info.svg.js"),r=require("../../helpers/BaseWhatsappContentLang.helper.js"),l=require("react"),o=require("../../constants/Theme.js"),i=require("../TypographyStyle.js"),u=require("./CustomEditor.styled.js"),s=require("./WhatsAppTextEditorHeader.js");function c(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=c(l);const d="Character limit reached",v=new r.BaseWhatsappContentLangHelper,h={[s.EditorActionTypes.BOLD]:"*",[s.EditorActionTypes.ITALIC]:"_",[s.EditorActionTypes.STRIKETHROUGH]:"~"},p=a.default.forwardRef(((r,c)=>{var a,p,{onChange:f,onClickVariable:g,text:x,RightComponent:j,error:C,limit:m,onError:E,rows:T,actions:O}=r,y=e.__rest(r,["onChange","onClickVariable","text","RightComponent","error","limit","onError","rows","actions"]);const L=l.useRef(null);function S(e){const t=null==L?void 0:L.current;null!=t&&(t.selectionStart?(t.focus(),t.selectionEnd=e):t.focus())}function R(e){var t,n;let r=null!==(n=null===(t=L.current)||void 0===t?void 0:t.value)&&void 0!==n?n:"";if(L.current&&e){const t=L.current.selectionStart,n=L.current.selectionEnd,l=e;if(t===n)return b(l);{r=v.wrappWildcard(t,n,l,r);const e=v.getHTML(r);return L.current.value=r,{text:r,html:e}}}return{text:r,html:r}}function b(e){var t,n;let r=null!==(n=null===(t=L.current)||void 0===t?void 0:t.value)&&void 0!==n?n:"";if(L.current&&e){const t=L.current.selectionStart;if(t===L.current.selectionEnd)return H(e,t)}return{text:r,html:r}}function H(e,t){var n,r;let l=null!==(r=null===(n=L.current)||void 0===n?void 0:n.value)&&void 0!==r?r:"";l=l.slice(0,t)+e+l.slice(t);const o=v.getHTML(l);return L.current.value=l,{text:l,html:o}}return l.useImperativeHandle(c,(()=>({addTextOrWrap:R,addText:b,get(){var e,t;return null!==(t=null===(e=L.current)||void 0===e?void 0:e.value)&&void 0!==t?t:""},setCaretPosition:S}))),l.useEffect((()=>{if(null==L?void 0:L.current){L.current.value=x||"";const e=v.getHTML(x||"");null==f||f(x||"",e)}}),[x]),l.useEffect((()=>{var e,t;(null===(e=null==L?void 0:L.current)||void 0===e?void 0:e.value)&&m&&((null===(t=null==L?void 0:L.current)||void 0===t?void 0:t.value.length)>m?null==E||E(d):null==E||E(null!=C?C:""))}),[null===(a=null==L?void 0:L.current)||void 0===a?void 0:a.value.length]),t.jsxs(u.OuterContainer,{children:[t.jsxs(u.Container,Object.assign({isError:!!C},{children:[t.jsx(s.WhatsAppTextEditorHeader,{actions:O,ref:L,onActionSelect:function(e){if((null==h?void 0:h[e])&&L.current){const t=L.current.selectionStart;if(t===L.current.selectionEnd){H(null==h?void 0:h[e],t);const{text:n,html:r}=H(null==h?void 0:h[e],t);S(t+1),null==f||f(n,r)}else{const{text:t,html:n}=R(null==h?void 0:h[e]);null==f||f(t,n)}}},RightComponent:j,onEmojiClick:function(e){const{text:t,html:n}=b(e);null==f||f(t,n)}}),t.jsx(u.TextSpace,Object.assign({ref:L,onChange:function(e){const t=e.target.value,n=v.getHTML(t);null==f||f(t,n)}},y,{rows:T}))]})),C&&C!==d?t.jsxs("div",Object.assign({style:{display:"flex",gap:6,alignItems:"center"}},{children:[t.jsx(n.default,{width:16,height:16,color:o.COLORS.content.negative}),t.jsx(i.BodyCaption,Object.assign({color:o.COLORS.content.negative},{children:C}))]})):t.jsx(t.Fragment,{children:m&&(null==L?void 0:L.current)?t.jsxs(i.BodyCaption,Object.assign({style:{color:C===d||(null===(p=null==L?void 0:L.current)||void 0===p?void 0:p.value.length)>m?o.COLORS.content.negative:o.COLORS.content.secondary}},{children:[L.current.value.length,"/",m]})):t.jsx(t.Fragment,{})})]})}));p.displayName="WhatsAppTextEditor",exports.WhatsAppTextEditor=p;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var I=require("@emotion/styled/base"),g=require("../../_virtual/_tslib.js"),C=require("react/jsx-runtime"),A=require("@emotion/react"),c=require("../../assets/icons/check.svg.js"),l=require("../../assets/icons/chevronLeft.svg.js"),b=require("../../assets/icons/chevronRight.svg.js"),Z=require("../../assets/icons/cross.svg.js"),G=require("../../assets/icons/edit.svg.js"),X=require("../../assets/icons/info.svg.js"),d=require("../../assets/icons/rewind.svg.js"),V=require("../../assets/icons/thumbs_down.svg.js"),W=require("../../assets/icons/thumbs_up.svg.js"),B=require("../../helpers/BaseWhatsappContentLang.helper.js"),H=require("react"),R=require("../../constants/Theme.js"),J=require("../tooltips/Tooltip.js"),u=require("../TypographyStyle.js"),N=require("./ai/actionRegistry.js"),m=require("./ai/aiTag.js"),F=require("./ai/api.js"),x=require("./CustomEditor.styled.js"),Y=require("./WhatsAppTextEditorHeader.js");function y(I){return I&&"object"==typeof I&&"default"in I?I:{default:I}}var a=y(I),i=y(H);function h(){return"You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."}const p="Character limit reached",n=A.keyframes`
2
+ 0% { opacity: 0.55; }
3
+ 50% { opacity: 1; }
4
+ 100% { opacity: 0.55; }
5
+ `,U=a.default("div","production"===process.env.NODE_ENV?{target:"ea7i3sh18"}:{target:"ea7i3sh18",label:"EditorSkeletonContainer"})("production"===process.env.NODE_ENV?{name:"zdv776",styles:"padding:14px 12px;display:flex;flex-direction:column;gap:10px;min-height:150px"}:{name:"zdv776",styles:"padding:14px 12px;display:flex;flex-direction:column;gap:10px;min-height:150px",map:"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBa0MyQyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIEZyYWdtZW50IGFzIF9GcmFnbWVudCwganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZXdpbmRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3Jld2luZC5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzRG93bkljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvdGh1bWJzX2Rvd24uc3ZnJztcclxuaW1wb3J0IFRodW1ic1VwSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfdXAuc3ZnJztcclxuaW1wb3J0IHsgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9CYXNlV2hhdHNhcHBDb250ZW50TGFuZy5oZWxwZXJcIjtcclxuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUsIH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgeyBDT0xPUlMgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzL1RoZW1lXCI7XHJcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICcuLi90b29sdGlwcy9Ub29sdGlwJztcclxuaW1wb3J0IHsgQm9keUNhcHRpb24sIFRpdGxlU21hbGwgfSBmcm9tICcuLi9UeXBvZ3JhcGh5U3R5bGUnO1xyXG5pbXBvcnQgeyBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlMsIERFRkFVTFRfSU5TVFJVQ1RJT05fU1VHR0VTVElPTlMsIHJlc29sdmVBY3Rpb25Qcm9tcHRzLCB9IGZyb20gJy4vYWkvYWN0aW9uUmVnaXN0cnknO1xyXG5pbXBvcnQgeyBjb21wdXRlQWlUYWdPbkFjY2VwdCB9IGZyb20gJy4vYWkvYWlUYWcnO1xyXG5pbXBvcnQgeyBidWlsZEFjdGlvblByb21wdCwgcmVxdWVzdEFJU3VnZ2VzdGlvbiB9IGZyb20gJy4vYWkvYXBpJztcclxuaW1wb3J0IHsgQ29udGFpbmVyLCBFZGl0b3JGb290ZXJSaWdodCwgRWRpdG9yRm9vdGVyUm93LCBFZGl0b3JGb290ZXJUaXRsZSwgT3V0ZXJDb250YWluZXIsIFRleHRTcGFjZSwgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUFjdGlvblZhcmlhbnQsIEFJRWRpdG9yQWN0aW9uVHlwZXMsIEVkaXRvckFjdGlvblR5cGVzLCBXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIH0gZnJvbSAnLi9XaGF0c0FwcFRleHRFZGl0b3JIZWFkZXInO1xyXG5jb25zdCBMSU1JVF9SRUFDSEVEID0gJ0NoYXJhY3RlciBsaW1pdCByZWFjaGVkJztcclxuY29uc3QgUkVQSFJBU0VfSURMRV9NUyA9IDMwMDA7XHJcbmNvbnN0IE1BWF9SRVBIUkFTRV9ISUdITElHSFRTID0gNTtcclxuY29uc3QgTUFYX1NVR0dFU1RJT05TID0gMztcclxuY29uc3QgTEFSR0VfSU5QVVRfVEhSRVNIT0xEID0gMTIwMDtcclxuY29uc3QgVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgPSAnUmVwaHJhc2UgdGhpcyBXaGF0c0FwcCB1dGlsaXR5IHRlbXBsYXRlIHRvIGltcHJvdmUgY2xhcml0eSBhbmQgcmVhZGFiaWxpdHkgd2hpbGUgcHJlc2VydmluZyB2YXJpYWJsZXMsIGludGVudCwgYW5kIGNvbXBsaWFuY2UuJztcclxuY29uc3Qgc2tlbGV0b25QdWxzZSA9IGtleWZyYW1lcyBgXG5cdDAlIHsgb3BhY2l0eTogMC41NTsgfVxuXHQ1MCUgeyBvcGFjaXR5OiAxOyB9XG5cdDEwMCUgeyBvcGFjaXR5OiAwLjU1OyB9XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxNHB4IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogMTBweDtcblx0bWluLWhlaWdodDogMTUwcHg7XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkxpbmUgPSBzdHlsZWQuZGl2IGBcblx0aGVpZ2h0OiAxNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdHdpZHRoOiAkeyhwcm9wcykgPT4gcHJvcHMud2lkdGh9O1xuXHRiYWNrZ3JvdW5kOiAjZWNlY2VmO1xuXHRhbmltYXRpb246ICR7c2tlbGV0b25QdWxzZX0gMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHRtYXgtaGVpZ2h0OiAyNjBweDtcblx0b3ZlcmZsb3cteTogc2Nyb2xsO1xuXHRzY3JvbGxiYXItd2lkdGg6IHRoaW47XG5cdHNjcm9sbGJhci1jb2xvcjogI2M4YzhjZiB0cmFuc3BhcmVudDtcblx0Ojotd2Via2l0LXNjcm9sbGJhciB7XG5cdFx0d2lkdGg6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcblx0XHRiYWNrZ3JvdW5kOiAjYzhjOGNmO1xuXHRcdGJvcmRlci1yYWRpdXM6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcblx0XHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0fVxuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkJhc2VsaW5lVGV4dCA9IHN0eWxlZC5kaXYgYFxuXHR0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25DYW5kaWRhdGVUZXh0ID0gc3R5bGVkLmRpdiBgXG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkNhbmRpZGF0ZVNrZWxldG9uID0gc3R5bGVkLmRpdiBgXG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHR3aWR0aDogMTAwJTtcblx0bWluLWhlaWdodDogNDBweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db250cm9sc1JvdyA9IHN0eWxlZC5kaXYgYFxuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDZweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db3VudGVyID0gc3R5bGVkLnNwYW4gYFxuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkljb25CdXR0b24gPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0cGFkZGluZzogNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdGRpc3BsYXk6IGlubGluZS1mbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0dHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjEycyBlYXNlO1xuXHQ6bm90KDpkaXNhYmxlZCk6aG92ZXIge1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICR7Q09MT1JTLnN1cmZhY2UuaG92ZXJlZH07XG5cdH1cblx0OmRpc2FibGVkIHtcblx0XHRvcGFjaXR5OiAwLjM1O1xuXHRcdGN1cnNvcjogbm90LWFsbG93ZWQ7XG5cdH1cbmA7XHJcbi8qKiBSZWdlbmVyYXRlIHN0YXlzIGZ1bGwgb3BhY2l0eSB3aGlsZSBkaXNhYmxlZCBzbyB0aGUgbG9hZGluZyBzaGltbWVyIHN0YXlzIHZpc2libGUgKHNhbWUgcHVsc2UgYXMgZWRpdG9yIHNrZWxldG9uKS4gKi9cclxuY29uc3QgU3VnZ2VzdGlvblJlZ2VuZXJhdGVCdXR0b24gPSBzdHlsZWQoU3VnZ2VzdGlvbkljb25CdXR0b24pIGBcblx0OmRpc2FibGVkIHtcblx0XHRvcGFjaXR5OiAxO1xuXHRcdGN1cnNvcjogd2FpdDtcblx0fVxuYDtcclxuY29uc3QgUmVnZW5lcmF0ZUljb25TaGltbWVyID0gc3R5bGVkLmRpdiBgXG5cdHdpZHRoOiAxNHB4O1xuXHRoZWlnaHQ6IDE0cHg7XG5cdGJvcmRlci1yYWRpdXM6IDRweDtcblx0YmFja2dyb3VuZDogI2VjZWNlZjtcblx0ZmxleC1zaHJpbms6IDA7XG5cdGFuaW1hdGlvbjogJHtza2VsZXRvblB1bHNlfSAxLjFzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xuYDtcclxuLyoqIFNhbWUgYm90dG9tIHRvb2xiYXIgc2xvdCBhcyBgV2hhdHNBcHBUZXh0RWRpdG9ySGVhZGVyYCDigJQgcmVwbGFjZXMgdGhlIGZ1bGwgaWNvbi9BSSBwYW5lbCB3aGlsZSBvcGVuLiAqL1xyXG5jb25zdCBJbnN0cnVjdGlvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblx0cGFkZGluZzogOHB4IDEycHg7XG5cdGdhcDogMTBweDtcblx0Ym9yZGVyLXJhZGl1czogMCAwIDRweCA0cHg7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXRSb3cgPSBzdHlsZWQuZGl2IGBcblx0Ym9yZGVyOiAxcHggc29saWQgI2Y1YTRjMDtcblx0Ym9yZGVyLXJhZGl1czogMTBweDtcblx0cGFkZGluZzogOHB4IDEwcHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbklucHV0ID0gc3R5bGVkLmlucHV0IGBcblx0ZmxleDogMTtcblx0bWluLXdpZHRoOiAwO1xuXHRib3JkZXI6IDA7XG5cdG91dGxpbmU6IG5vbmU7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25BY3Rpb25zID0gc3R5bGVkLmRpdiBgXG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQ2FuY2VsID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnNlY29uZGFyeX07XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0Zm9udC13ZWlnaHQ6IDUwMDtcblx0cGFkZGluZzogMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbXByb3ZlID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMXB4IHNvbGlkICM1ZDNhNzI7XG5cdGNvbG9yOiAjNWQzYTcyO1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0Ym9yZGVyLXJhZGl1czogOHB4O1xuXHRwYWRkaW5nOiA4cHggMTRweDtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRsaW5lLWhlaWdodDogMS4xO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0ID0gc3R5bGVkLmRpdiBgXG5cdG1hcmdpbi10b3A6IDEwcHg7XG5cdGJvcmRlci1yYWRpdXM6IDEycHg7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3gtc2hhZG93OiAwIDZweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkJ1dHRvbiA9IHN0eWxlZC5idXR0b24gYFxuXHR3aWR0aDogMTAwJTtcblx0Ym9yZGVyOiAwO1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgJHtDT0xPUlMuc3Ryb2tlLnByaW1hcnl9O1xuXHRiYWNrZ3JvdW5kOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyNlNWYzZTgnIDogJ3RyYW5zcGFyZW50Jyl9O1xuXHRjb2xvcjogJHsocHJvcHMpID0+IChwcm9wcy5zZWxlY3RlZCA/ICcjMWU2YjM0JyA6IENPTE9SUy5jb250ZW50LnByaW1hcnkpfTtcblx0dGV4dC1hbGlnbjogbGVmdDtcblx0cGFkZGluZzogMTJweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjI7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0OmZpcnN0LW9mLXR5cGUge1xuXHRcdGJvcmRlci10b3A6IDA7XG5cdH1cbmA7XHJcbmNvbnN0IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nID0gbmV3IEJhc2VXaGF0c2FwcENvbnRlbnRMYW5nSGVscGVyKCk7XHJcbmNvbnN0IFdpbGRDYXJkTWFwID0ge1xyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLkJPTERdOiAnKicsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuSVRBTElDXTogJ18nLFxyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLlNUUklLRVRIUk9VR0hdOiAnficsXHJcbn07XHJcbmZ1bmN0aW9uIGdldEhpZ2hsaWdodFN0b3JhZ2VLZXkoZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgIHJldHVybiBgd2hhdHNhcHAtZWRpdG9yLXJlcGhyYXNlLWhpZ2hsaWdodC0ke2VkaXRvckluc3RhbmNlS2V5IHx8ICdkZWZhdWx0J31gO1xyXG59XHJcbmV4cG9ydCBjb25zdCBXaGF0c0FwcFRleHRFZGl0b3IgPSBSZWFjdC5mb3J3YXJkUmVmKChfYSwgcmVmKSA9PiB7XHJcbiAgICB2YXIgeyBvbkNoYW5nZSwgb25DbGlja1ZhcmlhYmxlLCB0ZXh0OiBpbnB1dFZhbHVlLCBSaWdodENvbXBvbmVudCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yLCByb3dzLCBhY3Rpb25zLCBlZGl0b3JJbnN0YW5jZUtleSwgdGVtcGxhdGVUeXBlID0gJ21hcmtldGluZycsIHRlbXBsYXRlSWQsIHJlcXVlc3RFeGVjdXRvciwgYmFzZVVybCwgZW5kcG9pbnRQYXRoLCB1c2VDYXNlLCBzdG9yZUlkLCBhcGlBZGFwdGVyLCBjb252ZXJzYXRpb25JZCA9ICd3aGF0c2FwcC10ZW1wbGF0ZS1lZGl0b3InLCBzeXN0ZW1JZCA9ICd3aGF0c2FwcC13cml0ZXInLCBpbnRlbnQgPSAnZGVmYXVsdCcsIGVuYWJsZWRBSUFjdGlvbnMgPSBbXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlNIT1JURU4sXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FWFBBTkQsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FTU9KSUZZLFxyXG4gICAgXSwgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMgPSBmYWxzZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCBhaUFjdGlvbk1pbkNoYXJzLCBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgb25BSUV2ZW50LCBvbkFJVGFnQ29tcHV0ZWQsIHByZWZpbGxXYXNBaUdlbmVyYXRlZCA9IGZhbHNlLCBlZGl0b3JIZWFkZXIsIG9uQUlUb25lU2VsZWN0LCBvbkFJQWN0aW9uUmVxdWVzdCwgb25CdWlsZEFJUHJvbXB0IH0gPSBfYSwgdGV4dEFyZWFQcm9wcyA9IF9fcmVzdChfYSwgW1wib25DaGFuZ2VcIiwgXCJvbkNsaWNrVmFyaWFibGVcIiwgXCJ0ZXh0XCIsIFwiUmlnaHRDb21wb25lbnRcIiwgXCJlcnJvclwiLCBcImxpbWl0XCIsIFwib25FcnJvclwiLCBcInJvd3NcIiwgXCJhY3Rpb25zXCIsIFwiZWRpdG9ySW5zdGFuY2VLZXlcIiwgXCJ0ZW1wbGF0ZVR5cGVcIiwgXCJ0ZW1wbGF0ZUlkXCIsIFwicmVxdWVzdEV4ZWN1dG9yXCIsIFwiYmFzZVVybFwiLCBcImVuZHBvaW50UGF0aFwiLCBcInVzZUNhc2VcIiwgXCJzdG9yZUlkXCIsIFwiYXBpQWRhcHRlclwiLCBcImNvbnZlcnNhdGlvbklkXCIsIFwic3lzdGVtSWRcIiwgXCJpbnRlbnRcIiwgXCJlbmFibGVkQUlBY3Rpb25zXCIsIFwiZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnNcIiwgXCJwcm9tcHRPdmVycmlkZXNcIiwgXCJyZXBocmFzZVRvbmVzXCIsIFwiYWlBY3Rpb25NaW5DaGFyc1wiLCBcImluc3RydWN0aW9uU3VnZ2VzdGlvbnNcIiwgXCJvbkFJRXZlbnRcIiwgXCJvbkFJVGFnQ29tcHV0ZWRcIiwgXCJwcmVmaWxsV2FzQWlHZW5lcmF0ZWRcIiwgXCJlZGl0b3JIZWFkZXJcIiwgXCJvbkFJVG9uZVNlbGVjdFwiLCBcIm9uQUlBY3Rpb25SZXF1ZXN0XCIsIFwib25CdWlsZEFJUHJvbXB0XCJdKTtcclxuICAgIGNvbnN0IHRleHRTcGFjZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IFtjdXJyZW50VGV4dCwgc2V0Q3VycmVudFRleHRdID0gdXNlU3RhdGUoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICBjb25zdCBbaXNSZXBocmFzZUhpZ2hsaWdodGVkLCBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW3JlcGhyYXNlSGlnaGxpZ2h0Q291bnQsIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbaXNHZW5lcmF0aW5nLCBzZXRJc0dlbmVyYXRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2lzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGVdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2luc3RydWN0aW9uVGV4dCwgc2V0SW5zdHJ1Y3Rpb25UZXh0XSA9IHVzZVN0YXRlKCcnKTtcclxuICAgIGNvbnN0IFt0b25lQnlBY3Rpb24sIHNldFRvbmVCeUFjdGlvbl0gPSB1c2VTdGF0ZSh7fSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkJhc2VUZXh0LCBzZXRTdWdnZXN0aW9uQmFzZVRleHRdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkNhbmRpZGF0ZXMsIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzXSA9IHVzZVN0YXRlKFtdKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uSW5kZXgsIHNldFN1Z2dlc3Rpb25JbmRleF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGVdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBzdWdnZXN0aW9uU2Nyb2xsUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgcmVwaHJhc2VJZGxlUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgaGlnaGxpZ2h0UmVzZXRSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICAvKipcclxuICAgICAqIFByaW9yIGVsaWdpYmlsaXR5IGZvciByZXBocmFzZSBudWRnZSAobnVsbCA9IG5vdCBpbml0aWFsaXplZCkuXHJcbiAgICAgKiBNYXRjaGVzIHRoZSBjaGlwOiBub24tZW1wdHkgdHJpbSBhbmQgbGVuZ3RoIOKJpSBtaW4g4oCUIHNhbWUgYXMgYGFpSGVhZGVyQWN0aW9uc2AgZGlzYWJsZWQgcnVsZXMuXHJcbiAgICAgKi9cclxuICAgIGNvbnN0IHByZXZSZXBocmFzZUVsaWdpYmxlUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgZGVmZXJyZWRIdG1sUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgbGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIC8qKiBGaXJzdCBhY2NlcHQgYWZ0ZXIgZnVsbC1BSSBwcmVmaWxsIChgcHJlZmlsbFdhc0FpR2VuZXJhdGVkYCk7IGNsZWFyZWQgYWZ0ZXIgb25lIGFjY2VwdC4gKi9cclxuICAgIGNvbnN0IGluaXRpYWxBaVByZWZpbGxQaGFzZVJlZiA9IHVzZVJlZighIXByZWZpbGxXYXNBaUdlbmVyYXRlZCk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGluaXRpYWxBaVByZWZpbGxQaGFzZVJlZi5jdXJyZW50ID0gISFwcmVmaWxsV2FzQWlHZW5lcmF0ZWQ7XHJcbiAgICB9LCBbcHJlZmlsbFdhc0FpR2VuZXJhdGVkLCBlZGl0b3JJbnN0YW5jZUtleV0pO1xyXG4gICAgY29uc3QgYWN0aXZlQWN0aW9uUHJvbXB0cyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiByZXNvbHZlQWN0aW9uUHJvbXB0cyh0ZW1wbGF0ZVR5cGUsIHByb21wdE92ZXJyaWRlcywgcmVwaHJhc2VUb25lcyk7XHJcbiAgICB9LCBbcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCB0ZW1wbGF0ZVR5cGVdKTtcclxuICAgIGNvbnN0IGZpbHRlcmVkSW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGlmICghcXVlcnkpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucy5maWx0ZXIoKHN1Z2dlc3Rpb24pID0+IHN1Z2dlc3Rpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeSkpO1xyXG4gICAgfSwgW2luc3RydWN0aW9uU3VnZ2VzdGlvbnMsIGluc3RydWN0aW9uVGV4dF0pO1xyXG4gICAgY29uc3QgbWluQ2hhcnNCeUFjdGlvbiA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUyksIChhaUFjdGlvbk1pbkNoYXJzIHx8IHt9KSk7XHJcbiAgICB9LCBbYWlBY3Rpb25NaW5DaGFyc10pO1xyXG4gICAgY29uc3QgcmVwaHJhc2VNaW5DaGFycyA9IG1pbkNoYXJzQnlBY3Rpb25bQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV0gfHxcclxuICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV07XHJcbiAgICBjb25zdCBlbWl0QUlFdmVudCA9IHVzZUNhbGxiYWNrKChuYW1lLCBwYXlsb2FkKSA9PiB7XHJcbiAgICAgICAgb25BSUV2ZW50ID09PSBudWxsIHx8IG9uQUlFdmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSUV2ZW50KG5hbWUsIHBheWxvYWQpO1xyXG4gICAgfSwgW29uQUlFdmVudF0pO1xyXG4gICAgY29uc3Qgc2V0RWRpdG9yVGV4dCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIHNldEN1cnJlbnRUZXh0KChwcmV2KSA9PiAocHJldiA9PT0gbmV4dFRleHQgPyBwcmV2IDogbmV4dFRleHQpKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGVtaXRDaGFuZ2VXaXRoR3VhcmQgPSB1c2VDYWxsYmFjaygobmV4dFRleHQpID0+IHtcclxuICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGRlZmVycmVkSHRtbFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5leHRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIG5leHRUZXh0KTtcclxuICAgICAgICAgICAgZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChuZXh0VGV4dCkpO1xyXG4gICAgICAgICAgICB9LCAxNik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICB9LCBbb25DaGFuZ2VdKTtcclxuICAgIGNvbnN0IGNsZWFyU3VnZ2VzdGlvblNlc3Npb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0KG51bGwpO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtdKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUobnVsbCk7XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgPj0gTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXh0Q291bnQgPSByZXBocmFzZUhpZ2hsaWdodENvdW50ICsgMTtcclxuICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KG5leHRDb3VudCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSksIFN0cmluZyhuZXh0Q291bnQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKHRydWUpO1xyXG4gICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgIH0sIDEyMDApO1xyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5LCByZXBocmFzZUhpZ2hsaWdodENvdW50XSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHRSZWYgPSB1c2VSZWYodHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0KTtcclxuICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50ID0gdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0O1xyXG4gICAgZnVuY3Rpb24gaGFuZGxlT25DaGFuZ2UoZSkge1xyXG4gICAgICAgIGNvbnN0IHRleHQgPSBlLnRhcmdldC52YWx1ZTtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBzZXRDYXJldFBvc2l0aW9uKGNhcmV0UG9zKSB7XHJcbiAgICAgICAgY29uc3QgZWxlbSA9IHRleHRTcGFjZVJlZiA9PT0gbnVsbCB8fCB0ZXh0U3BhY2VSZWYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRleHRTcGFjZVJlZi5jdXJyZW50O1xyXG4gICAgICAgIGlmIChlbGVtICE9IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKGVsZW0uc2VsZWN0aW9uU3RhcnQpIHtcclxuICAgICAgICAgICAgICAgIGVsZW0uZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIGVsZW0uc2VsZWN0aW9uRW5kID0gY2FyZXRQb3M7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgZWxlbS5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIG9uQWN0aW9uU2VsZWN0KGFjdGlvblR5cGUpIHtcclxuICAgICAgICBjb25zdCB3aWxkQ2FyZCA9IFdpbGRDYXJkTWFwW2FjdGlvblR5cGVdO1xyXG4gICAgICAgIGlmICh3aWxkQ2FyZCAmJiB0ZXh0U3BhY2VSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHRleHQgfSA9IGluc2VydFRleHRBdEluZGV4KHdpbGRDYXJkLCBzdGFydCk7XHJcbiAgICAgICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uKHN0YXJ0ICsgMSk7XHJcbiAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBhZGRUZXh0T3JXcmFwKHdpbGRDYXJkKTtcclxuICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBvbkVtb2ppQWRkaXRpb24oZW1vamkpIHtcclxuICAgICAgICBjb25zdCB7IHRleHQgfSA9IGFkZFRleHQoZW1vamkpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhZGRUZXh0T3JXcmFwKHRleHRUb0FkZCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgbGV0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICBpZiAodGV4dFNwYWNlUmVmLmN1cnJlbnQgJiYgdGV4dFRvQWRkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgY29uc3Qgd2lsZENhcmQgPSB0ZXh0VG9BZGQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICAvKiogbm90aGluZyBpcyBzZWxlY3RlZCAqL1xyXG4gICAgICAgICAgICAgICAgLyoqIHNvIGFwcGVuZCB0aGUgd2lsZGNhcmQgYXQgdGhlIGVuZCAqL1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFkZFRleHQod2lsZENhcmQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGV4dCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLndyYXBwV2lsZGNhcmQoc3RhcnQsIGVuZCwgd2lsZENhcmQsIHRleHQpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaHRtbCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwodGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdGV4dCwgaHRtbCB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IHRleHQ6IHRleHQsIGh0bWw6IHRleHQgfTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZFRleHQodGV4dFRvQWRkKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgaWYgKHRleHRTcGFjZVJlZi5jdXJyZW50ICYmIHRleHRUb0FkZCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zZXJ0VGV4dEF0SW5kZXgodGV4dFRvQWRkLCBzdGFydCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dDogdGV4dCwgaHRtbDogdGV4dCB9O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gaW5zZXJ0VGV4dEF0SW5kZXgodGV4dFRvQWRkLCBpbmRleCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgbGV0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICB0ZXh0ID0gdGV4dC5zbGljZSgwLCBpbmRleCkgKyB0ZXh0VG9BZGQgKyB0ZXh0LnNsaWNlKGluZGV4KTtcclxuICAgICAgICBjb25zdCBodG1sID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTCh0ZXh0KTtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgIHJldHVybiB7IHRleHQsIGh0bWwgfTtcclxuICAgIH1cclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8ICFlZGl0b3JJbnN0YW5jZUtleSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNhY2hlZCA9IE51bWJlcihzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGdldEhpZ2hsaWdodFN0b3JhZ2VLZXkoZWRpdG9ySW5zdGFuY2VLZXkpKSB8fFxyXG4gICAgICAgICAgICAnMCcpO1xyXG4gICAgICAgIGlmICghTnVtYmVyLmlzTmFOKGNhY2hlZCkpIHtcclxuICAgICAgICAgICAgc2V0UmVwaHJhc2VIaWdobGlnaHRDb3VudChjYWNoZWQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtlZGl0b3JJbnN0YW5jZUtleV0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBjb25zdCBlbGlnaWJsZSA9ICEhY3VycmVudFRleHQudHJpbSgpICYmIGN1cnJlbnRUZXh0Lmxlbmd0aCA+PSByZXBocmFzZU1pbkNoYXJzO1xyXG4gICAgICAgIGlmIChwcmV2UmVwaHJhc2VFbGlnaWJsZVJlZi5jdXJyZW50ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHByZXZSZXBocmFzZUVsaWdpYmxlUmVmLmN1cnJlbnQgPSBlbGlnaWJsZTtcclxuICAgICAgICAgICAgaWYgKGVsaWdpYmxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50KCk7XHJcbiAgICAgICAgICAgICAgICB9LCBSRVBIUkFTRV9JRExFX01TKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZWxpZ2libGUpIHtcclxuICAgICAgICAgICAgcHJldlJlcGhyYXNlRWxpZ2libGVSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjcm9zc2VkVGhyZXNob2xkID0gIXByZXZSZXBocmFzZUVsaWdpYmxlUmVmLmN1cnJlbnQgJiYgZWxpZ2libGU7XHJcbiAgICAgICAgcHJldlJlcGhyYXNlRWxpZ2libGVSZWYuY3VycmVudCA9IHRydWU7XHJcbiAgICAgICAgaWYgKGNyb3NzZWRUaHJlc2hvbGQpIHtcclxuICAgICAgICAgICAgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0UmVmLmN1cnJlbnQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50KCk7XHJcbiAgICAgICAgfSwgUkVQSFJBU0VfSURMRV9NUyk7XHJcbiAgICB9LCBbY3VycmVudFRleHQsIHJlcGhyYXNlTWluQ2hhcnNdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGFjdGl2ZUNhbmRpZGF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzW3N1Z2dlc3Rpb25JbmRleF0gfHwgJyc7XHJcbiAgICBjb25zdCBzdWdnZXN0aW9uQmFzZUh0bWwgPSB1c2VNZW1vKCgpID0+IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwoc3VnZ2VzdGlvbkJhc2VUZXh0IHx8ICcnKSwgW3N1Z2dlc3Rpb25CYXNlVGV4dF0pO1xyXG4gICAgY29uc3QgYWN0aXZlQ2FuZGlkYXRlSHRtbCA9IHVzZU1lbW8oKCkgPT4gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChhY3RpdmVDYW5kaWRhdGUpLCBbYWN0aXZlQ2FuZGlkYXRlXSk7XHJcbiAgICBjb25zdCBjYW5SZWdlbmVyYXRlID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDwgTUFYX1NVR0dFU1RJT05TO1xyXG4gICAgY29uc3Qgc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID0gISFzdWdnZXN0aW9uQmFzZVRleHQgJiYgc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoID4gMDtcclxuICAgIGNvbnN0IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8IHN1Z2dlc3Rpb25JbmRleCA8PSAwO1xyXG4gICAgY29uc3QgaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDw9IDEgfHxcclxuICAgICAgICBzdWdnZXN0aW9uSW5kZXggPj0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBub2RlID0gc3VnZ2VzdGlvblNjcm9sbFJlZi5jdXJyZW50O1xyXG4gICAgICAgIGlmICghbm9kZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIG5vZGUuc2Nyb2xsVG9wID0gbm9kZS5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9LCBbYWN0aXZlQ2FuZGlkYXRlLCBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24sIGlzR2VuZXJhdGluZ10pO1xyXG4gICAgY29uc3QgZXhlY3V0ZUFJQWN0aW9uID0gdXNlQ2FsbGJhY2soKGFjdGlvblR5cGUsIHJlZ2VuZXJhdGVFeGlzdGluZyA9IGZhbHNlLCBpbnN0cnVjdGlvbk92ZXJyaWRlLCB0b25lT3ZlcnJpZGVJZCwgYWN0aW9uVmFyaWFudCA9IEFJQWN0aW9uVmFyaWFudC5ERUZBVUxUKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICB2YXIgX2IsIF9jLCBfZDtcclxuICAgICAgICBpZiAoIW9uQUlBY3Rpb25SZXF1ZXN0ICYmXHJcbiAgICAgICAgICAgICFhcGlBZGFwdGVyICYmXHJcbiAgICAgICAgICAgICghcmVxdWVzdEV4ZWN1dG9yIHx8ICFiYXNlVXJsKSkge1xyXG4gICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoJ0FJIGNvbmZpZ3VyYXRpb24gbWlzc2luZycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY3VycmVudFRleHQudHJpbSgpKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbWluQ2hhcnNGb3JBY3Rpb24gPSBtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICA1MDtcclxuICAgICAgICBpZiAoY3VycmVudFRleHQubGVuZ3RoIDwgbWluQ2hhcnNGb3JBY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpZiAoaXNHZW5lcmF0aW5nKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKHJlZ2VuZXJhdGVFeGlzdGluZyAmJiAhY2FuUmVnZW5lcmF0ZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGJhc2VDb25maWcgPSBhY3RpdmVBY3Rpb25Qcm9tcHRzW2FjdGlvblR5cGVdO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UgJiZcclxuICAgICAgICAgICAgdGVtcGxhdGVUeXBlID09PSAndXRpbGl0eScgJiZcclxuICAgICAgICAgICAgYWN0aW9uVmFyaWFudCA9PT0gQUlBY3Rpb25WYXJpYW50LlJFUEhSQVNFXHJcbiAgICAgICAgICAgID8gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBiYXNlQ29uZmlnKSwgeyBsYWJlbDogJ1JlcGhyYXNlJywgYmFzZVByb21wdDogVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgfSkgOiBiYXNlQ29uZmlnO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVG9uZUlkID0gdG9uZU92ZXJyaWRlSWQgfHxcclxuICAgICAgICAgICAgdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIGNvbmZpZy5kZWZhdWx0VG9uZUlkIHx8XHJcbiAgICAgICAgICAgICgoX2MgPSAoX2IgPSBjb25maWcudG9uZXMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYlswXSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmlkKTtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFRvbmUgPSAoX2QgPSBjb25maWcudG9uZXMpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5maW5kKCh0b25lKSA9PiB0b25lLmlkID09PSBzZWxlY3RlZFRvbmVJZCk7XHJcbiAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgPSBpbnN0cnVjdGlvbk92ZXJyaWRlICE9PSB1bmRlZmluZWRcclxuICAgICAgICAgICAgPyBpbnN0cnVjdGlvbk92ZXJyaWRlXHJcbiAgICAgICAgICAgIDogaW5zdHJ1Y3Rpb25UZXh0O1xyXG4gICAgICAgIGNvbnN0IHByb21wdCA9IChvbkJ1aWxkQUlQcm9tcHQgPT09IG51bGwgfHwgb25CdWlsZEFJUHJvbXB0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkJ1aWxkQUlQcm9tcHQoe1xyXG4gICAgICAgICAgICBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICBhY3Rpb25WYXJpYW50LFxyXG4gICAgICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICBjb25maWcsXHJcbiAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgIHRvbmVMYWJlbDogc2VsZWN0ZWRUb25lID09PSBudWxsIHx8IHNlbGVjdGVkVG9uZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZWN0ZWRUb25lLmxhYmVsLFxyXG4gICAgICAgICAgICBpbnN0cnVjdGlvblRleHQ6IGluc3RydWN0aW9uRm9yUHJvbXB0IHx8IHVuZGVmaW5lZCxcclxuICAgICAgICB9KSkgfHxcclxuICAgICAgICAgICAgYnVpbGRBY3Rpb25Qcm9tcHQoe1xyXG4gICAgICAgICAgICAgICAgY29uZmlnLFxyXG4gICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZCxcclxuICAgICAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIHNldElzR2VuZXJhdGluZyh0cnVlKTtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfYWN0aW9uX3RyaWdnZXJlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG9uQUlBY3Rpb25SZXF1ZXN0XHJcbiAgICAgICAgICAgICAgICA/IHlpZWxkIG9uQUlBY3Rpb25SZXF1ZXN0KHtcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblZhcmlhbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIDogeWllbGQgcmVxdWVzdEFJU3VnZ2VzdGlvbih7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgYmFzZVVybCxcclxuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgICAgIGludGVudCxcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICAgICAgICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZydcclxuICAgICAgICAgICAgICAgID8gcmVzdWx0LnRyaW0oKVxyXG4gICAgICAgICAgICAgICAgOiAoKHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3VsdC5ib2R5KSB8fCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKCFyZWdlbmVyYXRlRXhpc3RpbmcpIHtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25CYXNlVGV4dChjdXJyZW50VGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShhY3Rpb25UeXBlKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtjYW5kaWRhdGVdKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcygocHJldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IFsuLi5wcmV2LCBjYW5kaWRhdGVdLnNsaWNlKDAsIE1BWF9TVUdHRVNUSU9OUyk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgobmV4dC5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdGYWlsZWQgdG8gZ2VuZXJhdGUgQUkgc3VnZ2VzdGlvbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgc2V0SXNHZW5lcmF0aW5nKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9KSwgW1xyXG4gICAgICAgIHJlcXVlc3RFeGVjdXRvcixcclxuICAgICAgICBiYXNlVXJsLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBjYW5SZWdlbmVyYXRlLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGluc3RydWN0aW9uVGV4dCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIGVuZHBvaW50UGF0aCxcclxuICAgICAgICBhcGlBZGFwdGVyLFxyXG4gICAgICAgIGludGVudCxcclxuICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgIG9uRXJyb3IsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgICAgICBvbkFJQWN0aW9uUmVxdWVzdCxcclxuICAgICAgICBvbkJ1aWxkQUlQcm9tcHQsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFhY3RpdmVDYW5kaWRhdGUgfHwgIXN1Z2dlc3Rpb25CYXNlVGV4dCB8fCAhc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2FjY2VwdGVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGluSW5pdGlhbEFpUGhhc2UgPSBpbml0aWFsQWlQcmVmaWxsUGhhc2VSZWYuY3VycmVudDtcclxuICAgICAgICBjb25zdCB0YWdQYXlsb2FkID0gY29tcHV0ZUFpVGFnT25BY2NlcHQoe1xyXG4gICAgICAgICAgICBiYXNlbGluZVRleHQ6IHN1Z2dlc3Rpb25CYXNlVGV4dCxcclxuICAgICAgICAgICAgYWNjZXB0ZWRUZXh0OiBhY3RpdmVDYW5kaWRhdGUsXHJcbiAgICAgICAgICAgIGluaXRpYWxBaVByZWZpbGxQaGFzZTogaW5Jbml0aWFsQWlQaGFzZSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoaW5Jbml0aWFsQWlQaGFzZSkge1xyXG4gICAgICAgICAgICBpbml0aWFsQWlQcmVmaWxsUGhhc2VSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvbkFJVGFnQ29tcHV0ZWQgPT09IG51bGwgfHwgb25BSVRhZ0NvbXB1dGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVGFnQ29tcHV0ZWQodGFnUGF5bG9hZCk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGFjdGl2ZUNhbmRpZGF0ZSxcclxuICAgICAgICBzdWdnZXN0aW9uQmFzZVRleHQsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCxcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkLFxyXG4gICAgICAgIGVtaXRBSUV2ZW50LFxyXG4gICAgICAgIHRlbXBsYXRlSWQsXHJcbiAgICAgICAgb25BSVRhZ0NvbXB1dGVkLFxyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2Rpc2NhcmRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uKCk7XHJcbiAgICB9LCBbY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiwgZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKChyYXRpbmcpID0+IHtcclxuICAgICAgICBpZiAoIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2ZlZWRiYWNrX3N1Ym1pdHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICAgICAgcmF0aW5nLFxyXG4gICAgICAgICAgICBjYW5kaWRhdGVfaW5kZXg6IHN1Z2dlc3Rpb25JbmRleCArIDEsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LCBbZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzdWdnZXN0aW9uSW5kZXgsIHRlbXBsYXRlSWRdKTtcclxuICAgIGNvbnN0IGFpSGVhZGVyQWN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucylcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBlbmFibGVkQUlBY3Rpb25zLm1hcCgoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICAgICAgY29uc3QgYWN0aW9uQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICAgICAgY29uc3QgdG9uZUlkID0gdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICBhY3Rpb25Db25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAgICAgKChfYiA9IChfYSA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzBdKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWQpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBhY3Rpb25Db25maWcubGFiZWwsXHJcbiAgICAgICAgICAgICAgICBpc1ByaW1hcnk6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBpc0dlbmVyYXRpbmcgJiYgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHRlZDogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVwaHJhc2VIaWdobGlnaHRlZCxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhY3VycmVudFRleHQudHJpbSgpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQubGVuZ3RoIDxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG1pbkNoYXJzQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNTApIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgaXNHZW5lcmF0aW5nIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSksXHJcbiAgICAgICAgICAgICAgICBzaG93VG9uZURyb3Bkb3duOiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgICAgICAgICAgISEoKF9jID0gYWN0aW9uQ29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSxcclxuICAgICAgICAgICAgICAgIHRvbmVzOiBhY3Rpb25Db25maWcudG9uZXMsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZDogdG9uZUlkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGVuYWJsZWRBSUFjdGlvbnMsXHJcbiAgICAgICAgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMsXHJcbiAgICAgICAgYWN0aXZlQWN0aW9uUHJvbXB0cyxcclxuICAgICAgICB0b25lQnlBY3Rpb24sXHJcbiAgICAgICAgaXNHZW5lcmF0aW5nLFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbixcclxuICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgIF0pO1xyXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBhZGRUZXh0T3JXcmFwLFxyXG4gICAgICAgICAgICBhZGRUZXh0LFxyXG4gICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24sXHJcbiAgICAgICAgfTtcclxuICAgIH0sIFthZGRUZXh0T3JXcmFwLCBhZGRUZXh0LCBjdXJyZW50VGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoaW5wdXRWYWx1ZSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChpbnB1dFZhbHVlIHx8ICcnKTtcclxuICAgIH0sIFtpbnB1dFZhbHVlLCBzZXRFZGl0b3JUZXh0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICghbGltaXQgfHwgIW9uRXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBuZXh0RXJyb3IgPSBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdCA/IExJTUlUX1JFQUNIRUQgOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiAnJztcclxuICAgICAgICBpZiAobGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID09PSBuZXh0RXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBsYXN0RW1pdHRlZEVkaXRvckVycm9yUmVmLmN1cnJlbnQgPSBuZXh0RXJyb3I7XHJcbiAgICAgICAgb25FcnJvcihuZXh0RXJyb3IpO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCBlcnJvciwgbGltaXQsIG9uRXJyb3JdKTtcclxuICAgIHJldHVybiAoX2pzeHMoT3V0ZXJDb250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4cyhFZGl0b3JGb290ZXJSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvckZvb3RlclRpdGxlLCB7IGNoaWxkcmVuOiBlZGl0b3JIZWFkZXIgPyAoX2pzeChUaXRsZVNtYWxsLCBPYmplY3QuYXNzaWduKHsgXCJkYXRhLXRlc3RcIjogXCJib2R5LXRleHQtZm9yLWVkaXQtdGVtcGxhdGVcIiB9LCB7IGNoaWxkcmVuOiBlZGl0b3JIZWFkZXIgfSkpKSA6IG51bGwgfSksIF9qc3hzKEVkaXRvckZvb3RlclJpZ2h0LCB7IGNoaWxkcmVuOiBbZXJyb3IgJiYgZXJyb3IgIT09IExJTUlUX1JFQUNIRUQgPyAoX2pzeHMoX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBbX2pzeChJbmZvSWNvbiwgeyB3aWR0aDogMTYsIGhlaWdodDogMTYsIGNvbG9yOiBDT0xPUlMuY29udGVudC5uZWdhdGl2ZSB9KSwgX2pzeChCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IGNvbG9yOiBDT0xPUlMuY29udGVudC5uZWdhdGl2ZSB9LCB7IGNoaWxkcmVuOiBlcnJvciB9KSldIH0pKSA6IG51bGwsIGxpbWl0ID8gKF9qc3hzKEJvZHlDYXB0aW9uLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IGVycm9yID09PSBMSU1JVF9SRUFDSEVEIHx8IGN1cnJlbnRUZXh0Lmxlbmd0aCA+IGxpbWl0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IENPTE9SUy5jb250ZW50Lm5lZ2F0aXZlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IFtjdXJyZW50VGV4dC5sZW5ndGgsIFwiL1wiLCBsaW1pdF0gfSkpKSA6IG51bGxdIH0pXSB9KSwgX2pzeHMoQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgaXNFcnJvcjogISFlcnJvciB9LCB7IGNoaWxkcmVuOiBbc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID8gKF9qc3hzKFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgcmVmOiBzdWdnZXN0aW9uU2Nyb2xsUmVmIH0sIHsgY2hpbGRyZW46IFtfanN4KFN1Z2dlc3Rpb25CYXNlbGluZVRleHQsIHsgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHsgX19odG1sOiBzdWdnZXN0aW9uQmFzZUh0bWwgfSB9KSwgaXNHZW5lcmF0aW5nID8gKF9qc3goU3VnZ2VzdGlvbkNhbmRpZGF0ZVRleHQsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtYnVzeVwiOiBcInRydWVcIiB9LCB7IGNoaWxkcmVuOiBfanN4cyhTdWdnZXN0aW9uQ2FuZGlkYXRlU2tlbGV0b24sIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiODQlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjY4JVwiIH0pXSB9KSB9KSkpIDogKF9qc3goU3VnZ2VzdGlvbkNhbmRpZGF0ZVRleHQsIHsgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19odG1sOiBhY3RpdmVDYW5kaWRhdGVIdG1sLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSkpLCBfanN4cyhTdWdnZXN0aW9uQ29udHJvbHNSb3csIHsgY2hpbGRyZW46IFtfanN4cyhTdWdnZXN0aW9uQ291bnRlciwgeyBjaGlsZHJlbjogW3N1Z2dlc3Rpb25JbmRleCArIDEsIFwiL1wiLCBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGhdIH0pLCBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUHJldmlvdXMgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBkaXNhYmxlZDogaXNQcmV2U3VnZ2VzdGlvbkRpc2FibGVkLCBvbkNsaWNrOiAoKSA9PiBzZXRTdWdnZXN0aW9uSW5kZXgoKGlkeCkgPT4gTWF0aC5tYXgoMCwgaWR4IC0gMSkpIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hldnJvbkxlZnRJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSksIF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiTGlrZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUZlZWRiYWNrKCdsaWtlJykgfSwgeyBjaGlsZHJlbjogX2pzeChUaHVtYnNVcEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzbGlrZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkRpc2xpa2Ugc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiBoYW5kbGVGZWVkYmFjaygnZGlzbGlrZScpIH0sIHsgY2hpbGRyZW46IF9qc3goVGh1bWJzRG93bkljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIGNhblJlZ2VuZXJhdGUgPyAoX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogaXNHZW5lcmF0aW5nID8gJ1JlZ2VuZXJhdGluZ+KApicgOiAnUmVnZW5lcmF0ZScsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25SZWdlbmVyYXRlQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIFwiYXJpYS1idXN5XCI6IGlzR2VuZXJhdGluZywgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzR2VuZXJhdGluZywgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3VnZ2VzdGlvbkFjdGlvblR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IGlzR2VuZXJhdGluZyA/IChfanN4KFJlZ2VuZXJhdGVJY29uU2hpbW1lciwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUgfSkpIDogKF9qc3goUmV3aW5kSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkpIH0pKSB9KSkpIDogbnVsbCwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNjYXJkXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiQWNjZXB0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogaGFuZGxlQWNjZXB0U3VnZ2VzdGlvbiB9LCB7IGNoaWxkcmVuOiBfanN4KENoZWNrSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKV0gfSldIH0pKSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFzdGVkVGV4dCA9IGUuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFzdGVkVGV4dC5sZW5ndGggPiBMQVJHRV9JTlBVVF9USFJFU0hPTEQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWwgPSB0ZXh0U3BhY2VSZWYuY3VycmVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IChfYSA9IGVsID09PSBudWxsIHx8IGVsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlbC5zZWxlY3Rpb25TdGFydCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSAoX2IgPSBlbCA9PT0gbnVsbCB8fCBlbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogZWwuc2VsZWN0aW9uRW5kKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcmVmZXIgbGl2ZSBET00gdmFsdWUg4oCUIGBjdXJyZW50VGV4dGAgY2FuIGxhZyB0aGUgdGV4dGFyZWEgZm9yIGJpZyBwYXN0ZXMuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFzZSA9IChfYyA9IGVsID09PSBudWxsIHx8IGVsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlbC52YWx1ZSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dFRleHQgPSBiYXNlLnNsaWNlKDAsIHN0YXJ0KSArIHBhc3RlZFRleHQgKyBiYXNlLnNsaWNlKGVuZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dChuZXh0VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChuZXh0VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FyZXQgPSBzdGFydCArIHBhc3RlZFRleHQubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YS5zZXRTZWxlY3Rpb25SYW5nZShjYXJldCwgY2FyZXQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChfYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlIGludmFsaWQgcmFuZ2UgaW4gZWRnZSBicm93c2Vyc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiAoX2pzeChXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIHsgYWN0aW9uczogYWN0aW9ucywgcmVmOiB0ZXh0U3BhY2VSZWYsIG9uQWN0aW9uU2VsZWN0OiBvbkFjdGlvblNlbGVjdCwgUmlnaHRDb21wb25lbnQ6IFJpZ2h0Q29tcG9uZW50LCByaWdodEFjdGlvbnNEaXNhYmxlZDogc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uIHx8IGlzR2VuZXJhdGluZywgb25FbW9qaUNsaWNrOiBvbkVtb2ppQWRkaXRpb24sIGFpQWN0aW9uczogYWlIZWFkZXJBY3Rpb25zLCBkaXNhYmxlQWxsQWN0aW9uczogc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uIHx8IGlzR2VuZXJhdGluZywgaW5zdHJ1Y3Rpb25BY3RpdmU6IGlzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIG9uQUlJbnN0cnVjdGlvbnNDbGljazogKCkgPT4gc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSh0cnVlKSwgb25BSVRvbmVDaGFuZ2U6IChhY3Rpb25UeXBlLCB0b25lSWQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRvbmVCeUFjdGlvbigocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW2FjdGlvblR5cGVdOiB0b25lSWQgfSkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQUlUb25lU2VsZWN0ID09PSBudWxsIHx8IG9uQUlUb25lU2VsZWN0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVG9uZVNlbGVjdChhY3Rpb25UeXBlLCB0b25lSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdG9uZUlkLCBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIG9uQUlBY3Rpb25DbGljazogKGFjdGlvblR5cGUsIGFjdGlvblZhcmlhbnQgPSBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNhbWUgYWN0aW9uIHNob3VsZCBub3QgcmV0cmlnZ2VyIGZyb20gY2hpcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnZW5lcmF0ZSBpcyBvbmx5IHZpYSBleHBsaWNpdCByZWdlbmVyYXRlIGNvbnRyb2wuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmV3IGFjdGlvbiBzdGFydHMgYSBmcmVzaCBzdWdnZXN0aW9uIHNlc3Npb24uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFjdGlvblZhcmlhbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFjdGlvblZhcmlhbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IH0pKV0gfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuZXhwb3J0IHsgQUlfVEFHX0NIQU5HRV9SQVRJT19USFJFU0hPTEQsIGNvbXB1dGVBaVRhZ09uQWNjZXB0LCBsZXZlbnNodGVpbkRpc3RhbmNlLCB9IGZyb20gJy4vYWkvYWlUYWcnO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1XaGF0c0FwcFRleHRFZGl0b3IuanMubWFwIl19 */",toString:h}),S=a.default("div","production"===process.env.NODE_ENV?{target:"ea7i3sh17"}:{target:"ea7i3sh17",label:"EditorSkeletonLine"})("height:16px;border-radius:6px;width:",(I=>I.width),";background:#ececef;animation:",n," 1.1s ease-in-out infinite;"+("production"===process.env.NODE_ENV?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBeUNzQyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIEZyYWdtZW50IGFzIF9GcmFnbWVudCwganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZXdpbmRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3Jld2luZC5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzRG93bkljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvdGh1bWJzX2Rvd24uc3ZnJztcclxuaW1wb3J0IFRodW1ic1VwSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfdXAuc3ZnJztcclxuaW1wb3J0IHsgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9CYXNlV2hhdHNhcHBDb250ZW50TGFuZy5oZWxwZXJcIjtcclxuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUsIH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgeyBDT0xPUlMgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzL1RoZW1lXCI7XHJcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICcuLi90b29sdGlwcy9Ub29sdGlwJztcclxuaW1wb3J0IHsgQm9keUNhcHRpb24sIFRpdGxlU21hbGwgfSBmcm9tICcuLi9UeXBvZ3JhcGh5U3R5bGUnO1xyXG5pbXBvcnQgeyBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlMsIERFRkFVTFRfSU5TVFJVQ1RJT05fU1VHR0VTVElPTlMsIHJlc29sdmVBY3Rpb25Qcm9tcHRzLCB9IGZyb20gJy4vYWkvYWN0aW9uUmVnaXN0cnknO1xyXG5pbXBvcnQgeyBjb21wdXRlQWlUYWdPbkFjY2VwdCB9IGZyb20gJy4vYWkvYWlUYWcnO1xyXG5pbXBvcnQgeyBidWlsZEFjdGlvblByb21wdCwgcmVxdWVzdEFJU3VnZ2VzdGlvbiB9IGZyb20gJy4vYWkvYXBpJztcclxuaW1wb3J0IHsgQ29udGFpbmVyLCBFZGl0b3JGb290ZXJSaWdodCwgRWRpdG9yRm9vdGVyUm93LCBFZGl0b3JGb290ZXJUaXRsZSwgT3V0ZXJDb250YWluZXIsIFRleHRTcGFjZSwgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUFjdGlvblZhcmlhbnQsIEFJRWRpdG9yQWN0aW9uVHlwZXMsIEVkaXRvckFjdGlvblR5cGVzLCBXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIH0gZnJvbSAnLi9XaGF0c0FwcFRleHRFZGl0b3JIZWFkZXInO1xyXG5jb25zdCBMSU1JVF9SRUFDSEVEID0gJ0NoYXJhY3RlciBsaW1pdCByZWFjaGVkJztcclxuY29uc3QgUkVQSFJBU0VfSURMRV9NUyA9IDMwMDA7XHJcbmNvbnN0IE1BWF9SRVBIUkFTRV9ISUdITElHSFRTID0gNTtcclxuY29uc3QgTUFYX1NVR0dFU1RJT05TID0gMztcclxuY29uc3QgTEFSR0VfSU5QVVRfVEhSRVNIT0xEID0gMTIwMDtcclxuY29uc3QgVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgPSAnUmVwaHJhc2UgdGhpcyBXaGF0c0FwcCB1dGlsaXR5IHRlbXBsYXRlIHRvIGltcHJvdmUgY2xhcml0eSBhbmQgcmVhZGFiaWxpdHkgd2hpbGUgcHJlc2VydmluZyB2YXJpYWJsZXMsIGludGVudCwgYW5kIGNvbXBsaWFuY2UuJztcclxuY29uc3Qgc2tlbGV0b25QdWxzZSA9IGtleWZyYW1lcyBgXG5cdDAlIHsgb3BhY2l0eTogMC41NTsgfVxuXHQ1MCUgeyBvcGFjaXR5OiAxOyB9XG5cdDEwMCUgeyBvcGFjaXR5OiAwLjU1OyB9XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxNHB4IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogMTBweDtcblx0bWluLWhlaWdodDogMTUwcHg7XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkxpbmUgPSBzdHlsZWQuZGl2IGBcblx0aGVpZ2h0OiAxNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdHdpZHRoOiAkeyhwcm9wcykgPT4gcHJvcHMud2lkdGh9O1xuXHRiYWNrZ3JvdW5kOiAjZWNlY2VmO1xuXHRhbmltYXRpb246ICR7c2tlbGV0b25QdWxzZX0gMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHRtYXgtaGVpZ2h0OiAyNjBweDtcblx0b3ZlcmZsb3cteTogc2Nyb2xsO1xuXHRzY3JvbGxiYXItd2lkdGg6IHRoaW47XG5cdHNjcm9sbGJhci1jb2xvcjogI2M4YzhjZiB0cmFuc3BhcmVudDtcblx0Ojotd2Via2l0LXNjcm9sbGJhciB7XG5cdFx0d2lkdGg6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcblx0XHRiYWNrZ3JvdW5kOiAjYzhjOGNmO1xuXHRcdGJvcmRlci1yYWRpdXM6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcblx0XHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0fVxuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkJhc2VsaW5lVGV4dCA9IHN0eWxlZC5kaXYgYFxuXHR0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25DYW5kaWRhdGVUZXh0ID0gc3R5bGVkLmRpdiBgXG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkNhbmRpZGF0ZVNrZWxldG9uID0gc3R5bGVkLmRpdiBgXG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHR3aWR0aDogMTAwJTtcblx0bWluLWhlaWdodDogNDBweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db250cm9sc1JvdyA9IHN0eWxlZC5kaXYgYFxuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDZweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db3VudGVyID0gc3R5bGVkLnNwYW4gYFxuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkljb25CdXR0b24gPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0cGFkZGluZzogNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdGRpc3BsYXk6IGlubGluZS1mbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0dHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjEycyBlYXNlO1xuXHQ6bm90KDpkaXNhYmxlZCk6aG92ZXIge1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICR7Q09MT1JTLnN1cmZhY2UuaG92ZXJlZH07XG5cdH1cblx0OmRpc2FibGVkIHtcblx0XHRvcGFjaXR5OiAwLjM1O1xuXHRcdGN1cnNvcjogbm90LWFsbG93ZWQ7XG5cdH1cbmA7XHJcbi8qKiBSZWdlbmVyYXRlIHN0YXlzIGZ1bGwgb3BhY2l0eSB3aGlsZSBkaXNhYmxlZCBzbyB0aGUgbG9hZGluZyBzaGltbWVyIHN0YXlzIHZpc2libGUgKHNhbWUgcHVsc2UgYXMgZWRpdG9yIHNrZWxldG9uKS4gKi9cclxuY29uc3QgU3VnZ2VzdGlvblJlZ2VuZXJhdGVCdXR0b24gPSBzdHlsZWQoU3VnZ2VzdGlvbkljb25CdXR0b24pIGBcblx0OmRpc2FibGVkIHtcblx0XHRvcGFjaXR5OiAxO1xuXHRcdGN1cnNvcjogd2FpdDtcblx0fVxuYDtcclxuY29uc3QgUmVnZW5lcmF0ZUljb25TaGltbWVyID0gc3R5bGVkLmRpdiBgXG5cdHdpZHRoOiAxNHB4O1xuXHRoZWlnaHQ6IDE0cHg7XG5cdGJvcmRlci1yYWRpdXM6IDRweDtcblx0YmFja2dyb3VuZDogI2VjZWNlZjtcblx0ZmxleC1zaHJpbms6IDA7XG5cdGFuaW1hdGlvbjogJHtza2VsZXRvblB1bHNlfSAxLjFzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xuYDtcclxuLyoqIFNhbWUgYm90dG9tIHRvb2xiYXIgc2xvdCBhcyBgV2hhdHNBcHBUZXh0RWRpdG9ySGVhZGVyYCDigJQgcmVwbGFjZXMgdGhlIGZ1bGwgaWNvbi9BSSBwYW5lbCB3aGlsZSBvcGVuLiAqL1xyXG5jb25zdCBJbnN0cnVjdGlvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblx0cGFkZGluZzogOHB4IDEycHg7XG5cdGdhcDogMTBweDtcblx0Ym9yZGVyLXJhZGl1czogMCAwIDRweCA0cHg7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXRSb3cgPSBzdHlsZWQuZGl2IGBcblx0Ym9yZGVyOiAxcHggc29saWQgI2Y1YTRjMDtcblx0Ym9yZGVyLXJhZGl1czogMTBweDtcblx0cGFkZGluZzogOHB4IDEwcHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbklucHV0ID0gc3R5bGVkLmlucHV0IGBcblx0ZmxleDogMTtcblx0bWluLXdpZHRoOiAwO1xuXHRib3JkZXI6IDA7XG5cdG91dGxpbmU6IG5vbmU7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25BY3Rpb25zID0gc3R5bGVkLmRpdiBgXG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQ2FuY2VsID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnNlY29uZGFyeX07XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0Zm9udC13ZWlnaHQ6IDUwMDtcblx0cGFkZGluZzogMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbXByb3ZlID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMXB4IHNvbGlkICM1ZDNhNzI7XG5cdGNvbG9yOiAjNWQzYTcyO1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0Ym9yZGVyLXJhZGl1czogOHB4O1xuXHRwYWRkaW5nOiA4cHggMTRweDtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRsaW5lLWhlaWdodDogMS4xO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0ID0gc3R5bGVkLmRpdiBgXG5cdG1hcmdpbi10b3A6IDEwcHg7XG5cdGJvcmRlci1yYWRpdXM6IDEycHg7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3gtc2hhZG93OiAwIDZweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkJ1dHRvbiA9IHN0eWxlZC5idXR0b24gYFxuXHR3aWR0aDogMTAwJTtcblx0Ym9yZGVyOiAwO1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgJHtDT0xPUlMuc3Ryb2tlLnByaW1hcnl9O1xuXHRiYWNrZ3JvdW5kOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyNlNWYzZTgnIDogJ3RyYW5zcGFyZW50Jyl9O1xuXHRjb2xvcjogJHsocHJvcHMpID0+IChwcm9wcy5zZWxlY3RlZCA/ICcjMWU2YjM0JyA6IENPTE9SUy5jb250ZW50LnByaW1hcnkpfTtcblx0dGV4dC1hbGlnbjogbGVmdDtcblx0cGFkZGluZzogMTJweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjI7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0OmZpcnN0LW9mLXR5cGUge1xuXHRcdGJvcmRlci10b3A6IDA7XG5cdH1cbmA7XHJcbmNvbnN0IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nID0gbmV3IEJhc2VXaGF0c2FwcENvbnRlbnRMYW5nSGVscGVyKCk7XHJcbmNvbnN0IFdpbGRDYXJkTWFwID0ge1xyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLkJPTERdOiAnKicsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuSVRBTElDXTogJ18nLFxyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLlNUUklLRVRIUk9VR0hdOiAnficsXHJcbn07XHJcbmZ1bmN0aW9uIGdldEhpZ2hsaWdodFN0b3JhZ2VLZXkoZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgIHJldHVybiBgd2hhdHNhcHAtZWRpdG9yLXJlcGhyYXNlLWhpZ2hsaWdodC0ke2VkaXRvckluc3RhbmNlS2V5IHx8ICdkZWZhdWx0J31gO1xyXG59XHJcbmV4cG9ydCBjb25zdCBXaGF0c0FwcFRleHRFZGl0b3IgPSBSZWFjdC5mb3J3YXJkUmVmKChfYSwgcmVmKSA9PiB7XHJcbiAgICB2YXIgeyBvbkNoYW5nZSwgb25DbGlja1ZhcmlhYmxlLCB0ZXh0OiBpbnB1dFZhbHVlLCBSaWdodENvbXBvbmVudCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yLCByb3dzLCBhY3Rpb25zLCBlZGl0b3JJbnN0YW5jZUtleSwgdGVtcGxhdGVUeXBlID0gJ21hcmtldGluZycsIHRlbXBsYXRlSWQsIHJlcXVlc3RFeGVjdXRvciwgYmFzZVVybCwgZW5kcG9pbnRQYXRoLCB1c2VDYXNlLCBzdG9yZUlkLCBhcGlBZGFwdGVyLCBjb252ZXJzYXRpb25JZCA9ICd3aGF0c2FwcC10ZW1wbGF0ZS1lZGl0b3InLCBzeXN0ZW1JZCA9ICd3aGF0c2FwcC13cml0ZXInLCBpbnRlbnQgPSAnZGVmYXVsdCcsIGVuYWJsZWRBSUFjdGlvbnMgPSBbXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlNIT1JURU4sXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FWFBBTkQsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FTU9KSUZZLFxyXG4gICAgXSwgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMgPSBmYWxzZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCBhaUFjdGlvbk1pbkNoYXJzLCBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgb25BSUV2ZW50LCBvbkFJVGFnQ29tcHV0ZWQsIHByZWZpbGxXYXNBaUdlbmVyYXRlZCA9IGZhbHNlLCBlZGl0b3JIZWFkZXIsIG9uQUlUb25lU2VsZWN0LCBvbkFJQWN0aW9uUmVxdWVzdCwgb25CdWlsZEFJUHJvbXB0IH0gPSBfYSwgdGV4dEFyZWFQcm9wcyA9IF9fcmVzdChfYSwgW1wib25DaGFuZ2VcIiwgXCJvbkNsaWNrVmFyaWFibGVcIiwgXCJ0ZXh0XCIsIFwiUmlnaHRDb21wb25lbnRcIiwgXCJlcnJvclwiLCBcImxpbWl0XCIsIFwib25FcnJvclwiLCBcInJvd3NcIiwgXCJhY3Rpb25zXCIsIFwiZWRpdG9ySW5zdGFuY2VLZXlcIiwgXCJ0ZW1wbGF0ZVR5cGVcIiwgXCJ0ZW1wbGF0ZUlkXCIsIFwicmVxdWVzdEV4ZWN1dG9yXCIsIFwiYmFzZVVybFwiLCBcImVuZHBvaW50UGF0aFwiLCBcInVzZUNhc2VcIiwgXCJzdG9yZUlkXCIsIFwiYXBpQWRhcHRlclwiLCBcImNvbnZlcnNhdGlvbklkXCIsIFwic3lzdGVtSWRcIiwgXCJpbnRlbnRcIiwgXCJlbmFibGVkQUlBY3Rpb25zXCIsIFwiZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnNcIiwgXCJwcm9tcHRPdmVycmlkZXNcIiwgXCJyZXBocmFzZVRvbmVzXCIsIFwiYWlBY3Rpb25NaW5DaGFyc1wiLCBcImluc3RydWN0aW9uU3VnZ2VzdGlvbnNcIiwgXCJvbkFJRXZlbnRcIiwgXCJvbkFJVGFnQ29tcHV0ZWRcIiwgXCJwcmVmaWxsV2FzQWlHZW5lcmF0ZWRcIiwgXCJlZGl0b3JIZWFkZXJcIiwgXCJvbkFJVG9uZVNlbGVjdFwiLCBcIm9uQUlBY3Rpb25SZXF1ZXN0XCIsIFwib25CdWlsZEFJUHJvbXB0XCJdKTtcclxuICAgIGNvbnN0IHRleHRTcGFjZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IFtjdXJyZW50VGV4dCwgc2V0Q3VycmVudFRleHRdID0gdXNlU3RhdGUoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICBjb25zdCBbaXNSZXBocmFzZUhpZ2hsaWdodGVkLCBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW3JlcGhyYXNlSGlnaGxpZ2h0Q291bnQsIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbaXNHZW5lcmF0aW5nLCBzZXRJc0dlbmVyYXRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2lzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGVdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2luc3RydWN0aW9uVGV4dCwgc2V0SW5zdHJ1Y3Rpb25UZXh0XSA9IHVzZVN0YXRlKCcnKTtcclxuICAgIGNvbnN0IFt0b25lQnlBY3Rpb24sIHNldFRvbmVCeUFjdGlvbl0gPSB1c2VTdGF0ZSh7fSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkJhc2VUZXh0LCBzZXRTdWdnZXN0aW9uQmFzZVRleHRdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkNhbmRpZGF0ZXMsIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzXSA9IHVzZVN0YXRlKFtdKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uSW5kZXgsIHNldFN1Z2dlc3Rpb25JbmRleF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGVdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBzdWdnZXN0aW9uU2Nyb2xsUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgcmVwaHJhc2VJZGxlUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgaGlnaGxpZ2h0UmVzZXRSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICAvKipcclxuICAgICAqIFByaW9yIGVsaWdpYmlsaXR5IGZvciByZXBocmFzZSBudWRnZSAobnVsbCA9IG5vdCBpbml0aWFsaXplZCkuXHJcbiAgICAgKiBNYXRjaGVzIHRoZSBjaGlwOiBub24tZW1wdHkgdHJpbSBhbmQgbGVuZ3RoIOKJpSBtaW4g4oCUIHNhbWUgYXMgYGFpSGVhZGVyQWN0aW9uc2AgZGlzYWJsZWQgcnVsZXMuXHJcbiAgICAgKi9cclxuICAgIGNvbnN0IHByZXZSZXBocmFzZUVsaWdpYmxlUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgZGVmZXJyZWRIdG1sUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgbGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIC8qKiBGaXJzdCBhY2NlcHQgYWZ0ZXIgZnVsbC1BSSBwcmVmaWxsIChgcHJlZmlsbFdhc0FpR2VuZXJhdGVkYCk7IGNsZWFyZWQgYWZ0ZXIgb25lIGFjY2VwdC4gKi9cclxuICAgIGNvbnN0IGluaXRpYWxBaVByZWZpbGxQaGFzZVJlZiA9IHVzZVJlZighIXByZWZpbGxXYXNBaUdlbmVyYXRlZCk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGluaXRpYWxBaVByZWZpbGxQaGFzZVJlZi5jdXJyZW50ID0gISFwcmVmaWxsV2FzQWlHZW5lcmF0ZWQ7XHJcbiAgICB9LCBbcHJlZmlsbFdhc0FpR2VuZXJhdGVkLCBlZGl0b3JJbnN0YW5jZUtleV0pO1xyXG4gICAgY29uc3QgYWN0aXZlQWN0aW9uUHJvbXB0cyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiByZXNvbHZlQWN0aW9uUHJvbXB0cyh0ZW1wbGF0ZVR5cGUsIHByb21wdE92ZXJyaWRlcywgcmVwaHJhc2VUb25lcyk7XHJcbiAgICB9LCBbcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCB0ZW1wbGF0ZVR5cGVdKTtcclxuICAgIGNvbnN0IGZpbHRlcmVkSW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGlmICghcXVlcnkpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucy5maWx0ZXIoKHN1Z2dlc3Rpb24pID0+IHN1Z2dlc3Rpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeSkpO1xyXG4gICAgfSwgW2luc3RydWN0aW9uU3VnZ2VzdGlvbnMsIGluc3RydWN0aW9uVGV4dF0pO1xyXG4gICAgY29uc3QgbWluQ2hhcnNCeUFjdGlvbiA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUyksIChhaUFjdGlvbk1pbkNoYXJzIHx8IHt9KSk7XHJcbiAgICB9LCBbYWlBY3Rpb25NaW5DaGFyc10pO1xyXG4gICAgY29uc3QgcmVwaHJhc2VNaW5DaGFycyA9IG1pbkNoYXJzQnlBY3Rpb25bQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV0gfHxcclxuICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV07XHJcbiAgICBjb25zdCBlbWl0QUlFdmVudCA9IHVzZUNhbGxiYWNrKChuYW1lLCBwYXlsb2FkKSA9PiB7XHJcbiAgICAgICAgb25BSUV2ZW50ID09PSBudWxsIHx8IG9uQUlFdmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSUV2ZW50KG5hbWUsIHBheWxvYWQpO1xyXG4gICAgfSwgW29uQUlFdmVudF0pO1xyXG4gICAgY29uc3Qgc2V0RWRpdG9yVGV4dCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIHNldEN1cnJlbnRUZXh0KChwcmV2KSA9PiAocHJldiA9PT0gbmV4dFRleHQgPyBwcmV2IDogbmV4dFRleHQpKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGVtaXRDaGFuZ2VXaXRoR3VhcmQgPSB1c2VDYWxsYmFjaygobmV4dFRleHQpID0+IHtcclxuICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGRlZmVycmVkSHRtbFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5leHRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIG5leHRUZXh0KTtcclxuICAgICAgICAgICAgZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChuZXh0VGV4dCkpO1xyXG4gICAgICAgICAgICB9LCAxNik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICB9LCBbb25DaGFuZ2VdKTtcclxuICAgIGNvbnN0IGNsZWFyU3VnZ2VzdGlvblNlc3Npb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0KG51bGwpO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtdKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUobnVsbCk7XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgPj0gTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXh0Q291bnQgPSByZXBocmFzZUhpZ2hsaWdodENvdW50ICsgMTtcclxuICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KG5leHRDb3VudCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSksIFN0cmluZyhuZXh0Q291bnQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKHRydWUpO1xyXG4gICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgIH0sIDEyMDApO1xyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5LCByZXBocmFzZUhpZ2hsaWdodENvdW50XSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHRSZWYgPSB1c2VSZWYodHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0KTtcclxuICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50ID0gdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0O1xyXG4gICAgZnVuY3Rpb24gaGFuZGxlT25DaGFuZ2UoZSkge1xyXG4gICAgICAgIGNvbnN0IHRleHQgPSBlLnRhcmdldC52YWx1ZTtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBzZXRDYXJldFBvc2l0aW9uKGNhcmV0UG9zKSB7XHJcbiAgICAgICAgY29uc3QgZWxlbSA9IHRleHRTcGFjZVJlZiA9PT0gbnVsbCB8fCB0ZXh0U3BhY2VSZWYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRleHRTcGFjZVJlZi5jdXJyZW50O1xyXG4gICAgICAgIGlmIChlbGVtICE9IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKGVsZW0uc2VsZWN0aW9uU3RhcnQpIHtcclxuICAgICAgICAgICAgICAgIGVsZW0uZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIGVsZW0uc2VsZWN0aW9uRW5kID0gY2FyZXRQb3M7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgZWxlbS5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIG9uQWN0aW9uU2VsZWN0KGFjdGlvblR5cGUpIHtcclxuICAgICAgICBjb25zdCB3aWxkQ2FyZCA9IFdpbGRDYXJkTWFwW2FjdGlvblR5cGVdO1xyXG4gICAgICAgIGlmICh3aWxkQ2FyZCAmJiB0ZXh0U3BhY2VSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHRleHQgfSA9IGluc2VydFRleHRBdEluZGV4KHdpbGRDYXJkLCBzdGFydCk7XHJcbiAgICAgICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uKHN0YXJ0ICsgMSk7XHJcbiAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBhZGRUZXh0T3JXcmFwKHdpbGRDYXJkKTtcclxuICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBvbkVtb2ppQWRkaXRpb24oZW1vamkpIHtcclxuICAgICAgICBjb25zdCB7IHRleHQgfSA9IGFkZFRleHQoZW1vamkpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhZGRUZXh0T3JXcmFwKHRleHRUb0FkZCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgbGV0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICBpZiAodGV4dFNwYWNlUmVmLmN1cnJlbnQgJiYgdGV4dFRvQWRkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgY29uc3Qgd2lsZENhcmQgPSB0ZXh0VG9BZGQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICAvKiogbm90aGluZyBpcyBzZWxlY3RlZCAqL1xyXG4gICAgICAgICAgICAgICAgLyoqIHNvIGFwcGVuZCB0aGUgd2lsZGNhcmQgYXQgdGhlIGVuZCAqL1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFkZFRleHQod2lsZENhcmQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGV4dCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLndyYXBwV2lsZGNhcmQoc3RhcnQsIGVuZCwgd2lsZENhcmQsIHRleHQpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaHRtbCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwodGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdGV4dCwgaHRtbCB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IHRleHQ6IHRleHQsIGh0bWw6IHRleHQgfTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZFRleHQodGV4dFRvQWRkKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgaWYgKHRleHRTcGFjZVJlZi5jdXJyZW50ICYmIHRleHRUb0FkZCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zZXJ0VGV4dEF0SW5kZXgodGV4dFRvQWRkLCBzdGFydCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dDogdGV4dCwgaHRtbDogdGV4dCB9O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gaW5zZXJ0VGV4dEF0SW5kZXgodGV4dFRvQWRkLCBpbmRleCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgbGV0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICB0ZXh0ID0gdGV4dC5zbGljZSgwLCBpbmRleCkgKyB0ZXh0VG9BZGQgKyB0ZXh0LnNsaWNlKGluZGV4KTtcclxuICAgICAgICBjb25zdCBodG1sID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTCh0ZXh0KTtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgIHJldHVybiB7IHRleHQsIGh0bWwgfTtcclxuICAgIH1cclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8ICFlZGl0b3JJbnN0YW5jZUtleSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNhY2hlZCA9IE51bWJlcihzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGdldEhpZ2hsaWdodFN0b3JhZ2VLZXkoZWRpdG9ySW5zdGFuY2VLZXkpKSB8fFxyXG4gICAgICAgICAgICAnMCcpO1xyXG4gICAgICAgIGlmICghTnVtYmVyLmlzTmFOKGNhY2hlZCkpIHtcclxuICAgICAgICAgICAgc2V0UmVwaHJhc2VIaWdobGlnaHRDb3VudChjYWNoZWQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtlZGl0b3JJbnN0YW5jZUtleV0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBjb25zdCBlbGlnaWJsZSA9ICEhY3VycmVudFRleHQudHJpbSgpICYmIGN1cnJlbnRUZXh0Lmxlbmd0aCA+PSByZXBocmFzZU1pbkNoYXJzO1xyXG4gICAgICAgIGlmIChwcmV2UmVwaHJhc2VFbGlnaWJsZVJlZi5jdXJyZW50ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHByZXZSZXBocmFzZUVsaWdpYmxlUmVmLmN1cnJlbnQgPSBlbGlnaWJsZTtcclxuICAgICAgICAgICAgaWYgKGVsaWdpYmxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50KCk7XHJcbiAgICAgICAgICAgICAgICB9LCBSRVBIUkFTRV9JRExFX01TKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZWxpZ2libGUpIHtcclxuICAgICAgICAgICAgcHJldlJlcGhyYXNlRWxpZ2libGVSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjcm9zc2VkVGhyZXNob2xkID0gIXByZXZSZXBocmFzZUVsaWdpYmxlUmVmLmN1cnJlbnQgJiYgZWxpZ2libGU7XHJcbiAgICAgICAgcHJldlJlcGhyYXNlRWxpZ2libGVSZWYuY3VycmVudCA9IHRydWU7XHJcbiAgICAgICAgaWYgKGNyb3NzZWRUaHJlc2hvbGQpIHtcclxuICAgICAgICAgICAgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0UmVmLmN1cnJlbnQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50KCk7XHJcbiAgICAgICAgfSwgUkVQSFJBU0VfSURMRV9NUyk7XHJcbiAgICB9LCBbY3VycmVudFRleHQsIHJlcGhyYXNlTWluQ2hhcnNdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGFjdGl2ZUNhbmRpZGF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzW3N1Z2dlc3Rpb25JbmRleF0gfHwgJyc7XHJcbiAgICBjb25zdCBzdWdnZXN0aW9uQmFzZUh0bWwgPSB1c2VNZW1vKCgpID0+IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwoc3VnZ2VzdGlvbkJhc2VUZXh0IHx8ICcnKSwgW3N1Z2dlc3Rpb25CYXNlVGV4dF0pO1xyXG4gICAgY29uc3QgYWN0aXZlQ2FuZGlkYXRlSHRtbCA9IHVzZU1lbW8oKCkgPT4gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChhY3RpdmVDYW5kaWRhdGUpLCBbYWN0aXZlQ2FuZGlkYXRlXSk7XHJcbiAgICBjb25zdCBjYW5SZWdlbmVyYXRlID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDwgTUFYX1NVR0dFU1RJT05TO1xyXG4gICAgY29uc3Qgc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID0gISFzdWdnZXN0aW9uQmFzZVRleHQgJiYgc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoID4gMDtcclxuICAgIGNvbnN0IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8IHN1Z2dlc3Rpb25JbmRleCA8PSAwO1xyXG4gICAgY29uc3QgaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDw9IDEgfHxcclxuICAgICAgICBzdWdnZXN0aW9uSW5kZXggPj0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBub2RlID0gc3VnZ2VzdGlvblNjcm9sbFJlZi5jdXJyZW50O1xyXG4gICAgICAgIGlmICghbm9kZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIG5vZGUuc2Nyb2xsVG9wID0gbm9kZS5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9LCBbYWN0aXZlQ2FuZGlkYXRlLCBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24sIGlzR2VuZXJhdGluZ10pO1xyXG4gICAgY29uc3QgZXhlY3V0ZUFJQWN0aW9uID0gdXNlQ2FsbGJhY2soKGFjdGlvblR5cGUsIHJlZ2VuZXJhdGVFeGlzdGluZyA9IGZhbHNlLCBpbnN0cnVjdGlvbk92ZXJyaWRlLCB0b25lT3ZlcnJpZGVJZCwgYWN0aW9uVmFyaWFudCA9IEFJQWN0aW9uVmFyaWFudC5ERUZBVUxUKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICB2YXIgX2IsIF9jLCBfZDtcclxuICAgICAgICBpZiAoIW9uQUlBY3Rpb25SZXF1ZXN0ICYmXHJcbiAgICAgICAgICAgICFhcGlBZGFwdGVyICYmXHJcbiAgICAgICAgICAgICghcmVxdWVzdEV4ZWN1dG9yIHx8ICFiYXNlVXJsKSkge1xyXG4gICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoJ0FJIGNvbmZpZ3VyYXRpb24gbWlzc2luZycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY3VycmVudFRleHQudHJpbSgpKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbWluQ2hhcnNGb3JBY3Rpb24gPSBtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICA1MDtcclxuICAgICAgICBpZiAoY3VycmVudFRleHQubGVuZ3RoIDwgbWluQ2hhcnNGb3JBY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpZiAoaXNHZW5lcmF0aW5nKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKHJlZ2VuZXJhdGVFeGlzdGluZyAmJiAhY2FuUmVnZW5lcmF0ZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGJhc2VDb25maWcgPSBhY3RpdmVBY3Rpb25Qcm9tcHRzW2FjdGlvblR5cGVdO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UgJiZcclxuICAgICAgICAgICAgdGVtcGxhdGVUeXBlID09PSAndXRpbGl0eScgJiZcclxuICAgICAgICAgICAgYWN0aW9uVmFyaWFudCA9PT0gQUlBY3Rpb25WYXJpYW50LlJFUEhSQVNFXHJcbiAgICAgICAgICAgID8gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBiYXNlQ29uZmlnKSwgeyBsYWJlbDogJ1JlcGhyYXNlJywgYmFzZVByb21wdDogVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgfSkgOiBiYXNlQ29uZmlnO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVG9uZUlkID0gdG9uZU92ZXJyaWRlSWQgfHxcclxuICAgICAgICAgICAgdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIGNvbmZpZy5kZWZhdWx0VG9uZUlkIHx8XHJcbiAgICAgICAgICAgICgoX2MgPSAoX2IgPSBjb25maWcudG9uZXMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYlswXSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmlkKTtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFRvbmUgPSAoX2QgPSBjb25maWcudG9uZXMpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5maW5kKCh0b25lKSA9PiB0b25lLmlkID09PSBzZWxlY3RlZFRvbmVJZCk7XHJcbiAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgPSBpbnN0cnVjdGlvbk92ZXJyaWRlICE9PSB1bmRlZmluZWRcclxuICAgICAgICAgICAgPyBpbnN0cnVjdGlvbk92ZXJyaWRlXHJcbiAgICAgICAgICAgIDogaW5zdHJ1Y3Rpb25UZXh0O1xyXG4gICAgICAgIGNvbnN0IHByb21wdCA9IChvbkJ1aWxkQUlQcm9tcHQgPT09IG51bGwgfHwgb25CdWlsZEFJUHJvbXB0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkJ1aWxkQUlQcm9tcHQoe1xyXG4gICAgICAgICAgICBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICBhY3Rpb25WYXJpYW50LFxyXG4gICAgICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICBjb25maWcsXHJcbiAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgIHRvbmVMYWJlbDogc2VsZWN0ZWRUb25lID09PSBudWxsIHx8IHNlbGVjdGVkVG9uZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZWN0ZWRUb25lLmxhYmVsLFxyXG4gICAgICAgICAgICBpbnN0cnVjdGlvblRleHQ6IGluc3RydWN0aW9uRm9yUHJvbXB0IHx8IHVuZGVmaW5lZCxcclxuICAgICAgICB9KSkgfHxcclxuICAgICAgICAgICAgYnVpbGRBY3Rpb25Qcm9tcHQoe1xyXG4gICAgICAgICAgICAgICAgY29uZmlnLFxyXG4gICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZCxcclxuICAgICAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIHNldElzR2VuZXJhdGluZyh0cnVlKTtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfYWN0aW9uX3RyaWdnZXJlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG9uQUlBY3Rpb25SZXF1ZXN0XHJcbiAgICAgICAgICAgICAgICA/IHlpZWxkIG9uQUlBY3Rpb25SZXF1ZXN0KHtcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblZhcmlhbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIDogeWllbGQgcmVxdWVzdEFJU3VnZ2VzdGlvbih7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgYmFzZVVybCxcclxuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgICAgIGludGVudCxcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICAgICAgICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZydcclxuICAgICAgICAgICAgICAgID8gcmVzdWx0LnRyaW0oKVxyXG4gICAgICAgICAgICAgICAgOiAoKHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3VsdC5ib2R5KSB8fCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKCFyZWdlbmVyYXRlRXhpc3RpbmcpIHtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25CYXNlVGV4dChjdXJyZW50VGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShhY3Rpb25UeXBlKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtjYW5kaWRhdGVdKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcygocHJldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IFsuLi5wcmV2LCBjYW5kaWRhdGVdLnNsaWNlKDAsIE1BWF9TVUdHRVNUSU9OUyk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgobmV4dC5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdGYWlsZWQgdG8gZ2VuZXJhdGUgQUkgc3VnZ2VzdGlvbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgc2V0SXNHZW5lcmF0aW5nKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9KSwgW1xyXG4gICAgICAgIHJlcXVlc3RFeGVjdXRvcixcclxuICAgICAgICBiYXNlVXJsLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBjYW5SZWdlbmVyYXRlLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGluc3RydWN0aW9uVGV4dCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIGVuZHBvaW50UGF0aCxcclxuICAgICAgICBhcGlBZGFwdGVyLFxyXG4gICAgICAgIGludGVudCxcclxuICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgIG9uRXJyb3IsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgICAgICBvbkFJQWN0aW9uUmVxdWVzdCxcclxuICAgICAgICBvbkJ1aWxkQUlQcm9tcHQsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFhY3RpdmVDYW5kaWRhdGUgfHwgIXN1Z2dlc3Rpb25CYXNlVGV4dCB8fCAhc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2FjY2VwdGVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGluSW5pdGlhbEFpUGhhc2UgPSBpbml0aWFsQWlQcmVmaWxsUGhhc2VSZWYuY3VycmVudDtcclxuICAgICAgICBjb25zdCB0YWdQYXlsb2FkID0gY29tcHV0ZUFpVGFnT25BY2NlcHQoe1xyXG4gICAgICAgICAgICBiYXNlbGluZVRleHQ6IHN1Z2dlc3Rpb25CYXNlVGV4dCxcclxuICAgICAgICAgICAgYWNjZXB0ZWRUZXh0OiBhY3RpdmVDYW5kaWRhdGUsXHJcbiAgICAgICAgICAgIGluaXRpYWxBaVByZWZpbGxQaGFzZTogaW5Jbml0aWFsQWlQaGFzZSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoaW5Jbml0aWFsQWlQaGFzZSkge1xyXG4gICAgICAgICAgICBpbml0aWFsQWlQcmVmaWxsUGhhc2VSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvbkFJVGFnQ29tcHV0ZWQgPT09IG51bGwgfHwgb25BSVRhZ0NvbXB1dGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVGFnQ29tcHV0ZWQodGFnUGF5bG9hZCk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGFjdGl2ZUNhbmRpZGF0ZSxcclxuICAgICAgICBzdWdnZXN0aW9uQmFzZVRleHQsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCxcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkLFxyXG4gICAgICAgIGVtaXRBSUV2ZW50LFxyXG4gICAgICAgIHRlbXBsYXRlSWQsXHJcbiAgICAgICAgb25BSVRhZ0NvbXB1dGVkLFxyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2Rpc2NhcmRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uKCk7XHJcbiAgICB9LCBbY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiwgZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKChyYXRpbmcpID0+IHtcclxuICAgICAgICBpZiAoIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2ZlZWRiYWNrX3N1Ym1pdHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICAgICAgcmF0aW5nLFxyXG4gICAgICAgICAgICBjYW5kaWRhdGVfaW5kZXg6IHN1Z2dlc3Rpb25JbmRleCArIDEsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LCBbZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzdWdnZXN0aW9uSW5kZXgsIHRlbXBsYXRlSWRdKTtcclxuICAgIGNvbnN0IGFpSGVhZGVyQWN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucylcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBlbmFibGVkQUlBY3Rpb25zLm1hcCgoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICAgICAgY29uc3QgYWN0aW9uQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICAgICAgY29uc3QgdG9uZUlkID0gdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICBhY3Rpb25Db25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAgICAgKChfYiA9IChfYSA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzBdKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWQpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBhY3Rpb25Db25maWcubGFiZWwsXHJcbiAgICAgICAgICAgICAgICBpc1ByaW1hcnk6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBpc0dlbmVyYXRpbmcgJiYgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHRlZDogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVwaHJhc2VIaWdobGlnaHRlZCxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhY3VycmVudFRleHQudHJpbSgpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQubGVuZ3RoIDxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG1pbkNoYXJzQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNTApIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgaXNHZW5lcmF0aW5nIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSksXHJcbiAgICAgICAgICAgICAgICBzaG93VG9uZURyb3Bkb3duOiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgICAgICAgICAgISEoKF9jID0gYWN0aW9uQ29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSxcclxuICAgICAgICAgICAgICAgIHRvbmVzOiBhY3Rpb25Db25maWcudG9uZXMsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZDogdG9uZUlkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGVuYWJsZWRBSUFjdGlvbnMsXHJcbiAgICAgICAgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMsXHJcbiAgICAgICAgYWN0aXZlQWN0aW9uUHJvbXB0cyxcclxuICAgICAgICB0b25lQnlBY3Rpb24sXHJcbiAgICAgICAgaXNHZW5lcmF0aW5nLFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbixcclxuICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgIF0pO1xyXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBhZGRUZXh0T3JXcmFwLFxyXG4gICAgICAgICAgICBhZGRUZXh0LFxyXG4gICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24sXHJcbiAgICAgICAgfTtcclxuICAgIH0sIFthZGRUZXh0T3JXcmFwLCBhZGRUZXh0LCBjdXJyZW50VGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoaW5wdXRWYWx1ZSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChpbnB1dFZhbHVlIHx8ICcnKTtcclxuICAgIH0sIFtpbnB1dFZhbHVlLCBzZXRFZGl0b3JUZXh0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICghbGltaXQgfHwgIW9uRXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBuZXh0RXJyb3IgPSBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdCA/IExJTUlUX1JFQUNIRUQgOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiAnJztcclxuICAgICAgICBpZiAobGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID09PSBuZXh0RXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBsYXN0RW1pdHRlZEVkaXRvckVycm9yUmVmLmN1cnJlbnQgPSBuZXh0RXJyb3I7XHJcbiAgICAgICAgb25FcnJvcihuZXh0RXJyb3IpO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCBlcnJvciwgbGltaXQsIG9uRXJyb3JdKTtcclxuICAgIHJldHVybiAoX2pzeHMoT3V0ZXJDb250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4cyhFZGl0b3JGb290ZXJSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvckZvb3RlclRpdGxlLCB7IGNoaWxkcmVuOiBlZGl0b3JIZWFkZXIgPyAoX2pzeChUaXRsZVNtYWxsLCBPYmplY3QuYXNzaWduKHsgXCJkYXRhLXRlc3RcIjogXCJib2R5LXRleHQtZm9yLWVkaXQtdGVtcGxhdGVcIiB9LCB7IGNoaWxkcmVuOiBlZGl0b3JIZWFkZXIgfSkpKSA6IG51bGwgfSksIF9qc3hzKEVkaXRvckZvb3RlclJpZ2h0LCB7IGNoaWxkcmVuOiBbZXJyb3IgJiYgZXJyb3IgIT09IExJTUlUX1JFQUNIRUQgPyAoX2pzeHMoX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBbX2pzeChJbmZvSWNvbiwgeyB3aWR0aDogMTYsIGhlaWdodDogMTYsIGNvbG9yOiBDT0xPUlMuY29udGVudC5uZWdhdGl2ZSB9KSwgX2pzeChCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IGNvbG9yOiBDT0xPUlMuY29udGVudC5uZWdhdGl2ZSB9LCB7IGNoaWxkcmVuOiBlcnJvciB9KSldIH0pKSA6IG51bGwsIGxpbWl0ID8gKF9qc3hzKEJvZHlDYXB0aW9uLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IGVycm9yID09PSBMSU1JVF9SRUFDSEVEIHx8IGN1cnJlbnRUZXh0Lmxlbmd0aCA+IGxpbWl0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IENPTE9SUy5jb250ZW50Lm5lZ2F0aXZlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IFtjdXJyZW50VGV4dC5sZW5ndGgsIFwiL1wiLCBsaW1pdF0gfSkpKSA6IG51bGxdIH0pXSB9KSwgX2pzeHMoQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgaXNFcnJvcjogISFlcnJvciB9LCB7IGNoaWxkcmVuOiBbc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID8gKF9qc3hzKFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgcmVmOiBzdWdnZXN0aW9uU2Nyb2xsUmVmIH0sIHsgY2hpbGRyZW46IFtfanN4KFN1Z2dlc3Rpb25CYXNlbGluZVRleHQsIHsgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHsgX19odG1sOiBzdWdnZXN0aW9uQmFzZUh0bWwgfSB9KSwgaXNHZW5lcmF0aW5nID8gKF9qc3goU3VnZ2VzdGlvbkNhbmRpZGF0ZVRleHQsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtYnVzeVwiOiBcInRydWVcIiB9LCB7IGNoaWxkcmVuOiBfanN4cyhTdWdnZXN0aW9uQ2FuZGlkYXRlU2tlbGV0b24sIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiODQlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjY4JVwiIH0pXSB9KSB9KSkpIDogKF9qc3goU3VnZ2VzdGlvbkNhbmRpZGF0ZVRleHQsIHsgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19odG1sOiBhY3RpdmVDYW5kaWRhdGVIdG1sLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSkpLCBfanN4cyhTdWdnZXN0aW9uQ29udHJvbHNSb3csIHsgY2hpbGRyZW46IFtfanN4cyhTdWdnZXN0aW9uQ291bnRlciwgeyBjaGlsZHJlbjogW3N1Z2dlc3Rpb25JbmRleCArIDEsIFwiL1wiLCBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGhdIH0pLCBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUHJldmlvdXMgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBkaXNhYmxlZDogaXNQcmV2U3VnZ2VzdGlvbkRpc2FibGVkLCBvbkNsaWNrOiAoKSA9PiBzZXRTdWdnZXN0aW9uSW5kZXgoKGlkeCkgPT4gTWF0aC5tYXgoMCwgaWR4IC0gMSkpIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hldnJvbkxlZnRJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSksIF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiTGlrZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUZlZWRiYWNrKCdsaWtlJykgfSwgeyBjaGlsZHJlbjogX2pzeChUaHVtYnNVcEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzbGlrZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkRpc2xpa2Ugc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiBoYW5kbGVGZWVkYmFjaygnZGlzbGlrZScpIH0sIHsgY2hpbGRyZW46IF9qc3goVGh1bWJzRG93bkljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIGNhblJlZ2VuZXJhdGUgPyAoX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogaXNHZW5lcmF0aW5nID8gJ1JlZ2VuZXJhdGluZ+KApicgOiAnUmVnZW5lcmF0ZScsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25SZWdlbmVyYXRlQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIFwiYXJpYS1idXN5XCI6IGlzR2VuZXJhdGluZywgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzR2VuZXJhdGluZywgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3VnZ2VzdGlvbkFjdGlvblR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IGlzR2VuZXJhdGluZyA/IChfanN4KFJlZ2VuZXJhdGVJY29uU2hpbW1lciwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUgfSkpIDogKF9qc3goUmV3aW5kSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkpIH0pKSB9KSkpIDogbnVsbCwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNjYXJkXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiQWNjZXB0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogaGFuZGxlQWNjZXB0U3VnZ2VzdGlvbiB9LCB7IGNoaWxkcmVuOiBfanN4KENoZWNrSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKV0gfSldIH0pKSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFzdGVkVGV4dCA9IGUuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFzdGVkVGV4dC5sZW5ndGggPiBMQVJHRV9JTlBVVF9USFJFU0hPTEQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWwgPSB0ZXh0U3BhY2VSZWYuY3VycmVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IChfYSA9IGVsID09PSBudWxsIHx8IGVsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlbC5zZWxlY3Rpb25TdGFydCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSAoX2IgPSBlbCA9PT0gbnVsbCB8fCBlbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogZWwuc2VsZWN0aW9uRW5kKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcmVmZXIgbGl2ZSBET00gdmFsdWUg4oCUIGBjdXJyZW50VGV4dGAgY2FuIGxhZyB0aGUgdGV4dGFyZWEgZm9yIGJpZyBwYXN0ZXMuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFzZSA9IChfYyA9IGVsID09PSBudWxsIHx8IGVsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlbC52YWx1ZSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dFRleHQgPSBiYXNlLnNsaWNlKDAsIHN0YXJ0KSArIHBhc3RlZFRleHQgKyBiYXNlLnNsaWNlKGVuZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dChuZXh0VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChuZXh0VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FyZXQgPSBzdGFydCArIHBhc3RlZFRleHQubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YS5zZXRTZWxlY3Rpb25SYW5nZShjYXJldCwgY2FyZXQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChfYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlIGludmFsaWQgcmFuZ2UgaW4gZWRnZSBicm93c2Vyc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiAoX2pzeChXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIHsgYWN0aW9uczogYWN0aW9ucywgcmVmOiB0ZXh0U3BhY2VSZWYsIG9uQWN0aW9uU2VsZWN0OiBvbkFjdGlvblNlbGVjdCwgUmlnaHRDb21wb25lbnQ6IFJpZ2h0Q29tcG9uZW50LCByaWdodEFjdGlvbnNEaXNhYmxlZDogc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uIHx8IGlzR2VuZXJhdGluZywgb25FbW9qaUNsaWNrOiBvbkVtb2ppQWRkaXRpb24sIGFpQWN0aW9uczogYWlIZWFkZXJBY3Rpb25zLCBkaXNhYmxlQWxsQWN0aW9uczogc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uIHx8IGlzR2VuZXJhdGluZywgaW5zdHJ1Y3Rpb25BY3RpdmU6IGlzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIG9uQUlJbnN0cnVjdGlvbnNDbGljazogKCkgPT4gc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSh0cnVlKSwgb25BSVRvbmVDaGFuZ2U6IChhY3Rpb25UeXBlLCB0b25lSWQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRvbmVCeUFjdGlvbigocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW2FjdGlvblR5cGVdOiB0b25lSWQgfSkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQUlUb25lU2VsZWN0ID09PSBudWxsIHx8IG9uQUlUb25lU2VsZWN0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVG9uZVNlbGVjdChhY3Rpb25UeXBlLCB0b25lSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdG9uZUlkLCBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIG9uQUlBY3Rpb25DbGljazogKGFjdGlvblR5cGUsIGFjdGlvblZhcmlhbnQgPSBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNhbWUgYWN0aW9uIHNob3VsZCBub3QgcmV0cmlnZ2VyIGZyb20gY2hpcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnZW5lcmF0ZSBpcyBvbmx5IHZpYSBleHBsaWNpdCByZWdlbmVyYXRlIGNvbnRyb2wuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmV3IGFjdGlvbiBzdGFydHMgYSBmcmVzaCBzdWdnZXN0aW9uIHNlc3Npb24uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFjdGlvblZhcmlhbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFjdGlvblZhcmlhbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IH0pKV0gfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuZXhwb3J0IHsgQUlfVEFHX0NIQU5HRV9SQVRJT19USFJFU0hPTEQsIGNvbXB1dGVBaVRhZ09uQWNjZXB0LCBsZXZlbnNodGVpbkRpc3RhbmNlLCB9IGZyb20gJy4vYWkvYWlUYWcnO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1XaGF0c0FwcFRleHRFZGl0b3IuanMubWFwIl19 */")),k=a.default("div","production"===process.env.NODE_ENV?{target:"ea7i3sh16"}:{target:"ea7i3sh16",label:"SuggestionSessionContainer"})("production"===process.env.NODE_ENV?{name:"lwqbyv",styles:"padding:12px;display:flex;flex-direction:column;gap:8px;max-height:260px;overflow-y:scroll;scrollbar-width:thin;scrollbar-color:#c8c8cf transparent;::-webkit-scrollbar{width:8px;}::-webkit-scrollbar-thumb{background:#c8c8cf;border-radius:8px;}::-webkit-scrollbar-track{background:transparent;}"}:{name:"lwqbyv",styles:"padding:12px;display:flex;flex-direction:column;gap:8px;max-height:260px;overflow-y:scroll;scrollbar-width:thin;scrollbar-color:#c8c8cf transparent;::-webkit-scrollbar{width:8px;}::-webkit-scrollbar-thumb{background:#c8c8cf;border-radius:8px;}::-webkit-scrollbar-track{background:transparent;}",map:"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZ0Q4QyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIEZyYWdtZW50IGFzIF9GcmFnbWVudCwganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZXdpbmRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3Jld2luZC5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzRG93bkljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvdGh1bWJzX2Rvd24uc3ZnJztcclxuaW1wb3J0IFRodW1ic1VwSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfdXAuc3ZnJztcclxuaW1wb3J0IHsgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9CYXNlV2hhdHNhcHBDb250ZW50TGFuZy5oZWxwZXJcIjtcclxuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUsIH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgeyBDT0xPUlMgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzL1RoZW1lXCI7XHJcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICcuLi90b29sdGlwcy9Ub29sdGlwJztcclxuaW1wb3J0IHsgQm9keUNhcHRpb24sIFRpdGxlU21hbGwgfSBmcm9tICcuLi9UeXBvZ3JhcGh5U3R5bGUnO1xyXG5pbXBvcnQgeyBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlMsIERFRkFVTFRfSU5TVFJVQ1RJT05fU1VHR0VTVElPTlMsIHJlc29sdmVBY3Rpb25Qcm9tcHRzLCB9IGZyb20gJy4vYWkvYWN0aW9uUmVnaXN0cnknO1xyXG5pbXBvcnQgeyBjb21wdXRlQWlUYWdPbkFjY2VwdCB9IGZyb20gJy4vYWkvYWlUYWcnO1xyXG5pbXBvcnQgeyBidWlsZEFjdGlvblByb21wdCwgcmVxdWVzdEFJU3VnZ2VzdGlvbiB9IGZyb20gJy4vYWkvYXBpJztcclxuaW1wb3J0IHsgQ29udGFpbmVyLCBFZGl0b3JGb290ZXJSaWdodCwgRWRpdG9yRm9vdGVyUm93LCBFZGl0b3JGb290ZXJUaXRsZSwgT3V0ZXJDb250YWluZXIsIFRleHRTcGFjZSwgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUFjdGlvblZhcmlhbnQsIEFJRWRpdG9yQWN0aW9uVHlwZXMsIEVkaXRvckFjdGlvblR5cGVzLCBXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIH0gZnJvbSAnLi9XaGF0c0FwcFRleHRFZGl0b3JIZWFkZXInO1xyXG5jb25zdCBMSU1JVF9SRUFDSEVEID0gJ0NoYXJhY3RlciBsaW1pdCByZWFjaGVkJztcclxuY29uc3QgUkVQSFJBU0VfSURMRV9NUyA9IDMwMDA7XHJcbmNvbnN0IE1BWF9SRVBIUkFTRV9ISUdITElHSFRTID0gNTtcclxuY29uc3QgTUFYX1NVR0dFU1RJT05TID0gMztcclxuY29uc3QgTEFSR0VfSU5QVVRfVEhSRVNIT0xEID0gMTIwMDtcclxuY29uc3QgVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgPSAnUmVwaHJhc2UgdGhpcyBXaGF0c0FwcCB1dGlsaXR5IHRlbXBsYXRlIHRvIGltcHJvdmUgY2xhcml0eSBhbmQgcmVhZGFiaWxpdHkgd2hpbGUgcHJlc2VydmluZyB2YXJpYWJsZXMsIGludGVudCwgYW5kIGNvbXBsaWFuY2UuJztcclxuY29uc3Qgc2tlbGV0b25QdWxzZSA9IGtleWZyYW1lcyBgXG5cdDAlIHsgb3BhY2l0eTogMC41NTsgfVxuXHQ1MCUgeyBvcGFjaXR5OiAxOyB9XG5cdDEwMCUgeyBvcGFjaXR5OiAwLjU1OyB9XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxNHB4IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogMTBweDtcblx0bWluLWhlaWdodDogMTUwcHg7XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkxpbmUgPSBzdHlsZWQuZGl2IGBcblx0aGVpZ2h0OiAxNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdHdpZHRoOiAkeyhwcm9wcykgPT4gcHJvcHMud2lkdGh9O1xuXHRiYWNrZ3JvdW5kOiAjZWNlY2VmO1xuXHRhbmltYXRpb246ICR7c2tlbGV0b25QdWxzZX0gMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHRtYXgtaGVpZ2h0OiAyNjBweDtcblx0b3ZlcmZsb3cteTogc2Nyb2xsO1xuXHRzY3JvbGxiYXItd2lkdGg6IHRoaW47XG5cdHNjcm9sbGJhci1jb2xvcjogI2M4YzhjZiB0cmFuc3BhcmVudDtcblx0Ojotd2Via2l0LXNjcm9sbGJhciB7XG5cdFx0d2lkdGg6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcblx0XHRiYWNrZ3JvdW5kOiAjYzhjOGNmO1xuXHRcdGJvcmRlci1yYWRpdXM6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcblx0XHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0fVxuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkJhc2VsaW5lVGV4dCA9IHN0eWxlZC5kaXYgYFxuXHR0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25DYW5kaWRhdGVUZXh0ID0gc3R5bGVkLmRpdiBgXG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkNhbmRpZGF0ZVNrZWxldG9uID0gc3R5bGVkLmRpdiBgXG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHR3aWR0aDogMTAwJTtcblx0bWluLWhlaWdodDogNDBweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db250cm9sc1JvdyA9IHN0eWxlZC5kaXYgYFxuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDZweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db3VudGVyID0gc3R5bGVkLnNwYW4gYFxuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkljb25CdXR0b24gPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0cGFkZGluZzogNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdGRpc3BsYXk6IGlubGluZS1mbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0dHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjEycyBlYXNlO1xuXHQ6bm90KDpkaXNhYmxlZCk6aG92ZXIge1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICR7Q09MT1JTLnN1cmZhY2UuaG92ZXJlZH07XG5cdH1cblx0OmRpc2FibGVkIHtcblx0XHRvcGFjaXR5OiAwLjM1O1xuXHRcdGN1cnNvcjogbm90LWFsbG93ZWQ7XG5cdH1cbmA7XHJcbi8qKiBSZWdlbmVyYXRlIHN0YXlzIGZ1bGwgb3BhY2l0eSB3aGlsZSBkaXNhYmxlZCBzbyB0aGUgbG9hZGluZyBzaGltbWVyIHN0YXlzIHZpc2libGUgKHNhbWUgcHVsc2UgYXMgZWRpdG9yIHNrZWxldG9uKS4gKi9cclxuY29uc3QgU3VnZ2VzdGlvblJlZ2VuZXJhdGVCdXR0b24gPSBzdHlsZWQoU3VnZ2VzdGlvbkljb25CdXR0b24pIGBcblx0OmRpc2FibGVkIHtcblx0XHRvcGFjaXR5OiAxO1xuXHRcdGN1cnNvcjogd2FpdDtcblx0fVxuYDtcclxuY29uc3QgUmVnZW5lcmF0ZUljb25TaGltbWVyID0gc3R5bGVkLmRpdiBgXG5cdHdpZHRoOiAxNHB4O1xuXHRoZWlnaHQ6IDE0cHg7XG5cdGJvcmRlci1yYWRpdXM6IDRweDtcblx0YmFja2dyb3VuZDogI2VjZWNlZjtcblx0ZmxleC1zaHJpbms6IDA7XG5cdGFuaW1hdGlvbjogJHtza2VsZXRvblB1bHNlfSAxLjFzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xuYDtcclxuLyoqIFNhbWUgYm90dG9tIHRvb2xiYXIgc2xvdCBhcyBgV2hhdHNBcHBUZXh0RWRpdG9ySGVhZGVyYCDigJQgcmVwbGFjZXMgdGhlIGZ1bGwgaWNvbi9BSSBwYW5lbCB3aGlsZSBvcGVuLiAqL1xyXG5jb25zdCBJbnN0cnVjdGlvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblx0cGFkZGluZzogOHB4IDEycHg7XG5cdGdhcDogMTBweDtcblx0Ym9yZGVyLXJhZGl1czogMCAwIDRweCA0cHg7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXRSb3cgPSBzdHlsZWQuZGl2IGBcblx0Ym9yZGVyOiAxcHggc29saWQgI2Y1YTRjMDtcblx0Ym9yZGVyLXJhZGl1czogMTBweDtcblx0cGFkZGluZzogOHB4IDEwcHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbklucHV0ID0gc3R5bGVkLmlucHV0IGBcblx0ZmxleDogMTtcblx0bWluLXdpZHRoOiAwO1xuXHRib3JkZXI6IDA7XG5cdG91dGxpbmU6IG5vbmU7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25BY3Rpb25zID0gc3R5bGVkLmRpdiBgXG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQ2FuY2VsID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnNlY29uZGFyeX07XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0Zm9udC13ZWlnaHQ6IDUwMDtcblx0cGFkZGluZzogMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbXByb3ZlID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMXB4IHNvbGlkICM1ZDNhNzI7XG5cdGNvbG9yOiAjNWQzYTcyO1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0Ym9yZGVyLXJhZGl1czogOHB4O1xuXHRwYWRkaW5nOiA4cHggMTRweDtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRsaW5lLWhlaWdodDogMS4xO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0ID0gc3R5bGVkLmRpdiBgXG5cdG1hcmdpbi10b3A6IDEwcHg7XG5cdGJvcmRlci1yYWRpdXM6IDEycHg7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3gtc2hhZG93OiAwIDZweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkJ1dHRvbiA9IHN0eWxlZC5idXR0b24gYFxuXHR3aWR0aDogMTAwJTtcblx0Ym9yZGVyOiAwO1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgJHtDT0xPUlMuc3Ryb2tlLnByaW1hcnl9O1xuXHRiYWNrZ3JvdW5kOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyNlNWYzZTgnIDogJ3RyYW5zcGFyZW50Jyl9O1xuXHRjb2xvcjogJHsocHJvcHMpID0+IChwcm9wcy5zZWxlY3RlZCA/ICcjMWU2YjM0JyA6IENPTE9SUy5jb250ZW50LnByaW1hcnkpfTtcblx0dGV4dC1hbGlnbjogbGVmdDtcblx0cGFkZGluZzogMTJweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjI7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0OmZpcnN0LW9mLXR5cGUge1xuXHRcdGJvcmRlci10b3A6IDA7XG5cdH1cbmA7XHJcbmNvbnN0IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nID0gbmV3IEJhc2VXaGF0c2FwcENvbnRlbnRMYW5nSGVscGVyKCk7XHJcbmNvbnN0IFdpbGRDYXJkTWFwID0ge1xyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLkJPTERdOiAnKicsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuSVRBTElDXTogJ18nLFxyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLlNUUklLRVRIUk9VR0hdOiAnficsXHJcbn07XHJcbmZ1bmN0aW9uIGdldEhpZ2hsaWdodFN0b3JhZ2VLZXkoZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgIHJldHVybiBgd2hhdHNhcHAtZWRpdG9yLXJlcGhyYXNlLWhpZ2hsaWdodC0ke2VkaXRvckluc3RhbmNlS2V5IHx8ICdkZWZhdWx0J31gO1xyXG59XHJcbmV4cG9ydCBjb25zdCBXaGF0c0FwcFRleHRFZGl0b3IgPSBSZWFjdC5mb3J3YXJkUmVmKChfYSwgcmVmKSA9PiB7XHJcbiAgICB2YXIgeyBvbkNoYW5nZSwgb25DbGlja1ZhcmlhYmxlLCB0ZXh0OiBpbnB1dFZhbHVlLCBSaWdodENvbXBvbmVudCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yLCByb3dzLCBhY3Rpb25zLCBlZGl0b3JJbnN0YW5jZUtleSwgdGVtcGxhdGVUeXBlID0gJ21hcmtldGluZycsIHRlbXBsYXRlSWQsIHJlcXVlc3RFeGVjdXRvciwgYmFzZVVybCwgZW5kcG9pbnRQYXRoLCB1c2VDYXNlLCBzdG9yZUlkLCBhcGlBZGFwdGVyLCBjb252ZXJzYXRpb25JZCA9ICd3aGF0c2FwcC10ZW1wbGF0ZS1lZGl0b3InLCBzeXN0ZW1JZCA9ICd3aGF0c2FwcC13cml0ZXInLCBpbnRlbnQgPSAnZGVmYXVsdCcsIGVuYWJsZWRBSUFjdGlvbnMgPSBbXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlNIT1JURU4sXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FWFBBTkQsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FTU9KSUZZLFxyXG4gICAgXSwgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMgPSBmYWxzZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCBhaUFjdGlvbk1pbkNoYXJzLCBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgb25BSUV2ZW50LCBvbkFJVGFnQ29tcHV0ZWQsIHByZWZpbGxXYXNBaUdlbmVyYXRlZCA9IGZhbHNlLCBlZGl0b3JIZWFkZXIsIG9uQUlUb25lU2VsZWN0LCBvbkFJQWN0aW9uUmVxdWVzdCwgb25CdWlsZEFJUHJvbXB0IH0gPSBfYSwgdGV4dEFyZWFQcm9wcyA9IF9fcmVzdChfYSwgW1wib25DaGFuZ2VcIiwgXCJvbkNsaWNrVmFyaWFibGVcIiwgXCJ0ZXh0XCIsIFwiUmlnaHRDb21wb25lbnRcIiwgXCJlcnJvclwiLCBcImxpbWl0XCIsIFwib25FcnJvclwiLCBcInJvd3NcIiwgXCJhY3Rpb25zXCIsIFwiZWRpdG9ySW5zdGFuY2VLZXlcIiwgXCJ0ZW1wbGF0ZVR5cGVcIiwgXCJ0ZW1wbGF0ZUlkXCIsIFwicmVxdWVzdEV4ZWN1dG9yXCIsIFwiYmFzZVVybFwiLCBcImVuZHBvaW50UGF0aFwiLCBcInVzZUNhc2VcIiwgXCJzdG9yZUlkXCIsIFwiYXBpQWRhcHRlclwiLCBcImNvbnZlcnNhdGlvbklkXCIsIFwic3lzdGVtSWRcIiwgXCJpbnRlbnRcIiwgXCJlbmFibGVkQUlBY3Rpb25zXCIsIFwiZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnNcIiwgXCJwcm9tcHRPdmVycmlkZXNcIiwgXCJyZXBocmFzZVRvbmVzXCIsIFwiYWlBY3Rpb25NaW5DaGFyc1wiLCBcImluc3RydWN0aW9uU3VnZ2VzdGlvbnNcIiwgXCJvbkFJRXZlbnRcIiwgXCJvbkFJVGFnQ29tcHV0ZWRcIiwgXCJwcmVmaWxsV2FzQWlHZW5lcmF0ZWRcIiwgXCJlZGl0b3JIZWFkZXJcIiwgXCJvbkFJVG9uZVNlbGVjdFwiLCBcIm9uQUlBY3Rpb25SZXF1ZXN0XCIsIFwib25CdWlsZEFJUHJvbXB0XCJdKTtcclxuICAgIGNvbnN0IHRleHRTcGFjZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IFtjdXJyZW50VGV4dCwgc2V0Q3VycmVudFRleHRdID0gdXNlU3RhdGUoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICBjb25zdCBbaXNSZXBocmFzZUhpZ2hsaWdodGVkLCBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW3JlcGhyYXNlSGlnaGxpZ2h0Q291bnQsIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbaXNHZW5lcmF0aW5nLCBzZXRJc0dlbmVyYXRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2lzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGVdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2luc3RydWN0aW9uVGV4dCwgc2V0SW5zdHJ1Y3Rpb25UZXh0XSA9IHVzZVN0YXRlKCcnKTtcclxuICAgIGNvbnN0IFt0b25lQnlBY3Rpb24sIHNldFRvbmVCeUFjdGlvbl0gPSB1c2VTdGF0ZSh7fSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkJhc2VUZXh0LCBzZXRTdWdnZXN0aW9uQmFzZVRleHRdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkNhbmRpZGF0ZXMsIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzXSA9IHVzZVN0YXRlKFtdKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uSW5kZXgsIHNldFN1Z2dlc3Rpb25JbmRleF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGVdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBzdWdnZXN0aW9uU2Nyb2xsUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgcmVwaHJhc2VJZGxlUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgaGlnaGxpZ2h0UmVzZXRSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICAvKipcclxuICAgICAqIFByaW9yIGVsaWdpYmlsaXR5IGZvciByZXBocmFzZSBudWRnZSAobnVsbCA9IG5vdCBpbml0aWFsaXplZCkuXHJcbiAgICAgKiBNYXRjaGVzIHRoZSBjaGlwOiBub24tZW1wdHkgdHJpbSBhbmQgbGVuZ3RoIOKJpSBtaW4g4oCUIHNhbWUgYXMgYGFpSGVhZGVyQWN0aW9uc2AgZGlzYWJsZWQgcnVsZXMuXHJcbiAgICAgKi9cclxuICAgIGNvbnN0IHByZXZSZXBocmFzZUVsaWdpYmxlUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgZGVmZXJyZWRIdG1sUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgbGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIC8qKiBGaXJzdCBhY2NlcHQgYWZ0ZXIgZnVsbC1BSSBwcmVmaWxsIChgcHJlZmlsbFdhc0FpR2VuZXJhdGVkYCk7IGNsZWFyZWQgYWZ0ZXIgb25lIGFjY2VwdC4gKi9cclxuICAgIGNvbnN0IGluaXRpYWxBaVByZWZpbGxQaGFzZVJlZiA9IHVzZVJlZighIXByZWZpbGxXYXNBaUdlbmVyYXRlZCk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGluaXRpYWxBaVByZWZpbGxQaGFzZVJlZi5jdXJyZW50ID0gISFwcmVmaWxsV2FzQWlHZW5lcmF0ZWQ7XHJcbiAgICB9LCBbcHJlZmlsbFdhc0FpR2VuZXJhdGVkLCBlZGl0b3JJbnN0YW5jZUtleV0pO1xyXG4gICAgY29uc3QgYWN0aXZlQWN0aW9uUHJvbXB0cyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiByZXNvbHZlQWN0aW9uUHJvbXB0cyh0ZW1wbGF0ZVR5cGUsIHByb21wdE92ZXJyaWRlcywgcmVwaHJhc2VUb25lcyk7XHJcbiAgICB9LCBbcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCB0ZW1wbGF0ZVR5cGVdKTtcclxuICAgIGNvbnN0IGZpbHRlcmVkSW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGlmICghcXVlcnkpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucy5maWx0ZXIoKHN1Z2dlc3Rpb24pID0+IHN1Z2dlc3Rpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeSkpO1xyXG4gICAgfSwgW2luc3RydWN0aW9uU3VnZ2VzdGlvbnMsIGluc3RydWN0aW9uVGV4dF0pO1xyXG4gICAgY29uc3QgbWluQ2hhcnNCeUFjdGlvbiA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUyksIChhaUFjdGlvbk1pbkNoYXJzIHx8IHt9KSk7XHJcbiAgICB9LCBbYWlBY3Rpb25NaW5DaGFyc10pO1xyXG4gICAgY29uc3QgcmVwaHJhc2VNaW5DaGFycyA9IG1pbkNoYXJzQnlBY3Rpb25bQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV0gfHxcclxuICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV07XHJcbiAgICBjb25zdCBlbWl0QUlFdmVudCA9IHVzZUNhbGxiYWNrKChuYW1lLCBwYXlsb2FkKSA9PiB7XHJcbiAgICAgICAgb25BSUV2ZW50ID09PSBudWxsIHx8IG9uQUlFdmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSUV2ZW50KG5hbWUsIHBheWxvYWQpO1xyXG4gICAgfSwgW29uQUlFdmVudF0pO1xyXG4gICAgY29uc3Qgc2V0RWRpdG9yVGV4dCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIHNldEN1cnJlbnRUZXh0KChwcmV2KSA9PiAocHJldiA9PT0gbmV4dFRleHQgPyBwcmV2IDogbmV4dFRleHQpKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGVtaXRDaGFuZ2VXaXRoR3VhcmQgPSB1c2VDYWxsYmFjaygobmV4dFRleHQpID0+IHtcclxuICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGRlZmVycmVkSHRtbFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5leHRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIG5leHRUZXh0KTtcclxuICAgICAgICAgICAgZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChuZXh0VGV4dCkpO1xyXG4gICAgICAgICAgICB9LCAxNik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICB9LCBbb25DaGFuZ2VdKTtcclxuICAgIGNvbnN0IGNsZWFyU3VnZ2VzdGlvblNlc3Npb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0KG51bGwpO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtdKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUobnVsbCk7XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgPj0gTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXh0Q291bnQgPSByZXBocmFzZUhpZ2hsaWdodENvdW50ICsgMTtcclxuICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KG5leHRDb3VudCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSksIFN0cmluZyhuZXh0Q291bnQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKHRydWUpO1xyXG4gICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgIH0sIDEyMDApO1xyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5LCByZXBocmFzZUhpZ2hsaWdodENvdW50XSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHRSZWYgPSB1c2VSZWYodHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0KTtcclxuICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50ID0gdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0O1xyXG4gICAgZnVuY3Rpb24gaGFuZGxlT25DaGFuZ2UoZSkge1xyXG4gICAgICAgIGNvbnN0IHRleHQgPSBlLnRhcmdldC52YWx1ZTtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBzZXRDYXJldFBvc2l0aW9uKGNhcmV0UG9zKSB7XHJcbiAgICAgICAgY29uc3QgZWxlbSA9IHRleHRTcGFjZVJlZiA9PT0gbnVsbCB8fCB0ZXh0U3BhY2VSZWYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRleHRTcGFjZVJlZi5jdXJyZW50O1xyXG4gICAgICAgIGlmIChlbGVtICE9IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKGVsZW0uc2VsZWN0aW9uU3RhcnQpIHtcclxuICAgICAgICAgICAgICAgIGVsZW0uZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIGVsZW0uc2VsZWN0aW9uRW5kID0gY2FyZXRQb3M7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgZWxlbS5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIG9uQWN0aW9uU2VsZWN0KGFjdGlvblR5cGUpIHtcclxuICAgICAgICBjb25zdCB3aWxkQ2FyZCA9IFdpbGRDYXJkTWFwW2FjdGlvblR5cGVdO1xyXG4gICAgICAgIGlmICh3aWxkQ2FyZCAmJiB0ZXh0U3BhY2VSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHRleHQgfSA9IGluc2VydFRleHRBdEluZGV4KHdpbGRDYXJkLCBzdGFydCk7XHJcbiAgICAgICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uKHN0YXJ0ICsgMSk7XHJcbiAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBhZGRUZXh0T3JXcmFwKHdpbGRDYXJkKTtcclxuICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBvbkVtb2ppQWRkaXRpb24oZW1vamkpIHtcclxuICAgICAgICBjb25zdCB7IHRleHQgfSA9IGFkZFRleHQoZW1vamkpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhZGRUZXh0T3JXcmFwKHRleHRUb0FkZCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgbGV0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICBpZiAodGV4dFNwYWNlUmVmLmN1cnJlbnQgJiYgdGV4dFRvQWRkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgY29uc3Qgd2lsZENhcmQgPSB0ZXh0VG9BZGQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICAvKiogbm90aGluZyBpcyBzZWxlY3RlZCAqL1xyXG4gICAgICAgICAgICAgICAgLyoqIHNvIGFwcGVuZCB0aGUgd2lsZGNhcmQgYXQgdGhlIGVuZCAqL1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFkZFRleHQod2lsZENhcmQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGV4dCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLndyYXBwV2lsZGNhcmQoc3RhcnQsIGVuZCwgd2lsZENhcmQsIHRleHQpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaHRtbCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwodGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdGV4dCwgaHRtbCB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IHRleHQ6IHRleHQsIGh0bWw6IHRleHQgfTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZFRleHQodGV4dFRvQWRkKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgaWYgKHRleHRTcGFjZVJlZi5jdXJyZW50ICYmIHRleHRUb0FkZCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zZXJ0VGV4dEF0SW5kZXgodGV4dFRvQWRkLCBzdGFydCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dDogdGV4dCwgaHRtbDogdGV4dCB9O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gaW5zZXJ0VGV4dEF0SW5kZXgodGV4dFRvQWRkLCBpbmRleCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgbGV0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICB0ZXh0ID0gdGV4dC5zbGljZSgwLCBpbmRleCkgKyB0ZXh0VG9BZGQgKyB0ZXh0LnNsaWNlKGluZGV4KTtcclxuICAgICAgICBjb25zdCBodG1sID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTCh0ZXh0KTtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgIHJldHVybiB7IHRleHQsIGh0bWwgfTtcclxuICAgIH1cclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8ICFlZGl0b3JJbnN0YW5jZUtleSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNhY2hlZCA9IE51bWJlcihzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGdldEhpZ2hsaWdodFN0b3JhZ2VLZXkoZWRpdG9ySW5zdGFuY2VLZXkpKSB8fFxyXG4gICAgICAgICAgICAnMCcpO1xyXG4gICAgICAgIGlmICghTnVtYmVyLmlzTmFOKGNhY2hlZCkpIHtcclxuICAgICAgICAgICAgc2V0UmVwaHJhc2VIaWdobGlnaHRDb3VudChjYWNoZWQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtlZGl0b3JJbnN0YW5jZUtleV0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBjb25zdCBlbGlnaWJsZSA9ICEhY3VycmVudFRleHQudHJpbSgpICYmIGN1cnJlbnRUZXh0Lmxlbmd0aCA+PSByZXBocmFzZU1pbkNoYXJzO1xyXG4gICAgICAgIGlmIChwcmV2UmVwaHJhc2VFbGlnaWJsZVJlZi5jdXJyZW50ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHByZXZSZXBocmFzZUVsaWdpYmxlUmVmLmN1cnJlbnQgPSBlbGlnaWJsZTtcclxuICAgICAgICAgICAgaWYgKGVsaWdpYmxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50KCk7XHJcbiAgICAgICAgICAgICAgICB9LCBSRVBIUkFTRV9JRExFX01TKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZWxpZ2libGUpIHtcclxuICAgICAgICAgICAgcHJldlJlcGhyYXNlRWxpZ2libGVSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjcm9zc2VkVGhyZXNob2xkID0gIXByZXZSZXBocmFzZUVsaWdpYmxlUmVmLmN1cnJlbnQgJiYgZWxpZ2libGU7XHJcbiAgICAgICAgcHJldlJlcGhyYXNlRWxpZ2libGVSZWYuY3VycmVudCA9IHRydWU7XHJcbiAgICAgICAgaWYgKGNyb3NzZWRUaHJlc2hvbGQpIHtcclxuICAgICAgICAgICAgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0UmVmLmN1cnJlbnQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50KCk7XHJcbiAgICAgICAgfSwgUkVQSFJBU0VfSURMRV9NUyk7XHJcbiAgICB9LCBbY3VycmVudFRleHQsIHJlcGhyYXNlTWluQ2hhcnNdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGFjdGl2ZUNhbmRpZGF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzW3N1Z2dlc3Rpb25JbmRleF0gfHwgJyc7XHJcbiAgICBjb25zdCBzdWdnZXN0aW9uQmFzZUh0bWwgPSB1c2VNZW1vKCgpID0+IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwoc3VnZ2VzdGlvbkJhc2VUZXh0IHx8ICcnKSwgW3N1Z2dlc3Rpb25CYXNlVGV4dF0pO1xyXG4gICAgY29uc3QgYWN0aXZlQ2FuZGlkYXRlSHRtbCA9IHVzZU1lbW8oKCkgPT4gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChhY3RpdmVDYW5kaWRhdGUpLCBbYWN0aXZlQ2FuZGlkYXRlXSk7XHJcbiAgICBjb25zdCBjYW5SZWdlbmVyYXRlID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDwgTUFYX1NVR0dFU1RJT05TO1xyXG4gICAgY29uc3Qgc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID0gISFzdWdnZXN0aW9uQmFzZVRleHQgJiYgc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoID4gMDtcclxuICAgIGNvbnN0IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8IHN1Z2dlc3Rpb25JbmRleCA8PSAwO1xyXG4gICAgY29uc3QgaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDw9IDEgfHxcclxuICAgICAgICBzdWdnZXN0aW9uSW5kZXggPj0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBub2RlID0gc3VnZ2VzdGlvblNjcm9sbFJlZi5jdXJyZW50O1xyXG4gICAgICAgIGlmICghbm9kZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIG5vZGUuc2Nyb2xsVG9wID0gbm9kZS5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9LCBbYWN0aXZlQ2FuZGlkYXRlLCBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24sIGlzR2VuZXJhdGluZ10pO1xyXG4gICAgY29uc3QgZXhlY3V0ZUFJQWN0aW9uID0gdXNlQ2FsbGJhY2soKGFjdGlvblR5cGUsIHJlZ2VuZXJhdGVFeGlzdGluZyA9IGZhbHNlLCBpbnN0cnVjdGlvbk92ZXJyaWRlLCB0b25lT3ZlcnJpZGVJZCwgYWN0aW9uVmFyaWFudCA9IEFJQWN0aW9uVmFyaWFudC5ERUZBVUxUKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICB2YXIgX2IsIF9jLCBfZDtcclxuICAgICAgICBpZiAoIW9uQUlBY3Rpb25SZXF1ZXN0ICYmXHJcbiAgICAgICAgICAgICFhcGlBZGFwdGVyICYmXHJcbiAgICAgICAgICAgICghcmVxdWVzdEV4ZWN1dG9yIHx8ICFiYXNlVXJsKSkge1xyXG4gICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoJ0FJIGNvbmZpZ3VyYXRpb24gbWlzc2luZycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY3VycmVudFRleHQudHJpbSgpKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbWluQ2hhcnNGb3JBY3Rpb24gPSBtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICA1MDtcclxuICAgICAgICBpZiAoY3VycmVudFRleHQubGVuZ3RoIDwgbWluQ2hhcnNGb3JBY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpZiAoaXNHZW5lcmF0aW5nKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKHJlZ2VuZXJhdGVFeGlzdGluZyAmJiAhY2FuUmVnZW5lcmF0ZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGJhc2VDb25maWcgPSBhY3RpdmVBY3Rpb25Qcm9tcHRzW2FjdGlvblR5cGVdO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UgJiZcclxuICAgICAgICAgICAgdGVtcGxhdGVUeXBlID09PSAndXRpbGl0eScgJiZcclxuICAgICAgICAgICAgYWN0aW9uVmFyaWFudCA9PT0gQUlBY3Rpb25WYXJpYW50LlJFUEhSQVNFXHJcbiAgICAgICAgICAgID8gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBiYXNlQ29uZmlnKSwgeyBsYWJlbDogJ1JlcGhyYXNlJywgYmFzZVByb21wdDogVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgfSkgOiBiYXNlQ29uZmlnO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVG9uZUlkID0gdG9uZU92ZXJyaWRlSWQgfHxcclxuICAgICAgICAgICAgdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIGNvbmZpZy5kZWZhdWx0VG9uZUlkIHx8XHJcbiAgICAgICAgICAgICgoX2MgPSAoX2IgPSBjb25maWcudG9uZXMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYlswXSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmlkKTtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFRvbmUgPSAoX2QgPSBjb25maWcudG9uZXMpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5maW5kKCh0b25lKSA9PiB0b25lLmlkID09PSBzZWxlY3RlZFRvbmVJZCk7XHJcbiAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgPSBpbnN0cnVjdGlvbk92ZXJyaWRlICE9PSB1bmRlZmluZWRcclxuICAgICAgICAgICAgPyBpbnN0cnVjdGlvbk92ZXJyaWRlXHJcbiAgICAgICAgICAgIDogaW5zdHJ1Y3Rpb25UZXh0O1xyXG4gICAgICAgIGNvbnN0IHByb21wdCA9IChvbkJ1aWxkQUlQcm9tcHQgPT09IG51bGwgfHwgb25CdWlsZEFJUHJvbXB0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkJ1aWxkQUlQcm9tcHQoe1xyXG4gICAgICAgICAgICBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICBhY3Rpb25WYXJpYW50LFxyXG4gICAgICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICBjb25maWcsXHJcbiAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgIHRvbmVMYWJlbDogc2VsZWN0ZWRUb25lID09PSBudWxsIHx8IHNlbGVjdGVkVG9uZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZWN0ZWRUb25lLmxhYmVsLFxyXG4gICAgICAgICAgICBpbnN0cnVjdGlvblRleHQ6IGluc3RydWN0aW9uRm9yUHJvbXB0IHx8IHVuZGVmaW5lZCxcclxuICAgICAgICB9KSkgfHxcclxuICAgICAgICAgICAgYnVpbGRBY3Rpb25Qcm9tcHQoe1xyXG4gICAgICAgICAgICAgICAgY29uZmlnLFxyXG4gICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZCxcclxuICAgICAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIHNldElzR2VuZXJhdGluZyh0cnVlKTtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfYWN0aW9uX3RyaWdnZXJlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG9uQUlBY3Rpb25SZXF1ZXN0XHJcbiAgICAgICAgICAgICAgICA/IHlpZWxkIG9uQUlBY3Rpb25SZXF1ZXN0KHtcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblZhcmlhbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIDogeWllbGQgcmVxdWVzdEFJU3VnZ2VzdGlvbih7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgYmFzZVVybCxcclxuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgICAgIGludGVudCxcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICAgICAgICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZydcclxuICAgICAgICAgICAgICAgID8gcmVzdWx0LnRyaW0oKVxyXG4gICAgICAgICAgICAgICAgOiAoKHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3VsdC5ib2R5KSB8fCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKCFyZWdlbmVyYXRlRXhpc3RpbmcpIHtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25CYXNlVGV4dChjdXJyZW50VGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShhY3Rpb25UeXBlKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtjYW5kaWRhdGVdKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcygocHJldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IFsuLi5wcmV2LCBjYW5kaWRhdGVdLnNsaWNlKDAsIE1BWF9TVUdHRVNUSU9OUyk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgobmV4dC5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdGYWlsZWQgdG8gZ2VuZXJhdGUgQUkgc3VnZ2VzdGlvbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgc2V0SXNHZW5lcmF0aW5nKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9KSwgW1xyXG4gICAgICAgIHJlcXVlc3RFeGVjdXRvcixcclxuICAgICAgICBiYXNlVXJsLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBjYW5SZWdlbmVyYXRlLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGluc3RydWN0aW9uVGV4dCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIGVuZHBvaW50UGF0aCxcclxuICAgICAgICBhcGlBZGFwdGVyLFxyXG4gICAgICAgIGludGVudCxcclxuICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgIG9uRXJyb3IsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgICAgICBvbkFJQWN0aW9uUmVxdWVzdCxcclxuICAgICAgICBvbkJ1aWxkQUlQcm9tcHQsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFhY3RpdmVDYW5kaWRhdGUgfHwgIXN1Z2dlc3Rpb25CYXNlVGV4dCB8fCAhc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2FjY2VwdGVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGluSW5pdGlhbEFpUGhhc2UgPSBpbml0aWFsQWlQcmVmaWxsUGhhc2VSZWYuY3VycmVudDtcclxuICAgICAgICBjb25zdCB0YWdQYXlsb2FkID0gY29tcHV0ZUFpVGFnT25BY2NlcHQoe1xyXG4gICAgICAgICAgICBiYXNlbGluZVRleHQ6IHN1Z2dlc3Rpb25CYXNlVGV4dCxcclxuICAgICAgICAgICAgYWNjZXB0ZWRUZXh0OiBhY3RpdmVDYW5kaWRhdGUsXHJcbiAgICAgICAgICAgIGluaXRpYWxBaVByZWZpbGxQaGFzZTogaW5Jbml0aWFsQWlQaGFzZSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoaW5Jbml0aWFsQWlQaGFzZSkge1xyXG4gICAgICAgICAgICBpbml0aWFsQWlQcmVmaWxsUGhhc2VSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvbkFJVGFnQ29tcHV0ZWQgPT09IG51bGwgfHwgb25BSVRhZ0NvbXB1dGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVGFnQ29tcHV0ZWQodGFnUGF5bG9hZCk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGFjdGl2ZUNhbmRpZGF0ZSxcclxuICAgICAgICBzdWdnZXN0aW9uQmFzZVRleHQsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCxcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkLFxyXG4gICAgICAgIGVtaXRBSUV2ZW50LFxyXG4gICAgICAgIHRlbXBsYXRlSWQsXHJcbiAgICAgICAgb25BSVRhZ0NvbXB1dGVkLFxyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2Rpc2NhcmRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uKCk7XHJcbiAgICB9LCBbY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiwgZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKChyYXRpbmcpID0+IHtcclxuICAgICAgICBpZiAoIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2ZlZWRiYWNrX3N1Ym1pdHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICAgICAgcmF0aW5nLFxyXG4gICAgICAgICAgICBjYW5kaWRhdGVfaW5kZXg6IHN1Z2dlc3Rpb25JbmRleCArIDEsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LCBbZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzdWdnZXN0aW9uSW5kZXgsIHRlbXBsYXRlSWRdKTtcclxuICAgIGNvbnN0IGFpSGVhZGVyQWN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucylcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBlbmFibGVkQUlBY3Rpb25zLm1hcCgoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICAgICAgY29uc3QgYWN0aW9uQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICAgICAgY29uc3QgdG9uZUlkID0gdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICBhY3Rpb25Db25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAgICAgKChfYiA9IChfYSA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzBdKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWQpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBhY3Rpb25Db25maWcubGFiZWwsXHJcbiAgICAgICAgICAgICAgICBpc1ByaW1hcnk6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBpc0dlbmVyYXRpbmcgJiYgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHRlZDogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVwaHJhc2VIaWdobGlnaHRlZCxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhY3VycmVudFRleHQudHJpbSgpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQubGVuZ3RoIDxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG1pbkNoYXJzQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNTApIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgaXNHZW5lcmF0aW5nIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSksXHJcbiAgICAgICAgICAgICAgICBzaG93VG9uZURyb3Bkb3duOiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgICAgICAgICAgISEoKF9jID0gYWN0aW9uQ29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSxcclxuICAgICAgICAgICAgICAgIHRvbmVzOiBhY3Rpb25Db25maWcudG9uZXMsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZDogdG9uZUlkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGVuYWJsZWRBSUFjdGlvbnMsXHJcbiAgICAgICAgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMsXHJcbiAgICAgICAgYWN0aXZlQWN0aW9uUHJvbXB0cyxcclxuICAgICAgICB0b25lQnlBY3Rpb24sXHJcbiAgICAgICAgaXNHZW5lcmF0aW5nLFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbixcclxuICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgIF0pO1xyXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBhZGRUZXh0T3JXcmFwLFxyXG4gICAgICAgICAgICBhZGRUZXh0LFxyXG4gICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24sXHJcbiAgICAgICAgfTtcclxuICAgIH0sIFthZGRUZXh0T3JXcmFwLCBhZGRUZXh0LCBjdXJyZW50VGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoaW5wdXRWYWx1ZSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChpbnB1dFZhbHVlIHx8ICcnKTtcclxuICAgIH0sIFtpbnB1dFZhbHVlLCBzZXRFZGl0b3JUZXh0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICghbGltaXQgfHwgIW9uRXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBuZXh0RXJyb3IgPSBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdCA/IExJTUlUX1JFQUNIRUQgOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiAnJztcclxuICAgICAgICBpZiAobGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID09PSBuZXh0RXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBsYXN0RW1pdHRlZEVkaXRvckVycm9yUmVmLmN1cnJlbnQgPSBuZXh0RXJyb3I7XHJcbiAgICAgICAgb25FcnJvcihuZXh0RXJyb3IpO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCBlcnJvciwgbGltaXQsIG9uRXJyb3JdKTtcclxuICAgIHJldHVybiAoX2pzeHMoT3V0ZXJDb250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4cyhFZGl0b3JGb290ZXJSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvckZvb3RlclRpdGxlLCB7IGNoaWxkcmVuOiBlZGl0b3JIZWFkZXIgPyAoX2pzeChUaXRsZVNtYWxsLCBPYmplY3QuYXNzaWduKHsgXCJkYXRhLXRlc3RcIjogXCJib2R5LXRleHQtZm9yLWVkaXQtdGVtcGxhdGVcIiB9LCB7IGNoaWxkcmVuOiBlZGl0b3JIZWFkZXIgfSkpKSA6IG51bGwgfSksIF9qc3hzKEVkaXRvckZvb3RlclJpZ2h0LCB7IGNoaWxkcmVuOiBbZXJyb3IgJiYgZXJyb3IgIT09IExJTUlUX1JFQUNIRUQgPyAoX2pzeHMoX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBbX2pzeChJbmZvSWNvbiwgeyB3aWR0aDogMTYsIGhlaWdodDogMTYsIGNvbG9yOiBDT0xPUlMuY29udGVudC5uZWdhdGl2ZSB9KSwgX2pzeChCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IGNvbG9yOiBDT0xPUlMuY29udGVudC5uZWdhdGl2ZSB9LCB7IGNoaWxkcmVuOiBlcnJvciB9KSldIH0pKSA6IG51bGwsIGxpbWl0ID8gKF9qc3hzKEJvZHlDYXB0aW9uLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IGVycm9yID09PSBMSU1JVF9SRUFDSEVEIHx8IGN1cnJlbnRUZXh0Lmxlbmd0aCA+IGxpbWl0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IENPTE9SUy5jb250ZW50Lm5lZ2F0aXZlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IFtjdXJyZW50VGV4dC5sZW5ndGgsIFwiL1wiLCBsaW1pdF0gfSkpKSA6IG51bGxdIH0pXSB9KSwgX2pzeHMoQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgaXNFcnJvcjogISFlcnJvciB9LCB7IGNoaWxkcmVuOiBbc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID8gKF9qc3hzKFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgcmVmOiBzdWdnZXN0aW9uU2Nyb2xsUmVmIH0sIHsgY2hpbGRyZW46IFtfanN4KFN1Z2dlc3Rpb25CYXNlbGluZVRleHQsIHsgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHsgX19odG1sOiBzdWdnZXN0aW9uQmFzZUh0bWwgfSB9KSwgaXNHZW5lcmF0aW5nID8gKF9qc3goU3VnZ2VzdGlvbkNhbmRpZGF0ZVRleHQsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtYnVzeVwiOiBcInRydWVcIiB9LCB7IGNoaWxkcmVuOiBfanN4cyhTdWdnZXN0aW9uQ2FuZGlkYXRlU2tlbGV0b24sIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiODQlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjY4JVwiIH0pXSB9KSB9KSkpIDogKF9qc3goU3VnZ2VzdGlvbkNhbmRpZGF0ZVRleHQsIHsgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19odG1sOiBhY3RpdmVDYW5kaWRhdGVIdG1sLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSkpLCBfanN4cyhTdWdnZXN0aW9uQ29udHJvbHNSb3csIHsgY2hpbGRyZW46IFtfanN4cyhTdWdnZXN0aW9uQ291bnRlciwgeyBjaGlsZHJlbjogW3N1Z2dlc3Rpb25JbmRleCArIDEsIFwiL1wiLCBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGhdIH0pLCBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUHJldmlvdXMgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBkaXNhYmxlZDogaXNQcmV2U3VnZ2VzdGlvbkRpc2FibGVkLCBvbkNsaWNrOiAoKSA9PiBzZXRTdWdnZXN0aW9uSW5kZXgoKGlkeCkgPT4gTWF0aC5tYXgoMCwgaWR4IC0gMSkpIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hldnJvbkxlZnRJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSksIF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiTGlrZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUZlZWRiYWNrKCdsaWtlJykgfSwgeyBjaGlsZHJlbjogX2pzeChUaHVtYnNVcEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzbGlrZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkRpc2xpa2Ugc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiBoYW5kbGVGZWVkYmFjaygnZGlzbGlrZScpIH0sIHsgY2hpbGRyZW46IF9qc3goVGh1bWJzRG93bkljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIGNhblJlZ2VuZXJhdGUgPyAoX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogaXNHZW5lcmF0aW5nID8gJ1JlZ2VuZXJhdGluZ+KApicgOiAnUmVnZW5lcmF0ZScsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25SZWdlbmVyYXRlQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIFwiYXJpYS1idXN5XCI6IGlzR2VuZXJhdGluZywgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzR2VuZXJhdGluZywgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3VnZ2VzdGlvbkFjdGlvblR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IGlzR2VuZXJhdGluZyA/IChfanN4KFJlZ2VuZXJhdGVJY29uU2hpbW1lciwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUgfSkpIDogKF9qc3goUmV3aW5kSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkpIH0pKSB9KSkpIDogbnVsbCwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNjYXJkXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiQWNjZXB0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogaGFuZGxlQWNjZXB0U3VnZ2VzdGlvbiB9LCB7IGNoaWxkcmVuOiBfanN4KENoZWNrSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKV0gfSldIH0pKSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFzdGVkVGV4dCA9IGUuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFzdGVkVGV4dC5sZW5ndGggPiBMQVJHRV9JTlBVVF9USFJFU0hPTEQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWwgPSB0ZXh0U3BhY2VSZWYuY3VycmVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IChfYSA9IGVsID09PSBudWxsIHx8IGVsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlbC5zZWxlY3Rpb25TdGFydCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSAoX2IgPSBlbCA9PT0gbnVsbCB8fCBlbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogZWwuc2VsZWN0aW9uRW5kKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcmVmZXIgbGl2ZSBET00gdmFsdWUg4oCUIGBjdXJyZW50VGV4dGAgY2FuIGxhZyB0aGUgdGV4dGFyZWEgZm9yIGJpZyBwYXN0ZXMuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFzZSA9IChfYyA9IGVsID09PSBudWxsIHx8IGVsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlbC52YWx1ZSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dFRleHQgPSBiYXNlLnNsaWNlKDAsIHN0YXJ0KSArIHBhc3RlZFRleHQgKyBiYXNlLnNsaWNlKGVuZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dChuZXh0VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChuZXh0VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FyZXQgPSBzdGFydCArIHBhc3RlZFRleHQubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YS5zZXRTZWxlY3Rpb25SYW5nZShjYXJldCwgY2FyZXQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChfYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlIGludmFsaWQgcmFuZ2UgaW4gZWRnZSBicm93c2Vyc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiAoX2pzeChXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIHsgYWN0aW9uczogYWN0aW9ucywgcmVmOiB0ZXh0U3BhY2VSZWYsIG9uQWN0aW9uU2VsZWN0OiBvbkFjdGlvblNlbGVjdCwgUmlnaHRDb21wb25lbnQ6IFJpZ2h0Q29tcG9uZW50LCByaWdodEFjdGlvbnNEaXNhYmxlZDogc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uIHx8IGlzR2VuZXJhdGluZywgb25FbW9qaUNsaWNrOiBvbkVtb2ppQWRkaXRpb24sIGFpQWN0aW9uczogYWlIZWFkZXJBY3Rpb25zLCBkaXNhYmxlQWxsQWN0aW9uczogc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uIHx8IGlzR2VuZXJhdGluZywgaW5zdHJ1Y3Rpb25BY3RpdmU6IGlzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIG9uQUlJbnN0cnVjdGlvbnNDbGljazogKCkgPT4gc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSh0cnVlKSwgb25BSVRvbmVDaGFuZ2U6IChhY3Rpb25UeXBlLCB0b25lSWQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRvbmVCeUFjdGlvbigocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW2FjdGlvblR5cGVdOiB0b25lSWQgfSkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQUlUb25lU2VsZWN0ID09PSBudWxsIHx8IG9uQUlUb25lU2VsZWN0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVG9uZVNlbGVjdChhY3Rpb25UeXBlLCB0b25lSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdG9uZUlkLCBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIG9uQUlBY3Rpb25DbGljazogKGFjdGlvblR5cGUsIGFjdGlvblZhcmlhbnQgPSBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNhbWUgYWN0aW9uIHNob3VsZCBub3QgcmV0cmlnZ2VyIGZyb20gY2hpcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnZW5lcmF0ZSBpcyBvbmx5IHZpYSBleHBsaWNpdCByZWdlbmVyYXRlIGNvbnRyb2wuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmV3IGFjdGlvbiBzdGFydHMgYSBmcmVzaCBzdWdnZXN0aW9uIHNlc3Npb24uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFjdGlvblZhcmlhbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFjdGlvblZhcmlhbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IH0pKV0gfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuZXhwb3J0IHsgQUlfVEFHX0NIQU5HRV9SQVRJT19USFJFU0hPTEQsIGNvbXB1dGVBaVRhZ09uQWNjZXB0LCBsZXZlbnNodGVpbkRpc3RhbmNlLCB9IGZyb20gJy4vYWkvYWlUYWcnO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1XaGF0c0FwcFRleHRFZGl0b3IuanMubWFwIl19 */",toString:h}),s=a.default("div","production"===process.env.NODE_ENV?{target:"ea7i3sh15"}:{target:"ea7i3sh15",label:"SuggestionBaselineText"})("text-decoration:line-through;color:",R.COLORS.content.secondary,";"+("production"===process.env.NODE_ENV?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBb0UwQyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIEZyYWdtZW50IGFzIF9GcmFnbWVudCwganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZXdpbmRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3Jld2luZC5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzRG93bkljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvdGh1bWJzX2Rvd24uc3ZnJztcclxuaW1wb3J0IFRodW1ic1VwSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfdXAuc3ZnJztcclxuaW1wb3J0IHsgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9CYXNlV2hhdHNhcHBDb250ZW50TGFuZy5oZWxwZXJcIjtcclxuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUsIH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgeyBDT0xPUlMgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzL1RoZW1lXCI7XHJcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICcuLi90b29sdGlwcy9Ub29sdGlwJztcclxuaW1wb3J0IHsgQm9keUNhcHRpb24sIFRpdGxlU21hbGwgfSBmcm9tICcuLi9UeXBvZ3JhcGh5U3R5bGUnO1xyXG5pbXBvcnQgeyBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlMsIERFRkFVTFRfSU5TVFJVQ1RJT05fU1VHR0VTVElPTlMsIHJlc29sdmVBY3Rpb25Qcm9tcHRzLCB9IGZyb20gJy4vYWkvYWN0aW9uUmVnaXN0cnknO1xyXG5pbXBvcnQgeyBjb21wdXRlQWlUYWdPbkFjY2VwdCB9IGZyb20gJy4vYWkvYWlUYWcnO1xyXG5pbXBvcnQgeyBidWlsZEFjdGlvblByb21wdCwgcmVxdWVzdEFJU3VnZ2VzdGlvbiB9IGZyb20gJy4vYWkvYXBpJztcclxuaW1wb3J0IHsgQ29udGFpbmVyLCBFZGl0b3JGb290ZXJSaWdodCwgRWRpdG9yRm9vdGVyUm93LCBFZGl0b3JGb290ZXJUaXRsZSwgT3V0ZXJDb250YWluZXIsIFRleHRTcGFjZSwgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUFjdGlvblZhcmlhbnQsIEFJRWRpdG9yQWN0aW9uVHlwZXMsIEVkaXRvckFjdGlvblR5cGVzLCBXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIH0gZnJvbSAnLi9XaGF0c0FwcFRleHRFZGl0b3JIZWFkZXInO1xyXG5jb25zdCBMSU1JVF9SRUFDSEVEID0gJ0NoYXJhY3RlciBsaW1pdCByZWFjaGVkJztcclxuY29uc3QgUkVQSFJBU0VfSURMRV9NUyA9IDMwMDA7XHJcbmNvbnN0IE1BWF9SRVBIUkFTRV9ISUdITElHSFRTID0gNTtcclxuY29uc3QgTUFYX1NVR0dFU1RJT05TID0gMztcclxuY29uc3QgTEFSR0VfSU5QVVRfVEhSRVNIT0xEID0gMTIwMDtcclxuY29uc3QgVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgPSAnUmVwaHJhc2UgdGhpcyBXaGF0c0FwcCB1dGlsaXR5IHRlbXBsYXRlIHRvIGltcHJvdmUgY2xhcml0eSBhbmQgcmVhZGFiaWxpdHkgd2hpbGUgcHJlc2VydmluZyB2YXJpYWJsZXMsIGludGVudCwgYW5kIGNvbXBsaWFuY2UuJztcclxuY29uc3Qgc2tlbGV0b25QdWxzZSA9IGtleWZyYW1lcyBgXG5cdDAlIHsgb3BhY2l0eTogMC41NTsgfVxuXHQ1MCUgeyBvcGFjaXR5OiAxOyB9XG5cdDEwMCUgeyBvcGFjaXR5OiAwLjU1OyB9XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxNHB4IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogMTBweDtcblx0bWluLWhlaWdodDogMTUwcHg7XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkxpbmUgPSBzdHlsZWQuZGl2IGBcblx0aGVpZ2h0OiAxNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdHdpZHRoOiAkeyhwcm9wcykgPT4gcHJvcHMud2lkdGh9O1xuXHRiYWNrZ3JvdW5kOiAjZWNlY2VmO1xuXHRhbmltYXRpb246ICR7c2tlbGV0b25QdWxzZX0gMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHRtYXgtaGVpZ2h0OiAyNjBweDtcblx0b3ZlcmZsb3cteTogc2Nyb2xsO1xuXHRzY3JvbGxiYXItd2lkdGg6IHRoaW47XG5cdHNjcm9sbGJhci1jb2xvcjogI2M4YzhjZiB0cmFuc3BhcmVudDtcblx0Ojotd2Via2l0LXNjcm9sbGJhciB7XG5cdFx0d2lkdGg6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcblx0XHRiYWNrZ3JvdW5kOiAjYzhjOGNmO1xuXHRcdGJvcmRlci1yYWRpdXM6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcblx0XHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0fVxuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkJhc2VsaW5lVGV4dCA9IHN0eWxlZC5kaXYgYFxuXHR0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25DYW5kaWRhdGVUZXh0ID0gc3R5bGVkLmRpdiBgXG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkNhbmRpZGF0ZVNrZWxldG9uID0gc3R5bGVkLmRpdiBgXG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHR3aWR0aDogMTAwJTtcblx0bWluLWhlaWdodDogNDBweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db250cm9sc1JvdyA9IHN0eWxlZC5kaXYgYFxuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDZweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db3VudGVyID0gc3R5bGVkLnNwYW4gYFxuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkljb25CdXR0b24gPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0cGFkZGluZzogNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdGRpc3BsYXk6IGlubGluZS1mbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0dHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjEycyBlYXNlO1xuXHQ6bm90KDpkaXNhYmxlZCk6aG92ZXIge1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICR7Q09MT1JTLnN1cmZhY2UuaG92ZXJlZH07XG5cdH1cblx0OmRpc2FibGVkIHtcblx0XHRvcGFjaXR5OiAwLjM1O1xuXHRcdGN1cnNvcjogbm90LWFsbG93ZWQ7XG5cdH1cbmA7XHJcbi8qKiBSZWdlbmVyYXRlIHN0YXlzIGZ1bGwgb3BhY2l0eSB3aGlsZSBkaXNhYmxlZCBzbyB0aGUgbG9hZGluZyBzaGltbWVyIHN0YXlzIHZpc2libGUgKHNhbWUgcHVsc2UgYXMgZWRpdG9yIHNrZWxldG9uKS4gKi9cclxuY29uc3QgU3VnZ2VzdGlvblJlZ2VuZXJhdGVCdXR0b24gPSBzdHlsZWQoU3VnZ2VzdGlvbkljb25CdXR0b24pIGBcblx0OmRpc2FibGVkIHtcblx0XHRvcGFjaXR5OiAxO1xuXHRcdGN1cnNvcjogd2FpdDtcblx0fVxuYDtcclxuY29uc3QgUmVnZW5lcmF0ZUljb25TaGltbWVyID0gc3R5bGVkLmRpdiBgXG5cdHdpZHRoOiAxNHB4O1xuXHRoZWlnaHQ6IDE0cHg7XG5cdGJvcmRlci1yYWRpdXM6IDRweDtcblx0YmFja2dyb3VuZDogI2VjZWNlZjtcblx0ZmxleC1zaHJpbms6IDA7XG5cdGFuaW1hdGlvbjogJHtza2VsZXRvblB1bHNlfSAxLjFzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xuYDtcclxuLyoqIFNhbWUgYm90dG9tIHRvb2xiYXIgc2xvdCBhcyBgV2hhdHNBcHBUZXh0RWRpdG9ySGVhZGVyYCDigJQgcmVwbGFjZXMgdGhlIGZ1bGwgaWNvbi9BSSBwYW5lbCB3aGlsZSBvcGVuLiAqL1xyXG5jb25zdCBJbnN0cnVjdGlvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblx0cGFkZGluZzogOHB4IDEycHg7XG5cdGdhcDogMTBweDtcblx0Ym9yZGVyLXJhZGl1czogMCAwIDRweCA0cHg7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXRSb3cgPSBzdHlsZWQuZGl2IGBcblx0Ym9yZGVyOiAxcHggc29saWQgI2Y1YTRjMDtcblx0Ym9yZGVyLXJhZGl1czogMTBweDtcblx0cGFkZGluZzogOHB4IDEwcHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbklucHV0ID0gc3R5bGVkLmlucHV0IGBcblx0ZmxleDogMTtcblx0bWluLXdpZHRoOiAwO1xuXHRib3JkZXI6IDA7XG5cdG91dGxpbmU6IG5vbmU7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25BY3Rpb25zID0gc3R5bGVkLmRpdiBgXG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQ2FuY2VsID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnNlY29uZGFyeX07XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0Zm9udC13ZWlnaHQ6IDUwMDtcblx0cGFkZGluZzogMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbXByb3ZlID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMXB4IHNvbGlkICM1ZDNhNzI7XG5cdGNvbG9yOiAjNWQzYTcyO1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0Ym9yZGVyLXJhZGl1czogOHB4O1xuXHRwYWRkaW5nOiA4cHggMTRweDtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRsaW5lLWhlaWdodDogMS4xO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0ID0gc3R5bGVkLmRpdiBgXG5cdG1hcmdpbi10b3A6IDEwcHg7XG5cdGJvcmRlci1yYWRpdXM6IDEycHg7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3gtc2hhZG93OiAwIDZweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkJ1dHRvbiA9IHN0eWxlZC5idXR0b24gYFxuXHR3aWR0aDogMTAwJTtcblx0Ym9yZGVyOiAwO1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgJHtDT0xPUlMuc3Ryb2tlLnByaW1hcnl9O1xuXHRiYWNrZ3JvdW5kOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyNlNWYzZTgnIDogJ3RyYW5zcGFyZW50Jyl9O1xuXHRjb2xvcjogJHsocHJvcHMpID0+IChwcm9wcy5zZWxlY3RlZCA/ICcjMWU2YjM0JyA6IENPTE9SUy5jb250ZW50LnByaW1hcnkpfTtcblx0dGV4dC1hbGlnbjogbGVmdDtcblx0cGFkZGluZzogMTJweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjI7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0OmZpcnN0LW9mLXR5cGUge1xuXHRcdGJvcmRlci10b3A6IDA7XG5cdH1cbmA7XHJcbmNvbnN0IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nID0gbmV3IEJhc2VXaGF0c2FwcENvbnRlbnRMYW5nSGVscGVyKCk7XHJcbmNvbnN0IFdpbGRDYXJkTWFwID0ge1xyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLkJPTERdOiAnKicsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuSVRBTElDXTogJ18nLFxyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLlNUUklLRVRIUk9VR0hdOiAnficsXHJcbn07XHJcbmZ1bmN0aW9uIGdldEhpZ2hsaWdodFN0b3JhZ2VLZXkoZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgIHJldHVybiBgd2hhdHNhcHAtZWRpdG9yLXJlcGhyYXNlLWhpZ2hsaWdodC0ke2VkaXRvckluc3RhbmNlS2V5IHx8ICdkZWZhdWx0J31gO1xyXG59XHJcbmV4cG9ydCBjb25zdCBXaGF0c0FwcFRleHRFZGl0b3IgPSBSZWFjdC5mb3J3YXJkUmVmKChfYSwgcmVmKSA9PiB7XHJcbiAgICB2YXIgeyBvbkNoYW5nZSwgb25DbGlja1ZhcmlhYmxlLCB0ZXh0OiBpbnB1dFZhbHVlLCBSaWdodENvbXBvbmVudCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yLCByb3dzLCBhY3Rpb25zLCBlZGl0b3JJbnN0YW5jZUtleSwgdGVtcGxhdGVUeXBlID0gJ21hcmtldGluZycsIHRlbXBsYXRlSWQsIHJlcXVlc3RFeGVjdXRvciwgYmFzZVVybCwgZW5kcG9pbnRQYXRoLCB1c2VDYXNlLCBzdG9yZUlkLCBhcGlBZGFwdGVyLCBjb252ZXJzYXRpb25JZCA9ICd3aGF0c2FwcC10ZW1wbGF0ZS1lZGl0b3InLCBzeXN0ZW1JZCA9ICd3aGF0c2FwcC13cml0ZXInLCBpbnRlbnQgPSAnZGVmYXVsdCcsIGVuYWJsZWRBSUFjdGlvbnMgPSBbXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlNIT1JURU4sXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FWFBBTkQsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FTU9KSUZZLFxyXG4gICAgXSwgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMgPSBmYWxzZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCBhaUFjdGlvbk1pbkNoYXJzLCBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgb25BSUV2ZW50LCBvbkFJVGFnQ29tcHV0ZWQsIHByZWZpbGxXYXNBaUdlbmVyYXRlZCA9IGZhbHNlLCBlZGl0b3JIZWFkZXIsIG9uQUlUb25lU2VsZWN0LCBvbkFJQWN0aW9uUmVxdWVzdCwgb25CdWlsZEFJUHJvbXB0IH0gPSBfYSwgdGV4dEFyZWFQcm9wcyA9IF9fcmVzdChfYSwgW1wib25DaGFuZ2VcIiwgXCJvbkNsaWNrVmFyaWFibGVcIiwgXCJ0ZXh0XCIsIFwiUmlnaHRDb21wb25lbnRcIiwgXCJlcnJvclwiLCBcImxpbWl0XCIsIFwib25FcnJvclwiLCBcInJvd3NcIiwgXCJhY3Rpb25zXCIsIFwiZWRpdG9ySW5zdGFuY2VLZXlcIiwgXCJ0ZW1wbGF0ZVR5cGVcIiwgXCJ0ZW1wbGF0ZUlkXCIsIFwicmVxdWVzdEV4ZWN1dG9yXCIsIFwiYmFzZVVybFwiLCBcImVuZHBvaW50UGF0aFwiLCBcInVzZUNhc2VcIiwgXCJzdG9yZUlkXCIsIFwiYXBpQWRhcHRlclwiLCBcImNvbnZlcnNhdGlvbklkXCIsIFwic3lzdGVtSWRcIiwgXCJpbnRlbnRcIiwgXCJlbmFibGVkQUlBY3Rpb25zXCIsIFwiZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnNcIiwgXCJwcm9tcHRPdmVycmlkZXNcIiwgXCJyZXBocmFzZVRvbmVzXCIsIFwiYWlBY3Rpb25NaW5DaGFyc1wiLCBcImluc3RydWN0aW9uU3VnZ2VzdGlvbnNcIiwgXCJvbkFJRXZlbnRcIiwgXCJvbkFJVGFnQ29tcHV0ZWRcIiwgXCJwcmVmaWxsV2FzQWlHZW5lcmF0ZWRcIiwgXCJlZGl0b3JIZWFkZXJcIiwgXCJvbkFJVG9uZVNlbGVjdFwiLCBcIm9uQUlBY3Rpb25SZXF1ZXN0XCIsIFwib25CdWlsZEFJUHJvbXB0XCJdKTtcclxuICAgIGNvbnN0IHRleHRTcGFjZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IFtjdXJyZW50VGV4dCwgc2V0Q3VycmVudFRleHRdID0gdXNlU3RhdGUoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICBjb25zdCBbaXNSZXBocmFzZUhpZ2hsaWdodGVkLCBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW3JlcGhyYXNlSGlnaGxpZ2h0Q291bnQsIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbaXNHZW5lcmF0aW5nLCBzZXRJc0dlbmVyYXRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2lzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGVdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2luc3RydWN0aW9uVGV4dCwgc2V0SW5zdHJ1Y3Rpb25UZXh0XSA9IHVzZVN0YXRlKCcnKTtcclxuICAgIGNvbnN0IFt0b25lQnlBY3Rpb24sIHNldFRvbmVCeUFjdGlvbl0gPSB1c2VTdGF0ZSh7fSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkJhc2VUZXh0LCBzZXRTdWdnZXN0aW9uQmFzZVRleHRdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkNhbmRpZGF0ZXMsIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzXSA9IHVzZVN0YXRlKFtdKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uSW5kZXgsIHNldFN1Z2dlc3Rpb25JbmRleF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGVdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBzdWdnZXN0aW9uU2Nyb2xsUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgcmVwaHJhc2VJZGxlUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgaGlnaGxpZ2h0UmVzZXRSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICAvKipcclxuICAgICAqIFByaW9yIGVsaWdpYmlsaXR5IGZvciByZXBocmFzZSBudWRnZSAobnVsbCA9IG5vdCBpbml0aWFsaXplZCkuXHJcbiAgICAgKiBNYXRjaGVzIHRoZSBjaGlwOiBub24tZW1wdHkgdHJpbSBhbmQgbGVuZ3RoIOKJpSBtaW4g4oCUIHNhbWUgYXMgYGFpSGVhZGVyQWN0aW9uc2AgZGlzYWJsZWQgcnVsZXMuXHJcbiAgICAgKi9cclxuICAgIGNvbnN0IHByZXZSZXBocmFzZUVsaWdpYmxlUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgZGVmZXJyZWRIdG1sUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgbGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIC8qKiBGaXJzdCBhY2NlcHQgYWZ0ZXIgZnVsbC1BSSBwcmVmaWxsIChgcHJlZmlsbFdhc0FpR2VuZXJhdGVkYCk7IGNsZWFyZWQgYWZ0ZXIgb25lIGFjY2VwdC4gKi9cclxuICAgIGNvbnN0IGluaXRpYWxBaVByZWZpbGxQaGFzZVJlZiA9IHVzZVJlZighIXByZWZpbGxXYXNBaUdlbmVyYXRlZCk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGluaXRpYWxBaVByZWZpbGxQaGFzZVJlZi5jdXJyZW50ID0gISFwcmVmaWxsV2FzQWlHZW5lcmF0ZWQ7XHJcbiAgICB9LCBbcHJlZmlsbFdhc0FpR2VuZXJhdGVkLCBlZGl0b3JJbnN0YW5jZUtleV0pO1xyXG4gICAgY29uc3QgYWN0aXZlQWN0aW9uUHJvbXB0cyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiByZXNvbHZlQWN0aW9uUHJvbXB0cyh0ZW1wbGF0ZVR5cGUsIHByb21wdE92ZXJyaWRlcywgcmVwaHJhc2VUb25lcyk7XHJcbiAgICB9LCBbcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCB0ZW1wbGF0ZVR5cGVdKTtcclxuICAgIGNvbnN0IGZpbHRlcmVkSW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGlmICghcXVlcnkpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucy5maWx0ZXIoKHN1Z2dlc3Rpb24pID0+IHN1Z2dlc3Rpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeSkpO1xyXG4gICAgfSwgW2luc3RydWN0aW9uU3VnZ2VzdGlvbnMsIGluc3RydWN0aW9uVGV4dF0pO1xyXG4gICAgY29uc3QgbWluQ2hhcnNCeUFjdGlvbiA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUyksIChhaUFjdGlvbk1pbkNoYXJzIHx8IHt9KSk7XHJcbiAgICB9LCBbYWlBY3Rpb25NaW5DaGFyc10pO1xyXG4gICAgY29uc3QgcmVwaHJhc2VNaW5DaGFycyA9IG1pbkNoYXJzQnlBY3Rpb25bQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV0gfHxcclxuICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV07XHJcbiAgICBjb25zdCBlbWl0QUlFdmVudCA9IHVzZUNhbGxiYWNrKChuYW1lLCBwYXlsb2FkKSA9PiB7XHJcbiAgICAgICAgb25BSUV2ZW50ID09PSBudWxsIHx8IG9uQUlFdmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSUV2ZW50KG5hbWUsIHBheWxvYWQpO1xyXG4gICAgfSwgW29uQUlFdmVudF0pO1xyXG4gICAgY29uc3Qgc2V0RWRpdG9yVGV4dCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIHNldEN1cnJlbnRUZXh0KChwcmV2KSA9PiAocHJldiA9PT0gbmV4dFRleHQgPyBwcmV2IDogbmV4dFRleHQpKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGVtaXRDaGFuZ2VXaXRoR3VhcmQgPSB1c2VDYWxsYmFjaygobmV4dFRleHQpID0+IHtcclxuICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGRlZmVycmVkSHRtbFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5leHRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIG5leHRUZXh0KTtcclxuICAgICAgICAgICAgZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChuZXh0VGV4dCkpO1xyXG4gICAgICAgICAgICB9LCAxNik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICB9LCBbb25DaGFuZ2VdKTtcclxuICAgIGNvbnN0IGNsZWFyU3VnZ2VzdGlvblNlc3Npb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0KG51bGwpO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtdKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUobnVsbCk7XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgPj0gTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXh0Q291bnQgPSByZXBocmFzZUhpZ2hsaWdodENvdW50ICsgMTtcclxuICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KG5leHRDb3VudCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSksIFN0cmluZyhuZXh0Q291bnQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKHRydWUpO1xyXG4gICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgIH0sIDEyMDApO1xyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5LCByZXBocmFzZUhpZ2hsaWdodENvdW50XSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHRSZWYgPSB1c2VSZWYodHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0KTtcclxuICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50ID0gdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0O1xyXG4gICAgZnVuY3Rpb24gaGFuZGxlT25DaGFuZ2UoZSkge1xyXG4gICAgICAgIGNvbnN0IHRleHQgPSBlLnRhcmdldC52YWx1ZTtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBzZXRDYXJldFBvc2l0aW9uKGNhcmV0UG9zKSB7XHJcbiAgICAgICAgY29uc3QgZWxlbSA9IHRleHRTcGFjZVJlZiA9PT0gbnVsbCB8fCB0ZXh0U3BhY2VSZWYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRleHRTcGFjZVJlZi5jdXJyZW50O1xyXG4gICAgICAgIGlmIChlbGVtICE9IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKGVsZW0uc2VsZWN0aW9uU3RhcnQpIHtcclxuICAgICAgICAgICAgICAgIGVsZW0uZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIGVsZW0uc2VsZWN0aW9uRW5kID0gY2FyZXRQb3M7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgZWxlbS5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIG9uQWN0aW9uU2VsZWN0KGFjdGlvblR5cGUpIHtcclxuICAgICAgICBjb25zdCB3aWxkQ2FyZCA9IFdpbGRDYXJkTWFwW2FjdGlvblR5cGVdO1xyXG4gICAgICAgIGlmICh3aWxkQ2FyZCAmJiB0ZXh0U3BhY2VSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHRleHQgfSA9IGluc2VydFRleHRBdEluZGV4KHdpbGRDYXJkLCBzdGFydCk7XHJcbiAgICAgICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uKHN0YXJ0ICsgMSk7XHJcbiAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBhZGRUZXh0T3JXcmFwKHdpbGRDYXJkKTtcclxuICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBvbkVtb2ppQWRkaXRpb24oZW1vamkpIHtcclxuICAgICAgICBjb25zdCB7IHRleHQgfSA9IGFkZFRleHQoZW1vamkpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhZGRUZXh0T3JXcmFwKHRleHRUb0FkZCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgbGV0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICBpZiAodGV4dFNwYWNlUmVmLmN1cnJlbnQgJiYgdGV4dFRvQWRkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgY29uc3Qgd2lsZENhcmQgPSB0ZXh0VG9BZGQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICAvKiogbm90aGluZyBpcyBzZWxlY3RlZCAqL1xyXG4gICAgICAgICAgICAgICAgLyoqIHNvIGFwcGVuZCB0aGUgd2lsZGNhcmQgYXQgdGhlIGVuZCAqL1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFkZFRleHQod2lsZENhcmQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGV4dCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLndyYXBwV2lsZGNhcmQoc3RhcnQsIGVuZCwgd2lsZENhcmQsIHRleHQpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaHRtbCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwodGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdGV4dCwgaHRtbCB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IHRleHQ6IHRleHQsIGh0bWw6IHRleHQgfTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZFRleHQodGV4dFRvQWRkKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgaWYgKHRleHRTcGFjZVJlZi5jdXJyZW50ICYmIHRleHRUb0FkZCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zZXJ0VGV4dEF0SW5kZXgodGV4dFRvQWRkLCBzdGFydCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dDogdGV4dCwgaHRtbDogdGV4dCB9O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gaW5zZXJ0VGV4dEF0SW5kZXgodGV4dFRvQWRkLCBpbmRleCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgbGV0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICB0ZXh0ID0gdGV4dC5zbGljZSgwLCBpbmRleCkgKyB0ZXh0VG9BZGQgKyB0ZXh0LnNsaWNlKGluZGV4KTtcclxuICAgICAgICBjb25zdCBodG1sID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTCh0ZXh0KTtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgIHJldHVybiB7IHRleHQsIGh0bWwgfTtcclxuICAgIH1cclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8ICFlZGl0b3JJbnN0YW5jZUtleSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNhY2hlZCA9IE51bWJlcihzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGdldEhpZ2hsaWdodFN0b3JhZ2VLZXkoZWRpdG9ySW5zdGFuY2VLZXkpKSB8fFxyXG4gICAgICAgICAgICAnMCcpO1xyXG4gICAgICAgIGlmICghTnVtYmVyLmlzTmFOKGNhY2hlZCkpIHtcclxuICAgICAgICAgICAgc2V0UmVwaHJhc2VIaWdobGlnaHRDb3VudChjYWNoZWQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtlZGl0b3JJbnN0YW5jZUtleV0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBjb25zdCBlbGlnaWJsZSA9ICEhY3VycmVudFRleHQudHJpbSgpICYmIGN1cnJlbnRUZXh0Lmxlbmd0aCA+PSByZXBocmFzZU1pbkNoYXJzO1xyXG4gICAgICAgIGlmIChwcmV2UmVwaHJhc2VFbGlnaWJsZVJlZi5jdXJyZW50ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHByZXZSZXBocmFzZUVsaWdpYmxlUmVmLmN1cnJlbnQgPSBlbGlnaWJsZTtcclxuICAgICAgICAgICAgaWYgKGVsaWdpYmxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50KCk7XHJcbiAgICAgICAgICAgICAgICB9LCBSRVBIUkFTRV9JRExFX01TKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZWxpZ2libGUpIHtcclxuICAgICAgICAgICAgcHJldlJlcGhyYXNlRWxpZ2libGVSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjcm9zc2VkVGhyZXNob2xkID0gIXByZXZSZXBocmFzZUVsaWdpYmxlUmVmLmN1cnJlbnQgJiYgZWxpZ2libGU7XHJcbiAgICAgICAgcHJldlJlcGhyYXNlRWxpZ2libGVSZWYuY3VycmVudCA9IHRydWU7XHJcbiAgICAgICAgaWYgKGNyb3NzZWRUaHJlc2hvbGQpIHtcclxuICAgICAgICAgICAgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0UmVmLmN1cnJlbnQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50KCk7XHJcbiAgICAgICAgfSwgUkVQSFJBU0VfSURMRV9NUyk7XHJcbiAgICB9LCBbY3VycmVudFRleHQsIHJlcGhyYXNlTWluQ2hhcnNdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGFjdGl2ZUNhbmRpZGF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzW3N1Z2dlc3Rpb25JbmRleF0gfHwgJyc7XHJcbiAgICBjb25zdCBzdWdnZXN0aW9uQmFzZUh0bWwgPSB1c2VNZW1vKCgpID0+IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwoc3VnZ2VzdGlvbkJhc2VUZXh0IHx8ICcnKSwgW3N1Z2dlc3Rpb25CYXNlVGV4dF0pO1xyXG4gICAgY29uc3QgYWN0aXZlQ2FuZGlkYXRlSHRtbCA9IHVzZU1lbW8oKCkgPT4gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChhY3RpdmVDYW5kaWRhdGUpLCBbYWN0aXZlQ2FuZGlkYXRlXSk7XHJcbiAgICBjb25zdCBjYW5SZWdlbmVyYXRlID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDwgTUFYX1NVR0dFU1RJT05TO1xyXG4gICAgY29uc3Qgc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID0gISFzdWdnZXN0aW9uQmFzZVRleHQgJiYgc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoID4gMDtcclxuICAgIGNvbnN0IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8IHN1Z2dlc3Rpb25JbmRleCA8PSAwO1xyXG4gICAgY29uc3QgaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDw9IDEgfHxcclxuICAgICAgICBzdWdnZXN0aW9uSW5kZXggPj0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBub2RlID0gc3VnZ2VzdGlvblNjcm9sbFJlZi5jdXJyZW50O1xyXG4gICAgICAgIGlmICghbm9kZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIG5vZGUuc2Nyb2xsVG9wID0gbm9kZS5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9LCBbYWN0aXZlQ2FuZGlkYXRlLCBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24sIGlzR2VuZXJhdGluZ10pO1xyXG4gICAgY29uc3QgZXhlY3V0ZUFJQWN0aW9uID0gdXNlQ2FsbGJhY2soKGFjdGlvblR5cGUsIHJlZ2VuZXJhdGVFeGlzdGluZyA9IGZhbHNlLCBpbnN0cnVjdGlvbk92ZXJyaWRlLCB0b25lT3ZlcnJpZGVJZCwgYWN0aW9uVmFyaWFudCA9IEFJQWN0aW9uVmFyaWFudC5ERUZBVUxUKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICB2YXIgX2IsIF9jLCBfZDtcclxuICAgICAgICBpZiAoIW9uQUlBY3Rpb25SZXF1ZXN0ICYmXHJcbiAgICAgICAgICAgICFhcGlBZGFwdGVyICYmXHJcbiAgICAgICAgICAgICghcmVxdWVzdEV4ZWN1dG9yIHx8ICFiYXNlVXJsKSkge1xyXG4gICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoJ0FJIGNvbmZpZ3VyYXRpb24gbWlzc2luZycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY3VycmVudFRleHQudHJpbSgpKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbWluQ2hhcnNGb3JBY3Rpb24gPSBtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICA1MDtcclxuICAgICAgICBpZiAoY3VycmVudFRleHQubGVuZ3RoIDwgbWluQ2hhcnNGb3JBY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpZiAoaXNHZW5lcmF0aW5nKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKHJlZ2VuZXJhdGVFeGlzdGluZyAmJiAhY2FuUmVnZW5lcmF0ZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGJhc2VDb25maWcgPSBhY3RpdmVBY3Rpb25Qcm9tcHRzW2FjdGlvblR5cGVdO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UgJiZcclxuICAgICAgICAgICAgdGVtcGxhdGVUeXBlID09PSAndXRpbGl0eScgJiZcclxuICAgICAgICAgICAgYWN0aW9uVmFyaWFudCA9PT0gQUlBY3Rpb25WYXJpYW50LlJFUEhSQVNFXHJcbiAgICAgICAgICAgID8gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBiYXNlQ29uZmlnKSwgeyBsYWJlbDogJ1JlcGhyYXNlJywgYmFzZVByb21wdDogVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgfSkgOiBiYXNlQ29uZmlnO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVG9uZUlkID0gdG9uZU92ZXJyaWRlSWQgfHxcclxuICAgICAgICAgICAgdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIGNvbmZpZy5kZWZhdWx0VG9uZUlkIHx8XHJcbiAgICAgICAgICAgICgoX2MgPSAoX2IgPSBjb25maWcudG9uZXMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYlswXSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmlkKTtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFRvbmUgPSAoX2QgPSBjb25maWcudG9uZXMpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5maW5kKCh0b25lKSA9PiB0b25lLmlkID09PSBzZWxlY3RlZFRvbmVJZCk7XHJcbiAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgPSBpbnN0cnVjdGlvbk92ZXJyaWRlICE9PSB1bmRlZmluZWRcclxuICAgICAgICAgICAgPyBpbnN0cnVjdGlvbk92ZXJyaWRlXHJcbiAgICAgICAgICAgIDogaW5zdHJ1Y3Rpb25UZXh0O1xyXG4gICAgICAgIGNvbnN0IHByb21wdCA9IChvbkJ1aWxkQUlQcm9tcHQgPT09IG51bGwgfHwgb25CdWlsZEFJUHJvbXB0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkJ1aWxkQUlQcm9tcHQoe1xyXG4gICAgICAgICAgICBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICBhY3Rpb25WYXJpYW50LFxyXG4gICAgICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICBjb25maWcsXHJcbiAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgIHRvbmVMYWJlbDogc2VsZWN0ZWRUb25lID09PSBudWxsIHx8IHNlbGVjdGVkVG9uZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZWN0ZWRUb25lLmxhYmVsLFxyXG4gICAgICAgICAgICBpbnN0cnVjdGlvblRleHQ6IGluc3RydWN0aW9uRm9yUHJvbXB0IHx8IHVuZGVmaW5lZCxcclxuICAgICAgICB9KSkgfHxcclxuICAgICAgICAgICAgYnVpbGRBY3Rpb25Qcm9tcHQoe1xyXG4gICAgICAgICAgICAgICAgY29uZmlnLFxyXG4gICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZCxcclxuICAgICAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIHNldElzR2VuZXJhdGluZyh0cnVlKTtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfYWN0aW9uX3RyaWdnZXJlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG9uQUlBY3Rpb25SZXF1ZXN0XHJcbiAgICAgICAgICAgICAgICA/IHlpZWxkIG9uQUlBY3Rpb25SZXF1ZXN0KHtcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblZhcmlhbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIDogeWllbGQgcmVxdWVzdEFJU3VnZ2VzdGlvbih7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgYmFzZVVybCxcclxuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgICAgIGludGVudCxcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICAgICAgICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZydcclxuICAgICAgICAgICAgICAgID8gcmVzdWx0LnRyaW0oKVxyXG4gICAgICAgICAgICAgICAgOiAoKHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3VsdC5ib2R5KSB8fCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKCFyZWdlbmVyYXRlRXhpc3RpbmcpIHtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25CYXNlVGV4dChjdXJyZW50VGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShhY3Rpb25UeXBlKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtjYW5kaWRhdGVdKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcygocHJldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IFsuLi5wcmV2LCBjYW5kaWRhdGVdLnNsaWNlKDAsIE1BWF9TVUdHRVNUSU9OUyk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgobmV4dC5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdGYWlsZWQgdG8gZ2VuZXJhdGUgQUkgc3VnZ2VzdGlvbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgc2V0SXNHZW5lcmF0aW5nKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9KSwgW1xyXG4gICAgICAgIHJlcXVlc3RFeGVjdXRvcixcclxuICAgICAgICBiYXNlVXJsLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBjYW5SZWdlbmVyYXRlLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGluc3RydWN0aW9uVGV4dCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIGVuZHBvaW50UGF0aCxcclxuICAgICAgICBhcGlBZGFwdGVyLFxyXG4gICAgICAgIGludGVudCxcclxuICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgIG9uRXJyb3IsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgICAgICBvbkFJQWN0aW9uUmVxdWVzdCxcclxuICAgICAgICBvbkJ1aWxkQUlQcm9tcHQsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFhY3RpdmVDYW5kaWRhdGUgfHwgIXN1Z2dlc3Rpb25CYXNlVGV4dCB8fCAhc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2FjY2VwdGVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGluSW5pdGlhbEFpUGhhc2UgPSBpbml0aWFsQWlQcmVmaWxsUGhhc2VSZWYuY3VycmVudDtcclxuICAgICAgICBjb25zdCB0YWdQYXlsb2FkID0gY29tcHV0ZUFpVGFnT25BY2NlcHQoe1xyXG4gICAgICAgICAgICBiYXNlbGluZVRleHQ6IHN1Z2dlc3Rpb25CYXNlVGV4dCxcclxuICAgICAgICAgICAgYWNjZXB0ZWRUZXh0OiBhY3RpdmVDYW5kaWRhdGUsXHJcbiAgICAgICAgICAgIGluaXRpYWxBaVByZWZpbGxQaGFzZTogaW5Jbml0aWFsQWlQaGFzZSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoaW5Jbml0aWFsQWlQaGFzZSkge1xyXG4gICAgICAgICAgICBpbml0aWFsQWlQcmVmaWxsUGhhc2VSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvbkFJVGFnQ29tcHV0ZWQgPT09IG51bGwgfHwgb25BSVRhZ0NvbXB1dGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVGFnQ29tcHV0ZWQodGFnUGF5bG9hZCk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGFjdGl2ZUNhbmRpZGF0ZSxcclxuICAgICAgICBzdWdnZXN0aW9uQmFzZVRleHQsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCxcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkLFxyXG4gICAgICAgIGVtaXRBSUV2ZW50LFxyXG4gICAgICAgIHRlbXBsYXRlSWQsXHJcbiAgICAgICAgb25BSVRhZ0NvbXB1dGVkLFxyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2Rpc2NhcmRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uKCk7XHJcbiAgICB9LCBbY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiwgZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKChyYXRpbmcpID0+IHtcclxuICAgICAgICBpZiAoIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2ZlZWRiYWNrX3N1Ym1pdHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICAgICAgcmF0aW5nLFxyXG4gICAgICAgICAgICBjYW5kaWRhdGVfaW5kZXg6IHN1Z2dlc3Rpb25JbmRleCArIDEsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LCBbZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzdWdnZXN0aW9uSW5kZXgsIHRlbXBsYXRlSWRdKTtcclxuICAgIGNvbnN0IGFpSGVhZGVyQWN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucylcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBlbmFibGVkQUlBY3Rpb25zLm1hcCgoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICAgICAgY29uc3QgYWN0aW9uQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICAgICAgY29uc3QgdG9uZUlkID0gdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICBhY3Rpb25Db25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAgICAgKChfYiA9IChfYSA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzBdKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWQpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBhY3Rpb25Db25maWcubGFiZWwsXHJcbiAgICAgICAgICAgICAgICBpc1ByaW1hcnk6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBpc0dlbmVyYXRpbmcgJiYgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHRlZDogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVwaHJhc2VIaWdobGlnaHRlZCxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhY3VycmVudFRleHQudHJpbSgpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQubGVuZ3RoIDxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG1pbkNoYXJzQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNTApIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgaXNHZW5lcmF0aW5nIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSksXHJcbiAgICAgICAgICAgICAgICBzaG93VG9uZURyb3Bkb3duOiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgICAgICAgICAgISEoKF9jID0gYWN0aW9uQ29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSxcclxuICAgICAgICAgICAgICAgIHRvbmVzOiBhY3Rpb25Db25maWcudG9uZXMsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZDogdG9uZUlkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGVuYWJsZWRBSUFjdGlvbnMsXHJcbiAgICAgICAgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMsXHJcbiAgICAgICAgYWN0aXZlQWN0aW9uUHJvbXB0cyxcclxuICAgICAgICB0b25lQnlBY3Rpb24sXHJcbiAgICAgICAgaXNHZW5lcmF0aW5nLFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbixcclxuICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgIF0pO1xyXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBhZGRUZXh0T3JXcmFwLFxyXG4gICAgICAgICAgICBhZGRUZXh0LFxyXG4gICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24sXHJcbiAgICAgICAgfTtcclxuICAgIH0sIFthZGRUZXh0T3JXcmFwLCBhZGRUZXh0LCBjdXJyZW50VGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoaW5wdXRWYWx1ZSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChpbnB1dFZhbHVlIHx8ICcnKTtcclxuICAgIH0sIFtpbnB1dFZhbHVlLCBzZXRFZGl0b3JUZXh0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICghbGltaXQgfHwgIW9uRXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBuZXh0RXJyb3IgPSBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdCA/IExJTUlUX1JFQUNIRUQgOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiAnJztcclxuICAgICAgICBpZiAobGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID09PSBuZXh0RXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBsYXN0RW1pdHRlZEVkaXRvckVycm9yUmVmLmN1cnJlbnQgPSBuZXh0RXJyb3I7XHJcbiAgICAgICAgb25FcnJvcihuZXh0RXJyb3IpO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCBlcnJvciwgbGltaXQsIG9uRXJyb3JdKTtcclxuICAgIHJldHVybiAoX2pzeHMoT3V0ZXJDb250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4cyhFZGl0b3JGb290ZXJSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvckZvb3RlclRpdGxlLCB7IGNoaWxkcmVuOiBlZGl0b3JIZWFkZXIgPyAoX2pzeChUaXRsZVNtYWxsLCBPYmplY3QuYXNzaWduKHsgXCJkYXRhLXRlc3RcIjogXCJib2R5LXRleHQtZm9yLWVkaXQtdGVtcGxhdGVcIiB9LCB7IGNoaWxkcmVuOiBlZGl0b3JIZWFkZXIgfSkpKSA6IG51bGwgfSksIF9qc3hzKEVkaXRvckZvb3RlclJpZ2h0LCB7IGNoaWxkcmVuOiBbZXJyb3IgJiYgZXJyb3IgIT09IExJTUlUX1JFQUNIRUQgPyAoX2pzeHMoX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBbX2pzeChJbmZvSWNvbiwgeyB3aWR0aDogMTYsIGhlaWdodDogMTYsIGNvbG9yOiBDT0xPUlMuY29udGVudC5uZWdhdGl2ZSB9KSwgX2pzeChCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IGNvbG9yOiBDT0xPUlMuY29udGVudC5uZWdhdGl2ZSB9LCB7IGNoaWxkcmVuOiBlcnJvciB9KSldIH0pKSA6IG51bGwsIGxpbWl0ID8gKF9qc3hzKEJvZHlDYXB0aW9uLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IGVycm9yID09PSBMSU1JVF9SRUFDSEVEIHx8IGN1cnJlbnRUZXh0Lmxlbmd0aCA+IGxpbWl0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IENPTE9SUy5jb250ZW50Lm5lZ2F0aXZlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IFtjdXJyZW50VGV4dC5sZW5ndGgsIFwiL1wiLCBsaW1pdF0gfSkpKSA6IG51bGxdIH0pXSB9KSwgX2pzeHMoQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgaXNFcnJvcjogISFlcnJvciB9LCB7IGNoaWxkcmVuOiBbc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID8gKF9qc3hzKFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgcmVmOiBzdWdnZXN0aW9uU2Nyb2xsUmVmIH0sIHsgY2hpbGRyZW46IFtfanN4KFN1Z2dlc3Rpb25CYXNlbGluZVRleHQsIHsgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHsgX19odG1sOiBzdWdnZXN0aW9uQmFzZUh0bWwgfSB9KSwgaXNHZW5lcmF0aW5nID8gKF9qc3goU3VnZ2VzdGlvbkNhbmRpZGF0ZVRleHQsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtYnVzeVwiOiBcInRydWVcIiB9LCB7IGNoaWxkcmVuOiBfanN4cyhTdWdnZXN0aW9uQ2FuZGlkYXRlU2tlbGV0b24sIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiODQlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjY4JVwiIH0pXSB9KSB9KSkpIDogKF9qc3goU3VnZ2VzdGlvbkNhbmRpZGF0ZVRleHQsIHsgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19odG1sOiBhY3RpdmVDYW5kaWRhdGVIdG1sLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSkpLCBfanN4cyhTdWdnZXN0aW9uQ29udHJvbHNSb3csIHsgY2hpbGRyZW46IFtfanN4cyhTdWdnZXN0aW9uQ291bnRlciwgeyBjaGlsZHJlbjogW3N1Z2dlc3Rpb25JbmRleCArIDEsIFwiL1wiLCBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGhdIH0pLCBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUHJldmlvdXMgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBkaXNhYmxlZDogaXNQcmV2U3VnZ2VzdGlvbkRpc2FibGVkLCBvbkNsaWNrOiAoKSA9PiBzZXRTdWdnZXN0aW9uSW5kZXgoKGlkeCkgPT4gTWF0aC5tYXgoMCwgaWR4IC0gMSkpIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hldnJvbkxlZnRJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSksIF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiTGlrZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUZlZWRiYWNrKCdsaWtlJykgfSwgeyBjaGlsZHJlbjogX2pzeChUaHVtYnNVcEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzbGlrZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkRpc2xpa2Ugc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiBoYW5kbGVGZWVkYmFjaygnZGlzbGlrZScpIH0sIHsgY2hpbGRyZW46IF9qc3goVGh1bWJzRG93bkljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIGNhblJlZ2VuZXJhdGUgPyAoX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogaXNHZW5lcmF0aW5nID8gJ1JlZ2VuZXJhdGluZ+KApicgOiAnUmVnZW5lcmF0ZScsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25SZWdlbmVyYXRlQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIFwiYXJpYS1idXN5XCI6IGlzR2VuZXJhdGluZywgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzR2VuZXJhdGluZywgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3VnZ2VzdGlvbkFjdGlvblR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IGlzR2VuZXJhdGluZyA/IChfanN4KFJlZ2VuZXJhdGVJY29uU2hpbW1lciwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUgfSkpIDogKF9qc3goUmV3aW5kSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkpIH0pKSB9KSkpIDogbnVsbCwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNjYXJkXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiQWNjZXB0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogaGFuZGxlQWNjZXB0U3VnZ2VzdGlvbiB9LCB7IGNoaWxkcmVuOiBfanN4KENoZWNrSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKV0gfSldIH0pKSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFzdGVkVGV4dCA9IGUuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFzdGVkVGV4dC5sZW5ndGggPiBMQVJHRV9JTlBVVF9USFJFU0hPTEQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWwgPSB0ZXh0U3BhY2VSZWYuY3VycmVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IChfYSA9IGVsID09PSBudWxsIHx8IGVsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlbC5zZWxlY3Rpb25TdGFydCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSAoX2IgPSBlbCA9PT0gbnVsbCB8fCBlbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogZWwuc2VsZWN0aW9uRW5kKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcmVmZXIgbGl2ZSBET00gdmFsdWUg4oCUIGBjdXJyZW50VGV4dGAgY2FuIGxhZyB0aGUgdGV4dGFyZWEgZm9yIGJpZyBwYXN0ZXMuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFzZSA9IChfYyA9IGVsID09PSBudWxsIHx8IGVsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlbC52YWx1ZSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dFRleHQgPSBiYXNlLnNsaWNlKDAsIHN0YXJ0KSArIHBhc3RlZFRleHQgKyBiYXNlLnNsaWNlKGVuZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dChuZXh0VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChuZXh0VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FyZXQgPSBzdGFydCArIHBhc3RlZFRleHQubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YS5zZXRTZWxlY3Rpb25SYW5nZShjYXJldCwgY2FyZXQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChfYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlIGludmFsaWQgcmFuZ2UgaW4gZWRnZSBicm93c2Vyc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiAoX2pzeChXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIHsgYWN0aW9uczogYWN0aW9ucywgcmVmOiB0ZXh0U3BhY2VSZWYsIG9uQWN0aW9uU2VsZWN0OiBvbkFjdGlvblNlbGVjdCwgUmlnaHRDb21wb25lbnQ6IFJpZ2h0Q29tcG9uZW50LCByaWdodEFjdGlvbnNEaXNhYmxlZDogc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uIHx8IGlzR2VuZXJhdGluZywgb25FbW9qaUNsaWNrOiBvbkVtb2ppQWRkaXRpb24sIGFpQWN0aW9uczogYWlIZWFkZXJBY3Rpb25zLCBkaXNhYmxlQWxsQWN0aW9uczogc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uIHx8IGlzR2VuZXJhdGluZywgaW5zdHJ1Y3Rpb25BY3RpdmU6IGlzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIG9uQUlJbnN0cnVjdGlvbnNDbGljazogKCkgPT4gc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSh0cnVlKSwgb25BSVRvbmVDaGFuZ2U6IChhY3Rpb25UeXBlLCB0b25lSWQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRvbmVCeUFjdGlvbigocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW2FjdGlvblR5cGVdOiB0b25lSWQgfSkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQUlUb25lU2VsZWN0ID09PSBudWxsIHx8IG9uQUlUb25lU2VsZWN0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVG9uZVNlbGVjdChhY3Rpb25UeXBlLCB0b25lSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdG9uZUlkLCBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIG9uQUlBY3Rpb25DbGljazogKGFjdGlvblR5cGUsIGFjdGlvblZhcmlhbnQgPSBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNhbWUgYWN0aW9uIHNob3VsZCBub3QgcmV0cmlnZ2VyIGZyb20gY2hpcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnZW5lcmF0ZSBpcyBvbmx5IHZpYSBleHBsaWNpdCByZWdlbmVyYXRlIGNvbnRyb2wuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmV3IGFjdGlvbiBzdGFydHMgYSBmcmVzaCBzdWdnZXN0aW9uIHNlc3Npb24uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFjdGlvblZhcmlhbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFjdGlvblZhcmlhbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IH0pKV0gfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuZXhwb3J0IHsgQUlfVEFHX0NIQU5HRV9SQVRJT19USFJFU0hPTEQsIGNvbXB1dGVBaVRhZ09uQWNjZXB0LCBsZXZlbnNodGVpbkRpc3RhbmNlLCB9IGZyb20gJy4vYWkvYWlUYWcnO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1XaGF0c0FwcFRleHRFZGl0b3IuanMubWFwIl19 */")),z=a.default("div","production"===process.env.NODE_ENV?{target:"ea7i3sh14"}:{target:"ea7i3sh14",label:"SuggestionCandidateText"})("color:",R.COLORS.content.primary,";"+("production"===process.env.NODE_ENV?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBd0UyQyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIEZyYWdtZW50IGFzIF9GcmFnbWVudCwganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZXdpbmRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3Jld2luZC5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzRG93bkljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvdGh1bWJzX2Rvd24uc3ZnJztcclxuaW1wb3J0IFRodW1ic1VwSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfdXAuc3ZnJztcclxuaW1wb3J0IHsgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9CYXNlV2hhdHNhcHBDb250ZW50TGFuZy5oZWxwZXJcIjtcclxuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUsIH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgeyBDT0xPUlMgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzL1RoZW1lXCI7XHJcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICcuLi90b29sdGlwcy9Ub29sdGlwJztcclxuaW1wb3J0IHsgQm9keUNhcHRpb24sIFRpdGxlU21hbGwgfSBmcm9tICcuLi9UeXBvZ3JhcGh5U3R5bGUnO1xyXG5pbXBvcnQgeyBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlMsIERFRkFVTFRfSU5TVFJVQ1RJT05fU1VHR0VTVElPTlMsIHJlc29sdmVBY3Rpb25Qcm9tcHRzLCB9IGZyb20gJy4vYWkvYWN0aW9uUmVnaXN0cnknO1xyXG5pbXBvcnQgeyBjb21wdXRlQWlUYWdPbkFjY2VwdCB9IGZyb20gJy4vYWkvYWlUYWcnO1xyXG5pbXBvcnQgeyBidWlsZEFjdGlvblByb21wdCwgcmVxdWVzdEFJU3VnZ2VzdGlvbiB9IGZyb20gJy4vYWkvYXBpJztcclxuaW1wb3J0IHsgQ29udGFpbmVyLCBFZGl0b3JGb290ZXJSaWdodCwgRWRpdG9yRm9vdGVyUm93LCBFZGl0b3JGb290ZXJUaXRsZSwgT3V0ZXJDb250YWluZXIsIFRleHRTcGFjZSwgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUFjdGlvblZhcmlhbnQsIEFJRWRpdG9yQWN0aW9uVHlwZXMsIEVkaXRvckFjdGlvblR5cGVzLCBXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIH0gZnJvbSAnLi9XaGF0c0FwcFRleHRFZGl0b3JIZWFkZXInO1xyXG5jb25zdCBMSU1JVF9SRUFDSEVEID0gJ0NoYXJhY3RlciBsaW1pdCByZWFjaGVkJztcclxuY29uc3QgUkVQSFJBU0VfSURMRV9NUyA9IDMwMDA7XHJcbmNvbnN0IE1BWF9SRVBIUkFTRV9ISUdITElHSFRTID0gNTtcclxuY29uc3QgTUFYX1NVR0dFU1RJT05TID0gMztcclxuY29uc3QgTEFSR0VfSU5QVVRfVEhSRVNIT0xEID0gMTIwMDtcclxuY29uc3QgVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgPSAnUmVwaHJhc2UgdGhpcyBXaGF0c0FwcCB1dGlsaXR5IHRlbXBsYXRlIHRvIGltcHJvdmUgY2xhcml0eSBhbmQgcmVhZGFiaWxpdHkgd2hpbGUgcHJlc2VydmluZyB2YXJpYWJsZXMsIGludGVudCwgYW5kIGNvbXBsaWFuY2UuJztcclxuY29uc3Qgc2tlbGV0b25QdWxzZSA9IGtleWZyYW1lcyBgXG5cdDAlIHsgb3BhY2l0eTogMC41NTsgfVxuXHQ1MCUgeyBvcGFjaXR5OiAxOyB9XG5cdDEwMCUgeyBvcGFjaXR5OiAwLjU1OyB9XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxNHB4IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogMTBweDtcblx0bWluLWhlaWdodDogMTUwcHg7XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkxpbmUgPSBzdHlsZWQuZGl2IGBcblx0aGVpZ2h0OiAxNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdHdpZHRoOiAkeyhwcm9wcykgPT4gcHJvcHMud2lkdGh9O1xuXHRiYWNrZ3JvdW5kOiAjZWNlY2VmO1xuXHRhbmltYXRpb246ICR7c2tlbGV0b25QdWxzZX0gMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHRtYXgtaGVpZ2h0OiAyNjBweDtcblx0b3ZlcmZsb3cteTogc2Nyb2xsO1xuXHRzY3JvbGxiYXItd2lkdGg6IHRoaW47XG5cdHNjcm9sbGJhci1jb2xvcjogI2M4YzhjZiB0cmFuc3BhcmVudDtcblx0Ojotd2Via2l0LXNjcm9sbGJhciB7XG5cdFx0d2lkdGg6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcblx0XHRiYWNrZ3JvdW5kOiAjYzhjOGNmO1xuXHRcdGJvcmRlci1yYWRpdXM6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcblx0XHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0fVxuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkJhc2VsaW5lVGV4dCA9IHN0eWxlZC5kaXYgYFxuXHR0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25DYW5kaWRhdGVUZXh0ID0gc3R5bGVkLmRpdiBgXG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkNhbmRpZGF0ZVNrZWxldG9uID0gc3R5bGVkLmRpdiBgXG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHR3aWR0aDogMTAwJTtcblx0bWluLWhlaWdodDogNDBweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db250cm9sc1JvdyA9IHN0eWxlZC5kaXYgYFxuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDZweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db3VudGVyID0gc3R5bGVkLnNwYW4gYFxuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkljb25CdXR0b24gPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0cGFkZGluZzogNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdGRpc3BsYXk6IGlubGluZS1mbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0dHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjEycyBlYXNlO1xuXHQ6bm90KDpkaXNhYmxlZCk6aG92ZXIge1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICR7Q09MT1JTLnN1cmZhY2UuaG92ZXJlZH07XG5cdH1cblx0OmRpc2FibGVkIHtcblx0XHRvcGFjaXR5OiAwLjM1O1xuXHRcdGN1cnNvcjogbm90LWFsbG93ZWQ7XG5cdH1cbmA7XHJcbi8qKiBSZWdlbmVyYXRlIHN0YXlzIGZ1bGwgb3BhY2l0eSB3aGlsZSBkaXNhYmxlZCBzbyB0aGUgbG9hZGluZyBzaGltbWVyIHN0YXlzIHZpc2libGUgKHNhbWUgcHVsc2UgYXMgZWRpdG9yIHNrZWxldG9uKS4gKi9cclxuY29uc3QgU3VnZ2VzdGlvblJlZ2VuZXJhdGVCdXR0b24gPSBzdHlsZWQoU3VnZ2VzdGlvbkljb25CdXR0b24pIGBcblx0OmRpc2FibGVkIHtcblx0XHRvcGFjaXR5OiAxO1xuXHRcdGN1cnNvcjogd2FpdDtcblx0fVxuYDtcclxuY29uc3QgUmVnZW5lcmF0ZUljb25TaGltbWVyID0gc3R5bGVkLmRpdiBgXG5cdHdpZHRoOiAxNHB4O1xuXHRoZWlnaHQ6IDE0cHg7XG5cdGJvcmRlci1yYWRpdXM6IDRweDtcblx0YmFja2dyb3VuZDogI2VjZWNlZjtcblx0ZmxleC1zaHJpbms6IDA7XG5cdGFuaW1hdGlvbjogJHtza2VsZXRvblB1bHNlfSAxLjFzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xuYDtcclxuLyoqIFNhbWUgYm90dG9tIHRvb2xiYXIgc2xvdCBhcyBgV2hhdHNBcHBUZXh0RWRpdG9ySGVhZGVyYCDigJQgcmVwbGFjZXMgdGhlIGZ1bGwgaWNvbi9BSSBwYW5lbCB3aGlsZSBvcGVuLiAqL1xyXG5jb25zdCBJbnN0cnVjdGlvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblx0cGFkZGluZzogOHB4IDEycHg7XG5cdGdhcDogMTBweDtcblx0Ym9yZGVyLXJhZGl1czogMCAwIDRweCA0cHg7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXRSb3cgPSBzdHlsZWQuZGl2IGBcblx0Ym9yZGVyOiAxcHggc29saWQgI2Y1YTRjMDtcblx0Ym9yZGVyLXJhZGl1czogMTBweDtcblx0cGFkZGluZzogOHB4IDEwcHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbklucHV0ID0gc3R5bGVkLmlucHV0IGBcblx0ZmxleDogMTtcblx0bWluLXdpZHRoOiAwO1xuXHRib3JkZXI6IDA7XG5cdG91dGxpbmU6IG5vbmU7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25BY3Rpb25zID0gc3R5bGVkLmRpdiBgXG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQ2FuY2VsID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnNlY29uZGFyeX07XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0Zm9udC13ZWlnaHQ6IDUwMDtcblx0cGFkZGluZzogMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbXByb3ZlID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMXB4IHNvbGlkICM1ZDNhNzI7XG5cdGNvbG9yOiAjNWQzYTcyO1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0Ym9yZGVyLXJhZGl1czogOHB4O1xuXHRwYWRkaW5nOiA4cHggMTRweDtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRsaW5lLWhlaWdodDogMS4xO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0ID0gc3R5bGVkLmRpdiBgXG5cdG1hcmdpbi10b3A6IDEwcHg7XG5cdGJvcmRlci1yYWRpdXM6IDEycHg7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3gtc2hhZG93OiAwIDZweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkJ1dHRvbiA9IHN0eWxlZC5idXR0b24gYFxuXHR3aWR0aDogMTAwJTtcblx0Ym9yZGVyOiAwO1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgJHtDT0xPUlMuc3Ryb2tlLnByaW1hcnl9O1xuXHRiYWNrZ3JvdW5kOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyNlNWYzZTgnIDogJ3RyYW5zcGFyZW50Jyl9O1xuXHRjb2xvcjogJHsocHJvcHMpID0+IChwcm9wcy5zZWxlY3RlZCA/ICcjMWU2YjM0JyA6IENPTE9SUy5jb250ZW50LnByaW1hcnkpfTtcblx0dGV4dC1hbGlnbjogbGVmdDtcblx0cGFkZGluZzogMTJweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjI7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0OmZpcnN0LW9mLXR5cGUge1xuXHRcdGJvcmRlci10b3A6IDA7XG5cdH1cbmA7XHJcbmNvbnN0IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nID0gbmV3IEJhc2VXaGF0c2FwcENvbnRlbnRMYW5nSGVscGVyKCk7XHJcbmNvbnN0IFdpbGRDYXJkTWFwID0ge1xyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLkJPTERdOiAnKicsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuSVRBTElDXTogJ18nLFxyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLlNUUklLRVRIUk9VR0hdOiAnficsXHJcbn07XHJcbmZ1bmN0aW9uIGdldEhpZ2hsaWdodFN0b3JhZ2VLZXkoZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgIHJldHVybiBgd2hhdHNhcHAtZWRpdG9yLXJlcGhyYXNlLWhpZ2hsaWdodC0ke2VkaXRvckluc3RhbmNlS2V5IHx8ICdkZWZhdWx0J31gO1xyXG59XHJcbmV4cG9ydCBjb25zdCBXaGF0c0FwcFRleHRFZGl0b3IgPSBSZWFjdC5mb3J3YXJkUmVmKChfYSwgcmVmKSA9PiB7XHJcbiAgICB2YXIgeyBvbkNoYW5nZSwgb25DbGlja1ZhcmlhYmxlLCB0ZXh0OiBpbnB1dFZhbHVlLCBSaWdodENvbXBvbmVudCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yLCByb3dzLCBhY3Rpb25zLCBlZGl0b3JJbnN0YW5jZUtleSwgdGVtcGxhdGVUeXBlID0gJ21hcmtldGluZycsIHRlbXBsYXRlSWQsIHJlcXVlc3RFeGVjdXRvciwgYmFzZVVybCwgZW5kcG9pbnRQYXRoLCB1c2VDYXNlLCBzdG9yZUlkLCBhcGlBZGFwdGVyLCBjb252ZXJzYXRpb25JZCA9ICd3aGF0c2FwcC10ZW1wbGF0ZS1lZGl0b3InLCBzeXN0ZW1JZCA9ICd3aGF0c2FwcC13cml0ZXInLCBpbnRlbnQgPSAnZGVmYXVsdCcsIGVuYWJsZWRBSUFjdGlvbnMgPSBbXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlNIT1JURU4sXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FWFBBTkQsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FTU9KSUZZLFxyXG4gICAgXSwgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMgPSBmYWxzZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCBhaUFjdGlvbk1pbkNoYXJzLCBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgb25BSUV2ZW50LCBvbkFJVGFnQ29tcHV0ZWQsIHByZWZpbGxXYXNBaUdlbmVyYXRlZCA9IGZhbHNlLCBlZGl0b3JIZWFkZXIsIG9uQUlUb25lU2VsZWN0LCBvbkFJQWN0aW9uUmVxdWVzdCwgb25CdWlsZEFJUHJvbXB0IH0gPSBfYSwgdGV4dEFyZWFQcm9wcyA9IF9fcmVzdChfYSwgW1wib25DaGFuZ2VcIiwgXCJvbkNsaWNrVmFyaWFibGVcIiwgXCJ0ZXh0XCIsIFwiUmlnaHRDb21wb25lbnRcIiwgXCJlcnJvclwiLCBcImxpbWl0XCIsIFwib25FcnJvclwiLCBcInJvd3NcIiwgXCJhY3Rpb25zXCIsIFwiZWRpdG9ySW5zdGFuY2VLZXlcIiwgXCJ0ZW1wbGF0ZVR5cGVcIiwgXCJ0ZW1wbGF0ZUlkXCIsIFwicmVxdWVzdEV4ZWN1dG9yXCIsIFwiYmFzZVVybFwiLCBcImVuZHBvaW50UGF0aFwiLCBcInVzZUNhc2VcIiwgXCJzdG9yZUlkXCIsIFwiYXBpQWRhcHRlclwiLCBcImNvbnZlcnNhdGlvbklkXCIsIFwic3lzdGVtSWRcIiwgXCJpbnRlbnRcIiwgXCJlbmFibGVkQUlBY3Rpb25zXCIsIFwiZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnNcIiwgXCJwcm9tcHRPdmVycmlkZXNcIiwgXCJyZXBocmFzZVRvbmVzXCIsIFwiYWlBY3Rpb25NaW5DaGFyc1wiLCBcImluc3RydWN0aW9uU3VnZ2VzdGlvbnNcIiwgXCJvbkFJRXZlbnRcIiwgXCJvbkFJVGFnQ29tcHV0ZWRcIiwgXCJwcmVmaWxsV2FzQWlHZW5lcmF0ZWRcIiwgXCJlZGl0b3JIZWFkZXJcIiwgXCJvbkFJVG9uZVNlbGVjdFwiLCBcIm9uQUlBY3Rpb25SZXF1ZXN0XCIsIFwib25CdWlsZEFJUHJvbXB0XCJdKTtcclxuICAgIGNvbnN0IHRleHRTcGFjZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IFtjdXJyZW50VGV4dCwgc2V0Q3VycmVudFRleHRdID0gdXNlU3RhdGUoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICBjb25zdCBbaXNSZXBocmFzZUhpZ2hsaWdodGVkLCBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW3JlcGhyYXNlSGlnaGxpZ2h0Q291bnQsIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbaXNHZW5lcmF0aW5nLCBzZXRJc0dlbmVyYXRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2lzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGVdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2luc3RydWN0aW9uVGV4dCwgc2V0SW5zdHJ1Y3Rpb25UZXh0XSA9IHVzZVN0YXRlKCcnKTtcclxuICAgIGNvbnN0IFt0b25lQnlBY3Rpb24sIHNldFRvbmVCeUFjdGlvbl0gPSB1c2VTdGF0ZSh7fSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkJhc2VUZXh0LCBzZXRTdWdnZXN0aW9uQmFzZVRleHRdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkNhbmRpZGF0ZXMsIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzXSA9IHVzZVN0YXRlKFtdKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uSW5kZXgsIHNldFN1Z2dlc3Rpb25JbmRleF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGVdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBzdWdnZXN0aW9uU2Nyb2xsUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgcmVwaHJhc2VJZGxlUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgaGlnaGxpZ2h0UmVzZXRSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICAvKipcclxuICAgICAqIFByaW9yIGVsaWdpYmlsaXR5IGZvciByZXBocmFzZSBudWRnZSAobnVsbCA9IG5vdCBpbml0aWFsaXplZCkuXHJcbiAgICAgKiBNYXRjaGVzIHRoZSBjaGlwOiBub24tZW1wdHkgdHJpbSBhbmQgbGVuZ3RoIOKJpSBtaW4g4oCUIHNhbWUgYXMgYGFpSGVhZGVyQWN0aW9uc2AgZGlzYWJsZWQgcnVsZXMuXHJcbiAgICAgKi9cclxuICAgIGNvbnN0IHByZXZSZXBocmFzZUVsaWdpYmxlUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgZGVmZXJyZWRIdG1sUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgbGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIC8qKiBGaXJzdCBhY2NlcHQgYWZ0ZXIgZnVsbC1BSSBwcmVmaWxsIChgcHJlZmlsbFdhc0FpR2VuZXJhdGVkYCk7IGNsZWFyZWQgYWZ0ZXIgb25lIGFjY2VwdC4gKi9cclxuICAgIGNvbnN0IGluaXRpYWxBaVByZWZpbGxQaGFzZVJlZiA9IHVzZVJlZighIXByZWZpbGxXYXNBaUdlbmVyYXRlZCk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGluaXRpYWxBaVByZWZpbGxQaGFzZVJlZi5jdXJyZW50ID0gISFwcmVmaWxsV2FzQWlHZW5lcmF0ZWQ7XHJcbiAgICB9LCBbcHJlZmlsbFdhc0FpR2VuZXJhdGVkLCBlZGl0b3JJbnN0YW5jZUtleV0pO1xyXG4gICAgY29uc3QgYWN0aXZlQWN0aW9uUHJvbXB0cyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiByZXNvbHZlQWN0aW9uUHJvbXB0cyh0ZW1wbGF0ZVR5cGUsIHByb21wdE92ZXJyaWRlcywgcmVwaHJhc2VUb25lcyk7XHJcbiAgICB9LCBbcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCB0ZW1wbGF0ZVR5cGVdKTtcclxuICAgIGNvbnN0IGZpbHRlcmVkSW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGlmICghcXVlcnkpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucy5maWx0ZXIoKHN1Z2dlc3Rpb24pID0+IHN1Z2dlc3Rpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeSkpO1xyXG4gICAgfSwgW2luc3RydWN0aW9uU3VnZ2VzdGlvbnMsIGluc3RydWN0aW9uVGV4dF0pO1xyXG4gICAgY29uc3QgbWluQ2hhcnNCeUFjdGlvbiA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUyksIChhaUFjdGlvbk1pbkNoYXJzIHx8IHt9KSk7XHJcbiAgICB9LCBbYWlBY3Rpb25NaW5DaGFyc10pO1xyXG4gICAgY29uc3QgcmVwaHJhc2VNaW5DaGFycyA9IG1pbkNoYXJzQnlBY3Rpb25bQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV0gfHxcclxuICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV07XHJcbiAgICBjb25zdCBlbWl0QUlFdmVudCA9IHVzZUNhbGxiYWNrKChuYW1lLCBwYXlsb2FkKSA9PiB7XHJcbiAgICAgICAgb25BSUV2ZW50ID09PSBudWxsIHx8IG9uQUlFdmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSUV2ZW50KG5hbWUsIHBheWxvYWQpO1xyXG4gICAgfSwgW29uQUlFdmVudF0pO1xyXG4gICAgY29uc3Qgc2V0RWRpdG9yVGV4dCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIHNldEN1cnJlbnRUZXh0KChwcmV2KSA9PiAocHJldiA9PT0gbmV4dFRleHQgPyBwcmV2IDogbmV4dFRleHQpKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGVtaXRDaGFuZ2VXaXRoR3VhcmQgPSB1c2VDYWxsYmFjaygobmV4dFRleHQpID0+IHtcclxuICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGRlZmVycmVkSHRtbFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5leHRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIG5leHRUZXh0KTtcclxuICAgICAgICAgICAgZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChuZXh0VGV4dCkpO1xyXG4gICAgICAgICAgICB9LCAxNik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICB9LCBbb25DaGFuZ2VdKTtcclxuICAgIGNvbnN0IGNsZWFyU3VnZ2VzdGlvblNlc3Npb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0KG51bGwpO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtdKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUobnVsbCk7XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgPj0gTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXh0Q291bnQgPSByZXBocmFzZUhpZ2hsaWdodENvdW50ICsgMTtcclxuICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KG5leHRDb3VudCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSksIFN0cmluZyhuZXh0Q291bnQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKHRydWUpO1xyXG4gICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgIH0sIDEyMDApO1xyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5LCByZXBocmFzZUhpZ2hsaWdodENvdW50XSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHRSZWYgPSB1c2VSZWYodHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0KTtcclxuICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50ID0gdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0O1xyXG4gICAgZnVuY3Rpb24gaGFuZGxlT25DaGFuZ2UoZSkge1xyXG4gICAgICAgIGNvbnN0IHRleHQgPSBlLnRhcmdldC52YWx1ZTtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBzZXRDYXJldFBvc2l0aW9uKGNhcmV0UG9zKSB7XHJcbiAgICAgICAgY29uc3QgZWxlbSA9IHRleHRTcGFjZVJlZiA9PT0gbnVsbCB8fCB0ZXh0U3BhY2VSZWYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRleHRTcGFjZVJlZi5jdXJyZW50O1xyXG4gICAgICAgIGlmIChlbGVtICE9IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKGVsZW0uc2VsZWN0aW9uU3RhcnQpIHtcclxuICAgICAgICAgICAgICAgIGVsZW0uZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIGVsZW0uc2VsZWN0aW9uRW5kID0gY2FyZXRQb3M7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgZWxlbS5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIG9uQWN0aW9uU2VsZWN0KGFjdGlvblR5cGUpIHtcclxuICAgICAgICBjb25zdCB3aWxkQ2FyZCA9IFdpbGRDYXJkTWFwW2FjdGlvblR5cGVdO1xyXG4gICAgICAgIGlmICh3aWxkQ2FyZCAmJiB0ZXh0U3BhY2VSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHRleHQgfSA9IGluc2VydFRleHRBdEluZGV4KHdpbGRDYXJkLCBzdGFydCk7XHJcbiAgICAgICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uKHN0YXJ0ICsgMSk7XHJcbiAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBhZGRUZXh0T3JXcmFwKHdpbGRDYXJkKTtcclxuICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBvbkVtb2ppQWRkaXRpb24oZW1vamkpIHtcclxuICAgICAgICBjb25zdCB7IHRleHQgfSA9IGFkZFRleHQoZW1vamkpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhZGRUZXh0T3JXcmFwKHRleHRUb0FkZCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgbGV0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICBpZiAodGV4dFNwYWNlUmVmLmN1cnJlbnQgJiYgdGV4dFRvQWRkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgY29uc3Qgd2lsZENhcmQgPSB0ZXh0VG9BZGQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICAvKiogbm90aGluZyBpcyBzZWxlY3RlZCAqL1xyXG4gICAgICAgICAgICAgICAgLyoqIHNvIGFwcGVuZCB0aGUgd2lsZGNhcmQgYXQgdGhlIGVuZCAqL1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFkZFRleHQod2lsZENhcmQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGV4dCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLndyYXBwV2lsZGNhcmQoc3RhcnQsIGVuZCwgd2lsZENhcmQsIHRleHQpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaHRtbCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwodGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdGV4dCwgaHRtbCB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IHRleHQ6IHRleHQsIGh0bWw6IHRleHQgfTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZFRleHQodGV4dFRvQWRkKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgaWYgKHRleHRTcGFjZVJlZi5jdXJyZW50ICYmIHRleHRUb0FkZCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zZXJ0VGV4dEF0SW5kZXgodGV4dFRvQWRkLCBzdGFydCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dDogdGV4dCwgaHRtbDogdGV4dCB9O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gaW5zZXJ0VGV4dEF0SW5kZXgodGV4dFRvQWRkLCBpbmRleCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgbGV0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICB0ZXh0ID0gdGV4dC5zbGljZSgwLCBpbmRleCkgKyB0ZXh0VG9BZGQgKyB0ZXh0LnNsaWNlKGluZGV4KTtcclxuICAgICAgICBjb25zdCBodG1sID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTCh0ZXh0KTtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgIHJldHVybiB7IHRleHQsIGh0bWwgfTtcclxuICAgIH1cclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8ICFlZGl0b3JJbnN0YW5jZUtleSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNhY2hlZCA9IE51bWJlcihzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGdldEhpZ2hsaWdodFN0b3JhZ2VLZXkoZWRpdG9ySW5zdGFuY2VLZXkpKSB8fFxyXG4gICAgICAgICAgICAnMCcpO1xyXG4gICAgICAgIGlmICghTnVtYmVyLmlzTmFOKGNhY2hlZCkpIHtcclxuICAgICAgICAgICAgc2V0UmVwaHJhc2VIaWdobGlnaHRDb3VudChjYWNoZWQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtlZGl0b3JJbnN0YW5jZUtleV0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBjb25zdCBlbGlnaWJsZSA9ICEhY3VycmVudFRleHQudHJpbSgpICYmIGN1cnJlbnRUZXh0Lmxlbmd0aCA+PSByZXBocmFzZU1pbkNoYXJzO1xyXG4gICAgICAgIGlmIChwcmV2UmVwaHJhc2VFbGlnaWJsZVJlZi5jdXJyZW50ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHByZXZSZXBocmFzZUVsaWdpYmxlUmVmLmN1cnJlbnQgPSBlbGlnaWJsZTtcclxuICAgICAgICAgICAgaWYgKGVsaWdpYmxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50KCk7XHJcbiAgICAgICAgICAgICAgICB9LCBSRVBIUkFTRV9JRExFX01TKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZWxpZ2libGUpIHtcclxuICAgICAgICAgICAgcHJldlJlcGhyYXNlRWxpZ2libGVSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjcm9zc2VkVGhyZXNob2xkID0gIXByZXZSZXBocmFzZUVsaWdpYmxlUmVmLmN1cnJlbnQgJiYgZWxpZ2libGU7XHJcbiAgICAgICAgcHJldlJlcGhyYXNlRWxpZ2libGVSZWYuY3VycmVudCA9IHRydWU7XHJcbiAgICAgICAgaWYgKGNyb3NzZWRUaHJlc2hvbGQpIHtcclxuICAgICAgICAgICAgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0UmVmLmN1cnJlbnQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50KCk7XHJcbiAgICAgICAgfSwgUkVQSFJBU0VfSURMRV9NUyk7XHJcbiAgICB9LCBbY3VycmVudFRleHQsIHJlcGhyYXNlTWluQ2hhcnNdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGFjdGl2ZUNhbmRpZGF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzW3N1Z2dlc3Rpb25JbmRleF0gfHwgJyc7XHJcbiAgICBjb25zdCBzdWdnZXN0aW9uQmFzZUh0bWwgPSB1c2VNZW1vKCgpID0+IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwoc3VnZ2VzdGlvbkJhc2VUZXh0IHx8ICcnKSwgW3N1Z2dlc3Rpb25CYXNlVGV4dF0pO1xyXG4gICAgY29uc3QgYWN0aXZlQ2FuZGlkYXRlSHRtbCA9IHVzZU1lbW8oKCkgPT4gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChhY3RpdmVDYW5kaWRhdGUpLCBbYWN0aXZlQ2FuZGlkYXRlXSk7XHJcbiAgICBjb25zdCBjYW5SZWdlbmVyYXRlID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDwgTUFYX1NVR0dFU1RJT05TO1xyXG4gICAgY29uc3Qgc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID0gISFzdWdnZXN0aW9uQmFzZVRleHQgJiYgc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoID4gMDtcclxuICAgIGNvbnN0IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8IHN1Z2dlc3Rpb25JbmRleCA8PSAwO1xyXG4gICAgY29uc3QgaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDw9IDEgfHxcclxuICAgICAgICBzdWdnZXN0aW9uSW5kZXggPj0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBub2RlID0gc3VnZ2VzdGlvblNjcm9sbFJlZi5jdXJyZW50O1xyXG4gICAgICAgIGlmICghbm9kZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIG5vZGUuc2Nyb2xsVG9wID0gbm9kZS5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9LCBbYWN0aXZlQ2FuZGlkYXRlLCBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24sIGlzR2VuZXJhdGluZ10pO1xyXG4gICAgY29uc3QgZXhlY3V0ZUFJQWN0aW9uID0gdXNlQ2FsbGJhY2soKGFjdGlvblR5cGUsIHJlZ2VuZXJhdGVFeGlzdGluZyA9IGZhbHNlLCBpbnN0cnVjdGlvbk92ZXJyaWRlLCB0b25lT3ZlcnJpZGVJZCwgYWN0aW9uVmFyaWFudCA9IEFJQWN0aW9uVmFyaWFudC5ERUZBVUxUKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICB2YXIgX2IsIF9jLCBfZDtcclxuICAgICAgICBpZiAoIW9uQUlBY3Rpb25SZXF1ZXN0ICYmXHJcbiAgICAgICAgICAgICFhcGlBZGFwdGVyICYmXHJcbiAgICAgICAgICAgICghcmVxdWVzdEV4ZWN1dG9yIHx8ICFiYXNlVXJsKSkge1xyXG4gICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoJ0FJIGNvbmZpZ3VyYXRpb24gbWlzc2luZycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY3VycmVudFRleHQudHJpbSgpKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbWluQ2hhcnNGb3JBY3Rpb24gPSBtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICA1MDtcclxuICAgICAgICBpZiAoY3VycmVudFRleHQubGVuZ3RoIDwgbWluQ2hhcnNGb3JBY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpZiAoaXNHZW5lcmF0aW5nKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKHJlZ2VuZXJhdGVFeGlzdGluZyAmJiAhY2FuUmVnZW5lcmF0ZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGJhc2VDb25maWcgPSBhY3RpdmVBY3Rpb25Qcm9tcHRzW2FjdGlvblR5cGVdO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UgJiZcclxuICAgICAgICAgICAgdGVtcGxhdGVUeXBlID09PSAndXRpbGl0eScgJiZcclxuICAgICAgICAgICAgYWN0aW9uVmFyaWFudCA9PT0gQUlBY3Rpb25WYXJpYW50LlJFUEhSQVNFXHJcbiAgICAgICAgICAgID8gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBiYXNlQ29uZmlnKSwgeyBsYWJlbDogJ1JlcGhyYXNlJywgYmFzZVByb21wdDogVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgfSkgOiBiYXNlQ29uZmlnO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVG9uZUlkID0gdG9uZU92ZXJyaWRlSWQgfHxcclxuICAgICAgICAgICAgdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIGNvbmZpZy5kZWZhdWx0VG9uZUlkIHx8XHJcbiAgICAgICAgICAgICgoX2MgPSAoX2IgPSBjb25maWcudG9uZXMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYlswXSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmlkKTtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFRvbmUgPSAoX2QgPSBjb25maWcudG9uZXMpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5maW5kKCh0b25lKSA9PiB0b25lLmlkID09PSBzZWxlY3RlZFRvbmVJZCk7XHJcbiAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgPSBpbnN0cnVjdGlvbk92ZXJyaWRlICE9PSB1bmRlZmluZWRcclxuICAgICAgICAgICAgPyBpbnN0cnVjdGlvbk92ZXJyaWRlXHJcbiAgICAgICAgICAgIDogaW5zdHJ1Y3Rpb25UZXh0O1xyXG4gICAgICAgIGNvbnN0IHByb21wdCA9IChvbkJ1aWxkQUlQcm9tcHQgPT09IG51bGwgfHwgb25CdWlsZEFJUHJvbXB0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkJ1aWxkQUlQcm9tcHQoe1xyXG4gICAgICAgICAgICBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICBhY3Rpb25WYXJpYW50LFxyXG4gICAgICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICBjb25maWcsXHJcbiAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgIHRvbmVMYWJlbDogc2VsZWN0ZWRUb25lID09PSBudWxsIHx8IHNlbGVjdGVkVG9uZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZWN0ZWRUb25lLmxhYmVsLFxyXG4gICAgICAgICAgICBpbnN0cnVjdGlvblRleHQ6IGluc3RydWN0aW9uRm9yUHJvbXB0IHx8IHVuZGVmaW5lZCxcclxuICAgICAgICB9KSkgfHxcclxuICAgICAgICAgICAgYnVpbGRBY3Rpb25Qcm9tcHQoe1xyXG4gICAgICAgICAgICAgICAgY29uZmlnLFxyXG4gICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZCxcclxuICAgICAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIHNldElzR2VuZXJhdGluZyh0cnVlKTtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfYWN0aW9uX3RyaWdnZXJlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG9uQUlBY3Rpb25SZXF1ZXN0XHJcbiAgICAgICAgICAgICAgICA/IHlpZWxkIG9uQUlBY3Rpb25SZXF1ZXN0KHtcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblZhcmlhbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIDogeWllbGQgcmVxdWVzdEFJU3VnZ2VzdGlvbih7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgYmFzZVVybCxcclxuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgICAgIGludGVudCxcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICAgICAgICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZydcclxuICAgICAgICAgICAgICAgID8gcmVzdWx0LnRyaW0oKVxyXG4gICAgICAgICAgICAgICAgOiAoKHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3VsdC5ib2R5KSB8fCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKCFyZWdlbmVyYXRlRXhpc3RpbmcpIHtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25CYXNlVGV4dChjdXJyZW50VGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShhY3Rpb25UeXBlKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtjYW5kaWRhdGVdKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcygocHJldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IFsuLi5wcmV2LCBjYW5kaWRhdGVdLnNsaWNlKDAsIE1BWF9TVUdHRVNUSU9OUyk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgobmV4dC5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdGYWlsZWQgdG8gZ2VuZXJhdGUgQUkgc3VnZ2VzdGlvbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgc2V0SXNHZW5lcmF0aW5nKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9KSwgW1xyXG4gICAgICAgIHJlcXVlc3RFeGVjdXRvcixcclxuICAgICAgICBiYXNlVXJsLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBjYW5SZWdlbmVyYXRlLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGluc3RydWN0aW9uVGV4dCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIGVuZHBvaW50UGF0aCxcclxuICAgICAgICBhcGlBZGFwdGVyLFxyXG4gICAgICAgIGludGVudCxcclxuICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgIG9uRXJyb3IsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgICAgICBvbkFJQWN0aW9uUmVxdWVzdCxcclxuICAgICAgICBvbkJ1aWxkQUlQcm9tcHQsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFhY3RpdmVDYW5kaWRhdGUgfHwgIXN1Z2dlc3Rpb25CYXNlVGV4dCB8fCAhc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2FjY2VwdGVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGluSW5pdGlhbEFpUGhhc2UgPSBpbml0aWFsQWlQcmVmaWxsUGhhc2VSZWYuY3VycmVudDtcclxuICAgICAgICBjb25zdCB0YWdQYXlsb2FkID0gY29tcHV0ZUFpVGFnT25BY2NlcHQoe1xyXG4gICAgICAgICAgICBiYXNlbGluZVRleHQ6IHN1Z2dlc3Rpb25CYXNlVGV4dCxcclxuICAgICAgICAgICAgYWNjZXB0ZWRUZXh0OiBhY3RpdmVDYW5kaWRhdGUsXHJcbiAgICAgICAgICAgIGluaXRpYWxBaVByZWZpbGxQaGFzZTogaW5Jbml0aWFsQWlQaGFzZSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoaW5Jbml0aWFsQWlQaGFzZSkge1xyXG4gICAgICAgICAgICBpbml0aWFsQWlQcmVmaWxsUGhhc2VSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvbkFJVGFnQ29tcHV0ZWQgPT09IG51bGwgfHwgb25BSVRhZ0NvbXB1dGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVGFnQ29tcHV0ZWQodGFnUGF5bG9hZCk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGFjdGl2ZUNhbmRpZGF0ZSxcclxuICAgICAgICBzdWdnZXN0aW9uQmFzZVRleHQsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCxcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkLFxyXG4gICAgICAgIGVtaXRBSUV2ZW50LFxyXG4gICAgICAgIHRlbXBsYXRlSWQsXHJcbiAgICAgICAgb25BSVRhZ0NvbXB1dGVkLFxyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2Rpc2NhcmRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uKCk7XHJcbiAgICB9LCBbY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiwgZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKChyYXRpbmcpID0+IHtcclxuICAgICAgICBpZiAoIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2ZlZWRiYWNrX3N1Ym1pdHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICAgICAgcmF0aW5nLFxyXG4gICAgICAgICAgICBjYW5kaWRhdGVfaW5kZXg6IHN1Z2dlc3Rpb25JbmRleCArIDEsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LCBbZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzdWdnZXN0aW9uSW5kZXgsIHRlbXBsYXRlSWRdKTtcclxuICAgIGNvbnN0IGFpSGVhZGVyQWN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucylcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBlbmFibGVkQUlBY3Rpb25zLm1hcCgoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICAgICAgY29uc3QgYWN0aW9uQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICAgICAgY29uc3QgdG9uZUlkID0gdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICBhY3Rpb25Db25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAgICAgKChfYiA9IChfYSA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzBdKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWQpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBhY3Rpb25Db25maWcubGFiZWwsXHJcbiAgICAgICAgICAgICAgICBpc1ByaW1hcnk6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBpc0dlbmVyYXRpbmcgJiYgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHRlZDogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVwaHJhc2VIaWdobGlnaHRlZCxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhY3VycmVudFRleHQudHJpbSgpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQubGVuZ3RoIDxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG1pbkNoYXJzQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNTApIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgaXNHZW5lcmF0aW5nIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSksXHJcbiAgICAgICAgICAgICAgICBzaG93VG9uZURyb3Bkb3duOiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgICAgICAgICAgISEoKF9jID0gYWN0aW9uQ29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSxcclxuICAgICAgICAgICAgICAgIHRvbmVzOiBhY3Rpb25Db25maWcudG9uZXMsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZDogdG9uZUlkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGVuYWJsZWRBSUFjdGlvbnMsXHJcbiAgICAgICAgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMsXHJcbiAgICAgICAgYWN0aXZlQWN0aW9uUHJvbXB0cyxcclxuICAgICAgICB0b25lQnlBY3Rpb24sXHJcbiAgICAgICAgaXNHZW5lcmF0aW5nLFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbixcclxuICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgIF0pO1xyXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBhZGRUZXh0T3JXcmFwLFxyXG4gICAgICAgICAgICBhZGRUZXh0LFxyXG4gICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24sXHJcbiAgICAgICAgfTtcclxuICAgIH0sIFthZGRUZXh0T3JXcmFwLCBhZGRUZXh0LCBjdXJyZW50VGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoaW5wdXRWYWx1ZSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChpbnB1dFZhbHVlIHx8ICcnKTtcclxuICAgIH0sIFtpbnB1dFZhbHVlLCBzZXRFZGl0b3JUZXh0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICghbGltaXQgfHwgIW9uRXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBuZXh0RXJyb3IgPSBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdCA/IExJTUlUX1JFQUNIRUQgOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiAnJztcclxuICAgICAgICBpZiAobGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID09PSBuZXh0RXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBsYXN0RW1pdHRlZEVkaXRvckVycm9yUmVmLmN1cnJlbnQgPSBuZXh0RXJyb3I7XHJcbiAgICAgICAgb25FcnJvcihuZXh0RXJyb3IpO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCBlcnJvciwgbGltaXQsIG9uRXJyb3JdKTtcclxuICAgIHJldHVybiAoX2pzeHMoT3V0ZXJDb250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4cyhFZGl0b3JGb290ZXJSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvckZvb3RlclRpdGxlLCB7IGNoaWxkcmVuOiBlZGl0b3JIZWFkZXIgPyAoX2pzeChUaXRsZVNtYWxsLCBPYmplY3QuYXNzaWduKHsgXCJkYXRhLXRlc3RcIjogXCJib2R5LXRleHQtZm9yLWVkaXQtdGVtcGxhdGVcIiB9LCB7IGNoaWxkcmVuOiBlZGl0b3JIZWFkZXIgfSkpKSA6IG51bGwgfSksIF9qc3hzKEVkaXRvckZvb3RlclJpZ2h0LCB7IGNoaWxkcmVuOiBbZXJyb3IgJiYgZXJyb3IgIT09IExJTUlUX1JFQUNIRUQgPyAoX2pzeHMoX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBbX2pzeChJbmZvSWNvbiwgeyB3aWR0aDogMTYsIGhlaWdodDogMTYsIGNvbG9yOiBDT0xPUlMuY29udGVudC5uZWdhdGl2ZSB9KSwgX2pzeChCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IGNvbG9yOiBDT0xPUlMuY29udGVudC5uZWdhdGl2ZSB9LCB7IGNoaWxkcmVuOiBlcnJvciB9KSldIH0pKSA6IG51bGwsIGxpbWl0ID8gKF9qc3hzKEJvZHlDYXB0aW9uLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IGVycm9yID09PSBMSU1JVF9SRUFDSEVEIHx8IGN1cnJlbnRUZXh0Lmxlbmd0aCA+IGxpbWl0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IENPTE9SUy5jb250ZW50Lm5lZ2F0aXZlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IFtjdXJyZW50VGV4dC5sZW5ndGgsIFwiL1wiLCBsaW1pdF0gfSkpKSA6IG51bGxdIH0pXSB9KSwgX2pzeHMoQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgaXNFcnJvcjogISFlcnJvciB9LCB7IGNoaWxkcmVuOiBbc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID8gKF9qc3hzKFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgcmVmOiBzdWdnZXN0aW9uU2Nyb2xsUmVmIH0sIHsgY2hpbGRyZW46IFtfanN4KFN1Z2dlc3Rpb25CYXNlbGluZVRleHQsIHsgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHsgX19odG1sOiBzdWdnZXN0aW9uQmFzZUh0bWwgfSB9KSwgaXNHZW5lcmF0aW5nID8gKF9qc3goU3VnZ2VzdGlvbkNhbmRpZGF0ZVRleHQsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtYnVzeVwiOiBcInRydWVcIiB9LCB7IGNoaWxkcmVuOiBfanN4cyhTdWdnZXN0aW9uQ2FuZGlkYXRlU2tlbGV0b24sIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiODQlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjY4JVwiIH0pXSB9KSB9KSkpIDogKF9qc3goU3VnZ2VzdGlvbkNhbmRpZGF0ZVRleHQsIHsgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19odG1sOiBhY3RpdmVDYW5kaWRhdGVIdG1sLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSkpLCBfanN4cyhTdWdnZXN0aW9uQ29udHJvbHNSb3csIHsgY2hpbGRyZW46IFtfanN4cyhTdWdnZXN0aW9uQ291bnRlciwgeyBjaGlsZHJlbjogW3N1Z2dlc3Rpb25JbmRleCArIDEsIFwiL1wiLCBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGhdIH0pLCBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUHJldmlvdXMgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBkaXNhYmxlZDogaXNQcmV2U3VnZ2VzdGlvbkRpc2FibGVkLCBvbkNsaWNrOiAoKSA9PiBzZXRTdWdnZXN0aW9uSW5kZXgoKGlkeCkgPT4gTWF0aC5tYXgoMCwgaWR4IC0gMSkpIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hldnJvbkxlZnRJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSksIF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiTGlrZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUZlZWRiYWNrKCdsaWtlJykgfSwgeyBjaGlsZHJlbjogX2pzeChUaHVtYnNVcEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzbGlrZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkRpc2xpa2Ugc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiBoYW5kbGVGZWVkYmFjaygnZGlzbGlrZScpIH0sIHsgY2hpbGRyZW46IF9qc3goVGh1bWJzRG93bkljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIGNhblJlZ2VuZXJhdGUgPyAoX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogaXNHZW5lcmF0aW5nID8gJ1JlZ2VuZXJhdGluZ+KApicgOiAnUmVnZW5lcmF0ZScsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25SZWdlbmVyYXRlQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIFwiYXJpYS1idXN5XCI6IGlzR2VuZXJhdGluZywgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzR2VuZXJhdGluZywgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3VnZ2VzdGlvbkFjdGlvblR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IGlzR2VuZXJhdGluZyA/IChfanN4KFJlZ2VuZXJhdGVJY29uU2hpbW1lciwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUgfSkpIDogKF9qc3goUmV3aW5kSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkpIH0pKSB9KSkpIDogbnVsbCwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNjYXJkXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiQWNjZXB0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogaGFuZGxlQWNjZXB0U3VnZ2VzdGlvbiB9LCB7IGNoaWxkcmVuOiBfanN4KENoZWNrSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKV0gfSldIH0pKSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFzdGVkVGV4dCA9IGUuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFzdGVkVGV4dC5sZW5ndGggPiBMQVJHRV9JTlBVVF9USFJFU0hPTEQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWwgPSB0ZXh0U3BhY2VSZWYuY3VycmVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IChfYSA9IGVsID09PSBudWxsIHx8IGVsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlbC5zZWxlY3Rpb25TdGFydCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSAoX2IgPSBlbCA9PT0gbnVsbCB8fCBlbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogZWwuc2VsZWN0aW9uRW5kKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcmVmZXIgbGl2ZSBET00gdmFsdWUg4oCUIGBjdXJyZW50VGV4dGAgY2FuIGxhZyB0aGUgdGV4dGFyZWEgZm9yIGJpZyBwYXN0ZXMuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFzZSA9IChfYyA9IGVsID09PSBudWxsIHx8IGVsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlbC52YWx1ZSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dFRleHQgPSBiYXNlLnNsaWNlKDAsIHN0YXJ0KSArIHBhc3RlZFRleHQgKyBiYXNlLnNsaWNlKGVuZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dChuZXh0VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChuZXh0VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FyZXQgPSBzdGFydCArIHBhc3RlZFRleHQubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YS5zZXRTZWxlY3Rpb25SYW5nZShjYXJldCwgY2FyZXQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChfYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlIGludmFsaWQgcmFuZ2UgaW4gZWRnZSBicm93c2Vyc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiAoX2pzeChXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIHsgYWN0aW9uczogYWN0aW9ucywgcmVmOiB0ZXh0U3BhY2VSZWYsIG9uQWN0aW9uU2VsZWN0OiBvbkFjdGlvblNlbGVjdCwgUmlnaHRDb21wb25lbnQ6IFJpZ2h0Q29tcG9uZW50LCByaWdodEFjdGlvbnNEaXNhYmxlZDogc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uIHx8IGlzR2VuZXJhdGluZywgb25FbW9qaUNsaWNrOiBvbkVtb2ppQWRkaXRpb24sIGFpQWN0aW9uczogYWlIZWFkZXJBY3Rpb25zLCBkaXNhYmxlQWxsQWN0aW9uczogc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uIHx8IGlzR2VuZXJhdGluZywgaW5zdHJ1Y3Rpb25BY3RpdmU6IGlzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIG9uQUlJbnN0cnVjdGlvbnNDbGljazogKCkgPT4gc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSh0cnVlKSwgb25BSVRvbmVDaGFuZ2U6IChhY3Rpb25UeXBlLCB0b25lSWQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRvbmVCeUFjdGlvbigocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW2FjdGlvblR5cGVdOiB0b25lSWQgfSkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQUlUb25lU2VsZWN0ID09PSBudWxsIHx8IG9uQUlUb25lU2VsZWN0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVG9uZVNlbGVjdChhY3Rpb25UeXBlLCB0b25lSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdG9uZUlkLCBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIG9uQUlBY3Rpb25DbGljazogKGFjdGlvblR5cGUsIGFjdGlvblZhcmlhbnQgPSBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNhbWUgYWN0aW9uIHNob3VsZCBub3QgcmV0cmlnZ2VyIGZyb20gY2hpcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnZW5lcmF0ZSBpcyBvbmx5IHZpYSBleHBsaWNpdCByZWdlbmVyYXRlIGNvbnRyb2wuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmV3IGFjdGlvbiBzdGFydHMgYSBmcmVzaCBzdWdnZXN0aW9uIHNlc3Npb24uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFjdGlvblZhcmlhbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFjdGlvblZhcmlhbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IH0pKV0gfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuZXhwb3J0IHsgQUlfVEFHX0NIQU5HRV9SQVRJT19USFJFU0hPTEQsIGNvbXB1dGVBaVRhZ09uQWNjZXB0LCBsZXZlbnNodGVpbkRpc3RhbmNlLCB9IGZyb20gJy4vYWkvYWlUYWcnO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1XaGF0c0FwcFRleHRFZGl0b3IuanMubWFwIl19 */")),Q=a.default("div","production"===process.env.NODE_ENV?{target:"ea7i3sh13"}:{target:"ea7i3sh13",label:"SuggestionCandidateSkeleton"})("production"===process.env.NODE_ENV?{name:"j0onnx",styles:"display:flex;flex-direction:column;gap:8px;width:100%;min-height:40px"}:{name:"j0onnx",styles:"display:flex;flex-direction:column;gap:8px;width:100%;min-height:40px",map:"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBMkUrQyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIEZyYWdtZW50IGFzIF9GcmFnbWVudCwganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZXdpbmRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3Jld2luZC5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzRG93bkljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvdGh1bWJzX2Rvd24uc3ZnJztcclxuaW1wb3J0IFRodW1ic1VwSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfdXAuc3ZnJztcclxuaW1wb3J0IHsgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9CYXNlV2hhdHNhcHBDb250ZW50TGFuZy5oZWxwZXJcIjtcclxuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUsIH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgeyBDT0xPUlMgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzL1RoZW1lXCI7XHJcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICcuLi90b29sdGlwcy9Ub29sdGlwJztcclxuaW1wb3J0IHsgQm9keUNhcHRpb24sIFRpdGxlU21hbGwgfSBmcm9tICcuLi9UeXBvZ3JhcGh5U3R5bGUnO1xyXG5pbXBvcnQgeyBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlMsIERFRkFVTFRfSU5TVFJVQ1RJT05fU1VHR0VTVElPTlMsIHJlc29sdmVBY3Rpb25Qcm9tcHRzLCB9IGZyb20gJy4vYWkvYWN0aW9uUmVnaXN0cnknO1xyXG5pbXBvcnQgeyBjb21wdXRlQWlUYWdPbkFjY2VwdCB9IGZyb20gJy4vYWkvYWlUYWcnO1xyXG5pbXBvcnQgeyBidWlsZEFjdGlvblByb21wdCwgcmVxdWVzdEFJU3VnZ2VzdGlvbiB9IGZyb20gJy4vYWkvYXBpJztcclxuaW1wb3J0IHsgQ29udGFpbmVyLCBFZGl0b3JGb290ZXJSaWdodCwgRWRpdG9yRm9vdGVyUm93LCBFZGl0b3JGb290ZXJUaXRsZSwgT3V0ZXJDb250YWluZXIsIFRleHRTcGFjZSwgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUFjdGlvblZhcmlhbnQsIEFJRWRpdG9yQWN0aW9uVHlwZXMsIEVkaXRvckFjdGlvblR5cGVzLCBXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIH0gZnJvbSAnLi9XaGF0c0FwcFRleHRFZGl0b3JIZWFkZXInO1xyXG5jb25zdCBMSU1JVF9SRUFDSEVEID0gJ0NoYXJhY3RlciBsaW1pdCByZWFjaGVkJztcclxuY29uc3QgUkVQSFJBU0VfSURMRV9NUyA9IDMwMDA7XHJcbmNvbnN0IE1BWF9SRVBIUkFTRV9ISUdITElHSFRTID0gNTtcclxuY29uc3QgTUFYX1NVR0dFU1RJT05TID0gMztcclxuY29uc3QgTEFSR0VfSU5QVVRfVEhSRVNIT0xEID0gMTIwMDtcclxuY29uc3QgVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgPSAnUmVwaHJhc2UgdGhpcyBXaGF0c0FwcCB1dGlsaXR5IHRlbXBsYXRlIHRvIGltcHJvdmUgY2xhcml0eSBhbmQgcmVhZGFiaWxpdHkgd2hpbGUgcHJlc2VydmluZyB2YXJpYWJsZXMsIGludGVudCwgYW5kIGNvbXBsaWFuY2UuJztcclxuY29uc3Qgc2tlbGV0b25QdWxzZSA9IGtleWZyYW1lcyBgXG5cdDAlIHsgb3BhY2l0eTogMC41NTsgfVxuXHQ1MCUgeyBvcGFjaXR5OiAxOyB9XG5cdDEwMCUgeyBvcGFjaXR5OiAwLjU1OyB9XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxNHB4IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogMTBweDtcblx0bWluLWhlaWdodDogMTUwcHg7XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkxpbmUgPSBzdHlsZWQuZGl2IGBcblx0aGVpZ2h0OiAxNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdHdpZHRoOiAkeyhwcm9wcykgPT4gcHJvcHMud2lkdGh9O1xuXHRiYWNrZ3JvdW5kOiAjZWNlY2VmO1xuXHRhbmltYXRpb246ICR7c2tlbGV0b25QdWxzZX0gMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHRtYXgtaGVpZ2h0OiAyNjBweDtcblx0b3ZlcmZsb3cteTogc2Nyb2xsO1xuXHRzY3JvbGxiYXItd2lkdGg6IHRoaW47XG5cdHNjcm9sbGJhci1jb2xvcjogI2M4YzhjZiB0cmFuc3BhcmVudDtcblx0Ojotd2Via2l0LXNjcm9sbGJhciB7XG5cdFx0d2lkdGg6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcblx0XHRiYWNrZ3JvdW5kOiAjYzhjOGNmO1xuXHRcdGJvcmRlci1yYWRpdXM6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcblx0XHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0fVxuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkJhc2VsaW5lVGV4dCA9IHN0eWxlZC5kaXYgYFxuXHR0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25DYW5kaWRhdGVUZXh0ID0gc3R5bGVkLmRpdiBgXG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkNhbmRpZGF0ZVNrZWxldG9uID0gc3R5bGVkLmRpdiBgXG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHR3aWR0aDogMTAwJTtcblx0bWluLWhlaWdodDogNDBweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db250cm9sc1JvdyA9IHN0eWxlZC5kaXYgYFxuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDZweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db3VudGVyID0gc3R5bGVkLnNwYW4gYFxuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkljb25CdXR0b24gPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0cGFkZGluZzogNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdGRpc3BsYXk6IGlubGluZS1mbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0dHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjEycyBlYXNlO1xuXHQ6bm90KDpkaXNhYmxlZCk6aG92ZXIge1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICR7Q09MT1JTLnN1cmZhY2UuaG92ZXJlZH07XG5cdH1cblx0OmRpc2FibGVkIHtcblx0XHRvcGFjaXR5OiAwLjM1O1xuXHRcdGN1cnNvcjogbm90LWFsbG93ZWQ7XG5cdH1cbmA7XHJcbi8qKiBSZWdlbmVyYXRlIHN0YXlzIGZ1bGwgb3BhY2l0eSB3aGlsZSBkaXNhYmxlZCBzbyB0aGUgbG9hZGluZyBzaGltbWVyIHN0YXlzIHZpc2libGUgKHNhbWUgcHVsc2UgYXMgZWRpdG9yIHNrZWxldG9uKS4gKi9cclxuY29uc3QgU3VnZ2VzdGlvblJlZ2VuZXJhdGVCdXR0b24gPSBzdHlsZWQoU3VnZ2VzdGlvbkljb25CdXR0b24pIGBcblx0OmRpc2FibGVkIHtcblx0XHRvcGFjaXR5OiAxO1xuXHRcdGN1cnNvcjogd2FpdDtcblx0fVxuYDtcclxuY29uc3QgUmVnZW5lcmF0ZUljb25TaGltbWVyID0gc3R5bGVkLmRpdiBgXG5cdHdpZHRoOiAxNHB4O1xuXHRoZWlnaHQ6IDE0cHg7XG5cdGJvcmRlci1yYWRpdXM6IDRweDtcblx0YmFja2dyb3VuZDogI2VjZWNlZjtcblx0ZmxleC1zaHJpbms6IDA7XG5cdGFuaW1hdGlvbjogJHtza2VsZXRvblB1bHNlfSAxLjFzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xuYDtcclxuLyoqIFNhbWUgYm90dG9tIHRvb2xiYXIgc2xvdCBhcyBgV2hhdHNBcHBUZXh0RWRpdG9ySGVhZGVyYCDigJQgcmVwbGFjZXMgdGhlIGZ1bGwgaWNvbi9BSSBwYW5lbCB3aGlsZSBvcGVuLiAqL1xyXG5jb25zdCBJbnN0cnVjdGlvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblx0cGFkZGluZzogOHB4IDEycHg7XG5cdGdhcDogMTBweDtcblx0Ym9yZGVyLXJhZGl1czogMCAwIDRweCA0cHg7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXRSb3cgPSBzdHlsZWQuZGl2IGBcblx0Ym9yZGVyOiAxcHggc29saWQgI2Y1YTRjMDtcblx0Ym9yZGVyLXJhZGl1czogMTBweDtcblx0cGFkZGluZzogOHB4IDEwcHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbklucHV0ID0gc3R5bGVkLmlucHV0IGBcblx0ZmxleDogMTtcblx0bWluLXdpZHRoOiAwO1xuXHRib3JkZXI6IDA7XG5cdG91dGxpbmU6IG5vbmU7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25BY3Rpb25zID0gc3R5bGVkLmRpdiBgXG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQ2FuY2VsID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnNlY29uZGFyeX07XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0Zm9udC13ZWlnaHQ6IDUwMDtcblx0cGFkZGluZzogMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbXByb3ZlID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMXB4IHNvbGlkICM1ZDNhNzI7XG5cdGNvbG9yOiAjNWQzYTcyO1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0Ym9yZGVyLXJhZGl1czogOHB4O1xuXHRwYWRkaW5nOiA4cHggMTRweDtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRsaW5lLWhlaWdodDogMS4xO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0ID0gc3R5bGVkLmRpdiBgXG5cdG1hcmdpbi10b3A6IDEwcHg7XG5cdGJvcmRlci1yYWRpdXM6IDEycHg7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3gtc2hhZG93OiAwIDZweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkJ1dHRvbiA9IHN0eWxlZC5idXR0b24gYFxuXHR3aWR0aDogMTAwJTtcblx0Ym9yZGVyOiAwO1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgJHtDT0xPUlMuc3Ryb2tlLnByaW1hcnl9O1xuXHRiYWNrZ3JvdW5kOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyNlNWYzZTgnIDogJ3RyYW5zcGFyZW50Jyl9O1xuXHRjb2xvcjogJHsocHJvcHMpID0+IChwcm9wcy5zZWxlY3RlZCA/ICcjMWU2YjM0JyA6IENPTE9SUy5jb250ZW50LnByaW1hcnkpfTtcblx0dGV4dC1hbGlnbjogbGVmdDtcblx0cGFkZGluZzogMTJweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjI7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0OmZpcnN0LW9mLXR5cGUge1xuXHRcdGJvcmRlci10b3A6IDA7XG5cdH1cbmA7XHJcbmNvbnN0IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nID0gbmV3IEJhc2VXaGF0c2FwcENvbnRlbnRMYW5nSGVscGVyKCk7XHJcbmNvbnN0IFdpbGRDYXJkTWFwID0ge1xyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLkJPTERdOiAnKicsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuSVRBTElDXTogJ18nLFxyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLlNUUklLRVRIUk9VR0hdOiAnficsXHJcbn07XHJcbmZ1bmN0aW9uIGdldEhpZ2hsaWdodFN0b3JhZ2VLZXkoZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgIHJldHVybiBgd2hhdHNhcHAtZWRpdG9yLXJlcGhyYXNlLWhpZ2hsaWdodC0ke2VkaXRvckluc3RhbmNlS2V5IHx8ICdkZWZhdWx0J31gO1xyXG59XHJcbmV4cG9ydCBjb25zdCBXaGF0c0FwcFRleHRFZGl0b3IgPSBSZWFjdC5mb3J3YXJkUmVmKChfYSwgcmVmKSA9PiB7XHJcbiAgICB2YXIgeyBvbkNoYW5nZSwgb25DbGlja1ZhcmlhYmxlLCB0ZXh0OiBpbnB1dFZhbHVlLCBSaWdodENvbXBvbmVudCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yLCByb3dzLCBhY3Rpb25zLCBlZGl0b3JJbnN0YW5jZUtleSwgdGVtcGxhdGVUeXBlID0gJ21hcmtldGluZycsIHRlbXBsYXRlSWQsIHJlcXVlc3RFeGVjdXRvciwgYmFzZVVybCwgZW5kcG9pbnRQYXRoLCB1c2VDYXNlLCBzdG9yZUlkLCBhcGlBZGFwdGVyLCBjb252ZXJzYXRpb25JZCA9ICd3aGF0c2FwcC10ZW1wbGF0ZS1lZGl0b3InLCBzeXN0ZW1JZCA9ICd3aGF0c2FwcC13cml0ZXInLCBpbnRlbnQgPSAnZGVmYXVsdCcsIGVuYWJsZWRBSUFjdGlvbnMgPSBbXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlNIT1JURU4sXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FWFBBTkQsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FTU9KSUZZLFxyXG4gICAgXSwgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMgPSBmYWxzZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCBhaUFjdGlvbk1pbkNoYXJzLCBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgb25BSUV2ZW50LCBvbkFJVGFnQ29tcHV0ZWQsIHByZWZpbGxXYXNBaUdlbmVyYXRlZCA9IGZhbHNlLCBlZGl0b3JIZWFkZXIsIG9uQUlUb25lU2VsZWN0LCBvbkFJQWN0aW9uUmVxdWVzdCwgb25CdWlsZEFJUHJvbXB0IH0gPSBfYSwgdGV4dEFyZWFQcm9wcyA9IF9fcmVzdChfYSwgW1wib25DaGFuZ2VcIiwgXCJvbkNsaWNrVmFyaWFibGVcIiwgXCJ0ZXh0XCIsIFwiUmlnaHRDb21wb25lbnRcIiwgXCJlcnJvclwiLCBcImxpbWl0XCIsIFwib25FcnJvclwiLCBcInJvd3NcIiwgXCJhY3Rpb25zXCIsIFwiZWRpdG9ySW5zdGFuY2VLZXlcIiwgXCJ0ZW1wbGF0ZVR5cGVcIiwgXCJ0ZW1wbGF0ZUlkXCIsIFwicmVxdWVzdEV4ZWN1dG9yXCIsIFwiYmFzZVVybFwiLCBcImVuZHBvaW50UGF0aFwiLCBcInVzZUNhc2VcIiwgXCJzdG9yZUlkXCIsIFwiYXBpQWRhcHRlclwiLCBcImNvbnZlcnNhdGlvbklkXCIsIFwic3lzdGVtSWRcIiwgXCJpbnRlbnRcIiwgXCJlbmFibGVkQUlBY3Rpb25zXCIsIFwiZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnNcIiwgXCJwcm9tcHRPdmVycmlkZXNcIiwgXCJyZXBocmFzZVRvbmVzXCIsIFwiYWlBY3Rpb25NaW5DaGFyc1wiLCBcImluc3RydWN0aW9uU3VnZ2VzdGlvbnNcIiwgXCJvbkFJRXZlbnRcIiwgXCJvbkFJVGFnQ29tcHV0ZWRcIiwgXCJwcmVmaWxsV2FzQWlHZW5lcmF0ZWRcIiwgXCJlZGl0b3JIZWFkZXJcIiwgXCJvbkFJVG9uZVNlbGVjdFwiLCBcIm9uQUlBY3Rpb25SZXF1ZXN0XCIsIFwib25CdWlsZEFJUHJvbXB0XCJdKTtcclxuICAgIGNvbnN0IHRleHRTcGFjZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IFtjdXJyZW50VGV4dCwgc2V0Q3VycmVudFRleHRdID0gdXNlU3RhdGUoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICBjb25zdCBbaXNSZXBocmFzZUhpZ2hsaWdodGVkLCBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW3JlcGhyYXNlSGlnaGxpZ2h0Q291bnQsIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbaXNHZW5lcmF0aW5nLCBzZXRJc0dlbmVyYXRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2lzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGVdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2luc3RydWN0aW9uVGV4dCwgc2V0SW5zdHJ1Y3Rpb25UZXh0XSA9IHVzZVN0YXRlKCcnKTtcclxuICAgIGNvbnN0IFt0b25lQnlBY3Rpb24sIHNldFRvbmVCeUFjdGlvbl0gPSB1c2VTdGF0ZSh7fSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkJhc2VUZXh0LCBzZXRTdWdnZXN0aW9uQmFzZVRleHRdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkNhbmRpZGF0ZXMsIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzXSA9IHVzZVN0YXRlKFtdKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uSW5kZXgsIHNldFN1Z2dlc3Rpb25JbmRleF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGVdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBzdWdnZXN0aW9uU2Nyb2xsUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgcmVwaHJhc2VJZGxlUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgaGlnaGxpZ2h0UmVzZXRSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICAvKipcclxuICAgICAqIFByaW9yIGVsaWdpYmlsaXR5IGZvciByZXBocmFzZSBudWRnZSAobnVsbCA9IG5vdCBpbml0aWFsaXplZCkuXHJcbiAgICAgKiBNYXRjaGVzIHRoZSBjaGlwOiBub24tZW1wdHkgdHJpbSBhbmQgbGVuZ3RoIOKJpSBtaW4g4oCUIHNhbWUgYXMgYGFpSGVhZGVyQWN0aW9uc2AgZGlzYWJsZWQgcnVsZXMuXHJcbiAgICAgKi9cclxuICAgIGNvbnN0IHByZXZSZXBocmFzZUVsaWdpYmxlUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgZGVmZXJyZWRIdG1sUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgbGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIC8qKiBGaXJzdCBhY2NlcHQgYWZ0ZXIgZnVsbC1BSSBwcmVmaWxsIChgcHJlZmlsbFdhc0FpR2VuZXJhdGVkYCk7IGNsZWFyZWQgYWZ0ZXIgb25lIGFjY2VwdC4gKi9cclxuICAgIGNvbnN0IGluaXRpYWxBaVByZWZpbGxQaGFzZVJlZiA9IHVzZVJlZighIXByZWZpbGxXYXNBaUdlbmVyYXRlZCk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGluaXRpYWxBaVByZWZpbGxQaGFzZVJlZi5jdXJyZW50ID0gISFwcmVmaWxsV2FzQWlHZW5lcmF0ZWQ7XHJcbiAgICB9LCBbcHJlZmlsbFdhc0FpR2VuZXJhdGVkLCBlZGl0b3JJbnN0YW5jZUtleV0pO1xyXG4gICAgY29uc3QgYWN0aXZlQWN0aW9uUHJvbXB0cyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiByZXNvbHZlQWN0aW9uUHJvbXB0cyh0ZW1wbGF0ZVR5cGUsIHByb21wdE92ZXJyaWRlcywgcmVwaHJhc2VUb25lcyk7XHJcbiAgICB9LCBbcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCB0ZW1wbGF0ZVR5cGVdKTtcclxuICAgIGNvbnN0IGZpbHRlcmVkSW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGlmICghcXVlcnkpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucy5maWx0ZXIoKHN1Z2dlc3Rpb24pID0+IHN1Z2dlc3Rpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeSkpO1xyXG4gICAgfSwgW2luc3RydWN0aW9uU3VnZ2VzdGlvbnMsIGluc3RydWN0aW9uVGV4dF0pO1xyXG4gICAgY29uc3QgbWluQ2hhcnNCeUFjdGlvbiA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUyksIChhaUFjdGlvbk1pbkNoYXJzIHx8IHt9KSk7XHJcbiAgICB9LCBbYWlBY3Rpb25NaW5DaGFyc10pO1xyXG4gICAgY29uc3QgcmVwaHJhc2VNaW5DaGFycyA9IG1pbkNoYXJzQnlBY3Rpb25bQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV0gfHxcclxuICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV07XHJcbiAgICBjb25zdCBlbWl0QUlFdmVudCA9IHVzZUNhbGxiYWNrKChuYW1lLCBwYXlsb2FkKSA9PiB7XHJcbiAgICAgICAgb25BSUV2ZW50ID09PSBudWxsIHx8IG9uQUlFdmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSUV2ZW50KG5hbWUsIHBheWxvYWQpO1xyXG4gICAgfSwgW29uQUlFdmVudF0pO1xyXG4gICAgY29uc3Qgc2V0RWRpdG9yVGV4dCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIHNldEN1cnJlbnRUZXh0KChwcmV2KSA9PiAocHJldiA9PT0gbmV4dFRleHQgPyBwcmV2IDogbmV4dFRleHQpKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGVtaXRDaGFuZ2VXaXRoR3VhcmQgPSB1c2VDYWxsYmFjaygobmV4dFRleHQpID0+IHtcclxuICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGRlZmVycmVkSHRtbFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5leHRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIG5leHRUZXh0KTtcclxuICAgICAgICAgICAgZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChuZXh0VGV4dCkpO1xyXG4gICAgICAgICAgICB9LCAxNik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICB9LCBbb25DaGFuZ2VdKTtcclxuICAgIGNvbnN0IGNsZWFyU3VnZ2VzdGlvblNlc3Npb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0KG51bGwpO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtdKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUobnVsbCk7XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgPj0gTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXh0Q291bnQgPSByZXBocmFzZUhpZ2hsaWdodENvdW50ICsgMTtcclxuICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KG5leHRDb3VudCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSksIFN0cmluZyhuZXh0Q291bnQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKHRydWUpO1xyXG4gICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgIH0sIDEyMDApO1xyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5LCByZXBocmFzZUhpZ2hsaWdodENvdW50XSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHRSZWYgPSB1c2VSZWYodHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0KTtcclxuICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50ID0gdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0O1xyXG4gICAgZnVuY3Rpb24gaGFuZGxlT25DaGFuZ2UoZSkge1xyXG4gICAgICAgIGNvbnN0IHRleHQgPSBlLnRhcmdldC52YWx1ZTtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBzZXRDYXJldFBvc2l0aW9uKGNhcmV0UG9zKSB7XHJcbiAgICAgICAgY29uc3QgZWxlbSA9IHRleHRTcGFjZVJlZiA9PT0gbnVsbCB8fCB0ZXh0U3BhY2VSZWYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRleHRTcGFjZVJlZi5jdXJyZW50O1xyXG4gICAgICAgIGlmIChlbGVtICE9IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKGVsZW0uc2VsZWN0aW9uU3RhcnQpIHtcclxuICAgICAgICAgICAgICAgIGVsZW0uZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIGVsZW0uc2VsZWN0aW9uRW5kID0gY2FyZXRQb3M7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgZWxlbS5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIG9uQWN0aW9uU2VsZWN0KGFjdGlvblR5cGUpIHtcclxuICAgICAgICBjb25zdCB3aWxkQ2FyZCA9IFdpbGRDYXJkTWFwW2FjdGlvblR5cGVdO1xyXG4gICAgICAgIGlmICh3aWxkQ2FyZCAmJiB0ZXh0U3BhY2VSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHRleHQgfSA9IGluc2VydFRleHRBdEluZGV4KHdpbGRDYXJkLCBzdGFydCk7XHJcbiAgICAgICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uKHN0YXJ0ICsgMSk7XHJcbiAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBhZGRUZXh0T3JXcmFwKHdpbGRDYXJkKTtcclxuICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBvbkVtb2ppQWRkaXRpb24oZW1vamkpIHtcclxuICAgICAgICBjb25zdCB7IHRleHQgfSA9IGFkZFRleHQoZW1vamkpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhZGRUZXh0T3JXcmFwKHRleHRUb0FkZCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgbGV0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICBpZiAodGV4dFNwYWNlUmVmLmN1cnJlbnQgJiYgdGV4dFRvQWRkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgY29uc3Qgd2lsZENhcmQgPSB0ZXh0VG9BZGQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICAvKiogbm90aGluZyBpcyBzZWxlY3RlZCAqL1xyXG4gICAgICAgICAgICAgICAgLyoqIHNvIGFwcGVuZCB0aGUgd2lsZGNhcmQgYXQgdGhlIGVuZCAqL1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFkZFRleHQod2lsZENhcmQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGV4dCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLndyYXBwV2lsZGNhcmQoc3RhcnQsIGVuZCwgd2lsZENhcmQsIHRleHQpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaHRtbCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwodGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdGV4dCwgaHRtbCB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IHRleHQ6IHRleHQsIGh0bWw6IHRleHQgfTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZFRleHQodGV4dFRvQWRkKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgaWYgKHRleHRTcGFjZVJlZi5jdXJyZW50ICYmIHRleHRUb0FkZCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zZXJ0VGV4dEF0SW5kZXgodGV4dFRvQWRkLCBzdGFydCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dDogdGV4dCwgaHRtbDogdGV4dCB9O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gaW5zZXJ0VGV4dEF0SW5kZXgodGV4dFRvQWRkLCBpbmRleCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgbGV0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICB0ZXh0ID0gdGV4dC5zbGljZSgwLCBpbmRleCkgKyB0ZXh0VG9BZGQgKyB0ZXh0LnNsaWNlKGluZGV4KTtcclxuICAgICAgICBjb25zdCBodG1sID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTCh0ZXh0KTtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgIHJldHVybiB7IHRleHQsIGh0bWwgfTtcclxuICAgIH1cclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8ICFlZGl0b3JJbnN0YW5jZUtleSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNhY2hlZCA9IE51bWJlcihzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGdldEhpZ2hsaWdodFN0b3JhZ2VLZXkoZWRpdG9ySW5zdGFuY2VLZXkpKSB8fFxyXG4gICAgICAgICAgICAnMCcpO1xyXG4gICAgICAgIGlmICghTnVtYmVyLmlzTmFOKGNhY2hlZCkpIHtcclxuICAgICAgICAgICAgc2V0UmVwaHJhc2VIaWdobGlnaHRDb3VudChjYWNoZWQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtlZGl0b3JJbnN0YW5jZUtleV0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBjb25zdCBlbGlnaWJsZSA9ICEhY3VycmVudFRleHQudHJpbSgpICYmIGN1cnJlbnRUZXh0Lmxlbmd0aCA+PSByZXBocmFzZU1pbkNoYXJzO1xyXG4gICAgICAgIGlmIChwcmV2UmVwaHJhc2VFbGlnaWJsZVJlZi5jdXJyZW50ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHByZXZSZXBocmFzZUVsaWdpYmxlUmVmLmN1cnJlbnQgPSBlbGlnaWJsZTtcclxuICAgICAgICAgICAgaWYgKGVsaWdpYmxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50KCk7XHJcbiAgICAgICAgICAgICAgICB9LCBSRVBIUkFTRV9JRExFX01TKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZWxpZ2libGUpIHtcclxuICAgICAgICAgICAgcHJldlJlcGhyYXNlRWxpZ2libGVSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjcm9zc2VkVGhyZXNob2xkID0gIXByZXZSZXBocmFzZUVsaWdpYmxlUmVmLmN1cnJlbnQgJiYgZWxpZ2libGU7XHJcbiAgICAgICAgcHJldlJlcGhyYXNlRWxpZ2libGVSZWYuY3VycmVudCA9IHRydWU7XHJcbiAgICAgICAgaWYgKGNyb3NzZWRUaHJlc2hvbGQpIHtcclxuICAgICAgICAgICAgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0UmVmLmN1cnJlbnQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50KCk7XHJcbiAgICAgICAgfSwgUkVQSFJBU0VfSURMRV9NUyk7XHJcbiAgICB9LCBbY3VycmVudFRleHQsIHJlcGhyYXNlTWluQ2hhcnNdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGFjdGl2ZUNhbmRpZGF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzW3N1Z2dlc3Rpb25JbmRleF0gfHwgJyc7XHJcbiAgICBjb25zdCBzdWdnZXN0aW9uQmFzZUh0bWwgPSB1c2VNZW1vKCgpID0+IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwoc3VnZ2VzdGlvbkJhc2VUZXh0IHx8ICcnKSwgW3N1Z2dlc3Rpb25CYXNlVGV4dF0pO1xyXG4gICAgY29uc3QgYWN0aXZlQ2FuZGlkYXRlSHRtbCA9IHVzZU1lbW8oKCkgPT4gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChhY3RpdmVDYW5kaWRhdGUpLCBbYWN0aXZlQ2FuZGlkYXRlXSk7XHJcbiAgICBjb25zdCBjYW5SZWdlbmVyYXRlID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDwgTUFYX1NVR0dFU1RJT05TO1xyXG4gICAgY29uc3Qgc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID0gISFzdWdnZXN0aW9uQmFzZVRleHQgJiYgc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoID4gMDtcclxuICAgIGNvbnN0IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8IHN1Z2dlc3Rpb25JbmRleCA8PSAwO1xyXG4gICAgY29uc3QgaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDw9IDEgfHxcclxuICAgICAgICBzdWdnZXN0aW9uSW5kZXggPj0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBub2RlID0gc3VnZ2VzdGlvblNjcm9sbFJlZi5jdXJyZW50O1xyXG4gICAgICAgIGlmICghbm9kZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIG5vZGUuc2Nyb2xsVG9wID0gbm9kZS5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9LCBbYWN0aXZlQ2FuZGlkYXRlLCBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24sIGlzR2VuZXJhdGluZ10pO1xyXG4gICAgY29uc3QgZXhlY3V0ZUFJQWN0aW9uID0gdXNlQ2FsbGJhY2soKGFjdGlvblR5cGUsIHJlZ2VuZXJhdGVFeGlzdGluZyA9IGZhbHNlLCBpbnN0cnVjdGlvbk92ZXJyaWRlLCB0b25lT3ZlcnJpZGVJZCwgYWN0aW9uVmFyaWFudCA9IEFJQWN0aW9uVmFyaWFudC5ERUZBVUxUKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICB2YXIgX2IsIF9jLCBfZDtcclxuICAgICAgICBpZiAoIW9uQUlBY3Rpb25SZXF1ZXN0ICYmXHJcbiAgICAgICAgICAgICFhcGlBZGFwdGVyICYmXHJcbiAgICAgICAgICAgICghcmVxdWVzdEV4ZWN1dG9yIHx8ICFiYXNlVXJsKSkge1xyXG4gICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoJ0FJIGNvbmZpZ3VyYXRpb24gbWlzc2luZycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY3VycmVudFRleHQudHJpbSgpKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbWluQ2hhcnNGb3JBY3Rpb24gPSBtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICA1MDtcclxuICAgICAgICBpZiAoY3VycmVudFRleHQubGVuZ3RoIDwgbWluQ2hhcnNGb3JBY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpZiAoaXNHZW5lcmF0aW5nKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKHJlZ2VuZXJhdGVFeGlzdGluZyAmJiAhY2FuUmVnZW5lcmF0ZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGJhc2VDb25maWcgPSBhY3RpdmVBY3Rpb25Qcm9tcHRzW2FjdGlvblR5cGVdO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UgJiZcclxuICAgICAgICAgICAgdGVtcGxhdGVUeXBlID09PSAndXRpbGl0eScgJiZcclxuICAgICAgICAgICAgYWN0aW9uVmFyaWFudCA9PT0gQUlBY3Rpb25WYXJpYW50LlJFUEhSQVNFXHJcbiAgICAgICAgICAgID8gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBiYXNlQ29uZmlnKSwgeyBsYWJlbDogJ1JlcGhyYXNlJywgYmFzZVByb21wdDogVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgfSkgOiBiYXNlQ29uZmlnO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVG9uZUlkID0gdG9uZU92ZXJyaWRlSWQgfHxcclxuICAgICAgICAgICAgdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIGNvbmZpZy5kZWZhdWx0VG9uZUlkIHx8XHJcbiAgICAgICAgICAgICgoX2MgPSAoX2IgPSBjb25maWcudG9uZXMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYlswXSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmlkKTtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFRvbmUgPSAoX2QgPSBjb25maWcudG9uZXMpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5maW5kKCh0b25lKSA9PiB0b25lLmlkID09PSBzZWxlY3RlZFRvbmVJZCk7XHJcbiAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgPSBpbnN0cnVjdGlvbk92ZXJyaWRlICE9PSB1bmRlZmluZWRcclxuICAgICAgICAgICAgPyBpbnN0cnVjdGlvbk92ZXJyaWRlXHJcbiAgICAgICAgICAgIDogaW5zdHJ1Y3Rpb25UZXh0O1xyXG4gICAgICAgIGNvbnN0IHByb21wdCA9IChvbkJ1aWxkQUlQcm9tcHQgPT09IG51bGwgfHwgb25CdWlsZEFJUHJvbXB0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkJ1aWxkQUlQcm9tcHQoe1xyXG4gICAgICAgICAgICBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICBhY3Rpb25WYXJpYW50LFxyXG4gICAgICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICBjb25maWcsXHJcbiAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgIHRvbmVMYWJlbDogc2VsZWN0ZWRUb25lID09PSBudWxsIHx8IHNlbGVjdGVkVG9uZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZWN0ZWRUb25lLmxhYmVsLFxyXG4gICAgICAgICAgICBpbnN0cnVjdGlvblRleHQ6IGluc3RydWN0aW9uRm9yUHJvbXB0IHx8IHVuZGVmaW5lZCxcclxuICAgICAgICB9KSkgfHxcclxuICAgICAgICAgICAgYnVpbGRBY3Rpb25Qcm9tcHQoe1xyXG4gICAgICAgICAgICAgICAgY29uZmlnLFxyXG4gICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZCxcclxuICAgICAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIHNldElzR2VuZXJhdGluZyh0cnVlKTtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfYWN0aW9uX3RyaWdnZXJlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG9uQUlBY3Rpb25SZXF1ZXN0XHJcbiAgICAgICAgICAgICAgICA/IHlpZWxkIG9uQUlBY3Rpb25SZXF1ZXN0KHtcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblZhcmlhbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIDogeWllbGQgcmVxdWVzdEFJU3VnZ2VzdGlvbih7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgYmFzZVVybCxcclxuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgICAgIGludGVudCxcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICAgICAgICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZydcclxuICAgICAgICAgICAgICAgID8gcmVzdWx0LnRyaW0oKVxyXG4gICAgICAgICAgICAgICAgOiAoKHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3VsdC5ib2R5KSB8fCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKCFyZWdlbmVyYXRlRXhpc3RpbmcpIHtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25CYXNlVGV4dChjdXJyZW50VGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShhY3Rpb25UeXBlKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtjYW5kaWRhdGVdKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcygocHJldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IFsuLi5wcmV2LCBjYW5kaWRhdGVdLnNsaWNlKDAsIE1BWF9TVUdHRVNUSU9OUyk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgobmV4dC5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdGYWlsZWQgdG8gZ2VuZXJhdGUgQUkgc3VnZ2VzdGlvbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgc2V0SXNHZW5lcmF0aW5nKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9KSwgW1xyXG4gICAgICAgIHJlcXVlc3RFeGVjdXRvcixcclxuICAgICAgICBiYXNlVXJsLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBjYW5SZWdlbmVyYXRlLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGluc3RydWN0aW9uVGV4dCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIGVuZHBvaW50UGF0aCxcclxuICAgICAgICBhcGlBZGFwdGVyLFxyXG4gICAgICAgIGludGVudCxcclxuICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgIG9uRXJyb3IsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgICAgICBvbkFJQWN0aW9uUmVxdWVzdCxcclxuICAgICAgICBvbkJ1aWxkQUlQcm9tcHQsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFhY3RpdmVDYW5kaWRhdGUgfHwgIXN1Z2dlc3Rpb25CYXNlVGV4dCB8fCAhc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2FjY2VwdGVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGluSW5pdGlhbEFpUGhhc2UgPSBpbml0aWFsQWlQcmVmaWxsUGhhc2VSZWYuY3VycmVudDtcclxuICAgICAgICBjb25zdCB0YWdQYXlsb2FkID0gY29tcHV0ZUFpVGFnT25BY2NlcHQoe1xyXG4gICAgICAgICAgICBiYXNlbGluZVRleHQ6IHN1Z2dlc3Rpb25CYXNlVGV4dCxcclxuICAgICAgICAgICAgYWNjZXB0ZWRUZXh0OiBhY3RpdmVDYW5kaWRhdGUsXHJcbiAgICAgICAgICAgIGluaXRpYWxBaVByZWZpbGxQaGFzZTogaW5Jbml0aWFsQWlQaGFzZSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoaW5Jbml0aWFsQWlQaGFzZSkge1xyXG4gICAgICAgICAgICBpbml0aWFsQWlQcmVmaWxsUGhhc2VSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvbkFJVGFnQ29tcHV0ZWQgPT09IG51bGwgfHwgb25BSVRhZ0NvbXB1dGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVGFnQ29tcHV0ZWQodGFnUGF5bG9hZCk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGFjdGl2ZUNhbmRpZGF0ZSxcclxuICAgICAgICBzdWdnZXN0aW9uQmFzZVRleHQsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCxcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkLFxyXG4gICAgICAgIGVtaXRBSUV2ZW50LFxyXG4gICAgICAgIHRlbXBsYXRlSWQsXHJcbiAgICAgICAgb25BSVRhZ0NvbXB1dGVkLFxyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2Rpc2NhcmRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uKCk7XHJcbiAgICB9LCBbY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiwgZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKChyYXRpbmcpID0+IHtcclxuICAgICAgICBpZiAoIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2ZlZWRiYWNrX3N1Ym1pdHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICAgICAgcmF0aW5nLFxyXG4gICAgICAgICAgICBjYW5kaWRhdGVfaW5kZXg6IHN1Z2dlc3Rpb25JbmRleCArIDEsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LCBbZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzdWdnZXN0aW9uSW5kZXgsIHRlbXBsYXRlSWRdKTtcclxuICAgIGNvbnN0IGFpSGVhZGVyQWN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucylcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBlbmFibGVkQUlBY3Rpb25zLm1hcCgoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICAgICAgY29uc3QgYWN0aW9uQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICAgICAgY29uc3QgdG9uZUlkID0gdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICBhY3Rpb25Db25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAgICAgKChfYiA9IChfYSA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzBdKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWQpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBhY3Rpb25Db25maWcubGFiZWwsXHJcbiAgICAgICAgICAgICAgICBpc1ByaW1hcnk6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBpc0dlbmVyYXRpbmcgJiYgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHRlZDogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVwaHJhc2VIaWdobGlnaHRlZCxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhY3VycmVudFRleHQudHJpbSgpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQubGVuZ3RoIDxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG1pbkNoYXJzQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNTApIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgaXNHZW5lcmF0aW5nIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSksXHJcbiAgICAgICAgICAgICAgICBzaG93VG9uZURyb3Bkb3duOiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgICAgICAgICAgISEoKF9jID0gYWN0aW9uQ29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSxcclxuICAgICAgICAgICAgICAgIHRvbmVzOiBhY3Rpb25Db25maWcudG9uZXMsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZDogdG9uZUlkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGVuYWJsZWRBSUFjdGlvbnMsXHJcbiAgICAgICAgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMsXHJcbiAgICAgICAgYWN0aXZlQWN0aW9uUHJvbXB0cyxcclxuICAgICAgICB0b25lQnlBY3Rpb24sXHJcbiAgICAgICAgaXNHZW5lcmF0aW5nLFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbixcclxuICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgIF0pO1xyXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBhZGRUZXh0T3JXcmFwLFxyXG4gICAgICAgICAgICBhZGRUZXh0LFxyXG4gICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24sXHJcbiAgICAgICAgfTtcclxuICAgIH0sIFthZGRUZXh0T3JXcmFwLCBhZGRUZXh0LCBjdXJyZW50VGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoaW5wdXRWYWx1ZSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChpbnB1dFZhbHVlIHx8ICcnKTtcclxuICAgIH0sIFtpbnB1dFZhbHVlLCBzZXRFZGl0b3JUZXh0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICghbGltaXQgfHwgIW9uRXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBuZXh0RXJyb3IgPSBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdCA/IExJTUlUX1JFQUNIRUQgOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiAnJztcclxuICAgICAgICBpZiAobGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID09PSBuZXh0RXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBsYXN0RW1pdHRlZEVkaXRvckVycm9yUmVmLmN1cnJlbnQgPSBuZXh0RXJyb3I7XHJcbiAgICAgICAgb25FcnJvcihuZXh0RXJyb3IpO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCBlcnJvciwgbGltaXQsIG9uRXJyb3JdKTtcclxuICAgIHJldHVybiAoX2pzeHMoT3V0ZXJDb250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4cyhFZGl0b3JGb290ZXJSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvckZvb3RlclRpdGxlLCB7IGNoaWxkcmVuOiBlZGl0b3JIZWFkZXIgPyAoX2pzeChUaXRsZVNtYWxsLCBPYmplY3QuYXNzaWduKHsgXCJkYXRhLXRlc3RcIjogXCJib2R5LXRleHQtZm9yLWVkaXQtdGVtcGxhdGVcIiB9LCB7IGNoaWxkcmVuOiBlZGl0b3JIZWFkZXIgfSkpKSA6IG51bGwgfSksIF9qc3hzKEVkaXRvckZvb3RlclJpZ2h0LCB7IGNoaWxkcmVuOiBbZXJyb3IgJiYgZXJyb3IgIT09IExJTUlUX1JFQUNIRUQgPyAoX2pzeHMoX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBbX2pzeChJbmZvSWNvbiwgeyB3aWR0aDogMTYsIGhlaWdodDogMTYsIGNvbG9yOiBDT0xPUlMuY29udGVudC5uZWdhdGl2ZSB9KSwgX2pzeChCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IGNvbG9yOiBDT0xPUlMuY29udGVudC5uZWdhdGl2ZSB9LCB7IGNoaWxkcmVuOiBlcnJvciB9KSldIH0pKSA6IG51bGwsIGxpbWl0ID8gKF9qc3hzKEJvZHlDYXB0aW9uLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IGVycm9yID09PSBMSU1JVF9SRUFDSEVEIHx8IGN1cnJlbnRUZXh0Lmxlbmd0aCA+IGxpbWl0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IENPTE9SUy5jb250ZW50Lm5lZ2F0aXZlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IFtjdXJyZW50VGV4dC5sZW5ndGgsIFwiL1wiLCBsaW1pdF0gfSkpKSA6IG51bGxdIH0pXSB9KSwgX2pzeHMoQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgaXNFcnJvcjogISFlcnJvciB9LCB7IGNoaWxkcmVuOiBbc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID8gKF9qc3hzKFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgcmVmOiBzdWdnZXN0aW9uU2Nyb2xsUmVmIH0sIHsgY2hpbGRyZW46IFtfanN4KFN1Z2dlc3Rpb25CYXNlbGluZVRleHQsIHsgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHsgX19odG1sOiBzdWdnZXN0aW9uQmFzZUh0bWwgfSB9KSwgaXNHZW5lcmF0aW5nID8gKF9qc3goU3VnZ2VzdGlvbkNhbmRpZGF0ZVRleHQsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtYnVzeVwiOiBcInRydWVcIiB9LCB7IGNoaWxkcmVuOiBfanN4cyhTdWdnZXN0aW9uQ2FuZGlkYXRlU2tlbGV0b24sIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiODQlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjY4JVwiIH0pXSB9KSB9KSkpIDogKF9qc3goU3VnZ2VzdGlvbkNhbmRpZGF0ZVRleHQsIHsgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19odG1sOiBhY3RpdmVDYW5kaWRhdGVIdG1sLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSkpLCBfanN4cyhTdWdnZXN0aW9uQ29udHJvbHNSb3csIHsgY2hpbGRyZW46IFtfanN4cyhTdWdnZXN0aW9uQ291bnRlciwgeyBjaGlsZHJlbjogW3N1Z2dlc3Rpb25JbmRleCArIDEsIFwiL1wiLCBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGhdIH0pLCBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUHJldmlvdXMgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBkaXNhYmxlZDogaXNQcmV2U3VnZ2VzdGlvbkRpc2FibGVkLCBvbkNsaWNrOiAoKSA9PiBzZXRTdWdnZXN0aW9uSW5kZXgoKGlkeCkgPT4gTWF0aC5tYXgoMCwgaWR4IC0gMSkpIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hldnJvbkxlZnRJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSksIF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiTGlrZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUZlZWRiYWNrKCdsaWtlJykgfSwgeyBjaGlsZHJlbjogX2pzeChUaHVtYnNVcEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzbGlrZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkRpc2xpa2Ugc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiBoYW5kbGVGZWVkYmFjaygnZGlzbGlrZScpIH0sIHsgY2hpbGRyZW46IF9qc3goVGh1bWJzRG93bkljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIGNhblJlZ2VuZXJhdGUgPyAoX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogaXNHZW5lcmF0aW5nID8gJ1JlZ2VuZXJhdGluZ+KApicgOiAnUmVnZW5lcmF0ZScsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25SZWdlbmVyYXRlQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIFwiYXJpYS1idXN5XCI6IGlzR2VuZXJhdGluZywgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzR2VuZXJhdGluZywgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3VnZ2VzdGlvbkFjdGlvblR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IGlzR2VuZXJhdGluZyA/IChfanN4KFJlZ2VuZXJhdGVJY29uU2hpbW1lciwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUgfSkpIDogKF9qc3goUmV3aW5kSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkpIH0pKSB9KSkpIDogbnVsbCwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNjYXJkXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiQWNjZXB0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogaGFuZGxlQWNjZXB0U3VnZ2VzdGlvbiB9LCB7IGNoaWxkcmVuOiBfanN4KENoZWNrSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKV0gfSldIH0pKSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFzdGVkVGV4dCA9IGUuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFzdGVkVGV4dC5sZW5ndGggPiBMQVJHRV9JTlBVVF9USFJFU0hPTEQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWwgPSB0ZXh0U3BhY2VSZWYuY3VycmVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IChfYSA9IGVsID09PSBudWxsIHx8IGVsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlbC5zZWxlY3Rpb25TdGFydCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSAoX2IgPSBlbCA9PT0gbnVsbCB8fCBlbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogZWwuc2VsZWN0aW9uRW5kKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcmVmZXIgbGl2ZSBET00gdmFsdWUg4oCUIGBjdXJyZW50VGV4dGAgY2FuIGxhZyB0aGUgdGV4dGFyZWEgZm9yIGJpZyBwYXN0ZXMuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFzZSA9IChfYyA9IGVsID09PSBudWxsIHx8IGVsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlbC52YWx1ZSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dFRleHQgPSBiYXNlLnNsaWNlKDAsIHN0YXJ0KSArIHBhc3RlZFRleHQgKyBiYXNlLnNsaWNlKGVuZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dChuZXh0VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChuZXh0VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FyZXQgPSBzdGFydCArIHBhc3RlZFRleHQubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YS5zZXRTZWxlY3Rpb25SYW5nZShjYXJldCwgY2FyZXQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChfYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlIGludmFsaWQgcmFuZ2UgaW4gZWRnZSBicm93c2Vyc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiAoX2pzeChXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIHsgYWN0aW9uczogYWN0aW9ucywgcmVmOiB0ZXh0U3BhY2VSZWYsIG9uQWN0aW9uU2VsZWN0OiBvbkFjdGlvblNlbGVjdCwgUmlnaHRDb21wb25lbnQ6IFJpZ2h0Q29tcG9uZW50LCByaWdodEFjdGlvbnNEaXNhYmxlZDogc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uIHx8IGlzR2VuZXJhdGluZywgb25FbW9qaUNsaWNrOiBvbkVtb2ppQWRkaXRpb24sIGFpQWN0aW9uczogYWlIZWFkZXJBY3Rpb25zLCBkaXNhYmxlQWxsQWN0aW9uczogc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uIHx8IGlzR2VuZXJhdGluZywgaW5zdHJ1Y3Rpb25BY3RpdmU6IGlzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIG9uQUlJbnN0cnVjdGlvbnNDbGljazogKCkgPT4gc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSh0cnVlKSwgb25BSVRvbmVDaGFuZ2U6IChhY3Rpb25UeXBlLCB0b25lSWQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRvbmVCeUFjdGlvbigocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW2FjdGlvblR5cGVdOiB0b25lSWQgfSkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQUlUb25lU2VsZWN0ID09PSBudWxsIHx8IG9uQUlUb25lU2VsZWN0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVG9uZVNlbGVjdChhY3Rpb25UeXBlLCB0b25lSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdG9uZUlkLCBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIG9uQUlBY3Rpb25DbGljazogKGFjdGlvblR5cGUsIGFjdGlvblZhcmlhbnQgPSBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNhbWUgYWN0aW9uIHNob3VsZCBub3QgcmV0cmlnZ2VyIGZyb20gY2hpcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnZW5lcmF0ZSBpcyBvbmx5IHZpYSBleHBsaWNpdCByZWdlbmVyYXRlIGNvbnRyb2wuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmV3IGFjdGlvbiBzdGFydHMgYSBmcmVzaCBzdWdnZXN0aW9uIHNlc3Npb24uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFjdGlvblZhcmlhbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFjdGlvblZhcmlhbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IH0pKV0gfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuZXhwb3J0IHsgQUlfVEFHX0NIQU5HRV9SQVRJT19USFJFU0hPTEQsIGNvbXB1dGVBaVRhZ09uQWNjZXB0LCBsZXZlbnNodGVpbkRpc3RhbmNlLCB9IGZyb20gJy4vYWkvYWlUYWcnO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1XaGF0c0FwcFRleHRFZGl0b3IuanMubWFwIl19 */",toString:h}),v=a.default("div","production"===process.env.NODE_ENV?{target:"ea7i3sh12"}:{target:"ea7i3sh12",label:"SuggestionControlsRow"})("production"===process.env.NODE_ENV?{name:"1pi78hi",styles:"display:flex;align-items:center;gap:6px"}:{name:"1pi78hi",styles:"display:flex;align-items:center;gap:6px",map:"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBa0Z5QyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIEZyYWdtZW50IGFzIF9GcmFnbWVudCwganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZXdpbmRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3Jld2luZC5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzRG93bkljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvdGh1bWJzX2Rvd24uc3ZnJztcclxuaW1wb3J0IFRodW1ic1VwSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfdXAuc3ZnJztcclxuaW1wb3J0IHsgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9CYXNlV2hhdHNhcHBDb250ZW50TGFuZy5oZWxwZXJcIjtcclxuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUsIH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgeyBDT0xPUlMgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzL1RoZW1lXCI7XHJcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICcuLi90b29sdGlwcy9Ub29sdGlwJztcclxuaW1wb3J0IHsgQm9keUNhcHRpb24sIFRpdGxlU21hbGwgfSBmcm9tICcuLi9UeXBvZ3JhcGh5U3R5bGUnO1xyXG5pbXBvcnQgeyBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlMsIERFRkFVTFRfSU5TVFJVQ1RJT05fU1VHR0VTVElPTlMsIHJlc29sdmVBY3Rpb25Qcm9tcHRzLCB9IGZyb20gJy4vYWkvYWN0aW9uUmVnaXN0cnknO1xyXG5pbXBvcnQgeyBjb21wdXRlQWlUYWdPbkFjY2VwdCB9IGZyb20gJy4vYWkvYWlUYWcnO1xyXG5pbXBvcnQgeyBidWlsZEFjdGlvblByb21wdCwgcmVxdWVzdEFJU3VnZ2VzdGlvbiB9IGZyb20gJy4vYWkvYXBpJztcclxuaW1wb3J0IHsgQ29udGFpbmVyLCBFZGl0b3JGb290ZXJSaWdodCwgRWRpdG9yRm9vdGVyUm93LCBFZGl0b3JGb290ZXJUaXRsZSwgT3V0ZXJDb250YWluZXIsIFRleHRTcGFjZSwgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUFjdGlvblZhcmlhbnQsIEFJRWRpdG9yQWN0aW9uVHlwZXMsIEVkaXRvckFjdGlvblR5cGVzLCBXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIH0gZnJvbSAnLi9XaGF0c0FwcFRleHRFZGl0b3JIZWFkZXInO1xyXG5jb25zdCBMSU1JVF9SRUFDSEVEID0gJ0NoYXJhY3RlciBsaW1pdCByZWFjaGVkJztcclxuY29uc3QgUkVQSFJBU0VfSURMRV9NUyA9IDMwMDA7XHJcbmNvbnN0IE1BWF9SRVBIUkFTRV9ISUdITElHSFRTID0gNTtcclxuY29uc3QgTUFYX1NVR0dFU1RJT05TID0gMztcclxuY29uc3QgTEFSR0VfSU5QVVRfVEhSRVNIT0xEID0gMTIwMDtcclxuY29uc3QgVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgPSAnUmVwaHJhc2UgdGhpcyBXaGF0c0FwcCB1dGlsaXR5IHRlbXBsYXRlIHRvIGltcHJvdmUgY2xhcml0eSBhbmQgcmVhZGFiaWxpdHkgd2hpbGUgcHJlc2VydmluZyB2YXJpYWJsZXMsIGludGVudCwgYW5kIGNvbXBsaWFuY2UuJztcclxuY29uc3Qgc2tlbGV0b25QdWxzZSA9IGtleWZyYW1lcyBgXG5cdDAlIHsgb3BhY2l0eTogMC41NTsgfVxuXHQ1MCUgeyBvcGFjaXR5OiAxOyB9XG5cdDEwMCUgeyBvcGFjaXR5OiAwLjU1OyB9XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxNHB4IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogMTBweDtcblx0bWluLWhlaWdodDogMTUwcHg7XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkxpbmUgPSBzdHlsZWQuZGl2IGBcblx0aGVpZ2h0OiAxNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdHdpZHRoOiAkeyhwcm9wcykgPT4gcHJvcHMud2lkdGh9O1xuXHRiYWNrZ3JvdW5kOiAjZWNlY2VmO1xuXHRhbmltYXRpb246ICR7c2tlbGV0b25QdWxzZX0gMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHRtYXgtaGVpZ2h0OiAyNjBweDtcblx0b3ZlcmZsb3cteTogc2Nyb2xsO1xuXHRzY3JvbGxiYXItd2lkdGg6IHRoaW47XG5cdHNjcm9sbGJhci1jb2xvcjogI2M4YzhjZiB0cmFuc3BhcmVudDtcblx0Ojotd2Via2l0LXNjcm9sbGJhciB7XG5cdFx0d2lkdGg6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcblx0XHRiYWNrZ3JvdW5kOiAjYzhjOGNmO1xuXHRcdGJvcmRlci1yYWRpdXM6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcblx0XHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0fVxuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkJhc2VsaW5lVGV4dCA9IHN0eWxlZC5kaXYgYFxuXHR0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25DYW5kaWRhdGVUZXh0ID0gc3R5bGVkLmRpdiBgXG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkNhbmRpZGF0ZVNrZWxldG9uID0gc3R5bGVkLmRpdiBgXG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHR3aWR0aDogMTAwJTtcblx0bWluLWhlaWdodDogNDBweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db250cm9sc1JvdyA9IHN0eWxlZC5kaXYgYFxuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDZweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db3VudGVyID0gc3R5bGVkLnNwYW4gYFxuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkljb25CdXR0b24gPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0cGFkZGluZzogNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdGRpc3BsYXk6IGlubGluZS1mbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0dHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjEycyBlYXNlO1xuXHQ6bm90KDpkaXNhYmxlZCk6aG92ZXIge1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICR7Q09MT1JTLnN1cmZhY2UuaG92ZXJlZH07XG5cdH1cblx0OmRpc2FibGVkIHtcblx0XHRvcGFjaXR5OiAwLjM1O1xuXHRcdGN1cnNvcjogbm90LWFsbG93ZWQ7XG5cdH1cbmA7XHJcbi8qKiBSZWdlbmVyYXRlIHN0YXlzIGZ1bGwgb3BhY2l0eSB3aGlsZSBkaXNhYmxlZCBzbyB0aGUgbG9hZGluZyBzaGltbWVyIHN0YXlzIHZpc2libGUgKHNhbWUgcHVsc2UgYXMgZWRpdG9yIHNrZWxldG9uKS4gKi9cclxuY29uc3QgU3VnZ2VzdGlvblJlZ2VuZXJhdGVCdXR0b24gPSBzdHlsZWQoU3VnZ2VzdGlvbkljb25CdXR0b24pIGBcblx0OmRpc2FibGVkIHtcblx0XHRvcGFjaXR5OiAxO1xuXHRcdGN1cnNvcjogd2FpdDtcblx0fVxuYDtcclxuY29uc3QgUmVnZW5lcmF0ZUljb25TaGltbWVyID0gc3R5bGVkLmRpdiBgXG5cdHdpZHRoOiAxNHB4O1xuXHRoZWlnaHQ6IDE0cHg7XG5cdGJvcmRlci1yYWRpdXM6IDRweDtcblx0YmFja2dyb3VuZDogI2VjZWNlZjtcblx0ZmxleC1zaHJpbms6IDA7XG5cdGFuaW1hdGlvbjogJHtza2VsZXRvblB1bHNlfSAxLjFzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xuYDtcclxuLyoqIFNhbWUgYm90dG9tIHRvb2xiYXIgc2xvdCBhcyBgV2hhdHNBcHBUZXh0RWRpdG9ySGVhZGVyYCDigJQgcmVwbGFjZXMgdGhlIGZ1bGwgaWNvbi9BSSBwYW5lbCB3aGlsZSBvcGVuLiAqL1xyXG5jb25zdCBJbnN0cnVjdGlvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblx0cGFkZGluZzogOHB4IDEycHg7XG5cdGdhcDogMTBweDtcblx0Ym9yZGVyLXJhZGl1czogMCAwIDRweCA0cHg7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXRSb3cgPSBzdHlsZWQuZGl2IGBcblx0Ym9yZGVyOiAxcHggc29saWQgI2Y1YTRjMDtcblx0Ym9yZGVyLXJhZGl1czogMTBweDtcblx0cGFkZGluZzogOHB4IDEwcHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbklucHV0ID0gc3R5bGVkLmlucHV0IGBcblx0ZmxleDogMTtcblx0bWluLXdpZHRoOiAwO1xuXHRib3JkZXI6IDA7XG5cdG91dGxpbmU6IG5vbmU7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25BY3Rpb25zID0gc3R5bGVkLmRpdiBgXG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQ2FuY2VsID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnNlY29uZGFyeX07XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0Zm9udC13ZWlnaHQ6IDUwMDtcblx0cGFkZGluZzogMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbXByb3ZlID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMXB4IHNvbGlkICM1ZDNhNzI7XG5cdGNvbG9yOiAjNWQzYTcyO1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0Ym9yZGVyLXJhZGl1czogOHB4O1xuXHRwYWRkaW5nOiA4cHggMTRweDtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRsaW5lLWhlaWdodDogMS4xO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0ID0gc3R5bGVkLmRpdiBgXG5cdG1hcmdpbi10b3A6IDEwcHg7XG5cdGJvcmRlci1yYWRpdXM6IDEycHg7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3gtc2hhZG93OiAwIDZweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkJ1dHRvbiA9IHN0eWxlZC5idXR0b24gYFxuXHR3aWR0aDogMTAwJTtcblx0Ym9yZGVyOiAwO1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgJHtDT0xPUlMuc3Ryb2tlLnByaW1hcnl9O1xuXHRiYWNrZ3JvdW5kOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyNlNWYzZTgnIDogJ3RyYW5zcGFyZW50Jyl9O1xuXHRjb2xvcjogJHsocHJvcHMpID0+IChwcm9wcy5zZWxlY3RlZCA/ICcjMWU2YjM0JyA6IENPTE9SUy5jb250ZW50LnByaW1hcnkpfTtcblx0dGV4dC1hbGlnbjogbGVmdDtcblx0cGFkZGluZzogMTJweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjI7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0OmZpcnN0LW9mLXR5cGUge1xuXHRcdGJvcmRlci10b3A6IDA7XG5cdH1cbmA7XHJcbmNvbnN0IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nID0gbmV3IEJhc2VXaGF0c2FwcENvbnRlbnRMYW5nSGVscGVyKCk7XHJcbmNvbnN0IFdpbGRDYXJkTWFwID0ge1xyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLkJPTERdOiAnKicsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuSVRBTElDXTogJ18nLFxyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLlNUUklLRVRIUk9VR0hdOiAnficsXHJcbn07XHJcbmZ1bmN0aW9uIGdldEhpZ2hsaWdodFN0b3JhZ2VLZXkoZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgIHJldHVybiBgd2hhdHNhcHAtZWRpdG9yLXJlcGhyYXNlLWhpZ2hsaWdodC0ke2VkaXRvckluc3RhbmNlS2V5IHx8ICdkZWZhdWx0J31gO1xyXG59XHJcbmV4cG9ydCBjb25zdCBXaGF0c0FwcFRleHRFZGl0b3IgPSBSZWFjdC5mb3J3YXJkUmVmKChfYSwgcmVmKSA9PiB7XHJcbiAgICB2YXIgeyBvbkNoYW5nZSwgb25DbGlja1ZhcmlhYmxlLCB0ZXh0OiBpbnB1dFZhbHVlLCBSaWdodENvbXBvbmVudCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yLCByb3dzLCBhY3Rpb25zLCBlZGl0b3JJbnN0YW5jZUtleSwgdGVtcGxhdGVUeXBlID0gJ21hcmtldGluZycsIHRlbXBsYXRlSWQsIHJlcXVlc3RFeGVjdXRvciwgYmFzZVVybCwgZW5kcG9pbnRQYXRoLCB1c2VDYXNlLCBzdG9yZUlkLCBhcGlBZGFwdGVyLCBjb252ZXJzYXRpb25JZCA9ICd3aGF0c2FwcC10ZW1wbGF0ZS1lZGl0b3InLCBzeXN0ZW1JZCA9ICd3aGF0c2FwcC13cml0ZXInLCBpbnRlbnQgPSAnZGVmYXVsdCcsIGVuYWJsZWRBSUFjdGlvbnMgPSBbXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlNIT1JURU4sXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FWFBBTkQsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FTU9KSUZZLFxyXG4gICAgXSwgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMgPSBmYWxzZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCBhaUFjdGlvbk1pbkNoYXJzLCBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgb25BSUV2ZW50LCBvbkFJVGFnQ29tcHV0ZWQsIHByZWZpbGxXYXNBaUdlbmVyYXRlZCA9IGZhbHNlLCBlZGl0b3JIZWFkZXIsIG9uQUlUb25lU2VsZWN0LCBvbkFJQWN0aW9uUmVxdWVzdCwgb25CdWlsZEFJUHJvbXB0IH0gPSBfYSwgdGV4dEFyZWFQcm9wcyA9IF9fcmVzdChfYSwgW1wib25DaGFuZ2VcIiwgXCJvbkNsaWNrVmFyaWFibGVcIiwgXCJ0ZXh0XCIsIFwiUmlnaHRDb21wb25lbnRcIiwgXCJlcnJvclwiLCBcImxpbWl0XCIsIFwib25FcnJvclwiLCBcInJvd3NcIiwgXCJhY3Rpb25zXCIsIFwiZWRpdG9ySW5zdGFuY2VLZXlcIiwgXCJ0ZW1wbGF0ZVR5cGVcIiwgXCJ0ZW1wbGF0ZUlkXCIsIFwicmVxdWVzdEV4ZWN1dG9yXCIsIFwiYmFzZVVybFwiLCBcImVuZHBvaW50UGF0aFwiLCBcInVzZUNhc2VcIiwgXCJzdG9yZUlkXCIsIFwiYXBpQWRhcHRlclwiLCBcImNvbnZlcnNhdGlvbklkXCIsIFwic3lzdGVtSWRcIiwgXCJpbnRlbnRcIiwgXCJlbmFibGVkQUlBY3Rpb25zXCIsIFwiZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnNcIiwgXCJwcm9tcHRPdmVycmlkZXNcIiwgXCJyZXBocmFzZVRvbmVzXCIsIFwiYWlBY3Rpb25NaW5DaGFyc1wiLCBcImluc3RydWN0aW9uU3VnZ2VzdGlvbnNcIiwgXCJvbkFJRXZlbnRcIiwgXCJvbkFJVGFnQ29tcHV0ZWRcIiwgXCJwcmVmaWxsV2FzQWlHZW5lcmF0ZWRcIiwgXCJlZGl0b3JIZWFkZXJcIiwgXCJvbkFJVG9uZVNlbGVjdFwiLCBcIm9uQUlBY3Rpb25SZXF1ZXN0XCIsIFwib25CdWlsZEFJUHJvbXB0XCJdKTtcclxuICAgIGNvbnN0IHRleHRTcGFjZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IFtjdXJyZW50VGV4dCwgc2V0Q3VycmVudFRleHRdID0gdXNlU3RhdGUoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICBjb25zdCBbaXNSZXBocmFzZUhpZ2hsaWdodGVkLCBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW3JlcGhyYXNlSGlnaGxpZ2h0Q291bnQsIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbaXNHZW5lcmF0aW5nLCBzZXRJc0dlbmVyYXRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2lzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGVdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2luc3RydWN0aW9uVGV4dCwgc2V0SW5zdHJ1Y3Rpb25UZXh0XSA9IHVzZVN0YXRlKCcnKTtcclxuICAgIGNvbnN0IFt0b25lQnlBY3Rpb24sIHNldFRvbmVCeUFjdGlvbl0gPSB1c2VTdGF0ZSh7fSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkJhc2VUZXh0LCBzZXRTdWdnZXN0aW9uQmFzZVRleHRdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkNhbmRpZGF0ZXMsIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzXSA9IHVzZVN0YXRlKFtdKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uSW5kZXgsIHNldFN1Z2dlc3Rpb25JbmRleF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGVdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBzdWdnZXN0aW9uU2Nyb2xsUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgcmVwaHJhc2VJZGxlUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgaGlnaGxpZ2h0UmVzZXRSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICAvKipcclxuICAgICAqIFByaW9yIGVsaWdpYmlsaXR5IGZvciByZXBocmFzZSBudWRnZSAobnVsbCA9IG5vdCBpbml0aWFsaXplZCkuXHJcbiAgICAgKiBNYXRjaGVzIHRoZSBjaGlwOiBub24tZW1wdHkgdHJpbSBhbmQgbGVuZ3RoIOKJpSBtaW4g4oCUIHNhbWUgYXMgYGFpSGVhZGVyQWN0aW9uc2AgZGlzYWJsZWQgcnVsZXMuXHJcbiAgICAgKi9cclxuICAgIGNvbnN0IHByZXZSZXBocmFzZUVsaWdpYmxlUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgZGVmZXJyZWRIdG1sUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgbGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIC8qKiBGaXJzdCBhY2NlcHQgYWZ0ZXIgZnVsbC1BSSBwcmVmaWxsIChgcHJlZmlsbFdhc0FpR2VuZXJhdGVkYCk7IGNsZWFyZWQgYWZ0ZXIgb25lIGFjY2VwdC4gKi9cclxuICAgIGNvbnN0IGluaXRpYWxBaVByZWZpbGxQaGFzZVJlZiA9IHVzZVJlZighIXByZWZpbGxXYXNBaUdlbmVyYXRlZCk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGluaXRpYWxBaVByZWZpbGxQaGFzZVJlZi5jdXJyZW50ID0gISFwcmVmaWxsV2FzQWlHZW5lcmF0ZWQ7XHJcbiAgICB9LCBbcHJlZmlsbFdhc0FpR2VuZXJhdGVkLCBlZGl0b3JJbnN0YW5jZUtleV0pO1xyXG4gICAgY29uc3QgYWN0aXZlQWN0aW9uUHJvbXB0cyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiByZXNvbHZlQWN0aW9uUHJvbXB0cyh0ZW1wbGF0ZVR5cGUsIHByb21wdE92ZXJyaWRlcywgcmVwaHJhc2VUb25lcyk7XHJcbiAgICB9LCBbcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCB0ZW1wbGF0ZVR5cGVdKTtcclxuICAgIGNvbnN0IGZpbHRlcmVkSW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGlmICghcXVlcnkpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucy5maWx0ZXIoKHN1Z2dlc3Rpb24pID0+IHN1Z2dlc3Rpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeSkpO1xyXG4gICAgfSwgW2luc3RydWN0aW9uU3VnZ2VzdGlvbnMsIGluc3RydWN0aW9uVGV4dF0pO1xyXG4gICAgY29uc3QgbWluQ2hhcnNCeUFjdGlvbiA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUyksIChhaUFjdGlvbk1pbkNoYXJzIHx8IHt9KSk7XHJcbiAgICB9LCBbYWlBY3Rpb25NaW5DaGFyc10pO1xyXG4gICAgY29uc3QgcmVwaHJhc2VNaW5DaGFycyA9IG1pbkNoYXJzQnlBY3Rpb25bQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV0gfHxcclxuICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV07XHJcbiAgICBjb25zdCBlbWl0QUlFdmVudCA9IHVzZUNhbGxiYWNrKChuYW1lLCBwYXlsb2FkKSA9PiB7XHJcbiAgICAgICAgb25BSUV2ZW50ID09PSBudWxsIHx8IG9uQUlFdmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSUV2ZW50KG5hbWUsIHBheWxvYWQpO1xyXG4gICAgfSwgW29uQUlFdmVudF0pO1xyXG4gICAgY29uc3Qgc2V0RWRpdG9yVGV4dCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIHNldEN1cnJlbnRUZXh0KChwcmV2KSA9PiAocHJldiA9PT0gbmV4dFRleHQgPyBwcmV2IDogbmV4dFRleHQpKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGVtaXRDaGFuZ2VXaXRoR3VhcmQgPSB1c2VDYWxsYmFjaygobmV4dFRleHQpID0+IHtcclxuICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGRlZmVycmVkSHRtbFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5leHRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIG5leHRUZXh0KTtcclxuICAgICAgICAgICAgZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChuZXh0VGV4dCkpO1xyXG4gICAgICAgICAgICB9LCAxNik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICB9LCBbb25DaGFuZ2VdKTtcclxuICAgIGNvbnN0IGNsZWFyU3VnZ2VzdGlvblNlc3Npb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0KG51bGwpO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtdKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUobnVsbCk7XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgPj0gTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXh0Q291bnQgPSByZXBocmFzZUhpZ2hsaWdodENvdW50ICsgMTtcclxuICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KG5leHRDb3VudCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSksIFN0cmluZyhuZXh0Q291bnQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKHRydWUpO1xyXG4gICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgIH0sIDEyMDApO1xyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5LCByZXBocmFzZUhpZ2hsaWdodENvdW50XSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHRSZWYgPSB1c2VSZWYodHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0KTtcclxuICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50ID0gdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0O1xyXG4gICAgZnVuY3Rpb24gaGFuZGxlT25DaGFuZ2UoZSkge1xyXG4gICAgICAgIGNvbnN0IHRleHQgPSBlLnRhcmdldC52YWx1ZTtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBzZXRDYXJldFBvc2l0aW9uKGNhcmV0UG9zKSB7XHJcbiAgICAgICAgY29uc3QgZWxlbSA9IHRleHRTcGFjZVJlZiA9PT0gbnVsbCB8fCB0ZXh0U3BhY2VSZWYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRleHRTcGFjZVJlZi5jdXJyZW50O1xyXG4gICAgICAgIGlmIChlbGVtICE9IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKGVsZW0uc2VsZWN0aW9uU3RhcnQpIHtcclxuICAgICAgICAgICAgICAgIGVsZW0uZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIGVsZW0uc2VsZWN0aW9uRW5kID0gY2FyZXRQb3M7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgZWxlbS5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIG9uQWN0aW9uU2VsZWN0KGFjdGlvblR5cGUpIHtcclxuICAgICAgICBjb25zdCB3aWxkQ2FyZCA9IFdpbGRDYXJkTWFwW2FjdGlvblR5cGVdO1xyXG4gICAgICAgIGlmICh3aWxkQ2FyZCAmJiB0ZXh0U3BhY2VSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHRleHQgfSA9IGluc2VydFRleHRBdEluZGV4KHdpbGRDYXJkLCBzdGFydCk7XHJcbiAgICAgICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uKHN0YXJ0ICsgMSk7XHJcbiAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBhZGRUZXh0T3JXcmFwKHdpbGRDYXJkKTtcclxuICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBvbkVtb2ppQWRkaXRpb24oZW1vamkpIHtcclxuICAgICAgICBjb25zdCB7IHRleHQgfSA9IGFkZFRleHQoZW1vamkpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhZGRUZXh0T3JXcmFwKHRleHRUb0FkZCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgbGV0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICBpZiAodGV4dFNwYWNlUmVmLmN1cnJlbnQgJiYgdGV4dFRvQWRkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgY29uc3Qgd2lsZENhcmQgPSB0ZXh0VG9BZGQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICAvKiogbm90aGluZyBpcyBzZWxlY3RlZCAqL1xyXG4gICAgICAgICAgICAgICAgLyoqIHNvIGFwcGVuZCB0aGUgd2lsZGNhcmQgYXQgdGhlIGVuZCAqL1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFkZFRleHQod2lsZENhcmQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGV4dCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLndyYXBwV2lsZGNhcmQoc3RhcnQsIGVuZCwgd2lsZENhcmQsIHRleHQpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaHRtbCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwodGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdGV4dCwgaHRtbCB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IHRleHQ6IHRleHQsIGh0bWw6IHRleHQgfTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZFRleHQodGV4dFRvQWRkKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgaWYgKHRleHRTcGFjZVJlZi5jdXJyZW50ICYmIHRleHRUb0FkZCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zZXJ0VGV4dEF0SW5kZXgodGV4dFRvQWRkLCBzdGFydCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dDogdGV4dCwgaHRtbDogdGV4dCB9O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gaW5zZXJ0VGV4dEF0SW5kZXgodGV4dFRvQWRkLCBpbmRleCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgbGV0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICB0ZXh0ID0gdGV4dC5zbGljZSgwLCBpbmRleCkgKyB0ZXh0VG9BZGQgKyB0ZXh0LnNsaWNlKGluZGV4KTtcclxuICAgICAgICBjb25zdCBodG1sID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTCh0ZXh0KTtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgIHJldHVybiB7IHRleHQsIGh0bWwgfTtcclxuICAgIH1cclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8ICFlZGl0b3JJbnN0YW5jZUtleSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNhY2hlZCA9IE51bWJlcihzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGdldEhpZ2hsaWdodFN0b3JhZ2VLZXkoZWRpdG9ySW5zdGFuY2VLZXkpKSB8fFxyXG4gICAgICAgICAgICAnMCcpO1xyXG4gICAgICAgIGlmICghTnVtYmVyLmlzTmFOKGNhY2hlZCkpIHtcclxuICAgICAgICAgICAgc2V0UmVwaHJhc2VIaWdobGlnaHRDb3VudChjYWNoZWQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtlZGl0b3JJbnN0YW5jZUtleV0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBjb25zdCBlbGlnaWJsZSA9ICEhY3VycmVudFRleHQudHJpbSgpICYmIGN1cnJlbnRUZXh0Lmxlbmd0aCA+PSByZXBocmFzZU1pbkNoYXJzO1xyXG4gICAgICAgIGlmIChwcmV2UmVwaHJhc2VFbGlnaWJsZVJlZi5jdXJyZW50ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHByZXZSZXBocmFzZUVsaWdpYmxlUmVmLmN1cnJlbnQgPSBlbGlnaWJsZTtcclxuICAgICAgICAgICAgaWYgKGVsaWdpYmxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50KCk7XHJcbiAgICAgICAgICAgICAgICB9LCBSRVBIUkFTRV9JRExFX01TKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZWxpZ2libGUpIHtcclxuICAgICAgICAgICAgcHJldlJlcGhyYXNlRWxpZ2libGVSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjcm9zc2VkVGhyZXNob2xkID0gIXByZXZSZXBocmFzZUVsaWdpYmxlUmVmLmN1cnJlbnQgJiYgZWxpZ2libGU7XHJcbiAgICAgICAgcHJldlJlcGhyYXNlRWxpZ2libGVSZWYuY3VycmVudCA9IHRydWU7XHJcbiAgICAgICAgaWYgKGNyb3NzZWRUaHJlc2hvbGQpIHtcclxuICAgICAgICAgICAgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0UmVmLmN1cnJlbnQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50KCk7XHJcbiAgICAgICAgfSwgUkVQSFJBU0VfSURMRV9NUyk7XHJcbiAgICB9LCBbY3VycmVudFRleHQsIHJlcGhyYXNlTWluQ2hhcnNdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGFjdGl2ZUNhbmRpZGF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzW3N1Z2dlc3Rpb25JbmRleF0gfHwgJyc7XHJcbiAgICBjb25zdCBzdWdnZXN0aW9uQmFzZUh0bWwgPSB1c2VNZW1vKCgpID0+IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwoc3VnZ2VzdGlvbkJhc2VUZXh0IHx8ICcnKSwgW3N1Z2dlc3Rpb25CYXNlVGV4dF0pO1xyXG4gICAgY29uc3QgYWN0aXZlQ2FuZGlkYXRlSHRtbCA9IHVzZU1lbW8oKCkgPT4gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChhY3RpdmVDYW5kaWRhdGUpLCBbYWN0aXZlQ2FuZGlkYXRlXSk7XHJcbiAgICBjb25zdCBjYW5SZWdlbmVyYXRlID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDwgTUFYX1NVR0dFU1RJT05TO1xyXG4gICAgY29uc3Qgc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID0gISFzdWdnZXN0aW9uQmFzZVRleHQgJiYgc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoID4gMDtcclxuICAgIGNvbnN0IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8IHN1Z2dlc3Rpb25JbmRleCA8PSAwO1xyXG4gICAgY29uc3QgaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDw9IDEgfHxcclxuICAgICAgICBzdWdnZXN0aW9uSW5kZXggPj0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBub2RlID0gc3VnZ2VzdGlvblNjcm9sbFJlZi5jdXJyZW50O1xyXG4gICAgICAgIGlmICghbm9kZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIG5vZGUuc2Nyb2xsVG9wID0gbm9kZS5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9LCBbYWN0aXZlQ2FuZGlkYXRlLCBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24sIGlzR2VuZXJhdGluZ10pO1xyXG4gICAgY29uc3QgZXhlY3V0ZUFJQWN0aW9uID0gdXNlQ2FsbGJhY2soKGFjdGlvblR5cGUsIHJlZ2VuZXJhdGVFeGlzdGluZyA9IGZhbHNlLCBpbnN0cnVjdGlvbk92ZXJyaWRlLCB0b25lT3ZlcnJpZGVJZCwgYWN0aW9uVmFyaWFudCA9IEFJQWN0aW9uVmFyaWFudC5ERUZBVUxUKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICB2YXIgX2IsIF9jLCBfZDtcclxuICAgICAgICBpZiAoIW9uQUlBY3Rpb25SZXF1ZXN0ICYmXHJcbiAgICAgICAgICAgICFhcGlBZGFwdGVyICYmXHJcbiAgICAgICAgICAgICghcmVxdWVzdEV4ZWN1dG9yIHx8ICFiYXNlVXJsKSkge1xyXG4gICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoJ0FJIGNvbmZpZ3VyYXRpb24gbWlzc2luZycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY3VycmVudFRleHQudHJpbSgpKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbWluQ2hhcnNGb3JBY3Rpb24gPSBtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICA1MDtcclxuICAgICAgICBpZiAoY3VycmVudFRleHQubGVuZ3RoIDwgbWluQ2hhcnNGb3JBY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpZiAoaXNHZW5lcmF0aW5nKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKHJlZ2VuZXJhdGVFeGlzdGluZyAmJiAhY2FuUmVnZW5lcmF0ZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGJhc2VDb25maWcgPSBhY3RpdmVBY3Rpb25Qcm9tcHRzW2FjdGlvblR5cGVdO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UgJiZcclxuICAgICAgICAgICAgdGVtcGxhdGVUeXBlID09PSAndXRpbGl0eScgJiZcclxuICAgICAgICAgICAgYWN0aW9uVmFyaWFudCA9PT0gQUlBY3Rpb25WYXJpYW50LlJFUEhSQVNFXHJcbiAgICAgICAgICAgID8gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBiYXNlQ29uZmlnKSwgeyBsYWJlbDogJ1JlcGhyYXNlJywgYmFzZVByb21wdDogVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgfSkgOiBiYXNlQ29uZmlnO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVG9uZUlkID0gdG9uZU92ZXJyaWRlSWQgfHxcclxuICAgICAgICAgICAgdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIGNvbmZpZy5kZWZhdWx0VG9uZUlkIHx8XHJcbiAgICAgICAgICAgICgoX2MgPSAoX2IgPSBjb25maWcudG9uZXMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYlswXSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmlkKTtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFRvbmUgPSAoX2QgPSBjb25maWcudG9uZXMpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5maW5kKCh0b25lKSA9PiB0b25lLmlkID09PSBzZWxlY3RlZFRvbmVJZCk7XHJcbiAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgPSBpbnN0cnVjdGlvbk92ZXJyaWRlICE9PSB1bmRlZmluZWRcclxuICAgICAgICAgICAgPyBpbnN0cnVjdGlvbk92ZXJyaWRlXHJcbiAgICAgICAgICAgIDogaW5zdHJ1Y3Rpb25UZXh0O1xyXG4gICAgICAgIGNvbnN0IHByb21wdCA9IChvbkJ1aWxkQUlQcm9tcHQgPT09IG51bGwgfHwgb25CdWlsZEFJUHJvbXB0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkJ1aWxkQUlQcm9tcHQoe1xyXG4gICAgICAgICAgICBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICBhY3Rpb25WYXJpYW50LFxyXG4gICAgICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICBjb25maWcsXHJcbiAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgIHRvbmVMYWJlbDogc2VsZWN0ZWRUb25lID09PSBudWxsIHx8IHNlbGVjdGVkVG9uZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZWN0ZWRUb25lLmxhYmVsLFxyXG4gICAgICAgICAgICBpbnN0cnVjdGlvblRleHQ6IGluc3RydWN0aW9uRm9yUHJvbXB0IHx8IHVuZGVmaW5lZCxcclxuICAgICAgICB9KSkgfHxcclxuICAgICAgICAgICAgYnVpbGRBY3Rpb25Qcm9tcHQoe1xyXG4gICAgICAgICAgICAgICAgY29uZmlnLFxyXG4gICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZCxcclxuICAgICAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIHNldElzR2VuZXJhdGluZyh0cnVlKTtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfYWN0aW9uX3RyaWdnZXJlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG9uQUlBY3Rpb25SZXF1ZXN0XHJcbiAgICAgICAgICAgICAgICA/IHlpZWxkIG9uQUlBY3Rpb25SZXF1ZXN0KHtcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblZhcmlhbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIDogeWllbGQgcmVxdWVzdEFJU3VnZ2VzdGlvbih7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgYmFzZVVybCxcclxuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgICAgIGludGVudCxcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICAgICAgICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZydcclxuICAgICAgICAgICAgICAgID8gcmVzdWx0LnRyaW0oKVxyXG4gICAgICAgICAgICAgICAgOiAoKHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3VsdC5ib2R5KSB8fCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKCFyZWdlbmVyYXRlRXhpc3RpbmcpIHtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25CYXNlVGV4dChjdXJyZW50VGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShhY3Rpb25UeXBlKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtjYW5kaWRhdGVdKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcygocHJldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IFsuLi5wcmV2LCBjYW5kaWRhdGVdLnNsaWNlKDAsIE1BWF9TVUdHRVNUSU9OUyk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgobmV4dC5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdGYWlsZWQgdG8gZ2VuZXJhdGUgQUkgc3VnZ2VzdGlvbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgc2V0SXNHZW5lcmF0aW5nKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9KSwgW1xyXG4gICAgICAgIHJlcXVlc3RFeGVjdXRvcixcclxuICAgICAgICBiYXNlVXJsLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBjYW5SZWdlbmVyYXRlLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGluc3RydWN0aW9uVGV4dCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIGVuZHBvaW50UGF0aCxcclxuICAgICAgICBhcGlBZGFwdGVyLFxyXG4gICAgICAgIGludGVudCxcclxuICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgIG9uRXJyb3IsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgICAgICBvbkFJQWN0aW9uUmVxdWVzdCxcclxuICAgICAgICBvbkJ1aWxkQUlQcm9tcHQsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFhY3RpdmVDYW5kaWRhdGUgfHwgIXN1Z2dlc3Rpb25CYXNlVGV4dCB8fCAhc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2FjY2VwdGVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGluSW5pdGlhbEFpUGhhc2UgPSBpbml0aWFsQWlQcmVmaWxsUGhhc2VSZWYuY3VycmVudDtcclxuICAgICAgICBjb25zdCB0YWdQYXlsb2FkID0gY29tcHV0ZUFpVGFnT25BY2NlcHQoe1xyXG4gICAgICAgICAgICBiYXNlbGluZVRleHQ6IHN1Z2dlc3Rpb25CYXNlVGV4dCxcclxuICAgICAgICAgICAgYWNjZXB0ZWRUZXh0OiBhY3RpdmVDYW5kaWRhdGUsXHJcbiAgICAgICAgICAgIGluaXRpYWxBaVByZWZpbGxQaGFzZTogaW5Jbml0aWFsQWlQaGFzZSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoaW5Jbml0aWFsQWlQaGFzZSkge1xyXG4gICAgICAgICAgICBpbml0aWFsQWlQcmVmaWxsUGhhc2VSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvbkFJVGFnQ29tcHV0ZWQgPT09IG51bGwgfHwgb25BSVRhZ0NvbXB1dGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVGFnQ29tcHV0ZWQodGFnUGF5bG9hZCk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGFjdGl2ZUNhbmRpZGF0ZSxcclxuICAgICAgICBzdWdnZXN0aW9uQmFzZVRleHQsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCxcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkLFxyXG4gICAgICAgIGVtaXRBSUV2ZW50LFxyXG4gICAgICAgIHRlbXBsYXRlSWQsXHJcbiAgICAgICAgb25BSVRhZ0NvbXB1dGVkLFxyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2Rpc2NhcmRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uKCk7XHJcbiAgICB9LCBbY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiwgZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKChyYXRpbmcpID0+IHtcclxuICAgICAgICBpZiAoIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2ZlZWRiYWNrX3N1Ym1pdHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICAgICAgcmF0aW5nLFxyXG4gICAgICAgICAgICBjYW5kaWRhdGVfaW5kZXg6IHN1Z2dlc3Rpb25JbmRleCArIDEsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LCBbZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzdWdnZXN0aW9uSW5kZXgsIHRlbXBsYXRlSWRdKTtcclxuICAgIGNvbnN0IGFpSGVhZGVyQWN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucylcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBlbmFibGVkQUlBY3Rpb25zLm1hcCgoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICAgICAgY29uc3QgYWN0aW9uQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICAgICAgY29uc3QgdG9uZUlkID0gdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICBhY3Rpb25Db25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAgICAgKChfYiA9IChfYSA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzBdKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWQpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBhY3Rpb25Db25maWcubGFiZWwsXHJcbiAgICAgICAgICAgICAgICBpc1ByaW1hcnk6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBpc0dlbmVyYXRpbmcgJiYgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHRlZDogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVwaHJhc2VIaWdobGlnaHRlZCxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhY3VycmVudFRleHQudHJpbSgpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQubGVuZ3RoIDxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG1pbkNoYXJzQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNTApIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgaXNHZW5lcmF0aW5nIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSksXHJcbiAgICAgICAgICAgICAgICBzaG93VG9uZURyb3Bkb3duOiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgICAgICAgICAgISEoKF9jID0gYWN0aW9uQ29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSxcclxuICAgICAgICAgICAgICAgIHRvbmVzOiBhY3Rpb25Db25maWcudG9uZXMsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZDogdG9uZUlkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGVuYWJsZWRBSUFjdGlvbnMsXHJcbiAgICAgICAgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMsXHJcbiAgICAgICAgYWN0aXZlQWN0aW9uUHJvbXB0cyxcclxuICAgICAgICB0b25lQnlBY3Rpb24sXHJcbiAgICAgICAgaXNHZW5lcmF0aW5nLFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbixcclxuICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgIF0pO1xyXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBhZGRUZXh0T3JXcmFwLFxyXG4gICAgICAgICAgICBhZGRUZXh0LFxyXG4gICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24sXHJcbiAgICAgICAgfTtcclxuICAgIH0sIFthZGRUZXh0T3JXcmFwLCBhZGRUZXh0LCBjdXJyZW50VGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoaW5wdXRWYWx1ZSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChpbnB1dFZhbHVlIHx8ICcnKTtcclxuICAgIH0sIFtpbnB1dFZhbHVlLCBzZXRFZGl0b3JUZXh0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICghbGltaXQgfHwgIW9uRXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBuZXh0RXJyb3IgPSBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdCA/IExJTUlUX1JFQUNIRUQgOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiAnJztcclxuICAgICAgICBpZiAobGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID09PSBuZXh0RXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBsYXN0RW1pdHRlZEVkaXRvckVycm9yUmVmLmN1cnJlbnQgPSBuZXh0RXJyb3I7XHJcbiAgICAgICAgb25FcnJvcihuZXh0RXJyb3IpO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCBlcnJvciwgbGltaXQsIG9uRXJyb3JdKTtcclxuICAgIHJldHVybiAoX2pzeHMoT3V0ZXJDb250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4cyhFZGl0b3JGb290ZXJSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvckZvb3RlclRpdGxlLCB7IGNoaWxkcmVuOiBlZGl0b3JIZWFkZXIgPyAoX2pzeChUaXRsZVNtYWxsLCBPYmplY3QuYXNzaWduKHsgXCJkYXRhLXRlc3RcIjogXCJib2R5LXRleHQtZm9yLWVkaXQtdGVtcGxhdGVcIiB9LCB7IGNoaWxkcmVuOiBlZGl0b3JIZWFkZXIgfSkpKSA6IG51bGwgfSksIF9qc3hzKEVkaXRvckZvb3RlclJpZ2h0LCB7IGNoaWxkcmVuOiBbZXJyb3IgJiYgZXJyb3IgIT09IExJTUlUX1JFQUNIRUQgPyAoX2pzeHMoX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBbX2pzeChJbmZvSWNvbiwgeyB3aWR0aDogMTYsIGhlaWdodDogMTYsIGNvbG9yOiBDT0xPUlMuY29udGVudC5uZWdhdGl2ZSB9KSwgX2pzeChCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IGNvbG9yOiBDT0xPUlMuY29udGVudC5uZWdhdGl2ZSB9LCB7IGNoaWxkcmVuOiBlcnJvciB9KSldIH0pKSA6IG51bGwsIGxpbWl0ID8gKF9qc3hzKEJvZHlDYXB0aW9uLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IGVycm9yID09PSBMSU1JVF9SRUFDSEVEIHx8IGN1cnJlbnRUZXh0Lmxlbmd0aCA+IGxpbWl0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IENPTE9SUy5jb250ZW50Lm5lZ2F0aXZlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IFtjdXJyZW50VGV4dC5sZW5ndGgsIFwiL1wiLCBsaW1pdF0gfSkpKSA6IG51bGxdIH0pXSB9KSwgX2pzeHMoQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgaXNFcnJvcjogISFlcnJvciB9LCB7IGNoaWxkcmVuOiBbc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID8gKF9qc3hzKFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgcmVmOiBzdWdnZXN0aW9uU2Nyb2xsUmVmIH0sIHsgY2hpbGRyZW46IFtfanN4KFN1Z2dlc3Rpb25CYXNlbGluZVRleHQsIHsgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHsgX19odG1sOiBzdWdnZXN0aW9uQmFzZUh0bWwgfSB9KSwgaXNHZW5lcmF0aW5nID8gKF9qc3goU3VnZ2VzdGlvbkNhbmRpZGF0ZVRleHQsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtYnVzeVwiOiBcInRydWVcIiB9LCB7IGNoaWxkcmVuOiBfanN4cyhTdWdnZXN0aW9uQ2FuZGlkYXRlU2tlbGV0b24sIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiODQlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjY4JVwiIH0pXSB9KSB9KSkpIDogKF9qc3goU3VnZ2VzdGlvbkNhbmRpZGF0ZVRleHQsIHsgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19odG1sOiBhY3RpdmVDYW5kaWRhdGVIdG1sLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSkpLCBfanN4cyhTdWdnZXN0aW9uQ29udHJvbHNSb3csIHsgY2hpbGRyZW46IFtfanN4cyhTdWdnZXN0aW9uQ291bnRlciwgeyBjaGlsZHJlbjogW3N1Z2dlc3Rpb25JbmRleCArIDEsIFwiL1wiLCBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGhdIH0pLCBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUHJldmlvdXMgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBkaXNhYmxlZDogaXNQcmV2U3VnZ2VzdGlvbkRpc2FibGVkLCBvbkNsaWNrOiAoKSA9PiBzZXRTdWdnZXN0aW9uSW5kZXgoKGlkeCkgPT4gTWF0aC5tYXgoMCwgaWR4IC0gMSkpIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hldnJvbkxlZnRJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSksIF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiTGlrZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUZlZWRiYWNrKCdsaWtlJykgfSwgeyBjaGlsZHJlbjogX2pzeChUaHVtYnNVcEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzbGlrZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkRpc2xpa2Ugc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiBoYW5kbGVGZWVkYmFjaygnZGlzbGlrZScpIH0sIHsgY2hpbGRyZW46IF9qc3goVGh1bWJzRG93bkljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIGNhblJlZ2VuZXJhdGUgPyAoX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogaXNHZW5lcmF0aW5nID8gJ1JlZ2VuZXJhdGluZ+KApicgOiAnUmVnZW5lcmF0ZScsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25SZWdlbmVyYXRlQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIFwiYXJpYS1idXN5XCI6IGlzR2VuZXJhdGluZywgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzR2VuZXJhdGluZywgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3VnZ2VzdGlvbkFjdGlvblR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IGlzR2VuZXJhdGluZyA/IChfanN4KFJlZ2VuZXJhdGVJY29uU2hpbW1lciwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUgfSkpIDogKF9qc3goUmV3aW5kSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkpIH0pKSB9KSkpIDogbnVsbCwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNjYXJkXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiQWNjZXB0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogaGFuZGxlQWNjZXB0U3VnZ2VzdGlvbiB9LCB7IGNoaWxkcmVuOiBfanN4KENoZWNrSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKV0gfSldIH0pKSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFzdGVkVGV4dCA9IGUuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFzdGVkVGV4dC5sZW5ndGggPiBMQVJHRV9JTlBVVF9USFJFU0hPTEQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWwgPSB0ZXh0U3BhY2VSZWYuY3VycmVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IChfYSA9IGVsID09PSBudWxsIHx8IGVsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlbC5zZWxlY3Rpb25TdGFydCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSAoX2IgPSBlbCA9PT0gbnVsbCB8fCBlbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogZWwuc2VsZWN0aW9uRW5kKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcmVmZXIgbGl2ZSBET00gdmFsdWUg4oCUIGBjdXJyZW50VGV4dGAgY2FuIGxhZyB0aGUgdGV4dGFyZWEgZm9yIGJpZyBwYXN0ZXMuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFzZSA9IChfYyA9IGVsID09PSBudWxsIHx8IGVsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlbC52YWx1ZSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dFRleHQgPSBiYXNlLnNsaWNlKDAsIHN0YXJ0KSArIHBhc3RlZFRleHQgKyBiYXNlLnNsaWNlKGVuZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dChuZXh0VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChuZXh0VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FyZXQgPSBzdGFydCArIHBhc3RlZFRleHQubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YS5zZXRTZWxlY3Rpb25SYW5nZShjYXJldCwgY2FyZXQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChfYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlIGludmFsaWQgcmFuZ2UgaW4gZWRnZSBicm93c2Vyc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiAoX2pzeChXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIHsgYWN0aW9uczogYWN0aW9ucywgcmVmOiB0ZXh0U3BhY2VSZWYsIG9uQWN0aW9uU2VsZWN0OiBvbkFjdGlvblNlbGVjdCwgUmlnaHRDb21wb25lbnQ6IFJpZ2h0Q29tcG9uZW50LCByaWdodEFjdGlvbnNEaXNhYmxlZDogc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uIHx8IGlzR2VuZXJhdGluZywgb25FbW9qaUNsaWNrOiBvbkVtb2ppQWRkaXRpb24sIGFpQWN0aW9uczogYWlIZWFkZXJBY3Rpb25zLCBkaXNhYmxlQWxsQWN0aW9uczogc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uIHx8IGlzR2VuZXJhdGluZywgaW5zdHJ1Y3Rpb25BY3RpdmU6IGlzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIG9uQUlJbnN0cnVjdGlvbnNDbGljazogKCkgPT4gc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSh0cnVlKSwgb25BSVRvbmVDaGFuZ2U6IChhY3Rpb25UeXBlLCB0b25lSWQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRvbmVCeUFjdGlvbigocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW2FjdGlvblR5cGVdOiB0b25lSWQgfSkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQUlUb25lU2VsZWN0ID09PSBudWxsIHx8IG9uQUlUb25lU2VsZWN0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVG9uZVNlbGVjdChhY3Rpb25UeXBlLCB0b25lSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdG9uZUlkLCBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIG9uQUlBY3Rpb25DbGljazogKGFjdGlvblR5cGUsIGFjdGlvblZhcmlhbnQgPSBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNhbWUgYWN0aW9uIHNob3VsZCBub3QgcmV0cmlnZ2VyIGZyb20gY2hpcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnZW5lcmF0ZSBpcyBvbmx5IHZpYSBleHBsaWNpdCByZWdlbmVyYXRlIGNvbnRyb2wuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmV3IGFjdGlvbiBzdGFydHMgYSBmcmVzaCBzdWdnZXN0aW9uIHNlc3Npb24uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFjdGlvblZhcmlhbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFjdGlvblZhcmlhbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IH0pKV0gfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuZXhwb3J0IHsgQUlfVEFHX0NIQU5HRV9SQVRJT19USFJFU0hPTEQsIGNvbXB1dGVBaVRhZ09uQWNjZXB0LCBsZXZlbnNodGVpbkRpc3RhbmNlLCB9IGZyb20gJy4vYWkvYWlUYWcnO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1XaGF0c0FwcFRleHRFZGl0b3IuanMubWFwIl19 */",toString:h}),o=a.default("span","production"===process.env.NODE_ENV?{target:"ea7i3sh11"}:{target:"ea7i3sh11",label:"SuggestionCounter"})("color:",R.COLORS.content.primary,";font-size:14px;"+("production"===process.env.NODE_ENV?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBdUZzQyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIEZyYWdtZW50IGFzIF9GcmFnbWVudCwganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZXdpbmRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3Jld2luZC5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzRG93bkljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvdGh1bWJzX2Rvd24uc3ZnJztcclxuaW1wb3J0IFRodW1ic1VwSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfdXAuc3ZnJztcclxuaW1wb3J0IHsgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9CYXNlV2hhdHNhcHBDb250ZW50TGFuZy5oZWxwZXJcIjtcclxuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUsIH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgeyBDT0xPUlMgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzL1RoZW1lXCI7XHJcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICcuLi90b29sdGlwcy9Ub29sdGlwJztcclxuaW1wb3J0IHsgQm9keUNhcHRpb24sIFRpdGxlU21hbGwgfSBmcm9tICcuLi9UeXBvZ3JhcGh5U3R5bGUnO1xyXG5pbXBvcnQgeyBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlMsIERFRkFVTFRfSU5TVFJVQ1RJT05fU1VHR0VTVElPTlMsIHJlc29sdmVBY3Rpb25Qcm9tcHRzLCB9IGZyb20gJy4vYWkvYWN0aW9uUmVnaXN0cnknO1xyXG5pbXBvcnQgeyBjb21wdXRlQWlUYWdPbkFjY2VwdCB9IGZyb20gJy4vYWkvYWlUYWcnO1xyXG5pbXBvcnQgeyBidWlsZEFjdGlvblByb21wdCwgcmVxdWVzdEFJU3VnZ2VzdGlvbiB9IGZyb20gJy4vYWkvYXBpJztcclxuaW1wb3J0IHsgQ29udGFpbmVyLCBFZGl0b3JGb290ZXJSaWdodCwgRWRpdG9yRm9vdGVyUm93LCBFZGl0b3JGb290ZXJUaXRsZSwgT3V0ZXJDb250YWluZXIsIFRleHRTcGFjZSwgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUFjdGlvblZhcmlhbnQsIEFJRWRpdG9yQWN0aW9uVHlwZXMsIEVkaXRvckFjdGlvblR5cGVzLCBXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIH0gZnJvbSAnLi9XaGF0c0FwcFRleHRFZGl0b3JIZWFkZXInO1xyXG5jb25zdCBMSU1JVF9SRUFDSEVEID0gJ0NoYXJhY3RlciBsaW1pdCByZWFjaGVkJztcclxuY29uc3QgUkVQSFJBU0VfSURMRV9NUyA9IDMwMDA7XHJcbmNvbnN0IE1BWF9SRVBIUkFTRV9ISUdITElHSFRTID0gNTtcclxuY29uc3QgTUFYX1NVR0dFU1RJT05TID0gMztcclxuY29uc3QgTEFSR0VfSU5QVVRfVEhSRVNIT0xEID0gMTIwMDtcclxuY29uc3QgVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgPSAnUmVwaHJhc2UgdGhpcyBXaGF0c0FwcCB1dGlsaXR5IHRlbXBsYXRlIHRvIGltcHJvdmUgY2xhcml0eSBhbmQgcmVhZGFiaWxpdHkgd2hpbGUgcHJlc2VydmluZyB2YXJpYWJsZXMsIGludGVudCwgYW5kIGNvbXBsaWFuY2UuJztcclxuY29uc3Qgc2tlbGV0b25QdWxzZSA9IGtleWZyYW1lcyBgXG5cdDAlIHsgb3BhY2l0eTogMC41NTsgfVxuXHQ1MCUgeyBvcGFjaXR5OiAxOyB9XG5cdDEwMCUgeyBvcGFjaXR5OiAwLjU1OyB9XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxNHB4IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogMTBweDtcblx0bWluLWhlaWdodDogMTUwcHg7XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkxpbmUgPSBzdHlsZWQuZGl2IGBcblx0aGVpZ2h0OiAxNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdHdpZHRoOiAkeyhwcm9wcykgPT4gcHJvcHMud2lkdGh9O1xuXHRiYWNrZ3JvdW5kOiAjZWNlY2VmO1xuXHRhbmltYXRpb246ICR7c2tlbGV0b25QdWxzZX0gMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHRtYXgtaGVpZ2h0OiAyNjBweDtcblx0b3ZlcmZsb3cteTogc2Nyb2xsO1xuXHRzY3JvbGxiYXItd2lkdGg6IHRoaW47XG5cdHNjcm9sbGJhci1jb2xvcjogI2M4YzhjZiB0cmFuc3BhcmVudDtcblx0Ojotd2Via2l0LXNjcm9sbGJhciB7XG5cdFx0d2lkdGg6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcblx0XHRiYWNrZ3JvdW5kOiAjYzhjOGNmO1xuXHRcdGJvcmRlci1yYWRpdXM6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcblx0XHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0fVxuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkJhc2VsaW5lVGV4dCA9IHN0eWxlZC5kaXYgYFxuXHR0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25DYW5kaWRhdGVUZXh0ID0gc3R5bGVkLmRpdiBgXG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkNhbmRpZGF0ZVNrZWxldG9uID0gc3R5bGVkLmRpdiBgXG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHR3aWR0aDogMTAwJTtcblx0bWluLWhlaWdodDogNDBweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db250cm9sc1JvdyA9IHN0eWxlZC5kaXYgYFxuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDZweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db3VudGVyID0gc3R5bGVkLnNwYW4gYFxuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkljb25CdXR0b24gPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0cGFkZGluZzogNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdGRpc3BsYXk6IGlubGluZS1mbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0dHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjEycyBlYXNlO1xuXHQ6bm90KDpkaXNhYmxlZCk6aG92ZXIge1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICR7Q09MT1JTLnN1cmZhY2UuaG92ZXJlZH07XG5cdH1cblx0OmRpc2FibGVkIHtcblx0XHRvcGFjaXR5OiAwLjM1O1xuXHRcdGN1cnNvcjogbm90LWFsbG93ZWQ7XG5cdH1cbmA7XHJcbi8qKiBSZWdlbmVyYXRlIHN0YXlzIGZ1bGwgb3BhY2l0eSB3aGlsZSBkaXNhYmxlZCBzbyB0aGUgbG9hZGluZyBzaGltbWVyIHN0YXlzIHZpc2libGUgKHNhbWUgcHVsc2UgYXMgZWRpdG9yIHNrZWxldG9uKS4gKi9cclxuY29uc3QgU3VnZ2VzdGlvblJlZ2VuZXJhdGVCdXR0b24gPSBzdHlsZWQoU3VnZ2VzdGlvbkljb25CdXR0b24pIGBcblx0OmRpc2FibGVkIHtcblx0XHRvcGFjaXR5OiAxO1xuXHRcdGN1cnNvcjogd2FpdDtcblx0fVxuYDtcclxuY29uc3QgUmVnZW5lcmF0ZUljb25TaGltbWVyID0gc3R5bGVkLmRpdiBgXG5cdHdpZHRoOiAxNHB4O1xuXHRoZWlnaHQ6IDE0cHg7XG5cdGJvcmRlci1yYWRpdXM6IDRweDtcblx0YmFja2dyb3VuZDogI2VjZWNlZjtcblx0ZmxleC1zaHJpbms6IDA7XG5cdGFuaW1hdGlvbjogJHtza2VsZXRvblB1bHNlfSAxLjFzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xuYDtcclxuLyoqIFNhbWUgYm90dG9tIHRvb2xiYXIgc2xvdCBhcyBgV2hhdHNBcHBUZXh0RWRpdG9ySGVhZGVyYCDigJQgcmVwbGFjZXMgdGhlIGZ1bGwgaWNvbi9BSSBwYW5lbCB3aGlsZSBvcGVuLiAqL1xyXG5jb25zdCBJbnN0cnVjdGlvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblx0cGFkZGluZzogOHB4IDEycHg7XG5cdGdhcDogMTBweDtcblx0Ym9yZGVyLXJhZGl1czogMCAwIDRweCA0cHg7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXRSb3cgPSBzdHlsZWQuZGl2IGBcblx0Ym9yZGVyOiAxcHggc29saWQgI2Y1YTRjMDtcblx0Ym9yZGVyLXJhZGl1czogMTBweDtcblx0cGFkZGluZzogOHB4IDEwcHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbklucHV0ID0gc3R5bGVkLmlucHV0IGBcblx0ZmxleDogMTtcblx0bWluLXdpZHRoOiAwO1xuXHRib3JkZXI6IDA7XG5cdG91dGxpbmU6IG5vbmU7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25BY3Rpb25zID0gc3R5bGVkLmRpdiBgXG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQ2FuY2VsID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnNlY29uZGFyeX07XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0Zm9udC13ZWlnaHQ6IDUwMDtcblx0cGFkZGluZzogMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbXByb3ZlID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMXB4IHNvbGlkICM1ZDNhNzI7XG5cdGNvbG9yOiAjNWQzYTcyO1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0Ym9yZGVyLXJhZGl1czogOHB4O1xuXHRwYWRkaW5nOiA4cHggMTRweDtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRsaW5lLWhlaWdodDogMS4xO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0ID0gc3R5bGVkLmRpdiBgXG5cdG1hcmdpbi10b3A6IDEwcHg7XG5cdGJvcmRlci1yYWRpdXM6IDEycHg7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3gtc2hhZG93OiAwIDZweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkJ1dHRvbiA9IHN0eWxlZC5idXR0b24gYFxuXHR3aWR0aDogMTAwJTtcblx0Ym9yZGVyOiAwO1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgJHtDT0xPUlMuc3Ryb2tlLnByaW1hcnl9O1xuXHRiYWNrZ3JvdW5kOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyNlNWYzZTgnIDogJ3RyYW5zcGFyZW50Jyl9O1xuXHRjb2xvcjogJHsocHJvcHMpID0+IChwcm9wcy5zZWxlY3RlZCA/ICcjMWU2YjM0JyA6IENPTE9SUy5jb250ZW50LnByaW1hcnkpfTtcblx0dGV4dC1hbGlnbjogbGVmdDtcblx0cGFkZGluZzogMTJweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjI7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0OmZpcnN0LW9mLXR5cGUge1xuXHRcdGJvcmRlci10b3A6IDA7XG5cdH1cbmA7XHJcbmNvbnN0IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nID0gbmV3IEJhc2VXaGF0c2FwcENvbnRlbnRMYW5nSGVscGVyKCk7XHJcbmNvbnN0IFdpbGRDYXJkTWFwID0ge1xyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLkJPTERdOiAnKicsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuSVRBTElDXTogJ18nLFxyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLlNUUklLRVRIUk9VR0hdOiAnficsXHJcbn07XHJcbmZ1bmN0aW9uIGdldEhpZ2hsaWdodFN0b3JhZ2VLZXkoZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgIHJldHVybiBgd2hhdHNhcHAtZWRpdG9yLXJlcGhyYXNlLWhpZ2hsaWdodC0ke2VkaXRvckluc3RhbmNlS2V5IHx8ICdkZWZhdWx0J31gO1xyXG59XHJcbmV4cG9ydCBjb25zdCBXaGF0c0FwcFRleHRFZGl0b3IgPSBSZWFjdC5mb3J3YXJkUmVmKChfYSwgcmVmKSA9PiB7XHJcbiAgICB2YXIgeyBvbkNoYW5nZSwgb25DbGlja1ZhcmlhYmxlLCB0ZXh0OiBpbnB1dFZhbHVlLCBSaWdodENvbXBvbmVudCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yLCByb3dzLCBhY3Rpb25zLCBlZGl0b3JJbnN0YW5jZUtleSwgdGVtcGxhdGVUeXBlID0gJ21hcmtldGluZycsIHRlbXBsYXRlSWQsIHJlcXVlc3RFeGVjdXRvciwgYmFzZVVybCwgZW5kcG9pbnRQYXRoLCB1c2VDYXNlLCBzdG9yZUlkLCBhcGlBZGFwdGVyLCBjb252ZXJzYXRpb25JZCA9ICd3aGF0c2FwcC10ZW1wbGF0ZS1lZGl0b3InLCBzeXN0ZW1JZCA9ICd3aGF0c2FwcC13cml0ZXInLCBpbnRlbnQgPSAnZGVmYXVsdCcsIGVuYWJsZWRBSUFjdGlvbnMgPSBbXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlNIT1JURU4sXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FWFBBTkQsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FTU9KSUZZLFxyXG4gICAgXSwgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMgPSBmYWxzZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCBhaUFjdGlvbk1pbkNoYXJzLCBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgb25BSUV2ZW50LCBvbkFJVGFnQ29tcHV0ZWQsIHByZWZpbGxXYXNBaUdlbmVyYXRlZCA9IGZhbHNlLCBlZGl0b3JIZWFkZXIsIG9uQUlUb25lU2VsZWN0LCBvbkFJQWN0aW9uUmVxdWVzdCwgb25CdWlsZEFJUHJvbXB0IH0gPSBfYSwgdGV4dEFyZWFQcm9wcyA9IF9fcmVzdChfYSwgW1wib25DaGFuZ2VcIiwgXCJvbkNsaWNrVmFyaWFibGVcIiwgXCJ0ZXh0XCIsIFwiUmlnaHRDb21wb25lbnRcIiwgXCJlcnJvclwiLCBcImxpbWl0XCIsIFwib25FcnJvclwiLCBcInJvd3NcIiwgXCJhY3Rpb25zXCIsIFwiZWRpdG9ySW5zdGFuY2VLZXlcIiwgXCJ0ZW1wbGF0ZVR5cGVcIiwgXCJ0ZW1wbGF0ZUlkXCIsIFwicmVxdWVzdEV4ZWN1dG9yXCIsIFwiYmFzZVVybFwiLCBcImVuZHBvaW50UGF0aFwiLCBcInVzZUNhc2VcIiwgXCJzdG9yZUlkXCIsIFwiYXBpQWRhcHRlclwiLCBcImNvbnZlcnNhdGlvbklkXCIsIFwic3lzdGVtSWRcIiwgXCJpbnRlbnRcIiwgXCJlbmFibGVkQUlBY3Rpb25zXCIsIFwiZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnNcIiwgXCJwcm9tcHRPdmVycmlkZXNcIiwgXCJyZXBocmFzZVRvbmVzXCIsIFwiYWlBY3Rpb25NaW5DaGFyc1wiLCBcImluc3RydWN0aW9uU3VnZ2VzdGlvbnNcIiwgXCJvbkFJRXZlbnRcIiwgXCJvbkFJVGFnQ29tcHV0ZWRcIiwgXCJwcmVmaWxsV2FzQWlHZW5lcmF0ZWRcIiwgXCJlZGl0b3JIZWFkZXJcIiwgXCJvbkFJVG9uZVNlbGVjdFwiLCBcIm9uQUlBY3Rpb25SZXF1ZXN0XCIsIFwib25CdWlsZEFJUHJvbXB0XCJdKTtcclxuICAgIGNvbnN0IHRleHRTcGFjZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IFtjdXJyZW50VGV4dCwgc2V0Q3VycmVudFRleHRdID0gdXNlU3RhdGUoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICBjb25zdCBbaXNSZXBocmFzZUhpZ2hsaWdodGVkLCBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW3JlcGhyYXNlSGlnaGxpZ2h0Q291bnQsIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbaXNHZW5lcmF0aW5nLCBzZXRJc0dlbmVyYXRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2lzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGVdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2luc3RydWN0aW9uVGV4dCwgc2V0SW5zdHJ1Y3Rpb25UZXh0XSA9IHVzZVN0YXRlKCcnKTtcclxuICAgIGNvbnN0IFt0b25lQnlBY3Rpb24sIHNldFRvbmVCeUFjdGlvbl0gPSB1c2VTdGF0ZSh7fSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkJhc2VUZXh0LCBzZXRTdWdnZXN0aW9uQmFzZVRleHRdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkNhbmRpZGF0ZXMsIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzXSA9IHVzZVN0YXRlKFtdKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uSW5kZXgsIHNldFN1Z2dlc3Rpb25JbmRleF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGVdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBzdWdnZXN0aW9uU2Nyb2xsUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgcmVwaHJhc2VJZGxlUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgaGlnaGxpZ2h0UmVzZXRSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICAvKipcclxuICAgICAqIFByaW9yIGVsaWdpYmlsaXR5IGZvciByZXBocmFzZSBudWRnZSAobnVsbCA9IG5vdCBpbml0aWFsaXplZCkuXHJcbiAgICAgKiBNYXRjaGVzIHRoZSBjaGlwOiBub24tZW1wdHkgdHJpbSBhbmQgbGVuZ3RoIOKJpSBtaW4g4oCUIHNhbWUgYXMgYGFpSGVhZGVyQWN0aW9uc2AgZGlzYWJsZWQgcnVsZXMuXHJcbiAgICAgKi9cclxuICAgIGNvbnN0IHByZXZSZXBocmFzZUVsaWdpYmxlUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgZGVmZXJyZWRIdG1sUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgbGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIC8qKiBGaXJzdCBhY2NlcHQgYWZ0ZXIgZnVsbC1BSSBwcmVmaWxsIChgcHJlZmlsbFdhc0FpR2VuZXJhdGVkYCk7IGNsZWFyZWQgYWZ0ZXIgb25lIGFjY2VwdC4gKi9cclxuICAgIGNvbnN0IGluaXRpYWxBaVByZWZpbGxQaGFzZVJlZiA9IHVzZVJlZighIXByZWZpbGxXYXNBaUdlbmVyYXRlZCk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGluaXRpYWxBaVByZWZpbGxQaGFzZVJlZi5jdXJyZW50ID0gISFwcmVmaWxsV2FzQWlHZW5lcmF0ZWQ7XHJcbiAgICB9LCBbcHJlZmlsbFdhc0FpR2VuZXJhdGVkLCBlZGl0b3JJbnN0YW5jZUtleV0pO1xyXG4gICAgY29uc3QgYWN0aXZlQWN0aW9uUHJvbXB0cyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiByZXNvbHZlQWN0aW9uUHJvbXB0cyh0ZW1wbGF0ZVR5cGUsIHByb21wdE92ZXJyaWRlcywgcmVwaHJhc2VUb25lcyk7XHJcbiAgICB9LCBbcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCB0ZW1wbGF0ZVR5cGVdKTtcclxuICAgIGNvbnN0IGZpbHRlcmVkSW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGlmICghcXVlcnkpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucy5maWx0ZXIoKHN1Z2dlc3Rpb24pID0+IHN1Z2dlc3Rpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeSkpO1xyXG4gICAgfSwgW2luc3RydWN0aW9uU3VnZ2VzdGlvbnMsIGluc3RydWN0aW9uVGV4dF0pO1xyXG4gICAgY29uc3QgbWluQ2hhcnNCeUFjdGlvbiA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUyksIChhaUFjdGlvbk1pbkNoYXJzIHx8IHt9KSk7XHJcbiAgICB9LCBbYWlBY3Rpb25NaW5DaGFyc10pO1xyXG4gICAgY29uc3QgcmVwaHJhc2VNaW5DaGFycyA9IG1pbkNoYXJzQnlBY3Rpb25bQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV0gfHxcclxuICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV07XHJcbiAgICBjb25zdCBlbWl0QUlFdmVudCA9IHVzZUNhbGxiYWNrKChuYW1lLCBwYXlsb2FkKSA9PiB7XHJcbiAgICAgICAgb25BSUV2ZW50ID09PSBudWxsIHx8IG9uQUlFdmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSUV2ZW50KG5hbWUsIHBheWxvYWQpO1xyXG4gICAgfSwgW29uQUlFdmVudF0pO1xyXG4gICAgY29uc3Qgc2V0RWRpdG9yVGV4dCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIHNldEN1cnJlbnRUZXh0KChwcmV2KSA9PiAocHJldiA9PT0gbmV4dFRleHQgPyBwcmV2IDogbmV4dFRleHQpKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGVtaXRDaGFuZ2VXaXRoR3VhcmQgPSB1c2VDYWxsYmFjaygobmV4dFRleHQpID0+IHtcclxuICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGRlZmVycmVkSHRtbFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5leHRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIG5leHRUZXh0KTtcclxuICAgICAgICAgICAgZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChuZXh0VGV4dCkpO1xyXG4gICAgICAgICAgICB9LCAxNik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICB9LCBbb25DaGFuZ2VdKTtcclxuICAgIGNvbnN0IGNsZWFyU3VnZ2VzdGlvblNlc3Npb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0KG51bGwpO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtdKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUobnVsbCk7XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgPj0gTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXh0Q291bnQgPSByZXBocmFzZUhpZ2hsaWdodENvdW50ICsgMTtcclxuICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KG5leHRDb3VudCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSksIFN0cmluZyhuZXh0Q291bnQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKHRydWUpO1xyXG4gICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgIH0sIDEyMDApO1xyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5LCByZXBocmFzZUhpZ2hsaWdodENvdW50XSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHRSZWYgPSB1c2VSZWYodHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0KTtcclxuICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50ID0gdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0O1xyXG4gICAgZnVuY3Rpb24gaGFuZGxlT25DaGFuZ2UoZSkge1xyXG4gICAgICAgIGNvbnN0IHRleHQgPSBlLnRhcmdldC52YWx1ZTtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBzZXRDYXJldFBvc2l0aW9uKGNhcmV0UG9zKSB7XHJcbiAgICAgICAgY29uc3QgZWxlbSA9IHRleHRTcGFjZVJlZiA9PT0gbnVsbCB8fCB0ZXh0U3BhY2VSZWYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRleHRTcGFjZVJlZi5jdXJyZW50O1xyXG4gICAgICAgIGlmIChlbGVtICE9IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKGVsZW0uc2VsZWN0aW9uU3RhcnQpIHtcclxuICAgICAgICAgICAgICAgIGVsZW0uZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIGVsZW0uc2VsZWN0aW9uRW5kID0gY2FyZXRQb3M7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgZWxlbS5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIG9uQWN0aW9uU2VsZWN0KGFjdGlvblR5cGUpIHtcclxuICAgICAgICBjb25zdCB3aWxkQ2FyZCA9IFdpbGRDYXJkTWFwW2FjdGlvblR5cGVdO1xyXG4gICAgICAgIGlmICh3aWxkQ2FyZCAmJiB0ZXh0U3BhY2VSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHRleHQgfSA9IGluc2VydFRleHRBdEluZGV4KHdpbGRDYXJkLCBzdGFydCk7XHJcbiAgICAgICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uKHN0YXJ0ICsgMSk7XHJcbiAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBhZGRUZXh0T3JXcmFwKHdpbGRDYXJkKTtcclxuICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBvbkVtb2ppQWRkaXRpb24oZW1vamkpIHtcclxuICAgICAgICBjb25zdCB7IHRleHQgfSA9IGFkZFRleHQoZW1vamkpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhZGRUZXh0T3JXcmFwKHRleHRUb0FkZCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgbGV0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICBpZiAodGV4dFNwYWNlUmVmLmN1cnJlbnQgJiYgdGV4dFRvQWRkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgY29uc3Qgd2lsZENhcmQgPSB0ZXh0VG9BZGQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICAvKiogbm90aGluZyBpcyBzZWxlY3RlZCAqL1xyXG4gICAgICAgICAgICAgICAgLyoqIHNvIGFwcGVuZCB0aGUgd2lsZGNhcmQgYXQgdGhlIGVuZCAqL1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFkZFRleHQod2lsZENhcmQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGV4dCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLndyYXBwV2lsZGNhcmQoc3RhcnQsIGVuZCwgd2lsZENhcmQsIHRleHQpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaHRtbCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwodGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdGV4dCwgaHRtbCB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IHRleHQ6IHRleHQsIGh0bWw6IHRleHQgfTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZFRleHQodGV4dFRvQWRkKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgaWYgKHRleHRTcGFjZVJlZi5jdXJyZW50ICYmIHRleHRUb0FkZCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zZXJ0VGV4dEF0SW5kZXgodGV4dFRvQWRkLCBzdGFydCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dDogdGV4dCwgaHRtbDogdGV4dCB9O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gaW5zZXJ0VGV4dEF0SW5kZXgodGV4dFRvQWRkLCBpbmRleCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgbGV0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICB0ZXh0ID0gdGV4dC5zbGljZSgwLCBpbmRleCkgKyB0ZXh0VG9BZGQgKyB0ZXh0LnNsaWNlKGluZGV4KTtcclxuICAgICAgICBjb25zdCBodG1sID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTCh0ZXh0KTtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgIHJldHVybiB7IHRleHQsIGh0bWwgfTtcclxuICAgIH1cclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8ICFlZGl0b3JJbnN0YW5jZUtleSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNhY2hlZCA9IE51bWJlcihzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGdldEhpZ2hsaWdodFN0b3JhZ2VLZXkoZWRpdG9ySW5zdGFuY2VLZXkpKSB8fFxyXG4gICAgICAgICAgICAnMCcpO1xyXG4gICAgICAgIGlmICghTnVtYmVyLmlzTmFOKGNhY2hlZCkpIHtcclxuICAgICAgICAgICAgc2V0UmVwaHJhc2VIaWdobGlnaHRDb3VudChjYWNoZWQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtlZGl0b3JJbnN0YW5jZUtleV0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBjb25zdCBlbGlnaWJsZSA9ICEhY3VycmVudFRleHQudHJpbSgpICYmIGN1cnJlbnRUZXh0Lmxlbmd0aCA+PSByZXBocmFzZU1pbkNoYXJzO1xyXG4gICAgICAgIGlmIChwcmV2UmVwaHJhc2VFbGlnaWJsZVJlZi5jdXJyZW50ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHByZXZSZXBocmFzZUVsaWdpYmxlUmVmLmN1cnJlbnQgPSBlbGlnaWJsZTtcclxuICAgICAgICAgICAgaWYgKGVsaWdpYmxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50KCk7XHJcbiAgICAgICAgICAgICAgICB9LCBSRVBIUkFTRV9JRExFX01TKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZWxpZ2libGUpIHtcclxuICAgICAgICAgICAgcHJldlJlcGhyYXNlRWxpZ2libGVSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjcm9zc2VkVGhyZXNob2xkID0gIXByZXZSZXBocmFzZUVsaWdpYmxlUmVmLmN1cnJlbnQgJiYgZWxpZ2libGU7XHJcbiAgICAgICAgcHJldlJlcGhyYXNlRWxpZ2libGVSZWYuY3VycmVudCA9IHRydWU7XHJcbiAgICAgICAgaWYgKGNyb3NzZWRUaHJlc2hvbGQpIHtcclxuICAgICAgICAgICAgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0UmVmLmN1cnJlbnQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50KCk7XHJcbiAgICAgICAgfSwgUkVQSFJBU0VfSURMRV9NUyk7XHJcbiAgICB9LCBbY3VycmVudFRleHQsIHJlcGhyYXNlTWluQ2hhcnNdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGFjdGl2ZUNhbmRpZGF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzW3N1Z2dlc3Rpb25JbmRleF0gfHwgJyc7XHJcbiAgICBjb25zdCBzdWdnZXN0aW9uQmFzZUh0bWwgPSB1c2VNZW1vKCgpID0+IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwoc3VnZ2VzdGlvbkJhc2VUZXh0IHx8ICcnKSwgW3N1Z2dlc3Rpb25CYXNlVGV4dF0pO1xyXG4gICAgY29uc3QgYWN0aXZlQ2FuZGlkYXRlSHRtbCA9IHVzZU1lbW8oKCkgPT4gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChhY3RpdmVDYW5kaWRhdGUpLCBbYWN0aXZlQ2FuZGlkYXRlXSk7XHJcbiAgICBjb25zdCBjYW5SZWdlbmVyYXRlID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDwgTUFYX1NVR0dFU1RJT05TO1xyXG4gICAgY29uc3Qgc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID0gISFzdWdnZXN0aW9uQmFzZVRleHQgJiYgc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoID4gMDtcclxuICAgIGNvbnN0IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8IHN1Z2dlc3Rpb25JbmRleCA8PSAwO1xyXG4gICAgY29uc3QgaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDw9IDEgfHxcclxuICAgICAgICBzdWdnZXN0aW9uSW5kZXggPj0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBub2RlID0gc3VnZ2VzdGlvblNjcm9sbFJlZi5jdXJyZW50O1xyXG4gICAgICAgIGlmICghbm9kZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIG5vZGUuc2Nyb2xsVG9wID0gbm9kZS5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9LCBbYWN0aXZlQ2FuZGlkYXRlLCBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24sIGlzR2VuZXJhdGluZ10pO1xyXG4gICAgY29uc3QgZXhlY3V0ZUFJQWN0aW9uID0gdXNlQ2FsbGJhY2soKGFjdGlvblR5cGUsIHJlZ2VuZXJhdGVFeGlzdGluZyA9IGZhbHNlLCBpbnN0cnVjdGlvbk92ZXJyaWRlLCB0b25lT3ZlcnJpZGVJZCwgYWN0aW9uVmFyaWFudCA9IEFJQWN0aW9uVmFyaWFudC5ERUZBVUxUKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICB2YXIgX2IsIF9jLCBfZDtcclxuICAgICAgICBpZiAoIW9uQUlBY3Rpb25SZXF1ZXN0ICYmXHJcbiAgICAgICAgICAgICFhcGlBZGFwdGVyICYmXHJcbiAgICAgICAgICAgICghcmVxdWVzdEV4ZWN1dG9yIHx8ICFiYXNlVXJsKSkge1xyXG4gICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoJ0FJIGNvbmZpZ3VyYXRpb24gbWlzc2luZycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY3VycmVudFRleHQudHJpbSgpKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbWluQ2hhcnNGb3JBY3Rpb24gPSBtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICA1MDtcclxuICAgICAgICBpZiAoY3VycmVudFRleHQubGVuZ3RoIDwgbWluQ2hhcnNGb3JBY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpZiAoaXNHZW5lcmF0aW5nKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKHJlZ2VuZXJhdGVFeGlzdGluZyAmJiAhY2FuUmVnZW5lcmF0ZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGJhc2VDb25maWcgPSBhY3RpdmVBY3Rpb25Qcm9tcHRzW2FjdGlvblR5cGVdO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UgJiZcclxuICAgICAgICAgICAgdGVtcGxhdGVUeXBlID09PSAndXRpbGl0eScgJiZcclxuICAgICAgICAgICAgYWN0aW9uVmFyaWFudCA9PT0gQUlBY3Rpb25WYXJpYW50LlJFUEhSQVNFXHJcbiAgICAgICAgICAgID8gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBiYXNlQ29uZmlnKSwgeyBsYWJlbDogJ1JlcGhyYXNlJywgYmFzZVByb21wdDogVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgfSkgOiBiYXNlQ29uZmlnO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVG9uZUlkID0gdG9uZU92ZXJyaWRlSWQgfHxcclxuICAgICAgICAgICAgdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIGNvbmZpZy5kZWZhdWx0VG9uZUlkIHx8XHJcbiAgICAgICAgICAgICgoX2MgPSAoX2IgPSBjb25maWcudG9uZXMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYlswXSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmlkKTtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFRvbmUgPSAoX2QgPSBjb25maWcudG9uZXMpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5maW5kKCh0b25lKSA9PiB0b25lLmlkID09PSBzZWxlY3RlZFRvbmVJZCk7XHJcbiAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgPSBpbnN0cnVjdGlvbk92ZXJyaWRlICE9PSB1bmRlZmluZWRcclxuICAgICAgICAgICAgPyBpbnN0cnVjdGlvbk92ZXJyaWRlXHJcbiAgICAgICAgICAgIDogaW5zdHJ1Y3Rpb25UZXh0O1xyXG4gICAgICAgIGNvbnN0IHByb21wdCA9IChvbkJ1aWxkQUlQcm9tcHQgPT09IG51bGwgfHwgb25CdWlsZEFJUHJvbXB0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkJ1aWxkQUlQcm9tcHQoe1xyXG4gICAgICAgICAgICBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICBhY3Rpb25WYXJpYW50LFxyXG4gICAgICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICBjb25maWcsXHJcbiAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgIHRvbmVMYWJlbDogc2VsZWN0ZWRUb25lID09PSBudWxsIHx8IHNlbGVjdGVkVG9uZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZWN0ZWRUb25lLmxhYmVsLFxyXG4gICAgICAgICAgICBpbnN0cnVjdGlvblRleHQ6IGluc3RydWN0aW9uRm9yUHJvbXB0IHx8IHVuZGVmaW5lZCxcclxuICAgICAgICB9KSkgfHxcclxuICAgICAgICAgICAgYnVpbGRBY3Rpb25Qcm9tcHQoe1xyXG4gICAgICAgICAgICAgICAgY29uZmlnLFxyXG4gICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZCxcclxuICAgICAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIHNldElzR2VuZXJhdGluZyh0cnVlKTtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfYWN0aW9uX3RyaWdnZXJlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG9uQUlBY3Rpb25SZXF1ZXN0XHJcbiAgICAgICAgICAgICAgICA/IHlpZWxkIG9uQUlBY3Rpb25SZXF1ZXN0KHtcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblZhcmlhbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIDogeWllbGQgcmVxdWVzdEFJU3VnZ2VzdGlvbih7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgYmFzZVVybCxcclxuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgICAgIGludGVudCxcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICAgICAgICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZydcclxuICAgICAgICAgICAgICAgID8gcmVzdWx0LnRyaW0oKVxyXG4gICAgICAgICAgICAgICAgOiAoKHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3VsdC5ib2R5KSB8fCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKCFyZWdlbmVyYXRlRXhpc3RpbmcpIHtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25CYXNlVGV4dChjdXJyZW50VGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShhY3Rpb25UeXBlKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtjYW5kaWRhdGVdKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcygocHJldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IFsuLi5wcmV2LCBjYW5kaWRhdGVdLnNsaWNlKDAsIE1BWF9TVUdHRVNUSU9OUyk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgobmV4dC5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdGYWlsZWQgdG8gZ2VuZXJhdGUgQUkgc3VnZ2VzdGlvbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgc2V0SXNHZW5lcmF0aW5nKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9KSwgW1xyXG4gICAgICAgIHJlcXVlc3RFeGVjdXRvcixcclxuICAgICAgICBiYXNlVXJsLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBjYW5SZWdlbmVyYXRlLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGluc3RydWN0aW9uVGV4dCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIGVuZHBvaW50UGF0aCxcclxuICAgICAgICBhcGlBZGFwdGVyLFxyXG4gICAgICAgIGludGVudCxcclxuICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgIG9uRXJyb3IsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgICAgICBvbkFJQWN0aW9uUmVxdWVzdCxcclxuICAgICAgICBvbkJ1aWxkQUlQcm9tcHQsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFhY3RpdmVDYW5kaWRhdGUgfHwgIXN1Z2dlc3Rpb25CYXNlVGV4dCB8fCAhc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2FjY2VwdGVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGluSW5pdGlhbEFpUGhhc2UgPSBpbml0aWFsQWlQcmVmaWxsUGhhc2VSZWYuY3VycmVudDtcclxuICAgICAgICBjb25zdCB0YWdQYXlsb2FkID0gY29tcHV0ZUFpVGFnT25BY2NlcHQoe1xyXG4gICAgICAgICAgICBiYXNlbGluZVRleHQ6IHN1Z2dlc3Rpb25CYXNlVGV4dCxcclxuICAgICAgICAgICAgYWNjZXB0ZWRUZXh0OiBhY3RpdmVDYW5kaWRhdGUsXHJcbiAgICAgICAgICAgIGluaXRpYWxBaVByZWZpbGxQaGFzZTogaW5Jbml0aWFsQWlQaGFzZSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoaW5Jbml0aWFsQWlQaGFzZSkge1xyXG4gICAgICAgICAgICBpbml0aWFsQWlQcmVmaWxsUGhhc2VSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvbkFJVGFnQ29tcHV0ZWQgPT09IG51bGwgfHwgb25BSVRhZ0NvbXB1dGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVGFnQ29tcHV0ZWQodGFnUGF5bG9hZCk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGFjdGl2ZUNhbmRpZGF0ZSxcclxuICAgICAgICBzdWdnZXN0aW9uQmFzZVRleHQsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCxcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkLFxyXG4gICAgICAgIGVtaXRBSUV2ZW50LFxyXG4gICAgICAgIHRlbXBsYXRlSWQsXHJcbiAgICAgICAgb25BSVRhZ0NvbXB1dGVkLFxyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2Rpc2NhcmRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uKCk7XHJcbiAgICB9LCBbY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiwgZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKChyYXRpbmcpID0+IHtcclxuICAgICAgICBpZiAoIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2ZlZWRiYWNrX3N1Ym1pdHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICAgICAgcmF0aW5nLFxyXG4gICAgICAgICAgICBjYW5kaWRhdGVfaW5kZXg6IHN1Z2dlc3Rpb25JbmRleCArIDEsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LCBbZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzdWdnZXN0aW9uSW5kZXgsIHRlbXBsYXRlSWRdKTtcclxuICAgIGNvbnN0IGFpSGVhZGVyQWN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucylcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBlbmFibGVkQUlBY3Rpb25zLm1hcCgoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICAgICAgY29uc3QgYWN0aW9uQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICAgICAgY29uc3QgdG9uZUlkID0gdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICBhY3Rpb25Db25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAgICAgKChfYiA9IChfYSA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzBdKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWQpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBhY3Rpb25Db25maWcubGFiZWwsXHJcbiAgICAgICAgICAgICAgICBpc1ByaW1hcnk6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBpc0dlbmVyYXRpbmcgJiYgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHRlZDogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVwaHJhc2VIaWdobGlnaHRlZCxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhY3VycmVudFRleHQudHJpbSgpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQubGVuZ3RoIDxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG1pbkNoYXJzQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNTApIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgaXNHZW5lcmF0aW5nIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSksXHJcbiAgICAgICAgICAgICAgICBzaG93VG9uZURyb3Bkb3duOiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgICAgICAgICAgISEoKF9jID0gYWN0aW9uQ29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSxcclxuICAgICAgICAgICAgICAgIHRvbmVzOiBhY3Rpb25Db25maWcudG9uZXMsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZDogdG9uZUlkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGVuYWJsZWRBSUFjdGlvbnMsXHJcbiAgICAgICAgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMsXHJcbiAgICAgICAgYWN0aXZlQWN0aW9uUHJvbXB0cyxcclxuICAgICAgICB0b25lQnlBY3Rpb24sXHJcbiAgICAgICAgaXNHZW5lcmF0aW5nLFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbixcclxuICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgIF0pO1xyXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBhZGRUZXh0T3JXcmFwLFxyXG4gICAgICAgICAgICBhZGRUZXh0LFxyXG4gICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24sXHJcbiAgICAgICAgfTtcclxuICAgIH0sIFthZGRUZXh0T3JXcmFwLCBhZGRUZXh0LCBjdXJyZW50VGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoaW5wdXRWYWx1ZSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChpbnB1dFZhbHVlIHx8ICcnKTtcclxuICAgIH0sIFtpbnB1dFZhbHVlLCBzZXRFZGl0b3JUZXh0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICghbGltaXQgfHwgIW9uRXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBuZXh0RXJyb3IgPSBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdCA/IExJTUlUX1JFQUNIRUQgOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiAnJztcclxuICAgICAgICBpZiAobGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID09PSBuZXh0RXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBsYXN0RW1pdHRlZEVkaXRvckVycm9yUmVmLmN1cnJlbnQgPSBuZXh0RXJyb3I7XHJcbiAgICAgICAgb25FcnJvcihuZXh0RXJyb3IpO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCBlcnJvciwgbGltaXQsIG9uRXJyb3JdKTtcclxuICAgIHJldHVybiAoX2pzeHMoT3V0ZXJDb250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4cyhFZGl0b3JGb290ZXJSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvckZvb3RlclRpdGxlLCB7IGNoaWxkcmVuOiBlZGl0b3JIZWFkZXIgPyAoX2pzeChUaXRsZVNtYWxsLCBPYmplY3QuYXNzaWduKHsgXCJkYXRhLXRlc3RcIjogXCJib2R5LXRleHQtZm9yLWVkaXQtdGVtcGxhdGVcIiB9LCB7IGNoaWxkcmVuOiBlZGl0b3JIZWFkZXIgfSkpKSA6IG51bGwgfSksIF9qc3hzKEVkaXRvckZvb3RlclJpZ2h0LCB7IGNoaWxkcmVuOiBbZXJyb3IgJiYgZXJyb3IgIT09IExJTUlUX1JFQUNIRUQgPyAoX2pzeHMoX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBbX2pzeChJbmZvSWNvbiwgeyB3aWR0aDogMTYsIGhlaWdodDogMTYsIGNvbG9yOiBDT0xPUlMuY29udGVudC5uZWdhdGl2ZSB9KSwgX2pzeChCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IGNvbG9yOiBDT0xPUlMuY29udGVudC5uZWdhdGl2ZSB9LCB7IGNoaWxkcmVuOiBlcnJvciB9KSldIH0pKSA6IG51bGwsIGxpbWl0ID8gKF9qc3hzKEJvZHlDYXB0aW9uLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IGVycm9yID09PSBMSU1JVF9SRUFDSEVEIHx8IGN1cnJlbnRUZXh0Lmxlbmd0aCA+IGxpbWl0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IENPTE9SUy5jb250ZW50Lm5lZ2F0aXZlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IFtjdXJyZW50VGV4dC5sZW5ndGgsIFwiL1wiLCBsaW1pdF0gfSkpKSA6IG51bGxdIH0pXSB9KSwgX2pzeHMoQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgaXNFcnJvcjogISFlcnJvciB9LCB7IGNoaWxkcmVuOiBbc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID8gKF9qc3hzKFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgcmVmOiBzdWdnZXN0aW9uU2Nyb2xsUmVmIH0sIHsgY2hpbGRyZW46IFtfanN4KFN1Z2dlc3Rpb25CYXNlbGluZVRleHQsIHsgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHsgX19odG1sOiBzdWdnZXN0aW9uQmFzZUh0bWwgfSB9KSwgaXNHZW5lcmF0aW5nID8gKF9qc3goU3VnZ2VzdGlvbkNhbmRpZGF0ZVRleHQsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtYnVzeVwiOiBcInRydWVcIiB9LCB7IGNoaWxkcmVuOiBfanN4cyhTdWdnZXN0aW9uQ2FuZGlkYXRlU2tlbGV0b24sIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiODQlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjY4JVwiIH0pXSB9KSB9KSkpIDogKF9qc3goU3VnZ2VzdGlvbkNhbmRpZGF0ZVRleHQsIHsgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19odG1sOiBhY3RpdmVDYW5kaWRhdGVIdG1sLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSkpLCBfanN4cyhTdWdnZXN0aW9uQ29udHJvbHNSb3csIHsgY2hpbGRyZW46IFtfanN4cyhTdWdnZXN0aW9uQ291bnRlciwgeyBjaGlsZHJlbjogW3N1Z2dlc3Rpb25JbmRleCArIDEsIFwiL1wiLCBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGhdIH0pLCBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUHJldmlvdXMgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBkaXNhYmxlZDogaXNQcmV2U3VnZ2VzdGlvbkRpc2FibGVkLCBvbkNsaWNrOiAoKSA9PiBzZXRTdWdnZXN0aW9uSW5kZXgoKGlkeCkgPT4gTWF0aC5tYXgoMCwgaWR4IC0gMSkpIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hldnJvbkxlZnRJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSksIF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiTGlrZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUZlZWRiYWNrKCdsaWtlJykgfSwgeyBjaGlsZHJlbjogX2pzeChUaHVtYnNVcEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzbGlrZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkRpc2xpa2Ugc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiBoYW5kbGVGZWVkYmFjaygnZGlzbGlrZScpIH0sIHsgY2hpbGRyZW46IF9qc3goVGh1bWJzRG93bkljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIGNhblJlZ2VuZXJhdGUgPyAoX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogaXNHZW5lcmF0aW5nID8gJ1JlZ2VuZXJhdGluZ+KApicgOiAnUmVnZW5lcmF0ZScsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25SZWdlbmVyYXRlQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIFwiYXJpYS1idXN5XCI6IGlzR2VuZXJhdGluZywgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzR2VuZXJhdGluZywgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3VnZ2VzdGlvbkFjdGlvblR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IGlzR2VuZXJhdGluZyA/IChfanN4KFJlZ2VuZXJhdGVJY29uU2hpbW1lciwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUgfSkpIDogKF9qc3goUmV3aW5kSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkpIH0pKSB9KSkpIDogbnVsbCwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNjYXJkXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiQWNjZXB0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogaGFuZGxlQWNjZXB0U3VnZ2VzdGlvbiB9LCB7IGNoaWxkcmVuOiBfanN4KENoZWNrSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKV0gfSldIH0pKSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFzdGVkVGV4dCA9IGUuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFzdGVkVGV4dC5sZW5ndGggPiBMQVJHRV9JTlBVVF9USFJFU0hPTEQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWwgPSB0ZXh0U3BhY2VSZWYuY3VycmVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IChfYSA9IGVsID09PSBudWxsIHx8IGVsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlbC5zZWxlY3Rpb25TdGFydCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSAoX2IgPSBlbCA9PT0gbnVsbCB8fCBlbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogZWwuc2VsZWN0aW9uRW5kKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcmVmZXIgbGl2ZSBET00gdmFsdWUg4oCUIGBjdXJyZW50VGV4dGAgY2FuIGxhZyB0aGUgdGV4dGFyZWEgZm9yIGJpZyBwYXN0ZXMuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFzZSA9IChfYyA9IGVsID09PSBudWxsIHx8IGVsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlbC52YWx1ZSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dFRleHQgPSBiYXNlLnNsaWNlKDAsIHN0YXJ0KSArIHBhc3RlZFRleHQgKyBiYXNlLnNsaWNlKGVuZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dChuZXh0VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChuZXh0VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FyZXQgPSBzdGFydCArIHBhc3RlZFRleHQubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YS5zZXRTZWxlY3Rpb25SYW5nZShjYXJldCwgY2FyZXQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChfYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlIGludmFsaWQgcmFuZ2UgaW4gZWRnZSBicm93c2Vyc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiAoX2pzeChXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIHsgYWN0aW9uczogYWN0aW9ucywgcmVmOiB0ZXh0U3BhY2VSZWYsIG9uQWN0aW9uU2VsZWN0OiBvbkFjdGlvblNlbGVjdCwgUmlnaHRDb21wb25lbnQ6IFJpZ2h0Q29tcG9uZW50LCByaWdodEFjdGlvbnNEaXNhYmxlZDogc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uIHx8IGlzR2VuZXJhdGluZywgb25FbW9qaUNsaWNrOiBvbkVtb2ppQWRkaXRpb24sIGFpQWN0aW9uczogYWlIZWFkZXJBY3Rpb25zLCBkaXNhYmxlQWxsQWN0aW9uczogc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uIHx8IGlzR2VuZXJhdGluZywgaW5zdHJ1Y3Rpb25BY3RpdmU6IGlzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIG9uQUlJbnN0cnVjdGlvbnNDbGljazogKCkgPT4gc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSh0cnVlKSwgb25BSVRvbmVDaGFuZ2U6IChhY3Rpb25UeXBlLCB0b25lSWQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRvbmVCeUFjdGlvbigocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW2FjdGlvblR5cGVdOiB0b25lSWQgfSkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQUlUb25lU2VsZWN0ID09PSBudWxsIHx8IG9uQUlUb25lU2VsZWN0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVG9uZVNlbGVjdChhY3Rpb25UeXBlLCB0b25lSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdG9uZUlkLCBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIG9uQUlBY3Rpb25DbGljazogKGFjdGlvblR5cGUsIGFjdGlvblZhcmlhbnQgPSBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNhbWUgYWN0aW9uIHNob3VsZCBub3QgcmV0cmlnZ2VyIGZyb20gY2hpcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnZW5lcmF0ZSBpcyBvbmx5IHZpYSBleHBsaWNpdCByZWdlbmVyYXRlIGNvbnRyb2wuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmV3IGFjdGlvbiBzdGFydHMgYSBmcmVzaCBzdWdnZXN0aW9uIHNlc3Npb24uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFjdGlvblZhcmlhbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFjdGlvblZhcmlhbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IH0pKV0gfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuZXhwb3J0IHsgQUlfVEFHX0NIQU5HRV9SQVRJT19USFJFU0hPTEQsIGNvbXB1dGVBaVRhZ09uQWNjZXB0LCBsZXZlbnNodGVpbkRpc3RhbmNlLCB9IGZyb20gJy4vYWkvYWlUYWcnO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1XaGF0c0FwcFRleHRFZGl0b3IuanMubWFwIl19 */")),w=a.default("button","production"===process.env.NODE_ENV?{target:"ea7i3sh10"}:{target:"ea7i3sh10",label:"SuggestionIconButton"})("border:0;background:transparent;padding:6px;border-radius:6px;display:inline-flex;align-items:center;justify-content:center;cursor:pointer;color:",R.COLORS.content.primary,";transition:background-color 0.12s ease;:not(:disabled):hover{background-color:",R.COLORS.surface.hovered,";}:disabled{opacity:0.35;cursor:not-allowed;}"+("production"===process.env.NODE_ENV?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBMkYyQyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIEZyYWdtZW50IGFzIF9GcmFnbWVudCwganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZXdpbmRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3Jld2luZC5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzRG93bkljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvdGh1bWJzX2Rvd24uc3ZnJztcclxuaW1wb3J0IFRodW1ic1VwSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfdXAuc3ZnJztcclxuaW1wb3J0IHsgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9CYXNlV2hhdHNhcHBDb250ZW50TGFuZy5oZWxwZXJcIjtcclxuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUsIH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgeyBDT0xPUlMgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzL1RoZW1lXCI7XHJcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICcuLi90b29sdGlwcy9Ub29sdGlwJztcclxuaW1wb3J0IHsgQm9keUNhcHRpb24sIFRpdGxlU21hbGwgfSBmcm9tICcuLi9UeXBvZ3JhcGh5U3R5bGUnO1xyXG5pbXBvcnQgeyBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlMsIERFRkFVTFRfSU5TVFJVQ1RJT05fU1VHR0VTVElPTlMsIHJlc29sdmVBY3Rpb25Qcm9tcHRzLCB9IGZyb20gJy4vYWkvYWN0aW9uUmVnaXN0cnknO1xyXG5pbXBvcnQgeyBjb21wdXRlQWlUYWdPbkFjY2VwdCB9IGZyb20gJy4vYWkvYWlUYWcnO1xyXG5pbXBvcnQgeyBidWlsZEFjdGlvblByb21wdCwgcmVxdWVzdEFJU3VnZ2VzdGlvbiB9IGZyb20gJy4vYWkvYXBpJztcclxuaW1wb3J0IHsgQ29udGFpbmVyLCBFZGl0b3JGb290ZXJSaWdodCwgRWRpdG9yRm9vdGVyUm93LCBFZGl0b3JGb290ZXJUaXRsZSwgT3V0ZXJDb250YWluZXIsIFRleHRTcGFjZSwgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUFjdGlvblZhcmlhbnQsIEFJRWRpdG9yQWN0aW9uVHlwZXMsIEVkaXRvckFjdGlvblR5cGVzLCBXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIH0gZnJvbSAnLi9XaGF0c0FwcFRleHRFZGl0b3JIZWFkZXInO1xyXG5jb25zdCBMSU1JVF9SRUFDSEVEID0gJ0NoYXJhY3RlciBsaW1pdCByZWFjaGVkJztcclxuY29uc3QgUkVQSFJBU0VfSURMRV9NUyA9IDMwMDA7XHJcbmNvbnN0IE1BWF9SRVBIUkFTRV9ISUdITElHSFRTID0gNTtcclxuY29uc3QgTUFYX1NVR0dFU1RJT05TID0gMztcclxuY29uc3QgTEFSR0VfSU5QVVRfVEhSRVNIT0xEID0gMTIwMDtcclxuY29uc3QgVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgPSAnUmVwaHJhc2UgdGhpcyBXaGF0c0FwcCB1dGlsaXR5IHRlbXBsYXRlIHRvIGltcHJvdmUgY2xhcml0eSBhbmQgcmVhZGFiaWxpdHkgd2hpbGUgcHJlc2VydmluZyB2YXJpYWJsZXMsIGludGVudCwgYW5kIGNvbXBsaWFuY2UuJztcclxuY29uc3Qgc2tlbGV0b25QdWxzZSA9IGtleWZyYW1lcyBgXG5cdDAlIHsgb3BhY2l0eTogMC41NTsgfVxuXHQ1MCUgeyBvcGFjaXR5OiAxOyB9XG5cdDEwMCUgeyBvcGFjaXR5OiAwLjU1OyB9XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxNHB4IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogMTBweDtcblx0bWluLWhlaWdodDogMTUwcHg7XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkxpbmUgPSBzdHlsZWQuZGl2IGBcblx0aGVpZ2h0OiAxNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdHdpZHRoOiAkeyhwcm9wcykgPT4gcHJvcHMud2lkdGh9O1xuXHRiYWNrZ3JvdW5kOiAjZWNlY2VmO1xuXHRhbmltYXRpb246ICR7c2tlbGV0b25QdWxzZX0gMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHRtYXgtaGVpZ2h0OiAyNjBweDtcblx0b3ZlcmZsb3cteTogc2Nyb2xsO1xuXHRzY3JvbGxiYXItd2lkdGg6IHRoaW47XG5cdHNjcm9sbGJhci1jb2xvcjogI2M4YzhjZiB0cmFuc3BhcmVudDtcblx0Ojotd2Via2l0LXNjcm9sbGJhciB7XG5cdFx0d2lkdGg6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcblx0XHRiYWNrZ3JvdW5kOiAjYzhjOGNmO1xuXHRcdGJvcmRlci1yYWRpdXM6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcblx0XHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0fVxuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkJhc2VsaW5lVGV4dCA9IHN0eWxlZC5kaXYgYFxuXHR0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25DYW5kaWRhdGVUZXh0ID0gc3R5bGVkLmRpdiBgXG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkNhbmRpZGF0ZVNrZWxldG9uID0gc3R5bGVkLmRpdiBgXG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHR3aWR0aDogMTAwJTtcblx0bWluLWhlaWdodDogNDBweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db250cm9sc1JvdyA9IHN0eWxlZC5kaXYgYFxuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDZweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db3VudGVyID0gc3R5bGVkLnNwYW4gYFxuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkljb25CdXR0b24gPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0cGFkZGluZzogNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdGRpc3BsYXk6IGlubGluZS1mbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0dHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjEycyBlYXNlO1xuXHQ6bm90KDpkaXNhYmxlZCk6aG92ZXIge1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICR7Q09MT1JTLnN1cmZhY2UuaG92ZXJlZH07XG5cdH1cblx0OmRpc2FibGVkIHtcblx0XHRvcGFjaXR5OiAwLjM1O1xuXHRcdGN1cnNvcjogbm90LWFsbG93ZWQ7XG5cdH1cbmA7XHJcbi8qKiBSZWdlbmVyYXRlIHN0YXlzIGZ1bGwgb3BhY2l0eSB3aGlsZSBkaXNhYmxlZCBzbyB0aGUgbG9hZGluZyBzaGltbWVyIHN0YXlzIHZpc2libGUgKHNhbWUgcHVsc2UgYXMgZWRpdG9yIHNrZWxldG9uKS4gKi9cclxuY29uc3QgU3VnZ2VzdGlvblJlZ2VuZXJhdGVCdXR0b24gPSBzdHlsZWQoU3VnZ2VzdGlvbkljb25CdXR0b24pIGBcblx0OmRpc2FibGVkIHtcblx0XHRvcGFjaXR5OiAxO1xuXHRcdGN1cnNvcjogd2FpdDtcblx0fVxuYDtcclxuY29uc3QgUmVnZW5lcmF0ZUljb25TaGltbWVyID0gc3R5bGVkLmRpdiBgXG5cdHdpZHRoOiAxNHB4O1xuXHRoZWlnaHQ6IDE0cHg7XG5cdGJvcmRlci1yYWRpdXM6IDRweDtcblx0YmFja2dyb3VuZDogI2VjZWNlZjtcblx0ZmxleC1zaHJpbms6IDA7XG5cdGFuaW1hdGlvbjogJHtza2VsZXRvblB1bHNlfSAxLjFzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xuYDtcclxuLyoqIFNhbWUgYm90dG9tIHRvb2xiYXIgc2xvdCBhcyBgV2hhdHNBcHBUZXh0RWRpdG9ySGVhZGVyYCDigJQgcmVwbGFjZXMgdGhlIGZ1bGwgaWNvbi9BSSBwYW5lbCB3aGlsZSBvcGVuLiAqL1xyXG5jb25zdCBJbnN0cnVjdGlvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblx0cGFkZGluZzogOHB4IDEycHg7XG5cdGdhcDogMTBweDtcblx0Ym9yZGVyLXJhZGl1czogMCAwIDRweCA0cHg7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXRSb3cgPSBzdHlsZWQuZGl2IGBcblx0Ym9yZGVyOiAxcHggc29saWQgI2Y1YTRjMDtcblx0Ym9yZGVyLXJhZGl1czogMTBweDtcblx0cGFkZGluZzogOHB4IDEwcHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbklucHV0ID0gc3R5bGVkLmlucHV0IGBcblx0ZmxleDogMTtcblx0bWluLXdpZHRoOiAwO1xuXHRib3JkZXI6IDA7XG5cdG91dGxpbmU6IG5vbmU7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25BY3Rpb25zID0gc3R5bGVkLmRpdiBgXG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQ2FuY2VsID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnNlY29uZGFyeX07XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0Zm9udC13ZWlnaHQ6IDUwMDtcblx0cGFkZGluZzogMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbXByb3ZlID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMXB4IHNvbGlkICM1ZDNhNzI7XG5cdGNvbG9yOiAjNWQzYTcyO1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0Ym9yZGVyLXJhZGl1czogOHB4O1xuXHRwYWRkaW5nOiA4cHggMTRweDtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRsaW5lLWhlaWdodDogMS4xO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0ID0gc3R5bGVkLmRpdiBgXG5cdG1hcmdpbi10b3A6IDEwcHg7XG5cdGJvcmRlci1yYWRpdXM6IDEycHg7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3gtc2hhZG93OiAwIDZweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkJ1dHRvbiA9IHN0eWxlZC5idXR0b24gYFxuXHR3aWR0aDogMTAwJTtcblx0Ym9yZGVyOiAwO1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgJHtDT0xPUlMuc3Ryb2tlLnByaW1hcnl9O1xuXHRiYWNrZ3JvdW5kOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyNlNWYzZTgnIDogJ3RyYW5zcGFyZW50Jyl9O1xuXHRjb2xvcjogJHsocHJvcHMpID0+IChwcm9wcy5zZWxlY3RlZCA/ICcjMWU2YjM0JyA6IENPTE9SUy5jb250ZW50LnByaW1hcnkpfTtcblx0dGV4dC1hbGlnbjogbGVmdDtcblx0cGFkZGluZzogMTJweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjI7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0OmZpcnN0LW9mLXR5cGUge1xuXHRcdGJvcmRlci10b3A6IDA7XG5cdH1cbmA7XHJcbmNvbnN0IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nID0gbmV3IEJhc2VXaGF0c2FwcENvbnRlbnRMYW5nSGVscGVyKCk7XHJcbmNvbnN0IFdpbGRDYXJkTWFwID0ge1xyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLkJPTERdOiAnKicsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuSVRBTElDXTogJ18nLFxyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLlNUUklLRVRIUk9VR0hdOiAnficsXHJcbn07XHJcbmZ1bmN0aW9uIGdldEhpZ2hsaWdodFN0b3JhZ2VLZXkoZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgIHJldHVybiBgd2hhdHNhcHAtZWRpdG9yLXJlcGhyYXNlLWhpZ2hsaWdodC0ke2VkaXRvckluc3RhbmNlS2V5IHx8ICdkZWZhdWx0J31gO1xyXG59XHJcbmV4cG9ydCBjb25zdCBXaGF0c0FwcFRleHRFZGl0b3IgPSBSZWFjdC5mb3J3YXJkUmVmKChfYSwgcmVmKSA9PiB7XHJcbiAgICB2YXIgeyBvbkNoYW5nZSwgb25DbGlja1ZhcmlhYmxlLCB0ZXh0OiBpbnB1dFZhbHVlLCBSaWdodENvbXBvbmVudCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yLCByb3dzLCBhY3Rpb25zLCBlZGl0b3JJbnN0YW5jZUtleSwgdGVtcGxhdGVUeXBlID0gJ21hcmtldGluZycsIHRlbXBsYXRlSWQsIHJlcXVlc3RFeGVjdXRvciwgYmFzZVVybCwgZW5kcG9pbnRQYXRoLCB1c2VDYXNlLCBzdG9yZUlkLCBhcGlBZGFwdGVyLCBjb252ZXJzYXRpb25JZCA9ICd3aGF0c2FwcC10ZW1wbGF0ZS1lZGl0b3InLCBzeXN0ZW1JZCA9ICd3aGF0c2FwcC13cml0ZXInLCBpbnRlbnQgPSAnZGVmYXVsdCcsIGVuYWJsZWRBSUFjdGlvbnMgPSBbXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlNIT1JURU4sXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FWFBBTkQsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FTU9KSUZZLFxyXG4gICAgXSwgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMgPSBmYWxzZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCBhaUFjdGlvbk1pbkNoYXJzLCBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgb25BSUV2ZW50LCBvbkFJVGFnQ29tcHV0ZWQsIHByZWZpbGxXYXNBaUdlbmVyYXRlZCA9IGZhbHNlLCBlZGl0b3JIZWFkZXIsIG9uQUlUb25lU2VsZWN0LCBvbkFJQWN0aW9uUmVxdWVzdCwgb25CdWlsZEFJUHJvbXB0IH0gPSBfYSwgdGV4dEFyZWFQcm9wcyA9IF9fcmVzdChfYSwgW1wib25DaGFuZ2VcIiwgXCJvbkNsaWNrVmFyaWFibGVcIiwgXCJ0ZXh0XCIsIFwiUmlnaHRDb21wb25lbnRcIiwgXCJlcnJvclwiLCBcImxpbWl0XCIsIFwib25FcnJvclwiLCBcInJvd3NcIiwgXCJhY3Rpb25zXCIsIFwiZWRpdG9ySW5zdGFuY2VLZXlcIiwgXCJ0ZW1wbGF0ZVR5cGVcIiwgXCJ0ZW1wbGF0ZUlkXCIsIFwicmVxdWVzdEV4ZWN1dG9yXCIsIFwiYmFzZVVybFwiLCBcImVuZHBvaW50UGF0aFwiLCBcInVzZUNhc2VcIiwgXCJzdG9yZUlkXCIsIFwiYXBpQWRhcHRlclwiLCBcImNvbnZlcnNhdGlvbklkXCIsIFwic3lzdGVtSWRcIiwgXCJpbnRlbnRcIiwgXCJlbmFibGVkQUlBY3Rpb25zXCIsIFwiZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnNcIiwgXCJwcm9tcHRPdmVycmlkZXNcIiwgXCJyZXBocmFzZVRvbmVzXCIsIFwiYWlBY3Rpb25NaW5DaGFyc1wiLCBcImluc3RydWN0aW9uU3VnZ2VzdGlvbnNcIiwgXCJvbkFJRXZlbnRcIiwgXCJvbkFJVGFnQ29tcHV0ZWRcIiwgXCJwcmVmaWxsV2FzQWlHZW5lcmF0ZWRcIiwgXCJlZGl0b3JIZWFkZXJcIiwgXCJvbkFJVG9uZVNlbGVjdFwiLCBcIm9uQUlBY3Rpb25SZXF1ZXN0XCIsIFwib25CdWlsZEFJUHJvbXB0XCJdKTtcclxuICAgIGNvbnN0IHRleHRTcGFjZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IFtjdXJyZW50VGV4dCwgc2V0Q3VycmVudFRleHRdID0gdXNlU3RhdGUoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICBjb25zdCBbaXNSZXBocmFzZUhpZ2hsaWdodGVkLCBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW3JlcGhyYXNlSGlnaGxpZ2h0Q291bnQsIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbaXNHZW5lcmF0aW5nLCBzZXRJc0dlbmVyYXRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2lzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGVdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2luc3RydWN0aW9uVGV4dCwgc2V0SW5zdHJ1Y3Rpb25UZXh0XSA9IHVzZVN0YXRlKCcnKTtcclxuICAgIGNvbnN0IFt0b25lQnlBY3Rpb24sIHNldFRvbmVCeUFjdGlvbl0gPSB1c2VTdGF0ZSh7fSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkJhc2VUZXh0LCBzZXRTdWdnZXN0aW9uQmFzZVRleHRdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkNhbmRpZGF0ZXMsIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzXSA9IHVzZVN0YXRlKFtdKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uSW5kZXgsIHNldFN1Z2dlc3Rpb25JbmRleF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGVdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBzdWdnZXN0aW9uU2Nyb2xsUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgcmVwaHJhc2VJZGxlUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgaGlnaGxpZ2h0UmVzZXRSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICAvKipcclxuICAgICAqIFByaW9yIGVsaWdpYmlsaXR5IGZvciByZXBocmFzZSBudWRnZSAobnVsbCA9IG5vdCBpbml0aWFsaXplZCkuXHJcbiAgICAgKiBNYXRjaGVzIHRoZSBjaGlwOiBub24tZW1wdHkgdHJpbSBhbmQgbGVuZ3RoIOKJpSBtaW4g4oCUIHNhbWUgYXMgYGFpSGVhZGVyQWN0aW9uc2AgZGlzYWJsZWQgcnVsZXMuXHJcbiAgICAgKi9cclxuICAgIGNvbnN0IHByZXZSZXBocmFzZUVsaWdpYmxlUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgZGVmZXJyZWRIdG1sUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgbGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIC8qKiBGaXJzdCBhY2NlcHQgYWZ0ZXIgZnVsbC1BSSBwcmVmaWxsIChgcHJlZmlsbFdhc0FpR2VuZXJhdGVkYCk7IGNsZWFyZWQgYWZ0ZXIgb25lIGFjY2VwdC4gKi9cclxuICAgIGNvbnN0IGluaXRpYWxBaVByZWZpbGxQaGFzZVJlZiA9IHVzZVJlZighIXByZWZpbGxXYXNBaUdlbmVyYXRlZCk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGluaXRpYWxBaVByZWZpbGxQaGFzZVJlZi5jdXJyZW50ID0gISFwcmVmaWxsV2FzQWlHZW5lcmF0ZWQ7XHJcbiAgICB9LCBbcHJlZmlsbFdhc0FpR2VuZXJhdGVkLCBlZGl0b3JJbnN0YW5jZUtleV0pO1xyXG4gICAgY29uc3QgYWN0aXZlQWN0aW9uUHJvbXB0cyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiByZXNvbHZlQWN0aW9uUHJvbXB0cyh0ZW1wbGF0ZVR5cGUsIHByb21wdE92ZXJyaWRlcywgcmVwaHJhc2VUb25lcyk7XHJcbiAgICB9LCBbcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCB0ZW1wbGF0ZVR5cGVdKTtcclxuICAgIGNvbnN0IGZpbHRlcmVkSW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGlmICghcXVlcnkpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucy5maWx0ZXIoKHN1Z2dlc3Rpb24pID0+IHN1Z2dlc3Rpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeSkpO1xyXG4gICAgfSwgW2luc3RydWN0aW9uU3VnZ2VzdGlvbnMsIGluc3RydWN0aW9uVGV4dF0pO1xyXG4gICAgY29uc3QgbWluQ2hhcnNCeUFjdGlvbiA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUyksIChhaUFjdGlvbk1pbkNoYXJzIHx8IHt9KSk7XHJcbiAgICB9LCBbYWlBY3Rpb25NaW5DaGFyc10pO1xyXG4gICAgY29uc3QgcmVwaHJhc2VNaW5DaGFycyA9IG1pbkNoYXJzQnlBY3Rpb25bQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV0gfHxcclxuICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV07XHJcbiAgICBjb25zdCBlbWl0QUlFdmVudCA9IHVzZUNhbGxiYWNrKChuYW1lLCBwYXlsb2FkKSA9PiB7XHJcbiAgICAgICAgb25BSUV2ZW50ID09PSBudWxsIHx8IG9uQUlFdmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSUV2ZW50KG5hbWUsIHBheWxvYWQpO1xyXG4gICAgfSwgW29uQUlFdmVudF0pO1xyXG4gICAgY29uc3Qgc2V0RWRpdG9yVGV4dCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIHNldEN1cnJlbnRUZXh0KChwcmV2KSA9PiAocHJldiA9PT0gbmV4dFRleHQgPyBwcmV2IDogbmV4dFRleHQpKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGVtaXRDaGFuZ2VXaXRoR3VhcmQgPSB1c2VDYWxsYmFjaygobmV4dFRleHQpID0+IHtcclxuICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGRlZmVycmVkSHRtbFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5leHRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIG5leHRUZXh0KTtcclxuICAgICAgICAgICAgZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChuZXh0VGV4dCkpO1xyXG4gICAgICAgICAgICB9LCAxNik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICB9LCBbb25DaGFuZ2VdKTtcclxuICAgIGNvbnN0IGNsZWFyU3VnZ2VzdGlvblNlc3Npb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0KG51bGwpO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtdKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUobnVsbCk7XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgPj0gTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXh0Q291bnQgPSByZXBocmFzZUhpZ2hsaWdodENvdW50ICsgMTtcclxuICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KG5leHRDb3VudCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSksIFN0cmluZyhuZXh0Q291bnQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKHRydWUpO1xyXG4gICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgIH0sIDEyMDApO1xyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5LCByZXBocmFzZUhpZ2hsaWdodENvdW50XSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHRSZWYgPSB1c2VSZWYodHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0KTtcclxuICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50ID0gdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0O1xyXG4gICAgZnVuY3Rpb24gaGFuZGxlT25DaGFuZ2UoZSkge1xyXG4gICAgICAgIGNvbnN0IHRleHQgPSBlLnRhcmdldC52YWx1ZTtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBzZXRDYXJldFBvc2l0aW9uKGNhcmV0UG9zKSB7XHJcbiAgICAgICAgY29uc3QgZWxlbSA9IHRleHRTcGFjZVJlZiA9PT0gbnVsbCB8fCB0ZXh0U3BhY2VSZWYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRleHRTcGFjZVJlZi5jdXJyZW50O1xyXG4gICAgICAgIGlmIChlbGVtICE9IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKGVsZW0uc2VsZWN0aW9uU3RhcnQpIHtcclxuICAgICAgICAgICAgICAgIGVsZW0uZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIGVsZW0uc2VsZWN0aW9uRW5kID0gY2FyZXRQb3M7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgZWxlbS5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIG9uQWN0aW9uU2VsZWN0KGFjdGlvblR5cGUpIHtcclxuICAgICAgICBjb25zdCB3aWxkQ2FyZCA9IFdpbGRDYXJkTWFwW2FjdGlvblR5cGVdO1xyXG4gICAgICAgIGlmICh3aWxkQ2FyZCAmJiB0ZXh0U3BhY2VSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHRleHQgfSA9IGluc2VydFRleHRBdEluZGV4KHdpbGRDYXJkLCBzdGFydCk7XHJcbiAgICAgICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uKHN0YXJ0ICsgMSk7XHJcbiAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBhZGRUZXh0T3JXcmFwKHdpbGRDYXJkKTtcclxuICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBvbkVtb2ppQWRkaXRpb24oZW1vamkpIHtcclxuICAgICAgICBjb25zdCB7IHRleHQgfSA9IGFkZFRleHQoZW1vamkpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhZGRUZXh0T3JXcmFwKHRleHRUb0FkZCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgbGV0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICBpZiAodGV4dFNwYWNlUmVmLmN1cnJlbnQgJiYgdGV4dFRvQWRkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgY29uc3Qgd2lsZENhcmQgPSB0ZXh0VG9BZGQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICAvKiogbm90aGluZyBpcyBzZWxlY3RlZCAqL1xyXG4gICAgICAgICAgICAgICAgLyoqIHNvIGFwcGVuZCB0aGUgd2lsZGNhcmQgYXQgdGhlIGVuZCAqL1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFkZFRleHQod2lsZENhcmQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGV4dCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLndyYXBwV2lsZGNhcmQoc3RhcnQsIGVuZCwgd2lsZENhcmQsIHRleHQpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaHRtbCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwodGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdGV4dCwgaHRtbCB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IHRleHQ6IHRleHQsIGh0bWw6IHRleHQgfTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZFRleHQodGV4dFRvQWRkKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgaWYgKHRleHRTcGFjZVJlZi5jdXJyZW50ICYmIHRleHRUb0FkZCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zZXJ0VGV4dEF0SW5kZXgodGV4dFRvQWRkLCBzdGFydCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dDogdGV4dCwgaHRtbDogdGV4dCB9O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gaW5zZXJ0VGV4dEF0SW5kZXgodGV4dFRvQWRkLCBpbmRleCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgbGV0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICB0ZXh0ID0gdGV4dC5zbGljZSgwLCBpbmRleCkgKyB0ZXh0VG9BZGQgKyB0ZXh0LnNsaWNlKGluZGV4KTtcclxuICAgICAgICBjb25zdCBodG1sID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTCh0ZXh0KTtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgIHJldHVybiB7IHRleHQsIGh0bWwgfTtcclxuICAgIH1cclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8ICFlZGl0b3JJbnN0YW5jZUtleSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNhY2hlZCA9IE51bWJlcihzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGdldEhpZ2hsaWdodFN0b3JhZ2VLZXkoZWRpdG9ySW5zdGFuY2VLZXkpKSB8fFxyXG4gICAgICAgICAgICAnMCcpO1xyXG4gICAgICAgIGlmICghTnVtYmVyLmlzTmFOKGNhY2hlZCkpIHtcclxuICAgICAgICAgICAgc2V0UmVwaHJhc2VIaWdobGlnaHRDb3VudChjYWNoZWQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtlZGl0b3JJbnN0YW5jZUtleV0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBjb25zdCBlbGlnaWJsZSA9ICEhY3VycmVudFRleHQudHJpbSgpICYmIGN1cnJlbnRUZXh0Lmxlbmd0aCA+PSByZXBocmFzZU1pbkNoYXJzO1xyXG4gICAgICAgIGlmIChwcmV2UmVwaHJhc2VFbGlnaWJsZVJlZi5jdXJyZW50ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHByZXZSZXBocmFzZUVsaWdpYmxlUmVmLmN1cnJlbnQgPSBlbGlnaWJsZTtcclxuICAgICAgICAgICAgaWYgKGVsaWdpYmxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50KCk7XHJcbiAgICAgICAgICAgICAgICB9LCBSRVBIUkFTRV9JRExFX01TKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZWxpZ2libGUpIHtcclxuICAgICAgICAgICAgcHJldlJlcGhyYXNlRWxpZ2libGVSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjcm9zc2VkVGhyZXNob2xkID0gIXByZXZSZXBocmFzZUVsaWdpYmxlUmVmLmN1cnJlbnQgJiYgZWxpZ2libGU7XHJcbiAgICAgICAgcHJldlJlcGhyYXNlRWxpZ2libGVSZWYuY3VycmVudCA9IHRydWU7XHJcbiAgICAgICAgaWYgKGNyb3NzZWRUaHJlc2hvbGQpIHtcclxuICAgICAgICAgICAgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0UmVmLmN1cnJlbnQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50KCk7XHJcbiAgICAgICAgfSwgUkVQSFJBU0VfSURMRV9NUyk7XHJcbiAgICB9LCBbY3VycmVudFRleHQsIHJlcGhyYXNlTWluQ2hhcnNdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGFjdGl2ZUNhbmRpZGF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzW3N1Z2dlc3Rpb25JbmRleF0gfHwgJyc7XHJcbiAgICBjb25zdCBzdWdnZXN0aW9uQmFzZUh0bWwgPSB1c2VNZW1vKCgpID0+IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwoc3VnZ2VzdGlvbkJhc2VUZXh0IHx8ICcnKSwgW3N1Z2dlc3Rpb25CYXNlVGV4dF0pO1xyXG4gICAgY29uc3QgYWN0aXZlQ2FuZGlkYXRlSHRtbCA9IHVzZU1lbW8oKCkgPT4gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChhY3RpdmVDYW5kaWRhdGUpLCBbYWN0aXZlQ2FuZGlkYXRlXSk7XHJcbiAgICBjb25zdCBjYW5SZWdlbmVyYXRlID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDwgTUFYX1NVR0dFU1RJT05TO1xyXG4gICAgY29uc3Qgc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID0gISFzdWdnZXN0aW9uQmFzZVRleHQgJiYgc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoID4gMDtcclxuICAgIGNvbnN0IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8IHN1Z2dlc3Rpb25JbmRleCA8PSAwO1xyXG4gICAgY29uc3QgaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDw9IDEgfHxcclxuICAgICAgICBzdWdnZXN0aW9uSW5kZXggPj0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBub2RlID0gc3VnZ2VzdGlvblNjcm9sbFJlZi5jdXJyZW50O1xyXG4gICAgICAgIGlmICghbm9kZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIG5vZGUuc2Nyb2xsVG9wID0gbm9kZS5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9LCBbYWN0aXZlQ2FuZGlkYXRlLCBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24sIGlzR2VuZXJhdGluZ10pO1xyXG4gICAgY29uc3QgZXhlY3V0ZUFJQWN0aW9uID0gdXNlQ2FsbGJhY2soKGFjdGlvblR5cGUsIHJlZ2VuZXJhdGVFeGlzdGluZyA9IGZhbHNlLCBpbnN0cnVjdGlvbk92ZXJyaWRlLCB0b25lT3ZlcnJpZGVJZCwgYWN0aW9uVmFyaWFudCA9IEFJQWN0aW9uVmFyaWFudC5ERUZBVUxUKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICB2YXIgX2IsIF9jLCBfZDtcclxuICAgICAgICBpZiAoIW9uQUlBY3Rpb25SZXF1ZXN0ICYmXHJcbiAgICAgICAgICAgICFhcGlBZGFwdGVyICYmXHJcbiAgICAgICAgICAgICghcmVxdWVzdEV4ZWN1dG9yIHx8ICFiYXNlVXJsKSkge1xyXG4gICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoJ0FJIGNvbmZpZ3VyYXRpb24gbWlzc2luZycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY3VycmVudFRleHQudHJpbSgpKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbWluQ2hhcnNGb3JBY3Rpb24gPSBtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICA1MDtcclxuICAgICAgICBpZiAoY3VycmVudFRleHQubGVuZ3RoIDwgbWluQ2hhcnNGb3JBY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpZiAoaXNHZW5lcmF0aW5nKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKHJlZ2VuZXJhdGVFeGlzdGluZyAmJiAhY2FuUmVnZW5lcmF0ZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGJhc2VDb25maWcgPSBhY3RpdmVBY3Rpb25Qcm9tcHRzW2FjdGlvblR5cGVdO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UgJiZcclxuICAgICAgICAgICAgdGVtcGxhdGVUeXBlID09PSAndXRpbGl0eScgJiZcclxuICAgICAgICAgICAgYWN0aW9uVmFyaWFudCA9PT0gQUlBY3Rpb25WYXJpYW50LlJFUEhSQVNFXHJcbiAgICAgICAgICAgID8gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBiYXNlQ29uZmlnKSwgeyBsYWJlbDogJ1JlcGhyYXNlJywgYmFzZVByb21wdDogVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgfSkgOiBiYXNlQ29uZmlnO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVG9uZUlkID0gdG9uZU92ZXJyaWRlSWQgfHxcclxuICAgICAgICAgICAgdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIGNvbmZpZy5kZWZhdWx0VG9uZUlkIHx8XHJcbiAgICAgICAgICAgICgoX2MgPSAoX2IgPSBjb25maWcudG9uZXMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYlswXSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmlkKTtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFRvbmUgPSAoX2QgPSBjb25maWcudG9uZXMpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5maW5kKCh0b25lKSA9PiB0b25lLmlkID09PSBzZWxlY3RlZFRvbmVJZCk7XHJcbiAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgPSBpbnN0cnVjdGlvbk92ZXJyaWRlICE9PSB1bmRlZmluZWRcclxuICAgICAgICAgICAgPyBpbnN0cnVjdGlvbk92ZXJyaWRlXHJcbiAgICAgICAgICAgIDogaW5zdHJ1Y3Rpb25UZXh0O1xyXG4gICAgICAgIGNvbnN0IHByb21wdCA9IChvbkJ1aWxkQUlQcm9tcHQgPT09IG51bGwgfHwgb25CdWlsZEFJUHJvbXB0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkJ1aWxkQUlQcm9tcHQoe1xyXG4gICAgICAgICAgICBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICBhY3Rpb25WYXJpYW50LFxyXG4gICAgICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICBjb25maWcsXHJcbiAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgIHRvbmVMYWJlbDogc2VsZWN0ZWRUb25lID09PSBudWxsIHx8IHNlbGVjdGVkVG9uZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZWN0ZWRUb25lLmxhYmVsLFxyXG4gICAgICAgICAgICBpbnN0cnVjdGlvblRleHQ6IGluc3RydWN0aW9uRm9yUHJvbXB0IHx8IHVuZGVmaW5lZCxcclxuICAgICAgICB9KSkgfHxcclxuICAgICAgICAgICAgYnVpbGRBY3Rpb25Qcm9tcHQoe1xyXG4gICAgICAgICAgICAgICAgY29uZmlnLFxyXG4gICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZCxcclxuICAgICAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIHNldElzR2VuZXJhdGluZyh0cnVlKTtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfYWN0aW9uX3RyaWdnZXJlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG9uQUlBY3Rpb25SZXF1ZXN0XHJcbiAgICAgICAgICAgICAgICA/IHlpZWxkIG9uQUlBY3Rpb25SZXF1ZXN0KHtcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblZhcmlhbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIDogeWllbGQgcmVxdWVzdEFJU3VnZ2VzdGlvbih7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgYmFzZVVybCxcclxuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgICAgIGludGVudCxcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICAgICAgICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZydcclxuICAgICAgICAgICAgICAgID8gcmVzdWx0LnRyaW0oKVxyXG4gICAgICAgICAgICAgICAgOiAoKHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3VsdC5ib2R5KSB8fCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKCFyZWdlbmVyYXRlRXhpc3RpbmcpIHtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25CYXNlVGV4dChjdXJyZW50VGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShhY3Rpb25UeXBlKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtjYW5kaWRhdGVdKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcygocHJldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IFsuLi5wcmV2LCBjYW5kaWRhdGVdLnNsaWNlKDAsIE1BWF9TVUdHRVNUSU9OUyk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgobmV4dC5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdGYWlsZWQgdG8gZ2VuZXJhdGUgQUkgc3VnZ2VzdGlvbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgc2V0SXNHZW5lcmF0aW5nKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9KSwgW1xyXG4gICAgICAgIHJlcXVlc3RFeGVjdXRvcixcclxuICAgICAgICBiYXNlVXJsLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBjYW5SZWdlbmVyYXRlLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGluc3RydWN0aW9uVGV4dCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIGVuZHBvaW50UGF0aCxcclxuICAgICAgICBhcGlBZGFwdGVyLFxyXG4gICAgICAgIGludGVudCxcclxuICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgIG9uRXJyb3IsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgICAgICBvbkFJQWN0aW9uUmVxdWVzdCxcclxuICAgICAgICBvbkJ1aWxkQUlQcm9tcHQsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFhY3RpdmVDYW5kaWRhdGUgfHwgIXN1Z2dlc3Rpb25CYXNlVGV4dCB8fCAhc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2FjY2VwdGVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGluSW5pdGlhbEFpUGhhc2UgPSBpbml0aWFsQWlQcmVmaWxsUGhhc2VSZWYuY3VycmVudDtcclxuICAgICAgICBjb25zdCB0YWdQYXlsb2FkID0gY29tcHV0ZUFpVGFnT25BY2NlcHQoe1xyXG4gICAgICAgICAgICBiYXNlbGluZVRleHQ6IHN1Z2dlc3Rpb25CYXNlVGV4dCxcclxuICAgICAgICAgICAgYWNjZXB0ZWRUZXh0OiBhY3RpdmVDYW5kaWRhdGUsXHJcbiAgICAgICAgICAgIGluaXRpYWxBaVByZWZpbGxQaGFzZTogaW5Jbml0aWFsQWlQaGFzZSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoaW5Jbml0aWFsQWlQaGFzZSkge1xyXG4gICAgICAgICAgICBpbml0aWFsQWlQcmVmaWxsUGhhc2VSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvbkFJVGFnQ29tcHV0ZWQgPT09IG51bGwgfHwgb25BSVRhZ0NvbXB1dGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVGFnQ29tcHV0ZWQodGFnUGF5bG9hZCk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGFjdGl2ZUNhbmRpZGF0ZSxcclxuICAgICAgICBzdWdnZXN0aW9uQmFzZVRleHQsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCxcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkLFxyXG4gICAgICAgIGVtaXRBSUV2ZW50LFxyXG4gICAgICAgIHRlbXBsYXRlSWQsXHJcbiAgICAgICAgb25BSVRhZ0NvbXB1dGVkLFxyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2Rpc2NhcmRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uKCk7XHJcbiAgICB9LCBbY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiwgZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKChyYXRpbmcpID0+IHtcclxuICAgICAgICBpZiAoIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2ZlZWRiYWNrX3N1Ym1pdHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICAgICAgcmF0aW5nLFxyXG4gICAgICAgICAgICBjYW5kaWRhdGVfaW5kZXg6IHN1Z2dlc3Rpb25JbmRleCArIDEsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LCBbZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzdWdnZXN0aW9uSW5kZXgsIHRlbXBsYXRlSWRdKTtcclxuICAgIGNvbnN0IGFpSGVhZGVyQWN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucylcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBlbmFibGVkQUlBY3Rpb25zLm1hcCgoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICAgICAgY29uc3QgYWN0aW9uQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICAgICAgY29uc3QgdG9uZUlkID0gdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICBhY3Rpb25Db25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAgICAgKChfYiA9IChfYSA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzBdKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWQpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBhY3Rpb25Db25maWcubGFiZWwsXHJcbiAgICAgICAgICAgICAgICBpc1ByaW1hcnk6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBpc0dlbmVyYXRpbmcgJiYgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHRlZDogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVwaHJhc2VIaWdobGlnaHRlZCxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhY3VycmVudFRleHQudHJpbSgpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQubGVuZ3RoIDxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG1pbkNoYXJzQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNTApIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgaXNHZW5lcmF0aW5nIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSksXHJcbiAgICAgICAgICAgICAgICBzaG93VG9uZURyb3Bkb3duOiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgICAgICAgICAgISEoKF9jID0gYWN0aW9uQ29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSxcclxuICAgICAgICAgICAgICAgIHRvbmVzOiBhY3Rpb25Db25maWcudG9uZXMsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZDogdG9uZUlkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGVuYWJsZWRBSUFjdGlvbnMsXHJcbiAgICAgICAgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMsXHJcbiAgICAgICAgYWN0aXZlQWN0aW9uUHJvbXB0cyxcclxuICAgICAgICB0b25lQnlBY3Rpb24sXHJcbiAgICAgICAgaXNHZW5lcmF0aW5nLFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbixcclxuICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgIF0pO1xyXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBhZGRUZXh0T3JXcmFwLFxyXG4gICAgICAgICAgICBhZGRUZXh0LFxyXG4gICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24sXHJcbiAgICAgICAgfTtcclxuICAgIH0sIFthZGRUZXh0T3JXcmFwLCBhZGRUZXh0LCBjdXJyZW50VGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoaW5wdXRWYWx1ZSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChpbnB1dFZhbHVlIHx8ICcnKTtcclxuICAgIH0sIFtpbnB1dFZhbHVlLCBzZXRFZGl0b3JUZXh0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICghbGltaXQgfHwgIW9uRXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBuZXh0RXJyb3IgPSBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdCA/IExJTUlUX1JFQUNIRUQgOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiAnJztcclxuICAgICAgICBpZiAobGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID09PSBuZXh0RXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBsYXN0RW1pdHRlZEVkaXRvckVycm9yUmVmLmN1cnJlbnQgPSBuZXh0RXJyb3I7XHJcbiAgICAgICAgb25FcnJvcihuZXh0RXJyb3IpO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCBlcnJvciwgbGltaXQsIG9uRXJyb3JdKTtcclxuICAgIHJldHVybiAoX2pzeHMoT3V0ZXJDb250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4cyhFZGl0b3JGb290ZXJSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvckZvb3RlclRpdGxlLCB7IGNoaWxkcmVuOiBlZGl0b3JIZWFkZXIgPyAoX2pzeChUaXRsZVNtYWxsLCBPYmplY3QuYXNzaWduKHsgXCJkYXRhLXRlc3RcIjogXCJib2R5LXRleHQtZm9yLWVkaXQtdGVtcGxhdGVcIiB9LCB7IGNoaWxkcmVuOiBlZGl0b3JIZWFkZXIgfSkpKSA6IG51bGwgfSksIF9qc3hzKEVkaXRvckZvb3RlclJpZ2h0LCB7IGNoaWxkcmVuOiBbZXJyb3IgJiYgZXJyb3IgIT09IExJTUlUX1JFQUNIRUQgPyAoX2pzeHMoX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBbX2pzeChJbmZvSWNvbiwgeyB3aWR0aDogMTYsIGhlaWdodDogMTYsIGNvbG9yOiBDT0xPUlMuY29udGVudC5uZWdhdGl2ZSB9KSwgX2pzeChCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IGNvbG9yOiBDT0xPUlMuY29udGVudC5uZWdhdGl2ZSB9LCB7IGNoaWxkcmVuOiBlcnJvciB9KSldIH0pKSA6IG51bGwsIGxpbWl0ID8gKF9qc3hzKEJvZHlDYXB0aW9uLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IGVycm9yID09PSBMSU1JVF9SRUFDSEVEIHx8IGN1cnJlbnRUZXh0Lmxlbmd0aCA+IGxpbWl0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IENPTE9SUy5jb250ZW50Lm5lZ2F0aXZlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IFtjdXJyZW50VGV4dC5sZW5ndGgsIFwiL1wiLCBsaW1pdF0gfSkpKSA6IG51bGxdIH0pXSB9KSwgX2pzeHMoQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgaXNFcnJvcjogISFlcnJvciB9LCB7IGNoaWxkcmVuOiBbc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID8gKF9qc3hzKFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgcmVmOiBzdWdnZXN0aW9uU2Nyb2xsUmVmIH0sIHsgY2hpbGRyZW46IFtfanN4KFN1Z2dlc3Rpb25CYXNlbGluZVRleHQsIHsgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHsgX19odG1sOiBzdWdnZXN0aW9uQmFzZUh0bWwgfSB9KSwgaXNHZW5lcmF0aW5nID8gKF9qc3goU3VnZ2VzdGlvbkNhbmRpZGF0ZVRleHQsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtYnVzeVwiOiBcInRydWVcIiB9LCB7IGNoaWxkcmVuOiBfanN4cyhTdWdnZXN0aW9uQ2FuZGlkYXRlU2tlbGV0b24sIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiODQlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjY4JVwiIH0pXSB9KSB9KSkpIDogKF9qc3goU3VnZ2VzdGlvbkNhbmRpZGF0ZVRleHQsIHsgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19odG1sOiBhY3RpdmVDYW5kaWRhdGVIdG1sLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSkpLCBfanN4cyhTdWdnZXN0aW9uQ29udHJvbHNSb3csIHsgY2hpbGRyZW46IFtfanN4cyhTdWdnZXN0aW9uQ291bnRlciwgeyBjaGlsZHJlbjogW3N1Z2dlc3Rpb25JbmRleCArIDEsIFwiL1wiLCBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGhdIH0pLCBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUHJldmlvdXMgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBkaXNhYmxlZDogaXNQcmV2U3VnZ2VzdGlvbkRpc2FibGVkLCBvbkNsaWNrOiAoKSA9PiBzZXRTdWdnZXN0aW9uSW5kZXgoKGlkeCkgPT4gTWF0aC5tYXgoMCwgaWR4IC0gMSkpIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hldnJvbkxlZnRJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSksIF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiTGlrZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUZlZWRiYWNrKCdsaWtlJykgfSwgeyBjaGlsZHJlbjogX2pzeChUaHVtYnNVcEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzbGlrZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkRpc2xpa2Ugc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiBoYW5kbGVGZWVkYmFjaygnZGlzbGlrZScpIH0sIHsgY2hpbGRyZW46IF9qc3goVGh1bWJzRG93bkljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIGNhblJlZ2VuZXJhdGUgPyAoX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogaXNHZW5lcmF0aW5nID8gJ1JlZ2VuZXJhdGluZ+KApicgOiAnUmVnZW5lcmF0ZScsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25SZWdlbmVyYXRlQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIFwiYXJpYS1idXN5XCI6IGlzR2VuZXJhdGluZywgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzR2VuZXJhdGluZywgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3VnZ2VzdGlvbkFjdGlvblR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IGlzR2VuZXJhdGluZyA/IChfanN4KFJlZ2VuZXJhdGVJY29uU2hpbW1lciwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUgfSkpIDogKF9qc3goUmV3aW5kSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkpIH0pKSB9KSkpIDogbnVsbCwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNjYXJkXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiQWNjZXB0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogaGFuZGxlQWNjZXB0U3VnZ2VzdGlvbiB9LCB7IGNoaWxkcmVuOiBfanN4KENoZWNrSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKV0gfSldIH0pKSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFzdGVkVGV4dCA9IGUuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFzdGVkVGV4dC5sZW5ndGggPiBMQVJHRV9JTlBVVF9USFJFU0hPTEQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWwgPSB0ZXh0U3BhY2VSZWYuY3VycmVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IChfYSA9IGVsID09PSBudWxsIHx8IGVsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlbC5zZWxlY3Rpb25TdGFydCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSAoX2IgPSBlbCA9PT0gbnVsbCB8fCBlbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogZWwuc2VsZWN0aW9uRW5kKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcmVmZXIgbGl2ZSBET00gdmFsdWUg4oCUIGBjdXJyZW50VGV4dGAgY2FuIGxhZyB0aGUgdGV4dGFyZWEgZm9yIGJpZyBwYXN0ZXMuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFzZSA9IChfYyA9IGVsID09PSBudWxsIHx8IGVsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlbC52YWx1ZSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dFRleHQgPSBiYXNlLnNsaWNlKDAsIHN0YXJ0KSArIHBhc3RlZFRleHQgKyBiYXNlLnNsaWNlKGVuZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dChuZXh0VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChuZXh0VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FyZXQgPSBzdGFydCArIHBhc3RlZFRleHQubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YS5zZXRTZWxlY3Rpb25SYW5nZShjYXJldCwgY2FyZXQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChfYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlIGludmFsaWQgcmFuZ2UgaW4gZWRnZSBicm93c2Vyc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiAoX2pzeChXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIHsgYWN0aW9uczogYWN0aW9ucywgcmVmOiB0ZXh0U3BhY2VSZWYsIG9uQWN0aW9uU2VsZWN0OiBvbkFjdGlvblNlbGVjdCwgUmlnaHRDb21wb25lbnQ6IFJpZ2h0Q29tcG9uZW50LCByaWdodEFjdGlvbnNEaXNhYmxlZDogc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uIHx8IGlzR2VuZXJhdGluZywgb25FbW9qaUNsaWNrOiBvbkVtb2ppQWRkaXRpb24sIGFpQWN0aW9uczogYWlIZWFkZXJBY3Rpb25zLCBkaXNhYmxlQWxsQWN0aW9uczogc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uIHx8IGlzR2VuZXJhdGluZywgaW5zdHJ1Y3Rpb25BY3RpdmU6IGlzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIG9uQUlJbnN0cnVjdGlvbnNDbGljazogKCkgPT4gc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSh0cnVlKSwgb25BSVRvbmVDaGFuZ2U6IChhY3Rpb25UeXBlLCB0b25lSWQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRvbmVCeUFjdGlvbigocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW2FjdGlvblR5cGVdOiB0b25lSWQgfSkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQUlUb25lU2VsZWN0ID09PSBudWxsIHx8IG9uQUlUb25lU2VsZWN0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVG9uZVNlbGVjdChhY3Rpb25UeXBlLCB0b25lSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdG9uZUlkLCBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIG9uQUlBY3Rpb25DbGljazogKGFjdGlvblR5cGUsIGFjdGlvblZhcmlhbnQgPSBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNhbWUgYWN0aW9uIHNob3VsZCBub3QgcmV0cmlnZ2VyIGZyb20gY2hpcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnZW5lcmF0ZSBpcyBvbmx5IHZpYSBleHBsaWNpdCByZWdlbmVyYXRlIGNvbnRyb2wuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmV3IGFjdGlvbiBzdGFydHMgYSBmcmVzaCBzdWdnZXN0aW9uIHNlc3Npb24uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFjdGlvblZhcmlhbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFjdGlvblZhcmlhbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IH0pKV0gfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuZXhwb3J0IHsgQUlfVEFHX0NIQU5HRV9SQVRJT19USFJFU0hPTEQsIGNvbXB1dGVBaVRhZ09uQWNjZXB0LCBsZXZlbnNodGVpbkRpc3RhbmNlLCB9IGZyb20gJy4vYWkvYWlUYWcnO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1XaGF0c0FwcFRleHRFZGl0b3IuanMubWFwIl19 */")),t=a.default(w,"production"===process.env.NODE_ENV?{target:"ea7i3sh9"}:{target:"ea7i3sh9",label:"SuggestionRegenerateButton"})("production"===process.env.NODE_ENV?{name:"p2u7ri",styles:":disabled{opacity:1;cursor:wait;}"}:{name:"p2u7ri",styles:":disabled{opacity:1;cursor:wait;}",map:"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBK0dnRSIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIEZyYWdtZW50IGFzIF9GcmFnbWVudCwganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZXdpbmRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3Jld2luZC5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzRG93bkljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvdGh1bWJzX2Rvd24uc3ZnJztcclxuaW1wb3J0IFRodW1ic1VwSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfdXAuc3ZnJztcclxuaW1wb3J0IHsgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9CYXNlV2hhdHNhcHBDb250ZW50TGFuZy5oZWxwZXJcIjtcclxuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUsIH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgeyBDT0xPUlMgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzL1RoZW1lXCI7XHJcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICcuLi90b29sdGlwcy9Ub29sdGlwJztcclxuaW1wb3J0IHsgQm9keUNhcHRpb24sIFRpdGxlU21hbGwgfSBmcm9tICcuLi9UeXBvZ3JhcGh5U3R5bGUnO1xyXG5pbXBvcnQgeyBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlMsIERFRkFVTFRfSU5TVFJVQ1RJT05fU1VHR0VTVElPTlMsIHJlc29sdmVBY3Rpb25Qcm9tcHRzLCB9IGZyb20gJy4vYWkvYWN0aW9uUmVnaXN0cnknO1xyXG5pbXBvcnQgeyBjb21wdXRlQWlUYWdPbkFjY2VwdCB9IGZyb20gJy4vYWkvYWlUYWcnO1xyXG5pbXBvcnQgeyBidWlsZEFjdGlvblByb21wdCwgcmVxdWVzdEFJU3VnZ2VzdGlvbiB9IGZyb20gJy4vYWkvYXBpJztcclxuaW1wb3J0IHsgQ29udGFpbmVyLCBFZGl0b3JGb290ZXJSaWdodCwgRWRpdG9yRm9vdGVyUm93LCBFZGl0b3JGb290ZXJUaXRsZSwgT3V0ZXJDb250YWluZXIsIFRleHRTcGFjZSwgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUFjdGlvblZhcmlhbnQsIEFJRWRpdG9yQWN0aW9uVHlwZXMsIEVkaXRvckFjdGlvblR5cGVzLCBXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIH0gZnJvbSAnLi9XaGF0c0FwcFRleHRFZGl0b3JIZWFkZXInO1xyXG5jb25zdCBMSU1JVF9SRUFDSEVEID0gJ0NoYXJhY3RlciBsaW1pdCByZWFjaGVkJztcclxuY29uc3QgUkVQSFJBU0VfSURMRV9NUyA9IDMwMDA7XHJcbmNvbnN0IE1BWF9SRVBIUkFTRV9ISUdITElHSFRTID0gNTtcclxuY29uc3QgTUFYX1NVR0dFU1RJT05TID0gMztcclxuY29uc3QgTEFSR0VfSU5QVVRfVEhSRVNIT0xEID0gMTIwMDtcclxuY29uc3QgVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgPSAnUmVwaHJhc2UgdGhpcyBXaGF0c0FwcCB1dGlsaXR5IHRlbXBsYXRlIHRvIGltcHJvdmUgY2xhcml0eSBhbmQgcmVhZGFiaWxpdHkgd2hpbGUgcHJlc2VydmluZyB2YXJpYWJsZXMsIGludGVudCwgYW5kIGNvbXBsaWFuY2UuJztcclxuY29uc3Qgc2tlbGV0b25QdWxzZSA9IGtleWZyYW1lcyBgXG5cdDAlIHsgb3BhY2l0eTogMC41NTsgfVxuXHQ1MCUgeyBvcGFjaXR5OiAxOyB9XG5cdDEwMCUgeyBvcGFjaXR5OiAwLjU1OyB9XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxNHB4IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogMTBweDtcblx0bWluLWhlaWdodDogMTUwcHg7XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkxpbmUgPSBzdHlsZWQuZGl2IGBcblx0aGVpZ2h0OiAxNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdHdpZHRoOiAkeyhwcm9wcykgPT4gcHJvcHMud2lkdGh9O1xuXHRiYWNrZ3JvdW5kOiAjZWNlY2VmO1xuXHRhbmltYXRpb246ICR7c2tlbGV0b25QdWxzZX0gMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHRtYXgtaGVpZ2h0OiAyNjBweDtcblx0b3ZlcmZsb3cteTogc2Nyb2xsO1xuXHRzY3JvbGxiYXItd2lkdGg6IHRoaW47XG5cdHNjcm9sbGJhci1jb2xvcjogI2M4YzhjZiB0cmFuc3BhcmVudDtcblx0Ojotd2Via2l0LXNjcm9sbGJhciB7XG5cdFx0d2lkdGg6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcblx0XHRiYWNrZ3JvdW5kOiAjYzhjOGNmO1xuXHRcdGJvcmRlci1yYWRpdXM6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcblx0XHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0fVxuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkJhc2VsaW5lVGV4dCA9IHN0eWxlZC5kaXYgYFxuXHR0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25DYW5kaWRhdGVUZXh0ID0gc3R5bGVkLmRpdiBgXG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkNhbmRpZGF0ZVNrZWxldG9uID0gc3R5bGVkLmRpdiBgXG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHR3aWR0aDogMTAwJTtcblx0bWluLWhlaWdodDogNDBweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db250cm9sc1JvdyA9IHN0eWxlZC5kaXYgYFxuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDZweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db3VudGVyID0gc3R5bGVkLnNwYW4gYFxuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkljb25CdXR0b24gPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0cGFkZGluZzogNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdGRpc3BsYXk6IGlubGluZS1mbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0dHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjEycyBlYXNlO1xuXHQ6bm90KDpkaXNhYmxlZCk6aG92ZXIge1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICR7Q09MT1JTLnN1cmZhY2UuaG92ZXJlZH07XG5cdH1cblx0OmRpc2FibGVkIHtcblx0XHRvcGFjaXR5OiAwLjM1O1xuXHRcdGN1cnNvcjogbm90LWFsbG93ZWQ7XG5cdH1cbmA7XHJcbi8qKiBSZWdlbmVyYXRlIHN0YXlzIGZ1bGwgb3BhY2l0eSB3aGlsZSBkaXNhYmxlZCBzbyB0aGUgbG9hZGluZyBzaGltbWVyIHN0YXlzIHZpc2libGUgKHNhbWUgcHVsc2UgYXMgZWRpdG9yIHNrZWxldG9uKS4gKi9cclxuY29uc3QgU3VnZ2VzdGlvblJlZ2VuZXJhdGVCdXR0b24gPSBzdHlsZWQoU3VnZ2VzdGlvbkljb25CdXR0b24pIGBcblx0OmRpc2FibGVkIHtcblx0XHRvcGFjaXR5OiAxO1xuXHRcdGN1cnNvcjogd2FpdDtcblx0fVxuYDtcclxuY29uc3QgUmVnZW5lcmF0ZUljb25TaGltbWVyID0gc3R5bGVkLmRpdiBgXG5cdHdpZHRoOiAxNHB4O1xuXHRoZWlnaHQ6IDE0cHg7XG5cdGJvcmRlci1yYWRpdXM6IDRweDtcblx0YmFja2dyb3VuZDogI2VjZWNlZjtcblx0ZmxleC1zaHJpbms6IDA7XG5cdGFuaW1hdGlvbjogJHtza2VsZXRvblB1bHNlfSAxLjFzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xuYDtcclxuLyoqIFNhbWUgYm90dG9tIHRvb2xiYXIgc2xvdCBhcyBgV2hhdHNBcHBUZXh0RWRpdG9ySGVhZGVyYCDigJQgcmVwbGFjZXMgdGhlIGZ1bGwgaWNvbi9BSSBwYW5lbCB3aGlsZSBvcGVuLiAqL1xyXG5jb25zdCBJbnN0cnVjdGlvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblx0cGFkZGluZzogOHB4IDEycHg7XG5cdGdhcDogMTBweDtcblx0Ym9yZGVyLXJhZGl1czogMCAwIDRweCA0cHg7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXRSb3cgPSBzdHlsZWQuZGl2IGBcblx0Ym9yZGVyOiAxcHggc29saWQgI2Y1YTRjMDtcblx0Ym9yZGVyLXJhZGl1czogMTBweDtcblx0cGFkZGluZzogOHB4IDEwcHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbklucHV0ID0gc3R5bGVkLmlucHV0IGBcblx0ZmxleDogMTtcblx0bWluLXdpZHRoOiAwO1xuXHRib3JkZXI6IDA7XG5cdG91dGxpbmU6IG5vbmU7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25BY3Rpb25zID0gc3R5bGVkLmRpdiBgXG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQ2FuY2VsID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnNlY29uZGFyeX07XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0Zm9udC13ZWlnaHQ6IDUwMDtcblx0cGFkZGluZzogMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbXByb3ZlID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMXB4IHNvbGlkICM1ZDNhNzI7XG5cdGNvbG9yOiAjNWQzYTcyO1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0Ym9yZGVyLXJhZGl1czogOHB4O1xuXHRwYWRkaW5nOiA4cHggMTRweDtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRsaW5lLWhlaWdodDogMS4xO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0ID0gc3R5bGVkLmRpdiBgXG5cdG1hcmdpbi10b3A6IDEwcHg7XG5cdGJvcmRlci1yYWRpdXM6IDEycHg7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3gtc2hhZG93OiAwIDZweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkJ1dHRvbiA9IHN0eWxlZC5idXR0b24gYFxuXHR3aWR0aDogMTAwJTtcblx0Ym9yZGVyOiAwO1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgJHtDT0xPUlMuc3Ryb2tlLnByaW1hcnl9O1xuXHRiYWNrZ3JvdW5kOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyNlNWYzZTgnIDogJ3RyYW5zcGFyZW50Jyl9O1xuXHRjb2xvcjogJHsocHJvcHMpID0+IChwcm9wcy5zZWxlY3RlZCA/ICcjMWU2YjM0JyA6IENPTE9SUy5jb250ZW50LnByaW1hcnkpfTtcblx0dGV4dC1hbGlnbjogbGVmdDtcblx0cGFkZGluZzogMTJweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjI7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0OmZpcnN0LW9mLXR5cGUge1xuXHRcdGJvcmRlci10b3A6IDA7XG5cdH1cbmA7XHJcbmNvbnN0IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nID0gbmV3IEJhc2VXaGF0c2FwcENvbnRlbnRMYW5nSGVscGVyKCk7XHJcbmNvbnN0IFdpbGRDYXJkTWFwID0ge1xyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLkJPTERdOiAnKicsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuSVRBTElDXTogJ18nLFxyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLlNUUklLRVRIUk9VR0hdOiAnficsXHJcbn07XHJcbmZ1bmN0aW9uIGdldEhpZ2hsaWdodFN0b3JhZ2VLZXkoZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgIHJldHVybiBgd2hhdHNhcHAtZWRpdG9yLXJlcGhyYXNlLWhpZ2hsaWdodC0ke2VkaXRvckluc3RhbmNlS2V5IHx8ICdkZWZhdWx0J31gO1xyXG59XHJcbmV4cG9ydCBjb25zdCBXaGF0c0FwcFRleHRFZGl0b3IgPSBSZWFjdC5mb3J3YXJkUmVmKChfYSwgcmVmKSA9PiB7XHJcbiAgICB2YXIgeyBvbkNoYW5nZSwgb25DbGlja1ZhcmlhYmxlLCB0ZXh0OiBpbnB1dFZhbHVlLCBSaWdodENvbXBvbmVudCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yLCByb3dzLCBhY3Rpb25zLCBlZGl0b3JJbnN0YW5jZUtleSwgdGVtcGxhdGVUeXBlID0gJ21hcmtldGluZycsIHRlbXBsYXRlSWQsIHJlcXVlc3RFeGVjdXRvciwgYmFzZVVybCwgZW5kcG9pbnRQYXRoLCB1c2VDYXNlLCBzdG9yZUlkLCBhcGlBZGFwdGVyLCBjb252ZXJzYXRpb25JZCA9ICd3aGF0c2FwcC10ZW1wbGF0ZS1lZGl0b3InLCBzeXN0ZW1JZCA9ICd3aGF0c2FwcC13cml0ZXInLCBpbnRlbnQgPSAnZGVmYXVsdCcsIGVuYWJsZWRBSUFjdGlvbnMgPSBbXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlNIT1JURU4sXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FWFBBTkQsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FTU9KSUZZLFxyXG4gICAgXSwgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMgPSBmYWxzZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCBhaUFjdGlvbk1pbkNoYXJzLCBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgb25BSUV2ZW50LCBvbkFJVGFnQ29tcHV0ZWQsIHByZWZpbGxXYXNBaUdlbmVyYXRlZCA9IGZhbHNlLCBlZGl0b3JIZWFkZXIsIG9uQUlUb25lU2VsZWN0LCBvbkFJQWN0aW9uUmVxdWVzdCwgb25CdWlsZEFJUHJvbXB0IH0gPSBfYSwgdGV4dEFyZWFQcm9wcyA9IF9fcmVzdChfYSwgW1wib25DaGFuZ2VcIiwgXCJvbkNsaWNrVmFyaWFibGVcIiwgXCJ0ZXh0XCIsIFwiUmlnaHRDb21wb25lbnRcIiwgXCJlcnJvclwiLCBcImxpbWl0XCIsIFwib25FcnJvclwiLCBcInJvd3NcIiwgXCJhY3Rpb25zXCIsIFwiZWRpdG9ySW5zdGFuY2VLZXlcIiwgXCJ0ZW1wbGF0ZVR5cGVcIiwgXCJ0ZW1wbGF0ZUlkXCIsIFwicmVxdWVzdEV4ZWN1dG9yXCIsIFwiYmFzZVVybFwiLCBcImVuZHBvaW50UGF0aFwiLCBcInVzZUNhc2VcIiwgXCJzdG9yZUlkXCIsIFwiYXBpQWRhcHRlclwiLCBcImNvbnZlcnNhdGlvbklkXCIsIFwic3lzdGVtSWRcIiwgXCJpbnRlbnRcIiwgXCJlbmFibGVkQUlBY3Rpb25zXCIsIFwiZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnNcIiwgXCJwcm9tcHRPdmVycmlkZXNcIiwgXCJyZXBocmFzZVRvbmVzXCIsIFwiYWlBY3Rpb25NaW5DaGFyc1wiLCBcImluc3RydWN0aW9uU3VnZ2VzdGlvbnNcIiwgXCJvbkFJRXZlbnRcIiwgXCJvbkFJVGFnQ29tcHV0ZWRcIiwgXCJwcmVmaWxsV2FzQWlHZW5lcmF0ZWRcIiwgXCJlZGl0b3JIZWFkZXJcIiwgXCJvbkFJVG9uZVNlbGVjdFwiLCBcIm9uQUlBY3Rpb25SZXF1ZXN0XCIsIFwib25CdWlsZEFJUHJvbXB0XCJdKTtcclxuICAgIGNvbnN0IHRleHRTcGFjZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IFtjdXJyZW50VGV4dCwgc2V0Q3VycmVudFRleHRdID0gdXNlU3RhdGUoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICBjb25zdCBbaXNSZXBocmFzZUhpZ2hsaWdodGVkLCBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW3JlcGhyYXNlSGlnaGxpZ2h0Q291bnQsIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbaXNHZW5lcmF0aW5nLCBzZXRJc0dlbmVyYXRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2lzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGVdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2luc3RydWN0aW9uVGV4dCwgc2V0SW5zdHJ1Y3Rpb25UZXh0XSA9IHVzZVN0YXRlKCcnKTtcclxuICAgIGNvbnN0IFt0b25lQnlBY3Rpb24sIHNldFRvbmVCeUFjdGlvbl0gPSB1c2VTdGF0ZSh7fSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkJhc2VUZXh0LCBzZXRTdWdnZXN0aW9uQmFzZVRleHRdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkNhbmRpZGF0ZXMsIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzXSA9IHVzZVN0YXRlKFtdKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uSW5kZXgsIHNldFN1Z2dlc3Rpb25JbmRleF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGVdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBzdWdnZXN0aW9uU2Nyb2xsUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgcmVwaHJhc2VJZGxlUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgaGlnaGxpZ2h0UmVzZXRSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICAvKipcclxuICAgICAqIFByaW9yIGVsaWdpYmlsaXR5IGZvciByZXBocmFzZSBudWRnZSAobnVsbCA9IG5vdCBpbml0aWFsaXplZCkuXHJcbiAgICAgKiBNYXRjaGVzIHRoZSBjaGlwOiBub24tZW1wdHkgdHJpbSBhbmQgbGVuZ3RoIOKJpSBtaW4g4oCUIHNhbWUgYXMgYGFpSGVhZGVyQWN0aW9uc2AgZGlzYWJsZWQgcnVsZXMuXHJcbiAgICAgKi9cclxuICAgIGNvbnN0IHByZXZSZXBocmFzZUVsaWdpYmxlUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgZGVmZXJyZWRIdG1sUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgbGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIC8qKiBGaXJzdCBhY2NlcHQgYWZ0ZXIgZnVsbC1BSSBwcmVmaWxsIChgcHJlZmlsbFdhc0FpR2VuZXJhdGVkYCk7IGNsZWFyZWQgYWZ0ZXIgb25lIGFjY2VwdC4gKi9cclxuICAgIGNvbnN0IGluaXRpYWxBaVByZWZpbGxQaGFzZVJlZiA9IHVzZVJlZighIXByZWZpbGxXYXNBaUdlbmVyYXRlZCk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGluaXRpYWxBaVByZWZpbGxQaGFzZVJlZi5jdXJyZW50ID0gISFwcmVmaWxsV2FzQWlHZW5lcmF0ZWQ7XHJcbiAgICB9LCBbcHJlZmlsbFdhc0FpR2VuZXJhdGVkLCBlZGl0b3JJbnN0YW5jZUtleV0pO1xyXG4gICAgY29uc3QgYWN0aXZlQWN0aW9uUHJvbXB0cyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiByZXNvbHZlQWN0aW9uUHJvbXB0cyh0ZW1wbGF0ZVR5cGUsIHByb21wdE92ZXJyaWRlcywgcmVwaHJhc2VUb25lcyk7XHJcbiAgICB9LCBbcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCB0ZW1wbGF0ZVR5cGVdKTtcclxuICAgIGNvbnN0IGZpbHRlcmVkSW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGlmICghcXVlcnkpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucy5maWx0ZXIoKHN1Z2dlc3Rpb24pID0+IHN1Z2dlc3Rpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeSkpO1xyXG4gICAgfSwgW2luc3RydWN0aW9uU3VnZ2VzdGlvbnMsIGluc3RydWN0aW9uVGV4dF0pO1xyXG4gICAgY29uc3QgbWluQ2hhcnNCeUFjdGlvbiA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUyksIChhaUFjdGlvbk1pbkNoYXJzIHx8IHt9KSk7XHJcbiAgICB9LCBbYWlBY3Rpb25NaW5DaGFyc10pO1xyXG4gICAgY29uc3QgcmVwaHJhc2VNaW5DaGFycyA9IG1pbkNoYXJzQnlBY3Rpb25bQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV0gfHxcclxuICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV07XHJcbiAgICBjb25zdCBlbWl0QUlFdmVudCA9IHVzZUNhbGxiYWNrKChuYW1lLCBwYXlsb2FkKSA9PiB7XHJcbiAgICAgICAgb25BSUV2ZW50ID09PSBudWxsIHx8IG9uQUlFdmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSUV2ZW50KG5hbWUsIHBheWxvYWQpO1xyXG4gICAgfSwgW29uQUlFdmVudF0pO1xyXG4gICAgY29uc3Qgc2V0RWRpdG9yVGV4dCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIHNldEN1cnJlbnRUZXh0KChwcmV2KSA9PiAocHJldiA9PT0gbmV4dFRleHQgPyBwcmV2IDogbmV4dFRleHQpKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGVtaXRDaGFuZ2VXaXRoR3VhcmQgPSB1c2VDYWxsYmFjaygobmV4dFRleHQpID0+IHtcclxuICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGRlZmVycmVkSHRtbFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5leHRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIG5leHRUZXh0KTtcclxuICAgICAgICAgICAgZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChuZXh0VGV4dCkpO1xyXG4gICAgICAgICAgICB9LCAxNik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICB9LCBbb25DaGFuZ2VdKTtcclxuICAgIGNvbnN0IGNsZWFyU3VnZ2VzdGlvblNlc3Npb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0KG51bGwpO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtdKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUobnVsbCk7XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgPj0gTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXh0Q291bnQgPSByZXBocmFzZUhpZ2hsaWdodENvdW50ICsgMTtcclxuICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KG5leHRDb3VudCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSksIFN0cmluZyhuZXh0Q291bnQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKHRydWUpO1xyXG4gICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgIH0sIDEyMDApO1xyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5LCByZXBocmFzZUhpZ2hsaWdodENvdW50XSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHRSZWYgPSB1c2VSZWYodHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0KTtcclxuICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50ID0gdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0O1xyXG4gICAgZnVuY3Rpb24gaGFuZGxlT25DaGFuZ2UoZSkge1xyXG4gICAgICAgIGNvbnN0IHRleHQgPSBlLnRhcmdldC52YWx1ZTtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBzZXRDYXJldFBvc2l0aW9uKGNhcmV0UG9zKSB7XHJcbiAgICAgICAgY29uc3QgZWxlbSA9IHRleHRTcGFjZVJlZiA9PT0gbnVsbCB8fCB0ZXh0U3BhY2VSZWYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRleHRTcGFjZVJlZi5jdXJyZW50O1xyXG4gICAgICAgIGlmIChlbGVtICE9IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKGVsZW0uc2VsZWN0aW9uU3RhcnQpIHtcclxuICAgICAgICAgICAgICAgIGVsZW0uZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIGVsZW0uc2VsZWN0aW9uRW5kID0gY2FyZXRQb3M7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgZWxlbS5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIG9uQWN0aW9uU2VsZWN0KGFjdGlvblR5cGUpIHtcclxuICAgICAgICBjb25zdCB3aWxkQ2FyZCA9IFdpbGRDYXJkTWFwW2FjdGlvblR5cGVdO1xyXG4gICAgICAgIGlmICh3aWxkQ2FyZCAmJiB0ZXh0U3BhY2VSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHRleHQgfSA9IGluc2VydFRleHRBdEluZGV4KHdpbGRDYXJkLCBzdGFydCk7XHJcbiAgICAgICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uKHN0YXJ0ICsgMSk7XHJcbiAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBhZGRUZXh0T3JXcmFwKHdpbGRDYXJkKTtcclxuICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBvbkVtb2ppQWRkaXRpb24oZW1vamkpIHtcclxuICAgICAgICBjb25zdCB7IHRleHQgfSA9IGFkZFRleHQoZW1vamkpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhZGRUZXh0T3JXcmFwKHRleHRUb0FkZCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgbGV0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICBpZiAodGV4dFNwYWNlUmVmLmN1cnJlbnQgJiYgdGV4dFRvQWRkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgY29uc3Qgd2lsZENhcmQgPSB0ZXh0VG9BZGQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICAvKiogbm90aGluZyBpcyBzZWxlY3RlZCAqL1xyXG4gICAgICAgICAgICAgICAgLyoqIHNvIGFwcGVuZCB0aGUgd2lsZGNhcmQgYXQgdGhlIGVuZCAqL1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFkZFRleHQod2lsZENhcmQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGV4dCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLndyYXBwV2lsZGNhcmQoc3RhcnQsIGVuZCwgd2lsZENhcmQsIHRleHQpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaHRtbCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwodGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdGV4dCwgaHRtbCB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IHRleHQ6IHRleHQsIGh0bWw6IHRleHQgfTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZFRleHQodGV4dFRvQWRkKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgaWYgKHRleHRTcGFjZVJlZi5jdXJyZW50ICYmIHRleHRUb0FkZCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zZXJ0VGV4dEF0SW5kZXgodGV4dFRvQWRkLCBzdGFydCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dDogdGV4dCwgaHRtbDogdGV4dCB9O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gaW5zZXJ0VGV4dEF0SW5kZXgodGV4dFRvQWRkLCBpbmRleCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgbGV0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICB0ZXh0ID0gdGV4dC5zbGljZSgwLCBpbmRleCkgKyB0ZXh0VG9BZGQgKyB0ZXh0LnNsaWNlKGluZGV4KTtcclxuICAgICAgICBjb25zdCBodG1sID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTCh0ZXh0KTtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgIHJldHVybiB7IHRleHQsIGh0bWwgfTtcclxuICAgIH1cclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8ICFlZGl0b3JJbnN0YW5jZUtleSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNhY2hlZCA9IE51bWJlcihzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGdldEhpZ2hsaWdodFN0b3JhZ2VLZXkoZWRpdG9ySW5zdGFuY2VLZXkpKSB8fFxyXG4gICAgICAgICAgICAnMCcpO1xyXG4gICAgICAgIGlmICghTnVtYmVyLmlzTmFOKGNhY2hlZCkpIHtcclxuICAgICAgICAgICAgc2V0UmVwaHJhc2VIaWdobGlnaHRDb3VudChjYWNoZWQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtlZGl0b3JJbnN0YW5jZUtleV0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBjb25zdCBlbGlnaWJsZSA9ICEhY3VycmVudFRleHQudHJpbSgpICYmIGN1cnJlbnRUZXh0Lmxlbmd0aCA+PSByZXBocmFzZU1pbkNoYXJzO1xyXG4gICAgICAgIGlmIChwcmV2UmVwaHJhc2VFbGlnaWJsZVJlZi5jdXJyZW50ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHByZXZSZXBocmFzZUVsaWdpYmxlUmVmLmN1cnJlbnQgPSBlbGlnaWJsZTtcclxuICAgICAgICAgICAgaWYgKGVsaWdpYmxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50KCk7XHJcbiAgICAgICAgICAgICAgICB9LCBSRVBIUkFTRV9JRExFX01TKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZWxpZ2libGUpIHtcclxuICAgICAgICAgICAgcHJldlJlcGhyYXNlRWxpZ2libGVSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjcm9zc2VkVGhyZXNob2xkID0gIXByZXZSZXBocmFzZUVsaWdpYmxlUmVmLmN1cnJlbnQgJiYgZWxpZ2libGU7XHJcbiAgICAgICAgcHJldlJlcGhyYXNlRWxpZ2libGVSZWYuY3VycmVudCA9IHRydWU7XHJcbiAgICAgICAgaWYgKGNyb3NzZWRUaHJlc2hvbGQpIHtcclxuICAgICAgICAgICAgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0UmVmLmN1cnJlbnQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50KCk7XHJcbiAgICAgICAgfSwgUkVQSFJBU0VfSURMRV9NUyk7XHJcbiAgICB9LCBbY3VycmVudFRleHQsIHJlcGhyYXNlTWluQ2hhcnNdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGFjdGl2ZUNhbmRpZGF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzW3N1Z2dlc3Rpb25JbmRleF0gfHwgJyc7XHJcbiAgICBjb25zdCBzdWdnZXN0aW9uQmFzZUh0bWwgPSB1c2VNZW1vKCgpID0+IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwoc3VnZ2VzdGlvbkJhc2VUZXh0IHx8ICcnKSwgW3N1Z2dlc3Rpb25CYXNlVGV4dF0pO1xyXG4gICAgY29uc3QgYWN0aXZlQ2FuZGlkYXRlSHRtbCA9IHVzZU1lbW8oKCkgPT4gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChhY3RpdmVDYW5kaWRhdGUpLCBbYWN0aXZlQ2FuZGlkYXRlXSk7XHJcbiAgICBjb25zdCBjYW5SZWdlbmVyYXRlID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDwgTUFYX1NVR0dFU1RJT05TO1xyXG4gICAgY29uc3Qgc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID0gISFzdWdnZXN0aW9uQmFzZVRleHQgJiYgc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoID4gMDtcclxuICAgIGNvbnN0IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8IHN1Z2dlc3Rpb25JbmRleCA8PSAwO1xyXG4gICAgY29uc3QgaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDw9IDEgfHxcclxuICAgICAgICBzdWdnZXN0aW9uSW5kZXggPj0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBub2RlID0gc3VnZ2VzdGlvblNjcm9sbFJlZi5jdXJyZW50O1xyXG4gICAgICAgIGlmICghbm9kZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIG5vZGUuc2Nyb2xsVG9wID0gbm9kZS5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9LCBbYWN0aXZlQ2FuZGlkYXRlLCBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24sIGlzR2VuZXJhdGluZ10pO1xyXG4gICAgY29uc3QgZXhlY3V0ZUFJQWN0aW9uID0gdXNlQ2FsbGJhY2soKGFjdGlvblR5cGUsIHJlZ2VuZXJhdGVFeGlzdGluZyA9IGZhbHNlLCBpbnN0cnVjdGlvbk92ZXJyaWRlLCB0b25lT3ZlcnJpZGVJZCwgYWN0aW9uVmFyaWFudCA9IEFJQWN0aW9uVmFyaWFudC5ERUZBVUxUKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICB2YXIgX2IsIF9jLCBfZDtcclxuICAgICAgICBpZiAoIW9uQUlBY3Rpb25SZXF1ZXN0ICYmXHJcbiAgICAgICAgICAgICFhcGlBZGFwdGVyICYmXHJcbiAgICAgICAgICAgICghcmVxdWVzdEV4ZWN1dG9yIHx8ICFiYXNlVXJsKSkge1xyXG4gICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoJ0FJIGNvbmZpZ3VyYXRpb24gbWlzc2luZycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY3VycmVudFRleHQudHJpbSgpKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbWluQ2hhcnNGb3JBY3Rpb24gPSBtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICA1MDtcclxuICAgICAgICBpZiAoY3VycmVudFRleHQubGVuZ3RoIDwgbWluQ2hhcnNGb3JBY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpZiAoaXNHZW5lcmF0aW5nKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKHJlZ2VuZXJhdGVFeGlzdGluZyAmJiAhY2FuUmVnZW5lcmF0ZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGJhc2VDb25maWcgPSBhY3RpdmVBY3Rpb25Qcm9tcHRzW2FjdGlvblR5cGVdO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UgJiZcclxuICAgICAgICAgICAgdGVtcGxhdGVUeXBlID09PSAndXRpbGl0eScgJiZcclxuICAgICAgICAgICAgYWN0aW9uVmFyaWFudCA9PT0gQUlBY3Rpb25WYXJpYW50LlJFUEhSQVNFXHJcbiAgICAgICAgICAgID8gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBiYXNlQ29uZmlnKSwgeyBsYWJlbDogJ1JlcGhyYXNlJywgYmFzZVByb21wdDogVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgfSkgOiBiYXNlQ29uZmlnO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVG9uZUlkID0gdG9uZU92ZXJyaWRlSWQgfHxcclxuICAgICAgICAgICAgdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIGNvbmZpZy5kZWZhdWx0VG9uZUlkIHx8XHJcbiAgICAgICAgICAgICgoX2MgPSAoX2IgPSBjb25maWcudG9uZXMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYlswXSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmlkKTtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFRvbmUgPSAoX2QgPSBjb25maWcudG9uZXMpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5maW5kKCh0b25lKSA9PiB0b25lLmlkID09PSBzZWxlY3RlZFRvbmVJZCk7XHJcbiAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgPSBpbnN0cnVjdGlvbk92ZXJyaWRlICE9PSB1bmRlZmluZWRcclxuICAgICAgICAgICAgPyBpbnN0cnVjdGlvbk92ZXJyaWRlXHJcbiAgICAgICAgICAgIDogaW5zdHJ1Y3Rpb25UZXh0O1xyXG4gICAgICAgIGNvbnN0IHByb21wdCA9IChvbkJ1aWxkQUlQcm9tcHQgPT09IG51bGwgfHwgb25CdWlsZEFJUHJvbXB0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkJ1aWxkQUlQcm9tcHQoe1xyXG4gICAgICAgICAgICBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICBhY3Rpb25WYXJpYW50LFxyXG4gICAgICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICBjb25maWcsXHJcbiAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgIHRvbmVMYWJlbDogc2VsZWN0ZWRUb25lID09PSBudWxsIHx8IHNlbGVjdGVkVG9uZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZWN0ZWRUb25lLmxhYmVsLFxyXG4gICAgICAgICAgICBpbnN0cnVjdGlvblRleHQ6IGluc3RydWN0aW9uRm9yUHJvbXB0IHx8IHVuZGVmaW5lZCxcclxuICAgICAgICB9KSkgfHxcclxuICAgICAgICAgICAgYnVpbGRBY3Rpb25Qcm9tcHQoe1xyXG4gICAgICAgICAgICAgICAgY29uZmlnLFxyXG4gICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZCxcclxuICAgICAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIHNldElzR2VuZXJhdGluZyh0cnVlKTtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfYWN0aW9uX3RyaWdnZXJlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG9uQUlBY3Rpb25SZXF1ZXN0XHJcbiAgICAgICAgICAgICAgICA/IHlpZWxkIG9uQUlBY3Rpb25SZXF1ZXN0KHtcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblZhcmlhbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIDogeWllbGQgcmVxdWVzdEFJU3VnZ2VzdGlvbih7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgYmFzZVVybCxcclxuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgICAgIGludGVudCxcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICAgICAgICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZydcclxuICAgICAgICAgICAgICAgID8gcmVzdWx0LnRyaW0oKVxyXG4gICAgICAgICAgICAgICAgOiAoKHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3VsdC5ib2R5KSB8fCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKCFyZWdlbmVyYXRlRXhpc3RpbmcpIHtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25CYXNlVGV4dChjdXJyZW50VGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShhY3Rpb25UeXBlKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtjYW5kaWRhdGVdKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcygocHJldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IFsuLi5wcmV2LCBjYW5kaWRhdGVdLnNsaWNlKDAsIE1BWF9TVUdHRVNUSU9OUyk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgobmV4dC5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdGYWlsZWQgdG8gZ2VuZXJhdGUgQUkgc3VnZ2VzdGlvbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgc2V0SXNHZW5lcmF0aW5nKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9KSwgW1xyXG4gICAgICAgIHJlcXVlc3RFeGVjdXRvcixcclxuICAgICAgICBiYXNlVXJsLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBjYW5SZWdlbmVyYXRlLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGluc3RydWN0aW9uVGV4dCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIGVuZHBvaW50UGF0aCxcclxuICAgICAgICBhcGlBZGFwdGVyLFxyXG4gICAgICAgIGludGVudCxcclxuICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgIG9uRXJyb3IsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgICAgICBvbkFJQWN0aW9uUmVxdWVzdCxcclxuICAgICAgICBvbkJ1aWxkQUlQcm9tcHQsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFhY3RpdmVDYW5kaWRhdGUgfHwgIXN1Z2dlc3Rpb25CYXNlVGV4dCB8fCAhc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2FjY2VwdGVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGluSW5pdGlhbEFpUGhhc2UgPSBpbml0aWFsQWlQcmVmaWxsUGhhc2VSZWYuY3VycmVudDtcclxuICAgICAgICBjb25zdCB0YWdQYXlsb2FkID0gY29tcHV0ZUFpVGFnT25BY2NlcHQoe1xyXG4gICAgICAgICAgICBiYXNlbGluZVRleHQ6IHN1Z2dlc3Rpb25CYXNlVGV4dCxcclxuICAgICAgICAgICAgYWNjZXB0ZWRUZXh0OiBhY3RpdmVDYW5kaWRhdGUsXHJcbiAgICAgICAgICAgIGluaXRpYWxBaVByZWZpbGxQaGFzZTogaW5Jbml0aWFsQWlQaGFzZSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoaW5Jbml0aWFsQWlQaGFzZSkge1xyXG4gICAgICAgICAgICBpbml0aWFsQWlQcmVmaWxsUGhhc2VSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvbkFJVGFnQ29tcHV0ZWQgPT09IG51bGwgfHwgb25BSVRhZ0NvbXB1dGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVGFnQ29tcHV0ZWQodGFnUGF5bG9hZCk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGFjdGl2ZUNhbmRpZGF0ZSxcclxuICAgICAgICBzdWdnZXN0aW9uQmFzZVRleHQsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCxcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkLFxyXG4gICAgICAgIGVtaXRBSUV2ZW50LFxyXG4gICAgICAgIHRlbXBsYXRlSWQsXHJcbiAgICAgICAgb25BSVRhZ0NvbXB1dGVkLFxyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2Rpc2NhcmRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uKCk7XHJcbiAgICB9LCBbY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiwgZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKChyYXRpbmcpID0+IHtcclxuICAgICAgICBpZiAoIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2ZlZWRiYWNrX3N1Ym1pdHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICAgICAgcmF0aW5nLFxyXG4gICAgICAgICAgICBjYW5kaWRhdGVfaW5kZXg6IHN1Z2dlc3Rpb25JbmRleCArIDEsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LCBbZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzdWdnZXN0aW9uSW5kZXgsIHRlbXBsYXRlSWRdKTtcclxuICAgIGNvbnN0IGFpSGVhZGVyQWN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucylcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBlbmFibGVkQUlBY3Rpb25zLm1hcCgoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICAgICAgY29uc3QgYWN0aW9uQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICAgICAgY29uc3QgdG9uZUlkID0gdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICBhY3Rpb25Db25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAgICAgKChfYiA9IChfYSA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzBdKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWQpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBhY3Rpb25Db25maWcubGFiZWwsXHJcbiAgICAgICAgICAgICAgICBpc1ByaW1hcnk6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBpc0dlbmVyYXRpbmcgJiYgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHRlZDogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVwaHJhc2VIaWdobGlnaHRlZCxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhY3VycmVudFRleHQudHJpbSgpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQubGVuZ3RoIDxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG1pbkNoYXJzQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNTApIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgaXNHZW5lcmF0aW5nIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSksXHJcbiAgICAgICAgICAgICAgICBzaG93VG9uZURyb3Bkb3duOiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgICAgICAgICAgISEoKF9jID0gYWN0aW9uQ29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSxcclxuICAgICAgICAgICAgICAgIHRvbmVzOiBhY3Rpb25Db25maWcudG9uZXMsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZDogdG9uZUlkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGVuYWJsZWRBSUFjdGlvbnMsXHJcbiAgICAgICAgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMsXHJcbiAgICAgICAgYWN0aXZlQWN0aW9uUHJvbXB0cyxcclxuICAgICAgICB0b25lQnlBY3Rpb24sXHJcbiAgICAgICAgaXNHZW5lcmF0aW5nLFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbixcclxuICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgIF0pO1xyXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBhZGRUZXh0T3JXcmFwLFxyXG4gICAgICAgICAgICBhZGRUZXh0LFxyXG4gICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24sXHJcbiAgICAgICAgfTtcclxuICAgIH0sIFthZGRUZXh0T3JXcmFwLCBhZGRUZXh0LCBjdXJyZW50VGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoaW5wdXRWYWx1ZSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChpbnB1dFZhbHVlIHx8ICcnKTtcclxuICAgIH0sIFtpbnB1dFZhbHVlLCBzZXRFZGl0b3JUZXh0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICghbGltaXQgfHwgIW9uRXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBuZXh0RXJyb3IgPSBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdCA/IExJTUlUX1JFQUNIRUQgOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiAnJztcclxuICAgICAgICBpZiAobGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID09PSBuZXh0RXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBsYXN0RW1pdHRlZEVkaXRvckVycm9yUmVmLmN1cnJlbnQgPSBuZXh0RXJyb3I7XHJcbiAgICAgICAgb25FcnJvcihuZXh0RXJyb3IpO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCBlcnJvciwgbGltaXQsIG9uRXJyb3JdKTtcclxuICAgIHJldHVybiAoX2pzeHMoT3V0ZXJDb250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4cyhFZGl0b3JGb290ZXJSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvckZvb3RlclRpdGxlLCB7IGNoaWxkcmVuOiBlZGl0b3JIZWFkZXIgPyAoX2pzeChUaXRsZVNtYWxsLCBPYmplY3QuYXNzaWduKHsgXCJkYXRhLXRlc3RcIjogXCJib2R5LXRleHQtZm9yLWVkaXQtdGVtcGxhdGVcIiB9LCB7IGNoaWxkcmVuOiBlZGl0b3JIZWFkZXIgfSkpKSA6IG51bGwgfSksIF9qc3hzKEVkaXRvckZvb3RlclJpZ2h0LCB7IGNoaWxkcmVuOiBbZXJyb3IgJiYgZXJyb3IgIT09IExJTUlUX1JFQUNIRUQgPyAoX2pzeHMoX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBbX2pzeChJbmZvSWNvbiwgeyB3aWR0aDogMTYsIGhlaWdodDogMTYsIGNvbG9yOiBDT0xPUlMuY29udGVudC5uZWdhdGl2ZSB9KSwgX2pzeChCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IGNvbG9yOiBDT0xPUlMuY29udGVudC5uZWdhdGl2ZSB9LCB7IGNoaWxkcmVuOiBlcnJvciB9KSldIH0pKSA6IG51bGwsIGxpbWl0ID8gKF9qc3hzKEJvZHlDYXB0aW9uLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IGVycm9yID09PSBMSU1JVF9SRUFDSEVEIHx8IGN1cnJlbnRUZXh0Lmxlbmd0aCA+IGxpbWl0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IENPTE9SUy5jb250ZW50Lm5lZ2F0aXZlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IFtjdXJyZW50VGV4dC5sZW5ndGgsIFwiL1wiLCBsaW1pdF0gfSkpKSA6IG51bGxdIH0pXSB9KSwgX2pzeHMoQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgaXNFcnJvcjogISFlcnJvciB9LCB7IGNoaWxkcmVuOiBbc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID8gKF9qc3hzKFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgcmVmOiBzdWdnZXN0aW9uU2Nyb2xsUmVmIH0sIHsgY2hpbGRyZW46IFtfanN4KFN1Z2dlc3Rpb25CYXNlbGluZVRleHQsIHsgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHsgX19odG1sOiBzdWdnZXN0aW9uQmFzZUh0bWwgfSB9KSwgaXNHZW5lcmF0aW5nID8gKF9qc3goU3VnZ2VzdGlvbkNhbmRpZGF0ZVRleHQsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtYnVzeVwiOiBcInRydWVcIiB9LCB7IGNoaWxkcmVuOiBfanN4cyhTdWdnZXN0aW9uQ2FuZGlkYXRlU2tlbGV0b24sIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiODQlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjY4JVwiIH0pXSB9KSB9KSkpIDogKF9qc3goU3VnZ2VzdGlvbkNhbmRpZGF0ZVRleHQsIHsgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19odG1sOiBhY3RpdmVDYW5kaWRhdGVIdG1sLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSkpLCBfanN4cyhTdWdnZXN0aW9uQ29udHJvbHNSb3csIHsgY2hpbGRyZW46IFtfanN4cyhTdWdnZXN0aW9uQ291bnRlciwgeyBjaGlsZHJlbjogW3N1Z2dlc3Rpb25JbmRleCArIDEsIFwiL1wiLCBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGhdIH0pLCBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUHJldmlvdXMgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBkaXNhYmxlZDogaXNQcmV2U3VnZ2VzdGlvbkRpc2FibGVkLCBvbkNsaWNrOiAoKSA9PiBzZXRTdWdnZXN0aW9uSW5kZXgoKGlkeCkgPT4gTWF0aC5tYXgoMCwgaWR4IC0gMSkpIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hldnJvbkxlZnRJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSksIF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiTGlrZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUZlZWRiYWNrKCdsaWtlJykgfSwgeyBjaGlsZHJlbjogX2pzeChUaHVtYnNVcEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzbGlrZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkRpc2xpa2Ugc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiBoYW5kbGVGZWVkYmFjaygnZGlzbGlrZScpIH0sIHsgY2hpbGRyZW46IF9qc3goVGh1bWJzRG93bkljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIGNhblJlZ2VuZXJhdGUgPyAoX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogaXNHZW5lcmF0aW5nID8gJ1JlZ2VuZXJhdGluZ+KApicgOiAnUmVnZW5lcmF0ZScsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25SZWdlbmVyYXRlQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIFwiYXJpYS1idXN5XCI6IGlzR2VuZXJhdGluZywgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzR2VuZXJhdGluZywgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3VnZ2VzdGlvbkFjdGlvblR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IGlzR2VuZXJhdGluZyA/IChfanN4KFJlZ2VuZXJhdGVJY29uU2hpbW1lciwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUgfSkpIDogKF9qc3goUmV3aW5kSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkpIH0pKSB9KSkpIDogbnVsbCwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNjYXJkXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiQWNjZXB0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogaGFuZGxlQWNjZXB0U3VnZ2VzdGlvbiB9LCB7IGNoaWxkcmVuOiBfanN4KENoZWNrSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKV0gfSldIH0pKSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFzdGVkVGV4dCA9IGUuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFzdGVkVGV4dC5sZW5ndGggPiBMQVJHRV9JTlBVVF9USFJFU0hPTEQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWwgPSB0ZXh0U3BhY2VSZWYuY3VycmVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IChfYSA9IGVsID09PSBudWxsIHx8IGVsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlbC5zZWxlY3Rpb25TdGFydCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSAoX2IgPSBlbCA9PT0gbnVsbCB8fCBlbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogZWwuc2VsZWN0aW9uRW5kKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcmVmZXIgbGl2ZSBET00gdmFsdWUg4oCUIGBjdXJyZW50VGV4dGAgY2FuIGxhZyB0aGUgdGV4dGFyZWEgZm9yIGJpZyBwYXN0ZXMuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFzZSA9IChfYyA9IGVsID09PSBudWxsIHx8IGVsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlbC52YWx1ZSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dFRleHQgPSBiYXNlLnNsaWNlKDAsIHN0YXJ0KSArIHBhc3RlZFRleHQgKyBiYXNlLnNsaWNlKGVuZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dChuZXh0VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChuZXh0VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FyZXQgPSBzdGFydCArIHBhc3RlZFRleHQubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YS5zZXRTZWxlY3Rpb25SYW5nZShjYXJldCwgY2FyZXQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChfYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlIGludmFsaWQgcmFuZ2UgaW4gZWRnZSBicm93c2Vyc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiAoX2pzeChXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIHsgYWN0aW9uczogYWN0aW9ucywgcmVmOiB0ZXh0U3BhY2VSZWYsIG9uQWN0aW9uU2VsZWN0OiBvbkFjdGlvblNlbGVjdCwgUmlnaHRDb21wb25lbnQ6IFJpZ2h0Q29tcG9uZW50LCByaWdodEFjdGlvbnNEaXNhYmxlZDogc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uIHx8IGlzR2VuZXJhdGluZywgb25FbW9qaUNsaWNrOiBvbkVtb2ppQWRkaXRpb24sIGFpQWN0aW9uczogYWlIZWFkZXJBY3Rpb25zLCBkaXNhYmxlQWxsQWN0aW9uczogc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uIHx8IGlzR2VuZXJhdGluZywgaW5zdHJ1Y3Rpb25BY3RpdmU6IGlzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIG9uQUlJbnN0cnVjdGlvbnNDbGljazogKCkgPT4gc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSh0cnVlKSwgb25BSVRvbmVDaGFuZ2U6IChhY3Rpb25UeXBlLCB0b25lSWQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRvbmVCeUFjdGlvbigocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW2FjdGlvblR5cGVdOiB0b25lSWQgfSkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQUlUb25lU2VsZWN0ID09PSBudWxsIHx8IG9uQUlUb25lU2VsZWN0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVG9uZVNlbGVjdChhY3Rpb25UeXBlLCB0b25lSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdG9uZUlkLCBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIG9uQUlBY3Rpb25DbGljazogKGFjdGlvblR5cGUsIGFjdGlvblZhcmlhbnQgPSBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNhbWUgYWN0aW9uIHNob3VsZCBub3QgcmV0cmlnZ2VyIGZyb20gY2hpcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnZW5lcmF0ZSBpcyBvbmx5IHZpYSBleHBsaWNpdCByZWdlbmVyYXRlIGNvbnRyb2wuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmV3IGFjdGlvbiBzdGFydHMgYSBmcmVzaCBzdWdnZXN0aW9uIHNlc3Npb24uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFjdGlvblZhcmlhbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFjdGlvblZhcmlhbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IH0pKV0gfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuZXhwb3J0IHsgQUlfVEFHX0NIQU5HRV9SQVRJT19USFJFU0hPTEQsIGNvbXB1dGVBaVRhZ09uQWNjZXB0LCBsZXZlbnNodGVpbkRpc3RhbmNlLCB9IGZyb20gJy4vYWkvYWlUYWcnO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1XaGF0c0FwcFRleHRFZGl0b3IuanMubWFwIl19 */",toString:h}),D=a.default("div","production"===process.env.NODE_ENV?{target:"ea7i3sh8"}:{target:"ea7i3sh8",label:"RegenerateIconShimmer"})("width:14px;height:14px;border-radius:4px;background:#ececef;flex-shrink:0;animation:",n," 1.1s ease-in-out infinite;"+("production"===process.env.NODE_ENV?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBcUh5QyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIEZyYWdtZW50IGFzIF9GcmFnbWVudCwganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZXdpbmRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3Jld2luZC5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzRG93bkljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvdGh1bWJzX2Rvd24uc3ZnJztcclxuaW1wb3J0IFRodW1ic1VwSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfdXAuc3ZnJztcclxuaW1wb3J0IHsgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9CYXNlV2hhdHNhcHBDb250ZW50TGFuZy5oZWxwZXJcIjtcclxuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUsIH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgeyBDT0xPUlMgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzL1RoZW1lXCI7XHJcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICcuLi90b29sdGlwcy9Ub29sdGlwJztcclxuaW1wb3J0IHsgQm9keUNhcHRpb24sIFRpdGxlU21hbGwgfSBmcm9tICcuLi9UeXBvZ3JhcGh5U3R5bGUnO1xyXG5pbXBvcnQgeyBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlMsIERFRkFVTFRfSU5TVFJVQ1RJT05fU1VHR0VTVElPTlMsIHJlc29sdmVBY3Rpb25Qcm9tcHRzLCB9IGZyb20gJy4vYWkvYWN0aW9uUmVnaXN0cnknO1xyXG5pbXBvcnQgeyBjb21wdXRlQWlUYWdPbkFjY2VwdCB9IGZyb20gJy4vYWkvYWlUYWcnO1xyXG5pbXBvcnQgeyBidWlsZEFjdGlvblByb21wdCwgcmVxdWVzdEFJU3VnZ2VzdGlvbiB9IGZyb20gJy4vYWkvYXBpJztcclxuaW1wb3J0IHsgQ29udGFpbmVyLCBFZGl0b3JGb290ZXJSaWdodCwgRWRpdG9yRm9vdGVyUm93LCBFZGl0b3JGb290ZXJUaXRsZSwgT3V0ZXJDb250YWluZXIsIFRleHRTcGFjZSwgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUFjdGlvblZhcmlhbnQsIEFJRWRpdG9yQWN0aW9uVHlwZXMsIEVkaXRvckFjdGlvblR5cGVzLCBXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIH0gZnJvbSAnLi9XaGF0c0FwcFRleHRFZGl0b3JIZWFkZXInO1xyXG5jb25zdCBMSU1JVF9SRUFDSEVEID0gJ0NoYXJhY3RlciBsaW1pdCByZWFjaGVkJztcclxuY29uc3QgUkVQSFJBU0VfSURMRV9NUyA9IDMwMDA7XHJcbmNvbnN0IE1BWF9SRVBIUkFTRV9ISUdITElHSFRTID0gNTtcclxuY29uc3QgTUFYX1NVR0dFU1RJT05TID0gMztcclxuY29uc3QgTEFSR0VfSU5QVVRfVEhSRVNIT0xEID0gMTIwMDtcclxuY29uc3QgVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgPSAnUmVwaHJhc2UgdGhpcyBXaGF0c0FwcCB1dGlsaXR5IHRlbXBsYXRlIHRvIGltcHJvdmUgY2xhcml0eSBhbmQgcmVhZGFiaWxpdHkgd2hpbGUgcHJlc2VydmluZyB2YXJpYWJsZXMsIGludGVudCwgYW5kIGNvbXBsaWFuY2UuJztcclxuY29uc3Qgc2tlbGV0b25QdWxzZSA9IGtleWZyYW1lcyBgXG5cdDAlIHsgb3BhY2l0eTogMC41NTsgfVxuXHQ1MCUgeyBvcGFjaXR5OiAxOyB9XG5cdDEwMCUgeyBvcGFjaXR5OiAwLjU1OyB9XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxNHB4IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogMTBweDtcblx0bWluLWhlaWdodDogMTUwcHg7XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkxpbmUgPSBzdHlsZWQuZGl2IGBcblx0aGVpZ2h0OiAxNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdHdpZHRoOiAkeyhwcm9wcykgPT4gcHJvcHMud2lkdGh9O1xuXHRiYWNrZ3JvdW5kOiAjZWNlY2VmO1xuXHRhbmltYXRpb246ICR7c2tlbGV0b25QdWxzZX0gMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHRtYXgtaGVpZ2h0OiAyNjBweDtcblx0b3ZlcmZsb3cteTogc2Nyb2xsO1xuXHRzY3JvbGxiYXItd2lkdGg6IHRoaW47XG5cdHNjcm9sbGJhci1jb2xvcjogI2M4YzhjZiB0cmFuc3BhcmVudDtcblx0Ojotd2Via2l0LXNjcm9sbGJhciB7XG5cdFx0d2lkdGg6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcblx0XHRiYWNrZ3JvdW5kOiAjYzhjOGNmO1xuXHRcdGJvcmRlci1yYWRpdXM6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcblx0XHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0fVxuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkJhc2VsaW5lVGV4dCA9IHN0eWxlZC5kaXYgYFxuXHR0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25DYW5kaWRhdGVUZXh0ID0gc3R5bGVkLmRpdiBgXG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkNhbmRpZGF0ZVNrZWxldG9uID0gc3R5bGVkLmRpdiBgXG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHR3aWR0aDogMTAwJTtcblx0bWluLWhlaWdodDogNDBweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db250cm9sc1JvdyA9IHN0eWxlZC5kaXYgYFxuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDZweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db3VudGVyID0gc3R5bGVkLnNwYW4gYFxuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkljb25CdXR0b24gPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0cGFkZGluZzogNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdGRpc3BsYXk6IGlubGluZS1mbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0dHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjEycyBlYXNlO1xuXHQ6bm90KDpkaXNhYmxlZCk6aG92ZXIge1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICR7Q09MT1JTLnN1cmZhY2UuaG92ZXJlZH07XG5cdH1cblx0OmRpc2FibGVkIHtcblx0XHRvcGFjaXR5OiAwLjM1O1xuXHRcdGN1cnNvcjogbm90LWFsbG93ZWQ7XG5cdH1cbmA7XHJcbi8qKiBSZWdlbmVyYXRlIHN0YXlzIGZ1bGwgb3BhY2l0eSB3aGlsZSBkaXNhYmxlZCBzbyB0aGUgbG9hZGluZyBzaGltbWVyIHN0YXlzIHZpc2libGUgKHNhbWUgcHVsc2UgYXMgZWRpdG9yIHNrZWxldG9uKS4gKi9cclxuY29uc3QgU3VnZ2VzdGlvblJlZ2VuZXJhdGVCdXR0b24gPSBzdHlsZWQoU3VnZ2VzdGlvbkljb25CdXR0b24pIGBcblx0OmRpc2FibGVkIHtcblx0XHRvcGFjaXR5OiAxO1xuXHRcdGN1cnNvcjogd2FpdDtcblx0fVxuYDtcclxuY29uc3QgUmVnZW5lcmF0ZUljb25TaGltbWVyID0gc3R5bGVkLmRpdiBgXG5cdHdpZHRoOiAxNHB4O1xuXHRoZWlnaHQ6IDE0cHg7XG5cdGJvcmRlci1yYWRpdXM6IDRweDtcblx0YmFja2dyb3VuZDogI2VjZWNlZjtcblx0ZmxleC1zaHJpbms6IDA7XG5cdGFuaW1hdGlvbjogJHtza2VsZXRvblB1bHNlfSAxLjFzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xuYDtcclxuLyoqIFNhbWUgYm90dG9tIHRvb2xiYXIgc2xvdCBhcyBgV2hhdHNBcHBUZXh0RWRpdG9ySGVhZGVyYCDigJQgcmVwbGFjZXMgdGhlIGZ1bGwgaWNvbi9BSSBwYW5lbCB3aGlsZSBvcGVuLiAqL1xyXG5jb25zdCBJbnN0cnVjdGlvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblx0cGFkZGluZzogOHB4IDEycHg7XG5cdGdhcDogMTBweDtcblx0Ym9yZGVyLXJhZGl1czogMCAwIDRweCA0cHg7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXRSb3cgPSBzdHlsZWQuZGl2IGBcblx0Ym9yZGVyOiAxcHggc29saWQgI2Y1YTRjMDtcblx0Ym9yZGVyLXJhZGl1czogMTBweDtcblx0cGFkZGluZzogOHB4IDEwcHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbklucHV0ID0gc3R5bGVkLmlucHV0IGBcblx0ZmxleDogMTtcblx0bWluLXdpZHRoOiAwO1xuXHRib3JkZXI6IDA7XG5cdG91dGxpbmU6IG5vbmU7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25BY3Rpb25zID0gc3R5bGVkLmRpdiBgXG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQ2FuY2VsID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnNlY29uZGFyeX07XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0Zm9udC13ZWlnaHQ6IDUwMDtcblx0cGFkZGluZzogMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbXByb3ZlID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMXB4IHNvbGlkICM1ZDNhNzI7XG5cdGNvbG9yOiAjNWQzYTcyO1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0Ym9yZGVyLXJhZGl1czogOHB4O1xuXHRwYWRkaW5nOiA4cHggMTRweDtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRsaW5lLWhlaWdodDogMS4xO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0ID0gc3R5bGVkLmRpdiBgXG5cdG1hcmdpbi10b3A6IDEwcHg7XG5cdGJvcmRlci1yYWRpdXM6IDEycHg7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3gtc2hhZG93OiAwIDZweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkJ1dHRvbiA9IHN0eWxlZC5idXR0b24gYFxuXHR3aWR0aDogMTAwJTtcblx0Ym9yZGVyOiAwO1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgJHtDT0xPUlMuc3Ryb2tlLnByaW1hcnl9O1xuXHRiYWNrZ3JvdW5kOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyNlNWYzZTgnIDogJ3RyYW5zcGFyZW50Jyl9O1xuXHRjb2xvcjogJHsocHJvcHMpID0+IChwcm9wcy5zZWxlY3RlZCA/ICcjMWU2YjM0JyA6IENPTE9SUy5jb250ZW50LnByaW1hcnkpfTtcblx0dGV4dC1hbGlnbjogbGVmdDtcblx0cGFkZGluZzogMTJweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjI7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0OmZpcnN0LW9mLXR5cGUge1xuXHRcdGJvcmRlci10b3A6IDA7XG5cdH1cbmA7XHJcbmNvbnN0IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nID0gbmV3IEJhc2VXaGF0c2FwcENvbnRlbnRMYW5nSGVscGVyKCk7XHJcbmNvbnN0IFdpbGRDYXJkTWFwID0ge1xyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLkJPTERdOiAnKicsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuSVRBTElDXTogJ18nLFxyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLlNUUklLRVRIUk9VR0hdOiAnficsXHJcbn07XHJcbmZ1bmN0aW9uIGdldEhpZ2hsaWdodFN0b3JhZ2VLZXkoZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgIHJldHVybiBgd2hhdHNhcHAtZWRpdG9yLXJlcGhyYXNlLWhpZ2hsaWdodC0ke2VkaXRvckluc3RhbmNlS2V5IHx8ICdkZWZhdWx0J31gO1xyXG59XHJcbmV4cG9ydCBjb25zdCBXaGF0c0FwcFRleHRFZGl0b3IgPSBSZWFjdC5mb3J3YXJkUmVmKChfYSwgcmVmKSA9PiB7XHJcbiAgICB2YXIgeyBvbkNoYW5nZSwgb25DbGlja1ZhcmlhYmxlLCB0ZXh0OiBpbnB1dFZhbHVlLCBSaWdodENvbXBvbmVudCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yLCByb3dzLCBhY3Rpb25zLCBlZGl0b3JJbnN0YW5jZUtleSwgdGVtcGxhdGVUeXBlID0gJ21hcmtldGluZycsIHRlbXBsYXRlSWQsIHJlcXVlc3RFeGVjdXRvciwgYmFzZVVybCwgZW5kcG9pbnRQYXRoLCB1c2VDYXNlLCBzdG9yZUlkLCBhcGlBZGFwdGVyLCBjb252ZXJzYXRpb25JZCA9ICd3aGF0c2FwcC10ZW1wbGF0ZS1lZGl0b3InLCBzeXN0ZW1JZCA9ICd3aGF0c2FwcC13cml0ZXInLCBpbnRlbnQgPSAnZGVmYXVsdCcsIGVuYWJsZWRBSUFjdGlvbnMgPSBbXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlNIT1JURU4sXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FWFBBTkQsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FTU9KSUZZLFxyXG4gICAgXSwgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMgPSBmYWxzZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCBhaUFjdGlvbk1pbkNoYXJzLCBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgb25BSUV2ZW50LCBvbkFJVGFnQ29tcHV0ZWQsIHByZWZpbGxXYXNBaUdlbmVyYXRlZCA9IGZhbHNlLCBlZGl0b3JIZWFkZXIsIG9uQUlUb25lU2VsZWN0LCBvbkFJQWN0aW9uUmVxdWVzdCwgb25CdWlsZEFJUHJvbXB0IH0gPSBfYSwgdGV4dEFyZWFQcm9wcyA9IF9fcmVzdChfYSwgW1wib25DaGFuZ2VcIiwgXCJvbkNsaWNrVmFyaWFibGVcIiwgXCJ0ZXh0XCIsIFwiUmlnaHRDb21wb25lbnRcIiwgXCJlcnJvclwiLCBcImxpbWl0XCIsIFwib25FcnJvclwiLCBcInJvd3NcIiwgXCJhY3Rpb25zXCIsIFwiZWRpdG9ySW5zdGFuY2VLZXlcIiwgXCJ0ZW1wbGF0ZVR5cGVcIiwgXCJ0ZW1wbGF0ZUlkXCIsIFwicmVxdWVzdEV4ZWN1dG9yXCIsIFwiYmFzZVVybFwiLCBcImVuZHBvaW50UGF0aFwiLCBcInVzZUNhc2VcIiwgXCJzdG9yZUlkXCIsIFwiYXBpQWRhcHRlclwiLCBcImNvbnZlcnNhdGlvbklkXCIsIFwic3lzdGVtSWRcIiwgXCJpbnRlbnRcIiwgXCJlbmFibGVkQUlBY3Rpb25zXCIsIFwiZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnNcIiwgXCJwcm9tcHRPdmVycmlkZXNcIiwgXCJyZXBocmFzZVRvbmVzXCIsIFwiYWlBY3Rpb25NaW5DaGFyc1wiLCBcImluc3RydWN0aW9uU3VnZ2VzdGlvbnNcIiwgXCJvbkFJRXZlbnRcIiwgXCJvbkFJVGFnQ29tcHV0ZWRcIiwgXCJwcmVmaWxsV2FzQWlHZW5lcmF0ZWRcIiwgXCJlZGl0b3JIZWFkZXJcIiwgXCJvbkFJVG9uZVNlbGVjdFwiLCBcIm9uQUlBY3Rpb25SZXF1ZXN0XCIsIFwib25CdWlsZEFJUHJvbXB0XCJdKTtcclxuICAgIGNvbnN0IHRleHRTcGFjZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IFtjdXJyZW50VGV4dCwgc2V0Q3VycmVudFRleHRdID0gdXNlU3RhdGUoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICBjb25zdCBbaXNSZXBocmFzZUhpZ2hsaWdodGVkLCBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW3JlcGhyYXNlSGlnaGxpZ2h0Q291bnQsIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbaXNHZW5lcmF0aW5nLCBzZXRJc0dlbmVyYXRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2lzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGVdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2luc3RydWN0aW9uVGV4dCwgc2V0SW5zdHJ1Y3Rpb25UZXh0XSA9IHVzZVN0YXRlKCcnKTtcclxuICAgIGNvbnN0IFt0b25lQnlBY3Rpb24sIHNldFRvbmVCeUFjdGlvbl0gPSB1c2VTdGF0ZSh7fSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkJhc2VUZXh0LCBzZXRTdWdnZXN0aW9uQmFzZVRleHRdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkNhbmRpZGF0ZXMsIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzXSA9IHVzZVN0YXRlKFtdKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uSW5kZXgsIHNldFN1Z2dlc3Rpb25JbmRleF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGVdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBzdWdnZXN0aW9uU2Nyb2xsUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgcmVwaHJhc2VJZGxlUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgaGlnaGxpZ2h0UmVzZXRSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICAvKipcclxuICAgICAqIFByaW9yIGVsaWdpYmlsaXR5IGZvciByZXBocmFzZSBudWRnZSAobnVsbCA9IG5vdCBpbml0aWFsaXplZCkuXHJcbiAgICAgKiBNYXRjaGVzIHRoZSBjaGlwOiBub24tZW1wdHkgdHJpbSBhbmQgbGVuZ3RoIOKJpSBtaW4g4oCUIHNhbWUgYXMgYGFpSGVhZGVyQWN0aW9uc2AgZGlzYWJsZWQgcnVsZXMuXHJcbiAgICAgKi9cclxuICAgIGNvbnN0IHByZXZSZXBocmFzZUVsaWdpYmxlUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgZGVmZXJyZWRIdG1sUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgbGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIC8qKiBGaXJzdCBhY2NlcHQgYWZ0ZXIgZnVsbC1BSSBwcmVmaWxsIChgcHJlZmlsbFdhc0FpR2VuZXJhdGVkYCk7IGNsZWFyZWQgYWZ0ZXIgb25lIGFjY2VwdC4gKi9cclxuICAgIGNvbnN0IGluaXRpYWxBaVByZWZpbGxQaGFzZVJlZiA9IHVzZVJlZighIXByZWZpbGxXYXNBaUdlbmVyYXRlZCk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGluaXRpYWxBaVByZWZpbGxQaGFzZVJlZi5jdXJyZW50ID0gISFwcmVmaWxsV2FzQWlHZW5lcmF0ZWQ7XHJcbiAgICB9LCBbcHJlZmlsbFdhc0FpR2VuZXJhdGVkLCBlZGl0b3JJbnN0YW5jZUtleV0pO1xyXG4gICAgY29uc3QgYWN0aXZlQWN0aW9uUHJvbXB0cyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiByZXNvbHZlQWN0aW9uUHJvbXB0cyh0ZW1wbGF0ZVR5cGUsIHByb21wdE92ZXJyaWRlcywgcmVwaHJhc2VUb25lcyk7XHJcbiAgICB9LCBbcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCB0ZW1wbGF0ZVR5cGVdKTtcclxuICAgIGNvbnN0IGZpbHRlcmVkSW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGlmICghcXVlcnkpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucy5maWx0ZXIoKHN1Z2dlc3Rpb24pID0+IHN1Z2dlc3Rpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeSkpO1xyXG4gICAgfSwgW2luc3RydWN0aW9uU3VnZ2VzdGlvbnMsIGluc3RydWN0aW9uVGV4dF0pO1xyXG4gICAgY29uc3QgbWluQ2hhcnNCeUFjdGlvbiA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUyksIChhaUFjdGlvbk1pbkNoYXJzIHx8IHt9KSk7XHJcbiAgICB9LCBbYWlBY3Rpb25NaW5DaGFyc10pO1xyXG4gICAgY29uc3QgcmVwaHJhc2VNaW5DaGFycyA9IG1pbkNoYXJzQnlBY3Rpb25bQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV0gfHxcclxuICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV07XHJcbiAgICBjb25zdCBlbWl0QUlFdmVudCA9IHVzZUNhbGxiYWNrKChuYW1lLCBwYXlsb2FkKSA9PiB7XHJcbiAgICAgICAgb25BSUV2ZW50ID09PSBudWxsIHx8IG9uQUlFdmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSUV2ZW50KG5hbWUsIHBheWxvYWQpO1xyXG4gICAgfSwgW29uQUlFdmVudF0pO1xyXG4gICAgY29uc3Qgc2V0RWRpdG9yVGV4dCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIHNldEN1cnJlbnRUZXh0KChwcmV2KSA9PiAocHJldiA9PT0gbmV4dFRleHQgPyBwcmV2IDogbmV4dFRleHQpKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGVtaXRDaGFuZ2VXaXRoR3VhcmQgPSB1c2VDYWxsYmFjaygobmV4dFRleHQpID0+IHtcclxuICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGRlZmVycmVkSHRtbFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5leHRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIG5leHRUZXh0KTtcclxuICAgICAgICAgICAgZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChuZXh0VGV4dCkpO1xyXG4gICAgICAgICAgICB9LCAxNik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICB9LCBbb25DaGFuZ2VdKTtcclxuICAgIGNvbnN0IGNsZWFyU3VnZ2VzdGlvblNlc3Npb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0KG51bGwpO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtdKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUobnVsbCk7XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgPj0gTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXh0Q291bnQgPSByZXBocmFzZUhpZ2hsaWdodENvdW50ICsgMTtcclxuICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KG5leHRDb3VudCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSksIFN0cmluZyhuZXh0Q291bnQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKHRydWUpO1xyXG4gICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgIH0sIDEyMDApO1xyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5LCByZXBocmFzZUhpZ2hsaWdodENvdW50XSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHRSZWYgPSB1c2VSZWYodHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0KTtcclxuICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50ID0gdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0O1xyXG4gICAgZnVuY3Rpb24gaGFuZGxlT25DaGFuZ2UoZSkge1xyXG4gICAgICAgIGNvbnN0IHRleHQgPSBlLnRhcmdldC52YWx1ZTtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBzZXRDYXJldFBvc2l0aW9uKGNhcmV0UG9zKSB7XHJcbiAgICAgICAgY29uc3QgZWxlbSA9IHRleHRTcGFjZVJlZiA9PT0gbnVsbCB8fCB0ZXh0U3BhY2VSZWYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRleHRTcGFjZVJlZi5jdXJyZW50O1xyXG4gICAgICAgIGlmIChlbGVtICE9IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKGVsZW0uc2VsZWN0aW9uU3RhcnQpIHtcclxuICAgICAgICAgICAgICAgIGVsZW0uZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIGVsZW0uc2VsZWN0aW9uRW5kID0gY2FyZXRQb3M7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgZWxlbS5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIG9uQWN0aW9uU2VsZWN0KGFjdGlvblR5cGUpIHtcclxuICAgICAgICBjb25zdCB3aWxkQ2FyZCA9IFdpbGRDYXJkTWFwW2FjdGlvblR5cGVdO1xyXG4gICAgICAgIGlmICh3aWxkQ2FyZCAmJiB0ZXh0U3BhY2VSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHRleHQgfSA9IGluc2VydFRleHRBdEluZGV4KHdpbGRDYXJkLCBzdGFydCk7XHJcbiAgICAgICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uKHN0YXJ0ICsgMSk7XHJcbiAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBhZGRUZXh0T3JXcmFwKHdpbGRDYXJkKTtcclxuICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBvbkVtb2ppQWRkaXRpb24oZW1vamkpIHtcclxuICAgICAgICBjb25zdCB7IHRleHQgfSA9IGFkZFRleHQoZW1vamkpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhZGRUZXh0T3JXcmFwKHRleHRUb0FkZCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgbGV0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICBpZiAodGV4dFNwYWNlUmVmLmN1cnJlbnQgJiYgdGV4dFRvQWRkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgY29uc3Qgd2lsZENhcmQgPSB0ZXh0VG9BZGQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICAvKiogbm90aGluZyBpcyBzZWxlY3RlZCAqL1xyXG4gICAgICAgICAgICAgICAgLyoqIHNvIGFwcGVuZCB0aGUgd2lsZGNhcmQgYXQgdGhlIGVuZCAqL1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFkZFRleHQod2lsZENhcmQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGV4dCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLndyYXBwV2lsZGNhcmQoc3RhcnQsIGVuZCwgd2lsZENhcmQsIHRleHQpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaHRtbCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwodGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdGV4dCwgaHRtbCB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IHRleHQ6IHRleHQsIGh0bWw6IHRleHQgfTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZFRleHQodGV4dFRvQWRkKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgaWYgKHRleHRTcGFjZVJlZi5jdXJyZW50ICYmIHRleHRUb0FkZCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zZXJ0VGV4dEF0SW5kZXgodGV4dFRvQWRkLCBzdGFydCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dDogdGV4dCwgaHRtbDogdGV4dCB9O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gaW5zZXJ0VGV4dEF0SW5kZXgodGV4dFRvQWRkLCBpbmRleCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgbGV0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICB0ZXh0ID0gdGV4dC5zbGljZSgwLCBpbmRleCkgKyB0ZXh0VG9BZGQgKyB0ZXh0LnNsaWNlKGluZGV4KTtcclxuICAgICAgICBjb25zdCBodG1sID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTCh0ZXh0KTtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgIHJldHVybiB7IHRleHQsIGh0bWwgfTtcclxuICAgIH1cclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8ICFlZGl0b3JJbnN0YW5jZUtleSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNhY2hlZCA9IE51bWJlcihzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGdldEhpZ2hsaWdodFN0b3JhZ2VLZXkoZWRpdG9ySW5zdGFuY2VLZXkpKSB8fFxyXG4gICAgICAgICAgICAnMCcpO1xyXG4gICAgICAgIGlmICghTnVtYmVyLmlzTmFOKGNhY2hlZCkpIHtcclxuICAgICAgICAgICAgc2V0UmVwaHJhc2VIaWdobGlnaHRDb3VudChjYWNoZWQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtlZGl0b3JJbnN0YW5jZUtleV0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBjb25zdCBlbGlnaWJsZSA9ICEhY3VycmVudFRleHQudHJpbSgpICYmIGN1cnJlbnRUZXh0Lmxlbmd0aCA+PSByZXBocmFzZU1pbkNoYXJzO1xyXG4gICAgICAgIGlmIChwcmV2UmVwaHJhc2VFbGlnaWJsZVJlZi5jdXJyZW50ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHByZXZSZXBocmFzZUVsaWdpYmxlUmVmLmN1cnJlbnQgPSBlbGlnaWJsZTtcclxuICAgICAgICAgICAgaWYgKGVsaWdpYmxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50KCk7XHJcbiAgICAgICAgICAgICAgICB9LCBSRVBIUkFTRV9JRExFX01TKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZWxpZ2libGUpIHtcclxuICAgICAgICAgICAgcHJldlJlcGhyYXNlRWxpZ2libGVSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjcm9zc2VkVGhyZXNob2xkID0gIXByZXZSZXBocmFzZUVsaWdpYmxlUmVmLmN1cnJlbnQgJiYgZWxpZ2libGU7XHJcbiAgICAgICAgcHJldlJlcGhyYXNlRWxpZ2libGVSZWYuY3VycmVudCA9IHRydWU7XHJcbiAgICAgICAgaWYgKGNyb3NzZWRUaHJlc2hvbGQpIHtcclxuICAgICAgICAgICAgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0UmVmLmN1cnJlbnQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50KCk7XHJcbiAgICAgICAgfSwgUkVQSFJBU0VfSURMRV9NUyk7XHJcbiAgICB9LCBbY3VycmVudFRleHQsIHJlcGhyYXNlTWluQ2hhcnNdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGFjdGl2ZUNhbmRpZGF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzW3N1Z2dlc3Rpb25JbmRleF0gfHwgJyc7XHJcbiAgICBjb25zdCBzdWdnZXN0aW9uQmFzZUh0bWwgPSB1c2VNZW1vKCgpID0+IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwoc3VnZ2VzdGlvbkJhc2VUZXh0IHx8ICcnKSwgW3N1Z2dlc3Rpb25CYXNlVGV4dF0pO1xyXG4gICAgY29uc3QgYWN0aXZlQ2FuZGlkYXRlSHRtbCA9IHVzZU1lbW8oKCkgPT4gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChhY3RpdmVDYW5kaWRhdGUpLCBbYWN0aXZlQ2FuZGlkYXRlXSk7XHJcbiAgICBjb25zdCBjYW5SZWdlbmVyYXRlID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDwgTUFYX1NVR0dFU1RJT05TO1xyXG4gICAgY29uc3Qgc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID0gISFzdWdnZXN0aW9uQmFzZVRleHQgJiYgc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoID4gMDtcclxuICAgIGNvbnN0IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8IHN1Z2dlc3Rpb25JbmRleCA8PSAwO1xyXG4gICAgY29uc3QgaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDw9IDEgfHxcclxuICAgICAgICBzdWdnZXN0aW9uSW5kZXggPj0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBub2RlID0gc3VnZ2VzdGlvblNjcm9sbFJlZi5jdXJyZW50O1xyXG4gICAgICAgIGlmICghbm9kZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIG5vZGUuc2Nyb2xsVG9wID0gbm9kZS5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9LCBbYWN0aXZlQ2FuZGlkYXRlLCBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24sIGlzR2VuZXJhdGluZ10pO1xyXG4gICAgY29uc3QgZXhlY3V0ZUFJQWN0aW9uID0gdXNlQ2FsbGJhY2soKGFjdGlvblR5cGUsIHJlZ2VuZXJhdGVFeGlzdGluZyA9IGZhbHNlLCBpbnN0cnVjdGlvbk92ZXJyaWRlLCB0b25lT3ZlcnJpZGVJZCwgYWN0aW9uVmFyaWFudCA9IEFJQWN0aW9uVmFyaWFudC5ERUZBVUxUKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICB2YXIgX2IsIF9jLCBfZDtcclxuICAgICAgICBpZiAoIW9uQUlBY3Rpb25SZXF1ZXN0ICYmXHJcbiAgICAgICAgICAgICFhcGlBZGFwdGVyICYmXHJcbiAgICAgICAgICAgICghcmVxdWVzdEV4ZWN1dG9yIHx8ICFiYXNlVXJsKSkge1xyXG4gICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoJ0FJIGNvbmZpZ3VyYXRpb24gbWlzc2luZycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY3VycmVudFRleHQudHJpbSgpKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbWluQ2hhcnNGb3JBY3Rpb24gPSBtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICA1MDtcclxuICAgICAgICBpZiAoY3VycmVudFRleHQubGVuZ3RoIDwgbWluQ2hhcnNGb3JBY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpZiAoaXNHZW5lcmF0aW5nKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKHJlZ2VuZXJhdGVFeGlzdGluZyAmJiAhY2FuUmVnZW5lcmF0ZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGJhc2VDb25maWcgPSBhY3RpdmVBY3Rpb25Qcm9tcHRzW2FjdGlvblR5cGVdO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UgJiZcclxuICAgICAgICAgICAgdGVtcGxhdGVUeXBlID09PSAndXRpbGl0eScgJiZcclxuICAgICAgICAgICAgYWN0aW9uVmFyaWFudCA9PT0gQUlBY3Rpb25WYXJpYW50LlJFUEhSQVNFXHJcbiAgICAgICAgICAgID8gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBiYXNlQ29uZmlnKSwgeyBsYWJlbDogJ1JlcGhyYXNlJywgYmFzZVByb21wdDogVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgfSkgOiBiYXNlQ29uZmlnO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVG9uZUlkID0gdG9uZU92ZXJyaWRlSWQgfHxcclxuICAgICAgICAgICAgdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIGNvbmZpZy5kZWZhdWx0VG9uZUlkIHx8XHJcbiAgICAgICAgICAgICgoX2MgPSAoX2IgPSBjb25maWcudG9uZXMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYlswXSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmlkKTtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFRvbmUgPSAoX2QgPSBjb25maWcudG9uZXMpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5maW5kKCh0b25lKSA9PiB0b25lLmlkID09PSBzZWxlY3RlZFRvbmVJZCk7XHJcbiAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgPSBpbnN0cnVjdGlvbk92ZXJyaWRlICE9PSB1bmRlZmluZWRcclxuICAgICAgICAgICAgPyBpbnN0cnVjdGlvbk92ZXJyaWRlXHJcbiAgICAgICAgICAgIDogaW5zdHJ1Y3Rpb25UZXh0O1xyXG4gICAgICAgIGNvbnN0IHByb21wdCA9IChvbkJ1aWxkQUlQcm9tcHQgPT09IG51bGwgfHwgb25CdWlsZEFJUHJvbXB0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkJ1aWxkQUlQcm9tcHQoe1xyXG4gICAgICAgICAgICBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICBhY3Rpb25WYXJpYW50LFxyXG4gICAgICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICBjb25maWcsXHJcbiAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgIHRvbmVMYWJlbDogc2VsZWN0ZWRUb25lID09PSBudWxsIHx8IHNlbGVjdGVkVG9uZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZWN0ZWRUb25lLmxhYmVsLFxyXG4gICAgICAgICAgICBpbnN0cnVjdGlvblRleHQ6IGluc3RydWN0aW9uRm9yUHJvbXB0IHx8IHVuZGVmaW5lZCxcclxuICAgICAgICB9KSkgfHxcclxuICAgICAgICAgICAgYnVpbGRBY3Rpb25Qcm9tcHQoe1xyXG4gICAgICAgICAgICAgICAgY29uZmlnLFxyXG4gICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZCxcclxuICAgICAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIHNldElzR2VuZXJhdGluZyh0cnVlKTtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfYWN0aW9uX3RyaWdnZXJlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG9uQUlBY3Rpb25SZXF1ZXN0XHJcbiAgICAgICAgICAgICAgICA/IHlpZWxkIG9uQUlBY3Rpb25SZXF1ZXN0KHtcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblZhcmlhbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIDogeWllbGQgcmVxdWVzdEFJU3VnZ2VzdGlvbih7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgYmFzZVVybCxcclxuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgICAgIGludGVudCxcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICAgICAgICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZydcclxuICAgICAgICAgICAgICAgID8gcmVzdWx0LnRyaW0oKVxyXG4gICAgICAgICAgICAgICAgOiAoKHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3VsdC5ib2R5KSB8fCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKCFyZWdlbmVyYXRlRXhpc3RpbmcpIHtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25CYXNlVGV4dChjdXJyZW50VGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShhY3Rpb25UeXBlKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtjYW5kaWRhdGVdKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcygocHJldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IFsuLi5wcmV2LCBjYW5kaWRhdGVdLnNsaWNlKDAsIE1BWF9TVUdHRVNUSU9OUyk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgobmV4dC5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdGYWlsZWQgdG8gZ2VuZXJhdGUgQUkgc3VnZ2VzdGlvbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgc2V0SXNHZW5lcmF0aW5nKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9KSwgW1xyXG4gICAgICAgIHJlcXVlc3RFeGVjdXRvcixcclxuICAgICAgICBiYXNlVXJsLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBjYW5SZWdlbmVyYXRlLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGluc3RydWN0aW9uVGV4dCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIGVuZHBvaW50UGF0aCxcclxuICAgICAgICBhcGlBZGFwdGVyLFxyXG4gICAgICAgIGludGVudCxcclxuICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgIG9uRXJyb3IsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgICAgICBvbkFJQWN0aW9uUmVxdWVzdCxcclxuICAgICAgICBvbkJ1aWxkQUlQcm9tcHQsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFhY3RpdmVDYW5kaWRhdGUgfHwgIXN1Z2dlc3Rpb25CYXNlVGV4dCB8fCAhc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2FjY2VwdGVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGluSW5pdGlhbEFpUGhhc2UgPSBpbml0aWFsQWlQcmVmaWxsUGhhc2VSZWYuY3VycmVudDtcclxuICAgICAgICBjb25zdCB0YWdQYXlsb2FkID0gY29tcHV0ZUFpVGFnT25BY2NlcHQoe1xyXG4gICAgICAgICAgICBiYXNlbGluZVRleHQ6IHN1Z2dlc3Rpb25CYXNlVGV4dCxcclxuICAgICAgICAgICAgYWNjZXB0ZWRUZXh0OiBhY3RpdmVDYW5kaWRhdGUsXHJcbiAgICAgICAgICAgIGluaXRpYWxBaVByZWZpbGxQaGFzZTogaW5Jbml0aWFsQWlQaGFzZSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoaW5Jbml0aWFsQWlQaGFzZSkge1xyXG4gICAgICAgICAgICBpbml0aWFsQWlQcmVmaWxsUGhhc2VSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvbkFJVGFnQ29tcHV0ZWQgPT09IG51bGwgfHwgb25BSVRhZ0NvbXB1dGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVGFnQ29tcHV0ZWQodGFnUGF5bG9hZCk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGFjdGl2ZUNhbmRpZGF0ZSxcclxuICAgICAgICBzdWdnZXN0aW9uQmFzZVRleHQsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCxcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkLFxyXG4gICAgICAgIGVtaXRBSUV2ZW50LFxyXG4gICAgICAgIHRlbXBsYXRlSWQsXHJcbiAgICAgICAgb25BSVRhZ0NvbXB1dGVkLFxyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2Rpc2NhcmRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uKCk7XHJcbiAgICB9LCBbY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiwgZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKChyYXRpbmcpID0+IHtcclxuICAgICAgICBpZiAoIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2ZlZWRiYWNrX3N1Ym1pdHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICAgICAgcmF0aW5nLFxyXG4gICAgICAgICAgICBjYW5kaWRhdGVfaW5kZXg6IHN1Z2dlc3Rpb25JbmRleCArIDEsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LCBbZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzdWdnZXN0aW9uSW5kZXgsIHRlbXBsYXRlSWRdKTtcclxuICAgIGNvbnN0IGFpSGVhZGVyQWN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucylcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBlbmFibGVkQUlBY3Rpb25zLm1hcCgoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICAgICAgY29uc3QgYWN0aW9uQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICAgICAgY29uc3QgdG9uZUlkID0gdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICBhY3Rpb25Db25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAgICAgKChfYiA9IChfYSA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzBdKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWQpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBhY3Rpb25Db25maWcubGFiZWwsXHJcbiAgICAgICAgICAgICAgICBpc1ByaW1hcnk6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBpc0dlbmVyYXRpbmcgJiYgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHRlZDogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVwaHJhc2VIaWdobGlnaHRlZCxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhY3VycmVudFRleHQudHJpbSgpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQubGVuZ3RoIDxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG1pbkNoYXJzQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNTApIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgaXNHZW5lcmF0aW5nIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSksXHJcbiAgICAgICAgICAgICAgICBzaG93VG9uZURyb3Bkb3duOiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgICAgICAgICAgISEoKF9jID0gYWN0aW9uQ29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSxcclxuICAgICAgICAgICAgICAgIHRvbmVzOiBhY3Rpb25Db25maWcudG9uZXMsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZDogdG9uZUlkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGVuYWJsZWRBSUFjdGlvbnMsXHJcbiAgICAgICAgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMsXHJcbiAgICAgICAgYWN0aXZlQWN0aW9uUHJvbXB0cyxcclxuICAgICAgICB0b25lQnlBY3Rpb24sXHJcbiAgICAgICAgaXNHZW5lcmF0aW5nLFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbixcclxuICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgIF0pO1xyXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBhZGRUZXh0T3JXcmFwLFxyXG4gICAgICAgICAgICBhZGRUZXh0LFxyXG4gICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24sXHJcbiAgICAgICAgfTtcclxuICAgIH0sIFthZGRUZXh0T3JXcmFwLCBhZGRUZXh0LCBjdXJyZW50VGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoaW5wdXRWYWx1ZSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChpbnB1dFZhbHVlIHx8ICcnKTtcclxuICAgIH0sIFtpbnB1dFZhbHVlLCBzZXRFZGl0b3JUZXh0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICghbGltaXQgfHwgIW9uRXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBuZXh0RXJyb3IgPSBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdCA/IExJTUlUX1JFQUNIRUQgOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiAnJztcclxuICAgICAgICBpZiAobGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID09PSBuZXh0RXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBsYXN0RW1pdHRlZEVkaXRvckVycm9yUmVmLmN1cnJlbnQgPSBuZXh0RXJyb3I7XHJcbiAgICAgICAgb25FcnJvcihuZXh0RXJyb3IpO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCBlcnJvciwgbGltaXQsIG9uRXJyb3JdKTtcclxuICAgIHJldHVybiAoX2pzeHMoT3V0ZXJDb250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4cyhFZGl0b3JGb290ZXJSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvckZvb3RlclRpdGxlLCB7IGNoaWxkcmVuOiBlZGl0b3JIZWFkZXIgPyAoX2pzeChUaXRsZVNtYWxsLCBPYmplY3QuYXNzaWduKHsgXCJkYXRhLXRlc3RcIjogXCJib2R5LXRleHQtZm9yLWVkaXQtdGVtcGxhdGVcIiB9LCB7IGNoaWxkcmVuOiBlZGl0b3JIZWFkZXIgfSkpKSA6IG51bGwgfSksIF9qc3hzKEVkaXRvckZvb3RlclJpZ2h0LCB7IGNoaWxkcmVuOiBbZXJyb3IgJiYgZXJyb3IgIT09IExJTUlUX1JFQUNIRUQgPyAoX2pzeHMoX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBbX2pzeChJbmZvSWNvbiwgeyB3aWR0aDogMTYsIGhlaWdodDogMTYsIGNvbG9yOiBDT0xPUlMuY29udGVudC5uZWdhdGl2ZSB9KSwgX2pzeChCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IGNvbG9yOiBDT0xPUlMuY29udGVudC5uZWdhdGl2ZSB9LCB7IGNoaWxkcmVuOiBlcnJvciB9KSldIH0pKSA6IG51bGwsIGxpbWl0ID8gKF9qc3hzKEJvZHlDYXB0aW9uLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IGVycm9yID09PSBMSU1JVF9SRUFDSEVEIHx8IGN1cnJlbnRUZXh0Lmxlbmd0aCA+IGxpbWl0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IENPTE9SUy5jb250ZW50Lm5lZ2F0aXZlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IFtjdXJyZW50VGV4dC5sZW5ndGgsIFwiL1wiLCBsaW1pdF0gfSkpKSA6IG51bGxdIH0pXSB9KSwgX2pzeHMoQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgaXNFcnJvcjogISFlcnJvciB9LCB7IGNoaWxkcmVuOiBbc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID8gKF9qc3hzKFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgcmVmOiBzdWdnZXN0aW9uU2Nyb2xsUmVmIH0sIHsgY2hpbGRyZW46IFtfanN4KFN1Z2dlc3Rpb25CYXNlbGluZVRleHQsIHsgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHsgX19odG1sOiBzdWdnZXN0aW9uQmFzZUh0bWwgfSB9KSwgaXNHZW5lcmF0aW5nID8gKF9qc3goU3VnZ2VzdGlvbkNhbmRpZGF0ZVRleHQsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtYnVzeVwiOiBcInRydWVcIiB9LCB7IGNoaWxkcmVuOiBfanN4cyhTdWdnZXN0aW9uQ2FuZGlkYXRlU2tlbGV0b24sIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiODQlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjY4JVwiIH0pXSB9KSB9KSkpIDogKF9qc3goU3VnZ2VzdGlvbkNhbmRpZGF0ZVRleHQsIHsgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19odG1sOiBhY3RpdmVDYW5kaWRhdGVIdG1sLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSkpLCBfanN4cyhTdWdnZXN0aW9uQ29udHJvbHNSb3csIHsgY2hpbGRyZW46IFtfanN4cyhTdWdnZXN0aW9uQ291bnRlciwgeyBjaGlsZHJlbjogW3N1Z2dlc3Rpb25JbmRleCArIDEsIFwiL1wiLCBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGhdIH0pLCBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUHJldmlvdXMgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBkaXNhYmxlZDogaXNQcmV2U3VnZ2VzdGlvbkRpc2FibGVkLCBvbkNsaWNrOiAoKSA9PiBzZXRTdWdnZXN0aW9uSW5kZXgoKGlkeCkgPT4gTWF0aC5tYXgoMCwgaWR4IC0gMSkpIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hldnJvbkxlZnRJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSksIF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiTGlrZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUZlZWRiYWNrKCdsaWtlJykgfSwgeyBjaGlsZHJlbjogX2pzeChUaHVtYnNVcEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzbGlrZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkRpc2xpa2Ugc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiBoYW5kbGVGZWVkYmFjaygnZGlzbGlrZScpIH0sIHsgY2hpbGRyZW46IF9qc3goVGh1bWJzRG93bkljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIGNhblJlZ2VuZXJhdGUgPyAoX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogaXNHZW5lcmF0aW5nID8gJ1JlZ2VuZXJhdGluZ+KApicgOiAnUmVnZW5lcmF0ZScsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25SZWdlbmVyYXRlQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIFwiYXJpYS1idXN5XCI6IGlzR2VuZXJhdGluZywgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzR2VuZXJhdGluZywgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3VnZ2VzdGlvbkFjdGlvblR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IGlzR2VuZXJhdGluZyA/IChfanN4KFJlZ2VuZXJhdGVJY29uU2hpbW1lciwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUgfSkpIDogKF9qc3goUmV3aW5kSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkpIH0pKSB9KSkpIDogbnVsbCwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNjYXJkXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiQWNjZXB0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogaGFuZGxlQWNjZXB0U3VnZ2VzdGlvbiB9LCB7IGNoaWxkcmVuOiBfanN4KENoZWNrSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKV0gfSldIH0pKSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFzdGVkVGV4dCA9IGUuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFzdGVkVGV4dC5sZW5ndGggPiBMQVJHRV9JTlBVVF9USFJFU0hPTEQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWwgPSB0ZXh0U3BhY2VSZWYuY3VycmVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IChfYSA9IGVsID09PSBudWxsIHx8IGVsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlbC5zZWxlY3Rpb25TdGFydCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSAoX2IgPSBlbCA9PT0gbnVsbCB8fCBlbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogZWwuc2VsZWN0aW9uRW5kKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcmVmZXIgbGl2ZSBET00gdmFsdWUg4oCUIGBjdXJyZW50VGV4dGAgY2FuIGxhZyB0aGUgdGV4dGFyZWEgZm9yIGJpZyBwYXN0ZXMuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFzZSA9IChfYyA9IGVsID09PSBudWxsIHx8IGVsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlbC52YWx1ZSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dFRleHQgPSBiYXNlLnNsaWNlKDAsIHN0YXJ0KSArIHBhc3RlZFRleHQgKyBiYXNlLnNsaWNlKGVuZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dChuZXh0VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChuZXh0VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FyZXQgPSBzdGFydCArIHBhc3RlZFRleHQubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YS5zZXRTZWxlY3Rpb25SYW5nZShjYXJldCwgY2FyZXQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChfYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlIGludmFsaWQgcmFuZ2UgaW4gZWRnZSBicm93c2Vyc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiAoX2pzeChXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIHsgYWN0aW9uczogYWN0aW9ucywgcmVmOiB0ZXh0U3BhY2VSZWYsIG9uQWN0aW9uU2VsZWN0OiBvbkFjdGlvblNlbGVjdCwgUmlnaHRDb21wb25lbnQ6IFJpZ2h0Q29tcG9uZW50LCByaWdodEFjdGlvbnNEaXNhYmxlZDogc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uIHx8IGlzR2VuZXJhdGluZywgb25FbW9qaUNsaWNrOiBvbkVtb2ppQWRkaXRpb24sIGFpQWN0aW9uczogYWlIZWFkZXJBY3Rpb25zLCBkaXNhYmxlQWxsQWN0aW9uczogc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uIHx8IGlzR2VuZXJhdGluZywgaW5zdHJ1Y3Rpb25BY3RpdmU6IGlzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIG9uQUlJbnN0cnVjdGlvbnNDbGljazogKCkgPT4gc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSh0cnVlKSwgb25BSVRvbmVDaGFuZ2U6IChhY3Rpb25UeXBlLCB0b25lSWQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRvbmVCeUFjdGlvbigocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW2FjdGlvblR5cGVdOiB0b25lSWQgfSkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQUlUb25lU2VsZWN0ID09PSBudWxsIHx8IG9uQUlUb25lU2VsZWN0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVG9uZVNlbGVjdChhY3Rpb25UeXBlLCB0b25lSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdG9uZUlkLCBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIG9uQUlBY3Rpb25DbGljazogKGFjdGlvblR5cGUsIGFjdGlvblZhcmlhbnQgPSBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNhbWUgYWN0aW9uIHNob3VsZCBub3QgcmV0cmlnZ2VyIGZyb20gY2hpcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnZW5lcmF0ZSBpcyBvbmx5IHZpYSBleHBsaWNpdCByZWdlbmVyYXRlIGNvbnRyb2wuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmV3IGFjdGlvbiBzdGFydHMgYSBmcmVzaCBzdWdnZXN0aW9uIHNlc3Npb24uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFjdGlvblZhcmlhbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFjdGlvblZhcmlhbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IH0pKV0gfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuZXhwb3J0IHsgQUlfVEFHX0NIQU5HRV9SQVRJT19USFJFU0hPTEQsIGNvbXB1dGVBaVRhZ09uQWNjZXB0LCBsZXZlbnNodGVpbkRpc3RhbmNlLCB9IGZyb20gJy4vYWkvYWlUYWcnO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1XaGF0c0FwcFRleHRFZGl0b3IuanMubWFwIl19 */")),j=a.default("div","production"===process.env.NODE_ENV?{target:"ea7i3sh7"}:{target:"ea7i3sh7",label:"InstructionContainer"})("background:",R.COLORS.surface.standard,";display:flex;flex-direction:column;padding:8px 12px;gap:10px;border-radius:0 0 4px 4px;position:relative;"+("production"===process.env.NODE_ENV?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBOEh3QyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIEZyYWdtZW50IGFzIF9GcmFnbWVudCwganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZXdpbmRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3Jld2luZC5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzRG93bkljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvdGh1bWJzX2Rvd24uc3ZnJztcclxuaW1wb3J0IFRodW1ic1VwSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfdXAuc3ZnJztcclxuaW1wb3J0IHsgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9CYXNlV2hhdHNhcHBDb250ZW50TGFuZy5oZWxwZXJcIjtcclxuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUsIH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgeyBDT0xPUlMgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzL1RoZW1lXCI7XHJcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICcuLi90b29sdGlwcy9Ub29sdGlwJztcclxuaW1wb3J0IHsgQm9keUNhcHRpb24sIFRpdGxlU21hbGwgfSBmcm9tICcuLi9UeXBvZ3JhcGh5U3R5bGUnO1xyXG5pbXBvcnQgeyBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlMsIERFRkFVTFRfSU5TVFJVQ1RJT05fU1VHR0VTVElPTlMsIHJlc29sdmVBY3Rpb25Qcm9tcHRzLCB9IGZyb20gJy4vYWkvYWN0aW9uUmVnaXN0cnknO1xyXG5pbXBvcnQgeyBjb21wdXRlQWlUYWdPbkFjY2VwdCB9IGZyb20gJy4vYWkvYWlUYWcnO1xyXG5pbXBvcnQgeyBidWlsZEFjdGlvblByb21wdCwgcmVxdWVzdEFJU3VnZ2VzdGlvbiB9IGZyb20gJy4vYWkvYXBpJztcclxuaW1wb3J0IHsgQ29udGFpbmVyLCBFZGl0b3JGb290ZXJSaWdodCwgRWRpdG9yRm9vdGVyUm93LCBFZGl0b3JGb290ZXJUaXRsZSwgT3V0ZXJDb250YWluZXIsIFRleHRTcGFjZSwgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUFjdGlvblZhcmlhbnQsIEFJRWRpdG9yQWN0aW9uVHlwZXMsIEVkaXRvckFjdGlvblR5cGVzLCBXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIH0gZnJvbSAnLi9XaGF0c0FwcFRleHRFZGl0b3JIZWFkZXInO1xyXG5jb25zdCBMSU1JVF9SRUFDSEVEID0gJ0NoYXJhY3RlciBsaW1pdCByZWFjaGVkJztcclxuY29uc3QgUkVQSFJBU0VfSURMRV9NUyA9IDMwMDA7XHJcbmNvbnN0IE1BWF9SRVBIUkFTRV9ISUdITElHSFRTID0gNTtcclxuY29uc3QgTUFYX1NVR0dFU1RJT05TID0gMztcclxuY29uc3QgTEFSR0VfSU5QVVRfVEhSRVNIT0xEID0gMTIwMDtcclxuY29uc3QgVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgPSAnUmVwaHJhc2UgdGhpcyBXaGF0c0FwcCB1dGlsaXR5IHRlbXBsYXRlIHRvIGltcHJvdmUgY2xhcml0eSBhbmQgcmVhZGFiaWxpdHkgd2hpbGUgcHJlc2VydmluZyB2YXJpYWJsZXMsIGludGVudCwgYW5kIGNvbXBsaWFuY2UuJztcclxuY29uc3Qgc2tlbGV0b25QdWxzZSA9IGtleWZyYW1lcyBgXG5cdDAlIHsgb3BhY2l0eTogMC41NTsgfVxuXHQ1MCUgeyBvcGFjaXR5OiAxOyB9XG5cdDEwMCUgeyBvcGFjaXR5OiAwLjU1OyB9XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxNHB4IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogMTBweDtcblx0bWluLWhlaWdodDogMTUwcHg7XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkxpbmUgPSBzdHlsZWQuZGl2IGBcblx0aGVpZ2h0OiAxNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdHdpZHRoOiAkeyhwcm9wcykgPT4gcHJvcHMud2lkdGh9O1xuXHRiYWNrZ3JvdW5kOiAjZWNlY2VmO1xuXHRhbmltYXRpb246ICR7c2tlbGV0b25QdWxzZX0gMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHRtYXgtaGVpZ2h0OiAyNjBweDtcblx0b3ZlcmZsb3cteTogc2Nyb2xsO1xuXHRzY3JvbGxiYXItd2lkdGg6IHRoaW47XG5cdHNjcm9sbGJhci1jb2xvcjogI2M4YzhjZiB0cmFuc3BhcmVudDtcblx0Ojotd2Via2l0LXNjcm9sbGJhciB7XG5cdFx0d2lkdGg6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcblx0XHRiYWNrZ3JvdW5kOiAjYzhjOGNmO1xuXHRcdGJvcmRlci1yYWRpdXM6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcblx0XHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0fVxuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkJhc2VsaW5lVGV4dCA9IHN0eWxlZC5kaXYgYFxuXHR0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25DYW5kaWRhdGVUZXh0ID0gc3R5bGVkLmRpdiBgXG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkNhbmRpZGF0ZVNrZWxldG9uID0gc3R5bGVkLmRpdiBgXG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHR3aWR0aDogMTAwJTtcblx0bWluLWhlaWdodDogNDBweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db250cm9sc1JvdyA9IHN0eWxlZC5kaXYgYFxuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDZweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db3VudGVyID0gc3R5bGVkLnNwYW4gYFxuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkljb25CdXR0b24gPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0cGFkZGluZzogNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdGRpc3BsYXk6IGlubGluZS1mbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0dHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjEycyBlYXNlO1xuXHQ6bm90KDpkaXNhYmxlZCk6aG92ZXIge1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICR7Q09MT1JTLnN1cmZhY2UuaG92ZXJlZH07XG5cdH1cblx0OmRpc2FibGVkIHtcblx0XHRvcGFjaXR5OiAwLjM1O1xuXHRcdGN1cnNvcjogbm90LWFsbG93ZWQ7XG5cdH1cbmA7XHJcbi8qKiBSZWdlbmVyYXRlIHN0YXlzIGZ1bGwgb3BhY2l0eSB3aGlsZSBkaXNhYmxlZCBzbyB0aGUgbG9hZGluZyBzaGltbWVyIHN0YXlzIHZpc2libGUgKHNhbWUgcHVsc2UgYXMgZWRpdG9yIHNrZWxldG9uKS4gKi9cclxuY29uc3QgU3VnZ2VzdGlvblJlZ2VuZXJhdGVCdXR0b24gPSBzdHlsZWQoU3VnZ2VzdGlvbkljb25CdXR0b24pIGBcblx0OmRpc2FibGVkIHtcblx0XHRvcGFjaXR5OiAxO1xuXHRcdGN1cnNvcjogd2FpdDtcblx0fVxuYDtcclxuY29uc3QgUmVnZW5lcmF0ZUljb25TaGltbWVyID0gc3R5bGVkLmRpdiBgXG5cdHdpZHRoOiAxNHB4O1xuXHRoZWlnaHQ6IDE0cHg7XG5cdGJvcmRlci1yYWRpdXM6IDRweDtcblx0YmFja2dyb3VuZDogI2VjZWNlZjtcblx0ZmxleC1zaHJpbms6IDA7XG5cdGFuaW1hdGlvbjogJHtza2VsZXRvblB1bHNlfSAxLjFzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xuYDtcclxuLyoqIFNhbWUgYm90dG9tIHRvb2xiYXIgc2xvdCBhcyBgV2hhdHNBcHBUZXh0RWRpdG9ySGVhZGVyYCDigJQgcmVwbGFjZXMgdGhlIGZ1bGwgaWNvbi9BSSBwYW5lbCB3aGlsZSBvcGVuLiAqL1xyXG5jb25zdCBJbnN0cnVjdGlvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblx0cGFkZGluZzogOHB4IDEycHg7XG5cdGdhcDogMTBweDtcblx0Ym9yZGVyLXJhZGl1czogMCAwIDRweCA0cHg7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXRSb3cgPSBzdHlsZWQuZGl2IGBcblx0Ym9yZGVyOiAxcHggc29saWQgI2Y1YTRjMDtcblx0Ym9yZGVyLXJhZGl1czogMTBweDtcblx0cGFkZGluZzogOHB4IDEwcHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbklucHV0ID0gc3R5bGVkLmlucHV0IGBcblx0ZmxleDogMTtcblx0bWluLXdpZHRoOiAwO1xuXHRib3JkZXI6IDA7XG5cdG91dGxpbmU6IG5vbmU7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25BY3Rpb25zID0gc3R5bGVkLmRpdiBgXG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQ2FuY2VsID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnNlY29uZGFyeX07XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0Zm9udC13ZWlnaHQ6IDUwMDtcblx0cGFkZGluZzogMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbXByb3ZlID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMXB4IHNvbGlkICM1ZDNhNzI7XG5cdGNvbG9yOiAjNWQzYTcyO1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0Ym9yZGVyLXJhZGl1czogOHB4O1xuXHRwYWRkaW5nOiA4cHggMTRweDtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRsaW5lLWhlaWdodDogMS4xO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0ID0gc3R5bGVkLmRpdiBgXG5cdG1hcmdpbi10b3A6IDEwcHg7XG5cdGJvcmRlci1yYWRpdXM6IDEycHg7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3gtc2hhZG93OiAwIDZweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkJ1dHRvbiA9IHN0eWxlZC5idXR0b24gYFxuXHR3aWR0aDogMTAwJTtcblx0Ym9yZGVyOiAwO1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgJHtDT0xPUlMuc3Ryb2tlLnByaW1hcnl9O1xuXHRiYWNrZ3JvdW5kOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyNlNWYzZTgnIDogJ3RyYW5zcGFyZW50Jyl9O1xuXHRjb2xvcjogJHsocHJvcHMpID0+IChwcm9wcy5zZWxlY3RlZCA/ICcjMWU2YjM0JyA6IENPTE9SUy5jb250ZW50LnByaW1hcnkpfTtcblx0dGV4dC1hbGlnbjogbGVmdDtcblx0cGFkZGluZzogMTJweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjI7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0OmZpcnN0LW9mLXR5cGUge1xuXHRcdGJvcmRlci10b3A6IDA7XG5cdH1cbmA7XHJcbmNvbnN0IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nID0gbmV3IEJhc2VXaGF0c2FwcENvbnRlbnRMYW5nSGVscGVyKCk7XHJcbmNvbnN0IFdpbGRDYXJkTWFwID0ge1xyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLkJPTERdOiAnKicsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuSVRBTElDXTogJ18nLFxyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLlNUUklLRVRIUk9VR0hdOiAnficsXHJcbn07XHJcbmZ1bmN0aW9uIGdldEhpZ2hsaWdodFN0b3JhZ2VLZXkoZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgIHJldHVybiBgd2hhdHNhcHAtZWRpdG9yLXJlcGhyYXNlLWhpZ2hsaWdodC0ke2VkaXRvckluc3RhbmNlS2V5IHx8ICdkZWZhdWx0J31gO1xyXG59XHJcbmV4cG9ydCBjb25zdCBXaGF0c0FwcFRleHRFZGl0b3IgPSBSZWFjdC5mb3J3YXJkUmVmKChfYSwgcmVmKSA9PiB7XHJcbiAgICB2YXIgeyBvbkNoYW5nZSwgb25DbGlja1ZhcmlhYmxlLCB0ZXh0OiBpbnB1dFZhbHVlLCBSaWdodENvbXBvbmVudCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yLCByb3dzLCBhY3Rpb25zLCBlZGl0b3JJbnN0YW5jZUtleSwgdGVtcGxhdGVUeXBlID0gJ21hcmtldGluZycsIHRlbXBsYXRlSWQsIHJlcXVlc3RFeGVjdXRvciwgYmFzZVVybCwgZW5kcG9pbnRQYXRoLCB1c2VDYXNlLCBzdG9yZUlkLCBhcGlBZGFwdGVyLCBjb252ZXJzYXRpb25JZCA9ICd3aGF0c2FwcC10ZW1wbGF0ZS1lZGl0b3InLCBzeXN0ZW1JZCA9ICd3aGF0c2FwcC13cml0ZXInLCBpbnRlbnQgPSAnZGVmYXVsdCcsIGVuYWJsZWRBSUFjdGlvbnMgPSBbXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlNIT1JURU4sXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FWFBBTkQsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FTU9KSUZZLFxyXG4gICAgXSwgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMgPSBmYWxzZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCBhaUFjdGlvbk1pbkNoYXJzLCBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgb25BSUV2ZW50LCBvbkFJVGFnQ29tcHV0ZWQsIHByZWZpbGxXYXNBaUdlbmVyYXRlZCA9IGZhbHNlLCBlZGl0b3JIZWFkZXIsIG9uQUlUb25lU2VsZWN0LCBvbkFJQWN0aW9uUmVxdWVzdCwgb25CdWlsZEFJUHJvbXB0IH0gPSBfYSwgdGV4dEFyZWFQcm9wcyA9IF9fcmVzdChfYSwgW1wib25DaGFuZ2VcIiwgXCJvbkNsaWNrVmFyaWFibGVcIiwgXCJ0ZXh0XCIsIFwiUmlnaHRDb21wb25lbnRcIiwgXCJlcnJvclwiLCBcImxpbWl0XCIsIFwib25FcnJvclwiLCBcInJvd3NcIiwgXCJhY3Rpb25zXCIsIFwiZWRpdG9ySW5zdGFuY2VLZXlcIiwgXCJ0ZW1wbGF0ZVR5cGVcIiwgXCJ0ZW1wbGF0ZUlkXCIsIFwicmVxdWVzdEV4ZWN1dG9yXCIsIFwiYmFzZVVybFwiLCBcImVuZHBvaW50UGF0aFwiLCBcInVzZUNhc2VcIiwgXCJzdG9yZUlkXCIsIFwiYXBpQWRhcHRlclwiLCBcImNvbnZlcnNhdGlvbklkXCIsIFwic3lzdGVtSWRcIiwgXCJpbnRlbnRcIiwgXCJlbmFibGVkQUlBY3Rpb25zXCIsIFwiZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnNcIiwgXCJwcm9tcHRPdmVycmlkZXNcIiwgXCJyZXBocmFzZVRvbmVzXCIsIFwiYWlBY3Rpb25NaW5DaGFyc1wiLCBcImluc3RydWN0aW9uU3VnZ2VzdGlvbnNcIiwgXCJvbkFJRXZlbnRcIiwgXCJvbkFJVGFnQ29tcHV0ZWRcIiwgXCJwcmVmaWxsV2FzQWlHZW5lcmF0ZWRcIiwgXCJlZGl0b3JIZWFkZXJcIiwgXCJvbkFJVG9uZVNlbGVjdFwiLCBcIm9uQUlBY3Rpb25SZXF1ZXN0XCIsIFwib25CdWlsZEFJUHJvbXB0XCJdKTtcclxuICAgIGNvbnN0IHRleHRTcGFjZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IFtjdXJyZW50VGV4dCwgc2V0Q3VycmVudFRleHRdID0gdXNlU3RhdGUoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICBjb25zdCBbaXNSZXBocmFzZUhpZ2hsaWdodGVkLCBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW3JlcGhyYXNlSGlnaGxpZ2h0Q291bnQsIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbaXNHZW5lcmF0aW5nLCBzZXRJc0dlbmVyYXRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2lzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGVdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2luc3RydWN0aW9uVGV4dCwgc2V0SW5zdHJ1Y3Rpb25UZXh0XSA9IHVzZVN0YXRlKCcnKTtcclxuICAgIGNvbnN0IFt0b25lQnlBY3Rpb24sIHNldFRvbmVCeUFjdGlvbl0gPSB1c2VTdGF0ZSh7fSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkJhc2VUZXh0LCBzZXRTdWdnZXN0aW9uQmFzZVRleHRdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkNhbmRpZGF0ZXMsIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzXSA9IHVzZVN0YXRlKFtdKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uSW5kZXgsIHNldFN1Z2dlc3Rpb25JbmRleF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGVdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBzdWdnZXN0aW9uU2Nyb2xsUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgcmVwaHJhc2VJZGxlUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgaGlnaGxpZ2h0UmVzZXRSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICAvKipcclxuICAgICAqIFByaW9yIGVsaWdpYmlsaXR5IGZvciByZXBocmFzZSBudWRnZSAobnVsbCA9IG5vdCBpbml0aWFsaXplZCkuXHJcbiAgICAgKiBNYXRjaGVzIHRoZSBjaGlwOiBub24tZW1wdHkgdHJpbSBhbmQgbGVuZ3RoIOKJpSBtaW4g4oCUIHNhbWUgYXMgYGFpSGVhZGVyQWN0aW9uc2AgZGlzYWJsZWQgcnVsZXMuXHJcbiAgICAgKi9cclxuICAgIGNvbnN0IHByZXZSZXBocmFzZUVsaWdpYmxlUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgZGVmZXJyZWRIdG1sUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgbGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIC8qKiBGaXJzdCBhY2NlcHQgYWZ0ZXIgZnVsbC1BSSBwcmVmaWxsIChgcHJlZmlsbFdhc0FpR2VuZXJhdGVkYCk7IGNsZWFyZWQgYWZ0ZXIgb25lIGFjY2VwdC4gKi9cclxuICAgIGNvbnN0IGluaXRpYWxBaVByZWZpbGxQaGFzZVJlZiA9IHVzZVJlZighIXByZWZpbGxXYXNBaUdlbmVyYXRlZCk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGluaXRpYWxBaVByZWZpbGxQaGFzZVJlZi5jdXJyZW50ID0gISFwcmVmaWxsV2FzQWlHZW5lcmF0ZWQ7XHJcbiAgICB9LCBbcHJlZmlsbFdhc0FpR2VuZXJhdGVkLCBlZGl0b3JJbnN0YW5jZUtleV0pO1xyXG4gICAgY29uc3QgYWN0aXZlQWN0aW9uUHJvbXB0cyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiByZXNvbHZlQWN0aW9uUHJvbXB0cyh0ZW1wbGF0ZVR5cGUsIHByb21wdE92ZXJyaWRlcywgcmVwaHJhc2VUb25lcyk7XHJcbiAgICB9LCBbcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCB0ZW1wbGF0ZVR5cGVdKTtcclxuICAgIGNvbnN0IGZpbHRlcmVkSW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGlmICghcXVlcnkpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucy5maWx0ZXIoKHN1Z2dlc3Rpb24pID0+IHN1Z2dlc3Rpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeSkpO1xyXG4gICAgfSwgW2luc3RydWN0aW9uU3VnZ2VzdGlvbnMsIGluc3RydWN0aW9uVGV4dF0pO1xyXG4gICAgY29uc3QgbWluQ2hhcnNCeUFjdGlvbiA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUyksIChhaUFjdGlvbk1pbkNoYXJzIHx8IHt9KSk7XHJcbiAgICB9LCBbYWlBY3Rpb25NaW5DaGFyc10pO1xyXG4gICAgY29uc3QgcmVwaHJhc2VNaW5DaGFycyA9IG1pbkNoYXJzQnlBY3Rpb25bQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV0gfHxcclxuICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV07XHJcbiAgICBjb25zdCBlbWl0QUlFdmVudCA9IHVzZUNhbGxiYWNrKChuYW1lLCBwYXlsb2FkKSA9PiB7XHJcbiAgICAgICAgb25BSUV2ZW50ID09PSBudWxsIHx8IG9uQUlFdmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSUV2ZW50KG5hbWUsIHBheWxvYWQpO1xyXG4gICAgfSwgW29uQUlFdmVudF0pO1xyXG4gICAgY29uc3Qgc2V0RWRpdG9yVGV4dCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIHNldEN1cnJlbnRUZXh0KChwcmV2KSA9PiAocHJldiA9PT0gbmV4dFRleHQgPyBwcmV2IDogbmV4dFRleHQpKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGVtaXRDaGFuZ2VXaXRoR3VhcmQgPSB1c2VDYWxsYmFjaygobmV4dFRleHQpID0+IHtcclxuICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGRlZmVycmVkSHRtbFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5leHRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIG5leHRUZXh0KTtcclxuICAgICAgICAgICAgZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChuZXh0VGV4dCkpO1xyXG4gICAgICAgICAgICB9LCAxNik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICB9LCBbb25DaGFuZ2VdKTtcclxuICAgIGNvbnN0IGNsZWFyU3VnZ2VzdGlvblNlc3Npb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0KG51bGwpO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtdKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUobnVsbCk7XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgPj0gTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXh0Q291bnQgPSByZXBocmFzZUhpZ2hsaWdodENvdW50ICsgMTtcclxuICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KG5leHRDb3VudCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSksIFN0cmluZyhuZXh0Q291bnQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKHRydWUpO1xyXG4gICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgIH0sIDEyMDApO1xyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5LCByZXBocmFzZUhpZ2hsaWdodENvdW50XSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHRSZWYgPSB1c2VSZWYodHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0KTtcclxuICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50ID0gdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0O1xyXG4gICAgZnVuY3Rpb24gaGFuZGxlT25DaGFuZ2UoZSkge1xyXG4gICAgICAgIGNvbnN0IHRleHQgPSBlLnRhcmdldC52YWx1ZTtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBzZXRDYXJldFBvc2l0aW9uKGNhcmV0UG9zKSB7XHJcbiAgICAgICAgY29uc3QgZWxlbSA9IHRleHRTcGFjZVJlZiA9PT0gbnVsbCB8fCB0ZXh0U3BhY2VSZWYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRleHRTcGFjZVJlZi5jdXJyZW50O1xyXG4gICAgICAgIGlmIChlbGVtICE9IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKGVsZW0uc2VsZWN0aW9uU3RhcnQpIHtcclxuICAgICAgICAgICAgICAgIGVsZW0uZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIGVsZW0uc2VsZWN0aW9uRW5kID0gY2FyZXRQb3M7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgZWxlbS5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIG9uQWN0aW9uU2VsZWN0KGFjdGlvblR5cGUpIHtcclxuICAgICAgICBjb25zdCB3aWxkQ2FyZCA9IFdpbGRDYXJkTWFwW2FjdGlvblR5cGVdO1xyXG4gICAgICAgIGlmICh3aWxkQ2FyZCAmJiB0ZXh0U3BhY2VSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHRleHQgfSA9IGluc2VydFRleHRBdEluZGV4KHdpbGRDYXJkLCBzdGFydCk7XHJcbiAgICAgICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uKHN0YXJ0ICsgMSk7XHJcbiAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBhZGRUZXh0T3JXcmFwKHdpbGRDYXJkKTtcclxuICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBvbkVtb2ppQWRkaXRpb24oZW1vamkpIHtcclxuICAgICAgICBjb25zdCB7IHRleHQgfSA9IGFkZFRleHQoZW1vamkpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhZGRUZXh0T3JXcmFwKHRleHRUb0FkZCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgbGV0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICBpZiAodGV4dFNwYWNlUmVmLmN1cnJlbnQgJiYgdGV4dFRvQWRkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgY29uc3Qgd2lsZENhcmQgPSB0ZXh0VG9BZGQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICAvKiogbm90aGluZyBpcyBzZWxlY3RlZCAqL1xyXG4gICAgICAgICAgICAgICAgLyoqIHNvIGFwcGVuZCB0aGUgd2lsZGNhcmQgYXQgdGhlIGVuZCAqL1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFkZFRleHQod2lsZENhcmQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGV4dCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLndyYXBwV2lsZGNhcmQoc3RhcnQsIGVuZCwgd2lsZENhcmQsIHRleHQpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaHRtbCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwodGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdGV4dCwgaHRtbCB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IHRleHQ6IHRleHQsIGh0bWw6IHRleHQgfTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZFRleHQodGV4dFRvQWRkKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgaWYgKHRleHRTcGFjZVJlZi5jdXJyZW50ICYmIHRleHRUb0FkZCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zZXJ0VGV4dEF0SW5kZXgodGV4dFRvQWRkLCBzdGFydCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dDogdGV4dCwgaHRtbDogdGV4dCB9O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gaW5zZXJ0VGV4dEF0SW5kZXgodGV4dFRvQWRkLCBpbmRleCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgbGV0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICB0ZXh0ID0gdGV4dC5zbGljZSgwLCBpbmRleCkgKyB0ZXh0VG9BZGQgKyB0ZXh0LnNsaWNlKGluZGV4KTtcclxuICAgICAgICBjb25zdCBodG1sID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTCh0ZXh0KTtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgIHJldHVybiB7IHRleHQsIGh0bWwgfTtcclxuICAgIH1cclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8ICFlZGl0b3JJbnN0YW5jZUtleSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNhY2hlZCA9IE51bWJlcihzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGdldEhpZ2hsaWdodFN0b3JhZ2VLZXkoZWRpdG9ySW5zdGFuY2VLZXkpKSB8fFxyXG4gICAgICAgICAgICAnMCcpO1xyXG4gICAgICAgIGlmICghTnVtYmVyLmlzTmFOKGNhY2hlZCkpIHtcclxuICAgICAgICAgICAgc2V0UmVwaHJhc2VIaWdobGlnaHRDb3VudChjYWNoZWQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtlZGl0b3JJbnN0YW5jZUtleV0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBjb25zdCBlbGlnaWJsZSA9ICEhY3VycmVudFRleHQudHJpbSgpICYmIGN1cnJlbnRUZXh0Lmxlbmd0aCA+PSByZXBocmFzZU1pbkNoYXJzO1xyXG4gICAgICAgIGlmIChwcmV2UmVwaHJhc2VFbGlnaWJsZVJlZi5jdXJyZW50ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHByZXZSZXBocmFzZUVsaWdpYmxlUmVmLmN1cnJlbnQgPSBlbGlnaWJsZTtcclxuICAgICAgICAgICAgaWYgKGVsaWdpYmxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50KCk7XHJcbiAgICAgICAgICAgICAgICB9LCBSRVBIUkFTRV9JRExFX01TKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZWxpZ2libGUpIHtcclxuICAgICAgICAgICAgcHJldlJlcGhyYXNlRWxpZ2libGVSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjcm9zc2VkVGhyZXNob2xkID0gIXByZXZSZXBocmFzZUVsaWdpYmxlUmVmLmN1cnJlbnQgJiYgZWxpZ2libGU7XHJcbiAgICAgICAgcHJldlJlcGhyYXNlRWxpZ2libGVSZWYuY3VycmVudCA9IHRydWU7XHJcbiAgICAgICAgaWYgKGNyb3NzZWRUaHJlc2hvbGQpIHtcclxuICAgICAgICAgICAgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0UmVmLmN1cnJlbnQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50KCk7XHJcbiAgICAgICAgfSwgUkVQSFJBU0VfSURMRV9NUyk7XHJcbiAgICB9LCBbY3VycmVudFRleHQsIHJlcGhyYXNlTWluQ2hhcnNdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGFjdGl2ZUNhbmRpZGF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzW3N1Z2dlc3Rpb25JbmRleF0gfHwgJyc7XHJcbiAgICBjb25zdCBzdWdnZXN0aW9uQmFzZUh0bWwgPSB1c2VNZW1vKCgpID0+IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwoc3VnZ2VzdGlvbkJhc2VUZXh0IHx8ICcnKSwgW3N1Z2dlc3Rpb25CYXNlVGV4dF0pO1xyXG4gICAgY29uc3QgYWN0aXZlQ2FuZGlkYXRlSHRtbCA9IHVzZU1lbW8oKCkgPT4gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChhY3RpdmVDYW5kaWRhdGUpLCBbYWN0aXZlQ2FuZGlkYXRlXSk7XHJcbiAgICBjb25zdCBjYW5SZWdlbmVyYXRlID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDwgTUFYX1NVR0dFU1RJT05TO1xyXG4gICAgY29uc3Qgc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID0gISFzdWdnZXN0aW9uQmFzZVRleHQgJiYgc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoID4gMDtcclxuICAgIGNvbnN0IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8IHN1Z2dlc3Rpb25JbmRleCA8PSAwO1xyXG4gICAgY29uc3QgaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDw9IDEgfHxcclxuICAgICAgICBzdWdnZXN0aW9uSW5kZXggPj0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBub2RlID0gc3VnZ2VzdGlvblNjcm9sbFJlZi5jdXJyZW50O1xyXG4gICAgICAgIGlmICghbm9kZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIG5vZGUuc2Nyb2xsVG9wID0gbm9kZS5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9LCBbYWN0aXZlQ2FuZGlkYXRlLCBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24sIGlzR2VuZXJhdGluZ10pO1xyXG4gICAgY29uc3QgZXhlY3V0ZUFJQWN0aW9uID0gdXNlQ2FsbGJhY2soKGFjdGlvblR5cGUsIHJlZ2VuZXJhdGVFeGlzdGluZyA9IGZhbHNlLCBpbnN0cnVjdGlvbk92ZXJyaWRlLCB0b25lT3ZlcnJpZGVJZCwgYWN0aW9uVmFyaWFudCA9IEFJQWN0aW9uVmFyaWFudC5ERUZBVUxUKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICB2YXIgX2IsIF9jLCBfZDtcclxuICAgICAgICBpZiAoIW9uQUlBY3Rpb25SZXF1ZXN0ICYmXHJcbiAgICAgICAgICAgICFhcGlBZGFwdGVyICYmXHJcbiAgICAgICAgICAgICghcmVxdWVzdEV4ZWN1dG9yIHx8ICFiYXNlVXJsKSkge1xyXG4gICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoJ0FJIGNvbmZpZ3VyYXRpb24gbWlzc2luZycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY3VycmVudFRleHQudHJpbSgpKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbWluQ2hhcnNGb3JBY3Rpb24gPSBtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICA1MDtcclxuICAgICAgICBpZiAoY3VycmVudFRleHQubGVuZ3RoIDwgbWluQ2hhcnNGb3JBY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpZiAoaXNHZW5lcmF0aW5nKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKHJlZ2VuZXJhdGVFeGlzdGluZyAmJiAhY2FuUmVnZW5lcmF0ZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGJhc2VDb25maWcgPSBhY3RpdmVBY3Rpb25Qcm9tcHRzW2FjdGlvblR5cGVdO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UgJiZcclxuICAgICAgICAgICAgdGVtcGxhdGVUeXBlID09PSAndXRpbGl0eScgJiZcclxuICAgICAgICAgICAgYWN0aW9uVmFyaWFudCA9PT0gQUlBY3Rpb25WYXJpYW50LlJFUEhSQVNFXHJcbiAgICAgICAgICAgID8gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBiYXNlQ29uZmlnKSwgeyBsYWJlbDogJ1JlcGhyYXNlJywgYmFzZVByb21wdDogVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgfSkgOiBiYXNlQ29uZmlnO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVG9uZUlkID0gdG9uZU92ZXJyaWRlSWQgfHxcclxuICAgICAgICAgICAgdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIGNvbmZpZy5kZWZhdWx0VG9uZUlkIHx8XHJcbiAgICAgICAgICAgICgoX2MgPSAoX2IgPSBjb25maWcudG9uZXMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYlswXSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmlkKTtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFRvbmUgPSAoX2QgPSBjb25maWcudG9uZXMpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5maW5kKCh0b25lKSA9PiB0b25lLmlkID09PSBzZWxlY3RlZFRvbmVJZCk7XHJcbiAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgPSBpbnN0cnVjdGlvbk92ZXJyaWRlICE9PSB1bmRlZmluZWRcclxuICAgICAgICAgICAgPyBpbnN0cnVjdGlvbk92ZXJyaWRlXHJcbiAgICAgICAgICAgIDogaW5zdHJ1Y3Rpb25UZXh0O1xyXG4gICAgICAgIGNvbnN0IHByb21wdCA9IChvbkJ1aWxkQUlQcm9tcHQgPT09IG51bGwgfHwgb25CdWlsZEFJUHJvbXB0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkJ1aWxkQUlQcm9tcHQoe1xyXG4gICAgICAgICAgICBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICBhY3Rpb25WYXJpYW50LFxyXG4gICAgICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICBjb25maWcsXHJcbiAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgIHRvbmVMYWJlbDogc2VsZWN0ZWRUb25lID09PSBudWxsIHx8IHNlbGVjdGVkVG9uZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZWN0ZWRUb25lLmxhYmVsLFxyXG4gICAgICAgICAgICBpbnN0cnVjdGlvblRleHQ6IGluc3RydWN0aW9uRm9yUHJvbXB0IHx8IHVuZGVmaW5lZCxcclxuICAgICAgICB9KSkgfHxcclxuICAgICAgICAgICAgYnVpbGRBY3Rpb25Qcm9tcHQoe1xyXG4gICAgICAgICAgICAgICAgY29uZmlnLFxyXG4gICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZCxcclxuICAgICAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIHNldElzR2VuZXJhdGluZyh0cnVlKTtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfYWN0aW9uX3RyaWdnZXJlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG9uQUlBY3Rpb25SZXF1ZXN0XHJcbiAgICAgICAgICAgICAgICA/IHlpZWxkIG9uQUlBY3Rpb25SZXF1ZXN0KHtcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblZhcmlhbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIDogeWllbGQgcmVxdWVzdEFJU3VnZ2VzdGlvbih7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgYmFzZVVybCxcclxuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgICAgIGludGVudCxcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICAgICAgICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZydcclxuICAgICAgICAgICAgICAgID8gcmVzdWx0LnRyaW0oKVxyXG4gICAgICAgICAgICAgICAgOiAoKHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3VsdC5ib2R5KSB8fCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKCFyZWdlbmVyYXRlRXhpc3RpbmcpIHtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25CYXNlVGV4dChjdXJyZW50VGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShhY3Rpb25UeXBlKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtjYW5kaWRhdGVdKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcygocHJldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IFsuLi5wcmV2LCBjYW5kaWRhdGVdLnNsaWNlKDAsIE1BWF9TVUdHRVNUSU9OUyk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgobmV4dC5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdGYWlsZWQgdG8gZ2VuZXJhdGUgQUkgc3VnZ2VzdGlvbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgc2V0SXNHZW5lcmF0aW5nKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9KSwgW1xyXG4gICAgICAgIHJlcXVlc3RFeGVjdXRvcixcclxuICAgICAgICBiYXNlVXJsLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBjYW5SZWdlbmVyYXRlLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGluc3RydWN0aW9uVGV4dCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIGVuZHBvaW50UGF0aCxcclxuICAgICAgICBhcGlBZGFwdGVyLFxyXG4gICAgICAgIGludGVudCxcclxuICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgIG9uRXJyb3IsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgICAgICBvbkFJQWN0aW9uUmVxdWVzdCxcclxuICAgICAgICBvbkJ1aWxkQUlQcm9tcHQsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFhY3RpdmVDYW5kaWRhdGUgfHwgIXN1Z2dlc3Rpb25CYXNlVGV4dCB8fCAhc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2FjY2VwdGVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGluSW5pdGlhbEFpUGhhc2UgPSBpbml0aWFsQWlQcmVmaWxsUGhhc2VSZWYuY3VycmVudDtcclxuICAgICAgICBjb25zdCB0YWdQYXlsb2FkID0gY29tcHV0ZUFpVGFnT25BY2NlcHQoe1xyXG4gICAgICAgICAgICBiYXNlbGluZVRleHQ6IHN1Z2dlc3Rpb25CYXNlVGV4dCxcclxuICAgICAgICAgICAgYWNjZXB0ZWRUZXh0OiBhY3RpdmVDYW5kaWRhdGUsXHJcbiAgICAgICAgICAgIGluaXRpYWxBaVByZWZpbGxQaGFzZTogaW5Jbml0aWFsQWlQaGFzZSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoaW5Jbml0aWFsQWlQaGFzZSkge1xyXG4gICAgICAgICAgICBpbml0aWFsQWlQcmVmaWxsUGhhc2VSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvbkFJVGFnQ29tcHV0ZWQgPT09IG51bGwgfHwgb25BSVRhZ0NvbXB1dGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVGFnQ29tcHV0ZWQodGFnUGF5bG9hZCk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGFjdGl2ZUNhbmRpZGF0ZSxcclxuICAgICAgICBzdWdnZXN0aW9uQmFzZVRleHQsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCxcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkLFxyXG4gICAgICAgIGVtaXRBSUV2ZW50LFxyXG4gICAgICAgIHRlbXBsYXRlSWQsXHJcbiAgICAgICAgb25BSVRhZ0NvbXB1dGVkLFxyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2Rpc2NhcmRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uKCk7XHJcbiAgICB9LCBbY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiwgZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKChyYXRpbmcpID0+IHtcclxuICAgICAgICBpZiAoIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2ZlZWRiYWNrX3N1Ym1pdHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICAgICAgcmF0aW5nLFxyXG4gICAgICAgICAgICBjYW5kaWRhdGVfaW5kZXg6IHN1Z2dlc3Rpb25JbmRleCArIDEsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LCBbZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzdWdnZXN0aW9uSW5kZXgsIHRlbXBsYXRlSWRdKTtcclxuICAgIGNvbnN0IGFpSGVhZGVyQWN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucylcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBlbmFibGVkQUlBY3Rpb25zLm1hcCgoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICAgICAgY29uc3QgYWN0aW9uQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICAgICAgY29uc3QgdG9uZUlkID0gdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICBhY3Rpb25Db25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAgICAgKChfYiA9IChfYSA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzBdKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWQpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBhY3Rpb25Db25maWcubGFiZWwsXHJcbiAgICAgICAgICAgICAgICBpc1ByaW1hcnk6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBpc0dlbmVyYXRpbmcgJiYgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHRlZDogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVwaHJhc2VIaWdobGlnaHRlZCxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhY3VycmVudFRleHQudHJpbSgpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQubGVuZ3RoIDxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG1pbkNoYXJzQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNTApIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgaXNHZW5lcmF0aW5nIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSksXHJcbiAgICAgICAgICAgICAgICBzaG93VG9uZURyb3Bkb3duOiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgICAgICAgICAgISEoKF9jID0gYWN0aW9uQ29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSxcclxuICAgICAgICAgICAgICAgIHRvbmVzOiBhY3Rpb25Db25maWcudG9uZXMsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZDogdG9uZUlkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGVuYWJsZWRBSUFjdGlvbnMsXHJcbiAgICAgICAgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMsXHJcbiAgICAgICAgYWN0aXZlQWN0aW9uUHJvbXB0cyxcclxuICAgICAgICB0b25lQnlBY3Rpb24sXHJcbiAgICAgICAgaXNHZW5lcmF0aW5nLFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbixcclxuICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgIF0pO1xyXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBhZGRUZXh0T3JXcmFwLFxyXG4gICAgICAgICAgICBhZGRUZXh0LFxyXG4gICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24sXHJcbiAgICAgICAgfTtcclxuICAgIH0sIFthZGRUZXh0T3JXcmFwLCBhZGRUZXh0LCBjdXJyZW50VGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoaW5wdXRWYWx1ZSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChpbnB1dFZhbHVlIHx8ICcnKTtcclxuICAgIH0sIFtpbnB1dFZhbHVlLCBzZXRFZGl0b3JUZXh0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICghbGltaXQgfHwgIW9uRXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBuZXh0RXJyb3IgPSBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdCA/IExJTUlUX1JFQUNIRUQgOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiAnJztcclxuICAgICAgICBpZiAobGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID09PSBuZXh0RXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBsYXN0RW1pdHRlZEVkaXRvckVycm9yUmVmLmN1cnJlbnQgPSBuZXh0RXJyb3I7XHJcbiAgICAgICAgb25FcnJvcihuZXh0RXJyb3IpO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCBlcnJvciwgbGltaXQsIG9uRXJyb3JdKTtcclxuICAgIHJldHVybiAoX2pzeHMoT3V0ZXJDb250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4cyhFZGl0b3JGb290ZXJSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvckZvb3RlclRpdGxlLCB7IGNoaWxkcmVuOiBlZGl0b3JIZWFkZXIgPyAoX2pzeChUaXRsZVNtYWxsLCBPYmplY3QuYXNzaWduKHsgXCJkYXRhLXRlc3RcIjogXCJib2R5LXRleHQtZm9yLWVkaXQtdGVtcGxhdGVcIiB9LCB7IGNoaWxkcmVuOiBlZGl0b3JIZWFkZXIgfSkpKSA6IG51bGwgfSksIF9qc3hzKEVkaXRvckZvb3RlclJpZ2h0LCB7IGNoaWxkcmVuOiBbZXJyb3IgJiYgZXJyb3IgIT09IExJTUlUX1JFQUNIRUQgPyAoX2pzeHMoX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBbX2pzeChJbmZvSWNvbiwgeyB3aWR0aDogMTYsIGhlaWdodDogMTYsIGNvbG9yOiBDT0xPUlMuY29udGVudC5uZWdhdGl2ZSB9KSwgX2pzeChCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IGNvbG9yOiBDT0xPUlMuY29udGVudC5uZWdhdGl2ZSB9LCB7IGNoaWxkcmVuOiBlcnJvciB9KSldIH0pKSA6IG51bGwsIGxpbWl0ID8gKF9qc3hzKEJvZHlDYXB0aW9uLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IGVycm9yID09PSBMSU1JVF9SRUFDSEVEIHx8IGN1cnJlbnRUZXh0Lmxlbmd0aCA+IGxpbWl0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IENPTE9SUy5jb250ZW50Lm5lZ2F0aXZlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IFtjdXJyZW50VGV4dC5sZW5ndGgsIFwiL1wiLCBsaW1pdF0gfSkpKSA6IG51bGxdIH0pXSB9KSwgX2pzeHMoQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgaXNFcnJvcjogISFlcnJvciB9LCB7IGNoaWxkcmVuOiBbc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID8gKF9qc3hzKFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgcmVmOiBzdWdnZXN0aW9uU2Nyb2xsUmVmIH0sIHsgY2hpbGRyZW46IFtfanN4KFN1Z2dlc3Rpb25CYXNlbGluZVRleHQsIHsgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHsgX19odG1sOiBzdWdnZXN0aW9uQmFzZUh0bWwgfSB9KSwgaXNHZW5lcmF0aW5nID8gKF9qc3goU3VnZ2VzdGlvbkNhbmRpZGF0ZVRleHQsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtYnVzeVwiOiBcInRydWVcIiB9LCB7IGNoaWxkcmVuOiBfanN4cyhTdWdnZXN0aW9uQ2FuZGlkYXRlU2tlbGV0b24sIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiODQlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjY4JVwiIH0pXSB9KSB9KSkpIDogKF9qc3goU3VnZ2VzdGlvbkNhbmRpZGF0ZVRleHQsIHsgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19odG1sOiBhY3RpdmVDYW5kaWRhdGVIdG1sLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSkpLCBfanN4cyhTdWdnZXN0aW9uQ29udHJvbHNSb3csIHsgY2hpbGRyZW46IFtfanN4cyhTdWdnZXN0aW9uQ291bnRlciwgeyBjaGlsZHJlbjogW3N1Z2dlc3Rpb25JbmRleCArIDEsIFwiL1wiLCBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGhdIH0pLCBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUHJldmlvdXMgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBkaXNhYmxlZDogaXNQcmV2U3VnZ2VzdGlvbkRpc2FibGVkLCBvbkNsaWNrOiAoKSA9PiBzZXRTdWdnZXN0aW9uSW5kZXgoKGlkeCkgPT4gTWF0aC5tYXgoMCwgaWR4IC0gMSkpIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hldnJvbkxlZnRJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSksIF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiTGlrZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUZlZWRiYWNrKCdsaWtlJykgfSwgeyBjaGlsZHJlbjogX2pzeChUaHVtYnNVcEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzbGlrZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkRpc2xpa2Ugc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiBoYW5kbGVGZWVkYmFjaygnZGlzbGlrZScpIH0sIHsgY2hpbGRyZW46IF9qc3goVGh1bWJzRG93bkljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIGNhblJlZ2VuZXJhdGUgPyAoX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogaXNHZW5lcmF0aW5nID8gJ1JlZ2VuZXJhdGluZ+KApicgOiAnUmVnZW5lcmF0ZScsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25SZWdlbmVyYXRlQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIFwiYXJpYS1idXN5XCI6IGlzR2VuZXJhdGluZywgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzR2VuZXJhdGluZywgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3VnZ2VzdGlvbkFjdGlvblR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IGlzR2VuZXJhdGluZyA/IChfanN4KFJlZ2VuZXJhdGVJY29uU2hpbW1lciwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUgfSkpIDogKF9qc3goUmV3aW5kSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkpIH0pKSB9KSkpIDogbnVsbCwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNjYXJkXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiQWNjZXB0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogaGFuZGxlQWNjZXB0U3VnZ2VzdGlvbiB9LCB7IGNoaWxkcmVuOiBfanN4KENoZWNrSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKV0gfSldIH0pKSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFzdGVkVGV4dCA9IGUuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFzdGVkVGV4dC5sZW5ndGggPiBMQVJHRV9JTlBVVF9USFJFU0hPTEQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWwgPSB0ZXh0U3BhY2VSZWYuY3VycmVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IChfYSA9IGVsID09PSBudWxsIHx8IGVsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlbC5zZWxlY3Rpb25TdGFydCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSAoX2IgPSBlbCA9PT0gbnVsbCB8fCBlbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogZWwuc2VsZWN0aW9uRW5kKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcmVmZXIgbGl2ZSBET00gdmFsdWUg4oCUIGBjdXJyZW50VGV4dGAgY2FuIGxhZyB0aGUgdGV4dGFyZWEgZm9yIGJpZyBwYXN0ZXMuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFzZSA9IChfYyA9IGVsID09PSBudWxsIHx8IGVsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlbC52YWx1ZSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dFRleHQgPSBiYXNlLnNsaWNlKDAsIHN0YXJ0KSArIHBhc3RlZFRleHQgKyBiYXNlLnNsaWNlKGVuZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dChuZXh0VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChuZXh0VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FyZXQgPSBzdGFydCArIHBhc3RlZFRleHQubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YS5zZXRTZWxlY3Rpb25SYW5nZShjYXJldCwgY2FyZXQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChfYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlIGludmFsaWQgcmFuZ2UgaW4gZWRnZSBicm93c2Vyc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiAoX2pzeChXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIHsgYWN0aW9uczogYWN0aW9ucywgcmVmOiB0ZXh0U3BhY2VSZWYsIG9uQWN0aW9uU2VsZWN0OiBvbkFjdGlvblNlbGVjdCwgUmlnaHRDb21wb25lbnQ6IFJpZ2h0Q29tcG9uZW50LCByaWdodEFjdGlvbnNEaXNhYmxlZDogc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uIHx8IGlzR2VuZXJhdGluZywgb25FbW9qaUNsaWNrOiBvbkVtb2ppQWRkaXRpb24sIGFpQWN0aW9uczogYWlIZWFkZXJBY3Rpb25zLCBkaXNhYmxlQWxsQWN0aW9uczogc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uIHx8IGlzR2VuZXJhdGluZywgaW5zdHJ1Y3Rpb25BY3RpdmU6IGlzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIG9uQUlJbnN0cnVjdGlvbnNDbGljazogKCkgPT4gc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSh0cnVlKSwgb25BSVRvbmVDaGFuZ2U6IChhY3Rpb25UeXBlLCB0b25lSWQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRvbmVCeUFjdGlvbigocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW2FjdGlvblR5cGVdOiB0b25lSWQgfSkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQUlUb25lU2VsZWN0ID09PSBudWxsIHx8IG9uQUlUb25lU2VsZWN0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVG9uZVNlbGVjdChhY3Rpb25UeXBlLCB0b25lSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdG9uZUlkLCBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIG9uQUlBY3Rpb25DbGljazogKGFjdGlvblR5cGUsIGFjdGlvblZhcmlhbnQgPSBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNhbWUgYWN0aW9uIHNob3VsZCBub3QgcmV0cmlnZ2VyIGZyb20gY2hpcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnZW5lcmF0ZSBpcyBvbmx5IHZpYSBleHBsaWNpdCByZWdlbmVyYXRlIGNvbnRyb2wuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmV3IGFjdGlvbiBzdGFydHMgYSBmcmVzaCBzdWdnZXN0aW9uIHNlc3Npb24uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFjdGlvblZhcmlhbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFjdGlvblZhcmlhbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IH0pKV0gfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuZXhwb3J0IHsgQUlfVEFHX0NIQU5HRV9SQVRJT19USFJFU0hPTEQsIGNvbXB1dGVBaVRhZ09uQWNjZXB0LCBsZXZlbnNodGVpbkRpc3RhbmNlLCB9IGZyb20gJy4vYWkvYWlUYWcnO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1XaGF0c0FwcFRleHRFZGl0b3IuanMubWFwIl19 */")),T=a.default("div","production"===process.env.NODE_ENV?{target:"ea7i3sh6"}:{target:"ea7i3sh6",label:"InstructionInputRow"})("border:1px solid #f5a4c0;border-radius:10px;padding:8px 10px;display:flex;align-items:center;gap:10px;background:",R.COLORS.surface.standard,";"+("production"===process.env.NODE_ENV?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBdUl1QyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIEZyYWdtZW50IGFzIF9GcmFnbWVudCwganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZXdpbmRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3Jld2luZC5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzRG93bkljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvdGh1bWJzX2Rvd24uc3ZnJztcclxuaW1wb3J0IFRodW1ic1VwSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfdXAuc3ZnJztcclxuaW1wb3J0IHsgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9CYXNlV2hhdHNhcHBDb250ZW50TGFuZy5oZWxwZXJcIjtcclxuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUsIH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgeyBDT0xPUlMgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzL1RoZW1lXCI7XHJcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICcuLi90b29sdGlwcy9Ub29sdGlwJztcclxuaW1wb3J0IHsgQm9keUNhcHRpb24sIFRpdGxlU21hbGwgfSBmcm9tICcuLi9UeXBvZ3JhcGh5U3R5bGUnO1xyXG5pbXBvcnQgeyBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlMsIERFRkFVTFRfSU5TVFJVQ1RJT05fU1VHR0VTVElPTlMsIHJlc29sdmVBY3Rpb25Qcm9tcHRzLCB9IGZyb20gJy4vYWkvYWN0aW9uUmVnaXN0cnknO1xyXG5pbXBvcnQgeyBjb21wdXRlQWlUYWdPbkFjY2VwdCB9IGZyb20gJy4vYWkvYWlUYWcnO1xyXG5pbXBvcnQgeyBidWlsZEFjdGlvblByb21wdCwgcmVxdWVzdEFJU3VnZ2VzdGlvbiB9IGZyb20gJy4vYWkvYXBpJztcclxuaW1wb3J0IHsgQ29udGFpbmVyLCBFZGl0b3JGb290ZXJSaWdodCwgRWRpdG9yRm9vdGVyUm93LCBFZGl0b3JGb290ZXJUaXRsZSwgT3V0ZXJDb250YWluZXIsIFRleHRTcGFjZSwgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUFjdGlvblZhcmlhbnQsIEFJRWRpdG9yQWN0aW9uVHlwZXMsIEVkaXRvckFjdGlvblR5cGVzLCBXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIH0gZnJvbSAnLi9XaGF0c0FwcFRleHRFZGl0b3JIZWFkZXInO1xyXG5jb25zdCBMSU1JVF9SRUFDSEVEID0gJ0NoYXJhY3RlciBsaW1pdCByZWFjaGVkJztcclxuY29uc3QgUkVQSFJBU0VfSURMRV9NUyA9IDMwMDA7XHJcbmNvbnN0IE1BWF9SRVBIUkFTRV9ISUdITElHSFRTID0gNTtcclxuY29uc3QgTUFYX1NVR0dFU1RJT05TID0gMztcclxuY29uc3QgTEFSR0VfSU5QVVRfVEhSRVNIT0xEID0gMTIwMDtcclxuY29uc3QgVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgPSAnUmVwaHJhc2UgdGhpcyBXaGF0c0FwcCB1dGlsaXR5IHRlbXBsYXRlIHRvIGltcHJvdmUgY2xhcml0eSBhbmQgcmVhZGFiaWxpdHkgd2hpbGUgcHJlc2VydmluZyB2YXJpYWJsZXMsIGludGVudCwgYW5kIGNvbXBsaWFuY2UuJztcclxuY29uc3Qgc2tlbGV0b25QdWxzZSA9IGtleWZyYW1lcyBgXG5cdDAlIHsgb3BhY2l0eTogMC41NTsgfVxuXHQ1MCUgeyBvcGFjaXR5OiAxOyB9XG5cdDEwMCUgeyBvcGFjaXR5OiAwLjU1OyB9XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxNHB4IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogMTBweDtcblx0bWluLWhlaWdodDogMTUwcHg7XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkxpbmUgPSBzdHlsZWQuZGl2IGBcblx0aGVpZ2h0OiAxNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdHdpZHRoOiAkeyhwcm9wcykgPT4gcHJvcHMud2lkdGh9O1xuXHRiYWNrZ3JvdW5kOiAjZWNlY2VmO1xuXHRhbmltYXRpb246ICR7c2tlbGV0b25QdWxzZX0gMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHRtYXgtaGVpZ2h0OiAyNjBweDtcblx0b3ZlcmZsb3cteTogc2Nyb2xsO1xuXHRzY3JvbGxiYXItd2lkdGg6IHRoaW47XG5cdHNjcm9sbGJhci1jb2xvcjogI2M4YzhjZiB0cmFuc3BhcmVudDtcblx0Ojotd2Via2l0LXNjcm9sbGJhciB7XG5cdFx0d2lkdGg6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcblx0XHRiYWNrZ3JvdW5kOiAjYzhjOGNmO1xuXHRcdGJvcmRlci1yYWRpdXM6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcblx0XHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0fVxuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkJhc2VsaW5lVGV4dCA9IHN0eWxlZC5kaXYgYFxuXHR0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25DYW5kaWRhdGVUZXh0ID0gc3R5bGVkLmRpdiBgXG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkNhbmRpZGF0ZVNrZWxldG9uID0gc3R5bGVkLmRpdiBgXG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHR3aWR0aDogMTAwJTtcblx0bWluLWhlaWdodDogNDBweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db250cm9sc1JvdyA9IHN0eWxlZC5kaXYgYFxuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDZweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db3VudGVyID0gc3R5bGVkLnNwYW4gYFxuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkljb25CdXR0b24gPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0cGFkZGluZzogNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdGRpc3BsYXk6IGlubGluZS1mbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0dHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjEycyBlYXNlO1xuXHQ6bm90KDpkaXNhYmxlZCk6aG92ZXIge1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICR7Q09MT1JTLnN1cmZhY2UuaG92ZXJlZH07XG5cdH1cblx0OmRpc2FibGVkIHtcblx0XHRvcGFjaXR5OiAwLjM1O1xuXHRcdGN1cnNvcjogbm90LWFsbG93ZWQ7XG5cdH1cbmA7XHJcbi8qKiBSZWdlbmVyYXRlIHN0YXlzIGZ1bGwgb3BhY2l0eSB3aGlsZSBkaXNhYmxlZCBzbyB0aGUgbG9hZGluZyBzaGltbWVyIHN0YXlzIHZpc2libGUgKHNhbWUgcHVsc2UgYXMgZWRpdG9yIHNrZWxldG9uKS4gKi9cclxuY29uc3QgU3VnZ2VzdGlvblJlZ2VuZXJhdGVCdXR0b24gPSBzdHlsZWQoU3VnZ2VzdGlvbkljb25CdXR0b24pIGBcblx0OmRpc2FibGVkIHtcblx0XHRvcGFjaXR5OiAxO1xuXHRcdGN1cnNvcjogd2FpdDtcblx0fVxuYDtcclxuY29uc3QgUmVnZW5lcmF0ZUljb25TaGltbWVyID0gc3R5bGVkLmRpdiBgXG5cdHdpZHRoOiAxNHB4O1xuXHRoZWlnaHQ6IDE0cHg7XG5cdGJvcmRlci1yYWRpdXM6IDRweDtcblx0YmFja2dyb3VuZDogI2VjZWNlZjtcblx0ZmxleC1zaHJpbms6IDA7XG5cdGFuaW1hdGlvbjogJHtza2VsZXRvblB1bHNlfSAxLjFzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xuYDtcclxuLyoqIFNhbWUgYm90dG9tIHRvb2xiYXIgc2xvdCBhcyBgV2hhdHNBcHBUZXh0RWRpdG9ySGVhZGVyYCDigJQgcmVwbGFjZXMgdGhlIGZ1bGwgaWNvbi9BSSBwYW5lbCB3aGlsZSBvcGVuLiAqL1xyXG5jb25zdCBJbnN0cnVjdGlvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblx0cGFkZGluZzogOHB4IDEycHg7XG5cdGdhcDogMTBweDtcblx0Ym9yZGVyLXJhZGl1czogMCAwIDRweCA0cHg7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXRSb3cgPSBzdHlsZWQuZGl2IGBcblx0Ym9yZGVyOiAxcHggc29saWQgI2Y1YTRjMDtcblx0Ym9yZGVyLXJhZGl1czogMTBweDtcblx0cGFkZGluZzogOHB4IDEwcHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbklucHV0ID0gc3R5bGVkLmlucHV0IGBcblx0ZmxleDogMTtcblx0bWluLXdpZHRoOiAwO1xuXHRib3JkZXI6IDA7XG5cdG91dGxpbmU6IG5vbmU7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25BY3Rpb25zID0gc3R5bGVkLmRpdiBgXG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQ2FuY2VsID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnNlY29uZGFyeX07XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0Zm9udC13ZWlnaHQ6IDUwMDtcblx0cGFkZGluZzogMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbXByb3ZlID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMXB4IHNvbGlkICM1ZDNhNzI7XG5cdGNvbG9yOiAjNWQzYTcyO1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0Ym9yZGVyLXJhZGl1czogOHB4O1xuXHRwYWRkaW5nOiA4cHggMTRweDtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRsaW5lLWhlaWdodDogMS4xO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0ID0gc3R5bGVkLmRpdiBgXG5cdG1hcmdpbi10b3A6IDEwcHg7XG5cdGJvcmRlci1yYWRpdXM6IDEycHg7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3gtc2hhZG93OiAwIDZweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkJ1dHRvbiA9IHN0eWxlZC5idXR0b24gYFxuXHR3aWR0aDogMTAwJTtcblx0Ym9yZGVyOiAwO1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgJHtDT0xPUlMuc3Ryb2tlLnByaW1hcnl9O1xuXHRiYWNrZ3JvdW5kOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyNlNWYzZTgnIDogJ3RyYW5zcGFyZW50Jyl9O1xuXHRjb2xvcjogJHsocHJvcHMpID0+IChwcm9wcy5zZWxlY3RlZCA/ICcjMWU2YjM0JyA6IENPTE9SUy5jb250ZW50LnByaW1hcnkpfTtcblx0dGV4dC1hbGlnbjogbGVmdDtcblx0cGFkZGluZzogMTJweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjI7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0OmZpcnN0LW9mLXR5cGUge1xuXHRcdGJvcmRlci10b3A6IDA7XG5cdH1cbmA7XHJcbmNvbnN0IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nID0gbmV3IEJhc2VXaGF0c2FwcENvbnRlbnRMYW5nSGVscGVyKCk7XHJcbmNvbnN0IFdpbGRDYXJkTWFwID0ge1xyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLkJPTERdOiAnKicsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuSVRBTElDXTogJ18nLFxyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLlNUUklLRVRIUk9VR0hdOiAnficsXHJcbn07XHJcbmZ1bmN0aW9uIGdldEhpZ2hsaWdodFN0b3JhZ2VLZXkoZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgIHJldHVybiBgd2hhdHNhcHAtZWRpdG9yLXJlcGhyYXNlLWhpZ2hsaWdodC0ke2VkaXRvckluc3RhbmNlS2V5IHx8ICdkZWZhdWx0J31gO1xyXG59XHJcbmV4cG9ydCBjb25zdCBXaGF0c0FwcFRleHRFZGl0b3IgPSBSZWFjdC5mb3J3YXJkUmVmKChfYSwgcmVmKSA9PiB7XHJcbiAgICB2YXIgeyBvbkNoYW5nZSwgb25DbGlja1ZhcmlhYmxlLCB0ZXh0OiBpbnB1dFZhbHVlLCBSaWdodENvbXBvbmVudCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yLCByb3dzLCBhY3Rpb25zLCBlZGl0b3JJbnN0YW5jZUtleSwgdGVtcGxhdGVUeXBlID0gJ21hcmtldGluZycsIHRlbXBsYXRlSWQsIHJlcXVlc3RFeGVjdXRvciwgYmFzZVVybCwgZW5kcG9pbnRQYXRoLCB1c2VDYXNlLCBzdG9yZUlkLCBhcGlBZGFwdGVyLCBjb252ZXJzYXRpb25JZCA9ICd3aGF0c2FwcC10ZW1wbGF0ZS1lZGl0b3InLCBzeXN0ZW1JZCA9ICd3aGF0c2FwcC13cml0ZXInLCBpbnRlbnQgPSAnZGVmYXVsdCcsIGVuYWJsZWRBSUFjdGlvbnMgPSBbXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlNIT1JURU4sXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FWFBBTkQsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FTU9KSUZZLFxyXG4gICAgXSwgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMgPSBmYWxzZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCBhaUFjdGlvbk1pbkNoYXJzLCBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgb25BSUV2ZW50LCBvbkFJVGFnQ29tcHV0ZWQsIHByZWZpbGxXYXNBaUdlbmVyYXRlZCA9IGZhbHNlLCBlZGl0b3JIZWFkZXIsIG9uQUlUb25lU2VsZWN0LCBvbkFJQWN0aW9uUmVxdWVzdCwgb25CdWlsZEFJUHJvbXB0IH0gPSBfYSwgdGV4dEFyZWFQcm9wcyA9IF9fcmVzdChfYSwgW1wib25DaGFuZ2VcIiwgXCJvbkNsaWNrVmFyaWFibGVcIiwgXCJ0ZXh0XCIsIFwiUmlnaHRDb21wb25lbnRcIiwgXCJlcnJvclwiLCBcImxpbWl0XCIsIFwib25FcnJvclwiLCBcInJvd3NcIiwgXCJhY3Rpb25zXCIsIFwiZWRpdG9ySW5zdGFuY2VLZXlcIiwgXCJ0ZW1wbGF0ZVR5cGVcIiwgXCJ0ZW1wbGF0ZUlkXCIsIFwicmVxdWVzdEV4ZWN1dG9yXCIsIFwiYmFzZVVybFwiLCBcImVuZHBvaW50UGF0aFwiLCBcInVzZUNhc2VcIiwgXCJzdG9yZUlkXCIsIFwiYXBpQWRhcHRlclwiLCBcImNvbnZlcnNhdGlvbklkXCIsIFwic3lzdGVtSWRcIiwgXCJpbnRlbnRcIiwgXCJlbmFibGVkQUlBY3Rpb25zXCIsIFwiZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnNcIiwgXCJwcm9tcHRPdmVycmlkZXNcIiwgXCJyZXBocmFzZVRvbmVzXCIsIFwiYWlBY3Rpb25NaW5DaGFyc1wiLCBcImluc3RydWN0aW9uU3VnZ2VzdGlvbnNcIiwgXCJvbkFJRXZlbnRcIiwgXCJvbkFJVGFnQ29tcHV0ZWRcIiwgXCJwcmVmaWxsV2FzQWlHZW5lcmF0ZWRcIiwgXCJlZGl0b3JIZWFkZXJcIiwgXCJvbkFJVG9uZVNlbGVjdFwiLCBcIm9uQUlBY3Rpb25SZXF1ZXN0XCIsIFwib25CdWlsZEFJUHJvbXB0XCJdKTtcclxuICAgIGNvbnN0IHRleHRTcGFjZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IFtjdXJyZW50VGV4dCwgc2V0Q3VycmVudFRleHRdID0gdXNlU3RhdGUoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICBjb25zdCBbaXNSZXBocmFzZUhpZ2hsaWdodGVkLCBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW3JlcGhyYXNlSGlnaGxpZ2h0Q291bnQsIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbaXNHZW5lcmF0aW5nLCBzZXRJc0dlbmVyYXRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2lzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGVdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2luc3RydWN0aW9uVGV4dCwgc2V0SW5zdHJ1Y3Rpb25UZXh0XSA9IHVzZVN0YXRlKCcnKTtcclxuICAgIGNvbnN0IFt0b25lQnlBY3Rpb24sIHNldFRvbmVCeUFjdGlvbl0gPSB1c2VTdGF0ZSh7fSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkJhc2VUZXh0LCBzZXRTdWdnZXN0aW9uQmFzZVRleHRdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkNhbmRpZGF0ZXMsIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzXSA9IHVzZVN0YXRlKFtdKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uSW5kZXgsIHNldFN1Z2dlc3Rpb25JbmRleF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGVdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBzdWdnZXN0aW9uU2Nyb2xsUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgcmVwaHJhc2VJZGxlUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgaGlnaGxpZ2h0UmVzZXRSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICAvKipcclxuICAgICAqIFByaW9yIGVsaWdpYmlsaXR5IGZvciByZXBocmFzZSBudWRnZSAobnVsbCA9IG5vdCBpbml0aWFsaXplZCkuXHJcbiAgICAgKiBNYXRjaGVzIHRoZSBjaGlwOiBub24tZW1wdHkgdHJpbSBhbmQgbGVuZ3RoIOKJpSBtaW4g4oCUIHNhbWUgYXMgYGFpSGVhZGVyQWN0aW9uc2AgZGlzYWJsZWQgcnVsZXMuXHJcbiAgICAgKi9cclxuICAgIGNvbnN0IHByZXZSZXBocmFzZUVsaWdpYmxlUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgZGVmZXJyZWRIdG1sUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgbGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIC8qKiBGaXJzdCBhY2NlcHQgYWZ0ZXIgZnVsbC1BSSBwcmVmaWxsIChgcHJlZmlsbFdhc0FpR2VuZXJhdGVkYCk7IGNsZWFyZWQgYWZ0ZXIgb25lIGFjY2VwdC4gKi9cclxuICAgIGNvbnN0IGluaXRpYWxBaVByZWZpbGxQaGFzZVJlZiA9IHVzZVJlZighIXByZWZpbGxXYXNBaUdlbmVyYXRlZCk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGluaXRpYWxBaVByZWZpbGxQaGFzZVJlZi5jdXJyZW50ID0gISFwcmVmaWxsV2FzQWlHZW5lcmF0ZWQ7XHJcbiAgICB9LCBbcHJlZmlsbFdhc0FpR2VuZXJhdGVkLCBlZGl0b3JJbnN0YW5jZUtleV0pO1xyXG4gICAgY29uc3QgYWN0aXZlQWN0aW9uUHJvbXB0cyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiByZXNvbHZlQWN0aW9uUHJvbXB0cyh0ZW1wbGF0ZVR5cGUsIHByb21wdE92ZXJyaWRlcywgcmVwaHJhc2VUb25lcyk7XHJcbiAgICB9LCBbcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCB0ZW1wbGF0ZVR5cGVdKTtcclxuICAgIGNvbnN0IGZpbHRlcmVkSW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGlmICghcXVlcnkpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucy5maWx0ZXIoKHN1Z2dlc3Rpb24pID0+IHN1Z2dlc3Rpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeSkpO1xyXG4gICAgfSwgW2luc3RydWN0aW9uU3VnZ2VzdGlvbnMsIGluc3RydWN0aW9uVGV4dF0pO1xyXG4gICAgY29uc3QgbWluQ2hhcnNCeUFjdGlvbiA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUyksIChhaUFjdGlvbk1pbkNoYXJzIHx8IHt9KSk7XHJcbiAgICB9LCBbYWlBY3Rpb25NaW5DaGFyc10pO1xyXG4gICAgY29uc3QgcmVwaHJhc2VNaW5DaGFycyA9IG1pbkNoYXJzQnlBY3Rpb25bQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV0gfHxcclxuICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV07XHJcbiAgICBjb25zdCBlbWl0QUlFdmVudCA9IHVzZUNhbGxiYWNrKChuYW1lLCBwYXlsb2FkKSA9PiB7XHJcbiAgICAgICAgb25BSUV2ZW50ID09PSBudWxsIHx8IG9uQUlFdmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSUV2ZW50KG5hbWUsIHBheWxvYWQpO1xyXG4gICAgfSwgW29uQUlFdmVudF0pO1xyXG4gICAgY29uc3Qgc2V0RWRpdG9yVGV4dCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIHNldEN1cnJlbnRUZXh0KChwcmV2KSA9PiAocHJldiA9PT0gbmV4dFRleHQgPyBwcmV2IDogbmV4dFRleHQpKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGVtaXRDaGFuZ2VXaXRoR3VhcmQgPSB1c2VDYWxsYmFjaygobmV4dFRleHQpID0+IHtcclxuICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGRlZmVycmVkSHRtbFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5leHRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIG5leHRUZXh0KTtcclxuICAgICAgICAgICAgZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChuZXh0VGV4dCkpO1xyXG4gICAgICAgICAgICB9LCAxNik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICB9LCBbb25DaGFuZ2VdKTtcclxuICAgIGNvbnN0IGNsZWFyU3VnZ2VzdGlvblNlc3Npb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0KG51bGwpO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtdKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUobnVsbCk7XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgPj0gTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXh0Q291bnQgPSByZXBocmFzZUhpZ2hsaWdodENvdW50ICsgMTtcclxuICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KG5leHRDb3VudCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSksIFN0cmluZyhuZXh0Q291bnQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKHRydWUpO1xyXG4gICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgIH0sIDEyMDApO1xyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5LCByZXBocmFzZUhpZ2hsaWdodENvdW50XSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHRSZWYgPSB1c2VSZWYodHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0KTtcclxuICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50ID0gdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0O1xyXG4gICAgZnVuY3Rpb24gaGFuZGxlT25DaGFuZ2UoZSkge1xyXG4gICAgICAgIGNvbnN0IHRleHQgPSBlLnRhcmdldC52YWx1ZTtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBzZXRDYXJldFBvc2l0aW9uKGNhcmV0UG9zKSB7XHJcbiAgICAgICAgY29uc3QgZWxlbSA9IHRleHRTcGFjZVJlZiA9PT0gbnVsbCB8fCB0ZXh0U3BhY2VSZWYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRleHRTcGFjZVJlZi5jdXJyZW50O1xyXG4gICAgICAgIGlmIChlbGVtICE9IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKGVsZW0uc2VsZWN0aW9uU3RhcnQpIHtcclxuICAgICAgICAgICAgICAgIGVsZW0uZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIGVsZW0uc2VsZWN0aW9uRW5kID0gY2FyZXRQb3M7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgZWxlbS5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIG9uQWN0aW9uU2VsZWN0KGFjdGlvblR5cGUpIHtcclxuICAgICAgICBjb25zdCB3aWxkQ2FyZCA9IFdpbGRDYXJkTWFwW2FjdGlvblR5cGVdO1xyXG4gICAgICAgIGlmICh3aWxkQ2FyZCAmJiB0ZXh0U3BhY2VSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHRleHQgfSA9IGluc2VydFRleHRBdEluZGV4KHdpbGRDYXJkLCBzdGFydCk7XHJcbiAgICAgICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uKHN0YXJ0ICsgMSk7XHJcbiAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBhZGRUZXh0T3JXcmFwKHdpbGRDYXJkKTtcclxuICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBvbkVtb2ppQWRkaXRpb24oZW1vamkpIHtcclxuICAgICAgICBjb25zdCB7IHRleHQgfSA9IGFkZFRleHQoZW1vamkpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhZGRUZXh0T3JXcmFwKHRleHRUb0FkZCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgbGV0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICBpZiAodGV4dFNwYWNlUmVmLmN1cnJlbnQgJiYgdGV4dFRvQWRkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgY29uc3Qgd2lsZENhcmQgPSB0ZXh0VG9BZGQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICAvKiogbm90aGluZyBpcyBzZWxlY3RlZCAqL1xyXG4gICAgICAgICAgICAgICAgLyoqIHNvIGFwcGVuZCB0aGUgd2lsZGNhcmQgYXQgdGhlIGVuZCAqL1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFkZFRleHQod2lsZENhcmQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGV4dCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLndyYXBwV2lsZGNhcmQoc3RhcnQsIGVuZCwgd2lsZENhcmQsIHRleHQpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaHRtbCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwodGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdGV4dCwgaHRtbCB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IHRleHQ6IHRleHQsIGh0bWw6IHRleHQgfTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZFRleHQodGV4dFRvQWRkKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgaWYgKHRleHRTcGFjZVJlZi5jdXJyZW50ICYmIHRleHRUb0FkZCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zZXJ0VGV4dEF0SW5kZXgodGV4dFRvQWRkLCBzdGFydCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dDogdGV4dCwgaHRtbDogdGV4dCB9O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gaW5zZXJ0VGV4dEF0SW5kZXgodGV4dFRvQWRkLCBpbmRleCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgbGV0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICB0ZXh0ID0gdGV4dC5zbGljZSgwLCBpbmRleCkgKyB0ZXh0VG9BZGQgKyB0ZXh0LnNsaWNlKGluZGV4KTtcclxuICAgICAgICBjb25zdCBodG1sID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTCh0ZXh0KTtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgIHJldHVybiB7IHRleHQsIGh0bWwgfTtcclxuICAgIH1cclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8ICFlZGl0b3JJbnN0YW5jZUtleSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNhY2hlZCA9IE51bWJlcihzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGdldEhpZ2hsaWdodFN0b3JhZ2VLZXkoZWRpdG9ySW5zdGFuY2VLZXkpKSB8fFxyXG4gICAgICAgICAgICAnMCcpO1xyXG4gICAgICAgIGlmICghTnVtYmVyLmlzTmFOKGNhY2hlZCkpIHtcclxuICAgICAgICAgICAgc2V0UmVwaHJhc2VIaWdobGlnaHRDb3VudChjYWNoZWQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtlZGl0b3JJbnN0YW5jZUtleV0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBjb25zdCBlbGlnaWJsZSA9ICEhY3VycmVudFRleHQudHJpbSgpICYmIGN1cnJlbnRUZXh0Lmxlbmd0aCA+PSByZXBocmFzZU1pbkNoYXJzO1xyXG4gICAgICAgIGlmIChwcmV2UmVwaHJhc2VFbGlnaWJsZVJlZi5jdXJyZW50ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHByZXZSZXBocmFzZUVsaWdpYmxlUmVmLmN1cnJlbnQgPSBlbGlnaWJsZTtcclxuICAgICAgICAgICAgaWYgKGVsaWdpYmxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50KCk7XHJcbiAgICAgICAgICAgICAgICB9LCBSRVBIUkFTRV9JRExFX01TKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZWxpZ2libGUpIHtcclxuICAgICAgICAgICAgcHJldlJlcGhyYXNlRWxpZ2libGVSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjcm9zc2VkVGhyZXNob2xkID0gIXByZXZSZXBocmFzZUVsaWdpYmxlUmVmLmN1cnJlbnQgJiYgZWxpZ2libGU7XHJcbiAgICAgICAgcHJldlJlcGhyYXNlRWxpZ2libGVSZWYuY3VycmVudCA9IHRydWU7XHJcbiAgICAgICAgaWYgKGNyb3NzZWRUaHJlc2hvbGQpIHtcclxuICAgICAgICAgICAgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0UmVmLmN1cnJlbnQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50KCk7XHJcbiAgICAgICAgfSwgUkVQSFJBU0VfSURMRV9NUyk7XHJcbiAgICB9LCBbY3VycmVudFRleHQsIHJlcGhyYXNlTWluQ2hhcnNdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGFjdGl2ZUNhbmRpZGF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzW3N1Z2dlc3Rpb25JbmRleF0gfHwgJyc7XHJcbiAgICBjb25zdCBzdWdnZXN0aW9uQmFzZUh0bWwgPSB1c2VNZW1vKCgpID0+IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwoc3VnZ2VzdGlvbkJhc2VUZXh0IHx8ICcnKSwgW3N1Z2dlc3Rpb25CYXNlVGV4dF0pO1xyXG4gICAgY29uc3QgYWN0aXZlQ2FuZGlkYXRlSHRtbCA9IHVzZU1lbW8oKCkgPT4gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChhY3RpdmVDYW5kaWRhdGUpLCBbYWN0aXZlQ2FuZGlkYXRlXSk7XHJcbiAgICBjb25zdCBjYW5SZWdlbmVyYXRlID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDwgTUFYX1NVR0dFU1RJT05TO1xyXG4gICAgY29uc3Qgc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID0gISFzdWdnZXN0aW9uQmFzZVRleHQgJiYgc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoID4gMDtcclxuICAgIGNvbnN0IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8IHN1Z2dlc3Rpb25JbmRleCA8PSAwO1xyXG4gICAgY29uc3QgaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDw9IDEgfHxcclxuICAgICAgICBzdWdnZXN0aW9uSW5kZXggPj0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBub2RlID0gc3VnZ2VzdGlvblNjcm9sbFJlZi5jdXJyZW50O1xyXG4gICAgICAgIGlmICghbm9kZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIG5vZGUuc2Nyb2xsVG9wID0gbm9kZS5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9LCBbYWN0aXZlQ2FuZGlkYXRlLCBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24sIGlzR2VuZXJhdGluZ10pO1xyXG4gICAgY29uc3QgZXhlY3V0ZUFJQWN0aW9uID0gdXNlQ2FsbGJhY2soKGFjdGlvblR5cGUsIHJlZ2VuZXJhdGVFeGlzdGluZyA9IGZhbHNlLCBpbnN0cnVjdGlvbk92ZXJyaWRlLCB0b25lT3ZlcnJpZGVJZCwgYWN0aW9uVmFyaWFudCA9IEFJQWN0aW9uVmFyaWFudC5ERUZBVUxUKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICB2YXIgX2IsIF9jLCBfZDtcclxuICAgICAgICBpZiAoIW9uQUlBY3Rpb25SZXF1ZXN0ICYmXHJcbiAgICAgICAgICAgICFhcGlBZGFwdGVyICYmXHJcbiAgICAgICAgICAgICghcmVxdWVzdEV4ZWN1dG9yIHx8ICFiYXNlVXJsKSkge1xyXG4gICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoJ0FJIGNvbmZpZ3VyYXRpb24gbWlzc2luZycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY3VycmVudFRleHQudHJpbSgpKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbWluQ2hhcnNGb3JBY3Rpb24gPSBtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICA1MDtcclxuICAgICAgICBpZiAoY3VycmVudFRleHQubGVuZ3RoIDwgbWluQ2hhcnNGb3JBY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpZiAoaXNHZW5lcmF0aW5nKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKHJlZ2VuZXJhdGVFeGlzdGluZyAmJiAhY2FuUmVnZW5lcmF0ZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGJhc2VDb25maWcgPSBhY3RpdmVBY3Rpb25Qcm9tcHRzW2FjdGlvblR5cGVdO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UgJiZcclxuICAgICAgICAgICAgdGVtcGxhdGVUeXBlID09PSAndXRpbGl0eScgJiZcclxuICAgICAgICAgICAgYWN0aW9uVmFyaWFudCA9PT0gQUlBY3Rpb25WYXJpYW50LlJFUEhSQVNFXHJcbiAgICAgICAgICAgID8gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBiYXNlQ29uZmlnKSwgeyBsYWJlbDogJ1JlcGhyYXNlJywgYmFzZVByb21wdDogVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgfSkgOiBiYXNlQ29uZmlnO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVG9uZUlkID0gdG9uZU92ZXJyaWRlSWQgfHxcclxuICAgICAgICAgICAgdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIGNvbmZpZy5kZWZhdWx0VG9uZUlkIHx8XHJcbiAgICAgICAgICAgICgoX2MgPSAoX2IgPSBjb25maWcudG9uZXMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYlswXSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmlkKTtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFRvbmUgPSAoX2QgPSBjb25maWcudG9uZXMpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5maW5kKCh0b25lKSA9PiB0b25lLmlkID09PSBzZWxlY3RlZFRvbmVJZCk7XHJcbiAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgPSBpbnN0cnVjdGlvbk92ZXJyaWRlICE9PSB1bmRlZmluZWRcclxuICAgICAgICAgICAgPyBpbnN0cnVjdGlvbk92ZXJyaWRlXHJcbiAgICAgICAgICAgIDogaW5zdHJ1Y3Rpb25UZXh0O1xyXG4gICAgICAgIGNvbnN0IHByb21wdCA9IChvbkJ1aWxkQUlQcm9tcHQgPT09IG51bGwgfHwgb25CdWlsZEFJUHJvbXB0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkJ1aWxkQUlQcm9tcHQoe1xyXG4gICAgICAgICAgICBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICBhY3Rpb25WYXJpYW50LFxyXG4gICAgICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICBjb25maWcsXHJcbiAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgIHRvbmVMYWJlbDogc2VsZWN0ZWRUb25lID09PSBudWxsIHx8IHNlbGVjdGVkVG9uZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZWN0ZWRUb25lLmxhYmVsLFxyXG4gICAgICAgICAgICBpbnN0cnVjdGlvblRleHQ6IGluc3RydWN0aW9uRm9yUHJvbXB0IHx8IHVuZGVmaW5lZCxcclxuICAgICAgICB9KSkgfHxcclxuICAgICAgICAgICAgYnVpbGRBY3Rpb25Qcm9tcHQoe1xyXG4gICAgICAgICAgICAgICAgY29uZmlnLFxyXG4gICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZCxcclxuICAgICAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIHNldElzR2VuZXJhdGluZyh0cnVlKTtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfYWN0aW9uX3RyaWdnZXJlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG9uQUlBY3Rpb25SZXF1ZXN0XHJcbiAgICAgICAgICAgICAgICA/IHlpZWxkIG9uQUlBY3Rpb25SZXF1ZXN0KHtcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblZhcmlhbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIDogeWllbGQgcmVxdWVzdEFJU3VnZ2VzdGlvbih7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgYmFzZVVybCxcclxuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgICAgIGludGVudCxcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICAgICAgICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZydcclxuICAgICAgICAgICAgICAgID8gcmVzdWx0LnRyaW0oKVxyXG4gICAgICAgICAgICAgICAgOiAoKHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3VsdC5ib2R5KSB8fCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKCFyZWdlbmVyYXRlRXhpc3RpbmcpIHtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25CYXNlVGV4dChjdXJyZW50VGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShhY3Rpb25UeXBlKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtjYW5kaWRhdGVdKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcygocHJldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IFsuLi5wcmV2LCBjYW5kaWRhdGVdLnNsaWNlKDAsIE1BWF9TVUdHRVNUSU9OUyk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgobmV4dC5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdGYWlsZWQgdG8gZ2VuZXJhdGUgQUkgc3VnZ2VzdGlvbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgc2V0SXNHZW5lcmF0aW5nKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9KSwgW1xyXG4gICAgICAgIHJlcXVlc3RFeGVjdXRvcixcclxuICAgICAgICBiYXNlVXJsLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBjYW5SZWdlbmVyYXRlLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGluc3RydWN0aW9uVGV4dCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIGVuZHBvaW50UGF0aCxcclxuICAgICAgICBhcGlBZGFwdGVyLFxyXG4gICAgICAgIGludGVudCxcclxuICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgIG9uRXJyb3IsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgICAgICBvbkFJQWN0aW9uUmVxdWVzdCxcclxuICAgICAgICBvbkJ1aWxkQUlQcm9tcHQsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFhY3RpdmVDYW5kaWRhdGUgfHwgIXN1Z2dlc3Rpb25CYXNlVGV4dCB8fCAhc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2FjY2VwdGVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGluSW5pdGlhbEFpUGhhc2UgPSBpbml0aWFsQWlQcmVmaWxsUGhhc2VSZWYuY3VycmVudDtcclxuICAgICAgICBjb25zdCB0YWdQYXlsb2FkID0gY29tcHV0ZUFpVGFnT25BY2NlcHQoe1xyXG4gICAgICAgICAgICBiYXNlbGluZVRleHQ6IHN1Z2dlc3Rpb25CYXNlVGV4dCxcclxuICAgICAgICAgICAgYWNjZXB0ZWRUZXh0OiBhY3RpdmVDYW5kaWRhdGUsXHJcbiAgICAgICAgICAgIGluaXRpYWxBaVByZWZpbGxQaGFzZTogaW5Jbml0aWFsQWlQaGFzZSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoaW5Jbml0aWFsQWlQaGFzZSkge1xyXG4gICAgICAgICAgICBpbml0aWFsQWlQcmVmaWxsUGhhc2VSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvbkFJVGFnQ29tcHV0ZWQgPT09IG51bGwgfHwgb25BSVRhZ0NvbXB1dGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVGFnQ29tcHV0ZWQodGFnUGF5bG9hZCk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGFjdGl2ZUNhbmRpZGF0ZSxcclxuICAgICAgICBzdWdnZXN0aW9uQmFzZVRleHQsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCxcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkLFxyXG4gICAgICAgIGVtaXRBSUV2ZW50LFxyXG4gICAgICAgIHRlbXBsYXRlSWQsXHJcbiAgICAgICAgb25BSVRhZ0NvbXB1dGVkLFxyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2Rpc2NhcmRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uKCk7XHJcbiAgICB9LCBbY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiwgZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKChyYXRpbmcpID0+IHtcclxuICAgICAgICBpZiAoIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2ZlZWRiYWNrX3N1Ym1pdHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICAgICAgcmF0aW5nLFxyXG4gICAgICAgICAgICBjYW5kaWRhdGVfaW5kZXg6IHN1Z2dlc3Rpb25JbmRleCArIDEsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LCBbZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzdWdnZXN0aW9uSW5kZXgsIHRlbXBsYXRlSWRdKTtcclxuICAgIGNvbnN0IGFpSGVhZGVyQWN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucylcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBlbmFibGVkQUlBY3Rpb25zLm1hcCgoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICAgICAgY29uc3QgYWN0aW9uQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICAgICAgY29uc3QgdG9uZUlkID0gdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICBhY3Rpb25Db25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAgICAgKChfYiA9IChfYSA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzBdKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWQpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBhY3Rpb25Db25maWcubGFiZWwsXHJcbiAgICAgICAgICAgICAgICBpc1ByaW1hcnk6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBpc0dlbmVyYXRpbmcgJiYgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHRlZDogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVwaHJhc2VIaWdobGlnaHRlZCxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhY3VycmVudFRleHQudHJpbSgpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQubGVuZ3RoIDxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG1pbkNoYXJzQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNTApIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgaXNHZW5lcmF0aW5nIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSksXHJcbiAgICAgICAgICAgICAgICBzaG93VG9uZURyb3Bkb3duOiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgICAgICAgICAgISEoKF9jID0gYWN0aW9uQ29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSxcclxuICAgICAgICAgICAgICAgIHRvbmVzOiBhY3Rpb25Db25maWcudG9uZXMsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZDogdG9uZUlkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGVuYWJsZWRBSUFjdGlvbnMsXHJcbiAgICAgICAgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMsXHJcbiAgICAgICAgYWN0aXZlQWN0aW9uUHJvbXB0cyxcclxuICAgICAgICB0b25lQnlBY3Rpb24sXHJcbiAgICAgICAgaXNHZW5lcmF0aW5nLFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbixcclxuICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgIF0pO1xyXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBhZGRUZXh0T3JXcmFwLFxyXG4gICAgICAgICAgICBhZGRUZXh0LFxyXG4gICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24sXHJcbiAgICAgICAgfTtcclxuICAgIH0sIFthZGRUZXh0T3JXcmFwLCBhZGRUZXh0LCBjdXJyZW50VGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoaW5wdXRWYWx1ZSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChpbnB1dFZhbHVlIHx8ICcnKTtcclxuICAgIH0sIFtpbnB1dFZhbHVlLCBzZXRFZGl0b3JUZXh0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICghbGltaXQgfHwgIW9uRXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBuZXh0RXJyb3IgPSBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdCA/IExJTUlUX1JFQUNIRUQgOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiAnJztcclxuICAgICAgICBpZiAobGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID09PSBuZXh0RXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBsYXN0RW1pdHRlZEVkaXRvckVycm9yUmVmLmN1cnJlbnQgPSBuZXh0RXJyb3I7XHJcbiAgICAgICAgb25FcnJvcihuZXh0RXJyb3IpO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCBlcnJvciwgbGltaXQsIG9uRXJyb3JdKTtcclxuICAgIHJldHVybiAoX2pzeHMoT3V0ZXJDb250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4cyhFZGl0b3JGb290ZXJSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvckZvb3RlclRpdGxlLCB7IGNoaWxkcmVuOiBlZGl0b3JIZWFkZXIgPyAoX2pzeChUaXRsZVNtYWxsLCBPYmplY3QuYXNzaWduKHsgXCJkYXRhLXRlc3RcIjogXCJib2R5LXRleHQtZm9yLWVkaXQtdGVtcGxhdGVcIiB9LCB7IGNoaWxkcmVuOiBlZGl0b3JIZWFkZXIgfSkpKSA6IG51bGwgfSksIF9qc3hzKEVkaXRvckZvb3RlclJpZ2h0LCB7IGNoaWxkcmVuOiBbZXJyb3IgJiYgZXJyb3IgIT09IExJTUlUX1JFQUNIRUQgPyAoX2pzeHMoX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBbX2pzeChJbmZvSWNvbiwgeyB3aWR0aDogMTYsIGhlaWdodDogMTYsIGNvbG9yOiBDT0xPUlMuY29udGVudC5uZWdhdGl2ZSB9KSwgX2pzeChCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IGNvbG9yOiBDT0xPUlMuY29udGVudC5uZWdhdGl2ZSB9LCB7IGNoaWxkcmVuOiBlcnJvciB9KSldIH0pKSA6IG51bGwsIGxpbWl0ID8gKF9qc3hzKEJvZHlDYXB0aW9uLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IGVycm9yID09PSBMSU1JVF9SRUFDSEVEIHx8IGN1cnJlbnRUZXh0Lmxlbmd0aCA+IGxpbWl0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IENPTE9SUy5jb250ZW50Lm5lZ2F0aXZlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IFtjdXJyZW50VGV4dC5sZW5ndGgsIFwiL1wiLCBsaW1pdF0gfSkpKSA6IG51bGxdIH0pXSB9KSwgX2pzeHMoQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgaXNFcnJvcjogISFlcnJvciB9LCB7IGNoaWxkcmVuOiBbc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID8gKF9qc3hzKFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgcmVmOiBzdWdnZXN0aW9uU2Nyb2xsUmVmIH0sIHsgY2hpbGRyZW46IFtfanN4KFN1Z2dlc3Rpb25CYXNlbGluZVRleHQsIHsgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHsgX19odG1sOiBzdWdnZXN0aW9uQmFzZUh0bWwgfSB9KSwgaXNHZW5lcmF0aW5nID8gKF9qc3goU3VnZ2VzdGlvbkNhbmRpZGF0ZVRleHQsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtYnVzeVwiOiBcInRydWVcIiB9LCB7IGNoaWxkcmVuOiBfanN4cyhTdWdnZXN0aW9uQ2FuZGlkYXRlU2tlbGV0b24sIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiODQlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjY4JVwiIH0pXSB9KSB9KSkpIDogKF9qc3goU3VnZ2VzdGlvbkNhbmRpZGF0ZVRleHQsIHsgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19odG1sOiBhY3RpdmVDYW5kaWRhdGVIdG1sLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSkpLCBfanN4cyhTdWdnZXN0aW9uQ29udHJvbHNSb3csIHsgY2hpbGRyZW46IFtfanN4cyhTdWdnZXN0aW9uQ291bnRlciwgeyBjaGlsZHJlbjogW3N1Z2dlc3Rpb25JbmRleCArIDEsIFwiL1wiLCBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGhdIH0pLCBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUHJldmlvdXMgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBkaXNhYmxlZDogaXNQcmV2U3VnZ2VzdGlvbkRpc2FibGVkLCBvbkNsaWNrOiAoKSA9PiBzZXRTdWdnZXN0aW9uSW5kZXgoKGlkeCkgPT4gTWF0aC5tYXgoMCwgaWR4IC0gMSkpIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hldnJvbkxlZnRJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSksIF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiTGlrZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUZlZWRiYWNrKCdsaWtlJykgfSwgeyBjaGlsZHJlbjogX2pzeChUaHVtYnNVcEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzbGlrZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkRpc2xpa2Ugc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiBoYW5kbGVGZWVkYmFjaygnZGlzbGlrZScpIH0sIHsgY2hpbGRyZW46IF9qc3goVGh1bWJzRG93bkljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIGNhblJlZ2VuZXJhdGUgPyAoX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogaXNHZW5lcmF0aW5nID8gJ1JlZ2VuZXJhdGluZ+KApicgOiAnUmVnZW5lcmF0ZScsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25SZWdlbmVyYXRlQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIFwiYXJpYS1idXN5XCI6IGlzR2VuZXJhdGluZywgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzR2VuZXJhdGluZywgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3VnZ2VzdGlvbkFjdGlvblR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IGlzR2VuZXJhdGluZyA/IChfanN4KFJlZ2VuZXJhdGVJY29uU2hpbW1lciwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUgfSkpIDogKF9qc3goUmV3aW5kSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkpIH0pKSB9KSkpIDogbnVsbCwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNjYXJkXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiQWNjZXB0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogaGFuZGxlQWNjZXB0U3VnZ2VzdGlvbiB9LCB7IGNoaWxkcmVuOiBfanN4KENoZWNrSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKV0gfSldIH0pKSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFzdGVkVGV4dCA9IGUuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFzdGVkVGV4dC5sZW5ndGggPiBMQVJHRV9JTlBVVF9USFJFU0hPTEQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWwgPSB0ZXh0U3BhY2VSZWYuY3VycmVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IChfYSA9IGVsID09PSBudWxsIHx8IGVsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlbC5zZWxlY3Rpb25TdGFydCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSAoX2IgPSBlbCA9PT0gbnVsbCB8fCBlbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogZWwuc2VsZWN0aW9uRW5kKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcmVmZXIgbGl2ZSBET00gdmFsdWUg4oCUIGBjdXJyZW50VGV4dGAgY2FuIGxhZyB0aGUgdGV4dGFyZWEgZm9yIGJpZyBwYXN0ZXMuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFzZSA9IChfYyA9IGVsID09PSBudWxsIHx8IGVsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlbC52YWx1ZSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dFRleHQgPSBiYXNlLnNsaWNlKDAsIHN0YXJ0KSArIHBhc3RlZFRleHQgKyBiYXNlLnNsaWNlKGVuZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dChuZXh0VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChuZXh0VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FyZXQgPSBzdGFydCArIHBhc3RlZFRleHQubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YS5zZXRTZWxlY3Rpb25SYW5nZShjYXJldCwgY2FyZXQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChfYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlIGludmFsaWQgcmFuZ2UgaW4gZWRnZSBicm93c2Vyc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiAoX2pzeChXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIHsgYWN0aW9uczogYWN0aW9ucywgcmVmOiB0ZXh0U3BhY2VSZWYsIG9uQWN0aW9uU2VsZWN0OiBvbkFjdGlvblNlbGVjdCwgUmlnaHRDb21wb25lbnQ6IFJpZ2h0Q29tcG9uZW50LCByaWdodEFjdGlvbnNEaXNhYmxlZDogc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uIHx8IGlzR2VuZXJhdGluZywgb25FbW9qaUNsaWNrOiBvbkVtb2ppQWRkaXRpb24sIGFpQWN0aW9uczogYWlIZWFkZXJBY3Rpb25zLCBkaXNhYmxlQWxsQWN0aW9uczogc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uIHx8IGlzR2VuZXJhdGluZywgaW5zdHJ1Y3Rpb25BY3RpdmU6IGlzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIG9uQUlJbnN0cnVjdGlvbnNDbGljazogKCkgPT4gc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSh0cnVlKSwgb25BSVRvbmVDaGFuZ2U6IChhY3Rpb25UeXBlLCB0b25lSWQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRvbmVCeUFjdGlvbigocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW2FjdGlvblR5cGVdOiB0b25lSWQgfSkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQUlUb25lU2VsZWN0ID09PSBudWxsIHx8IG9uQUlUb25lU2VsZWN0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVG9uZVNlbGVjdChhY3Rpb25UeXBlLCB0b25lSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdG9uZUlkLCBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIG9uQUlBY3Rpb25DbGljazogKGFjdGlvblR5cGUsIGFjdGlvblZhcmlhbnQgPSBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNhbWUgYWN0aW9uIHNob3VsZCBub3QgcmV0cmlnZ2VyIGZyb20gY2hpcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnZW5lcmF0ZSBpcyBvbmx5IHZpYSBleHBsaWNpdCByZWdlbmVyYXRlIGNvbnRyb2wuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmV3IGFjdGlvbiBzdGFydHMgYSBmcmVzaCBzdWdnZXN0aW9uIHNlc3Npb24uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFjdGlvblZhcmlhbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFjdGlvblZhcmlhbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IH0pKV0gfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuZXhwb3J0IHsgQUlfVEFHX0NIQU5HRV9SQVRJT19USFJFU0hPTEQsIGNvbXB1dGVBaVRhZ09uQWNjZXB0LCBsZXZlbnNodGVpbkRpc3RhbmNlLCB9IGZyb20gJy4vYWkvYWlUYWcnO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1XaGF0c0FwcFRleHRFZGl0b3IuanMubWFwIl19 */")),e=a.default("input","production"===process.env.NODE_ENV?{target:"ea7i3sh5"}:{target:"ea7i3sh5",label:"InstructionInput"})("flex:1;min-width:0;border:0;outline:none;font-size:14px;background:transparent;color:",R.COLORS.content.primary,";"+("production"===process.env.NODE_ENV?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZ0pzQyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIEZyYWdtZW50IGFzIF9GcmFnbWVudCwganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZXdpbmRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3Jld2luZC5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzRG93bkljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvdGh1bWJzX2Rvd24uc3ZnJztcclxuaW1wb3J0IFRodW1ic1VwSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfdXAuc3ZnJztcclxuaW1wb3J0IHsgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9CYXNlV2hhdHNhcHBDb250ZW50TGFuZy5oZWxwZXJcIjtcclxuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUsIH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgeyBDT0xPUlMgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzL1RoZW1lXCI7XHJcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICcuLi90b29sdGlwcy9Ub29sdGlwJztcclxuaW1wb3J0IHsgQm9keUNhcHRpb24sIFRpdGxlU21hbGwgfSBmcm9tICcuLi9UeXBvZ3JhcGh5U3R5bGUnO1xyXG5pbXBvcnQgeyBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlMsIERFRkFVTFRfSU5TVFJVQ1RJT05fU1VHR0VTVElPTlMsIHJlc29sdmVBY3Rpb25Qcm9tcHRzLCB9IGZyb20gJy4vYWkvYWN0aW9uUmVnaXN0cnknO1xyXG5pbXBvcnQgeyBjb21wdXRlQWlUYWdPbkFjY2VwdCB9IGZyb20gJy4vYWkvYWlUYWcnO1xyXG5pbXBvcnQgeyBidWlsZEFjdGlvblByb21wdCwgcmVxdWVzdEFJU3VnZ2VzdGlvbiB9IGZyb20gJy4vYWkvYXBpJztcclxuaW1wb3J0IHsgQ29udGFpbmVyLCBFZGl0b3JGb290ZXJSaWdodCwgRWRpdG9yRm9vdGVyUm93LCBFZGl0b3JGb290ZXJUaXRsZSwgT3V0ZXJDb250YWluZXIsIFRleHRTcGFjZSwgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUFjdGlvblZhcmlhbnQsIEFJRWRpdG9yQWN0aW9uVHlwZXMsIEVkaXRvckFjdGlvblR5cGVzLCBXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIH0gZnJvbSAnLi9XaGF0c0FwcFRleHRFZGl0b3JIZWFkZXInO1xyXG5jb25zdCBMSU1JVF9SRUFDSEVEID0gJ0NoYXJhY3RlciBsaW1pdCByZWFjaGVkJztcclxuY29uc3QgUkVQSFJBU0VfSURMRV9NUyA9IDMwMDA7XHJcbmNvbnN0IE1BWF9SRVBIUkFTRV9ISUdITElHSFRTID0gNTtcclxuY29uc3QgTUFYX1NVR0dFU1RJT05TID0gMztcclxuY29uc3QgTEFSR0VfSU5QVVRfVEhSRVNIT0xEID0gMTIwMDtcclxuY29uc3QgVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgPSAnUmVwaHJhc2UgdGhpcyBXaGF0c0FwcCB1dGlsaXR5IHRlbXBsYXRlIHRvIGltcHJvdmUgY2xhcml0eSBhbmQgcmVhZGFiaWxpdHkgd2hpbGUgcHJlc2VydmluZyB2YXJpYWJsZXMsIGludGVudCwgYW5kIGNvbXBsaWFuY2UuJztcclxuY29uc3Qgc2tlbGV0b25QdWxzZSA9IGtleWZyYW1lcyBgXG5cdDAlIHsgb3BhY2l0eTogMC41NTsgfVxuXHQ1MCUgeyBvcGFjaXR5OiAxOyB9XG5cdDEwMCUgeyBvcGFjaXR5OiAwLjU1OyB9XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxNHB4IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogMTBweDtcblx0bWluLWhlaWdodDogMTUwcHg7XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkxpbmUgPSBzdHlsZWQuZGl2IGBcblx0aGVpZ2h0OiAxNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdHdpZHRoOiAkeyhwcm9wcykgPT4gcHJvcHMud2lkdGh9O1xuXHRiYWNrZ3JvdW5kOiAjZWNlY2VmO1xuXHRhbmltYXRpb246ICR7c2tlbGV0b25QdWxzZX0gMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHRtYXgtaGVpZ2h0OiAyNjBweDtcblx0b3ZlcmZsb3cteTogc2Nyb2xsO1xuXHRzY3JvbGxiYXItd2lkdGg6IHRoaW47XG5cdHNjcm9sbGJhci1jb2xvcjogI2M4YzhjZiB0cmFuc3BhcmVudDtcblx0Ojotd2Via2l0LXNjcm9sbGJhciB7XG5cdFx0d2lkdGg6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcblx0XHRiYWNrZ3JvdW5kOiAjYzhjOGNmO1xuXHRcdGJvcmRlci1yYWRpdXM6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcblx0XHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0fVxuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkJhc2VsaW5lVGV4dCA9IHN0eWxlZC5kaXYgYFxuXHR0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25DYW5kaWRhdGVUZXh0ID0gc3R5bGVkLmRpdiBgXG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkNhbmRpZGF0ZVNrZWxldG9uID0gc3R5bGVkLmRpdiBgXG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHR3aWR0aDogMTAwJTtcblx0bWluLWhlaWdodDogNDBweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db250cm9sc1JvdyA9IHN0eWxlZC5kaXYgYFxuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDZweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db3VudGVyID0gc3R5bGVkLnNwYW4gYFxuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkljb25CdXR0b24gPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0cGFkZGluZzogNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdGRpc3BsYXk6IGlubGluZS1mbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0dHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjEycyBlYXNlO1xuXHQ6bm90KDpkaXNhYmxlZCk6aG92ZXIge1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICR7Q09MT1JTLnN1cmZhY2UuaG92ZXJlZH07XG5cdH1cblx0OmRpc2FibGVkIHtcblx0XHRvcGFjaXR5OiAwLjM1O1xuXHRcdGN1cnNvcjogbm90LWFsbG93ZWQ7XG5cdH1cbmA7XHJcbi8qKiBSZWdlbmVyYXRlIHN0YXlzIGZ1bGwgb3BhY2l0eSB3aGlsZSBkaXNhYmxlZCBzbyB0aGUgbG9hZGluZyBzaGltbWVyIHN0YXlzIHZpc2libGUgKHNhbWUgcHVsc2UgYXMgZWRpdG9yIHNrZWxldG9uKS4gKi9cclxuY29uc3QgU3VnZ2VzdGlvblJlZ2VuZXJhdGVCdXR0b24gPSBzdHlsZWQoU3VnZ2VzdGlvbkljb25CdXR0b24pIGBcblx0OmRpc2FibGVkIHtcblx0XHRvcGFjaXR5OiAxO1xuXHRcdGN1cnNvcjogd2FpdDtcblx0fVxuYDtcclxuY29uc3QgUmVnZW5lcmF0ZUljb25TaGltbWVyID0gc3R5bGVkLmRpdiBgXG5cdHdpZHRoOiAxNHB4O1xuXHRoZWlnaHQ6IDE0cHg7XG5cdGJvcmRlci1yYWRpdXM6IDRweDtcblx0YmFja2dyb3VuZDogI2VjZWNlZjtcblx0ZmxleC1zaHJpbms6IDA7XG5cdGFuaW1hdGlvbjogJHtza2VsZXRvblB1bHNlfSAxLjFzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xuYDtcclxuLyoqIFNhbWUgYm90dG9tIHRvb2xiYXIgc2xvdCBhcyBgV2hhdHNBcHBUZXh0RWRpdG9ySGVhZGVyYCDigJQgcmVwbGFjZXMgdGhlIGZ1bGwgaWNvbi9BSSBwYW5lbCB3aGlsZSBvcGVuLiAqL1xyXG5jb25zdCBJbnN0cnVjdGlvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblx0cGFkZGluZzogOHB4IDEycHg7XG5cdGdhcDogMTBweDtcblx0Ym9yZGVyLXJhZGl1czogMCAwIDRweCA0cHg7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXRSb3cgPSBzdHlsZWQuZGl2IGBcblx0Ym9yZGVyOiAxcHggc29saWQgI2Y1YTRjMDtcblx0Ym9yZGVyLXJhZGl1czogMTBweDtcblx0cGFkZGluZzogOHB4IDEwcHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbklucHV0ID0gc3R5bGVkLmlucHV0IGBcblx0ZmxleDogMTtcblx0bWluLXdpZHRoOiAwO1xuXHRib3JkZXI6IDA7XG5cdG91dGxpbmU6IG5vbmU7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25BY3Rpb25zID0gc3R5bGVkLmRpdiBgXG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQ2FuY2VsID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnNlY29uZGFyeX07XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0Zm9udC13ZWlnaHQ6IDUwMDtcblx0cGFkZGluZzogMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbXByb3ZlID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMXB4IHNvbGlkICM1ZDNhNzI7XG5cdGNvbG9yOiAjNWQzYTcyO1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0Ym9yZGVyLXJhZGl1czogOHB4O1xuXHRwYWRkaW5nOiA4cHggMTRweDtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRsaW5lLWhlaWdodDogMS4xO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0ID0gc3R5bGVkLmRpdiBgXG5cdG1hcmdpbi10b3A6IDEwcHg7XG5cdGJvcmRlci1yYWRpdXM6IDEycHg7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3gtc2hhZG93OiAwIDZweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkJ1dHRvbiA9IHN0eWxlZC5idXR0b24gYFxuXHR3aWR0aDogMTAwJTtcblx0Ym9yZGVyOiAwO1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgJHtDT0xPUlMuc3Ryb2tlLnByaW1hcnl9O1xuXHRiYWNrZ3JvdW5kOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyNlNWYzZTgnIDogJ3RyYW5zcGFyZW50Jyl9O1xuXHRjb2xvcjogJHsocHJvcHMpID0+IChwcm9wcy5zZWxlY3RlZCA/ICcjMWU2YjM0JyA6IENPTE9SUy5jb250ZW50LnByaW1hcnkpfTtcblx0dGV4dC1hbGlnbjogbGVmdDtcblx0cGFkZGluZzogMTJweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjI7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0OmZpcnN0LW9mLXR5cGUge1xuXHRcdGJvcmRlci10b3A6IDA7XG5cdH1cbmA7XHJcbmNvbnN0IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nID0gbmV3IEJhc2VXaGF0c2FwcENvbnRlbnRMYW5nSGVscGVyKCk7XHJcbmNvbnN0IFdpbGRDYXJkTWFwID0ge1xyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLkJPTERdOiAnKicsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuSVRBTElDXTogJ18nLFxyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLlNUUklLRVRIUk9VR0hdOiAnficsXHJcbn07XHJcbmZ1bmN0aW9uIGdldEhpZ2hsaWdodFN0b3JhZ2VLZXkoZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgIHJldHVybiBgd2hhdHNhcHAtZWRpdG9yLXJlcGhyYXNlLWhpZ2hsaWdodC0ke2VkaXRvckluc3RhbmNlS2V5IHx8ICdkZWZhdWx0J31gO1xyXG59XHJcbmV4cG9ydCBjb25zdCBXaGF0c0FwcFRleHRFZGl0b3IgPSBSZWFjdC5mb3J3YXJkUmVmKChfYSwgcmVmKSA9PiB7XHJcbiAgICB2YXIgeyBvbkNoYW5nZSwgb25DbGlja1ZhcmlhYmxlLCB0ZXh0OiBpbnB1dFZhbHVlLCBSaWdodENvbXBvbmVudCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yLCByb3dzLCBhY3Rpb25zLCBlZGl0b3JJbnN0YW5jZUtleSwgdGVtcGxhdGVUeXBlID0gJ21hcmtldGluZycsIHRlbXBsYXRlSWQsIHJlcXVlc3RFeGVjdXRvciwgYmFzZVVybCwgZW5kcG9pbnRQYXRoLCB1c2VDYXNlLCBzdG9yZUlkLCBhcGlBZGFwdGVyLCBjb252ZXJzYXRpb25JZCA9ICd3aGF0c2FwcC10ZW1wbGF0ZS1lZGl0b3InLCBzeXN0ZW1JZCA9ICd3aGF0c2FwcC13cml0ZXInLCBpbnRlbnQgPSAnZGVmYXVsdCcsIGVuYWJsZWRBSUFjdGlvbnMgPSBbXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlNIT1JURU4sXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FWFBBTkQsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FTU9KSUZZLFxyXG4gICAgXSwgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMgPSBmYWxzZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCBhaUFjdGlvbk1pbkNoYXJzLCBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgb25BSUV2ZW50LCBvbkFJVGFnQ29tcHV0ZWQsIHByZWZpbGxXYXNBaUdlbmVyYXRlZCA9IGZhbHNlLCBlZGl0b3JIZWFkZXIsIG9uQUlUb25lU2VsZWN0LCBvbkFJQWN0aW9uUmVxdWVzdCwgb25CdWlsZEFJUHJvbXB0IH0gPSBfYSwgdGV4dEFyZWFQcm9wcyA9IF9fcmVzdChfYSwgW1wib25DaGFuZ2VcIiwgXCJvbkNsaWNrVmFyaWFibGVcIiwgXCJ0ZXh0XCIsIFwiUmlnaHRDb21wb25lbnRcIiwgXCJlcnJvclwiLCBcImxpbWl0XCIsIFwib25FcnJvclwiLCBcInJvd3NcIiwgXCJhY3Rpb25zXCIsIFwiZWRpdG9ySW5zdGFuY2VLZXlcIiwgXCJ0ZW1wbGF0ZVR5cGVcIiwgXCJ0ZW1wbGF0ZUlkXCIsIFwicmVxdWVzdEV4ZWN1dG9yXCIsIFwiYmFzZVVybFwiLCBcImVuZHBvaW50UGF0aFwiLCBcInVzZUNhc2VcIiwgXCJzdG9yZUlkXCIsIFwiYXBpQWRhcHRlclwiLCBcImNvbnZlcnNhdGlvbklkXCIsIFwic3lzdGVtSWRcIiwgXCJpbnRlbnRcIiwgXCJlbmFibGVkQUlBY3Rpb25zXCIsIFwiZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnNcIiwgXCJwcm9tcHRPdmVycmlkZXNcIiwgXCJyZXBocmFzZVRvbmVzXCIsIFwiYWlBY3Rpb25NaW5DaGFyc1wiLCBcImluc3RydWN0aW9uU3VnZ2VzdGlvbnNcIiwgXCJvbkFJRXZlbnRcIiwgXCJvbkFJVGFnQ29tcHV0ZWRcIiwgXCJwcmVmaWxsV2FzQWlHZW5lcmF0ZWRcIiwgXCJlZGl0b3JIZWFkZXJcIiwgXCJvbkFJVG9uZVNlbGVjdFwiLCBcIm9uQUlBY3Rpb25SZXF1ZXN0XCIsIFwib25CdWlsZEFJUHJvbXB0XCJdKTtcclxuICAgIGNvbnN0IHRleHRTcGFjZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IFtjdXJyZW50VGV4dCwgc2V0Q3VycmVudFRleHRdID0gdXNlU3RhdGUoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICBjb25zdCBbaXNSZXBocmFzZUhpZ2hsaWdodGVkLCBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW3JlcGhyYXNlSGlnaGxpZ2h0Q291bnQsIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbaXNHZW5lcmF0aW5nLCBzZXRJc0dlbmVyYXRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2lzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGVdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2luc3RydWN0aW9uVGV4dCwgc2V0SW5zdHJ1Y3Rpb25UZXh0XSA9IHVzZVN0YXRlKCcnKTtcclxuICAgIGNvbnN0IFt0b25lQnlBY3Rpb24sIHNldFRvbmVCeUFjdGlvbl0gPSB1c2VTdGF0ZSh7fSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkJhc2VUZXh0LCBzZXRTdWdnZXN0aW9uQmFzZVRleHRdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkNhbmRpZGF0ZXMsIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzXSA9IHVzZVN0YXRlKFtdKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uSW5kZXgsIHNldFN1Z2dlc3Rpb25JbmRleF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGVdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBzdWdnZXN0aW9uU2Nyb2xsUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgcmVwaHJhc2VJZGxlUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgaGlnaGxpZ2h0UmVzZXRSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICAvKipcclxuICAgICAqIFByaW9yIGVsaWdpYmlsaXR5IGZvciByZXBocmFzZSBudWRnZSAobnVsbCA9IG5vdCBpbml0aWFsaXplZCkuXHJcbiAgICAgKiBNYXRjaGVzIHRoZSBjaGlwOiBub24tZW1wdHkgdHJpbSBhbmQgbGVuZ3RoIOKJpSBtaW4g4oCUIHNhbWUgYXMgYGFpSGVhZGVyQWN0aW9uc2AgZGlzYWJsZWQgcnVsZXMuXHJcbiAgICAgKi9cclxuICAgIGNvbnN0IHByZXZSZXBocmFzZUVsaWdpYmxlUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgZGVmZXJyZWRIdG1sUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgbGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIC8qKiBGaXJzdCBhY2NlcHQgYWZ0ZXIgZnVsbC1BSSBwcmVmaWxsIChgcHJlZmlsbFdhc0FpR2VuZXJhdGVkYCk7IGNsZWFyZWQgYWZ0ZXIgb25lIGFjY2VwdC4gKi9cclxuICAgIGNvbnN0IGluaXRpYWxBaVByZWZpbGxQaGFzZVJlZiA9IHVzZVJlZighIXByZWZpbGxXYXNBaUdlbmVyYXRlZCk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGluaXRpYWxBaVByZWZpbGxQaGFzZVJlZi5jdXJyZW50ID0gISFwcmVmaWxsV2FzQWlHZW5lcmF0ZWQ7XHJcbiAgICB9LCBbcHJlZmlsbFdhc0FpR2VuZXJhdGVkLCBlZGl0b3JJbnN0YW5jZUtleV0pO1xyXG4gICAgY29uc3QgYWN0aXZlQWN0aW9uUHJvbXB0cyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiByZXNvbHZlQWN0aW9uUHJvbXB0cyh0ZW1wbGF0ZVR5cGUsIHByb21wdE92ZXJyaWRlcywgcmVwaHJhc2VUb25lcyk7XHJcbiAgICB9LCBbcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCB0ZW1wbGF0ZVR5cGVdKTtcclxuICAgIGNvbnN0IGZpbHRlcmVkSW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGlmICghcXVlcnkpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucy5maWx0ZXIoKHN1Z2dlc3Rpb24pID0+IHN1Z2dlc3Rpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeSkpO1xyXG4gICAgfSwgW2luc3RydWN0aW9uU3VnZ2VzdGlvbnMsIGluc3RydWN0aW9uVGV4dF0pO1xyXG4gICAgY29uc3QgbWluQ2hhcnNCeUFjdGlvbiA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUyksIChhaUFjdGlvbk1pbkNoYXJzIHx8IHt9KSk7XHJcbiAgICB9LCBbYWlBY3Rpb25NaW5DaGFyc10pO1xyXG4gICAgY29uc3QgcmVwaHJhc2VNaW5DaGFycyA9IG1pbkNoYXJzQnlBY3Rpb25bQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV0gfHxcclxuICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV07XHJcbiAgICBjb25zdCBlbWl0QUlFdmVudCA9IHVzZUNhbGxiYWNrKChuYW1lLCBwYXlsb2FkKSA9PiB7XHJcbiAgICAgICAgb25BSUV2ZW50ID09PSBudWxsIHx8IG9uQUlFdmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSUV2ZW50KG5hbWUsIHBheWxvYWQpO1xyXG4gICAgfSwgW29uQUlFdmVudF0pO1xyXG4gICAgY29uc3Qgc2V0RWRpdG9yVGV4dCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIHNldEN1cnJlbnRUZXh0KChwcmV2KSA9PiAocHJldiA9PT0gbmV4dFRleHQgPyBwcmV2IDogbmV4dFRleHQpKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGVtaXRDaGFuZ2VXaXRoR3VhcmQgPSB1c2VDYWxsYmFjaygobmV4dFRleHQpID0+IHtcclxuICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGRlZmVycmVkSHRtbFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5leHRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIG5leHRUZXh0KTtcclxuICAgICAgICAgICAgZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChuZXh0VGV4dCkpO1xyXG4gICAgICAgICAgICB9LCAxNik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICB9LCBbb25DaGFuZ2VdKTtcclxuICAgIGNvbnN0IGNsZWFyU3VnZ2VzdGlvblNlc3Npb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0KG51bGwpO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtdKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUobnVsbCk7XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgPj0gTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXh0Q291bnQgPSByZXBocmFzZUhpZ2hsaWdodENvdW50ICsgMTtcclxuICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KG5leHRDb3VudCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSksIFN0cmluZyhuZXh0Q291bnQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKHRydWUpO1xyXG4gICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgIH0sIDEyMDApO1xyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5LCByZXBocmFzZUhpZ2hsaWdodENvdW50XSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHRSZWYgPSB1c2VSZWYodHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0KTtcclxuICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50ID0gdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0O1xyXG4gICAgZnVuY3Rpb24gaGFuZGxlT25DaGFuZ2UoZSkge1xyXG4gICAgICAgIGNvbnN0IHRleHQgPSBlLnRhcmdldC52YWx1ZTtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBzZXRDYXJldFBvc2l0aW9uKGNhcmV0UG9zKSB7XHJcbiAgICAgICAgY29uc3QgZWxlbSA9IHRleHRTcGFjZVJlZiA9PT0gbnVsbCB8fCB0ZXh0U3BhY2VSZWYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRleHRTcGFjZVJlZi5jdXJyZW50O1xyXG4gICAgICAgIGlmIChlbGVtICE9IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKGVsZW0uc2VsZWN0aW9uU3RhcnQpIHtcclxuICAgICAgICAgICAgICAgIGVsZW0uZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIGVsZW0uc2VsZWN0aW9uRW5kID0gY2FyZXRQb3M7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgZWxlbS5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIG9uQWN0aW9uU2VsZWN0KGFjdGlvblR5cGUpIHtcclxuICAgICAgICBjb25zdCB3aWxkQ2FyZCA9IFdpbGRDYXJkTWFwW2FjdGlvblR5cGVdO1xyXG4gICAgICAgIGlmICh3aWxkQ2FyZCAmJiB0ZXh0U3BhY2VSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHRleHQgfSA9IGluc2VydFRleHRBdEluZGV4KHdpbGRDYXJkLCBzdGFydCk7XHJcbiAgICAgICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uKHN0YXJ0ICsgMSk7XHJcbiAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBhZGRUZXh0T3JXcmFwKHdpbGRDYXJkKTtcclxuICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBvbkVtb2ppQWRkaXRpb24oZW1vamkpIHtcclxuICAgICAgICBjb25zdCB7IHRleHQgfSA9IGFkZFRleHQoZW1vamkpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhZGRUZXh0T3JXcmFwKHRleHRUb0FkZCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgbGV0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICBpZiAodGV4dFNwYWNlUmVmLmN1cnJlbnQgJiYgdGV4dFRvQWRkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgY29uc3Qgd2lsZENhcmQgPSB0ZXh0VG9BZGQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICAvKiogbm90aGluZyBpcyBzZWxlY3RlZCAqL1xyXG4gICAgICAgICAgICAgICAgLyoqIHNvIGFwcGVuZCB0aGUgd2lsZGNhcmQgYXQgdGhlIGVuZCAqL1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFkZFRleHQod2lsZENhcmQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGV4dCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLndyYXBwV2lsZGNhcmQoc3RhcnQsIGVuZCwgd2lsZENhcmQsIHRleHQpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaHRtbCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwodGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdGV4dCwgaHRtbCB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IHRleHQ6IHRleHQsIGh0bWw6IHRleHQgfTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZFRleHQodGV4dFRvQWRkKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgaWYgKHRleHRTcGFjZVJlZi5jdXJyZW50ICYmIHRleHRUb0FkZCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zZXJ0VGV4dEF0SW5kZXgodGV4dFRvQWRkLCBzdGFydCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dDogdGV4dCwgaHRtbDogdGV4dCB9O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gaW5zZXJ0VGV4dEF0SW5kZXgodGV4dFRvQWRkLCBpbmRleCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgbGV0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICB0ZXh0ID0gdGV4dC5zbGljZSgwLCBpbmRleCkgKyB0ZXh0VG9BZGQgKyB0ZXh0LnNsaWNlKGluZGV4KTtcclxuICAgICAgICBjb25zdCBodG1sID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTCh0ZXh0KTtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgIHJldHVybiB7IHRleHQsIGh0bWwgfTtcclxuICAgIH1cclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8ICFlZGl0b3JJbnN0YW5jZUtleSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNhY2hlZCA9IE51bWJlcihzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGdldEhpZ2hsaWdodFN0b3JhZ2VLZXkoZWRpdG9ySW5zdGFuY2VLZXkpKSB8fFxyXG4gICAgICAgICAgICAnMCcpO1xyXG4gICAgICAgIGlmICghTnVtYmVyLmlzTmFOKGNhY2hlZCkpIHtcclxuICAgICAgICAgICAgc2V0UmVwaHJhc2VIaWdobGlnaHRDb3VudChjYWNoZWQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtlZGl0b3JJbnN0YW5jZUtleV0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBjb25zdCBlbGlnaWJsZSA9ICEhY3VycmVudFRleHQudHJpbSgpICYmIGN1cnJlbnRUZXh0Lmxlbmd0aCA+PSByZXBocmFzZU1pbkNoYXJzO1xyXG4gICAgICAgIGlmIChwcmV2UmVwaHJhc2VFbGlnaWJsZVJlZi5jdXJyZW50ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHByZXZSZXBocmFzZUVsaWdpYmxlUmVmLmN1cnJlbnQgPSBlbGlnaWJsZTtcclxuICAgICAgICAgICAgaWYgKGVsaWdpYmxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50KCk7XHJcbiAgICAgICAgICAgICAgICB9LCBSRVBIUkFTRV9JRExFX01TKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZWxpZ2libGUpIHtcclxuICAgICAgICAgICAgcHJldlJlcGhyYXNlRWxpZ2libGVSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjcm9zc2VkVGhyZXNob2xkID0gIXByZXZSZXBocmFzZUVsaWdpYmxlUmVmLmN1cnJlbnQgJiYgZWxpZ2libGU7XHJcbiAgICAgICAgcHJldlJlcGhyYXNlRWxpZ2libGVSZWYuY3VycmVudCA9IHRydWU7XHJcbiAgICAgICAgaWYgKGNyb3NzZWRUaHJlc2hvbGQpIHtcclxuICAgICAgICAgICAgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0UmVmLmN1cnJlbnQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50KCk7XHJcbiAgICAgICAgfSwgUkVQSFJBU0VfSURMRV9NUyk7XHJcbiAgICB9LCBbY3VycmVudFRleHQsIHJlcGhyYXNlTWluQ2hhcnNdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGFjdGl2ZUNhbmRpZGF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzW3N1Z2dlc3Rpb25JbmRleF0gfHwgJyc7XHJcbiAgICBjb25zdCBzdWdnZXN0aW9uQmFzZUh0bWwgPSB1c2VNZW1vKCgpID0+IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwoc3VnZ2VzdGlvbkJhc2VUZXh0IHx8ICcnKSwgW3N1Z2dlc3Rpb25CYXNlVGV4dF0pO1xyXG4gICAgY29uc3QgYWN0aXZlQ2FuZGlkYXRlSHRtbCA9IHVzZU1lbW8oKCkgPT4gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChhY3RpdmVDYW5kaWRhdGUpLCBbYWN0aXZlQ2FuZGlkYXRlXSk7XHJcbiAgICBjb25zdCBjYW5SZWdlbmVyYXRlID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDwgTUFYX1NVR0dFU1RJT05TO1xyXG4gICAgY29uc3Qgc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID0gISFzdWdnZXN0aW9uQmFzZVRleHQgJiYgc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoID4gMDtcclxuICAgIGNvbnN0IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8IHN1Z2dlc3Rpb25JbmRleCA8PSAwO1xyXG4gICAgY29uc3QgaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDw9IDEgfHxcclxuICAgICAgICBzdWdnZXN0aW9uSW5kZXggPj0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBub2RlID0gc3VnZ2VzdGlvblNjcm9sbFJlZi5jdXJyZW50O1xyXG4gICAgICAgIGlmICghbm9kZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIG5vZGUuc2Nyb2xsVG9wID0gbm9kZS5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9LCBbYWN0aXZlQ2FuZGlkYXRlLCBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24sIGlzR2VuZXJhdGluZ10pO1xyXG4gICAgY29uc3QgZXhlY3V0ZUFJQWN0aW9uID0gdXNlQ2FsbGJhY2soKGFjdGlvblR5cGUsIHJlZ2VuZXJhdGVFeGlzdGluZyA9IGZhbHNlLCBpbnN0cnVjdGlvbk92ZXJyaWRlLCB0b25lT3ZlcnJpZGVJZCwgYWN0aW9uVmFyaWFudCA9IEFJQWN0aW9uVmFyaWFudC5ERUZBVUxUKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICB2YXIgX2IsIF9jLCBfZDtcclxuICAgICAgICBpZiAoIW9uQUlBY3Rpb25SZXF1ZXN0ICYmXHJcbiAgICAgICAgICAgICFhcGlBZGFwdGVyICYmXHJcbiAgICAgICAgICAgICghcmVxdWVzdEV4ZWN1dG9yIHx8ICFiYXNlVXJsKSkge1xyXG4gICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoJ0FJIGNvbmZpZ3VyYXRpb24gbWlzc2luZycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY3VycmVudFRleHQudHJpbSgpKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbWluQ2hhcnNGb3JBY3Rpb24gPSBtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICA1MDtcclxuICAgICAgICBpZiAoY3VycmVudFRleHQubGVuZ3RoIDwgbWluQ2hhcnNGb3JBY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpZiAoaXNHZW5lcmF0aW5nKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKHJlZ2VuZXJhdGVFeGlzdGluZyAmJiAhY2FuUmVnZW5lcmF0ZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGJhc2VDb25maWcgPSBhY3RpdmVBY3Rpb25Qcm9tcHRzW2FjdGlvblR5cGVdO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UgJiZcclxuICAgICAgICAgICAgdGVtcGxhdGVUeXBlID09PSAndXRpbGl0eScgJiZcclxuICAgICAgICAgICAgYWN0aW9uVmFyaWFudCA9PT0gQUlBY3Rpb25WYXJpYW50LlJFUEhSQVNFXHJcbiAgICAgICAgICAgID8gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBiYXNlQ29uZmlnKSwgeyBsYWJlbDogJ1JlcGhyYXNlJywgYmFzZVByb21wdDogVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgfSkgOiBiYXNlQ29uZmlnO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVG9uZUlkID0gdG9uZU92ZXJyaWRlSWQgfHxcclxuICAgICAgICAgICAgdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIGNvbmZpZy5kZWZhdWx0VG9uZUlkIHx8XHJcbiAgICAgICAgICAgICgoX2MgPSAoX2IgPSBjb25maWcudG9uZXMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYlswXSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmlkKTtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFRvbmUgPSAoX2QgPSBjb25maWcudG9uZXMpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5maW5kKCh0b25lKSA9PiB0b25lLmlkID09PSBzZWxlY3RlZFRvbmVJZCk7XHJcbiAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgPSBpbnN0cnVjdGlvbk92ZXJyaWRlICE9PSB1bmRlZmluZWRcclxuICAgICAgICAgICAgPyBpbnN0cnVjdGlvbk92ZXJyaWRlXHJcbiAgICAgICAgICAgIDogaW5zdHJ1Y3Rpb25UZXh0O1xyXG4gICAgICAgIGNvbnN0IHByb21wdCA9IChvbkJ1aWxkQUlQcm9tcHQgPT09IG51bGwgfHwgb25CdWlsZEFJUHJvbXB0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkJ1aWxkQUlQcm9tcHQoe1xyXG4gICAgICAgICAgICBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICBhY3Rpb25WYXJpYW50LFxyXG4gICAgICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICBjb25maWcsXHJcbiAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgIHRvbmVMYWJlbDogc2VsZWN0ZWRUb25lID09PSBudWxsIHx8IHNlbGVjdGVkVG9uZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZWN0ZWRUb25lLmxhYmVsLFxyXG4gICAgICAgICAgICBpbnN0cnVjdGlvblRleHQ6IGluc3RydWN0aW9uRm9yUHJvbXB0IHx8IHVuZGVmaW5lZCxcclxuICAgICAgICB9KSkgfHxcclxuICAgICAgICAgICAgYnVpbGRBY3Rpb25Qcm9tcHQoe1xyXG4gICAgICAgICAgICAgICAgY29uZmlnLFxyXG4gICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZCxcclxuICAgICAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIHNldElzR2VuZXJhdGluZyh0cnVlKTtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfYWN0aW9uX3RyaWdnZXJlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG9uQUlBY3Rpb25SZXF1ZXN0XHJcbiAgICAgICAgICAgICAgICA/IHlpZWxkIG9uQUlBY3Rpb25SZXF1ZXN0KHtcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblZhcmlhbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIDogeWllbGQgcmVxdWVzdEFJU3VnZ2VzdGlvbih7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgYmFzZVVybCxcclxuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgICAgIGludGVudCxcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICAgICAgICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZydcclxuICAgICAgICAgICAgICAgID8gcmVzdWx0LnRyaW0oKVxyXG4gICAgICAgICAgICAgICAgOiAoKHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3VsdC5ib2R5KSB8fCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKCFyZWdlbmVyYXRlRXhpc3RpbmcpIHtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25CYXNlVGV4dChjdXJyZW50VGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShhY3Rpb25UeXBlKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtjYW5kaWRhdGVdKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcygocHJldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IFsuLi5wcmV2LCBjYW5kaWRhdGVdLnNsaWNlKDAsIE1BWF9TVUdHRVNUSU9OUyk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgobmV4dC5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdGYWlsZWQgdG8gZ2VuZXJhdGUgQUkgc3VnZ2VzdGlvbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgc2V0SXNHZW5lcmF0aW5nKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9KSwgW1xyXG4gICAgICAgIHJlcXVlc3RFeGVjdXRvcixcclxuICAgICAgICBiYXNlVXJsLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBjYW5SZWdlbmVyYXRlLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGluc3RydWN0aW9uVGV4dCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIGVuZHBvaW50UGF0aCxcclxuICAgICAgICBhcGlBZGFwdGVyLFxyXG4gICAgICAgIGludGVudCxcclxuICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgIG9uRXJyb3IsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgICAgICBvbkFJQWN0aW9uUmVxdWVzdCxcclxuICAgICAgICBvbkJ1aWxkQUlQcm9tcHQsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFhY3RpdmVDYW5kaWRhdGUgfHwgIXN1Z2dlc3Rpb25CYXNlVGV4dCB8fCAhc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2FjY2VwdGVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGluSW5pdGlhbEFpUGhhc2UgPSBpbml0aWFsQWlQcmVmaWxsUGhhc2VSZWYuY3VycmVudDtcclxuICAgICAgICBjb25zdCB0YWdQYXlsb2FkID0gY29tcHV0ZUFpVGFnT25BY2NlcHQoe1xyXG4gICAgICAgICAgICBiYXNlbGluZVRleHQ6IHN1Z2dlc3Rpb25CYXNlVGV4dCxcclxuICAgICAgICAgICAgYWNjZXB0ZWRUZXh0OiBhY3RpdmVDYW5kaWRhdGUsXHJcbiAgICAgICAgICAgIGluaXRpYWxBaVByZWZpbGxQaGFzZTogaW5Jbml0aWFsQWlQaGFzZSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoaW5Jbml0aWFsQWlQaGFzZSkge1xyXG4gICAgICAgICAgICBpbml0aWFsQWlQcmVmaWxsUGhhc2VSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvbkFJVGFnQ29tcHV0ZWQgPT09IG51bGwgfHwgb25BSVRhZ0NvbXB1dGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVGFnQ29tcHV0ZWQodGFnUGF5bG9hZCk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGFjdGl2ZUNhbmRpZGF0ZSxcclxuICAgICAgICBzdWdnZXN0aW9uQmFzZVRleHQsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCxcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkLFxyXG4gICAgICAgIGVtaXRBSUV2ZW50LFxyXG4gICAgICAgIHRlbXBsYXRlSWQsXHJcbiAgICAgICAgb25BSVRhZ0NvbXB1dGVkLFxyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2Rpc2NhcmRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uKCk7XHJcbiAgICB9LCBbY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiwgZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKChyYXRpbmcpID0+IHtcclxuICAgICAgICBpZiAoIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2ZlZWRiYWNrX3N1Ym1pdHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICAgICAgcmF0aW5nLFxyXG4gICAgICAgICAgICBjYW5kaWRhdGVfaW5kZXg6IHN1Z2dlc3Rpb25JbmRleCArIDEsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LCBbZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzdWdnZXN0aW9uSW5kZXgsIHRlbXBsYXRlSWRdKTtcclxuICAgIGNvbnN0IGFpSGVhZGVyQWN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucylcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBlbmFibGVkQUlBY3Rpb25zLm1hcCgoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICAgICAgY29uc3QgYWN0aW9uQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICAgICAgY29uc3QgdG9uZUlkID0gdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICBhY3Rpb25Db25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAgICAgKChfYiA9IChfYSA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzBdKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWQpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBhY3Rpb25Db25maWcubGFiZWwsXHJcbiAgICAgICAgICAgICAgICBpc1ByaW1hcnk6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBpc0dlbmVyYXRpbmcgJiYgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHRlZDogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVwaHJhc2VIaWdobGlnaHRlZCxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhY3VycmVudFRleHQudHJpbSgpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQubGVuZ3RoIDxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG1pbkNoYXJzQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNTApIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgaXNHZW5lcmF0aW5nIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSksXHJcbiAgICAgICAgICAgICAgICBzaG93VG9uZURyb3Bkb3duOiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgICAgICAgICAgISEoKF9jID0gYWN0aW9uQ29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSxcclxuICAgICAgICAgICAgICAgIHRvbmVzOiBhY3Rpb25Db25maWcudG9uZXMsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZDogdG9uZUlkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGVuYWJsZWRBSUFjdGlvbnMsXHJcbiAgICAgICAgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMsXHJcbiAgICAgICAgYWN0aXZlQWN0aW9uUHJvbXB0cyxcclxuICAgICAgICB0b25lQnlBY3Rpb24sXHJcbiAgICAgICAgaXNHZW5lcmF0aW5nLFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbixcclxuICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgIF0pO1xyXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBhZGRUZXh0T3JXcmFwLFxyXG4gICAgICAgICAgICBhZGRUZXh0LFxyXG4gICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24sXHJcbiAgICAgICAgfTtcclxuICAgIH0sIFthZGRUZXh0T3JXcmFwLCBhZGRUZXh0LCBjdXJyZW50VGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoaW5wdXRWYWx1ZSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChpbnB1dFZhbHVlIHx8ICcnKTtcclxuICAgIH0sIFtpbnB1dFZhbHVlLCBzZXRFZGl0b3JUZXh0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICghbGltaXQgfHwgIW9uRXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBuZXh0RXJyb3IgPSBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdCA/IExJTUlUX1JFQUNIRUQgOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiAnJztcclxuICAgICAgICBpZiAobGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID09PSBuZXh0RXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBsYXN0RW1pdHRlZEVkaXRvckVycm9yUmVmLmN1cnJlbnQgPSBuZXh0RXJyb3I7XHJcbiAgICAgICAgb25FcnJvcihuZXh0RXJyb3IpO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCBlcnJvciwgbGltaXQsIG9uRXJyb3JdKTtcclxuICAgIHJldHVybiAoX2pzeHMoT3V0ZXJDb250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4cyhFZGl0b3JGb290ZXJSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvckZvb3RlclRpdGxlLCB7IGNoaWxkcmVuOiBlZGl0b3JIZWFkZXIgPyAoX2pzeChUaXRsZVNtYWxsLCBPYmplY3QuYXNzaWduKHsgXCJkYXRhLXRlc3RcIjogXCJib2R5LXRleHQtZm9yLWVkaXQtdGVtcGxhdGVcIiB9LCB7IGNoaWxkcmVuOiBlZGl0b3JIZWFkZXIgfSkpKSA6IG51bGwgfSksIF9qc3hzKEVkaXRvckZvb3RlclJpZ2h0LCB7IGNoaWxkcmVuOiBbZXJyb3IgJiYgZXJyb3IgIT09IExJTUlUX1JFQUNIRUQgPyAoX2pzeHMoX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBbX2pzeChJbmZvSWNvbiwgeyB3aWR0aDogMTYsIGhlaWdodDogMTYsIGNvbG9yOiBDT0xPUlMuY29udGVudC5uZWdhdGl2ZSB9KSwgX2pzeChCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IGNvbG9yOiBDT0xPUlMuY29udGVudC5uZWdhdGl2ZSB9LCB7IGNoaWxkcmVuOiBlcnJvciB9KSldIH0pKSA6IG51bGwsIGxpbWl0ID8gKF9qc3hzKEJvZHlDYXB0aW9uLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IGVycm9yID09PSBMSU1JVF9SRUFDSEVEIHx8IGN1cnJlbnRUZXh0Lmxlbmd0aCA+IGxpbWl0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IENPTE9SUy5jb250ZW50Lm5lZ2F0aXZlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IFtjdXJyZW50VGV4dC5sZW5ndGgsIFwiL1wiLCBsaW1pdF0gfSkpKSA6IG51bGxdIH0pXSB9KSwgX2pzeHMoQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgaXNFcnJvcjogISFlcnJvciB9LCB7IGNoaWxkcmVuOiBbc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID8gKF9qc3hzKFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgcmVmOiBzdWdnZXN0aW9uU2Nyb2xsUmVmIH0sIHsgY2hpbGRyZW46IFtfanN4KFN1Z2dlc3Rpb25CYXNlbGluZVRleHQsIHsgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHsgX19odG1sOiBzdWdnZXN0aW9uQmFzZUh0bWwgfSB9KSwgaXNHZW5lcmF0aW5nID8gKF9qc3goU3VnZ2VzdGlvbkNhbmRpZGF0ZVRleHQsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtYnVzeVwiOiBcInRydWVcIiB9LCB7IGNoaWxkcmVuOiBfanN4cyhTdWdnZXN0aW9uQ2FuZGlkYXRlU2tlbGV0b24sIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiODQlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjY4JVwiIH0pXSB9KSB9KSkpIDogKF9qc3goU3VnZ2VzdGlvbkNhbmRpZGF0ZVRleHQsIHsgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19odG1sOiBhY3RpdmVDYW5kaWRhdGVIdG1sLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSkpLCBfanN4cyhTdWdnZXN0aW9uQ29udHJvbHNSb3csIHsgY2hpbGRyZW46IFtfanN4cyhTdWdnZXN0aW9uQ291bnRlciwgeyBjaGlsZHJlbjogW3N1Z2dlc3Rpb25JbmRleCArIDEsIFwiL1wiLCBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGhdIH0pLCBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUHJldmlvdXMgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBkaXNhYmxlZDogaXNQcmV2U3VnZ2VzdGlvbkRpc2FibGVkLCBvbkNsaWNrOiAoKSA9PiBzZXRTdWdnZXN0aW9uSW5kZXgoKGlkeCkgPT4gTWF0aC5tYXgoMCwgaWR4IC0gMSkpIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hldnJvbkxlZnRJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSksIF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiTGlrZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUZlZWRiYWNrKCdsaWtlJykgfSwgeyBjaGlsZHJlbjogX2pzeChUaHVtYnNVcEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzbGlrZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkRpc2xpa2Ugc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiBoYW5kbGVGZWVkYmFjaygnZGlzbGlrZScpIH0sIHsgY2hpbGRyZW46IF9qc3goVGh1bWJzRG93bkljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIGNhblJlZ2VuZXJhdGUgPyAoX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogaXNHZW5lcmF0aW5nID8gJ1JlZ2VuZXJhdGluZ+KApicgOiAnUmVnZW5lcmF0ZScsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25SZWdlbmVyYXRlQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIFwiYXJpYS1idXN5XCI6IGlzR2VuZXJhdGluZywgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzR2VuZXJhdGluZywgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3VnZ2VzdGlvbkFjdGlvblR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IGlzR2VuZXJhdGluZyA/IChfanN4KFJlZ2VuZXJhdGVJY29uU2hpbW1lciwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUgfSkpIDogKF9qc3goUmV3aW5kSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkpIH0pKSB9KSkpIDogbnVsbCwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNjYXJkXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiQWNjZXB0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogaGFuZGxlQWNjZXB0U3VnZ2VzdGlvbiB9LCB7IGNoaWxkcmVuOiBfanN4KENoZWNrSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKV0gfSldIH0pKSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFzdGVkVGV4dCA9IGUuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFzdGVkVGV4dC5sZW5ndGggPiBMQVJHRV9JTlBVVF9USFJFU0hPTEQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWwgPSB0ZXh0U3BhY2VSZWYuY3VycmVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IChfYSA9IGVsID09PSBudWxsIHx8IGVsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlbC5zZWxlY3Rpb25TdGFydCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSAoX2IgPSBlbCA9PT0gbnVsbCB8fCBlbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogZWwuc2VsZWN0aW9uRW5kKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcmVmZXIgbGl2ZSBET00gdmFsdWUg4oCUIGBjdXJyZW50VGV4dGAgY2FuIGxhZyB0aGUgdGV4dGFyZWEgZm9yIGJpZyBwYXN0ZXMuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFzZSA9IChfYyA9IGVsID09PSBudWxsIHx8IGVsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlbC52YWx1ZSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dFRleHQgPSBiYXNlLnNsaWNlKDAsIHN0YXJ0KSArIHBhc3RlZFRleHQgKyBiYXNlLnNsaWNlKGVuZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dChuZXh0VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChuZXh0VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FyZXQgPSBzdGFydCArIHBhc3RlZFRleHQubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YS5zZXRTZWxlY3Rpb25SYW5nZShjYXJldCwgY2FyZXQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChfYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlIGludmFsaWQgcmFuZ2UgaW4gZWRnZSBicm93c2Vyc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiAoX2pzeChXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIHsgYWN0aW9uczogYWN0aW9ucywgcmVmOiB0ZXh0U3BhY2VSZWYsIG9uQWN0aW9uU2VsZWN0OiBvbkFjdGlvblNlbGVjdCwgUmlnaHRDb21wb25lbnQ6IFJpZ2h0Q29tcG9uZW50LCByaWdodEFjdGlvbnNEaXNhYmxlZDogc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uIHx8IGlzR2VuZXJhdGluZywgb25FbW9qaUNsaWNrOiBvbkVtb2ppQWRkaXRpb24sIGFpQWN0aW9uczogYWlIZWFkZXJBY3Rpb25zLCBkaXNhYmxlQWxsQWN0aW9uczogc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uIHx8IGlzR2VuZXJhdGluZywgaW5zdHJ1Y3Rpb25BY3RpdmU6IGlzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIG9uQUlJbnN0cnVjdGlvbnNDbGljazogKCkgPT4gc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSh0cnVlKSwgb25BSVRvbmVDaGFuZ2U6IChhY3Rpb25UeXBlLCB0b25lSWQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRvbmVCeUFjdGlvbigocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW2FjdGlvblR5cGVdOiB0b25lSWQgfSkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQUlUb25lU2VsZWN0ID09PSBudWxsIHx8IG9uQUlUb25lU2VsZWN0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVG9uZVNlbGVjdChhY3Rpb25UeXBlLCB0b25lSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdG9uZUlkLCBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIG9uQUlBY3Rpb25DbGljazogKGFjdGlvblR5cGUsIGFjdGlvblZhcmlhbnQgPSBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNhbWUgYWN0aW9uIHNob3VsZCBub3QgcmV0cmlnZ2VyIGZyb20gY2hpcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnZW5lcmF0ZSBpcyBvbmx5IHZpYSBleHBsaWNpdCByZWdlbmVyYXRlIGNvbnRyb2wuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmV3IGFjdGlvbiBzdGFydHMgYSBmcmVzaCBzdWdnZXN0aW9uIHNlc3Npb24uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFjdGlvblZhcmlhbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFjdGlvblZhcmlhbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IH0pKV0gfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuZXhwb3J0IHsgQUlfVEFHX0NIQU5HRV9SQVRJT19USFJFU0hPTEQsIGNvbXB1dGVBaVRhZ09uQWNjZXB0LCBsZXZlbnNodGVpbkRpc3RhbmNlLCB9IGZyb20gJy4vYWkvYWlUYWcnO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1XaGF0c0FwcFRleHRFZGl0b3IuanMubWFwIl19 */")),L=a.default("div","production"===process.env.NODE_ENV?{target:"ea7i3sh4"}:{target:"ea7i3sh4",label:"InstructionActions"})("production"===process.env.NODE_ENV?{name:"1og3vwv",styles:"display:flex;align-items:center;gap:10px"}:{name:"1og3vwv",styles:"display:flex;align-items:center;gap:10px",map:"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBeUpzQyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIEZyYWdtZW50IGFzIF9GcmFnbWVudCwganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZXdpbmRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3Jld2luZC5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzRG93bkljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvdGh1bWJzX2Rvd24uc3ZnJztcclxuaW1wb3J0IFRodW1ic1VwSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfdXAuc3ZnJztcclxuaW1wb3J0IHsgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9CYXNlV2hhdHNhcHBDb250ZW50TGFuZy5oZWxwZXJcIjtcclxuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUsIH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgeyBDT0xPUlMgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzL1RoZW1lXCI7XHJcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICcuLi90b29sdGlwcy9Ub29sdGlwJztcclxuaW1wb3J0IHsgQm9keUNhcHRpb24sIFRpdGxlU21hbGwgfSBmcm9tICcuLi9UeXBvZ3JhcGh5U3R5bGUnO1xyXG5pbXBvcnQgeyBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlMsIERFRkFVTFRfSU5TVFJVQ1RJT05fU1VHR0VTVElPTlMsIHJlc29sdmVBY3Rpb25Qcm9tcHRzLCB9IGZyb20gJy4vYWkvYWN0aW9uUmVnaXN0cnknO1xyXG5pbXBvcnQgeyBjb21wdXRlQWlUYWdPbkFjY2VwdCB9IGZyb20gJy4vYWkvYWlUYWcnO1xyXG5pbXBvcnQgeyBidWlsZEFjdGlvblByb21wdCwgcmVxdWVzdEFJU3VnZ2VzdGlvbiB9IGZyb20gJy4vYWkvYXBpJztcclxuaW1wb3J0IHsgQ29udGFpbmVyLCBFZGl0b3JGb290ZXJSaWdodCwgRWRpdG9yRm9vdGVyUm93LCBFZGl0b3JGb290ZXJUaXRsZSwgT3V0ZXJDb250YWluZXIsIFRleHRTcGFjZSwgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUFjdGlvblZhcmlhbnQsIEFJRWRpdG9yQWN0aW9uVHlwZXMsIEVkaXRvckFjdGlvblR5cGVzLCBXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIH0gZnJvbSAnLi9XaGF0c0FwcFRleHRFZGl0b3JIZWFkZXInO1xyXG5jb25zdCBMSU1JVF9SRUFDSEVEID0gJ0NoYXJhY3RlciBsaW1pdCByZWFjaGVkJztcclxuY29uc3QgUkVQSFJBU0VfSURMRV9NUyA9IDMwMDA7XHJcbmNvbnN0IE1BWF9SRVBIUkFTRV9ISUdITElHSFRTID0gNTtcclxuY29uc3QgTUFYX1NVR0dFU1RJT05TID0gMztcclxuY29uc3QgTEFSR0VfSU5QVVRfVEhSRVNIT0xEID0gMTIwMDtcclxuY29uc3QgVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgPSAnUmVwaHJhc2UgdGhpcyBXaGF0c0FwcCB1dGlsaXR5IHRlbXBsYXRlIHRvIGltcHJvdmUgY2xhcml0eSBhbmQgcmVhZGFiaWxpdHkgd2hpbGUgcHJlc2VydmluZyB2YXJpYWJsZXMsIGludGVudCwgYW5kIGNvbXBsaWFuY2UuJztcclxuY29uc3Qgc2tlbGV0b25QdWxzZSA9IGtleWZyYW1lcyBgXG5cdDAlIHsgb3BhY2l0eTogMC41NTsgfVxuXHQ1MCUgeyBvcGFjaXR5OiAxOyB9XG5cdDEwMCUgeyBvcGFjaXR5OiAwLjU1OyB9XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxNHB4IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogMTBweDtcblx0bWluLWhlaWdodDogMTUwcHg7XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkxpbmUgPSBzdHlsZWQuZGl2IGBcblx0aGVpZ2h0OiAxNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdHdpZHRoOiAkeyhwcm9wcykgPT4gcHJvcHMud2lkdGh9O1xuXHRiYWNrZ3JvdW5kOiAjZWNlY2VmO1xuXHRhbmltYXRpb246ICR7c2tlbGV0b25QdWxzZX0gMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHRtYXgtaGVpZ2h0OiAyNjBweDtcblx0b3ZlcmZsb3cteTogc2Nyb2xsO1xuXHRzY3JvbGxiYXItd2lkdGg6IHRoaW47XG5cdHNjcm9sbGJhci1jb2xvcjogI2M4YzhjZiB0cmFuc3BhcmVudDtcblx0Ojotd2Via2l0LXNjcm9sbGJhciB7XG5cdFx0d2lkdGg6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcblx0XHRiYWNrZ3JvdW5kOiAjYzhjOGNmO1xuXHRcdGJvcmRlci1yYWRpdXM6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcblx0XHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0fVxuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkJhc2VsaW5lVGV4dCA9IHN0eWxlZC5kaXYgYFxuXHR0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25DYW5kaWRhdGVUZXh0ID0gc3R5bGVkLmRpdiBgXG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkNhbmRpZGF0ZVNrZWxldG9uID0gc3R5bGVkLmRpdiBgXG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHR3aWR0aDogMTAwJTtcblx0bWluLWhlaWdodDogNDBweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db250cm9sc1JvdyA9IHN0eWxlZC5kaXYgYFxuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDZweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db3VudGVyID0gc3R5bGVkLnNwYW4gYFxuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkljb25CdXR0b24gPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0cGFkZGluZzogNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdGRpc3BsYXk6IGlubGluZS1mbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0dHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjEycyBlYXNlO1xuXHQ6bm90KDpkaXNhYmxlZCk6aG92ZXIge1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICR7Q09MT1JTLnN1cmZhY2UuaG92ZXJlZH07XG5cdH1cblx0OmRpc2FibGVkIHtcblx0XHRvcGFjaXR5OiAwLjM1O1xuXHRcdGN1cnNvcjogbm90LWFsbG93ZWQ7XG5cdH1cbmA7XHJcbi8qKiBSZWdlbmVyYXRlIHN0YXlzIGZ1bGwgb3BhY2l0eSB3aGlsZSBkaXNhYmxlZCBzbyB0aGUgbG9hZGluZyBzaGltbWVyIHN0YXlzIHZpc2libGUgKHNhbWUgcHVsc2UgYXMgZWRpdG9yIHNrZWxldG9uKS4gKi9cclxuY29uc3QgU3VnZ2VzdGlvblJlZ2VuZXJhdGVCdXR0b24gPSBzdHlsZWQoU3VnZ2VzdGlvbkljb25CdXR0b24pIGBcblx0OmRpc2FibGVkIHtcblx0XHRvcGFjaXR5OiAxO1xuXHRcdGN1cnNvcjogd2FpdDtcblx0fVxuYDtcclxuY29uc3QgUmVnZW5lcmF0ZUljb25TaGltbWVyID0gc3R5bGVkLmRpdiBgXG5cdHdpZHRoOiAxNHB4O1xuXHRoZWlnaHQ6IDE0cHg7XG5cdGJvcmRlci1yYWRpdXM6IDRweDtcblx0YmFja2dyb3VuZDogI2VjZWNlZjtcblx0ZmxleC1zaHJpbms6IDA7XG5cdGFuaW1hdGlvbjogJHtza2VsZXRvblB1bHNlfSAxLjFzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xuYDtcclxuLyoqIFNhbWUgYm90dG9tIHRvb2xiYXIgc2xvdCBhcyBgV2hhdHNBcHBUZXh0RWRpdG9ySGVhZGVyYCDigJQgcmVwbGFjZXMgdGhlIGZ1bGwgaWNvbi9BSSBwYW5lbCB3aGlsZSBvcGVuLiAqL1xyXG5jb25zdCBJbnN0cnVjdGlvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblx0cGFkZGluZzogOHB4IDEycHg7XG5cdGdhcDogMTBweDtcblx0Ym9yZGVyLXJhZGl1czogMCAwIDRweCA0cHg7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXRSb3cgPSBzdHlsZWQuZGl2IGBcblx0Ym9yZGVyOiAxcHggc29saWQgI2Y1YTRjMDtcblx0Ym9yZGVyLXJhZGl1czogMTBweDtcblx0cGFkZGluZzogOHB4IDEwcHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbklucHV0ID0gc3R5bGVkLmlucHV0IGBcblx0ZmxleDogMTtcblx0bWluLXdpZHRoOiAwO1xuXHRib3JkZXI6IDA7XG5cdG91dGxpbmU6IG5vbmU7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25BY3Rpb25zID0gc3R5bGVkLmRpdiBgXG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQ2FuY2VsID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnNlY29uZGFyeX07XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0Zm9udC13ZWlnaHQ6IDUwMDtcblx0cGFkZGluZzogMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbXByb3ZlID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMXB4IHNvbGlkICM1ZDNhNzI7XG5cdGNvbG9yOiAjNWQzYTcyO1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0Ym9yZGVyLXJhZGl1czogOHB4O1xuXHRwYWRkaW5nOiA4cHggMTRweDtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRsaW5lLWhlaWdodDogMS4xO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0ID0gc3R5bGVkLmRpdiBgXG5cdG1hcmdpbi10b3A6IDEwcHg7XG5cdGJvcmRlci1yYWRpdXM6IDEycHg7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3gtc2hhZG93OiAwIDZweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkJ1dHRvbiA9IHN0eWxlZC5idXR0b24gYFxuXHR3aWR0aDogMTAwJTtcblx0Ym9yZGVyOiAwO1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgJHtDT0xPUlMuc3Ryb2tlLnByaW1hcnl9O1xuXHRiYWNrZ3JvdW5kOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyNlNWYzZTgnIDogJ3RyYW5zcGFyZW50Jyl9O1xuXHRjb2xvcjogJHsocHJvcHMpID0+IChwcm9wcy5zZWxlY3RlZCA/ICcjMWU2YjM0JyA6IENPTE9SUy5jb250ZW50LnByaW1hcnkpfTtcblx0dGV4dC1hbGlnbjogbGVmdDtcblx0cGFkZGluZzogMTJweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjI7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0OmZpcnN0LW9mLXR5cGUge1xuXHRcdGJvcmRlci10b3A6IDA7XG5cdH1cbmA7XHJcbmNvbnN0IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nID0gbmV3IEJhc2VXaGF0c2FwcENvbnRlbnRMYW5nSGVscGVyKCk7XHJcbmNvbnN0IFdpbGRDYXJkTWFwID0ge1xyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLkJPTERdOiAnKicsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuSVRBTElDXTogJ18nLFxyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLlNUUklLRVRIUk9VR0hdOiAnficsXHJcbn07XHJcbmZ1bmN0aW9uIGdldEhpZ2hsaWdodFN0b3JhZ2VLZXkoZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgIHJldHVybiBgd2hhdHNhcHAtZWRpdG9yLXJlcGhyYXNlLWhpZ2hsaWdodC0ke2VkaXRvckluc3RhbmNlS2V5IHx8ICdkZWZhdWx0J31gO1xyXG59XHJcbmV4cG9ydCBjb25zdCBXaGF0c0FwcFRleHRFZGl0b3IgPSBSZWFjdC5mb3J3YXJkUmVmKChfYSwgcmVmKSA9PiB7XHJcbiAgICB2YXIgeyBvbkNoYW5nZSwgb25DbGlja1ZhcmlhYmxlLCB0ZXh0OiBpbnB1dFZhbHVlLCBSaWdodENvbXBvbmVudCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yLCByb3dzLCBhY3Rpb25zLCBlZGl0b3JJbnN0YW5jZUtleSwgdGVtcGxhdGVUeXBlID0gJ21hcmtldGluZycsIHRlbXBsYXRlSWQsIHJlcXVlc3RFeGVjdXRvciwgYmFzZVVybCwgZW5kcG9pbnRQYXRoLCB1c2VDYXNlLCBzdG9yZUlkLCBhcGlBZGFwdGVyLCBjb252ZXJzYXRpb25JZCA9ICd3aGF0c2FwcC10ZW1wbGF0ZS1lZGl0b3InLCBzeXN0ZW1JZCA9ICd3aGF0c2FwcC13cml0ZXInLCBpbnRlbnQgPSAnZGVmYXVsdCcsIGVuYWJsZWRBSUFjdGlvbnMgPSBbXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlNIT1JURU4sXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FWFBBTkQsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FTU9KSUZZLFxyXG4gICAgXSwgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMgPSBmYWxzZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCBhaUFjdGlvbk1pbkNoYXJzLCBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgb25BSUV2ZW50LCBvbkFJVGFnQ29tcHV0ZWQsIHByZWZpbGxXYXNBaUdlbmVyYXRlZCA9IGZhbHNlLCBlZGl0b3JIZWFkZXIsIG9uQUlUb25lU2VsZWN0LCBvbkFJQWN0aW9uUmVxdWVzdCwgb25CdWlsZEFJUHJvbXB0IH0gPSBfYSwgdGV4dEFyZWFQcm9wcyA9IF9fcmVzdChfYSwgW1wib25DaGFuZ2VcIiwgXCJvbkNsaWNrVmFyaWFibGVcIiwgXCJ0ZXh0XCIsIFwiUmlnaHRDb21wb25lbnRcIiwgXCJlcnJvclwiLCBcImxpbWl0XCIsIFwib25FcnJvclwiLCBcInJvd3NcIiwgXCJhY3Rpb25zXCIsIFwiZWRpdG9ySW5zdGFuY2VLZXlcIiwgXCJ0ZW1wbGF0ZVR5cGVcIiwgXCJ0ZW1wbGF0ZUlkXCIsIFwicmVxdWVzdEV4ZWN1dG9yXCIsIFwiYmFzZVVybFwiLCBcImVuZHBvaW50UGF0aFwiLCBcInVzZUNhc2VcIiwgXCJzdG9yZUlkXCIsIFwiYXBpQWRhcHRlclwiLCBcImNvbnZlcnNhdGlvbklkXCIsIFwic3lzdGVtSWRcIiwgXCJpbnRlbnRcIiwgXCJlbmFibGVkQUlBY3Rpb25zXCIsIFwiZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnNcIiwgXCJwcm9tcHRPdmVycmlkZXNcIiwgXCJyZXBocmFzZVRvbmVzXCIsIFwiYWlBY3Rpb25NaW5DaGFyc1wiLCBcImluc3RydWN0aW9uU3VnZ2VzdGlvbnNcIiwgXCJvbkFJRXZlbnRcIiwgXCJvbkFJVGFnQ29tcHV0ZWRcIiwgXCJwcmVmaWxsV2FzQWlHZW5lcmF0ZWRcIiwgXCJlZGl0b3JIZWFkZXJcIiwgXCJvbkFJVG9uZVNlbGVjdFwiLCBcIm9uQUlBY3Rpb25SZXF1ZXN0XCIsIFwib25CdWlsZEFJUHJvbXB0XCJdKTtcclxuICAgIGNvbnN0IHRleHRTcGFjZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IFtjdXJyZW50VGV4dCwgc2V0Q3VycmVudFRleHRdID0gdXNlU3RhdGUoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICBjb25zdCBbaXNSZXBocmFzZUhpZ2hsaWdodGVkLCBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW3JlcGhyYXNlSGlnaGxpZ2h0Q291bnQsIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbaXNHZW5lcmF0aW5nLCBzZXRJc0dlbmVyYXRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2lzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGVdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2luc3RydWN0aW9uVGV4dCwgc2V0SW5zdHJ1Y3Rpb25UZXh0XSA9IHVzZVN0YXRlKCcnKTtcclxuICAgIGNvbnN0IFt0b25lQnlBY3Rpb24sIHNldFRvbmVCeUFjdGlvbl0gPSB1c2VTdGF0ZSh7fSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkJhc2VUZXh0LCBzZXRTdWdnZXN0aW9uQmFzZVRleHRdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkNhbmRpZGF0ZXMsIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzXSA9IHVzZVN0YXRlKFtdKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uSW5kZXgsIHNldFN1Z2dlc3Rpb25JbmRleF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGVdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBzdWdnZXN0aW9uU2Nyb2xsUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgcmVwaHJhc2VJZGxlUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgaGlnaGxpZ2h0UmVzZXRSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICAvKipcclxuICAgICAqIFByaW9yIGVsaWdpYmlsaXR5IGZvciByZXBocmFzZSBudWRnZSAobnVsbCA9IG5vdCBpbml0aWFsaXplZCkuXHJcbiAgICAgKiBNYXRjaGVzIHRoZSBjaGlwOiBub24tZW1wdHkgdHJpbSBhbmQgbGVuZ3RoIOKJpSBtaW4g4oCUIHNhbWUgYXMgYGFpSGVhZGVyQWN0aW9uc2AgZGlzYWJsZWQgcnVsZXMuXHJcbiAgICAgKi9cclxuICAgIGNvbnN0IHByZXZSZXBocmFzZUVsaWdpYmxlUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgZGVmZXJyZWRIdG1sUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgbGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIC8qKiBGaXJzdCBhY2NlcHQgYWZ0ZXIgZnVsbC1BSSBwcmVmaWxsIChgcHJlZmlsbFdhc0FpR2VuZXJhdGVkYCk7IGNsZWFyZWQgYWZ0ZXIgb25lIGFjY2VwdC4gKi9cclxuICAgIGNvbnN0IGluaXRpYWxBaVByZWZpbGxQaGFzZVJlZiA9IHVzZVJlZighIXByZWZpbGxXYXNBaUdlbmVyYXRlZCk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGluaXRpYWxBaVByZWZpbGxQaGFzZVJlZi5jdXJyZW50ID0gISFwcmVmaWxsV2FzQWlHZW5lcmF0ZWQ7XHJcbiAgICB9LCBbcHJlZmlsbFdhc0FpR2VuZXJhdGVkLCBlZGl0b3JJbnN0YW5jZUtleV0pO1xyXG4gICAgY29uc3QgYWN0aXZlQWN0aW9uUHJvbXB0cyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiByZXNvbHZlQWN0aW9uUHJvbXB0cyh0ZW1wbGF0ZVR5cGUsIHByb21wdE92ZXJyaWRlcywgcmVwaHJhc2VUb25lcyk7XHJcbiAgICB9LCBbcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCB0ZW1wbGF0ZVR5cGVdKTtcclxuICAgIGNvbnN0IGZpbHRlcmVkSW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGlmICghcXVlcnkpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucy5maWx0ZXIoKHN1Z2dlc3Rpb24pID0+IHN1Z2dlc3Rpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeSkpO1xyXG4gICAgfSwgW2luc3RydWN0aW9uU3VnZ2VzdGlvbnMsIGluc3RydWN0aW9uVGV4dF0pO1xyXG4gICAgY29uc3QgbWluQ2hhcnNCeUFjdGlvbiA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUyksIChhaUFjdGlvbk1pbkNoYXJzIHx8IHt9KSk7XHJcbiAgICB9LCBbYWlBY3Rpb25NaW5DaGFyc10pO1xyXG4gICAgY29uc3QgcmVwaHJhc2VNaW5DaGFycyA9IG1pbkNoYXJzQnlBY3Rpb25bQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV0gfHxcclxuICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV07XHJcbiAgICBjb25zdCBlbWl0QUlFdmVudCA9IHVzZUNhbGxiYWNrKChuYW1lLCBwYXlsb2FkKSA9PiB7XHJcbiAgICAgICAgb25BSUV2ZW50ID09PSBudWxsIHx8IG9uQUlFdmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSUV2ZW50KG5hbWUsIHBheWxvYWQpO1xyXG4gICAgfSwgW29uQUlFdmVudF0pO1xyXG4gICAgY29uc3Qgc2V0RWRpdG9yVGV4dCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIHNldEN1cnJlbnRUZXh0KChwcmV2KSA9PiAocHJldiA9PT0gbmV4dFRleHQgPyBwcmV2IDogbmV4dFRleHQpKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGVtaXRDaGFuZ2VXaXRoR3VhcmQgPSB1c2VDYWxsYmFjaygobmV4dFRleHQpID0+IHtcclxuICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGRlZmVycmVkSHRtbFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5leHRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIG5leHRUZXh0KTtcclxuICAgICAgICAgICAgZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChuZXh0VGV4dCkpO1xyXG4gICAgICAgICAgICB9LCAxNik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICB9LCBbb25DaGFuZ2VdKTtcclxuICAgIGNvbnN0IGNsZWFyU3VnZ2VzdGlvblNlc3Npb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0KG51bGwpO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtdKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUobnVsbCk7XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgPj0gTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXh0Q291bnQgPSByZXBocmFzZUhpZ2hsaWdodENvdW50ICsgMTtcclxuICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KG5leHRDb3VudCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSksIFN0cmluZyhuZXh0Q291bnQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKHRydWUpO1xyXG4gICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgIH0sIDEyMDApO1xyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5LCByZXBocmFzZUhpZ2hsaWdodENvdW50XSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHRSZWYgPSB1c2VSZWYodHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0KTtcclxuICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50ID0gdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0O1xyXG4gICAgZnVuY3Rpb24gaGFuZGxlT25DaGFuZ2UoZSkge1xyXG4gICAgICAgIGNvbnN0IHRleHQgPSBlLnRhcmdldC52YWx1ZTtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBzZXRDYXJldFBvc2l0aW9uKGNhcmV0UG9zKSB7XHJcbiAgICAgICAgY29uc3QgZWxlbSA9IHRleHRTcGFjZVJlZiA9PT0gbnVsbCB8fCB0ZXh0U3BhY2VSZWYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRleHRTcGFjZVJlZi5jdXJyZW50O1xyXG4gICAgICAgIGlmIChlbGVtICE9IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKGVsZW0uc2VsZWN0aW9uU3RhcnQpIHtcclxuICAgICAgICAgICAgICAgIGVsZW0uZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIGVsZW0uc2VsZWN0aW9uRW5kID0gY2FyZXRQb3M7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgZWxlbS5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIG9uQWN0aW9uU2VsZWN0KGFjdGlvblR5cGUpIHtcclxuICAgICAgICBjb25zdCB3aWxkQ2FyZCA9IFdpbGRDYXJkTWFwW2FjdGlvblR5cGVdO1xyXG4gICAgICAgIGlmICh3aWxkQ2FyZCAmJiB0ZXh0U3BhY2VSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHRleHQgfSA9IGluc2VydFRleHRBdEluZGV4KHdpbGRDYXJkLCBzdGFydCk7XHJcbiAgICAgICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uKHN0YXJ0ICsgMSk7XHJcbiAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBhZGRUZXh0T3JXcmFwKHdpbGRDYXJkKTtcclxuICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBvbkVtb2ppQWRkaXRpb24oZW1vamkpIHtcclxuICAgICAgICBjb25zdCB7IHRleHQgfSA9IGFkZFRleHQoZW1vamkpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhZGRUZXh0T3JXcmFwKHRleHRUb0FkZCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgbGV0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICBpZiAodGV4dFNwYWNlUmVmLmN1cnJlbnQgJiYgdGV4dFRvQWRkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgY29uc3Qgd2lsZENhcmQgPSB0ZXh0VG9BZGQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICAvKiogbm90aGluZyBpcyBzZWxlY3RlZCAqL1xyXG4gICAgICAgICAgICAgICAgLyoqIHNvIGFwcGVuZCB0aGUgd2lsZGNhcmQgYXQgdGhlIGVuZCAqL1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFkZFRleHQod2lsZENhcmQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGV4dCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLndyYXBwV2lsZGNhcmQoc3RhcnQsIGVuZCwgd2lsZENhcmQsIHRleHQpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaHRtbCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwodGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdGV4dCwgaHRtbCB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IHRleHQ6IHRleHQsIGh0bWw6IHRleHQgfTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZFRleHQodGV4dFRvQWRkKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgaWYgKHRleHRTcGFjZVJlZi5jdXJyZW50ICYmIHRleHRUb0FkZCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zZXJ0VGV4dEF0SW5kZXgodGV4dFRvQWRkLCBzdGFydCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dDogdGV4dCwgaHRtbDogdGV4dCB9O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gaW5zZXJ0VGV4dEF0SW5kZXgodGV4dFRvQWRkLCBpbmRleCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgbGV0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICB0ZXh0ID0gdGV4dC5zbGljZSgwLCBpbmRleCkgKyB0ZXh0VG9BZGQgKyB0ZXh0LnNsaWNlKGluZGV4KTtcclxuICAgICAgICBjb25zdCBodG1sID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTCh0ZXh0KTtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgIHJldHVybiB7IHRleHQsIGh0bWwgfTtcclxuICAgIH1cclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8ICFlZGl0b3JJbnN0YW5jZUtleSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNhY2hlZCA9IE51bWJlcihzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGdldEhpZ2hsaWdodFN0b3JhZ2VLZXkoZWRpdG9ySW5zdGFuY2VLZXkpKSB8fFxyXG4gICAgICAgICAgICAnMCcpO1xyXG4gICAgICAgIGlmICghTnVtYmVyLmlzTmFOKGNhY2hlZCkpIHtcclxuICAgICAgICAgICAgc2V0UmVwaHJhc2VIaWdobGlnaHRDb3VudChjYWNoZWQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtlZGl0b3JJbnN0YW5jZUtleV0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBjb25zdCBlbGlnaWJsZSA9ICEhY3VycmVudFRleHQudHJpbSgpICYmIGN1cnJlbnRUZXh0Lmxlbmd0aCA+PSByZXBocmFzZU1pbkNoYXJzO1xyXG4gICAgICAgIGlmIChwcmV2UmVwaHJhc2VFbGlnaWJsZVJlZi5jdXJyZW50ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHByZXZSZXBocmFzZUVsaWdpYmxlUmVmLmN1cnJlbnQgPSBlbGlnaWJsZTtcclxuICAgICAgICAgICAgaWYgKGVsaWdpYmxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50KCk7XHJcbiAgICAgICAgICAgICAgICB9LCBSRVBIUkFTRV9JRExFX01TKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZWxpZ2libGUpIHtcclxuICAgICAgICAgICAgcHJldlJlcGhyYXNlRWxpZ2libGVSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjcm9zc2VkVGhyZXNob2xkID0gIXByZXZSZXBocmFzZUVsaWdpYmxlUmVmLmN1cnJlbnQgJiYgZWxpZ2libGU7XHJcbiAgICAgICAgcHJldlJlcGhyYXNlRWxpZ2libGVSZWYuY3VycmVudCA9IHRydWU7XHJcbiAgICAgICAgaWYgKGNyb3NzZWRUaHJlc2hvbGQpIHtcclxuICAgICAgICAgICAgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0UmVmLmN1cnJlbnQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50KCk7XHJcbiAgICAgICAgfSwgUkVQSFJBU0VfSURMRV9NUyk7XHJcbiAgICB9LCBbY3VycmVudFRleHQsIHJlcGhyYXNlTWluQ2hhcnNdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGFjdGl2ZUNhbmRpZGF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzW3N1Z2dlc3Rpb25JbmRleF0gfHwgJyc7XHJcbiAgICBjb25zdCBzdWdnZXN0aW9uQmFzZUh0bWwgPSB1c2VNZW1vKCgpID0+IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwoc3VnZ2VzdGlvbkJhc2VUZXh0IHx8ICcnKSwgW3N1Z2dlc3Rpb25CYXNlVGV4dF0pO1xyXG4gICAgY29uc3QgYWN0aXZlQ2FuZGlkYXRlSHRtbCA9IHVzZU1lbW8oKCkgPT4gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChhY3RpdmVDYW5kaWRhdGUpLCBbYWN0aXZlQ2FuZGlkYXRlXSk7XHJcbiAgICBjb25zdCBjYW5SZWdlbmVyYXRlID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDwgTUFYX1NVR0dFU1RJT05TO1xyXG4gICAgY29uc3Qgc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID0gISFzdWdnZXN0aW9uQmFzZVRleHQgJiYgc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoID4gMDtcclxuICAgIGNvbnN0IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8IHN1Z2dlc3Rpb25JbmRleCA8PSAwO1xyXG4gICAgY29uc3QgaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDw9IDEgfHxcclxuICAgICAgICBzdWdnZXN0aW9uSW5kZXggPj0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBub2RlID0gc3VnZ2VzdGlvblNjcm9sbFJlZi5jdXJyZW50O1xyXG4gICAgICAgIGlmICghbm9kZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIG5vZGUuc2Nyb2xsVG9wID0gbm9kZS5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9LCBbYWN0aXZlQ2FuZGlkYXRlLCBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24sIGlzR2VuZXJhdGluZ10pO1xyXG4gICAgY29uc3QgZXhlY3V0ZUFJQWN0aW9uID0gdXNlQ2FsbGJhY2soKGFjdGlvblR5cGUsIHJlZ2VuZXJhdGVFeGlzdGluZyA9IGZhbHNlLCBpbnN0cnVjdGlvbk92ZXJyaWRlLCB0b25lT3ZlcnJpZGVJZCwgYWN0aW9uVmFyaWFudCA9IEFJQWN0aW9uVmFyaWFudC5ERUZBVUxUKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICB2YXIgX2IsIF9jLCBfZDtcclxuICAgICAgICBpZiAoIW9uQUlBY3Rpb25SZXF1ZXN0ICYmXHJcbiAgICAgICAgICAgICFhcGlBZGFwdGVyICYmXHJcbiAgICAgICAgICAgICghcmVxdWVzdEV4ZWN1dG9yIHx8ICFiYXNlVXJsKSkge1xyXG4gICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoJ0FJIGNvbmZpZ3VyYXRpb24gbWlzc2luZycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY3VycmVudFRleHQudHJpbSgpKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbWluQ2hhcnNGb3JBY3Rpb24gPSBtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICA1MDtcclxuICAgICAgICBpZiAoY3VycmVudFRleHQubGVuZ3RoIDwgbWluQ2hhcnNGb3JBY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpZiAoaXNHZW5lcmF0aW5nKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKHJlZ2VuZXJhdGVFeGlzdGluZyAmJiAhY2FuUmVnZW5lcmF0ZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGJhc2VDb25maWcgPSBhY3RpdmVBY3Rpb25Qcm9tcHRzW2FjdGlvblR5cGVdO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UgJiZcclxuICAgICAgICAgICAgdGVtcGxhdGVUeXBlID09PSAndXRpbGl0eScgJiZcclxuICAgICAgICAgICAgYWN0aW9uVmFyaWFudCA9PT0gQUlBY3Rpb25WYXJpYW50LlJFUEhSQVNFXHJcbiAgICAgICAgICAgID8gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBiYXNlQ29uZmlnKSwgeyBsYWJlbDogJ1JlcGhyYXNlJywgYmFzZVByb21wdDogVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgfSkgOiBiYXNlQ29uZmlnO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVG9uZUlkID0gdG9uZU92ZXJyaWRlSWQgfHxcclxuICAgICAgICAgICAgdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIGNvbmZpZy5kZWZhdWx0VG9uZUlkIHx8XHJcbiAgICAgICAgICAgICgoX2MgPSAoX2IgPSBjb25maWcudG9uZXMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYlswXSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmlkKTtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFRvbmUgPSAoX2QgPSBjb25maWcudG9uZXMpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5maW5kKCh0b25lKSA9PiB0b25lLmlkID09PSBzZWxlY3RlZFRvbmVJZCk7XHJcbiAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgPSBpbnN0cnVjdGlvbk92ZXJyaWRlICE9PSB1bmRlZmluZWRcclxuICAgICAgICAgICAgPyBpbnN0cnVjdGlvbk92ZXJyaWRlXHJcbiAgICAgICAgICAgIDogaW5zdHJ1Y3Rpb25UZXh0O1xyXG4gICAgICAgIGNvbnN0IHByb21wdCA9IChvbkJ1aWxkQUlQcm9tcHQgPT09IG51bGwgfHwgb25CdWlsZEFJUHJvbXB0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkJ1aWxkQUlQcm9tcHQoe1xyXG4gICAgICAgICAgICBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICBhY3Rpb25WYXJpYW50LFxyXG4gICAgICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICBjb25maWcsXHJcbiAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgIHRvbmVMYWJlbDogc2VsZWN0ZWRUb25lID09PSBudWxsIHx8IHNlbGVjdGVkVG9uZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZWN0ZWRUb25lLmxhYmVsLFxyXG4gICAgICAgICAgICBpbnN0cnVjdGlvblRleHQ6IGluc3RydWN0aW9uRm9yUHJvbXB0IHx8IHVuZGVmaW5lZCxcclxuICAgICAgICB9KSkgfHxcclxuICAgICAgICAgICAgYnVpbGRBY3Rpb25Qcm9tcHQoe1xyXG4gICAgICAgICAgICAgICAgY29uZmlnLFxyXG4gICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZCxcclxuICAgICAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIHNldElzR2VuZXJhdGluZyh0cnVlKTtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfYWN0aW9uX3RyaWdnZXJlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG9uQUlBY3Rpb25SZXF1ZXN0XHJcbiAgICAgICAgICAgICAgICA/IHlpZWxkIG9uQUlBY3Rpb25SZXF1ZXN0KHtcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblZhcmlhbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIDogeWllbGQgcmVxdWVzdEFJU3VnZ2VzdGlvbih7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgYmFzZVVybCxcclxuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgICAgIGludGVudCxcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICAgICAgICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZydcclxuICAgICAgICAgICAgICAgID8gcmVzdWx0LnRyaW0oKVxyXG4gICAgICAgICAgICAgICAgOiAoKHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3VsdC5ib2R5KSB8fCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKCFyZWdlbmVyYXRlRXhpc3RpbmcpIHtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25CYXNlVGV4dChjdXJyZW50VGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShhY3Rpb25UeXBlKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtjYW5kaWRhdGVdKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcygocHJldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IFsuLi5wcmV2LCBjYW5kaWRhdGVdLnNsaWNlKDAsIE1BWF9TVUdHRVNUSU9OUyk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgobmV4dC5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdGYWlsZWQgdG8gZ2VuZXJhdGUgQUkgc3VnZ2VzdGlvbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgc2V0SXNHZW5lcmF0aW5nKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9KSwgW1xyXG4gICAgICAgIHJlcXVlc3RFeGVjdXRvcixcclxuICAgICAgICBiYXNlVXJsLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBjYW5SZWdlbmVyYXRlLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGluc3RydWN0aW9uVGV4dCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIGVuZHBvaW50UGF0aCxcclxuICAgICAgICBhcGlBZGFwdGVyLFxyXG4gICAgICAgIGludGVudCxcclxuICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgIG9uRXJyb3IsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgICAgICBvbkFJQWN0aW9uUmVxdWVzdCxcclxuICAgICAgICBvbkJ1aWxkQUlQcm9tcHQsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFhY3RpdmVDYW5kaWRhdGUgfHwgIXN1Z2dlc3Rpb25CYXNlVGV4dCB8fCAhc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2FjY2VwdGVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGluSW5pdGlhbEFpUGhhc2UgPSBpbml0aWFsQWlQcmVmaWxsUGhhc2VSZWYuY3VycmVudDtcclxuICAgICAgICBjb25zdCB0YWdQYXlsb2FkID0gY29tcHV0ZUFpVGFnT25BY2NlcHQoe1xyXG4gICAgICAgICAgICBiYXNlbGluZVRleHQ6IHN1Z2dlc3Rpb25CYXNlVGV4dCxcclxuICAgICAgICAgICAgYWNjZXB0ZWRUZXh0OiBhY3RpdmVDYW5kaWRhdGUsXHJcbiAgICAgICAgICAgIGluaXRpYWxBaVByZWZpbGxQaGFzZTogaW5Jbml0aWFsQWlQaGFzZSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoaW5Jbml0aWFsQWlQaGFzZSkge1xyXG4gICAgICAgICAgICBpbml0aWFsQWlQcmVmaWxsUGhhc2VSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvbkFJVGFnQ29tcHV0ZWQgPT09IG51bGwgfHwgb25BSVRhZ0NvbXB1dGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVGFnQ29tcHV0ZWQodGFnUGF5bG9hZCk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGFjdGl2ZUNhbmRpZGF0ZSxcclxuICAgICAgICBzdWdnZXN0aW9uQmFzZVRleHQsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCxcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkLFxyXG4gICAgICAgIGVtaXRBSUV2ZW50LFxyXG4gICAgICAgIHRlbXBsYXRlSWQsXHJcbiAgICAgICAgb25BSVRhZ0NvbXB1dGVkLFxyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2Rpc2NhcmRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uKCk7XHJcbiAgICB9LCBbY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiwgZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKChyYXRpbmcpID0+IHtcclxuICAgICAgICBpZiAoIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2ZlZWRiYWNrX3N1Ym1pdHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICAgICAgcmF0aW5nLFxyXG4gICAgICAgICAgICBjYW5kaWRhdGVfaW5kZXg6IHN1Z2dlc3Rpb25JbmRleCArIDEsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LCBbZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzdWdnZXN0aW9uSW5kZXgsIHRlbXBsYXRlSWRdKTtcclxuICAgIGNvbnN0IGFpSGVhZGVyQWN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucylcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBlbmFibGVkQUlBY3Rpb25zLm1hcCgoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICAgICAgY29uc3QgYWN0aW9uQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICAgICAgY29uc3QgdG9uZUlkID0gdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICBhY3Rpb25Db25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAgICAgKChfYiA9IChfYSA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzBdKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWQpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBhY3Rpb25Db25maWcubGFiZWwsXHJcbiAgICAgICAgICAgICAgICBpc1ByaW1hcnk6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBpc0dlbmVyYXRpbmcgJiYgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHRlZDogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVwaHJhc2VIaWdobGlnaHRlZCxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhY3VycmVudFRleHQudHJpbSgpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQubGVuZ3RoIDxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG1pbkNoYXJzQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNTApIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgaXNHZW5lcmF0aW5nIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSksXHJcbiAgICAgICAgICAgICAgICBzaG93VG9uZURyb3Bkb3duOiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgICAgICAgICAgISEoKF9jID0gYWN0aW9uQ29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSxcclxuICAgICAgICAgICAgICAgIHRvbmVzOiBhY3Rpb25Db25maWcudG9uZXMsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZDogdG9uZUlkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGVuYWJsZWRBSUFjdGlvbnMsXHJcbiAgICAgICAgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMsXHJcbiAgICAgICAgYWN0aXZlQWN0aW9uUHJvbXB0cyxcclxuICAgICAgICB0b25lQnlBY3Rpb24sXHJcbiAgICAgICAgaXNHZW5lcmF0aW5nLFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbixcclxuICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgIF0pO1xyXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBhZGRUZXh0T3JXcmFwLFxyXG4gICAgICAgICAgICBhZGRUZXh0LFxyXG4gICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24sXHJcbiAgICAgICAgfTtcclxuICAgIH0sIFthZGRUZXh0T3JXcmFwLCBhZGRUZXh0LCBjdXJyZW50VGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoaW5wdXRWYWx1ZSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChpbnB1dFZhbHVlIHx8ICcnKTtcclxuICAgIH0sIFtpbnB1dFZhbHVlLCBzZXRFZGl0b3JUZXh0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICghbGltaXQgfHwgIW9uRXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBuZXh0RXJyb3IgPSBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdCA/IExJTUlUX1JFQUNIRUQgOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiAnJztcclxuICAgICAgICBpZiAobGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID09PSBuZXh0RXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBsYXN0RW1pdHRlZEVkaXRvckVycm9yUmVmLmN1cnJlbnQgPSBuZXh0RXJyb3I7XHJcbiAgICAgICAgb25FcnJvcihuZXh0RXJyb3IpO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCBlcnJvciwgbGltaXQsIG9uRXJyb3JdKTtcclxuICAgIHJldHVybiAoX2pzeHMoT3V0ZXJDb250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4cyhFZGl0b3JGb290ZXJSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvckZvb3RlclRpdGxlLCB7IGNoaWxkcmVuOiBlZGl0b3JIZWFkZXIgPyAoX2pzeChUaXRsZVNtYWxsLCBPYmplY3QuYXNzaWduKHsgXCJkYXRhLXRlc3RcIjogXCJib2R5LXRleHQtZm9yLWVkaXQtdGVtcGxhdGVcIiB9LCB7IGNoaWxkcmVuOiBlZGl0b3JIZWFkZXIgfSkpKSA6IG51bGwgfSksIF9qc3hzKEVkaXRvckZvb3RlclJpZ2h0LCB7IGNoaWxkcmVuOiBbZXJyb3IgJiYgZXJyb3IgIT09IExJTUlUX1JFQUNIRUQgPyAoX2pzeHMoX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBbX2pzeChJbmZvSWNvbiwgeyB3aWR0aDogMTYsIGhlaWdodDogMTYsIGNvbG9yOiBDT0xPUlMuY29udGVudC5uZWdhdGl2ZSB9KSwgX2pzeChCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IGNvbG9yOiBDT0xPUlMuY29udGVudC5uZWdhdGl2ZSB9LCB7IGNoaWxkcmVuOiBlcnJvciB9KSldIH0pKSA6IG51bGwsIGxpbWl0ID8gKF9qc3hzKEJvZHlDYXB0aW9uLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IGVycm9yID09PSBMSU1JVF9SRUFDSEVEIHx8IGN1cnJlbnRUZXh0Lmxlbmd0aCA+IGxpbWl0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IENPTE9SUy5jb250ZW50Lm5lZ2F0aXZlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IFtjdXJyZW50VGV4dC5sZW5ndGgsIFwiL1wiLCBsaW1pdF0gfSkpKSA6IG51bGxdIH0pXSB9KSwgX2pzeHMoQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgaXNFcnJvcjogISFlcnJvciB9LCB7IGNoaWxkcmVuOiBbc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID8gKF9qc3hzKFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgcmVmOiBzdWdnZXN0aW9uU2Nyb2xsUmVmIH0sIHsgY2hpbGRyZW46IFtfanN4KFN1Z2dlc3Rpb25CYXNlbGluZVRleHQsIHsgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHsgX19odG1sOiBzdWdnZXN0aW9uQmFzZUh0bWwgfSB9KSwgaXNHZW5lcmF0aW5nID8gKF9qc3goU3VnZ2VzdGlvbkNhbmRpZGF0ZVRleHQsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtYnVzeVwiOiBcInRydWVcIiB9LCB7IGNoaWxkcmVuOiBfanN4cyhTdWdnZXN0aW9uQ2FuZGlkYXRlU2tlbGV0b24sIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiODQlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjY4JVwiIH0pXSB9KSB9KSkpIDogKF9qc3goU3VnZ2VzdGlvbkNhbmRpZGF0ZVRleHQsIHsgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19odG1sOiBhY3RpdmVDYW5kaWRhdGVIdG1sLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSkpLCBfanN4cyhTdWdnZXN0aW9uQ29udHJvbHNSb3csIHsgY2hpbGRyZW46IFtfanN4cyhTdWdnZXN0aW9uQ291bnRlciwgeyBjaGlsZHJlbjogW3N1Z2dlc3Rpb25JbmRleCArIDEsIFwiL1wiLCBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGhdIH0pLCBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUHJldmlvdXMgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBkaXNhYmxlZDogaXNQcmV2U3VnZ2VzdGlvbkRpc2FibGVkLCBvbkNsaWNrOiAoKSA9PiBzZXRTdWdnZXN0aW9uSW5kZXgoKGlkeCkgPT4gTWF0aC5tYXgoMCwgaWR4IC0gMSkpIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hldnJvbkxlZnRJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSksIF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiTGlrZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUZlZWRiYWNrKCdsaWtlJykgfSwgeyBjaGlsZHJlbjogX2pzeChUaHVtYnNVcEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzbGlrZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkRpc2xpa2Ugc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiBoYW5kbGVGZWVkYmFjaygnZGlzbGlrZScpIH0sIHsgY2hpbGRyZW46IF9qc3goVGh1bWJzRG93bkljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIGNhblJlZ2VuZXJhdGUgPyAoX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogaXNHZW5lcmF0aW5nID8gJ1JlZ2VuZXJhdGluZ+KApicgOiAnUmVnZW5lcmF0ZScsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25SZWdlbmVyYXRlQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIFwiYXJpYS1idXN5XCI6IGlzR2VuZXJhdGluZywgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzR2VuZXJhdGluZywgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3VnZ2VzdGlvbkFjdGlvblR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IGlzR2VuZXJhdGluZyA/IChfanN4KFJlZ2VuZXJhdGVJY29uU2hpbW1lciwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUgfSkpIDogKF9qc3goUmV3aW5kSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkpIH0pKSB9KSkpIDogbnVsbCwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNjYXJkXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiQWNjZXB0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogaGFuZGxlQWNjZXB0U3VnZ2VzdGlvbiB9LCB7IGNoaWxkcmVuOiBfanN4KENoZWNrSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKV0gfSldIH0pKSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFzdGVkVGV4dCA9IGUuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFzdGVkVGV4dC5sZW5ndGggPiBMQVJHRV9JTlBVVF9USFJFU0hPTEQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWwgPSB0ZXh0U3BhY2VSZWYuY3VycmVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IChfYSA9IGVsID09PSBudWxsIHx8IGVsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlbC5zZWxlY3Rpb25TdGFydCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSAoX2IgPSBlbCA9PT0gbnVsbCB8fCBlbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogZWwuc2VsZWN0aW9uRW5kKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcmVmZXIgbGl2ZSBET00gdmFsdWUg4oCUIGBjdXJyZW50VGV4dGAgY2FuIGxhZyB0aGUgdGV4dGFyZWEgZm9yIGJpZyBwYXN0ZXMuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFzZSA9IChfYyA9IGVsID09PSBudWxsIHx8IGVsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlbC52YWx1ZSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dFRleHQgPSBiYXNlLnNsaWNlKDAsIHN0YXJ0KSArIHBhc3RlZFRleHQgKyBiYXNlLnNsaWNlKGVuZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dChuZXh0VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChuZXh0VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FyZXQgPSBzdGFydCArIHBhc3RlZFRleHQubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YS5zZXRTZWxlY3Rpb25SYW5nZShjYXJldCwgY2FyZXQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChfYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlIGludmFsaWQgcmFuZ2UgaW4gZWRnZSBicm93c2Vyc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiAoX2pzeChXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIHsgYWN0aW9uczogYWN0aW9ucywgcmVmOiB0ZXh0U3BhY2VSZWYsIG9uQWN0aW9uU2VsZWN0OiBvbkFjdGlvblNlbGVjdCwgUmlnaHRDb21wb25lbnQ6IFJpZ2h0Q29tcG9uZW50LCByaWdodEFjdGlvbnNEaXNhYmxlZDogc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uIHx8IGlzR2VuZXJhdGluZywgb25FbW9qaUNsaWNrOiBvbkVtb2ppQWRkaXRpb24sIGFpQWN0aW9uczogYWlIZWFkZXJBY3Rpb25zLCBkaXNhYmxlQWxsQWN0aW9uczogc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uIHx8IGlzR2VuZXJhdGluZywgaW5zdHJ1Y3Rpb25BY3RpdmU6IGlzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIG9uQUlJbnN0cnVjdGlvbnNDbGljazogKCkgPT4gc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSh0cnVlKSwgb25BSVRvbmVDaGFuZ2U6IChhY3Rpb25UeXBlLCB0b25lSWQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRvbmVCeUFjdGlvbigocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW2FjdGlvblR5cGVdOiB0b25lSWQgfSkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQUlUb25lU2VsZWN0ID09PSBudWxsIHx8IG9uQUlUb25lU2VsZWN0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVG9uZVNlbGVjdChhY3Rpb25UeXBlLCB0b25lSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdG9uZUlkLCBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIG9uQUlBY3Rpb25DbGljazogKGFjdGlvblR5cGUsIGFjdGlvblZhcmlhbnQgPSBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNhbWUgYWN0aW9uIHNob3VsZCBub3QgcmV0cmlnZ2VyIGZyb20gY2hpcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnZW5lcmF0ZSBpcyBvbmx5IHZpYSBleHBsaWNpdCByZWdlbmVyYXRlIGNvbnRyb2wuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmV3IGFjdGlvbiBzdGFydHMgYSBmcmVzaCBzdWdnZXN0aW9uIHNlc3Npb24uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFjdGlvblZhcmlhbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFjdGlvblZhcmlhbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IH0pKV0gfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuZXhwb3J0IHsgQUlfVEFHX0NIQU5HRV9SQVRJT19USFJFU0hPTEQsIGNvbXB1dGVBaVRhZ09uQWNjZXB0LCBsZXZlbnNodGVpbkRpc3RhbmNlLCB9IGZyb20gJy4vYWkvYWlUYWcnO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1XaGF0c0FwcFRleHRFZGl0b3IuanMubWFwIl19 */",toString:h}),K=a.default("button","production"===process.env.NODE_ENV?{target:"ea7i3sh3"}:{target:"ea7i3sh3",label:"InstructionCancel"})("border:0;background:transparent;color:",R.COLORS.content.secondary,";font-size:14px;font-weight:500;padding:0;cursor:pointer;"+("production"===process.env.NODE_ENV?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBOEp3QyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIEZyYWdtZW50IGFzIF9GcmFnbWVudCwganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZXdpbmRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3Jld2luZC5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzRG93bkljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvdGh1bWJzX2Rvd24uc3ZnJztcclxuaW1wb3J0IFRodW1ic1VwSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfdXAuc3ZnJztcclxuaW1wb3J0IHsgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9CYXNlV2hhdHNhcHBDb250ZW50TGFuZy5oZWxwZXJcIjtcclxuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUsIH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgeyBDT0xPUlMgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzL1RoZW1lXCI7XHJcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICcuLi90b29sdGlwcy9Ub29sdGlwJztcclxuaW1wb3J0IHsgQm9keUNhcHRpb24sIFRpdGxlU21hbGwgfSBmcm9tICcuLi9UeXBvZ3JhcGh5U3R5bGUnO1xyXG5pbXBvcnQgeyBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlMsIERFRkFVTFRfSU5TVFJVQ1RJT05fU1VHR0VTVElPTlMsIHJlc29sdmVBY3Rpb25Qcm9tcHRzLCB9IGZyb20gJy4vYWkvYWN0aW9uUmVnaXN0cnknO1xyXG5pbXBvcnQgeyBjb21wdXRlQWlUYWdPbkFjY2VwdCB9IGZyb20gJy4vYWkvYWlUYWcnO1xyXG5pbXBvcnQgeyBidWlsZEFjdGlvblByb21wdCwgcmVxdWVzdEFJU3VnZ2VzdGlvbiB9IGZyb20gJy4vYWkvYXBpJztcclxuaW1wb3J0IHsgQ29udGFpbmVyLCBFZGl0b3JGb290ZXJSaWdodCwgRWRpdG9yRm9vdGVyUm93LCBFZGl0b3JGb290ZXJUaXRsZSwgT3V0ZXJDb250YWluZXIsIFRleHRTcGFjZSwgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUFjdGlvblZhcmlhbnQsIEFJRWRpdG9yQWN0aW9uVHlwZXMsIEVkaXRvckFjdGlvblR5cGVzLCBXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIH0gZnJvbSAnLi9XaGF0c0FwcFRleHRFZGl0b3JIZWFkZXInO1xyXG5jb25zdCBMSU1JVF9SRUFDSEVEID0gJ0NoYXJhY3RlciBsaW1pdCByZWFjaGVkJztcclxuY29uc3QgUkVQSFJBU0VfSURMRV9NUyA9IDMwMDA7XHJcbmNvbnN0IE1BWF9SRVBIUkFTRV9ISUdITElHSFRTID0gNTtcclxuY29uc3QgTUFYX1NVR0dFU1RJT05TID0gMztcclxuY29uc3QgTEFSR0VfSU5QVVRfVEhSRVNIT0xEID0gMTIwMDtcclxuY29uc3QgVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgPSAnUmVwaHJhc2UgdGhpcyBXaGF0c0FwcCB1dGlsaXR5IHRlbXBsYXRlIHRvIGltcHJvdmUgY2xhcml0eSBhbmQgcmVhZGFiaWxpdHkgd2hpbGUgcHJlc2VydmluZyB2YXJpYWJsZXMsIGludGVudCwgYW5kIGNvbXBsaWFuY2UuJztcclxuY29uc3Qgc2tlbGV0b25QdWxzZSA9IGtleWZyYW1lcyBgXG5cdDAlIHsgb3BhY2l0eTogMC41NTsgfVxuXHQ1MCUgeyBvcGFjaXR5OiAxOyB9XG5cdDEwMCUgeyBvcGFjaXR5OiAwLjU1OyB9XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxNHB4IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogMTBweDtcblx0bWluLWhlaWdodDogMTUwcHg7XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkxpbmUgPSBzdHlsZWQuZGl2IGBcblx0aGVpZ2h0OiAxNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdHdpZHRoOiAkeyhwcm9wcykgPT4gcHJvcHMud2lkdGh9O1xuXHRiYWNrZ3JvdW5kOiAjZWNlY2VmO1xuXHRhbmltYXRpb246ICR7c2tlbGV0b25QdWxzZX0gMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHRtYXgtaGVpZ2h0OiAyNjBweDtcblx0b3ZlcmZsb3cteTogc2Nyb2xsO1xuXHRzY3JvbGxiYXItd2lkdGg6IHRoaW47XG5cdHNjcm9sbGJhci1jb2xvcjogI2M4YzhjZiB0cmFuc3BhcmVudDtcblx0Ojotd2Via2l0LXNjcm9sbGJhciB7XG5cdFx0d2lkdGg6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcblx0XHRiYWNrZ3JvdW5kOiAjYzhjOGNmO1xuXHRcdGJvcmRlci1yYWRpdXM6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcblx0XHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0fVxuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkJhc2VsaW5lVGV4dCA9IHN0eWxlZC5kaXYgYFxuXHR0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25DYW5kaWRhdGVUZXh0ID0gc3R5bGVkLmRpdiBgXG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkNhbmRpZGF0ZVNrZWxldG9uID0gc3R5bGVkLmRpdiBgXG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHR3aWR0aDogMTAwJTtcblx0bWluLWhlaWdodDogNDBweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db250cm9sc1JvdyA9IHN0eWxlZC5kaXYgYFxuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDZweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db3VudGVyID0gc3R5bGVkLnNwYW4gYFxuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkljb25CdXR0b24gPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0cGFkZGluZzogNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdGRpc3BsYXk6IGlubGluZS1mbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0dHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjEycyBlYXNlO1xuXHQ6bm90KDpkaXNhYmxlZCk6aG92ZXIge1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICR7Q09MT1JTLnN1cmZhY2UuaG92ZXJlZH07XG5cdH1cblx0OmRpc2FibGVkIHtcblx0XHRvcGFjaXR5OiAwLjM1O1xuXHRcdGN1cnNvcjogbm90LWFsbG93ZWQ7XG5cdH1cbmA7XHJcbi8qKiBSZWdlbmVyYXRlIHN0YXlzIGZ1bGwgb3BhY2l0eSB3aGlsZSBkaXNhYmxlZCBzbyB0aGUgbG9hZGluZyBzaGltbWVyIHN0YXlzIHZpc2libGUgKHNhbWUgcHVsc2UgYXMgZWRpdG9yIHNrZWxldG9uKS4gKi9cclxuY29uc3QgU3VnZ2VzdGlvblJlZ2VuZXJhdGVCdXR0b24gPSBzdHlsZWQoU3VnZ2VzdGlvbkljb25CdXR0b24pIGBcblx0OmRpc2FibGVkIHtcblx0XHRvcGFjaXR5OiAxO1xuXHRcdGN1cnNvcjogd2FpdDtcblx0fVxuYDtcclxuY29uc3QgUmVnZW5lcmF0ZUljb25TaGltbWVyID0gc3R5bGVkLmRpdiBgXG5cdHdpZHRoOiAxNHB4O1xuXHRoZWlnaHQ6IDE0cHg7XG5cdGJvcmRlci1yYWRpdXM6IDRweDtcblx0YmFja2dyb3VuZDogI2VjZWNlZjtcblx0ZmxleC1zaHJpbms6IDA7XG5cdGFuaW1hdGlvbjogJHtza2VsZXRvblB1bHNlfSAxLjFzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xuYDtcclxuLyoqIFNhbWUgYm90dG9tIHRvb2xiYXIgc2xvdCBhcyBgV2hhdHNBcHBUZXh0RWRpdG9ySGVhZGVyYCDigJQgcmVwbGFjZXMgdGhlIGZ1bGwgaWNvbi9BSSBwYW5lbCB3aGlsZSBvcGVuLiAqL1xyXG5jb25zdCBJbnN0cnVjdGlvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblx0cGFkZGluZzogOHB4IDEycHg7XG5cdGdhcDogMTBweDtcblx0Ym9yZGVyLXJhZGl1czogMCAwIDRweCA0cHg7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXRSb3cgPSBzdHlsZWQuZGl2IGBcblx0Ym9yZGVyOiAxcHggc29saWQgI2Y1YTRjMDtcblx0Ym9yZGVyLXJhZGl1czogMTBweDtcblx0cGFkZGluZzogOHB4IDEwcHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbklucHV0ID0gc3R5bGVkLmlucHV0IGBcblx0ZmxleDogMTtcblx0bWluLXdpZHRoOiAwO1xuXHRib3JkZXI6IDA7XG5cdG91dGxpbmU6IG5vbmU7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25BY3Rpb25zID0gc3R5bGVkLmRpdiBgXG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQ2FuY2VsID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnNlY29uZGFyeX07XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0Zm9udC13ZWlnaHQ6IDUwMDtcblx0cGFkZGluZzogMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbXByb3ZlID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMXB4IHNvbGlkICM1ZDNhNzI7XG5cdGNvbG9yOiAjNWQzYTcyO1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0Ym9yZGVyLXJhZGl1czogOHB4O1xuXHRwYWRkaW5nOiA4cHggMTRweDtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRsaW5lLWhlaWdodDogMS4xO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0ID0gc3R5bGVkLmRpdiBgXG5cdG1hcmdpbi10b3A6IDEwcHg7XG5cdGJvcmRlci1yYWRpdXM6IDEycHg7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3gtc2hhZG93OiAwIDZweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkJ1dHRvbiA9IHN0eWxlZC5idXR0b24gYFxuXHR3aWR0aDogMTAwJTtcblx0Ym9yZGVyOiAwO1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgJHtDT0xPUlMuc3Ryb2tlLnByaW1hcnl9O1xuXHRiYWNrZ3JvdW5kOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyNlNWYzZTgnIDogJ3RyYW5zcGFyZW50Jyl9O1xuXHRjb2xvcjogJHsocHJvcHMpID0+IChwcm9wcy5zZWxlY3RlZCA/ICcjMWU2YjM0JyA6IENPTE9SUy5jb250ZW50LnByaW1hcnkpfTtcblx0dGV4dC1hbGlnbjogbGVmdDtcblx0cGFkZGluZzogMTJweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjI7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0OmZpcnN0LW9mLXR5cGUge1xuXHRcdGJvcmRlci10b3A6IDA7XG5cdH1cbmA7XHJcbmNvbnN0IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nID0gbmV3IEJhc2VXaGF0c2FwcENvbnRlbnRMYW5nSGVscGVyKCk7XHJcbmNvbnN0IFdpbGRDYXJkTWFwID0ge1xyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLkJPTERdOiAnKicsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuSVRBTElDXTogJ18nLFxyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLlNUUklLRVRIUk9VR0hdOiAnficsXHJcbn07XHJcbmZ1bmN0aW9uIGdldEhpZ2hsaWdodFN0b3JhZ2VLZXkoZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgIHJldHVybiBgd2hhdHNhcHAtZWRpdG9yLXJlcGhyYXNlLWhpZ2hsaWdodC0ke2VkaXRvckluc3RhbmNlS2V5IHx8ICdkZWZhdWx0J31gO1xyXG59XHJcbmV4cG9ydCBjb25zdCBXaGF0c0FwcFRleHRFZGl0b3IgPSBSZWFjdC5mb3J3YXJkUmVmKChfYSwgcmVmKSA9PiB7XHJcbiAgICB2YXIgeyBvbkNoYW5nZSwgb25DbGlja1ZhcmlhYmxlLCB0ZXh0OiBpbnB1dFZhbHVlLCBSaWdodENvbXBvbmVudCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yLCByb3dzLCBhY3Rpb25zLCBlZGl0b3JJbnN0YW5jZUtleSwgdGVtcGxhdGVUeXBlID0gJ21hcmtldGluZycsIHRlbXBsYXRlSWQsIHJlcXVlc3RFeGVjdXRvciwgYmFzZVVybCwgZW5kcG9pbnRQYXRoLCB1c2VDYXNlLCBzdG9yZUlkLCBhcGlBZGFwdGVyLCBjb252ZXJzYXRpb25JZCA9ICd3aGF0c2FwcC10ZW1wbGF0ZS1lZGl0b3InLCBzeXN0ZW1JZCA9ICd3aGF0c2FwcC13cml0ZXInLCBpbnRlbnQgPSAnZGVmYXVsdCcsIGVuYWJsZWRBSUFjdGlvbnMgPSBbXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlNIT1JURU4sXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FWFBBTkQsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FTU9KSUZZLFxyXG4gICAgXSwgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMgPSBmYWxzZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCBhaUFjdGlvbk1pbkNoYXJzLCBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgb25BSUV2ZW50LCBvbkFJVGFnQ29tcHV0ZWQsIHByZWZpbGxXYXNBaUdlbmVyYXRlZCA9IGZhbHNlLCBlZGl0b3JIZWFkZXIsIG9uQUlUb25lU2VsZWN0LCBvbkFJQWN0aW9uUmVxdWVzdCwgb25CdWlsZEFJUHJvbXB0IH0gPSBfYSwgdGV4dEFyZWFQcm9wcyA9IF9fcmVzdChfYSwgW1wib25DaGFuZ2VcIiwgXCJvbkNsaWNrVmFyaWFibGVcIiwgXCJ0ZXh0XCIsIFwiUmlnaHRDb21wb25lbnRcIiwgXCJlcnJvclwiLCBcImxpbWl0XCIsIFwib25FcnJvclwiLCBcInJvd3NcIiwgXCJhY3Rpb25zXCIsIFwiZWRpdG9ySW5zdGFuY2VLZXlcIiwgXCJ0ZW1wbGF0ZVR5cGVcIiwgXCJ0ZW1wbGF0ZUlkXCIsIFwicmVxdWVzdEV4ZWN1dG9yXCIsIFwiYmFzZVVybFwiLCBcImVuZHBvaW50UGF0aFwiLCBcInVzZUNhc2VcIiwgXCJzdG9yZUlkXCIsIFwiYXBpQWRhcHRlclwiLCBcImNvbnZlcnNhdGlvbklkXCIsIFwic3lzdGVtSWRcIiwgXCJpbnRlbnRcIiwgXCJlbmFibGVkQUlBY3Rpb25zXCIsIFwiZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnNcIiwgXCJwcm9tcHRPdmVycmlkZXNcIiwgXCJyZXBocmFzZVRvbmVzXCIsIFwiYWlBY3Rpb25NaW5DaGFyc1wiLCBcImluc3RydWN0aW9uU3VnZ2VzdGlvbnNcIiwgXCJvbkFJRXZlbnRcIiwgXCJvbkFJVGFnQ29tcHV0ZWRcIiwgXCJwcmVmaWxsV2FzQWlHZW5lcmF0ZWRcIiwgXCJlZGl0b3JIZWFkZXJcIiwgXCJvbkFJVG9uZVNlbGVjdFwiLCBcIm9uQUlBY3Rpb25SZXF1ZXN0XCIsIFwib25CdWlsZEFJUHJvbXB0XCJdKTtcclxuICAgIGNvbnN0IHRleHRTcGFjZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IFtjdXJyZW50VGV4dCwgc2V0Q3VycmVudFRleHRdID0gdXNlU3RhdGUoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICBjb25zdCBbaXNSZXBocmFzZUhpZ2hsaWdodGVkLCBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW3JlcGhyYXNlSGlnaGxpZ2h0Q291bnQsIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbaXNHZW5lcmF0aW5nLCBzZXRJc0dlbmVyYXRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2lzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGVdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2luc3RydWN0aW9uVGV4dCwgc2V0SW5zdHJ1Y3Rpb25UZXh0XSA9IHVzZVN0YXRlKCcnKTtcclxuICAgIGNvbnN0IFt0b25lQnlBY3Rpb24sIHNldFRvbmVCeUFjdGlvbl0gPSB1c2VTdGF0ZSh7fSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkJhc2VUZXh0LCBzZXRTdWdnZXN0aW9uQmFzZVRleHRdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkNhbmRpZGF0ZXMsIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzXSA9IHVzZVN0YXRlKFtdKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uSW5kZXgsIHNldFN1Z2dlc3Rpb25JbmRleF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGVdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBzdWdnZXN0aW9uU2Nyb2xsUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgcmVwaHJhc2VJZGxlUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgaGlnaGxpZ2h0UmVzZXRSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICAvKipcclxuICAgICAqIFByaW9yIGVsaWdpYmlsaXR5IGZvciByZXBocmFzZSBudWRnZSAobnVsbCA9IG5vdCBpbml0aWFsaXplZCkuXHJcbiAgICAgKiBNYXRjaGVzIHRoZSBjaGlwOiBub24tZW1wdHkgdHJpbSBhbmQgbGVuZ3RoIOKJpSBtaW4g4oCUIHNhbWUgYXMgYGFpSGVhZGVyQWN0aW9uc2AgZGlzYWJsZWQgcnVsZXMuXHJcbiAgICAgKi9cclxuICAgIGNvbnN0IHByZXZSZXBocmFzZUVsaWdpYmxlUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgZGVmZXJyZWRIdG1sUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgbGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIC8qKiBGaXJzdCBhY2NlcHQgYWZ0ZXIgZnVsbC1BSSBwcmVmaWxsIChgcHJlZmlsbFdhc0FpR2VuZXJhdGVkYCk7IGNsZWFyZWQgYWZ0ZXIgb25lIGFjY2VwdC4gKi9cclxuICAgIGNvbnN0IGluaXRpYWxBaVByZWZpbGxQaGFzZVJlZiA9IHVzZVJlZighIXByZWZpbGxXYXNBaUdlbmVyYXRlZCk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGluaXRpYWxBaVByZWZpbGxQaGFzZVJlZi5jdXJyZW50ID0gISFwcmVmaWxsV2FzQWlHZW5lcmF0ZWQ7XHJcbiAgICB9LCBbcHJlZmlsbFdhc0FpR2VuZXJhdGVkLCBlZGl0b3JJbnN0YW5jZUtleV0pO1xyXG4gICAgY29uc3QgYWN0aXZlQWN0aW9uUHJvbXB0cyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiByZXNvbHZlQWN0aW9uUHJvbXB0cyh0ZW1wbGF0ZVR5cGUsIHByb21wdE92ZXJyaWRlcywgcmVwaHJhc2VUb25lcyk7XHJcbiAgICB9LCBbcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCB0ZW1wbGF0ZVR5cGVdKTtcclxuICAgIGNvbnN0IGZpbHRlcmVkSW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGlmICghcXVlcnkpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucy5maWx0ZXIoKHN1Z2dlc3Rpb24pID0+IHN1Z2dlc3Rpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeSkpO1xyXG4gICAgfSwgW2luc3RydWN0aW9uU3VnZ2VzdGlvbnMsIGluc3RydWN0aW9uVGV4dF0pO1xyXG4gICAgY29uc3QgbWluQ2hhcnNCeUFjdGlvbiA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUyksIChhaUFjdGlvbk1pbkNoYXJzIHx8IHt9KSk7XHJcbiAgICB9LCBbYWlBY3Rpb25NaW5DaGFyc10pO1xyXG4gICAgY29uc3QgcmVwaHJhc2VNaW5DaGFycyA9IG1pbkNoYXJzQnlBY3Rpb25bQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV0gfHxcclxuICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV07XHJcbiAgICBjb25zdCBlbWl0QUlFdmVudCA9IHVzZUNhbGxiYWNrKChuYW1lLCBwYXlsb2FkKSA9PiB7XHJcbiAgICAgICAgb25BSUV2ZW50ID09PSBudWxsIHx8IG9uQUlFdmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSUV2ZW50KG5hbWUsIHBheWxvYWQpO1xyXG4gICAgfSwgW29uQUlFdmVudF0pO1xyXG4gICAgY29uc3Qgc2V0RWRpdG9yVGV4dCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIHNldEN1cnJlbnRUZXh0KChwcmV2KSA9PiAocHJldiA9PT0gbmV4dFRleHQgPyBwcmV2IDogbmV4dFRleHQpKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGVtaXRDaGFuZ2VXaXRoR3VhcmQgPSB1c2VDYWxsYmFjaygobmV4dFRleHQpID0+IHtcclxuICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGRlZmVycmVkSHRtbFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5leHRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIG5leHRUZXh0KTtcclxuICAgICAgICAgICAgZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChuZXh0VGV4dCkpO1xyXG4gICAgICAgICAgICB9LCAxNik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICB9LCBbb25DaGFuZ2VdKTtcclxuICAgIGNvbnN0IGNsZWFyU3VnZ2VzdGlvblNlc3Npb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0KG51bGwpO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtdKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUobnVsbCk7XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgPj0gTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXh0Q291bnQgPSByZXBocmFzZUhpZ2hsaWdodENvdW50ICsgMTtcclxuICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KG5leHRDb3VudCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSksIFN0cmluZyhuZXh0Q291bnQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKHRydWUpO1xyXG4gICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgIH0sIDEyMDApO1xyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5LCByZXBocmFzZUhpZ2hsaWdodENvdW50XSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHRSZWYgPSB1c2VSZWYodHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0KTtcclxuICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50ID0gdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0O1xyXG4gICAgZnVuY3Rpb24gaGFuZGxlT25DaGFuZ2UoZSkge1xyXG4gICAgICAgIGNvbnN0IHRleHQgPSBlLnRhcmdldC52YWx1ZTtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBzZXRDYXJldFBvc2l0aW9uKGNhcmV0UG9zKSB7XHJcbiAgICAgICAgY29uc3QgZWxlbSA9IHRleHRTcGFjZVJlZiA9PT0gbnVsbCB8fCB0ZXh0U3BhY2VSZWYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRleHRTcGFjZVJlZi5jdXJyZW50O1xyXG4gICAgICAgIGlmIChlbGVtICE9IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKGVsZW0uc2VsZWN0aW9uU3RhcnQpIHtcclxuICAgICAgICAgICAgICAgIGVsZW0uZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIGVsZW0uc2VsZWN0aW9uRW5kID0gY2FyZXRQb3M7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgZWxlbS5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIG9uQWN0aW9uU2VsZWN0KGFjdGlvblR5cGUpIHtcclxuICAgICAgICBjb25zdCB3aWxkQ2FyZCA9IFdpbGRDYXJkTWFwW2FjdGlvblR5cGVdO1xyXG4gICAgICAgIGlmICh3aWxkQ2FyZCAmJiB0ZXh0U3BhY2VSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHRleHQgfSA9IGluc2VydFRleHRBdEluZGV4KHdpbGRDYXJkLCBzdGFydCk7XHJcbiAgICAgICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uKHN0YXJ0ICsgMSk7XHJcbiAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBhZGRUZXh0T3JXcmFwKHdpbGRDYXJkKTtcclxuICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBvbkVtb2ppQWRkaXRpb24oZW1vamkpIHtcclxuICAgICAgICBjb25zdCB7IHRleHQgfSA9IGFkZFRleHQoZW1vamkpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhZGRUZXh0T3JXcmFwKHRleHRUb0FkZCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgbGV0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICBpZiAodGV4dFNwYWNlUmVmLmN1cnJlbnQgJiYgdGV4dFRvQWRkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgY29uc3Qgd2lsZENhcmQgPSB0ZXh0VG9BZGQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICAvKiogbm90aGluZyBpcyBzZWxlY3RlZCAqL1xyXG4gICAgICAgICAgICAgICAgLyoqIHNvIGFwcGVuZCB0aGUgd2lsZGNhcmQgYXQgdGhlIGVuZCAqL1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFkZFRleHQod2lsZENhcmQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGV4dCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLndyYXBwV2lsZGNhcmQoc3RhcnQsIGVuZCwgd2lsZENhcmQsIHRleHQpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaHRtbCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwodGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdGV4dCwgaHRtbCB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IHRleHQ6IHRleHQsIGh0bWw6IHRleHQgfTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZFRleHQodGV4dFRvQWRkKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgaWYgKHRleHRTcGFjZVJlZi5jdXJyZW50ICYmIHRleHRUb0FkZCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zZXJ0VGV4dEF0SW5kZXgodGV4dFRvQWRkLCBzdGFydCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dDogdGV4dCwgaHRtbDogdGV4dCB9O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gaW5zZXJ0VGV4dEF0SW5kZXgodGV4dFRvQWRkLCBpbmRleCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgbGV0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICB0ZXh0ID0gdGV4dC5zbGljZSgwLCBpbmRleCkgKyB0ZXh0VG9BZGQgKyB0ZXh0LnNsaWNlKGluZGV4KTtcclxuICAgICAgICBjb25zdCBodG1sID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTCh0ZXh0KTtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgIHJldHVybiB7IHRleHQsIGh0bWwgfTtcclxuICAgIH1cclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8ICFlZGl0b3JJbnN0YW5jZUtleSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNhY2hlZCA9IE51bWJlcihzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGdldEhpZ2hsaWdodFN0b3JhZ2VLZXkoZWRpdG9ySW5zdGFuY2VLZXkpKSB8fFxyXG4gICAgICAgICAgICAnMCcpO1xyXG4gICAgICAgIGlmICghTnVtYmVyLmlzTmFOKGNhY2hlZCkpIHtcclxuICAgICAgICAgICAgc2V0UmVwaHJhc2VIaWdobGlnaHRDb3VudChjYWNoZWQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtlZGl0b3JJbnN0YW5jZUtleV0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBjb25zdCBlbGlnaWJsZSA9ICEhY3VycmVudFRleHQudHJpbSgpICYmIGN1cnJlbnRUZXh0Lmxlbmd0aCA+PSByZXBocmFzZU1pbkNoYXJzO1xyXG4gICAgICAgIGlmIChwcmV2UmVwaHJhc2VFbGlnaWJsZVJlZi5jdXJyZW50ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHByZXZSZXBocmFzZUVsaWdpYmxlUmVmLmN1cnJlbnQgPSBlbGlnaWJsZTtcclxuICAgICAgICAgICAgaWYgKGVsaWdpYmxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50KCk7XHJcbiAgICAgICAgICAgICAgICB9LCBSRVBIUkFTRV9JRExFX01TKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZWxpZ2libGUpIHtcclxuICAgICAgICAgICAgcHJldlJlcGhyYXNlRWxpZ2libGVSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjcm9zc2VkVGhyZXNob2xkID0gIXByZXZSZXBocmFzZUVsaWdpYmxlUmVmLmN1cnJlbnQgJiYgZWxpZ2libGU7XHJcbiAgICAgICAgcHJldlJlcGhyYXNlRWxpZ2libGVSZWYuY3VycmVudCA9IHRydWU7XHJcbiAgICAgICAgaWYgKGNyb3NzZWRUaHJlc2hvbGQpIHtcclxuICAgICAgICAgICAgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0UmVmLmN1cnJlbnQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50KCk7XHJcbiAgICAgICAgfSwgUkVQSFJBU0VfSURMRV9NUyk7XHJcbiAgICB9LCBbY3VycmVudFRleHQsIHJlcGhyYXNlTWluQ2hhcnNdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGFjdGl2ZUNhbmRpZGF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzW3N1Z2dlc3Rpb25JbmRleF0gfHwgJyc7XHJcbiAgICBjb25zdCBzdWdnZXN0aW9uQmFzZUh0bWwgPSB1c2VNZW1vKCgpID0+IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwoc3VnZ2VzdGlvbkJhc2VUZXh0IHx8ICcnKSwgW3N1Z2dlc3Rpb25CYXNlVGV4dF0pO1xyXG4gICAgY29uc3QgYWN0aXZlQ2FuZGlkYXRlSHRtbCA9IHVzZU1lbW8oKCkgPT4gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChhY3RpdmVDYW5kaWRhdGUpLCBbYWN0aXZlQ2FuZGlkYXRlXSk7XHJcbiAgICBjb25zdCBjYW5SZWdlbmVyYXRlID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDwgTUFYX1NVR0dFU1RJT05TO1xyXG4gICAgY29uc3Qgc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID0gISFzdWdnZXN0aW9uQmFzZVRleHQgJiYgc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoID4gMDtcclxuICAgIGNvbnN0IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8IHN1Z2dlc3Rpb25JbmRleCA8PSAwO1xyXG4gICAgY29uc3QgaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDw9IDEgfHxcclxuICAgICAgICBzdWdnZXN0aW9uSW5kZXggPj0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBub2RlID0gc3VnZ2VzdGlvblNjcm9sbFJlZi5jdXJyZW50O1xyXG4gICAgICAgIGlmICghbm9kZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIG5vZGUuc2Nyb2xsVG9wID0gbm9kZS5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9LCBbYWN0aXZlQ2FuZGlkYXRlLCBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24sIGlzR2VuZXJhdGluZ10pO1xyXG4gICAgY29uc3QgZXhlY3V0ZUFJQWN0aW9uID0gdXNlQ2FsbGJhY2soKGFjdGlvblR5cGUsIHJlZ2VuZXJhdGVFeGlzdGluZyA9IGZhbHNlLCBpbnN0cnVjdGlvbk92ZXJyaWRlLCB0b25lT3ZlcnJpZGVJZCwgYWN0aW9uVmFyaWFudCA9IEFJQWN0aW9uVmFyaWFudC5ERUZBVUxUKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICB2YXIgX2IsIF9jLCBfZDtcclxuICAgICAgICBpZiAoIW9uQUlBY3Rpb25SZXF1ZXN0ICYmXHJcbiAgICAgICAgICAgICFhcGlBZGFwdGVyICYmXHJcbiAgICAgICAgICAgICghcmVxdWVzdEV4ZWN1dG9yIHx8ICFiYXNlVXJsKSkge1xyXG4gICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoJ0FJIGNvbmZpZ3VyYXRpb24gbWlzc2luZycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY3VycmVudFRleHQudHJpbSgpKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbWluQ2hhcnNGb3JBY3Rpb24gPSBtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICA1MDtcclxuICAgICAgICBpZiAoY3VycmVudFRleHQubGVuZ3RoIDwgbWluQ2hhcnNGb3JBY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpZiAoaXNHZW5lcmF0aW5nKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKHJlZ2VuZXJhdGVFeGlzdGluZyAmJiAhY2FuUmVnZW5lcmF0ZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGJhc2VDb25maWcgPSBhY3RpdmVBY3Rpb25Qcm9tcHRzW2FjdGlvblR5cGVdO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UgJiZcclxuICAgICAgICAgICAgdGVtcGxhdGVUeXBlID09PSAndXRpbGl0eScgJiZcclxuICAgICAgICAgICAgYWN0aW9uVmFyaWFudCA9PT0gQUlBY3Rpb25WYXJpYW50LlJFUEhSQVNFXHJcbiAgICAgICAgICAgID8gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBiYXNlQ29uZmlnKSwgeyBsYWJlbDogJ1JlcGhyYXNlJywgYmFzZVByb21wdDogVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgfSkgOiBiYXNlQ29uZmlnO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVG9uZUlkID0gdG9uZU92ZXJyaWRlSWQgfHxcclxuICAgICAgICAgICAgdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIGNvbmZpZy5kZWZhdWx0VG9uZUlkIHx8XHJcbiAgICAgICAgICAgICgoX2MgPSAoX2IgPSBjb25maWcudG9uZXMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYlswXSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmlkKTtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFRvbmUgPSAoX2QgPSBjb25maWcudG9uZXMpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5maW5kKCh0b25lKSA9PiB0b25lLmlkID09PSBzZWxlY3RlZFRvbmVJZCk7XHJcbiAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgPSBpbnN0cnVjdGlvbk92ZXJyaWRlICE9PSB1bmRlZmluZWRcclxuICAgICAgICAgICAgPyBpbnN0cnVjdGlvbk92ZXJyaWRlXHJcbiAgICAgICAgICAgIDogaW5zdHJ1Y3Rpb25UZXh0O1xyXG4gICAgICAgIGNvbnN0IHByb21wdCA9IChvbkJ1aWxkQUlQcm9tcHQgPT09IG51bGwgfHwgb25CdWlsZEFJUHJvbXB0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkJ1aWxkQUlQcm9tcHQoe1xyXG4gICAgICAgICAgICBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICBhY3Rpb25WYXJpYW50LFxyXG4gICAgICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICBjb25maWcsXHJcbiAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgIHRvbmVMYWJlbDogc2VsZWN0ZWRUb25lID09PSBudWxsIHx8IHNlbGVjdGVkVG9uZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZWN0ZWRUb25lLmxhYmVsLFxyXG4gICAgICAgICAgICBpbnN0cnVjdGlvblRleHQ6IGluc3RydWN0aW9uRm9yUHJvbXB0IHx8IHVuZGVmaW5lZCxcclxuICAgICAgICB9KSkgfHxcclxuICAgICAgICAgICAgYnVpbGRBY3Rpb25Qcm9tcHQoe1xyXG4gICAgICAgICAgICAgICAgY29uZmlnLFxyXG4gICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZCxcclxuICAgICAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIHNldElzR2VuZXJhdGluZyh0cnVlKTtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfYWN0aW9uX3RyaWdnZXJlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG9uQUlBY3Rpb25SZXF1ZXN0XHJcbiAgICAgICAgICAgICAgICA/IHlpZWxkIG9uQUlBY3Rpb25SZXF1ZXN0KHtcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblZhcmlhbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIDogeWllbGQgcmVxdWVzdEFJU3VnZ2VzdGlvbih7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgYmFzZVVybCxcclxuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgICAgIGludGVudCxcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICAgICAgICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZydcclxuICAgICAgICAgICAgICAgID8gcmVzdWx0LnRyaW0oKVxyXG4gICAgICAgICAgICAgICAgOiAoKHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3VsdC5ib2R5KSB8fCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKCFyZWdlbmVyYXRlRXhpc3RpbmcpIHtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25CYXNlVGV4dChjdXJyZW50VGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShhY3Rpb25UeXBlKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtjYW5kaWRhdGVdKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcygocHJldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IFsuLi5wcmV2LCBjYW5kaWRhdGVdLnNsaWNlKDAsIE1BWF9TVUdHRVNUSU9OUyk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgobmV4dC5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdGYWlsZWQgdG8gZ2VuZXJhdGUgQUkgc3VnZ2VzdGlvbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgc2V0SXNHZW5lcmF0aW5nKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9KSwgW1xyXG4gICAgICAgIHJlcXVlc3RFeGVjdXRvcixcclxuICAgICAgICBiYXNlVXJsLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBjYW5SZWdlbmVyYXRlLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGluc3RydWN0aW9uVGV4dCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIGVuZHBvaW50UGF0aCxcclxuICAgICAgICBhcGlBZGFwdGVyLFxyXG4gICAgICAgIGludGVudCxcclxuICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgIG9uRXJyb3IsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgICAgICBvbkFJQWN0aW9uUmVxdWVzdCxcclxuICAgICAgICBvbkJ1aWxkQUlQcm9tcHQsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFhY3RpdmVDYW5kaWRhdGUgfHwgIXN1Z2dlc3Rpb25CYXNlVGV4dCB8fCAhc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2FjY2VwdGVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGluSW5pdGlhbEFpUGhhc2UgPSBpbml0aWFsQWlQcmVmaWxsUGhhc2VSZWYuY3VycmVudDtcclxuICAgICAgICBjb25zdCB0YWdQYXlsb2FkID0gY29tcHV0ZUFpVGFnT25BY2NlcHQoe1xyXG4gICAgICAgICAgICBiYXNlbGluZVRleHQ6IHN1Z2dlc3Rpb25CYXNlVGV4dCxcclxuICAgICAgICAgICAgYWNjZXB0ZWRUZXh0OiBhY3RpdmVDYW5kaWRhdGUsXHJcbiAgICAgICAgICAgIGluaXRpYWxBaVByZWZpbGxQaGFzZTogaW5Jbml0aWFsQWlQaGFzZSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoaW5Jbml0aWFsQWlQaGFzZSkge1xyXG4gICAgICAgICAgICBpbml0aWFsQWlQcmVmaWxsUGhhc2VSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvbkFJVGFnQ29tcHV0ZWQgPT09IG51bGwgfHwgb25BSVRhZ0NvbXB1dGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVGFnQ29tcHV0ZWQodGFnUGF5bG9hZCk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGFjdGl2ZUNhbmRpZGF0ZSxcclxuICAgICAgICBzdWdnZXN0aW9uQmFzZVRleHQsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCxcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkLFxyXG4gICAgICAgIGVtaXRBSUV2ZW50LFxyXG4gICAgICAgIHRlbXBsYXRlSWQsXHJcbiAgICAgICAgb25BSVRhZ0NvbXB1dGVkLFxyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2Rpc2NhcmRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uKCk7XHJcbiAgICB9LCBbY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiwgZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKChyYXRpbmcpID0+IHtcclxuICAgICAgICBpZiAoIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2ZlZWRiYWNrX3N1Ym1pdHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICAgICAgcmF0aW5nLFxyXG4gICAgICAgICAgICBjYW5kaWRhdGVfaW5kZXg6IHN1Z2dlc3Rpb25JbmRleCArIDEsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LCBbZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzdWdnZXN0aW9uSW5kZXgsIHRlbXBsYXRlSWRdKTtcclxuICAgIGNvbnN0IGFpSGVhZGVyQWN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucylcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBlbmFibGVkQUlBY3Rpb25zLm1hcCgoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICAgICAgY29uc3QgYWN0aW9uQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICAgICAgY29uc3QgdG9uZUlkID0gdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICBhY3Rpb25Db25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAgICAgKChfYiA9IChfYSA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzBdKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWQpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBhY3Rpb25Db25maWcubGFiZWwsXHJcbiAgICAgICAgICAgICAgICBpc1ByaW1hcnk6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBpc0dlbmVyYXRpbmcgJiYgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHRlZDogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVwaHJhc2VIaWdobGlnaHRlZCxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhY3VycmVudFRleHQudHJpbSgpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQubGVuZ3RoIDxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG1pbkNoYXJzQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNTApIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgaXNHZW5lcmF0aW5nIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSksXHJcbiAgICAgICAgICAgICAgICBzaG93VG9uZURyb3Bkb3duOiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgICAgICAgICAgISEoKF9jID0gYWN0aW9uQ29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSxcclxuICAgICAgICAgICAgICAgIHRvbmVzOiBhY3Rpb25Db25maWcudG9uZXMsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZDogdG9uZUlkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGVuYWJsZWRBSUFjdGlvbnMsXHJcbiAgICAgICAgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMsXHJcbiAgICAgICAgYWN0aXZlQWN0aW9uUHJvbXB0cyxcclxuICAgICAgICB0b25lQnlBY3Rpb24sXHJcbiAgICAgICAgaXNHZW5lcmF0aW5nLFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbixcclxuICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgIF0pO1xyXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBhZGRUZXh0T3JXcmFwLFxyXG4gICAgICAgICAgICBhZGRUZXh0LFxyXG4gICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24sXHJcbiAgICAgICAgfTtcclxuICAgIH0sIFthZGRUZXh0T3JXcmFwLCBhZGRUZXh0LCBjdXJyZW50VGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoaW5wdXRWYWx1ZSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChpbnB1dFZhbHVlIHx8ICcnKTtcclxuICAgIH0sIFtpbnB1dFZhbHVlLCBzZXRFZGl0b3JUZXh0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICghbGltaXQgfHwgIW9uRXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBuZXh0RXJyb3IgPSBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdCA/IExJTUlUX1JFQUNIRUQgOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiAnJztcclxuICAgICAgICBpZiAobGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID09PSBuZXh0RXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBsYXN0RW1pdHRlZEVkaXRvckVycm9yUmVmLmN1cnJlbnQgPSBuZXh0RXJyb3I7XHJcbiAgICAgICAgb25FcnJvcihuZXh0RXJyb3IpO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCBlcnJvciwgbGltaXQsIG9uRXJyb3JdKTtcclxuICAgIHJldHVybiAoX2pzeHMoT3V0ZXJDb250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4cyhFZGl0b3JGb290ZXJSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvckZvb3RlclRpdGxlLCB7IGNoaWxkcmVuOiBlZGl0b3JIZWFkZXIgPyAoX2pzeChUaXRsZVNtYWxsLCBPYmplY3QuYXNzaWduKHsgXCJkYXRhLXRlc3RcIjogXCJib2R5LXRleHQtZm9yLWVkaXQtdGVtcGxhdGVcIiB9LCB7IGNoaWxkcmVuOiBlZGl0b3JIZWFkZXIgfSkpKSA6IG51bGwgfSksIF9qc3hzKEVkaXRvckZvb3RlclJpZ2h0LCB7IGNoaWxkcmVuOiBbZXJyb3IgJiYgZXJyb3IgIT09IExJTUlUX1JFQUNIRUQgPyAoX2pzeHMoX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBbX2pzeChJbmZvSWNvbiwgeyB3aWR0aDogMTYsIGhlaWdodDogMTYsIGNvbG9yOiBDT0xPUlMuY29udGVudC5uZWdhdGl2ZSB9KSwgX2pzeChCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IGNvbG9yOiBDT0xPUlMuY29udGVudC5uZWdhdGl2ZSB9LCB7IGNoaWxkcmVuOiBlcnJvciB9KSldIH0pKSA6IG51bGwsIGxpbWl0ID8gKF9qc3hzKEJvZHlDYXB0aW9uLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IGVycm9yID09PSBMSU1JVF9SRUFDSEVEIHx8IGN1cnJlbnRUZXh0Lmxlbmd0aCA+IGxpbWl0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IENPTE9SUy5jb250ZW50Lm5lZ2F0aXZlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IFtjdXJyZW50VGV4dC5sZW5ndGgsIFwiL1wiLCBsaW1pdF0gfSkpKSA6IG51bGxdIH0pXSB9KSwgX2pzeHMoQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgaXNFcnJvcjogISFlcnJvciB9LCB7IGNoaWxkcmVuOiBbc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID8gKF9qc3hzKFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgcmVmOiBzdWdnZXN0aW9uU2Nyb2xsUmVmIH0sIHsgY2hpbGRyZW46IFtfanN4KFN1Z2dlc3Rpb25CYXNlbGluZVRleHQsIHsgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHsgX19odG1sOiBzdWdnZXN0aW9uQmFzZUh0bWwgfSB9KSwgaXNHZW5lcmF0aW5nID8gKF9qc3goU3VnZ2VzdGlvbkNhbmRpZGF0ZVRleHQsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtYnVzeVwiOiBcInRydWVcIiB9LCB7IGNoaWxkcmVuOiBfanN4cyhTdWdnZXN0aW9uQ2FuZGlkYXRlU2tlbGV0b24sIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiODQlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjY4JVwiIH0pXSB9KSB9KSkpIDogKF9qc3goU3VnZ2VzdGlvbkNhbmRpZGF0ZVRleHQsIHsgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19odG1sOiBhY3RpdmVDYW5kaWRhdGVIdG1sLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSkpLCBfanN4cyhTdWdnZXN0aW9uQ29udHJvbHNSb3csIHsgY2hpbGRyZW46IFtfanN4cyhTdWdnZXN0aW9uQ291bnRlciwgeyBjaGlsZHJlbjogW3N1Z2dlc3Rpb25JbmRleCArIDEsIFwiL1wiLCBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGhdIH0pLCBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUHJldmlvdXMgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBkaXNhYmxlZDogaXNQcmV2U3VnZ2VzdGlvbkRpc2FibGVkLCBvbkNsaWNrOiAoKSA9PiBzZXRTdWdnZXN0aW9uSW5kZXgoKGlkeCkgPT4gTWF0aC5tYXgoMCwgaWR4IC0gMSkpIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hldnJvbkxlZnRJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSksIF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiTGlrZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUZlZWRiYWNrKCdsaWtlJykgfSwgeyBjaGlsZHJlbjogX2pzeChUaHVtYnNVcEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzbGlrZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkRpc2xpa2Ugc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiBoYW5kbGVGZWVkYmFjaygnZGlzbGlrZScpIH0sIHsgY2hpbGRyZW46IF9qc3goVGh1bWJzRG93bkljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIGNhblJlZ2VuZXJhdGUgPyAoX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogaXNHZW5lcmF0aW5nID8gJ1JlZ2VuZXJhdGluZ+KApicgOiAnUmVnZW5lcmF0ZScsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25SZWdlbmVyYXRlQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIFwiYXJpYS1idXN5XCI6IGlzR2VuZXJhdGluZywgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzR2VuZXJhdGluZywgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3VnZ2VzdGlvbkFjdGlvblR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IGlzR2VuZXJhdGluZyA/IChfanN4KFJlZ2VuZXJhdGVJY29uU2hpbW1lciwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUgfSkpIDogKF9qc3goUmV3aW5kSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkpIH0pKSB9KSkpIDogbnVsbCwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNjYXJkXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiQWNjZXB0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogaGFuZGxlQWNjZXB0U3VnZ2VzdGlvbiB9LCB7IGNoaWxkcmVuOiBfanN4KENoZWNrSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKV0gfSldIH0pKSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFzdGVkVGV4dCA9IGUuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFzdGVkVGV4dC5sZW5ndGggPiBMQVJHRV9JTlBVVF9USFJFU0hPTEQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWwgPSB0ZXh0U3BhY2VSZWYuY3VycmVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IChfYSA9IGVsID09PSBudWxsIHx8IGVsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlbC5zZWxlY3Rpb25TdGFydCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSAoX2IgPSBlbCA9PT0gbnVsbCB8fCBlbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogZWwuc2VsZWN0aW9uRW5kKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcmVmZXIgbGl2ZSBET00gdmFsdWUg4oCUIGBjdXJyZW50VGV4dGAgY2FuIGxhZyB0aGUgdGV4dGFyZWEgZm9yIGJpZyBwYXN0ZXMuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFzZSA9IChfYyA9IGVsID09PSBudWxsIHx8IGVsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlbC52YWx1ZSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dFRleHQgPSBiYXNlLnNsaWNlKDAsIHN0YXJ0KSArIHBhc3RlZFRleHQgKyBiYXNlLnNsaWNlKGVuZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dChuZXh0VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChuZXh0VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FyZXQgPSBzdGFydCArIHBhc3RlZFRleHQubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YS5zZXRTZWxlY3Rpb25SYW5nZShjYXJldCwgY2FyZXQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChfYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlIGludmFsaWQgcmFuZ2UgaW4gZWRnZSBicm93c2Vyc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiAoX2pzeChXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIHsgYWN0aW9uczogYWN0aW9ucywgcmVmOiB0ZXh0U3BhY2VSZWYsIG9uQWN0aW9uU2VsZWN0OiBvbkFjdGlvblNlbGVjdCwgUmlnaHRDb21wb25lbnQ6IFJpZ2h0Q29tcG9uZW50LCByaWdodEFjdGlvbnNEaXNhYmxlZDogc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uIHx8IGlzR2VuZXJhdGluZywgb25FbW9qaUNsaWNrOiBvbkVtb2ppQWRkaXRpb24sIGFpQWN0aW9uczogYWlIZWFkZXJBY3Rpb25zLCBkaXNhYmxlQWxsQWN0aW9uczogc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uIHx8IGlzR2VuZXJhdGluZywgaW5zdHJ1Y3Rpb25BY3RpdmU6IGlzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIG9uQUlJbnN0cnVjdGlvbnNDbGljazogKCkgPT4gc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSh0cnVlKSwgb25BSVRvbmVDaGFuZ2U6IChhY3Rpb25UeXBlLCB0b25lSWQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRvbmVCeUFjdGlvbigocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW2FjdGlvblR5cGVdOiB0b25lSWQgfSkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQUlUb25lU2VsZWN0ID09PSBudWxsIHx8IG9uQUlUb25lU2VsZWN0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVG9uZVNlbGVjdChhY3Rpb25UeXBlLCB0b25lSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdG9uZUlkLCBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIG9uQUlBY3Rpb25DbGljazogKGFjdGlvblR5cGUsIGFjdGlvblZhcmlhbnQgPSBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNhbWUgYWN0aW9uIHNob3VsZCBub3QgcmV0cmlnZ2VyIGZyb20gY2hpcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnZW5lcmF0ZSBpcyBvbmx5IHZpYSBleHBsaWNpdCByZWdlbmVyYXRlIGNvbnRyb2wuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmV3IGFjdGlvbiBzdGFydHMgYSBmcmVzaCBzdWdnZXN0aW9uIHNlc3Npb24uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFjdGlvblZhcmlhbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFjdGlvblZhcmlhbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IH0pKV0gfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuZXhwb3J0IHsgQUlfVEFHX0NIQU5HRV9SQVRJT19USFJFU0hPTEQsIGNvbXB1dGVBaVRhZ09uQWNjZXB0LCBsZXZlbnNodGVpbkRpc3RhbmNlLCB9IGZyb20gJy4vYWkvYWlUYWcnO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1XaGF0c0FwcFRleHRFZGl0b3IuanMubWFwIl19 */")),O=a.default("button","production"===process.env.NODE_ENV?{target:"ea7i3sh2"}:{target:"ea7i3sh2",label:"InstructionImprove"})("border:1px solid #5d3a72;color:#5d3a72;background:",R.COLORS.surface.standard,";border-radius:8px;padding:8px 14px;font-size:14px;line-height:1.1;font-weight:600;cursor:pointer;"+("production"===process.env.NODE_ENV?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBdUt5QyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIEZyYWdtZW50IGFzIF9GcmFnbWVudCwganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZXdpbmRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3Jld2luZC5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzRG93bkljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvdGh1bWJzX2Rvd24uc3ZnJztcclxuaW1wb3J0IFRodW1ic1VwSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfdXAuc3ZnJztcclxuaW1wb3J0IHsgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9CYXNlV2hhdHNhcHBDb250ZW50TGFuZy5oZWxwZXJcIjtcclxuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUsIH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgeyBDT0xPUlMgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzL1RoZW1lXCI7XHJcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICcuLi90b29sdGlwcy9Ub29sdGlwJztcclxuaW1wb3J0IHsgQm9keUNhcHRpb24sIFRpdGxlU21hbGwgfSBmcm9tICcuLi9UeXBvZ3JhcGh5U3R5bGUnO1xyXG5pbXBvcnQgeyBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlMsIERFRkFVTFRfSU5TVFJVQ1RJT05fU1VHR0VTVElPTlMsIHJlc29sdmVBY3Rpb25Qcm9tcHRzLCB9IGZyb20gJy4vYWkvYWN0aW9uUmVnaXN0cnknO1xyXG5pbXBvcnQgeyBjb21wdXRlQWlUYWdPbkFjY2VwdCB9IGZyb20gJy4vYWkvYWlUYWcnO1xyXG5pbXBvcnQgeyBidWlsZEFjdGlvblByb21wdCwgcmVxdWVzdEFJU3VnZ2VzdGlvbiB9IGZyb20gJy4vYWkvYXBpJztcclxuaW1wb3J0IHsgQ29udGFpbmVyLCBFZGl0b3JGb290ZXJSaWdodCwgRWRpdG9yRm9vdGVyUm93LCBFZGl0b3JGb290ZXJUaXRsZSwgT3V0ZXJDb250YWluZXIsIFRleHRTcGFjZSwgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUFjdGlvblZhcmlhbnQsIEFJRWRpdG9yQWN0aW9uVHlwZXMsIEVkaXRvckFjdGlvblR5cGVzLCBXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIH0gZnJvbSAnLi9XaGF0c0FwcFRleHRFZGl0b3JIZWFkZXInO1xyXG5jb25zdCBMSU1JVF9SRUFDSEVEID0gJ0NoYXJhY3RlciBsaW1pdCByZWFjaGVkJztcclxuY29uc3QgUkVQSFJBU0VfSURMRV9NUyA9IDMwMDA7XHJcbmNvbnN0IE1BWF9SRVBIUkFTRV9ISUdITElHSFRTID0gNTtcclxuY29uc3QgTUFYX1NVR0dFU1RJT05TID0gMztcclxuY29uc3QgTEFSR0VfSU5QVVRfVEhSRVNIT0xEID0gMTIwMDtcclxuY29uc3QgVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgPSAnUmVwaHJhc2UgdGhpcyBXaGF0c0FwcCB1dGlsaXR5IHRlbXBsYXRlIHRvIGltcHJvdmUgY2xhcml0eSBhbmQgcmVhZGFiaWxpdHkgd2hpbGUgcHJlc2VydmluZyB2YXJpYWJsZXMsIGludGVudCwgYW5kIGNvbXBsaWFuY2UuJztcclxuY29uc3Qgc2tlbGV0b25QdWxzZSA9IGtleWZyYW1lcyBgXG5cdDAlIHsgb3BhY2l0eTogMC41NTsgfVxuXHQ1MCUgeyBvcGFjaXR5OiAxOyB9XG5cdDEwMCUgeyBvcGFjaXR5OiAwLjU1OyB9XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxNHB4IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogMTBweDtcblx0bWluLWhlaWdodDogMTUwcHg7XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkxpbmUgPSBzdHlsZWQuZGl2IGBcblx0aGVpZ2h0OiAxNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdHdpZHRoOiAkeyhwcm9wcykgPT4gcHJvcHMud2lkdGh9O1xuXHRiYWNrZ3JvdW5kOiAjZWNlY2VmO1xuXHRhbmltYXRpb246ICR7c2tlbGV0b25QdWxzZX0gMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHRtYXgtaGVpZ2h0OiAyNjBweDtcblx0b3ZlcmZsb3cteTogc2Nyb2xsO1xuXHRzY3JvbGxiYXItd2lkdGg6IHRoaW47XG5cdHNjcm9sbGJhci1jb2xvcjogI2M4YzhjZiB0cmFuc3BhcmVudDtcblx0Ojotd2Via2l0LXNjcm9sbGJhciB7XG5cdFx0d2lkdGg6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcblx0XHRiYWNrZ3JvdW5kOiAjYzhjOGNmO1xuXHRcdGJvcmRlci1yYWRpdXM6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcblx0XHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0fVxuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkJhc2VsaW5lVGV4dCA9IHN0eWxlZC5kaXYgYFxuXHR0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25DYW5kaWRhdGVUZXh0ID0gc3R5bGVkLmRpdiBgXG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkNhbmRpZGF0ZVNrZWxldG9uID0gc3R5bGVkLmRpdiBgXG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHR3aWR0aDogMTAwJTtcblx0bWluLWhlaWdodDogNDBweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db250cm9sc1JvdyA9IHN0eWxlZC5kaXYgYFxuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDZweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db3VudGVyID0gc3R5bGVkLnNwYW4gYFxuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkljb25CdXR0b24gPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0cGFkZGluZzogNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdGRpc3BsYXk6IGlubGluZS1mbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0dHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjEycyBlYXNlO1xuXHQ6bm90KDpkaXNhYmxlZCk6aG92ZXIge1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICR7Q09MT1JTLnN1cmZhY2UuaG92ZXJlZH07XG5cdH1cblx0OmRpc2FibGVkIHtcblx0XHRvcGFjaXR5OiAwLjM1O1xuXHRcdGN1cnNvcjogbm90LWFsbG93ZWQ7XG5cdH1cbmA7XHJcbi8qKiBSZWdlbmVyYXRlIHN0YXlzIGZ1bGwgb3BhY2l0eSB3aGlsZSBkaXNhYmxlZCBzbyB0aGUgbG9hZGluZyBzaGltbWVyIHN0YXlzIHZpc2libGUgKHNhbWUgcHVsc2UgYXMgZWRpdG9yIHNrZWxldG9uKS4gKi9cclxuY29uc3QgU3VnZ2VzdGlvblJlZ2VuZXJhdGVCdXR0b24gPSBzdHlsZWQoU3VnZ2VzdGlvbkljb25CdXR0b24pIGBcblx0OmRpc2FibGVkIHtcblx0XHRvcGFjaXR5OiAxO1xuXHRcdGN1cnNvcjogd2FpdDtcblx0fVxuYDtcclxuY29uc3QgUmVnZW5lcmF0ZUljb25TaGltbWVyID0gc3R5bGVkLmRpdiBgXG5cdHdpZHRoOiAxNHB4O1xuXHRoZWlnaHQ6IDE0cHg7XG5cdGJvcmRlci1yYWRpdXM6IDRweDtcblx0YmFja2dyb3VuZDogI2VjZWNlZjtcblx0ZmxleC1zaHJpbms6IDA7XG5cdGFuaW1hdGlvbjogJHtza2VsZXRvblB1bHNlfSAxLjFzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xuYDtcclxuLyoqIFNhbWUgYm90dG9tIHRvb2xiYXIgc2xvdCBhcyBgV2hhdHNBcHBUZXh0RWRpdG9ySGVhZGVyYCDigJQgcmVwbGFjZXMgdGhlIGZ1bGwgaWNvbi9BSSBwYW5lbCB3aGlsZSBvcGVuLiAqL1xyXG5jb25zdCBJbnN0cnVjdGlvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblx0cGFkZGluZzogOHB4IDEycHg7XG5cdGdhcDogMTBweDtcblx0Ym9yZGVyLXJhZGl1czogMCAwIDRweCA0cHg7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXRSb3cgPSBzdHlsZWQuZGl2IGBcblx0Ym9yZGVyOiAxcHggc29saWQgI2Y1YTRjMDtcblx0Ym9yZGVyLXJhZGl1czogMTBweDtcblx0cGFkZGluZzogOHB4IDEwcHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbklucHV0ID0gc3R5bGVkLmlucHV0IGBcblx0ZmxleDogMTtcblx0bWluLXdpZHRoOiAwO1xuXHRib3JkZXI6IDA7XG5cdG91dGxpbmU6IG5vbmU7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25BY3Rpb25zID0gc3R5bGVkLmRpdiBgXG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQ2FuY2VsID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnNlY29uZGFyeX07XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0Zm9udC13ZWlnaHQ6IDUwMDtcblx0cGFkZGluZzogMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbXByb3ZlID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMXB4IHNvbGlkICM1ZDNhNzI7XG5cdGNvbG9yOiAjNWQzYTcyO1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0Ym9yZGVyLXJhZGl1czogOHB4O1xuXHRwYWRkaW5nOiA4cHggMTRweDtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRsaW5lLWhlaWdodDogMS4xO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0ID0gc3R5bGVkLmRpdiBgXG5cdG1hcmdpbi10b3A6IDEwcHg7XG5cdGJvcmRlci1yYWRpdXM6IDEycHg7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3gtc2hhZG93OiAwIDZweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkJ1dHRvbiA9IHN0eWxlZC5idXR0b24gYFxuXHR3aWR0aDogMTAwJTtcblx0Ym9yZGVyOiAwO1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgJHtDT0xPUlMuc3Ryb2tlLnByaW1hcnl9O1xuXHRiYWNrZ3JvdW5kOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyNlNWYzZTgnIDogJ3RyYW5zcGFyZW50Jyl9O1xuXHRjb2xvcjogJHsocHJvcHMpID0+IChwcm9wcy5zZWxlY3RlZCA/ICcjMWU2YjM0JyA6IENPTE9SUy5jb250ZW50LnByaW1hcnkpfTtcblx0dGV4dC1hbGlnbjogbGVmdDtcblx0cGFkZGluZzogMTJweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjI7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0OmZpcnN0LW9mLXR5cGUge1xuXHRcdGJvcmRlci10b3A6IDA7XG5cdH1cbmA7XHJcbmNvbnN0IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nID0gbmV3IEJhc2VXaGF0c2FwcENvbnRlbnRMYW5nSGVscGVyKCk7XHJcbmNvbnN0IFdpbGRDYXJkTWFwID0ge1xyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLkJPTERdOiAnKicsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuSVRBTElDXTogJ18nLFxyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLlNUUklLRVRIUk9VR0hdOiAnficsXHJcbn07XHJcbmZ1bmN0aW9uIGdldEhpZ2hsaWdodFN0b3JhZ2VLZXkoZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgIHJldHVybiBgd2hhdHNhcHAtZWRpdG9yLXJlcGhyYXNlLWhpZ2hsaWdodC0ke2VkaXRvckluc3RhbmNlS2V5IHx8ICdkZWZhdWx0J31gO1xyXG59XHJcbmV4cG9ydCBjb25zdCBXaGF0c0FwcFRleHRFZGl0b3IgPSBSZWFjdC5mb3J3YXJkUmVmKChfYSwgcmVmKSA9PiB7XHJcbiAgICB2YXIgeyBvbkNoYW5nZSwgb25DbGlja1ZhcmlhYmxlLCB0ZXh0OiBpbnB1dFZhbHVlLCBSaWdodENvbXBvbmVudCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yLCByb3dzLCBhY3Rpb25zLCBlZGl0b3JJbnN0YW5jZUtleSwgdGVtcGxhdGVUeXBlID0gJ21hcmtldGluZycsIHRlbXBsYXRlSWQsIHJlcXVlc3RFeGVjdXRvciwgYmFzZVVybCwgZW5kcG9pbnRQYXRoLCB1c2VDYXNlLCBzdG9yZUlkLCBhcGlBZGFwdGVyLCBjb252ZXJzYXRpb25JZCA9ICd3aGF0c2FwcC10ZW1wbGF0ZS1lZGl0b3InLCBzeXN0ZW1JZCA9ICd3aGF0c2FwcC13cml0ZXInLCBpbnRlbnQgPSAnZGVmYXVsdCcsIGVuYWJsZWRBSUFjdGlvbnMgPSBbXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlNIT1JURU4sXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FWFBBTkQsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FTU9KSUZZLFxyXG4gICAgXSwgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMgPSBmYWxzZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCBhaUFjdGlvbk1pbkNoYXJzLCBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgb25BSUV2ZW50LCBvbkFJVGFnQ29tcHV0ZWQsIHByZWZpbGxXYXNBaUdlbmVyYXRlZCA9IGZhbHNlLCBlZGl0b3JIZWFkZXIsIG9uQUlUb25lU2VsZWN0LCBvbkFJQWN0aW9uUmVxdWVzdCwgb25CdWlsZEFJUHJvbXB0IH0gPSBfYSwgdGV4dEFyZWFQcm9wcyA9IF9fcmVzdChfYSwgW1wib25DaGFuZ2VcIiwgXCJvbkNsaWNrVmFyaWFibGVcIiwgXCJ0ZXh0XCIsIFwiUmlnaHRDb21wb25lbnRcIiwgXCJlcnJvclwiLCBcImxpbWl0XCIsIFwib25FcnJvclwiLCBcInJvd3NcIiwgXCJhY3Rpb25zXCIsIFwiZWRpdG9ySW5zdGFuY2VLZXlcIiwgXCJ0ZW1wbGF0ZVR5cGVcIiwgXCJ0ZW1wbGF0ZUlkXCIsIFwicmVxdWVzdEV4ZWN1dG9yXCIsIFwiYmFzZVVybFwiLCBcImVuZHBvaW50UGF0aFwiLCBcInVzZUNhc2VcIiwgXCJzdG9yZUlkXCIsIFwiYXBpQWRhcHRlclwiLCBcImNvbnZlcnNhdGlvbklkXCIsIFwic3lzdGVtSWRcIiwgXCJpbnRlbnRcIiwgXCJlbmFibGVkQUlBY3Rpb25zXCIsIFwiZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnNcIiwgXCJwcm9tcHRPdmVycmlkZXNcIiwgXCJyZXBocmFzZVRvbmVzXCIsIFwiYWlBY3Rpb25NaW5DaGFyc1wiLCBcImluc3RydWN0aW9uU3VnZ2VzdGlvbnNcIiwgXCJvbkFJRXZlbnRcIiwgXCJvbkFJVGFnQ29tcHV0ZWRcIiwgXCJwcmVmaWxsV2FzQWlHZW5lcmF0ZWRcIiwgXCJlZGl0b3JIZWFkZXJcIiwgXCJvbkFJVG9uZVNlbGVjdFwiLCBcIm9uQUlBY3Rpb25SZXF1ZXN0XCIsIFwib25CdWlsZEFJUHJvbXB0XCJdKTtcclxuICAgIGNvbnN0IHRleHRTcGFjZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IFtjdXJyZW50VGV4dCwgc2V0Q3VycmVudFRleHRdID0gdXNlU3RhdGUoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICBjb25zdCBbaXNSZXBocmFzZUhpZ2hsaWdodGVkLCBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW3JlcGhyYXNlSGlnaGxpZ2h0Q291bnQsIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbaXNHZW5lcmF0aW5nLCBzZXRJc0dlbmVyYXRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2lzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGVdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2luc3RydWN0aW9uVGV4dCwgc2V0SW5zdHJ1Y3Rpb25UZXh0XSA9IHVzZVN0YXRlKCcnKTtcclxuICAgIGNvbnN0IFt0b25lQnlBY3Rpb24sIHNldFRvbmVCeUFjdGlvbl0gPSB1c2VTdGF0ZSh7fSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkJhc2VUZXh0LCBzZXRTdWdnZXN0aW9uQmFzZVRleHRdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkNhbmRpZGF0ZXMsIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzXSA9IHVzZVN0YXRlKFtdKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uSW5kZXgsIHNldFN1Z2dlc3Rpb25JbmRleF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGVdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBzdWdnZXN0aW9uU2Nyb2xsUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgcmVwaHJhc2VJZGxlUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgaGlnaGxpZ2h0UmVzZXRSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICAvKipcclxuICAgICAqIFByaW9yIGVsaWdpYmlsaXR5IGZvciByZXBocmFzZSBudWRnZSAobnVsbCA9IG5vdCBpbml0aWFsaXplZCkuXHJcbiAgICAgKiBNYXRjaGVzIHRoZSBjaGlwOiBub24tZW1wdHkgdHJpbSBhbmQgbGVuZ3RoIOKJpSBtaW4g4oCUIHNhbWUgYXMgYGFpSGVhZGVyQWN0aW9uc2AgZGlzYWJsZWQgcnVsZXMuXHJcbiAgICAgKi9cclxuICAgIGNvbnN0IHByZXZSZXBocmFzZUVsaWdpYmxlUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgZGVmZXJyZWRIdG1sUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgbGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIC8qKiBGaXJzdCBhY2NlcHQgYWZ0ZXIgZnVsbC1BSSBwcmVmaWxsIChgcHJlZmlsbFdhc0FpR2VuZXJhdGVkYCk7IGNsZWFyZWQgYWZ0ZXIgb25lIGFjY2VwdC4gKi9cclxuICAgIGNvbnN0IGluaXRpYWxBaVByZWZpbGxQaGFzZVJlZiA9IHVzZVJlZighIXByZWZpbGxXYXNBaUdlbmVyYXRlZCk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGluaXRpYWxBaVByZWZpbGxQaGFzZVJlZi5jdXJyZW50ID0gISFwcmVmaWxsV2FzQWlHZW5lcmF0ZWQ7XHJcbiAgICB9LCBbcHJlZmlsbFdhc0FpR2VuZXJhdGVkLCBlZGl0b3JJbnN0YW5jZUtleV0pO1xyXG4gICAgY29uc3QgYWN0aXZlQWN0aW9uUHJvbXB0cyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiByZXNvbHZlQWN0aW9uUHJvbXB0cyh0ZW1wbGF0ZVR5cGUsIHByb21wdE92ZXJyaWRlcywgcmVwaHJhc2VUb25lcyk7XHJcbiAgICB9LCBbcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCB0ZW1wbGF0ZVR5cGVdKTtcclxuICAgIGNvbnN0IGZpbHRlcmVkSW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGlmICghcXVlcnkpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucy5maWx0ZXIoKHN1Z2dlc3Rpb24pID0+IHN1Z2dlc3Rpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeSkpO1xyXG4gICAgfSwgW2luc3RydWN0aW9uU3VnZ2VzdGlvbnMsIGluc3RydWN0aW9uVGV4dF0pO1xyXG4gICAgY29uc3QgbWluQ2hhcnNCeUFjdGlvbiA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUyksIChhaUFjdGlvbk1pbkNoYXJzIHx8IHt9KSk7XHJcbiAgICB9LCBbYWlBY3Rpb25NaW5DaGFyc10pO1xyXG4gICAgY29uc3QgcmVwaHJhc2VNaW5DaGFycyA9IG1pbkNoYXJzQnlBY3Rpb25bQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV0gfHxcclxuICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV07XHJcbiAgICBjb25zdCBlbWl0QUlFdmVudCA9IHVzZUNhbGxiYWNrKChuYW1lLCBwYXlsb2FkKSA9PiB7XHJcbiAgICAgICAgb25BSUV2ZW50ID09PSBudWxsIHx8IG9uQUlFdmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSUV2ZW50KG5hbWUsIHBheWxvYWQpO1xyXG4gICAgfSwgW29uQUlFdmVudF0pO1xyXG4gICAgY29uc3Qgc2V0RWRpdG9yVGV4dCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIHNldEN1cnJlbnRUZXh0KChwcmV2KSA9PiAocHJldiA9PT0gbmV4dFRleHQgPyBwcmV2IDogbmV4dFRleHQpKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGVtaXRDaGFuZ2VXaXRoR3VhcmQgPSB1c2VDYWxsYmFjaygobmV4dFRleHQpID0+IHtcclxuICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGRlZmVycmVkSHRtbFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5leHRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIG5leHRUZXh0KTtcclxuICAgICAgICAgICAgZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChuZXh0VGV4dCkpO1xyXG4gICAgICAgICAgICB9LCAxNik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICB9LCBbb25DaGFuZ2VdKTtcclxuICAgIGNvbnN0IGNsZWFyU3VnZ2VzdGlvblNlc3Npb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0KG51bGwpO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtdKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUobnVsbCk7XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgPj0gTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXh0Q291bnQgPSByZXBocmFzZUhpZ2hsaWdodENvdW50ICsgMTtcclxuICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KG5leHRDb3VudCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSksIFN0cmluZyhuZXh0Q291bnQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKHRydWUpO1xyXG4gICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgIH0sIDEyMDApO1xyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5LCByZXBocmFzZUhpZ2hsaWdodENvdW50XSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHRSZWYgPSB1c2VSZWYodHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0KTtcclxuICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50ID0gdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0O1xyXG4gICAgZnVuY3Rpb24gaGFuZGxlT25DaGFuZ2UoZSkge1xyXG4gICAgICAgIGNvbnN0IHRleHQgPSBlLnRhcmdldC52YWx1ZTtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBzZXRDYXJldFBvc2l0aW9uKGNhcmV0UG9zKSB7XHJcbiAgICAgICAgY29uc3QgZWxlbSA9IHRleHRTcGFjZVJlZiA9PT0gbnVsbCB8fCB0ZXh0U3BhY2VSZWYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRleHRTcGFjZVJlZi5jdXJyZW50O1xyXG4gICAgICAgIGlmIChlbGVtICE9IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKGVsZW0uc2VsZWN0aW9uU3RhcnQpIHtcclxuICAgICAgICAgICAgICAgIGVsZW0uZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIGVsZW0uc2VsZWN0aW9uRW5kID0gY2FyZXRQb3M7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgZWxlbS5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIG9uQWN0aW9uU2VsZWN0KGFjdGlvblR5cGUpIHtcclxuICAgICAgICBjb25zdCB3aWxkQ2FyZCA9IFdpbGRDYXJkTWFwW2FjdGlvblR5cGVdO1xyXG4gICAgICAgIGlmICh3aWxkQ2FyZCAmJiB0ZXh0U3BhY2VSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHRleHQgfSA9IGluc2VydFRleHRBdEluZGV4KHdpbGRDYXJkLCBzdGFydCk7XHJcbiAgICAgICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uKHN0YXJ0ICsgMSk7XHJcbiAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBhZGRUZXh0T3JXcmFwKHdpbGRDYXJkKTtcclxuICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBvbkVtb2ppQWRkaXRpb24oZW1vamkpIHtcclxuICAgICAgICBjb25zdCB7IHRleHQgfSA9IGFkZFRleHQoZW1vamkpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhZGRUZXh0T3JXcmFwKHRleHRUb0FkZCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgbGV0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICBpZiAodGV4dFNwYWNlUmVmLmN1cnJlbnQgJiYgdGV4dFRvQWRkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgY29uc3Qgd2lsZENhcmQgPSB0ZXh0VG9BZGQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICAvKiogbm90aGluZyBpcyBzZWxlY3RlZCAqL1xyXG4gICAgICAgICAgICAgICAgLyoqIHNvIGFwcGVuZCB0aGUgd2lsZGNhcmQgYXQgdGhlIGVuZCAqL1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFkZFRleHQod2lsZENhcmQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGV4dCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLndyYXBwV2lsZGNhcmQoc3RhcnQsIGVuZCwgd2lsZENhcmQsIHRleHQpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaHRtbCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwodGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdGV4dCwgaHRtbCB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IHRleHQ6IHRleHQsIGh0bWw6IHRleHQgfTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZFRleHQodGV4dFRvQWRkKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgaWYgKHRleHRTcGFjZVJlZi5jdXJyZW50ICYmIHRleHRUb0FkZCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zZXJ0VGV4dEF0SW5kZXgodGV4dFRvQWRkLCBzdGFydCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dDogdGV4dCwgaHRtbDogdGV4dCB9O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gaW5zZXJ0VGV4dEF0SW5kZXgodGV4dFRvQWRkLCBpbmRleCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgbGV0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICB0ZXh0ID0gdGV4dC5zbGljZSgwLCBpbmRleCkgKyB0ZXh0VG9BZGQgKyB0ZXh0LnNsaWNlKGluZGV4KTtcclxuICAgICAgICBjb25zdCBodG1sID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTCh0ZXh0KTtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgIHJldHVybiB7IHRleHQsIGh0bWwgfTtcclxuICAgIH1cclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8ICFlZGl0b3JJbnN0YW5jZUtleSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNhY2hlZCA9IE51bWJlcihzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGdldEhpZ2hsaWdodFN0b3JhZ2VLZXkoZWRpdG9ySW5zdGFuY2VLZXkpKSB8fFxyXG4gICAgICAgICAgICAnMCcpO1xyXG4gICAgICAgIGlmICghTnVtYmVyLmlzTmFOKGNhY2hlZCkpIHtcclxuICAgICAgICAgICAgc2V0UmVwaHJhc2VIaWdobGlnaHRDb3VudChjYWNoZWQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtlZGl0b3JJbnN0YW5jZUtleV0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBjb25zdCBlbGlnaWJsZSA9ICEhY3VycmVudFRleHQudHJpbSgpICYmIGN1cnJlbnRUZXh0Lmxlbmd0aCA+PSByZXBocmFzZU1pbkNoYXJzO1xyXG4gICAgICAgIGlmIChwcmV2UmVwaHJhc2VFbGlnaWJsZVJlZi5jdXJyZW50ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHByZXZSZXBocmFzZUVsaWdpYmxlUmVmLmN1cnJlbnQgPSBlbGlnaWJsZTtcclxuICAgICAgICAgICAgaWYgKGVsaWdpYmxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50KCk7XHJcbiAgICAgICAgICAgICAgICB9LCBSRVBIUkFTRV9JRExFX01TKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZWxpZ2libGUpIHtcclxuICAgICAgICAgICAgcHJldlJlcGhyYXNlRWxpZ2libGVSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjcm9zc2VkVGhyZXNob2xkID0gIXByZXZSZXBocmFzZUVsaWdpYmxlUmVmLmN1cnJlbnQgJiYgZWxpZ2libGU7XHJcbiAgICAgICAgcHJldlJlcGhyYXNlRWxpZ2libGVSZWYuY3VycmVudCA9IHRydWU7XHJcbiAgICAgICAgaWYgKGNyb3NzZWRUaHJlc2hvbGQpIHtcclxuICAgICAgICAgICAgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0UmVmLmN1cnJlbnQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50KCk7XHJcbiAgICAgICAgfSwgUkVQSFJBU0VfSURMRV9NUyk7XHJcbiAgICB9LCBbY3VycmVudFRleHQsIHJlcGhyYXNlTWluQ2hhcnNdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGFjdGl2ZUNhbmRpZGF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzW3N1Z2dlc3Rpb25JbmRleF0gfHwgJyc7XHJcbiAgICBjb25zdCBzdWdnZXN0aW9uQmFzZUh0bWwgPSB1c2VNZW1vKCgpID0+IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwoc3VnZ2VzdGlvbkJhc2VUZXh0IHx8ICcnKSwgW3N1Z2dlc3Rpb25CYXNlVGV4dF0pO1xyXG4gICAgY29uc3QgYWN0aXZlQ2FuZGlkYXRlSHRtbCA9IHVzZU1lbW8oKCkgPT4gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChhY3RpdmVDYW5kaWRhdGUpLCBbYWN0aXZlQ2FuZGlkYXRlXSk7XHJcbiAgICBjb25zdCBjYW5SZWdlbmVyYXRlID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDwgTUFYX1NVR0dFU1RJT05TO1xyXG4gICAgY29uc3Qgc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID0gISFzdWdnZXN0aW9uQmFzZVRleHQgJiYgc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoID4gMDtcclxuICAgIGNvbnN0IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8IHN1Z2dlc3Rpb25JbmRleCA8PSAwO1xyXG4gICAgY29uc3QgaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDw9IDEgfHxcclxuICAgICAgICBzdWdnZXN0aW9uSW5kZXggPj0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBub2RlID0gc3VnZ2VzdGlvblNjcm9sbFJlZi5jdXJyZW50O1xyXG4gICAgICAgIGlmICghbm9kZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIG5vZGUuc2Nyb2xsVG9wID0gbm9kZS5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9LCBbYWN0aXZlQ2FuZGlkYXRlLCBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24sIGlzR2VuZXJhdGluZ10pO1xyXG4gICAgY29uc3QgZXhlY3V0ZUFJQWN0aW9uID0gdXNlQ2FsbGJhY2soKGFjdGlvblR5cGUsIHJlZ2VuZXJhdGVFeGlzdGluZyA9IGZhbHNlLCBpbnN0cnVjdGlvbk92ZXJyaWRlLCB0b25lT3ZlcnJpZGVJZCwgYWN0aW9uVmFyaWFudCA9IEFJQWN0aW9uVmFyaWFudC5ERUZBVUxUKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICB2YXIgX2IsIF9jLCBfZDtcclxuICAgICAgICBpZiAoIW9uQUlBY3Rpb25SZXF1ZXN0ICYmXHJcbiAgICAgICAgICAgICFhcGlBZGFwdGVyICYmXHJcbiAgICAgICAgICAgICghcmVxdWVzdEV4ZWN1dG9yIHx8ICFiYXNlVXJsKSkge1xyXG4gICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoJ0FJIGNvbmZpZ3VyYXRpb24gbWlzc2luZycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY3VycmVudFRleHQudHJpbSgpKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbWluQ2hhcnNGb3JBY3Rpb24gPSBtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICA1MDtcclxuICAgICAgICBpZiAoY3VycmVudFRleHQubGVuZ3RoIDwgbWluQ2hhcnNGb3JBY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpZiAoaXNHZW5lcmF0aW5nKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKHJlZ2VuZXJhdGVFeGlzdGluZyAmJiAhY2FuUmVnZW5lcmF0ZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGJhc2VDb25maWcgPSBhY3RpdmVBY3Rpb25Qcm9tcHRzW2FjdGlvblR5cGVdO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UgJiZcclxuICAgICAgICAgICAgdGVtcGxhdGVUeXBlID09PSAndXRpbGl0eScgJiZcclxuICAgICAgICAgICAgYWN0aW9uVmFyaWFudCA9PT0gQUlBY3Rpb25WYXJpYW50LlJFUEhSQVNFXHJcbiAgICAgICAgICAgID8gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBiYXNlQ29uZmlnKSwgeyBsYWJlbDogJ1JlcGhyYXNlJywgYmFzZVByb21wdDogVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgfSkgOiBiYXNlQ29uZmlnO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVG9uZUlkID0gdG9uZU92ZXJyaWRlSWQgfHxcclxuICAgICAgICAgICAgdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIGNvbmZpZy5kZWZhdWx0VG9uZUlkIHx8XHJcbiAgICAgICAgICAgICgoX2MgPSAoX2IgPSBjb25maWcudG9uZXMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYlswXSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmlkKTtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFRvbmUgPSAoX2QgPSBjb25maWcudG9uZXMpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5maW5kKCh0b25lKSA9PiB0b25lLmlkID09PSBzZWxlY3RlZFRvbmVJZCk7XHJcbiAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgPSBpbnN0cnVjdGlvbk92ZXJyaWRlICE9PSB1bmRlZmluZWRcclxuICAgICAgICAgICAgPyBpbnN0cnVjdGlvbk92ZXJyaWRlXHJcbiAgICAgICAgICAgIDogaW5zdHJ1Y3Rpb25UZXh0O1xyXG4gICAgICAgIGNvbnN0IHByb21wdCA9IChvbkJ1aWxkQUlQcm9tcHQgPT09IG51bGwgfHwgb25CdWlsZEFJUHJvbXB0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkJ1aWxkQUlQcm9tcHQoe1xyXG4gICAgICAgICAgICBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICBhY3Rpb25WYXJpYW50LFxyXG4gICAgICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICBjb25maWcsXHJcbiAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgIHRvbmVMYWJlbDogc2VsZWN0ZWRUb25lID09PSBudWxsIHx8IHNlbGVjdGVkVG9uZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZWN0ZWRUb25lLmxhYmVsLFxyXG4gICAgICAgICAgICBpbnN0cnVjdGlvblRleHQ6IGluc3RydWN0aW9uRm9yUHJvbXB0IHx8IHVuZGVmaW5lZCxcclxuICAgICAgICB9KSkgfHxcclxuICAgICAgICAgICAgYnVpbGRBY3Rpb25Qcm9tcHQoe1xyXG4gICAgICAgICAgICAgICAgY29uZmlnLFxyXG4gICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZCxcclxuICAgICAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIHNldElzR2VuZXJhdGluZyh0cnVlKTtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfYWN0aW9uX3RyaWdnZXJlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG9uQUlBY3Rpb25SZXF1ZXN0XHJcbiAgICAgICAgICAgICAgICA/IHlpZWxkIG9uQUlBY3Rpb25SZXF1ZXN0KHtcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblZhcmlhbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIDogeWllbGQgcmVxdWVzdEFJU3VnZ2VzdGlvbih7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgYmFzZVVybCxcclxuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgICAgIGludGVudCxcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICAgICAgICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZydcclxuICAgICAgICAgICAgICAgID8gcmVzdWx0LnRyaW0oKVxyXG4gICAgICAgICAgICAgICAgOiAoKHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3VsdC5ib2R5KSB8fCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKCFyZWdlbmVyYXRlRXhpc3RpbmcpIHtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25CYXNlVGV4dChjdXJyZW50VGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShhY3Rpb25UeXBlKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtjYW5kaWRhdGVdKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcygocHJldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IFsuLi5wcmV2LCBjYW5kaWRhdGVdLnNsaWNlKDAsIE1BWF9TVUdHRVNUSU9OUyk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgobmV4dC5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdGYWlsZWQgdG8gZ2VuZXJhdGUgQUkgc3VnZ2VzdGlvbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgc2V0SXNHZW5lcmF0aW5nKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9KSwgW1xyXG4gICAgICAgIHJlcXVlc3RFeGVjdXRvcixcclxuICAgICAgICBiYXNlVXJsLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBjYW5SZWdlbmVyYXRlLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGluc3RydWN0aW9uVGV4dCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIGVuZHBvaW50UGF0aCxcclxuICAgICAgICBhcGlBZGFwdGVyLFxyXG4gICAgICAgIGludGVudCxcclxuICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgIG9uRXJyb3IsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgICAgICBvbkFJQWN0aW9uUmVxdWVzdCxcclxuICAgICAgICBvbkJ1aWxkQUlQcm9tcHQsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFhY3RpdmVDYW5kaWRhdGUgfHwgIXN1Z2dlc3Rpb25CYXNlVGV4dCB8fCAhc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2FjY2VwdGVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGluSW5pdGlhbEFpUGhhc2UgPSBpbml0aWFsQWlQcmVmaWxsUGhhc2VSZWYuY3VycmVudDtcclxuICAgICAgICBjb25zdCB0YWdQYXlsb2FkID0gY29tcHV0ZUFpVGFnT25BY2NlcHQoe1xyXG4gICAgICAgICAgICBiYXNlbGluZVRleHQ6IHN1Z2dlc3Rpb25CYXNlVGV4dCxcclxuICAgICAgICAgICAgYWNjZXB0ZWRUZXh0OiBhY3RpdmVDYW5kaWRhdGUsXHJcbiAgICAgICAgICAgIGluaXRpYWxBaVByZWZpbGxQaGFzZTogaW5Jbml0aWFsQWlQaGFzZSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoaW5Jbml0aWFsQWlQaGFzZSkge1xyXG4gICAgICAgICAgICBpbml0aWFsQWlQcmVmaWxsUGhhc2VSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvbkFJVGFnQ29tcHV0ZWQgPT09IG51bGwgfHwgb25BSVRhZ0NvbXB1dGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVGFnQ29tcHV0ZWQodGFnUGF5bG9hZCk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGFjdGl2ZUNhbmRpZGF0ZSxcclxuICAgICAgICBzdWdnZXN0aW9uQmFzZVRleHQsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCxcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkLFxyXG4gICAgICAgIGVtaXRBSUV2ZW50LFxyXG4gICAgICAgIHRlbXBsYXRlSWQsXHJcbiAgICAgICAgb25BSVRhZ0NvbXB1dGVkLFxyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2Rpc2NhcmRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uKCk7XHJcbiAgICB9LCBbY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiwgZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKChyYXRpbmcpID0+IHtcclxuICAgICAgICBpZiAoIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2ZlZWRiYWNrX3N1Ym1pdHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICAgICAgcmF0aW5nLFxyXG4gICAgICAgICAgICBjYW5kaWRhdGVfaW5kZXg6IHN1Z2dlc3Rpb25JbmRleCArIDEsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LCBbZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzdWdnZXN0aW9uSW5kZXgsIHRlbXBsYXRlSWRdKTtcclxuICAgIGNvbnN0IGFpSGVhZGVyQWN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucylcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBlbmFibGVkQUlBY3Rpb25zLm1hcCgoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICAgICAgY29uc3QgYWN0aW9uQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICAgICAgY29uc3QgdG9uZUlkID0gdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICBhY3Rpb25Db25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAgICAgKChfYiA9IChfYSA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzBdKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWQpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBhY3Rpb25Db25maWcubGFiZWwsXHJcbiAgICAgICAgICAgICAgICBpc1ByaW1hcnk6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBpc0dlbmVyYXRpbmcgJiYgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHRlZDogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVwaHJhc2VIaWdobGlnaHRlZCxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhY3VycmVudFRleHQudHJpbSgpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQubGVuZ3RoIDxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG1pbkNoYXJzQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNTApIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgaXNHZW5lcmF0aW5nIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSksXHJcbiAgICAgICAgICAgICAgICBzaG93VG9uZURyb3Bkb3duOiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgICAgICAgICAgISEoKF9jID0gYWN0aW9uQ29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSxcclxuICAgICAgICAgICAgICAgIHRvbmVzOiBhY3Rpb25Db25maWcudG9uZXMsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZDogdG9uZUlkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGVuYWJsZWRBSUFjdGlvbnMsXHJcbiAgICAgICAgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMsXHJcbiAgICAgICAgYWN0aXZlQWN0aW9uUHJvbXB0cyxcclxuICAgICAgICB0b25lQnlBY3Rpb24sXHJcbiAgICAgICAgaXNHZW5lcmF0aW5nLFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbixcclxuICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgIF0pO1xyXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBhZGRUZXh0T3JXcmFwLFxyXG4gICAgICAgICAgICBhZGRUZXh0LFxyXG4gICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24sXHJcbiAgICAgICAgfTtcclxuICAgIH0sIFthZGRUZXh0T3JXcmFwLCBhZGRUZXh0LCBjdXJyZW50VGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoaW5wdXRWYWx1ZSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChpbnB1dFZhbHVlIHx8ICcnKTtcclxuICAgIH0sIFtpbnB1dFZhbHVlLCBzZXRFZGl0b3JUZXh0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICghbGltaXQgfHwgIW9uRXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBuZXh0RXJyb3IgPSBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdCA/IExJTUlUX1JFQUNIRUQgOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiAnJztcclxuICAgICAgICBpZiAobGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID09PSBuZXh0RXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBsYXN0RW1pdHRlZEVkaXRvckVycm9yUmVmLmN1cnJlbnQgPSBuZXh0RXJyb3I7XHJcbiAgICAgICAgb25FcnJvcihuZXh0RXJyb3IpO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCBlcnJvciwgbGltaXQsIG9uRXJyb3JdKTtcclxuICAgIHJldHVybiAoX2pzeHMoT3V0ZXJDb250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4cyhFZGl0b3JGb290ZXJSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvckZvb3RlclRpdGxlLCB7IGNoaWxkcmVuOiBlZGl0b3JIZWFkZXIgPyAoX2pzeChUaXRsZVNtYWxsLCBPYmplY3QuYXNzaWduKHsgXCJkYXRhLXRlc3RcIjogXCJib2R5LXRleHQtZm9yLWVkaXQtdGVtcGxhdGVcIiB9LCB7IGNoaWxkcmVuOiBlZGl0b3JIZWFkZXIgfSkpKSA6IG51bGwgfSksIF9qc3hzKEVkaXRvckZvb3RlclJpZ2h0LCB7IGNoaWxkcmVuOiBbZXJyb3IgJiYgZXJyb3IgIT09IExJTUlUX1JFQUNIRUQgPyAoX2pzeHMoX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBbX2pzeChJbmZvSWNvbiwgeyB3aWR0aDogMTYsIGhlaWdodDogMTYsIGNvbG9yOiBDT0xPUlMuY29udGVudC5uZWdhdGl2ZSB9KSwgX2pzeChCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IGNvbG9yOiBDT0xPUlMuY29udGVudC5uZWdhdGl2ZSB9LCB7IGNoaWxkcmVuOiBlcnJvciB9KSldIH0pKSA6IG51bGwsIGxpbWl0ID8gKF9qc3hzKEJvZHlDYXB0aW9uLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IGVycm9yID09PSBMSU1JVF9SRUFDSEVEIHx8IGN1cnJlbnRUZXh0Lmxlbmd0aCA+IGxpbWl0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IENPTE9SUy5jb250ZW50Lm5lZ2F0aXZlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IFtjdXJyZW50VGV4dC5sZW5ndGgsIFwiL1wiLCBsaW1pdF0gfSkpKSA6IG51bGxdIH0pXSB9KSwgX2pzeHMoQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgaXNFcnJvcjogISFlcnJvciB9LCB7IGNoaWxkcmVuOiBbc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID8gKF9qc3hzKFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgcmVmOiBzdWdnZXN0aW9uU2Nyb2xsUmVmIH0sIHsgY2hpbGRyZW46IFtfanN4KFN1Z2dlc3Rpb25CYXNlbGluZVRleHQsIHsgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHsgX19odG1sOiBzdWdnZXN0aW9uQmFzZUh0bWwgfSB9KSwgaXNHZW5lcmF0aW5nID8gKF9qc3goU3VnZ2VzdGlvbkNhbmRpZGF0ZVRleHQsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtYnVzeVwiOiBcInRydWVcIiB9LCB7IGNoaWxkcmVuOiBfanN4cyhTdWdnZXN0aW9uQ2FuZGlkYXRlU2tlbGV0b24sIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiODQlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjY4JVwiIH0pXSB9KSB9KSkpIDogKF9qc3goU3VnZ2VzdGlvbkNhbmRpZGF0ZVRleHQsIHsgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19odG1sOiBhY3RpdmVDYW5kaWRhdGVIdG1sLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSkpLCBfanN4cyhTdWdnZXN0aW9uQ29udHJvbHNSb3csIHsgY2hpbGRyZW46IFtfanN4cyhTdWdnZXN0aW9uQ291bnRlciwgeyBjaGlsZHJlbjogW3N1Z2dlc3Rpb25JbmRleCArIDEsIFwiL1wiLCBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGhdIH0pLCBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUHJldmlvdXMgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBkaXNhYmxlZDogaXNQcmV2U3VnZ2VzdGlvbkRpc2FibGVkLCBvbkNsaWNrOiAoKSA9PiBzZXRTdWdnZXN0aW9uSW5kZXgoKGlkeCkgPT4gTWF0aC5tYXgoMCwgaWR4IC0gMSkpIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hldnJvbkxlZnRJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSksIF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiTGlrZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUZlZWRiYWNrKCdsaWtlJykgfSwgeyBjaGlsZHJlbjogX2pzeChUaHVtYnNVcEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzbGlrZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkRpc2xpa2Ugc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiBoYW5kbGVGZWVkYmFjaygnZGlzbGlrZScpIH0sIHsgY2hpbGRyZW46IF9qc3goVGh1bWJzRG93bkljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIGNhblJlZ2VuZXJhdGUgPyAoX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogaXNHZW5lcmF0aW5nID8gJ1JlZ2VuZXJhdGluZ+KApicgOiAnUmVnZW5lcmF0ZScsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25SZWdlbmVyYXRlQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIFwiYXJpYS1idXN5XCI6IGlzR2VuZXJhdGluZywgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzR2VuZXJhdGluZywgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3VnZ2VzdGlvbkFjdGlvblR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IGlzR2VuZXJhdGluZyA/IChfanN4KFJlZ2VuZXJhdGVJY29uU2hpbW1lciwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUgfSkpIDogKF9qc3goUmV3aW5kSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkpIH0pKSB9KSkpIDogbnVsbCwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNjYXJkXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiQWNjZXB0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogaGFuZGxlQWNjZXB0U3VnZ2VzdGlvbiB9LCB7IGNoaWxkcmVuOiBfanN4KENoZWNrSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKV0gfSldIH0pKSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFzdGVkVGV4dCA9IGUuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFzdGVkVGV4dC5sZW5ndGggPiBMQVJHRV9JTlBVVF9USFJFU0hPTEQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWwgPSB0ZXh0U3BhY2VSZWYuY3VycmVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IChfYSA9IGVsID09PSBudWxsIHx8IGVsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlbC5zZWxlY3Rpb25TdGFydCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSAoX2IgPSBlbCA9PT0gbnVsbCB8fCBlbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogZWwuc2VsZWN0aW9uRW5kKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcmVmZXIgbGl2ZSBET00gdmFsdWUg4oCUIGBjdXJyZW50VGV4dGAgY2FuIGxhZyB0aGUgdGV4dGFyZWEgZm9yIGJpZyBwYXN0ZXMuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFzZSA9IChfYyA9IGVsID09PSBudWxsIHx8IGVsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlbC52YWx1ZSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dFRleHQgPSBiYXNlLnNsaWNlKDAsIHN0YXJ0KSArIHBhc3RlZFRleHQgKyBiYXNlLnNsaWNlKGVuZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dChuZXh0VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChuZXh0VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FyZXQgPSBzdGFydCArIHBhc3RlZFRleHQubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YS5zZXRTZWxlY3Rpb25SYW5nZShjYXJldCwgY2FyZXQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChfYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlIGludmFsaWQgcmFuZ2UgaW4gZWRnZSBicm93c2Vyc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiAoX2pzeChXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIHsgYWN0aW9uczogYWN0aW9ucywgcmVmOiB0ZXh0U3BhY2VSZWYsIG9uQWN0aW9uU2VsZWN0OiBvbkFjdGlvblNlbGVjdCwgUmlnaHRDb21wb25lbnQ6IFJpZ2h0Q29tcG9uZW50LCByaWdodEFjdGlvbnNEaXNhYmxlZDogc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uIHx8IGlzR2VuZXJhdGluZywgb25FbW9qaUNsaWNrOiBvbkVtb2ppQWRkaXRpb24sIGFpQWN0aW9uczogYWlIZWFkZXJBY3Rpb25zLCBkaXNhYmxlQWxsQWN0aW9uczogc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uIHx8IGlzR2VuZXJhdGluZywgaW5zdHJ1Y3Rpb25BY3RpdmU6IGlzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIG9uQUlJbnN0cnVjdGlvbnNDbGljazogKCkgPT4gc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSh0cnVlKSwgb25BSVRvbmVDaGFuZ2U6IChhY3Rpb25UeXBlLCB0b25lSWQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRvbmVCeUFjdGlvbigocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW2FjdGlvblR5cGVdOiB0b25lSWQgfSkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQUlUb25lU2VsZWN0ID09PSBudWxsIHx8IG9uQUlUb25lU2VsZWN0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVG9uZVNlbGVjdChhY3Rpb25UeXBlLCB0b25lSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdG9uZUlkLCBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIG9uQUlBY3Rpb25DbGljazogKGFjdGlvblR5cGUsIGFjdGlvblZhcmlhbnQgPSBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNhbWUgYWN0aW9uIHNob3VsZCBub3QgcmV0cmlnZ2VyIGZyb20gY2hpcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnZW5lcmF0ZSBpcyBvbmx5IHZpYSBleHBsaWNpdCByZWdlbmVyYXRlIGNvbnRyb2wuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmV3IGFjdGlvbiBzdGFydHMgYSBmcmVzaCBzdWdnZXN0aW9uIHNlc3Npb24uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFjdGlvblZhcmlhbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFjdGlvblZhcmlhbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IH0pKV0gfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuZXhwb3J0IHsgQUlfVEFHX0NIQU5HRV9SQVRJT19USFJFU0hPTEQsIGNvbXB1dGVBaVRhZ09uQWNjZXB0LCBsZXZlbnNodGVpbkRpc3RhbmNlLCB9IGZyb20gJy4vYWkvYWlUYWcnO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1XaGF0c0FwcFRleHRFZGl0b3IuanMubWFwIl19 */")),P=a.default("div","production"===process.env.NODE_ENV?{target:"ea7i3sh1"}:{target:"ea7i3sh1",label:"InstructionSuggestionList"})("margin-top:10px;border-radius:12px;background:",R.COLORS.surface.standard,";box-shadow:0 6px 18px rgba(0, 0, 0, 0.1);overflow:hidden;"+("production"===process.env.NODE_ENV?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBa0w2QyIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIEZyYWdtZW50IGFzIF9GcmFnbWVudCwganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZXdpbmRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3Jld2luZC5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzRG93bkljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvdGh1bWJzX2Rvd24uc3ZnJztcclxuaW1wb3J0IFRodW1ic1VwSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfdXAuc3ZnJztcclxuaW1wb3J0IHsgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9CYXNlV2hhdHNhcHBDb250ZW50TGFuZy5oZWxwZXJcIjtcclxuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUsIH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgeyBDT0xPUlMgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzL1RoZW1lXCI7XHJcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICcuLi90b29sdGlwcy9Ub29sdGlwJztcclxuaW1wb3J0IHsgQm9keUNhcHRpb24sIFRpdGxlU21hbGwgfSBmcm9tICcuLi9UeXBvZ3JhcGh5U3R5bGUnO1xyXG5pbXBvcnQgeyBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlMsIERFRkFVTFRfSU5TVFJVQ1RJT05fU1VHR0VTVElPTlMsIHJlc29sdmVBY3Rpb25Qcm9tcHRzLCB9IGZyb20gJy4vYWkvYWN0aW9uUmVnaXN0cnknO1xyXG5pbXBvcnQgeyBjb21wdXRlQWlUYWdPbkFjY2VwdCB9IGZyb20gJy4vYWkvYWlUYWcnO1xyXG5pbXBvcnQgeyBidWlsZEFjdGlvblByb21wdCwgcmVxdWVzdEFJU3VnZ2VzdGlvbiB9IGZyb20gJy4vYWkvYXBpJztcclxuaW1wb3J0IHsgQ29udGFpbmVyLCBFZGl0b3JGb290ZXJSaWdodCwgRWRpdG9yRm9vdGVyUm93LCBFZGl0b3JGb290ZXJUaXRsZSwgT3V0ZXJDb250YWluZXIsIFRleHRTcGFjZSwgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUFjdGlvblZhcmlhbnQsIEFJRWRpdG9yQWN0aW9uVHlwZXMsIEVkaXRvckFjdGlvblR5cGVzLCBXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIH0gZnJvbSAnLi9XaGF0c0FwcFRleHRFZGl0b3JIZWFkZXInO1xyXG5jb25zdCBMSU1JVF9SRUFDSEVEID0gJ0NoYXJhY3RlciBsaW1pdCByZWFjaGVkJztcclxuY29uc3QgUkVQSFJBU0VfSURMRV9NUyA9IDMwMDA7XHJcbmNvbnN0IE1BWF9SRVBIUkFTRV9ISUdITElHSFRTID0gNTtcclxuY29uc3QgTUFYX1NVR0dFU1RJT05TID0gMztcclxuY29uc3QgTEFSR0VfSU5QVVRfVEhSRVNIT0xEID0gMTIwMDtcclxuY29uc3QgVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgPSAnUmVwaHJhc2UgdGhpcyBXaGF0c0FwcCB1dGlsaXR5IHRlbXBsYXRlIHRvIGltcHJvdmUgY2xhcml0eSBhbmQgcmVhZGFiaWxpdHkgd2hpbGUgcHJlc2VydmluZyB2YXJpYWJsZXMsIGludGVudCwgYW5kIGNvbXBsaWFuY2UuJztcclxuY29uc3Qgc2tlbGV0b25QdWxzZSA9IGtleWZyYW1lcyBgXG5cdDAlIHsgb3BhY2l0eTogMC41NTsgfVxuXHQ1MCUgeyBvcGFjaXR5OiAxOyB9XG5cdDEwMCUgeyBvcGFjaXR5OiAwLjU1OyB9XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxNHB4IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogMTBweDtcblx0bWluLWhlaWdodDogMTUwcHg7XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkxpbmUgPSBzdHlsZWQuZGl2IGBcblx0aGVpZ2h0OiAxNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdHdpZHRoOiAkeyhwcm9wcykgPT4gcHJvcHMud2lkdGh9O1xuXHRiYWNrZ3JvdW5kOiAjZWNlY2VmO1xuXHRhbmltYXRpb246ICR7c2tlbGV0b25QdWxzZX0gMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHRtYXgtaGVpZ2h0OiAyNjBweDtcblx0b3ZlcmZsb3cteTogc2Nyb2xsO1xuXHRzY3JvbGxiYXItd2lkdGg6IHRoaW47XG5cdHNjcm9sbGJhci1jb2xvcjogI2M4YzhjZiB0cmFuc3BhcmVudDtcblx0Ojotd2Via2l0LXNjcm9sbGJhciB7XG5cdFx0d2lkdGg6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcblx0XHRiYWNrZ3JvdW5kOiAjYzhjOGNmO1xuXHRcdGJvcmRlci1yYWRpdXM6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcblx0XHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0fVxuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkJhc2VsaW5lVGV4dCA9IHN0eWxlZC5kaXYgYFxuXHR0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25DYW5kaWRhdGVUZXh0ID0gc3R5bGVkLmRpdiBgXG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkNhbmRpZGF0ZVNrZWxldG9uID0gc3R5bGVkLmRpdiBgXG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHR3aWR0aDogMTAwJTtcblx0bWluLWhlaWdodDogNDBweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db250cm9sc1JvdyA9IHN0eWxlZC5kaXYgYFxuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDZweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db3VudGVyID0gc3R5bGVkLnNwYW4gYFxuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkljb25CdXR0b24gPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0cGFkZGluZzogNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdGRpc3BsYXk6IGlubGluZS1mbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0dHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjEycyBlYXNlO1xuXHQ6bm90KDpkaXNhYmxlZCk6aG92ZXIge1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICR7Q09MT1JTLnN1cmZhY2UuaG92ZXJlZH07XG5cdH1cblx0OmRpc2FibGVkIHtcblx0XHRvcGFjaXR5OiAwLjM1O1xuXHRcdGN1cnNvcjogbm90LWFsbG93ZWQ7XG5cdH1cbmA7XHJcbi8qKiBSZWdlbmVyYXRlIHN0YXlzIGZ1bGwgb3BhY2l0eSB3aGlsZSBkaXNhYmxlZCBzbyB0aGUgbG9hZGluZyBzaGltbWVyIHN0YXlzIHZpc2libGUgKHNhbWUgcHVsc2UgYXMgZWRpdG9yIHNrZWxldG9uKS4gKi9cclxuY29uc3QgU3VnZ2VzdGlvblJlZ2VuZXJhdGVCdXR0b24gPSBzdHlsZWQoU3VnZ2VzdGlvbkljb25CdXR0b24pIGBcblx0OmRpc2FibGVkIHtcblx0XHRvcGFjaXR5OiAxO1xuXHRcdGN1cnNvcjogd2FpdDtcblx0fVxuYDtcclxuY29uc3QgUmVnZW5lcmF0ZUljb25TaGltbWVyID0gc3R5bGVkLmRpdiBgXG5cdHdpZHRoOiAxNHB4O1xuXHRoZWlnaHQ6IDE0cHg7XG5cdGJvcmRlci1yYWRpdXM6IDRweDtcblx0YmFja2dyb3VuZDogI2VjZWNlZjtcblx0ZmxleC1zaHJpbms6IDA7XG5cdGFuaW1hdGlvbjogJHtza2VsZXRvblB1bHNlfSAxLjFzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xuYDtcclxuLyoqIFNhbWUgYm90dG9tIHRvb2xiYXIgc2xvdCBhcyBgV2hhdHNBcHBUZXh0RWRpdG9ySGVhZGVyYCDigJQgcmVwbGFjZXMgdGhlIGZ1bGwgaWNvbi9BSSBwYW5lbCB3aGlsZSBvcGVuLiAqL1xyXG5jb25zdCBJbnN0cnVjdGlvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblx0cGFkZGluZzogOHB4IDEycHg7XG5cdGdhcDogMTBweDtcblx0Ym9yZGVyLXJhZGl1czogMCAwIDRweCA0cHg7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXRSb3cgPSBzdHlsZWQuZGl2IGBcblx0Ym9yZGVyOiAxcHggc29saWQgI2Y1YTRjMDtcblx0Ym9yZGVyLXJhZGl1czogMTBweDtcblx0cGFkZGluZzogOHB4IDEwcHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbklucHV0ID0gc3R5bGVkLmlucHV0IGBcblx0ZmxleDogMTtcblx0bWluLXdpZHRoOiAwO1xuXHRib3JkZXI6IDA7XG5cdG91dGxpbmU6IG5vbmU7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25BY3Rpb25zID0gc3R5bGVkLmRpdiBgXG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQ2FuY2VsID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnNlY29uZGFyeX07XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0Zm9udC13ZWlnaHQ6IDUwMDtcblx0cGFkZGluZzogMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbXByb3ZlID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMXB4IHNvbGlkICM1ZDNhNzI7XG5cdGNvbG9yOiAjNWQzYTcyO1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0Ym9yZGVyLXJhZGl1czogOHB4O1xuXHRwYWRkaW5nOiA4cHggMTRweDtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRsaW5lLWhlaWdodDogMS4xO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0ID0gc3R5bGVkLmRpdiBgXG5cdG1hcmdpbi10b3A6IDEwcHg7XG5cdGJvcmRlci1yYWRpdXM6IDEycHg7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3gtc2hhZG93OiAwIDZweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkJ1dHRvbiA9IHN0eWxlZC5idXR0b24gYFxuXHR3aWR0aDogMTAwJTtcblx0Ym9yZGVyOiAwO1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgJHtDT0xPUlMuc3Ryb2tlLnByaW1hcnl9O1xuXHRiYWNrZ3JvdW5kOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyNlNWYzZTgnIDogJ3RyYW5zcGFyZW50Jyl9O1xuXHRjb2xvcjogJHsocHJvcHMpID0+IChwcm9wcy5zZWxlY3RlZCA/ICcjMWU2YjM0JyA6IENPTE9SUy5jb250ZW50LnByaW1hcnkpfTtcblx0dGV4dC1hbGlnbjogbGVmdDtcblx0cGFkZGluZzogMTJweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjI7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0OmZpcnN0LW9mLXR5cGUge1xuXHRcdGJvcmRlci10b3A6IDA7XG5cdH1cbmA7XHJcbmNvbnN0IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nID0gbmV3IEJhc2VXaGF0c2FwcENvbnRlbnRMYW5nSGVscGVyKCk7XHJcbmNvbnN0IFdpbGRDYXJkTWFwID0ge1xyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLkJPTERdOiAnKicsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuSVRBTElDXTogJ18nLFxyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLlNUUklLRVRIUk9VR0hdOiAnficsXHJcbn07XHJcbmZ1bmN0aW9uIGdldEhpZ2hsaWdodFN0b3JhZ2VLZXkoZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgIHJldHVybiBgd2hhdHNhcHAtZWRpdG9yLXJlcGhyYXNlLWhpZ2hsaWdodC0ke2VkaXRvckluc3RhbmNlS2V5IHx8ICdkZWZhdWx0J31gO1xyXG59XHJcbmV4cG9ydCBjb25zdCBXaGF0c0FwcFRleHRFZGl0b3IgPSBSZWFjdC5mb3J3YXJkUmVmKChfYSwgcmVmKSA9PiB7XHJcbiAgICB2YXIgeyBvbkNoYW5nZSwgb25DbGlja1ZhcmlhYmxlLCB0ZXh0OiBpbnB1dFZhbHVlLCBSaWdodENvbXBvbmVudCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yLCByb3dzLCBhY3Rpb25zLCBlZGl0b3JJbnN0YW5jZUtleSwgdGVtcGxhdGVUeXBlID0gJ21hcmtldGluZycsIHRlbXBsYXRlSWQsIHJlcXVlc3RFeGVjdXRvciwgYmFzZVVybCwgZW5kcG9pbnRQYXRoLCB1c2VDYXNlLCBzdG9yZUlkLCBhcGlBZGFwdGVyLCBjb252ZXJzYXRpb25JZCA9ICd3aGF0c2FwcC10ZW1wbGF0ZS1lZGl0b3InLCBzeXN0ZW1JZCA9ICd3aGF0c2FwcC13cml0ZXInLCBpbnRlbnQgPSAnZGVmYXVsdCcsIGVuYWJsZWRBSUFjdGlvbnMgPSBbXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlNIT1JURU4sXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FWFBBTkQsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FTU9KSUZZLFxyXG4gICAgXSwgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMgPSBmYWxzZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCBhaUFjdGlvbk1pbkNoYXJzLCBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgb25BSUV2ZW50LCBvbkFJVGFnQ29tcHV0ZWQsIHByZWZpbGxXYXNBaUdlbmVyYXRlZCA9IGZhbHNlLCBlZGl0b3JIZWFkZXIsIG9uQUlUb25lU2VsZWN0LCBvbkFJQWN0aW9uUmVxdWVzdCwgb25CdWlsZEFJUHJvbXB0IH0gPSBfYSwgdGV4dEFyZWFQcm9wcyA9IF9fcmVzdChfYSwgW1wib25DaGFuZ2VcIiwgXCJvbkNsaWNrVmFyaWFibGVcIiwgXCJ0ZXh0XCIsIFwiUmlnaHRDb21wb25lbnRcIiwgXCJlcnJvclwiLCBcImxpbWl0XCIsIFwib25FcnJvclwiLCBcInJvd3NcIiwgXCJhY3Rpb25zXCIsIFwiZWRpdG9ySW5zdGFuY2VLZXlcIiwgXCJ0ZW1wbGF0ZVR5cGVcIiwgXCJ0ZW1wbGF0ZUlkXCIsIFwicmVxdWVzdEV4ZWN1dG9yXCIsIFwiYmFzZVVybFwiLCBcImVuZHBvaW50UGF0aFwiLCBcInVzZUNhc2VcIiwgXCJzdG9yZUlkXCIsIFwiYXBpQWRhcHRlclwiLCBcImNvbnZlcnNhdGlvbklkXCIsIFwic3lzdGVtSWRcIiwgXCJpbnRlbnRcIiwgXCJlbmFibGVkQUlBY3Rpb25zXCIsIFwiZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnNcIiwgXCJwcm9tcHRPdmVycmlkZXNcIiwgXCJyZXBocmFzZVRvbmVzXCIsIFwiYWlBY3Rpb25NaW5DaGFyc1wiLCBcImluc3RydWN0aW9uU3VnZ2VzdGlvbnNcIiwgXCJvbkFJRXZlbnRcIiwgXCJvbkFJVGFnQ29tcHV0ZWRcIiwgXCJwcmVmaWxsV2FzQWlHZW5lcmF0ZWRcIiwgXCJlZGl0b3JIZWFkZXJcIiwgXCJvbkFJVG9uZVNlbGVjdFwiLCBcIm9uQUlBY3Rpb25SZXF1ZXN0XCIsIFwib25CdWlsZEFJUHJvbXB0XCJdKTtcclxuICAgIGNvbnN0IHRleHRTcGFjZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IFtjdXJyZW50VGV4dCwgc2V0Q3VycmVudFRleHRdID0gdXNlU3RhdGUoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICBjb25zdCBbaXNSZXBocmFzZUhpZ2hsaWdodGVkLCBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW3JlcGhyYXNlSGlnaGxpZ2h0Q291bnQsIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbaXNHZW5lcmF0aW5nLCBzZXRJc0dlbmVyYXRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2lzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGVdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2luc3RydWN0aW9uVGV4dCwgc2V0SW5zdHJ1Y3Rpb25UZXh0XSA9IHVzZVN0YXRlKCcnKTtcclxuICAgIGNvbnN0IFt0b25lQnlBY3Rpb24sIHNldFRvbmVCeUFjdGlvbl0gPSB1c2VTdGF0ZSh7fSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkJhc2VUZXh0LCBzZXRTdWdnZXN0aW9uQmFzZVRleHRdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkNhbmRpZGF0ZXMsIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzXSA9IHVzZVN0YXRlKFtdKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uSW5kZXgsIHNldFN1Z2dlc3Rpb25JbmRleF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGVdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBzdWdnZXN0aW9uU2Nyb2xsUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgcmVwaHJhc2VJZGxlUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgaGlnaGxpZ2h0UmVzZXRSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICAvKipcclxuICAgICAqIFByaW9yIGVsaWdpYmlsaXR5IGZvciByZXBocmFzZSBudWRnZSAobnVsbCA9IG5vdCBpbml0aWFsaXplZCkuXHJcbiAgICAgKiBNYXRjaGVzIHRoZSBjaGlwOiBub24tZW1wdHkgdHJpbSBhbmQgbGVuZ3RoIOKJpSBtaW4g4oCUIHNhbWUgYXMgYGFpSGVhZGVyQWN0aW9uc2AgZGlzYWJsZWQgcnVsZXMuXHJcbiAgICAgKi9cclxuICAgIGNvbnN0IHByZXZSZXBocmFzZUVsaWdpYmxlUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgZGVmZXJyZWRIdG1sUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgbGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIC8qKiBGaXJzdCBhY2NlcHQgYWZ0ZXIgZnVsbC1BSSBwcmVmaWxsIChgcHJlZmlsbFdhc0FpR2VuZXJhdGVkYCk7IGNsZWFyZWQgYWZ0ZXIgb25lIGFjY2VwdC4gKi9cclxuICAgIGNvbnN0IGluaXRpYWxBaVByZWZpbGxQaGFzZVJlZiA9IHVzZVJlZighIXByZWZpbGxXYXNBaUdlbmVyYXRlZCk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGluaXRpYWxBaVByZWZpbGxQaGFzZVJlZi5jdXJyZW50ID0gISFwcmVmaWxsV2FzQWlHZW5lcmF0ZWQ7XHJcbiAgICB9LCBbcHJlZmlsbFdhc0FpR2VuZXJhdGVkLCBlZGl0b3JJbnN0YW5jZUtleV0pO1xyXG4gICAgY29uc3QgYWN0aXZlQWN0aW9uUHJvbXB0cyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiByZXNvbHZlQWN0aW9uUHJvbXB0cyh0ZW1wbGF0ZVR5cGUsIHByb21wdE92ZXJyaWRlcywgcmVwaHJhc2VUb25lcyk7XHJcbiAgICB9LCBbcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCB0ZW1wbGF0ZVR5cGVdKTtcclxuICAgIGNvbnN0IGZpbHRlcmVkSW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGlmICghcXVlcnkpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucy5maWx0ZXIoKHN1Z2dlc3Rpb24pID0+IHN1Z2dlc3Rpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeSkpO1xyXG4gICAgfSwgW2luc3RydWN0aW9uU3VnZ2VzdGlvbnMsIGluc3RydWN0aW9uVGV4dF0pO1xyXG4gICAgY29uc3QgbWluQ2hhcnNCeUFjdGlvbiA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUyksIChhaUFjdGlvbk1pbkNoYXJzIHx8IHt9KSk7XHJcbiAgICB9LCBbYWlBY3Rpb25NaW5DaGFyc10pO1xyXG4gICAgY29uc3QgcmVwaHJhc2VNaW5DaGFycyA9IG1pbkNoYXJzQnlBY3Rpb25bQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV0gfHxcclxuICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV07XHJcbiAgICBjb25zdCBlbWl0QUlFdmVudCA9IHVzZUNhbGxiYWNrKChuYW1lLCBwYXlsb2FkKSA9PiB7XHJcbiAgICAgICAgb25BSUV2ZW50ID09PSBudWxsIHx8IG9uQUlFdmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSUV2ZW50KG5hbWUsIHBheWxvYWQpO1xyXG4gICAgfSwgW29uQUlFdmVudF0pO1xyXG4gICAgY29uc3Qgc2V0RWRpdG9yVGV4dCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIHNldEN1cnJlbnRUZXh0KChwcmV2KSA9PiAocHJldiA9PT0gbmV4dFRleHQgPyBwcmV2IDogbmV4dFRleHQpKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGVtaXRDaGFuZ2VXaXRoR3VhcmQgPSB1c2VDYWxsYmFjaygobmV4dFRleHQpID0+IHtcclxuICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGRlZmVycmVkSHRtbFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5leHRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIG5leHRUZXh0KTtcclxuICAgICAgICAgICAgZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChuZXh0VGV4dCkpO1xyXG4gICAgICAgICAgICB9LCAxNik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICB9LCBbb25DaGFuZ2VdKTtcclxuICAgIGNvbnN0IGNsZWFyU3VnZ2VzdGlvblNlc3Npb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0KG51bGwpO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtdKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUobnVsbCk7XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgPj0gTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXh0Q291bnQgPSByZXBocmFzZUhpZ2hsaWdodENvdW50ICsgMTtcclxuICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KG5leHRDb3VudCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSksIFN0cmluZyhuZXh0Q291bnQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKHRydWUpO1xyXG4gICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgIH0sIDEyMDApO1xyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5LCByZXBocmFzZUhpZ2hsaWdodENvdW50XSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHRSZWYgPSB1c2VSZWYodHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0KTtcclxuICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50ID0gdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0O1xyXG4gICAgZnVuY3Rpb24gaGFuZGxlT25DaGFuZ2UoZSkge1xyXG4gICAgICAgIGNvbnN0IHRleHQgPSBlLnRhcmdldC52YWx1ZTtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBzZXRDYXJldFBvc2l0aW9uKGNhcmV0UG9zKSB7XHJcbiAgICAgICAgY29uc3QgZWxlbSA9IHRleHRTcGFjZVJlZiA9PT0gbnVsbCB8fCB0ZXh0U3BhY2VSZWYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRleHRTcGFjZVJlZi5jdXJyZW50O1xyXG4gICAgICAgIGlmIChlbGVtICE9IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKGVsZW0uc2VsZWN0aW9uU3RhcnQpIHtcclxuICAgICAgICAgICAgICAgIGVsZW0uZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIGVsZW0uc2VsZWN0aW9uRW5kID0gY2FyZXRQb3M7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgZWxlbS5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIG9uQWN0aW9uU2VsZWN0KGFjdGlvblR5cGUpIHtcclxuICAgICAgICBjb25zdCB3aWxkQ2FyZCA9IFdpbGRDYXJkTWFwW2FjdGlvblR5cGVdO1xyXG4gICAgICAgIGlmICh3aWxkQ2FyZCAmJiB0ZXh0U3BhY2VSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHRleHQgfSA9IGluc2VydFRleHRBdEluZGV4KHdpbGRDYXJkLCBzdGFydCk7XHJcbiAgICAgICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uKHN0YXJ0ICsgMSk7XHJcbiAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBhZGRUZXh0T3JXcmFwKHdpbGRDYXJkKTtcclxuICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBvbkVtb2ppQWRkaXRpb24oZW1vamkpIHtcclxuICAgICAgICBjb25zdCB7IHRleHQgfSA9IGFkZFRleHQoZW1vamkpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhZGRUZXh0T3JXcmFwKHRleHRUb0FkZCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgbGV0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICBpZiAodGV4dFNwYWNlUmVmLmN1cnJlbnQgJiYgdGV4dFRvQWRkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgY29uc3Qgd2lsZENhcmQgPSB0ZXh0VG9BZGQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICAvKiogbm90aGluZyBpcyBzZWxlY3RlZCAqL1xyXG4gICAgICAgICAgICAgICAgLyoqIHNvIGFwcGVuZCB0aGUgd2lsZGNhcmQgYXQgdGhlIGVuZCAqL1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFkZFRleHQod2lsZENhcmQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGV4dCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLndyYXBwV2lsZGNhcmQoc3RhcnQsIGVuZCwgd2lsZENhcmQsIHRleHQpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaHRtbCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwodGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdGV4dCwgaHRtbCB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IHRleHQ6IHRleHQsIGh0bWw6IHRleHQgfTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZFRleHQodGV4dFRvQWRkKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgaWYgKHRleHRTcGFjZVJlZi5jdXJyZW50ICYmIHRleHRUb0FkZCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zZXJ0VGV4dEF0SW5kZXgodGV4dFRvQWRkLCBzdGFydCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dDogdGV4dCwgaHRtbDogdGV4dCB9O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gaW5zZXJ0VGV4dEF0SW5kZXgodGV4dFRvQWRkLCBpbmRleCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgbGV0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICB0ZXh0ID0gdGV4dC5zbGljZSgwLCBpbmRleCkgKyB0ZXh0VG9BZGQgKyB0ZXh0LnNsaWNlKGluZGV4KTtcclxuICAgICAgICBjb25zdCBodG1sID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTCh0ZXh0KTtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgIHJldHVybiB7IHRleHQsIGh0bWwgfTtcclxuICAgIH1cclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8ICFlZGl0b3JJbnN0YW5jZUtleSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNhY2hlZCA9IE51bWJlcihzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGdldEhpZ2hsaWdodFN0b3JhZ2VLZXkoZWRpdG9ySW5zdGFuY2VLZXkpKSB8fFxyXG4gICAgICAgICAgICAnMCcpO1xyXG4gICAgICAgIGlmICghTnVtYmVyLmlzTmFOKGNhY2hlZCkpIHtcclxuICAgICAgICAgICAgc2V0UmVwaHJhc2VIaWdobGlnaHRDb3VudChjYWNoZWQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtlZGl0b3JJbnN0YW5jZUtleV0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBjb25zdCBlbGlnaWJsZSA9ICEhY3VycmVudFRleHQudHJpbSgpICYmIGN1cnJlbnRUZXh0Lmxlbmd0aCA+PSByZXBocmFzZU1pbkNoYXJzO1xyXG4gICAgICAgIGlmIChwcmV2UmVwaHJhc2VFbGlnaWJsZVJlZi5jdXJyZW50ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHByZXZSZXBocmFzZUVsaWdpYmxlUmVmLmN1cnJlbnQgPSBlbGlnaWJsZTtcclxuICAgICAgICAgICAgaWYgKGVsaWdpYmxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50KCk7XHJcbiAgICAgICAgICAgICAgICB9LCBSRVBIUkFTRV9JRExFX01TKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZWxpZ2libGUpIHtcclxuICAgICAgICAgICAgcHJldlJlcGhyYXNlRWxpZ2libGVSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjcm9zc2VkVGhyZXNob2xkID0gIXByZXZSZXBocmFzZUVsaWdpYmxlUmVmLmN1cnJlbnQgJiYgZWxpZ2libGU7XHJcbiAgICAgICAgcHJldlJlcGhyYXNlRWxpZ2libGVSZWYuY3VycmVudCA9IHRydWU7XHJcbiAgICAgICAgaWYgKGNyb3NzZWRUaHJlc2hvbGQpIHtcclxuICAgICAgICAgICAgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0UmVmLmN1cnJlbnQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50KCk7XHJcbiAgICAgICAgfSwgUkVQSFJBU0VfSURMRV9NUyk7XHJcbiAgICB9LCBbY3VycmVudFRleHQsIHJlcGhyYXNlTWluQ2hhcnNdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGFjdGl2ZUNhbmRpZGF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzW3N1Z2dlc3Rpb25JbmRleF0gfHwgJyc7XHJcbiAgICBjb25zdCBzdWdnZXN0aW9uQmFzZUh0bWwgPSB1c2VNZW1vKCgpID0+IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwoc3VnZ2VzdGlvbkJhc2VUZXh0IHx8ICcnKSwgW3N1Z2dlc3Rpb25CYXNlVGV4dF0pO1xyXG4gICAgY29uc3QgYWN0aXZlQ2FuZGlkYXRlSHRtbCA9IHVzZU1lbW8oKCkgPT4gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChhY3RpdmVDYW5kaWRhdGUpLCBbYWN0aXZlQ2FuZGlkYXRlXSk7XHJcbiAgICBjb25zdCBjYW5SZWdlbmVyYXRlID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDwgTUFYX1NVR0dFU1RJT05TO1xyXG4gICAgY29uc3Qgc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID0gISFzdWdnZXN0aW9uQmFzZVRleHQgJiYgc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoID4gMDtcclxuICAgIGNvbnN0IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8IHN1Z2dlc3Rpb25JbmRleCA8PSAwO1xyXG4gICAgY29uc3QgaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDw9IDEgfHxcclxuICAgICAgICBzdWdnZXN0aW9uSW5kZXggPj0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBub2RlID0gc3VnZ2VzdGlvblNjcm9sbFJlZi5jdXJyZW50O1xyXG4gICAgICAgIGlmICghbm9kZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIG5vZGUuc2Nyb2xsVG9wID0gbm9kZS5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9LCBbYWN0aXZlQ2FuZGlkYXRlLCBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24sIGlzR2VuZXJhdGluZ10pO1xyXG4gICAgY29uc3QgZXhlY3V0ZUFJQWN0aW9uID0gdXNlQ2FsbGJhY2soKGFjdGlvblR5cGUsIHJlZ2VuZXJhdGVFeGlzdGluZyA9IGZhbHNlLCBpbnN0cnVjdGlvbk92ZXJyaWRlLCB0b25lT3ZlcnJpZGVJZCwgYWN0aW9uVmFyaWFudCA9IEFJQWN0aW9uVmFyaWFudC5ERUZBVUxUKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICB2YXIgX2IsIF9jLCBfZDtcclxuICAgICAgICBpZiAoIW9uQUlBY3Rpb25SZXF1ZXN0ICYmXHJcbiAgICAgICAgICAgICFhcGlBZGFwdGVyICYmXHJcbiAgICAgICAgICAgICghcmVxdWVzdEV4ZWN1dG9yIHx8ICFiYXNlVXJsKSkge1xyXG4gICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoJ0FJIGNvbmZpZ3VyYXRpb24gbWlzc2luZycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY3VycmVudFRleHQudHJpbSgpKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbWluQ2hhcnNGb3JBY3Rpb24gPSBtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICA1MDtcclxuICAgICAgICBpZiAoY3VycmVudFRleHQubGVuZ3RoIDwgbWluQ2hhcnNGb3JBY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpZiAoaXNHZW5lcmF0aW5nKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKHJlZ2VuZXJhdGVFeGlzdGluZyAmJiAhY2FuUmVnZW5lcmF0ZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGJhc2VDb25maWcgPSBhY3RpdmVBY3Rpb25Qcm9tcHRzW2FjdGlvblR5cGVdO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UgJiZcclxuICAgICAgICAgICAgdGVtcGxhdGVUeXBlID09PSAndXRpbGl0eScgJiZcclxuICAgICAgICAgICAgYWN0aW9uVmFyaWFudCA9PT0gQUlBY3Rpb25WYXJpYW50LlJFUEhSQVNFXHJcbiAgICAgICAgICAgID8gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBiYXNlQ29uZmlnKSwgeyBsYWJlbDogJ1JlcGhyYXNlJywgYmFzZVByb21wdDogVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgfSkgOiBiYXNlQ29uZmlnO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVG9uZUlkID0gdG9uZU92ZXJyaWRlSWQgfHxcclxuICAgICAgICAgICAgdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIGNvbmZpZy5kZWZhdWx0VG9uZUlkIHx8XHJcbiAgICAgICAgICAgICgoX2MgPSAoX2IgPSBjb25maWcudG9uZXMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYlswXSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmlkKTtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFRvbmUgPSAoX2QgPSBjb25maWcudG9uZXMpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5maW5kKCh0b25lKSA9PiB0b25lLmlkID09PSBzZWxlY3RlZFRvbmVJZCk7XHJcbiAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgPSBpbnN0cnVjdGlvbk92ZXJyaWRlICE9PSB1bmRlZmluZWRcclxuICAgICAgICAgICAgPyBpbnN0cnVjdGlvbk92ZXJyaWRlXHJcbiAgICAgICAgICAgIDogaW5zdHJ1Y3Rpb25UZXh0O1xyXG4gICAgICAgIGNvbnN0IHByb21wdCA9IChvbkJ1aWxkQUlQcm9tcHQgPT09IG51bGwgfHwgb25CdWlsZEFJUHJvbXB0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkJ1aWxkQUlQcm9tcHQoe1xyXG4gICAgICAgICAgICBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICBhY3Rpb25WYXJpYW50LFxyXG4gICAgICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICBjb25maWcsXHJcbiAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgIHRvbmVMYWJlbDogc2VsZWN0ZWRUb25lID09PSBudWxsIHx8IHNlbGVjdGVkVG9uZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZWN0ZWRUb25lLmxhYmVsLFxyXG4gICAgICAgICAgICBpbnN0cnVjdGlvblRleHQ6IGluc3RydWN0aW9uRm9yUHJvbXB0IHx8IHVuZGVmaW5lZCxcclxuICAgICAgICB9KSkgfHxcclxuICAgICAgICAgICAgYnVpbGRBY3Rpb25Qcm9tcHQoe1xyXG4gICAgICAgICAgICAgICAgY29uZmlnLFxyXG4gICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZCxcclxuICAgICAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIHNldElzR2VuZXJhdGluZyh0cnVlKTtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfYWN0aW9uX3RyaWdnZXJlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG9uQUlBY3Rpb25SZXF1ZXN0XHJcbiAgICAgICAgICAgICAgICA/IHlpZWxkIG9uQUlBY3Rpb25SZXF1ZXN0KHtcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblZhcmlhbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIDogeWllbGQgcmVxdWVzdEFJU3VnZ2VzdGlvbih7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgYmFzZVVybCxcclxuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgICAgIGludGVudCxcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICAgICAgICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZydcclxuICAgICAgICAgICAgICAgID8gcmVzdWx0LnRyaW0oKVxyXG4gICAgICAgICAgICAgICAgOiAoKHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3VsdC5ib2R5KSB8fCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKCFyZWdlbmVyYXRlRXhpc3RpbmcpIHtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25CYXNlVGV4dChjdXJyZW50VGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShhY3Rpb25UeXBlKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtjYW5kaWRhdGVdKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcygocHJldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IFsuLi5wcmV2LCBjYW5kaWRhdGVdLnNsaWNlKDAsIE1BWF9TVUdHRVNUSU9OUyk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgobmV4dC5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdGYWlsZWQgdG8gZ2VuZXJhdGUgQUkgc3VnZ2VzdGlvbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgc2V0SXNHZW5lcmF0aW5nKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9KSwgW1xyXG4gICAgICAgIHJlcXVlc3RFeGVjdXRvcixcclxuICAgICAgICBiYXNlVXJsLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBjYW5SZWdlbmVyYXRlLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGluc3RydWN0aW9uVGV4dCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIGVuZHBvaW50UGF0aCxcclxuICAgICAgICBhcGlBZGFwdGVyLFxyXG4gICAgICAgIGludGVudCxcclxuICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgIG9uRXJyb3IsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgICAgICBvbkFJQWN0aW9uUmVxdWVzdCxcclxuICAgICAgICBvbkJ1aWxkQUlQcm9tcHQsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFhY3RpdmVDYW5kaWRhdGUgfHwgIXN1Z2dlc3Rpb25CYXNlVGV4dCB8fCAhc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2FjY2VwdGVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGluSW5pdGlhbEFpUGhhc2UgPSBpbml0aWFsQWlQcmVmaWxsUGhhc2VSZWYuY3VycmVudDtcclxuICAgICAgICBjb25zdCB0YWdQYXlsb2FkID0gY29tcHV0ZUFpVGFnT25BY2NlcHQoe1xyXG4gICAgICAgICAgICBiYXNlbGluZVRleHQ6IHN1Z2dlc3Rpb25CYXNlVGV4dCxcclxuICAgICAgICAgICAgYWNjZXB0ZWRUZXh0OiBhY3RpdmVDYW5kaWRhdGUsXHJcbiAgICAgICAgICAgIGluaXRpYWxBaVByZWZpbGxQaGFzZTogaW5Jbml0aWFsQWlQaGFzZSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoaW5Jbml0aWFsQWlQaGFzZSkge1xyXG4gICAgICAgICAgICBpbml0aWFsQWlQcmVmaWxsUGhhc2VSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvbkFJVGFnQ29tcHV0ZWQgPT09IG51bGwgfHwgb25BSVRhZ0NvbXB1dGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVGFnQ29tcHV0ZWQodGFnUGF5bG9hZCk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGFjdGl2ZUNhbmRpZGF0ZSxcclxuICAgICAgICBzdWdnZXN0aW9uQmFzZVRleHQsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCxcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkLFxyXG4gICAgICAgIGVtaXRBSUV2ZW50LFxyXG4gICAgICAgIHRlbXBsYXRlSWQsXHJcbiAgICAgICAgb25BSVRhZ0NvbXB1dGVkLFxyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2Rpc2NhcmRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uKCk7XHJcbiAgICB9LCBbY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiwgZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKChyYXRpbmcpID0+IHtcclxuICAgICAgICBpZiAoIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2ZlZWRiYWNrX3N1Ym1pdHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICAgICAgcmF0aW5nLFxyXG4gICAgICAgICAgICBjYW5kaWRhdGVfaW5kZXg6IHN1Z2dlc3Rpb25JbmRleCArIDEsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LCBbZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzdWdnZXN0aW9uSW5kZXgsIHRlbXBsYXRlSWRdKTtcclxuICAgIGNvbnN0IGFpSGVhZGVyQWN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucylcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBlbmFibGVkQUlBY3Rpb25zLm1hcCgoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICAgICAgY29uc3QgYWN0aW9uQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICAgICAgY29uc3QgdG9uZUlkID0gdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICBhY3Rpb25Db25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAgICAgKChfYiA9IChfYSA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzBdKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWQpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBhY3Rpb25Db25maWcubGFiZWwsXHJcbiAgICAgICAgICAgICAgICBpc1ByaW1hcnk6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBpc0dlbmVyYXRpbmcgJiYgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHRlZDogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVwaHJhc2VIaWdobGlnaHRlZCxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhY3VycmVudFRleHQudHJpbSgpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQubGVuZ3RoIDxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG1pbkNoYXJzQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNTApIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgaXNHZW5lcmF0aW5nIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSksXHJcbiAgICAgICAgICAgICAgICBzaG93VG9uZURyb3Bkb3duOiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgICAgICAgICAgISEoKF9jID0gYWN0aW9uQ29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSxcclxuICAgICAgICAgICAgICAgIHRvbmVzOiBhY3Rpb25Db25maWcudG9uZXMsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZDogdG9uZUlkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGVuYWJsZWRBSUFjdGlvbnMsXHJcbiAgICAgICAgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMsXHJcbiAgICAgICAgYWN0aXZlQWN0aW9uUHJvbXB0cyxcclxuICAgICAgICB0b25lQnlBY3Rpb24sXHJcbiAgICAgICAgaXNHZW5lcmF0aW5nLFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbixcclxuICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgIF0pO1xyXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBhZGRUZXh0T3JXcmFwLFxyXG4gICAgICAgICAgICBhZGRUZXh0LFxyXG4gICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24sXHJcbiAgICAgICAgfTtcclxuICAgIH0sIFthZGRUZXh0T3JXcmFwLCBhZGRUZXh0LCBjdXJyZW50VGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoaW5wdXRWYWx1ZSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChpbnB1dFZhbHVlIHx8ICcnKTtcclxuICAgIH0sIFtpbnB1dFZhbHVlLCBzZXRFZGl0b3JUZXh0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICghbGltaXQgfHwgIW9uRXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBuZXh0RXJyb3IgPSBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdCA/IExJTUlUX1JFQUNIRUQgOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiAnJztcclxuICAgICAgICBpZiAobGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID09PSBuZXh0RXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBsYXN0RW1pdHRlZEVkaXRvckVycm9yUmVmLmN1cnJlbnQgPSBuZXh0RXJyb3I7XHJcbiAgICAgICAgb25FcnJvcihuZXh0RXJyb3IpO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCBlcnJvciwgbGltaXQsIG9uRXJyb3JdKTtcclxuICAgIHJldHVybiAoX2pzeHMoT3V0ZXJDb250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4cyhFZGl0b3JGb290ZXJSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvckZvb3RlclRpdGxlLCB7IGNoaWxkcmVuOiBlZGl0b3JIZWFkZXIgPyAoX2pzeChUaXRsZVNtYWxsLCBPYmplY3QuYXNzaWduKHsgXCJkYXRhLXRlc3RcIjogXCJib2R5LXRleHQtZm9yLWVkaXQtdGVtcGxhdGVcIiB9LCB7IGNoaWxkcmVuOiBlZGl0b3JIZWFkZXIgfSkpKSA6IG51bGwgfSksIF9qc3hzKEVkaXRvckZvb3RlclJpZ2h0LCB7IGNoaWxkcmVuOiBbZXJyb3IgJiYgZXJyb3IgIT09IExJTUlUX1JFQUNIRUQgPyAoX2pzeHMoX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBbX2pzeChJbmZvSWNvbiwgeyB3aWR0aDogMTYsIGhlaWdodDogMTYsIGNvbG9yOiBDT0xPUlMuY29udGVudC5uZWdhdGl2ZSB9KSwgX2pzeChCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IGNvbG9yOiBDT0xPUlMuY29udGVudC5uZWdhdGl2ZSB9LCB7IGNoaWxkcmVuOiBlcnJvciB9KSldIH0pKSA6IG51bGwsIGxpbWl0ID8gKF9qc3hzKEJvZHlDYXB0aW9uLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IGVycm9yID09PSBMSU1JVF9SRUFDSEVEIHx8IGN1cnJlbnRUZXh0Lmxlbmd0aCA+IGxpbWl0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IENPTE9SUy5jb250ZW50Lm5lZ2F0aXZlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IFtjdXJyZW50VGV4dC5sZW5ndGgsIFwiL1wiLCBsaW1pdF0gfSkpKSA6IG51bGxdIH0pXSB9KSwgX2pzeHMoQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgaXNFcnJvcjogISFlcnJvciB9LCB7IGNoaWxkcmVuOiBbc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID8gKF9qc3hzKFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgcmVmOiBzdWdnZXN0aW9uU2Nyb2xsUmVmIH0sIHsgY2hpbGRyZW46IFtfanN4KFN1Z2dlc3Rpb25CYXNlbGluZVRleHQsIHsgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHsgX19odG1sOiBzdWdnZXN0aW9uQmFzZUh0bWwgfSB9KSwgaXNHZW5lcmF0aW5nID8gKF9qc3goU3VnZ2VzdGlvbkNhbmRpZGF0ZVRleHQsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtYnVzeVwiOiBcInRydWVcIiB9LCB7IGNoaWxkcmVuOiBfanN4cyhTdWdnZXN0aW9uQ2FuZGlkYXRlU2tlbGV0b24sIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiODQlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjY4JVwiIH0pXSB9KSB9KSkpIDogKF9qc3goU3VnZ2VzdGlvbkNhbmRpZGF0ZVRleHQsIHsgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19odG1sOiBhY3RpdmVDYW5kaWRhdGVIdG1sLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSkpLCBfanN4cyhTdWdnZXN0aW9uQ29udHJvbHNSb3csIHsgY2hpbGRyZW46IFtfanN4cyhTdWdnZXN0aW9uQ291bnRlciwgeyBjaGlsZHJlbjogW3N1Z2dlc3Rpb25JbmRleCArIDEsIFwiL1wiLCBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGhdIH0pLCBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUHJldmlvdXMgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBkaXNhYmxlZDogaXNQcmV2U3VnZ2VzdGlvbkRpc2FibGVkLCBvbkNsaWNrOiAoKSA9PiBzZXRTdWdnZXN0aW9uSW5kZXgoKGlkeCkgPT4gTWF0aC5tYXgoMCwgaWR4IC0gMSkpIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hldnJvbkxlZnRJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSksIF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiTGlrZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUZlZWRiYWNrKCdsaWtlJykgfSwgeyBjaGlsZHJlbjogX2pzeChUaHVtYnNVcEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzbGlrZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkRpc2xpa2Ugc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiBoYW5kbGVGZWVkYmFjaygnZGlzbGlrZScpIH0sIHsgY2hpbGRyZW46IF9qc3goVGh1bWJzRG93bkljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIGNhblJlZ2VuZXJhdGUgPyAoX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogaXNHZW5lcmF0aW5nID8gJ1JlZ2VuZXJhdGluZ+KApicgOiAnUmVnZW5lcmF0ZScsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25SZWdlbmVyYXRlQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIFwiYXJpYS1idXN5XCI6IGlzR2VuZXJhdGluZywgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzR2VuZXJhdGluZywgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3VnZ2VzdGlvbkFjdGlvblR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IGlzR2VuZXJhdGluZyA/IChfanN4KFJlZ2VuZXJhdGVJY29uU2hpbW1lciwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUgfSkpIDogKF9qc3goUmV3aW5kSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkpIH0pKSB9KSkpIDogbnVsbCwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNjYXJkXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiQWNjZXB0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogaGFuZGxlQWNjZXB0U3VnZ2VzdGlvbiB9LCB7IGNoaWxkcmVuOiBfanN4KENoZWNrSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKV0gfSldIH0pKSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFzdGVkVGV4dCA9IGUuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFzdGVkVGV4dC5sZW5ndGggPiBMQVJHRV9JTlBVVF9USFJFU0hPTEQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWwgPSB0ZXh0U3BhY2VSZWYuY3VycmVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IChfYSA9IGVsID09PSBudWxsIHx8IGVsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlbC5zZWxlY3Rpb25TdGFydCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSAoX2IgPSBlbCA9PT0gbnVsbCB8fCBlbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogZWwuc2VsZWN0aW9uRW5kKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcmVmZXIgbGl2ZSBET00gdmFsdWUg4oCUIGBjdXJyZW50VGV4dGAgY2FuIGxhZyB0aGUgdGV4dGFyZWEgZm9yIGJpZyBwYXN0ZXMuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFzZSA9IChfYyA9IGVsID09PSBudWxsIHx8IGVsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlbC52YWx1ZSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dFRleHQgPSBiYXNlLnNsaWNlKDAsIHN0YXJ0KSArIHBhc3RlZFRleHQgKyBiYXNlLnNsaWNlKGVuZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dChuZXh0VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChuZXh0VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FyZXQgPSBzdGFydCArIHBhc3RlZFRleHQubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YS5zZXRTZWxlY3Rpb25SYW5nZShjYXJldCwgY2FyZXQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChfYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlIGludmFsaWQgcmFuZ2UgaW4gZWRnZSBicm93c2Vyc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiAoX2pzeChXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIHsgYWN0aW9uczogYWN0aW9ucywgcmVmOiB0ZXh0U3BhY2VSZWYsIG9uQWN0aW9uU2VsZWN0OiBvbkFjdGlvblNlbGVjdCwgUmlnaHRDb21wb25lbnQ6IFJpZ2h0Q29tcG9uZW50LCByaWdodEFjdGlvbnNEaXNhYmxlZDogc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uIHx8IGlzR2VuZXJhdGluZywgb25FbW9qaUNsaWNrOiBvbkVtb2ppQWRkaXRpb24sIGFpQWN0aW9uczogYWlIZWFkZXJBY3Rpb25zLCBkaXNhYmxlQWxsQWN0aW9uczogc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uIHx8IGlzR2VuZXJhdGluZywgaW5zdHJ1Y3Rpb25BY3RpdmU6IGlzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIG9uQUlJbnN0cnVjdGlvbnNDbGljazogKCkgPT4gc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSh0cnVlKSwgb25BSVRvbmVDaGFuZ2U6IChhY3Rpb25UeXBlLCB0b25lSWQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRvbmVCeUFjdGlvbigocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW2FjdGlvblR5cGVdOiB0b25lSWQgfSkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQUlUb25lU2VsZWN0ID09PSBudWxsIHx8IG9uQUlUb25lU2VsZWN0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVG9uZVNlbGVjdChhY3Rpb25UeXBlLCB0b25lSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdG9uZUlkLCBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIG9uQUlBY3Rpb25DbGljazogKGFjdGlvblR5cGUsIGFjdGlvblZhcmlhbnQgPSBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNhbWUgYWN0aW9uIHNob3VsZCBub3QgcmV0cmlnZ2VyIGZyb20gY2hpcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnZW5lcmF0ZSBpcyBvbmx5IHZpYSBleHBsaWNpdCByZWdlbmVyYXRlIGNvbnRyb2wuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmV3IGFjdGlvbiBzdGFydHMgYSBmcmVzaCBzdWdnZXN0aW9uIHNlc3Npb24uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFjdGlvblZhcmlhbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFjdGlvblZhcmlhbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IH0pKV0gfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuZXhwb3J0IHsgQUlfVEFHX0NIQU5HRV9SQVRJT19USFJFU0hPTEQsIGNvbXB1dGVBaVRhZ09uQWNjZXB0LCBsZXZlbnNodGVpbkRpc3RhbmNlLCB9IGZyb20gJy4vYWkvYWlUYWcnO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1XaGF0c0FwcFRleHRFZGl0b3IuanMubWFwIl19 */")),E=a.default("button","production"===process.env.NODE_ENV?{target:"ea7i3sh0"}:{target:"ea7i3sh0",label:"InstructionSuggestionButton"})("width:100%;border:0;border-top:1px solid ",R.COLORS.stroke.primary,";background:",(I=>I.selected?"#e5f3e8":"transparent"),";color:",(I=>I.selected?"#1e6b34":R.COLORS.content.primary),";text-align:left;padding:12px 14px;font-size:14px;line-height:1.2;cursor:pointer;:first-of-type{border-top:0;}"+("production"===process.env.NODE_ENV?"":"/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIldoYXRzQXBwVGV4dEVkaXRvci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBeUxrRCIsImZpbGUiOiJXaGF0c0FwcFRleHRFZGl0b3IudHN4Iiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgX19hd2FpdGVyLCBfX3Jlc3QgfSBmcm9tIFwidHNsaWJcIjtcclxuaW1wb3J0IHsganN4IGFzIF9qc3gsIEZyYWdtZW50IGFzIF9GcmFnbWVudCwganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xyXG5pbXBvcnQgeyBrZXlmcmFtZXMgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XHJcbmltcG9ydCBzdHlsZWQgZnJvbSAnQGVtb3Rpb24vc3R5bGVkJztcclxuaW1wb3J0IENoZWNrSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9jaGVjay5zdmcnO1xyXG5pbXBvcnQgQ2hldnJvbkxlZnRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25MZWZ0LnN2Zyc7XHJcbmltcG9ydCBDaGV2cm9uUmlnaHRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2NoZXZyb25SaWdodC5zdmcnO1xyXG5pbXBvcnQgQ3Jvc3NJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL2Nyb3NzLnN2Zyc7XHJcbmltcG9ydCBFZGl0SWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9lZGl0LnN2Zyc7XHJcbmltcG9ydCBJbmZvSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy9pbmZvLnN2Zyc7XHJcbmltcG9ydCBSZXdpbmRJY29uIGZyb20gJ0BzcmMvYXNzZXRzL2ljb25zL3Jld2luZC5zdmcnO1xyXG5pbXBvcnQgVGh1bWJzRG93bkljb24gZnJvbSAnQHNyYy9hc3NldHMvaWNvbnMvdGh1bWJzX2Rvd24uc3ZnJztcclxuaW1wb3J0IFRodW1ic1VwSWNvbiBmcm9tICdAc3JjL2Fzc2V0cy9pY29ucy90aHVtYnNfdXAuc3ZnJztcclxuaW1wb3J0IHsgQmFzZVdoYXRzYXBwQ29udGVudExhbmdIZWxwZXIgfSBmcm9tIFwiLi4vLi4vaGVscGVycy9CYXNlV2hhdHNhcHBDb250ZW50TGFuZy5oZWxwZXJcIjtcclxuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZUltcGVyYXRpdmVIYW5kbGUsIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUsIH0gZnJvbSAncmVhY3QnO1xyXG5pbXBvcnQgeyBDT0xPUlMgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzL1RoZW1lXCI7XHJcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tICcuLi90b29sdGlwcy9Ub29sdGlwJztcclxuaW1wb3J0IHsgQm9keUNhcHRpb24sIFRpdGxlU21hbGwgfSBmcm9tICcuLi9UeXBvZ3JhcGh5U3R5bGUnO1xyXG5pbXBvcnQgeyBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlMsIERFRkFVTFRfSU5TVFJVQ1RJT05fU1VHR0VTVElPTlMsIHJlc29sdmVBY3Rpb25Qcm9tcHRzLCB9IGZyb20gJy4vYWkvYWN0aW9uUmVnaXN0cnknO1xyXG5pbXBvcnQgeyBjb21wdXRlQWlUYWdPbkFjY2VwdCB9IGZyb20gJy4vYWkvYWlUYWcnO1xyXG5pbXBvcnQgeyBidWlsZEFjdGlvblByb21wdCwgcmVxdWVzdEFJU3VnZ2VzdGlvbiB9IGZyb20gJy4vYWkvYXBpJztcclxuaW1wb3J0IHsgQ29udGFpbmVyLCBFZGl0b3JGb290ZXJSaWdodCwgRWRpdG9yRm9vdGVyUm93LCBFZGl0b3JGb290ZXJUaXRsZSwgT3V0ZXJDb250YWluZXIsIFRleHRTcGFjZSwgfSBmcm9tICcuL0N1c3RvbUVkaXRvci5zdHlsZWQnO1xyXG5pbXBvcnQgeyBBSUFjdGlvblZhcmlhbnQsIEFJRWRpdG9yQWN0aW9uVHlwZXMsIEVkaXRvckFjdGlvblR5cGVzLCBXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIH0gZnJvbSAnLi9XaGF0c0FwcFRleHRFZGl0b3JIZWFkZXInO1xyXG5jb25zdCBMSU1JVF9SRUFDSEVEID0gJ0NoYXJhY3RlciBsaW1pdCByZWFjaGVkJztcclxuY29uc3QgUkVQSFJBU0VfSURMRV9NUyA9IDMwMDA7XHJcbmNvbnN0IE1BWF9SRVBIUkFTRV9ISUdITElHSFRTID0gNTtcclxuY29uc3QgTUFYX1NVR0dFU1RJT05TID0gMztcclxuY29uc3QgTEFSR0VfSU5QVVRfVEhSRVNIT0xEID0gMTIwMDtcclxuY29uc3QgVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgPSAnUmVwaHJhc2UgdGhpcyBXaGF0c0FwcCB1dGlsaXR5IHRlbXBsYXRlIHRvIGltcHJvdmUgY2xhcml0eSBhbmQgcmVhZGFiaWxpdHkgd2hpbGUgcHJlc2VydmluZyB2YXJpYWJsZXMsIGludGVudCwgYW5kIGNvbXBsaWFuY2UuJztcclxuY29uc3Qgc2tlbGV0b25QdWxzZSA9IGtleWZyYW1lcyBgXG5cdDAlIHsgb3BhY2l0eTogMC41NTsgfVxuXHQ1MCUgeyBvcGFjaXR5OiAxOyB9XG5cdDEwMCUgeyBvcGFjaXR5OiAwLjU1OyB9XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRwYWRkaW5nOiAxNHB4IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogMTBweDtcblx0bWluLWhlaWdodDogMTUwcHg7XG5gO1xyXG5jb25zdCBFZGl0b3JTa2VsZXRvbkxpbmUgPSBzdHlsZWQuZGl2IGBcblx0aGVpZ2h0OiAxNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdHdpZHRoOiAkeyhwcm9wcykgPT4gcHJvcHMud2lkdGh9O1xuXHRiYWNrZ3JvdW5kOiAjZWNlY2VmO1xuXHRhbmltYXRpb246ICR7c2tlbGV0b25QdWxzZX0gMS4xcyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyID0gc3R5bGVkLmRpdiBgXG5cdHBhZGRpbmc6IDEycHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHRtYXgtaGVpZ2h0OiAyNjBweDtcblx0b3ZlcmZsb3cteTogc2Nyb2xsO1xuXHRzY3JvbGxiYXItd2lkdGg6IHRoaW47XG5cdHNjcm9sbGJhci1jb2xvcjogI2M4YzhjZiB0cmFuc3BhcmVudDtcblx0Ojotd2Via2l0LXNjcm9sbGJhciB7XG5cdFx0d2lkdGg6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcblx0XHRiYWNrZ3JvdW5kOiAjYzhjOGNmO1xuXHRcdGJvcmRlci1yYWRpdXM6IDhweDtcblx0fVxuXHQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcblx0XHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0fVxuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkJhc2VsaW5lVGV4dCA9IHN0eWxlZC5kaXYgYFxuXHR0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDtcblx0Y29sb3I6ICR7Q09MT1JTLmNvbnRlbnQuc2Vjb25kYXJ5fTtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25DYW5kaWRhdGVUZXh0ID0gc3R5bGVkLmRpdiBgXG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkNhbmRpZGF0ZVNrZWxldG9uID0gc3R5bGVkLmRpdiBgXG5cdGRpc3BsYXk6IGZsZXg7XG5cdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cdGdhcDogOHB4O1xuXHR3aWR0aDogMTAwJTtcblx0bWluLWhlaWdodDogNDBweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db250cm9sc1JvdyA9IHN0eWxlZC5kaXYgYFxuXHRkaXNwbGF5OiBmbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRnYXA6IDZweDtcbmA7XHJcbmNvbnN0IFN1Z2dlc3Rpb25Db3VudGVyID0gc3R5bGVkLnNwYW4gYFxuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0Zm9udC1zaXplOiAxNHB4O1xuYDtcclxuY29uc3QgU3VnZ2VzdGlvbkljb25CdXR0b24gPSBzdHlsZWQuYnV0dG9uIGBcblx0Ym9yZGVyOiAwO1xuXHRiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcblx0cGFkZGluZzogNnB4O1xuXHRib3JkZXItcmFkaXVzOiA2cHg7XG5cdGRpc3BsYXk6IGlubGluZS1mbGV4O1xuXHRhbGlnbi1pdGVtczogY2VudGVyO1xuXHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0Y3Vyc29yOiBwb2ludGVyO1xuXHRjb2xvcjogJHtDT0xPUlMuY29udGVudC5wcmltYXJ5fTtcblx0dHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjEycyBlYXNlO1xuXHQ6bm90KDpkaXNhYmxlZCk6aG92ZXIge1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICR7Q09MT1JTLnN1cmZhY2UuaG92ZXJlZH07XG5cdH1cblx0OmRpc2FibGVkIHtcblx0XHRvcGFjaXR5OiAwLjM1O1xuXHRcdGN1cnNvcjogbm90LWFsbG93ZWQ7XG5cdH1cbmA7XHJcbi8qKiBSZWdlbmVyYXRlIHN0YXlzIGZ1bGwgb3BhY2l0eSB3aGlsZSBkaXNhYmxlZCBzbyB0aGUgbG9hZGluZyBzaGltbWVyIHN0YXlzIHZpc2libGUgKHNhbWUgcHVsc2UgYXMgZWRpdG9yIHNrZWxldG9uKS4gKi9cclxuY29uc3QgU3VnZ2VzdGlvblJlZ2VuZXJhdGVCdXR0b24gPSBzdHlsZWQoU3VnZ2VzdGlvbkljb25CdXR0b24pIGBcblx0OmRpc2FibGVkIHtcblx0XHRvcGFjaXR5OiAxO1xuXHRcdGN1cnNvcjogd2FpdDtcblx0fVxuYDtcclxuY29uc3QgUmVnZW5lcmF0ZUljb25TaGltbWVyID0gc3R5bGVkLmRpdiBgXG5cdHdpZHRoOiAxNHB4O1xuXHRoZWlnaHQ6IDE0cHg7XG5cdGJvcmRlci1yYWRpdXM6IDRweDtcblx0YmFja2dyb3VuZDogI2VjZWNlZjtcblx0ZmxleC1zaHJpbms6IDA7XG5cdGFuaW1hdGlvbjogJHtza2VsZXRvblB1bHNlfSAxLjFzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xuYDtcclxuLyoqIFNhbWUgYm90dG9tIHRvb2xiYXIgc2xvdCBhcyBgV2hhdHNBcHBUZXh0RWRpdG9ySGVhZGVyYCDigJQgcmVwbGFjZXMgdGhlIGZ1bGwgaWNvbi9BSSBwYW5lbCB3aGlsZSBvcGVuLiAqL1xyXG5jb25zdCBJbnN0cnVjdGlvbkNvbnRhaW5lciA9IHN0eWxlZC5kaXYgYFxuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0ZGlzcGxheTogZmxleDtcblx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcblx0cGFkZGluZzogOHB4IDEycHg7XG5cdGdhcDogMTBweDtcblx0Ym9yZGVyLXJhZGl1czogMCAwIDRweCA0cHg7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uSW5wdXRSb3cgPSBzdHlsZWQuZGl2IGBcblx0Ym9yZGVyOiAxcHggc29saWQgI2Y1YTRjMDtcblx0Ym9yZGVyLXJhZGl1czogMTBweDtcblx0cGFkZGluZzogOHB4IDEwcHg7XG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcblx0YmFja2dyb3VuZDogJHtDT0xPUlMuc3VyZmFjZS5zdGFuZGFyZH07XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvbklucHV0ID0gc3R5bGVkLmlucHV0IGBcblx0ZmxleDogMTtcblx0bWluLXdpZHRoOiAwO1xuXHRib3JkZXI6IDA7XG5cdG91dGxpbmU6IG5vbmU7XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnByaW1hcnl9O1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25BY3Rpb25zID0gc3R5bGVkLmRpdiBgXG5cdGRpc3BsYXk6IGZsZXg7XG5cdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdGdhcDogMTBweDtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uQ2FuY2VsID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMDtcblx0YmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG5cdGNvbG9yOiAke0NPTE9SUy5jb250ZW50LnNlY29uZGFyeX07XG5cdGZvbnQtc2l6ZTogMTRweDtcblx0Zm9udC13ZWlnaHQ6IDUwMDtcblx0cGFkZGluZzogMDtcblx0Y3Vyc29yOiBwb2ludGVyO1xuYDtcclxuY29uc3QgSW5zdHJ1Y3Rpb25JbXByb3ZlID0gc3R5bGVkLmJ1dHRvbiBgXG5cdGJvcmRlcjogMXB4IHNvbGlkICM1ZDNhNzI7XG5cdGNvbG9yOiAjNWQzYTcyO1xuXHRiYWNrZ3JvdW5kOiAke0NPTE9SUy5zdXJmYWNlLnN0YW5kYXJkfTtcblx0Ym9yZGVyLXJhZGl1czogOHB4O1xuXHRwYWRkaW5nOiA4cHggMTRweDtcblx0Zm9udC1zaXplOiAxNHB4O1xuXHRsaW5lLWhlaWdodDogMS4xO1xuXHRmb250LXdlaWdodDogNjAwO1xuXHRjdXJzb3I6IHBvaW50ZXI7XG5gO1xyXG5jb25zdCBJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0ID0gc3R5bGVkLmRpdiBgXG5cdG1hcmdpbi10b3A6IDEwcHg7XG5cdGJvcmRlci1yYWRpdXM6IDEycHg7XG5cdGJhY2tncm91bmQ6ICR7Q09MT1JTLnN1cmZhY2Uuc3RhbmRhcmR9O1xuXHRib3gtc2hhZG93OiAwIDZweCAxOHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcblx0b3ZlcmZsb3c6IGhpZGRlbjtcbmA7XHJcbmNvbnN0IEluc3RydWN0aW9uU3VnZ2VzdGlvbkJ1dHRvbiA9IHN0eWxlZC5idXR0b24gYFxuXHR3aWR0aDogMTAwJTtcblx0Ym9yZGVyOiAwO1xuXHRib3JkZXItdG9wOiAxcHggc29saWQgJHtDT0xPUlMuc3Ryb2tlLnByaW1hcnl9O1xuXHRiYWNrZ3JvdW5kOiAkeyhwcm9wcykgPT4gKHByb3BzLnNlbGVjdGVkID8gJyNlNWYzZTgnIDogJ3RyYW5zcGFyZW50Jyl9O1xuXHRjb2xvcjogJHsocHJvcHMpID0+IChwcm9wcy5zZWxlY3RlZCA/ICcjMWU2YjM0JyA6IENPTE9SUy5jb250ZW50LnByaW1hcnkpfTtcblx0dGV4dC1hbGlnbjogbGVmdDtcblx0cGFkZGluZzogMTJweCAxNHB4O1xuXHRmb250LXNpemU6IDE0cHg7XG5cdGxpbmUtaGVpZ2h0OiAxLjI7XG5cdGN1cnNvcjogcG9pbnRlcjtcblx0OmZpcnN0LW9mLXR5cGUge1xuXHRcdGJvcmRlci10b3A6IDA7XG5cdH1cbmA7XHJcbmNvbnN0IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nID0gbmV3IEJhc2VXaGF0c2FwcENvbnRlbnRMYW5nSGVscGVyKCk7XHJcbmNvbnN0IFdpbGRDYXJkTWFwID0ge1xyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLkJPTERdOiAnKicsXHJcbiAgICBbRWRpdG9yQWN0aW9uVHlwZXMuSVRBTElDXTogJ18nLFxyXG4gICAgW0VkaXRvckFjdGlvblR5cGVzLlNUUklLRVRIUk9VR0hdOiAnficsXHJcbn07XHJcbmZ1bmN0aW9uIGdldEhpZ2hsaWdodFN0b3JhZ2VLZXkoZWRpdG9ySW5zdGFuY2VLZXkpIHtcclxuICAgIHJldHVybiBgd2hhdHNhcHAtZWRpdG9yLXJlcGhyYXNlLWhpZ2hsaWdodC0ke2VkaXRvckluc3RhbmNlS2V5IHx8ICdkZWZhdWx0J31gO1xyXG59XHJcbmV4cG9ydCBjb25zdCBXaGF0c0FwcFRleHRFZGl0b3IgPSBSZWFjdC5mb3J3YXJkUmVmKChfYSwgcmVmKSA9PiB7XHJcbiAgICB2YXIgeyBvbkNoYW5nZSwgb25DbGlja1ZhcmlhYmxlLCB0ZXh0OiBpbnB1dFZhbHVlLCBSaWdodENvbXBvbmVudCwgZXJyb3IsIGxpbWl0LCBvbkVycm9yLCByb3dzLCBhY3Rpb25zLCBlZGl0b3JJbnN0YW5jZUtleSwgdGVtcGxhdGVUeXBlID0gJ21hcmtldGluZycsIHRlbXBsYXRlSWQsIHJlcXVlc3RFeGVjdXRvciwgYmFzZVVybCwgZW5kcG9pbnRQYXRoLCB1c2VDYXNlLCBzdG9yZUlkLCBhcGlBZGFwdGVyLCBjb252ZXJzYXRpb25JZCA9ICd3aGF0c2FwcC10ZW1wbGF0ZS1lZGl0b3InLCBzeXN0ZW1JZCA9ICd3aGF0c2FwcC13cml0ZXInLCBpbnRlbnQgPSAnZGVmYXVsdCcsIGVuYWJsZWRBSUFjdGlvbnMgPSBbXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSxcclxuICAgICAgICBBSUVkaXRvckFjdGlvblR5cGVzLlNIT1JURU4sXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FWFBBTkQsXHJcbiAgICAgICAgQUlFZGl0b3JBY3Rpb25UeXBlcy5FTU9KSUZZLFxyXG4gICAgXSwgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMgPSBmYWxzZSwgcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCBhaUFjdGlvbk1pbkNoYXJzLCBpbnN0cnVjdGlvblN1Z2dlc3Rpb25zID0gREVGQVVMVF9JTlNUUlVDVElPTl9TVUdHRVNUSU9OUywgb25BSUV2ZW50LCBvbkFJVGFnQ29tcHV0ZWQsIHByZWZpbGxXYXNBaUdlbmVyYXRlZCA9IGZhbHNlLCBlZGl0b3JIZWFkZXIsIG9uQUlUb25lU2VsZWN0LCBvbkFJQWN0aW9uUmVxdWVzdCwgb25CdWlsZEFJUHJvbXB0IH0gPSBfYSwgdGV4dEFyZWFQcm9wcyA9IF9fcmVzdChfYSwgW1wib25DaGFuZ2VcIiwgXCJvbkNsaWNrVmFyaWFibGVcIiwgXCJ0ZXh0XCIsIFwiUmlnaHRDb21wb25lbnRcIiwgXCJlcnJvclwiLCBcImxpbWl0XCIsIFwib25FcnJvclwiLCBcInJvd3NcIiwgXCJhY3Rpb25zXCIsIFwiZWRpdG9ySW5zdGFuY2VLZXlcIiwgXCJ0ZW1wbGF0ZVR5cGVcIiwgXCJ0ZW1wbGF0ZUlkXCIsIFwicmVxdWVzdEV4ZWN1dG9yXCIsIFwiYmFzZVVybFwiLCBcImVuZHBvaW50UGF0aFwiLCBcInVzZUNhc2VcIiwgXCJzdG9yZUlkXCIsIFwiYXBpQWRhcHRlclwiLCBcImNvbnZlcnNhdGlvbklkXCIsIFwic3lzdGVtSWRcIiwgXCJpbnRlbnRcIiwgXCJlbmFibGVkQUlBY3Rpb25zXCIsIFwiZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnNcIiwgXCJwcm9tcHRPdmVycmlkZXNcIiwgXCJyZXBocmFzZVRvbmVzXCIsIFwiYWlBY3Rpb25NaW5DaGFyc1wiLCBcImluc3RydWN0aW9uU3VnZ2VzdGlvbnNcIiwgXCJvbkFJRXZlbnRcIiwgXCJvbkFJVGFnQ29tcHV0ZWRcIiwgXCJwcmVmaWxsV2FzQWlHZW5lcmF0ZWRcIiwgXCJlZGl0b3JIZWFkZXJcIiwgXCJvbkFJVG9uZVNlbGVjdFwiLCBcIm9uQUlBY3Rpb25SZXF1ZXN0XCIsIFwib25CdWlsZEFJUHJvbXB0XCJdKTtcclxuICAgIGNvbnN0IHRleHRTcGFjZVJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIGNvbnN0IFtjdXJyZW50VGV4dCwgc2V0Q3VycmVudFRleHRdID0gdXNlU3RhdGUoaW5wdXRWYWx1ZSB8fCAnJyk7XHJcbiAgICBjb25zdCBbaXNSZXBocmFzZUhpZ2hsaWdodGVkLCBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW3JlcGhyYXNlSGlnaGxpZ2h0Q291bnQsIHNldFJlcGhyYXNlSGlnaGxpZ2h0Q291bnRdID0gdXNlU3RhdGUoMCk7XHJcbiAgICBjb25zdCBbaXNHZW5lcmF0aW5nLCBzZXRJc0dlbmVyYXRpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2lzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGVdID0gdXNlU3RhdGUoZmFsc2UpO1xyXG4gICAgY29uc3QgW2luc3RydWN0aW9uVGV4dCwgc2V0SW5zdHJ1Y3Rpb25UZXh0XSA9IHVzZVN0YXRlKCcnKTtcclxuICAgIGNvbnN0IFt0b25lQnlBY3Rpb24sIHNldFRvbmVCeUFjdGlvbl0gPSB1c2VTdGF0ZSh7fSk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkJhc2VUZXh0LCBzZXRTdWdnZXN0aW9uQmFzZVRleHRdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBbc3VnZ2VzdGlvbkNhbmRpZGF0ZXMsIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzXSA9IHVzZVN0YXRlKFtdKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uSW5kZXgsIHNldFN1Z2dlc3Rpb25JbmRleF0gPSB1c2VTdGF0ZSgwKTtcclxuICAgIGNvbnN0IFtzdWdnZXN0aW9uQWN0aW9uVHlwZSwgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGVdID0gdXNlU3RhdGUobnVsbCk7XHJcbiAgICBjb25zdCBzdWdnZXN0aW9uU2Nyb2xsUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgcmVwaHJhc2VJZGxlUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgaGlnaGxpZ2h0UmVzZXRSZWYgPSB1c2VSZWYobnVsbCk7XHJcbiAgICAvKipcclxuICAgICAqIFByaW9yIGVsaWdpYmlsaXR5IGZvciByZXBocmFzZSBudWRnZSAobnVsbCA9IG5vdCBpbml0aWFsaXplZCkuXHJcbiAgICAgKiBNYXRjaGVzIHRoZSBjaGlwOiBub24tZW1wdHkgdHJpbSBhbmQgbGVuZ3RoIOKJpSBtaW4g4oCUIHNhbWUgYXMgYGFpSGVhZGVyQWN0aW9uc2AgZGlzYWJsZWQgcnVsZXMuXHJcbiAgICAgKi9cclxuICAgIGNvbnN0IHByZXZSZXBocmFzZUVsaWdpYmxlUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgZGVmZXJyZWRIdG1sUmVmID0gdXNlUmVmKG51bGwpO1xyXG4gICAgY29uc3QgbGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZiA9IHVzZVJlZihudWxsKTtcclxuICAgIC8qKiBGaXJzdCBhY2NlcHQgYWZ0ZXIgZnVsbC1BSSBwcmVmaWxsIChgcHJlZmlsbFdhc0FpR2VuZXJhdGVkYCk7IGNsZWFyZWQgYWZ0ZXIgb25lIGFjY2VwdC4gKi9cclxuICAgIGNvbnN0IGluaXRpYWxBaVByZWZpbGxQaGFzZVJlZiA9IHVzZVJlZighIXByZWZpbGxXYXNBaUdlbmVyYXRlZCk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGluaXRpYWxBaVByZWZpbGxQaGFzZVJlZi5jdXJyZW50ID0gISFwcmVmaWxsV2FzQWlHZW5lcmF0ZWQ7XHJcbiAgICB9LCBbcHJlZmlsbFdhc0FpR2VuZXJhdGVkLCBlZGl0b3JJbnN0YW5jZUtleV0pO1xyXG4gICAgY29uc3QgYWN0aXZlQWN0aW9uUHJvbXB0cyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiByZXNvbHZlQWN0aW9uUHJvbXB0cyh0ZW1wbGF0ZVR5cGUsIHByb21wdE92ZXJyaWRlcywgcmVwaHJhc2VUb25lcyk7XHJcbiAgICB9LCBbcHJvbXB0T3ZlcnJpZGVzLCByZXBocmFzZVRvbmVzLCB0ZW1wbGF0ZVR5cGVdKTtcclxuICAgIGNvbnN0IGZpbHRlcmVkSW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgIGlmICghcXVlcnkpXHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICByZXR1cm4gaW5zdHJ1Y3Rpb25TdWdnZXN0aW9ucy5maWx0ZXIoKHN1Z2dlc3Rpb24pID0+IHN1Z2dlc3Rpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxdWVyeSkpO1xyXG4gICAgfSwgW2luc3RydWN0aW9uU3VnZ2VzdGlvbnMsIGluc3RydWN0aW9uVGV4dF0pO1xyXG4gICAgY29uc3QgbWluQ2hhcnNCeUFjdGlvbiA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSUyksIChhaUFjdGlvbk1pbkNoYXJzIHx8IHt9KSk7XHJcbiAgICB9LCBbYWlBY3Rpb25NaW5DaGFyc10pO1xyXG4gICAgY29uc3QgcmVwaHJhc2VNaW5DaGFycyA9IG1pbkNoYXJzQnlBY3Rpb25bQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV0gfHxcclxuICAgICAgICBERUZBVUxUX0FJX0FDVElPTl9NSU5fQ0hBUlNbQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRV07XHJcbiAgICBjb25zdCBlbWl0QUlFdmVudCA9IHVzZUNhbGxiYWNrKChuYW1lLCBwYXlsb2FkKSA9PiB7XHJcbiAgICAgICAgb25BSUV2ZW50ID09PSBudWxsIHx8IG9uQUlFdmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25BSUV2ZW50KG5hbWUsIHBheWxvYWQpO1xyXG4gICAgfSwgW29uQUlFdmVudF0pO1xyXG4gICAgY29uc3Qgc2V0RWRpdG9yVGV4dCA9IHVzZUNhbGxiYWNrKChuZXh0VGV4dCkgPT4ge1xyXG4gICAgICAgIHNldEN1cnJlbnRUZXh0KChwcmV2KSA9PiAocHJldiA9PT0gbmV4dFRleHQgPyBwcmV2IDogbmV4dFRleHQpKTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGVtaXRDaGFuZ2VXaXRoR3VhcmQgPSB1c2VDYWxsYmFjaygobmV4dFRleHQpID0+IHtcclxuICAgICAgICBpZiAoZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGRlZmVycmVkSHRtbFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG5leHRUZXh0Lmxlbmd0aCA+IExBUkdFX0lOUFVUX1RIUkVTSE9MRCkge1xyXG4gICAgICAgICAgICBvbkNoYW5nZSA9PT0gbnVsbCB8fCBvbkNoYW5nZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25DaGFuZ2UobmV4dFRleHQsIG5leHRUZXh0KTtcclxuICAgICAgICAgICAgZGVmZXJyZWRIdG1sUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlID09PSBudWxsIHx8IG9uQ2hhbmdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkNoYW5nZShuZXh0VGV4dCwgYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChuZXh0VGV4dCkpO1xyXG4gICAgICAgICAgICB9LCAxNik7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgb25DaGFuZ2UgPT09IG51bGwgfHwgb25DaGFuZ2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uQ2hhbmdlKG5leHRUZXh0LCBiYXNlV2hhdHNhcHBDb250ZW50TGFuZy5nZXRIVE1MKG5leHRUZXh0KSk7XHJcbiAgICB9LCBbb25DaGFuZ2VdKTtcclxuICAgIGNvbnN0IGNsZWFyU3VnZ2VzdGlvblNlc3Npb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkJhc2VUZXh0KG51bGwpO1xyXG4gICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtdKTtcclxuICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgoMCk7XHJcbiAgICAgICAgc2V0U3VnZ2VzdGlvbkFjdGlvblR5cGUobnVsbCk7XHJcbiAgICB9LCBbXSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSGlnaGxpZ2h0Q291bnQgPj0gTUFYX1JFUEhSQVNFX0hJR0hMSUdIVFMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBuZXh0Q291bnQgPSByZXBocmFzZUhpZ2hsaWdodENvdW50ICsgMTtcclxuICAgICAgICBzZXRSZXBocmFzZUhpZ2hsaWdodENvdW50KG5leHRDb3VudCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIGVkaXRvckluc3RhbmNlS2V5KSB7XHJcbiAgICAgICAgICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oZ2V0SGlnaGxpZ2h0U3RvcmFnZUtleShlZGl0b3JJbnN0YW5jZUtleSksIFN0cmluZyhuZXh0Q291bnQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgc2V0SXNSZXBocmFzZUhpZ2hsaWdodGVkKHRydWUpO1xyXG4gICAgICAgIGlmIChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChoaWdobGlnaHRSZXNldFJlZi5jdXJyZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgIH0sIDEyMDApO1xyXG4gICAgfSwgW2VkaXRvckluc3RhbmNlS2V5LCByZXBocmFzZUhpZ2hsaWdodENvdW50XSk7XHJcbiAgICBjb25zdCB0cmlnZ2VyUmVwaHJhc2VIaWdobGlnaHRSZWYgPSB1c2VSZWYodHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0KTtcclxuICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50ID0gdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0O1xyXG4gICAgZnVuY3Rpb24gaGFuZGxlT25DaGFuZ2UoZSkge1xyXG4gICAgICAgIGNvbnN0IHRleHQgPSBlLnRhcmdldC52YWx1ZTtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBzZXRDYXJldFBvc2l0aW9uKGNhcmV0UG9zKSB7XHJcbiAgICAgICAgY29uc3QgZWxlbSA9IHRleHRTcGFjZVJlZiA9PT0gbnVsbCB8fCB0ZXh0U3BhY2VSZWYgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRleHRTcGFjZVJlZi5jdXJyZW50O1xyXG4gICAgICAgIGlmIChlbGVtICE9IG51bGwpIHtcclxuICAgICAgICAgICAgaWYgKGVsZW0uc2VsZWN0aW9uU3RhcnQpIHtcclxuICAgICAgICAgICAgICAgIGVsZW0uZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIGVsZW0uc2VsZWN0aW9uRW5kID0gY2FyZXRQb3M7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgZWxlbS5mb2N1cygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIG9uQWN0aW9uU2VsZWN0KGFjdGlvblR5cGUpIHtcclxuICAgICAgICBjb25zdCB3aWxkQ2FyZCA9IFdpbGRDYXJkTWFwW2FjdGlvblR5cGVdO1xyXG4gICAgICAgIGlmICh3aWxkQ2FyZCAmJiB0ZXh0U3BhY2VSZWYuY3VycmVudCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IHRleHQgfSA9IGluc2VydFRleHRBdEluZGV4KHdpbGRDYXJkLCBzdGFydCk7XHJcbiAgICAgICAgICAgICAgICBzZXRDYXJldFBvc2l0aW9uKHN0YXJ0ICsgMSk7XHJcbiAgICAgICAgICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkKHRleHQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyB0ZXh0IH0gPSBhZGRUZXh0T3JXcmFwKHdpbGRDYXJkKTtcclxuICAgICAgICAgICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBvbkVtb2ppQWRkaXRpb24oZW1vamkpIHtcclxuICAgICAgICBjb25zdCB7IHRleHQgfSA9IGFkZFRleHQoZW1vamkpO1xyXG4gICAgICAgIGVtaXRDaGFuZ2VXaXRoR3VhcmQodGV4dCk7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBhZGRUZXh0T3JXcmFwKHRleHRUb0FkZCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgbGV0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICBpZiAodGV4dFNwYWNlUmVmLmN1cnJlbnQgJiYgdGV4dFRvQWRkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQuc2VsZWN0aW9uU3RhcnQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvbkVuZDtcclxuICAgICAgICAgICAgY29uc3Qgd2lsZENhcmQgPSB0ZXh0VG9BZGQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICAvKiogbm90aGluZyBpcyBzZWxlY3RlZCAqL1xyXG4gICAgICAgICAgICAgICAgLyoqIHNvIGFwcGVuZCB0aGUgd2lsZGNhcmQgYXQgdGhlIGVuZCAqL1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGFkZFRleHQod2lsZENhcmQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGV4dCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLndyYXBwV2lsZGNhcmQoc3RhcnQsIGVuZCwgd2lsZENhcmQsIHRleHQpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaHRtbCA9IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwodGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdGV4dCwgaHRtbCB9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7IHRleHQ6IHRleHQsIGh0bWw6IHRleHQgfTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGFkZFRleHQodGV4dFRvQWRkKSB7XHJcbiAgICAgICAgdmFyIF9hLCBfYjtcclxuICAgICAgICBjb25zdCB0ZXh0ID0gKF9iID0gKF9hID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJyc7XHJcbiAgICAgICAgaWYgKHRleHRTcGFjZVJlZi5jdXJyZW50ICYmIHRleHRUb0FkZCkge1xyXG4gICAgICAgICAgICBjb25zdCBzdGFydCA9IHRleHRTcGFjZVJlZi5jdXJyZW50LnNlbGVjdGlvblN0YXJ0O1xyXG4gICAgICAgICAgICBjb25zdCBlbmQgPSB0ZXh0U3BhY2VSZWYuY3VycmVudC5zZWxlY3Rpb25FbmQ7XHJcbiAgICAgICAgICAgIGlmIChzdGFydCA9PT0gZW5kKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5zZXJ0VGV4dEF0SW5kZXgodGV4dFRvQWRkLCBzdGFydCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHsgdGV4dDogdGV4dCwgaHRtbDogdGV4dCB9O1xyXG4gICAgfVxyXG4gICAgZnVuY3Rpb24gaW5zZXJ0VGV4dEF0SW5kZXgodGV4dFRvQWRkLCBpbmRleCkge1xyXG4gICAgICAgIHZhciBfYSwgX2I7XHJcbiAgICAgICAgbGV0IHRleHQgPSAoX2IgPSAoX2EgPSB0ZXh0U3BhY2VSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnZhbHVlKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAnJztcclxuICAgICAgICB0ZXh0ID0gdGV4dC5zbGljZSgwLCBpbmRleCkgKyB0ZXh0VG9BZGQgKyB0ZXh0LnNsaWNlKGluZGV4KTtcclxuICAgICAgICBjb25zdCBodG1sID0gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTCh0ZXh0KTtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KHRleHQpO1xyXG4gICAgICAgIHJldHVybiB7IHRleHQsIGh0bWwgfTtcclxuICAgIH1cclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnIHx8ICFlZGl0b3JJbnN0YW5jZUtleSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNhY2hlZCA9IE51bWJlcihzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKGdldEhpZ2hsaWdodFN0b3JhZ2VLZXkoZWRpdG9ySW5zdGFuY2VLZXkpKSB8fFxyXG4gICAgICAgICAgICAnMCcpO1xyXG4gICAgICAgIGlmICghTnVtYmVyLmlzTmFOKGNhY2hlZCkpIHtcclxuICAgICAgICAgICAgc2V0UmVwaHJhc2VIaWdobGlnaHRDb3VudChjYWNoZWQpO1xyXG4gICAgICAgIH1cclxuICAgIH0sIFtlZGl0b3JJbnN0YW5jZUtleV0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBjb25zdCBlbGlnaWJsZSA9ICEhY3VycmVudFRleHQudHJpbSgpICYmIGN1cnJlbnRUZXh0Lmxlbmd0aCA+PSByZXBocmFzZU1pbkNoYXJzO1xyXG4gICAgICAgIGlmIChwcmV2UmVwaHJhc2VFbGlnaWJsZVJlZi5jdXJyZW50ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHByZXZSZXBocmFzZUVsaWdpYmxlUmVmLmN1cnJlbnQgPSBlbGlnaWJsZTtcclxuICAgICAgICAgICAgaWYgKGVsaWdpYmxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50KCk7XHJcbiAgICAgICAgICAgICAgICB9LCBSRVBIUkFTRV9JRExFX01TKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZWxpZ2libGUpIHtcclxuICAgICAgICAgICAgcHJldlJlcGhyYXNlRWxpZ2libGVSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzZXRJc1JlcGhyYXNlSGlnaGxpZ2h0ZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAocmVwaHJhc2VJZGxlUmVmLmN1cnJlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgICAgICByZXBocmFzZUlkbGVSZWYuY3VycmVudCA9IG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjcm9zc2VkVGhyZXNob2xkID0gIXByZXZSZXBocmFzZUVsaWdpYmxlUmVmLmN1cnJlbnQgJiYgZWxpZ2libGU7XHJcbiAgICAgICAgcHJldlJlcGhyYXNlRWxpZ2libGVSZWYuY3VycmVudCA9IHRydWU7XHJcbiAgICAgICAgaWYgKGNyb3NzZWRUaHJlc2hvbGQpIHtcclxuICAgICAgICAgICAgdHJpZ2dlclJlcGhyYXNlSGlnaGxpZ2h0UmVmLmN1cnJlbnQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KSB7XHJcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXBocmFzZUlkbGVSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRyaWdnZXJSZXBocmFzZUhpZ2hsaWdodFJlZi5jdXJyZW50KCk7XHJcbiAgICAgICAgfSwgUkVQSFJBU0VfSURMRV9NUyk7XHJcbiAgICB9LCBbY3VycmVudFRleHQsIHJlcGhyYXNlTWluQ2hhcnNdKTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KVxyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHJlcGhyYXNlSWRsZVJlZi5jdXJyZW50KTtcclxuICAgICAgICAgICAgaWYgKGhpZ2hsaWdodFJlc2V0UmVmLmN1cnJlbnQpXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQoaGlnaGxpZ2h0UmVzZXRSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGlmIChkZWZlcnJlZEh0bWxSZWYuY3VycmVudClcclxuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dChkZWZlcnJlZEh0bWxSZWYuY3VycmVudCk7XHJcbiAgICAgICAgfTtcclxuICAgIH0sIFtdKTtcclxuICAgIGNvbnN0IGFjdGl2ZUNhbmRpZGF0ZSA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzW3N1Z2dlc3Rpb25JbmRleF0gfHwgJyc7XHJcbiAgICBjb25zdCBzdWdnZXN0aW9uQmFzZUh0bWwgPSB1c2VNZW1vKCgpID0+IGJhc2VXaGF0c2FwcENvbnRlbnRMYW5nLmdldEhUTUwoc3VnZ2VzdGlvbkJhc2VUZXh0IHx8ICcnKSwgW3N1Z2dlc3Rpb25CYXNlVGV4dF0pO1xyXG4gICAgY29uc3QgYWN0aXZlQ2FuZGlkYXRlSHRtbCA9IHVzZU1lbW8oKCkgPT4gYmFzZVdoYXRzYXBwQ29udGVudExhbmcuZ2V0SFRNTChhY3RpdmVDYW5kaWRhdGUpLCBbYWN0aXZlQ2FuZGlkYXRlXSk7XHJcbiAgICBjb25zdCBjYW5SZWdlbmVyYXRlID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDwgTUFYX1NVR0dFU1RJT05TO1xyXG4gICAgY29uc3Qgc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID0gISFzdWdnZXN0aW9uQmFzZVRleHQgJiYgc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoID4gMDtcclxuICAgIGNvbnN0IGlzUHJldlN1Z2dlc3Rpb25EaXNhYmxlZCA9IHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCA8PSAxIHx8IHN1Z2dlc3Rpb25JbmRleCA8PSAwO1xyXG4gICAgY29uc3QgaXNOZXh0U3VnZ2VzdGlvbkRpc2FibGVkID0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIDw9IDEgfHxcclxuICAgICAgICBzdWdnZXN0aW9uSW5kZXggPj0gc3VnZ2VzdGlvbkNhbmRpZGF0ZXMubGVuZ3RoIC0gMTtcclxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBub2RlID0gc3VnZ2VzdGlvblNjcm9sbFJlZi5jdXJyZW50O1xyXG4gICAgICAgIGlmICghbm9kZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIG5vZGUuc2Nyb2xsVG9wID0gbm9kZS5zY3JvbGxIZWlnaHQ7XHJcbiAgICB9LCBbYWN0aXZlQ2FuZGlkYXRlLCBzaG91bGRTaG93U3VnZ2VzdGlvblNlc3Npb24sIGlzR2VuZXJhdGluZ10pO1xyXG4gICAgY29uc3QgZXhlY3V0ZUFJQWN0aW9uID0gdXNlQ2FsbGJhY2soKGFjdGlvblR5cGUsIHJlZ2VuZXJhdGVFeGlzdGluZyA9IGZhbHNlLCBpbnN0cnVjdGlvbk92ZXJyaWRlLCB0b25lT3ZlcnJpZGVJZCwgYWN0aW9uVmFyaWFudCA9IEFJQWN0aW9uVmFyaWFudC5ERUZBVUxUKSA9PiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcclxuICAgICAgICB2YXIgX2IsIF9jLCBfZDtcclxuICAgICAgICBpZiAoIW9uQUlBY3Rpb25SZXF1ZXN0ICYmXHJcbiAgICAgICAgICAgICFhcGlBZGFwdGVyICYmXHJcbiAgICAgICAgICAgICghcmVxdWVzdEV4ZWN1dG9yIHx8ICFiYXNlVXJsKSkge1xyXG4gICAgICAgICAgICBvbkVycm9yID09PSBudWxsIHx8IG9uRXJyb3IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXJyb3IoJ0FJIGNvbmZpZ3VyYXRpb24gbWlzc2luZycpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY3VycmVudFRleHQudHJpbSgpKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgY29uc3QgbWluQ2hhcnNGb3JBY3Rpb24gPSBtaW5DaGFyc0J5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICA1MDtcclxuICAgICAgICBpZiAoY3VycmVudFRleHQubGVuZ3RoIDwgbWluQ2hhcnNGb3JBY3Rpb24pXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBpZiAoaXNHZW5lcmF0aW5nKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgaWYgKHJlZ2VuZXJhdGVFeGlzdGluZyAmJiAhY2FuUmVnZW5lcmF0ZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGJhc2VDb25maWcgPSBhY3RpdmVBY3Rpb25Qcm9tcHRzW2FjdGlvblR5cGVdO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UgJiZcclxuICAgICAgICAgICAgdGVtcGxhdGVUeXBlID09PSAndXRpbGl0eScgJiZcclxuICAgICAgICAgICAgYWN0aW9uVmFyaWFudCA9PT0gQUlBY3Rpb25WYXJpYW50LlJFUEhSQVNFXHJcbiAgICAgICAgICAgID8gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBiYXNlQ29uZmlnKSwgeyBsYWJlbDogJ1JlcGhyYXNlJywgYmFzZVByb21wdDogVVRJTElUWV9SRVBIUkFTRV9QUk9NUFQgfSkgOiBiYXNlQ29uZmlnO1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkVG9uZUlkID0gdG9uZU92ZXJyaWRlSWQgfHxcclxuICAgICAgICAgICAgdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgIGNvbmZpZy5kZWZhdWx0VG9uZUlkIHx8XHJcbiAgICAgICAgICAgICgoX2MgPSAoX2IgPSBjb25maWcudG9uZXMpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYlswXSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmlkKTtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZFRvbmUgPSAoX2QgPSBjb25maWcudG9uZXMpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZC5maW5kKCh0b25lKSA9PiB0b25lLmlkID09PSBzZWxlY3RlZFRvbmVJZCk7XHJcbiAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQgPSBpbnN0cnVjdGlvbk92ZXJyaWRlICE9PSB1bmRlZmluZWRcclxuICAgICAgICAgICAgPyBpbnN0cnVjdGlvbk92ZXJyaWRlXHJcbiAgICAgICAgICAgIDogaW5zdHJ1Y3Rpb25UZXh0O1xyXG4gICAgICAgIGNvbnN0IHByb21wdCA9IChvbkJ1aWxkQUlQcm9tcHQgPT09IG51bGwgfHwgb25CdWlsZEFJUHJvbXB0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkJ1aWxkQUlQcm9tcHQoe1xyXG4gICAgICAgICAgICBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICBhY3Rpb25WYXJpYW50LFxyXG4gICAgICAgICAgICBjdXJyZW50VGV4dCxcclxuICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICBjb25maWcsXHJcbiAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgIHRvbmVMYWJlbDogc2VsZWN0ZWRUb25lID09PSBudWxsIHx8IHNlbGVjdGVkVG9uZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogc2VsZWN0ZWRUb25lLmxhYmVsLFxyXG4gICAgICAgICAgICBpbnN0cnVjdGlvblRleHQ6IGluc3RydWN0aW9uRm9yUHJvbXB0IHx8IHVuZGVmaW5lZCxcclxuICAgICAgICB9KSkgfHxcclxuICAgICAgICAgICAgYnVpbGRBY3Rpb25Qcm9tcHQoe1xyXG4gICAgICAgICAgICAgICAgY29uZmlnLFxyXG4gICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZCxcclxuICAgICAgICAgICAgICAgIGluc3RydWN0aW9uVGV4dDogaW5zdHJ1Y3Rpb25Gb3JQcm9tcHQsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIHNldElzR2VuZXJhdGluZyh0cnVlKTtcclxuICAgICAgICBlbWl0QUlFdmVudCgnYWlfYWN0aW9uX3RyaWdnZXJlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IG9uQUlBY3Rpb25SZXF1ZXN0XHJcbiAgICAgICAgICAgICAgICA/IHlpZWxkIG9uQUlBY3Rpb25SZXF1ZXN0KHtcclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvblZhcmlhbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvbmVJZDogc2VsZWN0ZWRUb25lSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9uZUxhYmVsOiBzZWxlY3RlZFRvbmUgPT09IG51bGwgfHwgc2VsZWN0ZWRUb25lID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzZWxlY3RlZFRvbmUubGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25UZXh0OiBpbnN0cnVjdGlvbkZvclByb21wdCB8fCB1bmRlZmluZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIDogeWllbGQgcmVxdWVzdEFJU3VnZ2VzdGlvbih7XHJcbiAgICAgICAgICAgICAgICAgICAgYXBpQWRhcHRlcixcclxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RXhlY3V0b3IsXHJcbiAgICAgICAgICAgICAgICAgICAgYmFzZVVybCxcclxuICAgICAgICAgICAgICAgICAgICBlbmRwb2ludFBhdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvbXB0LFxyXG4gICAgICAgICAgICAgICAgICAgIGludGVudCxcclxuICAgICAgICAgICAgICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICAgICAgICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICAgICAgICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gdHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZydcclxuICAgICAgICAgICAgICAgID8gcmVzdWx0LnRyaW0oKVxyXG4gICAgICAgICAgICAgICAgOiAoKHJlc3VsdCA9PT0gbnVsbCB8fCByZXN1bHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlc3VsdC5ib2R5KSB8fCAnJykudHJpbSgpO1xyXG4gICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZSlcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKCFyZWdlbmVyYXRlRXhpc3RpbmcpIHtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25CYXNlVGV4dChjdXJyZW50VGV4dCk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uQWN0aW9uVHlwZShhY3Rpb25UeXBlKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25DYW5kaWRhdGVzKFtjYW5kaWRhdGVdKTtcclxuICAgICAgICAgICAgICAgIHNldFN1Z2dlc3Rpb25JbmRleCgwKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZXRTdWdnZXN0aW9uQ2FuZGlkYXRlcygocHJldikgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dCA9IFsuLi5wcmV2LCBjYW5kaWRhdGVdLnNsaWNlKDAsIE1BWF9TVUdHRVNUSU9OUyk7XHJcbiAgICAgICAgICAgICAgICBzZXRTdWdnZXN0aW9uSW5kZXgobmV4dC5sZW5ndGggLSAxKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXh0O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgb25FcnJvciA9PT0gbnVsbCB8fCBvbkVycm9yID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkVycm9yKCdGYWlsZWQgdG8gZ2VuZXJhdGUgQUkgc3VnZ2VzdGlvbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHtcclxuICAgICAgICAgICAgc2V0SXNHZW5lcmF0aW5nKGZhbHNlKTtcclxuICAgICAgICB9XHJcbiAgICB9KSwgW1xyXG4gICAgICAgIHJlcXVlc3RFeGVjdXRvcixcclxuICAgICAgICBiYXNlVXJsLFxyXG4gICAgICAgIGN1cnJlbnRUZXh0LFxyXG4gICAgICAgIGlzR2VuZXJhdGluZyxcclxuICAgICAgICBjYW5SZWdlbmVyYXRlLFxyXG4gICAgICAgIGFjdGl2ZUFjdGlvblByb21wdHMsXHJcbiAgICAgICAgdG9uZUJ5QWN0aW9uLFxyXG4gICAgICAgIGluc3RydWN0aW9uVGV4dCxcclxuICAgICAgICBlbWl0QUlFdmVudCxcclxuICAgICAgICB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIGVuZHBvaW50UGF0aCxcclxuICAgICAgICBhcGlBZGFwdGVyLFxyXG4gICAgICAgIGludGVudCxcclxuICAgICAgICBjb252ZXJzYXRpb25JZCxcclxuICAgICAgICBzeXN0ZW1JZCxcclxuICAgICAgICB1c2VDYXNlLFxyXG4gICAgICAgIHN0b3JlSWQsXHJcbiAgICAgICAgdGVtcGxhdGVUeXBlLFxyXG4gICAgICAgIG9uRXJyb3IsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgICAgICBvbkFJQWN0aW9uUmVxdWVzdCxcclxuICAgICAgICBvbkJ1aWxkQUlQcm9tcHQsXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZUFjY2VwdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFhY3RpdmVDYW5kaWRhdGUgfHwgIXN1Z2dlc3Rpb25CYXNlVGV4dCB8fCAhc3VnZ2VzdGlvbkFjdGlvblR5cGUpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBzZXRFZGl0b3JUZXh0KGFjdGl2ZUNhbmRpZGF0ZSk7XHJcbiAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChhY3RpdmVDYW5kaWRhdGUpO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2FjY2VwdGVkJywge1xyXG4gICAgICAgICAgICBhY3Rpb25fdHlwZTogc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgIHRlbXBsYXRlX2lkOiB0ZW1wbGF0ZUlkLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IGluSW5pdGlhbEFpUGhhc2UgPSBpbml0aWFsQWlQcmVmaWxsUGhhc2VSZWYuY3VycmVudDtcclxuICAgICAgICBjb25zdCB0YWdQYXlsb2FkID0gY29tcHV0ZUFpVGFnT25BY2NlcHQoe1xyXG4gICAgICAgICAgICBiYXNlbGluZVRleHQ6IHN1Z2dlc3Rpb25CYXNlVGV4dCxcclxuICAgICAgICAgICAgYWNjZXB0ZWRUZXh0OiBhY3RpdmVDYW5kaWRhdGUsXHJcbiAgICAgICAgICAgIGluaXRpYWxBaVByZWZpbGxQaGFzZTogaW5Jbml0aWFsQWlQaGFzZSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoaW5Jbml0aWFsQWlQaGFzZSkge1xyXG4gICAgICAgICAgICBpbml0aWFsQWlQcmVmaWxsUGhhc2VSZWYuY3VycmVudCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBvbkFJVGFnQ29tcHV0ZWQgPT09IG51bGwgfHwgb25BSVRhZ0NvbXB1dGVkID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVGFnQ29tcHV0ZWQodGFnUGF5bG9hZCk7XHJcbiAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGFjdGl2ZUNhbmRpZGF0ZSxcclxuICAgICAgICBzdWdnZXN0aW9uQmFzZVRleHQsXHJcbiAgICAgICAgc3VnZ2VzdGlvbkFjdGlvblR5cGUsXHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dCxcclxuICAgICAgICBlbWl0Q2hhbmdlV2l0aEd1YXJkLFxyXG4gICAgICAgIGVtaXRBSUV2ZW50LFxyXG4gICAgICAgIHRlbXBsYXRlSWQsXHJcbiAgICAgICAgb25BSVRhZ0NvbXB1dGVkLFxyXG4gICAgICAgIGNsZWFyU3VnZ2VzdGlvblNlc3Npb24sXHJcbiAgICBdKTtcclxuICAgIGNvbnN0IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gPSB1c2VDYWxsYmFjaygoKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWdnZXN0aW9uQWN0aW9uVHlwZSlcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIGVtaXRBSUV2ZW50KCdhaV9zdWdnZXN0aW9uX2Rpc2NhcmRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICB9KTtcclxuICAgICAgICBjbGVhclN1Z2dlc3Rpb25TZXNzaW9uKCk7XHJcbiAgICB9LCBbY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbiwgZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCB0ZW1wbGF0ZUlkXSk7XHJcbiAgICBjb25zdCBoYW5kbGVGZWVkYmFjayA9IHVzZUNhbGxiYWNrKChyYXRpbmcpID0+IHtcclxuICAgICAgICBpZiAoIXN1Z2dlc3Rpb25BY3Rpb25UeXBlKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgZW1pdEFJRXZlbnQoJ2FpX2ZlZWRiYWNrX3N1Ym1pdHRlZCcsIHtcclxuICAgICAgICAgICAgYWN0aW9uX3R5cGU6IHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZV9pZDogdGVtcGxhdGVJZCxcclxuICAgICAgICAgICAgcmF0aW5nLFxyXG4gICAgICAgICAgICBjYW5kaWRhdGVfaW5kZXg6IHN1Z2dlc3Rpb25JbmRleCArIDEsXHJcbiAgICAgICAgfSk7XHJcbiAgICB9LCBbZW1pdEFJRXZlbnQsIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLCBzdWdnZXN0aW9uSW5kZXgsIHRlbXBsYXRlSWRdKTtcclxuICAgIGNvbnN0IGFpSGVhZGVyQWN0aW9ucyA9IHVzZU1lbW8oKCkgPT4ge1xyXG4gICAgICAgIGlmIChkaXNhYmxlQnVpbHRJbkFJQWN0aW9ucylcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIHJldHVybiBlbmFibGVkQUlBY3Rpb25zLm1hcCgoYWN0aW9uVHlwZSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYztcclxuICAgICAgICAgICAgY29uc3QgYWN0aW9uQ29uZmlnID0gYWN0aXZlQWN0aW9uUHJvbXB0c1thY3Rpb25UeXBlXTtcclxuICAgICAgICAgICAgY29uc3QgdG9uZUlkID0gdG9uZUJ5QWN0aW9uW2FjdGlvblR5cGVdIHx8XHJcbiAgICAgICAgICAgICAgICBhY3Rpb25Db25maWcuZGVmYXVsdFRvbmVJZCB8fFxyXG4gICAgICAgICAgICAgICAgKChfYiA9IChfYSA9IGFjdGlvbkNvbmZpZy50b25lcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hWzBdKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWQpO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogYWN0aW9uVHlwZSxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiBhY3Rpb25Db25maWcubGFiZWwsXHJcbiAgICAgICAgICAgICAgICBpc1ByaW1hcnk6IGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UsXHJcbiAgICAgICAgICAgICAgICBsb2FkaW5nOiBpc0dlbmVyYXRpbmcgJiYgc3VnZ2VzdGlvbkFjdGlvblR5cGUgPT09IGFjdGlvblR5cGUsXHJcbiAgICAgICAgICAgICAgICBoaWdobGlnaHRlZDogYWN0aW9uVHlwZSA9PT0gQUlFZGl0b3JBY3Rpb25UeXBlcy5SRVBIUkFTRSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIGlzUmVwaHJhc2VIaWdobGlnaHRlZCxcclxuICAgICAgICAgICAgICAgIGRpc2FibGVkOiAhY3VycmVudFRleHQudHJpbSgpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRleHQubGVuZ3RoIDxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKG1pbkNoYXJzQnlBY3Rpb25bYWN0aW9uVHlwZV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfQUlfQUNUSU9OX01JTl9DSEFSU1thY3Rpb25UeXBlXSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNTApIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgaXNHZW5lcmF0aW5nIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgKHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbiAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdWdnZXN0aW9uQWN0aW9uVHlwZSA9PT0gYWN0aW9uVHlwZSksXHJcbiAgICAgICAgICAgICAgICBzaG93VG9uZURyb3Bkb3duOiBhY3Rpb25UeXBlID09PSBBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFICYmXHJcbiAgICAgICAgICAgICAgICAgICAgISEoKF9jID0gYWN0aW9uQ29uZmlnLnRvbmVzKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSxcclxuICAgICAgICAgICAgICAgIHRvbmVzOiBhY3Rpb25Db25maWcudG9uZXMsXHJcbiAgICAgICAgICAgICAgICBzZWxlY3RlZFRvbmVJZDogdG9uZUlkLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgW1xyXG4gICAgICAgIGVuYWJsZWRBSUFjdGlvbnMsXHJcbiAgICAgICAgZGlzYWJsZUJ1aWx0SW5BSUFjdGlvbnMsXHJcbiAgICAgICAgYWN0aXZlQWN0aW9uUHJvbXB0cyxcclxuICAgICAgICB0b25lQnlBY3Rpb24sXHJcbiAgICAgICAgaXNHZW5lcmF0aW5nLFxyXG4gICAgICAgIHN1Z2dlc3Rpb25BY3Rpb25UeXBlLFxyXG4gICAgICAgIHNob3VsZFNob3dTdWdnZXN0aW9uU2Vzc2lvbixcclxuICAgICAgICBpc1JlcGhyYXNlSGlnaGxpZ2h0ZWQsXHJcbiAgICAgICAgY3VycmVudFRleHQsXHJcbiAgICAgICAgbWluQ2hhcnNCeUFjdGlvbixcclxuICAgIF0pO1xyXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+IHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBhZGRUZXh0T3JXcmFwLFxyXG4gICAgICAgICAgICBhZGRUZXh0LFxyXG4gICAgICAgICAgICBnZXQoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldENhcmV0UG9zaXRpb24sXHJcbiAgICAgICAgfTtcclxuICAgIH0sIFthZGRUZXh0T3JXcmFwLCBhZGRUZXh0LCBjdXJyZW50VGV4dF0pO1xyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICBpZiAoaW5wdXRWYWx1ZSA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgc2V0RWRpdG9yVGV4dChpbnB1dFZhbHVlIHx8ICcnKTtcclxuICAgIH0sIFtpbnB1dFZhbHVlLCBzZXRFZGl0b3JUZXh0XSk7XHJcbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xyXG4gICAgICAgIGlmICghbGltaXQgfHwgIW9uRXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBjb25zdCBuZXh0RXJyb3IgPSBjdXJyZW50VGV4dC5sZW5ndGggPiBsaW1pdCA/IExJTUlUX1JFQUNIRUQgOiBlcnJvciAhPT0gbnVsbCAmJiBlcnJvciAhPT0gdm9pZCAwID8gZXJyb3IgOiAnJztcclxuICAgICAgICBpZiAobGFzdEVtaXR0ZWRFZGl0b3JFcnJvclJlZi5jdXJyZW50ID09PSBuZXh0RXJyb3IpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICBsYXN0RW1pdHRlZEVkaXRvckVycm9yUmVmLmN1cnJlbnQgPSBuZXh0RXJyb3I7XHJcbiAgICAgICAgb25FcnJvcihuZXh0RXJyb3IpO1xyXG4gICAgfSwgW2N1cnJlbnRUZXh0LCBlcnJvciwgbGltaXQsIG9uRXJyb3JdKTtcclxuICAgIHJldHVybiAoX2pzeHMoT3V0ZXJDb250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4cyhFZGl0b3JGb290ZXJSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvckZvb3RlclRpdGxlLCB7IGNoaWxkcmVuOiBlZGl0b3JIZWFkZXIgPyAoX2pzeChUaXRsZVNtYWxsLCBPYmplY3QuYXNzaWduKHsgXCJkYXRhLXRlc3RcIjogXCJib2R5LXRleHQtZm9yLWVkaXQtdGVtcGxhdGVcIiB9LCB7IGNoaWxkcmVuOiBlZGl0b3JIZWFkZXIgfSkpKSA6IG51bGwgfSksIF9qc3hzKEVkaXRvckZvb3RlclJpZ2h0LCB7IGNoaWxkcmVuOiBbZXJyb3IgJiYgZXJyb3IgIT09IExJTUlUX1JFQUNIRUQgPyAoX2pzeHMoX0ZyYWdtZW50LCB7IGNoaWxkcmVuOiBbX2pzeChJbmZvSWNvbiwgeyB3aWR0aDogMTYsIGhlaWdodDogMTYsIGNvbG9yOiBDT0xPUlMuY29udGVudC5uZWdhdGl2ZSB9KSwgX2pzeChCb2R5Q2FwdGlvbiwgT2JqZWN0LmFzc2lnbih7IGNvbG9yOiBDT0xPUlMuY29udGVudC5uZWdhdGl2ZSB9LCB7IGNoaWxkcmVuOiBlcnJvciB9KSldIH0pKSA6IG51bGwsIGxpbWl0ID8gKF9qc3hzKEJvZHlDYXB0aW9uLCBPYmplY3QuYXNzaWduKHsgc3R5bGU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3I6IGVycm9yID09PSBMSU1JVF9SRUFDSEVEIHx8IGN1cnJlbnRUZXh0Lmxlbmd0aCA+IGxpbWl0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IENPTE9SUy5jb250ZW50Lm5lZ2F0aXZlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IFtjdXJyZW50VGV4dC5sZW5ndGgsIFwiL1wiLCBsaW1pdF0gfSkpKSA6IG51bGxdIH0pXSB9KSwgX2pzeHMoQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgaXNFcnJvcjogISFlcnJvciB9LCB7IGNoaWxkcmVuOiBbc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uID8gKF9qc3hzKFN1Z2dlc3Rpb25TZXNzaW9uQ29udGFpbmVyLCBPYmplY3QuYXNzaWduKHsgcmVmOiBzdWdnZXN0aW9uU2Nyb2xsUmVmIH0sIHsgY2hpbGRyZW46IFtfanN4KFN1Z2dlc3Rpb25CYXNlbGluZVRleHQsIHsgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHsgX19odG1sOiBzdWdnZXN0aW9uQmFzZUh0bWwgfSB9KSwgaXNHZW5lcmF0aW5nID8gKF9qc3goU3VnZ2VzdGlvbkNhbmRpZGF0ZVRleHQsIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtYnVzeVwiOiBcInRydWVcIiB9LCB7IGNoaWxkcmVuOiBfanN4cyhTdWdnZXN0aW9uQ2FuZGlkYXRlU2tlbGV0b24sIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiODQlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjY4JVwiIH0pXSB9KSB9KSkpIDogKF9qc3goU3VnZ2VzdGlvbkNhbmRpZGF0ZVRleHQsIHsgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19odG1sOiBhY3RpdmVDYW5kaWRhdGVIdG1sLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSkpLCBfanN4cyhTdWdnZXN0aW9uQ29udHJvbHNSb3csIHsgY2hpbGRyZW46IFtfanN4cyhTdWdnZXN0aW9uQ291bnRlciwgeyBjaGlsZHJlbjogW3N1Z2dlc3Rpb25JbmRleCArIDEsIFwiL1wiLCBzdWdnZXN0aW9uQ2FuZGlkYXRlcy5sZW5ndGhdIH0pLCBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUHJldmlvdXMgc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBkaXNhYmxlZDogaXNQcmV2U3VnZ2VzdGlvbkRpc2FibGVkLCBvbkNsaWNrOiAoKSA9PiBzZXRTdWdnZXN0aW9uSW5kZXgoKGlkeCkgPT4gTWF0aC5tYXgoMCwgaWR4IC0gMSkpIH0sIHsgY2hpbGRyZW46IF9qc3goQ2hldnJvbkxlZnRJY29uLCB7IHdpZHRoOiAxNCwgaGVpZ2h0OiAxNCB9KSB9KSksIF9qc3goU3VnZ2VzdGlvbkljb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyBcImFyaWEtbGFiZWxcIjogXCJOZXh0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzTmV4dFN1Z2dlc3Rpb25EaXNhYmxlZCwgb25DbGljazogKCkgPT4gc2V0U3VnZ2VzdGlvbkluZGV4KChpZHgpID0+IE1hdGgubWluKHN1Z2dlc3Rpb25DYW5kaWRhdGVzLmxlbmd0aCAtIDEsIGlkeCArIDEpKSB9LCB7IGNoaWxkcmVuOiBfanN4KENoZXZyb25SaWdodEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJMaWtlXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiTGlrZSBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6ICgpID0+IGhhbmRsZUZlZWRiYWNrKCdsaWtlJykgfSwgeyBjaGlsZHJlbjogX2pzeChUaHVtYnNVcEljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiRGlzbGlrZVwiLCBwbGFjZW1lbnQ6IFwidG9wXCIgfSwgeyBjaGlsZHJlbjogX2pzeChTdWdnZXN0aW9uSWNvbkJ1dHRvbiwgT2JqZWN0LmFzc2lnbih7IFwiYXJpYS1sYWJlbFwiOiBcIkRpc2xpa2Ugc3VnZ2VzdGlvblwiLCB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiBoYW5kbGVGZWVkYmFjaygnZGlzbGlrZScpIH0sIHsgY2hpbGRyZW46IF9qc3goVGh1bWJzRG93bkljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIGNhblJlZ2VuZXJhdGUgPyAoX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogaXNHZW5lcmF0aW5nID8gJ1JlZ2VuZXJhdGluZ+KApicgOiAnUmVnZW5lcmF0ZScsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25SZWdlbmVyYXRlQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiUmVnZW5lcmF0ZSBzdWdnZXN0aW9uXCIsIFwiYXJpYS1idXN5XCI6IGlzR2VuZXJhdGluZywgdHlwZTogXCJidXR0b25cIiwgZGlzYWJsZWQ6IGlzR2VuZXJhdGluZywgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3VnZ2VzdGlvbkFjdGlvblR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihzdWdnZXN0aW9uQWN0aW9uVHlwZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IH0sIHsgY2hpbGRyZW46IGlzR2VuZXJhdGluZyA/IChfanN4KFJlZ2VuZXJhdGVJY29uU2hpbW1lciwgeyBcImFyaWEtaGlkZGVuXCI6IHRydWUgfSkpIDogKF9qc3goUmV3aW5kSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkpIH0pKSB9KSkpIDogbnVsbCwgX2pzeChUb29sdGlwLCBPYmplY3QuYXNzaWduKHsgYm9keTogXCJEaXNjYXJkXCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiRGlzY2FyZCBzdWdnZXN0aW9uXCIsIHR5cGU6IFwiYnV0dG9uXCIsIG9uQ2xpY2s6IGhhbmRsZVJlamVjdFN1Z2dlc3Rpb24gfSwgeyBjaGlsZHJlbjogX2pzeChDcm9zc0ljb24sIHsgd2lkdGg6IDE0LCBoZWlnaHQ6IDE0IH0pIH0pKSB9KSksIF9qc3goVG9vbHRpcCwgT2JqZWN0LmFzc2lnbih7IGJvZHk6IFwiQWNjZXB0XCIsIHBsYWNlbWVudDogXCJ0b3BcIiB9LCB7IGNoaWxkcmVuOiBfanN4KFN1Z2dlc3Rpb25JY29uQnV0dG9uLCBPYmplY3QuYXNzaWduKHsgXCJhcmlhLWxhYmVsXCI6IFwiQWNjZXB0IHN1Z2dlc3Rpb25cIiwgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogaGFuZGxlQWNjZXB0U3VnZ2VzdGlvbiB9LCB7IGNoaWxkcmVuOiBfanN4KENoZWNrSWNvbiwgeyB3aWR0aDogMTQsIGhlaWdodDogMTQgfSkgfSkpIH0pKV0gfSldIH0pKSkgOiBpc0dlbmVyYXRpbmcgPyAoX2pzeHMoRWRpdG9yU2tlbGV0b25Db250YWluZXIsIHsgY2hpbGRyZW46IFtfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI5NiVcIiB9KSwgX2pzeChFZGl0b3JTa2VsZXRvbkxpbmUsIHsgd2lkdGg6IFwiOTIlXCIgfSksIF9qc3goRWRpdG9yU2tlbGV0b25MaW5lLCB7IHdpZHRoOiBcIjg4JVwiIH0pLCBfanN4KEVkaXRvclNrZWxldG9uTGluZSwgeyB3aWR0aDogXCI1NCVcIiB9KV0gfSkpIDogKF9qc3goVGV4dFNwYWNlLCBPYmplY3QuYXNzaWduKHsgcmVmOiB0ZXh0U3BhY2VSZWYgfSwgdGV4dEFyZWFQcm9wcywgeyB2YWx1ZTogY3VycmVudFRleHQsIG9uQ2hhbmdlOiBoYW5kbGVPbkNoYW5nZSwgb25QYXN0ZTogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFzdGVkVGV4dCA9IGUuY2xpcGJvYXJkRGF0YS5nZXREYXRhKCd0ZXh0Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGFzdGVkVGV4dC5sZW5ndGggPiBMQVJHRV9JTlBVVF9USFJFU0hPTEQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWwgPSB0ZXh0U3BhY2VSZWYuY3VycmVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IChfYSA9IGVsID09PSBudWxsIHx8IGVsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlbC5zZWxlY3Rpb25TdGFydCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmQgPSAoX2IgPSBlbCA9PT0gbnVsbCB8fCBlbCA9PT0gdm9pZCAwID8gdm9pZCAwIDogZWwuc2VsZWN0aW9uRW5kKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBzdGFydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQcmVmZXIgbGl2ZSBET00gdmFsdWUg4oCUIGBjdXJyZW50VGV4dGAgY2FuIGxhZyB0aGUgdGV4dGFyZWEgZm9yIGJpZyBwYXN0ZXMuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFzZSA9IChfYyA9IGVsID09PSBudWxsIHx8IGVsID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlbC52YWx1ZSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogY3VycmVudFRleHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV4dFRleHQgPSBiYXNlLnNsaWNlKDAsIHN0YXJ0KSArIHBhc3RlZFRleHQgKyBiYXNlLnNsaWNlKGVuZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0RWRpdG9yVGV4dChuZXh0VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1pdENoYW5nZVdpdGhHdWFyZChuZXh0VGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FyZXQgPSBzdGFydCArIHBhc3RlZFRleHQubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRhID0gdGV4dFNwYWNlUmVmLmN1cnJlbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YS5zZXRTZWxlY3Rpb25SYW5nZShjYXJldCwgY2FyZXQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoIChfYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWdub3JlIGludmFsaWQgcmFuZ2UgaW4gZWRnZSBicm93c2Vyc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHJvd3M6IHJvd3MgfSkpKSwgaXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSA/IChfanN4cyhJbnN0cnVjdGlvbkNvbnRhaW5lciwgeyBjaGlsZHJlbjogW19qc3hzKEluc3RydWN0aW9uSW5wdXRSb3csIHsgY2hpbGRyZW46IFtfanN4KEVkaXRJY29uLCB7IHdpZHRoOiAxOCwgaGVpZ2h0OiAxOCwgY29sb3I6IENPTE9SUy5jb250ZW50LnNlY29uZGFyeSB9KSwgX2pzeChJbnN0cnVjdGlvbklucHV0LCB7IHZhbHVlOiBpbnN0cnVjdGlvblRleHQsIHBsYWNlaG9sZGVyOiBcIkFkZCBzcGVjaWZpYyBpbnN0cnVjdGlvbnMgdG8gcmVmaW5lIHlvdXIgbWVzc2FnZVwiLCBvbkNoYW5nZTogKGUpID0+IHNldEluc3RydWN0aW9uVGV4dChlLnRhcmdldC52YWx1ZSkgfSksIF9qc3hzKEluc3RydWN0aW9uQWN0aW9ucywgeyBjaGlsZHJlbjogW19qc3goSW5zdHJ1Y3Rpb25DYW5jZWwsIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBvbkNsaWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJbnN0cnVjdGlvblRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZShmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gfSwgeyBjaGlsZHJlbjogXCJDYW5jZWxcIiB9KSksIF9qc3goSW5zdHJ1Y3Rpb25JbXByb3ZlLCBPYmplY3QuYXNzaWduKHsgdHlwZTogXCJidXR0b25cIiwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5zdHJ1Y3Rpb25Ub0FwcGx5ID0gaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldElzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SW5zdHJ1Y3Rpb25UZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihBSUVkaXRvckFjdGlvblR5cGVzLlJFUEhSQVNFLCBmYWxzZSwgaW5zdHJ1Y3Rpb25Ub0FwcGx5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB9LCB7IGNoaWxkcmVuOiBcIkltcHJvdmVcIiB9KSldIH0pXSB9KSwgaW5zdHJ1Y3Rpb25UZXh0LnRyaW0oKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRJbnN0cnVjdGlvblN1Z2dlc3Rpb25zLmxlbmd0aCA+IDAgPyAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25MaXN0LCB7IGNoaWxkcmVuOiBmaWx0ZXJlZEluc3RydWN0aW9uU3VnZ2VzdGlvbnMubWFwKChzdWdnZXN0aW9uKSA9PiAoX2pzeChJbnN0cnVjdGlvblN1Z2dlc3Rpb25CdXR0b24sIE9iamVjdC5hc3NpZ24oeyB0eXBlOiBcImJ1dHRvblwiLCBzZWxlY3RlZDogaW5zdHJ1Y3Rpb25UZXh0ID09PSBzdWdnZXN0aW9uLCBvbkNsaWNrOiAoKSA9PiBzZXRJbnN0cnVjdGlvblRleHQoc3VnZ2VzdGlvbikgfSwgeyBjaGlsZHJlbjogc3VnZ2VzdGlvbiB9KSwgc3VnZ2VzdGlvbikpKSB9KSkgOiBudWxsXSB9KSkgOiAoX2pzeChXaGF0c0FwcFRleHRFZGl0b3JIZWFkZXIsIHsgYWN0aW9uczogYWN0aW9ucywgcmVmOiB0ZXh0U3BhY2VSZWYsIG9uQWN0aW9uU2VsZWN0OiBvbkFjdGlvblNlbGVjdCwgUmlnaHRDb21wb25lbnQ6IFJpZ2h0Q29tcG9uZW50LCByaWdodEFjdGlvbnNEaXNhYmxlZDogc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uIHx8IGlzR2VuZXJhdGluZywgb25FbW9qaUNsaWNrOiBvbkVtb2ppQWRkaXRpb24sIGFpQWN0aW9uczogYWlIZWFkZXJBY3Rpb25zLCBkaXNhYmxlQWxsQWN0aW9uczogc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uIHx8IGlzR2VuZXJhdGluZywgaW5zdHJ1Y3Rpb25BY3RpdmU6IGlzSW5zdHJ1Y3Rpb25JbnB1dFZpc2libGUsIG9uQUlJbnN0cnVjdGlvbnNDbGljazogKCkgPT4gc2V0SXNJbnN0cnVjdGlvbklucHV0VmlzaWJsZSh0cnVlKSwgb25BSVRvbmVDaGFuZ2U6IChhY3Rpb25UeXBlLCB0b25lSWQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRvbmVCeUFjdGlvbigocHJldikgPT4gKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcHJldiksIHsgW2FjdGlvblR5cGVdOiB0b25lSWQgfSkpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQUlUb25lU2VsZWN0ID09PSBudWxsIHx8IG9uQUlUb25lU2VsZWN0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkFJVG9uZVNlbGVjdChhY3Rpb25UeXBlLCB0b25lSWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvblR5cGUgPT09IEFJRWRpdG9yQWN0aW9uVHlwZXMuUkVQSFJBU0UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjdXRlQUlBY3Rpb24oYWN0aW9uVHlwZSwgZmFsc2UsIHVuZGVmaW5lZCwgdG9uZUlkLCBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIG9uQUlBY3Rpb25DbGljazogKGFjdGlvblR5cGUsIGFjdGlvblZhcmlhbnQgPSBBSUFjdGlvblZhcmlhbnQuREVGQVVMVCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzR2VuZXJhdGluZylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU2hvd1N1Z2dlc3Rpb25TZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Z2dlc3Rpb25BY3Rpb25UeXBlID09PSBhY3Rpb25UeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNhbWUgYWN0aW9uIHNob3VsZCBub3QgcmV0cmlnZ2VyIGZyb20gY2hpcDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVnZW5lcmF0ZSBpcyBvbmx5IHZpYSBleHBsaWNpdCByZWdlbmVyYXRlIGNvbnRyb2wuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTmV3IGFjdGlvbiBzdGFydHMgYSBmcmVzaCBzdWdnZXN0aW9uIHNlc3Npb24uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJTdWdnZXN0aW9uU2Vzc2lvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFjdGlvblZhcmlhbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWN1dGVBSUFjdGlvbihhY3Rpb25UeXBlLCBmYWxzZSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGFjdGlvblZhcmlhbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IH0pKV0gfSkpXSB9KSk7XHJcbn0pO1xyXG5XaGF0c0FwcFRleHRFZGl0b3IuZGlzcGxheU5hbWUgPSAnV2hhdHNBcHBUZXh0RWRpdG9yJztcclxuZXhwb3J0IHsgQUlfVEFHX0NIQU5HRV9SQVRJT19USFJFU0hPTEQsIGNvbXB1dGVBaVRhZ09uQWNjZXB0LCBsZXZlbnNodGVpbkRpc3RhbmNlLCB9IGZyb20gJy4vYWkvYWlUYWcnO1xyXG4vLyMgc291cmNlTWFwcGluZ1VSTD1XaGF0c0FwcFRleHRFZGl0b3IuanMubWFwIl19 */")),f=new B.BaseWhatsappContentLangHelper,M={[Y.EditorActionTypes.BOLD]:"*",[Y.EditorActionTypes.ITALIC]:"_",[Y.EditorActionTypes.STRIKETHROUGH]:"~"};function r(I){return`whatsapp-editor-rephrase-highlight-${I||"default"}`}const q=i.default.forwardRef(((I,A)=>{var{onChange:B,onClickVariable:y,text:a,RightComponent:i,error:h,limit:n,onError:q,rows:_,actions:$,editorInstanceKey:II,templateType:gI="marketing",templateId:CI,requestExecutor:AI,baseUrl:cI,endpointPath:lI,useCase:bI,storeId:ZI,apiAdapter:GI,conversationId:XI="whatsapp-template-editor",systemId:dI="whatsapp-writer",intent:VI="default",enabledAIActions:WI=[Y.AIEditorActionTypes.REPHRASE,Y.AIEditorActionTypes.SHORTEN,Y.AIEditorActionTypes.EXPAND,Y.AIEditorActionTypes.EMOJIFY],disableBuiltInAIActions:BI=!1,promptOverrides:HI,rephraseTones:RI,aiActionMinChars:JI,instructionSuggestions:uI=N.DEFAULT_INSTRUCTION_SUGGESTIONS,onAIEvent:NI,onAITagComputed:mI,prefillWasAiGenerated:FI=!1,editorHeader:xI,onAIToneSelect:YI,onAIActionRequest:yI,onBuildAIPrompt:aI}=I,iI=g.__rest(I,["onChange","onClickVariable","text","RightComponent","error","limit","onError","rows","actions","editorInstanceKey","templateType","templateId","requestExecutor","baseUrl","endpointPath","useCase","storeId","apiAdapter","conversationId","systemId","intent","enabledAIActions","disableBuiltInAIActions","promptOverrides","rephraseTones","aiActionMinChars","instructionSuggestions","onAIEvent","onAITagComputed","prefillWasAiGenerated","editorHeader","onAIToneSelect","onAIActionRequest","onBuildAIPrompt"]);const hI=H.useRef(null),[pI,nI]=H.useState(a||""),[UI,SI]=H.useState(!1),[kI,sI]=H.useState(0),[zI,QI]=H.useState(!1),[vI,oI]=H.useState(!1),[wI,tI]=H.useState(""),[DI,jI]=H.useState({}),[TI,eI]=H.useState(null),[LI,KI]=H.useState([]),[OI,PI]=H.useState(0),[EI,fI]=H.useState(null),MI=H.useRef(null),rI=H.useRef(null),qI=H.useRef(null),_I=H.useRef(null),$I=H.useRef(null),Ig=H.useRef(null),gg=H.useRef(!!FI);H.useEffect((()=>{gg.current=!!FI}),[FI,II]);const Cg=H.useMemo((()=>N.resolveActionPrompts(gI,HI,RI)),[HI,RI,gI]),Ag=H.useMemo((()=>{const I=wI.trim().toLowerCase();return I?uI.filter((g=>g.toLowerCase().includes(I))):[]}),[uI,wI]),cg=H.useMemo((()=>Object.assign(Object.assign({},N.DEFAULT_AI_ACTION_MIN_CHARS),JI||{})),[JI]),lg=cg[Y.AIEditorActionTypes.REPHRASE]||N.DEFAULT_AI_ACTION_MIN_CHARS[Y.AIEditorActionTypes.REPHRASE],bg=H.useCallback(((I,g)=>{null==NI||NI(I,g)}),[NI]),Zg=H.useCallback((I=>{nI((g=>g===I?g:I))}),[]),Gg=H.useCallback((I=>{if($I.current&&clearTimeout($I.current),I.length>1200)return null==B||B(I,I),void($I.current=setTimeout((()=>{null==B||B(I,f.getHTML(I))}),16));null==B||B(I,f.getHTML(I))}),[B]),Xg=H.useCallback((()=>{eI(null),KI([]),PI(0),fI(null)}),[]),dg=H.useCallback((()=>{if(kI>=5)return;const I=kI+1;sI(I),"undefined"!=typeof window&&II&&sessionStorage.setItem(r(II),String(I)),SI(!0),qI.current&&clearTimeout(qI.current),qI.current=setTimeout((()=>{SI(!1)}),1200)}),[II,kI]),Vg=H.useRef(dg);function Wg(I){const g=null==hI?void 0:hI.current;null!=g&&(g.selectionStart?(g.focus(),g.selectionEnd=I):g.focus())}function Bg(I){var g,C;let A=null!==(C=null===(g=hI.current)||void 0===g?void 0:g.value)&&void 0!==C?C:"";if(hI.current&&I){const g=hI.current.selectionStart,C=hI.current.selectionEnd,c=I;if(g===C)return Hg(c);{A=f.wrappWildcard(g,C,c,A);const I=f.getHTML(A);return Zg(A),{text:A,html:I}}}return{text:A,html:A}}function Hg(I){var g,C;const A=null!==(C=null===(g=hI.current)||void 0===g?void 0:g.value)&&void 0!==C?C:"";if(hI.current&&I){const g=hI.current.selectionStart;if(g===hI.current.selectionEnd)return Rg(I,g)}return{text:A,html:A}}function Rg(I,g){var C,A;let c=null!==(A=null===(C=hI.current)||void 0===C?void 0:C.value)&&void 0!==A?A:"";c=c.slice(0,g)+I+c.slice(g);const l=f.getHTML(c);return Zg(c),{text:c,html:l}}Vg.current=dg,H.useEffect((()=>{if("undefined"==typeof window||!II)return;const I=Number(sessionStorage.getItem(r(II))||"0");Number.isNaN(I)||sI(I)}),[II]),H.useEffect((()=>{const I=!!pI.trim()&&pI.length>=lg;if(null===_I.current)return _I.current=I,void(I&&(rI.current=setTimeout((()=>{Vg.current()}),3e3)));if(!I)return _I.current=!1,SI(!1),void(rI.current&&(clearTimeout(rI.current),rI.current=null));const g=!_I.current&&I;_I.current=!0,g&&Vg.current(),rI.current&&clearTimeout(rI.current),rI.current=setTimeout((()=>{Vg.current()}),3e3)}),[pI,lg]),H.useEffect((()=>()=>{rI.current&&clearTimeout(rI.current),qI.current&&clearTimeout(qI.current),$I.current&&clearTimeout($I.current)}),[]);const Jg=LI[OI]||"",ug=H.useMemo((()=>f.getHTML(TI||"")),[TI]),Ng=H.useMemo((()=>f.getHTML(Jg)),[Jg]),mg=LI.length<3,Fg=!!TI&&LI.length>0,xg=LI.length<=1||OI<=0,Yg=LI.length<=1||OI>=LI.length-1;H.useEffect((()=>{if(!Fg)return;const I=MI.current;I&&(I.scrollTop=I.scrollHeight)}),[Jg,Fg,zI]);const yg=H.useCallback((function(I){let C=arguments.length>1&&void 0!==arguments[1]&&arguments[1],A=arguments.length>2?arguments[2]:void 0,c=arguments.length>3?arguments[3]:void 0,l=arguments.length>4&&void 0!==arguments[4]?arguments[4]:Y.AIActionVariant.DEFAULT;return g.__awaiter(void 0,void 0,void 0,(function*(){var g,b,Z;if(!(yI||GI||AI&&cI))return void(null==q||q("AI configuration missing"));if(!pI.trim())return;const G=cg[I]||N.DEFAULT_AI_ACTION_MIN_CHARS[I]||50;if(pI.length<G)return;if(zI)return;if(C&&!mg)return;const X=Cg[I],d=I===Y.AIEditorActionTypes.REPHRASE&&"utility"===gI&&l===Y.AIActionVariant.REPHRASE?Object.assign(Object.assign({},X),{label:"Rephrase",basePrompt:"Rephrase this WhatsApp utility template to improve clarity and readability while preserving variables, intent, and compliance."}):X,V=c||DI[I]||d.defaultToneId||(null===(b=null===(g=d.tones)||void 0===g?void 0:g[0])||void 0===b?void 0:b.id),W=null===(Z=d.tones)||void 0===Z?void 0:Z.find((I=>I.id===V)),B=void 0!==A?A:wI,H=(null==aI?void 0:aI({actionType:I,actionVariant:l,currentText:pI,templateType:gI,config:d,toneId:V,toneLabel:null==W?void 0:W.label,instructionText:B||void 0}))||F.buildActionPrompt({config:d,currentText:pI,selectedToneId:V,instructionText:B});QI(!0),bg("ai_action_triggered",{action_type:I,template_id:CI});try{const g=yI?yield yI({actionType:I,actionVariant:l,currentText:pI,templateType:gI,toneId:V,toneLabel:null==W?void 0:W.label,instructionText:B||void 0,prompt:H}):yield F.requestAISuggestion({apiAdapter:GI,requestExecutor:AI,baseUrl:cI,endpointPath:lI,prompt:H,intent:VI,conversationId:XI,systemId:dI,useCase:bI,storeId:ZI}),A="string"==typeof g?g.trim():((null==g?void 0:g.body)||"").trim();if(!A)return;if(!C)return eI(pI),fI(I),KI([A]),void PI(0);KI((I=>{const g=[...I,A].slice(0,3);return PI(g.length-1),g}))}catch(I){null==q||q("Failed to generate AI suggestion")}finally{QI(!1)}}))}),[AI,cI,pI,zI,mg,Cg,DI,wI,bg,CI,lI,GI,VI,XI,dI,bI,ZI,gI,q,cg,yI,aI]),ag=H.useCallback((()=>{if(!Jg||!TI||!EI)return;Zg(Jg),Gg(Jg),bg("ai_suggestion_accepted",{action_type:EI,template_id:CI});const I=gg.current,g=m.computeAiTagOnAccept({baselineText:TI,acceptedText:Jg,initialAiPrefillPhase:I});I&&(gg.current=!1),null==mI||mI(g),Xg()}),[Jg,TI,EI,Zg,Gg,bg,CI,mI,Xg]),ig=H.useCallback((()=>{EI&&(bg("ai_suggestion_discarded",{action_type:EI,template_id:CI}),Xg())}),[Xg,bg,EI,CI]),hg=H.useCallback((I=>{EI&&bg("ai_feedback_submitted",{action_type:EI,template_id:CI,rating:I,candidate_index:OI+1})}),[bg,EI,OI,CI]),pg=H.useMemo((()=>BI?[]:WI.map((I=>{var g,C,A;const c=Cg[I],l=DI[I]||c.defaultToneId||(null===(C=null===(g=c.tones)||void 0===g?void 0:g[0])||void 0===C?void 0:C.id);return{type:I,label:c.label,isPrimary:I===Y.AIEditorActionTypes.REPHRASE,loading:zI&&EI===I,highlighted:I===Y.AIEditorActionTypes.REPHRASE&&UI,disabled:!pI.trim()||pI.length<(cg[I]||N.DEFAULT_AI_ACTION_MIN_CHARS[I]||50)||zI||Fg&&EI===I,showToneDropdown:I===Y.AIEditorActionTypes.REPHRASE&&!!(null===(A=c.tones)||void 0===A?void 0:A.length),tones:c.tones,selectedToneId:l}}))),[WI,BI,Cg,DI,zI,EI,Fg,UI,pI,cg]);return H.useImperativeHandle(A,(()=>({addTextOrWrap:Bg,addText:Hg,get:()=>pI,setCaretPosition:Wg})),[Bg,Hg,pI]),H.useEffect((()=>{void 0!==a&&Zg(a||"")}),[a,Zg]),H.useEffect((()=>{if(!n||!q)return;const I=pI.length>n?p:null!=h?h:"";Ig.current!==I&&(Ig.current=I,q(I))}),[pI,h,n,q]),C.jsxs(x.OuterContainer,{children:[C.jsxs(x.EditorFooterRow,{children:[C.jsx(x.EditorFooterTitle,{children:xI?C.jsx(u.TitleSmall,Object.assign({"data-test":"body-text-for-edit-template"},{children:xI})):null}),C.jsxs(x.EditorFooterRight,{children:[h&&h!==p?C.jsxs(C.Fragment,{children:[C.jsx(X.default,{width:16,height:16,color:R.COLORS.content.negative}),C.jsx(u.BodyCaption,Object.assign({color:R.COLORS.content.negative},{children:h}))]}):null,n?C.jsxs(u.BodyCaption,Object.assign({style:{color:h===p||pI.length>n?R.COLORS.content.negative:R.COLORS.content.secondary}},{children:[pI.length,"/",n]})):null]})]}),C.jsxs(x.Container,Object.assign({isError:!!h},{children:[Fg?C.jsxs(k,Object.assign({ref:MI},{children:[C.jsx(s,{dangerouslySetInnerHTML:{__html:ug}}),zI?C.jsx(z,Object.assign({"aria-busy":"true"},{children:C.jsxs(Q,{children:[C.jsx(S,{width:"96%"}),C.jsx(S,{width:"84%"}),C.jsx(S,{width:"68%"})]})})):C.jsx(z,{dangerouslySetInnerHTML:{__html:Ng}}),C.jsxs(v,{children:[C.jsxs(o,{children:[OI+1,"/",LI.length]}),C.jsx(w,Object.assign({"aria-label":"Previous suggestion",type:"button",disabled:xg,onClick:()=>PI((I=>Math.max(0,I-1)))},{children:C.jsx(l.default,{width:14,height:14})})),C.jsx(w,Object.assign({"aria-label":"Next suggestion",type:"button",disabled:Yg,onClick:()=>PI((I=>Math.min(LI.length-1,I+1)))},{children:C.jsx(b.default,{width:14,height:14})})),C.jsx(J.Tooltip,Object.assign({body:"Like",placement:"top"},{children:C.jsx(w,Object.assign({"aria-label":"Like suggestion",type:"button",onClick:()=>hg("like")},{children:C.jsx(W.default,{width:14,height:14})}))})),C.jsx(J.Tooltip,Object.assign({body:"Dislike",placement:"top"},{children:C.jsx(w,Object.assign({"aria-label":"Dislike suggestion",type:"button",onClick:()=>hg("dislike")},{children:C.jsx(V.default,{width:14,height:14})}))})),mg?C.jsx(J.Tooltip,Object.assign({body:zI?"Regenerating…":"Regenerate",placement:"top"},{children:C.jsx(t,Object.assign({"aria-label":"Regenerate suggestion","aria-busy":zI,type:"button",disabled:zI,onClick:()=>{EI&&yg(EI,!0)}},{children:zI?C.jsx(D,{"aria-hidden":!0}):C.jsx(d.default,{width:14,height:14})}))})):null,C.jsx(J.Tooltip,Object.assign({body:"Discard",placement:"top"},{children:C.jsx(w,Object.assign({"aria-label":"Discard suggestion",type:"button",onClick:ig},{children:C.jsx(Z.default,{width:14,height:14})}))})),C.jsx(J.Tooltip,Object.assign({body:"Accept",placement:"top"},{children:C.jsx(w,Object.assign({"aria-label":"Accept suggestion",type:"button",onClick:ag},{children:C.jsx(c.default,{width:14,height:14})}))}))]})]})):zI?C.jsxs(U,{children:[C.jsx(S,{width:"96%"}),C.jsx(S,{width:"92%"}),C.jsx(S,{width:"88%"}),C.jsx(S,{width:"54%"})]}):C.jsx(x.TextSpace,Object.assign({ref:hI},iI,{value:pI,onChange:function(I){const g=I.target.value;Zg(g),Gg(g)},onPaste:I=>{var g,C,A;const c=I.clipboardData.getData("text");if(c.length>1200){I.preventDefault();const l=hI.current,b=null!==(g=null==l?void 0:l.selectionStart)&&void 0!==g?g:0,Z=null!==(C=null==l?void 0:l.selectionEnd)&&void 0!==C?C:b,G=null!==(A=null==l?void 0:l.value)&&void 0!==A?A:pI,X=G.slice(0,b)+c+G.slice(Z);Zg(X),Gg(X);const d=b+c.length;requestAnimationFrame((()=>{const I=hI.current;if(I)try{I.setSelectionRange(d,d)}catch(I){}}))}},rows:_})),vI?C.jsxs(j,{children:[C.jsxs(T,{children:[C.jsx(G.default,{width:18,height:18,color:R.COLORS.content.secondary}),C.jsx(e,{value:wI,placeholder:"Add specific instructions to refine your message",onChange:I=>tI(I.target.value)}),C.jsxs(L,{children:[C.jsx(K,Object.assign({type:"button",onClick:()=>{tI(""),oI(!1)}},{children:"Cancel"})),C.jsx(O,Object.assign({type:"button",onClick:()=>{const I=wI.trim();oI(!1),tI(""),yg(Y.AIEditorActionTypes.REPHRASE,!1,I)}},{children:"Improve"}))]})]}),wI.trim().length>0&&Ag.length>0?C.jsx(P,{children:Ag.map((I=>C.jsx(E,Object.assign({type:"button",selected:wI===I,onClick:()=>tI(I)},{children:I}),I)))}):null]}):C.jsx(Y.WhatsAppTextEditorHeader,{actions:$,ref:hI,onActionSelect:function(I){const g=M[I];if(g&&hI.current){const I=hI.current.selectionStart;if(I===hI.current.selectionEnd){const{text:C}=Rg(g,I);Wg(I+1),Gg(C)}else{const{text:I}=Bg(g);Gg(I)}}},RightComponent:i,rightActionsDisabled:Fg||zI,onEmojiClick:function(I){const{text:g}=Hg(I);Gg(g)},aiActions:pg,disableAllActions:Fg||zI,instructionActive:vI,onAIInstructionsClick:()=>oI(!0),onAIToneChange:(I,g)=>{jI((C=>Object.assign(Object.assign({},C),{[I]:g}))),null==YI||YI(I,g),I===Y.AIEditorActionTypes.REPHRASE&&yg(I,!1,void 0,g,Y.AIActionVariant.DEFAULT)},onAIActionClick:function(I){let g=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Y.AIActionVariant.DEFAULT;if(!zI){if(Fg){if(EI===I)return;return Xg(),void yg(I,!1,void 0,void 0,g)}yg(I,!1,void 0,void 0,g)}}})]}))]})}));q.displayName="WhatsAppTextEditor",exports.AI_TAG_CHANGE_RATIO_THRESHOLD=m.AI_TAG_CHANGE_RATIO_THRESHOLD,exports.computeAiTagOnAccept=m.computeAiTagOnAccept,exports.levenshteinDistance=m.levenshteinDistance,exports.WhatsAppTextEditor=q;