@nlabs/reaktor 1.8.0 → 1.9.1
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/README.md +62 -1
- package/docs/GENERATION.md +63 -0
- package/lib/actions/analytics.js +1 -1
- package/lib/actions/apps.d.ts +2 -2
- package/lib/actions/apps.js +1 -1
- package/lib/actions/connections.js +1 -1
- package/lib/actions/content.js +1 -1
- package/lib/actions/contentGeneration.d.ts +40 -0
- package/lib/actions/contentGeneration.js +206 -0
- package/lib/actions/conversations.js +1 -1
- package/lib/actions/crm.js +1 -1
- package/lib/actions/crud.d.ts +2 -2
- package/lib/actions/crud.js +1 -1
- package/lib/actions/dynamodb.js +1 -1
- package/lib/actions/email.js +1 -1
- package/lib/actions/files.d.ts +42 -4
- package/lib/actions/files.js +1 -1
- package/lib/actions/flags.js +1 -1
- package/lib/actions/geminiVideo.d.ts +19 -0
- package/lib/actions/geminiVideo.js +161 -0
- package/lib/actions/groups.js +1 -1
- package/lib/actions/higgsfield.d.ts +20 -0
- package/lib/actions/higgsfield.js +148 -0
- package/lib/actions/imageGeneration.d.ts +37 -0
- package/lib/actions/imageGeneration.js +121 -0
- package/lib/actions/images.js +1 -1
- package/lib/actions/index.d.ts +5 -0
- package/lib/actions/index.js +6 -1
- package/lib/actions/ios.js +1 -1
- package/lib/actions/locations.js +1 -1
- package/lib/actions/messages.js +1 -1
- package/lib/actions/notifications.js +1 -1
- package/lib/actions/payments.js +27 -26
- package/lib/actions/personas.d.ts +4 -4
- package/lib/actions/personas.js +1 -1
- package/lib/actions/posts.js +1 -1
- package/lib/actions/query.js +1 -1
- package/lib/actions/reactions.d.ts +6 -6
- package/lib/actions/reactions.js +1 -1
- package/lib/actions/rum.js +1 -1
- package/lib/actions/s3.d.ts +4 -4
- package/lib/actions/s3.js +22 -6
- package/lib/actions/search.js +1 -1
- package/lib/actions/sms.js +1 -1
- package/lib/actions/statistics.js +1 -1
- package/lib/actions/subscriptions.js +1 -1
- package/lib/actions/tags.d.ts +2 -2
- package/lib/actions/tags.js +1 -1
- package/lib/actions/users.d.ts +2 -2
- package/lib/actions/users.js +1 -1
- package/lib/actions/videoGeneration.d.ts +20 -0
- package/lib/actions/videoGeneration.js +32 -0
- package/lib/actions/videos.js +1 -1
- package/lib/adapters/arangoAdapter.js +1 -1
- package/lib/adapters/contentAdapter.js +1 -1
- package/lib/adapters/fileAdapter.js +1 -1
- package/lib/adapters/geminiGenerationAdapter.d.ts +34 -0
- package/lib/adapters/geminiGenerationAdapter.js +41 -0
- package/lib/adapters/higgsfieldAdapter.d.ts +120 -0
- package/lib/adapters/higgsfieldAdapter.js +131 -0
- package/lib/adapters/imageAdapter.js +1 -1
- package/lib/adapters/imageGenerationAdapter.d.ts +17 -0
- package/lib/adapters/imageGenerationAdapter.js +18 -0
- package/lib/adapters/index.d.ts +3 -0
- package/lib/adapters/index.js +4 -1
- package/lib/adapters/messageAdapter.js +1 -1
- package/lib/adapters/postAdapter.js +1 -1
- package/lib/adapters/reaktorAdapter.js +1 -1
- package/lib/adapters/tagAdapter.js +1 -1
- package/lib/adapters/userAdapter.d.ts +76 -1
- package/lib/adapters/userAdapter.js +1 -1
- package/lib/config.d.ts +19 -14
- package/lib/config.js +9 -1
- package/lib/constants/collections.js +1 -1
- package/lib/handlers/graphqlHandler.js +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.js +2 -1
- package/lib/lambdas/actions/websockets.d.ts +5 -0
- package/lib/lambdas/actions/websockets.js +16 -1
- package/lib/lambdas/authorizer.js +1 -1
- package/lib/lambdas/connection.d.ts +2 -2
- package/lib/lambdas/connection.js +1 -1
- package/lib/lambdas/utils/message.js +1 -1
- package/lib/lambdas/utils/websocket.d.ts +4 -4
- package/lib/lambdas/utils/websocket.js +1 -1
- package/lib/mocks/conversation.js +1 -1
- package/lib/mocks/file.js +1 -1
- package/lib/mocks/group.js +1 -1
- package/lib/mocks/image.js +1 -1
- package/lib/mocks/post.js +1 -1
- package/lib/mocks/tag.js +1 -1
- package/lib/mocks/user.js +1 -1
- package/lib/mocks/video.js +1 -1
- package/lib/mutations/analytics/analytics.js +1 -1
- package/lib/mutations/content/content.js +15 -1
- package/lib/mutations/crm/crm.js +1 -1
- package/lib/mutations/events/events.js +1 -1
- package/lib/mutations/flags/flags.js +1 -1
- package/lib/mutations/groups/groups.js +1 -1
- package/lib/mutations/higgsfield/higgsfield.d.ts +1 -0
- package/lib/mutations/higgsfield/higgsfield.js +62 -0
- package/lib/mutations/images/images.js +10 -1
- package/lib/mutations/index.d.ts +2 -1
- package/lib/mutations/index.js +11 -2
- package/lib/mutations/locations/locations.js +1 -1
- package/lib/mutations/messages/messages.js +1 -1
- package/lib/mutations/personas/personas.js +1 -1
- package/lib/mutations/posts/posts.js +1 -1
- package/lib/mutations/reactions/reactions.js +1 -1
- package/lib/mutations/rum/rum.js +1 -1
- package/lib/mutations/statistics/statistics.js +1 -1
- package/lib/mutations/subscriptions/subscriptions.js +1 -1
- package/lib/mutations/tags/tags.js +1 -1
- package/lib/mutations/users/users.js +1 -1
- package/lib/mutations/videos/videos.js +24 -10
- package/lib/objectTypes/analytics.js +1 -1
- package/lib/objectTypes/app.js +1 -1
- package/lib/objectTypes/bankAccount.js +1 -1
- package/lib/objectTypes/connection.js +1 -1
- package/lib/objectTypes/content.js +1 -1
- package/lib/objectTypes/contentGeneration.d.ts +2 -0
- package/lib/objectTypes/contentGeneration.js +30 -0
- package/lib/objectTypes/conversation.js +1 -1
- package/lib/objectTypes/creditCard.js +1 -1
- package/lib/objectTypes/crm.js +1 -1
- package/lib/objectTypes/document.js +1 -1
- package/lib/objectTypes/error.js +1 -1
- package/lib/objectTypes/event.js +1 -1
- package/lib/objectTypes/external.js +1 -1
- package/lib/objectTypes/file.js +1 -1
- package/lib/objectTypes/filter.js +1 -1
- package/lib/objectTypes/flag.js +1 -1
- package/lib/objectTypes/group.js +1 -1
- package/lib/objectTypes/higgsfield.d.ts +5 -0
- package/lib/objectTypes/higgsfield.js +149 -0
- package/lib/objectTypes/iapSubscription.js +1 -1
- package/lib/objectTypes/image.js +1 -1
- package/lib/objectTypes/imageGeneration.d.ts +2 -0
- package/lib/objectTypes/imageGeneration.js +33 -0
- package/lib/objectTypes/index.d.ts +2 -0
- package/lib/objectTypes/index.js +3 -1
- package/lib/objectTypes/location.js +1 -1
- package/lib/objectTypes/message.js +1 -1
- package/lib/objectTypes/passcode.js +1 -1
- package/lib/objectTypes/persona.d.ts +37 -2
- package/lib/objectTypes/persona.js +1 -1
- package/lib/objectTypes/plan.js +1 -1
- package/lib/objectTypes/post.js +1 -1
- package/lib/objectTypes/query.js +1 -1
- package/lib/objectTypes/reaction.js +1 -1
- package/lib/objectTypes/relation.js +1 -1
- package/lib/objectTypes/rum.js +1 -1
- package/lib/objectTypes/search.js +1 -1
- package/lib/objectTypes/statistics.js +1 -1
- package/lib/objectTypes/subscription.js +1 -1
- package/lib/objectTypes/tag.js +1 -1
- package/lib/objectTypes/user.js +1 -1
- package/lib/objectTypes/video.js +1 -1
- package/lib/objectTypes/videoGeneration.d.ts +2 -0
- package/lib/objectTypes/videoGeneration.js +31 -0
- package/lib/queries/analytics/analytics.js +1 -1
- package/lib/queries/content/content.js +1 -1
- package/lib/queries/crm/crm.js +1 -1
- package/lib/queries/events/events.js +1 -1
- package/lib/queries/flags/flags.js +1 -1
- package/lib/queries/groups/groups.js +1 -1
- package/lib/queries/higgsfield/higgsfield.d.ts +1 -0
- package/lib/queries/higgsfield/higgsfield.js +22 -0
- package/lib/queries/images/images.js +1 -1
- package/lib/queries/index.d.ts +2 -1
- package/lib/queries/index.js +7 -2
- package/lib/queries/locations/locations.js +1 -1
- package/lib/queries/messages/messages.js +1 -1
- package/lib/queries/personas/personas.js +1 -1
- package/lib/queries/posts/posts.js +1 -1
- package/lib/queries/query/query.js +1 -1
- package/lib/queries/reactions/reactions.js +1 -1
- package/lib/queries/statistics/statistics.js +1 -1
- package/lib/queries/subscriptions/subscriptions.js +1 -1
- package/lib/queries/tags/tags.js +1 -1
- package/lib/queries/users/users.js +1 -1
- package/lib/queries/videos/videos.js +1 -1
- package/lib/templates/email/layout.js +1 -1
- package/lib/templates/email/passwordForgot.js +1 -1
- package/lib/templates/email/passwordRecovery.js +1 -1
- package/lib/templates/email/verifyEmail.js +1 -1
- package/lib/templates/email/welcome.js +1 -1
- package/lib/templates/sms/passwordForgot.js +1 -1
- package/lib/templates/sms/passwordRecovery.js +1 -1
- package/lib/templates/sms/verifyEmail.js +1 -1
- package/lib/templates/sms/verifyPhone.js +1 -1
- package/lib/templates/sms/welcome.js +1 -1
- package/lib/types/analytics.types.d.ts +16 -16
- package/lib/types/analytics.types.js +1 -1
- package/lib/types/apps.types.d.ts +4 -4
- package/lib/types/apps.types.js +1 -1
- package/lib/types/arangodb.types.d.ts +20 -20
- package/lib/types/arangodb.types.js +1 -1
- package/lib/types/auth.types.js +1 -1
- package/lib/types/connections.types.d.ts +2 -2
- package/lib/types/connections.types.js +1 -1
- package/lib/types/content.types.d.ts +6 -6
- package/lib/types/content.types.js +1 -1
- package/lib/types/conversations.types.d.ts +2 -2
- package/lib/types/conversations.types.js +1 -1
- package/lib/types/crm.types.d.ts +30 -30
- package/lib/types/crm.types.js +1 -1
- package/lib/types/email.types.d.ts +2 -2
- package/lib/types/email.types.js +1 -1
- package/lib/types/error.types.d.ts +1 -0
- package/lib/types/error.types.js +2 -1
- package/lib/types/files.types.d.ts +2 -2
- package/lib/types/files.types.js +1 -1
- package/lib/types/flags.types.d.ts +8 -8
- package/lib/types/flags.types.js +1 -1
- package/lib/types/google.types.js +1 -1
- package/lib/types/groups.types.d.ts +2 -2
- package/lib/types/groups.types.js +1 -1
- package/lib/types/images.types.d.ts +2 -2
- package/lib/types/images.types.js +1 -1
- package/lib/types/index.js +1 -1
- package/lib/types/locations.types.d.ts +2 -2
- package/lib/types/locations.types.js +1 -1
- package/lib/types/messages.types.d.ts +2 -2
- package/lib/types/messages.types.js +1 -1
- package/lib/types/notifications.types.js +1 -1
- package/lib/types/payments.types.d.ts +14 -14
- package/lib/types/payments.types.js +1 -1
- package/lib/types/personas.types.d.ts +2 -2
- package/lib/types/personas.types.js +1 -1
- package/lib/types/posts.types.d.ts +2 -2
- package/lib/types/posts.types.js +1 -1
- package/lib/types/rum.types.d.ts +6 -6
- package/lib/types/rum.types.js +1 -1
- package/lib/types/statistics.types.js +1 -1
- package/lib/types/tags.types.d.ts +4 -4
- package/lib/types/tags.types.js +1 -1
- package/lib/types/users.types.d.ts +2 -2
- package/lib/types/users.types.js +1 -1
- package/lib/types/videos.types.d.ts +2 -2
- package/lib/types/videos.types.js +1 -1
- package/lib/types/websockets.types.d.ts +4 -4
- package/lib/types/websockets.types.js +1 -1
- package/lib/upload.js +1 -1
- package/lib/utils/adapterUtils.js +1 -1
- package/lib/utils/analyticsUtils.js +1 -1
- package/lib/utils/appContext.js +1 -1
- package/lib/utils/aqlHelpers.js +1 -1
- package/lib/utils/arangodbUtils.js +1 -1
- package/lib/utils/authUtils.js +1 -1
- package/lib/utils/awsUtils.js +1 -1
- package/lib/utils/collectionRegistry.d.ts +2 -2
- package/lib/utils/collectionRegistry.js +1 -1
- package/lib/utils/contextUtils.js +1 -1
- package/lib/utils/dbI18n.example.js +1 -1
- package/lib/utils/dbI18n.js +1 -1
- package/lib/utils/googleTranslate.js +1 -1
- package/lib/utils/graphqlUtils.js +1 -1
- package/lib/utils/imageUtils.js +1 -1
- package/lib/utils/index.d.ts +3 -0
- package/lib/utils/index.js +4 -1
- package/lib/utils/languageDetection.js +1 -1
- package/lib/utils/localeUtils.example.js +1 -1
- package/lib/utils/localeUtils.js +1 -1
- package/lib/utils/mediaAccess.d.ts +5 -0
- package/lib/utils/mediaAccess.js +57 -0
- package/lib/utils/middlewareUtils.js +1 -1
- package/lib/utils/nodeRealtime.d.ts +14 -0
- package/lib/utils/nodeRealtime.js +84 -0
- package/lib/utils/opaqueToken.d.ts +4 -0
- package/lib/utils/opaqueToken.js +7 -0
- package/lib/utils/queryBuilder.js +1 -1
- package/lib/utils/schemaUtils.js +1 -1
- package/lib/utils/sessionUtils.js +1 -1
- package/lib/utils/stripeUtils.d.ts +1 -1
- package/lib/utils/stripeUtils.js +2 -2
- package/lib/utils/stripeUtils.ts.bak +12 -0
- package/lib/utils/templateUtils.js +1 -1
- package/lib/utils/testUtils.js +1 -1
- package/lib/utils/translationQueue.example.js +1 -1
- package/lib/utils/translationQueue.js +1 -1
- package/lib/videoProcessing.js +1 -1
- package/package.json +26 -25
package/lib/actions/users.js
CHANGED
|
@@ -1059,4 +1059,4 @@ export const getUserByToken = (context, token)=>{
|
|
|
1059
1059
|
});
|
|
1060
1060
|
};
|
|
1061
1061
|
|
|
1062
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL3JlYWt0b3IvcmVha3Rvci9wYWNrYWdlcy9yZWFrdG9yL3NyYy9hY3Rpb25zL3VzZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE5LVByZXNlbnQsIE5pdHJvZ2VuIExhYnMsIEluYy5cbiAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVzZSBpcyBzdWJqZWN0IHRvIHRoZSBhY2NvbXBhbnlpbmcgY29tbWVyY2lhbCBMSUNFTlNFLlxuICovXG5pbXBvcnQge3BhcnNlTnVtfSBmcm9tICdAbmxhYnMvdXRpbHMvcGFyc2Vycy9udW1iZXJzJztcbmltcG9ydCB7XG4gIGNyZWF0ZUhhc2gsXG4gIGNyZWF0ZVBhc3N3b3JkLFxuICBwYXJzZUFyYW5nb0lkLFxuICBwYXJzZUNoYXIsXG4gIHBhcnNlRW1haWwsXG4gIHBhcnNlUGFzc3dvcmQsXG4gIHBhcnNlUGhvbmUsXG4gIHBhcnNlVXNlcm5hbWVcbn0gZnJvbSAnQG5sYWJzL3V0aWxzL3BhcnNlcnMvc3RyaW5ncyc7XG5pbXBvcnQge2FxbH0gZnJvbSAnYXJhbmdvanMnO1xuaW1wb3J0IHtsaXRlcmFsfSBmcm9tICdhcmFuZ29qcy9hcWwnO1xuaW1wb3J0IHtjcmVhdGVIYXNoIGFzIGNyZWF0ZUNyeXB0b0hhc2gsIHRpbWluZ1NhZmVFcXVhbH0gZnJvbSAnY3J5cHRvJztcbmltcG9ydCB7RGF0ZVRpbWV9IGZyb20gJ2x1eG9uJztcblxuaW1wb3J0IHtwYXJzZVVzZXIsIHBhcnNlVXNlclNhZmV9IGZyb20gJy4uL2FkYXB0ZXJzL3VzZXJBZGFwdGVyLmpzJztcbmltcG9ydCB7Q29uZmlnfSBmcm9tICcuLi9jb25maWcuanMnO1xuaW1wb3J0IHtDT0xMRUNUSU9OUywgRURHRVN9IGZyb20gJy4uL2NvbnN0YW50cy9jb2xsZWN0aW9ucy5qcyc7XG5pbXBvcnQgdmVyaWZ5RW1haWxUZW1wbGF0ZSBmcm9tICcuLi90ZW1wbGF0ZXMvZW1haWwvdmVyaWZ5RW1haWwuanMnO1xuaW1wb3J0IHtFcnJvclR5cGVzLCB0eXBlIFNlc3Npb25FcnJvcn0gZnJvbSAnLi4vdHlwZXMvZXJyb3IudHlwZXMuanMnO1xuaW1wb3J0IHtsb2dFcnJvciwgbG9nRXhjZXB0aW9ufSBmcm9tICcuLi91dGlscy9hbmFseXRpY3NVdGlscy5qcyc7XG5pbXBvcnQge2J1aWxkRmlsdGVyQ2xhdXNlLCBidWlsZFByZXNlbnRGaWx0ZXJHcm91cH0gZnJvbSAnLi4vdXRpbHMvYXFsSGVscGVycy5qcyc7XG5pbXBvcnQge2dldERvY0lkLCBnZXRMaW1pdCwgc2VsZWN0UmVhY3Rpb25Db3VudEJ5VHlwZSwgdXNlRGJ9IGZyb20gJy4uL3V0aWxzL2FyYW5nb2RiVXRpbHMuanMnO1xuaW1wb3J0IHtkZXRlY3RMYW5ndWFnZX0gZnJvbSAnLi4vdXRpbHMvbGFuZ3VhZ2VEZXRlY3Rpb24uanMnO1xuaW1wb3J0IHtnZXRTZXNzaW9uLCBzZXRTZXNzaW9ufSBmcm9tICcuLi91dGlscy9zZXNzaW9uVXRpbHMuanMnO1xuaW1wb3J0IHtnZXRTdHJpcGVDbGllbnR9IGZyb20gJy4uL3V0aWxzL3N0cmlwZVV0aWxzLmpzJztcbmltcG9ydCB7YWRkSXRlbSwgY291bnRJdGVtcywgZ2V0SXRlbUJ5LCBnZXRMaXN0QnksIHVwZGF0ZUl0ZW19IGZyb20gJy4vY3J1ZC5qcyc7XG5pbXBvcnQge3NlbmRFbWFpbH0gZnJvbSAnLi9lbWFpbC5qcyc7XG5pbXBvcnQge2FkZFBlcnNvbmF9IGZyb20gJy4vcGVyc29uYXMuanMnO1xuaW1wb3J0IHtzZW5kU21zfSBmcm9tICcuL3Ntcy5qcyc7XG5cbmltcG9ydCB0eXBlIHtBcWxRdWVyeX0gZnJvbSAnYXJhbmdvanMvYXFsJztcbmltcG9ydCB0eXBlIHtGaWx0ZXJHcm91cH0gZnJvbSAnLi4vdHlwZXMvYXJhbmdvZGIudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgudHlwZXMuanMnO1xuaW1wb3J0IHR5cGUge1VzZXJJbnB1dCwgVXNlclR5cGV9IGZyb20gJy4uL3R5cGVzL3VzZXJzLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtTZXNzaW9uVG9rZW59IGZyb20gJy4uL3V0aWxzL3Nlc3Npb25VdGlscy5qcyc7XG5cbmNvbnN0IGV2ZW50Q2F0ZWdvcnkgPSAndXNlcnMnO1xuY29uc3QgQURNSU5fVVNFUk5BTUUgPSAnYWRtaW4nO1xuY29uc3QgVkVSSUZJQ0FUSU9OX0VNQUlMX0NPT0xET1dOX01TID0gMTAwMCAqIDYwICogMTU7XG5jb25zdCB1c2Vyc0NvbGxlY3Rpb24gPSBsaXRlcmFsKENPTExFQ1RJT05TLlVTRVJTKTtcbmNvbnN0IGhhc1JlYWN0aW9uQ29sbGVjdGlvbiA9IGxpdGVyYWwoRURHRVMuSEFTX1JFQUNUSU9OKTtcbmNvbnN0IGlzVGFnZ2VkQ29sbGVjdGlvbiA9IGxpdGVyYWwoRURHRVMuSVNfVEFHR0VEKTtcbmNvbnN0IGhhc0Nvbm5lY3Rpb25Db2xsZWN0aW9uID0gbGl0ZXJhbChFREdFUy5IQVNfQ09OTkVDVElPTik7XG5cbmNvbnN0IGlzQWRtaW5QYXNzd29yZCA9IChwYXNzd29yZDogdW5rbm93bik6IGJvb2xlYW4gPT4ge1xuICBjb25zdCBhZG1pblBhc3N3b3JkID0gcHJvY2Vzcy5lbnYuQURNSU5fUEFTU1dPUkQ7XG4gIGlmKHR5cGVvZiBwYXNzd29yZCAhPT0gJ3N0cmluZycgfHwgIXBhc3N3b3JkIHx8ICFhZG1pblBhc3N3b3JkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgYWN0dWFsID0gY3JlYXRlQ3J5cHRvSGFzaCgnc2hhMjU2JykudXBkYXRlKHBhc3N3b3JkKS5kaWdlc3QoKTtcbiAgY29uc3QgZXhwZWN0ZWQgPSBjcmVhdGVDcnlwdG9IYXNoKCdzaGEyNTYnKS51cGRhdGUoYWRtaW5QYXNzd29yZCkuZGlnZXN0KCk7XG4gIHJldHVybiB0aW1pbmdTYWZlRXF1YWwoYWN0dWFsLCBleHBlY3RlZCk7XG59O1xuXG5jb25zdCBnZXRBcHBOYW1lID0gKGNvbnRleHQ6IEFwaUNvbnRleHQpOiBzdHJpbmcgPT5cbiAgY29udGV4dC5jb25maWc/LmRldGFpbHM/Lm5hbWUgfHwgQ29uZmlnLmdldCgnZGV0YWlscy5uYW1lJykgfHwgJ1JlYWt0b3InO1xuXG5jb25zdCBnZXRBcHBUaXRsZSA9IChhcHBOYW1lOiBzdHJpbmcpOiBzdHJpbmcgPT5cbiAgYXBwTmFtZVxuICAgIC5zcGxpdCgvKFtcXHMtX10rKS8pXG4gICAgLm1hcCgocGFydCkgPT4gL15bQS1aYS16XS8udGVzdChwYXJ0KSA/IGAke3BhcnQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCl9JHtwYXJ0LnNsaWNlKDEpfWAgOiBwYXJ0KVxuICAgIC5qb2luKCcnKTtcblxuY29uc3QgYnVpbGRWZXJpZmljYXRpb25FbWFpbCA9IChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAgdmVyaWZpZWRFbWFpbENvZGU6IG51bWJlcixcbiAgdXNlcjogVXNlclR5cGUgPSB7fVxuKSA9PiB7XG4gIGNvbnN0IGFwcE5hbWUgPSBnZXRBcHBOYW1lKGNvbnRleHQpO1xuICBjb25zdCBhcHBUaXRsZSA9IGdldEFwcFRpdGxlKGFwcE5hbWUpO1xuICBjb25zdCBjb2RlID0gYCR7dmVyaWZpZWRFbWFpbENvZGV9YDtcbiAgY29uc3QgcGFyc2VFbWFpbFRlbXBsYXRlID0gKHRlbXBsYXRlOiBzdHJpbmcpID0+IHRlbXBsYXRlXG4gICAgLnJlcGxhY2VBbGwoJ1thcHBOYW1lXScsIGFwcE5hbWUpXG4gICAgLnJlcGxhY2VBbGwoJ1thcHBUaXRsZV0nLCBhcHBUaXRsZSlcbiAgICAucmVwbGFjZUFsbCgnW2VtYWlsQ29kZV0nLCBjb2RlKTtcbiAgY29uc3QgaHRtbCA9IHBhcnNlRW1haWxUZW1wbGF0ZSh1c2VyLnZlcmlmaWNhdGlvbkVtYWlsVGVtcGxhdGUgfHwgdmVyaWZ5RW1haWxUZW1wbGF0ZSk7XG4gIGNvbnN0IHN1YmplY3QgPSBwYXJzZUVtYWlsVGVtcGxhdGUodXNlci52ZXJpZmljYXRpb25FbWFpbFN1YmplY3QgfHwgYFlvdXIgJHthcHBUaXRsZX0gdmVyaWZpY2F0aW9uIGNvZGUgaXMgJHtjb2RlfWApO1xuICBjb25zdCB0ZXh0ID0gcGFyc2VFbWFpbFRlbXBsYXRlKHVzZXIudmVyaWZpY2F0aW9uRW1haWxUZXh0IHx8IGBZb3VyICR7YXBwVGl0bGV9IHZlcmlmaWNhdGlvbiBjb2RlIGlzICR7Y29kZX0uXFxuXFxuRW50ZXIgdGhpcyBjb2RlIGluICR7YXBwVGl0bGV9IHRvIGZpbmlzaCBzZXR0aW5nIHVwIHlvdXIgYWNjb3VudC4gSWYgeW91IGRpZCBub3QgcmVxdWVzdCB0aGlzIGVtYWlsLCB5b3UgY2FuIHNhZmVseSBpZ25vcmUgaXQuYCk7XG5cbiAgcmV0dXJuIHtcbiAgICBodG1sLFxuICAgIHN1YmplY3QsXG4gICAgdGV4dFxuICB9O1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBVc2VyT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGZyb20/OiBudW1iZXI7XG4gIHJlYWRvbmx5IHRvPzogbnVtYmVyO1xuICByZWFkb25seSB1c2VybmFtZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGVudW0gVXNlckFjY2VzcyB7XG4gIEFETUlOID0gLTEsXG4gIEJBU0lDID0gMCxcbiAgUFJFTUlVTSA9IDEsXG4gIFBSTyA9IDJcbn1cblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVVzZXJUb2tlbiA9IChcbiAgdXNlcklkOiBzdHJpbmcsXG4gIHBlcnNvbmFJZDogc3RyaW5nID0gJycsXG4gIHVzZXJuYW1lOiBzdHJpbmcgPSAnJyxcbiAgdXNlckFjY2VzczogbnVtYmVyID0gMCxcbiAgZXhwaXJlc0luTWludXRlczogbnVtYmVyID0gMTUsXG4gIG5hbWU6IHtyZWFkb25seSBmaXJzdE5hbWU/OiBzdHJpbmc7IHJlYWRvbmx5IGxhc3ROYW1lPzogc3RyaW5nfSA9IHt9XG4pOiBTZXNzaW9uVG9rZW4gPT4ge1xuICBjb25zdCBub3c6IERhdGVUaW1lID0gRGF0ZVRpbWUubG9jYWwoKTtcbiAgY29uc3Qgc2Vzc2lvbkV4cGlyZXM6IERhdGVUaW1lID0gbm93LnBsdXMoe21pbnV0ZXM6IGV4cGlyZXNJbk1pbnV0ZXN9KTtcbiAgY29uc3QgaWF0ID0gTWF0aC5mbG9vcihub3cudG9TZWNvbmRzKCkpO1xuICBjb25zdCBleHAgPSBNYXRoLmZsb29yKHNlc3Npb25FeHBpcmVzLnRvU2Vjb25kcygpKTtcbiAgY29uc3QgdG9rZW4gPSBzZXRTZXNzaW9uKHtcbiAgICBleHAsXG4gICAgLi4uKG5hbWUuZmlyc3ROYW1lID8ge2ZpcnN0TmFtZTogbmFtZS5maXJzdE5hbWV9IDoge30pLFxuICAgIGlhdCxcbiAgICAuLi4obmFtZS5sYXN0TmFtZSA/IHtsYXN0TmFtZTogbmFtZS5sYXN0TmFtZX0gOiB7fSksXG4gICAgLi4uKHBlcnNvbmFJZCA/IHtwZXJzb25hSWR9IDoge30pLFxuICAgIHVzZXJBY2Nlc3MsXG4gICAgdXNlcklkLFxuICAgIHVzZXJuYW1lXG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgZXhwaXJlczogc2Vzc2lvbkV4cGlyZXMudG9NaWxsaXMoKSxcbiAgICAuLi4obmFtZS5maXJzdE5hbWUgPyB7Zmlyc3ROYW1lOiBuYW1lLmZpcnN0TmFtZX0gOiB7fSksXG4gICAgaXNzdWVkOiBub3cudG9NaWxsaXMoKSxcbiAgICAuLi4obmFtZS5sYXN0TmFtZSA/IHtsYXN0TmFtZTogbmFtZS5sYXN0TmFtZX0gOiB7fSksXG4gICAgLi4uKHBlcnNvbmFJZCA/IHtwZXJzb25hSWR9IDoge30pLFxuICAgIHRva2VuLFxuICAgIHVzZXJJZCxcbiAgICB1c2VybmFtZVxuICB9O1xufTtcblxuaW50ZXJmYWNlIFNlbGVjdEFjY3VtdWxhdG9yIHtcbiAgb2JqZWN0czogc3RyaW5nW107XG4gIHF1ZXJpZXM6IHN0cmluZ1tdO1xufVxuXG5jb25zdCBwYXJzZVVzZXJMaXN0ID0gKHVzZXJzOiBBcnJheTxVc2VyVHlwZSB8IG51bGwgfCB1bmRlZmluZWQ+ID0gW10pOiBVc2VyVHlwZVtdID0+XG4gIHVzZXJzLnJlZHVjZTxVc2VyVHlwZVtdPigocmVzdWx0LCB1c2VyKSA9PiB7XG4gICAgY29uc3QgcGFyc2VkVXNlciA9IHBhcnNlVXNlclNhZmUodXNlcik7XG5cbiAgICBpZihwYXJzZWRVc2VyKSB7XG4gICAgICByZXN1bHQucHVzaChwYXJzZWRVc2VyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LCBbXSk7XG5cbmNvbnN0IGJ1aWxkVXNlckF0dHJpYnV0ZUZpbHRlcnMgPSAoXG4gIHtlbWFpbCwgcGhvbmUsIHVzZXJuYW1lLCB1c2VySWR9OiBVc2VyVHlwZSxcbiAge2FjdGl2ZSA9IGZhbHNlfToge3JlYWRvbmx5IGFjdGl2ZT86IGJvb2xlYW59ID0ge31cbik6IEZpbHRlckdyb3VwID0+IHtcbiAgY29uc3QgYXR0cmlidXRlRmlsdGVycyA9IGJ1aWxkUHJlc2VudEZpbHRlckdyb3VwKHtcbiAgICBlbWFpbCxcbiAgICBwaG9uZSxcbiAgICB1c2VybmFtZSxcbiAgICAuLi4odXNlcklkID8ge19rZXk6IHVzZXJJZH0gOiB7fSlcbiAgfSwge2xvZ2ljOiAnT1InfSk7XG5cbiAgaWYoIWFjdGl2ZSB8fCBhdHRyaWJ1dGVGaWx0ZXJzLmNvbmRpdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGF0dHJpYnV0ZUZpbHRlcnM7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNvbmRpdGlvbnM6IFtcbiAgICAgIGF0dHJpYnV0ZUZpbHRlcnMsXG4gICAgICB7ZmllbGQ6ICdhY3RpdmUnLCBvcGVyYXRvcjogJyE9JywgdmFsdWU6IGZhbHNlfVxuICAgIF0sXG4gICAgbG9naWM6ICdBTkQnXG4gIH07XG59O1xuXG5jb25zdCBnZXRVc2VyQnlBdHRyaWJ1dGVzID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHVzZXI6IFVzZXJUeXBlLCBvcHRpb25zPzoge3JlYWRvbmx5IGFjdGl2ZT86IGJvb2xlYW59KSA9PiB7XG4gIGNvbnN0IGZpbHRlcnMgPSBidWlsZFVzZXJBdHRyaWJ1dGVGaWx0ZXJzKHVzZXIsIG9wdGlvbnMpO1xuXG4gIGlmKGZpbHRlcnMuY29uZGl0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuICB9XG5cbiAgcmV0dXJuIGdldEl0ZW1CeTxVc2VyVHlwZT4oY29udGV4dCwgQ09MTEVDVElPTlMuVVNFUlMsIGZpbHRlcnMpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFVzZXJPcHRpb25hbEZpZWxkcyA9IChmaWVsZHM6IHN0cmluZ1tdID0gW10pOiBTZWxlY3RBY2N1bXVsYXRvciA9PlxuICBmaWVsZHMucmVkdWNlKChzZWxlY3RzOiBTZWxlY3RBY2N1bXVsYXRvciwgZmllbGQ6IHN0cmluZykgPT4ge1xuICAgIGlmKGZpZWxkLmluY2x1ZGVzKCdDb3VudCcpKSB7XG4gICAgICByZXR1cm4gc2VsZWN0UmVhY3Rpb25Db3VudEJ5VHlwZSgndXNlcnMnLCAndScsIGZpZWxkLCBzZWxlY3RzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VsZWN0cztcbiAgfSwge29iamVjdHM6IFtdLCBxdWVyaWVzOiBbXX0pO1xuXG5leHBvcnQgY29uc3QgcGFyc2VVc2VyT3B0aW9ucyA9IChvcHRpb25zOiBVc2VyT3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBmcm9tID0gMCxcbiAgICB0byA9IDMwXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBsaW1pdCA9IGdldExpbWl0KGZyb20sIHRvKTtcblxuICByZXR1cm4ge1xuICAgIC4uLm9wdGlvbnMsXG4gICAgbGltaXRcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRVc2VyID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIHVzZXI6IFVzZXJJbnB1dCk6IFByb21pc2U8VXNlclR5cGUgfCBudWxsPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdhZGRVc2VyJztcbiAgY29uc3Qge2xhbmd1YWdlQ29udGV4dH0gPSBjb250ZXh0O1xuICBjb25zdCB7Y29uZmlybTogX2NvbmZpcm0sIC4uLm5ld1VzZXJ9ID0gdXNlcjtcbiAgY29uc3Qge2VtYWlsLCBwYXNzd29yZCwgcGhvbmUsIHVzZXJuYW1lLCB1c2VySWQsIF9rZXksIF9pZCwgLi4uaW5zZXJ0VXNlcn0gPSBwYXJzZVVzZXIobmV3VXNlcik7XG4gIGNvbnN0IGhhc1Bhc3N3b3JkID0gISFwYXNzd29yZDtcbiAgY29uc3QgaGFzVXNlcm5hbWUgPSAhIXVzZXJuYW1lIHx8ICEhcGhvbmUgfHwgISFlbWFpbDtcblxuICBpZighaGFzUGFzc3dvcmQgfHwgIWhhc1VzZXJuYW1lKSB7XG4gICAgbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7dXNlcm5hbWV9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU5WQUxJRF9BUkdVTUVOVFNcbiAgICB9LCBjb250ZXh0KTtcblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgaGFzaElkID0gdXNlcm5hbWUgfHwgcGhvbmUgfHwgZW1haWw7XG4gIGNvbnN0IHNhbHQgPSBjcmVhdGVIYXNoKGAke2hhc2hJZH0ke3Bhc3N3b3JkfWAsICcnKTtcbiAgY29uc3QgZW5jcnlwdGVkUGFzc3dvcmQgPSBjcmVhdGVQYXNzd29yZChwYXNzd29yZCwgc2FsdCk7XG4gIGxldCBleGlzdGluZ1VzZXI6IFVzZXJUeXBlIHwgbnVsbCA9IG51bGw7XG5cbiAgdHJ5IHtcbiAgICBleGlzdGluZ1VzZXIgPSBhd2FpdCBnZXRVc2VyQnlBdHRyaWJ1dGVzKGNvbnRleHQsIHtlbWFpbCwgcGhvbmUsIHVzZXJuYW1lfSk7XG4gICAgY29uc3QgaXNDb250YWN0T25seVVzZXIgPSBleGlzdGluZ1VzZXI/LnR5cGUgPT09ICdjcm1Db250YWN0JyB8fCBCb29sZWFuKGV4aXN0aW5nVXNlcj8uc2hvcGlmeUN1c3RvbWVySWQpO1xuXG4gICAgaWYoZXhpc3RpbmdVc2VyICYmICFpc0NvbnRhY3RPbmx5VXNlcikge1xuICAgICAgdGhyb3cgbG9nRXhjZXB0aW9uKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgZW1haWwsXG4gICAgICAgICAgcGhvbmUsXG4gICAgICAgICAgdXNlcm5hbWVcbiAgICAgICAgfSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuRVhJU1RJTkdfSVRFTVxuICAgICAgfSwgY29udGV4dCk7XG4gICAgfVxuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtlbWFpbCwgcGhvbmUsIHVzZXJuYW1lfSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICB9XG5cbiAgY29uc3QgcGhvbmVDb3VudHJ5Q29kZSA9IHBob25lPy5yZXBsYWNlKC9cXEQvZywgJycpLnN1YnN0cmluZygwLCAzKTtcbiAgY29uc3QgbG9jYWxlID0gZGV0ZWN0TGFuZ3VhZ2Uoe1xuICAgIC4uLmxhbmd1YWdlQ29udGV4dCxcbiAgICBwaG9uZUNvdW50cnlDb2RlOiBwaG9uZUNvdW50cnlDb2RlIHx8ICcnLFxuICAgIHVzZXJQcmVmZXJlbmNlOiBpbnNlcnRVc2VyLmxvY2FsZSB8fCAnZW4nXG4gIH0pO1xuICBjb25zdCB2ZXJpZmllZEVtYWlsQ29kZSA9IE1hdGguZmxvb3IoMTAwMDAwICsgKE1hdGgucmFuZG9tKCkgKiA5MDAwMDApKTtcbiAgY29uc3QgdmVyaWZpZWRTbXNDb2RlID0gTWF0aC5mbG9vcigxMDAwMDAgKyAoTWF0aC5yYW5kb20oKSAqIDkwMDAwMCkpO1xuICBjb25zdCBtYXJrZXRpbmdPcHRJbiA9IGluc2VydFVzZXIubWFya2V0aW5nT3B0SW4gPz8gaW5zZXJ0VXNlci5tYWlsaW5nTGlzdDtcbiAgY29uc3QgdGltZXN0YW1wID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgbWFya2V0aW5nRmllbGRzID0gbWFya2V0aW5nT3B0SW4gPT09IHRydWVcbiAgICA/IHtcbiAgICAgIG1haWxpbmdMaXN0OiB0cnVlLFxuICAgICAgbWFya2V0aW5nQ29uc2VudFNvdXJjZTogaW5zZXJ0VXNlci5tYXJrZXRpbmdDb25zZW50U291cmNlIHx8IGV4aXN0aW5nVXNlcj8ubWFya2V0aW5nQ29uc2VudFNvdXJjZSB8fCAnYWNjb3VudC1zaWdudXAnLFxuICAgICAgbWFya2V0aW5nT3B0SW46IHRydWUsXG4gICAgICBtYXJrZXRpbmdPcHRJbkF0OiBpbnNlcnRVc2VyLm1hcmtldGluZ09wdEluQXQgfHwgZXhpc3RpbmdVc2VyPy5tYXJrZXRpbmdPcHRJbkF0IHx8IHRpbWVzdGFtcCxcbiAgICAgIG1hcmtldGluZ09wdE91dEF0OiB1bmRlZmluZWRcbiAgICB9XG4gICAgOiAobWFya2V0aW5nT3B0SW4gPT09IGZhbHNlID8ge1xuICAgICAgbWFpbGluZ0xpc3Q6IGZhbHNlLFxuICAgICAgbWFya2V0aW5nQ29uc2VudFNvdXJjZTogaW5zZXJ0VXNlci5tYXJrZXRpbmdDb25zZW50U291cmNlIHx8ICdhY2NvdW50LXNpZ251cCcsXG4gICAgICBtYXJrZXRpbmdPcHRJbjogZmFsc2UsXG4gICAgICBtYXJrZXRpbmdPcHRPdXRBdDogaW5zZXJ0VXNlci5tYXJrZXRpbmdPcHRPdXRBdCB8fCB0aW1lc3RhbXBcbiAgICB9IDoge30pO1xuXG4gIGNvbnN0IGluc2VydDogVXNlclR5cGUgPSB7XG4gICAgLi4uaW5zZXJ0VXNlcixcbiAgICBfa2V5OiBjcmVhdGVIYXNoKGhhc2hJZCksXG4gICAgYWN0aXZlOiB0cnVlLFxuICAgIGVtYWlsLFxuICAgIGxvY2FsZSxcbiAgICBwYXNzd29yZDogZW5jcnlwdGVkUGFzc3dvcmQsXG4gICAgcGhvbmUsXG4gICAgc2FsdCxcbiAgICB0eXBlOiAndXNlcicsXG4gICAgdXNlckFjY2VzczogVXNlckFjY2Vzcy5CQVNJQyxcbiAgICB1c2VybmFtZSxcbiAgICB2ZXJpZmllZEVtYWlsOiBmYWxzZSxcbiAgICB2ZXJpZmllZEVtYWlsQ29kZSxcbiAgICB2ZXJpZmllZFBob25lOiBmYWxzZSxcbiAgICB2ZXJpZmllZFNtc0NvZGUsXG4gICAgLi4ubWFya2V0aW5nRmllbGRzXG4gIH07XG5cbiAgY29uc3Qgc2F2ZVVzZXIgPSAoKTogUHJvbWlzZTxVc2VyVHlwZSB8IG51bGw+ID0+IHtcbiAgICBjb25zdCBleGlzdGluZ1VzZXJJZCA9IGV4aXN0aW5nVXNlcj8udXNlcklkIHx8IGV4aXN0aW5nVXNlcj8uX2tleTtcblxuICAgIGlmKCFleGlzdGluZ1VzZXJJZCkge1xuICAgICAgcmV0dXJuIGFkZEl0ZW08VXNlclR5cGU+KGNvbnRleHQsICd1c2VycycsIGluc2VydCk7XG4gICAgfVxuXG4gICAgY29uc3Qge19rZXk6IF9nZW5lcmF0ZWRLZXksIC4uLnVwZ3JhZGVGaWVsZHN9ID0gaW5zZXJ0O1xuICAgIHJldHVybiB1cGRhdGVJdGVtPFVzZXJUeXBlPihjb250ZXh0LCAndXNlcnMnLCBleGlzdGluZ1VzZXJJZCwgdXBncmFkZUZpZWxkcyk7XG4gIH07XG5cbiAgcmV0dXJuIGF3YWl0IHNhdmVVc2VyKClcbiAgICAudGhlbihhc3luYyAocmVzdWx0KSA9PiB7XG4gICAgICBjb25zdCBzYXZlZFVzZXIgPSBwYXJzZVVzZXJTYWZlKHJlc3VsdCk7XG4gICAgICBjb25zdCBzYXZlZFVzZXJJZCA9IHNhdmVkVXNlcj8udXNlcklkIHx8IHNhdmVkVXNlcj8uX2tleTtcblxuICAgICAgaWYoIXNhdmVkVXNlciB8fCAhc2F2ZWRVc2VySWQpIHtcbiAgICAgICAgcmV0dXJuIHNhdmVkVXNlcjtcbiAgICAgIH1cblxuICAgICAgaWYoc2F2ZWRVc2VyLnBlcnNvbmFJZCkge1xuICAgICAgICByZXR1cm4gc2F2ZWRVc2VyO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwZXJzb25hID0gYXdhaXQgYWRkUGVyc29uYShjb250ZXh0LCB7dXNlcklkOiBzYXZlZFVzZXJJZH0pO1xuICAgICAgICBjb25zdCBwZXJzb25hSWQgPSBwZXJzb25hPy5wZXJzb25hSWQgfHwgcGVyc29uYT8uX2tleTtcblxuICAgICAgICBpZighcGVyc29uYUlkKSB7XG4gICAgICAgICAgcmV0dXJuIHNhdmVkVXNlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVwZGF0ZWRVc2VyID0gYXdhaXQgdXBkYXRlSXRlbTxVc2VyVHlwZT4oY29udGV4dCwgJ3VzZXJzJywgc2F2ZWRVc2VySWQsIHtwZXJzb25hSWR9KTtcbiAgICAgICAgY29uc3QgcmVzdWx0VXNlciA9IHBhcnNlVXNlclNhZmUodXBkYXRlZFVzZXIpIHx8IHtcbiAgICAgICAgICAuLi5zYXZlZFVzZXIsXG4gICAgICAgICAgcGVyc29uYUlkXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdFVzZXI7XG4gICAgICB9IGNhdGNoKHBlcnNvbmFFcnJvcikge1xuICAgICAgICBhd2FpdCBsb2dFcnJvcih7XG4gICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgIHBhcmFtczoge3VzZXJJZDogc2F2ZWRVc2VySWR9LFxuICAgICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICAgIH0sIHBlcnNvbmFFcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG5cbiAgICAgICAgcmV0dXJuIHNhdmVkVXNlcjtcbiAgICAgIH1cbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgcGFyYW1zOiB7dXNlcm5hbWV9LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZVVzZXIgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgdXNlcjogVXNlclR5cGUpOiBQcm9taXNlPFVzZXJUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICd1cGRhdGVVc2VyJztcbiAgY29uc3QgdXBkYXRlZFVzZXIgPSBwYXJzZVVzZXIodXNlcik7XG4gIGNvbnN0IHtwYXNzd29yZCwgX2tleSwgX2lkLCAuLi51cGRhdGVGaWVsZHN9ID0gdXBkYXRlZFVzZXI7XG4gIGNvbnN0IHtpZH0gPSB1cGRhdGVkVXNlcjtcbiAgY29uc3QgdXBkYXRlID0gey4uLnVwZGF0ZUZpZWxkc30gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgdHJ5IHtcbiAgICBpZihwYXNzd29yZCkge1xuICAgICAgY29uc3QgZXhpc3RpbmdVc2VyID0gYXdhaXQgdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbGBcbiAgICAgICAgUkVUVVJOIERPQ1VNRU5UKCR7aWR9KVxuICAgICAgYCkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKSBhcyBVc2VyVHlwZSB8IG51bGw7XG4gICAgICBjb25zdCBoYXNoSWQgPSBleGlzdGluZ1VzZXI/LnVzZXJuYW1lIHx8IGV4aXN0aW5nVXNlcj8ucGhvbmUgfHwgZXhpc3RpbmdVc2VyPy5lbWFpbCB8fCBpZCB8fCBfa2V5IHx8IF9pZCB8fCAnJztcbiAgICAgIGNvbnN0IHNhbHQgPSBleGlzdGluZ1VzZXI/LnNhbHQgfHwgY3JlYXRlSGFzaChgJHtoYXNoSWR9JHtwYXNzd29yZH1gLCAnJyk7XG5cbiAgICAgIHVwZGF0ZS5wYXNzd29yZCA9IGNyZWF0ZVBhc3N3b3JkKHBhc3N3b3JkLCBzYWx0KTtcblxuICAgICAgaWYoIWV4aXN0aW5nVXNlcj8uc2FsdCkge1xuICAgICAgICB1cGRhdGUuc2FsdCA9IHNhbHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgdXBkYXRlZFVzZXJSZXN1bHQgPSBhd2FpdCB1cGRhdGVJdGVtPFVzZXJUeXBlPihjb250ZXh0LCAndXNlcnMnLCBpZCwgdXBkYXRlIGFzIFVzZXJUeXBlKTtcbiAgICByZXR1cm4gcGFyc2VVc2VyU2FmZSh1cGRhdGVkVXNlclJlc3VsdCkgYXMgVXNlclR5cGU7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge3VzZXJ9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBmb3Jnb3RQYXNzd29yZCA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCB1c2VyOiBVc2VyVHlwZSk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZm9yZ290UGFzc3dvcmQnO1xuICBjb25zdCB7ZW1haWwsIHBob25lLCB1c2VybmFtZX0gPSBwYXJzZVVzZXIodXNlcik7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBleGlzdGluZ1VzZXIgPSBhd2FpdCBnZXRVc2VyQnlBdHRyaWJ1dGVzKGNvbnRleHQsIHtlbWFpbCwgcGhvbmUsIHVzZXJuYW1lfSk7XG5cbiAgICBpZihleGlzdGluZ1VzZXIpIHtcbiAgICAgIGNvbnN0IHtlbWFpbCwgcGhvbmUsIHZlcmlmaWVkRW1haWwsIHZlcmlmaWVkUGhvbmV9ID0gZXhpc3RpbmdVc2VyIGFzIFVzZXJUeXBlO1xuICAgICAgY29uc3QgY29kZUV4cGlyZXMgPSBEYXRlLm5vdygpICsgKDEwMDAgKiA2MCAqIDE1KTtcbiAgICAgIGNvbnN0IGNvZGUgPSBNYXRoLmZsb29yKDEwMDAwMCArIChNYXRoLnJhbmRvbSgpICogOTAwMDAwKSk7XG4gICAgICBsZXQgdXBkYXRlO1xuXG4gICAgICBpZihlbWFpbCAmJiB2ZXJpZmllZEVtYWlsKSB7XG4gICAgICAgIHNlbmRFbWFpbCh7XG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBodG1sOiBgPHA+WW91ciBwYXNzd29yZCByZXNldCBjb2RlIGlzIDxzdHJvbmc+JHtjb2RlfTwvc3Ryb25nPi48L3A+YCxcbiAgICAgICAgICBzdWJqZWN0OiBgJHtnZXRBcHBUaXRsZShnZXRBcHBOYW1lKGNvbnRleHQpKX0gcGFzc3dvcmQgcmVzZXQgY29kZWAsXG4gICAgICAgICAgdGV4dDogYFlvdXIgY29kZSBpcyAke2NvZGV9YCxcbiAgICAgICAgICB1c2VyOiBleGlzdGluZ1VzZXJcbiAgICAgICAgfSk7XG4gICAgICAgIHVwZGF0ZSA9IHt2ZXJpZmllZEVtYWlsQ29kZTogY29kZSwgdmVyaWZpZWRFbWFpbEV4cGlyZXM6IGNvZGVFeHBpcmVzfTtcbiAgICAgIH1cblxuICAgICAgaWYocGhvbmUgJiYgdmVyaWZpZWRQaG9uZSkge1xuICAgICAgICBzZW5kU21zKHtcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIHRleHQ6IGBZb3VyIGNvZGUgaXMgJHtjb2RlfWBcbiAgICAgICAgfSk7XG4gICAgICAgIHVwZGF0ZSA9IHt2ZXJpZmllZFBob25lRXhwaXJlczogY29kZUV4cGlyZXMsIHZlcmlmaWVkU21zQ29kZTogY29kZX07XG4gICAgICB9XG5cbiAgICAgIGlmKHVwZGF0ZT8udmVyaWZpZWRFbWFpbENvZGUgfHwgdXBkYXRlPy52ZXJpZmllZFNtc0NvZGUpIHtcbiAgICAgICAgY29uc3QgdXNlckRvY0lkID0gZ2V0RG9jSWQoQ09MTEVDVElPTlMuVVNFUlMsIGV4aXN0aW5nVXNlcik7XG5cbiAgICAgICAgYXdhaXQgdXBkYXRlSXRlbTxVc2VyVHlwZT4oY29udGV4dCwgQ09MTEVDVElPTlMuVVNFUlMsIHVzZXJEb2NJZCwgdXBkYXRlKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7ZW1haWwsIHBob25lLCB1c2VybmFtZX0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHJlc2V0UGFzc3dvcmQgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHtjb2RlLCB1c2VyfToge2NvZGU6IG51bWJlcjsgdXNlcjogVXNlclR5cGU7fVxuKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdyZXNldFBhc3N3b3JkJztcbiAgY29uc3Qge2VtYWlsLCBwYXNzd29yZCwgcGhvbmUsIHVzZXJuYW1lfSA9IHBhcnNlVXNlcih1c2VyKTtcbiAgY29uc3QgZm9ybWF0UGFzc3dvcmQgPSBwYXJzZVBhc3N3b3JkKHBhc3N3b3JkKTtcblxuICB0cnkge1xuICAgIGNvbnN0IGV4aXN0aW5nVXNlciA9IGF3YWl0IGdldFVzZXJCeUF0dHJpYnV0ZXMoY29udGV4dCwge2VtYWlsLCBwaG9uZSwgdXNlcm5hbWV9KTtcblxuICAgIGlmKGV4aXN0aW5nVXNlcikge1xuICAgICAgY29uc3Qge1xuICAgICAgICBzYWx0LFxuICAgICAgICB2ZXJpZmllZEVtYWlsQ29kZSxcbiAgICAgICAgdmVyaWZpZWRFbWFpbEV4cGlyZXMgPSAwLFxuICAgICAgICB2ZXJpZmllZFNtc0NvZGUsXG4gICAgICAgIHZlcmlmaWVkUGhvbmVFeHBpcmVzID0gMFxuICAgICAgfSA9IGV4aXN0aW5nVXNlciBhcyBVc2VyVHlwZTtcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICBsZXQgdXBkYXRlO1xuXG4gICAgICBpZihlbWFpbCAmJiBjb2RlID09PSB2ZXJpZmllZEVtYWlsQ29kZSAmJiB2ZXJpZmllZEVtYWlsRXhwaXJlcyA+IG5vdykge1xuICAgICAgICBjb25zdCBwYXNzd29yZCA9IGNyZWF0ZVBhc3N3b3JkKGZvcm1hdFBhc3N3b3JkLCBzYWx0KTtcbiAgICAgICAgdXBkYXRlID0ge3Bhc3N3b3JkfTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYocGhvbmUgJiYgY29kZSA9PT0gdmVyaWZpZWRTbXNDb2RlICYmIHZlcmlmaWVkUGhvbmVFeHBpcmVzID4gbm93KSB7XG4gICAgICAgIGNvbnN0IHBhc3N3b3JkID0gY3JlYXRlUGFzc3dvcmQoZm9ybWF0UGFzc3dvcmQsIHNhbHQpO1xuICAgICAgICB1cGRhdGUgPSB7cGFzc3dvcmR9O1xuICAgICAgfVxuXG4gICAgICBpZih1cGRhdGUpIHtcbiAgICAgICAgY29uc3QgdXNlckRvY0lkID0gZ2V0RG9jSWQoQ09MTEVDVElPTlMuVVNFUlMsIGV4aXN0aW5nVXNlcik7XG5cbiAgICAgICAgYXdhaXQgdXBkYXRlSXRlbTxVc2VyVHlwZT4oY29udGV4dCwgQ09MTEVDVElPTlMuVVNFUlMsIHVzZXJEb2NJZCwgdXBkYXRlKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge3VzZXJuYW1lfSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3Qgc2VuZFZlcmlmaWNhdGlvbkVtYWlsID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIHVzZXI6IFVzZXJUeXBlKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdzZW5kVmVyaWZpY2F0aW9uRW1haWwnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtlbWFpbH0gPSBwYXJzZVVzZXIodXNlcik7XG5cbiAgaWYoIWVtYWlsKSB7XG4gICAgbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7ZW1haWx9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU5WQUxJRF9BUkdVTUVOVFNcbiAgICB9LCBjb250ZXh0KTtcblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCB2ZXJpZmllZEVtYWlsQ29kZSA9IE1hdGguZmxvb3IoMTAwMDAwICsgKE1hdGgucmFuZG9tKCkgKiA5MDAwMDApKTtcbiAgICBjb25zdCB1cGRhdGVRdWVyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgICBGT1IgdSBJTiAke3VzZXJzQ29sbGVjdGlvbn1cbiAgICAgICAgRklMVEVSIHUuZW1haWwgPT0gJHtlbWFpbH1cbiAgICAgICAgRklMVEVSIHUudmVyaWZpZWRFbWFpbCAhPSB0cnVlXG4gICAgICAgIEZJTFRFUiAhSEFTKHUsIFwidmVyaWZpZWRFbWFpbEV4cGlyZXNcIikgfHwgdS52ZXJpZmllZEVtYWlsRXhwaXJlcyA8PSAke25vd31cbiAgICAgICAgTElNSVQgMVxuICAgICAgICBVUERBVEUgdSBXSVRIICR7e1xuICAgICAgICAgIHZlcmlmaWVkRW1haWxDb2RlLFxuICAgICAgICAgIHZlcmlmaWVkRW1haWxFeHBpcmVzOiBub3cgKyBWRVJJRklDQVRJT05fRU1BSUxfQ09PTERPV05fTVNcbiAgICAgICAgfX0gSU4gJHt1c2Vyc0NvbGxlY3Rpb259XG4gICAgICAgIFJFVFVSTiBORVdcbiAgICBgO1xuXG4gICAgY29uc3QgY3Vyc29yID0gYXdhaXQgdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeSh1cGRhdGVRdWVyeSk7XG4gICAgY29uc3QgcmF3VXNlciA9IGF3YWl0IGN1cnNvci5uZXh0KCk7XG4gICAgY29uc3QgZm91bmRVc2VyID0gcmF3VXNlciA/IHBhcnNlVXNlcihyYXdVc2VyKSA6IG51bGw7XG5cbiAgICBpZighZm91bmRVc2VyKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHNlbmRFbWFpbCh7XG4gICAgICBjb250ZXh0LFxuICAgICAgLi4uYnVpbGRWZXJpZmljYXRpb25FbWFpbChjb250ZXh0LCB2ZXJpZmllZEVtYWlsQ29kZSwgdXNlciksXG4gICAgICB1c2VyOiB7XG4gICAgICAgIC4uLmZvdW5kVXNlcixcbiAgICAgICAgdmVyaWZpZWRFbWFpbENvZGVcbiAgICAgIH1cbiAgICB9KTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7ZW1haWx9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjb25maXJtQ29kZSA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAge1xuICAgIGNvZGUsXG4gICAgdHlwZSxcbiAgICB2YWx1ZVxuICB9OiB7XG4gICAgY29kZTogbnVtYmVyO1xuICAgIHR5cGU6ICdzbXMnIHwgJ2VtYWlsJztcbiAgICB2YWx1ZTogc3RyaW5nO1xuICB9XG4pOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2NvbmZpcm1Db2RlJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCBpc1NtcyA9IHR5cGUgPT09ICdzbXMnO1xuICBjb25zdCBmb3JtYXR0ZWRWYWx1ZSA9IGlzU21zID8gcGFyc2VQaG9uZSh2YWx1ZSkgOiBwYXJzZUVtYWlsKHZhbHVlKTtcbiAgY29uc3QgZmlsdGVyQnlUeXBlID0gaXNTbXNcbiAgICA/IGFxbGBGSUxURVIgdS5waG9uZSA9PSAke2Zvcm1hdHRlZFZhbHVlfSAmJiB1LnZlcmlmaWVkU21zQ29kZSA9PSAke2NvZGV9YFxuICAgIDogYXFsYEZJTFRFUiB1LmVtYWlsID09ICR7Zm9ybWF0dGVkVmFsdWV9ICYmIHUudmVyaWZpZWRFbWFpbENvZGUgPT0gJHtjb2RlfWA7XG4gIGNvbnN0IGFxbFF1ZXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgdSBJTiAke3VzZXJzQ29sbGVjdGlvbn1cbiAgICAgICR7ZmlsdGVyQnlUeXBlfVxuICAgICAgTElNSVQgMVxuICAgICAgUkVUVVJOIHVcbiAgYDtcblxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFF1ZXJ5KVxuICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAgIC50aGVuKCh1c2VyKSA9PiB7XG4gICAgICAgIGlmKHVzZXIpIHtcbiAgICAgICAgICBjb25zdCB1cGRhdGVkVXNlciA9IGlzU21zXG4gICAgICAgICAgICA/IHt2ZXJpZmllZFBob25lOiB0cnVlLCB2ZXJpZmllZFNtc0NvZGU6IDB9XG4gICAgICAgICAgICA6IHt2ZXJpZmllZEVtYWlsOiB0cnVlLCB2ZXJpZmllZEVtYWlsQ29kZTogMH07XG4gICAgICAgICAgY29uc3QgYXFsUXVlcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQREFURSAke3VzZXIuX2tleX0gV0lUSCAke3VwZGF0ZWRVc2VyfSBJTiB1c2Vyc2A7XG5cbiAgICAgICAgICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRdWVyeSlcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHRydWUpXG4gICAgICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgICAgICBsb2dFcnJvcih7XG4gICAgICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgICAgICAgIHBhcmFtczoge2NvZGUsIHR5cGUsIHZhbHVlOiBmb3JtYXR0ZWRWYWx1ZX0sXG4gICAgICAgICAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgICAgICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuXG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge2NvZGUsIHR5cGUsIHZhbHVlOiBmb3JtYXR0ZWRWYWx1ZX0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZVVzZXIgPSAoY29udGV4dDogQXBpQ29udGV4dCwgdXNlcjogVXNlclR5cGUpOiBQcm9taXNlPFVzZXJUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdkZWxldGVVc2VyJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCB7aWR9ID0gcGFyc2VVc2VyKHVzZXIpO1xuXG4gIGNvbnN0IGFxbFF1ZXJ5OiBBcWxRdWVyeSA9IGFxbGBMRVQgdSA9IERPQ1VNRU5UKCR7aWR9KVxuICAgIFJFTU9WRSB1IElOIHVzZXJzXG4gICAgUkVUVVJOIE9MRGA7XG5cbiAgY29uc3Qgc3RyaXBlQ2xpZW50ID0gZ2V0U3RyaXBlQ2xpZW50KCk7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXVlcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigodXNlcikgPT4gcGFyc2VVc2VyU2FmZSh1c2VyKSlcbiAgICAudGhlbigoZGVsZXRlZFVzZXIpID0+IHN0cmlwZUNsaWVudC5jdXN0b21lcnMuZGVsKGRlbGV0ZWRVc2VyPy5zdHJpcGVDdXN0b21lcklkKVxuICAgICAgLnRoZW4oKCkgPT4gc3RyaXBlQ2xpZW50LmFjY291bnRzLmRlbChkZWxldGVkVXNlcj8uc3RyaXBlQWNjb3VudElkKSlcbiAgICAgIC50aGVuKCgpID0+IGRlbGV0ZWRVc2VyIGFzIFVzZXJUeXBlKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtpZH0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVhY3RpdmF0ZVVzZXIgPSAoY29udGV4dDogQXBpQ29udGV4dCwgdXNlcjogVXNlclR5cGUpOiBQcm9taXNlPFVzZXJUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdkZWFjdGl2YXRlVXNlcic7XG4gIGNvbnN0IHtpZH0gPSBwYXJzZVVzZXIodXNlcik7XG4gIGNvbnN0IHVwZGF0ZWQ6IFVzZXJUeXBlID0ge1xuICAgIGFjdGl2ZTogZmFsc2VcbiAgfTtcblxuICByZXR1cm4gdXBkYXRlSXRlbTxVc2VyVHlwZT4oY29udGV4dCwgJ3VzZXJzJywgaWQsIHVwZGF0ZWQpXG4gICAgLnRoZW4oKHVwZGF0ZWRVc2VyKSA9PiBwYXJzZVVzZXJTYWZlKHVwZGF0ZWRVc2VyKSBhcyBVc2VyVHlwZSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtpZH0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VXNlckRpc3BsYXlOYW1lID0gKHVzZXI6IFVzZXJUeXBlKTogc3RyaW5nID0+IHtcbiAgY29uc3Qge2ZpcnN0TmFtZSwgbGFzdE5hbWUsIG5hbWUgPSAnJywgdXNlcm5hbWUgPSAnJ30gPSB1c2VyO1xuICBjb25zdCBmdWxsbmFtZSA9IChbZmlyc3ROYW1lLCBsYXN0TmFtZV0pLmpvaW4oJyAnKS50cmltKCk7XG5cbiAgaWYobmFtZSkge1xuICAgIHJldHVybiBuYW1lO1xuICB9IGVsc2UgaWYoZnVsbG5hbWUgIT09ICcnKSB7XG4gICAgcmV0dXJuIGZ1bGxuYW1lO1xuICB9IGVsc2UgaWYodXNlcm5hbWUpIHtcbiAgICByZXR1cm4gdXNlcm5hbWU7XG4gIH1cblxuICByZXR1cm4gJ1Vua25vd24nO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFNlc3Npb25Vc2VyID0gKGNvbnRleHQ6IEFwaUNvbnRleHQpOiBQcm9taXNlPFVzZXJUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRTZXNzaW9uVXNlcic7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIGZpZWxkcywgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkLCB1c2VybmFtZX0gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRVc2VyT3B0aW9uYWxGaWVsZHMoZmllbGRzKTtcbiAgY29uc3QgZm9ybWF0U2Vzc2lvbklkID0gcGFyc2VBcmFuZ29JZChgdXNlcnMvJHtzZXNzaW9uSWR9YCk7XG5cbiAgY29uc3QgYXFsUXVlcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgIExFVCB1ID0gRE9DVU1FTlQoJHtmb3JtYXRTZXNzaW9uSWR9KVxuICAgICR7bGl0ZXJhbChzZWxlY3RRdWVyaWVzLmpvaW4oJ1xcbicpKX1cbiAgICBSRVRVUk4gJHtzZWxlY3RPYmplY3RzLmxlbmd0aCA+IDAgPyBsaXRlcmFsKGBNRVJHRSh1LCB7JHtzZWxlY3RPYmplY3RzLmpvaW4oJywgJyl9fSlgKSA6IGxpdGVyYWwoJ3UnKX1cbiAgYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRdWVyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKCh1c2VyKSA9PiBwYXJzZVVzZXJTYWZlKHVzZXIpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHBhcmFtczoge3VzZXJJZDogc2Vzc2lvbklkLCB1c2VybmFtZX0sXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VXNlckJ5SWQgPSAoY29udGV4dDogQXBpQ29udGV4dCwgdXNlcjogVXNlclR5cGUpOiBQcm9taXNlPFVzZXJUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRVc2VyQnlJZCc7XG4gIGNvbnN0IHtlbWFpbCwgaWQsIHBob25lLCB1c2VySWQsIHVzZXJuYW1lfSA9IHBhcnNlVXNlcih1c2VyKTtcbiAgY29uc3Qge2ZpZWxkc30gPSBjb250ZXh0O1xuICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRVc2VyT3B0aW9uYWxGaWVsZHMoZmllbGRzKTtcblxuICBpZihpZCkge1xuICAgIHJldHVybiBnZXRJdGVtQnk8VXNlclR5cGU+KGNvbnRleHQsICd1c2VycycsIHtcbiAgICAgIGxvZ2ljOiAnQU5EJyxcbiAgICAgIGNvbmRpdGlvbnM6IFtcbiAgICAgICAge2ZpZWxkOiAnX2lkJywgb3BlcmF0b3I6ICc9PScsIHZhbHVlOiBpZH0sXG4gICAgICAgIHtmaWVsZDogJ2FjdGl2ZScsIG9wZXJhdG9yOiAnIT0nLCB2YWx1ZTogZmFsc2V9XG4gICAgICBdXG4gICAgfSBhcyBhbnksIHtcbiAgICAgIGN1c3RvbVF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXMsXG4gICAgICBjdXN0b21PYmplY3RzOiBzZWxlY3RPYmplY3RzXG4gICAgfSlcbiAgICAgIC50aGVuKChyZXN1bHQpID0+IHBhcnNlVXNlclNhZmUocmVzdWx0KSBhcyBVc2VyVHlwZSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHBhcmFtczoge2lkLCB1c2VySWQsIHVzZXJuYW1lfSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG4gIH1cblxuICBjb25zdCBmaWx0ZXJzID0gYnVpbGRVc2VyQXR0cmlidXRlRmlsdGVycyh7ZW1haWwsIHBob25lLCB1c2VySWQsIHVzZXJuYW1lfSwge2FjdGl2ZTogdHJ1ZX0pO1xuXG4gIGlmKGZpbHRlcnMuY29uZGl0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwgYXMgdW5rbm93biBhcyBVc2VyVHlwZSk7XG4gIH1cblxuICByZXR1cm4gZ2V0SXRlbUJ5PFVzZXJUeXBlPihjb250ZXh0LCAndXNlcnMnLCBmaWx0ZXJzLCB7XG4gICAgY3VzdG9tUXVlcmllczogc2VsZWN0UXVlcmllcyxcbiAgICBjdXN0b21PYmplY3RzOiBzZWxlY3RPYmplY3RzXG4gIH0pXG4gICAgLnRoZW4oKHJlc3VsdCkgPT4gcGFyc2VVc2VyU2FmZShyZXN1bHQpIGFzIFVzZXJUeXBlKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge2lkLCB1c2VySWQsIHVzZXJuYW1lfSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRVc2VyTGlzdCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBvcHRpb25zPzogVXNlck9wdGlvbnMpOiBQcm9taXNlPFVzZXJUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFVzZXJMaXN0JztcbiAgY29uc3Qge2ZpZWxkc30gPSBjb250ZXh0O1xuICBjb25zdCB7bGltaXQsIHVzZXJuYW1lfSA9IHBhcnNlVXNlck9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldFVzZXJPcHRpb25hbEZpZWxkcyhmaWVsZHMpO1xuICBjb25zdCBjb25kaXRpb25zOiBhbnlbXSA9IFtcbiAgICB7ZmllbGQ6ICdhY3RpdmUnLCBvcGVyYXRvcjogJyE9JywgdmFsdWU6IGZhbHNlfVxuICBdO1xuXG4gIGlmKHVzZXJuYW1lKSB7XG4gICAgY29uZGl0aW9ucy5wdXNoKHtmaWVsZDogJ3VzZXJuYW1lJywgb3BlcmF0b3I6ICdDT05UQUlOUycsIHZhbHVlOiBwYXJzZVVzZXJuYW1lKHVzZXJuYW1lKSwgY2FzZVNlbnNpdGl2ZTogZmFsc2V9KTtcbiAgfVxuXG4gIHJldHVybiBnZXRMaXN0Qnk8VXNlclR5cGU+KGNvbnRleHQsICd1c2VycycsIHtcbiAgICBsb2dpYzogJ0FORCcsXG4gICAgY29uZGl0aW9uc1xuICB9IGFzIGFueSwge1xuICAgIHNvcnQ6IFt7ZmllbGQ6ICd1c2VybmFtZScsIGRpcmVjdGlvbjogJ0FTQyd9XSxcbiAgICBsaW1pdDoge2Zyb206IGxpbWl0LnN0YXJ0LCB0bzogbGltaXQuc3RhcnQgKyBsaW1pdC5udW19LFxuICAgIGN1c3RvbVF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXMsXG4gICAgY3VzdG9tT2JqZWN0czogc2VsZWN0T2JqZWN0c1xuICB9KVxuICAgIC50aGVuKChyZXN1bHQpID0+IHBhcnNlVXNlckxpc3QocmVzdWx0KSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuXG4gICAgICByZXR1cm4gW10gYXMgVXNlclR5cGVbXTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRVc2VyTGlzdEJ5UmVhY3Rpb25zID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB7cmVhY3Rpb25zID0gW10sIHVzZXJuYW1lfToge3JlYWN0aW9ucz86IHN0cmluZ1tdOyB1c2VybmFtZT86IHN0cmluZ30sXG4gIG9wdGlvbnM/OiBVc2VyT3B0aW9uc1xuKTogUHJvbWlzZTxVc2VyVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRVc2VyTGlzdEJ5UmVhY3Rpb25zJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgZmllbGRzLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9ID0ge319ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0UmVhY3Rpb25zOiBzdHJpbmdbXSA9IHJlYWN0aW9ucy5tYXAoKHJlYWN0aW9uTmFtZTogc3RyaW5nKSA9PiBwYXJzZUNoYXIocmVhY3Rpb25OYW1lLCAzMikudG9Mb3dlckNhc2UoKSk7XG4gIGNvbnN0IHtsaW1pdH0gPSBwYXJzZVVzZXJPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRVc2VyT3B0aW9uYWxGaWVsZHMoZmllbGRzKTtcbiAgY29uc3QgZm9ybWF0U2Vzc2lvbklkID0gYHVzZXJzLyR7c2Vzc2lvbklkfWA7XG4gIGNvbnN0IGZvcm1hdFVzZXJuYW1lID0gcGFyc2VVc2VybmFtZSh1c2VybmFtZSk7XG4gIGNvbnN0IGZpbHRlckJ5OiBzdHJpbmdbXSA9IFtcbiAgICAndS5hY3RpdmUgIT0gZmFsc2UnLFxuICAgIGBQT1NJVElPTigke0pTT04uc3RyaW5naWZ5KGZvcm1hdFJlYWN0aW9ucyl9LCBMT1dFUihyLm5hbWUpKWBcbiAgXTtcblxuICBpZih1c2VybmFtZSkge1xuICAgIGZpbHRlckJ5LnB1c2goYENPTlRBSU5TKHUudXNlcm5hbWUsIFwiJHtmb3JtYXRVc2VybmFtZX1cIilgKTtcbiAgfVxuXG4gIGNvbnN0IGFxbFF1ZXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgdSwgciBJTiBPVVRCT1VORCAke2Zvcm1hdFNlc3Npb25JZH0gJHtoYXNSZWFjdGlvbkNvbGxlY3Rpb259XG4gICAgICBPUFRJT05TIHt2ZXJ0ZXhDb2xsZWN0aW9uczogJHtDT0xMRUNUSU9OUy5VU0VSU319XG4gICAgICAke2xpdGVyYWwoc2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKSl9XG4gICAgICBGSUxURVIgJHtsaXRlcmFsKGZpbHRlckJ5LmpvaW4oJyAmJiAnKSl9XG4gICAgICAke2xpdGVyYWwobGltaXQuYXFsKX1cbiAgICAgIFJFVFVSTiAke3NlbGVjdE9iamVjdHMubGVuZ3RoID4gMCA/IGxpdGVyYWwoYE1FUkdFKHUsIHske3NlbGVjdE9iamVjdHMuam9pbignLCAnKX19KWApIDogbGl0ZXJhbCgndScpfVxuICBgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFF1ZXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSlcbiAgICAudGhlbigodXNlcnMpID0+IHBhcnNlVXNlckxpc3QodXNlcnMpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG5cbiAgICAgIHJldHVybiBbXSBhcyBVc2VyVHlwZVtdO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFVzZXJMaXN0QnlUYWdzID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB7dGFncywgdXNlcm5hbWV9LFxuICBvcHRpb25zPzogVXNlck9wdGlvbnNcbik6IFByb21pc2U8VXNlclR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0VXNlckxpc3RCeVRhZ3MnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBmaWVsZHMsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH0gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRUYWdzOiBzdHJpbmdbXSA9IHRhZ3M/LnJlZHVjZSgobGlzdDogc3RyaW5nW10sIHRhZ05hbWU6IHN0cmluZykgPT4ge1xuICAgIGlmKHRhZ05hbWUpIHtcbiAgICAgIGxpc3QucHVzaChwYXJzZUNoYXIodGFnTmFtZSwgMzIpLnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cblxuICAgIHJldHVybiBsaXN0O1xuICB9LCBbXSk7XG4gIGNvbnN0IHtsaW1pdH0gPSBwYXJzZVVzZXJPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRVc2VyT3B0aW9uYWxGaWVsZHMoZmllbGRzKTtcbiAgY29uc3QgZm9ybWF0VXNlcm5hbWUgPSBwYXJzZVVzZXJuYW1lKHVzZXJuYW1lKTtcbiAgY29uc3QgZmlsdGVyQnk6IHN0cmluZ1tdID0gW1xuICAgIGB1Ll9rZXkgIT0gXCIke3Nlc3Npb25JZH1cImAsXG4gICAgJ3UuYWN0aXZlICE9IGZhbHNlJ1xuICBdO1xuXG4gIGlmKHVzZXJuYW1lKSB7XG4gICAgZmlsdGVyQnkucHVzaChgQ09OVEFJTlModS51c2VybmFtZSwgXCIke2Zvcm1hdFVzZXJuYW1lfVwiKWApO1xuICB9XG5cbiAgY29uc3QgYXFsUXVlcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgIEZPUiB0IElOIHRhZ3NcbiAgICAgIEZJTFRFUiBQT1NJVElPTigke2Zvcm1hdFRhZ3N9LCBMT1dFUih0Lm5hbWUpKVxuICAgICAgRk9SIHUsIGl0IElOIE9VVEJPVU5EIHQgJHtpc1RhZ2dlZENvbGxlY3Rpb259XG4gICAgICAgIE9QVElPTlMge2JmczogdHJ1ZSwgdW5pcXVlVmVydGljZXM6IFwiZ2xvYmFsXCIsIHZlcnRleENvbGxlY3Rpb25zOiAke0NPTExFQ1RJT05TLlVTRVJTfX1cbiAgICAgICAgJHtsaXRlcmFsKHNlbGVjdFF1ZXJpZXMuam9pbignXFxuJykpfVxuICAgICAgICBGSUxURVIgJHtsaXRlcmFsKGZpbHRlckJ5LmpvaW4oJyAmJiAnKSl9XG4gICAgICAgICR7bGl0ZXJhbChsaW1pdC5hcWwpfVxuICAgICAgICBSRVRVUk4gRElTVElOQ1QgJHtzZWxlY3RPYmplY3RzLmxlbmd0aCA+IDAgPyBsaXRlcmFsKGBNRVJHRSh1LCB7JHtzZWxlY3RPYmplY3RzLmpvaW4oJywgJyl9fSlgKSA6IGxpdGVyYWwoJ3UnKX1cbiAgYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRdWVyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgLnRoZW4oKHVzZXJzKSA9PiBwYXJzZVVzZXJMaXN0KHVzZXJzKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuXG4gICAgICByZXR1cm4gW10gYXMgVXNlclR5cGVbXTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRVc2VyTGlzdEJ5TGF0ZXN0ID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHt1c2VybmFtZX0sIG9wdGlvbnM/OiBVc2VyT3B0aW9ucyk6IFByb21pc2U8VXNlclR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0VXNlckxpc3RCeUxhdGVzdCc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIGZpZWxkcywgc2Vzc2lvbjoge3VzZXJJZH0gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCB7bGltaXR9ID0gcGFyc2VVc2VyT3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3QgZmlsdGVyID0gW1xuICAgICd1Ll9pZCAhPSBzZXNzaW9uLl9pZCcsXG4gICAgJ3UuYWN0aXZlICE9IGZhbHNlJ1xuICBdO1xuICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRVc2VyT3B0aW9uYWxGaWVsZHMoZmllbGRzKTtcblxuICBpZih1c2VybmFtZSkge1xuICAgIGZpbHRlci5wdXNoKGBDT05UQUlOUyh1LnVzZXJuYW1lLCBcIiR7cGFyc2VVc2VybmFtZSh1c2VybmFtZSl9XCIpYCk7XG4gIH1cblxuICAvLyBHZXQgZGF0YSBmcm9tIGRhdGFiYXNlXG4gIGNvbnN0IGFxbFF1ZXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgdSBJTiAke3VzZXJzQ29sbGVjdGlvbn1cbiAgICAgIExFVCBzZXNzaW9uID0gRE9DVU1FTlQoJHtgdXNlcnMvJHt1c2VySWR9YH0pXG4gICAgICBGSUxURVIgJHtsaXRlcmFsKGZpbHRlci5qb2luKCcgJiYgJykpfVxuICAgICAgJHtsaXRlcmFsKHNlbGVjdFF1ZXJpZXMuam9pbignXFxuJykpfVxuICAgICAgTEVUIGRpc3RhbmNlID0gRElTVEFOQ0UodS5sYXRpdHVkZSB8fCAwLCB1LmxvbmdpdHVkZSB8fCAwLCBzZXNzaW9uLmxhdGl0dWRlIHx8IDAsIHNlc3Npb24ubG9uZ2l0dWRlIHx8IDApXG4gICAgICAke2xpdGVyYWwobGltaXQuYXFsKX1cbiAgICAgIFNPUlQgZGlzdGFuY2UgQVNDLCB1LmFkZGVkIERFU0NcbiAgICAgIFJFVFVSTiAke3NlbGVjdE9iamVjdHMubGVuZ3RoID4gMCA/IGxpdGVyYWwoYE1FUkdFKHUsIHske3NlbGVjdE9iamVjdHMuam9pbignLCAnKX19KWApIDogbGl0ZXJhbCgndScpfVxuICBgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFF1ZXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSlcbiAgICAudGhlbigodXNlcnMpID0+IHBhcnNlVXNlckxpc3QodXNlcnMpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG5cbiAgICAgIHJldHVybiBbXSBhcyBVc2VyVHlwZVtdO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFVzZXJMaXN0QnlDb25uZWN0aW9uID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB7dXNlcklkfTogVXNlclR5cGUsXG4gIG9wdGlvbnM/OiBVc2VyT3B0aW9uc1xuKTogUHJvbWlzZTxVc2VyVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRVc2VyTGlzdEJ5Q29ubmVjdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIGZpZWxkc30gPSBjb250ZXh0O1xuICBjb25zdCB7bGltaXQsIHVzZXJuYW1lfSA9IHBhcnNlVXNlck9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldFVzZXJPcHRpb25hbEZpZWxkcyhmaWVsZHMpO1xuICBjb25zdCBmb3JtYXRVc2VySWQgPSBwYXJzZUFyYW5nb0lkKGB1c2Vycy8ke3VzZXJJZH1gKTtcbiAgY29uc3QgZmlsdGVyQnk6IHN0cmluZ1tdID0gW1xuICAgICd1LmFjdGl2ZSAhPSBmYWxzZSdcbiAgXTtcblxuICBpZih1c2VybmFtZSkge1xuICAgIGZpbHRlckJ5LnB1c2goYENPTlRBSU5TKHUudXNlcm5hbWUsIFwiJHtwYXJzZVVzZXJuYW1lKHVzZXJuYW1lKX1cIilgKTtcbiAgfVxuXG4gIGNvbnN0IGFxbFF1ZXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgY3UgSU4gJHt1c2Vyc0NvbGxlY3Rpb259XG4gICAgICBMRVQgc2Vzc2lvbiA9IERPQ1VNRU5UKCR7Zm9ybWF0VXNlcklkfSlcbiAgICAgIEZPUiB1LCBjb25uZWN0aW9uIElOIE9VVEJPVU5EIGN1ICR7aGFzQ29ubmVjdGlvbkNvbGxlY3Rpb259XG4gICAgICAgIE9QVElPTlMge2JmczogdHJ1ZSwgdW5pcXVlVmVydGljZXM6IFwiZ2xvYmFsXCIsIHZlcnRleENvbGxlY3Rpb25zOiAke0NPTExFQ1RJT05TLlVTRVJTfX1cbiAgICAgICAgJHtsaXRlcmFsKHNlbGVjdFF1ZXJpZXMuam9pbignXFxuJykpfVxuICAgICAgICBGSUxURVIgJHtsaXRlcmFsKGZpbHRlckJ5LmpvaW4oJyAmJiAnKSl9XG4gICAgICAgICR7bGl0ZXJhbChsaW1pdC5hcWwpfVxuICAgICAgICBSRVRVUk4gRElTVElOQ1QgJHtzZWxlY3RPYmplY3RzLmxlbmd0aCA+IDAgPyBsaXRlcmFsKGBNRVJHRSh1LCB7JHtzZWxlY3RPYmplY3RzLmpvaW4oJywgJyl9fSlgKSA6IGxpdGVyYWwoJ3UnKX1cbiAgYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRdWVyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgLnRoZW4oKHVzZXJzKSA9PiBwYXJzZVVzZXJMaXN0KHVzZXJzKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuXG4gICAgICByZXR1cm4gW10gYXMgVXNlclR5cGVbXTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCByZWZyZXNoU2Vzc2lvbiA9ICh7ZXhwaXJlcywgdG9rZW59KTogU2Vzc2lvblRva2VuIHwgU2Vzc2lvbkVycm9yID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCB7Zmlyc3ROYW1lLCBsYXN0TmFtZSwgcGVyc29uYUlkLCB1c2VySWQsIHVzZXJuYW1lLCB1c2VyQWNjZXNzfSA9IGdldFNlc3Npb24odG9rZW4pO1xuICAgIHJldHVybiBjcmVhdGVVc2VyVG9rZW4odXNlcklkLCBwZXJzb25hSWQgfHwgJycsIHVzZXJuYW1lLCB1c2VyQWNjZXNzLCBleHBpcmVzLCB7Zmlyc3ROYW1lLCBsYXN0TmFtZX0pO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgdGhyb3cgZXJyb3I7IC8vIFJlLXRocm93IHRoZSBlcnJvciBmcm9tIGdldFNlc3Npb25cbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHNpZ25JbiA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCB7ZXhwaXJlcywgdXNlcn0pOiBQcm9taXNlPFNlc3Npb25Ub2tlbiB8IG51bGw+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ3NpZ25Jbic7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3Qge2VtYWlsLCBwYXNzd29yZCwgcGhvbmUsIHVzZXJuYW1lfSA9IHVzZXIgfHwge307XG4gIGNvbnN0IGZvcm1hdEVtYWlsID0gcGFyc2VFbWFpbChlbWFpbCk7XG4gIGNvbnN0IGZvcm1hdFVzZXJuYW1lID0gcGFyc2VVc2VybmFtZSh1c2VybmFtZSk7XG4gIGNvbnN0IGZvcm1hdFBhc3N3b3JkID0gcGFyc2VQYXNzd29yZChwYXNzd29yZCk7XG4gIGNvbnN0IGZvcm1hdFBob25lID0gcGFyc2VQaG9uZShwaG9uZSk7XG4gIGNvbnN0IGZvcm1hdEV4cGlyZXMgPSBwYXJzZU51bShleHBpcmVzKSB8fCAxNTtcblxuICBpZihmb3JtYXRVc2VybmFtZSA9PT0gQURNSU5fVVNFUk5BTUUpIHtcbiAgICBpZighaXNBZG1pblBhc3N3b3JkKHBhc3N3b3JkKSkge1xuICAgICAgdGhyb3cgbG9nRXhjZXB0aW9uKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgcGFyYW1zOiB7dXNlcm5hbWU6IGZvcm1hdFVzZXJuYW1lfSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU5WQUxJRF9BVVRIRU5USUNBVElPTlxuICAgICAgfSwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNyZWF0ZVVzZXJUb2tlbihBRE1JTl9VU0VSTkFNRSwgJycsIEFETUlOX1VTRVJOQU1FLCBVc2VyQWNjZXNzLkFETUlOLCBmb3JtYXRFeHBpcmVzLCB7Zmlyc3ROYW1lOiAnU3VwZXInLCBsYXN0TmFtZTogJ0FkbWluJ30pO1xuICB9XG5cbiAgaWYoKCFmb3JtYXRVc2VybmFtZSAmJiAhZm9ybWF0RW1haWwgJiYgIWZvcm1hdFBob25lKSB8fCAhZm9ybWF0UGFzc3dvcmQpIHtcbiAgICB0aHJvdyBsb2dFeGNlcHRpb24oe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtlbWFpbCwgZm9ybWF0RW1haWwsIGZvcm1hdFBob25lLCBmb3JtYXRVc2VybmFtZSwgcGhvbmUsIHVzZXJuYW1lfSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklOVkFMSURfQVJHVU1FTlRTXG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICBjb25zdCBmaWx0ZXJzID0gYnVpbGRVc2VyQXR0cmlidXRlRmlsdGVycyh7XG4gICAgZW1haWw6IGZvcm1hdEVtYWlsLFxuICAgIHBob25lOiBmb3JtYXRQaG9uZSxcbiAgICB1c2VybmFtZTogZm9ybWF0VXNlcm5hbWVcbiAgfSk7XG4gIGNvbnN0IGZpbHRlckNsYXVzZSA9IGJ1aWxkRmlsdGVyQ2xhdXNlKGZpbHRlcnMsICd1Jyk7XG5cbiAgY29uc3QgY2hlY2tRdWVyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgRk9SIHUgSU4gJHt1c2Vyc0NvbGxlY3Rpb259XG4gICAgICBGSUxURVIgJHtsaXRlcmFsKGZpbHRlckNsYXVzZSl9XG4gICAgICBSRVRVUk4gdVxuICBgO1xuXG4gIGxldCBjaGVja1VzZXJzOiBVc2VyVHlwZVtdO1xuXG4gIHRyeSB7XG4gICAgY2hlY2tVc2VycyA9IGF3YWl0IHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoY2hlY2tRdWVyeSkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtlbWFpbCwgcGhvbmUsIHVzZXJuYW1lfSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICB9XG5cbiAgY29uc3QgY2hlY2tVc2VyID0gY2hlY2tVc2Vycy5maW5kKCh1c2VySXRlbSA9IHt9KSA9PiB7XG4gICAgY29uc3Qge3Bhc3N3b3JkOiB2YWxpZFBhc3N3b3JkLCBzYWx0fSA9IHVzZXJJdGVtIGFzIFVzZXJUeXBlO1xuICAgIHJldHVybiBCb29sZWFuKHZhbGlkUGFzc3dvcmQgJiYgc2FsdCAmJiB2YWxpZFBhc3N3b3JkID09PSBjcmVhdGVQYXNzd29yZChmb3JtYXRQYXNzd29yZCwgc2FsdCkpO1xuICB9KTtcblxuICBpZighY2hlY2tVc2VyKSB7XG4gICAgdGhyb3cgbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7ZW1haWwsIHBob25lLCB1c2VybmFtZX0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTlZBTElEX0FVVEhFTlRJQ0FUSU9OXG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICBpZihjaGVja1VzZXIuYWN0aXZlID09PSBmYWxzZSkge1xuICAgIHRocm93IGxvZ0V4Y2VwdGlvbih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge2VtYWlsLCBwaG9uZSwgdXNlcm5hbWV9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU5WQUxJRF9BVVRIRU5USUNBVElPTlxuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIF9rZXk6IHVzZXJJZCxcbiAgICBmaXJzdE5hbWUsXG4gICAgbGFzdE5hbWUsXG4gICAgcGVyc29uYUlkLFxuICAgIHVzZXJBY2Nlc3MsXG4gICAgdXNlcm5hbWU6IGNoZWNrVXNlcm5hbWVcbiAgfSA9IGNoZWNrVXNlciBhcyBVc2VyVHlwZTtcblxuICB0cnkge1xuICAgIGNvbnN0IHRva2VuID0gY3JlYXRlVXNlclRva2VuKHVzZXJJZCB8fCAnJywgcGVyc29uYUlkIHx8ICcnLCBjaGVja1VzZXJuYW1lIHx8ICcnLCB1c2VyQWNjZXNzLCBmb3JtYXRFeHBpcmVzLCB7Zmlyc3ROYW1lLCBsYXN0TmFtZX0pO1xuXG4gICAgcmV0dXJuIHRva2VuO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHt1c2VySWQsIHVzZXJuYW1lfSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3Qgc2lnbk91dCA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0KTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdzaWduT3V0JztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkLCB1c2VybmFtZX0gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCB1c2VyRG9jSWQgPSBgdXNlcnMvJHtzZXNzaW9uSWR9YDtcblxuICBjb25zdCB1cGRhdGUgPSB7XG4gICAgbGFzdE9ubGluZTogRGF0ZS5ub3coKSxcbiAgICBzZXNzaW9uSWQ6IG51bGxcbiAgfTtcbiAgY29uc3Qgc2Vzc2lvblF1ZXJ5OiBBcWxRdWVyeSA9IGFxbGBMRVQgdSA9IERPQ1VNRU5UKCR7dXNlckRvY0lkfSlcbiAgICBVUERBVEUgdSBXSVRIICR7dXBkYXRlfSBJTiB1c2Vyc1xuICAgIExJTUlUIDFcbiAgICBSRVRVUk4gTkVXYDtcblxuICB0cnkge1xuICAgIGF3YWl0IHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoc2Vzc2lvblF1ZXJ5KS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHt1c2VySWQ6IHNlc3Npb25JZCwgdXNlcm5hbWV9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBY3RpdmVVc2VyQ291bnQgPSAoY29udGV4dDogQXBpQ29udGV4dCk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRBY3RpdmVVc2VyQ291bnQnO1xuXG4gIHJldHVybiBjb3VudEl0ZW1zKGNvbnRleHQsICd1c2VycycsIHtcbiAgICBsb2dpYzogJ0FORCcsXG4gICAgY29uZGl0aW9uczogW3tmaWVsZDogJ2FjdGl2ZScsIG9wZXJhdG9yOiAnPT0nLCB2YWx1ZTogdHJ1ZX1dXG4gIH0gYXMgYW55KVxuICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRVc2VyQnlUb2tlbiA9IChjb250ZXh0OiBBcGlDb250ZXh0LCB0b2tlbjogc3RyaW5nKTogUHJvbWlzZTxVc2VyVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0VXNlckJ5VG9rZW4nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IHt1c2VySWR9ID0gZ2V0U2Vzc2lvbih0b2tlbik7XG4gIGNvbnN0IHVzZXJEb2NJZCA9IHBhcnNlQXJhbmdvSWQoYHVzZXJzLyR7dXNlcklkfWApO1xuICBjb25zdCBhcWxRdWVyeTogQXFsUXVlcnkgPSBhcWxgTEVUIHUgPSBET0NVTUVOVChcIiR7dXNlckRvY0lkfVwiKSBSRVRVUk4gdWA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSlcbiAgICAucXVlcnkoYXFsUXVlcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigodXNlcikgPT4ge1xuICAgICAgaWYodXNlcj8uYWN0aXZlID09PSBmYWxzZSkge1xuICAgICAgICB0aHJvdyBsb2dFeGNlcHRpb24oe1xuICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgICBwYXJhbXM6IHt1c2VySWR9LFxuICAgICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklOVkFMSURfQVVUSEVOVElDQVRJT05cbiAgICAgICAgfSwgY29udGV4dCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXJzZVVzZXJTYWZlKHVzZXIpIGFzIFVzZXJUeXBlO1xuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgcGFyYW1zOiB7dXNlcklkfSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICB9KTtcbn07XG4iXSwibmFtZXMiOlsicGFyc2VOdW0iLCJjcmVhdGVIYXNoIiwiY3JlYXRlUGFzc3dvcmQiLCJwYXJzZUFyYW5nb0lkIiwicGFyc2VDaGFyIiwicGFyc2VFbWFpbCIsInBhcnNlUGFzc3dvcmQiLCJwYXJzZVBob25lIiwicGFyc2VVc2VybmFtZSIsImFxbCIsImxpdGVyYWwiLCJjcmVhdGVDcnlwdG9IYXNoIiwidGltaW5nU2FmZUVxdWFsIiwiRGF0ZVRpbWUiLCJwYXJzZVVzZXIiLCJwYXJzZVVzZXJTYWZlIiwiQ29uZmlnIiwiQ09MTEVDVElPTlMiLCJFREdFUyIsInZlcmlmeUVtYWlsVGVtcGxhdGUiLCJFcnJvclR5cGVzIiwibG9nRXJyb3IiLCJsb2dFeGNlcHRpb24iLCJidWlsZEZpbHRlckNsYXVzZSIsImJ1aWxkUHJlc2VudEZpbHRlckdyb3VwIiwiZ2V0RG9jSWQiLCJnZXRMaW1pdCIsInNlbGVjdFJlYWN0aW9uQ291bnRCeVR5cGUiLCJ1c2VEYiIsImRldGVjdExhbmd1YWdlIiwiZ2V0U2Vzc2lvbiIsInNldFNlc3Npb24iLCJnZXRTdHJpcGVDbGllbnQiLCJhZGRJdGVtIiwiY291bnRJdGVtcyIsImdldEl0ZW1CeSIsImdldExpc3RCeSIsInVwZGF0ZUl0ZW0iLCJzZW5kRW1haWwiLCJhZGRQZXJzb25hIiwic2VuZFNtcyIsImV2ZW50Q2F0ZWdvcnkiLCJBRE1JTl9VU0VSTkFNRSIsIlZFUklGSUNBVElPTl9FTUFJTF9DT09MRE9XTl9NUyIsInVzZXJzQ29sbGVjdGlvbiIsIlVTRVJTIiwiaGFzUmVhY3Rpb25Db2xsZWN0aW9uIiwiSEFTX1JFQUNUSU9OIiwiaXNUYWdnZWRDb2xsZWN0aW9uIiwiSVNfVEFHR0VEIiwiaGFzQ29ubmVjdGlvbkNvbGxlY3Rpb24iLCJIQVNfQ09OTkVDVElPTiIsImlzQWRtaW5QYXNzd29yZCIsInBhc3N3b3JkIiwiYWRtaW5QYXNzd29yZCIsInByb2Nlc3MiLCJlbnYiLCJBRE1JTl9QQVNTV09SRCIsImFjdHVhbCIsInVwZGF0ZSIsImRpZ2VzdCIsImV4cGVjdGVkIiwiZ2V0QXBwTmFtZSIsImNvbnRleHQiLCJjb25maWciLCJkZXRhaWxzIiwibmFtZSIsImdldCIsImdldEFwcFRpdGxlIiwiYXBwTmFtZSIsInNwbGl0IiwibWFwIiwicGFydCIsInRlc3QiLCJjaGFyQXQiLCJ0b1VwcGVyQ2FzZSIsInNsaWNlIiwiam9pbiIsImJ1aWxkVmVyaWZpY2F0aW9uRW1haWwiLCJ2ZXJpZmllZEVtYWlsQ29kZSIsInVzZXIiLCJhcHBUaXRsZSIsImNvZGUiLCJwYXJzZUVtYWlsVGVtcGxhdGUiLCJ0ZW1wbGF0ZSIsInJlcGxhY2VBbGwiLCJodG1sIiwidmVyaWZpY2F0aW9uRW1haWxUZW1wbGF0ZSIsInN1YmplY3QiLCJ2ZXJpZmljYXRpb25FbWFpbFN1YmplY3QiLCJ0ZXh0IiwidmVyaWZpY2F0aW9uRW1haWxUZXh0IiwiVXNlckFjY2VzcyIsImNyZWF0ZVVzZXJUb2tlbiIsInVzZXJJZCIsInBlcnNvbmFJZCIsInVzZXJuYW1lIiwidXNlckFjY2VzcyIsImV4cGlyZXNJbk1pbnV0ZXMiLCJub3ciLCJsb2NhbCIsInNlc3Npb25FeHBpcmVzIiwicGx1cyIsIm1pbnV0ZXMiLCJpYXQiLCJNYXRoIiwiZmxvb3IiLCJ0b1NlY29uZHMiLCJleHAiLCJ0b2tlbiIsImZpcnN0TmFtZSIsImxhc3ROYW1lIiwiZXhwaXJlcyIsInRvTWlsbGlzIiwiaXNzdWVkIiwicGFyc2VVc2VyTGlzdCIsInVzZXJzIiwicmVkdWNlIiwicmVzdWx0IiwicGFyc2VkVXNlciIsInB1c2giLCJidWlsZFVzZXJBdHRyaWJ1dGVGaWx0ZXJzIiwiZW1haWwiLCJwaG9uZSIsImFjdGl2ZSIsImF0dHJpYnV0ZUZpbHRlcnMiLCJfa2V5IiwibG9naWMiLCJjb25kaXRpb25zIiwibGVuZ3RoIiwiZmllbGQiLCJvcGVyYXRvciIsInZhbHVlIiwiZ2V0VXNlckJ5QXR0cmlidXRlcyIsIm9wdGlvbnMiLCJmaWx0ZXJzIiwiUHJvbWlzZSIsInJlc29sdmUiLCJnZXRVc2VyT3B0aW9uYWxGaWVsZHMiLCJmaWVsZHMiLCJzZWxlY3RzIiwiaW5jbHVkZXMiLCJvYmplY3RzIiwicXVlcmllcyIsInBhcnNlVXNlck9wdGlvbnMiLCJmcm9tIiwidG8iLCJsaW1pdCIsImFkZFVzZXIiLCJhY3Rpb24iLCJsYW5ndWFnZUNvbnRleHQiLCJjb25maXJtIiwiX2NvbmZpcm0iLCJuZXdVc2VyIiwiX2lkIiwiaW5zZXJ0VXNlciIsImhhc1Bhc3N3b3JkIiwiaGFzVXNlcm5hbWUiLCJjYXRlZ29yeSIsInBhcmFtcyIsIklOVkFMSURfQVJHVU1FTlRTIiwiaGFzaElkIiwic2FsdCIsImVuY3J5cHRlZFBhc3N3b3JkIiwiZXhpc3RpbmdVc2VyIiwiaXNDb250YWN0T25seVVzZXIiLCJ0eXBlIiwiQm9vbGVhbiIsInNob3BpZnlDdXN0b21lcklkIiwiRVhJU1RJTkdfSVRFTSIsImVycm9yIiwiREFUQUJBU0VfRVJST1IiLCJwaG9uZUNvdW50cnlDb2RlIiwicmVwbGFjZSIsInN1YnN0cmluZyIsImxvY2FsZSIsInVzZXJQcmVmZXJlbmNlIiwicmFuZG9tIiwidmVyaWZpZWRTbXNDb2RlIiwibWFya2V0aW5nT3B0SW4iLCJtYWlsaW5nTGlzdCIsInRpbWVzdGFtcCIsIkRhdGUiLCJtYXJrZXRpbmdGaWVsZHMiLCJtYXJrZXRpbmdDb25zZW50U291cmNlIiwibWFya2V0aW5nT3B0SW5BdCIsIm1hcmtldGluZ09wdE91dEF0IiwidW5kZWZpbmVkIiwiaW5zZXJ0IiwidmVyaWZpZWRFbWFpbCIsInZlcmlmaWVkUGhvbmUiLCJzYXZlVXNlciIsImV4aXN0aW5nVXNlcklkIiwiX2dlbmVyYXRlZEtleSIsInVwZ3JhZGVGaWVsZHMiLCJ0aGVuIiwic2F2ZWRVc2VyIiwic2F2ZWRVc2VySWQiLCJwZXJzb25hIiwidXBkYXRlZFVzZXIiLCJyZXN1bHRVc2VyIiwicGVyc29uYUVycm9yIiwiY2F0Y2giLCJ1cGRhdGVVc2VyIiwidXBkYXRlRmllbGRzIiwiaWQiLCJkYXRhYmFzZU5hbWUiLCJxdWVyeSIsImN1cnNvciIsIm5leHQiLCJ1cGRhdGVkVXNlclJlc3VsdCIsImZvcmdvdFBhc3N3b3JkIiwiY29kZUV4cGlyZXMiLCJ2ZXJpZmllZEVtYWlsRXhwaXJlcyIsInZlcmlmaWVkUGhvbmVFeHBpcmVzIiwidXNlckRvY0lkIiwicmVzZXRQYXNzd29yZCIsImZvcm1hdFBhc3N3b3JkIiwic2VuZFZlcmlmaWNhdGlvbkVtYWlsIiwidXBkYXRlUXVlcnkiLCJyYXdVc2VyIiwiZm91bmRVc2VyIiwiY29uZmlybUNvZGUiLCJpc1NtcyIsImZvcm1hdHRlZFZhbHVlIiwiZmlsdGVyQnlUeXBlIiwiYXFsUXVlcnkiLCJkZWxldGVVc2VyIiwic3RyaXBlQ2xpZW50IiwiZGVsZXRlZFVzZXIiLCJjdXN0b21lcnMiLCJkZWwiLCJzdHJpcGVDdXN0b21lcklkIiwiYWNjb3VudHMiLCJzdHJpcGVBY2NvdW50SWQiLCJkZWFjdGl2YXRlVXNlciIsInVwZGF0ZWQiLCJnZXRVc2VyRGlzcGxheU5hbWUiLCJmdWxsbmFtZSIsInRyaW0iLCJnZXRTZXNzaW9uVXNlciIsInNlc3Npb24iLCJzZXNzaW9uSWQiLCJzZWxlY3RPYmplY3RzIiwic2VsZWN0UXVlcmllcyIsImZvcm1hdFNlc3Npb25JZCIsImdldFVzZXJCeUlkIiwiY3VzdG9tUXVlcmllcyIsImN1c3RvbU9iamVjdHMiLCJnZXRVc2VyTGlzdCIsImNhc2VTZW5zaXRpdmUiLCJzb3J0IiwiZGlyZWN0aW9uIiwic3RhcnQiLCJudW0iLCJnZXRVc2VyTGlzdEJ5UmVhY3Rpb25zIiwicmVhY3Rpb25zIiwiZm9ybWF0UmVhY3Rpb25zIiwicmVhY3Rpb25OYW1lIiwidG9Mb3dlckNhc2UiLCJmb3JtYXRVc2VybmFtZSIsImZpbHRlckJ5IiwiSlNPTiIsInN0cmluZ2lmeSIsImFsbCIsImdldFVzZXJMaXN0QnlUYWdzIiwidGFncyIsImZvcm1hdFRhZ3MiLCJsaXN0IiwidGFnTmFtZSIsImdldFVzZXJMaXN0QnlMYXRlc3QiLCJmaWx0ZXIiLCJnZXRVc2VyTGlzdEJ5Q29ubmVjdGlvbiIsImZvcm1hdFVzZXJJZCIsInJlZnJlc2hTZXNzaW9uIiwic2lnbkluIiwiZm9ybWF0RW1haWwiLCJmb3JtYXRQaG9uZSIsImZvcm1hdEV4cGlyZXMiLCJJTlZBTElEX0FVVEhFTlRJQ0FUSU9OIiwiZmlsdGVyQ2xhdXNlIiwiY2hlY2tRdWVyeSIsImNoZWNrVXNlcnMiLCJjaGVja1VzZXIiLCJmaW5kIiwidXNlckl0ZW0iLCJ2YWxpZFBhc3N3b3JkIiwiY2hlY2tVc2VybmFtZSIsInNpZ25PdXQiLCJsYXN0T25saW5lIiwic2Vzc2lvblF1ZXJ5IiwiZ2V0QWN0aXZlVXNl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
|
|
1062
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3IvcGFja2FnZXMvcmVha3Rvci9zcmMvYWN0aW9ucy91c2Vycy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxOS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBBbGwgcmlnaHRzIHJlc2VydmVkLiBVc2UgaXMgc3ViamVjdCB0byB0aGUgYWNjb21wYW55aW5nIGNvbW1lcmNpYWwgTElDRU5TRS5cbiAqL1xuaW1wb3J0IHtwYXJzZU51bX0gZnJvbSAnQG5sYWJzL3V0aWxzL3BhcnNlcnMvbnVtYmVycyc7XG5pbXBvcnQge1xuICBjcmVhdGVIYXNoLFxuICBjcmVhdGVQYXNzd29yZCxcbiAgcGFyc2VBcmFuZ29JZCxcbiAgcGFyc2VDaGFyLFxuICBwYXJzZUVtYWlsLFxuICBwYXJzZVBhc3N3b3JkLFxuICBwYXJzZVBob25lLFxuICBwYXJzZVVzZXJuYW1lXG59IGZyb20gJ0BubGFicy91dGlscy9wYXJzZXJzL3N0cmluZ3MnO1xuaW1wb3J0IHthcWx9IGZyb20gJ2FyYW5nb2pzJztcbmltcG9ydCB7bGl0ZXJhbH0gZnJvbSAnYXJhbmdvanMvYXFsJztcbmltcG9ydCB7Y3JlYXRlSGFzaCBhcyBjcmVhdGVDcnlwdG9IYXNoLCB0aW1pbmdTYWZlRXF1YWx9IGZyb20gJ2NyeXB0byc7XG5pbXBvcnQge0RhdGVUaW1lfSBmcm9tICdsdXhvbic7XG5cbmltcG9ydCB7cGFyc2VVc2VyLCBwYXJzZVVzZXJTYWZlfSBmcm9tICcuLi9hZGFwdGVycy91c2VyQWRhcHRlci5qcyc7XG5pbXBvcnQge0NvbmZpZ30gZnJvbSAnLi4vY29uZmlnLmpzJztcbmltcG9ydCB7Q09MTEVDVElPTlMsIEVER0VTfSBmcm9tICcuLi9jb25zdGFudHMvY29sbGVjdGlvbnMuanMnO1xuaW1wb3J0IHZlcmlmeUVtYWlsVGVtcGxhdGUgZnJvbSAnLi4vdGVtcGxhdGVzL2VtYWlsL3ZlcmlmeUVtYWlsLmpzJztcbmltcG9ydCB7RXJyb3JUeXBlcywgdHlwZSBTZXNzaW9uRXJyb3J9IGZyb20gJy4uL3R5cGVzL2Vycm9yLnR5cGVzLmpzJztcbmltcG9ydCB7bG9nRXJyb3IsIGxvZ0V4Y2VwdGlvbn0gZnJvbSAnLi4vdXRpbHMvYW5hbHl0aWNzVXRpbHMuanMnO1xuaW1wb3J0IHtidWlsZEZpbHRlckNsYXVzZSwgYnVpbGRQcmVzZW50RmlsdGVyR3JvdXB9IGZyb20gJy4uL3V0aWxzL2FxbEhlbHBlcnMuanMnO1xuaW1wb3J0IHtnZXREb2NJZCwgZ2V0TGltaXQsIHNlbGVjdFJlYWN0aW9uQ291bnRCeVR5cGUsIHVzZURifSBmcm9tICcuLi91dGlscy9hcmFuZ29kYlV0aWxzLmpzJztcbmltcG9ydCB7ZGV0ZWN0TGFuZ3VhZ2V9IGZyb20gJy4uL3V0aWxzL2xhbmd1YWdlRGV0ZWN0aW9uLmpzJztcbmltcG9ydCB7Z2V0U2Vzc2lvbiwgc2V0U2Vzc2lvbn0gZnJvbSAnLi4vdXRpbHMvc2Vzc2lvblV0aWxzLmpzJztcbmltcG9ydCB7Z2V0U3RyaXBlQ2xpZW50fSBmcm9tICcuLi91dGlscy9zdHJpcGVVdGlscy5qcyc7XG5pbXBvcnQge2FkZEl0ZW0sIGNvdW50SXRlbXMsIGdldEl0ZW1CeSwgZ2V0TGlzdEJ5LCB1cGRhdGVJdGVtfSBmcm9tICcuL2NydWQuanMnO1xuaW1wb3J0IHtzZW5kRW1haWx9IGZyb20gJy4vZW1haWwuanMnO1xuaW1wb3J0IHthZGRQZXJzb25hfSBmcm9tICcuL3BlcnNvbmFzLmpzJztcbmltcG9ydCB7c2VuZFNtc30gZnJvbSAnLi9zbXMuanMnO1xuXG5pbXBvcnQgdHlwZSB7QXFsUXVlcnl9IGZyb20gJ2FyYW5nb2pzL2FxbCc7XG5pbXBvcnQgdHlwZSB7RmlsdGVyR3JvdXB9IGZyb20gJy4uL3R5cGVzL2FyYW5nb2RiLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtBcGlDb250ZXh0fSBmcm9tICcuLi90eXBlcy9hdXRoLnR5cGVzLmpzJztcbmltcG9ydCB0eXBlIHtVc2VySW5wdXQsIFVzZXJUeXBlfSBmcm9tICcuLi90eXBlcy91c2Vycy50eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7U2Vzc2lvblRva2VufSBmcm9tICcuLi91dGlscy9zZXNzaW9uVXRpbHMuanMnO1xuXG5jb25zdCBldmVudENhdGVnb3J5ID0gJ3VzZXJzJztcbmNvbnN0IEFETUlOX1VTRVJOQU1FID0gJ2FkbWluJztcbmNvbnN0IFZFUklGSUNBVElPTl9FTUFJTF9DT09MRE9XTl9NUyA9IDEwMDAgKiA2MCAqIDE1O1xuY29uc3QgdXNlcnNDb2xsZWN0aW9uID0gbGl0ZXJhbChDT0xMRUNUSU9OUy5VU0VSUyk7XG5jb25zdCBoYXNSZWFjdGlvbkNvbGxlY3Rpb24gPSBsaXRlcmFsKEVER0VTLkhBU19SRUFDVElPTik7XG5jb25zdCBpc1RhZ2dlZENvbGxlY3Rpb24gPSBsaXRlcmFsKEVER0VTLklTX1RBR0dFRCk7XG5jb25zdCBoYXNDb25uZWN0aW9uQ29sbGVjdGlvbiA9IGxpdGVyYWwoRURHRVMuSEFTX0NPTk5FQ1RJT04pO1xuXG5jb25zdCBpc0FkbWluUGFzc3dvcmQgPSAocGFzc3dvcmQ6IHVua25vd24pOiBib29sZWFuID0+IHtcbiAgY29uc3QgYWRtaW5QYXNzd29yZCA9IHByb2Nlc3MuZW52LkFETUlOX1BBU1NXT1JEO1xuICBpZih0eXBlb2YgcGFzc3dvcmQgIT09ICdzdHJpbmcnIHx8ICFwYXNzd29yZCB8fCAhYWRtaW5QYXNzd29yZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGFjdHVhbCA9IGNyZWF0ZUNyeXB0b0hhc2goJ3NoYTI1NicpLnVwZGF0ZShwYXNzd29yZCkuZGlnZXN0KCk7XG4gIGNvbnN0IGV4cGVjdGVkID0gY3JlYXRlQ3J5cHRvSGFzaCgnc2hhMjU2JykudXBkYXRlKGFkbWluUGFzc3dvcmQpLmRpZ2VzdCgpO1xuICByZXR1cm4gdGltaW5nU2FmZUVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQpO1xufTtcblxuY29uc3QgZ2V0QXBwTmFtZSA9IChjb250ZXh0OiBBcGlDb250ZXh0KTogc3RyaW5nID0+XG4gIGNvbnRleHQuY29uZmlnPy5kZXRhaWxzPy5uYW1lIHx8IENvbmZpZy5nZXQoJ2RldGFpbHMubmFtZScpIHx8ICdSZWFrdG9yJztcblxuY29uc3QgZ2V0QXBwVGl0bGUgPSAoYXBwTmFtZTogc3RyaW5nKTogc3RyaW5nID0+XG4gIGFwcE5hbWVcbiAgICAuc3BsaXQoLyhbXFxzLV9dKykvKVxuICAgIC5tYXAoKHBhcnQpID0+IC9eW0EtWmEtel0vLnRlc3QocGFydCkgPyBgJHtwYXJ0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpfSR7cGFydC5zbGljZSgxKX1gIDogcGFydClcbiAgICAuam9pbignJyk7XG5cbmNvbnN0IGJ1aWxkVmVyaWZpY2F0aW9uRW1haWwgPSAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHZlcmlmaWVkRW1haWxDb2RlOiBudW1iZXIsXG4gIHVzZXI6IFVzZXJUeXBlID0ge31cbikgPT4ge1xuICBjb25zdCBhcHBOYW1lID0gZ2V0QXBwTmFtZShjb250ZXh0KTtcbiAgY29uc3QgYXBwVGl0bGUgPSBnZXRBcHBUaXRsZShhcHBOYW1lKTtcbiAgY29uc3QgY29kZSA9IGAke3ZlcmlmaWVkRW1haWxDb2RlfWA7XG4gIGNvbnN0IHBhcnNlRW1haWxUZW1wbGF0ZSA9ICh0ZW1wbGF0ZTogc3RyaW5nKSA9PiB0ZW1wbGF0ZVxuICAgIC5yZXBsYWNlQWxsKCdbYXBwTmFtZV0nLCBhcHBOYW1lKVxuICAgIC5yZXBsYWNlQWxsKCdbYXBwVGl0bGVdJywgYXBwVGl0bGUpXG4gICAgLnJlcGxhY2VBbGwoJ1tlbWFpbENvZGVdJywgY29kZSk7XG4gIGNvbnN0IGh0bWwgPSBwYXJzZUVtYWlsVGVtcGxhdGUodXNlci52ZXJpZmljYXRpb25FbWFpbFRlbXBsYXRlIHx8IHZlcmlmeUVtYWlsVGVtcGxhdGUpO1xuICBjb25zdCBzdWJqZWN0ID0gcGFyc2VFbWFpbFRlbXBsYXRlKHVzZXIudmVyaWZpY2F0aW9uRW1haWxTdWJqZWN0IHx8IGBZb3VyICR7YXBwVGl0bGV9IHZlcmlmaWNhdGlvbiBjb2RlIGlzICR7Y29kZX1gKTtcbiAgY29uc3QgdGV4dCA9IHBhcnNlRW1haWxUZW1wbGF0ZSh1c2VyLnZlcmlmaWNhdGlvbkVtYWlsVGV4dCB8fCBgWW91ciAke2FwcFRpdGxlfSB2ZXJpZmljYXRpb24gY29kZSBpcyAke2NvZGV9LlxcblxcbkVudGVyIHRoaXMgY29kZSBpbiAke2FwcFRpdGxlfSB0byBmaW5pc2ggc2V0dGluZyB1cCB5b3VyIGFjY291bnQuIElmIHlvdSBkaWQgbm90IHJlcXVlc3QgdGhpcyBlbWFpbCwgeW91IGNhbiBzYWZlbHkgaWdub3JlIGl0LmApO1xuXG4gIHJldHVybiB7XG4gICAgaHRtbCxcbiAgICBzdWJqZWN0LFxuICAgIHRleHRcbiAgfTtcbn07XG5cbmV4cG9ydCB0eXBlIFVzZXJPcHRpb25zID0gUmVhZG9ubHk8e1xuICByZWFkb25seSBmcm9tPzogbnVtYmVyO1xuICByZWFkb25seSB0bz86IG51bWJlcjtcbiAgcmVhZG9ubHkgdXNlcm5hbWU/OiBzdHJpbmc7XG59PjtcblxuZXhwb3J0IGVudW0gVXNlckFjY2VzcyB7XG4gIEFETUlOID0gLTEsXG4gIEJBU0lDID0gMCxcbiAgUFJFTUlVTSA9IDEsXG4gIFBSTyA9IDJcbn1cblxuZXhwb3J0IGNvbnN0IGNyZWF0ZVVzZXJUb2tlbiA9IChcbiAgdXNlcklkOiBzdHJpbmcsXG4gIHBlcnNvbmFJZDogc3RyaW5nID0gJycsXG4gIHVzZXJuYW1lOiBzdHJpbmcgPSAnJyxcbiAgdXNlckFjY2VzczogbnVtYmVyID0gMCxcbiAgZXhwaXJlc0luTWludXRlczogbnVtYmVyID0gMTUsXG4gIG5hbWU6IHtyZWFkb25seSBmaXJzdE5hbWU/OiBzdHJpbmc7IHJlYWRvbmx5IGxhc3ROYW1lPzogc3RyaW5nfSA9IHt9XG4pOiBTZXNzaW9uVG9rZW4gPT4ge1xuICBjb25zdCBub3c6IERhdGVUaW1lID0gRGF0ZVRpbWUubG9jYWwoKTtcbiAgY29uc3Qgc2Vzc2lvbkV4cGlyZXM6IERhdGVUaW1lID0gbm93LnBsdXMoe21pbnV0ZXM6IGV4cGlyZXNJbk1pbnV0ZXN9KTtcbiAgY29uc3QgaWF0ID0gTWF0aC5mbG9vcihub3cudG9TZWNvbmRzKCkpO1xuICBjb25zdCBleHAgPSBNYXRoLmZsb29yKHNlc3Npb25FeHBpcmVzLnRvU2Vjb25kcygpKTtcbiAgY29uc3QgdG9rZW4gPSBzZXRTZXNzaW9uKHtcbiAgICBleHAsXG4gICAgLi4uKG5hbWUuZmlyc3ROYW1lID8ge2ZpcnN0TmFtZTogbmFtZS5maXJzdE5hbWV9IDoge30pLFxuICAgIGlhdCxcbiAgICAuLi4obmFtZS5sYXN0TmFtZSA/IHtsYXN0TmFtZTogbmFtZS5sYXN0TmFtZX0gOiB7fSksXG4gICAgLi4uKHBlcnNvbmFJZCA/IHtwZXJzb25hSWR9IDoge30pLFxuICAgIHVzZXJBY2Nlc3MsXG4gICAgdXNlcklkLFxuICAgIHVzZXJuYW1lXG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgZXhwaXJlczogc2Vzc2lvbkV4cGlyZXMudG9NaWxsaXMoKSxcbiAgICAuLi4obmFtZS5maXJzdE5hbWUgPyB7Zmlyc3ROYW1lOiBuYW1lLmZpcnN0TmFtZX0gOiB7fSksXG4gICAgaXNzdWVkOiBub3cudG9NaWxsaXMoKSxcbiAgICAuLi4obmFtZS5sYXN0TmFtZSA/IHtsYXN0TmFtZTogbmFtZS5sYXN0TmFtZX0gOiB7fSksXG4gICAgLi4uKHBlcnNvbmFJZCA/IHtwZXJzb25hSWR9IDoge30pLFxuICAgIHRva2VuLFxuICAgIHVzZXJJZCxcbiAgICB1c2VybmFtZVxuICB9O1xufTtcblxuaW50ZXJmYWNlIFNlbGVjdEFjY3VtdWxhdG9yIHtcbiAgb2JqZWN0czogc3RyaW5nW107XG4gIHF1ZXJpZXM6IHN0cmluZ1tdO1xufVxuXG5jb25zdCBwYXJzZVVzZXJMaXN0ID0gKHVzZXJzOiBBcnJheTxVc2VyVHlwZSB8IG51bGwgfCB1bmRlZmluZWQ+ID0gW10pOiBVc2VyVHlwZVtdID0+XG4gIHVzZXJzLnJlZHVjZTxVc2VyVHlwZVtdPigocmVzdWx0LCB1c2VyKSA9PiB7XG4gICAgY29uc3QgcGFyc2VkVXNlciA9IHBhcnNlVXNlclNhZmUodXNlcik7XG5cbiAgICBpZihwYXJzZWRVc2VyKSB7XG4gICAgICByZXN1bHQucHVzaChwYXJzZWRVc2VyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LCBbXSk7XG5cbmNvbnN0IGJ1aWxkVXNlckF0dHJpYnV0ZUZpbHRlcnMgPSAoXG4gIHtlbWFpbCwgcGhvbmUsIHVzZXJuYW1lLCB1c2VySWR9OiBVc2VyVHlwZSxcbiAge2FjdGl2ZSA9IGZhbHNlfToge3JlYWRvbmx5IGFjdGl2ZT86IGJvb2xlYW59ID0ge31cbik6IEZpbHRlckdyb3VwID0+IHtcbiAgY29uc3QgYXR0cmlidXRlRmlsdGVycyA9IGJ1aWxkUHJlc2VudEZpbHRlckdyb3VwKHtcbiAgICBlbWFpbCxcbiAgICBwaG9uZSxcbiAgICB1c2VybmFtZSxcbiAgICAuLi4odXNlcklkID8ge19rZXk6IHVzZXJJZH0gOiB7fSlcbiAgfSwge2xvZ2ljOiAnT1InfSk7XG5cbiAgaWYoIWFjdGl2ZSB8fCBhdHRyaWJ1dGVGaWx0ZXJzLmNvbmRpdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGF0dHJpYnV0ZUZpbHRlcnM7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGNvbmRpdGlvbnM6IFtcbiAgICAgIGF0dHJpYnV0ZUZpbHRlcnMsXG4gICAgICB7ZmllbGQ6ICdhY3RpdmUnLCBvcGVyYXRvcjogJyE9JywgdmFsdWU6IGZhbHNlfVxuICAgIF0sXG4gICAgbG9naWM6ICdBTkQnXG4gIH07XG59O1xuXG5jb25zdCBnZXRVc2VyQnlBdHRyaWJ1dGVzID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHVzZXI6IFVzZXJUeXBlLCBvcHRpb25zPzoge3JlYWRvbmx5IGFjdGl2ZT86IGJvb2xlYW59KSA9PiB7XG4gIGNvbnN0IGZpbHRlcnMgPSBidWlsZFVzZXJBdHRyaWJ1dGVGaWx0ZXJzKHVzZXIsIG9wdGlvbnMpO1xuXG4gIGlmKGZpbHRlcnMuY29uZGl0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO1xuICB9XG5cbiAgcmV0dXJuIGdldEl0ZW1CeTxVc2VyVHlwZT4oY29udGV4dCwgQ09MTEVDVElPTlMuVVNFUlMsIGZpbHRlcnMpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFVzZXJPcHRpb25hbEZpZWxkcyA9IChmaWVsZHM6IHN0cmluZ1tdID0gW10pOiBTZWxlY3RBY2N1bXVsYXRvciA9PlxuICBmaWVsZHMucmVkdWNlKChzZWxlY3RzOiBTZWxlY3RBY2N1bXVsYXRvciwgZmllbGQ6IHN0cmluZykgPT4ge1xuICAgIGlmKGZpZWxkLmluY2x1ZGVzKCdDb3VudCcpKSB7XG4gICAgICByZXR1cm4gc2VsZWN0UmVhY3Rpb25Db3VudEJ5VHlwZSgndXNlcnMnLCAndScsIGZpZWxkLCBzZWxlY3RzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2VsZWN0cztcbiAgfSwge29iamVjdHM6IFtdLCBxdWVyaWVzOiBbXX0pO1xuXG5leHBvcnQgY29uc3QgcGFyc2VVc2VyT3B0aW9ucyA9IChvcHRpb25zOiBVc2VyT3B0aW9ucyA9IHt9KSA9PiB7XG4gIGNvbnN0IHtcbiAgICBmcm9tID0gMCxcbiAgICB0byA9IDMwXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBsaW1pdCA9IGdldExpbWl0KGZyb20sIHRvKTtcblxuICByZXR1cm4ge1xuICAgIC4uLm9wdGlvbnMsXG4gICAgbGltaXRcbiAgfTtcbn07XG5cbmV4cG9ydCBjb25zdCBhZGRVc2VyID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIHVzZXI6IFVzZXJJbnB1dCk6IFByb21pc2U8VXNlclR5cGUgfCBudWxsPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdhZGRVc2VyJztcbiAgY29uc3Qge2xhbmd1YWdlQ29udGV4dH0gPSBjb250ZXh0O1xuICBjb25zdCB7Y29uZmlybTogX2NvbmZpcm0sIC4uLm5ld1VzZXJ9ID0gdXNlcjtcbiAgY29uc3Qge2VtYWlsLCBwYXNzd29yZCwgcGhvbmUsIHVzZXJuYW1lLCB1c2VySWQsIF9rZXksIF9pZCwgLi4uaW5zZXJ0VXNlcn0gPSBwYXJzZVVzZXIobmV3VXNlcik7XG4gIGNvbnN0IGhhc1Bhc3N3b3JkID0gISFwYXNzd29yZDtcbiAgY29uc3QgaGFzVXNlcm5hbWUgPSAhIXVzZXJuYW1lIHx8ICEhcGhvbmUgfHwgISFlbWFpbDtcblxuICBpZighaGFzUGFzc3dvcmQgfHwgIWhhc1VzZXJuYW1lKSB7XG4gICAgbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7dXNlcm5hbWV9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU5WQUxJRF9BUkdVTUVOVFNcbiAgICB9LCBjb250ZXh0KTtcblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgaGFzaElkID0gdXNlcm5hbWUgfHwgcGhvbmUgfHwgZW1haWw7XG4gIGNvbnN0IHNhbHQgPSBjcmVhdGVIYXNoKGAke2hhc2hJZH0ke3Bhc3N3b3JkfWAsICcnKTtcbiAgY29uc3QgZW5jcnlwdGVkUGFzc3dvcmQgPSBjcmVhdGVQYXNzd29yZChwYXNzd29yZCwgc2FsdCk7XG4gIGxldCBleGlzdGluZ1VzZXI6IFVzZXJUeXBlIHwgbnVsbCA9IG51bGw7XG5cbiAgdHJ5IHtcbiAgICBleGlzdGluZ1VzZXIgPSBhd2FpdCBnZXRVc2VyQnlBdHRyaWJ1dGVzKGNvbnRleHQsIHtlbWFpbCwgcGhvbmUsIHVzZXJuYW1lfSk7XG4gICAgY29uc3QgaXNDb250YWN0T25seVVzZXIgPSBleGlzdGluZ1VzZXI/LnR5cGUgPT09ICdjcm1Db250YWN0JyB8fCBCb29sZWFuKGV4aXN0aW5nVXNlcj8uc2hvcGlmeUN1c3RvbWVySWQpO1xuXG4gICAgaWYoZXhpc3RpbmdVc2VyICYmICFpc0NvbnRhY3RPbmx5VXNlcikge1xuICAgICAgdGhyb3cgbG9nRXhjZXB0aW9uKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgcGFyYW1zOiB7XG4gICAgICAgICAgZW1haWwsXG4gICAgICAgICAgcGhvbmUsXG4gICAgICAgICAgdXNlcm5hbWVcbiAgICAgICAgfSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuRVhJU1RJTkdfSVRFTVxuICAgICAgfSwgY29udGV4dCk7XG4gICAgfVxuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtlbWFpbCwgcGhvbmUsIHVzZXJuYW1lfSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICB9XG5cbiAgY29uc3QgcGhvbmVDb3VudHJ5Q29kZSA9IHBob25lPy5yZXBsYWNlKC9cXEQvZywgJycpLnN1YnN0cmluZygwLCAzKTtcbiAgY29uc3QgbG9jYWxlID0gZGV0ZWN0TGFuZ3VhZ2Uoe1xuICAgIC4uLmxhbmd1YWdlQ29udGV4dCxcbiAgICBwaG9uZUNvdW50cnlDb2RlOiBwaG9uZUNvdW50cnlDb2RlIHx8ICcnLFxuICAgIHVzZXJQcmVmZXJlbmNlOiBpbnNlcnRVc2VyLmxvY2FsZSB8fCAnZW4nXG4gIH0pO1xuICBjb25zdCB2ZXJpZmllZEVtYWlsQ29kZSA9IE1hdGguZmxvb3IoMTAwMDAwICsgKE1hdGgucmFuZG9tKCkgKiA5MDAwMDApKTtcbiAgY29uc3QgdmVyaWZpZWRTbXNDb2RlID0gTWF0aC5mbG9vcigxMDAwMDAgKyAoTWF0aC5yYW5kb20oKSAqIDkwMDAwMCkpO1xuICBjb25zdCBtYXJrZXRpbmdPcHRJbiA9IGluc2VydFVzZXIubWFya2V0aW5nT3B0SW4gPz8gaW5zZXJ0VXNlci5tYWlsaW5nTGlzdDtcbiAgY29uc3QgdGltZXN0YW1wID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgbWFya2V0aW5nRmllbGRzID0gbWFya2V0aW5nT3B0SW4gPT09IHRydWVcbiAgICA/IHtcbiAgICAgIG1haWxpbmdMaXN0OiB0cnVlLFxuICAgICAgbWFya2V0aW5nQ29uc2VudFNvdXJjZTogaW5zZXJ0VXNlci5tYXJrZXRpbmdDb25zZW50U291cmNlIHx8IGV4aXN0aW5nVXNlcj8ubWFya2V0aW5nQ29uc2VudFNvdXJjZSB8fCAnYWNjb3VudC1zaWdudXAnLFxuICAgICAgbWFya2V0aW5nT3B0SW46IHRydWUsXG4gICAgICBtYXJrZXRpbmdPcHRJbkF0OiBpbnNlcnRVc2VyLm1hcmtldGluZ09wdEluQXQgfHwgZXhpc3RpbmdVc2VyPy5tYXJrZXRpbmdPcHRJbkF0IHx8IHRpbWVzdGFtcCxcbiAgICAgIG1hcmtldGluZ09wdE91dEF0OiB1bmRlZmluZWRcbiAgICB9XG4gICAgOiAobWFya2V0aW5nT3B0SW4gPT09IGZhbHNlID8ge1xuICAgICAgbWFpbGluZ0xpc3Q6IGZhbHNlLFxuICAgICAgbWFya2V0aW5nQ29uc2VudFNvdXJjZTogaW5zZXJ0VXNlci5tYXJrZXRpbmdDb25zZW50U291cmNlIHx8ICdhY2NvdW50LXNpZ251cCcsXG4gICAgICBtYXJrZXRpbmdPcHRJbjogZmFsc2UsXG4gICAgICBtYXJrZXRpbmdPcHRPdXRBdDogaW5zZXJ0VXNlci5tYXJrZXRpbmdPcHRPdXRBdCB8fCB0aW1lc3RhbXBcbiAgICB9IDoge30pO1xuXG4gIGNvbnN0IGluc2VydDogVXNlclR5cGUgPSB7XG4gICAgLi4uaW5zZXJ0VXNlcixcbiAgICBfa2V5OiBjcmVhdGVIYXNoKGhhc2hJZCksXG4gICAgYWN0aXZlOiB0cnVlLFxuICAgIGVtYWlsLFxuICAgIGxvY2FsZSxcbiAgICBwYXNzd29yZDogZW5jcnlwdGVkUGFzc3dvcmQsXG4gICAgcGhvbmUsXG4gICAgc2FsdCxcbiAgICB0eXBlOiAndXNlcicsXG4gICAgdXNlckFjY2VzczogVXNlckFjY2Vzcy5CQVNJQyxcbiAgICB1c2VybmFtZSxcbiAgICB2ZXJpZmllZEVtYWlsOiBmYWxzZSxcbiAgICB2ZXJpZmllZEVtYWlsQ29kZSxcbiAgICB2ZXJpZmllZFBob25lOiBmYWxzZSxcbiAgICB2ZXJpZmllZFNtc0NvZGUsXG4gICAgLi4ubWFya2V0aW5nRmllbGRzXG4gIH07XG5cbiAgY29uc3Qgc2F2ZVVzZXIgPSAoKTogUHJvbWlzZTxVc2VyVHlwZSB8IG51bGw+ID0+IHtcbiAgICBjb25zdCBleGlzdGluZ1VzZXJJZCA9IGV4aXN0aW5nVXNlcj8udXNlcklkIHx8IGV4aXN0aW5nVXNlcj8uX2tleTtcblxuICAgIGlmKCFleGlzdGluZ1VzZXJJZCkge1xuICAgICAgcmV0dXJuIGFkZEl0ZW08VXNlclR5cGU+KGNvbnRleHQsICd1c2VycycsIGluc2VydCk7XG4gICAgfVxuXG4gICAgY29uc3Qge19rZXk6IF9nZW5lcmF0ZWRLZXksIC4uLnVwZ3JhZGVGaWVsZHN9ID0gaW5zZXJ0O1xuICAgIHJldHVybiB1cGRhdGVJdGVtPFVzZXJUeXBlPihjb250ZXh0LCAndXNlcnMnLCBleGlzdGluZ1VzZXJJZCwgdXBncmFkZUZpZWxkcyk7XG4gIH07XG5cbiAgcmV0dXJuIGF3YWl0IHNhdmVVc2VyKClcbiAgICAudGhlbihhc3luYyAocmVzdWx0KSA9PiB7XG4gICAgICBjb25zdCBzYXZlZFVzZXIgPSBwYXJzZVVzZXJTYWZlKHJlc3VsdCk7XG4gICAgICBjb25zdCBzYXZlZFVzZXJJZCA9IHNhdmVkVXNlcj8udXNlcklkIHx8IHNhdmVkVXNlcj8uX2tleTtcblxuICAgICAgaWYoIXNhdmVkVXNlciB8fCAhc2F2ZWRVc2VySWQpIHtcbiAgICAgICAgcmV0dXJuIHNhdmVkVXNlcjtcbiAgICAgIH1cblxuICAgICAgaWYoc2F2ZWRVc2VyLnBlcnNvbmFJZCkge1xuICAgICAgICByZXR1cm4gc2F2ZWRVc2VyO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBwZXJzb25hID0gYXdhaXQgYWRkUGVyc29uYShjb250ZXh0LCB7dXNlcklkOiBzYXZlZFVzZXJJZH0pO1xuICAgICAgICBjb25zdCBwZXJzb25hSWQgPSBwZXJzb25hPy5wZXJzb25hSWQgfHwgcGVyc29uYT8uX2tleTtcblxuICAgICAgICBpZighcGVyc29uYUlkKSB7XG4gICAgICAgICAgcmV0dXJuIHNhdmVkVXNlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVwZGF0ZWRVc2VyID0gYXdhaXQgdXBkYXRlSXRlbTxVc2VyVHlwZT4oY29udGV4dCwgJ3VzZXJzJywgc2F2ZWRVc2VySWQsIHtwZXJzb25hSWR9KTtcbiAgICAgICAgY29uc3QgcmVzdWx0VXNlciA9IHBhcnNlVXNlclNhZmUodXBkYXRlZFVzZXIpIHx8IHtcbiAgICAgICAgICAuLi5zYXZlZFVzZXIsXG4gICAgICAgICAgcGVyc29uYUlkXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdFVzZXI7XG4gICAgICB9IGNhdGNoKHBlcnNvbmFFcnJvcikge1xuICAgICAgICBhd2FpdCBsb2dFcnJvcih7XG4gICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgIHBhcmFtczoge3VzZXJJZDogc2F2ZWRVc2VySWR9LFxuICAgICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICAgIH0sIHBlcnNvbmFFcnJvciBhcyBFcnJvciwgY29udGV4dCk7XG5cbiAgICAgICAgcmV0dXJuIHNhdmVkVXNlcjtcbiAgICAgIH1cbiAgICB9KVxuICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgcGFyYW1zOiB7dXNlcm5hbWV9LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHVwZGF0ZVVzZXIgPSBhc3luYyAoY29udGV4dDogQXBpQ29udGV4dCwgdXNlcjogVXNlclR5cGUpOiBQcm9taXNlPFVzZXJUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICd1cGRhdGVVc2VyJztcbiAgY29uc3QgdXBkYXRlZFVzZXIgPSBwYXJzZVVzZXIodXNlcik7XG4gIGNvbnN0IHtwYXNzd29yZCwgX2tleSwgX2lkLCAuLi51cGRhdGVGaWVsZHN9ID0gdXBkYXRlZFVzZXI7XG4gIGNvbnN0IHtpZH0gPSB1cGRhdGVkVXNlcjtcbiAgY29uc3QgdXBkYXRlID0gey4uLnVwZGF0ZUZpZWxkc30gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbiAgdHJ5IHtcbiAgICBpZihwYXNzd29yZCkge1xuICAgICAgY29uc3QgZXhpc3RpbmdVc2VyID0gYXdhaXQgdXNlRGIoY29udGV4dC5kYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbGBcbiAgICAgICAgUkVUVVJOIERPQ1VNRU5UKCR7aWR9KVxuICAgICAgYCkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKSBhcyBVc2VyVHlwZSB8IG51bGw7XG4gICAgICBjb25zdCBoYXNoSWQgPSBleGlzdGluZ1VzZXI/LnVzZXJuYW1lIHx8IGV4aXN0aW5nVXNlcj8ucGhvbmUgfHwgZXhpc3RpbmdVc2VyPy5lbWFpbCB8fCBpZCB8fCBfa2V5IHx8IF9pZCB8fCAnJztcbiAgICAgIGNvbnN0IHNhbHQgPSBleGlzdGluZ1VzZXI/LnNhbHQgfHwgY3JlYXRlSGFzaChgJHtoYXNoSWR9JHtwYXNzd29yZH1gLCAnJyk7XG5cbiAgICAgIHVwZGF0ZS5wYXNzd29yZCA9IGNyZWF0ZVBhc3N3b3JkKHBhc3N3b3JkLCBzYWx0KTtcblxuICAgICAgaWYoIWV4aXN0aW5nVXNlcj8uc2FsdCkge1xuICAgICAgICB1cGRhdGUuc2FsdCA9IHNhbHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgdXBkYXRlZFVzZXJSZXN1bHQgPSBhd2FpdCB1cGRhdGVJdGVtPFVzZXJUeXBlPihjb250ZXh0LCAndXNlcnMnLCBpZCwgdXBkYXRlIGFzIFVzZXJUeXBlKTtcbiAgICByZXR1cm4gcGFyc2VVc2VyU2FmZSh1cGRhdGVkVXNlclJlc3VsdCkgYXMgVXNlclR5cGU7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge3VzZXJ9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBmb3Jnb3RQYXNzd29yZCA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCB1c2VyOiBVc2VyVHlwZSk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZm9yZ290UGFzc3dvcmQnO1xuICBjb25zdCB7ZW1haWwsIHBob25lLCB1c2VybmFtZX0gPSBwYXJzZVVzZXIodXNlcik7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBleGlzdGluZ1VzZXIgPSBhd2FpdCBnZXRVc2VyQnlBdHRyaWJ1dGVzKGNvbnRleHQsIHtlbWFpbCwgcGhvbmUsIHVzZXJuYW1lfSk7XG5cbiAgICBpZihleGlzdGluZ1VzZXIpIHtcbiAgICAgIGNvbnN0IHtlbWFpbCwgcGhvbmUsIHZlcmlmaWVkRW1haWwsIHZlcmlmaWVkUGhvbmV9ID0gZXhpc3RpbmdVc2VyIGFzIFVzZXJUeXBlO1xuICAgICAgY29uc3QgY29kZUV4cGlyZXMgPSBEYXRlLm5vdygpICsgKDEwMDAgKiA2MCAqIDE1KTtcbiAgICAgIGNvbnN0IGNvZGUgPSBNYXRoLmZsb29yKDEwMDAwMCArIChNYXRoLnJhbmRvbSgpICogOTAwMDAwKSk7XG4gICAgICBsZXQgdXBkYXRlO1xuXG4gICAgICBpZihlbWFpbCAmJiB2ZXJpZmllZEVtYWlsKSB7XG4gICAgICAgIHNlbmRFbWFpbCh7XG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBodG1sOiBgPHA+WW91ciBwYXNzd29yZCByZXNldCBjb2RlIGlzIDxzdHJvbmc+JHtjb2RlfTwvc3Ryb25nPi48L3A+YCxcbiAgICAgICAgICBzdWJqZWN0OiBgJHtnZXRBcHBUaXRsZShnZXRBcHBOYW1lKGNvbnRleHQpKX0gcGFzc3dvcmQgcmVzZXQgY29kZWAsXG4gICAgICAgICAgdGV4dDogYFlvdXIgY29kZSBpcyAke2NvZGV9YCxcbiAgICAgICAgICB1c2VyOiBleGlzdGluZ1VzZXJcbiAgICAgICAgfSk7XG4gICAgICAgIHVwZGF0ZSA9IHt2ZXJpZmllZEVtYWlsQ29kZTogY29kZSwgdmVyaWZpZWRFbWFpbEV4cGlyZXM6IGNvZGVFeHBpcmVzfTtcbiAgICAgIH1cblxuICAgICAgaWYocGhvbmUgJiYgdmVyaWZpZWRQaG9uZSkge1xuICAgICAgICBzZW5kU21zKHtcbiAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgIHRleHQ6IGBZb3VyIGNvZGUgaXMgJHtjb2RlfWBcbiAgICAgICAgfSk7XG4gICAgICAgIHVwZGF0ZSA9IHt2ZXJpZmllZFBob25lRXhwaXJlczogY29kZUV4cGlyZXMsIHZlcmlmaWVkU21zQ29kZTogY29kZX07XG4gICAgICB9XG5cbiAgICAgIGlmKHVwZGF0ZT8udmVyaWZpZWRFbWFpbENvZGUgfHwgdXBkYXRlPy52ZXJpZmllZFNtc0NvZGUpIHtcbiAgICAgICAgY29uc3QgdXNlckRvY0lkID0gZ2V0RG9jSWQoQ09MTEVDVElPTlMuVVNFUlMsIGV4aXN0aW5nVXNlcik7XG5cbiAgICAgICAgYXdhaXQgdXBkYXRlSXRlbTxVc2VyVHlwZT4oY29udGV4dCwgQ09MTEVDVElPTlMuVVNFUlMsIHVzZXJEb2NJZCwgdXBkYXRlKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7ZW1haWwsIHBob25lLCB1c2VybmFtZX0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHJlc2V0UGFzc3dvcmQgPSBhc3luYyAoXG4gIGNvbnRleHQ6IEFwaUNvbnRleHQsXG4gIHtjb2RlLCB1c2VyfToge2NvZGU6IG51bWJlcjsgdXNlcjogVXNlclR5cGU7fVxuKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdyZXNldFBhc3N3b3JkJztcbiAgY29uc3Qge2VtYWlsLCBwYXNzd29yZCwgcGhvbmUsIHVzZXJuYW1lfSA9IHBhcnNlVXNlcih1c2VyKTtcbiAgY29uc3QgZm9ybWF0UGFzc3dvcmQgPSBwYXJzZVBhc3N3b3JkKHBhc3N3b3JkKTtcblxuICB0cnkge1xuICAgIGNvbnN0IGV4aXN0aW5nVXNlciA9IGF3YWl0IGdldFVzZXJCeUF0dHJpYnV0ZXMoY29udGV4dCwge2VtYWlsLCBwaG9uZSwgdXNlcm5hbWV9KTtcblxuICAgIGlmKGV4aXN0aW5nVXNlcikge1xuICAgICAgY29uc3Qge1xuICAgICAgICBzYWx0LFxuICAgICAgICB2ZXJpZmllZEVtYWlsQ29kZSxcbiAgICAgICAgdmVyaWZpZWRFbWFpbEV4cGlyZXMgPSAwLFxuICAgICAgICB2ZXJpZmllZFNtc0NvZGUsXG4gICAgICAgIHZlcmlmaWVkUGhvbmVFeHBpcmVzID0gMFxuICAgICAgfSA9IGV4aXN0aW5nVXNlciBhcyBVc2VyVHlwZTtcbiAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICBsZXQgdXBkYXRlO1xuXG4gICAgICBpZihlbWFpbCAmJiBjb2RlID09PSB2ZXJpZmllZEVtYWlsQ29kZSAmJiB2ZXJpZmllZEVtYWlsRXhwaXJlcyA+IG5vdykge1xuICAgICAgICBjb25zdCBwYXNzd29yZCA9IGNyZWF0ZVBhc3N3b3JkKGZvcm1hdFBhc3N3b3JkLCBzYWx0KTtcbiAgICAgICAgdXBkYXRlID0ge3Bhc3N3b3JkfTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYocGhvbmUgJiYgY29kZSA9PT0gdmVyaWZpZWRTbXNDb2RlICYmIHZlcmlmaWVkUGhvbmVFeHBpcmVzID4gbm93KSB7XG4gICAgICAgIGNvbnN0IHBhc3N3b3JkID0gY3JlYXRlUGFzc3dvcmQoZm9ybWF0UGFzc3dvcmQsIHNhbHQpO1xuICAgICAgICB1cGRhdGUgPSB7cGFzc3dvcmR9O1xuICAgICAgfVxuXG4gICAgICBpZih1cGRhdGUpIHtcbiAgICAgICAgY29uc3QgdXNlckRvY0lkID0gZ2V0RG9jSWQoQ09MTEVDVElPTlMuVVNFUlMsIGV4aXN0aW5nVXNlcik7XG5cbiAgICAgICAgYXdhaXQgdXBkYXRlSXRlbTxVc2VyVHlwZT4oY29udGV4dCwgQ09MTEVDVElPTlMuVVNFUlMsIHVzZXJEb2NJZCwgdXBkYXRlKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge3VzZXJuYW1lfSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3Qgc2VuZFZlcmlmaWNhdGlvbkVtYWlsID0gYXN5bmMgKGNvbnRleHQ6IEFwaUNvbnRleHQsIHVzZXI6IFVzZXJUeXBlKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdzZW5kVmVyaWZpY2F0aW9uRW1haWwnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IHtlbWFpbH0gPSBwYXJzZVVzZXIodXNlcik7XG5cbiAgaWYoIWVtYWlsKSB7XG4gICAgbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7ZW1haWx9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU5WQUxJRF9BUkdVTUVOVFNcbiAgICB9LCBjb250ZXh0KTtcblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCB2ZXJpZmllZEVtYWlsQ29kZSA9IE1hdGguZmxvb3IoMTAwMDAwICsgKE1hdGgucmFuZG9tKCkgKiA5MDAwMDApKTtcbiAgICBjb25zdCB1cGRhdGVRdWVyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgICBGT1IgdSBJTiAke3VzZXJzQ29sbGVjdGlvbn1cbiAgICAgICAgRklMVEVSIHUuZW1haWwgPT0gJHtlbWFpbH1cbiAgICAgICAgRklMVEVSIHUudmVyaWZpZWRFbWFpbCAhPSB0cnVlXG4gICAgICAgIEZJTFRFUiAhSEFTKHUsIFwidmVyaWZpZWRFbWFpbEV4cGlyZXNcIikgfHwgdS52ZXJpZmllZEVtYWlsRXhwaXJlcyA8PSAke25vd31cbiAgICAgICAgTElNSVQgMVxuICAgICAgICBVUERBVEUgdSBXSVRIICR7e1xuICAgICAgICAgIHZlcmlmaWVkRW1haWxDb2RlLFxuICAgICAgICAgIHZlcmlmaWVkRW1haWxFeHBpcmVzOiBub3cgKyBWRVJJRklDQVRJT05fRU1BSUxfQ09PTERPV05fTVNcbiAgICAgICAgfX0gSU4gJHt1c2Vyc0NvbGxlY3Rpb259XG4gICAgICAgIFJFVFVSTiBORVdcbiAgICBgO1xuXG4gICAgY29uc3QgY3Vyc29yID0gYXdhaXQgdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeSh1cGRhdGVRdWVyeSk7XG4gICAgY29uc3QgcmF3VXNlciA9IGF3YWl0IGN1cnNvci5uZXh0KCk7XG4gICAgY29uc3QgZm91bmRVc2VyID0gcmF3VXNlciA/IHBhcnNlVXNlcihyYXdVc2VyKSA6IG51bGw7XG5cbiAgICBpZighZm91bmRVc2VyKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IHNlbmRFbWFpbCh7XG4gICAgICBjb250ZXh0LFxuICAgICAgLi4uYnVpbGRWZXJpZmljYXRpb25FbWFpbChjb250ZXh0LCB2ZXJpZmllZEVtYWlsQ29kZSwgdXNlciksXG4gICAgICB1c2VyOiB7XG4gICAgICAgIC4uLmZvdW5kVXNlcixcbiAgICAgICAgdmVyaWZpZWRFbWFpbENvZGVcbiAgICAgIH1cbiAgICB9KTtcbiAgfSBjYXRjaChlcnJvcikge1xuICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7ZW1haWx9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjb25maXJtQ29kZSA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCxcbiAge1xuICAgIGNvZGUsXG4gICAgdHlwZSxcbiAgICB2YWx1ZVxuICB9OiB7XG4gICAgY29kZTogbnVtYmVyO1xuICAgIHR5cGU6ICdzbXMnIHwgJ2VtYWlsJztcbiAgICB2YWx1ZTogc3RyaW5nO1xuICB9XG4pOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2NvbmZpcm1Db2RlJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCBpc1NtcyA9IHR5cGUgPT09ICdzbXMnO1xuICBjb25zdCBmb3JtYXR0ZWRWYWx1ZSA9IGlzU21zID8gcGFyc2VQaG9uZSh2YWx1ZSkgOiBwYXJzZUVtYWlsKHZhbHVlKTtcbiAgY29uc3QgZmlsdGVyQnlUeXBlID0gaXNTbXNcbiAgICA/IGFxbGBGSUxURVIgdS5waG9uZSA9PSAke2Zvcm1hdHRlZFZhbHVlfSAmJiB1LnZlcmlmaWVkU21zQ29kZSA9PSAke2NvZGV9YFxuICAgIDogYXFsYEZJTFRFUiB1LmVtYWlsID09ICR7Zm9ybWF0dGVkVmFsdWV9ICYmIHUudmVyaWZpZWRFbWFpbENvZGUgPT0gJHtjb2RlfWA7XG4gIGNvbnN0IGFxbFF1ZXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgdSBJTiAke3VzZXJzQ29sbGVjdGlvbn1cbiAgICAgICR7ZmlsdGVyQnlUeXBlfVxuICAgICAgTElNSVQgMVxuICAgICAgUkVUVVJOIHVcbiAgYDtcblxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFF1ZXJ5KVxuICAgICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAgIC50aGVuKCh1c2VyKSA9PiB7XG4gICAgICAgIGlmKHVzZXIpIHtcbiAgICAgICAgICBjb25zdCB1cGRhdGVkVXNlciA9IGlzU21zXG4gICAgICAgICAgICA/IHt2ZXJpZmllZFBob25lOiB0cnVlLCB2ZXJpZmllZFNtc0NvZGU6IDB9XG4gICAgICAgICAgICA6IHt2ZXJpZmllZEVtYWlsOiB0cnVlLCB2ZXJpZmllZEVtYWlsQ29kZTogMH07XG4gICAgICAgICAgY29uc3QgYXFsUXVlcnk6IEFxbFF1ZXJ5ID0gYXFsYFVQREFURSAke3VzZXIuX2tleX0gV0lUSCAke3VwZGF0ZWRVc2VyfSBJTiB1c2Vyc2A7XG5cbiAgICAgICAgICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRdWVyeSlcbiAgICAgICAgICAgIC50aGVuKCgpID0+IHRydWUpXG4gICAgICAgICAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgICAgICBsb2dFcnJvcih7XG4gICAgICAgICAgICAgICAgYWN0aW9uLFxuICAgICAgICAgICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICAgICAgICAgIHBhcmFtczoge2NvZGUsIHR5cGUsIHZhbHVlOiBmb3JtYXR0ZWRWYWx1ZX0sXG4gICAgICAgICAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgICAgICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuXG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSk7XG4gIH0gY2F0Y2goZXJyb3IpIHtcbiAgICBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge2NvZGUsIHR5cGUsIHZhbHVlOiBmb3JtYXR0ZWRWYWx1ZX0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGRlbGV0ZVVzZXIgPSAoY29udGV4dDogQXBpQ29udGV4dCwgdXNlcjogVXNlclR5cGUpOiBQcm9taXNlPFVzZXJUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdkZWxldGVVc2VyJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZX0gPSBjb250ZXh0O1xuICBjb25zdCB7aWR9ID0gcGFyc2VVc2VyKHVzZXIpO1xuXG4gIGNvbnN0IGFxbFF1ZXJ5OiBBcWxRdWVyeSA9IGFxbGBMRVQgdSA9IERPQ1VNRU5UKCR7aWR9KVxuICAgIFJFTU9WRSB1IElOIHVzZXJzXG4gICAgUkVUVVJOIE9MRGA7XG5cbiAgY29uc3Qgc3RyaXBlQ2xpZW50ID0gZ2V0U3RyaXBlQ2xpZW50KCk7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoYXFsUXVlcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigodXNlcikgPT4gcGFyc2VVc2VyU2FmZSh1c2VyKSlcbiAgICAudGhlbigoZGVsZXRlZFVzZXIpID0+IHN0cmlwZUNsaWVudC5jdXN0b21lcnMuZGVsKGRlbGV0ZWRVc2VyPy5zdHJpcGVDdXN0b21lcklkKVxuICAgICAgLnRoZW4oKCkgPT4gc3RyaXBlQ2xpZW50LmFjY291bnRzLmRlbChkZWxldGVkVXNlcj8uc3RyaXBlQWNjb3VudElkKSlcbiAgICAgIC50aGVuKCgpID0+IGRlbGV0ZWRVc2VyIGFzIFVzZXJUeXBlKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4gbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtpZH0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG59O1xuXG5leHBvcnQgY29uc3QgZGVhY3RpdmF0ZVVzZXIgPSAoY29udGV4dDogQXBpQ29udGV4dCwgdXNlcjogVXNlclR5cGUpOiBQcm9taXNlPFVzZXJUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdkZWFjdGl2YXRlVXNlcic7XG4gIGNvbnN0IHtpZH0gPSBwYXJzZVVzZXIodXNlcik7XG4gIGNvbnN0IHVwZGF0ZWQ6IFVzZXJUeXBlID0ge1xuICAgIGFjdGl2ZTogZmFsc2VcbiAgfTtcblxuICByZXR1cm4gdXBkYXRlSXRlbTxVc2VyVHlwZT4oY29udGV4dCwgJ3VzZXJzJywgaWQsIHVwZGF0ZWQpXG4gICAgLnRoZW4oKHVwZGF0ZWRVc2VyKSA9PiBwYXJzZVVzZXJTYWZlKHVwZGF0ZWRVc2VyKSBhcyBVc2VyVHlwZSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtpZH0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VXNlckRpc3BsYXlOYW1lID0gKHVzZXI6IFVzZXJUeXBlKTogc3RyaW5nID0+IHtcbiAgY29uc3Qge2ZpcnN0TmFtZSwgbGFzdE5hbWUsIG5hbWUgPSAnJywgdXNlcm5hbWUgPSAnJ30gPSB1c2VyO1xuICBjb25zdCBmdWxsbmFtZSA9IChbZmlyc3ROYW1lLCBsYXN0TmFtZV0pLmpvaW4oJyAnKS50cmltKCk7XG5cbiAgaWYobmFtZSkge1xuICAgIHJldHVybiBuYW1lO1xuICB9IGVsc2UgaWYoZnVsbG5hbWUgIT09ICcnKSB7XG4gICAgcmV0dXJuIGZ1bGxuYW1lO1xuICB9IGVsc2UgaWYodXNlcm5hbWUpIHtcbiAgICByZXR1cm4gdXNlcm5hbWU7XG4gIH1cblxuICByZXR1cm4gJ1Vua25vd24nO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFNlc3Npb25Vc2VyID0gKGNvbnRleHQ6IEFwaUNvbnRleHQpOiBQcm9taXNlPFVzZXJUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRTZXNzaW9uVXNlcic7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIGZpZWxkcywgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkLCB1c2VybmFtZX0gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRVc2VyT3B0aW9uYWxGaWVsZHMoZmllbGRzKTtcbiAgY29uc3QgZm9ybWF0U2Vzc2lvbklkID0gcGFyc2VBcmFuZ29JZChgdXNlcnMvJHtzZXNzaW9uSWR9YCk7XG5cbiAgY29uc3QgYXFsUXVlcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgIExFVCB1ID0gRE9DVU1FTlQoJHtmb3JtYXRTZXNzaW9uSWR9KVxuICAgICR7bGl0ZXJhbChzZWxlY3RRdWVyaWVzLmpvaW4oJ1xcbicpKX1cbiAgICBSRVRVUk4gJHtzZWxlY3RPYmplY3RzLmxlbmd0aCA+IDAgPyBsaXRlcmFsKGBNRVJHRSh1LCB7JHtzZWxlY3RPYmplY3RzLmpvaW4oJywgJyl9fSlgKSA6IGxpdGVyYWwoJ3UnKX1cbiAgYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRdWVyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IubmV4dCgpKVxuICAgIC50aGVuKCh1c2VyKSA9PiBwYXJzZVVzZXJTYWZlKHVzZXIpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICB0aHJvdyBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHBhcmFtczoge3VzZXJJZDogc2Vzc2lvbklkLCB1c2VybmFtZX0sXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG4gICAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VXNlckJ5SWQgPSAoY29udGV4dDogQXBpQ29udGV4dCwgdXNlcjogVXNlclR5cGUpOiBQcm9taXNlPFVzZXJUeXBlPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRVc2VyQnlJZCc7XG4gIGNvbnN0IHtlbWFpbCwgaWQsIHBob25lLCB1c2VySWQsIHVzZXJuYW1lfSA9IHBhcnNlVXNlcih1c2VyKTtcbiAgY29uc3Qge2ZpZWxkc30gPSBjb250ZXh0O1xuICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRVc2VyT3B0aW9uYWxGaWVsZHMoZmllbGRzKTtcblxuICBpZihpZCkge1xuICAgIHJldHVybiBnZXRJdGVtQnk8VXNlclR5cGU+KGNvbnRleHQsICd1c2VycycsIHtcbiAgICAgIGxvZ2ljOiAnQU5EJyxcbiAgICAgIGNvbmRpdGlvbnM6IFtcbiAgICAgICAge2ZpZWxkOiAnX2lkJywgb3BlcmF0b3I6ICc9PScsIHZhbHVlOiBpZH0sXG4gICAgICAgIHtmaWVsZDogJ2FjdGl2ZScsIG9wZXJhdG9yOiAnIT0nLCB2YWx1ZTogZmFsc2V9XG4gICAgICBdXG4gICAgfSBhcyBhbnksIHtcbiAgICAgIGN1c3RvbVF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXMsXG4gICAgICBjdXN0b21PYmplY3RzOiBzZWxlY3RPYmplY3RzXG4gICAgfSlcbiAgICAgIC50aGVuKChyZXN1bHQpID0+IHBhcnNlVXNlclNhZmUocmVzdWx0KSBhcyBVc2VyVHlwZSlcbiAgICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHBhcmFtczoge2lkLCB1c2VySWQsIHVzZXJuYW1lfSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KSk7XG4gIH1cblxuICBjb25zdCBmaWx0ZXJzID0gYnVpbGRVc2VyQXR0cmlidXRlRmlsdGVycyh7ZW1haWwsIHBob25lLCB1c2VySWQsIHVzZXJuYW1lfSwge2FjdGl2ZTogdHJ1ZX0pO1xuXG4gIGlmKGZpbHRlcnMuY29uZGl0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwgYXMgdW5rbm93biBhcyBVc2VyVHlwZSk7XG4gIH1cblxuICByZXR1cm4gZ2V0SXRlbUJ5PFVzZXJUeXBlPihjb250ZXh0LCAndXNlcnMnLCBmaWx0ZXJzLCB7XG4gICAgY3VzdG9tUXVlcmllczogc2VsZWN0UXVlcmllcyxcbiAgICBjdXN0b21PYmplY3RzOiBzZWxlY3RPYmplY3RzXG4gIH0pXG4gICAgLnRoZW4oKHJlc3VsdCkgPT4gcGFyc2VVc2VyU2FmZShyZXN1bHQpIGFzIFVzZXJUeXBlKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiBsb2dFcnJvcih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge2lkLCB1c2VySWQsIHVzZXJuYW1lfSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRVc2VyTGlzdCA9IChjb250ZXh0OiBBcGlDb250ZXh0LCBvcHRpb25zPzogVXNlck9wdGlvbnMpOiBQcm9taXNlPFVzZXJUeXBlW10+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ2dldFVzZXJMaXN0JztcbiAgY29uc3Qge2ZpZWxkc30gPSBjb250ZXh0O1xuICBjb25zdCB7bGltaXQsIHVzZXJuYW1lfSA9IHBhcnNlVXNlck9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldFVzZXJPcHRpb25hbEZpZWxkcyhmaWVsZHMpO1xuICBjb25zdCBjb25kaXRpb25zOiBhbnlbXSA9IFtcbiAgICB7ZmllbGQ6ICdhY3RpdmUnLCBvcGVyYXRvcjogJyE9JywgdmFsdWU6IGZhbHNlfVxuICBdO1xuXG4gIGlmKHVzZXJuYW1lKSB7XG4gICAgY29uZGl0aW9ucy5wdXNoKHtmaWVsZDogJ3VzZXJuYW1lJywgb3BlcmF0b3I6ICdDT05UQUlOUycsIHZhbHVlOiBwYXJzZVVzZXJuYW1lKHVzZXJuYW1lKSwgY2FzZVNlbnNpdGl2ZTogZmFsc2V9KTtcbiAgfVxuXG4gIHJldHVybiBnZXRMaXN0Qnk8VXNlclR5cGU+KGNvbnRleHQsICd1c2VycycsIHtcbiAgICBsb2dpYzogJ0FORCcsXG4gICAgY29uZGl0aW9uc1xuICB9IGFzIGFueSwge1xuICAgIHNvcnQ6IFt7ZmllbGQ6ICd1c2VybmFtZScsIGRpcmVjdGlvbjogJ0FTQyd9XSxcbiAgICBsaW1pdDoge2Zyb206IGxpbWl0LnN0YXJ0LCB0bzogbGltaXQuc3RhcnQgKyBsaW1pdC5udW19LFxuICAgIGN1c3RvbVF1ZXJpZXM6IHNlbGVjdFF1ZXJpZXMsXG4gICAgY3VzdG9tT2JqZWN0czogc2VsZWN0T2JqZWN0c1xuICB9KVxuICAgIC50aGVuKChyZXN1bHQpID0+IHBhcnNlVXNlckxpc3QocmVzdWx0KSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuXG4gICAgICByZXR1cm4gW10gYXMgVXNlclR5cGVbXTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRVc2VyTGlzdEJ5UmVhY3Rpb25zID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB7cmVhY3Rpb25zID0gW10sIHVzZXJuYW1lfToge3JlYWN0aW9ucz86IHN0cmluZ1tdOyB1c2VybmFtZT86IHN0cmluZ30sXG4gIG9wdGlvbnM/OiBVc2VyT3B0aW9uc1xuKTogUHJvbWlzZTxVc2VyVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRVc2VyTGlzdEJ5UmVhY3Rpb25zJztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgZmllbGRzLCBzZXNzaW9uOiB7dXNlcklkOiBzZXNzaW9uSWR9ID0ge319ID0gY29udGV4dDtcbiAgY29uc3QgZm9ybWF0UmVhY3Rpb25zOiBzdHJpbmdbXSA9IHJlYWN0aW9ucy5tYXAoKHJlYWN0aW9uTmFtZTogc3RyaW5nKSA9PiBwYXJzZUNoYXIocmVhY3Rpb25OYW1lLCAzMikudG9Mb3dlckNhc2UoKSk7XG4gIGNvbnN0IHtsaW1pdH0gPSBwYXJzZVVzZXJPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRVc2VyT3B0aW9uYWxGaWVsZHMoZmllbGRzKTtcbiAgY29uc3QgZm9ybWF0U2Vzc2lvbklkID0gYHVzZXJzLyR7c2Vzc2lvbklkfWA7XG4gIGNvbnN0IGZvcm1hdFVzZXJuYW1lID0gcGFyc2VVc2VybmFtZSh1c2VybmFtZSk7XG4gIGNvbnN0IGZpbHRlckJ5OiBzdHJpbmdbXSA9IFtcbiAgICAndS5hY3RpdmUgIT0gZmFsc2UnLFxuICAgIGBQT1NJVElPTigke0pTT04uc3RyaW5naWZ5KGZvcm1hdFJlYWN0aW9ucyl9LCBMT1dFUihyLm5hbWUpKWBcbiAgXTtcblxuICBpZih1c2VybmFtZSkge1xuICAgIGZpbHRlckJ5LnB1c2goYENPTlRBSU5TKHUudXNlcm5hbWUsIFwiJHtmb3JtYXRVc2VybmFtZX1cIilgKTtcbiAgfVxuXG4gIGNvbnN0IGFxbFF1ZXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgdSwgciBJTiBPVVRCT1VORCAke2Zvcm1hdFNlc3Npb25JZH0gJHtoYXNSZWFjdGlvbkNvbGxlY3Rpb259XG4gICAgICBPUFRJT05TIHt2ZXJ0ZXhDb2xsZWN0aW9uczogJHtDT0xMRUNUSU9OUy5VU0VSU319XG4gICAgICAke2xpdGVyYWwoc2VsZWN0UXVlcmllcy5qb2luKCdcXG4nKSl9XG4gICAgICBGSUxURVIgJHtsaXRlcmFsKGZpbHRlckJ5LmpvaW4oJyAmJiAnKSl9XG4gICAgICAke2xpdGVyYWwobGltaXQuYXFsKX1cbiAgICAgIFJFVFVSTiAke3NlbGVjdE9iamVjdHMubGVuZ3RoID4gMCA/IGxpdGVyYWwoYE1FUkdFKHUsIHske3NlbGVjdE9iamVjdHMuam9pbignLCAnKX19KWApIDogbGl0ZXJhbCgndScpfVxuICBgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFF1ZXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSlcbiAgICAudGhlbigodXNlcnMpID0+IHBhcnNlVXNlckxpc3QodXNlcnMpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG5cbiAgICAgIHJldHVybiBbXSBhcyBVc2VyVHlwZVtdO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFVzZXJMaXN0QnlUYWdzID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB7dGFncywgdXNlcm5hbWV9LFxuICBvcHRpb25zPzogVXNlck9wdGlvbnNcbik6IFByb21pc2U8VXNlclR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0VXNlckxpc3RCeVRhZ3MnO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lLCBmaWVsZHMsIHNlc3Npb246IHt1c2VySWQ6IHNlc3Npb25JZH0gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCBmb3JtYXRUYWdzOiBzdHJpbmdbXSA9IHRhZ3M/LnJlZHVjZSgobGlzdDogc3RyaW5nW10sIHRhZ05hbWU6IHN0cmluZykgPT4ge1xuICAgIGlmKHRhZ05hbWUpIHtcbiAgICAgIGxpc3QucHVzaChwYXJzZUNoYXIodGFnTmFtZSwgMzIpLnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cblxuICAgIHJldHVybiBsaXN0O1xuICB9LCBbXSk7XG4gIGNvbnN0IHtsaW1pdH0gPSBwYXJzZVVzZXJPcHRpb25zKG9wdGlvbnMpO1xuICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRVc2VyT3B0aW9uYWxGaWVsZHMoZmllbGRzKTtcbiAgY29uc3QgZm9ybWF0VXNlcm5hbWUgPSBwYXJzZVVzZXJuYW1lKHVzZXJuYW1lKTtcbiAgY29uc3QgZmlsdGVyQnk6IHN0cmluZ1tdID0gW1xuICAgIGB1Ll9rZXkgIT0gXCIke3Nlc3Npb25JZH1cImAsXG4gICAgJ3UuYWN0aXZlICE9IGZhbHNlJ1xuICBdO1xuXG4gIGlmKHVzZXJuYW1lKSB7XG4gICAgZmlsdGVyQnkucHVzaChgQ09OVEFJTlModS51c2VybmFtZSwgXCIke2Zvcm1hdFVzZXJuYW1lfVwiKWApO1xuICB9XG5cbiAgY29uc3QgYXFsUXVlcnk6IEFxbFF1ZXJ5ID0gYXFsYFxuICAgIEZPUiB0IElOIHRhZ3NcbiAgICAgIEZJTFRFUiBQT1NJVElPTigke2Zvcm1hdFRhZ3N9LCBMT1dFUih0Lm5hbWUpKVxuICAgICAgRk9SIHUsIGl0IElOIE9VVEJPVU5EIHQgJHtpc1RhZ2dlZENvbGxlY3Rpb259XG4gICAgICAgIE9QVElPTlMge2JmczogdHJ1ZSwgdW5pcXVlVmVydGljZXM6IFwiZ2xvYmFsXCIsIHZlcnRleENvbGxlY3Rpb25zOiAke0NPTExFQ1RJT05TLlVTRVJTfX1cbiAgICAgICAgJHtsaXRlcmFsKHNlbGVjdFF1ZXJpZXMuam9pbignXFxuJykpfVxuICAgICAgICBGSUxURVIgJHtsaXRlcmFsKGZpbHRlckJ5LmpvaW4oJyAmJiAnKSl9XG4gICAgICAgICR7bGl0ZXJhbChsaW1pdC5hcWwpfVxuICAgICAgICBSRVRVUk4gRElTVElOQ1QgJHtzZWxlY3RPYmplY3RzLmxlbmd0aCA+IDAgPyBsaXRlcmFsKGBNRVJHRSh1LCB7JHtzZWxlY3RPYmplY3RzLmpvaW4oJywgJyl9fSlgKSA6IGxpdGVyYWwoJ3UnKX1cbiAgYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRdWVyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgLnRoZW4oKHVzZXJzKSA9PiBwYXJzZVVzZXJMaXN0KHVzZXJzKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuXG4gICAgICByZXR1cm4gW10gYXMgVXNlclR5cGVbXTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRVc2VyTGlzdEJ5TGF0ZXN0ID0gKGNvbnRleHQ6IEFwaUNvbnRleHQsIHt1c2VybmFtZX0sIG9wdGlvbnM/OiBVc2VyT3B0aW9ucyk6IFByb21pc2U8VXNlclR5cGVbXT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0VXNlckxpc3RCeUxhdGVzdCc7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIGZpZWxkcywgc2Vzc2lvbjoge3VzZXJJZH0gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCB7bGltaXR9ID0gcGFyc2VVc2VyT3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3QgZmlsdGVyID0gW1xuICAgICd1Ll9pZCAhPSBzZXNzaW9uLl9pZCcsXG4gICAgJ3UuYWN0aXZlICE9IGZhbHNlJ1xuICBdO1xuICBjb25zdCB7b2JqZWN0czogc2VsZWN0T2JqZWN0cywgcXVlcmllczogc2VsZWN0UXVlcmllc30gPSBnZXRVc2VyT3B0aW9uYWxGaWVsZHMoZmllbGRzKTtcblxuICBpZih1c2VybmFtZSkge1xuICAgIGZpbHRlci5wdXNoKGBDT05UQUlOUyh1LnVzZXJuYW1lLCBcIiR7cGFyc2VVc2VybmFtZSh1c2VybmFtZSl9XCIpYCk7XG4gIH1cblxuICAvLyBHZXQgZGF0YSBmcm9tIGRhdGFiYXNlXG4gIGNvbnN0IGFxbFF1ZXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgdSBJTiAke3VzZXJzQ29sbGVjdGlvbn1cbiAgICAgIExFVCBzZXNzaW9uID0gRE9DVU1FTlQoJHtgdXNlcnMvJHt1c2VySWR9YH0pXG4gICAgICBGSUxURVIgJHtsaXRlcmFsKGZpbHRlci5qb2luKCcgJiYgJykpfVxuICAgICAgJHtsaXRlcmFsKHNlbGVjdFF1ZXJpZXMuam9pbignXFxuJykpfVxuICAgICAgTEVUIGRpc3RhbmNlID0gRElTVEFOQ0UodS5sYXRpdHVkZSB8fCAwLCB1LmxvbmdpdHVkZSB8fCAwLCBzZXNzaW9uLmxhdGl0dWRlIHx8IDAsIHNlc3Npb24ubG9uZ2l0dWRlIHx8IDApXG4gICAgICAke2xpdGVyYWwobGltaXQuYXFsKX1cbiAgICAgIFNPUlQgZGlzdGFuY2UgQVNDLCB1LmFkZGVkIERFU0NcbiAgICAgIFJFVFVSTiAke3NlbGVjdE9iamVjdHMubGVuZ3RoID4gMCA/IGxpdGVyYWwoYE1FUkdFKHUsIHske3NlbGVjdE9iamVjdHMuam9pbignLCAnKX19KWApIDogbGl0ZXJhbCgndScpfVxuICBgO1xuXG4gIHJldHVybiB1c2VEYihkYXRhYmFzZU5hbWUpLnF1ZXJ5KGFxbFF1ZXJ5KVxuICAgIC50aGVuKChjdXJzb3IpID0+IGN1cnNvci5hbGwoKSlcbiAgICAudGhlbigodXNlcnMpID0+IHBhcnNlVXNlckxpc3QodXNlcnMpKVxuICAgIC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG4gICAgICBsb2dFcnJvcih7XG4gICAgICAgIGFjdGlvbixcbiAgICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgICB9LCBlcnJvciwgY29udGV4dCk7XG5cbiAgICAgIHJldHVybiBbXSBhcyBVc2VyVHlwZVtdO1xuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFVzZXJMaXN0QnlDb25uZWN0aW9uID0gKFxuICBjb250ZXh0OiBBcGlDb250ZXh0LFxuICB7dXNlcklkfTogVXNlclR5cGUsXG4gIG9wdGlvbnM/OiBVc2VyT3B0aW9uc1xuKTogUHJvbWlzZTxVc2VyVHlwZVtdPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRVc2VyTGlzdEJ5Q29ubmVjdGlvbic7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWUsIGZpZWxkc30gPSBjb250ZXh0O1xuICBjb25zdCB7bGltaXQsIHVzZXJuYW1lfSA9IHBhcnNlVXNlck9wdGlvbnMob3B0aW9ucyk7XG4gIGNvbnN0IHtvYmplY3RzOiBzZWxlY3RPYmplY3RzLCBxdWVyaWVzOiBzZWxlY3RRdWVyaWVzfSA9IGdldFVzZXJPcHRpb25hbEZpZWxkcyhmaWVsZHMpO1xuICBjb25zdCBmb3JtYXRVc2VySWQgPSBwYXJzZUFyYW5nb0lkKGB1c2Vycy8ke3VzZXJJZH1gKTtcbiAgY29uc3QgZmlsdGVyQnk6IHN0cmluZ1tdID0gW1xuICAgICd1LmFjdGl2ZSAhPSBmYWxzZSdcbiAgXTtcblxuICBpZih1c2VybmFtZSkge1xuICAgIGZpbHRlckJ5LnB1c2goYENPTlRBSU5TKHUudXNlcm5hbWUsIFwiJHtwYXJzZVVzZXJuYW1lKHVzZXJuYW1lKX1cIilgKTtcbiAgfVxuXG4gIGNvbnN0IGFxbFF1ZXJ5OiBBcWxRdWVyeSA9IGFxbGBcbiAgICBGT1IgY3UgSU4gJHt1c2Vyc0NvbGxlY3Rpb259XG4gICAgICBMRVQgc2Vzc2lvbiA9IERPQ1VNRU5UKCR7Zm9ybWF0VXNlcklkfSlcbiAgICAgIEZPUiB1LCBjb25uZWN0aW9uIElOIE9VVEJPVU5EIGN1ICR7aGFzQ29ubmVjdGlvbkNvbGxlY3Rpb259XG4gICAgICAgIE9QVElPTlMge2JmczogdHJ1ZSwgdW5pcXVlVmVydGljZXM6IFwiZ2xvYmFsXCIsIHZlcnRleENvbGxlY3Rpb25zOiAke0NPTExFQ1RJT05TLlVTRVJTfX1cbiAgICAgICAgJHtsaXRlcmFsKHNlbGVjdFF1ZXJpZXMuam9pbignXFxuJykpfVxuICAgICAgICBGSUxURVIgJHtsaXRlcmFsKGZpbHRlckJ5LmpvaW4oJyAmJiAnKSl9XG4gICAgICAgICR7bGl0ZXJhbChsaW1pdC5hcWwpfVxuICAgICAgICBSRVRVUk4gRElTVElOQ1QgJHtzZWxlY3RPYmplY3RzLmxlbmd0aCA+IDAgPyBsaXRlcmFsKGBNRVJHRSh1LCB7JHtzZWxlY3RPYmplY3RzLmpvaW4oJywgJyl9fSlgKSA6IGxpdGVyYWwoJ3UnKX1cbiAgYDtcblxuICByZXR1cm4gdXNlRGIoZGF0YWJhc2VOYW1lKS5xdWVyeShhcWxRdWVyeSlcbiAgICAudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpXG4gICAgLnRoZW4oKHVzZXJzKSA9PiBwYXJzZVVzZXJMaXN0KHVzZXJzKSlcbiAgICAuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgbG9nRXJyb3Ioe1xuICAgICAgICBhY3Rpb24sXG4gICAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgICB2YWx1ZTogRXJyb3JUeXBlcy5EQVRBQkFTRV9FUlJPUlxuICAgICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuXG4gICAgICByZXR1cm4gW10gYXMgVXNlclR5cGVbXTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCByZWZyZXNoU2Vzc2lvbiA9ICh7ZXhwaXJlcywgdG9rZW59KTogU2Vzc2lvblRva2VuIHwgU2Vzc2lvbkVycm9yID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCB7Zmlyc3ROYW1lLCBsYXN0TmFtZSwgcGVyc29uYUlkLCB1c2VySWQsIHVzZXJuYW1lLCB1c2VyQWNjZXNzfSA9IGdldFNlc3Npb24odG9rZW4pO1xuICAgIHJldHVybiBjcmVhdGVVc2VyVG9rZW4odXNlcklkLCBwZXJzb25hSWQgfHwgJycsIHVzZXJuYW1lLCB1c2VyQWNjZXNzLCBleHBpcmVzLCB7Zmlyc3ROYW1lLCBsYXN0TmFtZX0pO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgdGhyb3cgZXJyb3I7IC8vIFJlLXRocm93IHRoZSBlcnJvciBmcm9tIGdldFNlc3Npb25cbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IHNpZ25JbiA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0LCB7ZXhwaXJlcywgdXNlcn0pOiBQcm9taXNlPFNlc3Npb25Ub2tlbiB8IG51bGw+ID0+IHtcbiAgY29uc3QgYWN0aW9uID0gJ3NpZ25Jbic7XG4gIGNvbnN0IHtkYXRhYmFzZU5hbWV9ID0gY29udGV4dDtcbiAgY29uc3Qge2VtYWlsLCBwYXNzd29yZCwgcGhvbmUsIHVzZXJuYW1lfSA9IHVzZXIgfHwge307XG4gIGNvbnN0IGZvcm1hdEVtYWlsID0gcGFyc2VFbWFpbChlbWFpbCk7XG4gIGNvbnN0IGZvcm1hdFVzZXJuYW1lID0gcGFyc2VVc2VybmFtZSh1c2VybmFtZSk7XG4gIGNvbnN0IGZvcm1hdFBhc3N3b3JkID0gcGFyc2VQYXNzd29yZChwYXNzd29yZCk7XG4gIGNvbnN0IGZvcm1hdFBob25lID0gcGFyc2VQaG9uZShwaG9uZSk7XG4gIGNvbnN0IGZvcm1hdEV4cGlyZXMgPSBwYXJzZU51bShleHBpcmVzKSB8fCAxNTtcblxuICBpZihmb3JtYXRVc2VybmFtZSA9PT0gQURNSU5fVVNFUk5BTUUpIHtcbiAgICBpZighaXNBZG1pblBhc3N3b3JkKHBhc3N3b3JkKSkge1xuICAgICAgdGhyb3cgbG9nRXhjZXB0aW9uKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgcGFyYW1zOiB7dXNlcm5hbWU6IGZvcm1hdFVzZXJuYW1lfSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU5WQUxJRF9BVVRIRU5USUNBVElPTlxuICAgICAgfSwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNyZWF0ZVVzZXJUb2tlbihBRE1JTl9VU0VSTkFNRSwgJycsIEFETUlOX1VTRVJOQU1FLCBVc2VyQWNjZXNzLkFETUlOLCBmb3JtYXRFeHBpcmVzLCB7Zmlyc3ROYW1lOiAnU3VwZXInLCBsYXN0TmFtZTogJ0FkbWluJ30pO1xuICB9XG5cbiAgaWYoKCFmb3JtYXRVc2VybmFtZSAmJiAhZm9ybWF0RW1haWwgJiYgIWZvcm1hdFBob25lKSB8fCAhZm9ybWF0UGFzc3dvcmQpIHtcbiAgICB0aHJvdyBsb2dFeGNlcHRpb24oe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtlbWFpbCwgZm9ybWF0RW1haWwsIGZvcm1hdFBob25lLCBmb3JtYXRVc2VybmFtZSwgcGhvbmUsIHVzZXJuYW1lfSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklOVkFMSURfQVJHVU1FTlRTXG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICBjb25zdCBmaWx0ZXJzID0gYnVpbGRVc2VyQXR0cmlidXRlRmlsdGVycyh7XG4gICAgZW1haWw6IGZvcm1hdEVtYWlsLFxuICAgIHBob25lOiBmb3JtYXRQaG9uZSxcbiAgICB1c2VybmFtZTogZm9ybWF0VXNlcm5hbWVcbiAgfSk7XG4gIGNvbnN0IGZpbHRlckNsYXVzZSA9IGJ1aWxkRmlsdGVyQ2xhdXNlKGZpbHRlcnMsICd1Jyk7XG5cbiAgY29uc3QgY2hlY2tRdWVyeTogQXFsUXVlcnkgPSBhcWxgXG4gICAgRk9SIHUgSU4gJHt1c2Vyc0NvbGxlY3Rpb259XG4gICAgICBGSUxURVIgJHtsaXRlcmFsKGZpbHRlckNsYXVzZSl9XG4gICAgICBSRVRVUk4gdVxuICBgO1xuXG4gIGxldCBjaGVja1VzZXJzOiBVc2VyVHlwZVtdO1xuXG4gIHRyeSB7XG4gICAgY2hlY2tVc2VycyA9IGF3YWl0IHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoY2hlY2tRdWVyeSkudGhlbigoY3Vyc29yKSA9PiBjdXJzb3IuYWxsKCkpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHtlbWFpbCwgcGhvbmUsIHVzZXJuYW1lfSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICB9XG5cbiAgY29uc3QgY2hlY2tVc2VyID0gY2hlY2tVc2Vycy5maW5kKCh1c2VySXRlbSA9IHt9KSA9PiB7XG4gICAgY29uc3Qge3Bhc3N3b3JkOiB2YWxpZFBhc3N3b3JkLCBzYWx0fSA9IHVzZXJJdGVtIGFzIFVzZXJUeXBlO1xuICAgIHJldHVybiBCb29sZWFuKHZhbGlkUGFzc3dvcmQgJiYgc2FsdCAmJiB2YWxpZFBhc3N3b3JkID09PSBjcmVhdGVQYXNzd29yZChmb3JtYXRQYXNzd29yZCwgc2FsdCkpO1xuICB9KTtcblxuICBpZighY2hlY2tVc2VyKSB7XG4gICAgdGhyb3cgbG9nRXhjZXB0aW9uKHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGNhdGVnb3J5OiBldmVudENhdGVnb3J5LFxuICAgICAgcGFyYW1zOiB7ZW1haWwsIHBob25lLCB1c2VybmFtZX0sXG4gICAgICB2YWx1ZTogRXJyb3JUeXBlcy5JTlZBTElEX0FVVEhFTlRJQ0FUSU9OXG4gICAgfSwgY29udGV4dCk7XG4gIH1cblxuICBpZihjaGVja1VzZXIuYWN0aXZlID09PSBmYWxzZSkge1xuICAgIHRocm93IGxvZ0V4Y2VwdGlvbih7XG4gICAgICBhY3Rpb24sXG4gICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgIHBhcmFtczoge2VtYWlsLCBwaG9uZSwgdXNlcm5hbWV9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuSU5WQUxJRF9BVVRIRU5USUNBVElPTlxuICAgIH0sIGNvbnRleHQpO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIF9rZXk6IHVzZXJJZCxcbiAgICBmaXJzdE5hbWUsXG4gICAgbGFzdE5hbWUsXG4gICAgcGVyc29uYUlkLFxuICAgIHVzZXJBY2Nlc3MsXG4gICAgdXNlcm5hbWU6IGNoZWNrVXNlcm5hbWVcbiAgfSA9IGNoZWNrVXNlciBhcyBVc2VyVHlwZTtcblxuICB0cnkge1xuICAgIGNvbnN0IHRva2VuID0gY3JlYXRlVXNlclRva2VuKHVzZXJJZCB8fCAnJywgcGVyc29uYUlkIHx8ICcnLCBjaGVja1VzZXJuYW1lIHx8ICcnLCB1c2VyQWNjZXNzLCBmb3JtYXRFeHBpcmVzLCB7Zmlyc3ROYW1lLCBsYXN0TmFtZX0pO1xuXG4gICAgcmV0dXJuIHRva2VuO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgdGhyb3cgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHt1c2VySWQsIHVzZXJuYW1lfSxcbiAgICAgIHZhbHVlOiBFcnJvclR5cGVzLkRBVEFCQVNFX0VSUk9SXG4gICAgfSwgZXJyb3IsIGNvbnRleHQpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3Qgc2lnbk91dCA9IGFzeW5jIChjb250ZXh0OiBBcGlDb250ZXh0KTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdzaWduT3V0JztcbiAgY29uc3Qge2RhdGFiYXNlTmFtZSwgc2Vzc2lvbjoge3VzZXJJZDogc2Vzc2lvbklkLCB1c2VybmFtZX0gPSB7fX0gPSBjb250ZXh0O1xuICBjb25zdCB1c2VyRG9jSWQgPSBgdXNlcnMvJHtzZXNzaW9uSWR9YDtcblxuICBjb25zdCB1cGRhdGUgPSB7XG4gICAgbGFzdE9ubGluZTogRGF0ZS5ub3coKSxcbiAgICBzZXNzaW9uSWQ6IG51bGxcbiAgfTtcbiAgY29uc3Qgc2Vzc2lvblF1ZXJ5OiBBcWxRdWVyeSA9IGFxbGBMRVQgdSA9IERPQ1VNRU5UKCR7dXNlckRvY0lkfSlcbiAgICBVUERBVEUgdSBXSVRIICR7dXBkYXRlfSBJTiB1c2Vyc1xuICAgIExJTUlUIDFcbiAgICBSRVRVUk4gTkVXYDtcblxuICB0cnkge1xuICAgIGF3YWl0IHVzZURiKGRhdGFiYXNlTmFtZSkucXVlcnkoc2Vzc2lvblF1ZXJ5KS50aGVuKChjdXJzb3IpID0+IGN1cnNvci5uZXh0KCkpO1xuICB9IGNhdGNoKGVycm9yKSB7XG4gICAgbG9nRXJyb3Ioe1xuICAgICAgYWN0aW9uLFxuICAgICAgY2F0ZWdvcnk6IGV2ZW50Q2F0ZWdvcnksXG4gICAgICBwYXJhbXM6IHt1c2VySWQ6IHNlc3Npb25JZCwgdXNlcm5hbWV9LFxuICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICB9LCBlcnJvciwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBY3RpdmVVc2VyQ291bnQgPSAoY29udGV4dDogQXBpQ29udGV4dCk6IFByb21pc2U8bnVtYmVyPiA9PiB7XG4gIGNvbnN0IGFjdGlvbiA9ICdnZXRBY3RpdmVVc2VyQ291bnQnO1xuXG4gIHJldHVybiBjb3VudEl0ZW1zKGNvbnRleHQsICd1c2VycycsIHtcbiAgICBsb2dpYzogJ0FORCcsXG4gICAgY29uZGl0aW9uczogW3tmaWVsZDogJ2FjdGl2ZScsIG9wZXJhdG9yOiAnPT0nLCB2YWx1ZTogdHJ1ZX1dXG4gIH0gYXMgYW55KVxuICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRVc2VyQnlUb2tlbiA9IChjb250ZXh0OiBBcGlDb250ZXh0LCB0b2tlbjogc3RyaW5nKTogUHJvbWlzZTxVc2VyVHlwZT4gPT4ge1xuICBjb25zdCBhY3Rpb24gPSAnZ2V0VXNlckJ5VG9rZW4nO1xuICBjb25zdCB7ZGF0YWJhc2VOYW1lfSA9IGNvbnRleHQ7XG4gIGNvbnN0IHt1c2VySWR9ID0gZ2V0U2Vzc2lvbih0b2tlbik7XG4gIGNvbnN0IHVzZXJEb2NJZCA9IHBhcnNlQXJhbmdvSWQoYHVzZXJzLyR7dXNlcklkfWApO1xuICBjb25zdCBhcWxRdWVyeTogQXFsUXVlcnkgPSBhcWxgTEVUIHUgPSBET0NVTUVOVChcIiR7dXNlckRvY0lkfVwiKSBSRVRVUk4gdWA7XG5cbiAgcmV0dXJuIHVzZURiKGRhdGFiYXNlTmFtZSlcbiAgICAucXVlcnkoYXFsUXVlcnkpXG4gICAgLnRoZW4oKGN1cnNvcikgPT4gY3Vyc29yLm5leHQoKSlcbiAgICAudGhlbigodXNlcikgPT4ge1xuICAgICAgaWYodXNlcj8uYWN0aXZlID09PSBmYWxzZSkge1xuICAgICAgICB0aHJvdyBsb2dFeGNlcHRpb24oe1xuICAgICAgICAgIGFjdGlvbixcbiAgICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgICBwYXJhbXM6IHt1c2VySWR9LFxuICAgICAgICAgIHZhbHVlOiBFcnJvclR5cGVzLklOVkFMSURfQVVUSEVOVElDQVRJT05cbiAgICAgICAgfSwgY29udGV4dCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwYXJzZVVzZXJTYWZlKHVzZXIpIGFzIFVzZXJUeXBlO1xuICAgIH0pXG4gICAgLmNhdGNoKChlcnJvcjogRXJyb3IpID0+IHtcbiAgICAgIHRocm93IGxvZ0Vycm9yKHtcbiAgICAgICAgYWN0aW9uLFxuICAgICAgICBjYXRlZ29yeTogZXZlbnRDYXRlZ29yeSxcbiAgICAgICAgcGFyYW1zOiB7dXNlcklkfSxcbiAgICAgICAgdmFsdWU6IEVycm9yVHlwZXMuREFUQUJBU0VfRVJST1JcbiAgICAgIH0sIGVycm9yLCBjb250ZXh0KTtcbiAgICB9KTtcbn07XG4iXSwibmFtZXMiOlsicGFyc2VOdW0iLCJjcmVhdGVIYXNoIiwiY3JlYXRlUGFzc3dvcmQiLCJwYXJzZUFyYW5nb0lkIiwicGFyc2VDaGFyIiwicGFyc2VFbWFpbCIsInBhcnNlUGFzc3dvcmQiLCJwYXJzZVBob25lIiwicGFyc2VVc2VybmFtZSIsImFxbCIsImxpdGVyYWwiLCJjcmVhdGVDcnlwdG9IYXNoIiwidGltaW5nU2FmZUVxdWFsIiwiRGF0ZVRpbWUiLCJwYXJzZVVzZXIiLCJwYXJzZVVzZXJTYWZlIiwiQ29uZmlnIiwiQ09MTEVDVElPTlMiLCJFREdFUyIsInZlcmlmeUVtYWlsVGVtcGxhdGUiLCJFcnJvclR5cGVzIiwibG9nRXJyb3IiLCJsb2dFeGNlcHRpb24iLCJidWlsZEZpbHRlckNsYXVzZSIsImJ1aWxkUHJlc2VudEZpbHRlckdyb3VwIiwiZ2V0RG9jSWQiLCJnZXRMaW1pdCIsInNlbGVjdFJlYWN0aW9uQ291bnRCeVR5cGUiLCJ1c2VEYiIsImRldGVjdExhbmd1YWdlIiwiZ2V0U2Vzc2lvbiIsInNldFNlc3Npb24iLCJnZXRTdHJpcGVDbGllbnQiLCJhZGRJdGVtIiwiY291bnRJdGVtcyIsImdldEl0ZW1CeSIsImdldExpc3RCeSIsInVwZGF0ZUl0ZW0iLCJzZW5kRW1haWwiLCJhZGRQZXJzb25hIiwic2VuZFNtcyIsImV2ZW50Q2F0ZWdvcnkiLCJBRE1JTl9VU0VSTkFNRSIsIlZFUklGSUNBVElPTl9FTUFJTF9DT09MRE9XTl9NUyIsInVzZXJzQ29sbGVjdGlvbiIsIlVTRVJTIiwiaGFzUmVhY3Rpb25Db2xsZWN0aW9uIiwiSEFTX1JFQUNUSU9OIiwiaXNUYWdnZWRDb2xsZWN0aW9uIiwiSVNfVEFHR0VEIiwiaGFzQ29ubmVjdGlvbkNvbGxlY3Rpb24iLCJIQVNfQ09OTkVDVElPTiIsImlzQWRtaW5QYXNzd29yZCIsInBhc3N3b3JkIiwiYWRtaW5QYXNzd29yZCIsInByb2Nlc3MiLCJlbnYiLCJBRE1JTl9QQVNTV09SRCIsImFjdHVhbCIsInVwZGF0ZSIsImRpZ2VzdCIsImV4cGVjdGVkIiwiZ2V0QXBwTmFtZSIsImNvbnRleHQiLCJjb25maWciLCJkZXRhaWxzIiwibmFtZSIsImdldCIsImdldEFwcFRpdGxlIiwiYXBwTmFtZSIsInNwbGl0IiwibWFwIiwicGFydCIsInRlc3QiLCJjaGFyQXQiLCJ0b1VwcGVyQ2FzZSIsInNsaWNlIiwiam9pbiIsImJ1aWxkVmVyaWZpY2F0aW9uRW1haWwiLCJ2ZXJpZmllZEVtYWlsQ29kZSIsInVzZXIiLCJhcHBUaXRsZSIsImNvZGUiLCJwYXJzZUVtYWlsVGVtcGxhdGUiLCJ0ZW1wbGF0ZSIsInJlcGxhY2VBbGwiLCJodG1sIiwidmVyaWZpY2F0aW9uRW1haWxUZW1wbGF0ZSIsInN1YmplY3QiLCJ2ZXJpZmljYXRpb25FbWFpbFN1YmplY3QiLCJ0ZXh0IiwidmVyaWZpY2F0aW9uRW1haWxUZXh0IiwiVXNlckFjY2VzcyIsImNyZWF0ZVVzZXJUb2tlbiIsInVzZXJJZCIsInBlcnNvbmFJZCIsInVzZXJuYW1lIiwidXNlckFjY2VzcyIsImV4cGlyZXNJbk1pbnV0ZXMiLCJub3ciLCJsb2NhbCIsInNlc3Npb25FeHBpcmVzIiwicGx1cyIsIm1pbnV0ZXMiLCJpYXQiLCJNYXRoIiwiZmxvb3IiLCJ0b1NlY29uZHMiLCJleHAiLCJ0b2tlbiIsImZpcnN0TmFtZSIsImxhc3ROYW1lIiwiZXhwaXJlcyIsInRvTWlsbGlzIiwiaXNzdWVkIiwicGFyc2VVc2VyTGlzdCIsInVzZXJzIiwicmVkdWNlIiwicmVzdWx0IiwicGFyc2VkVXNlciIsInB1c2giLCJidWlsZFVzZXJBdHRyaWJ1dGVGaWx0ZXJzIiwiZW1haWwiLCJwaG9uZSIsImFjdGl2ZSIsImF0dHJpYnV0ZUZpbHRlcnMiLCJfa2V5IiwibG9naWMiLCJjb25kaXRpb25zIiwibGVuZ3RoIiwiZmllbGQiLCJvcGVyYXRvciIsInZhbHVlIiwiZ2V0VXNlckJ5QXR0cmlidXRlcyIsIm9wdGlvbnMiLCJmaWx0ZXJzIiwiUHJvbWlzZSIsInJlc29sdmUiLCJnZXRVc2VyT3B0aW9uYWxGaWVsZHMiLCJmaWVsZHMiLCJzZWxlY3RzIiwiaW5jbHVkZXMiLCJvYmplY3RzIiwicXVlcmllcyIsInBhcnNlVXNlck9wdGlvbnMiLCJmcm9tIiwidG8iLCJsaW1pdCIsImFkZFVzZXIiLCJhY3Rpb24iLCJsYW5ndWFnZUNvbnRleHQiLCJjb25maXJtIiwiX2NvbmZpcm0iLCJuZXdVc2VyIiwiX2lkIiwiaW5zZXJ0VXNlciIsImhhc1Bhc3N3b3JkIiwiaGFzVXNlcm5hbWUiLCJjYXRlZ29yeSIsInBhcmFtcyIsIklOVkFMSURfQVJHVU1FTlRTIiwiaGFzaElkIiwic2FsdCIsImVuY3J5cHRlZFBhc3N3b3JkIiwiZXhpc3RpbmdVc2VyIiwiaXNDb250YWN0T25seVVzZXIiLCJ0eXBlIiwiQm9vbGVhbiIsInNob3BpZnlDdXN0b21lcklkIiwiRVhJU1RJTkdfSVRFTSIsImVycm9yIiwiREFUQUJBU0VfRVJST1IiLCJwaG9uZUNvdW50cnlDb2RlIiwicmVwbGFjZSIsInN1YnN0cmluZyIsImxvY2FsZSIsInVzZXJQcmVmZXJlbmNlIiwicmFuZG9tIiwidmVyaWZpZWRTbXNDb2RlIiwibWFya2V0aW5nT3B0SW4iLCJtYWlsaW5nTGlzdCIsInRpbWVzdGFtcCIsIkRhdGUiLCJtYXJrZXRpbmdGaWVsZHMiLCJtYXJrZXRpbmdDb25zZW50U291cmNlIiwibWFya2V0aW5nT3B0SW5BdCIsIm1hcmtldGluZ09wdE91dEF0IiwidW5kZWZpbmVkIiwiaW5zZXJ0IiwidmVyaWZpZWRFbWFpbCIsInZlcmlmaWVkUGhvbmUiLCJzYXZlVXNlciIsImV4aXN0aW5nVXNlcklkIiwiX2dlbmVyYXRlZEtleSIsInVwZ3JhZGVGaWVsZHMiLCJ0aGVuIiwic2F2ZWRVc2VyIiwic2F2ZWRVc2VySWQiLCJwZXJzb25hIiwidXBkYXRlZFVzZXIiLCJyZXN1bHRVc2VyIiwicGVyc29uYUVycm9yIiwiY2F0Y2giLCJ1cGRhdGVVc2VyIiwidXBkYXRlRmllbGRzIiwiaWQiLCJkYXRhYmFzZU5hbWUiLCJxdWVyeSIsImN1cnNvciIsIm5leHQiLCJ1cGRhdGVkVXNlclJlc3VsdCIsImZvcmdvdFBhc3N3b3JkIiwiY29kZUV4cGlyZXMiLCJ2ZXJpZmllZEVtYWlsRXhwaXJlcyIsInZlcmlmaWVkUGhvbmVFeHBpcmVzIiwidXNlckRvY0lkIiwicmVzZXRQYXNzd29yZCIsImZvcm1hdFBhc3N3b3JkIiwic2VuZFZlcmlmaWNhdGlvbkVtYWlsIiwidXBkYXRlUXVlcnkiLCJyYXdVc2VyIiwiZm91bmRVc2VyIiwiY29uZmlybUNvZGUiLCJpc1NtcyIsImZvcm1hdHRlZFZhbHVlIiwiZmlsdGVyQnlUeXBlIiwiYXFsUXVlcnkiLCJkZWxldGVVc2VyIiwic3RyaXBlQ2xpZW50IiwiZGVsZXRlZFVzZXIiLCJjdXN0b21lcnMiLCJkZWwiLCJzdHJpcGVDdXN0b21lcklkIiwiYWNjb3VudHMiLCJzdHJpcGVBY2NvdW50SWQiLCJkZWFjdGl2YXRlVXNlciIsInVwZGF0ZWQiLCJnZXRVc2VyRGlzcGxheU5hbWUiLCJmdWxsbmFtZSIsInRyaW0iLCJnZXRTZXNzaW9uVXNlciIsInNlc3Npb24iLCJzZXNzaW9uSWQiLCJzZWxlY3RPYmplY3RzIiwic2VsZWN0UXVlcmllcyIsImZvcm1hdFNlc3Npb25JZCIsImdldFVzZXJCeUlkIiwiY3VzdG9tUXVlcmllcyIsImN1c3RvbU9iamVjdHMiLCJnZXRVc2VyTGlzdCIsImNhc2VTZW5zaXRpdmUiLCJzb3J0IiwiZGlyZWN0aW9uIiwic3RhcnQiLCJudW0iLCJnZXRVc2VyTGlzdEJ5UmVhY3Rpb25zIiwicmVhY3Rpb25zIiwiZm9ybWF0UmVhY3Rpb25zIiwicmVhY3Rpb25OYW1lIiwidG9Mb3dlckNhc2UiLCJmb3JtYXRVc2VybmFtZSIsImZpbHRlckJ5IiwiSlNPTiIsInN0cmluZ2lmeSIsImFsbCIsImdldFVzZXJMaXN0QnlUYWdzIiwidGFncyIsImZvcm1hdFRhZ3MiLCJsaXN0IiwidGFnTmFtZSIsImdldFVzZXJMaXN0QnlMYXRlc3QiLCJmaWx0ZXIiLCJnZXRVc2VyTGlzdEJ5Q29ubmVjdGlvbiIsImZvcm1hdFVzZXJJZCIsInJlZnJlc2hTZXNzaW9uIiwic2lnbkluIiwiZm9ybWF0RW1haWwiLCJmb3JtYXRQaG9uZSIsImZvcm1hdEV4cGlyZXMiLCJJTlZBTElEX0FVVEhFTlRJQ0FUSU9OIiwiZmlsdGVyQ2xhdXNlIiwiY2hlY2tRdWVyeSIsImNoZWNrVXNlcnMiLCJjaGVja1VzZXIiLCJmaW5kIiwidXNlckl0ZW0iLCJ2YWxpZFBhc3N3b3JkIiwiY2hlY2tVc2VybmFtZSIsInNpZ25PdXQiLCJsYXN0T25saW5lIiwic2Vzc2lvblF1ZXJ5IiwiZ2V0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
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { GeminiVideoInput } from '../adapters/geminiGenerationAdapter.js';
|
|
2
|
+
import type { SeedanceReferenceVideoInput, SeedanceVideoInput } from '../adapters/higgsfieldAdapter.js';
|
|
3
|
+
import type { ApiContext } from '../types/auth.types.js';
|
|
4
|
+
export type VideoGenerationInput = (GeminiVideoInput | SeedanceVideoInput | SeedanceReferenceVideoInput) & {
|
|
5
|
+
provider?: string;
|
|
6
|
+
};
|
|
7
|
+
export interface VideoGenerationResult {
|
|
8
|
+
cancelUrl?: string;
|
|
9
|
+
provider: string;
|
|
10
|
+
requestId: string;
|
|
11
|
+
status: 'queued';
|
|
12
|
+
statusUrl: string;
|
|
13
|
+
}
|
|
14
|
+
export interface VideoGenerationConfig {
|
|
15
|
+
geminiKey?: string;
|
|
16
|
+
geminiModel?: string;
|
|
17
|
+
provider?: string;
|
|
18
|
+
}
|
|
19
|
+
/** Generic video submission; providers must be explicitly selected in the input or configuration. */
|
|
20
|
+
export declare const generateVideo: (context: ApiContext, input: VideoGenerationInput, config?: VideoGenerationConfig, webhookUrl?: string) => Promise<VideoGenerationResult>;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Config } from '../config.js';
|
|
2
|
+
import { generateGeminiVideo } from './geminiVideo.js';
|
|
3
|
+
import { generateSeedanceReferenceVideo, generateSeedanceVideo } from './higgsfield.js';
|
|
4
|
+
/** Generic video submission; providers must be explicitly selected in the input or configuration. */ export const generateVideo = async (context, input, config = context.config?.videoGeneration || Config.get('videoGeneration') || {}, webhookUrl)=>{
|
|
5
|
+
const { provider = config.provider, ...options } = input;
|
|
6
|
+
if (!provider) {
|
|
7
|
+
throw new Error('A video generation provider is required.');
|
|
8
|
+
}
|
|
9
|
+
if (provider === 'gemini') {
|
|
10
|
+
return generateGeminiVideo(context, options, {
|
|
11
|
+
key: config.geminiKey,
|
|
12
|
+
model: config.geminiModel
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
if (provider !== 'higgsfield') {
|
|
16
|
+
throw new Error('Unsupported video provider.');
|
|
17
|
+
}
|
|
18
|
+
const mediaOptions = options;
|
|
19
|
+
const references = [
|
|
20
|
+
mediaOptions.imageUrls,
|
|
21
|
+
mediaOptions.audioUrls,
|
|
22
|
+
mediaOptions.videoUrls
|
|
23
|
+
].some((urls)=>Array.isArray(urls) && urls.length > 0);
|
|
24
|
+
const result = references ? await generateSeedanceReferenceVideo(context, options, webhookUrl) : await generateSeedanceVideo(context, options, webhookUrl);
|
|
25
|
+
return {
|
|
26
|
+
...result,
|
|
27
|
+
provider,
|
|
28
|
+
status: 'queued'
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L3JlYWt0b3IvcGFja2FnZXMvcmVha3Rvci9zcmMvYWN0aW9ucy92aWRlb0dlbmVyYXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb25maWd9IGZyb20gJy4uL2NvbmZpZy5qcyc7XG5pbXBvcnQge2dlbmVyYXRlR2VtaW5pVmlkZW99IGZyb20gJy4vZ2VtaW5pVmlkZW8uanMnO1xuaW1wb3J0IHtnZW5lcmF0ZVNlZWRhbmNlUmVmZXJlbmNlVmlkZW8sIGdlbmVyYXRlU2VlZGFuY2VWaWRlb30gZnJvbSAnLi9oaWdnc2ZpZWxkLmpzJztcblxuaW1wb3J0IHR5cGUge0dlbWluaVZpZGVvSW5wdXR9IGZyb20gJy4uL2FkYXB0ZXJzL2dlbWluaUdlbmVyYXRpb25BZGFwdGVyLmpzJztcbmltcG9ydCB0eXBlIHtTZWVkYW5jZVJlZmVyZW5jZVZpZGVvSW5wdXQsIFNlZWRhbmNlVmlkZW9JbnB1dH0gZnJvbSAnLi4vYWRhcHRlcnMvaGlnZ3NmaWVsZEFkYXB0ZXIuanMnO1xuaW1wb3J0IHR5cGUge0FwaUNvbnRleHR9IGZyb20gJy4uL3R5cGVzL2F1dGgudHlwZXMuanMnO1xuXG5leHBvcnQgdHlwZSBWaWRlb0dlbmVyYXRpb25JbnB1dCA9IChHZW1pbmlWaWRlb0lucHV0IHwgU2VlZGFuY2VWaWRlb0lucHV0IHwgU2VlZGFuY2VSZWZlcmVuY2VWaWRlb0lucHV0KSAmIHtcbiAgcHJvdmlkZXI/OiBzdHJpbmc7XG59O1xuZXhwb3J0IGludGVyZmFjZSBWaWRlb0dlbmVyYXRpb25SZXN1bHQge1xuICBjYW5jZWxVcmw/OiBzdHJpbmc7XG4gIHByb3ZpZGVyOiBzdHJpbmc7XG4gIHJlcXVlc3RJZDogc3RyaW5nO1xuICBzdGF0dXM6ICdxdWV1ZWQnO1xuICBzdGF0dXNVcmw6IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgVmlkZW9HZW5lcmF0aW9uQ29uZmlnIHtcbiAgZ2VtaW5pS2V5Pzogc3RyaW5nO1xuICBnZW1pbmlNb2RlbD86IHN0cmluZztcbiAgcHJvdmlkZXI/OiBzdHJpbmc7XG59XG5cbi8qKiBHZW5lcmljIHZpZGVvIHN1Ym1pc3Npb247IHByb3ZpZGVycyBtdXN0IGJlIGV4cGxpY2l0bHkgc2VsZWN0ZWQgaW4gdGhlIGlucHV0IG9yIGNvbmZpZ3VyYXRpb24uICovXG5leHBvcnQgY29uc3QgZ2VuZXJhdGVWaWRlbyA9IGFzeW5jIChcbiAgY29udGV4dDogQXBpQ29udGV4dCwgaW5wdXQ6IFZpZGVvR2VuZXJhdGlvbklucHV0LFxuICBjb25maWc6IFZpZGVvR2VuZXJhdGlvbkNvbmZpZyA9IGNvbnRleHQuY29uZmlnPy52aWRlb0dlbmVyYXRpb24gfHwgQ29uZmlnLmdldCgndmlkZW9HZW5lcmF0aW9uJykgfHwge30sXG4gIHdlYmhvb2tVcmw/OiBzdHJpbmdcbik6IFByb21pc2U8VmlkZW9HZW5lcmF0aW9uUmVzdWx0PiA9PiB7XG4gIGNvbnN0IHtwcm92aWRlciA9IGNvbmZpZy5wcm92aWRlciwgLi4ub3B0aW9uc30gPSBpbnB1dDtcbiAgaWYoIXByb3ZpZGVyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdBIHZpZGVvIGdlbmVyYXRpb24gcHJvdmlkZXIgaXMgcmVxdWlyZWQuJyk7XG4gIH1cbiAgaWYocHJvdmlkZXIgPT09ICdnZW1pbmknKSB7XG4gICAgcmV0dXJuIGdlbmVyYXRlR2VtaW5pVmlkZW8oY29udGV4dCwgb3B0aW9ucyBhcyBHZW1pbmlWaWRlb0lucHV0LCB7XG4gICAgICBrZXk6IGNvbmZpZy5nZW1pbmlLZXksIG1vZGVsOiBjb25maWcuZ2VtaW5pTW9kZWxcbiAgICB9KTtcbiAgfVxuICBpZihwcm92aWRlciAhPT0gJ2hpZ2dzZmllbGQnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCB2aWRlbyBwcm92aWRlci4nKTtcbiAgfVxuICBjb25zdCBtZWRpYU9wdGlvbnMgPSBvcHRpb25zIGFzIFNlZWRhbmNlUmVmZXJlbmNlVmlkZW9JbnB1dDtcbiAgY29uc3QgcmVmZXJlbmNlcyA9IFttZWRpYU9wdGlvbnMuaW1hZ2VVcmxzLCBtZWRpYU9wdGlvbnMuYXVkaW9VcmxzLCBtZWRpYU9wdGlvbnMudmlkZW9VcmxzXVxuICAgIC5zb21lKCh1cmxzKSA9PiBBcnJheS5pc0FycmF5KHVybHMpICYmIHVybHMubGVuZ3RoID4gMCk7XG4gIGNvbnN0IHJlc3VsdCA9IHJlZmVyZW5jZXNcbiAgICA/IGF3YWl0IGdlbmVyYXRlU2VlZGFuY2VSZWZlcmVuY2VWaWRlbyhjb250ZXh0LCBvcHRpb25zIGFzIFNlZWRhbmNlUmVmZXJlbmNlVmlkZW9JbnB1dCwgd2ViaG9va1VybClcbiAgICA6IGF3YWl0IGdlbmVyYXRlU2VlZGFuY2VWaWRlbyhjb250ZXh0LCBvcHRpb25zIGFzIFNlZWRhbmNlVmlkZW9JbnB1dCwgd2ViaG9va1VybCk7XG4gIHJldHVybiB7Li4ucmVzdWx0LCBwcm92aWRlciwgc3RhdHVzOiAncXVldWVkJ307XG59O1xuIl0sIm5hbWVzIjpbIkNvbmZpZyIsImdlbmVyYXRlR2VtaW5pVmlkZW8iLCJnZW5lcmF0ZVNlZWRhbmNlUmVmZXJlbmNlVmlkZW8iLCJnZW5lcmF0ZVNlZWRhbmNlVmlkZW8iLCJnZW5lcmF0ZVZpZGVvIiwiY29udGV4dCIsImlucHV0IiwiY29uZmlnIiwidmlkZW9HZW5lcmF0aW9uIiwiZ2V0Iiwid2ViaG9va1VybCIsInByb3ZpZGVyIiwib3B0aW9ucyIsIkVycm9yIiwia2V5IiwiZ2VtaW5pS2V5IiwibW9kZWwiLCJnZW1pbmlNb2RlbCIsIm1lZGlhT3B0aW9ucyIsInJlZmVyZW5jZXMiLCJpbWFnZVVybHMiLCJhdWRpb1VybHMiLCJ2aWRlb1VybHMiLCJzb21lIiwidXJscyIsIkFycmF5IiwiaXNBcnJheSIsImxlbmd0aCIsInJlc3VsdCIsInN0YXR1cyJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUUEsTUFBTSxRQUFPLGVBQWU7QUFDcEMsU0FBUUMsbUJBQW1CLFFBQU8sbUJBQW1CO0FBQ3JELFNBQVFDLDhCQUE4QixFQUFFQyxxQkFBcUIsUUFBTyxrQkFBa0I7QUFzQnRGLG1HQUFtRyxHQUNuRyxPQUFPLE1BQU1DLGdCQUFnQixPQUMzQkMsU0FBcUJDLE9BQ3JCQyxTQUFnQ0YsUUFBUUUsTUFBTSxFQUFFQyxtQkFBbUJSLE9BQU9TLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLEVBQ3RHQztJQUVBLE1BQU0sRUFBQ0MsV0FBV0osT0FBT0ksUUFBUSxFQUFFLEdBQUdDLFNBQVEsR0FBR047SUFDakQsSUFBRyxDQUFDSyxVQUFVO1FBQ1osTUFBTSxJQUFJRSxNQUFNO0lBQ2xCO0lBQ0EsSUFBR0YsYUFBYSxVQUFVO1FBQ3hCLE9BQU9WLG9CQUFvQkksU0FBU08sU0FBNkI7WUFDL0RFLEtBQUtQLE9BQU9RLFNBQVM7WUFBRUMsT0FBT1QsT0FBT1UsV0FBVztRQUNsRDtJQUNGO0lBQ0EsSUFBR04sYUFBYSxjQUFjO1FBQzVCLE1BQU0sSUFBSUUsTUFBTTtJQUNsQjtJQUNBLE1BQU1LLGVBQWVOO0lBQ3JCLE1BQU1PLGFBQWE7UUFBQ0QsYUFBYUUsU0FBUztRQUFFRixhQUFhRyxTQUFTO1FBQUVILGFBQWFJLFNBQVM7S0FBQyxDQUN4RkMsSUFBSSxDQUFDLENBQUNDLE9BQVNDLE1BQU1DLE9BQU8sQ0FBQ0YsU0FBU0EsS0FBS0csTUFBTSxHQUFHO0lBQ3ZELE1BQU1DLFNBQVNULGFBQ1gsTUFBTWpCLCtCQUErQkcsU0FBU08sU0FBd0NGLGNBQ3RGLE1BQU1QLHNCQUFzQkUsU0FBU08sU0FBK0JGO0lBQ3hFLE9BQU87UUFBQyxHQUFHa0IsTUFBTTtRQUFFakI7UUFBVWtCLFFBQVE7SUFBUTtBQUMvQyxFQUFFIn0=
|