@envive-ai/react-hooks 0.2.6-alpha → 0.2.6-alpha-3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{AmplitudeOperations-zFjk1Mkm.js → AmplitudeOperations-C3i2q2Bn.js} +2 -2
- package/dist/{AmplitudeOperations-CDe6oRn4.cjs → AmplitudeOperations-DcuLn1Zk.cjs} +2 -2
- package/dist/{NewOrgConfig-ChNJ3ZtC.js → NewOrgConfig-BtvujFC8.js} +2 -2
- package/dist/{NewOrgConfig-KHz61ikr.cjs → NewOrgConfig-CHt7Xg4t.cjs} +2 -2
- package/dist/{TrackComponentVisibleEvent-f8ahqV1g.js → TrackComponentVisibleEvent-Be7wfXXY.js} +3 -3
- package/dist/{TrackComponentVisibleEvent-uEzgBXb9.cjs → TrackComponentVisibleEvent-KUihr_y4.cjs} +3 -3
- package/dist/{api-1-73JxnF.js → api-D4HaU2Gf.js} +3 -3
- package/dist/{api-ZNG6wObS.cjs → api-D4Xoibs9.cjs} +3 -3
- package/dist/application/models/graphql/index.cjs +1 -1
- package/dist/application/models/graphql/index.js +1 -1
- package/dist/application/models/guards/api/index.cjs +3 -3
- package/dist/application/models/guards/api/index.js +3 -3
- package/dist/application/models/guards/utils.cjs +1 -1
- package/dist/application/models/guards/utils.js +1 -1
- package/dist/application/models/index.cjs +6 -6
- package/dist/application/models/index.js +6 -6
- package/dist/application/utils/index.cjs +17 -17
- package/dist/application/utils/index.d.cts +1 -1
- package/dist/application/utils/index.d.ts +2 -2
- package/dist/application/utils/index.js +17 -17
- package/dist/{atomStore-DAQvNPkh.js → atomStore-BuopbV9k.js} +1 -1
- package/dist/{atomStore-DD9g7Zw2.cjs → atomStore-CZKe3itM.cjs} +1 -1
- package/dist/atoms/app/index.cjs +17 -17
- package/dist/atoms/app/index.d.cts +7 -7
- package/dist/atoms/app/index.d.ts +6 -6
- package/dist/atoms/app/index.js +17 -17
- package/dist/atoms/atomStore/index.cjs +1 -1
- package/dist/atoms/atomStore/index.js +1 -1
- package/dist/atoms/chat/index.cjs +19 -19
- package/dist/atoms/chat/index.d.cts +32 -32
- package/dist/atoms/chat/index.d.ts +32 -32
- package/dist/atoms/chat/index.js +19 -19
- package/dist/atoms/globalSearch/index.cjs +1 -1
- package/dist/atoms/globalSearch/index.d.cts +6 -6
- package/dist/atoms/globalSearch/index.d.ts +6 -6
- package/dist/atoms/globalSearch/index.js +1 -1
- package/dist/atoms/org/index.cjs +2 -2
- package/dist/atoms/org/index.d.cts +16 -16
- package/dist/atoms/org/index.d.ts +16 -16
- package/dist/atoms/org/index.js +2 -2
- package/dist/atoms/search/index.cjs +6 -6
- package/dist/atoms/search/index.d.cts +15 -15
- package/dist/atoms/search/index.d.ts +14 -14
- package/dist/atoms/search/index.js +6 -6
- package/dist/atoms/search/utils.cjs +1 -1
- package/dist/atoms/search/utils.js +1 -1
- package/dist/{cdnContext-DT6J5nCw.js → cdnContext-B2-NiEiW.js} +2 -2
- package/dist/{cdnContext-BLNiW2HT.cjs → cdnContext-CdhppNeT.cjs} +2 -2
- package/dist/{chat-C0cgfkL8.js → chat-C9KdnT5V.js} +7 -7
- package/dist/{chat-DULmjtx1.cjs → chat-bImNRcnQ.cjs} +7 -7
- package/dist/{chatState-BrSfXIV4.cjs → chatState-DqWSgmjC.cjs} +3 -3
- package/dist/{chatState-Cn8JGAlH.js → chatState-DxG0t4fK.js} +3 -3
- package/dist/contexts/amplitudeContext/index.cjs +17 -17
- package/dist/contexts/amplitudeContext/index.js +17 -17
- package/dist/contexts/cdnContext/index.cjs +4 -4
- package/dist/contexts/cdnContext/index.d.cts +1 -1
- package/dist/contexts/cdnContext/index.js +4 -4
- package/dist/contexts/enviveConfigContext/index.cjs +4 -4
- package/dist/contexts/enviveConfigContext/index.d.cts +1 -1
- package/dist/contexts/enviveConfigContext/index.js +4 -4
- package/dist/contexts/enviveCssContext/index.cjs +14 -14
- package/dist/contexts/enviveCssContext/index.js +14 -14
- package/dist/contexts/featureFlagContext/index.cjs +5 -5
- package/dist/contexts/featureFlagContext/index.js +5 -5
- package/dist/contexts/featureFlagServiceContext/index.cjs +4 -4
- package/dist/contexts/featureFlagServiceContext/index.js +4 -4
- package/dist/contexts/graphqlContext/index.cjs +8 -8
- package/dist/contexts/graphqlContext/index.js +8 -8
- package/dist/contexts/localStorageContext/index.cjs +3 -3
- package/dist/contexts/localStorageContext/index.js +3 -3
- package/dist/contexts/newOrgConfigContext/index.cjs +13 -13
- package/dist/contexts/newOrgConfigContext/index.d.cts +1 -1
- package/dist/contexts/newOrgConfigContext/index.js +13 -13
- package/dist/contexts/searchContext/index.cjs +22 -22
- package/dist/contexts/searchContext/index.js +22 -22
- package/dist/contexts/sessionStorageContext/index.cjs +2 -2
- package/dist/contexts/sessionStorageContext/index.js +2 -2
- package/dist/contexts/systemSettingsContext/index.cjs +4 -4
- package/dist/contexts/systemSettingsContext/index.js +4 -4
- package/dist/contexts/userIdentityContext/index.cjs +17 -17
- package/dist/contexts/userIdentityContext/index.js +17 -17
- package/dist/{dist-BZX_Mgfn.cjs → dist-B7BErEyV.cjs} +1 -1
- package/dist/{dist-CIM4YRqp.js → dist-CtkINi1R.js} +1 -1
- package/dist/{domObserver-DKcas6tl.js → domObserver-B19-69gW.js} +1 -1
- package/dist/{domObserver-Do6RAJdf.cjs → domObserver-CwieVNgj.cjs} +1 -1
- package/dist/{enviveConfig-DrvYlCYG.js → enviveConfig-Be2kZE7j.js} +3 -3
- package/dist/{enviveConfig-DaotBKMS.cjs → enviveConfig-u50Rpz-G.cjs} +3 -3
- package/dist/{enviveConfigContext-BCnzgk4M.js → enviveConfigContext-1oiQuocd.js} +3 -3
- package/dist/{enviveConfigContext--89ejDs5.cjs → enviveConfigContext-kQfHEGdJ.cjs} +3 -3
- package/dist/exceptions/index.cjs +1 -1
- package/dist/exceptions/index.js +1 -1
- package/dist/{exceptions-BiSWJEl2.cjs → exceptions-BjDgLzGi.cjs} +1 -1
- package/dist/{exceptions-DSv0ZaH0.js → exceptions-CUGY31Ua.js} +1 -1
- package/dist/{featureFlagServiceContext-DpdlcjNb.js → featureFlagServiceContext-CPsygiHO.js} +3 -3
- package/dist/{featureFlagServiceContext-BztKnBPk.cjs → featureFlagServiceContext-pPneufeB.cjs} +3 -3
- package/dist/{globalSearch-nmrfGLOn.js → globalSearch-B_v9qfCT.js} +1 -1
- package/dist/{globalSearch-Cpc8egsM.cjs → globalSearch-OiF96VLG.cjs} +1 -1
- package/dist/{graphql-CWNkUHFV.js → graphql-CvAHWmel.js} +1 -1
- package/dist/{graphql-DT-H-lta.cjs → graphql-JaGqsToc.cjs} +1 -1
- package/dist/{graphqlContext-CWulFxxC.js → graphqlContext-BuXJ5DiW.js} +5 -5
- package/dist/{graphqlContext-B181y-sa.cjs → graphqlContext-CU7NIJo7.cjs} +5 -5
- package/dist/hooks/AmplitudeOperations/index.cjs +18 -18
- package/dist/hooks/AmplitudeOperations/index.d.cts +1 -1
- package/dist/hooks/AmplitudeOperations/index.js +18 -18
- package/dist/hooks/AppDetails/index.cjs +20 -20
- package/dist/hooks/AppDetails/index.d.cts +1 -1
- package/dist/hooks/AppDetails/index.js +20 -20
- package/dist/hooks/CdnOperations/index.cjs +4 -4
- package/dist/hooks/CdnOperations/index.d.cts +1 -1
- package/dist/hooks/CdnOperations/index.js +4 -4
- package/dist/hooks/ChatToggle/index.cjs +19 -19
- package/dist/hooks/ChatToggle/index.js +19 -19
- package/dist/hooks/ChatToggleAnalytics/index.cjs +19 -19
- package/dist/hooks/ChatToggleAnalytics/index.js +19 -19
- package/dist/hooks/CustomerSupportHandoff/index.cjs +1 -1
- package/dist/hooks/CustomerSupportHandoff/index.js +1 -1
- package/dist/hooks/ElementObserver/index.cjs +1 -1
- package/dist/hooks/ElementObserver/index.js +1 -1
- package/dist/hooks/GraphQLConfig/index.cjs +9 -9
- package/dist/hooks/GraphQLConfig/index.js +9 -9
- package/dist/hooks/IdentifyUser/index.cjs +17 -17
- package/dist/hooks/IdentifyUser/index.js +17 -17
- package/dist/hooks/ImageResolver/index.cjs +3 -3
- package/dist/hooks/ImageResolver/index.js +3 -3
- package/dist/hooks/LocalStorageOperations/index.cjs +3 -3
- package/dist/hooks/LocalStorageOperations/index.js +3 -3
- package/dist/hooks/MessageFilter/index.cjs +1 -1
- package/dist/hooks/MessageFilter/index.js +1 -1
- package/dist/hooks/NewOrgConfig/index.cjs +14 -14
- package/dist/hooks/NewOrgConfig/index.d.cts +2 -2
- package/dist/hooks/NewOrgConfig/index.d.ts +2 -2
- package/dist/hooks/NewOrgConfig/index.js +14 -14
- package/dist/hooks/Search/index.cjs +31 -31
- package/dist/hooks/Search/index.js +31 -31
- package/dist/hooks/SearchOperations/index.cjs +22 -22
- package/dist/hooks/SearchOperations/index.js +22 -22
- package/dist/hooks/SessionStorageOperations/index.cjs +2 -2
- package/dist/hooks/SessionStorageOperations/index.js +2 -2
- package/dist/hooks/ShopifyUrlOperations/index.d.cts +2 -2
- package/dist/hooks/ShopifyUrlOperations/index.d.ts +2 -2
- package/dist/hooks/SystemSettingsContext/index.cjs +4 -4
- package/dist/hooks/SystemSettingsContext/index.d.cts +3 -3
- package/dist/hooks/SystemSettingsContext/index.d.ts +4 -4
- package/dist/hooks/SystemSettingsContext/index.js +4 -4
- package/dist/hooks/TrackComponentVisibleEvent/index.cjs +18 -18
- package/dist/hooks/TrackComponentVisibleEvent/index.js +18 -18
- package/dist/hooks/UpdateAnalyticsProps/index.cjs +17 -17
- package/dist/hooks/UpdateAnalyticsProps/index.js +17 -17
- package/dist/index-B4cSHxVN.d.ts +1 -1
- package/dist/index-Dzv6WwSZ.d.ts +1 -1
- package/dist/interceptors/index.cjs +1 -1
- package/dist/interceptors/index.js +1 -1
- package/dist/{localStorageContext-DbWl7Row.cjs → localStorageContext-Bb2b_3ue.cjs} +3 -3
- package/dist/{localStorageContext-DSpmlfyr.js → localStorageContext-D2uXKahw.js} +3 -3
- package/dist/{logger-DCs3_11o.js → logger-BMVdhQOV.js} +1 -1
- package/dist/{logger-BF6iGSVd.cjs → logger-BqHq67zN.cjs} +1 -1
- package/dist/{models-DEJUuKYQ.js → models-DmsMlaHT.js} +5 -5
- package/dist/{models-158fyHt9.cjs → models-wh2gh_Qz.cjs} +5 -5
- package/dist/{newOrgConfigAtom-BuQE_zPK.js → newOrgConfigAtom-Dsk0fJNR.js} +1 -1
- package/dist/{newOrgConfigAtom-rrYHmp1b.cjs → newOrgConfigAtom-hs5A1pbZ.cjs} +1 -1
- package/dist/{newOrgConfigContext-C0LzIRJ7.js → newOrgConfigContext-DPUxIF2G.js} +5 -5
- package/dist/{newOrgConfigContext-BVrzYatq.cjs → newOrgConfigContext-lw85mMS-.cjs} +5 -5
- package/dist/nodeSelector-Cj-Xl1LP.d.cts +1 -1
- package/dist/{org-CVjyv-gv.cjs → org-C2kLSSe9.cjs} +1 -1
- package/dist/{org-Ct9Vjv1J.js → org-CIczyLRP.js} +1 -1
- package/dist/{search-DLHzcbfP.js → search-BzXoTgRx.js} +5 -5
- package/dist/{search-C0TAcTeY.cjs → search-D1cU29CV.cjs} +5 -5
- package/dist/{searchContext-Dmtue5QO.js → searchContext-C8DpjnqD.js} +7 -7
- package/dist/{searchContext-l_23fiuP.cjs → searchContext-R_XuFzYe.cjs} +7 -7
- package/dist/{searchServiceAdapter-B0h7psvh.js → searchServiceAdapter-CKc7UXKi.js} +1 -1
- package/dist/{searchServiceAdapter-BclWy4fE.cjs → searchServiceAdapter-pROGm3Rf.cjs} +1 -1
- package/dist/{sessionStorageContext-BOyr7mIM.cjs → sessionStorageContext-ByaTsDUC.cjs} +2 -2
- package/dist/{sessionStorageContext-ClXN9eX4.js → sessionStorageContext-DKE97oMv.js} +2 -2
- package/dist/{systemSettingsContext-CksCdpiU.js → systemSettingsContext-B-FZ8UAg.js} +2 -2
- package/dist/{systemSettingsContext-Cb5kczBD.cjs → systemSettingsContext-J1sny8W8.cjs} +2 -2
- package/dist/types/index.cjs +1 -1
- package/dist/types/index.js +1 -1
- package/dist/{types-18QXD2rd.cjs → types-1iJ_FnQQ.cjs} +1 -1
- package/dist/{types-DQC1pHqD.js → types-D5du68Vp.js} +1 -1
- package/dist/{useAppDetails-BJFRSYbI.js → useAppDetails-BtK9ZZJs.js} +4 -4
- package/dist/{useAppDetails-Czn-5FzP.cjs → useAppDetails-Bw2jJ39H.cjs} +4 -4
- package/dist/{useGraphQLConfig-BEtX5pDM.cjs → useGraphQLConfig-Dc8h2yyN.cjs} +2 -2
- package/dist/{useGraphQLConfig-Dkcrz1YL.js → useGraphQLConfig-DuLB3tdv.js} +2 -2
- package/dist/{utils-CEKzBcN2.js → utils-B1LVzQYK.js} +1 -1
- package/dist/{utils-CqVRbvfN.cjs → utils-BivlGkeU.cjs} +1 -1
- package/dist/{utils-DQhbbAnt.js → utils-CExht7Uj.js} +1 -1
- package/dist/{utils-CsMbZmRw.cjs → utils-CiJLDPjY.cjs} +1 -1
- package/dist/{utils-CPvqOk0g.cjs → utils-DqNhRm2b.cjs} +14 -14
- package/dist/{utils-N47VsL9W.js → utils-IogJwDB9.js} +13 -13
- package/package.json +1 -1
- package/src/hooks/Search/useSearch.tsx +11 -11
- package/src/hooks/Search/useSearchInput.ts +19 -9
- package/dist/src/application/commerce-api.js +0 -406
- package/dist/src/application/logging/logger.js +0 -16
- package/dist/src/application/models/graphql/index.js +0 -3
- package/dist/src/application/models/graphql/queries/getMerchantColorsQuery.js +0 -13
- package/dist/src/application/models/graphql/queries/getMerchantFrontendConfigQuery.js +0 -13
- package/dist/src/application/models/graphql/queries/getMerchantOrgIdQuery.js +0 -10
- package/dist/src/application/models/guards/api/index.js +0 -12
- package/dist/src/application/models/guards/api/isApiFormResponse.js +0 -59
- package/dist/src/application/models/guards/api/isApiFormSubmittedResponseAttributes.js +0 -22
- package/dist/src/application/models/guards/api/isApiOrderResponseAttributes.js +0 -91
- package/dist/src/application/models/guards/api/isApiOrgConfigResults.js +0 -188
- package/dist/src/application/models/guards/api/isApiOrganizationConfig.js +0 -115
- package/dist/src/application/models/guards/api/isApiPDPEventAttributes.js +0 -16
- package/dist/src/application/models/guards/api/isApiPLPEventAttributes.js +0 -26
- package/dist/src/application/models/guards/api/isApiPageResponseAttributes.js +0 -15
- package/dist/src/application/models/guards/api/isApiProductResponseAttributes.js +0 -65
- package/dist/src/application/models/guards/api/isApiProductSearchAttributes.js +0 -15
- package/dist/src/application/models/guards/api/isApiProductSearchFilterAttributes.js +0 -10
- package/dist/src/application/models/guards/api/isApiQueryTypedEventAttributes.js +0 -4
- package/dist/src/application/models/guards/api/isApiResponse.js +0 -33
- package/dist/src/application/models/guards/api/isApiReviewResponseAttributes.js +0 -22
- package/dist/src/application/models/guards/api/isApiReviewRichInformation.js +0 -23
- package/dist/src/application/models/guards/api/isApiSearchEventAttributes.js +0 -20
- package/dist/src/application/models/guards/api/isApiSuggestion.js +0 -24
- package/dist/src/application/models/guards/api/isApiSuggestionClickedEventAttributes.js +0 -4
- package/dist/src/application/models/guards/api/isApiTextResponseAttributes.js +0 -4
- package/dist/src/application/models/guards/api/isApiUserEvent.js +0 -18
- package/dist/src/application/models/guards/graphQL/isGraphQLColorsConfig.js +0 -41
- package/dist/src/application/models/guards/isBaseEcommerceEvent.js +0 -14
- package/dist/src/application/models/guards/isGA4EcommerceEvent.js +0 -14
- package/dist/src/application/models/guards/isLegacyUAEcommerceEvent.js +0 -14
- package/dist/src/application/models/guards/isMobilePLPChatPlacementParameter.js +0 -4
- package/dist/src/application/models/guards/isSpanxTakeAQuizCtaParameter.js +0 -1
- package/dist/src/application/models/guards/isVariantInfo.js +0 -28
- package/dist/src/application/models/guards/utils.js +0 -34
- package/dist/src/application/models/index.js +0 -34
- package/dist/src/application/models/utils/snakeToCamelTransformer.js +0 -71
- package/dist/src/application/models/utils/stringToFulfillmentDisplayStatusEnumValue.js +0 -65
- package/dist/src/application/models/validators/validateGraphQLColorsConfig.js +0 -9
- package/dist/src/application/models/validators/validateGraphQLFrontendConfig.js +0 -420
- package/dist/src/application/models/validators/validateGraphQLOrgId.js +0 -6
- package/dist/src/application/models/validators/validateMobilePLPChatPlacementParameter.js +0 -9
- package/dist/src/application/models/validators/validateOrgConfigResults.js +0 -44
- package/dist/src/application/models/validators/validateOrganizationConfig.js +0 -34
- package/dist/src/application/models/validators/validateResponse.js +0 -173
- package/dist/src/application/models/validators/validateSuggestion.js +0 -13
- package/dist/src/application/models/validators/validateUserEvent.js +0 -91
- package/dist/src/application/utils/analyticsUtils.js +0 -94
- package/dist/src/application/utils/coreContextToApiContext.js +0 -8
- package/dist/src/application/utils/coreUserEventToApiUserEvent.js +0 -90
- package/dist/src/application/utils/divideArray.js +0 -7
- package/dist/src/application/utils/domObserver.js +0 -85
- package/dist/src/application/utils/elementObserver.js +0 -186
- package/dist/src/application/utils/imageFilter.js +0 -11
- package/dist/src/application/utils/index.js +0 -21
- package/dist/src/application/utils/merchantUtils.js +0 -15
- package/dist/src/application/utils/messageFromFormSubmittedEvent.js +0 -19
- package/dist/src/application/utils/messageFromQueryEvent.js +0 -35
- package/dist/src/application/utils/messageFromResponse.js +0 -123
- package/dist/src/application/utils/messageFromSuggestionEvent.js +0 -27
- package/dist/src/application/utils/mouseEventTypes.js +0 -1
- package/dist/src/application/utils/mutationHelper.js +0 -33
- package/dist/src/application/utils/nextMessageRequestToApiRequest.js +0 -29
- package/dist/src/application/utils/nodeSelector.js +0 -101
- package/dist/src/application/utils/overrides.js +0 -144
- package/dist/src/application/utils/stringUtils.js +0 -47
- package/dist/src/application/utils/supportedEventRequestToApiRequest.js +0 -7
- package/dist/src/application/utils/urlsParser.js +0 -33
- package/dist/src/application/utils/validation.js +0 -5
- package/dist/src/atoms/amplitude/amplitudeTrackEventAtom.js +0 -4
- package/dist/src/atoms/app/index.js +0 -23
- package/dist/src/atoms/app/variant.js +0 -102
- package/dist/src/atoms/atomStore/atomStore.js +0 -28
- package/dist/src/atoms/atomStore/index.js +0 -1
- package/dist/src/atoms/chat/chatState.js +0 -33
- package/dist/src/atoms/chat/form.js +0 -16
- package/dist/src/atoms/chat/index.js +0 -23
- package/dist/src/atoms/chat/lastMessage.js +0 -10
- package/dist/src/atoms/chat/messageQueue.js +0 -68
- package/dist/src/atoms/chat/performanceMetrics.js +0 -70
- package/dist/src/atoms/chat/renderedWidgetRefs.js +0 -24
- package/dist/src/atoms/chat/replies.js +0 -43
- package/dist/src/atoms/chat/suggestions.js +0 -29
- package/dist/src/atoms/envive/enviveConfig.js +0 -67
- package/dist/src/atoms/globalSearch/globalSearch.js +0 -8
- package/dist/src/atoms/globalSearch/index.js +0 -1
- package/dist/src/atoms/org/customerService.js +0 -6
- package/dist/src/atoms/org/graphqlConfig.js +0 -8
- package/dist/src/atoms/org/index.js +0 -4
- package/dist/src/atoms/org/newOrgConfigAtom.js +0 -2
- package/dist/src/atoms/org/orgAnalyticsConfig.js +0 -8
- package/dist/src/atoms/search/index.js +0 -1
- package/dist/src/atoms/search/productFilters.js +0 -163
- package/dist/src/atoms/search/productRetrievalAPI.js +0 -50
- package/dist/src/atoms/search/productRetrievalAdapter.js +0 -14
- package/dist/src/atoms/search/productSorter.js +0 -13
- package/dist/src/atoms/search/searchAPI.js +0 -140
- package/dist/src/atoms/search/searchServiceAdapter.js +0 -14
- package/dist/src/atoms/search/utils.js +0 -15
- package/dist/src/config/index.js +0 -1
- package/dist/src/config/locators/components/chat/entrypoints.js +0 -10
- package/dist/src/config/locators/components/chat/index.js +0 -21
- package/dist/src/config/locators/components/chat/preview.js +0 -11
- package/dist/src/config/locators/components/chat/variants/index.js +0 -12
- package/dist/src/config/locators/components/common/buttons.js +0 -6
- package/dist/src/config/locators/components/common/cards.js +0 -17
- package/dist/src/config/locators/components/common/index.js +0 -4
- package/dist/src/config/locators/components/common/links.js +0 -1
- package/dist/src/config/locators/components/common/tables.js +0 -1
- package/dist/src/config/locators/components/floating-button.js +0 -2
- package/dist/src/config/locators/components/index.js +0 -3
- package/dist/src/config/locators/components/report-issue.js +0 -13
- package/dist/src/config/locators/components/search/index.js +0 -5
- package/dist/src/config/locators/components/shadow-dom.js +0 -1
- package/dist/src/config/locators/embedded.js +0 -20
- package/dist/src/config/locators/index.js +0 -4
- package/dist/src/contexts/amplitudeContext/amplitudeContext.js +0 -292
- package/dist/src/contexts/amplitudeContext/index.js +0 -1
- package/dist/src/contexts/cdnContext/cdnContext.js +0 -28
- package/dist/src/contexts/cdnContext/index.js +0 -1
- package/dist/src/contexts/enviveConfigContext/enviveConfigContext.js +0 -37
- package/dist/src/contexts/enviveConfigContext/index.js +0 -1
- package/dist/src/contexts/enviveCssContext/enviveCssContext.js +0 -31
- package/dist/src/contexts/enviveCssContext/index.js +0 -1
- package/dist/src/contexts/featureFlagContext/featureFlagContext.js +0 -109
- package/dist/src/contexts/featureFlagContext/index.js +0 -1
- package/dist/src/contexts/featureFlagServiceContext/featureFlagServiceContext.js +0 -47
- package/dist/src/contexts/featureFlagServiceContext/index.js +0 -1
- package/dist/src/contexts/graphqlContext/graphqlContext.js +0 -87
- package/dist/src/contexts/graphqlContext/index.js +0 -1
- package/dist/src/contexts/localStorageContext/index.js +0 -1
- package/dist/src/contexts/localStorageContext/localStorageContext.js +0 -95
- package/dist/src/contexts/newOrgConfigContext/index.js +0 -1
- package/dist/src/contexts/newOrgConfigContext/newOrgConfigContext.js +0 -33
- package/dist/src/contexts/searchContext/index.js +0 -1
- package/dist/src/contexts/searchContext/searchContext.js +0 -131
- package/dist/src/contexts/sessionStorageContext/index.js +0 -1
- package/dist/src/contexts/sessionStorageContext/sessionStorageContext.js +0 -43
- package/dist/src/contexts/shopifyUrlContext/index.js +0 -1
- package/dist/src/contexts/shopifyUrlContext/shopifyUrlContext.js +0 -62
- package/dist/src/contexts/systemSettingsContext/index.js +0 -1
- package/dist/src/contexts/systemSettingsContext/systemSettingsContext.js +0 -29
- package/dist/src/contexts/userIdentityContext/index.js +0 -1
- package/dist/src/contexts/userIdentityContext/userIdentityContext.js +0 -118
- package/dist/src/events/index.js +0 -51
- package/dist/src/events/registerAnalyticsListeners.js +0 -32
- package/dist/src/exceptions/index.js +0 -2
- package/dist/src/exceptions/sessionExceptions.js +0 -6
- package/dist/src/exceptions/unsupportedProductExceptions.js +0 -6
- package/dist/src/hooks/AmplitudeOperations/index.js +0 -1
- package/dist/src/hooks/AmplitudeOperations/useAmplitudeOperations.js +0 -24
- package/dist/src/hooks/AppDetails/index.js +0 -1
- package/dist/src/hooks/AppDetails/useAppDetails.js +0 -26
- package/dist/src/hooks/BlockBackButton/index.js +0 -1
- package/dist/src/hooks/BlockBackButton/useBlockBackButton.js +0 -23
- package/dist/src/hooks/CdnOperations/index.js +0 -1
- package/dist/src/hooks/CdnOperations/useCdnOperations.js +0 -13
- package/dist/src/hooks/ChatToggle/index.js +0 -1
- package/dist/src/hooks/ChatToggle/useChatToggle.js +0 -50
- package/dist/src/hooks/ChatToggleAnalytics/index.js +0 -1
- package/dist/src/hooks/ChatToggleAnalytics/useChatToggleAnalytics.js +0 -11
- package/dist/src/hooks/CustomerSupportHandoff/index.js +0 -1
- package/dist/src/hooks/CustomerSupportHandoff/useCustomerSupportHandoff.js +0 -32
- package/dist/src/hooks/Debounce/index.js +0 -1
- package/dist/src/hooks/Debounce/useDebounce.js +0 -13
- package/dist/src/hooks/ElementObserver/index.js +0 -1
- package/dist/src/hooks/ElementObserver/useElementObserver.js +0 -208
- package/dist/src/hooks/GrabAndScroll/index.js +0 -1
- package/dist/src/hooks/GrabAndScroll/useGrabAndScroll.js +0 -105
- package/dist/src/hooks/GraphQLConfig/index.js +0 -1
- package/dist/src/hooks/GraphQLConfig/useGraphQLConfig.js +0 -54
- package/dist/src/hooks/IdentifyUser/index.js +0 -1
- package/dist/src/hooks/IdentifyUser/useIdentifyUser.js +0 -28
- package/dist/src/hooks/ImageResolver/index.js +0 -1
- package/dist/src/hooks/ImageResolver/useImageResolver.js +0 -45
- package/dist/src/hooks/Intersection/index.js +0 -1
- package/dist/src/hooks/Intersection/useIntersection.js +0 -20
- package/dist/src/hooks/IsSmallScreen/index.js +0 -1
- package/dist/src/hooks/IsSmallScreen/useIsSmallScreen.js +0 -16
- package/dist/src/hooks/LocalStorageOperations/index.js +0 -1
- package/dist/src/hooks/LocalStorageOperations/useLocalStorageOperations.js +0 -64
- package/dist/src/hooks/MessageFilter/index.js +0 -1
- package/dist/src/hooks/MessageFilter/useMessageFilter.js +0 -37
- package/dist/src/hooks/MessageScrollObserver/index.js +0 -1
- package/dist/src/hooks/MessageScrollObserver/useMessageScrollObserver.js +0 -35
- package/dist/src/hooks/NewOrgConfig/index.js +0 -1
- package/dist/src/hooks/NewOrgConfig/useNewOrgConfig.js +0 -5
- package/dist/src/hooks/Search/index.js +0 -1
- package/dist/src/hooks/Search/useRecommendedProducts.js +0 -35
- package/dist/src/hooks/Search/useSearch.js +0 -224
- package/dist/src/hooks/Search/useSearchInput.js +0 -183
- package/dist/src/hooks/SearchOperations/index.js +0 -1
- package/dist/src/hooks/SearchOperations/useSearchOperations.js +0 -78
- package/dist/src/hooks/SessionStorageOperations/index.js +0 -1
- package/dist/src/hooks/SessionStorageOperations/useSessionStorageOperations.js +0 -20
- package/dist/src/hooks/ShopifyUrlOperations/index.js +0 -1
- package/dist/src/hooks/ShopifyUrlOperations/useShopifyUrlOperations.js +0 -34
- package/dist/src/hooks/SnapCalculator/index.js +0 -1
- package/dist/src/hooks/SnapCalculator/useSnapCalculator.js +0 -22
- package/dist/src/hooks/SystemSettingsContext/index.js +0 -1
- package/dist/src/hooks/SystemSettingsContext/useSystemSettingsContext.js +0 -9
- package/dist/src/hooks/TrackComponentVisibleEvent/index.js +0 -1
- package/dist/src/hooks/TrackComponentVisibleEvent/useTrackComponentVisibleEvent.js +0 -45
- package/dist/src/hooks/UpdateAnalyticsProps/index.js +0 -1
- package/dist/src/hooks/UpdateAnalyticsProps/useUpdateAnalyticsProps.js +0 -43
- package/dist/src/hooks/utils.js +0 -116
- package/dist/src/interceptors/index.js +0 -1
- package/dist/src/interceptors/useMessageInterceptor.js +0 -24
- package/dist/src/types/ApiResponse.js +0 -1
- package/dist/src/types/FilterAttribute.js +0 -3
- package/dist/src/types/Message.js +0 -24
- package/dist/src/types/Suggestion.js +0 -3
- package/dist/src/types/index.js +0 -4
- package/dist/src/util/colorVar.js +0 -3
- package/dist/src/util/configVersion.js +0 -4
- package/dist/src/util/domInsertion.js +0 -16
- /package/dist/{featureFlagServiceContext-bI7ZLz4r.js → featureFlagServiceContext-CbUOAw5l.js} +0 -0
- /package/dist/{featureFlagServiceContext-B4ash4vz.cjs → featureFlagServiceContext-DSo2brno.cjs} +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { DOMInsertionType, GridInsertionType, PageVariantTestType } from "./dist-
|
|
2
|
-
import { hasPropertyOfType } from "./utils-
|
|
3
|
-
import { isApiPDPAttributes, isApiProductResponseAttributes, isApiProductSearchResponseAttributes, isApiQueryTypedAttributes, isApiResponse, isApiReviewResponseAttributes, isApiSearchAttributes, isApiSuggestionClickedAttributes, isApiTextResponseAttributes, isApiUserEvent, isSuggestion } from "./api-
|
|
4
|
-
import { logger_default } from "./logger-
|
|
1
|
+
import { DOMInsertionType, GridInsertionType, PageVariantTestType } from "./dist-CtkINi1R.js";
|
|
2
|
+
import { hasPropertyOfType } from "./utils-B1LVzQYK.js";
|
|
3
|
+
import { isApiPDPAttributes, isApiProductResponseAttributes, isApiProductSearchResponseAttributes, isApiQueryTypedAttributes, isApiResponse, isApiReviewResponseAttributes, isApiSearchAttributes, isApiSuggestionClickedAttributes, isApiTextResponseAttributes, isApiUserEvent, isSuggestion } from "./api-D4HaU2Gf.js";
|
|
4
|
+
import { logger_default } from "./logger-BMVdhQOV.js";
|
|
5
5
|
import { FormType, FulfillmentDisplayStatus, OrganizationStatusEnum, PLPAttributeCategory, PageVisitCategory, ResponseCategory, UserEventCategory } from "@spiffy-ai/commerce-api-client";
|
|
6
6
|
|
|
7
7
|
//#region src/application/models/guards/isBaseEcommerceEvent.ts
|
|
@@ -1115,4 +1115,4 @@ const validateUserEvent = (data) => {
|
|
|
1115
1115
|
|
|
1116
1116
|
//#endregion
|
|
1117
1117
|
export { isApiFormResponseAttributes, isApiFormSubmittedResponseAttributes, isApiOrderResponseAttributes, isApiOrgConfigResults, isApiOrganizationConfig, isApiPLPEventAttributes, isApiPLPIdAttribute, isApiPageResponseAttributes, isApiProductSearchFilterResponseAttributes, isBaseEcommerceEvent, isGA4EcommerceEvent, isGraphQLColorsConfig, isLegacyUAEcommerceEvent, isMobilePLPChatPlacementParameter, isSpanxTakeAQuizCtaParameter, isVariantInfo, stringToFulfillmentDisplayStatusEnumValue, transformCamelToSnake, transformSnakeToCamel, validateAndTransformMountingConfig, validateAndTransformPageVariants, validateAndTransformWidgetConfig, validateGraphQLColorsConfig, validateGraphQLFrontendConfig, validateGraphQLOrgId, validateMobilePLPChatPlacementParameter, validateOrgConfigResults, validateOrganizationConfig, validateResponse, validateSuggestion, validateUserEvent };
|
|
1118
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWxzLURFSlV1S1lRLmpzIiwibmFtZXMiOlsicmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiIsIm5vcm1hbGl6ZWRDb25maWc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IiwicmVzdWx0OiBXaWRnZXRNb3VudGluZ0NvbmZpZyIsInZhbGlkYXRlZFBhZ2VWYXJpYW50czogUGFnZVZhcmlhbnRDb25maWdbXSIsIm1vdW50aW5nQ29uZmlnc1JlY29yZDogUmVjb3JkPHN0cmluZywgV2lkZ2V0TW91bnRpbmdDb25maWc+Iiwid2lkZ2V0Q29uZmlnc1JlY29yZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4iXSwic291cmNlcyI6WyIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9pc0Jhc2VFY29tbWVyY2VFdmVudC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2lzR0E0RWNvbW1lcmNlRXZlbnQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9pc0xlZ2FjeVVBRWNvbW1lcmNlRXZlbnQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9pc01vYmlsZVBMUENoYXRQbGFjZW1lbnRQYXJhbWV0ZXIudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9pc1NwYW54VGFrZUFRdWl6Q3RhUGFyYW1ldGVyLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvaXNWYXJpYW50SW5mby50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2FwaS9pc0FwaUZvcm1SZXNwb25zZS50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2FwaS9pc0FwaUZvcm1TdWJtaXR0ZWRSZXNwb25zZUF0dHJpYnV0ZXMudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9hcGkvaXNBcGlPcmRlclJlc3BvbnNlQXR0cmlidXRlcy50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2FwaS9pc0FwaU9yZ2FuaXphdGlvbkNvbmZpZy50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2FwaS9pc0FwaU9yZ0NvbmZpZ1Jlc3VsdHMudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9hcGkvaXNBcGlQYWdlUmVzcG9uc2VBdHRyaWJ1dGVzLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpUExQRXZlbnRBdHRyaWJ1dGVzLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpUHJvZHVjdFNlYXJjaEZpbHRlckF0dHJpYnV0ZXMudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9ncmFwaFFML2lzR3JhcGhRTENvbG9yc0NvbmZpZy50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdXRpbHMvc25ha2VUb0NhbWVsVHJhbnNmb3JtZXIudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL3V0aWxzL3N0cmluZ1RvRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzRW51bVZhbHVlLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy92YWxpZGF0b3JzL3ZhbGlkYXRlR3JhcGhRTENvbG9yc0NvbmZpZy50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdmFsaWRhdG9ycy92YWxpZGF0ZUdyYXBoUUxGcm9udGVuZENvbmZpZy50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdmFsaWRhdG9ycy92YWxpZGF0ZUdyYXBoUUxPcmdJZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdmFsaWRhdG9ycy92YWxpZGF0ZU1vYmlsZVBMUENoYXRQbGFjZW1lbnRQYXJhbWV0ZXIudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL3ZhbGlkYXRvcnMvdmFsaWRhdGVPcmdhbml6YXRpb25Db25maWcudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL3ZhbGlkYXRvcnMvdmFsaWRhdGVPcmdDb25maWdSZXN1bHRzLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy92YWxpZGF0b3JzL3ZhbGlkYXRlUmVzcG9uc2UudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL3ZhbGlkYXRvcnMvdmFsaWRhdGVTdWdnZXN0aW9uLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy92YWxpZGF0b3JzL3ZhbGlkYXRlVXNlckV2ZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VFY29tbWVyY2VFdmVudCB9IGZyb20gJ0BlbnZpdmUtYWkvdHlwZXMnO1xuLyoqXG4gKiBDaGVja3MgaWYgYW4gZXZlbnQgaXMgYSBiYXNlIEdvb2dsZSBBbmFseXRpY3MgZWNvbW1lcmNlIGV2ZW50LlxuICpcbiAqIEBwYXJhbSBkYXRhIFRoZSBldmVudCB0byBjaGVjay5cbiAqXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBldmVudCBpcyBhIGJhc2UgZWNvbW1lcmNlIGV2ZW50LCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBjb25zdCBpc0Jhc2VFY29tbWVyY2VFdmVudCA9IChkYXRhOiB1bmtub3duKTogZGF0YSBpcyBCYXNlRWNvbW1lcmNlRXZlbnQgPT5cbiAgZGF0YSAhPSBudWxsICYmXG4gIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyAmJlxuICAnZWNvbW1lcmNlJyBpbiBkYXRhICYmXG4gIGRhdGEuZWNvbW1lcmNlICE9IG51bGwgJiZcbiAgdHlwZW9mIGRhdGEuZWNvbW1lcmNlID09PSAnb2JqZWN0JyAmJlxuICAnZXZlbnQnIGluIGRhdGEgJiZcbiAgdHlwZW9mIGRhdGEuZXZlbnQgPT09ICdzdHJpbmcnO1xuIiwiaW1wb3J0IHsgR0E0RWNvbW1lcmNlRXZlbnQgfSBmcm9tICdAZW52aXZlLWFpL3R5cGVzJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYW4gZXZlbnQgaXMgYSBHb29nbGUgQW5hbHl0aWNzIDQgZWNvbW1lcmNlIGV2ZW50LlxuICpcbiAqIEBwYXJhbSBkYXRhIFRoZSBldmVudCB0byBjaGVjay5cbiAqXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBldmVudCBpcyBhIEdBNCBlY29tbWVyY2UgZXZlbnQsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGlzR0E0RWNvbW1lcmNlRXZlbnQgPSAoZGF0YTogdW5rbm93bik6IGRhdGEgaXMgR0E0RWNvbW1lcmNlRXZlbnQgPT5cbiAgdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmXG4gIGRhdGEgIT0gbnVsbCAmJlxuICAnZWNvbW1lcmNlJyBpbiBkYXRhICYmXG4gIGRhdGEuZWNvbW1lcmNlICE9IG51bGwgJiZcbiAgdHlwZW9mIGRhdGEuZWNvbW1lcmNlID09PSAnb2JqZWN0JyAmJlxuICAnaXRlbXMnIGluIGRhdGEuZWNvbW1lcmNlICYmXG4gIEFycmF5LmlzQXJyYXkoZGF0YS5lY29tbWVyY2UuaXRlbXMpO1xuIiwiaW1wb3J0IHsgVUFFY29tbWVyY2VFdmVudCB9IGZyb20gJ0BlbnZpdmUtYWkvdHlwZXMnO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhbiBldmVudCBpcyBhIGxlZ2FjeSBVbml2ZXJzYWwgQW5hbHl0aWNzIGVjb21tZXJjZSBldmVudC5cbiAqXG4gKiBAcGFyYW0gZGF0YSBUaGUgZXZlbnQgdG8gY2hlY2suXG4gKlxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZXZlbnQgaXMgYSBsZWdhY3kgVUEgZWNvbW1lcmNlIGV2ZW50LCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBjb25zdCBpc0xlZ2FjeVVBRWNvbW1lcmNlRXZlbnQgPSAoZGF0YTogdW5rbm93bik6IGRhdGEgaXMgVUFFY29tbWVyY2VFdmVudCA9PlxuICBkYXRhICE9IG51bGwgJiZcbiAgdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmXG4gICdlY29tbWVyY2UnIGluIGRhdGEgJiZcbiAgZGF0YS5lY29tbWVyY2UgIT0gbnVsbCAmJlxuICB0eXBlb2YgZGF0YS5lY29tbWVyY2UgPT09ICdvYmplY3QnICYmXG4gICdhZGQnIGluIGRhdGEuZWNvbW1lcmNlICYmXG4gIHR5cGVvZiBkYXRhLmVjb21tZXJjZS5hZGQgPT09ICdvYmplY3QnO1xuIiwiaW1wb3J0IHsgTW9iaWxlUGxwQ2hhdFBsYWNlbWVudFBhcmFtZXRlciB9IGZyb20gJ0BlbnZpdmUtYWkvdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgaXNNb2JpbGVQTFBDaGF0UGxhY2VtZW50UGFyYW1ldGVyID0gKFxuICB2YWx1ZTogdW5rbm93bixcbik6IHZhbHVlIGlzIE1vYmlsZVBscENoYXRQbGFjZW1lbnRQYXJhbWV0ZXIgPT5cbiAgdmFsdWUgIT0gbnVsbCAmJlxuICB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG4gICdyb3dfaW5kZXgnIGluIHZhbHVlICYmXG4gIHR5cGVvZiB2YWx1ZS5yb3dfaW5kZXggPT09ICdudW1iZXInO1xuIiwiaW50ZXJmYWNlIFNwYW54VGFrZUFRdWl6Q3RhUGFyYW1ldGVyIHtcbiAgdGV4dD86IHN0cmluZztcbiAgdmFsdWU/OiBzdHJpbmc7XG59XG5leHBvcnQgY29uc3QgaXNTcGFueFRha2VBUXVpekN0YVBhcmFtZXRlciA9ICh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFNwYW54VGFrZUFRdWl6Q3RhUGFyYW1ldGVyID0+XG4gIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAndGV4dCcgaW4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlLnRleHQgPT09ICdzdHJpbmcnO1xuIiwiaW1wb3J0IHtcbiAgUERQVmFyaWFudEluZm8sXG4gIFBMUFZhcmlhbnRJbmZvLFxuICBQYWdlVmlzaXRWYXJpYW50SW5mbyxcbiAgVmFyaWFudEluZm8sXG59IGZyb20gJ0BlbnZpdmUtYWkvdHlwZXMnO1xuaW1wb3J0IHsgUGFnZVZpc2l0Q2F0ZWdvcnkgfSBmcm9tICdAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQnO1xuXG5jb25zdCBpc1BEUFZhcmlhbnRJbmZvID0gKHZhcmlhbnRJbmZvOiBvYmplY3QpOiB2YXJpYW50SW5mbyBpcyBQRFBWYXJpYW50SW5mbyA9PlxuICAndmFyaWFudCcgaW4gdmFyaWFudEluZm8gJiZcbiAgdmFyaWFudEluZm8udmFyaWFudCA9PT0gJ3BkcCcgJiZcbiAgJ3Byb2R1Y3RJZCcgaW4gdmFyaWFudEluZm8gJiZcbiAgdHlwZW9mIHZhcmlhbnRJbmZvLnByb2R1Y3RJZCA9PT0gJ3N0cmluZyc7XG5cbmNvbnN0IGlzUExQVmFyaWFudEluZm8gPSAodmFyaWFudEluZm86IG9iamVjdCk6IHZhcmlhbnRJbmZvIGlzIFBMUFZhcmlhbnRJbmZvID0+XG4gICd2YXJpYW50JyBpbiB2YXJpYW50SW5mbyAmJlxuICB2YXJpYW50SW5mby52YXJpYW50ID09PSAncGxwJyAmJlxuICAncGxwSWQnIGluIHZhcmlhbnRJbmZvICYmXG4gIHR5cGVvZiB2YXJpYW50SW5mby5wbHBJZCA9PT0gJ3N0cmluZyc7XG5cbmNvbnN0IGlzUGFnZVZpc2l0VmFyaWFudEluZm8gPSAodmFyaWFudEluZm86IG9iamVjdCk6IHZhcmlhbnRJbmZvIGlzIFBhZ2VWaXNpdFZhcmlhbnRJbmZvID0+XG4gICd2YXJpYW50JyBpbiB2YXJpYW50SW5mbyAmJlxuICB2YXJpYW50SW5mby52YXJpYW50ID09PSAncGFnZV92aXNpdCcgJiZcbiAgJ3VybCcgaW4gdmFyaWFudEluZm8gJiZcbiAgdHlwZW9mIHZhcmlhbnRJbmZvLnVybCA9PT0gJ3N0cmluZycgJiZcbiAgJ3BhZ2VWaXNpdENhdGVnb3J5JyBpbiB2YXJpYW50SW5mbyAmJlxuICBPYmplY3QudmFsdWVzKFBhZ2VWaXNpdENhdGVnb3J5KS5pbmNsdWRlcyh2YXJpYW50SW5mby5wYWdlVmlzaXRDYXRlZ29yeSBhcyBQYWdlVmlzaXRDYXRlZ29yeSk7XG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBhbiBvYmplY3QgaXMgYSB2YWxpZCBWYXJpYW50SW5mby5cbiAqXG4gKiBAcGFyYW0gdmFyaWFudEluZm8gLSBUaGUgdW5rbm93biBvYmplY3QgdG8gY2hlY2suXG4gKlxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZGF0YSBpcyBhIHZhbGlkIFZhcmlhbnRJbmZvIG9iamVjdCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgY29uc3QgaXNWYXJpYW50SW5mbyA9ICh2YXJpYW50SW5mbzogdW5rbm93bik6IHZhcmlhbnRJbmZvIGlzIFZhcmlhbnRJbmZvID0+XG4gIHZhcmlhbnRJbmZvICE9IG51bGwgJiZcbiAgdHlwZW9mIHZhcmlhbnRJbmZvID09PSAnb2JqZWN0JyAmJlxuICAndmFyaWFudElkJyBpbiB2YXJpYW50SW5mbyAmJlxuICAoaXNQRFBWYXJpYW50SW5mbyh2YXJpYW50SW5mbykgfHxcbiAgICBpc1BMUFZhcmlhbnRJbmZvKHZhcmlhbnRJbmZvKSB8fFxuICAgIGlzUGFnZVZpc2l0VmFyaWFudEluZm8odmFyaWFudEluZm8pKTtcbiIsImltcG9ydCB7IEZvcm1UeXBlIH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmltcG9ydCBMb2dnZXIgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyJztcbmltcG9ydCB7IGhhc1Byb3BlcnR5T2ZUeXBlIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgRm9ybVJlc3BvbnNlQXR0cmlidXRlcyB9IGZyb20gJ0BlbnZpdmUtYWkvdHlwZXMnO1xuXG4vKipcbiAqIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgdGhlIHByb3ZpZGVkIGRhdGEgaGFzIHRoZSBhbGwgb2YgdGhlIHByb3BlcnRpZXMgKHdpdGggdGhlIGNvcnJlY3QgdHlwZXMpIG9mXG4gKiBhIEZvcm1SZXNwb25zZUF0dHJpYnV0ZVxuICpcbiAqIEBwYXJhbSBkYXRhIC0gVGhlIGRhdGEgdG8gY2hlY2tcbiAqXG4gKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBkYXRhIGhhcyB0aGUgY29ycmVjdCBwcm9wZXJ0aWVzLCBmYWxzZSBvdGhlcndpc2VcbiAqL1xuZXhwb3J0IGNvbnN0IGlzQXBpRm9ybVJlc3BvbnNlQXR0cmlidXRlcyA9IChkYXRhOiB1bmtub3duKTogZGF0YSBpcyBGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzID0+IHtcbiAgaWYgKGRhdGEgPT0gbnVsbCB8fCB0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoJ2lzQXBpRm9ybVJlc3BvbnNlQXR0cmlidXRlczogZGF0YSBpcyBudWxsIG9yIG5vdCBhbiBvYmplY3QnLCB1bmRlZmluZWQsIHtcbiAgICAgIGRhdGEsXG4gICAgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCdmb3JtX2NhdGVnb3J5JyBpbiBkYXRhICYmIHR5cGVvZiBkYXRhLmZvcm1fY2F0ZWdvcnkgIT09ICdvYmplY3QnKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKCdpc0FwaUZvcm1SZXNwb25zZUF0dHJpYnV0ZXM6IGZvcm1fY2F0ZWdvcnkgaXMgbm90IGFuIG9iamVjdCcsIHVuZGVmaW5lZCwge1xuICAgICAgZGF0YSxcbiAgICB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoJ2Zvcm1fY2F0ZWdvcnknIGluIGRhdGEgJiYgdHlwZW9mIGRhdGEuZm9ybV9jYXRlZ29yeSA9PT0gJ29iamVjdCcpIHtcbiAgICBpZiAoXG4gICAgICAhaGFzUHJvcGVydHlPZlR5cGUoZGF0YS5mb3JtX2NhdGVnb3J5LCAnZm9ybV90eXBlJywgJ3N0cmluZycpIHx8XG4gICAgICAhT2JqZWN0LnZhbHVlcyhGb3JtVHlwZSkuaW5jbHVkZXMoZGF0YS5mb3JtX2NhdGVnb3J5LmZvcm1fdHlwZSBhcyBGb3JtVHlwZSlcbiAgICApIHtcbiAgICAgIExvZ2dlci5sb2dFcnJvcihcbiAgICAgICAgJ2lzQXBpRm9ybVJlc3BvbnNlQXR0cmlidXRlczogZm9ybV90eXBlIGlzIG1pc3Npbmcgb3Igbm90IGEgdmFsaWQgZm9ybSB0eXBlJyxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB7XG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFoYXNQcm9wZXJ0eU9mVHlwZShkYXRhLCAnc2NoZW1hJywgJ29iamVjdCcpKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKCdpc0FwaUZvcm1SZXNwb25zZUF0dHJpYnV0ZXM6IHNjaGVtYSBpcyBtaXNzaW5nIG9yIG5vdCBhbiBvYmplY3QnLCB1bmRlZmluZWQsIHtcbiAgICAgIGRhdGEsXG4gICAgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gVE9ETzogYWxzbyB3YW5uYSB2YWxpZGF0ZSB0aGUgZmllbGRzIG9mIGRhdGEuc2NoZW1hLnByb3BlcnRpZXMgYnV0IG1pZ2h0IHdhbm5hIGNoYW5nZSB0aGUgc2NoZW1hXG4gIC8vIHRvIG5vdCBoYXZlIHRoZSBwcm9wZXJ0eSBuYW1lIGFzIGEga2V5IGluIHRoZSBvYmplY3RcbiAgaWYgKCFoYXNQcm9wZXJ0eU9mVHlwZShkYXRhLnNjaGVtYSwgJ3Byb3BlcnRpZXMnLCAnb2JqZWN0JykpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoXG4gICAgICAnaXNBcGlGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzOiBzY2hlbWEucHJvcGVydGllcyBpcyBtaXNzaW5nIG9yIG5vdCBhbiBvYmplY3QnLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAge1xuICAgICAgICBkYXRhLFxuICAgICAgfSxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghaGFzUHJvcGVydHlPZlR5cGUoZGF0YS5zY2hlbWEsICdyZXF1aXJlZCcsICdhcnJheScpKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKFxuICAgICAgJ2lzQXBpRm9ybVJlc3BvbnNlQXR0cmlidXRlczogc2NoZW1hLnJlcXVpcmVkIGlzIG1pc3Npbmcgb3Igbm90IGFuIGFycmF5JyxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHsgZGF0YSB9LFxuICAgICk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKFxuICAgICFkYXRhLnNjaGVtYS5yZXF1aXJlZC5ldmVyeShcbiAgICAgIChrZXk6IHVua25vd24pID0+IHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnICYmIGtleSBpbiBkYXRhLnNjaGVtYS5wcm9wZXJ0aWVzLFxuICAgIClcbiAgKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKFxuICAgICAgJ2lzQXBpRm9ybVJlc3BvbnNlQXR0cmlidXRlczogc2NoZW1hLnJlcXVpcmVkIGNvbnRhaW5zIGludmFsaWQgcHJvcGVydHkga2V5cycsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB7XG4gICAgICAgIGRhdGEsXG4gICAgICB9LFxuICAgICk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuIiwiaW1wb3J0IHsgRm9ybVN1Ym1pdHRlZEF0dHJpYnV0ZXMsIEZvcm1UeXBlIH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmltcG9ydCBMb2dnZXIgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyJztcbmltcG9ydCB7IGhhc1Byb3BlcnR5T2ZUeXBlIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgaXNBcGlGb3JtU3VibWl0dGVkUmVzcG9uc2VBdHRyaWJ1dGVzID0gKFxuICBkYXRhOiB1bmtub3duLFxuKTogZGF0YSBpcyBGb3JtU3VibWl0dGVkQXR0cmlidXRlcyA9PiB7XG4gIGlmIChkYXRhID09IG51bGwgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKCdpc0FwaUZvcm1TdWJtaXR0ZWRSZXNwb25zZUF0dHJpYnV0ZXMnLCAnZGF0YSBpcyBudWxsIG9yIG5vdCBhbiBvYmplY3QnLCBkYXRhKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWhhc1Byb3BlcnR5T2ZUeXBlKGRhdGEsICdmaWxsZWRfc2NoZW1hJywgJ29iamVjdCcpKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKCdpc0FwaUZvcm1TdWJtaXR0ZWRSZXNwb25zZUF0dHJpYnV0ZXMnLCAnZmlsbGVkX3NjaGVtYSBpcyBub3QgYW4gb2JqZWN0JywgZGF0YSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFoYXNQcm9wZXJ0eU9mVHlwZShkYXRhLCAnZm9ybV9yZXNwb25zZV9pZCcsICdzdHJpbmcnKSkge1xuICAgIExvZ2dlci5sb2dFcnJvcihcbiAgICAgICdpc0FwaUZvcm1TdWJtaXR0ZWRSZXNwb25zZUF0dHJpYnV0ZXMnLFxuICAgICAgJ2Zvcm1fcmVzcG9uc2VfaWQgaXMgbm90IGEgc3RyaW5nJyxcbiAgICAgIGRhdGEsXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoISgnZm9ybV90eXBlJyBpbiBkYXRhKSB8fCAhT2JqZWN0LnZhbHVlcyhGb3JtVHlwZSkuaW5jbHVkZXMoZGF0YS5mb3JtX3R5cGUgYXMgRm9ybVR5cGUpKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKFxuICAgICAgJ2lzQXBpRm9ybVN1Ym1pdHRlZFJlc3BvbnNlQXR0cmlidXRlcycsXG4gICAgICAnZm9ybV90eXBlIGlzIG5vdCBhIHZhbGlkIGZvcm0gdHlwZSBlbnVtJyxcbiAgICAgIGRhdGEsXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG4iLCJpbXBvcnQgdHlwZSB7IEFwaU9yZGVySXRlbUluZm8sIEFwaU9yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzIH0gZnJvbSAnQGVudml2ZS1haS90eXBlcyc7XG5pbXBvcnQgTG9nZ2VyIGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9sb2dnaW5nL2xvZ2dlcic7XG5pbXBvcnQgeyBoYXNQcm9wZXJ0eU9mVHlwZSB9IGZyb20gJy4uL3V0aWxzJztcblxuY29uc3QgaXNBcGlPcmRlckl0ZW1JbmZvID0gKGRhdGE6IHVua25vd24pOiBkYXRhIGlzIEFwaU9yZGVySXRlbUluZm8gPT4ge1xuICBpZiAoZGF0YSA9PSBudWxsIHx8IHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0Jykge1xuICAgIExvZ2dlci5sb2dFcnJvcignT3JkZXJJdGVtSW5mbyBtdXN0IGJlIGFuIG9iamVjdCcsIHVuZGVmaW5lZCwgeyBkYXRhIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghaGFzUHJvcGVydHlPZlR5cGUoZGF0YSwgJ29yZGVyX2l0ZW1faWQnLCAnc3RyaW5nJykpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoJ09yZGVySXRlbUluZm8gbXVzdCBoYXZlIGFuIG9yZGVyX2l0ZW1faWQgcHJvcGVydHknLCB1bmRlZmluZWQsIHsgZGF0YSB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWhhc1Byb3BlcnR5T2ZUeXBlKGRhdGEsICdpdGVtX3RpdGxlJywgJ3N0cmluZycpKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKCdPcmRlckl0ZW1JbmZvIG11c3QgaGF2ZSBhbiBpdGVtX3RpdGxlIHByb3BlcnR5JywgdW5kZWZpbmVkLCB7IGRhdGEgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFoYXNQcm9wZXJ0eU9mVHlwZShkYXRhLCAnaXRlbV9wcmljZScsICdudW1iZXInKSkge1xuICAgIExvZ2dlci5sb2dFcnJvcignT3JkZXJJdGVtSW5mbyBtdXN0IGhhdmUgYW4gaXRlbV9wcmljZSBwcm9wZXJ0eScsIHVuZGVmaW5lZCwgeyBkYXRhIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghaGFzUHJvcGVydHlPZlR5cGUoZGF0YSwgJ2l0ZW1fcXVhbnRpdHknLCAnbnVtYmVyJykpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoJ09yZGVySXRlbUluZm8gbXVzdCBoYXZlIGFuIGl0ZW1fcXVhbnRpdHkgcHJvcGVydHknLCB1bmRlZmluZWQsIHsgZGF0YSB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWhhc1Byb3BlcnR5T2ZUeXBlKGRhdGEsICdpbWFnZScsICdzdHJpbmcnLCB0cnVlKSkge1xuICAgIExvZ2dlci5sb2dFcnJvcignT3JkZXJJdGVtSW5mby5pbWFnZSBtdXN0IGJlIGEgc3RyaW5nIG9yIG51bGwnLCB1bmRlZmluZWQsIHsgZGF0YSB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWhhc1Byb3BlcnR5T2ZUeXBlKGRhdGEsICdmdWxmaWxsbWVudF9kaXNwbGF5X3N0YXR1cycsICdzdHJpbmcnLCB0cnVlKSkge1xuICAgIExvZ2dlci5sb2dFcnJvcihcbiAgICAgICdPcmRlckl0ZW1JbmZvLmZ1bGZpbGxtZW50X2Rpc3BsYXlfc3RhdHVzIG11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbCcsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB7XG4gICAgICAgIGRhdGEsXG4gICAgICB9LFxuICAgICk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFoYXNQcm9wZXJ0eU9mVHlwZShkYXRhLCAndHJhY2tpbmdfdXJsJywgJ3N0cmluZycsIHRydWUpKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKCdPcmRlckl0ZW1JbmZvLnRyYWNraW5nX3VybCBtdXN0IGJlIGEgc3RyaW5nIG9yIG51bGwnLCB1bmRlZmluZWQsIHsgZGF0YSB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWhhc1Byb3BlcnR5T2ZUeXBlKGRhdGEsICdkZWxpdmVyZWRfYXQnLCAnc3RyaW5nJywgdHJ1ZSkpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoJ09yZGVySXRlbUluZm8uZGVsaXZlcmVkX2F0IG11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbCcsIHVuZGVmaW5lZCwgeyBkYXRhIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghaGFzUHJvcGVydHlPZlR5cGUoZGF0YSwgJ2VzdGltYXRlZF9kZWxpdmVyeV9hdCcsICdzdHJpbmcnLCB0cnVlKSkge1xuICAgIExvZ2dlci5sb2dFcnJvcignT3JkZXJJdGVtSW5mby5lc3RpbWF0ZWRfZGVsaXZlcnlfYXQgbXVzdCBiZSBhIHN0cmluZyBvciBudWxsJywgdW5kZWZpbmVkLCB7XG4gICAgICBkYXRhLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghaGFzUHJvcGVydHlPZlR5cGUoZGF0YSwgJ2luX3RyYW5zaXRfYXQnLCAnc3RyaW5nJywgdHJ1ZSkpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoJ09yZGVySXRlbUluZm8uaW5fdHJhbnNpdF9hdCBtdXN0IGJlIGEgc3RyaW5nIG9yIG51bGwnLCB1bmRlZmluZWQsIHsgZGF0YSB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0FwaU9yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzID0gKGRhdGE6IHVua25vd24pOiBkYXRhIGlzIEFwaU9yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzID0+IHtcbiAgaWYgKGRhdGEgPT0gbnVsbCB8fCB0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoJ09yZGVyIHJlc3BvbnNlIGF0dHJpYnV0ZXMgbXVzdCBiZSBhbiBvYmplY3QnLCB1bmRlZmluZWQsIHsgZGF0YSB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWhhc1Byb3BlcnR5T2ZUeXBlKGRhdGEsICdjcmVhdGVkX2F0JywgJ3N0cmluZycpKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKFxuICAgICAgJ09yZGVyIHJlc3BvbnNlIGF0dHJpYnV0ZXMgbXVzdCBoYXZlIGEgY3JlYXRlZF9hdCBwcm9wZXJ0eSBhbmQgaGF2ZSB0eXBlIHN0cmluZycsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB7XG4gICAgICAgIGRhdGEsXG4gICAgICB9LFxuICAgICk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFoYXNQcm9wZXJ0eU9mVHlwZShkYXRhLCAnbGF0ZXN0X2V2ZW50X2RhdGUnLCAnc3RyaW5nJykpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoXG4gICAgICAnT3JkZXIgcmVzcG9uc2UgYXR0cmlidXRlcyBtdXN0IGhhdmUgYSBsYXRlc3RfZXZlbnRfZGF0ZSBwcm9wZXJ0eSBhbmQgaGF2ZSB0eXBlIHN0cmluZycsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB7XG4gICAgICAgIGRhdGEsXG4gICAgICB9LFxuICAgICk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKFxuICAgICFoYXNQcm9wZXJ0eU9mVHlwZShkYXRhLCAnbGluZV9pdGVtcycsICdhcnJheScpIHx8XG4gICAgIWRhdGEubGluZV9pdGVtcy5ldmVyeSgoaXRlbTogdW5rbm93bikgPT4gaXNBcGlPcmRlckl0ZW1JbmZvKGl0ZW0pKVxuICApIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoXG4gICAgICAnT3JkZXIgcmVzcG9uc2UgYXR0cmlidXRlcyBtdXN0IGhhdmUgYSBsaW5lX2l0ZW1zIHByb3BlcnR5IHdpdGggYXQgbGVhc3Qgb25lIG9yZGVyIGl0ZW0nLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAge1xuICAgICAgICBkYXRhLFxuICAgICAgfSxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghaGFzUHJvcGVydHlPZlR5cGUoZGF0YSwgJ29yZGVyX2lkJywgJ3N0cmluZycpKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKFxuICAgICAgJ09yZGVyIHJlc3BvbnNlIGF0dHJpYnV0ZXMgbXVzdCBoYXZlIGFuIG9yZGVyX2lkIHByb3BlcnR5IGFuZCBoYXZlIHR5cGUgc3RyaW5nJyxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHtcbiAgICAgICAgZGF0YSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWhhc1Byb3BlcnR5T2ZUeXBlKGRhdGEsICdvcmRlcl9udW1iZXInLCAnc3RyaW5nJykpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoXG4gICAgICAnT3JkZXIgcmVzcG9uc2UgYXR0cmlidXRlcyBtdXN0IGhhdmUgYW4gb3JkZXJfbnVtYmVyIHByb3BlcnR5IGFuZCBoYXZlIHR5cGUgc3RyaW5nJyxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHtcbiAgICAgICAgZGF0YSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG4iLCJpbXBvcnQgdHlwZSB7XG4gIEFwaU9yZ0FuYWx5dGljc0NvbmZpZ0FtcGxpdHVkZSxcbiAgQXBpT3JnQW5hbHl0aWNzQ29uZmlnQ3VzdG9tZXJTZXJ2aWNlLFxuICBBcGlPcmdBbmFseXRpY3NDb25maWdHb29nbGVBbmFseXRpY3MsXG4gIEFwaU9yZ0FuYWx5dGljc0NvbmZpZyxcbiAgQXBpT3JnYW5pemF0aW9uQ29uZmlnLFxufSBmcm9tICdAZW52aXZlLWFpL3R5cGVzJztcbmltcG9ydCBMb2dnZXIgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyJztcblxuY29uc3QgaXNBcGlPcmdBbmFseXRpY3NDb25maWdBbXBsaXR1ZGUgPSAoXG4gIGRhdGE6IHVua25vd24sXG4pOiBkYXRhIGlzIEFwaU9yZ0FuYWx5dGljc0NvbmZpZ0FtcGxpdHVkZSA9PiB7XG4gIGlmIChkYXRhID09IG51bGwgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc0FwaU9yZ0FuYWx5dGljc0NvbmZpZ0FtcGxpdHVkZTogZGF0YSBpcyBub3QgYW4gb2JqZWN0JywgZGF0YSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCEoJ3Nlc3Npb25fcmVwbGF5X2VuYWJsZWQnIGluIGRhdGEpIHx8IHR5cGVvZiBkYXRhLnNlc3Npb25fcmVwbGF5X2VuYWJsZWQgIT09ICdib29sZWFuJykge1xuICAgIExvZ2dlci5sb2dEZWJ1ZyhcbiAgICAgICdbc3BpZmZ5LWFpXSBpc0FwaU9yZ0FuYWx5dGljc0NvbmZpZ0FtcGxpdHVkZTogc2Vzc2lvbl9yZXBsYXlfZW5hYmxlZCBpcyBub3QgYSBib29sZWFuJyxcbiAgICAgIGRhdGEsXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoXG4gICAgISgnc2Vzc2lvbl9yZXBsYXlfc2FtcGxlX3JhdGUnIGluIGRhdGEpIHx8XG4gICAgdHlwZW9mIGRhdGEuc2Vzc2lvbl9yZXBsYXlfc2FtcGxlX3JhdGUgIT09ICdudW1iZXInXG4gICkge1xuICAgIExvZ2dlci5sb2dEZWJ1ZyhcbiAgICAgICdbc3BpZmZ5LWFpXSBpc0FwaU9yZ0FuYWx5dGljc0NvbmZpZ0FtcGxpdHVkZTogc2Vzc2lvbl9yZXBsYXlfc2FtcGxlX3JhdGUgaXMgbm90IGEgbnVtYmVyJyxcbiAgICAgIGRhdGEsXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoISgndHJhY2tpbmdfZW5hYmxlZCcgaW4gZGF0YSkgfHwgdHlwZW9mIGRhdGEudHJhY2tpbmdfZW5hYmxlZCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgJ1tzcGlmZnktYWldIGlzQXBpT3JnQW5hbHl0aWNzQ29uZmlnQW1wbGl0dWRlOiB0cmFja2luZ19lbmFibGVkIGlzIG5vdCBhIGJvb2xlYW4nLFxuICAgICAgZGF0YSxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuY29uc3QgaXNBcGlPcmdBbmFseXRpY3NDb25maWdDdXN0b21lclNlcnZpY2UgPSAoXG4gIGRhdGE6IHVua25vd24sXG4pOiBkYXRhIGlzIEFwaU9yZ0FuYWx5dGljc0NvbmZpZ0N1c3RvbWVyU2VydmljZSA9PiB7XG4gIGlmIChkYXRhID09IG51bGwgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgJ1tzcGlmZnktYWldIGlzQXBpT3JnQW5hbHl0aWNzQ29uZmlnQ3VzdG9tZXJTZXJ2aWNlOiBkYXRhIGlzIG5vdCBhbiBvYmplY3QnLFxuICAgICAgZGF0YSxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghKCdwcm92aWRlcicgaW4gZGF0YSkgfHwgdHlwZW9mIGRhdGEucHJvdmlkZXIgIT09ICdzdHJpbmcnKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgJ1tzcGlmZnktYWldIGlzQXBpT3JnQW5hbHl0aWNzQ29uZmlnQ3VzdG9tZXJTZXJ2aWNlOiBwcm92aWRlciBpcyBub3QgYSBzdHJpbmcnLFxuICAgICAgZGF0YSxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuY29uc3QgaXNBcGlPcmdBbmFseXRpY3NDb25maWdHb29nbGVBbmFseXRpY3MgPSAoXG4gIGRhdGE6IHVua25vd24sXG4pOiBkYXRhIGlzIEFwaU9yZ0FuYWx5dGljc0NvbmZpZ0dvb2dsZUFuYWx5dGljcyA9PiB7XG4gIGlmIChkYXRhID09IG51bGwgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgJ1tzcGlmZnktYWldIGlzQXBpT3JnQW5hbHl0aWNzQ29uZmlnR29vZ2xlQW5hbHl0aWNzOiBkYXRhIGlzIG5vdCBhbiBvYmplY3QnLFxuICAgICAgZGF0YSxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghKCdtZWFzdXJlbWVudF9pZCcgaW4gZGF0YSkgfHwgdHlwZW9mIGRhdGEubWVhc3VyZW1lbnRfaWQgIT09ICdzdHJpbmcnKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgJ1tzcGlmZnktYWldIGlzQXBpT3JnQW5hbHl0aWNzQ29uZmlnR29vZ2xlQW5hbHl0aWNzOiBtZWFzdXJlbWVudF9pZCBpcyBub3QgYSBzdHJpbmcnLFxuICAgICAgZGF0YSxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGRhdGFcbiAqIEByZXR1cm5zXG4gKi9cbmNvbnN0IGlzQXBpT3JnQW5hbHl0aWNzQ29uZmlnID0gKGRhdGE6IHVua25vd24pOiBkYXRhIGlzIEFwaU9yZ0FuYWx5dGljc0NvbmZpZyA9PiB7XG4gIGlmIChkYXRhID09IG51bGwgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc09yZ0FuYWx5dGljc0NvbmZpZzogZGF0YSBpcyBub3QgYW4gb2JqZWN0JywgZGF0YSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCdhbXBsaXR1ZGUnIGluIGRhdGEgJiYgIWlzQXBpT3JnQW5hbHl0aWNzQ29uZmlnQW1wbGl0dWRlKGRhdGEuYW1wbGl0dWRlKSkge1xuICAgIExvZ2dlci5sb2dEZWJ1ZygnW3NwaWZmeS1haV0gaXNPcmdBbmFseXRpY3NDb25maWc6IGFtcGxpdHVkZSBpcyBub3QgYW4gb2JqZWN0JywgZGF0YSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKFxuICAgICdjdXN0b21lcl9zZXJ2aWNlJyBpbiBkYXRhICYmXG4gICAgIWlzQXBpT3JnQW5hbHl0aWNzQ29uZmlnQ3VzdG9tZXJTZXJ2aWNlKGRhdGEuY3VzdG9tZXJfc2VydmljZSlcbiAgKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc09yZ0FuYWx5dGljc0NvbmZpZzogY3VzdG9tZXJfc2VydmljZSBpcyBub3QgYW4gb2JqZWN0JywgZGF0YSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKFxuICAgICdnb29nbGVfYW5hbHl0aWNzJyBpbiBkYXRhICYmXG4gICAgIWlzQXBpT3JnQW5hbHl0aWNzQ29uZmlnR29vZ2xlQW5hbHl0aWNzKGRhdGEuZ29vZ2xlX2FuYWx5dGljcylcbiAgKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc09yZ0FuYWx5dGljc0NvbmZpZzogZ29vZ2xlX2FuYWx5dGljcyBpcyBub3QgYW4gb2JqZWN0JywgZGF0YSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gZGF0YVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGlzQXBpT3JnYW5pemF0aW9uQ29uZmlnID0gKGRhdGE6IHVua25vd24pOiBkYXRhIGlzIEFwaU9yZ2FuaXphdGlvbkNvbmZpZyA9PiB7XG4gIGlmIChkYXRhID09IG51bGwgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc09yZ0NvbmZpZzogZGF0YSBpcyBub3QgYW4gb2JqZWN0JywgZGF0YSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCEoJ2NyZWF0ZWRfYXQnIGluIGRhdGEpKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc09yZ0NvbmZpZzogY3JlYXRlZF9hdCBpcyBub3QgZGVmaW5lZCcsIGRhdGEpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghKCduYW1lc3BhY2UnIGluIGRhdGEpIHx8IHR5cGVvZiBkYXRhLm5hbWVzcGFjZSAhPT0gJ3N0cmluZycpIHtcbiAgICBMb2dnZXIubG9nRGVidWcoJ1tzcGlmZnktYWldIGlzT3JnQ29uZmlnOiBuYW1lc3BhY2UgaXMgbm90IGEgc3RyaW5nJywgZGF0YSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCEoJ2lzX2xhdGVzdCcgaW4gZGF0YSkgfHwgdHlwZW9mIGRhdGEuaXNfbGF0ZXN0ICE9PSAnYm9vbGVhbicpIHtcbiAgICBMb2dnZXIubG9nRGVidWcoJ1tzcGlmZnktYWldIGlzT3JnQ29uZmlnOiBpc19sYXRlc3QgaXMgbm90IGEgYm9vbGVhbicsIGRhdGEpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghKCd2ZXJzaW9uJyBpbiBkYXRhKSB8fCB0eXBlb2YgZGF0YS52ZXJzaW9uICE9PSAnc3RyaW5nJykge1xuICAgIExvZ2dlci5sb2dEZWJ1ZygnW3NwaWZmeS1haV0gaXNPcmdDb25maWc6IHZlcnNpb24gaXMgbm90IGEgc3RyaW5nJywgZGF0YSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCEoJ3VwZGF0ZWRfYXQnIGluIGRhdGEpKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc09yZ0NvbmZpZzogdXBkYXRlZF9hdCBpcyBub3QgZGVmaW5lZCcsIGRhdGEpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChcbiAgICAhKCdjb25maWcnIGluIGRhdGEpIHx8XG4gICAgdHlwZW9mIGRhdGEuY29uZmlnICE9PSAnb2JqZWN0JyB8fFxuICAgICFpc0FwaU9yZ0FuYWx5dGljc0NvbmZpZyhkYXRhLmNvbmZpZylcbiAgKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc09yZ0NvbmZpZzogY29uZmlnIGlzIG5vdCBhbiBvYmplY3QnLCBkYXRhKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoJ29yZ2FuaXphdGlvbl9pZCcgaW4gZGF0YSAmJiB0eXBlb2YgZGF0YS5vcmdhbml6YXRpb25faWQgIT09ICdzdHJpbmcnKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc09yZ0NvbmZpZzogb3JnYW5pemF0aW9uX2lkIGlzIG5vdCBhIHN0cmluZycsIGRhdGEpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICgnaWQnIGluIGRhdGEgJiYgdHlwZW9mIGRhdGEuaWQgIT09ICdzdHJpbmcnKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc09yZ0NvbmZpZzogaWQgaXMgbm90IGEgc3RyaW5nJywgZGF0YSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuIiwiaW1wb3J0IHtcbiAgU3RhdHNpZ0V4cGVyaW1lbnQgYXMgQXBpT3JnQ29uZmlnRXhwZXJpbWVudCxcbiAgU3RhdHNpZ0ZlYXR1cmVHYXRlIGFzIEFwaU9yZ0NvbmZpZ0ZlYXR1cmVHYXRlLFxuICBPcmdhbml6YXRpb25TZXR0aW5ncyBhcyBBcGlPcmdDb25maWdPcmdhbml6YXRpb25TZXR0aW5ncyxcbiAgT3JnYW5pemF0aW9uIGFzIEFwaU9yZ2FuaXphdGlvbixcbiAgT3JnYW5pemF0aW9uU3RhdHVzRW51bSxcbn0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmltcG9ydCB7IEFwaU9yZ0NvbmZpZ1Jlc3VsdHMgfSBmcm9tICdAZW52aXZlLWFpL3R5cGVzJztcbmltcG9ydCB7IGlzQXBpT3JnYW5pemF0aW9uQ29uZmlnIH0gZnJvbSAnLi9pc0FwaU9yZ2FuaXphdGlvbkNvbmZpZyc7XG5pbXBvcnQgTG9nZ2VyIGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9sb2dnaW5nL2xvZ2dlcic7XG5cbmNvbnN0IGlzQXBpT3JnQ29uZmlnRXhwZXJpbWVudCA9IChkYXRhOiB1bmtub3duKTogZGF0YSBpcyBBcGlPcmdDb25maWdFeHBlcmltZW50ID0+IHtcbiAgaWYgKGRhdGEgPT0gbnVsbCB8fCB0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICBMb2dnZXIubG9nRGVidWcoJ1tzcGlmZnktYWldIGlzQXBpT3JnQ29uZmlnRXhwZXJpbWVudDogZGF0YSBpcyBub3QgYW4gb2JqZWN0JywgdW5kZWZpbmVkLCB7XG4gICAgICBkYXRhLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICgnZ3JvdXAnIGluIGRhdGEgJiYgdHlwZW9mIGRhdGEuZ3JvdXAgIT09ICdzdHJpbmcnICYmIGRhdGEuZ3JvdXAgIT09IHVuZGVmaW5lZCkge1xuICAgIExvZ2dlci5sb2dEZWJ1ZyhcbiAgICAgICdbc3BpZmZ5LWFpXSBpc0FwaU9yZ0NvbmZpZ0V4cGVyaW1lbnQ6IGdyb3VwIGlzIG5vdCBhIHN0cmluZyBvciB1bmRlZmluZWQnLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAge1xuICAgICAgICBkYXRhLFxuICAgICAgfSxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChcbiAgICAnZ3JvdXBfbmFtZScgaW4gZGF0YSAmJlxuICAgIHR5cGVvZiBkYXRhLmdyb3VwX25hbWUgIT09ICdzdHJpbmcnICYmXG4gICAgZGF0YS5ncm91cF9uYW1lICE9PSB1bmRlZmluZWRcbiAgKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc0FwaU9yZ0NvbmZpZ0V4cGVyaW1lbnQ6IGdyb3VwX25hbWUgaXMgbm90IGEgc3RyaW5nJywgdW5kZWZpbmVkLCB7XG4gICAgICBkYXRhLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICgnbmFtZScgaW4gZGF0YSAmJiB0eXBlb2YgZGF0YS5uYW1lICE9PSAnc3RyaW5nJyAmJiBkYXRhLm5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgIExvZ2dlci5sb2dEZWJ1ZygnW3NwaWZmeS1haV0gaXNBcGlPcmdDb25maWdFeHBlcmltZW50OiBuYW1lIGlzIG5vdCBhIHN0cmluZycsIHVuZGVmaW5lZCwge1xuICAgICAgZGF0YSxcbiAgICB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoJ3J1bGVfaWQnIGluIGRhdGEgJiYgdHlwZW9mIGRhdGEucnVsZV9pZCAhPT0gJ3N0cmluZycgJiYgZGF0YS5ydWxlX2lkICE9PSB1bmRlZmluZWQpIHtcbiAgICBMb2dnZXIubG9nRGVidWcoJ1tzcGlmZnktYWldIGlzQXBpT3JnQ29uZmlnRXhwZXJpbWVudDogcnVsZV9pZCBpcyBub3QgYSBzdHJpbmcnLCB1bmRlZmluZWQsIHtcbiAgICAgIGRhdGEsXG4gICAgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCd2YWx1ZScgaW4gZGF0YSAmJiB0eXBlb2YgZGF0YS52YWx1ZSAhPT0gJ29iamVjdCcgJiYgZGF0YS52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc0FwaU9yZ0NvbmZpZ0V4cGVyaW1lbnQ6IHZhbHVlIGlzIG5vdCBhbiBvYmplY3QnLCB1bmRlZmluZWQsIHtcbiAgICAgIGRhdGEsXG4gICAgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5jb25zdCBpc0FwaU9yZ0NvbmZpZ0ZlYXR1cmVHYXRlID0gKGRhdGE6IHVua25vd24pOiBkYXRhIGlzIEFwaU9yZ0NvbmZpZ0ZlYXR1cmVHYXRlID0+IHtcbiAgaWYgKGRhdGEgPT0gbnVsbCB8fCB0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICBMb2dnZXIubG9nRGVidWcoJ1tzcGlmZnktYWldIGlzQXBpT3JnQ29uZmlnRmVhdHVyZUdhdGU6IGRhdGEgaXMgbm90IGFuIG9iamVjdCcsIHVuZGVmaW5lZCwge1xuICAgICAgZGF0YSxcbiAgICB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoJ25hbWUnIGluIGRhdGEgJiYgdHlwZW9mIGRhdGEubmFtZSAhPT0gJ3N0cmluZycgJiYgZGF0YS5uYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICBMb2dnZXIubG9nRGVidWcoJ1tzcGlmZnktYWldIGlzQXBpT3JnQ29uZmlnRmVhdHVyZUdhdGU6IG5hbWUgaXMgbm90IGEgc3RyaW5nJywgdW5kZWZpbmVkLCB7XG4gICAgICBkYXRhLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICgncnVsZV9pZCcgaW4gZGF0YSAmJiB0eXBlb2YgZGF0YS5ydWxlX2lkICE9PSAnc3RyaW5nJyAmJiBkYXRhLnJ1bGVfaWQgIT09IHVuZGVmaW5lZCkge1xuICAgIExvZ2dlci5sb2dEZWJ1ZygnW3NwaWZmeS1haV0gaXNBcGlPcmdDb25maWdGZWF0dXJlR2F0ZTogcnVsZV9pZCBpcyBub3QgYSBzdHJpbmcnLCB1bmRlZmluZWQsIHtcbiAgICAgIGRhdGEsXG4gICAgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCd2YWx1ZScgaW4gZGF0YSAmJiB0eXBlb2YgZGF0YS52YWx1ZSAhPT0gJ2Jvb2xlYW4nICYmIGRhdGEudmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgIExvZ2dlci5sb2dEZWJ1ZygnW3NwaWZmeS1haV0gaXNBcGlPcmdDb25maWdGZWF0dXJlR2F0ZTogdmFsdWUgaXMgbm90IGEgYm9vbGVhbicsIHVuZGVmaW5lZCwge1xuICAgICAgZGF0YSxcbiAgICB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmNvbnN0IGlzQXBpT3JnYW5pemF0aW9uID0gKGRhdGE6IHVua25vd24pOiBkYXRhIGlzIEFwaU9yZ2FuaXphdGlvbiA9PiB7XG4gIGlmIChkYXRhID09IG51bGwgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc0FwaU9yZ2FuaXphdGlvbjogZGF0YSBpcyBub3QgYW4gb2JqZWN0JywgdW5kZWZpbmVkLCB7XG4gICAgICBkYXRhLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghKCdpZCcgaW4gZGF0YSkgfHwgdHlwZW9mIGRhdGEuaWQgIT09ICdzdHJpbmcnKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc0FwaU9yZ2FuaXphdGlvbjogaWQgaXMgbm90IGEgc3RyaW5nJywgdW5kZWZpbmVkLCB7XG4gICAgICBkYXRhLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghKCdkaXNwbGF5X25hbWUnIGluIGRhdGEpIHx8IHR5cGVvZiBkYXRhLmRpc3BsYXlfbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICBMb2dnZXIubG9nRGVidWcoJ1tzcGlmZnktYWldIGlzQXBpT3JnYW5pemF0aW9uOiBkaXNwbGF5X25hbWUgaXMgbm90IGEgc3RyaW5nJywgdW5kZWZpbmVkLCB7XG4gICAgICBkYXRhLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghKCdkb21haW4nIGluIGRhdGEpIHx8IHR5cGVvZiBkYXRhLmRvbWFpbiAhPT0gJ3N0cmluZycpIHtcbiAgICBMb2dnZXIubG9nRGVidWcoJ1tzcGlmZnktYWldIGlzQXBpT3JnYW5pemF0aW9uOiBkb21haW4gaXMgbm90IGEgc3RyaW5nJywgdW5kZWZpbmVkLCB7XG4gICAgICBkYXRhLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghKCdzaG9ydF9uYW1lJyBpbiBkYXRhKSB8fCB0eXBlb2YgZGF0YS5zaG9ydF9uYW1lICE9PSAnc3RyaW5nJykge1xuICAgIExvZ2dlci5sb2dEZWJ1ZygnW3NwaWZmeS1haV0gaXNBcGlPcmdhbml6YXRpb246IHNob3J0X25hbWUgaXMgbm90IGEgc3RyaW5nJywgdW5kZWZpbmVkLCB7XG4gICAgICBkYXRhLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChcbiAgICAhKCdzdGF0dXMnIGluIGRhdGEpIHx8XG4gICAgIU9iamVjdC52YWx1ZXMoT3JnYW5pemF0aW9uU3RhdHVzRW51bSkuaW5jbHVkZXMoZGF0YS5zdGF0dXMgYXMgT3JnYW5pemF0aW9uU3RhdHVzRW51bSlcbiAgKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgJ1tzcGlmZnktYWldIGlzQXBpT3JnYW5pemF0aW9uOiBzdGF0dXMgaXMgbm90IGEgdmFsaWQgT3JnYW5pemF0aW9uU3RhdHVzRW51bSB2YWx1ZScsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB7XG4gICAgICAgIGRhdGEsXG4gICAgICB9LFxuICAgICk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKFxuICAgICdjcmVhdGVkX2F0JyBpbiBkYXRhICYmXG4gICAgIShkYXRhLmNyZWF0ZWRfYXQgaW5zdGFuY2VvZiBEYXRlKSAmJlxuICAgIHR5cGVvZiBkYXRhLmNyZWF0ZWRfYXQgIT09ICdzdHJpbmcnICYmXG4gICAgZGF0YS5jcmVhdGVkX2F0ICE9PSB1bmRlZmluZWRcbiAgKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc0FwaU9yZ2FuaXphdGlvbjogY3JlYXRlZF9hdCBpcyBub3QgYSBEYXRlJywgdW5kZWZpbmVkLCB7XG4gICAgICBkYXRhLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChcbiAgICAndXBkYXRlZF9hdCcgaW4gZGF0YSAmJlxuICAgICEoZGF0YS51cGRhdGVkX2F0IGluc3RhbmNlb2YgRGF0ZSkgJiZcbiAgICB0eXBlb2YgZGF0YS51cGRhdGVkX2F0ICE9PSAnc3RyaW5nJyAmJlxuICAgIGRhdGEudXBkYXRlZF9hdCAhPT0gdW5kZWZpbmVkXG4gICkge1xuICAgIExvZ2dlci5sb2dEZWJ1ZygnW3NwaWZmeS1haV0gaXNBcGlPcmdhbml6YXRpb246IHVwZGF0ZWRfYXQgaXMgbm90IGEgRGF0ZScsIHVuZGVmaW5lZCwge1xuICAgICAgZGF0YSxcbiAgICB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmNvbnN0IGlzQXBpT3JnQ29uZmlnT3JnYW5pemF0aW9uU2V0dGluZ3MgPSAoXG4gIGRhdGE6IHVua25vd24sXG4pOiBkYXRhIGlzIEFwaU9yZ0NvbmZpZ09yZ2FuaXphdGlvblNldHRpbmdzID0+IHtcbiAgaWYgKGRhdGEgPT0gbnVsbCB8fCB0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICBMb2dnZXIubG9nRGVidWcoXG4gICAgICAnW3NwaWZmeS1haV0gaXNBcGlPcmdDb25maWdPcmdhbml6YXRpb25TZXR0aW5nczogZGF0YSBpcyBub3QgYW4gb2JqZWN0JyxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHtcbiAgICAgICAgZGF0YSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoISgnb3JnJyBpbiBkYXRhKSB8fCAhaXNBcGlPcmdhbml6YXRpb24oZGF0YS5vcmcpKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgJ1tzcGlmZnktYWldIGlzQXBpT3JnQ29uZmlnT3JnYW5pemF0aW9uU2V0dGluZ3M6IG9yZyBpcyBub3QgYW4gb2JqZWN0JyxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHtcbiAgICAgICAgZGF0YSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBza2lwIHZhbGlkYXRpb24gZm9yICdzZXR0aW5ncycgZm9yIG5vd1xuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGRhdGFcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBpc0FwaU9yZ0NvbmZpZ1Jlc3VsdHMgPSAoZGF0YTogdW5rbm93bik6IGRhdGEgaXMgUmVxdWlyZWQ8QXBpT3JnQ29uZmlnUmVzdWx0cz4gPT4ge1xuICBpZiAoZGF0YSA9PSBudWxsIHx8IHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0Jykge1xuICAgIExvZ2dlci5sb2dEZWJ1ZygnW3NwaWZmeS1haV0gaXNBcGlPcmdDb25maWdSZXN1bHRzOiBkYXRhIGlzIG5vdCBhbiBvYmplY3QnLCB1bmRlZmluZWQsIHtcbiAgICAgIGRhdGEsXG4gICAgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKFxuICAgICEoJ2NvbmZpZ3MnIGluIGRhdGEpIHx8XG4gICAgIUFycmF5LmlzQXJyYXkoZGF0YS5jb25maWdzKSB8fFxuICAgICFkYXRhLmNvbmZpZ3MuZXZlcnkoKGNvbmZpZykgPT4gaXNBcGlPcmdhbml6YXRpb25Db25maWcoY29uZmlnKSlcbiAgKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc0FwaU9yZ0NvbmZpZ1Jlc3VsdHM6IGNvbmZpZ3MgaXMgbm90IGFuIGFycmF5JywgdW5kZWZpbmVkLCB7XG4gICAgICBkYXRhLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChcbiAgICAnZXhwZXJpbWVudHMnIGluIGRhdGEgJiZcbiAgICBkYXRhLmV4cGVyaW1lbnRzICE9PSB1bmRlZmluZWQgJiZcbiAgICAoIUFycmF5LmlzQXJyYXkoZGF0YS5leHBlcmltZW50cykgfHxcbiAgICAgICFkYXRhLmV4cGVyaW1lbnRzLmV2ZXJ5KChleHApID0+IGlzQXBpT3JnQ29uZmlnRXhwZXJpbWVudChleHApKSlcbiAgKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgJ1tzcGlmZnktYWldIGlzQXBpT3JnQ29uZmlnUmVzdWx0czogZXhwZXJpbWVudHMgaXMgbm90IGFuIGFycmF5IG9yIGNvbnRhaW5zIGludmFsaWQgaXRlbXMnLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAge1xuICAgICAgICBkYXRhLFxuICAgICAgfSxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChcbiAgICAhKCdnYXRlcycgaW4gZGF0YSkgfHxcbiAgICAhQXJyYXkuaXNBcnJheShkYXRhLmdhdGVzKSB8fFxuICAgICFkYXRhLmdhdGVzLmV2ZXJ5KChnYXRlKSA9PiBpc0FwaU9yZ0NvbmZpZ0ZlYXR1cmVHYXRlKGdhdGUpKVxuICApIHtcbiAgICBMb2dnZXIubG9nRGVidWcoXG4gICAgICAnW3NwaWZmeS1haV0gaXNBcGlPcmdDb25maWdSZXN1bHRzOiBnYXRlcyBpcyBub3QgYW4gYXJyYXkgb3IgY29udGFpbnMgaW52YWxpZCBpdGVtcycsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB7XG4gICAgICAgIGRhdGEsXG4gICAgICB9LFxuICAgICk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCEoJ29yZycgaW4gZGF0YSkgfHwgIWlzQXBpT3JnQ29uZmlnT3JnYW5pemF0aW9uU2V0dGluZ3MoZGF0YS5vcmcpKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgJ1tzcGlmZnktYWldIGlzQXBpT3JnQ29uZmlnUmVzdWx0czogb3JnIGlzIG5vdCBhbiBvYmplY3Qgb3IgaGFzIGludmFsaWQgZmllbGRzJyxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHsgZGF0YSB9LFxuICAgICk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG4iLCJpbXBvcnQgeyBBcGlQYWdlUmVzcG9uc2VBdHRyaWJ1dGVzIH0gZnJvbSAnQGVudml2ZS1haS90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBpc0FwaVBhZ2VSZXNwb25zZUF0dHJpYnV0ZXMgPSAob2JqOiB1bmtub3duKTogb2JqIGlzIEFwaVBhZ2VSZXNwb25zZUF0dHJpYnV0ZXMgPT4ge1xuICBpZiAob2JqID09IG51bGwgfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoJ3RpdGxlJyBpbiBvYmogJiYgb2JqLnRpdGxlICE9IG51bGwgJiYgdHlwZW9mIG9iai50aXRsZSAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoJ2Rlc2NyaXB0aW9uJyBpbiBvYmogJiYgdHlwZW9mIG9iai5kZXNjcmlwdGlvbiAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoJ3VybCcgaW4gb2JqICYmIHR5cGVvZiBvYmoudXJsICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcbiIsImltcG9ydCB7XG4gIFBMUEF0dHJpYnV0ZUNhdGVnb3J5LFxuICBQTFBBdHRyaWJ1dGVzLFxuICBQTFBJZEF0dHJpYnV0ZXMsXG59IGZyb20gXCJAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnRcIjtcblxuZXhwb3J0IGNvbnN0IGlzQXBpUExQSWRBdHRyaWJ1dGUgPSAoZGF0YTogdW5rbm93bik6IGRhdGEgaXMgUExQSWRBdHRyaWJ1dGVzID0+IHtcbiAgaWYgKGRhdGEgPT0gbnVsbCB8fCB0eXBlb2YgZGF0YSAhPT0gXCJvYmplY3RcIikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghKFwiaWRcIiBpbiBkYXRhKSB8fCB0eXBlb2YgZGF0YS5pZCAhPT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzQXBpUExQRXZlbnRBdHRyaWJ1dGVzID0gKFxuICBkYXRhOiB1bmtub3duXG4pOiBkYXRhIGlzIFBMUEF0dHJpYnV0ZXMgPT4ge1xuICBpZiAoZGF0YSA9PSBudWxsIHx8IHR5cGVvZiBkYXRhICE9PSBcIm9iamVjdFwiKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKFxuICAgICEoXCJjYXRlZ29yeVwiIGluIGRhdGEpIHx8XG4gICAgdHlwZW9mIGRhdGEuY2F0ZWdvcnkgIT09IFwic3RyaW5nXCIgfHxcbiAgICAhT2JqZWN0LnZhbHVlcyhQTFBBdHRyaWJ1dGVDYXRlZ29yeSkuaW5jbHVkZXMoXG4gICAgICBkYXRhLmNhdGVnb3J5IGFzIFBMUEF0dHJpYnV0ZUNhdGVnb3J5XG4gICAgKVxuICApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoXG4gICAgIShcImF0dHJpYnV0ZXNcIiBpbiBkYXRhKSB8fFxuICAgIHR5cGVvZiBkYXRhLmF0dHJpYnV0ZXMgIT09IFwib2JqZWN0XCIgfHxcbiAgICAhaXNBcGlQTFBJZEF0dHJpYnV0ZShkYXRhLmF0dHJpYnV0ZXMpXG4gICkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcbiIsImltcG9ydCB7IFByb2R1Y3RTZWFyY2hGaWx0ZXJSZXNwb25zZUF0dHJpYnV0ZXMgfSBmcm9tIFwiQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50XCI7XG5cbmV4cG9ydCBjb25zdCBpc0FwaVByb2R1Y3RTZWFyY2hGaWx0ZXJSZXNwb25zZUF0dHJpYnV0ZXMgPSAoXG4gIGF0dHJpYnV0ZXM6IHVua25vd25cbik6IGF0dHJpYnV0ZXMgaXMgUHJvZHVjdFNlYXJjaEZpbHRlclJlc3BvbnNlQXR0cmlidXRlcyA9PiB7XG4gIGlmIChhdHRyaWJ1dGVzID09IG51bGwgfHwgdHlwZW9mIGF0dHJpYnV0ZXMgIT09IFwib2JqZWN0XCIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoXG4gICAgXCJmaWx0ZXJfbmFtZVwiIGluIGF0dHJpYnV0ZXMgJiZcbiAgICB0eXBlb2YgYXR0cmlidXRlcy5maWx0ZXJfbmFtZSAhPT0gXCJzdHJpbmdcIlxuICApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG4iLCJpbXBvcnQgeyBHZXRNZXJjaGFudENvbG9yc1F1ZXJ5RGF0YSB9IGZyb20gJ0BlbnZpdmUtYWkvdHlwZXMnO1xuaW1wb3J0IExvZ2dlciBmcm9tICdzcmMvYXBwbGljYXRpb24vbG9nZ2luZy9sb2dnZXInO1xuXG5jb25zdCBSRVFVSVJFRF9DT0xPUl9GSUVMRFMgPSBbXG4gICdhY2NlbnRfcHJpbWFyeScsXG4gICdhY2NlbnRfc2Vjb25kYXJ5JyxcbiAgJ2JhY2tncm91bmRfZGFyaycsXG4gICdiYWNrZ3JvdW5kX2xpZ2h0JyxcbiAgJ2JhY2tncm91bmRfcHJpbWFyeScsXG4gICdiYWNrZ3JvdW5kX3NhdHVyYXRlZCcsXG4gICdiYWNrZ3JvdW5kX3NlY29uZGFyeScsXG4gICdiYWNrZ3JvdW5kX3NlY29uZGFyeV9kYXJrJyxcbiAgJ2JhY2tncm91bmRfdGVydGlhcnknLFxuICAnYm9yZGVyX2RhcmsnLFxuICAnYm9yZGVyX2xpZ2h0JyxcbiAgJ2JvcmRlcl9tZWRpdW0nLFxuICAnYm9yZGVyX291dGxpbmUnLFxuICAndGV4dF9hY2NlbnQnLFxuICAndGV4dF9saWdodCcsXG4gICd0ZXh0X2xpbmsnLFxuICAndGV4dF9wcmltYXJ5JyxcbiAgJ3RleHRfc2Vjb25kYXJ5Jyxcbl0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBpc0dyYXBoUUxDb2xvcnNDb25maWcgPSAoZGF0YTogdW5rbm93bik6IGRhdGEgaXMgR2V0TWVyY2hhbnRDb2xvcnNRdWVyeURhdGEgPT4ge1xuICBpZiAodHlwZW9mIGRhdGEgIT09ICdvYmplY3QnIHx8IGRhdGEgPT09IG51bGwpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoJ0ludmFsaWQgZ3JhcGhxbCByZXNwb25zZSBmb3IgY29sb3JzIGNvbmZpZycsIHVuZGVmaW5lZCwgeyBkYXRhIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIENoZWNrIGVhY2ggcmVxdWlyZWQgZmllbGRcbiAgY29uc3QgbWlzc2luZ0ZpZWxkcyA9IFJFUVVJUkVEX0NPTE9SX0ZJRUxEUy5maWx0ZXIoXG4gICAgKGZpZWxkKSA9PiAhKGZpZWxkIGluIGRhdGEpIHx8IHR5cGVvZiAoZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbZmllbGRdICE9PSAnc3RyaW5nJyxcbiAgKTtcblxuICBpZiAobWlzc2luZ0ZpZWxkcy5sZW5ndGggPT09IFJFUVVJUkVEX0NPTE9SX0ZJRUxEUy5sZW5ndGgpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoJ0FsbCBjb2xvciBmaWVsZHMgYXJlIG1pc3Npbmcgb3IgbnVsbCcsIHVuZGVmaW5lZCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKG1pc3NpbmdGaWVsZHMubGVuZ3RoID4gMCkge1xuICAgIExvZ2dlci5sb2dFcnJvcignTWlzc2luZyBvciBpbnZhbGlkIGNvbG9yIGZpZWxkcycsIHVuZGVmaW5lZCwge1xuICAgICAgZGF0YSxcbiAgICAgIG1pc3NpbmdGaWVsZHMsXG4gICAgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuIiwiLyoqXG4gKiBHZW5lcmljIHV0aWxpdHkgdG8gdHJhbnNmb3JtIHNuYWtlX2Nhc2Ugb2JqZWN0IGtleXMgdG8gY2FtZWxDYXNlIGF0IHJ1bnRpbWUuXG4gKiBUaGlzIGlzIHRoZSBydW50aW1lIGVxdWl2YWxlbnQgb2YgdGhlIENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcCB0eXBlIHV0aWxpdHkuXG4gKi9cblxuLy8gTGlzdCBvZiBhY3JvbnltcyB0aGF0IHNob3VsZCBiZSBwcmVzZXJ2ZWQgYXMgdXBwZXJjYXNlIGluIGNhbWVsQ2FzZSBhbmQgbG93ZXJjYXNlIGluIHNuYWtlX2Nhc2VcbmNvbnN0IFBSRVNFUlZFRF9BQ1JPTllNUyA9IFsnUExQJywgJ1BEUCcsICdTVkcnXTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIHNuYWtlX2Nhc2Ugc3RyaW5nIHRvIGNhbWVsQ2FzZVxuICogSGFuZGxlcyBzcGVjaWZpYyBhY3JvbnltcyBsaWtlIFBMUCBhbmQgUERQIGNvcnJlY3RseVxuICovXG5jb25zdCB0b0NhbWVsQ2FzZSA9IChzdHI6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIC8vIFByZS1wcm9jZXNzOiBjb252ZXJ0IGFsbCB3b3JkcyB0aGF0IG1hdGNoIHRoZSBQUkVTRVJWRURfQUNST05ZTVMgcmVnZXggdG8gdXBwZXJjYXNlXG4gIGxldCBwcm9jZXNzZWRTdHIgPSBzdHI7XG4gIGZvciAoY29uc3QgYWNyb255bSBvZiBQUkVTRVJWRURfQUNST05ZTVMpIHtcbiAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoYF8ke2Fjcm9ueW19Xz9gLCAnZ2knKTtcblxuICAgIGlmIChwcm9jZXNzZWRTdHIubWF0Y2gocmVnZXgpKSB7XG4gICAgICBwcm9jZXNzZWRTdHIgPSBwcm9jZXNzZWRTdHIucmVwbGFjZShyZWdleCwgKHYpID0+XG4gICAgICAgIHYuZW5kc1dpdGgoJ18nKSA/IGAke2Fjcm9ueW19X2AgOiBgJHthY3JvbnltfWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcHJvY2Vzc2VkU3RyLnJlcGxhY2UoL18oW2Etel0pL2csIChfLCBsZXR0ZXIpID0+IGxldHRlci50b1VwcGVyQ2FzZSgpKTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYSBjYW1lbENhc2Ugc3RyaW5nIHRvIHNuYWtlX2Nhc2VcbiAqIEhhbmRsZXMgY29uc2VjdXRpdmUgY2FwaXRhbCBsZXR0ZXJzIGNvcnJlY3RseSAoZS5nLiwgXCJQRFBcIiAtPiBcInBkcFwiLCBub3QgXCJwX2RfcFwiKVxuICogUHJlc2VydmVzIHNwZWNpZmljIGFjcm9ueW1zIGxpa2UgUExQIGFuZCBQRFAgYXMgbG93ZXJjYXNlIGluIHNuYWtlX2Nhc2VcbiAqL1xuY29uc3QgdG9TbmFrZUNhc2UgPSAoc3RyOiBzdHJpbmcpID0+XG4gIHN0clxuICAgIC5yZXBsYWNlKC8oW0EtWl0pKD89W2Etel0pL2csICdfJDEnKVxuICAgIC5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCAnJDFfJDInKVxuICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgLnJlcGxhY2UoL15fLywgJycpO1xuXG4vKipcbiAqIFJlY3Vyc2l2ZWx5IHRyYW5zZm9ybXMgYWxsIG9iamVjdCBrZXlzIGZyb20gc25ha2VfY2FzZSB0byBjYW1lbENhc2VcbiAqL1xuZXhwb3J0IGNvbnN0IHRyYW5zZm9ybVNuYWtlVG9DYW1lbCA9IChvYmo6IHVua25vd24pOiB1bmtub3duID0+IHtcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgcmV0dXJuIG9iai5tYXAoKHZhbCkgPT4gdHJhbnNmb3JtU25ha2VUb0NhbWVsKHZhbCkpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMob2JqKSkge1xuICAgICAgY29uc3QgY2FtZWxLZXkgPSB0b0NhbWVsQ2FzZShrZXkpO1xuICAgICAgcmVzdWx0W2NhbWVsS2V5XSA9IHRyYW5zZm9ybVNuYWtlVG9DYW1lbCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59O1xuXG4vKipcbiAqIFJlY3Vyc2l2ZWx5IHRyYW5zZm9ybXMgYWxsIG9iamVjdCBrZXlzIGZyb20gY2FtZWxDYXNlIHRvIHNuYWtlX2Nhc2VcbiAqL1xuZXhwb3J0IGNvbnN0IHRyYW5zZm9ybUNhbWVsVG9TbmFrZSA9IChvYmo6IHVua25vd24pOiB1bmtub3duID0+IHtcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgcmV0dXJuIG9iai5tYXAodHJhbnNmb3JtQ2FtZWxUb1NuYWtlKTtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG9iaikpIHtcbiAgICAgIGNvbnN0IHNuYWtlS2V5ID0gdG9TbmFrZUNhc2Uoa2V5KTtcbiAgICAgIHJlc3VsdFtzbmFrZUtleV0gPSB0cmFuc2Zvcm1DYW1lbFRvU25ha2UodmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufTtcbiIsImltcG9ydCB7IEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cyB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5cbi8qKlxuICogQ29udmVydHMgYSBzdHJpbmcgdG8gYSBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMgZW51bSB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0gc3RhdHVzIC0gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICpcbiAqIEByZXR1cm5zIFRoZSBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMgZW51bSB2YWx1ZSBvciB1bmRlZmluZWQgaWYgdGhlIHN0cmluZ1xuICogZG9lcyBub3QgbWFwIHRvIGEgdmFsaWQgZW51bVxuICovXG5leHBvcnQgY29uc3Qgc3RyaW5nVG9GdWxmaWxsbWVudERpc3BsYXlTdGF0dXNFbnVtVmFsdWUgPSAoXG4gIHN0YXR1czogc3RyaW5nLFxuKTogRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzIHwgdW5kZWZpbmVkID0+IHtcbiAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICBjYXNlICdBVFRFTVBURURfREVMSVZFUlknOlxuICAgICAgcmV0dXJuIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cy5BVFRFTVBURURfREVMSVZFUlk7XG4gICAgY2FzZSAnQ0FOQ0VMRUQnOlxuICAgICAgcmV0dXJuIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cy5DQU5DRUxFRDtcbiAgICBjYXNlICdDT05GSVJNRUQnOlxuICAgICAgcmV0dXJuIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cy5DT05GSVJNRUQ7XG4gICAgY2FzZSAnREVMSVZFUkVEJzpcbiAgICAgIHJldHVybiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMuREVMSVZFUkVEO1xuICAgIGNhc2UgJ0ZBSUxVUkUnOlxuICAgICAgcmV0dXJuIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cy5GQUlMVVJFO1xuICAgIGNhc2UgJ0ZVTEZJTExFRCc6XG4gICAgICByZXR1cm4gRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzLkZVTEZJTExFRDtcbiAgICBjYXNlICdJTl9UUkFOU0lUJzpcbiAgICAgIHJldHVybiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMuSU5fVFJBTlNJVDtcbiAgICBjYXNlICdMQUJFTF9QUklOVEVEJzpcbiAgICAgIHJldHVybiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMuTEFCRUxfUFJJTlRFRDtcbiAgICBjYXNlICdMQUJFTF9QVVJDSEFTRUQnOlxuICAgICAgcmV0dXJuIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cy5MQUJFTF9QVVJDSEFTRUQ7XG4gICAgY2FzZSAnTEFCRUxfVk9JREVEJzpcbiAgICAgIHJldHVybiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMuTEFCRUxfVk9JREVEO1xuICAgIGNhc2UgJ01BUktFRF9BU19GVUxGSUxMRUQnOlxuICAgICAgcmV0dXJuIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cy5NQVJLRURfQVNfRlVMRklMTEVEO1xuICAgIGNhc2UgJ05PVF9ERUxJVkVSRUQnOlxuICAgICAgcmV0dXJuIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cy5OT1RfREVMSVZFUkVEO1xuICAgIGNhc2UgJ09VVF9GT1JfREVMSVZFUlknOlxuICAgICAgcmV0dXJuIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cy5PVVRfRk9SX0RFTElWRVJZO1xuICAgIGNhc2UgJ1BJQ0tFRF9VUCc6XG4gICAgICByZXR1cm4gRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzLlBJQ0tFRF9VUDtcbiAgICBjYXNlICdSRUFEWV9GT1JfUElDS1VQJzpcbiAgICAgIHJldHVybiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMuUkVBRFlfRk9SX1BJQ0tVUDtcbiAgICBjYXNlICdTVUJNSVRURUQnOlxuICAgICAgcmV0dXJuIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cy5TVUJNSVRURUQ7XG4gICAgY2FzZSAnSU5fUFJPR1JFU1MnOlxuICAgICAgcmV0dXJuIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cy5JTl9QUk9HUkVTUztcbiAgICBjYXNlICdPTl9IT0xEJzpcbiAgICAgIHJldHVybiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMuT05fSE9MRDtcbiAgICBjYXNlICdPUEVOJzpcbiAgICAgIHJldHVybiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMuT1BFTjtcbiAgICBjYXNlICdQQVJUSUFMTFlfRlVMRklMTEVEJzpcbiAgICAgIHJldHVybiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMuUEFSVElBTExZX0ZVTEZJTExFRDtcbiAgICBjYXNlICdQRU5ESU5HX0ZVTEZJTExNRU5UJzpcbiAgICAgIHJldHVybiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMuUEVORElOR19GVUxGSUxMTUVOVDtcbiAgICBjYXNlICdSRVFVRVNUX0RFQ0xJTkVEJzpcbiAgICAgIHJldHVybiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMuUkVRVUVTVF9ERUNMSU5FRDtcbiAgICBjYXNlICdSRVNUT0NLRUQnOlxuICAgICAgcmV0dXJuIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cy5SRVNUT0NLRUQ7XG4gICAgY2FzZSAnU0NIRURVTEVEJzpcbiAgICAgIHJldHVybiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMuU0NIRURVTEVEO1xuICAgIGNhc2UgJ1VORlVMRklMTEVEJzpcbiAgICAgIHJldHVybiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMuVU5GVUxGSUxMRUQ7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn07XG4iLCIvLyBpbXBvcnQgeyBDb2xvck1hcHBpbmcsIENvbG9yTmFtZXMgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi90eXBlcy9zcmMvY29sb3JzQ29uZmlnJztcbi8vIGltcG9ydCB7IGlzR3JhcGhRTENvbG9yc0NvbmZpZyB9IGZyb20gJy4uLy4uL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvZ3JhcGhRTC9pc0dyYXBoUUxDb2xvcnNDb25maWcnO1xuXG5pbXBvcnQgeyBDb2xvck1hcHBpbmcgfSBmcm9tIFwiQGVudml2ZS1haS90eXBlc1wiO1xuaW1wb3J0IHsgaXNHcmFwaFFMQ29sb3JzQ29uZmlnIH0gZnJvbSBcIi4uL2d1YXJkcy9ncmFwaFFML2lzR3JhcGhRTENvbG9yc0NvbmZpZ1wiO1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVHcmFwaFFMQ29sb3JzQ29uZmlnID0gKFxuICBkYXRhOiB1bmtub3duXG4pOiBDb2xvck1hcHBpbmcgfCB1bmRlZmluZWQgPT4ge1xuICBpZiAoIWlzR3JhcGhRTENvbG9yc0NvbmZpZyhkYXRhKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG4iLCJpbXBvcnQge1xuICBET01JbnNlcnRpb25UeXBlLFxuICBGcm9udGVuZENvbmZpZyxcbiAgR3JpZEluc2VydGlvblR5cGUsXG4gIFBhZ2VWYXJpYW50Q29uZmlnLFxuICBQYWdlVmFyaWFudFRlc3RUeXBlLFxuICBXaWRnZXRDb25maWcsXG4gIFdpZGdldE1vdW50aW5nQ29uZmlnLFxufSBmcm9tICdAZW52aXZlLWFpL3R5cGVzJztcbmltcG9ydCBMb2dnZXIgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyJztcbmltcG9ydCB7IHRyYW5zZm9ybVNuYWtlVG9DYW1lbCB9IGZyb20gJy4uL3V0aWxzL3NuYWtlVG9DYW1lbFRyYW5zZm9ybWVyJztcblxuLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGFuZCB0cmFuc2Zvcm0gUGFnZVZhcmlhbnRRdWVyeURhdGEgdG8gUGFnZVZhcmlhbnRDb25maWdcbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUFuZFRyYW5zZm9ybVBhZ2VWYXJpYW50cyA9IChcbiAgY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbik6IFBhZ2VWYXJpYW50Q29uZmlnID0+IHtcbiAgY29uc3QgdHJhbnNmb3JtZWQgPSB0cmFuc2Zvcm1TbmFrZVRvQ2FtZWwoY29uZmlnKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICBjb25zdCB7IHZhcmlhbnRDaGVja3MsIHdpZGdldE1vdW50aW5nLCAuLi5yZXN0IH0gPSB0cmFuc2Zvcm1lZDtcblxuICAvLyBDb252ZXJ0IHZhcmlhbnRDaGVja3MgdG8gdmFyaWFudFRlc3RzIHdpdGggdGVzdFR5cGUgbm9ybWFsaXphdGlvblxuICBjb25zdCB2YXJpYW50VGVzdHMgPSBBcnJheS5pc0FycmF5KHZhcmlhbnRDaGVja3MpXG4gICAgPyB2YXJpYW50Q2hlY2tzLm1hcCgoeyBjaGVja1R5cGUsIC4uLnJlc3RDaGVjayB9KSA9PiAoe1xuICAgICAgICAuLi5yZXN0Q2hlY2ssXG4gICAgICAgIHRlc3RUeXBlOiBjaGVja1R5cGUsXG4gICAgICB9KSlcbiAgICA6IFtdO1xuXG4gIC8vIE5vcm1hbGl6ZSB3aWRnZXRNb3VudGluZzogY2hlY2tzIC0+IHRlc3RzLCBjaGVja1R5cGUgLT4gdGVzdFR5cGVcbiAgY29uc3Qgbm9ybWFsaXplZFdpZGdldE1vdW50aW5nID0gQXJyYXkuaXNBcnJheSh3aWRnZXRNb3VudGluZylcbiAgICA/IHdpZGdldE1vdW50aW5nLm1hcCgoeyBtb3VudGluZ1BvaW50V2lkZ2V0cywgLi4ucmVzdE1vdW50aW5nIH0pID0+ICh7XG4gICAgICAgIC4uLnJlc3RNb3VudGluZyxcbiAgICAgICAgLi4uKEFycmF5LmlzQXJyYXkobW91bnRpbmdQb2ludFdpZGdldHMpXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIG1vdW50aW5nUG9pbnRXaWRnZXRzOiBtb3VudGluZ1BvaW50V2lkZ2V0cy5tYXAoKHsgY2hlY2tzLCAuLi5yZXN0V2lkZ2V0IH0pID0+ICh7XG4gICAgICAgICAgICAgICAgLi4ucmVzdFdpZGdldCxcbiAgICAgICAgICAgICAgICB0ZXN0czogQXJyYXkuaXNBcnJheShjaGVja3MpXG4gICAgICAgICAgICAgICAgICA/IGNoZWNrcy5tYXAoKHsgY2hlY2tUeXBlLCAuLi5yZXN0Q2hlY2sgfSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAuLi5yZXN0Q2hlY2ssXG4gICAgICAgICAgICAgICAgICAgICAgdGVzdFR5cGU6IGNoZWNrVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICA6IFtdLFxuICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB7fSksXG4gICAgICB9KSlcbiAgICA6IFtdO1xuXG4gIGNvbnN0IG5vcm1hbGl6ZWRDb25maWc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgIC4uLnJlc3QsXG4gICAgLi4uKHZhcmlhbnRUZXN0cyA/IHsgdmFyaWFudFRlc3RzIH0gOiB7fSksXG4gICAgLi4uKG5vcm1hbGl6ZWRXaWRnZXRNb3VudGluZyA/IHsgd2lkZ2V0TW91bnRpbmc6IG5vcm1hbGl6ZWRXaWRnZXRNb3VudGluZyB9IDoge30pLFxuICB9O1xuXG4gIGNvbnN0IHZhcmlhbnRJZCA9IG5vcm1hbGl6ZWRDb25maWcudmFyaWFudElkIGFzIHN0cmluZztcbiAgY29uc3QgdmFyaWFudFR5cGUgPSBub3JtYWxpemVkQ29uZmlnLnZhcmlhbnRUeXBlIGFzIHN0cmluZztcblxuICBpZiAodHlwZW9mIHZhcmlhbnRJZCAhPT0gJ3N0cmluZycgfHwgIXZhcmlhbnRJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBvciBpbnZhbGlkIHZhcmlhbnRJZCBmb3IgcGFnZVZhcmlhbnRgKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFyaWFudFR5cGUgIT09ICdzdHJpbmcnIHx8ICF2YXJpYW50VHlwZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBvciBpbnZhbGlkIHZhcmlhbnRUeXBlIGZvciBwYWdlVmFyaWFudCAnJHt2YXJpYW50SWR9J2ApO1xuICB9XG5cbiAgaWYgKCFBcnJheS5pc0FycmF5KHZhcmlhbnRUZXN0cykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgTWlzc2luZyBvciBpbnZhbGlkIHZhcmlhbnRUZXN0cyBmb3IgcGFnZVZhcmlhbnQgJyR7dmFyaWFudElkfScuIE11c3QgYmUgYW4gYXJyYXlgLFxuICAgICk7XG4gIH1cblxuICBmb3IgKGNvbnN0IHRlc3Qgb2YgdmFyaWFudFRlc3RzKSB7XG4gICAgaWYgKCF0ZXN0LnRlc3RUeXBlIHx8IHR5cGVvZiB0ZXN0LnRlc3RUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHZhcmlhbnRUZXN0LnRlc3RUeXBlIGZvciBwYWdlVmFyaWFudCAnJHt2YXJpYW50SWR9J2ApO1xuICAgIH1cbiAgICBpZiAoIU9iamVjdC52YWx1ZXMoUGFnZVZhcmlhbnRUZXN0VHlwZSkuaW5jbHVkZXModGVzdC50ZXN0VHlwZSBhcyBQYWdlVmFyaWFudFRlc3RUeXBlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCB0ZXN0VHlwZSAnJHt0ZXN0LnRlc3RUeXBlfScgZm9yIHBhZ2VWYXJpYW50ICcke3ZhcmlhbnRJZH0nLiBWYWxpZCB0eXBlczogJHtPYmplY3QudmFsdWVzKFxuICAgICAgICAgIFBhZ2VWYXJpYW50VGVzdFR5cGUsXG4gICAgICAgICkuam9pbignLCAnKX1gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBpZiAoIUFycmF5LmlzQXJyYXkobm9ybWFsaXplZFdpZGdldE1vdW50aW5nKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBNaXNzaW5nIG9yIGludmFsaWQgd2lkZ2V0TW91bnRpbmcgZm9yIHBhZ2VWYXJpYW50ICcke3ZhcmlhbnRJZH0nLiBNdXN0IGJlIGFuIGFycmF5YCxcbiAgICApO1xuICB9XG5cbiAgZm9yIChjb25zdCBtb3VudGluZyBvZiBub3JtYWxpemVkV2lkZ2V0TW91bnRpbmcpIHtcbiAgICBpZiAodHlwZW9mIG1vdW50aW5nLm1vdW50aW5nQ29uZmlnSWQgIT09ICdzdHJpbmcnIHx8ICFtb3VudGluZy5tb3VudGluZ0NvbmZpZ0lkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbW91bnRpbmdDb25maWdJZCBpbiB3aWRnZXRNb3VudGluZyBmb3IgcGFnZVZhcmlhbnQgJyR7dmFyaWFudElkfSdgKTtcbiAgICB9XG5cbiAgICBpZiAobW91bnRpbmcud2lkZ2V0Q29uZmlnSWQgJiYgdHlwZW9mIG1vdW50aW5nLndpZGdldENvbmZpZ0lkICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHdpZGdldENvbmZpZ0lkIGluIHdpZGdldE1vdW50aW5nIGZvciBwYWdlVmFyaWFudCAnJHt2YXJpYW50SWR9J2ApO1xuICAgIH1cblxuICAgIGlmIChtb3VudGluZy5tb3VudGluZ1BvaW50V2lkZ2V0cykge1xuICAgICAgZm9yIChjb25zdCB3aWRnZXQgb2YgbW91bnRpbmcubW91bnRpbmdQb2ludFdpZGdldHMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB3aWRnZXQud2lkZ2V0Q29uZmlnSWQgIT09ICdzdHJpbmcnIHx8ICF3aWRnZXQud2lkZ2V0Q29uZmlnSWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgSW52YWxpZCB3aWRnZXRDb25maWdJZCBpbiBtb3VudGluZ1BvaW50V2lkZ2V0cyBmb3IgcGFnZVZhcmlhbnQgJyR7dmFyaWFudElkfSdgLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkod2lkZ2V0LnRlc3RzKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBJbnZhbGlkIG9yIG1pc3NpbmcgdGVzdHMgaW4gbW91bnRpbmdQb2ludFdpZGdldHMgZm9yIHBhZ2VWYXJpYW50ICcke3ZhcmlhbnRJZH0nYCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHZhcmlhbnRUeXBlID09PSAncGxwJykge1xuICAgIGlmICh0eXBlb2Ygbm9ybWFsaXplZENvbmZpZy5wbHBJZEV4dHJhY3RvciAhPT0gJ3N0cmluZycgfHwgIW5vcm1hbGl6ZWRDb25maWcucGxwSWRFeHRyYWN0b3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBvciBpbnZhbGlkIHBscElkRXh0cmFjdG9yIGZvciBQTFAgcGFnZVZhcmlhbnQgJyR7dmFyaWFudElkfSdgKTtcbiAgICB9XG4gIH1cblxuICBpZiAodmFyaWFudFR5cGUgPT09ICdwZHAnKSB7XG4gICAgaWYgKFxuICAgICAgdHlwZW9mIG5vcm1hbGl6ZWRDb25maWcucHJvZHVjdElkRXh0cmFjdG9yICE9PSAnc3RyaW5nJyB8fFxuICAgICAgIW5vcm1hbGl6ZWRDb25maWcucHJvZHVjdElkRXh0cmFjdG9yXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3Npbmcgb3IgaW52YWxpZCBwcm9kdWN0SWRFeHRyYWN0b3IgZm9yIFBEUCBwYWdlVmFyaWFudCAnJHt2YXJpYW50SWR9J2ApO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBub3JtYWxpemVkQ29uZmlnLnBhcmVudFByb2R1Y3RJZEV4dHJhY3RvciAmJlxuICAgICAgdHlwZW9mIG5vcm1hbGl6ZWRDb25maWcucGFyZW50UHJvZHVjdElkRXh0cmFjdG9yICE9PSAnc3RyaW5nJ1xuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCBwYXJlbnRQcm9kdWN0SWRFeHRyYWN0b3IgZm9yIFBEUCBwYWdlVmFyaWFudCAnJHt2YXJpYW50SWR9Jy4gTXVzdCBiZSBzdHJpbmcgaWYgcHJvdmlkZWRgLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbm9ybWFsaXplZENvbmZpZyBhcyBQYWdlVmFyaWFudENvbmZpZztcbn07XG5cbi8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBhbmQgdHJhbnNmb3JtIE1vdW50aW5nQ29uZmlnUXVlcnlEYXRhIHRvIFdpZGdldE1vdW50aW5nQ29uZmlnXG5leHBvcnQgY29uc3QgdmFsaWRhdGVBbmRUcmFuc2Zvcm1Nb3VudGluZ0NvbmZpZyA9IChcbiAgY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgY29uZmlnS2V5OiBzdHJpbmcsXG4pOiBXaWRnZXRNb3VudGluZ0NvbmZpZyA9PiB7XG4gIC8vIFJFTkFNSU5HIExPR0lDOiBDb252ZXJ0IGJhY2tlbmQgXCJDaGVja1wiIHRlcm1pbm9sb2d5IHRvIGZyb250ZW5kIFwiVGVzdFwiIHRlcm1pbm9sb2d5XG4gIGNvbnN0IG5vcm1hbGl6ZWRDb25maWcgPSB7IC4uLmNvbmZpZyB9O1xuXG4gIC8vIENvbnZlcnQgY2hlY2tJZCB0byB0ZXN0SWQgZm9yIGZyb250ZW5kIGNvbXBhdGliaWxpdHkgKGRhdGEgaXMgYWxyZWFkeSBjYW1lbENhc2UpXG4gIGlmIChub3JtYWxpemVkQ29uZmlnLmNoZWNrSWQgJiYgIW5vcm1hbGl6ZWRDb25maWcudGVzdElkKSB7XG4gICAgbm9ybWFsaXplZENvbmZpZy50ZXN0SWQgPSBub3JtYWxpemVkQ29uZmlnLmNoZWNrSWQ7XG4gICAgZGVsZXRlIG5vcm1hbGl6ZWRDb25maWcuY2hlY2tJZDtcbiAgfVxuXG4gIC8vIFJlcXVpcmVkIGZpZWxkcyAtIHRoZXNlIG11c3QgYmUgcHJlc2VudCBhbmQgdmFsaWRcbiAgaWYgKHR5cGVvZiBub3JtYWxpemVkQ29uZmlnLm1vdW50aW5nQ29uZmlnSWQgIT09ICdzdHJpbmcnIHx8ICFub3JtYWxpemVkQ29uZmlnLm1vdW50aW5nQ29uZmlnSWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3Npbmcgb3IgaW52YWxpZCBtb3VudGluZ0NvbmZpZ0lkIGZvciBjb25maWcgJyR7Y29uZmlnS2V5fSdgKTtcbiAgfVxuICBpZiAodHlwZW9mIG5vcm1hbGl6ZWRDb25maWcuY29udGFpbmVySWQgIT09ICdzdHJpbmcnIHx8ICFub3JtYWxpemVkQ29uZmlnLmNvbnRhaW5lcklkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIG9yIGludmFsaWQgY29udGFpbmVySWQgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9J2ApO1xuICB9XG4gIGlmICh0eXBlb2Ygbm9ybWFsaXplZENvbmZpZy50ZXN0SWQgIT09ICdzdHJpbmcnIHx8ICFub3JtYWxpemVkQ29uZmlnLnRlc3RJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBvciBpbnZhbGlkIHRlc3RJZCBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nYCk7XG4gIH1cblxuICAvLyBSZXF1aXJlZCBpbnNlcnRpb25Qb2ludFxuICBpZiAoXG4gICAgIW5vcm1hbGl6ZWRDb25maWcuaW5zZXJ0aW9uUG9pbnQgfHxcbiAgICB0eXBlb2Ygbm9ybWFsaXplZENvbmZpZy5pbnNlcnRpb25Qb2ludCAhPT0gJ29iamVjdCcgfHxcbiAgICBBcnJheS5pc0FycmF5KG5vcm1hbGl6ZWRDb25maWcuaW5zZXJ0aW9uUG9pbnQpXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBvciBpbnZhbGlkIGluc2VydGlvblBvaW50IGZvciBjb25maWcgJyR7Y29uZmlnS2V5fSdgKTtcbiAgfVxuXG4gIGNvbnN0IGluc2VydGlvblBvaW50ID0gbm9ybWFsaXplZENvbmZpZy5pbnNlcnRpb25Qb2ludCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAvLyBWYWxpZGF0ZSBpbnNlcnRpb25Qb2ludCByZXF1aXJlZCBmaWVsZHNcbiAgaWYgKHR5cGVvZiBpbnNlcnRpb25Qb2ludC5zZWxlY3RvciAhPT0gJ3N0cmluZycgfHwgIWluc2VydGlvblBvaW50LnNlbGVjdG9yKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIG9yIGludmFsaWQgaW5zZXJ0aW9uUG9pbnQuc2VsZWN0b3IgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9J2ApO1xuICB9XG4gIGlmICh0eXBlb2YgaW5zZXJ0aW9uUG9pbnQuaW5zZXJ0aW9uVHlwZSAhPT0gJ3N0cmluZycgfHwgIWluc2VydGlvblBvaW50Lmluc2VydGlvblR5cGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3Npbmcgb3IgaW52YWxpZCBpbnNlcnRpb25Qb2ludC5pbnNlcnRpb25UeXBlIGZvciBjb25maWcgJyR7Y29uZmlnS2V5fSdgKTtcbiAgfVxuXG4gIC8vIFZhbGlkYXRlIGluc2VydGlvblR5cGUgaXMgYSB2YWxpZCBET01JbnNlcnRpb25UeXBlXG4gIGlmICghT2JqZWN0LnZhbHVlcyhET01JbnNlcnRpb25UeXBlKS5pbmNsdWRlcyhpbnNlcnRpb25Qb2ludC5pbnNlcnRpb25UeXBlIGFzIERPTUluc2VydGlvblR5cGUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEludmFsaWQgaW5zZXJ0aW9uUG9pbnQuaW5zZXJ0aW9uVHlwZSAnJHtpbnNlcnRpb25Qb2ludC5pbnNlcnRpb25UeXBlfScgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9Jy4gVmFsaWQgdHlwZXM6ICR7T2JqZWN0LnZhbHVlcyhET01JbnNlcnRpb25UeXBlKS5qb2luKCcsICcpfWAsXG4gICAgKTtcbiAgfVxuXG4gIC8vIFZhbGlkYXRlIG9wdGlvbmFsIGluc2VydGlvblBvaW50IGZpZWxkc1xuICBpZiAoaW5zZXJ0aW9uUG9pbnQuc2VsZWN0aW9uSW5kZXggIT0gbnVsbCAmJiB0eXBlb2YgaW5zZXJ0aW9uUG9pbnQuc2VsZWN0aW9uSW5kZXggIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEludmFsaWQgaW5zZXJ0aW9uUG9pbnQuc2VsZWN0aW9uSW5kZXggZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9Jy4gTXVzdCBiZSBhIG51bWJlciBvciBudWxsL3VuZGVmaW5lZGAsXG4gICAgKTtcbiAgfVxuXG4gIC8vIFZhbGlkYXRlIG9wdGlvbmFsIHBhcmVudEluc2VydGlvblBvaW50IGlmIHByZXNlbnRcbiAgbGV0IHBhcmVudEluc2VydGlvblBvaW50O1xuICBpZiAobm9ybWFsaXplZENvbmZpZy5wYXJlbnRJbnNlcnRpb25Qb2ludCkge1xuICAgIGlmIChcbiAgICAgIHR5cGVvZiBub3JtYWxpemVkQ29uZmlnLnBhcmVudEluc2VydGlvblBvaW50ICE9PSAnb2JqZWN0JyB8fFxuICAgICAgQXJyYXkuaXNBcnJheShub3JtYWxpemVkQ29uZmlnLnBhcmVudEluc2VydGlvblBvaW50KVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhcmVudEluc2VydGlvblBvaW50IGZvciBjb25maWcgJyR7Y29uZmlnS2V5fScuIE11c3QgYmUgYW4gb2JqZWN0YCk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyZW50UG9pbnQgPSBub3JtYWxpemVkQ29uZmlnLnBhcmVudEluc2VydGlvblBvaW50IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGlmICh0eXBlb2YgcGFyZW50UG9pbnQuc2VsZWN0b3IgIT09ICdzdHJpbmcnIHx8ICFwYXJlbnRQb2ludC5zZWxlY3Rvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIG9yIGludmFsaWQgcGFyZW50SW5zZXJ0aW9uUG9pbnQuc2VsZWN0b3IgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9J2ApO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHBhcmVudFBvaW50Lmluc2VydGlvblR5cGUgIT09ICdzdHJpbmcnIHx8ICFwYXJlbnRQb2ludC5pbnNlcnRpb25UeXBlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBNaXNzaW5nIG9yIGludmFsaWQgcGFyZW50SW5zZXJ0aW9uUG9pbnQuaW5zZXJ0aW9uVHlwZSBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCFPYmplY3QudmFsdWVzKERPTUluc2VydGlvblR5cGUpLmluY2x1ZGVzKHBhcmVudFBvaW50Lmluc2VydGlvblR5cGUgYXMgRE9NSW5zZXJ0aW9uVHlwZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEludmFsaWQgcGFyZW50SW5zZXJ0aW9uUG9pbnQuaW5zZXJ0aW9uVHlwZSAnJHtwYXJlbnRQb2ludC5pbnNlcnRpb25UeXBlfScgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9Jy4gVmFsaWQgdHlwZXM6ICR7T2JqZWN0LnZhbHVlcyhET01JbnNlcnRpb25UeXBlKS5qb2luKCcsICcpfWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChwYXJlbnRQb2ludC5zZWxlY3Rpb25JbmRleCAhPSBudWxsICYmIHR5cGVvZiBwYXJlbnRQb2ludC5zZWxlY3Rpb25JbmRleCAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEludmFsaWQgcGFyZW50SW5zZXJ0aW9uUG9pbnQuc2VsZWN0aW9uSW5kZXggZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9Jy4gTXVzdCBiZSBhIG51bWJlciBvciBudWxsL3VuZGVmaW5lZGAsXG4gICAgICApO1xuICAgIH1cblxuICAgIHBhcmVudEluc2VydGlvblBvaW50ID0ge1xuICAgICAgc2VsZWN0b3I6IHBhcmVudFBvaW50LnNlbGVjdG9yLFxuICAgICAgaW5zZXJ0aW9uVHlwZTogcGFyZW50UG9pbnQuaW5zZXJ0aW9uVHlwZSBhcyBET01JbnNlcnRpb25UeXBlLFxuICAgICAgc2VsZWN0aW9uSW5kZXg6IHBhcmVudFBvaW50LnNlbGVjdGlvbkluZGV4IGFzIG51bWJlciB8IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG5cbiAgLy8gVmFsaWRhdGUgb3B0aW9uYWwgd3JhcHBpbmdFbGVtZW50IGlmIHByZXNlbnRcbiAgbGV0IHdyYXBwaW5nRWxlbWVudDtcbiAgaWYgKG5vcm1hbGl6ZWRDb25maWcud3JhcHBpbmdFbGVtZW50KSB7XG4gICAgaWYgKFxuICAgICAgdHlwZW9mIG5vcm1hbGl6ZWRDb25maWcud3JhcHBpbmdFbGVtZW50ICE9PSAnb2JqZWN0JyB8fFxuICAgICAgQXJyYXkuaXNBcnJheShub3JtYWxpemVkQ29uZmlnLndyYXBwaW5nRWxlbWVudClcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB3cmFwcGluZ0VsZW1lbnQgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9Jy4gTXVzdCBiZSBhbiBvYmplY3RgKTtcbiAgICB9XG5cbiAgICBjb25zdCB3cmFwcGluZyA9IG5vcm1hbGl6ZWRDb25maWcud3JhcHBpbmdFbGVtZW50IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGlmICh0eXBlb2Ygd3JhcHBpbmcuY2xhc3NOYW1lICE9PSAnc3RyaW5nJyB8fCAhd3JhcHBpbmcuY2xhc3NOYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3Npbmcgb3IgaW52YWxpZCB3cmFwcGluZ0VsZW1lbnQuY2xhc3NOYW1lIGZvciBjb25maWcgJyR7Y29uZmlnS2V5fSdgKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB3cmFwcGluZy5lbGVtZW50ICE9PSAnc3RyaW5nJyB8fCAhd3JhcHBpbmcuZWxlbWVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIG9yIGludmFsaWQgd3JhcHBpbmdFbGVtZW50LmVsZW1lbnQgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9J2ApO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHdyYXBwaW5nLmluc2VydGlvblR5cGUgIT09ICdzdHJpbmcnIHx8ICF3cmFwcGluZy5pbnNlcnRpb25UeXBlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3Npbmcgb3IgaW52YWxpZCB3cmFwcGluZ0VsZW1lbnQuaW5zZXJ0aW9uVHlwZSBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nYCk7XG4gICAgfVxuXG4gICAgaWYgKCFPYmplY3QudmFsdWVzKERPTUluc2VydGlvblR5cGUpLmluY2x1ZGVzKHdyYXBwaW5nLmluc2VydGlvblR5cGUgYXMgRE9NSW5zZXJ0aW9uVHlwZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEludmFsaWQgd3JhcHBpbmdFbGVtZW50Lmluc2VydGlvblR5cGUgJyR7d3JhcHBpbmcuaW5zZXJ0aW9uVHlwZX0nIGZvciBjb25maWcgJyR7Y29uZmlnS2V5fScuIFZhbGlkIHR5cGVzOiAke09iamVjdC52YWx1ZXMoRE9NSW5zZXJ0aW9uVHlwZSkuam9pbignLCAnKX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB3cmFwcGluZ0VsZW1lbnQgPSB7XG4gICAgICBjbGFzc05hbWU6IHdyYXBwaW5nLmNsYXNzTmFtZSxcbiAgICAgIGVsZW1lbnQ6IHdyYXBwaW5nLmVsZW1lbnQsXG4gICAgICBpbnNlcnRpb25UeXBlOiB3cmFwcGluZy5pbnNlcnRpb25UeXBlIGFzIERPTUluc2VydGlvblR5cGUsXG4gICAgfTtcbiAgfVxuXG4gIC8vIFZhbGlkYXRlIG9wdGlvbmFsIGZpZWxkc1xuICBpZiAoXG4gICAgbm9ybWFsaXplZENvbmZpZy5kaXZDaGVja1NlbGVjdG9yICE9IG51bGwgJiZcbiAgICB0eXBlb2Ygbm9ybWFsaXplZENvbmZpZy5kaXZDaGVja1NlbGVjdG9yICE9PSAnc3RyaW5nJ1xuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YWxpZCBkaXZDaGVja1NlbGVjdG9yIGZvciBjb25maWcgJyR7Y29uZmlnS2V5fScuIE11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbC91bmRlZmluZWRgLFxuICAgICk7XG4gIH1cbiAgaWYgKG5vcm1hbGl6ZWRDb25maWcuY2xhc3NOYW1lICE9IG51bGwgJiYgdHlwZW9mIG5vcm1hbGl6ZWRDb25maWcuY2xhc3NOYW1lICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBJbnZhbGlkIGNsYXNzTmFtZSBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nLiBNdXN0IGJlIGEgc3RyaW5nIG9yIG51bGwvdW5kZWZpbmVkYCxcbiAgICApO1xuICB9XG4gIGlmIChcbiAgICBub3JtYWxpemVkQ29uZmlnLnN1cHByZXNzaW9uU2VsZWN0b3IgIT0gbnVsbCAmJlxuICAgIHR5cGVvZiBub3JtYWxpemVkQ29uZmlnLnN1cHByZXNzaW9uU2VsZWN0b3IgIT09ICdzdHJpbmcnXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBJbnZhbGlkIHN1cHByZXNzaW9uU2VsZWN0b3IgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9Jy4gTXVzdCBiZSBhIHN0cmluZyBvciBudWxsL3VuZGVmaW5lZGAsXG4gICAgKTtcbiAgfVxuICBpZiAoXG4gICAgbm9ybWFsaXplZENvbmZpZy5kYXRhQXR0cmlidXRlcyAhPSBudWxsICYmXG4gICAgKHR5cGVvZiBub3JtYWxpemVkQ29uZmlnLmRhdGFBdHRyaWJ1dGVzICE9PSAnb2JqZWN0JyB8fFxuICAgICAgQXJyYXkuaXNBcnJheShub3JtYWxpemVkQ29uZmlnLmRhdGFBdHRyaWJ1dGVzKSlcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEludmFsaWQgZGF0YUF0dHJpYnV0ZXMgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9Jy4gTXVzdCBiZSBhbiBvYmplY3Qgb3IgbnVsbC91bmRlZmluZWRgLFxuICAgICk7XG4gIH1cbiAgaWYgKFxuICAgIG5vcm1hbGl6ZWRDb25maWcuc3R5bGUgIT0gbnVsbCAmJlxuICAgICh0eXBlb2Ygbm9ybWFsaXplZENvbmZpZy5zdHlsZSAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShub3JtYWxpemVkQ29uZmlnLnN0eWxlKSlcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHN0eWxlIGZvciBjb25maWcgJyR7Y29uZmlnS2V5fScuIE11c3QgYmUgYW4gb2JqZWN0IG9yIG51bGwvdW5kZWZpbmVkYCk7XG4gIH1cblxuICAvLyBWYWxpZGF0ZSBncmlkSW5zZXJ0aW9uVHlwZSBpZiBwcmVzZW50XG4gIGxldCBncmlkSW5zZXJ0aW9uVHlwZTtcbiAgaWYgKG5vcm1hbGl6ZWRDb25maWcuZ3JpZEluc2VydGlvblR5cGUpIHtcbiAgICBpZiAoXG4gICAgICB0eXBlb2Ygbm9ybWFsaXplZENvbmZpZy5ncmlkSW5zZXJ0aW9uVHlwZSAhPT0gJ3N0cmluZycgfHxcbiAgICAgICFub3JtYWxpemVkQ29uZmlnLmdyaWRJbnNlcnRpb25UeXBlXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZ3JpZEluc2VydGlvblR5cGUgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9Jy4gTXVzdCBiZSBhIHN0cmluZ2ApO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgICFPYmplY3QudmFsdWVzKEdyaWRJbnNlcnRpb25UeXBlKS5pbmNsdWRlcyhcbiAgICAgICAgbm9ybWFsaXplZENvbmZpZy5ncmlkSW5zZXJ0aW9uVHlwZSBhcyBHcmlkSW5zZXJ0aW9uVHlwZSxcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEludmFsaWQgZ3JpZEluc2VydGlvblR5cGUgJyR7bm9ybWFsaXplZENvbmZpZy5ncmlkSW5zZXJ0aW9uVHlwZX0nIGZvciBjb25maWcgJyR7Y29uZmlnS2V5fScuIFZhbGlkIHR5cGVzOiAke09iamVjdC52YWx1ZXMoR3JpZEluc2VydGlvblR5cGUpLmpvaW4oJywgJyl9YCxcbiAgICAgICk7XG4gICAgfVxuICAgIGdyaWRJbnNlcnRpb25UeXBlID0gbm9ybWFsaXplZENvbmZpZy5ncmlkSW5zZXJ0aW9uVHlwZSBhcyBHcmlkSW5zZXJ0aW9uVHlwZTtcbiAgfVxuXG4gIC8vIEJ1aWxkIHRoZSByZXR1cm4gb2JqZWN0LCBvbmx5IGluY2x1ZGluZyBvcHRpb25hbCBmaWVsZHMgaWYgdGhleSBoYXZlIHZhbHVlc1xuICBjb25zdCByZXN1bHQ6IFdpZGdldE1vdW50aW5nQ29uZmlnID0ge1xuICAgIG1vdW50aW5nQ29uZmlnSWQ6IG5vcm1hbGl6ZWRDb25maWcubW91bnRpbmdDb25maWdJZCxcbiAgICBjb250YWluZXJJZDogbm9ybWFsaXplZENvbmZpZy5jb250YWluZXJJZCxcbiAgICB0ZXN0SWQ6IG5vcm1hbGl6ZWRDb25maWcudGVzdElkLFxuICAgIGluc2VydGlvblBvaW50OiB7XG4gICAgICBzZWxlY3RvcjogaW5zZXJ0aW9uUG9pbnQuc2VsZWN0b3IsXG4gICAgICBpbnNlcnRpb25UeXBlOiBpbnNlcnRpb25Qb2ludC5pbnNlcnRpb25UeXBlIGFzIERPTUluc2VydGlvblR5cGUsXG4gICAgICAuLi4oaW5zZXJ0aW9uUG9pbnQuc2VsZWN0aW9uSW5kZXggIT0gbnVsbCAmJiB7XG4gICAgICAgIHNlbGVjdGlvbkluZGV4OiBpbnNlcnRpb25Qb2ludC5zZWxlY3Rpb25JbmRleCxcbiAgICAgIH0pLFxuICAgIH0sXG4gIH07XG5cbiAgLy8gT25seSBhZGQgb3B0aW9uYWwgZmllbGRzIGlmIHRoZXkgaGF2ZSB2YWx1ZXNcbiAgaWYgKHBhcmVudEluc2VydGlvblBvaW50KSB7XG4gICAgcmVzdWx0LnBhcmVudEluc2VydGlvblBvaW50ID0gcGFyZW50SW5zZXJ0aW9uUG9pbnQ7XG4gIH1cbiAgaWYgKGdyaWRJbnNlcnRpb25UeXBlKSB7XG4gICAgcmVzdWx0LmdyaWRJbnNlcnRpb25UeXBlID0gZ3JpZEluc2VydGlvblR5cGU7XG4gIH1cbiAgaWYgKHdyYXBwaW5nRWxlbWVudCkge1xuICAgIHJlc3VsdC53cmFwcGluZ0VsZW1lbnQgPSB3cmFwcGluZ0VsZW1lbnQ7XG4gIH1cbiAgaWYgKG5vcm1hbGl6ZWRDb25maWcuZGl2Q2hlY2tTZWxlY3Rvcikge1xuICAgIHJlc3VsdC5kaXZDaGVja1NlbGVjdG9yID0gbm9ybWFsaXplZENvbmZpZy5kaXZDaGVja1NlbGVjdG9yIGFzIHN0cmluZztcbiAgfVxuICBpZiAobm9ybWFsaXplZENvbmZpZy5jbGFzc05hbWUpIHtcbiAgICByZXN1bHQuY2xhc3NOYW1lID0gbm9ybWFsaXplZENvbmZpZy5jbGFzc05hbWUgYXMgc3RyaW5nO1xuICB9XG4gIGlmIChub3JtYWxpemVkQ29uZmlnLnN1cHByZXNzaW9uU2VsZWN0b3IpIHtcbiAgICByZXN1bHQuc3VwcHJlc3Npb25TZWxlY3RvciA9IG5vcm1hbGl6ZWRDb25maWcuc3VwcHJlc3Npb25TZWxlY3RvcjtcbiAgfVxuICBpZiAobm9ybWFsaXplZENvbmZpZy5kYXRhQXR0cmlidXRlcykge1xuICAgIHJlc3VsdC5kYXRhQXR0cmlidXRlcyA9IG5vcm1hbGl6ZWRDb25maWcuZGF0YUF0dHJpYnV0ZXMgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgfVxuICBpZiAobm9ybWFsaXplZENvbmZpZy5zdHlsZSkge1xuICAgIHJlc3VsdC5zdHlsZSA9IG5vcm1hbGl6ZWRDb25maWcuc3R5bGUgYXMgUGFydGlhbDxDU1NTdHlsZURlY2xhcmF0aW9uPjtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgYW5kIHRyYW5zZm9ybSBXaWRnZXRDb25maWdRdWVyeURhdGEgdG8gV2lkZ2V0Q29uZmlnXG5leHBvcnQgY29uc3QgdmFsaWRhdGVBbmRUcmFuc2Zvcm1XaWRnZXRDb25maWcgPSAoXG4gIGNvbmZpZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIGNvbmZpZ0tleTogc3RyaW5nLFxuKTogV2lkZ2V0Q29uZmlnID0+IHtcbiAgY29uc3Qgbm9ybWFsaXplZENvbmZpZyA9IHRyYW5zZm9ybVNuYWtlVG9DYW1lbChjb25maWcpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIGlmICh0eXBlb2Ygbm9ybWFsaXplZENvbmZpZy53aWRnZXRDb25maWdJZCAhPT0gJ3N0cmluZycgfHwgIW5vcm1hbGl6ZWRDb25maWcud2lkZ2V0Q29uZmlnSWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3Npbmcgb3IgaW52YWxpZCB3aWRnZXRDb25maWdJZCBmb3Igd2lkZ2V0IGNvbmZpZyAnJHtjb25maWdLZXl9J2ApO1xuICB9XG4gIGlmICh0eXBlb2Ygbm9ybWFsaXplZENvbmZpZy50eXBlICE9PSAnc3RyaW5nJyB8fCAhbm9ybWFsaXplZENvbmZpZy50eXBlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIG9yIGludmFsaWQgdHlwZSBmb3Igd2lkZ2V0IGNvbmZpZyAnJHtjb25maWdLZXl9J2ApO1xuICB9XG5cbiAgaWYgKG5vcm1hbGl6ZWRDb25maWcuY29udGVudElkICE9IG51bGwgJiYgdHlwZW9mIG5vcm1hbGl6ZWRDb25maWcuY29udGVudElkICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBJbnZhbGlkIGNvbnRlbnRJZCBmb3Igd2lkZ2V0IGNvbmZpZyAnJHtjb25maWdLZXl9Jy4gTXVzdCBiZSBhIHN0cmluZyBvciBudWxsL3VuZGVmaW5lZGAsXG4gICAgKTtcbiAgfVxuXG4gIC8vIE5vdGU6IFdpZGdldCBjb25maWdzIGFyZSBjb21wbGV4IHVuaW9ucyB3aXRoIHR5cGUtc3BlY2lmaWMgcHJvcGVydGllcy5cblxuICAvLyBSZXR1cm4gdGhlIG5vcm1hbGl6ZWQgY29uZmlnIGFzIFdpZGdldENvbmZpZ1xuICAvLyBVc2UgaW50ZXJtZWRpYXRlICd1bmtub3duJyBjYXN0IGZvciBjb21wbGV4IHVuaW9uIHR5cGVzXG4gIHJldHVybiBub3JtYWxpemVkQ29uZmlnIGFzIHVua25vd24gYXMgV2lkZ2V0Q29uZmlnO1xufTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlR3JhcGhRTEZyb250ZW5kQ29uZmlnID0gKGRhdGE6IHVua25vd24pOiBGcm9udGVuZENvbmZpZyB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmIChkYXRhID09PSBudWxsIHx8IGRhdGEgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAodHlwZW9mIGRhdGEgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICBMb2dnZXIubG9nV2FybignSW52YWxpZCBHcmFwaFFMIGZyb250ZW5kIGNvbmZpZyBkYXRhOiBub3QgYW4gb2JqZWN0JywgdW5kZWZpbmVkLCB7IGRhdGEgfSk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IG9iaiA9IGRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgLy8gVmFsaWRhdGUgbWVyY2hhbnRfb3ZlcnJpZGVfY3NzIGlmIHByZXNlbnRcbiAgaWYgKFxuICAgICdtZXJjaGFudF9vdmVycmlkZV9jc3MnIGluIG9iaiAmJlxuICAgIHR5cGVvZiBvYmoubWVyY2hhbnRfb3ZlcnJpZGVfY3NzICE9PSAnc3RyaW5nJyAmJlxuICAgIG9iai5tZXJjaGFudF9vdmVycmlkZV9jc3MgIT09IG51bGxcbiAgKSB7XG4gICAgTG9nZ2VyLmxvZ1dhcm4oXG4gICAgICAnSW52YWxpZCBHcmFwaFFMIGZyb250ZW5kIGNvbmZpZyBkYXRhOiBtZXJjaGFudF9vdmVycmlkZV9jc3MgbXVzdCBiZSBhIHN0cmluZyBvciBudWxsJyxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHsgZGF0YSB9LFxuICAgICk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIFZhbGlkYXRlIHBhZ2VfdmFyaWFudHMgaWYgcHJlc2VudFxuICBpZiAoJ3BhZ2VfdmFyaWFudHMnIGluIG9iaikge1xuICAgIGlmIChcbiAgICAgIG9iai5wYWdlX3ZhcmlhbnRzICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIG9iai5wYWdlX3ZhcmlhbnRzICE9PSBudWxsICYmXG4gICAgICAhQXJyYXkuaXNBcnJheShvYmoucGFnZV92YXJpYW50cylcbiAgICApIHtcbiAgICAgIExvZ2dlci5sb2dXYXJuKFxuICAgICAgICAnSW52YWxpZCBHcmFwaFFMIGZyb250ZW5kIGNvbmZpZyBkYXRhOiBwYWdlX3ZhcmlhbnRzIG11c3QgYmUgYW4gYXJyYXkgb3IgbnVsbC91bmRlZmluZWQnLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHsgZGF0YSB9LFxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLy8gVmFsaWRhdGUgbW91bnRpbmdfY29uZmlncyBpZiBwcmVzZW50XG4gIGlmICgnbW91bnRpbmdfY29uZmlncycgaW4gb2JqKSB7XG4gICAgaWYgKFxuICAgICAgb2JqLm1vdW50aW5nX2NvbmZpZ3MgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgb2JqLm1vdW50aW5nX2NvbmZpZ3MgIT09IG51bGwgJiZcbiAgICAgICFBcnJheS5pc0FycmF5KG9iai5tb3VudGluZ19jb25maWdzKVxuICAgICkge1xuICAgICAgTG9nZ2VyLmxvZ1dhcm4oXG4gICAgICAgICdJbnZhbGlkIEdyYXBoUUwgZnJvbnRlbmQgY29uZmlnIGRhdGE6IG1vdW50aW5nX2NvbmZpZ3MgbXVzdCBiZSBhbiBhcnJheSBvciBudWxsL3VuZGVmaW5lZCcsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgeyBkYXRhIH0sXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvLyBWYWxpZGF0ZSB3aWRnZXRfY29uZmlncyBpZiBwcmVzZW50XG4gIGlmICgnd2lkZ2V0X2NvbmZpZ3MnIGluIG9iaikge1xuICAgIGlmIChcbiAgICAgIG9iai53aWRnZXRfY29uZmlncyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBvYmoud2lkZ2V0X2NvbmZpZ3MgIT09IG51bGwgJiZcbiAgICAgICFBcnJheS5pc0FycmF5KG9iai53aWRnZXRfY29uZmlncylcbiAgICApIHtcbiAgICAgIExvZ2dlci5sb2dXYXJuKFxuICAgICAgICAnSW52YWxpZCBHcmFwaFFMIGZyb250ZW5kIGNvbmZpZyBkYXRhOiB3aWRnZXRfY29uZmlncyBtdXN0IGJlIGFuIGFycmF5IG9yIG51bGwvdW5kZWZpbmVkJyxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB7IGRhdGEgfSxcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8vIFZhbGlkYXRlIHVpX2NvbmZpZ3MgaWYgcHJlc2VudFxuICBpZiAoJ3VpX2NvbmZpZ3MnIGluIG9iaiAmJiB0eXBlb2Ygb2JqLnVpX2NvbmZpZ3MgIT09ICdvYmplY3QnICYmIG9iai51aV9jb25maWdzICE9PSBudWxsKSB7XG4gICAgTG9nZ2VyLmxvZ1dhcm4oXG4gICAgICAnSW52YWxpZCBHcmFwaFFMIGZyb250ZW5kIGNvbmZpZyBkYXRhOiB1aV9jb25maWdzIG11c3QgYmUgYW4gb2JqZWN0IG9yIG51bGwvdW5kZWZpbmVkJyxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHsgZGF0YSB9LFxuICAgICk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gVHJhbnNmb3JtIHRoZSBkYXRhIHRvIGNhbWVsQ2FzZVxuICAgIGNvbnN0IHRyYW5zZm9ybWVkRGF0YSA9IHRyYW5zZm9ybVNuYWtlVG9DYW1lbChvYmopIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gICAgLy8gQ29udmVydCBwYWdlX3ZhcmlhbnRzIGZyb20gYXJyYXkgdG8gdmFsaWRhdGVkIGFycmF5IGlmIHByZXNlbnRcbiAgICBpZiAodHJhbnNmb3JtZWREYXRhLnBhZ2VWYXJpYW50cyAmJiBBcnJheS5pc0FycmF5KHRyYW5zZm9ybWVkRGF0YS5wYWdlVmFyaWFudHMpKSB7XG4gICAgICBjb25zdCBwYWdlVmFyaWFudHNBcnJheSA9IHRyYW5zZm9ybWVkRGF0YS5wYWdlVmFyaWFudHM7XG4gICAgICBjb25zdCB2YWxpZGF0ZWRQYWdlVmFyaWFudHM6IFBhZ2VWYXJpYW50Q29uZmlnW10gPSBbXTtcblxuICAgICAgZm9yIChjb25zdCB2YXJpYW50IG9mIHBhZ2VWYXJpYW50c0FycmF5KSB7XG4gICAgICAgIGlmICh2YXJpYW50ICYmIHR5cGVvZiB2YXJpYW50ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFyaWFudC52YXJpYW50SWQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRlZFZhcmlhbnQgPSB2YWxpZGF0ZUFuZFRyYW5zZm9ybVBhZ2VWYXJpYW50cyh2YXJpYW50KTtcbiAgICAgICAgICAgIHZhbGlkYXRlZFBhZ2VWYXJpYW50cy5wdXNoKHZhbGlkYXRlZFZhcmlhbnQpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBMb2dnZXIubG9nV2FybignSW52YWxpZCBwYWdlIHZhcmlhbnQsIHNraXBwaW5nJywgZXJyb3IsIHtcbiAgICAgICAgICAgICAgdmFyaWFudElkOiB2YXJpYW50LnZhcmlhbnRJZCxcbiAgICAgICAgICAgICAgdmFyaWFudCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gQ29udGludWUgcHJvY2Vzc2luZyBvdGhlciB2YXJpYW50c1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBMb2dnZXIubG9nV2FybignSW52YWxpZCBwYWdlIHZhcmlhbnQgc3RydWN0dXJlLCBza2lwcGluZycsIHVuZGVmaW5lZCwgeyB2YXJpYW50IH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRyYW5zZm9ybWVkRGF0YS5wYWdlVmFyaWFudHMgPSB2YWxpZGF0ZWRQYWdlVmFyaWFudHM7XG4gICAgfVxuXG4gICAgLy8gQ29udmVydCBtb3VudGluZ19jb25maWdzIGZyb20gYXJyYXkgdG8gUmVjb3JkIGlmIHByZXNlbnRcbiAgICBpZiAodHJhbnNmb3JtZWREYXRhLm1vdW50aW5nQ29uZmlncyAmJiBBcnJheS5pc0FycmF5KHRyYW5zZm9ybWVkRGF0YS5tb3VudGluZ0NvbmZpZ3MpKSB7XG4gICAgICBjb25zdCBtb3VudGluZ0NvbmZpZ3NBcnJheSA9IHRyYW5zZm9ybWVkRGF0YS5tb3VudGluZ0NvbmZpZ3MgYXMgQXJyYXk8e1xuICAgICAgICBrZXk6IHN0cmluZztcbiAgICAgICAgY29uZmlnOiB1bmtub3duO1xuICAgICAgfT47XG4gICAgICBjb25zdCBtb3VudGluZ0NvbmZpZ3NSZWNvcmQ6IFJlY29yZDxzdHJpbmcsIFdpZGdldE1vdW50aW5nQ29uZmlnPiA9IHt9O1xuXG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgbW91bnRpbmdDb25maWdzQXJyYXkpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGl0ZW0gJiZcbiAgICAgICAgICB0eXBlb2YgaXRlbS5rZXkgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgaXRlbS5jb25maWcgJiZcbiAgICAgICAgICB0eXBlb2YgaXRlbS5jb25maWcgPT09ICdvYmplY3QnXG4gICAgICAgICkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBWYWxpZGF0ZSBhbmQgdHJhbnNmb3JtIHRoZSBjb25maWcgc3RydWN0dXJlXG4gICAgICAgICAgICBjb25zdCBjb25maWcgPSBpdGVtLmNvbmZpZyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRlZENvbmZpZyA9IHZhbGlkYXRlQW5kVHJhbnNmb3JtTW91bnRpbmdDb25maWcoY29uZmlnLCBpdGVtLmtleSk7XG4gICAgICAgICAgICBtb3VudGluZ0NvbmZpZ3NSZWNvcmRbaXRlbS5rZXldID0gdmFsaWRhdGVkQ29uZmlnO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBMb2dnZXIubG9nV2FybignSW52YWxpZCBtb3VudGluZyBjb25maWcsIHNraXBwaW5nJywgZXJyb3IsIHtcbiAgICAgICAgICAgICAgY29uZmlnS2V5OiBpdGVtLmtleSxcbiAgICAgICAgICAgICAgY29uZmlnOiBpdGVtLmNvbmZpZyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gQ29udGludWUgcHJvY2Vzc2luZyBvdGhlciBjb25maWdzXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIExvZ2dlci5sb2dXYXJuKCdJbnZhbGlkIG1vdW50aW5nIGNvbmZpZyBpdGVtIHN0cnVjdHVyZSwgc2tpcHBpbmcnLCB1bmRlZmluZWQsIHsgaXRlbSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0cmFuc2Zvcm1lZERhdGEubW91bnRpbmdDb25maWdzID0gbW91bnRpbmdDb25maWdzUmVjb3JkO1xuICAgIH1cblxuICAgIC8vIENvbnZlcnQgd2lkZ2V0X2NvbmZpZ3MgZnJvbSBhcnJheSB0byBSZWNvcmQgaWYgcHJlc2VudFxuICAgIGlmICh0cmFuc2Zvcm1lZERhdGEud2lkZ2V0Q29uZmlncyAmJiBBcnJheS5pc0FycmF5KHRyYW5zZm9ybWVkRGF0YS53aWRnZXRDb25maWdzKSkge1xuICAgICAgY29uc3Qgd2lkZ2V0Q29uZmlnc0FycmF5ID0gdHJhbnNmb3JtZWREYXRhLndpZGdldENvbmZpZ3MgYXMgQXJyYXk8e1xuICAgICAgICBrZXk6IHN0cmluZztcbiAgICAgICAgY29uZmlnOiB1bmtub3duO1xuICAgICAgfT47XG4gICAgICBjb25zdCB3aWRnZXRDb25maWdzUmVjb3JkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygd2lkZ2V0Q29uZmlnc0FycmF5KSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBpdGVtICYmXG4gICAgICAgICAgdHlwZW9mIGl0ZW0ua2V5ID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgIGl0ZW0uY29uZmlnICYmXG4gICAgICAgICAgdHlwZW9mIGl0ZW0uY29uZmlnID09PSAnb2JqZWN0J1xuICAgICAgICApIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gVmFsaWRhdGUgYW5kIHRyYW5zZm9ybSB3aWRnZXQgY29uZmlnIHVzaW5nIHRoZSBkZWRpY2F0ZWQgdmFsaWRhdGlvbiBmdW5jdGlvblxuICAgICAgICAgICAgY29uc3QgY29uZmlnID0gaXRlbS5jb25maWcgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0ZWRDb25maWcgPSB2YWxpZGF0ZUFuZFRyYW5zZm9ybVdpZGdldENvbmZpZyhjb25maWcsIGl0ZW0ua2V5KTtcbiAgICAgICAgICAgIHdpZGdldENvbmZpZ3NSZWNvcmRbaXRlbS5rZXldID0gdmFsaWRhdGVkQ29uZmlnO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBMb2dnZXIubG9nV2FybignSW52YWxpZCB3aWRnZXQgY29uZmlnLCBza2lwcGluZycsIGVycm9yLCB7XG4gICAgICAgICAgICAgIGNvbmZpZ0tleTogaXRlbS5rZXksXG4gICAgICAgICAgICAgIGNvbmZpZzogaXRlbS5jb25maWcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIENvbnRpbnVlIHByb2Nlc3Npbmcgb3RoZXIgY29uZmlnc1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBMb2dnZXIubG9nV2FybignSW52YWxpZCB3aWRnZXQgY29uZmlnIGl0ZW0gc3RydWN0dXJlLCBza2lwcGluZycsIHVuZGVmaW5lZCwgeyBpdGVtIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRyYW5zZm9ybWVkRGF0YS53aWRnZXRDb25maWdzID0gd2lkZ2V0Q29uZmlnc1JlY29yZDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJhbnNmb3JtZWREYXRhIGFzIEZyb250ZW5kQ29uZmlnO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIExvZ2dlci5sb2dXYXJuKCdGYWlsZWQgdG8gdmFsaWRhdGUgYW5kIHRyYW5zZm9ybSBHcmFwaFFMIGZyb250ZW5kIGNvbmZpZyBkYXRhJywgZXJyb3IsIHtcbiAgICAgIGRhdGEsXG4gICAgfSk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufTtcbiIsImV4cG9ydCBjb25zdCB2YWxpZGF0ZUdyYXBoUUxPcmdJZCA9IChkYXRhOiB1bmtub3duKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKHR5cGVvZiBkYXRhICE9PSAnc3RyaW5nJyB8fCBkYXRhID09PSAnJykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gZGF0YTtcbn07XG4iLCJpbXBvcnQgeyBpc01vYmlsZVBMUENoYXRQbGFjZW1lbnRQYXJhbWV0ZXIgfSBmcm9tICcuLi9ndWFyZHMvaXNNb2JpbGVQTFBDaGF0UGxhY2VtZW50UGFyYW1ldGVyJztcbmludGVyZmFjZSBNb2JpbGVQbHBDaGF0UGxhY2VtZW50UGFyYW1ldGVyIHtcbiAgcm93X2luZGV4OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZU1vYmlsZVBMUENoYXRQbGFjZW1lbnRQYXJhbWV0ZXIgPSAoXG4gIHZhbHVlOiB1bmtub3duLFxuKTogTW9iaWxlUGxwQ2hhdFBsYWNlbWVudFBhcmFtZXRlciB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmICghaXNNb2JpbGVQTFBDaGF0UGxhY2VtZW50UGFyYW1ldGVyKHZhbHVlKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHJvd19pbmRleDogdmFsdWUucm93X2luZGV4LFxuICB9O1xufTtcbiIsImltcG9ydCB7IE9yZ2FuaXphdGlvbkNvbmZpZyB9IGZyb20gXCJAZW52aXZlLWFpL3R5cGVzXCI7XG5pbXBvcnQgeyBpc0FwaU9yZ2FuaXphdGlvbkNvbmZpZyB9IGZyb20gXCIuLi9ndWFyZHMvYXBpL2lzQXBpT3JnYW5pemF0aW9uQ29uZmlnLmpzXCI7XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZU9yZ2FuaXphdGlvbkNvbmZpZyA9IChcbiAgZGF0YTogdW5rbm93blxuKTogT3JnYW5pemF0aW9uQ29uZmlnIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKCFpc0FwaU9yZ2FuaXphdGlvbkNvbmZpZyhkYXRhKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGlkOiBkYXRhLmlkLFxuICAgIGNyZWF0ZWRBdDogZGF0YS5jcmVhdGVkQXQsXG4gICAgbmFtZXNwYWNlOiBkYXRhLm5hbWVzcGFjZSxcbiAgICBvcmdhbml6YXRpb25JZDogZGF0YS5vcmdhbml6YXRpb25JZCxcbiAgICBpc0xhdGVzdDogZGF0YS5pc0xhdGVzdCxcbiAgICB2ZXJzaW9uOiBkYXRhLnZlcnNpb24sXG4gICAgdXBkYXRlZEF0OiBkYXRhLnVwZGF0ZWRBdCxcbiAgICBjb25maWc6IHtcbiAgICAgIGFtcGxpdHVkZTogZGF0YS5jb25maWcuYW1wbGl0dWRlXG4gICAgICAgID8ge1xuICAgICAgICAgICAgc2Vzc2lvblJlcGxheUVuYWJsZWQ6IGRhdGEuY29uZmlnLmFtcGxpdHVkZS5zZXNzaW9uX3JlcGxheV9lbmFibGVkLFxuICAgICAgICAgICAgc2Vzc2lvblJlcGxheVNhbXBsZVJhdGU6XG4gICAgICAgICAgICAgIGRhdGEuY29uZmlnLmFtcGxpdHVkZS5zZXNzaW9uX3JlcGxheV9zYW1wbGVfcmF0ZSxcbiAgICAgICAgICAgIHRyYWNraW5nRW5hYmxlZDogZGF0YS5jb25maWcuYW1wbGl0dWRlLnRyYWNraW5nX2VuYWJsZWQsXG4gICAgICAgICAgfVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIGN1c3RvbWVyU2VydmljZTogZGF0YS5jb25maWcuY3VzdG9tZXJfc2VydmljZVxuICAgICAgICA/IHtcbiAgICAgICAgICAgIHByb3ZpZGVyOiBkYXRhLmNvbmZpZy5jdXN0b21lcl9zZXJ2aWNlLnByb3ZpZGVyLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBnb29nbGVBbmFseXRpY3M6IGRhdGEuY29uZmlnLmdvb2dsZV9hbmFseXRpY3NcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBtZWFzdXJlbWVudElkOiBkYXRhLmNvbmZpZy5nb29nbGVfYW5hbHl0aWNzLm1lYXN1cmVtZW50X2lkLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgfSxcbiAgfTtcbn07XG4iLCJpbXBvcnQgeyBPcmdhbml6YXRpb25Db25maWcsIE9yZ0NvbmZpZyB9IGZyb20gXCJAZW52aXZlLWFpL3R5cGVzXCI7XG5pbXBvcnQgeyBpc0FwaU9yZ0NvbmZpZ1Jlc3VsdHMgfSBmcm9tIFwiLi4vZ3VhcmRzL2FwaS9pc0FwaU9yZ0NvbmZpZ1Jlc3VsdHNcIjtcbmltcG9ydCB7IHZhbGlkYXRlT3JnYW5pemF0aW9uQ29uZmlnIH0gZnJvbSBcIi4vdmFsaWRhdGVPcmdhbml6YXRpb25Db25maWdcIjtcblxuLyoqXG4gKlxuICogQHBhcmFtIGRhdGFcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZU9yZ0NvbmZpZ1Jlc3VsdHMgPSAoXG4gIGRhdGE6IHVua25vd25cbik6IE9yZ0NvbmZpZyB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmICghaXNBcGlPcmdDb25maWdSZXN1bHRzKGRhdGEpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY29uZmlnczogZGF0YS5jb25maWdzXG4gICAgICAubWFwKChjb25maWcpID0+IHZhbGlkYXRlT3JnYW5pemF0aW9uQ29uZmlnKGNvbmZpZykpXG4gICAgICAuZmlsdGVyKChjb25maWcpOiBjb25maWcgaXMgT3JnYW5pemF0aW9uQ29uZmlnID0+IGNvbmZpZyAhPSBudWxsKSxcbiAgICBleHBlcmltZW50czogZGF0YS5leHBlcmltZW50cy5tYXAoKGV4cGVyaW1lbnQpID0+ICh7XG4gICAgICBncm91cDogZXhwZXJpbWVudC5ncm91cCxcbiAgICAgIGdyb3VwTmFtZTogZXhwZXJpbWVudC5ncm91cF9uYW1lLFxuICAgICAgbmFtZTogZXhwZXJpbWVudC5uYW1lLFxuICAgICAgcnVsZUlkOiBleHBlcmltZW50LnJ1bGVfaWQsXG4gICAgICAvLyBUT0RPIHRoaXMgbmVlZHMgdG8gYmUgc3Ryb25nbHkgdHlwZWQgYnV0IHdlJ3JlIG5vdCBydW5uaW5nIGFueSBleHBlcmltZW50cyBhdCB0aGUgbW9tZW50XG4gICAgICB2YWx1ZTogZXhwZXJpbWVudC52YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICB9KSksXG4gICAgZ2F0ZXM6IGRhdGEuZ2F0ZXMubWFwKChnYXRlKSA9PiAoe1xuICAgICAgZ3JvdXBOYW1lOiBnYXRlLmdyb3VwX25hbWUsXG4gICAgICBuYW1lOiBnYXRlLm5hbWUsXG4gICAgICBydWxlSWQ6IGdhdGUucnVsZV9pZCxcbiAgICAgIHZhbHVlOiBnYXRlLnZhbHVlLFxuICAgIH0pKSxcbiAgICBvcmc6IHtcbiAgICAgIG9yZzoge1xuICAgICAgICBpZDogZGF0YS5vcmcub3JnLmlkLFxuICAgICAgICBkaXNwbGF5TmFtZTogZGF0YS5vcmcub3JnLmRpc3BsYXlfbmFtZSxcbiAgICAgICAgZG9tYWluOiBkYXRhLm9yZy5vcmcuZG9tYWluLFxuICAgICAgICBzaG9ydE5hbWU6IGRhdGEub3JnLm9yZy5zaG9ydF9uYW1lLFxuICAgICAgICBzdGF0dXM6IGRhdGEub3JnLm9yZy5zdGF0dXMsXG4gICAgICAgIGNyZWF0ZWRBdDogZGF0YS5vcmcub3JnLmNyZWF0ZWRfYXQ/LnRvSVNPU3RyaW5nKCksXG4gICAgICAgIHVwZGF0ZWRBdDogZGF0YS5vcmcub3JnLnVwZGF0ZWRfYXQ/LnRvSVNPU3RyaW5nKCksXG4gICAgICB9LFxuICAgICAgc2V0dGluZ3M6IHt9LFxuICAgIH0sXG4gIH07XG59O1xuIiwiaW1wb3J0IHsgUmVzcG9uc2VDYXRlZ29yeSB9IGZyb20gXCJAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnRcIjtcbmltcG9ydCB7XG4gIEFwaVJlc3BvbnNlLFxuICBSZXZpZXdSaWNoSW5mb3JtYXRpb24sXG4gIEFwaVJldmlld1JpY2hJbmZvcm1hdGlvbixcbn0gZnJvbSBcIkBlbnZpdmUtYWkvdHlwZXNcIjtcbmltcG9ydCB7IGlzQXBpUGFnZVJlc3BvbnNlQXR0cmlidXRlcyB9IGZyb20gXCJzcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9hcGkvaXNBcGlQYWdlUmVzcG9uc2VBdHRyaWJ1dGVzXCI7XG5pbXBvcnQgeyBpc0FwaVByb2R1Y3RSZXNwb25zZUF0dHJpYnV0ZXMgfSBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpUHJvZHVjdFJlc3BvbnNlQXR0cmlidXRlc1wiO1xuaW1wb3J0IHsgaXNBcGlSZXNwb25zZSB9IGZyb20gXCJzcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9hcGkvaXNBcGlSZXNwb25zZVwiO1xuaW1wb3J0IHsgaXNBcGlSZXZpZXdSZXNwb25zZUF0dHJpYnV0ZXMgfSBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpUmV2aWV3UmVzcG9uc2VBdHRyaWJ1dGVzXCI7XG5pbXBvcnQgeyBpc0FwaVRleHRSZXNwb25zZUF0dHJpYnV0ZXMgfSBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpVGV4dFJlc3BvbnNlQXR0cmlidXRlc1wiO1xuaW1wb3J0IHsgaXNBcGlQcm9kdWN0U2VhcmNoUmVzcG9uc2VBdHRyaWJ1dGVzIH0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2FwaS9pc0FwaVByb2R1Y3RTZWFyY2hBdHRyaWJ1dGVzXCI7XG5pbXBvcnQgeyBpc0FwaUZvcm1SZXNwb25zZUF0dHJpYnV0ZXMgfSBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpRm9ybVJlc3BvbnNlXCI7XG5pbXBvcnQgeyBpc0FwaU9yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzIH0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2FwaS9pc0FwaU9yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzXCI7XG5pbXBvcnQgeyBzdHJpbmdUb0Z1bGZpbGxtZW50RGlzcGxheVN0YXR1c0VudW1WYWx1ZSB9IGZyb20gXCJzcmMvYXBwbGljYXRpb24vbW9kZWxzL3V0aWxzL3N0cmluZ1RvRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzRW51bVZhbHVlXCI7XG5pbXBvcnQgeyBpc0FwaVByb2R1Y3RTZWFyY2hGaWx0ZXJSZXNwb25zZUF0dHJpYnV0ZXMgfSBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpUHJvZHVjdFNlYXJjaEZpbHRlckF0dHJpYnV0ZXNcIjtcblxuY29uc3QgcmljaEluZm9ybWF0aW9uRnJvbUNvbW1lcmNlUmljaEluZm9ybWF0aW9uID0gKFxuICBkYXRhOiBBcGlSZXZpZXdSaWNoSW5mb3JtYXRpb25cbik6IFJldmlld1JpY2hJbmZvcm1hdGlvbiA9PiAoe1xuICBjb25zOiBkYXRhLmNvbnMsXG4gIHByb3M6IGRhdGEucHJvcyxcbiAgcmV2aWV3RGF0ZTogZGF0YS5yZXZpZXdfZGF0ZSxcbiAgcmV2aWV3ZXJUaXRsZTogZGF0YS5yZXZpZXdlcl90aXRsZSxcbiAgcHJvZHVjdEZhbWlsaWFyaXR5OiBkYXRhLnByb2R1Y3RfZmFtaWxpYXJpdHksXG59KTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlUmVzcG9uc2UgPSAoZGF0YTogdW5rbm93bik6IEFwaVJlc3BvbnNlIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKCFpc0FwaVJlc3BvbnNlKGRhdGEpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmIChcbiAgICBkYXRhLmNhdGVnb3J5ID09PSBSZXNwb25zZUNhdGVnb3J5LlRleHQgJiZcbiAgICBpc0FwaVRleHRSZXNwb25zZUF0dHJpYnV0ZXMoZGF0YS5hdHRyaWJ1dGVzKVxuICApIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGRhdGEuaWQsXG4gICAgICBjcmVhdGVkQXQ6IGRhdGEuY3JlYXRlZEF0LFxuICAgICAgY2F0ZWdvcnk6IFJlc3BvbnNlQ2F0ZWdvcnkuVGV4dCxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgY29udGVudDogZGF0YS5hdHRyaWJ1dGVzLmNvbnRlbnQsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBpZiAoXG4gICAgZGF0YS5jYXRlZ29yeSA9PT0gUmVzcG9uc2VDYXRlZ29yeS5Qcm9kdWN0ICYmXG4gICAgaXNBcGlQcm9kdWN0UmVzcG9uc2VBdHRyaWJ1dGVzKGRhdGEuYXR0cmlidXRlcylcbiAgKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBkYXRhLmlkLFxuICAgICAgY3JlYXRlZEF0OiBkYXRhLmNyZWF0ZWRBdCxcbiAgICAgIGNhdGVnb3J5OiBSZXNwb25zZUNhdGVnb3J5LlByb2R1Y3QsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIGlkOiBkYXRhLmF0dHJpYnV0ZXMuaWQsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBkYXRhLmF0dHJpYnV0ZXMuZGVzY3JpcHRpb24sXG4gICAgICAgIGltYWdlVXJsOiBkYXRhLmF0dHJpYnV0ZXMuaW1hZ2VVcmwsXG4gICAgICAgIGltYWdlVXJsczogZGF0YS5hdHRyaWJ1dGVzLmltYWdlVXJscyxcbiAgICAgICAgdGl0bGU6IGRhdGEuYXR0cmlidXRlcy50aXRsZSxcbiAgICAgICAgdXJsOiBkYXRhLmF0dHJpYnV0ZXMudXJsLFxuICAgICAgICBvcmlnaW5hbFByaWNlOiBkYXRhLmF0dHJpYnV0ZXMub3JpZ2luYWxQcmljZSxcbiAgICAgICAgc2FsZVByaWNlOiBkYXRhLmF0dHJpYnV0ZXMuc2FsZVByaWNlLFxuICAgICAgICBhdmVyYWdlUmF0aW5nOiBkYXRhLmF0dHJpYnV0ZXMuYXZlcmFnZVJhdGluZyxcbiAgICAgICAgbnVtYmVyUmV2aWV3czogZGF0YS5hdHRyaWJ1dGVzLm51bWJlclJldmlld3MsXG4gICAgICAgIG1ldGFkYXRhOiBkYXRhLmF0dHJpYnV0ZXMubWV0YWRhdGEsXG4gICAgICAgIGlzRm9yR3JpZDogZGF0YS5hdHRyaWJ1dGVzLmlzRm9yR3JpZCxcbiAgICAgICAgY29sb3JzOiBkYXRhLmF0dHJpYnV0ZXMuY29sb3JzLFxuICAgICAgICBzaXplczogZGF0YS5hdHRyaWJ1dGVzLnNpemVzLFxuICAgICAgICBmaWx0ZXJzOiBkYXRhLmF0dHJpYnV0ZXMuZmlsdGVycyxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGlmIChcbiAgICBkYXRhLmNhdGVnb3J5ID09PSBSZXNwb25zZUNhdGVnb3J5LlJldmlldyAmJlxuICAgIGlzQXBpUmV2aWV3UmVzcG9uc2VBdHRyaWJ1dGVzKGRhdGEuYXR0cmlidXRlcylcbiAgKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBkYXRhLmlkLFxuICAgICAgY3JlYXRlZEF0OiBkYXRhLmNyZWF0ZWRBdCxcbiAgICAgIGNhdGVnb3J5OiBSZXNwb25zZUNhdGVnb3J5LlJldmlldyxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgaWQ6IGRhdGEuYXR0cmlidXRlcy5pZCxcbiAgICAgICAgcHJvZHVjdElkOiBkYXRhLmF0dHJpYnV0ZXMucHJvZHVjdElkLFxuICAgICAgICB0aXRsZTogZGF0YS5hdHRyaWJ1dGVzLnRpdGxlLFxuICAgICAgICByZXZpZXdlcjogZGF0YS5hdHRyaWJ1dGVzLnJldmlld2VyLFxuICAgICAgICByZXZpZXc6IGRhdGEuYXR0cmlidXRlcy5yZXZpZXcsXG4gICAgICAgIHN0YXJzOiBkYXRhLmF0dHJpYnV0ZXMuc3RhcnMsXG4gICAgICAgIHJpY2hJbmZvcm1hdGlvbjogZGF0YS5hdHRyaWJ1dGVzLnJpY2hJbmZvcm1hdGlvblxuICAgICAgICAgID8gcmljaEluZm9ybWF0aW9uRnJvbUNvbW1lcmNlUmljaEluZm9ybWF0aW9uKFxuICAgICAgICAgICAgICBkYXRhLmF0dHJpYnV0ZXMucmljaEluZm9ybWF0aW9uXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBpZiAoZGF0YS5jYXRlZ29yeSA9PT0gUmVzcG9uc2VDYXRlZ29yeS5TZXBhcmF0b3IpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGRhdGEuaWQsXG4gICAgICBjcmVhdGVkQXQ6IGRhdGEuY3JlYXRlZEF0LFxuICAgICAgY2F0ZWdvcnk6IFJlc3BvbnNlQ2F0ZWdvcnkuU2VwYXJhdG9yLFxuICAgIH07XG4gIH1cblxuICBpZiAoXG4gICAgZGF0YS5jYXRlZ29yeSA9PT0gUmVzcG9uc2VDYXRlZ29yeS5QYWdlICYmXG4gICAgaXNBcGlQYWdlUmVzcG9uc2VBdHRyaWJ1dGVzKGRhdGEuYXR0cmlidXRlcylcbiAgKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBkYXRhLmlkLFxuICAgICAgY3JlYXRlZEF0OiBkYXRhLmNyZWF0ZWRBdCxcbiAgICAgIGNhdGVnb3J5OiBSZXNwb25zZUNhdGVnb3J5LlBhZ2UsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIGlkOiBkYXRhLmF0dHJpYnV0ZXMuaWQsXG4gICAgICAgIHRpdGxlOiBkYXRhLmF0dHJpYnV0ZXMudGl0bGUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBkYXRhLmF0dHJpYnV0ZXMuZGVzY3JpcHRpb24sXG4gICAgICAgIHVybDogZGF0YS5hdHRyaWJ1dGVzLnVybCxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGlmIChcbiAgICBkYXRhLmNhdGVnb3J5ID09PSBSZXNwb25zZUNhdGVnb3J5LkZvcm0gJiZcbiAgICBpc0FwaUZvcm1SZXNwb25zZUF0dHJpYnV0ZXMoZGF0YS5hdHRyaWJ1dGVzKVxuICApIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGRhdGEuaWQsXG4gICAgICBjcmVhdGVkQXQ6IGRhdGEuY3JlYXRlZEF0LFxuICAgICAgY2F0ZWdvcnk6IFJlc3BvbnNlQ2F0ZWdvcnkuRm9ybSxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgZm9ybUNhdGVnb3J5OiBkYXRhLmF0dHJpYnV0ZXMuZm9ybUNhdGVnb3J5XG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGZvcm1UeXBlOiBkYXRhLmF0dHJpYnV0ZXMuZm9ybUNhdGVnb3J5LmZvcm1UeXBlLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICBzY2hlbWE6IHtcbiAgICAgICAgICBwcm9wZXJ0aWVzOiBkYXRhLmF0dHJpYnV0ZXMuc2NoZW1hLnByb3BlcnRpZXMsXG4gICAgICAgICAgcmVxdWlyZWQ6IGRhdGEuYXR0cmlidXRlcy5zY2hlbWEucmVxdWlyZWQubWFwKFN0cmluZyksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBpZiAoXG4gICAgZGF0YS5jYXRlZ29yeSA9PT0gUmVzcG9uc2VDYXRlZ29yeS5Qcm9kdWN0U2VhcmNoICYmXG4gICAgaXNBcGlQcm9kdWN0U2VhcmNoUmVzcG9uc2VBdHRyaWJ1dGVzKGRhdGEuYXR0cmlidXRlcylcbiAgKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBkYXRhLmlkLFxuICAgICAgY3JlYXRlZEF0OiBkYXRhLmNyZWF0ZWRBdCxcbiAgICAgIGNhdGVnb3J5OiBSZXNwb25zZUNhdGVnb3J5LlByb2R1Y3RTZWFyY2gsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIGdlbmVyYXRlZFF1ZXJ5OiBkYXRhLmF0dHJpYnV0ZXMuZ2VuZXJhdGVkX3F1ZXJ5LFxuICAgICAgICBwcm9kdWN0Q291bnQ6IGRhdGEuYXR0cmlidXRlcy5wcm9kdWN0X2NvdW50LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKFxuICAgIGRhdGEuY2F0ZWdvcnkgPT09IFJlc3BvbnNlQ2F0ZWdvcnkuUHJvZHVjdFNlYXJjaEZpbHRlciAmJlxuICAgIGlzQXBpUHJvZHVjdFNlYXJjaEZpbHRlclJlc3BvbnNlQXR0cmlidXRlcyhkYXRhLmF0dHJpYnV0ZXMpXG4gICkge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogZGF0YS5pZCxcbiAgICAgIGNyZWF0ZWRBdDogZGF0YS5jcmVhdGVkQXQsXG4gICAgICBjYXRlZ29yeTogUmVzcG9uc2VDYXRlZ29yeS5Qcm9kdWN0U2VhcmNoRmlsdGVyLFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBmaWx0ZXJOYW1lOiBkYXRhLmF0dHJpYnV0ZXMuZmlsdGVyX25hbWUsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBpZiAoXG4gICAgZGF0YS5jYXRlZ29yeSA9PT0gUmVzcG9uc2VDYXRlZ29yeS5PcmRlciAmJlxuICAgIGlzQXBpT3JkZXJSZXNwb25zZUF0dHJpYnV0ZXMoZGF0YS5hdHRyaWJ1dGVzKVxuICApIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGRhdGEuaWQsXG4gICAgICBjcmVhdGVkQXQ6IGRhdGEuY3JlYXRlZEF0LFxuICAgICAgY2F0ZWdvcnk6IFJlc3BvbnNlQ2F0ZWdvcnkuT3JkZXIsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIG9yZGVySWQ6IGRhdGEuYXR0cmlidXRlcy5vcmRlcklkLFxuICAgICAgICBvcmRlck51bWJlcjogZGF0YS5hdHRyaWJ1dGVzLm9yZGVyTnVtYmVyLFxuICAgICAgICBjcmVhdGVkQXQ6IGRhdGEuYXR0cmlidXRlcy5jcmVhdGVkX2F0LFxuICAgICAgICBsYXRlc3RFdmVudERhdGU6IGRhdGEuYXR0cmlidXRlcy5sYXRlc3RfZXZlbnRfZGF0ZSxcbiAgICAgICAgbGluZUl0ZW1zOiBkYXRhLmF0dHJpYnV0ZXMubGluZV9pdGVtcy5tYXAoKGl0ZW0pID0+ICh7XG4gICAgICAgICAgaXRlbVRpdGxlOiBpdGVtLml0ZW1fdGl0bGUsXG4gICAgICAgICAgaXRlbVByaWNlOiBpdGVtLml0ZW1fcHJpY2UsXG4gICAgICAgICAgaXRlbVF1YW50aXR5OiBpdGVtLml0ZW1fcXVhbnRpdHksXG4gICAgICAgICAgb3JkZXJJdGVtSWQ6IGl0ZW0ub3JkZXJfaXRlbV9pZCxcbiAgICAgICAgICBpbWFnZTogaXRlbS5pbWFnZSA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgaW5UcmFuc2l0QXQ6IGl0ZW0uaW5fdHJhbnNpdF9hdCA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgZGVsaXZlcmVkQXQ6IGl0ZW0uZGVsaXZlcmVkX2F0ID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICBlc3RpbWF0ZWREZWxpdmVyeUF0OiBpdGVtLmVzdGltYXRlZF9kZWxpdmVyeV9hdCA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgZnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzOiBpdGVtLmZ1bGZpbGxtZW50X2Rpc3BsYXlfc3RhdHVzXG4gICAgICAgICAgICA/IHN0cmluZ1RvRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzRW51bVZhbHVlKFxuICAgICAgICAgICAgICAgIGl0ZW0uZnVsZmlsbG1lbnRfZGlzcGxheV9zdGF0dXNcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgdHJhY2tpbmdVcmw6IGl0ZW0udHJhY2tpbmdfdXJsID8/IHVuZGVmaW5lZCxcbiAgICAgICAgfSkpLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG4iLCJpbXBvcnQgeyBTdWdnZXN0aW9uIH0gZnJvbSAnQGVudml2ZS1haS90eXBlcyc7XG5pbXBvcnQgeyBpc1N1Z2dlc3Rpb24gfSBmcm9tICcuLi9ndWFyZHMvYXBpL2lzQXBpU3VnZ2VzdGlvbic7XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZVN1Z2dlc3Rpb24gPSAoZGF0YTogdW5rbm93bik6IFN1Z2dlc3Rpb24gfCB1bmRlZmluZWQgPT4ge1xuICBpZiAoIWlzU3VnZ2VzdGlvbihkYXRhKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGlkOiBkYXRhLmlkLFxuICAgIGNhdGVnb3J5OiBkYXRhLmNhdGVnb3J5LFxuICAgIGNvbnRlbnQ6IGRhdGEuY29udGVudCxcbiAgICBjcmVhdGVkQXQ6IGRhdGEuY3JlYXRlZF9hdCxcbiAgICBpc0Fuc3dlcjogZGF0YS5pc19hbnN3ZXIsXG4gIH07XG59O1xuIiwiaW1wb3J0IHsgVXNlckV2ZW50Q2F0ZWdvcnkgfSBmcm9tIFwiQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50XCI7XG5pbXBvcnQgeyBVc2VyRXZlbnQgfSBmcm9tIFwiQGVudml2ZS1haS90eXBlc1wiO1xuaW1wb3J0IHtcbiAgaXNBcGlVc2VyRXZlbnQsXG4gIGlzQXBpUERQQXR0cmlidXRlcyxcbiAgaXNBcGlRdWVyeVR5cGVkQXR0cmlidXRlcyxcbiAgaXNBcGlTZWFyY2hBdHRyaWJ1dGVzLFxuICBpc0FwaVN1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlcyxcbn0gZnJvbSBcIi4uL2d1YXJkcy9hcGlcIjtcbmltcG9ydCB7IGlzQXBpRm9ybVN1Ym1pdHRlZFJlc3BvbnNlQXR0cmlidXRlcyB9IGZyb20gXCIuLi9ndWFyZHMvYXBpL2lzQXBpRm9ybVN1Ym1pdHRlZFJlc3BvbnNlQXR0cmlidXRlc1wiO1xuaW1wb3J0IHtcbiAgaXNBcGlQTFBFdmVudEF0dHJpYnV0ZXMsXG4gIGlzQXBpUExQSWRBdHRyaWJ1dGUsXG59IGZyb20gXCIuLi9ndWFyZHMvYXBpL2lzQXBpUExQRXZlbnRBdHRyaWJ1dGVzXCI7XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZVVzZXJFdmVudCA9IChkYXRhOiB1bmtub3duKTogVXNlckV2ZW50IHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKCFpc0FwaVVzZXJFdmVudChkYXRhKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAoXG4gICAgZGF0YS5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuUGRwVmlzaXQgJiZcbiAgICBpc0FwaVBEUEF0dHJpYnV0ZXMoZGF0YS5hdHRyaWJ1dGVzKVxuICApIHtcbiAgICByZXR1cm4ge1xuICAgICAgZXZlbnRJZDogZGF0YS5ldmVudF9pZCxcbiAgICAgIGNyZWF0ZWRBdDogZGF0YS5jcmVhdGVkX2F0LFxuICAgICAgY2F0ZWdvcnk6IFVzZXJFdmVudENhdGVnb3J5LlBkcFZpc2l0LFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBwcm9kdWN0SWQ6IGRhdGEuYXR0cmlidXRlcy5wcm9kdWN0X2lkLFxuICAgICAgICBwYXJlbnRQcm9kdWN0SWQ6IGRhdGEuYXR0cmlidXRlcy5wYXJlbnRfcHJvZHVjdF9pZCxcbiAgICAgICAgdXJsOiBkYXRhLmF0dHJpYnV0ZXMudXJsLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKFxuICAgIGRhdGEuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlF1ZXJ5VHlwZWQgJiZcbiAgICBpc0FwaVF1ZXJ5VHlwZWRBdHRyaWJ1dGVzKGRhdGEuYXR0cmlidXRlcylcbiAgKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGV2ZW50SWQ6IGRhdGEuZXZlbnRfaWQsXG4gICAgICBjcmVhdGVkQXQ6IGRhdGEuY3JlYXRlZF9hdCxcbiAgICAgIGNhdGVnb3J5OiBVc2VyRXZlbnRDYXRlZ29yeS5RdWVyeVR5cGVkLFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBxdWVyeTogZGF0YS5hdHRyaWJ1dGVzLnF1ZXJ5LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKFxuICAgIGRhdGEuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlNlYXJjaCAmJlxuICAgIGlzQXBpU2VhcmNoQXR0cmlidXRlcyhkYXRhLmF0dHJpYnV0ZXMpXG4gICkge1xuICAgIHJldHVybiB7XG4gICAgICBldmVudElkOiBkYXRhLmV2ZW50X2lkLFxuICAgICAgY3JlYXRlZEF0OiBkYXRhLmNyZWF0ZWRfYXQsXG4gICAgICBjYXRlZ29yeTogVXNlckV2ZW50Q2F0ZWdvcnkuU2VhcmNoLFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBzZWFyY2hUZXJtOiBkYXRhLmF0dHJpYnV0ZXMuc2VhcmNoX3Rlcm0sXG4gICAgICAgIHNlbGVjdGVkRmlsdGVyczogZGF0YS5hdHRyaWJ1dGVzLnNlbGVjdGVkX2ZpbHRlcnMsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBpZiAoXG4gICAgZGF0YS5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuU3VnZ2VzdGlvbkNsaWNrZWQgJiZcbiAgICBpc0FwaVN1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlcyhkYXRhLmF0dHJpYnV0ZXMpXG4gICkge1xuICAgIHJldHVybiB7XG4gICAgICBldmVudElkOiBkYXRhLmV2ZW50X2lkLFxuICAgICAgY3JlYXRlZEF0OiBkYXRhLmNyZWF0ZWRfYXQsXG4gICAgICBjYXRlZ29yeTogVXNlckV2ZW50Q2F0ZWdvcnkuU3VnZ2VzdGlvbkNsaWNrZWQsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIHN1Z2dlc3Rpb25JZDogZGF0YS5hdHRyaWJ1dGVzLnN1Z2dlc3Rpb25faWQsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBpZiAoXG4gICAgZGF0YS5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuUGxwVmlzaXQgJiZcbiAgICBpc0FwaVBMUEV2ZW50QXR0cmlidXRlcyhkYXRhLmF0dHJpYnV0ZXMpXG4gICkge1xuICAgIGlmIChpc0FwaVBMUElkQXR0cmlidXRlKGRhdGEuYXR0cmlidXRlcykpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGV2ZW50SWQ6IGRhdGEuZXZlbnRfaWQsXG4gICAgICAgIGNyZWF0ZWRBdDogZGF0YS5jcmVhdGVkX2F0LFxuICAgICAgICBjYXRlZ29yeTogVXNlckV2ZW50Q2F0ZWdvcnkuUGxwVmlzaXQsXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICBjYXRlZ29yeTogZGF0YS5hdHRyaWJ1dGVzLmNhdGVnb3J5LFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgIGlkOiBkYXRhLmF0dHJpYnV0ZXMuaWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgaWYgKFxuICAgIGRhdGEuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LkZvcm1TdWJtaXR0ZWQgJiZcbiAgICBpc0FwaUZvcm1TdWJtaXR0ZWRSZXNwb25zZUF0dHJpYnV0ZXMoZGF0YS5hdHRyaWJ1dGVzKVxuICApIHtcbiAgICByZXR1cm4ge1xuICAgICAgZXZlbnRJZDogZGF0YS5ldmVudF9pZCxcbiAgICAgIGNyZWF0ZWRBdDogZGF0YS5jcmVhdGVkX2F0LFxuICAgICAgY2F0ZWdvcnk6IFVzZXJFdmVudENhdGVnb3J5LkZvcm1TdWJtaXR0ZWQsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIGZpbGxlZFNjaGVtYTogeyAuLi5kYXRhLmF0dHJpYnV0ZXMuZmlsbGVkX3NjaGVtYSB9LFxuICAgICAgICBmb3JtUmVzcG9uc2VJZDogZGF0YS5hdHRyaWJ1dGVzLmZvcm1fcmVzcG9uc2VfaWQsXG4gICAgICAgIGZvcm1UeXBlOiBkYXRhLmF0dHJpYnV0ZXMuZm9ybV90eXBlLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLy8gd2UncmUgbm90IHVzaW5nIGFwcF91bmxvYWRlZCBhdCB0aGUgbW9tZW50IHNvIHJldHVybiB0aGUgYXBwX2xvYWRlZCBldmVudCBhcyBkZWZhdWx0XG4gIHJldHVybiB7XG4gICAgZXZlbnRJZDogZGF0YS5ldmVudF9pZCxcbiAgICBjcmVhdGVkQXQ6IGRhdGEuY3JlYXRlZF9hdCxcbiAgICBjYXRlZ29yeTogVXNlckV2ZW50Q2F0ZWdvcnkuQXBwTG9hZGVkLFxuICB9O1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFRQSxNQUFhLHdCQUF3QixTQUNuQyxRQUFRLFFBQ1IsT0FBTyxTQUFTLFlBQ2hCLGVBQWUsUUFDZixLQUFLLGFBQWEsUUFDbEIsT0FBTyxLQUFLLGNBQWMsWUFDMUIsV0FBVyxRQUNYLE9BQU8sS0FBSyxVQUFVOzs7Ozs7Ozs7OztBQ054QixNQUFhLHVCQUF1QixTQUNsQyxPQUFPLFNBQVMsWUFDaEIsUUFBUSxRQUNSLGVBQWUsUUFDZixLQUFLLGFBQWEsUUFDbEIsT0FBTyxLQUFLLGNBQWMsWUFDMUIsV0FBVyxLQUFLLGFBQ2hCLE1BQU0sUUFBUSxLQUFLLFVBQVUsTUFBTTs7Ozs7Ozs7Ozs7QUNQckMsTUFBYSw0QkFBNEIsU0FD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
|
|
1118
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWxzLURtc01sYUhULmpzIiwibmFtZXMiOlsicmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiIsIm5vcm1hbGl6ZWRDb25maWc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IiwicmVzdWx0OiBXaWRnZXRNb3VudGluZ0NvbmZpZyIsInZhbGlkYXRlZFBhZ2VWYXJpYW50czogUGFnZVZhcmlhbnRDb25maWdbXSIsIm1vdW50aW5nQ29uZmlnc1JlY29yZDogUmVjb3JkPHN0cmluZywgV2lkZ2V0TW91bnRpbmdDb25maWc+Iiwid2lkZ2V0Q29uZmlnc1JlY29yZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4iXSwic291cmNlcyI6WyIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9pc0Jhc2VFY29tbWVyY2VFdmVudC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2lzR0E0RWNvbW1lcmNlRXZlbnQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9pc0xlZ2FjeVVBRWNvbW1lcmNlRXZlbnQudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9pc01vYmlsZVBMUENoYXRQbGFjZW1lbnRQYXJhbWV0ZXIudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9pc1NwYW54VGFrZUFRdWl6Q3RhUGFyYW1ldGVyLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvaXNWYXJpYW50SW5mby50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2FwaS9pc0FwaUZvcm1SZXNwb25zZS50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2FwaS9pc0FwaUZvcm1TdWJtaXR0ZWRSZXNwb25zZUF0dHJpYnV0ZXMudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9hcGkvaXNBcGlPcmRlclJlc3BvbnNlQXR0cmlidXRlcy50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2FwaS9pc0FwaU9yZ2FuaXphdGlvbkNvbmZpZy50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2FwaS9pc0FwaU9yZ0NvbmZpZ1Jlc3VsdHMudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9hcGkvaXNBcGlQYWdlUmVzcG9uc2VBdHRyaWJ1dGVzLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpUExQRXZlbnRBdHRyaWJ1dGVzLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpUHJvZHVjdFNlYXJjaEZpbHRlckF0dHJpYnV0ZXMudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9ncmFwaFFML2lzR3JhcGhRTENvbG9yc0NvbmZpZy50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdXRpbHMvc25ha2VUb0NhbWVsVHJhbnNmb3JtZXIudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL3V0aWxzL3N0cmluZ1RvRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzRW51bVZhbHVlLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy92YWxpZGF0b3JzL3ZhbGlkYXRlR3JhcGhRTENvbG9yc0NvbmZpZy50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdmFsaWRhdG9ycy92YWxpZGF0ZUdyYXBoUUxGcm9udGVuZENvbmZpZy50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdmFsaWRhdG9ycy92YWxpZGF0ZUdyYXBoUUxPcmdJZC50cyIsIi4uL3NyYy9hcHBsaWNhdGlvbi9tb2RlbHMvdmFsaWRhdG9ycy92YWxpZGF0ZU1vYmlsZVBMUENoYXRQbGFjZW1lbnRQYXJhbWV0ZXIudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL3ZhbGlkYXRvcnMvdmFsaWRhdGVPcmdhbml6YXRpb25Db25maWcudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL3ZhbGlkYXRvcnMvdmFsaWRhdGVPcmdDb25maWdSZXN1bHRzLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy92YWxpZGF0b3JzL3ZhbGlkYXRlUmVzcG9uc2UudHMiLCIuLi9zcmMvYXBwbGljYXRpb24vbW9kZWxzL3ZhbGlkYXRvcnMvdmFsaWRhdGVTdWdnZXN0aW9uLnRzIiwiLi4vc3JjL2FwcGxpY2F0aW9uL21vZGVscy92YWxpZGF0b3JzL3ZhbGlkYXRlVXNlckV2ZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VFY29tbWVyY2VFdmVudCB9IGZyb20gJ0BlbnZpdmUtYWkvdHlwZXMnO1xuLyoqXG4gKiBDaGVja3MgaWYgYW4gZXZlbnQgaXMgYSBiYXNlIEdvb2dsZSBBbmFseXRpY3MgZWNvbW1lcmNlIGV2ZW50LlxuICpcbiAqIEBwYXJhbSBkYXRhIFRoZSBldmVudCB0byBjaGVjay5cbiAqXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBldmVudCBpcyBhIGJhc2UgZWNvbW1lcmNlIGV2ZW50LCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBjb25zdCBpc0Jhc2VFY29tbWVyY2VFdmVudCA9IChkYXRhOiB1bmtub3duKTogZGF0YSBpcyBCYXNlRWNvbW1lcmNlRXZlbnQgPT5cbiAgZGF0YSAhPSBudWxsICYmXG4gIHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyAmJlxuICAnZWNvbW1lcmNlJyBpbiBkYXRhICYmXG4gIGRhdGEuZWNvbW1lcmNlICE9IG51bGwgJiZcbiAgdHlwZW9mIGRhdGEuZWNvbW1lcmNlID09PSAnb2JqZWN0JyAmJlxuICAnZXZlbnQnIGluIGRhdGEgJiZcbiAgdHlwZW9mIGRhdGEuZXZlbnQgPT09ICdzdHJpbmcnO1xuIiwiaW1wb3J0IHsgR0E0RWNvbW1lcmNlRXZlbnQgfSBmcm9tICdAZW52aXZlLWFpL3R5cGVzJztcblxuLyoqXG4gKiBDaGVja3MgaWYgYW4gZXZlbnQgaXMgYSBHb29nbGUgQW5hbHl0aWNzIDQgZWNvbW1lcmNlIGV2ZW50LlxuICpcbiAqIEBwYXJhbSBkYXRhIFRoZSBldmVudCB0byBjaGVjay5cbiAqXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBldmVudCBpcyBhIEdBNCBlY29tbWVyY2UgZXZlbnQsIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGNvbnN0IGlzR0E0RWNvbW1lcmNlRXZlbnQgPSAoZGF0YTogdW5rbm93bik6IGRhdGEgaXMgR0E0RWNvbW1lcmNlRXZlbnQgPT5cbiAgdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmXG4gIGRhdGEgIT0gbnVsbCAmJlxuICAnZWNvbW1lcmNlJyBpbiBkYXRhICYmXG4gIGRhdGEuZWNvbW1lcmNlICE9IG51bGwgJiZcbiAgdHlwZW9mIGRhdGEuZWNvbW1lcmNlID09PSAnb2JqZWN0JyAmJlxuICAnaXRlbXMnIGluIGRhdGEuZWNvbW1lcmNlICYmXG4gIEFycmF5LmlzQXJyYXkoZGF0YS5lY29tbWVyY2UuaXRlbXMpO1xuIiwiaW1wb3J0IHsgVUFFY29tbWVyY2VFdmVudCB9IGZyb20gJ0BlbnZpdmUtYWkvdHlwZXMnO1xuXG4vKipcbiAqIENoZWNrcyBpZiBhbiBldmVudCBpcyBhIGxlZ2FjeSBVbml2ZXJzYWwgQW5hbHl0aWNzIGVjb21tZXJjZSBldmVudC5cbiAqXG4gKiBAcGFyYW0gZGF0YSBUaGUgZXZlbnQgdG8gY2hlY2suXG4gKlxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZXZlbnQgaXMgYSBsZWdhY3kgVUEgZWNvbW1lcmNlIGV2ZW50LCBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBjb25zdCBpc0xlZ2FjeVVBRWNvbW1lcmNlRXZlbnQgPSAoZGF0YTogdW5rbm93bik6IGRhdGEgaXMgVUFFY29tbWVyY2VFdmVudCA9PlxuICBkYXRhICE9IG51bGwgJiZcbiAgdHlwZW9mIGRhdGEgPT09ICdvYmplY3QnICYmXG4gICdlY29tbWVyY2UnIGluIGRhdGEgJiZcbiAgZGF0YS5lY29tbWVyY2UgIT0gbnVsbCAmJlxuICB0eXBlb2YgZGF0YS5lY29tbWVyY2UgPT09ICdvYmplY3QnICYmXG4gICdhZGQnIGluIGRhdGEuZWNvbW1lcmNlICYmXG4gIHR5cGVvZiBkYXRhLmVjb21tZXJjZS5hZGQgPT09ICdvYmplY3QnO1xuIiwiaW1wb3J0IHsgTW9iaWxlUGxwQ2hhdFBsYWNlbWVudFBhcmFtZXRlciB9IGZyb20gJ0BlbnZpdmUtYWkvdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgaXNNb2JpbGVQTFBDaGF0UGxhY2VtZW50UGFyYW1ldGVyID0gKFxuICB2YWx1ZTogdW5rbm93bixcbik6IHZhbHVlIGlzIE1vYmlsZVBscENoYXRQbGFjZW1lbnRQYXJhbWV0ZXIgPT5cbiAgdmFsdWUgIT0gbnVsbCAmJlxuICB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmXG4gICdyb3dfaW5kZXgnIGluIHZhbHVlICYmXG4gIHR5cGVvZiB2YWx1ZS5yb3dfaW5kZXggPT09ICdudW1iZXInO1xuIiwiaW50ZXJmYWNlIFNwYW54VGFrZUFRdWl6Q3RhUGFyYW1ldGVyIHtcbiAgdGV4dD86IHN0cmluZztcbiAgdmFsdWU/OiBzdHJpbmc7XG59XG5leHBvcnQgY29uc3QgaXNTcGFueFRha2VBUXVpekN0YVBhcmFtZXRlciA9ICh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIFNwYW54VGFrZUFRdWl6Q3RhUGFyYW1ldGVyID0+XG4gIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAndGV4dCcgaW4gdmFsdWUgJiYgdHlwZW9mIHZhbHVlLnRleHQgPT09ICdzdHJpbmcnO1xuIiwiaW1wb3J0IHtcbiAgUERQVmFyaWFudEluZm8sXG4gIFBMUFZhcmlhbnRJbmZvLFxuICBQYWdlVmlzaXRWYXJpYW50SW5mbyxcbiAgVmFyaWFudEluZm8sXG59IGZyb20gJ0BlbnZpdmUtYWkvdHlwZXMnO1xuaW1wb3J0IHsgUGFnZVZpc2l0Q2F0ZWdvcnkgfSBmcm9tICdAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnQnO1xuXG5jb25zdCBpc1BEUFZhcmlhbnRJbmZvID0gKHZhcmlhbnRJbmZvOiBvYmplY3QpOiB2YXJpYW50SW5mbyBpcyBQRFBWYXJpYW50SW5mbyA9PlxuICAndmFyaWFudCcgaW4gdmFyaWFudEluZm8gJiZcbiAgdmFyaWFudEluZm8udmFyaWFudCA9PT0gJ3BkcCcgJiZcbiAgJ3Byb2R1Y3RJZCcgaW4gdmFyaWFudEluZm8gJiZcbiAgdHlwZW9mIHZhcmlhbnRJbmZvLnByb2R1Y3RJZCA9PT0gJ3N0cmluZyc7XG5cbmNvbnN0IGlzUExQVmFyaWFudEluZm8gPSAodmFyaWFudEluZm86IG9iamVjdCk6IHZhcmlhbnRJbmZvIGlzIFBMUFZhcmlhbnRJbmZvID0+XG4gICd2YXJpYW50JyBpbiB2YXJpYW50SW5mbyAmJlxuICB2YXJpYW50SW5mby52YXJpYW50ID09PSAncGxwJyAmJlxuICAncGxwSWQnIGluIHZhcmlhbnRJbmZvICYmXG4gIHR5cGVvZiB2YXJpYW50SW5mby5wbHBJZCA9PT0gJ3N0cmluZyc7XG5cbmNvbnN0IGlzUGFnZVZpc2l0VmFyaWFudEluZm8gPSAodmFyaWFudEluZm86IG9iamVjdCk6IHZhcmlhbnRJbmZvIGlzIFBhZ2VWaXNpdFZhcmlhbnRJbmZvID0+XG4gICd2YXJpYW50JyBpbiB2YXJpYW50SW5mbyAmJlxuICB2YXJpYW50SW5mby52YXJpYW50ID09PSAncGFnZV92aXNpdCcgJiZcbiAgJ3VybCcgaW4gdmFyaWFudEluZm8gJiZcbiAgdHlwZW9mIHZhcmlhbnRJbmZvLnVybCA9PT0gJ3N0cmluZycgJiZcbiAgJ3BhZ2VWaXNpdENhdGVnb3J5JyBpbiB2YXJpYW50SW5mbyAmJlxuICBPYmplY3QudmFsdWVzKFBhZ2VWaXNpdENhdGVnb3J5KS5pbmNsdWRlcyh2YXJpYW50SW5mby5wYWdlVmlzaXRDYXRlZ29yeSBhcyBQYWdlVmlzaXRDYXRlZ29yeSk7XG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiBhbiBvYmplY3QgaXMgYSB2YWxpZCBWYXJpYW50SW5mby5cbiAqXG4gKiBAcGFyYW0gdmFyaWFudEluZm8gLSBUaGUgdW5rbm93biBvYmplY3QgdG8gY2hlY2suXG4gKlxuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZGF0YSBpcyBhIHZhbGlkIFZhcmlhbnRJbmZvIG9iamVjdCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgY29uc3QgaXNWYXJpYW50SW5mbyA9ICh2YXJpYW50SW5mbzogdW5rbm93bik6IHZhcmlhbnRJbmZvIGlzIFZhcmlhbnRJbmZvID0+XG4gIHZhcmlhbnRJbmZvICE9IG51bGwgJiZcbiAgdHlwZW9mIHZhcmlhbnRJbmZvID09PSAnb2JqZWN0JyAmJlxuICAndmFyaWFudElkJyBpbiB2YXJpYW50SW5mbyAmJlxuICAoaXNQRFBWYXJpYW50SW5mbyh2YXJpYW50SW5mbykgfHxcbiAgICBpc1BMUFZhcmlhbnRJbmZvKHZhcmlhbnRJbmZvKSB8fFxuICAgIGlzUGFnZVZpc2l0VmFyaWFudEluZm8odmFyaWFudEluZm8pKTtcbiIsImltcG9ydCB7IEZvcm1UeXBlIH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmltcG9ydCBMb2dnZXIgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyJztcbmltcG9ydCB7IGhhc1Byb3BlcnR5T2ZUeXBlIH0gZnJvbSAnLi4vdXRpbHMnO1xuaW1wb3J0IHsgRm9ybVJlc3BvbnNlQXR0cmlidXRlcyB9IGZyb20gJ0BlbnZpdmUtYWkvdHlwZXMnO1xuXG4vKipcbiAqIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgdGhlIHByb3ZpZGVkIGRhdGEgaGFzIHRoZSBhbGwgb2YgdGhlIHByb3BlcnRpZXMgKHdpdGggdGhlIGNvcnJlY3QgdHlwZXMpIG9mXG4gKiBhIEZvcm1SZXNwb25zZUF0dHJpYnV0ZVxuICpcbiAqIEBwYXJhbSBkYXRhIC0gVGhlIGRhdGEgdG8gY2hlY2tcbiAqXG4gKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBkYXRhIGhhcyB0aGUgY29ycmVjdCBwcm9wZXJ0aWVzLCBmYWxzZSBvdGhlcndpc2VcbiAqL1xuZXhwb3J0IGNvbnN0IGlzQXBpRm9ybVJlc3BvbnNlQXR0cmlidXRlcyA9IChkYXRhOiB1bmtub3duKTogZGF0YSBpcyBGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzID0+IHtcbiAgaWYgKGRhdGEgPT0gbnVsbCB8fCB0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoJ2lzQXBpRm9ybVJlc3BvbnNlQXR0cmlidXRlczogZGF0YSBpcyBudWxsIG9yIG5vdCBhbiBvYmplY3QnLCB1bmRlZmluZWQsIHtcbiAgICAgIGRhdGEsXG4gICAgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCdmb3JtX2NhdGVnb3J5JyBpbiBkYXRhICYmIHR5cGVvZiBkYXRhLmZvcm1fY2F0ZWdvcnkgIT09ICdvYmplY3QnKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKCdpc0FwaUZvcm1SZXNwb25zZUF0dHJpYnV0ZXM6IGZvcm1fY2F0ZWdvcnkgaXMgbm90IGFuIG9iamVjdCcsIHVuZGVmaW5lZCwge1xuICAgICAgZGF0YSxcbiAgICB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoJ2Zvcm1fY2F0ZWdvcnknIGluIGRhdGEgJiYgdHlwZW9mIGRhdGEuZm9ybV9jYXRlZ29yeSA9PT0gJ29iamVjdCcpIHtcbiAgICBpZiAoXG4gICAgICAhaGFzUHJvcGVydHlPZlR5cGUoZGF0YS5mb3JtX2NhdGVnb3J5LCAnZm9ybV90eXBlJywgJ3N0cmluZycpIHx8XG4gICAgICAhT2JqZWN0LnZhbHVlcyhGb3JtVHlwZSkuaW5jbHVkZXMoZGF0YS5mb3JtX2NhdGVnb3J5LmZvcm1fdHlwZSBhcyBGb3JtVHlwZSlcbiAgICApIHtcbiAgICAgIExvZ2dlci5sb2dFcnJvcihcbiAgICAgICAgJ2lzQXBpRm9ybVJlc3BvbnNlQXR0cmlidXRlczogZm9ybV90eXBlIGlzIG1pc3Npbmcgb3Igbm90IGEgdmFsaWQgZm9ybSB0eXBlJyxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB7XG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFoYXNQcm9wZXJ0eU9mVHlwZShkYXRhLCAnc2NoZW1hJywgJ29iamVjdCcpKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKCdpc0FwaUZvcm1SZXNwb25zZUF0dHJpYnV0ZXM6IHNjaGVtYSBpcyBtaXNzaW5nIG9yIG5vdCBhbiBvYmplY3QnLCB1bmRlZmluZWQsIHtcbiAgICAgIGRhdGEsXG4gICAgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLy8gVE9ETzogYWxzbyB3YW5uYSB2YWxpZGF0ZSB0aGUgZmllbGRzIG9mIGRhdGEuc2NoZW1hLnByb3BlcnRpZXMgYnV0IG1pZ2h0IHdhbm5hIGNoYW5nZSB0aGUgc2NoZW1hXG4gIC8vIHRvIG5vdCBoYXZlIHRoZSBwcm9wZXJ0eSBuYW1lIGFzIGEga2V5IGluIHRoZSBvYmplY3RcbiAgaWYgKCFoYXNQcm9wZXJ0eU9mVHlwZShkYXRhLnNjaGVtYSwgJ3Byb3BlcnRpZXMnLCAnb2JqZWN0JykpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoXG4gICAgICAnaXNBcGlGb3JtUmVzcG9uc2VBdHRyaWJ1dGVzOiBzY2hlbWEucHJvcGVydGllcyBpcyBtaXNzaW5nIG9yIG5vdCBhbiBvYmplY3QnLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAge1xuICAgICAgICBkYXRhLFxuICAgICAgfSxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghaGFzUHJvcGVydHlPZlR5cGUoZGF0YS5zY2hlbWEsICdyZXF1aXJlZCcsICdhcnJheScpKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKFxuICAgICAgJ2lzQXBpRm9ybVJlc3BvbnNlQXR0cmlidXRlczogc2NoZW1hLnJlcXVpcmVkIGlzIG1pc3Npbmcgb3Igbm90IGFuIGFycmF5JyxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHsgZGF0YSB9LFxuICAgICk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKFxuICAgICFkYXRhLnNjaGVtYS5yZXF1aXJlZC5ldmVyeShcbiAgICAgIChrZXk6IHVua25vd24pID0+IHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnICYmIGtleSBpbiBkYXRhLnNjaGVtYS5wcm9wZXJ0aWVzLFxuICAgIClcbiAgKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKFxuICAgICAgJ2lzQXBpRm9ybVJlc3BvbnNlQXR0cmlidXRlczogc2NoZW1hLnJlcXVpcmVkIGNvbnRhaW5zIGludmFsaWQgcHJvcGVydHkga2V5cycsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB7XG4gICAgICAgIGRhdGEsXG4gICAgICB9LFxuICAgICk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuIiwiaW1wb3J0IHsgRm9ybVN1Ym1pdHRlZEF0dHJpYnV0ZXMsIEZvcm1UeXBlIH0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmltcG9ydCBMb2dnZXIgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyJztcbmltcG9ydCB7IGhhc1Byb3BlcnR5T2ZUeXBlIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgaXNBcGlGb3JtU3VibWl0dGVkUmVzcG9uc2VBdHRyaWJ1dGVzID0gKFxuICBkYXRhOiB1bmtub3duLFxuKTogZGF0YSBpcyBGb3JtU3VibWl0dGVkQXR0cmlidXRlcyA9PiB7XG4gIGlmIChkYXRhID09IG51bGwgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKCdpc0FwaUZvcm1TdWJtaXR0ZWRSZXNwb25zZUF0dHJpYnV0ZXMnLCAnZGF0YSBpcyBudWxsIG9yIG5vdCBhbiBvYmplY3QnLCBkYXRhKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWhhc1Byb3BlcnR5T2ZUeXBlKGRhdGEsICdmaWxsZWRfc2NoZW1hJywgJ29iamVjdCcpKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKCdpc0FwaUZvcm1TdWJtaXR0ZWRSZXNwb25zZUF0dHJpYnV0ZXMnLCAnZmlsbGVkX3NjaGVtYSBpcyBub3QgYW4gb2JqZWN0JywgZGF0YSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFoYXNQcm9wZXJ0eU9mVHlwZShkYXRhLCAnZm9ybV9yZXNwb25zZV9pZCcsICdzdHJpbmcnKSkge1xuICAgIExvZ2dlci5sb2dFcnJvcihcbiAgICAgICdpc0FwaUZvcm1TdWJtaXR0ZWRSZXNwb25zZUF0dHJpYnV0ZXMnLFxuICAgICAgJ2Zvcm1fcmVzcG9uc2VfaWQgaXMgbm90IGEgc3RyaW5nJyxcbiAgICAgIGRhdGEsXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoISgnZm9ybV90eXBlJyBpbiBkYXRhKSB8fCAhT2JqZWN0LnZhbHVlcyhGb3JtVHlwZSkuaW5jbHVkZXMoZGF0YS5mb3JtX3R5cGUgYXMgRm9ybVR5cGUpKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKFxuICAgICAgJ2lzQXBpRm9ybVN1Ym1pdHRlZFJlc3BvbnNlQXR0cmlidXRlcycsXG4gICAgICAnZm9ybV90eXBlIGlzIG5vdCBhIHZhbGlkIGZvcm0gdHlwZSBlbnVtJyxcbiAgICAgIGRhdGEsXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG4iLCJpbXBvcnQgdHlwZSB7IEFwaU9yZGVySXRlbUluZm8sIEFwaU9yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzIH0gZnJvbSAnQGVudml2ZS1haS90eXBlcyc7XG5pbXBvcnQgTG9nZ2VyIGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9sb2dnaW5nL2xvZ2dlcic7XG5pbXBvcnQgeyBoYXNQcm9wZXJ0eU9mVHlwZSB9IGZyb20gJy4uL3V0aWxzJztcblxuY29uc3QgaXNBcGlPcmRlckl0ZW1JbmZvID0gKGRhdGE6IHVua25vd24pOiBkYXRhIGlzIEFwaU9yZGVySXRlbUluZm8gPT4ge1xuICBpZiAoZGF0YSA9PSBudWxsIHx8IHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0Jykge1xuICAgIExvZ2dlci5sb2dFcnJvcignT3JkZXJJdGVtSW5mbyBtdXN0IGJlIGFuIG9iamVjdCcsIHVuZGVmaW5lZCwgeyBkYXRhIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghaGFzUHJvcGVydHlPZlR5cGUoZGF0YSwgJ29yZGVyX2l0ZW1faWQnLCAnc3RyaW5nJykpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoJ09yZGVySXRlbUluZm8gbXVzdCBoYXZlIGFuIG9yZGVyX2l0ZW1faWQgcHJvcGVydHknLCB1bmRlZmluZWQsIHsgZGF0YSB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWhhc1Byb3BlcnR5T2ZUeXBlKGRhdGEsICdpdGVtX3RpdGxlJywgJ3N0cmluZycpKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKCdPcmRlckl0ZW1JbmZvIG11c3QgaGF2ZSBhbiBpdGVtX3RpdGxlIHByb3BlcnR5JywgdW5kZWZpbmVkLCB7IGRhdGEgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFoYXNQcm9wZXJ0eU9mVHlwZShkYXRhLCAnaXRlbV9wcmljZScsICdudW1iZXInKSkge1xuICAgIExvZ2dlci5sb2dFcnJvcignT3JkZXJJdGVtSW5mbyBtdXN0IGhhdmUgYW4gaXRlbV9wcmljZSBwcm9wZXJ0eScsIHVuZGVmaW5lZCwgeyBkYXRhIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghaGFzUHJvcGVydHlPZlR5cGUoZGF0YSwgJ2l0ZW1fcXVhbnRpdHknLCAnbnVtYmVyJykpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoJ09yZGVySXRlbUluZm8gbXVzdCBoYXZlIGFuIGl0ZW1fcXVhbnRpdHkgcHJvcGVydHknLCB1bmRlZmluZWQsIHsgZGF0YSB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWhhc1Byb3BlcnR5T2ZUeXBlKGRhdGEsICdpbWFnZScsICdzdHJpbmcnLCB0cnVlKSkge1xuICAgIExvZ2dlci5sb2dFcnJvcignT3JkZXJJdGVtSW5mby5pbWFnZSBtdXN0IGJlIGEgc3RyaW5nIG9yIG51bGwnLCB1bmRlZmluZWQsIHsgZGF0YSB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWhhc1Byb3BlcnR5T2ZUeXBlKGRhdGEsICdmdWxmaWxsbWVudF9kaXNwbGF5X3N0YXR1cycsICdzdHJpbmcnLCB0cnVlKSkge1xuICAgIExvZ2dlci5sb2dFcnJvcihcbiAgICAgICdPcmRlckl0ZW1JbmZvLmZ1bGZpbGxtZW50X2Rpc3BsYXlfc3RhdHVzIG11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbCcsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB7XG4gICAgICAgIGRhdGEsXG4gICAgICB9LFxuICAgICk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFoYXNQcm9wZXJ0eU9mVHlwZShkYXRhLCAndHJhY2tpbmdfdXJsJywgJ3N0cmluZycsIHRydWUpKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKCdPcmRlckl0ZW1JbmZvLnRyYWNraW5nX3VybCBtdXN0IGJlIGEgc3RyaW5nIG9yIG51bGwnLCB1bmRlZmluZWQsIHsgZGF0YSB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWhhc1Byb3BlcnR5T2ZUeXBlKGRhdGEsICdkZWxpdmVyZWRfYXQnLCAnc3RyaW5nJywgdHJ1ZSkpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoJ09yZGVySXRlbUluZm8uZGVsaXZlcmVkX2F0IG11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbCcsIHVuZGVmaW5lZCwgeyBkYXRhIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghaGFzUHJvcGVydHlPZlR5cGUoZGF0YSwgJ2VzdGltYXRlZF9kZWxpdmVyeV9hdCcsICdzdHJpbmcnLCB0cnVlKSkge1xuICAgIExvZ2dlci5sb2dFcnJvcignT3JkZXJJdGVtSW5mby5lc3RpbWF0ZWRfZGVsaXZlcnlfYXQgbXVzdCBiZSBhIHN0cmluZyBvciBudWxsJywgdW5kZWZpbmVkLCB7XG4gICAgICBkYXRhLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghaGFzUHJvcGVydHlPZlR5cGUoZGF0YSwgJ2luX3RyYW5zaXRfYXQnLCAnc3RyaW5nJywgdHJ1ZSkpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoJ09yZGVySXRlbUluZm8uaW5fdHJhbnNpdF9hdCBtdXN0IGJlIGEgc3RyaW5nIG9yIG51bGwnLCB1bmRlZmluZWQsIHsgZGF0YSB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc0FwaU9yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzID0gKGRhdGE6IHVua25vd24pOiBkYXRhIGlzIEFwaU9yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzID0+IHtcbiAgaWYgKGRhdGEgPT0gbnVsbCB8fCB0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoJ09yZGVyIHJlc3BvbnNlIGF0dHJpYnV0ZXMgbXVzdCBiZSBhbiBvYmplY3QnLCB1bmRlZmluZWQsIHsgZGF0YSB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWhhc1Byb3BlcnR5T2ZUeXBlKGRhdGEsICdjcmVhdGVkX2F0JywgJ3N0cmluZycpKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKFxuICAgICAgJ09yZGVyIHJlc3BvbnNlIGF0dHJpYnV0ZXMgbXVzdCBoYXZlIGEgY3JlYXRlZF9hdCBwcm9wZXJ0eSBhbmQgaGF2ZSB0eXBlIHN0cmluZycsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB7XG4gICAgICAgIGRhdGEsXG4gICAgICB9LFxuICAgICk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCFoYXNQcm9wZXJ0eU9mVHlwZShkYXRhLCAnbGF0ZXN0X2V2ZW50X2RhdGUnLCAnc3RyaW5nJykpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoXG4gICAgICAnT3JkZXIgcmVzcG9uc2UgYXR0cmlidXRlcyBtdXN0IGhhdmUgYSBsYXRlc3RfZXZlbnRfZGF0ZSBwcm9wZXJ0eSBhbmQgaGF2ZSB0eXBlIHN0cmluZycsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB7XG4gICAgICAgIGRhdGEsXG4gICAgICB9LFxuICAgICk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKFxuICAgICFoYXNQcm9wZXJ0eU9mVHlwZShkYXRhLCAnbGluZV9pdGVtcycsICdhcnJheScpIHx8XG4gICAgIWRhdGEubGluZV9pdGVtcy5ldmVyeSgoaXRlbTogdW5rbm93bikgPT4gaXNBcGlPcmRlckl0ZW1JbmZvKGl0ZW0pKVxuICApIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoXG4gICAgICAnT3JkZXIgcmVzcG9uc2UgYXR0cmlidXRlcyBtdXN0IGhhdmUgYSBsaW5lX2l0ZW1zIHByb3BlcnR5IHdpdGggYXQgbGVhc3Qgb25lIG9yZGVyIGl0ZW0nLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAge1xuICAgICAgICBkYXRhLFxuICAgICAgfSxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghaGFzUHJvcGVydHlPZlR5cGUoZGF0YSwgJ29yZGVyX2lkJywgJ3N0cmluZycpKSB7XG4gICAgTG9nZ2VyLmxvZ0Vycm9yKFxuICAgICAgJ09yZGVyIHJlc3BvbnNlIGF0dHJpYnV0ZXMgbXVzdCBoYXZlIGFuIG9yZGVyX2lkIHByb3BlcnR5IGFuZCBoYXZlIHR5cGUgc3RyaW5nJyxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHtcbiAgICAgICAgZGF0YSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoIWhhc1Byb3BlcnR5T2ZUeXBlKGRhdGEsICdvcmRlcl9udW1iZXInLCAnc3RyaW5nJykpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoXG4gICAgICAnT3JkZXIgcmVzcG9uc2UgYXR0cmlidXRlcyBtdXN0IGhhdmUgYW4gb3JkZXJfbnVtYmVyIHByb3BlcnR5IGFuZCBoYXZlIHR5cGUgc3RyaW5nJyxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHtcbiAgICAgICAgZGF0YSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG4iLCJpbXBvcnQgdHlwZSB7XG4gIEFwaU9yZ0FuYWx5dGljc0NvbmZpZ0FtcGxpdHVkZSxcbiAgQXBpT3JnQW5hbHl0aWNzQ29uZmlnQ3VzdG9tZXJTZXJ2aWNlLFxuICBBcGlPcmdBbmFseXRpY3NDb25maWdHb29nbGVBbmFseXRpY3MsXG4gIEFwaU9yZ0FuYWx5dGljc0NvbmZpZyxcbiAgQXBpT3JnYW5pemF0aW9uQ29uZmlnLFxufSBmcm9tICdAZW52aXZlLWFpL3R5cGVzJztcbmltcG9ydCBMb2dnZXIgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyJztcblxuY29uc3QgaXNBcGlPcmdBbmFseXRpY3NDb25maWdBbXBsaXR1ZGUgPSAoXG4gIGRhdGE6IHVua25vd24sXG4pOiBkYXRhIGlzIEFwaU9yZ0FuYWx5dGljc0NvbmZpZ0FtcGxpdHVkZSA9PiB7XG4gIGlmIChkYXRhID09IG51bGwgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc0FwaU9yZ0FuYWx5dGljc0NvbmZpZ0FtcGxpdHVkZTogZGF0YSBpcyBub3QgYW4gb2JqZWN0JywgZGF0YSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCEoJ3Nlc3Npb25fcmVwbGF5X2VuYWJsZWQnIGluIGRhdGEpIHx8IHR5cGVvZiBkYXRhLnNlc3Npb25fcmVwbGF5X2VuYWJsZWQgIT09ICdib29sZWFuJykge1xuICAgIExvZ2dlci5sb2dEZWJ1ZyhcbiAgICAgICdbc3BpZmZ5LWFpXSBpc0FwaU9yZ0FuYWx5dGljc0NvbmZpZ0FtcGxpdHVkZTogc2Vzc2lvbl9yZXBsYXlfZW5hYmxlZCBpcyBub3QgYSBib29sZWFuJyxcbiAgICAgIGRhdGEsXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoXG4gICAgISgnc2Vzc2lvbl9yZXBsYXlfc2FtcGxlX3JhdGUnIGluIGRhdGEpIHx8XG4gICAgdHlwZW9mIGRhdGEuc2Vzc2lvbl9yZXBsYXlfc2FtcGxlX3JhdGUgIT09ICdudW1iZXInXG4gICkge1xuICAgIExvZ2dlci5sb2dEZWJ1ZyhcbiAgICAgICdbc3BpZmZ5LWFpXSBpc0FwaU9yZ0FuYWx5dGljc0NvbmZpZ0FtcGxpdHVkZTogc2Vzc2lvbl9yZXBsYXlfc2FtcGxlX3JhdGUgaXMgbm90IGEgbnVtYmVyJyxcbiAgICAgIGRhdGEsXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoISgndHJhY2tpbmdfZW5hYmxlZCcgaW4gZGF0YSkgfHwgdHlwZW9mIGRhdGEudHJhY2tpbmdfZW5hYmxlZCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgJ1tzcGlmZnktYWldIGlzQXBpT3JnQW5hbHl0aWNzQ29uZmlnQW1wbGl0dWRlOiB0cmFja2luZ19lbmFibGVkIGlzIG5vdCBhIGJvb2xlYW4nLFxuICAgICAgZGF0YSxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuY29uc3QgaXNBcGlPcmdBbmFseXRpY3NDb25maWdDdXN0b21lclNlcnZpY2UgPSAoXG4gIGRhdGE6IHVua25vd24sXG4pOiBkYXRhIGlzIEFwaU9yZ0FuYWx5dGljc0NvbmZpZ0N1c3RvbWVyU2VydmljZSA9PiB7XG4gIGlmIChkYXRhID09IG51bGwgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgJ1tzcGlmZnktYWldIGlzQXBpT3JnQW5hbHl0aWNzQ29uZmlnQ3VzdG9tZXJTZXJ2aWNlOiBkYXRhIGlzIG5vdCBhbiBvYmplY3QnLFxuICAgICAgZGF0YSxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghKCdwcm92aWRlcicgaW4gZGF0YSkgfHwgdHlwZW9mIGRhdGEucHJvdmlkZXIgIT09ICdzdHJpbmcnKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgJ1tzcGlmZnktYWldIGlzQXBpT3JnQW5hbHl0aWNzQ29uZmlnQ3VzdG9tZXJTZXJ2aWNlOiBwcm92aWRlciBpcyBub3QgYSBzdHJpbmcnLFxuICAgICAgZGF0YSxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuY29uc3QgaXNBcGlPcmdBbmFseXRpY3NDb25maWdHb29nbGVBbmFseXRpY3MgPSAoXG4gIGRhdGE6IHVua25vd24sXG4pOiBkYXRhIGlzIEFwaU9yZ0FuYWx5dGljc0NvbmZpZ0dvb2dsZUFuYWx5dGljcyA9PiB7XG4gIGlmIChkYXRhID09IG51bGwgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgJ1tzcGlmZnktYWldIGlzQXBpT3JnQW5hbHl0aWNzQ29uZmlnR29vZ2xlQW5hbHl0aWNzOiBkYXRhIGlzIG5vdCBhbiBvYmplY3QnLFxuICAgICAgZGF0YSxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghKCdtZWFzdXJlbWVudF9pZCcgaW4gZGF0YSkgfHwgdHlwZW9mIGRhdGEubWVhc3VyZW1lbnRfaWQgIT09ICdzdHJpbmcnKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgJ1tzcGlmZnktYWldIGlzQXBpT3JnQW5hbHl0aWNzQ29uZmlnR29vZ2xlQW5hbHl0aWNzOiBtZWFzdXJlbWVudF9pZCBpcyBub3QgYSBzdHJpbmcnLFxuICAgICAgZGF0YSxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGRhdGFcbiAqIEByZXR1cm5zXG4gKi9cbmNvbnN0IGlzQXBpT3JnQW5hbHl0aWNzQ29uZmlnID0gKGRhdGE6IHVua25vd24pOiBkYXRhIGlzIEFwaU9yZ0FuYWx5dGljc0NvbmZpZyA9PiB7XG4gIGlmIChkYXRhID09IG51bGwgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc09yZ0FuYWx5dGljc0NvbmZpZzogZGF0YSBpcyBub3QgYW4gb2JqZWN0JywgZGF0YSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCdhbXBsaXR1ZGUnIGluIGRhdGEgJiYgIWlzQXBpT3JnQW5hbHl0aWNzQ29uZmlnQW1wbGl0dWRlKGRhdGEuYW1wbGl0dWRlKSkge1xuICAgIExvZ2dlci5sb2dEZWJ1ZygnW3NwaWZmeS1haV0gaXNPcmdBbmFseXRpY3NDb25maWc6IGFtcGxpdHVkZSBpcyBub3QgYW4gb2JqZWN0JywgZGF0YSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKFxuICAgICdjdXN0b21lcl9zZXJ2aWNlJyBpbiBkYXRhICYmXG4gICAgIWlzQXBpT3JnQW5hbHl0aWNzQ29uZmlnQ3VzdG9tZXJTZXJ2aWNlKGRhdGEuY3VzdG9tZXJfc2VydmljZSlcbiAgKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc09yZ0FuYWx5dGljc0NvbmZpZzogY3VzdG9tZXJfc2VydmljZSBpcyBub3QgYW4gb2JqZWN0JywgZGF0YSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKFxuICAgICdnb29nbGVfYW5hbHl0aWNzJyBpbiBkYXRhICYmXG4gICAgIWlzQXBpT3JnQW5hbHl0aWNzQ29uZmlnR29vZ2xlQW5hbHl0aWNzKGRhdGEuZ29vZ2xlX2FuYWx5dGljcylcbiAgKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc09yZ0FuYWx5dGljc0NvbmZpZzogZ29vZ2xlX2FuYWx5dGljcyBpcyBub3QgYW4gb2JqZWN0JywgZGF0YSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG4vKipcbiAqXG4gKiBAcGFyYW0gZGF0YVxuICogQHJldHVybnNcbiAqL1xuZXhwb3J0IGNvbnN0IGlzQXBpT3JnYW5pemF0aW9uQ29uZmlnID0gKGRhdGE6IHVua25vd24pOiBkYXRhIGlzIEFwaU9yZ2FuaXphdGlvbkNvbmZpZyA9PiB7XG4gIGlmIChkYXRhID09IG51bGwgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc09yZ0NvbmZpZzogZGF0YSBpcyBub3QgYW4gb2JqZWN0JywgZGF0YSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCEoJ2NyZWF0ZWRfYXQnIGluIGRhdGEpKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc09yZ0NvbmZpZzogY3JlYXRlZF9hdCBpcyBub3QgZGVmaW5lZCcsIGRhdGEpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghKCduYW1lc3BhY2UnIGluIGRhdGEpIHx8IHR5cGVvZiBkYXRhLm5hbWVzcGFjZSAhPT0gJ3N0cmluZycpIHtcbiAgICBMb2dnZXIubG9nRGVidWcoJ1tzcGlmZnktYWldIGlzT3JnQ29uZmlnOiBuYW1lc3BhY2UgaXMgbm90IGEgc3RyaW5nJywgZGF0YSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCEoJ2lzX2xhdGVzdCcgaW4gZGF0YSkgfHwgdHlwZW9mIGRhdGEuaXNfbGF0ZXN0ICE9PSAnYm9vbGVhbicpIHtcbiAgICBMb2dnZXIubG9nRGVidWcoJ1tzcGlmZnktYWldIGlzT3JnQ29uZmlnOiBpc19sYXRlc3QgaXMgbm90IGEgYm9vbGVhbicsIGRhdGEpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghKCd2ZXJzaW9uJyBpbiBkYXRhKSB8fCB0eXBlb2YgZGF0YS52ZXJzaW9uICE9PSAnc3RyaW5nJykge1xuICAgIExvZ2dlci5sb2dEZWJ1ZygnW3NwaWZmeS1haV0gaXNPcmdDb25maWc6IHZlcnNpb24gaXMgbm90IGEgc3RyaW5nJywgZGF0YSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCEoJ3VwZGF0ZWRfYXQnIGluIGRhdGEpKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc09yZ0NvbmZpZzogdXBkYXRlZF9hdCBpcyBub3QgZGVmaW5lZCcsIGRhdGEpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChcbiAgICAhKCdjb25maWcnIGluIGRhdGEpIHx8XG4gICAgdHlwZW9mIGRhdGEuY29uZmlnICE9PSAnb2JqZWN0JyB8fFxuICAgICFpc0FwaU9yZ0FuYWx5dGljc0NvbmZpZyhkYXRhLmNvbmZpZylcbiAgKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc09yZ0NvbmZpZzogY29uZmlnIGlzIG5vdCBhbiBvYmplY3QnLCBkYXRhKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoJ29yZ2FuaXphdGlvbl9pZCcgaW4gZGF0YSAmJiB0eXBlb2YgZGF0YS5vcmdhbml6YXRpb25faWQgIT09ICdzdHJpbmcnKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc09yZ0NvbmZpZzogb3JnYW5pemF0aW9uX2lkIGlzIG5vdCBhIHN0cmluZycsIGRhdGEpO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICgnaWQnIGluIGRhdGEgJiYgdHlwZW9mIGRhdGEuaWQgIT09ICdzdHJpbmcnKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc09yZ0NvbmZpZzogaWQgaXMgbm90IGEgc3RyaW5nJywgZGF0YSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuIiwiaW1wb3J0IHtcbiAgU3RhdHNpZ0V4cGVyaW1lbnQgYXMgQXBpT3JnQ29uZmlnRXhwZXJpbWVudCxcbiAgU3RhdHNpZ0ZlYXR1cmVHYXRlIGFzIEFwaU9yZ0NvbmZpZ0ZlYXR1cmVHYXRlLFxuICBPcmdhbml6YXRpb25TZXR0aW5ncyBhcyBBcGlPcmdDb25maWdPcmdhbml6YXRpb25TZXR0aW5ncyxcbiAgT3JnYW5pemF0aW9uIGFzIEFwaU9yZ2FuaXphdGlvbixcbiAgT3JnYW5pemF0aW9uU3RhdHVzRW51bSxcbn0gZnJvbSAnQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50JztcbmltcG9ydCB7IEFwaU9yZ0NvbmZpZ1Jlc3VsdHMgfSBmcm9tICdAZW52aXZlLWFpL3R5cGVzJztcbmltcG9ydCB7IGlzQXBpT3JnYW5pemF0aW9uQ29uZmlnIH0gZnJvbSAnLi9pc0FwaU9yZ2FuaXphdGlvbkNvbmZpZyc7XG5pbXBvcnQgTG9nZ2VyIGZyb20gJ3NyYy9hcHBsaWNhdGlvbi9sb2dnaW5nL2xvZ2dlcic7XG5cbmNvbnN0IGlzQXBpT3JnQ29uZmlnRXhwZXJpbWVudCA9IChkYXRhOiB1bmtub3duKTogZGF0YSBpcyBBcGlPcmdDb25maWdFeHBlcmltZW50ID0+IHtcbiAgaWYgKGRhdGEgPT0gbnVsbCB8fCB0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICBMb2dnZXIubG9nRGVidWcoJ1tzcGlmZnktYWldIGlzQXBpT3JnQ29uZmlnRXhwZXJpbWVudDogZGF0YSBpcyBub3QgYW4gb2JqZWN0JywgdW5kZWZpbmVkLCB7XG4gICAgICBkYXRhLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICgnZ3JvdXAnIGluIGRhdGEgJiYgdHlwZW9mIGRhdGEuZ3JvdXAgIT09ICdzdHJpbmcnICYmIGRhdGEuZ3JvdXAgIT09IHVuZGVmaW5lZCkge1xuICAgIExvZ2dlci5sb2dEZWJ1ZyhcbiAgICAgICdbc3BpZmZ5LWFpXSBpc0FwaU9yZ0NvbmZpZ0V4cGVyaW1lbnQ6IGdyb3VwIGlzIG5vdCBhIHN0cmluZyBvciB1bmRlZmluZWQnLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAge1xuICAgICAgICBkYXRhLFxuICAgICAgfSxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChcbiAgICAnZ3JvdXBfbmFtZScgaW4gZGF0YSAmJlxuICAgIHR5cGVvZiBkYXRhLmdyb3VwX25hbWUgIT09ICdzdHJpbmcnICYmXG4gICAgZGF0YS5ncm91cF9uYW1lICE9PSB1bmRlZmluZWRcbiAgKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc0FwaU9yZ0NvbmZpZ0V4cGVyaW1lbnQ6IGdyb3VwX25hbWUgaXMgbm90IGEgc3RyaW5nJywgdW5kZWZpbmVkLCB7XG4gICAgICBkYXRhLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICgnbmFtZScgaW4gZGF0YSAmJiB0eXBlb2YgZGF0YS5uYW1lICE9PSAnc3RyaW5nJyAmJiBkYXRhLm5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgIExvZ2dlci5sb2dEZWJ1ZygnW3NwaWZmeS1haV0gaXNBcGlPcmdDb25maWdFeHBlcmltZW50OiBuYW1lIGlzIG5vdCBhIHN0cmluZycsIHVuZGVmaW5lZCwge1xuICAgICAgZGF0YSxcbiAgICB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoJ3J1bGVfaWQnIGluIGRhdGEgJiYgdHlwZW9mIGRhdGEucnVsZV9pZCAhPT0gJ3N0cmluZycgJiYgZGF0YS5ydWxlX2lkICE9PSB1bmRlZmluZWQpIHtcbiAgICBMb2dnZXIubG9nRGVidWcoJ1tzcGlmZnktYWldIGlzQXBpT3JnQ29uZmlnRXhwZXJpbWVudDogcnVsZV9pZCBpcyBub3QgYSBzdHJpbmcnLCB1bmRlZmluZWQsIHtcbiAgICAgIGRhdGEsXG4gICAgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCd2YWx1ZScgaW4gZGF0YSAmJiB0eXBlb2YgZGF0YS52YWx1ZSAhPT0gJ29iamVjdCcgJiYgZGF0YS52YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc0FwaU9yZ0NvbmZpZ0V4cGVyaW1lbnQ6IHZhbHVlIGlzIG5vdCBhbiBvYmplY3QnLCB1bmRlZmluZWQsIHtcbiAgICAgIGRhdGEsXG4gICAgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5jb25zdCBpc0FwaU9yZ0NvbmZpZ0ZlYXR1cmVHYXRlID0gKGRhdGE6IHVua25vd24pOiBkYXRhIGlzIEFwaU9yZ0NvbmZpZ0ZlYXR1cmVHYXRlID0+IHtcbiAgaWYgKGRhdGEgPT0gbnVsbCB8fCB0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICBMb2dnZXIubG9nRGVidWcoJ1tzcGlmZnktYWldIGlzQXBpT3JnQ29uZmlnRmVhdHVyZUdhdGU6IGRhdGEgaXMgbm90IGFuIG9iamVjdCcsIHVuZGVmaW5lZCwge1xuICAgICAgZGF0YSxcbiAgICB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoJ25hbWUnIGluIGRhdGEgJiYgdHlwZW9mIGRhdGEubmFtZSAhPT0gJ3N0cmluZycgJiYgZGF0YS5uYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICBMb2dnZXIubG9nRGVidWcoJ1tzcGlmZnktYWldIGlzQXBpT3JnQ29uZmlnRmVhdHVyZUdhdGU6IG5hbWUgaXMgbm90IGEgc3RyaW5nJywgdW5kZWZpbmVkLCB7XG4gICAgICBkYXRhLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICgncnVsZV9pZCcgaW4gZGF0YSAmJiB0eXBlb2YgZGF0YS5ydWxlX2lkICE9PSAnc3RyaW5nJyAmJiBkYXRhLnJ1bGVfaWQgIT09IHVuZGVmaW5lZCkge1xuICAgIExvZ2dlci5sb2dEZWJ1ZygnW3NwaWZmeS1haV0gaXNBcGlPcmdDb25maWdGZWF0dXJlR2F0ZTogcnVsZV9pZCBpcyBub3QgYSBzdHJpbmcnLCB1bmRlZmluZWQsIHtcbiAgICAgIGRhdGEsXG4gICAgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCd2YWx1ZScgaW4gZGF0YSAmJiB0eXBlb2YgZGF0YS52YWx1ZSAhPT0gJ2Jvb2xlYW4nICYmIGRhdGEudmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgIExvZ2dlci5sb2dEZWJ1ZygnW3NwaWZmeS1haV0gaXNBcGlPcmdDb25maWdGZWF0dXJlR2F0ZTogdmFsdWUgaXMgbm90IGEgYm9vbGVhbicsIHVuZGVmaW5lZCwge1xuICAgICAgZGF0YSxcbiAgICB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmNvbnN0IGlzQXBpT3JnYW5pemF0aW9uID0gKGRhdGE6IHVua25vd24pOiBkYXRhIGlzIEFwaU9yZ2FuaXphdGlvbiA9PiB7XG4gIGlmIChkYXRhID09IG51bGwgfHwgdHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc0FwaU9yZ2FuaXphdGlvbjogZGF0YSBpcyBub3QgYW4gb2JqZWN0JywgdW5kZWZpbmVkLCB7XG4gICAgICBkYXRhLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghKCdpZCcgaW4gZGF0YSkgfHwgdHlwZW9mIGRhdGEuaWQgIT09ICdzdHJpbmcnKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc0FwaU9yZ2FuaXphdGlvbjogaWQgaXMgbm90IGEgc3RyaW5nJywgdW5kZWZpbmVkLCB7XG4gICAgICBkYXRhLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghKCdkaXNwbGF5X25hbWUnIGluIGRhdGEpIHx8IHR5cGVvZiBkYXRhLmRpc3BsYXlfbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICBMb2dnZXIubG9nRGVidWcoJ1tzcGlmZnktYWldIGlzQXBpT3JnYW5pemF0aW9uOiBkaXNwbGF5X25hbWUgaXMgbm90IGEgc3RyaW5nJywgdW5kZWZpbmVkLCB7XG4gICAgICBkYXRhLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghKCdkb21haW4nIGluIGRhdGEpIHx8IHR5cGVvZiBkYXRhLmRvbWFpbiAhPT0gJ3N0cmluZycpIHtcbiAgICBMb2dnZXIubG9nRGVidWcoJ1tzcGlmZnktYWldIGlzQXBpT3JnYW5pemF0aW9uOiBkb21haW4gaXMgbm90IGEgc3RyaW5nJywgdW5kZWZpbmVkLCB7XG4gICAgICBkYXRhLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghKCdzaG9ydF9uYW1lJyBpbiBkYXRhKSB8fCB0eXBlb2YgZGF0YS5zaG9ydF9uYW1lICE9PSAnc3RyaW5nJykge1xuICAgIExvZ2dlci5sb2dEZWJ1ZygnW3NwaWZmeS1haV0gaXNBcGlPcmdhbml6YXRpb246IHNob3J0X25hbWUgaXMgbm90IGEgc3RyaW5nJywgdW5kZWZpbmVkLCB7XG4gICAgICBkYXRhLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChcbiAgICAhKCdzdGF0dXMnIGluIGRhdGEpIHx8XG4gICAgIU9iamVjdC52YWx1ZXMoT3JnYW5pemF0aW9uU3RhdHVzRW51bSkuaW5jbHVkZXMoZGF0YS5zdGF0dXMgYXMgT3JnYW5pemF0aW9uU3RhdHVzRW51bSlcbiAgKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgJ1tzcGlmZnktYWldIGlzQXBpT3JnYW5pemF0aW9uOiBzdGF0dXMgaXMgbm90IGEgdmFsaWQgT3JnYW5pemF0aW9uU3RhdHVzRW51bSB2YWx1ZScsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB7XG4gICAgICAgIGRhdGEsXG4gICAgICB9LFxuICAgICk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKFxuICAgICdjcmVhdGVkX2F0JyBpbiBkYXRhICYmXG4gICAgIShkYXRhLmNyZWF0ZWRfYXQgaW5zdGFuY2VvZiBEYXRlKSAmJlxuICAgIHR5cGVvZiBkYXRhLmNyZWF0ZWRfYXQgIT09ICdzdHJpbmcnICYmXG4gICAgZGF0YS5jcmVhdGVkX2F0ICE9PSB1bmRlZmluZWRcbiAgKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc0FwaU9yZ2FuaXphdGlvbjogY3JlYXRlZF9hdCBpcyBub3QgYSBEYXRlJywgdW5kZWZpbmVkLCB7XG4gICAgICBkYXRhLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChcbiAgICAndXBkYXRlZF9hdCcgaW4gZGF0YSAmJlxuICAgICEoZGF0YS51cGRhdGVkX2F0IGluc3RhbmNlb2YgRGF0ZSkgJiZcbiAgICB0eXBlb2YgZGF0YS51cGRhdGVkX2F0ICE9PSAnc3RyaW5nJyAmJlxuICAgIGRhdGEudXBkYXRlZF9hdCAhPT0gdW5kZWZpbmVkXG4gICkge1xuICAgIExvZ2dlci5sb2dEZWJ1ZygnW3NwaWZmeS1haV0gaXNBcGlPcmdhbml6YXRpb246IHVwZGF0ZWRfYXQgaXMgbm90IGEgRGF0ZScsIHVuZGVmaW5lZCwge1xuICAgICAgZGF0YSxcbiAgICB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmNvbnN0IGlzQXBpT3JnQ29uZmlnT3JnYW5pemF0aW9uU2V0dGluZ3MgPSAoXG4gIGRhdGE6IHVua25vd24sXG4pOiBkYXRhIGlzIEFwaU9yZ0NvbmZpZ09yZ2FuaXphdGlvblNldHRpbmdzID0+IHtcbiAgaWYgKGRhdGEgPT0gbnVsbCB8fCB0eXBlb2YgZGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICBMb2dnZXIubG9nRGVidWcoXG4gICAgICAnW3NwaWZmeS1haV0gaXNBcGlPcmdDb25maWdPcmdhbml6YXRpb25TZXR0aW5nczogZGF0YSBpcyBub3QgYW4gb2JqZWN0JyxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHtcbiAgICAgICAgZGF0YSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoISgnb3JnJyBpbiBkYXRhKSB8fCAhaXNBcGlPcmdhbml6YXRpb24oZGF0YS5vcmcpKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgJ1tzcGlmZnktYWldIGlzQXBpT3JnQ29uZmlnT3JnYW5pemF0aW9uU2V0dGluZ3M6IG9yZyBpcyBub3QgYW4gb2JqZWN0JyxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHtcbiAgICAgICAgZGF0YSxcbiAgICAgIH0sXG4gICAgKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvLyBza2lwIHZhbGlkYXRpb24gZm9yICdzZXR0aW5ncycgZm9yIG5vd1xuXG4gIHJldHVybiB0cnVlO1xufTtcblxuLyoqXG4gKlxuICogQHBhcmFtIGRhdGFcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCBpc0FwaU9yZ0NvbmZpZ1Jlc3VsdHMgPSAoZGF0YTogdW5rbm93bik6IGRhdGEgaXMgUmVxdWlyZWQ8QXBpT3JnQ29uZmlnUmVzdWx0cz4gPT4ge1xuICBpZiAoZGF0YSA9PSBudWxsIHx8IHR5cGVvZiBkYXRhICE9PSAnb2JqZWN0Jykge1xuICAgIExvZ2dlci5sb2dEZWJ1ZygnW3NwaWZmeS1haV0gaXNBcGlPcmdDb25maWdSZXN1bHRzOiBkYXRhIGlzIG5vdCBhbiBvYmplY3QnLCB1bmRlZmluZWQsIHtcbiAgICAgIGRhdGEsXG4gICAgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKFxuICAgICEoJ2NvbmZpZ3MnIGluIGRhdGEpIHx8XG4gICAgIUFycmF5LmlzQXJyYXkoZGF0YS5jb25maWdzKSB8fFxuICAgICFkYXRhLmNvbmZpZ3MuZXZlcnkoKGNvbmZpZykgPT4gaXNBcGlPcmdhbml6YXRpb25Db25maWcoY29uZmlnKSlcbiAgKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKCdbc3BpZmZ5LWFpXSBpc0FwaU9yZ0NvbmZpZ1Jlc3VsdHM6IGNvbmZpZ3MgaXMgbm90IGFuIGFycmF5JywgdW5kZWZpbmVkLCB7XG4gICAgICBkYXRhLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChcbiAgICAnZXhwZXJpbWVudHMnIGluIGRhdGEgJiZcbiAgICBkYXRhLmV4cGVyaW1lbnRzICE9PSB1bmRlZmluZWQgJiZcbiAgICAoIUFycmF5LmlzQXJyYXkoZGF0YS5leHBlcmltZW50cykgfHxcbiAgICAgICFkYXRhLmV4cGVyaW1lbnRzLmV2ZXJ5KChleHApID0+IGlzQXBpT3JnQ29uZmlnRXhwZXJpbWVudChleHApKSlcbiAgKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgJ1tzcGlmZnktYWldIGlzQXBpT3JnQ29uZmlnUmVzdWx0czogZXhwZXJpbWVudHMgaXMgbm90IGFuIGFycmF5IG9yIGNvbnRhaW5zIGludmFsaWQgaXRlbXMnLFxuICAgICAgdW5kZWZpbmVkLFxuICAgICAge1xuICAgICAgICBkYXRhLFxuICAgICAgfSxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChcbiAgICAhKCdnYXRlcycgaW4gZGF0YSkgfHxcbiAgICAhQXJyYXkuaXNBcnJheShkYXRhLmdhdGVzKSB8fFxuICAgICFkYXRhLmdhdGVzLmV2ZXJ5KChnYXRlKSA9PiBpc0FwaU9yZ0NvbmZpZ0ZlYXR1cmVHYXRlKGdhdGUpKVxuICApIHtcbiAgICBMb2dnZXIubG9nRGVidWcoXG4gICAgICAnW3NwaWZmeS1haV0gaXNBcGlPcmdDb25maWdSZXN1bHRzOiBnYXRlcyBpcyBub3QgYW4gYXJyYXkgb3IgY29udGFpbnMgaW52YWxpZCBpdGVtcycsXG4gICAgICB1bmRlZmluZWQsXG4gICAgICB7XG4gICAgICAgIGRhdGEsXG4gICAgICB9LFxuICAgICk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKCEoJ29yZycgaW4gZGF0YSkgfHwgIWlzQXBpT3JnQ29uZmlnT3JnYW5pemF0aW9uU2V0dGluZ3MoZGF0YS5vcmcpKSB7XG4gICAgTG9nZ2VyLmxvZ0RlYnVnKFxuICAgICAgJ1tzcGlmZnktYWldIGlzQXBpT3JnQ29uZmlnUmVzdWx0czogb3JnIGlzIG5vdCBhbiBvYmplY3Qgb3IgaGFzIGludmFsaWQgZmllbGRzJyxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHsgZGF0YSB9LFxuICAgICk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG4iLCJpbXBvcnQgeyBBcGlQYWdlUmVzcG9uc2VBdHRyaWJ1dGVzIH0gZnJvbSAnQGVudml2ZS1haS90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBpc0FwaVBhZ2VSZXNwb25zZUF0dHJpYnV0ZXMgPSAob2JqOiB1bmtub3duKTogb2JqIGlzIEFwaVBhZ2VSZXNwb25zZUF0dHJpYnV0ZXMgPT4ge1xuICBpZiAob2JqID09IG51bGwgfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoJ3RpdGxlJyBpbiBvYmogJiYgb2JqLnRpdGxlICE9IG51bGwgJiYgdHlwZW9mIG9iai50aXRsZSAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoJ2Rlc2NyaXB0aW9uJyBpbiBvYmogJiYgdHlwZW9mIG9iai5kZXNjcmlwdGlvbiAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoJ3VybCcgaW4gb2JqICYmIHR5cGVvZiBvYmoudXJsICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcbiIsImltcG9ydCB7XG4gIFBMUEF0dHJpYnV0ZUNhdGVnb3J5LFxuICBQTFBBdHRyaWJ1dGVzLFxuICBQTFBJZEF0dHJpYnV0ZXMsXG59IGZyb20gXCJAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnRcIjtcblxuZXhwb3J0IGNvbnN0IGlzQXBpUExQSWRBdHRyaWJ1dGUgPSAoZGF0YTogdW5rbm93bik6IGRhdGEgaXMgUExQSWRBdHRyaWJ1dGVzID0+IHtcbiAgaWYgKGRhdGEgPT0gbnVsbCB8fCB0eXBlb2YgZGF0YSAhPT0gXCJvYmplY3RcIikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICghKFwiaWRcIiBpbiBkYXRhKSB8fCB0eXBlb2YgZGF0YS5pZCAhPT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzQXBpUExQRXZlbnRBdHRyaWJ1dGVzID0gKFxuICBkYXRhOiB1bmtub3duXG4pOiBkYXRhIGlzIFBMUEF0dHJpYnV0ZXMgPT4ge1xuICBpZiAoZGF0YSA9PSBudWxsIHx8IHR5cGVvZiBkYXRhICE9PSBcIm9iamVjdFwiKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKFxuICAgICEoXCJjYXRlZ29yeVwiIGluIGRhdGEpIHx8XG4gICAgdHlwZW9mIGRhdGEuY2F0ZWdvcnkgIT09IFwic3RyaW5nXCIgfHxcbiAgICAhT2JqZWN0LnZhbHVlcyhQTFBBdHRyaWJ1dGVDYXRlZ29yeSkuaW5jbHVkZXMoXG4gICAgICBkYXRhLmNhdGVnb3J5IGFzIFBMUEF0dHJpYnV0ZUNhdGVnb3J5XG4gICAgKVxuICApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoXG4gICAgIShcImF0dHJpYnV0ZXNcIiBpbiBkYXRhKSB8fFxuICAgIHR5cGVvZiBkYXRhLmF0dHJpYnV0ZXMgIT09IFwib2JqZWN0XCIgfHxcbiAgICAhaXNBcGlQTFBJZEF0dHJpYnV0ZShkYXRhLmF0dHJpYnV0ZXMpXG4gICkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcbiIsImltcG9ydCB7IFByb2R1Y3RTZWFyY2hGaWx0ZXJSZXNwb25zZUF0dHJpYnV0ZXMgfSBmcm9tIFwiQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50XCI7XG5cbmV4cG9ydCBjb25zdCBpc0FwaVByb2R1Y3RTZWFyY2hGaWx0ZXJSZXNwb25zZUF0dHJpYnV0ZXMgPSAoXG4gIGF0dHJpYnV0ZXM6IHVua25vd25cbik6IGF0dHJpYnV0ZXMgaXMgUHJvZHVjdFNlYXJjaEZpbHRlclJlc3BvbnNlQXR0cmlidXRlcyA9PiB7XG4gIGlmIChhdHRyaWJ1dGVzID09IG51bGwgfHwgdHlwZW9mIGF0dHJpYnV0ZXMgIT09IFwib2JqZWN0XCIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoXG4gICAgXCJmaWx0ZXJfbmFtZVwiIGluIGF0dHJpYnV0ZXMgJiZcbiAgICB0eXBlb2YgYXR0cmlidXRlcy5maWx0ZXJfbmFtZSAhPT0gXCJzdHJpbmdcIlxuICApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG4iLCJpbXBvcnQgeyBHZXRNZXJjaGFudENvbG9yc1F1ZXJ5RGF0YSB9IGZyb20gJ0BlbnZpdmUtYWkvdHlwZXMnO1xuaW1wb3J0IExvZ2dlciBmcm9tICdzcmMvYXBwbGljYXRpb24vbG9nZ2luZy9sb2dnZXInO1xuXG5jb25zdCBSRVFVSVJFRF9DT0xPUl9GSUVMRFMgPSBbXG4gICdhY2NlbnRfcHJpbWFyeScsXG4gICdhY2NlbnRfc2Vjb25kYXJ5JyxcbiAgJ2JhY2tncm91bmRfZGFyaycsXG4gICdiYWNrZ3JvdW5kX2xpZ2h0JyxcbiAgJ2JhY2tncm91bmRfcHJpbWFyeScsXG4gICdiYWNrZ3JvdW5kX3NhdHVyYXRlZCcsXG4gICdiYWNrZ3JvdW5kX3NlY29uZGFyeScsXG4gICdiYWNrZ3JvdW5kX3NlY29uZGFyeV9kYXJrJyxcbiAgJ2JhY2tncm91bmRfdGVydGlhcnknLFxuICAnYm9yZGVyX2RhcmsnLFxuICAnYm9yZGVyX2xpZ2h0JyxcbiAgJ2JvcmRlcl9tZWRpdW0nLFxuICAnYm9yZGVyX291dGxpbmUnLFxuICAndGV4dF9hY2NlbnQnLFxuICAndGV4dF9saWdodCcsXG4gICd0ZXh0X2xpbmsnLFxuICAndGV4dF9wcmltYXJ5JyxcbiAgJ3RleHRfc2Vjb25kYXJ5Jyxcbl0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBpc0dyYXBoUUxDb2xvcnNDb25maWcgPSAoZGF0YTogdW5rbm93bik6IGRhdGEgaXMgR2V0TWVyY2hhbnRDb2xvcnNRdWVyeURhdGEgPT4ge1xuICBpZiAodHlwZW9mIGRhdGEgIT09ICdvYmplY3QnIHx8IGRhdGEgPT09IG51bGwpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoJ0ludmFsaWQgZ3JhcGhxbCByZXNwb25zZSBmb3IgY29sb3JzIGNvbmZpZycsIHVuZGVmaW5lZCwgeyBkYXRhIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIENoZWNrIGVhY2ggcmVxdWlyZWQgZmllbGRcbiAgY29uc3QgbWlzc2luZ0ZpZWxkcyA9IFJFUVVJUkVEX0NPTE9SX0ZJRUxEUy5maWx0ZXIoXG4gICAgKGZpZWxkKSA9PiAhKGZpZWxkIGluIGRhdGEpIHx8IHR5cGVvZiAoZGF0YSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilbZmllbGRdICE9PSAnc3RyaW5nJyxcbiAgKTtcblxuICBpZiAobWlzc2luZ0ZpZWxkcy5sZW5ndGggPT09IFJFUVVJUkVEX0NPTE9SX0ZJRUxEUy5sZW5ndGgpIHtcbiAgICBMb2dnZXIubG9nRXJyb3IoJ0FsbCBjb2xvciBmaWVsZHMgYXJlIG1pc3Npbmcgb3IgbnVsbCcsIHVuZGVmaW5lZCk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKG1pc3NpbmdGaWVsZHMubGVuZ3RoID4gMCkge1xuICAgIExvZ2dlci5sb2dFcnJvcignTWlzc2luZyBvciBpbnZhbGlkIGNvbG9yIGZpZWxkcycsIHVuZGVmaW5lZCwge1xuICAgICAgZGF0YSxcbiAgICAgIG1pc3NpbmdGaWVsZHMsXG4gICAgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuIiwiLyoqXG4gKiBHZW5lcmljIHV0aWxpdHkgdG8gdHJhbnNmb3JtIHNuYWtlX2Nhc2Ugb2JqZWN0IGtleXMgdG8gY2FtZWxDYXNlIGF0IHJ1bnRpbWUuXG4gKiBUaGlzIGlzIHRoZSBydW50aW1lIGVxdWl2YWxlbnQgb2YgdGhlIENhbWVsQ2FzZWRQcm9wZXJ0aWVzRGVlcCB0eXBlIHV0aWxpdHkuXG4gKi9cblxuLy8gTGlzdCBvZiBhY3JvbnltcyB0aGF0IHNob3VsZCBiZSBwcmVzZXJ2ZWQgYXMgdXBwZXJjYXNlIGluIGNhbWVsQ2FzZSBhbmQgbG93ZXJjYXNlIGluIHNuYWtlX2Nhc2VcbmNvbnN0IFBSRVNFUlZFRF9BQ1JPTllNUyA9IFsnUExQJywgJ1BEUCcsICdTVkcnXTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIHNuYWtlX2Nhc2Ugc3RyaW5nIHRvIGNhbWVsQ2FzZVxuICogSGFuZGxlcyBzcGVjaWZpYyBhY3JvbnltcyBsaWtlIFBMUCBhbmQgUERQIGNvcnJlY3RseVxuICovXG5jb25zdCB0b0NhbWVsQ2FzZSA9IChzdHI6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIC8vIFByZS1wcm9jZXNzOiBjb252ZXJ0IGFsbCB3b3JkcyB0aGF0IG1hdGNoIHRoZSBQUkVTRVJWRURfQUNST05ZTVMgcmVnZXggdG8gdXBwZXJjYXNlXG4gIGxldCBwcm9jZXNzZWRTdHIgPSBzdHI7XG4gIGZvciAoY29uc3QgYWNyb255bSBvZiBQUkVTRVJWRURfQUNST05ZTVMpIHtcbiAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoYF8ke2Fjcm9ueW19Xz9gLCAnZ2knKTtcblxuICAgIGlmIChwcm9jZXNzZWRTdHIubWF0Y2gocmVnZXgpKSB7XG4gICAgICBwcm9jZXNzZWRTdHIgPSBwcm9jZXNzZWRTdHIucmVwbGFjZShyZWdleCwgKHYpID0+XG4gICAgICAgIHYuZW5kc1dpdGgoJ18nKSA/IGAke2Fjcm9ueW19X2AgOiBgJHthY3JvbnltfWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcHJvY2Vzc2VkU3RyLnJlcGxhY2UoL18oW2Etel0pL2csIChfLCBsZXR0ZXIpID0+IGxldHRlci50b1VwcGVyQ2FzZSgpKTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYSBjYW1lbENhc2Ugc3RyaW5nIHRvIHNuYWtlX2Nhc2VcbiAqIEhhbmRsZXMgY29uc2VjdXRpdmUgY2FwaXRhbCBsZXR0ZXJzIGNvcnJlY3RseSAoZS5nLiwgXCJQRFBcIiAtPiBcInBkcFwiLCBub3QgXCJwX2RfcFwiKVxuICogUHJlc2VydmVzIHNwZWNpZmljIGFjcm9ueW1zIGxpa2UgUExQIGFuZCBQRFAgYXMgbG93ZXJjYXNlIGluIHNuYWtlX2Nhc2VcbiAqL1xuY29uc3QgdG9TbmFrZUNhc2UgPSAoc3RyOiBzdHJpbmcpID0+XG4gIHN0clxuICAgIC5yZXBsYWNlKC8oW0EtWl0pKD89W2Etel0pL2csICdfJDEnKVxuICAgIC5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCAnJDFfJDInKVxuICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgLnJlcGxhY2UoL15fLywgJycpO1xuXG4vKipcbiAqIFJlY3Vyc2l2ZWx5IHRyYW5zZm9ybXMgYWxsIG9iamVjdCBrZXlzIGZyb20gc25ha2VfY2FzZSB0byBjYW1lbENhc2VcbiAqL1xuZXhwb3J0IGNvbnN0IHRyYW5zZm9ybVNuYWtlVG9DYW1lbCA9IChvYmo6IHVua25vd24pOiB1bmtub3duID0+IHtcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgcmV0dXJuIG9iai5tYXAoKHZhbCkgPT4gdHJhbnNmb3JtU25ha2VUb0NhbWVsKHZhbCkpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnKSB7XG4gICAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMob2JqKSkge1xuICAgICAgY29uc3QgY2FtZWxLZXkgPSB0b0NhbWVsQ2FzZShrZXkpO1xuICAgICAgcmVzdWx0W2NhbWVsS2V5XSA9IHRyYW5zZm9ybVNuYWtlVG9DYW1lbCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHJldHVybiBvYmo7XG59O1xuXG4vKipcbiAqIFJlY3Vyc2l2ZWx5IHRyYW5zZm9ybXMgYWxsIG9iamVjdCBrZXlzIGZyb20gY2FtZWxDYXNlIHRvIHNuYWtlX2Nhc2VcbiAqL1xuZXhwb3J0IGNvbnN0IHRyYW5zZm9ybUNhbWVsVG9TbmFrZSA9IChvYmo6IHVua25vd24pOiB1bmtub3duID0+IHtcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgcmV0dXJuIG9iai5tYXAodHJhbnNmb3JtQ2FtZWxUb1NuYWtlKTtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0Jykge1xuICAgIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG9iaikpIHtcbiAgICAgIGNvbnN0IHNuYWtlS2V5ID0gdG9TbmFrZUNhc2Uoa2V5KTtcbiAgICAgIHJlc3VsdFtzbmFrZUtleV0gPSB0cmFuc2Zvcm1DYW1lbFRvU25ha2UodmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICByZXR1cm4gb2JqO1xufTtcbiIsImltcG9ydCB7IEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cyB9IGZyb20gJ0BzcGlmZnktYWkvY29tbWVyY2UtYXBpLWNsaWVudCc7XG5cbi8qKlxuICogQ29udmVydHMgYSBzdHJpbmcgdG8gYSBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMgZW51bSB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0gc3RhdHVzIC0gVGhlIHN0cmluZyB0byBjb252ZXJ0LlxuICpcbiAqIEByZXR1cm5zIFRoZSBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMgZW51bSB2YWx1ZSBvciB1bmRlZmluZWQgaWYgdGhlIHN0cmluZ1xuICogZG9lcyBub3QgbWFwIHRvIGEgdmFsaWQgZW51bVxuICovXG5leHBvcnQgY29uc3Qgc3RyaW5nVG9GdWxmaWxsbWVudERpc3BsYXlTdGF0dXNFbnVtVmFsdWUgPSAoXG4gIHN0YXR1czogc3RyaW5nLFxuKTogRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzIHwgdW5kZWZpbmVkID0+IHtcbiAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICBjYXNlICdBVFRFTVBURURfREVMSVZFUlknOlxuICAgICAgcmV0dXJuIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cy5BVFRFTVBURURfREVMSVZFUlk7XG4gICAgY2FzZSAnQ0FOQ0VMRUQnOlxuICAgICAgcmV0dXJuIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cy5DQU5DRUxFRDtcbiAgICBjYXNlICdDT05GSVJNRUQnOlxuICAgICAgcmV0dXJuIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cy5DT05GSVJNRUQ7XG4gICAgY2FzZSAnREVMSVZFUkVEJzpcbiAgICAgIHJldHVybiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMuREVMSVZFUkVEO1xuICAgIGNhc2UgJ0ZBSUxVUkUnOlxuICAgICAgcmV0dXJuIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cy5GQUlMVVJFO1xuICAgIGNhc2UgJ0ZVTEZJTExFRCc6XG4gICAgICByZXR1cm4gRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzLkZVTEZJTExFRDtcbiAgICBjYXNlICdJTl9UUkFOU0lUJzpcbiAgICAgIHJldHVybiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMuSU5fVFJBTlNJVDtcbiAgICBjYXNlICdMQUJFTF9QUklOVEVEJzpcbiAgICAgIHJldHVybiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMuTEFCRUxfUFJJTlRFRDtcbiAgICBjYXNlICdMQUJFTF9QVVJDSEFTRUQnOlxuICAgICAgcmV0dXJuIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cy5MQUJFTF9QVVJDSEFTRUQ7XG4gICAgY2FzZSAnTEFCRUxfVk9JREVEJzpcbiAgICAgIHJldHVybiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMuTEFCRUxfVk9JREVEO1xuICAgIGNhc2UgJ01BUktFRF9BU19GVUxGSUxMRUQnOlxuICAgICAgcmV0dXJuIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cy5NQVJLRURfQVNfRlVMRklMTEVEO1xuICAgIGNhc2UgJ05PVF9ERUxJVkVSRUQnOlxuICAgICAgcmV0dXJuIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cy5OT1RfREVMSVZFUkVEO1xuICAgIGNhc2UgJ09VVF9GT1JfREVMSVZFUlknOlxuICAgICAgcmV0dXJuIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cy5PVVRfRk9SX0RFTElWRVJZO1xuICAgIGNhc2UgJ1BJQ0tFRF9VUCc6XG4gICAgICByZXR1cm4gRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzLlBJQ0tFRF9VUDtcbiAgICBjYXNlICdSRUFEWV9GT1JfUElDS1VQJzpcbiAgICAgIHJldHVybiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMuUkVBRFlfRk9SX1BJQ0tVUDtcbiAgICBjYXNlICdTVUJNSVRURUQnOlxuICAgICAgcmV0dXJuIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cy5TVUJNSVRURUQ7XG4gICAgY2FzZSAnSU5fUFJPR1JFU1MnOlxuICAgICAgcmV0dXJuIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cy5JTl9QUk9HUkVTUztcbiAgICBjYXNlICdPTl9IT0xEJzpcbiAgICAgIHJldHVybiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMuT05fSE9MRDtcbiAgICBjYXNlICdPUEVOJzpcbiAgICAgIHJldHVybiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMuT1BFTjtcbiAgICBjYXNlICdQQVJUSUFMTFlfRlVMRklMTEVEJzpcbiAgICAgIHJldHVybiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMuUEFSVElBTExZX0ZVTEZJTExFRDtcbiAgICBjYXNlICdQRU5ESU5HX0ZVTEZJTExNRU5UJzpcbiAgICAgIHJldHVybiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMuUEVORElOR19GVUxGSUxMTUVOVDtcbiAgICBjYXNlICdSRVFVRVNUX0RFQ0xJTkVEJzpcbiAgICAgIHJldHVybiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMuUkVRVUVTVF9ERUNMSU5FRDtcbiAgICBjYXNlICdSRVNUT0NLRUQnOlxuICAgICAgcmV0dXJuIEZ1bGZpbGxtZW50RGlzcGxheVN0YXR1cy5SRVNUT0NLRUQ7XG4gICAgY2FzZSAnU0NIRURVTEVEJzpcbiAgICAgIHJldHVybiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMuU0NIRURVTEVEO1xuICAgIGNhc2UgJ1VORlVMRklMTEVEJzpcbiAgICAgIHJldHVybiBGdWxmaWxsbWVudERpc3BsYXlTdGF0dXMuVU5GVUxGSUxMRUQ7XG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn07XG4iLCIvLyBpbXBvcnQgeyBDb2xvck1hcHBpbmcsIENvbG9yTmFtZXMgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi90eXBlcy9zcmMvY29sb3JzQ29uZmlnJztcbi8vIGltcG9ydCB7IGlzR3JhcGhRTENvbG9yc0NvbmZpZyB9IGZyb20gJy4uLy4uL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvZ3JhcGhRTC9pc0dyYXBoUUxDb2xvcnNDb25maWcnO1xuXG5pbXBvcnQgeyBDb2xvck1hcHBpbmcgfSBmcm9tIFwiQGVudml2ZS1haS90eXBlc1wiO1xuaW1wb3J0IHsgaXNHcmFwaFFMQ29sb3JzQ29uZmlnIH0gZnJvbSBcIi4uL2d1YXJkcy9ncmFwaFFML2lzR3JhcGhRTENvbG9yc0NvbmZpZ1wiO1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVHcmFwaFFMQ29sb3JzQ29uZmlnID0gKFxuICBkYXRhOiB1bmtub3duXG4pOiBDb2xvck1hcHBpbmcgfCB1bmRlZmluZWQgPT4ge1xuICBpZiAoIWlzR3JhcGhRTENvbG9yc0NvbmZpZyhkYXRhKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG4iLCJpbXBvcnQge1xuICBET01JbnNlcnRpb25UeXBlLFxuICBGcm9udGVuZENvbmZpZyxcbiAgR3JpZEluc2VydGlvblR5cGUsXG4gIFBhZ2VWYXJpYW50Q29uZmlnLFxuICBQYWdlVmFyaWFudFRlc3RUeXBlLFxuICBXaWRnZXRDb25maWcsXG4gIFdpZGdldE1vdW50aW5nQ29uZmlnLFxufSBmcm9tICdAZW52aXZlLWFpL3R5cGVzJztcbmltcG9ydCBMb2dnZXIgZnJvbSAnc3JjL2FwcGxpY2F0aW9uL2xvZ2dpbmcvbG9nZ2VyJztcbmltcG9ydCB7IHRyYW5zZm9ybVNuYWtlVG9DYW1lbCB9IGZyb20gJy4uL3V0aWxzL3NuYWtlVG9DYW1lbFRyYW5zZm9ybWVyJztcblxuLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGFuZCB0cmFuc2Zvcm0gUGFnZVZhcmlhbnRRdWVyeURhdGEgdG8gUGFnZVZhcmlhbnRDb25maWdcbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUFuZFRyYW5zZm9ybVBhZ2VWYXJpYW50cyA9IChcbiAgY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbik6IFBhZ2VWYXJpYW50Q29uZmlnID0+IHtcbiAgY29uc3QgdHJhbnNmb3JtZWQgPSB0cmFuc2Zvcm1TbmFrZVRvQ2FtZWwoY29uZmlnKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICBjb25zdCB7IHZhcmlhbnRDaGVja3MsIHdpZGdldE1vdW50aW5nLCAuLi5yZXN0IH0gPSB0cmFuc2Zvcm1lZDtcblxuICAvLyBDb252ZXJ0IHZhcmlhbnRDaGVja3MgdG8gdmFyaWFudFRlc3RzIHdpdGggdGVzdFR5cGUgbm9ybWFsaXphdGlvblxuICBjb25zdCB2YXJpYW50VGVzdHMgPSBBcnJheS5pc0FycmF5KHZhcmlhbnRDaGVja3MpXG4gICAgPyB2YXJpYW50Q2hlY2tzLm1hcCgoeyBjaGVja1R5cGUsIC4uLnJlc3RDaGVjayB9KSA9PiAoe1xuICAgICAgICAuLi5yZXN0Q2hlY2ssXG4gICAgICAgIHRlc3RUeXBlOiBjaGVja1R5cGUsXG4gICAgICB9KSlcbiAgICA6IFtdO1xuXG4gIC8vIE5vcm1hbGl6ZSB3aWRnZXRNb3VudGluZzogY2hlY2tzIC0+IHRlc3RzLCBjaGVja1R5cGUgLT4gdGVzdFR5cGVcbiAgY29uc3Qgbm9ybWFsaXplZFdpZGdldE1vdW50aW5nID0gQXJyYXkuaXNBcnJheSh3aWRnZXRNb3VudGluZylcbiAgICA/IHdpZGdldE1vdW50aW5nLm1hcCgoeyBtb3VudGluZ1BvaW50V2lkZ2V0cywgLi4ucmVzdE1vdW50aW5nIH0pID0+ICh7XG4gICAgICAgIC4uLnJlc3RNb3VudGluZyxcbiAgICAgICAgLi4uKEFycmF5LmlzQXJyYXkobW91bnRpbmdQb2ludFdpZGdldHMpXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIG1vdW50aW5nUG9pbnRXaWRnZXRzOiBtb3VudGluZ1BvaW50V2lkZ2V0cy5tYXAoKHsgY2hlY2tzLCAuLi5yZXN0V2lkZ2V0IH0pID0+ICh7XG4gICAgICAgICAgICAgICAgLi4ucmVzdFdpZGdldCxcbiAgICAgICAgICAgICAgICB0ZXN0czogQXJyYXkuaXNBcnJheShjaGVja3MpXG4gICAgICAgICAgICAgICAgICA/IGNoZWNrcy5tYXAoKHsgY2hlY2tUeXBlLCAuLi5yZXN0Q2hlY2sgfSkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAuLi5yZXN0Q2hlY2ssXG4gICAgICAgICAgICAgICAgICAgICAgdGVzdFR5cGU6IGNoZWNrVHlwZSxcbiAgICAgICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgICAgICA6IFtdLFxuICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB7fSksXG4gICAgICB9KSlcbiAgICA6IFtdO1xuXG4gIGNvbnN0IG5vcm1hbGl6ZWRDb25maWc6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgIC4uLnJlc3QsXG4gICAgLi4uKHZhcmlhbnRUZXN0cyA/IHsgdmFyaWFudFRlc3RzIH0gOiB7fSksXG4gICAgLi4uKG5vcm1hbGl6ZWRXaWRnZXRNb3VudGluZyA/IHsgd2lkZ2V0TW91bnRpbmc6IG5vcm1hbGl6ZWRXaWRnZXRNb3VudGluZyB9IDoge30pLFxuICB9O1xuXG4gIGNvbnN0IHZhcmlhbnRJZCA9IG5vcm1hbGl6ZWRDb25maWcudmFyaWFudElkIGFzIHN0cmluZztcbiAgY29uc3QgdmFyaWFudFR5cGUgPSBub3JtYWxpemVkQ29uZmlnLnZhcmlhbnRUeXBlIGFzIHN0cmluZztcblxuICBpZiAodHlwZW9mIHZhcmlhbnRJZCAhPT0gJ3N0cmluZycgfHwgIXZhcmlhbnRJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBvciBpbnZhbGlkIHZhcmlhbnRJZCBmb3IgcGFnZVZhcmlhbnRgKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFyaWFudFR5cGUgIT09ICdzdHJpbmcnIHx8ICF2YXJpYW50VHlwZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBvciBpbnZhbGlkIHZhcmlhbnRUeXBlIGZvciBwYWdlVmFyaWFudCAnJHt2YXJpYW50SWR9J2ApO1xuICB9XG5cbiAgaWYgKCFBcnJheS5pc0FycmF5KHZhcmlhbnRUZXN0cykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgTWlzc2luZyBvciBpbnZhbGlkIHZhcmlhbnRUZXN0cyBmb3IgcGFnZVZhcmlhbnQgJyR7dmFyaWFudElkfScuIE11c3QgYmUgYW4gYXJyYXlgLFxuICAgICk7XG4gIH1cblxuICBmb3IgKGNvbnN0IHRlc3Qgb2YgdmFyaWFudFRlc3RzKSB7XG4gICAgaWYgKCF0ZXN0LnRlc3RUeXBlIHx8IHR5cGVvZiB0ZXN0LnRlc3RUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHZhcmlhbnRUZXN0LnRlc3RUeXBlIGZvciBwYWdlVmFyaWFudCAnJHt2YXJpYW50SWR9J2ApO1xuICAgIH1cbiAgICBpZiAoIU9iamVjdC52YWx1ZXMoUGFnZVZhcmlhbnRUZXN0VHlwZSkuaW5jbHVkZXModGVzdC50ZXN0VHlwZSBhcyBQYWdlVmFyaWFudFRlc3RUeXBlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCB0ZXN0VHlwZSAnJHt0ZXN0LnRlc3RUeXBlfScgZm9yIHBhZ2VWYXJpYW50ICcke3ZhcmlhbnRJZH0nLiBWYWxpZCB0eXBlczogJHtPYmplY3QudmFsdWVzKFxuICAgICAgICAgIFBhZ2VWYXJpYW50VGVzdFR5cGUsXG4gICAgICAgICkuam9pbignLCAnKX1gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBpZiAoIUFycmF5LmlzQXJyYXkobm9ybWFsaXplZFdpZGdldE1vdW50aW5nKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBNaXNzaW5nIG9yIGludmFsaWQgd2lkZ2V0TW91bnRpbmcgZm9yIHBhZ2VWYXJpYW50ICcke3ZhcmlhbnRJZH0nLiBNdXN0IGJlIGFuIGFycmF5YCxcbiAgICApO1xuICB9XG5cbiAgZm9yIChjb25zdCBtb3VudGluZyBvZiBub3JtYWxpemVkV2lkZ2V0TW91bnRpbmcpIHtcbiAgICBpZiAodHlwZW9mIG1vdW50aW5nLm1vdW50aW5nQ29uZmlnSWQgIT09ICdzdHJpbmcnIHx8ICFtb3VudGluZy5tb3VudGluZ0NvbmZpZ0lkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbW91bnRpbmdDb25maWdJZCBpbiB3aWRnZXRNb3VudGluZyBmb3IgcGFnZVZhcmlhbnQgJyR7dmFyaWFudElkfSdgKTtcbiAgICB9XG5cbiAgICBpZiAobW91bnRpbmcud2lkZ2V0Q29uZmlnSWQgJiYgdHlwZW9mIG1vdW50aW5nLndpZGdldENvbmZpZ0lkICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHdpZGdldENvbmZpZ0lkIGluIHdpZGdldE1vdW50aW5nIGZvciBwYWdlVmFyaWFudCAnJHt2YXJpYW50SWR9J2ApO1xuICAgIH1cblxuICAgIGlmIChtb3VudGluZy5tb3VudGluZ1BvaW50V2lkZ2V0cykge1xuICAgICAgZm9yIChjb25zdCB3aWRnZXQgb2YgbW91bnRpbmcubW91bnRpbmdQb2ludFdpZGdldHMpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB3aWRnZXQud2lkZ2V0Q29uZmlnSWQgIT09ICdzdHJpbmcnIHx8ICF3aWRnZXQud2lkZ2V0Q29uZmlnSWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgSW52YWxpZCB3aWRnZXRDb25maWdJZCBpbiBtb3VudGluZ1BvaW50V2lkZ2V0cyBmb3IgcGFnZVZhcmlhbnQgJyR7dmFyaWFudElkfSdgLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkod2lkZ2V0LnRlc3RzKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBJbnZhbGlkIG9yIG1pc3NpbmcgdGVzdHMgaW4gbW91bnRpbmdQb2ludFdpZGdldHMgZm9yIHBhZ2VWYXJpYW50ICcke3ZhcmlhbnRJZH0nYCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKHZhcmlhbnRUeXBlID09PSAncGxwJykge1xuICAgIGlmICh0eXBlb2Ygbm9ybWFsaXplZENvbmZpZy5wbHBJZEV4dHJhY3RvciAhPT0gJ3N0cmluZycgfHwgIW5vcm1hbGl6ZWRDb25maWcucGxwSWRFeHRyYWN0b3IpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBvciBpbnZhbGlkIHBscElkRXh0cmFjdG9yIGZvciBQTFAgcGFnZVZhcmlhbnQgJyR7dmFyaWFudElkfSdgKTtcbiAgICB9XG4gIH1cblxuICBpZiAodmFyaWFudFR5cGUgPT09ICdwZHAnKSB7XG4gICAgaWYgKFxuICAgICAgdHlwZW9mIG5vcm1hbGl6ZWRDb25maWcucHJvZHVjdElkRXh0cmFjdG9yICE9PSAnc3RyaW5nJyB8fFxuICAgICAgIW5vcm1hbGl6ZWRDb25maWcucHJvZHVjdElkRXh0cmFjdG9yXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3Npbmcgb3IgaW52YWxpZCBwcm9kdWN0SWRFeHRyYWN0b3IgZm9yIFBEUCBwYWdlVmFyaWFudCAnJHt2YXJpYW50SWR9J2ApO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICBub3JtYWxpemVkQ29uZmlnLnBhcmVudFByb2R1Y3RJZEV4dHJhY3RvciAmJlxuICAgICAgdHlwZW9mIG5vcm1hbGl6ZWRDb25maWcucGFyZW50UHJvZHVjdElkRXh0cmFjdG9yICE9PSAnc3RyaW5nJ1xuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCBwYXJlbnRQcm9kdWN0SWRFeHRyYWN0b3IgZm9yIFBEUCBwYWdlVmFyaWFudCAnJHt2YXJpYW50SWR9Jy4gTXVzdCBiZSBzdHJpbmcgaWYgcHJvdmlkZWRgLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbm9ybWFsaXplZENvbmZpZyBhcyBQYWdlVmFyaWFudENvbmZpZztcbn07XG5cbi8vIEhlbHBlciBmdW5jdGlvbiB0byB2YWxpZGF0ZSBhbmQgdHJhbnNmb3JtIE1vdW50aW5nQ29uZmlnUXVlcnlEYXRhIHRvIFdpZGdldE1vdW50aW5nQ29uZmlnXG5leHBvcnQgY29uc3QgdmFsaWRhdGVBbmRUcmFuc2Zvcm1Nb3VudGluZ0NvbmZpZyA9IChcbiAgY29uZmlnOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgY29uZmlnS2V5OiBzdHJpbmcsXG4pOiBXaWRnZXRNb3VudGluZ0NvbmZpZyA9PiB7XG4gIC8vIFJFTkFNSU5HIExPR0lDOiBDb252ZXJ0IGJhY2tlbmQgXCJDaGVja1wiIHRlcm1pbm9sb2d5IHRvIGZyb250ZW5kIFwiVGVzdFwiIHRlcm1pbm9sb2d5XG4gIGNvbnN0IG5vcm1hbGl6ZWRDb25maWcgPSB7IC4uLmNvbmZpZyB9O1xuXG4gIC8vIENvbnZlcnQgY2hlY2tJZCB0byB0ZXN0SWQgZm9yIGZyb250ZW5kIGNvbXBhdGliaWxpdHkgKGRhdGEgaXMgYWxyZWFkeSBjYW1lbENhc2UpXG4gIGlmIChub3JtYWxpemVkQ29uZmlnLmNoZWNrSWQgJiYgIW5vcm1hbGl6ZWRDb25maWcudGVzdElkKSB7XG4gICAgbm9ybWFsaXplZENvbmZpZy50ZXN0SWQgPSBub3JtYWxpemVkQ29uZmlnLmNoZWNrSWQ7XG4gICAgZGVsZXRlIG5vcm1hbGl6ZWRDb25maWcuY2hlY2tJZDtcbiAgfVxuXG4gIC8vIFJlcXVpcmVkIGZpZWxkcyAtIHRoZXNlIG11c3QgYmUgcHJlc2VudCBhbmQgdmFsaWRcbiAgaWYgKHR5cGVvZiBub3JtYWxpemVkQ29uZmlnLm1vdW50aW5nQ29uZmlnSWQgIT09ICdzdHJpbmcnIHx8ICFub3JtYWxpemVkQ29uZmlnLm1vdW50aW5nQ29uZmlnSWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3Npbmcgb3IgaW52YWxpZCBtb3VudGluZ0NvbmZpZ0lkIGZvciBjb25maWcgJyR7Y29uZmlnS2V5fSdgKTtcbiAgfVxuICBpZiAodHlwZW9mIG5vcm1hbGl6ZWRDb25maWcuY29udGFpbmVySWQgIT09ICdzdHJpbmcnIHx8ICFub3JtYWxpemVkQ29uZmlnLmNvbnRhaW5lcklkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIG9yIGludmFsaWQgY29udGFpbmVySWQgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9J2ApO1xuICB9XG4gIGlmICh0eXBlb2Ygbm9ybWFsaXplZENvbmZpZy50ZXN0SWQgIT09ICdzdHJpbmcnIHx8ICFub3JtYWxpemVkQ29uZmlnLnRlc3RJZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBvciBpbnZhbGlkIHRlc3RJZCBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nYCk7XG4gIH1cblxuICAvLyBSZXF1aXJlZCBpbnNlcnRpb25Qb2ludFxuICBpZiAoXG4gICAgIW5vcm1hbGl6ZWRDb25maWcuaW5zZXJ0aW9uUG9pbnQgfHxcbiAgICB0eXBlb2Ygbm9ybWFsaXplZENvbmZpZy5pbnNlcnRpb25Qb2ludCAhPT0gJ29iamVjdCcgfHxcbiAgICBBcnJheS5pc0FycmF5KG5vcm1hbGl6ZWRDb25maWcuaW5zZXJ0aW9uUG9pbnQpXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBvciBpbnZhbGlkIGluc2VydGlvblBvaW50IGZvciBjb25maWcgJyR7Y29uZmlnS2V5fSdgKTtcbiAgfVxuXG4gIGNvbnN0IGluc2VydGlvblBvaW50ID0gbm9ybWFsaXplZENvbmZpZy5pbnNlcnRpb25Qb2ludCBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAvLyBWYWxpZGF0ZSBpbnNlcnRpb25Qb2ludCByZXF1aXJlZCBmaWVsZHNcbiAgaWYgKHR5cGVvZiBpbnNlcnRpb25Qb2ludC5zZWxlY3RvciAhPT0gJ3N0cmluZycgfHwgIWluc2VydGlvblBvaW50LnNlbGVjdG9yKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIG9yIGludmFsaWQgaW5zZXJ0aW9uUG9pbnQuc2VsZWN0b3IgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9J2ApO1xuICB9XG4gIGlmICh0eXBlb2YgaW5zZXJ0aW9uUG9pbnQuaW5zZXJ0aW9uVHlwZSAhPT0gJ3N0cmluZycgfHwgIWluc2VydGlvblBvaW50Lmluc2VydGlvblR5cGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3Npbmcgb3IgaW52YWxpZCBpbnNlcnRpb25Qb2ludC5pbnNlcnRpb25UeXBlIGZvciBjb25maWcgJyR7Y29uZmlnS2V5fSdgKTtcbiAgfVxuXG4gIC8vIFZhbGlkYXRlIGluc2VydGlvblR5cGUgaXMgYSB2YWxpZCBET01JbnNlcnRpb25UeXBlXG4gIGlmICghT2JqZWN0LnZhbHVlcyhET01JbnNlcnRpb25UeXBlKS5pbmNsdWRlcyhpbnNlcnRpb25Qb2ludC5pbnNlcnRpb25UeXBlIGFzIERPTUluc2VydGlvblR5cGUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEludmFsaWQgaW5zZXJ0aW9uUG9pbnQuaW5zZXJ0aW9uVHlwZSAnJHtpbnNlcnRpb25Qb2ludC5pbnNlcnRpb25UeXBlfScgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9Jy4gVmFsaWQgdHlwZXM6ICR7T2JqZWN0LnZhbHVlcyhET01JbnNlcnRpb25UeXBlKS5qb2luKCcsICcpfWAsXG4gICAgKTtcbiAgfVxuXG4gIC8vIFZhbGlkYXRlIG9wdGlvbmFsIGluc2VydGlvblBvaW50IGZpZWxkc1xuICBpZiAoaW5zZXJ0aW9uUG9pbnQuc2VsZWN0aW9uSW5kZXggIT0gbnVsbCAmJiB0eXBlb2YgaW5zZXJ0aW9uUG9pbnQuc2VsZWN0aW9uSW5kZXggIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEludmFsaWQgaW5zZXJ0aW9uUG9pbnQuc2VsZWN0aW9uSW5kZXggZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9Jy4gTXVzdCBiZSBhIG51bWJlciBvciBudWxsL3VuZGVmaW5lZGAsXG4gICAgKTtcbiAgfVxuXG4gIC8vIFZhbGlkYXRlIG9wdGlvbmFsIHBhcmVudEluc2VydGlvblBvaW50IGlmIHByZXNlbnRcbiAgbGV0IHBhcmVudEluc2VydGlvblBvaW50O1xuICBpZiAobm9ybWFsaXplZENvbmZpZy5wYXJlbnRJbnNlcnRpb25Qb2ludCkge1xuICAgIGlmIChcbiAgICAgIHR5cGVvZiBub3JtYWxpemVkQ29uZmlnLnBhcmVudEluc2VydGlvblBvaW50ICE9PSAnb2JqZWN0JyB8fFxuICAgICAgQXJyYXkuaXNBcnJheShub3JtYWxpemVkQ29uZmlnLnBhcmVudEluc2VydGlvblBvaW50KVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHBhcmVudEluc2VydGlvblBvaW50IGZvciBjb25maWcgJyR7Y29uZmlnS2V5fScuIE11c3QgYmUgYW4gb2JqZWN0YCk7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyZW50UG9pbnQgPSBub3JtYWxpemVkQ29uZmlnLnBhcmVudEluc2VydGlvblBvaW50IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGlmICh0eXBlb2YgcGFyZW50UG9pbnQuc2VsZWN0b3IgIT09ICdzdHJpbmcnIHx8ICFwYXJlbnRQb2ludC5zZWxlY3Rvcikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIG9yIGludmFsaWQgcGFyZW50SW5zZXJ0aW9uUG9pbnQuc2VsZWN0b3IgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9J2ApO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHBhcmVudFBvaW50Lmluc2VydGlvblR5cGUgIT09ICdzdHJpbmcnIHx8ICFwYXJlbnRQb2ludC5pbnNlcnRpb25UeXBlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBNaXNzaW5nIG9yIGludmFsaWQgcGFyZW50SW5zZXJ0aW9uUG9pbnQuaW5zZXJ0aW9uVHlwZSBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKCFPYmplY3QudmFsdWVzKERPTUluc2VydGlvblR5cGUpLmluY2x1ZGVzKHBhcmVudFBvaW50Lmluc2VydGlvblR5cGUgYXMgRE9NSW5zZXJ0aW9uVHlwZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEludmFsaWQgcGFyZW50SW5zZXJ0aW9uUG9pbnQuaW5zZXJ0aW9uVHlwZSAnJHtwYXJlbnRQb2ludC5pbnNlcnRpb25UeXBlfScgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9Jy4gVmFsaWQgdHlwZXM6ICR7T2JqZWN0LnZhbHVlcyhET01JbnNlcnRpb25UeXBlKS5qb2luKCcsICcpfWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChwYXJlbnRQb2ludC5zZWxlY3Rpb25JbmRleCAhPSBudWxsICYmIHR5cGVvZiBwYXJlbnRQb2ludC5zZWxlY3Rpb25JbmRleCAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEludmFsaWQgcGFyZW50SW5zZXJ0aW9uUG9pbnQuc2VsZWN0aW9uSW5kZXggZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9Jy4gTXVzdCBiZSBhIG51bWJlciBvciBudWxsL3VuZGVmaW5lZGAsXG4gICAgICApO1xuICAgIH1cblxuICAgIHBhcmVudEluc2VydGlvblBvaW50ID0ge1xuICAgICAgc2VsZWN0b3I6IHBhcmVudFBvaW50LnNlbGVjdG9yLFxuICAgICAgaW5zZXJ0aW9uVHlwZTogcGFyZW50UG9pbnQuaW5zZXJ0aW9uVHlwZSBhcyBET01JbnNlcnRpb25UeXBlLFxuICAgICAgc2VsZWN0aW9uSW5kZXg6IHBhcmVudFBvaW50LnNlbGVjdGlvbkluZGV4IGFzIG51bWJlciB8IHVuZGVmaW5lZCxcbiAgICB9O1xuICB9XG5cbiAgLy8gVmFsaWRhdGUgb3B0aW9uYWwgd3JhcHBpbmdFbGVtZW50IGlmIHByZXNlbnRcbiAgbGV0IHdyYXBwaW5nRWxlbWVudDtcbiAgaWYgKG5vcm1hbGl6ZWRDb25maWcud3JhcHBpbmdFbGVtZW50KSB7XG4gICAgaWYgKFxuICAgICAgdHlwZW9mIG5vcm1hbGl6ZWRDb25maWcud3JhcHBpbmdFbGVtZW50ICE9PSAnb2JqZWN0JyB8fFxuICAgICAgQXJyYXkuaXNBcnJheShub3JtYWxpemVkQ29uZmlnLndyYXBwaW5nRWxlbWVudClcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCB3cmFwcGluZ0VsZW1lbnQgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9Jy4gTXVzdCBiZSBhbiBvYmplY3RgKTtcbiAgICB9XG5cbiAgICBjb25zdCB3cmFwcGluZyA9IG5vcm1hbGl6ZWRDb25maWcud3JhcHBpbmdFbGVtZW50IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgIGlmICh0eXBlb2Ygd3JhcHBpbmcuY2xhc3NOYW1lICE9PSAnc3RyaW5nJyB8fCAhd3JhcHBpbmcuY2xhc3NOYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3Npbmcgb3IgaW52YWxpZCB3cmFwcGluZ0VsZW1lbnQuY2xhc3NOYW1lIGZvciBjb25maWcgJyR7Y29uZmlnS2V5fSdgKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB3cmFwcGluZy5lbGVtZW50ICE9PSAnc3RyaW5nJyB8fCAhd3JhcHBpbmcuZWxlbWVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIG9yIGludmFsaWQgd3JhcHBpbmdFbGVtZW50LmVsZW1lbnQgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9J2ApO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHdyYXBwaW5nLmluc2VydGlvblR5cGUgIT09ICdzdHJpbmcnIHx8ICF3cmFwcGluZy5pbnNlcnRpb25UeXBlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3Npbmcgb3IgaW52YWxpZCB3cmFwcGluZ0VsZW1lbnQuaW5zZXJ0aW9uVHlwZSBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nYCk7XG4gICAgfVxuXG4gICAgaWYgKCFPYmplY3QudmFsdWVzKERPTUluc2VydGlvblR5cGUpLmluY2x1ZGVzKHdyYXBwaW5nLmluc2VydGlvblR5cGUgYXMgRE9NSW5zZXJ0aW9uVHlwZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEludmFsaWQgd3JhcHBpbmdFbGVtZW50Lmluc2VydGlvblR5cGUgJyR7d3JhcHBpbmcuaW5zZXJ0aW9uVHlwZX0nIGZvciBjb25maWcgJyR7Y29uZmlnS2V5fScuIFZhbGlkIHR5cGVzOiAke09iamVjdC52YWx1ZXMoRE9NSW5zZXJ0aW9uVHlwZSkuam9pbignLCAnKX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB3cmFwcGluZ0VsZW1lbnQgPSB7XG4gICAgICBjbGFzc05hbWU6IHdyYXBwaW5nLmNsYXNzTmFtZSxcbiAgICAgIGVsZW1lbnQ6IHdyYXBwaW5nLmVsZW1lbnQsXG4gICAgICBpbnNlcnRpb25UeXBlOiB3cmFwcGluZy5pbnNlcnRpb25UeXBlIGFzIERPTUluc2VydGlvblR5cGUsXG4gICAgfTtcbiAgfVxuXG4gIC8vIFZhbGlkYXRlIG9wdGlvbmFsIGZpZWxkc1xuICBpZiAoXG4gICAgbm9ybWFsaXplZENvbmZpZy5kaXZDaGVja1NlbGVjdG9yICE9IG51bGwgJiZcbiAgICB0eXBlb2Ygbm9ybWFsaXplZENvbmZpZy5kaXZDaGVja1NlbGVjdG9yICE9PSAnc3RyaW5nJ1xuICApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YWxpZCBkaXZDaGVja1NlbGVjdG9yIGZvciBjb25maWcgJyR7Y29uZmlnS2V5fScuIE11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbC91bmRlZmluZWRgLFxuICAgICk7XG4gIH1cbiAgaWYgKG5vcm1hbGl6ZWRDb25maWcuY2xhc3NOYW1lICE9IG51bGwgJiYgdHlwZW9mIG5vcm1hbGl6ZWRDb25maWcuY2xhc3NOYW1lICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBJbnZhbGlkIGNsYXNzTmFtZSBmb3IgY29uZmlnICcke2NvbmZpZ0tleX0nLiBNdXN0IGJlIGEgc3RyaW5nIG9yIG51bGwvdW5kZWZpbmVkYCxcbiAgICApO1xuICB9XG4gIGlmIChcbiAgICBub3JtYWxpemVkQ29uZmlnLnN1cHByZXNzaW9uU2VsZWN0b3IgIT0gbnVsbCAmJlxuICAgIHR5cGVvZiBub3JtYWxpemVkQ29uZmlnLnN1cHByZXNzaW9uU2VsZWN0b3IgIT09ICdzdHJpbmcnXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBJbnZhbGlkIHN1cHByZXNzaW9uU2VsZWN0b3IgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9Jy4gTXVzdCBiZSBhIHN0cmluZyBvciBudWxsL3VuZGVmaW5lZGAsXG4gICAgKTtcbiAgfVxuICBpZiAoXG4gICAgbm9ybWFsaXplZENvbmZpZy5kYXRhQXR0cmlidXRlcyAhPSBudWxsICYmXG4gICAgKHR5cGVvZiBub3JtYWxpemVkQ29uZmlnLmRhdGFBdHRyaWJ1dGVzICE9PSAnb2JqZWN0JyB8fFxuICAgICAgQXJyYXkuaXNBcnJheShub3JtYWxpemVkQ29uZmlnLmRhdGFBdHRyaWJ1dGVzKSlcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEludmFsaWQgZGF0YUF0dHJpYnV0ZXMgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9Jy4gTXVzdCBiZSBhbiBvYmplY3Qgb3IgbnVsbC91bmRlZmluZWRgLFxuICAgICk7XG4gIH1cbiAgaWYgKFxuICAgIG5vcm1hbGl6ZWRDb25maWcuc3R5bGUgIT0gbnVsbCAmJlxuICAgICh0eXBlb2Ygbm9ybWFsaXplZENvbmZpZy5zdHlsZSAhPT0gJ29iamVjdCcgfHwgQXJyYXkuaXNBcnJheShub3JtYWxpemVkQ29uZmlnLnN0eWxlKSlcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHN0eWxlIGZvciBjb25maWcgJyR7Y29uZmlnS2V5fScuIE11c3QgYmUgYW4gb2JqZWN0IG9yIG51bGwvdW5kZWZpbmVkYCk7XG4gIH1cblxuICAvLyBWYWxpZGF0ZSBncmlkSW5zZXJ0aW9uVHlwZSBpZiBwcmVzZW50XG4gIGxldCBncmlkSW5zZXJ0aW9uVHlwZTtcbiAgaWYgKG5vcm1hbGl6ZWRDb25maWcuZ3JpZEluc2VydGlvblR5cGUpIHtcbiAgICBpZiAoXG4gICAgICB0eXBlb2Ygbm9ybWFsaXplZENvbmZpZy5ncmlkSW5zZXJ0aW9uVHlwZSAhPT0gJ3N0cmluZycgfHxcbiAgICAgICFub3JtYWxpemVkQ29uZmlnLmdyaWRJbnNlcnRpb25UeXBlXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZ3JpZEluc2VydGlvblR5cGUgZm9yIGNvbmZpZyAnJHtjb25maWdLZXl9Jy4gTXVzdCBiZSBhIHN0cmluZ2ApO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgICFPYmplY3QudmFsdWVzKEdyaWRJbnNlcnRpb25UeXBlKS5pbmNsdWRlcyhcbiAgICAgICAgbm9ybWFsaXplZENvbmZpZy5ncmlkSW5zZXJ0aW9uVHlwZSBhcyBHcmlkSW5zZXJ0aW9uVHlwZSxcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEludmFsaWQgZ3JpZEluc2VydGlvblR5cGUgJyR7bm9ybWFsaXplZENvbmZpZy5ncmlkSW5zZXJ0aW9uVHlwZX0nIGZvciBjb25maWcgJyR7Y29uZmlnS2V5fScuIFZhbGlkIHR5cGVzOiAke09iamVjdC52YWx1ZXMoR3JpZEluc2VydGlvblR5cGUpLmpvaW4oJywgJyl9YCxcbiAgICAgICk7XG4gICAgfVxuICAgIGdyaWRJbnNlcnRpb25UeXBlID0gbm9ybWFsaXplZENvbmZpZy5ncmlkSW5zZXJ0aW9uVHlwZSBhcyBHcmlkSW5zZXJ0aW9uVHlwZTtcbiAgfVxuXG4gIC8vIEJ1aWxkIHRoZSByZXR1cm4gb2JqZWN0LCBvbmx5IGluY2x1ZGluZyBvcHRpb25hbCBmaWVsZHMgaWYgdGhleSBoYXZlIHZhbHVlc1xuICBjb25zdCByZXN1bHQ6IFdpZGdldE1vdW50aW5nQ29uZmlnID0ge1xuICAgIG1vdW50aW5nQ29uZmlnSWQ6IG5vcm1hbGl6ZWRDb25maWcubW91bnRpbmdDb25maWdJZCxcbiAgICBjb250YWluZXJJZDogbm9ybWFsaXplZENvbmZpZy5jb250YWluZXJJZCxcbiAgICB0ZXN0SWQ6IG5vcm1hbGl6ZWRDb25maWcudGVzdElkLFxuICAgIGluc2VydGlvblBvaW50OiB7XG4gICAgICBzZWxlY3RvcjogaW5zZXJ0aW9uUG9pbnQuc2VsZWN0b3IsXG4gICAgICBpbnNlcnRpb25UeXBlOiBpbnNlcnRpb25Qb2ludC5pbnNlcnRpb25UeXBlIGFzIERPTUluc2VydGlvblR5cGUsXG4gICAgICAuLi4oaW5zZXJ0aW9uUG9pbnQuc2VsZWN0aW9uSW5kZXggIT0gbnVsbCAmJiB7XG4gICAgICAgIHNlbGVjdGlvbkluZGV4OiBpbnNlcnRpb25Qb2ludC5zZWxlY3Rpb25JbmRleCxcbiAgICAgIH0pLFxuICAgIH0sXG4gIH07XG5cbiAgLy8gT25seSBhZGQgb3B0aW9uYWwgZmllbGRzIGlmIHRoZXkgaGF2ZSB2YWx1ZXNcbiAgaWYgKHBhcmVudEluc2VydGlvblBvaW50KSB7XG4gICAgcmVzdWx0LnBhcmVudEluc2VydGlvblBvaW50ID0gcGFyZW50SW5zZXJ0aW9uUG9pbnQ7XG4gIH1cbiAgaWYgKGdyaWRJbnNlcnRpb25UeXBlKSB7XG4gICAgcmVzdWx0LmdyaWRJbnNlcnRpb25UeXBlID0gZ3JpZEluc2VydGlvblR5cGU7XG4gIH1cbiAgaWYgKHdyYXBwaW5nRWxlbWVudCkge1xuICAgIHJlc3VsdC53cmFwcGluZ0VsZW1lbnQgPSB3cmFwcGluZ0VsZW1lbnQ7XG4gIH1cbiAgaWYgKG5vcm1hbGl6ZWRDb25maWcuZGl2Q2hlY2tTZWxlY3Rvcikge1xuICAgIHJlc3VsdC5kaXZDaGVja1NlbGVjdG9yID0gbm9ybWFsaXplZENvbmZpZy5kaXZDaGVja1NlbGVjdG9yIGFzIHN0cmluZztcbiAgfVxuICBpZiAobm9ybWFsaXplZENvbmZpZy5jbGFzc05hbWUpIHtcbiAgICByZXN1bHQuY2xhc3NOYW1lID0gbm9ybWFsaXplZENvbmZpZy5jbGFzc05hbWUgYXMgc3RyaW5nO1xuICB9XG4gIGlmIChub3JtYWxpemVkQ29uZmlnLnN1cHByZXNzaW9uU2VsZWN0b3IpIHtcbiAgICByZXN1bHQuc3VwcHJlc3Npb25TZWxlY3RvciA9IG5vcm1hbGl6ZWRDb25maWcuc3VwcHJlc3Npb25TZWxlY3RvcjtcbiAgfVxuICBpZiAobm9ybWFsaXplZENvbmZpZy5kYXRhQXR0cmlidXRlcykge1xuICAgIHJlc3VsdC5kYXRhQXR0cmlidXRlcyA9IG5vcm1hbGl6ZWRDb25maWcuZGF0YUF0dHJpYnV0ZXMgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgfVxuICBpZiAobm9ybWFsaXplZENvbmZpZy5zdHlsZSkge1xuICAgIHJlc3VsdC5zdHlsZSA9IG5vcm1hbGl6ZWRDb25maWcuc3R5bGUgYXMgUGFydGlhbDxDU1NTdHlsZURlY2xhcmF0aW9uPjtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyBIZWxwZXIgZnVuY3Rpb24gdG8gdmFsaWRhdGUgYW5kIHRyYW5zZm9ybSBXaWRnZXRDb25maWdRdWVyeURhdGEgdG8gV2lkZ2V0Q29uZmlnXG5leHBvcnQgY29uc3QgdmFsaWRhdGVBbmRUcmFuc2Zvcm1XaWRnZXRDb25maWcgPSAoXG4gIGNvbmZpZzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIGNvbmZpZ0tleTogc3RyaW5nLFxuKTogV2lkZ2V0Q29uZmlnID0+IHtcbiAgY29uc3Qgbm9ybWFsaXplZENvbmZpZyA9IHRyYW5zZm9ybVNuYWtlVG9DYW1lbChjb25maWcpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIGlmICh0eXBlb2Ygbm9ybWFsaXplZENvbmZpZy53aWRnZXRDb25maWdJZCAhPT0gJ3N0cmluZycgfHwgIW5vcm1hbGl6ZWRDb25maWcud2lkZ2V0Q29uZmlnSWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3Npbmcgb3IgaW52YWxpZCB3aWRnZXRDb25maWdJZCBmb3Igd2lkZ2V0IGNvbmZpZyAnJHtjb25maWdLZXl9J2ApO1xuICB9XG4gIGlmICh0eXBlb2Ygbm9ybWFsaXplZENvbmZpZy50eXBlICE9PSAnc3RyaW5nJyB8fCAhbm9ybWFsaXplZENvbmZpZy50eXBlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIG9yIGludmFsaWQgdHlwZSBmb3Igd2lkZ2V0IGNvbmZpZyAnJHtjb25maWdLZXl9J2ApO1xuICB9XG5cbiAgaWYgKG5vcm1hbGl6ZWRDb25maWcuY29udGVudElkICE9IG51bGwgJiYgdHlwZW9mIG5vcm1hbGl6ZWRDb25maWcuY29udGVudElkICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBJbnZhbGlkIGNvbnRlbnRJZCBmb3Igd2lkZ2V0IGNvbmZpZyAnJHtjb25maWdLZXl9Jy4gTXVzdCBiZSBhIHN0cmluZyBvciBudWxsL3VuZGVmaW5lZGAsXG4gICAgKTtcbiAgfVxuXG4gIC8vIE5vdGU6IFdpZGdldCBjb25maWdzIGFyZSBjb21wbGV4IHVuaW9ucyB3aXRoIHR5cGUtc3BlY2lmaWMgcHJvcGVydGllcy5cblxuICAvLyBSZXR1cm4gdGhlIG5vcm1hbGl6ZWQgY29uZmlnIGFzIFdpZGdldENvbmZpZ1xuICAvLyBVc2UgaW50ZXJtZWRpYXRlICd1bmtub3duJyBjYXN0IGZvciBjb21wbGV4IHVuaW9uIHR5cGVzXG4gIHJldHVybiBub3JtYWxpemVkQ29uZmlnIGFzIHVua25vd24gYXMgV2lkZ2V0Q29uZmlnO1xufTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlR3JhcGhRTEZyb250ZW5kQ29uZmlnID0gKGRhdGE6IHVua25vd24pOiBGcm9udGVuZENvbmZpZyB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmIChkYXRhID09PSBudWxsIHx8IGRhdGEgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAodHlwZW9mIGRhdGEgIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcbiAgICBMb2dnZXIubG9nV2FybignSW52YWxpZCBHcmFwaFFMIGZyb250ZW5kIGNvbmZpZyBkYXRhOiBub3QgYW4gb2JqZWN0JywgdW5kZWZpbmVkLCB7IGRhdGEgfSk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IG9iaiA9IGRhdGEgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgLy8gVmFsaWRhdGUgbWVyY2hhbnRfb3ZlcnJpZGVfY3NzIGlmIHByZXNlbnRcbiAgaWYgKFxuICAgICdtZXJjaGFudF9vdmVycmlkZV9jc3MnIGluIG9iaiAmJlxuICAgIHR5cGVvZiBvYmoubWVyY2hhbnRfb3ZlcnJpZGVfY3NzICE9PSAnc3RyaW5nJyAmJlxuICAgIG9iai5tZXJjaGFudF9vdmVycmlkZV9jc3MgIT09IG51bGxcbiAgKSB7XG4gICAgTG9nZ2VyLmxvZ1dhcm4oXG4gICAgICAnSW52YWxpZCBHcmFwaFFMIGZyb250ZW5kIGNvbmZpZyBkYXRhOiBtZXJjaGFudF9vdmVycmlkZV9jc3MgbXVzdCBiZSBhIHN0cmluZyBvciBudWxsJyxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHsgZGF0YSB9LFxuICAgICk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8vIFZhbGlkYXRlIHBhZ2VfdmFyaWFudHMgaWYgcHJlc2VudFxuICBpZiAoJ3BhZ2VfdmFyaWFudHMnIGluIG9iaikge1xuICAgIGlmIChcbiAgICAgIG9iai5wYWdlX3ZhcmlhbnRzICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIG9iai5wYWdlX3ZhcmlhbnRzICE9PSBudWxsICYmXG4gICAgICAhQXJyYXkuaXNBcnJheShvYmoucGFnZV92YXJpYW50cylcbiAgICApIHtcbiAgICAgIExvZ2dlci5sb2dXYXJuKFxuICAgICAgICAnSW52YWxpZCBHcmFwaFFMIGZyb250ZW5kIGNvbmZpZyBkYXRhOiBwYWdlX3ZhcmlhbnRzIG11c3QgYmUgYW4gYXJyYXkgb3IgbnVsbC91bmRlZmluZWQnLFxuICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgIHsgZGF0YSB9LFxuICAgICAgKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgLy8gVmFsaWRhdGUgbW91bnRpbmdfY29uZmlncyBpZiBwcmVzZW50XG4gIGlmICgnbW91bnRpbmdfY29uZmlncycgaW4gb2JqKSB7XG4gICAgaWYgKFxuICAgICAgb2JqLm1vdW50aW5nX2NvbmZpZ3MgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgb2JqLm1vdW50aW5nX2NvbmZpZ3MgIT09IG51bGwgJiZcbiAgICAgICFBcnJheS5pc0FycmF5KG9iai5tb3VudGluZ19jb25maWdzKVxuICAgICkge1xuICAgICAgTG9nZ2VyLmxvZ1dhcm4oXG4gICAgICAgICdJbnZhbGlkIEdyYXBoUUwgZnJvbnRlbmQgY29uZmlnIGRhdGE6IG1vdW50aW5nX2NvbmZpZ3MgbXVzdCBiZSBhbiBhcnJheSBvciBudWxsL3VuZGVmaW5lZCcsXG4gICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgeyBkYXRhIH0sXG4gICAgICApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvLyBWYWxpZGF0ZSB3aWRnZXRfY29uZmlncyBpZiBwcmVzZW50XG4gIGlmICgnd2lkZ2V0X2NvbmZpZ3MnIGluIG9iaikge1xuICAgIGlmIChcbiAgICAgIG9iai53aWRnZXRfY29uZmlncyAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBvYmoud2lkZ2V0X2NvbmZpZ3MgIT09IG51bGwgJiZcbiAgICAgICFBcnJheS5pc0FycmF5KG9iai53aWRnZXRfY29uZmlncylcbiAgICApIHtcbiAgICAgIExvZ2dlci5sb2dXYXJuKFxuICAgICAgICAnSW52YWxpZCBHcmFwaFFMIGZyb250ZW5kIGNvbmZpZyBkYXRhOiB3aWRnZXRfY29uZmlncyBtdXN0IGJlIGFuIGFycmF5IG9yIG51bGwvdW5kZWZpbmVkJyxcbiAgICAgICAgdW5kZWZpbmVkLFxuICAgICAgICB7IGRhdGEgfSxcbiAgICAgICk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIC8vIFZhbGlkYXRlIHVpX2NvbmZpZ3MgaWYgcHJlc2VudFxuICBpZiAoJ3VpX2NvbmZpZ3MnIGluIG9iaiAmJiB0eXBlb2Ygb2JqLnVpX2NvbmZpZ3MgIT09ICdvYmplY3QnICYmIG9iai51aV9jb25maWdzICE9PSBudWxsKSB7XG4gICAgTG9nZ2VyLmxvZ1dhcm4oXG4gICAgICAnSW52YWxpZCBHcmFwaFFMIGZyb250ZW5kIGNvbmZpZyBkYXRhOiB1aV9jb25maWdzIG11c3QgYmUgYW4gb2JqZWN0IG9yIG51bGwvdW5kZWZpbmVkJyxcbiAgICAgIHVuZGVmaW5lZCxcbiAgICAgIHsgZGF0YSB9LFxuICAgICk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gVHJhbnNmb3JtIHRoZSBkYXRhIHRvIGNhbWVsQ2FzZVxuICAgIGNvbnN0IHRyYW5zZm9ybWVkRGF0YSA9IHRyYW5zZm9ybVNuYWtlVG9DYW1lbChvYmopIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gICAgLy8gQ29udmVydCBwYWdlX3ZhcmlhbnRzIGZyb20gYXJyYXkgdG8gdmFsaWRhdGVkIGFycmF5IGlmIHByZXNlbnRcbiAgICBpZiAodHJhbnNmb3JtZWREYXRhLnBhZ2VWYXJpYW50cyAmJiBBcnJheS5pc0FycmF5KHRyYW5zZm9ybWVkRGF0YS5wYWdlVmFyaWFudHMpKSB7XG4gICAgICBjb25zdCBwYWdlVmFyaWFudHNBcnJheSA9IHRyYW5zZm9ybWVkRGF0YS5wYWdlVmFyaWFudHM7XG4gICAgICBjb25zdCB2YWxpZGF0ZWRQYWdlVmFyaWFudHM6IFBhZ2VWYXJpYW50Q29uZmlnW10gPSBbXTtcblxuICAgICAgZm9yIChjb25zdCB2YXJpYW50IG9mIHBhZ2VWYXJpYW50c0FycmF5KSB7XG4gICAgICAgIGlmICh2YXJpYW50ICYmIHR5cGVvZiB2YXJpYW50ID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFyaWFudC52YXJpYW50SWQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRlZFZhcmlhbnQgPSB2YWxpZGF0ZUFuZFRyYW5zZm9ybVBhZ2VWYXJpYW50cyh2YXJpYW50KTtcbiAgICAgICAgICAgIHZhbGlkYXRlZFBhZ2VWYXJpYW50cy5wdXNoKHZhbGlkYXRlZFZhcmlhbnQpO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBMb2dnZXIubG9nV2FybignSW52YWxpZCBwYWdlIHZhcmlhbnQsIHNraXBwaW5nJywgZXJyb3IsIHtcbiAgICAgICAgICAgICAgdmFyaWFudElkOiB2YXJpYW50LnZhcmlhbnRJZCxcbiAgICAgICAgICAgICAgdmFyaWFudCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gQ29udGludWUgcHJvY2Vzc2luZyBvdGhlciB2YXJpYW50c1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBMb2dnZXIubG9nV2FybignSW52YWxpZCBwYWdlIHZhcmlhbnQgc3RydWN0dXJlLCBza2lwcGluZycsIHVuZGVmaW5lZCwgeyB2YXJpYW50IH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRyYW5zZm9ybWVkRGF0YS5wYWdlVmFyaWFudHMgPSB2YWxpZGF0ZWRQYWdlVmFyaWFudHM7XG4gICAgfVxuXG4gICAgLy8gQ29udmVydCBtb3VudGluZ19jb25maWdzIGZyb20gYXJyYXkgdG8gUmVjb3JkIGlmIHByZXNlbnRcbiAgICBpZiAodHJhbnNmb3JtZWREYXRhLm1vdW50aW5nQ29uZmlncyAmJiBBcnJheS5pc0FycmF5KHRyYW5zZm9ybWVkRGF0YS5tb3VudGluZ0NvbmZpZ3MpKSB7XG4gICAgICBjb25zdCBtb3VudGluZ0NvbmZpZ3NBcnJheSA9IHRyYW5zZm9ybWVkRGF0YS5tb3VudGluZ0NvbmZpZ3MgYXMgQXJyYXk8e1xuICAgICAgICBrZXk6IHN0cmluZztcbiAgICAgICAgY29uZmlnOiB1bmtub3duO1xuICAgICAgfT47XG4gICAgICBjb25zdCBtb3VudGluZ0NvbmZpZ3NSZWNvcmQ6IFJlY29yZDxzdHJpbmcsIFdpZGdldE1vdW50aW5nQ29uZmlnPiA9IHt9O1xuXG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgbW91bnRpbmdDb25maWdzQXJyYXkpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGl0ZW0gJiZcbiAgICAgICAgICB0eXBlb2YgaXRlbS5rZXkgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgaXRlbS5jb25maWcgJiZcbiAgICAgICAgICB0eXBlb2YgaXRlbS5jb25maWcgPT09ICdvYmplY3QnXG4gICAgICAgICkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBWYWxpZGF0ZSBhbmQgdHJhbnNmb3JtIHRoZSBjb25maWcgc3RydWN0dXJlXG4gICAgICAgICAgICBjb25zdCBjb25maWcgPSBpdGVtLmNvbmZpZyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgICAgICAgIGNvbnN0IHZhbGlkYXRlZENvbmZpZyA9IHZhbGlkYXRlQW5kVHJhbnNmb3JtTW91bnRpbmdDb25maWcoY29uZmlnLCBpdGVtLmtleSk7XG4gICAgICAgICAgICBtb3VudGluZ0NvbmZpZ3NSZWNvcmRbaXRlbS5rZXldID0gdmFsaWRhdGVkQ29uZmlnO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBMb2dnZXIubG9nV2FybignSW52YWxpZCBtb3VudGluZyBjb25maWcsIHNraXBwaW5nJywgZXJyb3IsIHtcbiAgICAgICAgICAgICAgY29uZmlnS2V5OiBpdGVtLmtleSxcbiAgICAgICAgICAgICAgY29uZmlnOiBpdGVtLmNvbmZpZyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gQ29udGludWUgcHJvY2Vzc2luZyBvdGhlciBjb25maWdzXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIExvZ2dlci5sb2dXYXJuKCdJbnZhbGlkIG1vdW50aW5nIGNvbmZpZyBpdGVtIHN0cnVjdHVyZSwgc2tpcHBpbmcnLCB1bmRlZmluZWQsIHsgaXRlbSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0cmFuc2Zvcm1lZERhdGEubW91bnRpbmdDb25maWdzID0gbW91bnRpbmdDb25maWdzUmVjb3JkO1xuICAgIH1cblxuICAgIC8vIENvbnZlcnQgd2lkZ2V0X2NvbmZpZ3MgZnJvbSBhcnJheSB0byBSZWNvcmQgaWYgcHJlc2VudFxuICAgIGlmICh0cmFuc2Zvcm1lZERhdGEud2lkZ2V0Q29uZmlncyAmJiBBcnJheS5pc0FycmF5KHRyYW5zZm9ybWVkRGF0YS53aWRnZXRDb25maWdzKSkge1xuICAgICAgY29uc3Qgd2lkZ2V0Q29uZmlnc0FycmF5ID0gdHJhbnNmb3JtZWREYXRhLndpZGdldENvbmZpZ3MgYXMgQXJyYXk8e1xuICAgICAgICBrZXk6IHN0cmluZztcbiAgICAgICAgY29uZmlnOiB1bmtub3duO1xuICAgICAgfT47XG4gICAgICBjb25zdCB3aWRnZXRDb25maWdzUmVjb3JkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygd2lkZ2V0Q29uZmlnc0FycmF5KSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBpdGVtICYmXG4gICAgICAgICAgdHlwZW9mIGl0ZW0ua2V5ID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAgIGl0ZW0uY29uZmlnICYmXG4gICAgICAgICAgdHlwZW9mIGl0ZW0uY29uZmlnID09PSAnb2JqZWN0J1xuICAgICAgICApIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gVmFsaWRhdGUgYW5kIHRyYW5zZm9ybSB3aWRnZXQgY29uZmlnIHVzaW5nIHRoZSBkZWRpY2F0ZWQgdmFsaWRhdGlvbiBmdW5jdGlvblxuICAgICAgICAgICAgY29uc3QgY29uZmlnID0gaXRlbS5jb25maWcgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gICAgICAgICAgICBjb25zdCB2YWxpZGF0ZWRDb25maWcgPSB2YWxpZGF0ZUFuZFRyYW5zZm9ybVdpZGdldENvbmZpZyhjb25maWcsIGl0ZW0ua2V5KTtcbiAgICAgICAgICAgIHdpZGdldENvbmZpZ3NSZWNvcmRbaXRlbS5rZXldID0gdmFsaWRhdGVkQ29uZmlnO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICBMb2dnZXIubG9nV2FybignSW52YWxpZCB3aWRnZXQgY29uZmlnLCBza2lwcGluZycsIGVycm9yLCB7XG4gICAgICAgICAgICAgIGNvbmZpZ0tleTogaXRlbS5rZXksXG4gICAgICAgICAgICAgIGNvbmZpZzogaXRlbS5jb25maWcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIENvbnRpbnVlIHByb2Nlc3Npbmcgb3RoZXIgY29uZmlnc1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBMb2dnZXIubG9nV2FybignSW52YWxpZCB3aWRnZXQgY29uZmlnIGl0ZW0gc3RydWN0dXJlLCBza2lwcGluZycsIHVuZGVmaW5lZCwgeyBpdGVtIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRyYW5zZm9ybWVkRGF0YS53aWRnZXRDb25maWdzID0gd2lkZ2V0Q29uZmlnc1JlY29yZDtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJhbnNmb3JtZWREYXRhIGFzIEZyb250ZW5kQ29uZmlnO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIExvZ2dlci5sb2dXYXJuKCdGYWlsZWQgdG8gdmFsaWRhdGUgYW5kIHRyYW5zZm9ybSBHcmFwaFFMIGZyb250ZW5kIGNvbmZpZyBkYXRhJywgZXJyb3IsIHtcbiAgICAgIGRhdGEsXG4gICAgfSk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufTtcbiIsImV4cG9ydCBjb25zdCB2YWxpZGF0ZUdyYXBoUUxPcmdJZCA9IChkYXRhOiB1bmtub3duKTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKHR5cGVvZiBkYXRhICE9PSAnc3RyaW5nJyB8fCBkYXRhID09PSAnJykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gZGF0YTtcbn07XG4iLCJpbXBvcnQgeyBpc01vYmlsZVBMUENoYXRQbGFjZW1lbnRQYXJhbWV0ZXIgfSBmcm9tICcuLi9ndWFyZHMvaXNNb2JpbGVQTFBDaGF0UGxhY2VtZW50UGFyYW1ldGVyJztcbmludGVyZmFjZSBNb2JpbGVQbHBDaGF0UGxhY2VtZW50UGFyYW1ldGVyIHtcbiAgcm93X2luZGV4OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZU1vYmlsZVBMUENoYXRQbGFjZW1lbnRQYXJhbWV0ZXIgPSAoXG4gIHZhbHVlOiB1bmtub3duLFxuKTogTW9iaWxlUGxwQ2hhdFBsYWNlbWVudFBhcmFtZXRlciB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmICghaXNNb2JpbGVQTFBDaGF0UGxhY2VtZW50UGFyYW1ldGVyKHZhbHVlKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHJvd19pbmRleDogdmFsdWUucm93X2luZGV4LFxuICB9O1xufTtcbiIsImltcG9ydCB7IE9yZ2FuaXphdGlvbkNvbmZpZyB9IGZyb20gXCJAZW52aXZlLWFpL3R5cGVzXCI7XG5pbXBvcnQgeyBpc0FwaU9yZ2FuaXphdGlvbkNvbmZpZyB9IGZyb20gXCIuLi9ndWFyZHMvYXBpL2lzQXBpT3JnYW5pemF0aW9uQ29uZmlnLmpzXCI7XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZU9yZ2FuaXphdGlvbkNvbmZpZyA9IChcbiAgZGF0YTogdW5rbm93blxuKTogT3JnYW5pemF0aW9uQ29uZmlnIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKCFpc0FwaU9yZ2FuaXphdGlvbkNvbmZpZyhkYXRhKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGlkOiBkYXRhLmlkLFxuICAgIGNyZWF0ZWRBdDogZGF0YS5jcmVhdGVkQXQsXG4gICAgbmFtZXNwYWNlOiBkYXRhLm5hbWVzcGFjZSxcbiAgICBvcmdhbml6YXRpb25JZDogZGF0YS5vcmdhbml6YXRpb25JZCxcbiAgICBpc0xhdGVzdDogZGF0YS5pc0xhdGVzdCxcbiAgICB2ZXJzaW9uOiBkYXRhLnZlcnNpb24sXG4gICAgdXBkYXRlZEF0OiBkYXRhLnVwZGF0ZWRBdCxcbiAgICBjb25maWc6IHtcbiAgICAgIGFtcGxpdHVkZTogZGF0YS5jb25maWcuYW1wbGl0dWRlXG4gICAgICAgID8ge1xuICAgICAgICAgICAgc2Vzc2lvblJlcGxheUVuYWJsZWQ6IGRhdGEuY29uZmlnLmFtcGxpdHVkZS5zZXNzaW9uX3JlcGxheV9lbmFibGVkLFxuICAgICAgICAgICAgc2Vzc2lvblJlcGxheVNhbXBsZVJhdGU6XG4gICAgICAgICAgICAgIGRhdGEuY29uZmlnLmFtcGxpdHVkZS5zZXNzaW9uX3JlcGxheV9zYW1wbGVfcmF0ZSxcbiAgICAgICAgICAgIHRyYWNraW5nRW5hYmxlZDogZGF0YS5jb25maWcuYW1wbGl0dWRlLnRyYWNraW5nX2VuYWJsZWQsXG4gICAgICAgICAgfVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIGN1c3RvbWVyU2VydmljZTogZGF0YS5jb25maWcuY3VzdG9tZXJfc2VydmljZVxuICAgICAgICA/IHtcbiAgICAgICAgICAgIHByb3ZpZGVyOiBkYXRhLmNvbmZpZy5jdXN0b21lcl9zZXJ2aWNlLnByb3ZpZGVyLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICBnb29nbGVBbmFseXRpY3M6IGRhdGEuY29uZmlnLmdvb2dsZV9hbmFseXRpY3NcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBtZWFzdXJlbWVudElkOiBkYXRhLmNvbmZpZy5nb29nbGVfYW5hbHl0aWNzLm1lYXN1cmVtZW50X2lkLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgfSxcbiAgfTtcbn07XG4iLCJpbXBvcnQgeyBPcmdhbml6YXRpb25Db25maWcsIE9yZ0NvbmZpZyB9IGZyb20gXCJAZW52aXZlLWFpL3R5cGVzXCI7XG5pbXBvcnQgeyBpc0FwaU9yZ0NvbmZpZ1Jlc3VsdHMgfSBmcm9tIFwiLi4vZ3VhcmRzL2FwaS9pc0FwaU9yZ0NvbmZpZ1Jlc3VsdHNcIjtcbmltcG9ydCB7IHZhbGlkYXRlT3JnYW5pemF0aW9uQ29uZmlnIH0gZnJvbSBcIi4vdmFsaWRhdGVPcmdhbml6YXRpb25Db25maWdcIjtcblxuLyoqXG4gKlxuICogQHBhcmFtIGRhdGFcbiAqIEByZXR1cm5zXG4gKi9cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZU9yZ0NvbmZpZ1Jlc3VsdHMgPSAoXG4gIGRhdGE6IHVua25vd25cbik6IE9yZ0NvbmZpZyB8IHVuZGVmaW5lZCA9PiB7XG4gIGlmICghaXNBcGlPcmdDb25maWdSZXN1bHRzKGRhdGEpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY29uZmlnczogZGF0YS5jb25maWdzXG4gICAgICAubWFwKChjb25maWcpID0+IHZhbGlkYXRlT3JnYW5pemF0aW9uQ29uZmlnKGNvbmZpZykpXG4gICAgICAuZmlsdGVyKChjb25maWcpOiBjb25maWcgaXMgT3JnYW5pemF0aW9uQ29uZmlnID0+IGNvbmZpZyAhPSBudWxsKSxcbiAgICBleHBlcmltZW50czogZGF0YS5leHBlcmltZW50cy5tYXAoKGV4cGVyaW1lbnQpID0+ICh7XG4gICAgICBncm91cDogZXhwZXJpbWVudC5ncm91cCxcbiAgICAgIGdyb3VwTmFtZTogZXhwZXJpbWVudC5ncm91cF9uYW1lLFxuICAgICAgbmFtZTogZXhwZXJpbWVudC5uYW1lLFxuICAgICAgcnVsZUlkOiBleHBlcmltZW50LnJ1bGVfaWQsXG4gICAgICAvLyBUT0RPIHRoaXMgbmVlZHMgdG8gYmUgc3Ryb25nbHkgdHlwZWQgYnV0IHdlJ3JlIG5vdCBydW5uaW5nIGFueSBleHBlcmltZW50cyBhdCB0aGUgbW9tZW50XG4gICAgICB2YWx1ZTogZXhwZXJpbWVudC52YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICB9KSksXG4gICAgZ2F0ZXM6IGRhdGEuZ2F0ZXMubWFwKChnYXRlKSA9PiAoe1xuICAgICAgZ3JvdXBOYW1lOiBnYXRlLmdyb3VwX25hbWUsXG4gICAgICBuYW1lOiBnYXRlLm5hbWUsXG4gICAgICBydWxlSWQ6IGdhdGUucnVsZV9pZCxcbiAgICAgIHZhbHVlOiBnYXRlLnZhbHVlLFxuICAgIH0pKSxcbiAgICBvcmc6IHtcbiAgICAgIG9yZzoge1xuICAgICAgICBpZDogZGF0YS5vcmcub3JnLmlkLFxuICAgICAgICBkaXNwbGF5TmFtZTogZGF0YS5vcmcub3JnLmRpc3BsYXlfbmFtZSxcbiAgICAgICAgZG9tYWluOiBkYXRhLm9yZy5vcmcuZG9tYWluLFxuICAgICAgICBzaG9ydE5hbWU6IGRhdGEub3JnLm9yZy5zaG9ydF9uYW1lLFxuICAgICAgICBzdGF0dXM6IGRhdGEub3JnLm9yZy5zdGF0dXMsXG4gICAgICAgIGNyZWF0ZWRBdDogZGF0YS5vcmcub3JnLmNyZWF0ZWRfYXQ/LnRvSVNPU3RyaW5nKCksXG4gICAgICAgIHVwZGF0ZWRBdDogZGF0YS5vcmcub3JnLnVwZGF0ZWRfYXQ/LnRvSVNPU3RyaW5nKCksXG4gICAgICB9LFxuICAgICAgc2V0dGluZ3M6IHt9LFxuICAgIH0sXG4gIH07XG59O1xuIiwiaW1wb3J0IHsgUmVzcG9uc2VDYXRlZ29yeSB9IGZyb20gXCJAc3BpZmZ5LWFpL2NvbW1lcmNlLWFwaS1jbGllbnRcIjtcbmltcG9ydCB7XG4gIEFwaVJlc3BvbnNlLFxuICBSZXZpZXdSaWNoSW5mb3JtYXRpb24sXG4gIEFwaVJldmlld1JpY2hJbmZvcm1hdGlvbixcbn0gZnJvbSBcIkBlbnZpdmUtYWkvdHlwZXNcIjtcbmltcG9ydCB7IGlzQXBpUGFnZVJlc3BvbnNlQXR0cmlidXRlcyB9IGZyb20gXCJzcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9hcGkvaXNBcGlQYWdlUmVzcG9uc2VBdHRyaWJ1dGVzXCI7XG5pbXBvcnQgeyBpc0FwaVByb2R1Y3RSZXNwb25zZUF0dHJpYnV0ZXMgfSBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpUHJvZHVjdFJlc3BvbnNlQXR0cmlidXRlc1wiO1xuaW1wb3J0IHsgaXNBcGlSZXNwb25zZSB9IGZyb20gXCJzcmMvYXBwbGljYXRpb24vbW9kZWxzL2d1YXJkcy9hcGkvaXNBcGlSZXNwb25zZVwiO1xuaW1wb3J0IHsgaXNBcGlSZXZpZXdSZXNwb25zZUF0dHJpYnV0ZXMgfSBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpUmV2aWV3UmVzcG9uc2VBdHRyaWJ1dGVzXCI7XG5pbXBvcnQgeyBpc0FwaVRleHRSZXNwb25zZUF0dHJpYnV0ZXMgfSBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpVGV4dFJlc3BvbnNlQXR0cmlidXRlc1wiO1xuaW1wb3J0IHsgaXNBcGlQcm9kdWN0U2VhcmNoUmVzcG9uc2VBdHRyaWJ1dGVzIH0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2FwaS9pc0FwaVByb2R1Y3RTZWFyY2hBdHRyaWJ1dGVzXCI7XG5pbXBvcnQgeyBpc0FwaUZvcm1SZXNwb25zZUF0dHJpYnV0ZXMgfSBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpRm9ybVJlc3BvbnNlXCI7XG5pbXBvcnQgeyBpc0FwaU9yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzIH0gZnJvbSBcInNyYy9hcHBsaWNhdGlvbi9tb2RlbHMvZ3VhcmRzL2FwaS9pc0FwaU9yZGVyUmVzcG9uc2VBdHRyaWJ1dGVzXCI7XG5pbXBvcnQgeyBzdHJpbmdUb0Z1bGZpbGxtZW50RGlzcGxheVN0YXR1c0VudW1WYWx1ZSB9IGZyb20gXCJzcmMvYXBwbGljYXRpb24vbW9kZWxzL3V0aWxzL3N0cmluZ1RvRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzRW51bVZhbHVlXCI7XG5pbXBvcnQgeyBpc0FwaVByb2R1Y3RTZWFyY2hGaWx0ZXJSZXNwb25zZUF0dHJpYnV0ZXMgfSBmcm9tIFwic3JjL2FwcGxpY2F0aW9uL21vZGVscy9ndWFyZHMvYXBpL2lzQXBpUHJvZHVjdFNlYXJjaEZpbHRlckF0dHJpYnV0ZXNcIjtcblxuY29uc3QgcmljaEluZm9ybWF0aW9uRnJvbUNvbW1lcmNlUmljaEluZm9ybWF0aW9uID0gKFxuICBkYXRhOiBBcGlSZXZpZXdSaWNoSW5mb3JtYXRpb25cbik6IFJldmlld1JpY2hJbmZvcm1hdGlvbiA9PiAoe1xuICBjb25zOiBkYXRhLmNvbnMsXG4gIHByb3M6IGRhdGEucHJvcyxcbiAgcmV2aWV3RGF0ZTogZGF0YS5yZXZpZXdfZGF0ZSxcbiAgcmV2aWV3ZXJUaXRsZTogZGF0YS5yZXZpZXdlcl90aXRsZSxcbiAgcHJvZHVjdEZhbWlsaWFyaXR5OiBkYXRhLnByb2R1Y3RfZmFtaWxpYXJpdHksXG59KTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlUmVzcG9uc2UgPSAoZGF0YTogdW5rbm93bik6IEFwaVJlc3BvbnNlIHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKCFpc0FwaVJlc3BvbnNlKGRhdGEpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGlmIChcbiAgICBkYXRhLmNhdGVnb3J5ID09PSBSZXNwb25zZUNhdGVnb3J5LlRleHQgJiZcbiAgICBpc0FwaVRleHRSZXNwb25zZUF0dHJpYnV0ZXMoZGF0YS5hdHRyaWJ1dGVzKVxuICApIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGRhdGEuaWQsXG4gICAgICBjcmVhdGVkQXQ6IGRhdGEuY3JlYXRlZEF0LFxuICAgICAgY2F0ZWdvcnk6IFJlc3BvbnNlQ2F0ZWdvcnkuVGV4dCxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgY29udGVudDogZGF0YS5hdHRyaWJ1dGVzLmNvbnRlbnQsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBpZiAoXG4gICAgZGF0YS5jYXRlZ29yeSA9PT0gUmVzcG9uc2VDYXRlZ29yeS5Qcm9kdWN0ICYmXG4gICAgaXNBcGlQcm9kdWN0UmVzcG9uc2VBdHRyaWJ1dGVzKGRhdGEuYXR0cmlidXRlcylcbiAgKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBkYXRhLmlkLFxuICAgICAgY3JlYXRlZEF0OiBkYXRhLmNyZWF0ZWRBdCxcbiAgICAgIGNhdGVnb3J5OiBSZXNwb25zZUNhdGVnb3J5LlByb2R1Y3QsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIGlkOiBkYXRhLmF0dHJpYnV0ZXMuaWQsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBkYXRhLmF0dHJpYnV0ZXMuZGVzY3JpcHRpb24sXG4gICAgICAgIGltYWdlVXJsOiBkYXRhLmF0dHJpYnV0ZXMuaW1hZ2VVcmwsXG4gICAgICAgIGltYWdlVXJsczogZGF0YS5hdHRyaWJ1dGVzLmltYWdlVXJscyxcbiAgICAgICAgdGl0bGU6IGRhdGEuYXR0cmlidXRlcy50aXRsZSxcbiAgICAgICAgdXJsOiBkYXRhLmF0dHJpYnV0ZXMudXJsLFxuICAgICAgICBvcmlnaW5hbFByaWNlOiBkYXRhLmF0dHJpYnV0ZXMub3JpZ2luYWxQcmljZSxcbiAgICAgICAgc2FsZVByaWNlOiBkYXRhLmF0dHJpYnV0ZXMuc2FsZVByaWNlLFxuICAgICAgICBhdmVyYWdlUmF0aW5nOiBkYXRhLmF0dHJpYnV0ZXMuYXZlcmFnZVJhdGluZyxcbiAgICAgICAgbnVtYmVyUmV2aWV3czogZGF0YS5hdHRyaWJ1dGVzLm51bWJlclJldmlld3MsXG4gICAgICAgIG1ldGFkYXRhOiBkYXRhLmF0dHJpYnV0ZXMubWV0YWRhdGEsXG4gICAgICAgIGlzRm9yR3JpZDogZGF0YS5hdHRyaWJ1dGVzLmlzRm9yR3JpZCxcbiAgICAgICAgY29sb3JzOiBkYXRhLmF0dHJpYnV0ZXMuY29sb3JzLFxuICAgICAgICBzaXplczogZGF0YS5hdHRyaWJ1dGVzLnNpemVzLFxuICAgICAgICBmaWx0ZXJzOiBkYXRhLmF0dHJpYnV0ZXMuZmlsdGVycyxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGlmIChcbiAgICBkYXRhLmNhdGVnb3J5ID09PSBSZXNwb25zZUNhdGVnb3J5LlJldmlldyAmJlxuICAgIGlzQXBpUmV2aWV3UmVzcG9uc2VBdHRyaWJ1dGVzKGRhdGEuYXR0cmlidXRlcylcbiAgKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBkYXRhLmlkLFxuICAgICAgY3JlYXRlZEF0OiBkYXRhLmNyZWF0ZWRBdCxcbiAgICAgIGNhdGVnb3J5OiBSZXNwb25zZUNhdGVnb3J5LlJldmlldyxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgaWQ6IGRhdGEuYXR0cmlidXRlcy5pZCxcbiAgICAgICAgcHJvZHVjdElkOiBkYXRhLmF0dHJpYnV0ZXMucHJvZHVjdElkLFxuICAgICAgICB0aXRsZTogZGF0YS5hdHRyaWJ1dGVzLnRpdGxlLFxuICAgICAgICByZXZpZXdlcjogZGF0YS5hdHRyaWJ1dGVzLnJldmlld2VyLFxuICAgICAgICByZXZpZXc6IGRhdGEuYXR0cmlidXRlcy5yZXZpZXcsXG4gICAgICAgIHN0YXJzOiBkYXRhLmF0dHJpYnV0ZXMuc3RhcnMsXG4gICAgICAgIHJpY2hJbmZvcm1hdGlvbjogZGF0YS5hdHRyaWJ1dGVzLnJpY2hJbmZvcm1hdGlvblxuICAgICAgICAgID8gcmljaEluZm9ybWF0aW9uRnJvbUNvbW1lcmNlUmljaEluZm9ybWF0aW9uKFxuICAgICAgICAgICAgICBkYXRhLmF0dHJpYnV0ZXMucmljaEluZm9ybWF0aW9uXG4gICAgICAgICAgICApXG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBpZiAoZGF0YS5jYXRlZ29yeSA9PT0gUmVzcG9uc2VDYXRlZ29yeS5TZXBhcmF0b3IpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGRhdGEuaWQsXG4gICAgICBjcmVhdGVkQXQ6IGRhdGEuY3JlYXRlZEF0LFxuICAgICAgY2F0ZWdvcnk6IFJlc3BvbnNlQ2F0ZWdvcnkuU2VwYXJhdG9yLFxuICAgIH07XG4gIH1cblxuICBpZiAoXG4gICAgZGF0YS5jYXRlZ29yeSA9PT0gUmVzcG9uc2VDYXRlZ29yeS5QYWdlICYmXG4gICAgaXNBcGlQYWdlUmVzcG9uc2VBdHRyaWJ1dGVzKGRhdGEuYXR0cmlidXRlcylcbiAgKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBkYXRhLmlkLFxuICAgICAgY3JlYXRlZEF0OiBkYXRhLmNyZWF0ZWRBdCxcbiAgICAgIGNhdGVnb3J5OiBSZXNwb25zZUNhdGVnb3J5LlBhZ2UsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIGlkOiBkYXRhLmF0dHJpYnV0ZXMuaWQsXG4gICAgICAgIHRpdGxlOiBkYXRhLmF0dHJpYnV0ZXMudGl0bGUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBkYXRhLmF0dHJpYnV0ZXMuZGVzY3JpcHRpb24sXG4gICAgICAgIHVybDogZGF0YS5hdHRyaWJ1dGVzLnVybCxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIGlmIChcbiAgICBkYXRhLmNhdGVnb3J5ID09PSBSZXNwb25zZUNhdGVnb3J5LkZvcm0gJiZcbiAgICBpc0FwaUZvcm1SZXNwb25zZUF0dHJpYnV0ZXMoZGF0YS5hdHRyaWJ1dGVzKVxuICApIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGRhdGEuaWQsXG4gICAgICBjcmVhdGVkQXQ6IGRhdGEuY3JlYXRlZEF0LFxuICAgICAgY2F0ZWdvcnk6IFJlc3BvbnNlQ2F0ZWdvcnkuRm9ybSxcbiAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgZm9ybUNhdGVnb3J5OiBkYXRhLmF0dHJpYnV0ZXMuZm9ybUNhdGVnb3J5XG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGZvcm1UeXBlOiBkYXRhLmF0dHJpYnV0ZXMuZm9ybUNhdGVnb3J5LmZvcm1UeXBlLFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICBzY2hlbWE6IHtcbiAgICAgICAgICBwcm9wZXJ0aWVzOiBkYXRhLmF0dHJpYnV0ZXMuc2NoZW1hLnByb3BlcnRpZXMsXG4gICAgICAgICAgcmVxdWlyZWQ6IGRhdGEuYXR0cmlidXRlcy5zY2hlbWEucmVxdWlyZWQubWFwKFN0cmluZyksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBpZiAoXG4gICAgZGF0YS5jYXRlZ29yeSA9PT0gUmVzcG9uc2VDYXRlZ29yeS5Qcm9kdWN0U2VhcmNoICYmXG4gICAgaXNBcGlQcm9kdWN0U2VhcmNoUmVzcG9uc2VBdHRyaWJ1dGVzKGRhdGEuYXR0cmlidXRlcylcbiAgKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiBkYXRhLmlkLFxuICAgICAgY3JlYXRlZEF0OiBkYXRhLmNyZWF0ZWRBdCxcbiAgICAgIGNhdGVnb3J5OiBSZXNwb25zZUNhdGVnb3J5LlByb2R1Y3RTZWFyY2gsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIGdlbmVyYXRlZFF1ZXJ5OiBkYXRhLmF0dHJpYnV0ZXMuZ2VuZXJhdGVkX3F1ZXJ5LFxuICAgICAgICBwcm9kdWN0Q291bnQ6IGRhdGEuYXR0cmlidXRlcy5wcm9kdWN0X2NvdW50LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKFxuICAgIGRhdGEuY2F0ZWdvcnkgPT09IFJlc3BvbnNlQ2F0ZWdvcnkuUHJvZHVjdFNlYXJjaEZpbHRlciAmJlxuICAgIGlzQXBpUHJvZHVjdFNlYXJjaEZpbHRlclJlc3BvbnNlQXR0cmlidXRlcyhkYXRhLmF0dHJpYnV0ZXMpXG4gICkge1xuICAgIHJldHVybiB7XG4gICAgICBpZDogZGF0YS5pZCxcbiAgICAgIGNyZWF0ZWRBdDogZGF0YS5jcmVhdGVkQXQsXG4gICAgICBjYXRlZ29yeTogUmVzcG9uc2VDYXRlZ29yeS5Qcm9kdWN0U2VhcmNoRmlsdGVyLFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBmaWx0ZXJOYW1lOiBkYXRhLmF0dHJpYnV0ZXMuZmlsdGVyX25hbWUsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBpZiAoXG4gICAgZGF0YS5jYXRlZ29yeSA9PT0gUmVzcG9uc2VDYXRlZ29yeS5PcmRlciAmJlxuICAgIGlzQXBpT3JkZXJSZXNwb25zZUF0dHJpYnV0ZXMoZGF0YS5hdHRyaWJ1dGVzKVxuICApIHtcbiAgICByZXR1cm4ge1xuICAgICAgaWQ6IGRhdGEuaWQsXG4gICAgICBjcmVhdGVkQXQ6IGRhdGEuY3JlYXRlZEF0LFxuICAgICAgY2F0ZWdvcnk6IFJlc3BvbnNlQ2F0ZWdvcnkuT3JkZXIsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIG9yZGVySWQ6IGRhdGEuYXR0cmlidXRlcy5vcmRlcklkLFxuICAgICAgICBvcmRlck51bWJlcjogZGF0YS5hdHRyaWJ1dGVzLm9yZGVyTnVtYmVyLFxuICAgICAgICBjcmVhdGVkQXQ6IGRhdGEuYXR0cmlidXRlcy5jcmVhdGVkX2F0LFxuICAgICAgICBsYXRlc3RFdmVudERhdGU6IGRhdGEuYXR0cmlidXRlcy5sYXRlc3RfZXZlbnRfZGF0ZSxcbiAgICAgICAgbGluZUl0ZW1zOiBkYXRhLmF0dHJpYnV0ZXMubGluZV9pdGVtcy5tYXAoKGl0ZW0pID0+ICh7XG4gICAgICAgICAgaXRlbVRpdGxlOiBpdGVtLml0ZW1fdGl0bGUsXG4gICAgICAgICAgaXRlbVByaWNlOiBpdGVtLml0ZW1fcHJpY2UsXG4gICAgICAgICAgaXRlbVF1YW50aXR5OiBpdGVtLml0ZW1fcXVhbnRpdHksXG4gICAgICAgICAgb3JkZXJJdGVtSWQ6IGl0ZW0ub3JkZXJfaXRlbV9pZCxcbiAgICAgICAgICBpbWFnZTogaXRlbS5pbWFnZSA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgaW5UcmFuc2l0QXQ6IGl0ZW0uaW5fdHJhbnNpdF9hdCA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgZGVsaXZlcmVkQXQ6IGl0ZW0uZGVsaXZlcmVkX2F0ID8/IHVuZGVmaW5lZCxcbiAgICAgICAgICBlc3RpbWF0ZWREZWxpdmVyeUF0OiBpdGVtLmVzdGltYXRlZF9kZWxpdmVyeV9hdCA/PyB1bmRlZmluZWQsXG4gICAgICAgICAgZnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzOiBpdGVtLmZ1bGZpbGxtZW50X2Rpc3BsYXlfc3RhdHVzXG4gICAgICAgICAgICA/IHN0cmluZ1RvRnVsZmlsbG1lbnREaXNwbGF5U3RhdHVzRW51bVZhbHVlKFxuICAgICAgICAgICAgICAgIGl0ZW0uZnVsZmlsbG1lbnRfZGlzcGxheV9zdGF0dXNcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICAgICAgdHJhY2tpbmdVcmw6IGl0ZW0udHJhY2tpbmdfdXJsID8/IHVuZGVmaW5lZCxcbiAgICAgICAgfSkpLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn07XG4iLCJpbXBvcnQgeyBTdWdnZXN0aW9uIH0gZnJvbSAnQGVudml2ZS1haS90eXBlcyc7XG5pbXBvcnQgeyBpc1N1Z2dlc3Rpb24gfSBmcm9tICcuLi9ndWFyZHMvYXBpL2lzQXBpU3VnZ2VzdGlvbic7XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZVN1Z2dlc3Rpb24gPSAoZGF0YTogdW5rbm93bik6IFN1Z2dlc3Rpb24gfCB1bmRlZmluZWQgPT4ge1xuICBpZiAoIWlzU3VnZ2VzdGlvbihkYXRhKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGlkOiBkYXRhLmlkLFxuICAgIGNhdGVnb3J5OiBkYXRhLmNhdGVnb3J5LFxuICAgIGNvbnRlbnQ6IGRhdGEuY29udGVudCxcbiAgICBjcmVhdGVkQXQ6IGRhdGEuY3JlYXRlZF9hdCxcbiAgICBpc0Fuc3dlcjogZGF0YS5pc19hbnN3ZXIsXG4gIH07XG59O1xuIiwiaW1wb3J0IHsgVXNlckV2ZW50Q2F0ZWdvcnkgfSBmcm9tIFwiQHNwaWZmeS1haS9jb21tZXJjZS1hcGktY2xpZW50XCI7XG5pbXBvcnQgeyBVc2VyRXZlbnQgfSBmcm9tIFwiQGVudml2ZS1haS90eXBlc1wiO1xuaW1wb3J0IHtcbiAgaXNBcGlVc2VyRXZlbnQsXG4gIGlzQXBpUERQQXR0cmlidXRlcyxcbiAgaXNBcGlRdWVyeVR5cGVkQXR0cmlidXRlcyxcbiAgaXNBcGlTZWFyY2hBdHRyaWJ1dGVzLFxuICBpc0FwaVN1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlcyxcbn0gZnJvbSBcIi4uL2d1YXJkcy9hcGlcIjtcbmltcG9ydCB7IGlzQXBpRm9ybVN1Ym1pdHRlZFJlc3BvbnNlQXR0cmlidXRlcyB9IGZyb20gXCIuLi9ndWFyZHMvYXBpL2lzQXBpRm9ybVN1Ym1pdHRlZFJlc3BvbnNlQXR0cmlidXRlc1wiO1xuaW1wb3J0IHtcbiAgaXNBcGlQTFBFdmVudEF0dHJpYnV0ZXMsXG4gIGlzQXBpUExQSWRBdHRyaWJ1dGUsXG59IGZyb20gXCIuLi9ndWFyZHMvYXBpL2lzQXBpUExQRXZlbnRBdHRyaWJ1dGVzXCI7XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZVVzZXJFdmVudCA9IChkYXRhOiB1bmtub3duKTogVXNlckV2ZW50IHwgdW5kZWZpbmVkID0+IHtcbiAgaWYgKCFpc0FwaVVzZXJFdmVudChkYXRhKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBpZiAoXG4gICAgZGF0YS5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuUGRwVmlzaXQgJiZcbiAgICBpc0FwaVBEUEF0dHJpYnV0ZXMoZGF0YS5hdHRyaWJ1dGVzKVxuICApIHtcbiAgICByZXR1cm4ge1xuICAgICAgZXZlbnRJZDogZGF0YS5ldmVudF9pZCxcbiAgICAgIGNyZWF0ZWRBdDogZGF0YS5jcmVhdGVkX2F0LFxuICAgICAgY2F0ZWdvcnk6IFVzZXJFdmVudENhdGVnb3J5LlBkcFZpc2l0LFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBwcm9kdWN0SWQ6IGRhdGEuYXR0cmlidXRlcy5wcm9kdWN0X2lkLFxuICAgICAgICBwYXJlbnRQcm9kdWN0SWQ6IGRhdGEuYXR0cmlidXRlcy5wYXJlbnRfcHJvZHVjdF9pZCxcbiAgICAgICAgdXJsOiBkYXRhLmF0dHJpYnV0ZXMudXJsLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKFxuICAgIGRhdGEuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlF1ZXJ5VHlwZWQgJiZcbiAgICBpc0FwaVF1ZXJ5VHlwZWRBdHRyaWJ1dGVzKGRhdGEuYXR0cmlidXRlcylcbiAgKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGV2ZW50SWQ6IGRhdGEuZXZlbnRfaWQsXG4gICAgICBjcmVhdGVkQXQ6IGRhdGEuY3JlYXRlZF9hdCxcbiAgICAgIGNhdGVnb3J5OiBVc2VyRXZlbnRDYXRlZ29yeS5RdWVyeVR5cGVkLFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBxdWVyeTogZGF0YS5hdHRyaWJ1dGVzLnF1ZXJ5LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKFxuICAgIGRhdGEuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LlNlYXJjaCAmJlxuICAgIGlzQXBpU2VhcmNoQXR0cmlidXRlcyhkYXRhLmF0dHJpYnV0ZXMpXG4gICkge1xuICAgIHJldHVybiB7XG4gICAgICBldmVudElkOiBkYXRhLmV2ZW50X2lkLFxuICAgICAgY3JlYXRlZEF0OiBkYXRhLmNyZWF0ZWRfYXQsXG4gICAgICBjYXRlZ29yeTogVXNlckV2ZW50Q2F0ZWdvcnkuU2VhcmNoLFxuICAgICAgYXR0cmlidXRlczoge1xuICAgICAgICBzZWFyY2hUZXJtOiBkYXRhLmF0dHJpYnV0ZXMuc2VhcmNoX3Rlcm0sXG4gICAgICAgIHNlbGVjdGVkRmlsdGVyczogZGF0YS5hdHRyaWJ1dGVzLnNlbGVjdGVkX2ZpbHRlcnMsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBpZiAoXG4gICAgZGF0YS5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuU3VnZ2VzdGlvbkNsaWNrZWQgJiZcbiAgICBpc0FwaVN1Z2dlc3Rpb25DbGlja2VkQXR0cmlidXRlcyhkYXRhLmF0dHJpYnV0ZXMpXG4gICkge1xuICAgIHJldHVybiB7XG4gICAgICBldmVudElkOiBkYXRhLmV2ZW50X2lkLFxuICAgICAgY3JlYXRlZEF0OiBkYXRhLmNyZWF0ZWRfYXQsXG4gICAgICBjYXRlZ29yeTogVXNlckV2ZW50Q2F0ZWdvcnkuU3VnZ2VzdGlvbkNsaWNrZWQsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIHN1Z2dlc3Rpb25JZDogZGF0YS5hdHRyaWJ1dGVzLnN1Z2dlc3Rpb25faWQsXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBpZiAoXG4gICAgZGF0YS5jYXRlZ29yeSA9PT0gVXNlckV2ZW50Q2F0ZWdvcnkuUGxwVmlzaXQgJiZcbiAgICBpc0FwaVBMUEV2ZW50QXR0cmlidXRlcyhkYXRhLmF0dHJpYnV0ZXMpXG4gICkge1xuICAgIGlmIChpc0FwaVBMUElkQXR0cmlidXRlKGRhdGEuYXR0cmlidXRlcykpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGV2ZW50SWQ6IGRhdGEuZXZlbnRfaWQsXG4gICAgICAgIGNyZWF0ZWRBdDogZGF0YS5jcmVhdGVkX2F0LFxuICAgICAgICBjYXRlZ29yeTogVXNlckV2ZW50Q2F0ZWdvcnkuUGxwVmlzaXQsXG4gICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICBjYXRlZ29yeTogZGF0YS5hdHRyaWJ1dGVzLmNhdGVnb3J5LFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IHtcbiAgICAgICAgICAgIGlkOiBkYXRhLmF0dHJpYnV0ZXMuaWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgaWYgKFxuICAgIGRhdGEuY2F0ZWdvcnkgPT09IFVzZXJFdmVudENhdGVnb3J5LkZvcm1TdWJtaXR0ZWQgJiZcbiAgICBpc0FwaUZvcm1TdWJtaXR0ZWRSZXNwb25zZUF0dHJpYnV0ZXMoZGF0YS5hdHRyaWJ1dGVzKVxuICApIHtcbiAgICByZXR1cm4ge1xuICAgICAgZXZlbnRJZDogZGF0YS5ldmVudF9pZCxcbiAgICAgIGNyZWF0ZWRBdDogZGF0YS5jcmVhdGVkX2F0LFxuICAgICAgY2F0ZWdvcnk6IFVzZXJFdmVudENhdGVnb3J5LkZvcm1TdWJtaXR0ZWQsXG4gICAgICBhdHRyaWJ1dGVzOiB7XG4gICAgICAgIGZpbGxlZFNjaGVtYTogeyAuLi5kYXRhLmF0dHJpYnV0ZXMuZmlsbGVkX3NjaGVtYSB9LFxuICAgICAgICBmb3JtUmVzcG9uc2VJZDogZGF0YS5hdHRyaWJ1dGVzLmZvcm1fcmVzcG9uc2VfaWQsXG4gICAgICAgIGZvcm1UeXBlOiBkYXRhLmF0dHJpYnV0ZXMuZm9ybV90eXBlLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLy8gd2UncmUgbm90IHVzaW5nIGFwcF91bmxvYWRlZCBhdCB0aGUgbW9tZW50IHNvIHJldHVybiB0aGUgYXBwX2xvYWRlZCBldmVudCBhcyBkZWZhdWx0XG4gIHJldHVybiB7XG4gICAgZXZlbnRJZDogZGF0YS5ldmVudF9pZCxcbiAgICBjcmVhdGVkQXQ6IGRhdGEuY3JlYXRlZF9hdCxcbiAgICBjYXRlZ29yeTogVXNlckV2ZW50Q2F0ZWdvcnkuQXBwTG9hZGVkLFxuICB9O1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7QUFRQSxNQUFhLHdCQUF3QixTQUNuQyxRQUFRLFFBQ1IsT0FBTyxTQUFTLFlBQ2hCLGVBQWUsUUFDZixLQUFLLGFBQWEsUUFDbEIsT0FBTyxLQUFLLGNBQWMsWUFDMUIsV0FBVyxRQUNYLE9BQU8sS0FBSyxVQUFVOzs7Ozs7Ozs7OztBQ054QixNQUFhLHVCQUF1QixTQUNsQyxPQUFPLFNBQVMsWUFDaEIsUUFBUSxRQUNSLGVBQWUsUUFDZixLQUFLLGFBQWEsUUFDbEIsT0FBTyxLQUFLLGNBQWMsWUFDMUIsV0FBVyxLQUFLLGFBQ2hCLE1BQU0sUUFBUSxLQUFLLFVBQVUsTUFBTTs7Ozs7Ozs7Ozs7QUNQckMsTUFBYSw0QkFBNEIsU0FD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
|